Skip to content

Commit

Permalink
feat(discord): rewrite + make it thread-safe
Browse files Browse the repository at this point in the history
The rewrite was necessary to be able to achieve the system to be thread-safe.
It gave the opportunity to organise how the subsystem works.

This also ensures the subsystem is easy to:
- Implement new features!
- Fix bugs without breaking stuff

- Separated the thread into its own class
- Subsystem manages the communication with the thread
- Re-organized the system
- Fix: disable discord-ipc library logger
  • Loading branch information
iHDeveloper committed Dec 1, 2020
1 parent 02cfc56 commit 84a4b5d
Show file tree
Hide file tree
Showing 5 changed files with 414 additions and 287 deletions.
2 changes: 1 addition & 1 deletion facades/PC/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,5 @@
<logger name="org.terasology" level="${logOverrideLevel:-info}" />
<logger name="org.reflections.Reflections" level="${logOverrideLevel:-error}" />
<logger name="com.snowplowanalytics" level="${logOverrideLevel:-error}" />

<logger name="com.jagrosh.discordipc" level="OFF"/>
</configuration>
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// 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 state;
private OffsetDateTime startTimestamp;
private boolean changed;

/**
* Sets the current party status
*
* @param state The current party status
*/
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;
}

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

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

0 comments on commit 84a4b5d

Please sign in to comment.