66 lines
2.0 KiB
Java
Executable File
66 lines
2.0 KiB
Java
Executable File
package envoy.server.net;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.IOException;
|
|
import java.io.ObjectInputStream;
|
|
import java.util.Set;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
import com.jenkov.nioserver.IMessageProcessor;
|
|
import com.jenkov.nioserver.Message;
|
|
import com.jenkov.nioserver.WriteProxy;
|
|
|
|
import envoy.server.processors.ObjectProcessor;
|
|
import envoy.util.EnvoyLog;
|
|
|
|
/**
|
|
* Handles incoming objects.<br>
|
|
* <br>
|
|
* Project: <strong>envoy-server-standalone</strong><br>
|
|
* File: <strong>ObjectMessageProcessor.java</strong><br>
|
|
* Created: <strong>28.12.2019</strong><br>
|
|
*
|
|
* @author Kai S. K. Engelbart
|
|
* @since Envoy Server Standalone v0.1-alpha
|
|
*/
|
|
public class ObjectMessageProcessor implements IMessageProcessor {
|
|
|
|
private final Set<ObjectProcessor<?>> processors;
|
|
|
|
private static final Logger logger = EnvoyLog.getLogger(ObjectMessageProcessor.class);
|
|
|
|
/**
|
|
* 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<ObjectProcessor<?>> 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();
|
|
if (obj == null) {
|
|
logger.warning("Received a null object");
|
|
return;
|
|
}
|
|
|
|
logger.fine("Received " + obj);
|
|
|
|
// Process object
|
|
processors.stream().filter(p -> p.getInputClass().equals(obj.getClass())).forEach((@SuppressWarnings("rawtypes") ObjectProcessor p) -> {
|
|
try {
|
|
p.process(p.getInputClass().cast(obj), message.socketId, new ObjectWriteProxy(writeProxy));
|
|
} catch (IOException e) {
|
|
logger.log(Level.SEVERE, "Exception during processor execution: ", e);
|
|
}
|
|
});
|
|
} catch (IOException | ClassNotFoundException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|