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