Skip to content

Commit 73a6c34

Browse files
committed
Add comments, Add message's timestamp, Improve RedisManager dummy singleton to be more singleton, Update README.md
1 parent d8d9b8e commit 73a6c34

File tree

13 files changed

+124
-120
lines changed

13 files changed

+124
-120
lines changed

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ This approach however **IS NOT RECOMMENDED** unless you know what you're doing!
175175

176176
```java
177177
import cz.foresttech.forestredis.shared.IForestRedisPlugin;
178+
import cz.foresttech.forestredis.shared.RedisManager;
178179
import org.bukkit.plugin.java.JavaPlugin;
179180

180181
/**
@@ -189,7 +190,7 @@ public class MyExamplePlugin extends JavaPlugin implements IForestRedisPlugin {
189190
load();
190191
// ...
191192
}
192-
193+
193194
@Override
194195
public void onDisable() {
195196
//...
@@ -213,12 +214,16 @@ public class MyExamplePlugin extends JavaPlugin implements IForestRedisPlugin {
213214
);
214215

215216
// Initialize RedisManager instance (singleton)
216-
new RedisManager(this, serverIdentifier, redisConfiguration).setup();
217+
// Since init, use RedisManager#getAPI() to obtain the instance
218+
RedisManager.init(this, serverIdentifier, redisConfiguration);
219+
220+
// Now setup the connection
221+
RedisManager.getAPI().setup(/*channels*/);
217222

218223
// Now you can use #getAPI() call to get singleton instance
219224
RedisManager.getAPI().subscribe("MyChannel1");
220225
}
221-
226+
222227
@Override
223228
public void runAsync(Runnable task) {
224229
// Required so RedisManager can run tasks async

pom.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.example</groupId>
88
<artifactId>ForestRedisAPI</artifactId>
9-
<version>1.0.3</version>
9+
<version>1.0.4</version>
1010

1111
<properties>
1212
<maven.compiler.source>11</maven.compiler.source>
@@ -20,13 +20,15 @@
2020
<filtering>true</filtering>
2121
<includes>
2222
<include>plugin.yml</include>
23+
<include>bungee.yml</include>
2324
</includes>
2425
</resource>
2526
<resource>
2627
<directory>src/main/resources</directory>
2728
<filtering>false</filtering>
2829
<excludes>
2930
<exclude>plugin.yml</exclude>
31+
<exclude>bungee.yml</exclude>
3032
</excludes>
3133
</resource>
3234
</resources>

src/main/java/cz/foresttech/forestredis/bungee/events/RedisMessageReceivedEvent.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public String getMessage() {
4141
}
4242

4343
@Override
44-
@SuppressWarnings("Make sure the recieved message can really be converted to provided type!")
4544
public <T> T getMessageObject(Class<T> objectClass) {
4645
return this.messageTransferObject.parseMessageObject(objectClass);
4746
}
@@ -51,4 +50,9 @@ public boolean isSelfSender() {
5150
return this.messageTransferObject.getSenderIdentifier().equals(RedisManager.getAPI().getServerIdentifier());
5251
}
5352

53+
@Override
54+
public long getTimeStamp() {
55+
return this.messageTransferObject.getTimestamp();
56+
}
57+
5458
}

src/main/java/cz/foresttech/forestredis/shared/IForestRedisPlugin.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ default IConfigurationAdapter getConfigAdapter() {
5757
* Loading RedisManager from config method
5858
*/
5959
default void load() {
60+
// Close if RedisManager is already initialized
6061
if (RedisManager.getAPI() != null) {
6162
RedisManager.getAPI().close();
6263
}
@@ -86,7 +87,7 @@ default void load() {
8687
);
8788

8889
// Initialize RedisManager object
89-
new RedisManager(this, serverIdentifier, redisConfiguration);
90+
RedisManager.init(this, serverIdentifier, redisConfiguration);
9091

9192
// Setup the RedisManager
9293
List<String> channels = configAdapter.getStringList("channels");
@@ -98,4 +99,7 @@ default void load() {
9899
String[] channelsArray = channels.toArray(new String[0]);
99100
RedisManager.getAPI().setup(channelsArray);
100101
}
102+
103+
/*----------------------------------------------------------------------------------------------------------*/
104+
101105
}

src/main/java/cz/foresttech/forestredis/shared/RedisManager.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,14 @@ public class RedisManager {
5959
/*----------------------------------------------------------------------------------------------------------*/
6060

6161
/**
62-
* Constructor method for obtaining {@link RedisManager} instance. Constructor does not subscribe to the channels,
62+
* Constructor method for creating {@link RedisManager} instance. Constructor does not subscribe to the channels,
6363
* it just stores the provided data for the future.
6464
*
6565
* @param plugin Origin plugin which tries to obtain the instance
6666
* @param serverIdentifier Identifier of the server (e.g. 'Bungee01'). Shall be unique to prevent bugs
6767
* @param redisConfiguration {@link RedisConfiguration} object with Redis server credentials
6868
*/
69-
public RedisManager(IForestRedisPlugin plugin, String serverIdentifier, RedisConfiguration redisConfiguration) {
70-
// Initialize singleton instance
71-
api = this;
72-
69+
private RedisManager(IForestRedisPlugin plugin, String serverIdentifier, RedisConfiguration redisConfiguration) {
7370
this.plugin = plugin;
7471
this.closing = false;
7572

@@ -203,7 +200,7 @@ public boolean subscribe(String... channels) {
203200
* @see #publishMessage(String, String)
204201
*/
205202
public boolean publishObject(String targetChannel, Object objectToPublish) {
206-
MessageTransferObject messageTransferObject = MessageTransferObject.wrap(this.serverIdentifier, objectToPublish);
203+
MessageTransferObject messageTransferObject = MessageTransferObject.wrap(this.serverIdentifier, objectToPublish, System.currentTimeMillis());
207204
return this.executePublish(targetChannel, messageTransferObject);
208205
}
209206

@@ -219,7 +216,7 @@ public boolean publishObject(String targetChannel, Object objectToPublish) {
219216
* @see #publishObject(String, Object)
220217
*/
221218
public boolean publishMessage(String targetChannel, String messageToPublish) {
222-
MessageTransferObject messageTransferObject = new MessageTransferObject(this.serverIdentifier, messageToPublish);
219+
MessageTransferObject messageTransferObject = new MessageTransferObject(this.serverIdentifier, messageToPublish, System.currentTimeMillis());
223220
return this.executePublish(targetChannel, messageTransferObject);
224221
}
225222

@@ -388,6 +385,20 @@ public void onMessage(String channel, String message) {
388385

389386
/*----------------------------------------------------------------------------------------------------------*/
390387

388+
/**
389+
* Initialization method for creating {@link RedisManager} singleton instance. This won't start any
390+
* connection or subscription.
391+
*
392+
* @param plugin Origin plugin which tries to obtain the instance
393+
* @param serverIdentifier Identifier of the server (e.g. 'Bungee01'). Shall be unique to prevent bugs
394+
* @param redisConfiguration {@link RedisConfiguration} object with Redis server credentials
395+
*/
396+
public static void init(IForestRedisPlugin plugin, String serverIdentifier, RedisConfiguration redisConfiguration) {
397+
api = new RedisManager(plugin, serverIdentifier, redisConfiguration);
398+
}
399+
400+
/*----------------------------------------------------------------------------------------------------------*/
401+
391402
/**
392403
* Gets the singleton instance of {@link RedisManager} object. This is the only
393404
* recommended approach to access the API methods.

src/main/java/cz/foresttech/forestredis/shared/config/IConfigurationAdapter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,6 @@ public interface IConfigurationAdapter {
7575
*/
7676
List<String> getStringList(String path);
7777

78+
/*----------------------------------------------------------------------------------------------------------*/
79+
7880
}

src/main/java/cz/foresttech/forestredis/shared/events/IRedisMessageReceivedEvent.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,23 @@ public interface IRedisMessageReceivedEvent {
3434

3535
/*----------------------------------------------------------------------------------------------------------*/
3636

37+
/**
38+
* Obtains message timestamp
39+
*
40+
* @return TimeStamp of the message
41+
*/
42+
long getTimeStamp();
43+
44+
/*----------------------------------------------------------------------------------------------------------*/
45+
3746
/**
3847
* Obtains object from received message by provided type
3948
*
4049
* @param objectClass Object class
4150
* @param <T> Object type
4251
* @return Parsed object (null if it cannot be parsed)
4352
*/
53+
@SuppressWarnings("Make sure the recieved message can really be converted to provided type!")
4454
<T> T getMessageObject(Class<T> objectClass);
4555

4656
/*----------------------------------------------------------------------------------------------------------*/
@@ -52,4 +62,6 @@ public interface IRedisMessageReceivedEvent {
5262
*/
5363
boolean isSelfSender();
5464

65+
/*----------------------------------------------------------------------------------------------------------*/
66+
5567
}

src/main/java/cz/foresttech/forestredis/shared/models/MessageTransferObject.java

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,37 +11,32 @@ public class MessageTransferObject {
1111

1212
private String senderIdentifier;
1313
private String message;
14+
private long timestamp;
1415

1516
public MessageTransferObject() {
1617
}
1718

18-
public MessageTransferObject(String senderIdentifier, String message) {
19-
this.senderIdentifier = senderIdentifier;
20-
this.message = message;
21-
}
22-
23-
public String getSenderIdentifier() {
24-
return senderIdentifier;
25-
}
26-
27-
public String getMessage() {
28-
return message;
29-
}
19+
/*----------------------------------------------------------------------------------------------------------*/
3020

31-
public void setSenderIdentifier(String senderIdentifier) {
21+
/**
22+
* Constructs the instance with provided parameters
23+
*
24+
* @param senderIdentifier Identifier of sending server
25+
* @param message Message content
26+
* @param timestamp TimeStamp of the message
27+
*/
28+
public MessageTransferObject(String senderIdentifier, String message, long timestamp) {
3229
this.senderIdentifier = senderIdentifier;
33-
}
34-
35-
public void setMessage(String message) {
3630
this.message = message;
31+
this.timestamp = timestamp;
3732
}
3833

3934
/*----------------------------------------------------------------------------------------------------------*/
4035

4136
/**
4237
* Converts current data to JSON using {@link Gson}
4338
*
44-
* @return
39+
* @return Object serialized to JSON String
4540
*/
4641
public String toJson() {
4742
try {
@@ -57,8 +52,8 @@ public String toJson() {
5752
/**
5853
* Obtains {@link MessageTransferObject} from provided JSON String.
5954
*
60-
* @param json
61-
* @return
55+
* @param json Serialized {@link MessageTransferObject} in JSON String
56+
* @return Deserialized {@link MessageTransferObject}
6257
*/
6358
public static MessageTransferObject fromJson(String json) {
6459
try {
@@ -74,15 +69,16 @@ public static MessageTransferObject fromJson(String json) {
7469
/**
7570
* Wraps the given object to {@link MessageTransferObject} object.
7671
*
77-
* @param senderIdentifier
78-
* @param objectToWrap
79-
* @return
72+
* @param senderIdentifier Identifier of the sending server
73+
* @param objectToWrap Object which shall be wrapped
74+
* @param timestamp TimeStamp of the message
75+
* @return Instance of {@link MessageTransferObject} containing serialized object from input
8076
*/
81-
public static MessageTransferObject wrap(String senderIdentifier, Object objectToWrap) {
77+
public static MessageTransferObject wrap(String senderIdentifier, Object objectToWrap, long timestamp) {
8278
Gson gson = new GsonBuilder().create();
8379
String message = gson.toJson(objectToWrap);
8480

85-
return new MessageTransferObject(senderIdentifier, message);
81+
return new MessageTransferObject(senderIdentifier, message, timestamp);
8682
}
8783

8884
/*----------------------------------------------------------------------------------------------------------*/
@@ -105,4 +101,27 @@ public <T> T parseMessageObject(Class<T> objectType) {
105101

106102
/*----------------------------------------------------------------------------------------------------------*/
107103

104+
public Long getTimestamp() {
105+
return timestamp;
106+
}
107+
108+
public void setTimestamp(Long timestamp) {
109+
this.timestamp = timestamp;
110+
}
111+
112+
public String getSenderIdentifier() {
113+
return senderIdentifier;
114+
}
115+
116+
public String getMessage() {
117+
return message;
118+
}
119+
120+
public void setSenderIdentifier(String senderIdentifier) {
121+
this.senderIdentifier = senderIdentifier;
122+
}
123+
124+
public void setMessage(String message) {
125+
this.message = message;
126+
}
108127
}

src/main/java/cz/foresttech/forestredis/shared/models/RedisConfiguration.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@ public class RedisConfiguration {
1515
private final String password;
1616
private final boolean ssl;
1717

18+
/*----------------------------------------------------------------------------------------------------------*/
19+
20+
/**
21+
* Constructs the instance of the object
22+
*
23+
* @param hostName Hostname of the Redis server
24+
* @param port Port of the Redis server
25+
* @param username Username used to connect to Redis server (can be null)
26+
* @param password Password used to connect to Redis server (can be null)
27+
* @param ssl Whether to make the connection with SSL
28+
*/
1829
public RedisConfiguration(String hostName, int port, String username, String password, boolean ssl) {
1930
this.hostName = hostName;
2031
this.port = port;
@@ -36,10 +47,14 @@ public JedisPool build() {
3647
return null;
3748
}
3849

39-
if (this.username == null) {
40-
return new JedisPool(new JedisPoolConfig(), this.hostName, this.port, Protocol.DEFAULT_TIMEOUT, this.password, this.ssl);
50+
try {
51+
if (this.username == null) {
52+
return new JedisPool(new JedisPoolConfig(), this.hostName, this.port, Protocol.DEFAULT_TIMEOUT, this.password, this.ssl);
53+
}
54+
return new JedisPool(new JedisPoolConfig(), this.hostName, this.port, Protocol.DEFAULT_TIMEOUT, this.username, this.password, this.ssl);
55+
} catch (Exception exception) {
56+
return null;
4157
}
42-
return new JedisPool(new JedisPoolConfig(), this.hostName, this.port, Protocol.DEFAULT_TIMEOUT, this.username, this.password, this.ssl);
4358
}
4459

4560
/*----------------------------------------------------------------------------------------------------------*/

0 commit comments

Comments
 (0)