com.github.informatik-ag-ngl
diff --git a/src/main/java/enovy/server/util/VersionUtils.java b/src/main/java/enovy/server/util/VersionUtils.java
new file mode 100644
index 0000000..1a66590
--- /dev/null
+++ b/src/main/java/enovy/server/util/VersionUtils.java
@@ -0,0 +1,94 @@
+package enovy.server.util;
+
+import java.util.regex.Pattern;
+
+/**
+ * Implements a comparison algorithm between Envoy versions and defines minimal
+ * and maximal client versions compatible with this server.
+ *
+ * Project: envoy-server-standalone
+ * File: VersionUtils.java
+ * Created: 23.06.2020
+ *
+ * @author KSKE
+ * @since Envoy Server Standalone v0.1-beta
+ */
+public class VersionUtils {
+
+ /**
+ * The minimal client version compatible with this server.
+ *
+ * @since Envoy Server Standalone v0.1-beta
+ */
+ public static final String MIN_CLIENT_VERSION = "0.1-beta";
+
+ /**
+ * The maximal client version compatible with this server.
+ *
+ * @since Envoy Server Standalone v0.1-beta
+ */
+ public static final String MAX_CLIENT_VERSION = "0.1-beta";
+
+ private static final Pattern versionPattern = Pattern.compile("(?\\d).(?\\d)(?:-(?\\w+))?");
+
+ private VersionUtils() {}
+
+ /**
+ * Parses an Envoy Client version string and checks whether that version is
+ * compatible with this server.
+ *
+ * @param version the version string to parse
+ * @return {@code true} if the given version is compatible with this server
+ * @since Envoy Server Standalone v0.1-beta
+ */
+ public static boolean verifyCompatibility(String version) {
+ final var currentMatcher = versionPattern.matcher(version);
+
+ if (!currentMatcher.matches()) return false;
+
+ final var minMatcher = versionPattern.matcher(MIN_CLIENT_VERSION);
+ final var maxMatcher = versionPattern.matcher(MAX_CLIENT_VERSION);
+
+ if (!minMatcher.matches() || !maxMatcher.matches()) throw new RuntimeException("Invalid min or max client version configured!");
+
+ // Compare suffixes
+ {
+ final var currentSuffix = convertSuffix(currentMatcher.group("suffix"));
+ final var minSuffix = convertSuffix(minMatcher.group("suffix"));
+ final var maxSuffix = convertSuffix(maxMatcher.group("suffix"));
+
+ if (currentSuffix < minSuffix || currentSuffix > maxSuffix) return false;
+ }
+
+ // Compare major
+ {
+ final var currentMajor = Integer.parseInt(currentMatcher.group("major"));
+ final var minMajor = Integer.parseInt(minMatcher.group("major"));
+ final var maxMajor = Integer.parseInt(maxMatcher.group("major"));
+
+ if (currentMajor < minMajor || currentMajor > maxMajor) return false;
+ }
+
+ // Compare minor
+ {
+ final var currentMinor = Integer.parseInt(currentMatcher.group("minor"));
+ final var minMinor = Integer.parseInt(minMatcher.group("minor"));
+ final var maxMinor = Integer.parseInt(maxMatcher.group("minor"));
+
+ if (currentMinor < minMinor || currentMinor > maxMinor) return false;
+ }
+
+ return true;
+ }
+
+ private static int convertSuffix(String suffix) {
+ switch (suffix == null ? "" : suffix) {
+ case "alpha":
+ return 0;
+ case "beta":
+ return 1;
+ default:
+ return 2;
+ }
+ }
+}
diff --git a/src/main/java/enovy/server/util/package-info.java b/src/main/java/enovy/server/util/package-info.java
new file mode 100644
index 0000000..f256f4c
--- /dev/null
+++ b/src/main/java/enovy/server/util/package-info.java
@@ -0,0 +1,11 @@
+/**
+ * This package contains utility classes used in Envoy Server.
+ *
+ * Project: envoy-server-standalone
+ * File: package-info.java
+ * Created: 23.06.2020
+ *
+ * @author Kai S. K. Engelbart
+ * @since Envoy Server Standalone v0.1-beta
+ */
+package enovy.server.util;
diff --git a/src/main/java/envoy/server/Startup.java b/src/main/java/envoy/server/Startup.java
index b88f1bd..9ad4bc3 100755
--- a/src/main/java/envoy/server/Startup.java
+++ b/src/main/java/envoy/server/Startup.java
@@ -29,20 +29,6 @@ import envoy.util.EnvoyLog;
*/
public class Startup {
- /**
- * The minimal client version compatible with this server.
- *
- * @since Envoy Server Standalone v0.1-beta
- */
- public static final String MIN_CLIENT_VERSION = "0.1-beta";
-
- /**
- * The maximal client version compatible with this server.
- *
- * @since Envoy Server Standalone v0.1-beta
- */
- public static final String MAX_CLIENT_VERSION = "0.1-beta";
-
/**
* Initializes the logger with a new config instance.
*
diff --git a/src/main/java/envoy/server/data/Message.java b/src/main/java/envoy/server/data/Message.java
index e53a7e5..5b81e7d 100755
--- a/src/main/java/envoy/server/data/Message.java
+++ b/src/main/java/envoy/server/data/Message.java
@@ -1,5 +1,7 @@
package envoy.server.data;
+import static envoy.data.Message.MessageStatus.*;
+
import java.time.LocalDateTime;
import javax.persistence.*;
@@ -38,7 +40,7 @@ public class Message {
* @since Envoy Server Standalone v0.1-beta
*/
public static final String getPending = "Message.getPending";
-
+
@Id
protected long id;
@@ -111,9 +113,26 @@ public class Message {
return message;
}
+ /**
+ * Sets the message status to {@link MessageStatus#RECEIVED} and sets the
+ * current time stamp as the received date.
+ *
+ * @since Envoy Server Standalone v0.1-beta
+ */
public void received() {
receivedDate = LocalDateTime.now();
- status = MessageStatus.RECEIVED;
+ status = RECEIVED;
+ }
+
+ /**
+ * Sets the message status to {@link MessageStatus#READ} and sets the
+ * current time stamp as the read date.
+ *
+ * @since Envoy Server Standalone v0.1-beta
+ */
+ public void read() {
+ readDate = LocalDateTime.now();
+ status = READ;
}
/**
diff --git a/src/main/java/envoy/server/processors/LoginCredentialProcessor.java b/src/main/java/envoy/server/processors/LoginCredentialProcessor.java
index 5ab8cc6..9877f36 100755
--- a/src/main/java/envoy/server/processors/LoginCredentialProcessor.java
+++ b/src/main/java/envoy/server/processors/LoginCredentialProcessor.java
@@ -8,15 +8,14 @@ import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.HashSet;
import java.util.logging.Logger;
-import java.util.regex.Pattern;
import javax.persistence.NoResultException;
+import enovy.server.util.VersionUtils;
import envoy.data.LoginCredentials;
import envoy.data.Message.MessageStatus;
import envoy.event.HandshakeRejection;
import envoy.event.MessageStatusChange;
-import envoy.server.Startup;
import envoy.server.data.PersistenceManager;
import envoy.server.data.User;
import envoy.server.net.ConnectionManager;
@@ -40,7 +39,6 @@ public final class LoginCredentialProcessor implements ObjectProcessor\\d).(?\\d)(?:-(?\\w+))?");
@Override
public void process(LoginCredentials credentials, long socketID, ObjectWriteProxy writeProxy) throws IOException {
@@ -48,10 +46,9 @@ public final class LoginCredentialProcessor implements ObjectProcessor maxSuffix) return false;
- }
-
- // Compare major
- {
- final var currentMajor = Integer.parseInt(currentMatcher.group("major"));
- final var minMajor = Integer.parseInt(minMatcher.group("major"));
- final var maxMajor = Integer.parseInt(maxMatcher.group("major"));
-
- if (currentMajor < minMajor || currentMajor > maxMajor) return false;
- }
-
- // Compare minor
- {
- final var currentMinor = Integer.parseInt(currentMatcher.group("minor"));
- final var minMinor = Integer.parseInt(minMatcher.group("minor"));
- final var maxMinor = Integer.parseInt(maxMatcher.group("minor"));
-
- if (currentMinor < minMinor || currentMinor > maxMinor) return false;
- }
-
- return true;
- }
-
- private int convertSuffix(String suffix) {
- switch (suffix == null ? "" : suffix) {
- case "alpha":
- return 0;
- case "beta":
- return 1;
- default:
- return 2;
- }
- }
-
@Override
public Class getInputClass() { return LoginCredentials.class; }
}
diff --git a/src/main/java/envoy/server/processors/MessageProcessor.java b/src/main/java/envoy/server/processors/MessageProcessor.java
index 8622cd8..c143d42 100755
--- a/src/main/java/envoy/server/processors/MessageProcessor.java
+++ b/src/main/java/envoy/server/processors/MessageProcessor.java
@@ -35,7 +35,7 @@ public class MessageProcessor implements ObjectProcessor {
return;
}
message.nextStatus();
- ConnectionManager connectionManager = ConnectionManager.getInstance();
+ ConnectionManager connectionManager = ConnectionManager.getInstance();
sendToUser(connectionManager, message, writeProxy);
try {
diff --git a/src/main/java/envoy/server/processors/MessageStatusChangeProcessor.java b/src/main/java/envoy/server/processors/MessageStatusChangeProcessor.java
index a3dca3c..8801d54 100755
--- a/src/main/java/envoy/server/processors/MessageStatusChangeProcessor.java
+++ b/src/main/java/envoy/server/processors/MessageStatusChangeProcessor.java
@@ -28,8 +28,7 @@ public class MessageStatusChangeProcessor implements ObjectProcessor