From 201d6c9a9fca9b1adc5b8333c627925dc3db239d Mon Sep 17 00:00:00 2001 From: CyB3RC0nN0R Date: Mon, 23 Dec 2019 21:20:20 +0100 Subject: [PATCH 001/151] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..93d2cb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Informatik-AG + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..79e92f3 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# envoy-server-standalone +Standalone server for the Envoy project From 91b2d91af3918cfc5962aaaa9616de300d66f041 Mon Sep 17 00:00:00 2001 From: kske Date: Mon, 23 Dec 2019 21:31:51 +0100 Subject: [PATCH 002/151] Added Maven project --- .classpath | 38 ++++++++++++++++++++++ .gitignore | 1 + .project | 23 +++++++++++++ .settings/org.eclipse.core.resources.prefs | 6 ++++ .settings/org.eclipse.jdt.core.prefs | 8 +++++ .settings/org.eclipse.m2e.core.prefs | 4 +++ pom.xml | 23 +++++++++++++ 7 files changed, 103 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 pom.xml diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..002ad57 --- /dev/null +++ b/.classpath @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/.project b/.project new file mode 100644 index 0000000..45a395e --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + envoy-server-standalone + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..2f5cc74 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..ff7698f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=false +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3d1e16d --- /dev/null +++ b/pom.xml @@ -0,0 +1,23 @@ + + 4.0.0 + + informatik-ag-ngl + envoy-server-standalone + 0.0.1-SNAPSHOT + + Envoy Server + https://github.com/informatik-ag-ngl/envoy-server-standalone + + + UTF-8 + UTF-8 + 1.8 + 1.8 + + + + envoy-server-standalone + + \ No newline at end of file From e13438eefddbf0e5eee6edfb6b8bb76b1d4c78a6 Mon Sep 17 00:00:00 2001 From: kske Date: Sat, 28 Dec 2019 15:48:39 +0200 Subject: [PATCH 003/151] Added basic lifecycle with object reading capabilities * Added java-nio-server dependency * Added ObjectMessageReader and ObjectMessageProcessor * Added Startup class starting a Server instance --- .settings/org.eclipse.jdt.ui.prefs | 2 + pom.xml | 8 +++ .../envoy/server/ObjectMessageProcessor.java | 32 ++++++++++ .../envoy/server/ObjectMessageReader.java | 58 +++++++++++++++++++ src/main/java/envoy/server/Startup.java | 21 +++++++ 5 files changed, 121 insertions(+) create mode 100644 .settings/org.eclipse.jdt.ui.prefs create mode 100644 src/main/java/envoy/server/ObjectMessageProcessor.java create mode 100644 src/main/java/envoy/server/ObjectMessageReader.java create mode 100644 src/main/java/envoy/server/Startup.java diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000..7103be7 --- /dev/null +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/pom.xml b/pom.xml index 3d1e16d..144ebd0 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,14 @@ 1.8 + + + informatik-ag-ngl + java-nio-server + 0.0.1-SNAPSHOT + + + envoy-server-standalone diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/ObjectMessageProcessor.java new file mode 100644 index 0000000..bd2a735 --- /dev/null +++ b/src/main/java/envoy/server/ObjectMessageProcessor.java @@ -0,0 +1,32 @@ +package envoy.server; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; + +import com.jenkov.nioserver.IMessageProcessor; +import com.jenkov.nioserver.Message; +import com.jenkov.nioserver.WriteProxy; + +/** + * Project: envoy-server-standalone
+ * File: ObjectMessageProcessor.java
+ * Created: 28.12.2019
+ * + * @author Kai S. K. Engelbart + * @since Envoy Server v0.1-alpha + */ +public class ObjectMessageProcessor implements IMessageProcessor { + + @Override + public void process(Message message, WriteProxy writeProxy) { + try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 1, message.length - 1))) { + Object obj = in.readObject(); + + // TODO: Process pipeline + System.out.println("Read object: " + obj.toString()); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/envoy/server/ObjectMessageReader.java b/src/main/java/envoy/server/ObjectMessageReader.java new file mode 100644 index 0000000..2249954 --- /dev/null +++ b/src/main/java/envoy/server/ObjectMessageReader.java @@ -0,0 +1,58 @@ +package envoy.server; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +import com.jenkov.nioserver.IMessageReader; +import com.jenkov.nioserver.Message; +import com.jenkov.nioserver.MessageBuffer; +import com.jenkov.nioserver.Socket; + +/** + * Project: envoy-server-standalone
+ * File: ObjectMessageReader.java
+ * Created: 28.12.2019
+ * + * @author Kai S. K. Engelbart + * @since Envoy Server Standalone v0.1-alpha + */ +public class ObjectMessageReader implements IMessageReader { + + private List completeMessages = new ArrayList<>(); + private Message nextMessage; + private MessageBuffer messageBuffer; + + @Override + public void init(MessageBuffer messageBuffer) { + this.messageBuffer = messageBuffer; + nextMessage = messageBuffer.getMessage(); + } + + @Override + public void read(Socket socket, ByteBuffer buffer) throws IOException { + socket.read(buffer); + buffer.flip(); + + if (!buffer.hasRemaining()) { + buffer.clear(); + return; + } + + nextMessage.writeToMessage(buffer); + + int length = nextMessage.sharedArray[nextMessage.offset]; + if(nextMessage.length - nextMessage.offset >= length) { + Message message = messageBuffer.getMessage(); + message.writePartialMessageToMessage(nextMessage, nextMessage.offset + length); + completeMessages.add(nextMessage); + nextMessage = message; + } + + buffer.clear(); + } + + @Override + public List getMessages() { return completeMessages; } +} \ No newline at end of file diff --git a/src/main/java/envoy/server/Startup.java b/src/main/java/envoy/server/Startup.java new file mode 100644 index 0000000..1c0932b --- /dev/null +++ b/src/main/java/envoy/server/Startup.java @@ -0,0 +1,21 @@ +package envoy.server; + +import java.io.IOException; + +import com.jenkov.nioserver.Server; + +/** + * Project: envoy-server-standalone
+ * File: Startup.java
+ * Created: 24.12.2019
+ * + * @author Kai S. K. Engelbart + * @since Envoy Server Standalone v0.1-alpha + */ +public class Startup { + + public static void main(String[] args) throws IOException { + Server server = new Server(8080, () -> new ObjectMessageReader(), new ObjectMessageProcessor()); + server.start(); + } +} \ No newline at end of file From 2592334b0520baf0023b68f29e558d2b0a8d8f62 Mon Sep 17 00:00:00 2001 From: kske Date: Sun, 29 Dec 2019 10:48:15 +0200 Subject: [PATCH 004/151] Changed length of encoded message length to 4 bytes --- pom.xml | 7 ++++++- .../envoy/server/ObjectMessageProcessor.java | 3 +-- .../java/envoy/server/ObjectMessageReader.java | 16 ++++++++++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 144ebd0..b85a456 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ informatik-ag-ngl envoy-server-standalone - 0.0.1-SNAPSHOT + 0.1-alpha Envoy Server https://github.com/informatik-ag-ngl/envoy-server-standalone @@ -18,6 +18,11 @@ + + informatik-ag-ngl + envoy-common + 0.2-alpha + informatik-ag-ngl java-nio-server diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/ObjectMessageProcessor.java index bd2a735..3f52e07 100644 --- a/src/main/java/envoy/server/ObjectMessageProcessor.java +++ b/src/main/java/envoy/server/ObjectMessageProcessor.java @@ -20,9 +20,8 @@ public class ObjectMessageProcessor implements IMessageProcessor { @Override public void process(Message message, WriteProxy writeProxy) { - try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 1, message.length - 1))) { + try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) { Object obj = in.readObject(); - // TODO: Process pipeline System.out.println("Read object: " + obj.toString()); } catch (IOException | ClassNotFoundException e) { diff --git a/src/main/java/envoy/server/ObjectMessageReader.java b/src/main/java/envoy/server/ObjectMessageReader.java index 2249954..9a20c7f 100644 --- a/src/main/java/envoy/server/ObjectMessageReader.java +++ b/src/main/java/envoy/server/ObjectMessageReader.java @@ -41,18 +41,26 @@ public class ObjectMessageReader implements IMessageReader { } nextMessage.writeToMessage(buffer); - - int length = nextMessage.sharedArray[nextMessage.offset]; - if(nextMessage.length - nextMessage.offset >= length) { + + // Get message length + if (nextMessage.length - nextMessage.offset < 4) return; + int length = fromByteArray(nextMessage.sharedArray, nextMessage.offset) + 4; + + if (nextMessage.length - nextMessage.offset >= length) { Message message = messageBuffer.getMessage(); message.writePartialMessageToMessage(nextMessage, nextMessage.offset + length); completeMessages.add(nextMessage); nextMessage = message; } - + buffer.clear(); } + private int fromByteArray(byte[] bytes, int offset) { + return ((bytes[offset] & 0xFF) << 24) | ((bytes[offset + 1] & 0xFF) << 16) | ((bytes[offset + 2] & 0xFF) << 8) + | ((bytes[offset + 3] & 0xFF) << 0); + } + @Override public List getMessages() { return completeMessages; } } \ No newline at end of file From d12adcb73acc80c7ac8c18756aacf79e90828e5c Mon Sep 17 00:00:00 2001 From: kske Date: Sun, 29 Dec 2019 11:09:26 +0200 Subject: [PATCH 005/151] Fixed Javadoc error --- src/main/java/envoy/server/ObjectMessageProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/ObjectMessageProcessor.java index 3f52e07..77a086b 100644 --- a/src/main/java/envoy/server/ObjectMessageProcessor.java +++ b/src/main/java/envoy/server/ObjectMessageProcessor.java @@ -14,7 +14,7 @@ import com.jenkov.nioserver.WriteProxy; * Created: 28.12.2019
* * @author Kai S. K. Engelbart - * @since Envoy Server v0.1-alpha + * @since Envoy Server Standalone v0.1-alpha */ public class ObjectMessageProcessor implements IMessageProcessor { From 1d35de3a39b08bbefb8ea415401142400218dc75 Mon Sep 17 00:00:00 2001 From: delvh Date: Sun, 29 Dec 2019 14:16:39 +0100 Subject: [PATCH 006/151] Added method to handle incoming objects (not finished as the methods to further process these "Events" have not been implemented yet) --- .../envoy/server/ObjectMessageProcessor.java | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/ObjectMessageProcessor.java index 77a086b..8b999c2 100644 --- a/src/main/java/envoy/server/ObjectMessageProcessor.java +++ b/src/main/java/envoy/server/ObjectMessageProcessor.java @@ -1,13 +1,19 @@ package envoy.server; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import com.jenkov.nioserver.IMessageProcessor; import com.jenkov.nioserver.Message; import com.jenkov.nioserver.WriteProxy; +import envoy.data.LoginCredentials; +import envoy.data.User; +import envoy.event.Event; + /** * Project: envoy-server-standalone
* File: ObjectMessageProcessor.java
@@ -18,14 +24,63 @@ import com.jenkov.nioserver.WriteProxy; */ public class ObjectMessageProcessor implements IMessageProcessor { + private long currentUserID = 0;// temporary + @Override public void process(Message message, WriteProxy writeProxy) { try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) { Object obj = in.readObject(); - // TODO: Process pipeline + System.out.println("Read object: " + obj.toString()); + handleObject(message, writeProxy, obj); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } + + /** + * This method splits incoming objects into the different objects that are + * relevant to the server and guides them to their predestined spot. + * + * @param request the {@link Message} in which the objects are saved + * @param writeProxy the writeProxy to define the resulting socket for + * @param obj the object that has been read out of the {@link Message} + * @throws IllegalArgumentException if the object given is neither an + * {@link envoy.data.Message}, an {@link Event} + * nor a {@link LoginCredentials} + * @since Envoy Server Standalone v0.1-alpha + */ + private void handleObject(Message request, WriteProxy writeProxy, Object obj) throws IllegalArgumentException { + boolean responseToSameSocket = false; + Object usage; + if (obj instanceof envoy.data.Message) {// if object is Message + envoy.data.Message cast = (envoy.data.Message) obj; + usage = cast.getClass(); + } else if (obj instanceof Event) {// if object is Event + usage = (Event) obj; + } else if (obj instanceof LoginCredentials) {// if object is LoginCredential + responseToSameSocket = true; + LoginCredentials cast = (LoginCredentials) obj; + usage = new User(currentUserID++, cast.getName()); + } else throw new IllegalArgumentException(); + + Message response = writeProxy.getMessage(); + if (responseToSameSocket) { + response.socketId = request.socketId; + } else { + response.socketId = -0;// TODO temporary.Needs to be replaced + return; + } + // Serialize object to byte array + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream oout = new ObjectOutputStream(baos)) { + oout.writeObject(usage); + } catch (IOException e) { + e.printStackTrace(); + } + byte[] objBytes = baos.toByteArray(); + response.writeToMessage(objBytes); + writeProxy.enqueue(response); + + } } \ No newline at end of file From b7af8aa7bd6d48a6d1ca1073091a11571cbc2a17 Mon Sep 17 00:00:00 2001 From: delvh Date: Sun, 29 Dec 2019 17:52:57 +0100 Subject: [PATCH 007/151] Changed code as requested by @CyB3RC0nN0R --- .../envoy/server/ObjectMessageProcessor.java | 59 ++++++++++++------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/ObjectMessageProcessor.java index 8b999c2..7c9592b 100644 --- a/src/main/java/envoy/server/ObjectMessageProcessor.java +++ b/src/main/java/envoy/server/ObjectMessageProcessor.java @@ -24,8 +24,6 @@ import envoy.event.Event; */ public class ObjectMessageProcessor implements IMessageProcessor { - private long currentUserID = 0;// temporary - @Override public void process(Message message, WriteProxy writeProxy) { try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) { @@ -51,36 +49,55 @@ public class ObjectMessageProcessor implements IMessageProcessor { * @since Envoy Server Standalone v0.1-alpha */ private void handleObject(Message request, WriteProxy writeProxy, Object obj) throws IllegalArgumentException { - boolean responseToSameSocket = false; + + long currentUserID = 0; // TODO temporary. Only for testing purposes + boolean responseToSameSocket = false, immediateResponse = true; Object usage; + + // determining the type of the incoming object if (obj instanceof envoy.data.Message) {// if object is Message envoy.data.Message cast = (envoy.data.Message) obj; - usage = cast.getClass(); + usage = cast.getClass(); + immediateResponse = isRecipientAvailable(-1); // TODO replace with wanted clientID } else if (obj instanceof Event) {// if object is Event - usage = (Event) obj; + usage = (Event) obj; + immediateResponse = isRecipientAvailable(-1); // TODO replace with wanted clientID } else if (obj instanceof LoginCredentials) {// if object is LoginCredential responseToSameSocket = true; LoginCredentials cast = (LoginCredentials) obj; usage = new User(currentUserID++, cast.getName()); } else throw new IllegalArgumentException(); - Message response = writeProxy.getMessage(); - if (responseToSameSocket) { - response.socketId = request.socketId; - } else { - response.socketId = -0;// TODO temporary.Needs to be replaced - return; + // handling of incoming object + if (immediateResponse) { + Message response = writeProxy.getMessage(); + if (responseToSameSocket) { + response.socketId = request.socketId; + } else { + response.socketId = -0;// TODO temporary.Needs to be replaced + return; + } + // Serialize object to byte array + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream oout = new ObjectOutputStream(baos)) { + oout.writeObject(usage); + } catch (IOException e) { + e.printStackTrace(); + } + byte[] objBytes = baos.toByteArray(); + response.writeToMessage(objBytes); + writeProxy.enqueue(response); } - // Serialize object to byte array - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (ObjectOutputStream oout = new ObjectOutputStream(baos)) { - oout.writeObject(usage); - } catch (IOException e) { - e.printStackTrace(); - } - byte[] objBytes = baos.toByteArray(); - response.writeToMessage(objBytes); - writeProxy.enqueue(response); + } + /** + * This method determines if the recipient is online + * + * @param otherClientID the ID of the recipient + * @return true, if the recipient is online + * @since Envoy Server Standalone v0.1-alpha + */ + private boolean isRecipientAvailable(long otherClientID) { + return false;// TODO needs to be adapted to return true if the wanted client is online } } \ No newline at end of file From 9ebd8c7f110391bd984faa785aaaab1eac2fcad7 Mon Sep 17 00:00:00 2001 From: CyB3RC0nN0R Date: Mon, 30 Dec 2019 14:28:57 +0200 Subject: [PATCH 008/151] Added Maven build workflow --- .github/workflows/maven.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/maven.yml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 0000000..91106d3 --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,17 @@ +name: Java CI + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build with Maven + run: mvn -B package --file pom.xml From 2c9223236fa2e25c2e7bf04893361a3c14ec49b2 Mon Sep 17 00:00:00 2001 From: kske Date: Mon, 30 Dec 2019 15:53:40 +0200 Subject: [PATCH 009/151] Added ObjectProcessor interface with some implementations --- .../server/LoginCredentialProcessor.java | 27 +++++ .../java/envoy/server/MessageProcessor.java | 20 ++++ .../envoy/server/ObjectMessageProcessor.java | 100 +++++------------- .../java/envoy/server/ObjectProcessor.java | 17 +++ src/main/java/envoy/server/Startup.java | 7 +- 5 files changed, 99 insertions(+), 72 deletions(-) create mode 100644 src/main/java/envoy/server/LoginCredentialProcessor.java create mode 100644 src/main/java/envoy/server/MessageProcessor.java create mode 100644 src/main/java/envoy/server/ObjectProcessor.java diff --git a/src/main/java/envoy/server/LoginCredentialProcessor.java b/src/main/java/envoy/server/LoginCredentialProcessor.java new file mode 100644 index 0000000..37f36e7 --- /dev/null +++ b/src/main/java/envoy/server/LoginCredentialProcessor.java @@ -0,0 +1,27 @@ +package envoy.server; + +import envoy.data.LoginCredentials; +import envoy.data.User; + +/** + * Project: envoy-server-standalone
+ * File: LoginCredentialProcessor.java
+ * Created: 30.12.2019
+ * + * @author Kai S. K. Engelbart + * @since + */ +public class LoginCredentialProcessor implements ObjectProcessor { + + // TODO: Acquire user IDs from database + private static long currentUserId = 1; + + @Override + public User process(LoginCredentials input) { + System.out.println("Received login credentials " + input); + return new User(currentUserId++, input.getName()); + } + + @Override + public Class getInputClass() { return LoginCredentials.class; } +} diff --git a/src/main/java/envoy/server/MessageProcessor.java b/src/main/java/envoy/server/MessageProcessor.java new file mode 100644 index 0000000..85313ca --- /dev/null +++ b/src/main/java/envoy/server/MessageProcessor.java @@ -0,0 +1,20 @@ +package envoy.server; + +import envoy.data.Message; + +/** + * Project: envoy-server-standalone
+ * File: MessageProcessor.java
+ * Created: 30.12.2019
+ * + * @author Kai S. K. Engelbart + * @since + */ +public class MessageProcessor implements ObjectProcessor { + + @Override + public Void process(Message input) { return null; } + + @Override + public Class getInputClass() { return Message.class; } +} diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/ObjectMessageProcessor.java index 7c9592b..8bf8ad6 100644 --- a/src/main/java/envoy/server/ObjectMessageProcessor.java +++ b/src/main/java/envoy/server/ObjectMessageProcessor.java @@ -5,15 +5,12 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.util.Set; import com.jenkov.nioserver.IMessageProcessor; import com.jenkov.nioserver.Message; import com.jenkov.nioserver.WriteProxy; -import envoy.data.LoginCredentials; -import envoy.data.User; -import envoy.event.Event; - /** * Project: envoy-server-standalone
* File: ObjectMessageProcessor.java
@@ -24,80 +21,41 @@ import envoy.event.Event; */ public class ObjectMessageProcessor implements IMessageProcessor { + private final Set> processors; + + public ObjectMessageProcessor(Set> processors) { this.processors = processors; } + + @SuppressWarnings("unchecked") @Override public void process(Message message, WriteProxy writeProxy) { try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) { Object obj = in.readObject(); - System.out.println("Read object: " + obj.toString()); - handleObject(message, writeProxy, obj); + + // Process object + processors.stream() + .filter(p -> p.getInputClass().isInstance(obj)) + .forEach((@SuppressWarnings("rawtypes") ObjectProcessor p) -> { + Object responseObj = p.process(p.getInputClass().cast(obj)); + if (responseObj != null) { + // Create message targeted at the client + Message response = writeProxy.getMessage(); + response.socketId = message.socketId; + + // Serialize object to byte array + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream oout = new ObjectOutputStream(baos)) { + oout.writeObject(responseObj); + } catch (IOException e) { + e.printStackTrace(); + } + byte[] objBytes = baos.toByteArray(); + response.writeToMessage(objBytes); + writeProxy.enqueue(response); + } + }); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } - - /** - * This method splits incoming objects into the different objects that are - * relevant to the server and guides them to their predestined spot. - * - * @param request the {@link Message} in which the objects are saved - * @param writeProxy the writeProxy to define the resulting socket for - * @param obj the object that has been read out of the {@link Message} - * @throws IllegalArgumentException if the object given is neither an - * {@link envoy.data.Message}, an {@link Event} - * nor a {@link LoginCredentials} - * @since Envoy Server Standalone v0.1-alpha - */ - private void handleObject(Message request, WriteProxy writeProxy, Object obj) throws IllegalArgumentException { - - long currentUserID = 0; // TODO temporary. Only for testing purposes - boolean responseToSameSocket = false, immediateResponse = true; - Object usage; - - // determining the type of the incoming object - if (obj instanceof envoy.data.Message) {// if object is Message - envoy.data.Message cast = (envoy.data.Message) obj; - usage = cast.getClass(); - immediateResponse = isRecipientAvailable(-1); // TODO replace with wanted clientID - } else if (obj instanceof Event) {// if object is Event - usage = (Event) obj; - immediateResponse = isRecipientAvailable(-1); // TODO replace with wanted clientID - } else if (obj instanceof LoginCredentials) {// if object is LoginCredential - responseToSameSocket = true; - LoginCredentials cast = (LoginCredentials) obj; - usage = new User(currentUserID++, cast.getName()); - } else throw new IllegalArgumentException(); - - // handling of incoming object - if (immediateResponse) { - Message response = writeProxy.getMessage(); - if (responseToSameSocket) { - response.socketId = request.socketId; - } else { - response.socketId = -0;// TODO temporary.Needs to be replaced - return; - } - // Serialize object to byte array - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (ObjectOutputStream oout = new ObjectOutputStream(baos)) { - oout.writeObject(usage); - } catch (IOException e) { - e.printStackTrace(); - } - byte[] objBytes = baos.toByteArray(); - response.writeToMessage(objBytes); - writeProxy.enqueue(response); - } - } - - /** - * This method determines if the recipient is online - * - * @param otherClientID the ID of the recipient - * @return true, if the recipient is online - * @since Envoy Server Standalone v0.1-alpha - */ - private boolean isRecipientAvailable(long otherClientID) { - return false;// TODO needs to be adapted to return true if the wanted client is online - } } \ No newline at end of file diff --git a/src/main/java/envoy/server/ObjectProcessor.java b/src/main/java/envoy/server/ObjectProcessor.java new file mode 100644 index 0000000..a056d64 --- /dev/null +++ b/src/main/java/envoy/server/ObjectProcessor.java @@ -0,0 +1,17 @@ +package envoy.server; + + +/** + * Project: envoy-server-standalone
+ * File: ObjectProcessor.java
+ * Created: 30.12.2019
+ * + * @author Kai S. K. Engelbart + * @since Envoy Server Standalone v0.1-alpha + */ +public interface ObjectProcessor { + + U process(T input); + + Class getInputClass(); +} \ No newline at end of file diff --git a/src/main/java/envoy/server/Startup.java b/src/main/java/envoy/server/Startup.java index 1c0932b..b389320 100644 --- a/src/main/java/envoy/server/Startup.java +++ b/src/main/java/envoy/server/Startup.java @@ -1,6 +1,8 @@ package envoy.server; import java.io.IOException; +import java.util.HashSet; +import java.util.Set; import com.jenkov.nioserver.Server; @@ -15,7 +17,10 @@ import com.jenkov.nioserver.Server; public class Startup { public static void main(String[] args) throws IOException { - Server server = new Server(8080, () -> new ObjectMessageReader(), new ObjectMessageProcessor()); + Set> processors = new HashSet<>(); + processors.add(new LoginCredentialProcessor()); + processors.add(new MessageProcessor()); + Server server = new Server(8080, () -> new ObjectMessageReader(), new ObjectMessageProcessor(processors)); server.start(); } } \ No newline at end of file From 901aa57f958324f54fe9fb4b54efe2e371416759 Mon Sep 17 00:00:00 2001 From: delvh Date: Mon, 30 Dec 2019 15:15:25 +0100 Subject: [PATCH 010/151] Updated Javadoc --- .../server/LoginCredentialProcessor.java | 12 +++-- .../java/envoy/server/MessageProcessor.java | 10 ++-- .../envoy/server/ObjectMessageProcessor.java | 46 +++++++++++-------- .../envoy/server/ObjectMessageReader.java | 20 ++++---- .../java/envoy/server/ObjectProcessor.java | 21 +++++++-- src/main/java/envoy/server/Startup.java | 11 ++++- 6 files changed, 77 insertions(+), 43 deletions(-) diff --git a/src/main/java/envoy/server/LoginCredentialProcessor.java b/src/main/java/envoy/server/LoginCredentialProcessor.java index 37f36e7..f208a3e 100644 --- a/src/main/java/envoy/server/LoginCredentialProcessor.java +++ b/src/main/java/envoy/server/LoginCredentialProcessor.java @@ -4,24 +4,26 @@ import envoy.data.LoginCredentials; import envoy.data.User; /** + * This {@link ObjectProcessor} handles {@link LoginCredentials}.
+ *
* Project: envoy-server-standalone
* File: LoginCredentialProcessor.java
* Created: 30.12.2019
- * + * * @author Kai S. K. Engelbart - * @since + * @since Envoy Server Standalone v0.1-alpha */ public class LoginCredentialProcessor implements ObjectProcessor { // TODO: Acquire user IDs from database private static long currentUserId = 1; + @Override + public Class getInputClass() { return LoginCredentials.class; } + @Override public User process(LoginCredentials input) { System.out.println("Received login credentials " + input); return new User(currentUserId++, input.getName()); } - - @Override - public Class getInputClass() { return LoginCredentials.class; } } diff --git a/src/main/java/envoy/server/MessageProcessor.java b/src/main/java/envoy/server/MessageProcessor.java index 85313ca..ea52c55 100644 --- a/src/main/java/envoy/server/MessageProcessor.java +++ b/src/main/java/envoy/server/MessageProcessor.java @@ -3,18 +3,20 @@ package envoy.server; import envoy.data.Message; /** + * This {@link ObjectProcessor} handles incoming {@link Message}s.
+ *
* Project: envoy-server-standalone
* File: MessageProcessor.java
* Created: 30.12.2019
- * + * * @author Kai S. K. Engelbart - * @since + * @since Envoy Server Standalone v0.1-alpha */ public class MessageProcessor implements ObjectProcessor { @Override - public Void process(Message input) { return null; } + public Class getInputClass() { return Message.class; } @Override - public Class getInputClass() { return Message.class; } + public Void process(Message input) { return null; } } diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/ObjectMessageProcessor.java index 8bf8ad6..53e53da 100644 --- a/src/main/java/envoy/server/ObjectMessageProcessor.java +++ b/src/main/java/envoy/server/ObjectMessageProcessor.java @@ -12,10 +12,12 @@ import com.jenkov.nioserver.Message; import com.jenkov.nioserver.WriteProxy; /** + * Handles incoming objects.
+ *
* Project: envoy-server-standalone
* File: ObjectMessageProcessor.java
* Created: 28.12.2019
- * + * * @author Kai S. K. Engelbart * @since Envoy Server Standalone v0.1-alpha */ @@ -23,6 +25,12 @@ public class ObjectMessageProcessor implements IMessageProcessor { private final Set> processors; + /** + * The constructor to set the {@link ObjectProcessor}s. + * + * @param processors the {@link ObjectProcessor} to set + * @since Envoy Server Standalone v0.1-alpha + */ public ObjectMessageProcessor(Set> processors) { this.processors = processors; } @SuppressWarnings("unchecked") @@ -33,27 +41,25 @@ public class ObjectMessageProcessor implements IMessageProcessor { System.out.println("Read object: " + obj.toString()); // Process object - processors.stream() - .filter(p -> p.getInputClass().isInstance(obj)) - .forEach((@SuppressWarnings("rawtypes") ObjectProcessor p) -> { - Object responseObj = p.process(p.getInputClass().cast(obj)); - if (responseObj != null) { - // Create message targeted at the client - Message response = writeProxy.getMessage(); - response.socketId = message.socketId; + processors.stream().filter(p -> p.getInputClass().isInstance(obj)).forEach((@SuppressWarnings("rawtypes") ObjectProcessor p) -> { + Object responseObj = p.process(p.getInputClass().cast(obj)); + if (responseObj != null) { + // Create message targeted at the client + Message response = writeProxy.getMessage(); + response.socketId = message.socketId; - // Serialize object to byte array - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try (ObjectOutputStream oout = new ObjectOutputStream(baos)) { - oout.writeObject(responseObj); - } catch (IOException e) { - e.printStackTrace(); - } - byte[] objBytes = baos.toByteArray(); - response.writeToMessage(objBytes); - writeProxy.enqueue(response); + // Serialize object to byte array + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream oout = new ObjectOutputStream(baos)) { + oout.writeObject(responseObj); + } catch (IOException e) { + e.printStackTrace(); } - }); + byte[] objBytes = baos.toByteArray(); + response.writeToMessage(objBytes); + writeProxy.enqueue(response); + } + }); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } diff --git a/src/main/java/envoy/server/ObjectMessageReader.java b/src/main/java/envoy/server/ObjectMessageReader.java index 9a20c7f..f0fa73a 100644 --- a/src/main/java/envoy/server/ObjectMessageReader.java +++ b/src/main/java/envoy/server/ObjectMessageReader.java @@ -11,10 +11,12 @@ import com.jenkov.nioserver.MessageBuffer; import com.jenkov.nioserver.Socket; /** + * This {@link IMessageReader} decodes serialized Java objects.
+ *
* Project: envoy-server-standalone
* File: ObjectMessageReader.java
* Created: 28.12.2019
- * + * * @author Kai S. K. Engelbart * @since Envoy Server Standalone v0.1-alpha */ @@ -24,6 +26,14 @@ public class ObjectMessageReader implements IMessageReader { private Message nextMessage; private MessageBuffer messageBuffer; + private int fromByteArray(byte[] bytes, int offset) { + return ((bytes[offset] & 0xFF) << 24) | ((bytes[offset + 1] & 0xFF) << 16) | ((bytes[offset + 2] & 0xFF) << 8) + | ((bytes[offset + 3] & 0xFF) << 0); + } + + @Override + public List getMessages() { return completeMessages; } + @Override public void init(MessageBuffer messageBuffer) { this.messageBuffer = messageBuffer; @@ -55,12 +65,4 @@ public class ObjectMessageReader implements IMessageReader { buffer.clear(); } - - private int fromByteArray(byte[] bytes, int offset) { - return ((bytes[offset] & 0xFF) << 24) | ((bytes[offset + 1] & 0xFF) << 16) | ((bytes[offset + 2] & 0xFF) << 8) - | ((bytes[offset + 3] & 0xFF) << 0); - } - - @Override - public List getMessages() { return completeMessages; } } \ No newline at end of file diff --git a/src/main/java/envoy/server/ObjectProcessor.java b/src/main/java/envoy/server/ObjectProcessor.java index a056d64..44c07e1 100644 --- a/src/main/java/envoy/server/ObjectProcessor.java +++ b/src/main/java/envoy/server/ObjectProcessor.java @@ -1,17 +1,30 @@ package envoy.server; - /** + * This interface defines methods for processing objects of a specific + * type incoming from a client.
+ *
* Project: envoy-server-standalone
* File: ObjectProcessor.java
* Created: 30.12.2019
- * + * * @author Kai S. K. Engelbart + * @param type of the request object + * @param type of the response object * @since Envoy Server Standalone v0.1-alpha */ public interface ObjectProcessor { - U process(T input); - + /** + * @return the Class of the request object + * @since Envoy Server Standalone v0.1-alpha + */ Class getInputClass(); + + /** + * @param input the request object + * @return the response object + * @since Envoy Server Standalone v0.1-alpha + */ + U process(T input); } \ No newline at end of file diff --git a/src/main/java/envoy/server/Startup.java b/src/main/java/envoy/server/Startup.java index b389320..58a8366 100644 --- a/src/main/java/envoy/server/Startup.java +++ b/src/main/java/envoy/server/Startup.java @@ -7,15 +7,24 @@ import java.util.Set; import com.jenkov.nioserver.Server; /** + * Starts the server.
+ *
* Project: envoy-server-standalone
* File: Startup.java
* Created: 24.12.2019
- * + * * @author Kai S. K. Engelbart * @since Envoy Server Standalone v0.1-alpha */ public class Startup { + /** + * Starts the server. + * + * @param args the run configuration. Currently unused. + * @throws IOException if the server crashes + * @since Envoy Server Standalone v0.1-alpha + */ public static void main(String[] args) throws IOException { Set> processors = new HashSet<>(); processors.add(new LoginCredentialProcessor()); From 8d62e31edf79db4e03b6587a4f05ac78d006a58b Mon Sep 17 00:00:00 2001 From: delvh Date: Mon, 30 Dec 2019 15:24:25 +0100 Subject: [PATCH 011/151] Create stale.yml Stale Issues (no progress for about 2 months) will be discarded automatically --- .github/workflows/stale.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/stale.yml diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..814af80 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,22 @@ +name: Mark stale issues and pull requests + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + stale: + + runs-on: ubuntu-latest + + steps: + - uses: actions/stale@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-issue-message: 'Stale issue message' + stale-pr-message: 'Stale pull request message' + stale-issue-label: 'no-issue-activity' + days-before-stale: 60 + days-before-close: 7 + stale-pr-label: 'no-pr-activity' + operations-per-run: 30 From 9318201fd53ab4d299be232107fffb85f1a3af89 Mon Sep 17 00:00:00 2001 From: kske Date: Thu, 2 Jan 2020 18:50:56 +0200 Subject: [PATCH 012/151] Added ORM classes --- pom.xml | 5 ++ src/main/java/envoy/server/data/Message.java | 81 ++++++++++++++++++++ src/main/java/envoy/server/data/User.java | 57 ++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 src/main/java/envoy/server/data/Message.java create mode 100644 src/main/java/envoy/server/data/User.java diff --git a/pom.xml b/pom.xml index b85a456..5b81ded 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,11 @@ java-nio-server 0.0.1-SNAPSHOT
+ + org.hibernate + hibernate-core + 5.4.10.Final +
diff --git a/src/main/java/envoy/server/data/Message.java b/src/main/java/envoy/server/data/Message.java new file mode 100644 index 0000000..be11608 --- /dev/null +++ b/src/main/java/envoy/server/data/Message.java @@ -0,0 +1,81 @@ +package envoy.server.data; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import envoy.data.MessageBuilder; + +/** + * Project: envoy-server-standalone
+ * File: Message.java
+ * Created: 02.01.2020
+ * + * @author Kai S. K. Engelbart + * @since Envoy Server Standalone v0.1-alpha + */ +@Entity +public class Message { + + @Id + private long id; + private User sender, recipient; + @Temporal(TemporalType.TIMESTAMP) + private Date creationDate; + @Temporal(TemporalType.TIMESTAMP) + private Date receivedDate; + @Temporal(TemporalType.TIMESTAMP) + private Date readDate; + private envoy.data.Message.MessageStatus status; + private String text; + private byte[] attachment; + + public Message() {} + + // TODO: everything except ID + public Message(envoy.data.Message message) { id = message.getId(); } + + public envoy.data.Message toCommonMessage() { + // TODO: Attachment, dates + return new MessageBuilder(sender.getId(), recipient.getId()).setText(text).setDate(creationDate).setStatus(status).build(); + } + + public long getId() { return id; } + + public void setId(long id) { this.id = id; } + + public User getSender() { return sender; } + + public void setSender(User sender) { this.sender = sender; } + + public User getRecipient() { return recipient; } + + public void setRecipient(User recipient) { this.recipient = recipient; } + + public Date getCreationDate() { return creationDate; } + + public void setCreationDate(Date creationDate) { this.creationDate = creationDate; } + + public Date getReceivedDate() { return receivedDate; } + + public void setReceivedDate(Date receivedDate) { this.receivedDate = receivedDate; } + + public Date getReadDate() { return readDate; } + + public void setReadDate(Date readDate) { this.readDate = readDate; } + + public envoy.data.Message.MessageStatus getStatus() { return status; } + + public void setStatus(envoy.data.Message.MessageStatus status) { this.status = status; } + + public String getText() { return text; } + + public void setText(String text) { this.text = text; } + + public byte[] getAttachment() { return attachment; } + + public void setAttachment(byte[] attachment) { this.attachment = attachment; } +} diff --git a/src/main/java/envoy/server/data/User.java b/src/main/java/envoy/server/data/User.java new file mode 100644 index 0000000..28dbc0f --- /dev/null +++ b/src/main/java/envoy/server/data/User.java @@ -0,0 +1,57 @@ +package envoy.server.data; + +import java.util.Date; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +/** + * Project: envoy-server-standalone
+ * File: User.java
+ * Created: 02.01.2020
+ * + * @author Kai S. K. Engelbart + * @since Envoy Server Standalone v0.1-alpha + */ +@Entity +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + private String name; + private byte[] passwordHash; + @Temporal(TemporalType.TIMESTAMP) + private Date lastSeen; + private envoy.data.User.UserStatus status; + private List contacts; + + public long getId() { return id; } + + public void setId(long id) { this.id = id; } + + public String getName() { return name; } + + public void setName(String name) { this.name = name; } + + public byte[] getPasswordHash() { return passwordHash; } + + public void setPasswordHash(byte[] passwordHash) { this.passwordHash = passwordHash; } + + public Date getLastSeen() { return lastSeen; } + + public void setLastSeen(Date lastSeen) { this.lastSeen = lastSeen; } + + public envoy.data.User.UserStatus getStatus() { return status; } + + public void setStatus(envoy.data.User.UserStatus status) { this.status = status; } + + public List getContacts() { return contacts; } + + public void setContacts(List contacts) { this.contacts = contacts; } +} From 10a387beea3184f6d3e8e2c7472b746b7c278ead Mon Sep 17 00:00:00 2001 From: kske Date: Fri, 3 Jan 2020 16:40:43 +0200 Subject: [PATCH 013/151] Moved classes related to java-nio-server to envoy.server.net package. --- src/main/java/envoy/server/Startup.java | 3 +++ .../server/{ => net}/ObjectMessageProcessor.java | 4 +++- .../envoy/server/{ => net}/ObjectMessageReader.java | 12 ++++++------ 3 files changed, 12 insertions(+), 7 deletions(-) rename src/main/java/envoy/server/{ => net}/ObjectMessageProcessor.java (97%) rename src/main/java/envoy/server/{ => net}/ObjectMessageReader.java (98%) diff --git a/src/main/java/envoy/server/Startup.java b/src/main/java/envoy/server/Startup.java index 58a8366..dd295a4 100644 --- a/src/main/java/envoy/server/Startup.java +++ b/src/main/java/envoy/server/Startup.java @@ -6,6 +6,9 @@ import java.util.Set; import com.jenkov.nioserver.Server; +import envoy.server.net.ObjectMessageProcessor; +import envoy.server.net.ObjectMessageReader; + /** * Starts the server.
*
diff --git a/src/main/java/envoy/server/ObjectMessageProcessor.java b/src/main/java/envoy/server/net/ObjectMessageProcessor.java similarity index 97% rename from src/main/java/envoy/server/ObjectMessageProcessor.java rename to src/main/java/envoy/server/net/ObjectMessageProcessor.java index 53e53da..6f652d9 100644 --- a/src/main/java/envoy/server/ObjectMessageProcessor.java +++ b/src/main/java/envoy/server/net/ObjectMessageProcessor.java @@ -1,4 +1,4 @@ -package envoy.server; +package envoy.server.net; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -11,6 +11,8 @@ import com.jenkov.nioserver.IMessageProcessor; import com.jenkov.nioserver.Message; import com.jenkov.nioserver.WriteProxy; +import envoy.server.ObjectProcessor; + /** * Handles incoming objects.
*
diff --git a/src/main/java/envoy/server/ObjectMessageReader.java b/src/main/java/envoy/server/net/ObjectMessageReader.java similarity index 98% rename from src/main/java/envoy/server/ObjectMessageReader.java rename to src/main/java/envoy/server/net/ObjectMessageReader.java index f0fa73a..b477734 100644 --- a/src/main/java/envoy/server/ObjectMessageReader.java +++ b/src/main/java/envoy/server/net/ObjectMessageReader.java @@ -1,4 +1,4 @@ -package envoy.server; +package envoy.server.net; import java.io.IOException; import java.nio.ByteBuffer; @@ -26,11 +26,6 @@ public class ObjectMessageReader implements IMessageReader { private Message nextMessage; private MessageBuffer messageBuffer; - private int fromByteArray(byte[] bytes, int offset) { - return ((bytes[offset] & 0xFF) << 24) | ((bytes[offset + 1] & 0xFF) << 16) | ((bytes[offset + 2] & 0xFF) << 8) - | ((bytes[offset + 3] & 0xFF) << 0); - } - @Override public List getMessages() { return completeMessages; } @@ -65,4 +60,9 @@ public class ObjectMessageReader implements IMessageReader { buffer.clear(); } + + private int fromByteArray(byte[] bytes, int offset) { + return ((bytes[offset] & 0xFF) << 24) | ((bytes[offset + 1] & 0xFF) << 16) | ((bytes[offset + 2] & 0xFF) << 8) + | ((bytes[offset + 3] & 0xFF) << 0); + } } \ No newline at end of file From b83ef8b4efcb7b0abe20b217aebe50b9f75ce977 Mon Sep 17 00:00:00 2001 From: delvh Date: Fri, 3 Jan 2020 16:21:35 +0100 Subject: [PATCH 014/151] Updated Javadoc --- .classpath | 1 + .project | 6 + .settings/org.eclipse.jdt.ui.prefs | 3 +- .settings/org.hibernate.eclipse.console.prefs | 3 + src/main/java/envoy/server/data/Message.java | 107 +++++++++++++++++- src/main/java/envoy/server/data/User.java | 61 +++++++++- .../server/database/PersistenceManager.java | 21 ++++ 7 files changed, 198 insertions(+), 4 deletions(-) create mode 100644 .settings/org.hibernate.eclipse.console.prefs create mode 100644 src/main/java/envoy/server/database/PersistenceManager.java diff --git a/.classpath b/.classpath index 002ad57..2a83b68 100644 --- a/.classpath +++ b/.classpath @@ -34,5 +34,6 @@ + diff --git a/.project b/.project index 45a395e..f87ca5c 100644 --- a/.project +++ b/.project @@ -15,9 +15,15 @@ + + org.hibernate.eclipse.console.hibernateBuilder + + + org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + org.hibernate.eclipse.console.hibernateNature diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs index 7103be7..20da6a0 100644 --- a/.settings/org.eclipse.jdt.ui.prefs +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -1,2 +1,3 @@ eclipse.preferences.version=1 -org.eclipse.jdt.ui.text.custom_code_templates= +org.eclipse.jdt.ui.javadoc=true +org.eclipse.jdt.ui.text.custom_code_templates=