Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(discord-rpc): improve the system #4271

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions facades/PC/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,5 @@
<logger name="com.snowplowanalytics" level="${logOverrideLevel:-error}" />
<logger name="io.netty" level="${logOverrideLevel:-warn}" />

<logger name="com.jagrosh.discordipc" level="OFF"/>
</configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
// Copyright 2020 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0

package org.terasology.engine.subsystem.discordrpc;

import java.time.OffsetDateTime;

/**
* A threaded-safe shared buffer used to store information for {@link DiscordRPCThread} to be processed as {@link com.jagrosh.discordipc.entities.RichPresence}
*
* It helps avoiding allocating unnecessary objects for the rich presence.
*/
public final class DiscordRPCBuffer {
private String details;
private String state;
private OffsetDateTime startTimestamp;
private int partySize;
private int partyMax;
private boolean changed;

public DiscordRPCBuffer() {
reset();
}

/**
* Resets the buffer data
*/
public synchronized void reset() {
this.details = null;
this.state = null;
this.startTimestamp = null;
this.changed = true;
this.partySize = -1;
this.partyMax = -1;
}

/**
* Sets the details of the current game
*
* @param details Details about the current game (null for nothing)
*/
public synchronized void setDetails(String details) {
this.details = details;
}

/**
* Gets the details about the current game
*
* @return Detail about the current game
*/
public synchronized String getDetails() {
return details;
}

/**
* Sets the current party status
*
* @param state The current party status (null for nothing)
*/
public synchronized void setState(String state) {
this.state = state;
this.changed = true;
}

/**
* Returns the current party status
*
* @return The current party status
*/
public synchronized String getState() {
return state;
}

/**
* Sets the start of the game
*
* @param startTimestamp The time when that action has start or null to hide it
*/
public synchronized void setStartTimestamp(OffsetDateTime startTimestamp) {
this.startTimestamp = startTimestamp;
this.changed = true;
}

/**
* Returns the start of the game
*
* @return The start of the game
*/
public synchronized OffsetDateTime getStartTimestamp() {
return startTimestamp;
}

/**
* Sets the current party size
*
* @param partySize The current party size
*/
public synchronized void setPartySize(int partySize) {
this.partySize = partySize;
this.changed = true;
}

/**
* Returns the current party size
*
* @return The party size
*/
public synchronized int getPartySize() {
return partySize;
}

/**
* Sets the maximum number of the players in the party
*
* @param partyMax The number of the players
*/
public synchronized void setPartyMax(int partyMax) {
this.partyMax = partyMax;
this.changed = true;
}

/**
* Returns the maximum number of players in the party
*
* @return The maximum number of players in the party
*/
public synchronized int getPartyMax() {
return partyMax;
}

/**
* Check if the buffer has changed
*
* @return if the buffer has changed
*/
public synchronized boolean hasChanged() {
return changed;
}

/**
* Check if the buffer is empty
*
* @return if the buffer is empty
*/
public synchronized boolean isEmpty() {
return this.details == null && this.state == null && this.startTimestamp == null;
}

/**
* Resets the buffer's change state to false
*/
synchronized void resetState() {
this.changed = false;
}
}
Loading