Filter out subclasses in ObjectMessageProcessor
This commit is contained in:
parent
5374296e6c
commit
af765ee1f7
@ -4,6 +4,7 @@ import java.io.ByteArrayInputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import com.jenkov.nioserver.IMessageProcessor;
|
import com.jenkov.nioserver.IMessageProcessor;
|
||||||
@ -50,11 +51,11 @@ public class ObjectMessageProcessor implements IMessageProcessor {
|
|||||||
logger.fine("Received " + obj);
|
logger.fine("Received " + obj);
|
||||||
|
|
||||||
// Process object
|
// Process object
|
||||||
processors.stream().filter(p -> p.getInputClass().isInstance(obj)).forEach((@SuppressWarnings("rawtypes") ObjectProcessor p) -> {
|
processors.stream().filter(p -> p.getInputClass().equals(obj.getClass())).forEach((@SuppressWarnings("rawtypes") ObjectProcessor p) -> {
|
||||||
try {
|
try {
|
||||||
p.process(p.getInputClass().cast(obj), message.socketId, new ObjectWriteProxy(writeProxy));
|
p.process(p.getInputClass().cast(obj), message.socketId, new ObjectWriteProxy(writeProxy));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
logger.log(Level.SEVERE, "Exception during processor execution: ", e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (IOException | ClassNotFoundException e) {
|
} catch (IOException | ClassNotFoundException e) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package envoy.server.processors;
|
package envoy.server.processors;
|
||||||
|
|
||||||
|
import static envoy.data.Message.MessageStatus.*;
|
||||||
import static envoy.data.User.UserStatus.ONLINE;
|
import static envoy.data.User.UserStatus.ONLINE;
|
||||||
import static envoy.event.HandshakeRejection.*;
|
import static envoy.event.HandshakeRejection.*;
|
||||||
|
|
||||||
@ -10,7 +11,6 @@ import java.util.logging.Logger;
|
|||||||
import javax.persistence.NoResultException;
|
import javax.persistence.NoResultException;
|
||||||
|
|
||||||
import envoy.data.LoginCredentials;
|
import envoy.data.LoginCredentials;
|
||||||
import envoy.data.Message.MessageStatus;
|
|
||||||
import envoy.event.GroupMessageStatusChange;
|
import envoy.event.GroupMessageStatusChange;
|
||||||
import envoy.event.HandshakeRejection;
|
import envoy.event.HandshakeRejection;
|
||||||
import envoy.event.MessageStatusChange;
|
import envoy.event.MessageStatusChange;
|
||||||
@ -120,7 +120,7 @@ public final class LoginCredentialProcessor implements ObjectProcessor<LoginCred
|
|||||||
|
|
||||||
for (var msg : pendingMessages) {
|
for (var msg : pendingMessages) {
|
||||||
final var msgCommon = msg.toCommon();
|
final var msgCommon = msg.toCommon();
|
||||||
if (msg.getStatus() == MessageStatus.SENT) {
|
if (msg.getStatus() == SENT) {
|
||||||
|
|
||||||
// Send the message
|
// Send the message
|
||||||
writeProxy.write(socketID, msgCommon);
|
writeProxy.write(socketID, msgCommon);
|
||||||
@ -142,16 +142,17 @@ public final class LoginCredentialProcessor implements ObjectProcessor<LoginCred
|
|||||||
final var gmsgCommon = gmsg.toCommon();
|
final var gmsgCommon = gmsg.toCommon();
|
||||||
|
|
||||||
// Deliver the message to the user if he hasn't received it yet
|
// Deliver the message to the user if he hasn't received it yet
|
||||||
if (gmsg.getMemberMessageStatus().get(user.getID()) == MessageStatus.SENT) {
|
if (gmsg.getMemberMessageStatus().get(user.getID()) == SENT) {
|
||||||
gmsg.getMemberMessageStatus().replace(user.getID(), MessageStatus.RECEIVED);
|
gmsg.getMemberMessageStatus().replace(user.getID(), RECEIVED);
|
||||||
writeProxy.write(socketID, gmsgCommon);
|
writeProxy.write(socketID, gmsgCommon);
|
||||||
|
|
||||||
// Notify all online group members about the status change
|
// Notify all online group members about the status change
|
||||||
writeProxy.writeToOnlineContacts(gmsg.getRecipient().getContacts(),
|
writeProxy.writeToOnlineContacts(gmsg.getRecipient().getContacts(),
|
||||||
new GroupMessageStatusChange(gmsg.getID(), MessageStatus.RECEIVED, LocalDateTime.now(),
|
new GroupMessageStatusChange(gmsg.getID(), RECEIVED, LocalDateTime
|
||||||
|
.now(),
|
||||||
connectionManager.getUserIDBySocketID(socketID)));
|
connectionManager.getUserIDBySocketID(socketID)));
|
||||||
|
|
||||||
if (Collections.min(gmsg.getMemberMessageStatus().values()) == MessageStatus.RECEIVED) {
|
if (Collections.min(gmsg.getMemberMessageStatus().values()) == RECEIVED) {
|
||||||
gmsg.received();
|
gmsg.received();
|
||||||
|
|
||||||
// Notify online members about the status change
|
// Notify online members about the status change
|
||||||
|
@ -31,10 +31,6 @@ public class MessageProcessor implements ObjectProcessor<Message> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(Message message, long socketID, ObjectWriteProxy writeProxy) {
|
public void process(Message message, long socketID, ObjectWriteProxy writeProxy) {
|
||||||
// Makes sure, that there are no groupMessages processed here, because
|
|
||||||
// groupMessage is a subclass of message.
|
|
||||||
if (message instanceof envoy.data.GroupMessage) return;
|
|
||||||
|
|
||||||
message.nextStatus();
|
message.nextStatus();
|
||||||
|
|
||||||
// Convert to server message
|
// Convert to server message
|
||||||
|
@ -5,7 +5,6 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import envoy.data.Message.MessageStatus;
|
import envoy.data.Message.MessageStatus;
|
||||||
import envoy.event.GroupMessageStatusChange;
|
|
||||||
import envoy.event.MessageStatusChange;
|
import envoy.event.MessageStatusChange;
|
||||||
import envoy.server.data.PersistenceManager;
|
import envoy.server.data.PersistenceManager;
|
||||||
import envoy.server.net.ConnectionManager;
|
import envoy.server.net.ConnectionManager;
|
||||||
@ -28,8 +27,6 @@ public class MessageStatusChangeProcessor implements ObjectProcessor<MessageStat
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void process(MessageStatusChange statusChange, long socketID, ObjectWriteProxy writeProxy) throws IOException {
|
public void process(MessageStatusChange statusChange, long socketID, ObjectWriteProxy writeProxy) throws IOException {
|
||||||
// Filtering out subclass objects, which should not be processed here.
|
|
||||||
if (statusChange instanceof GroupMessageStatusChange) return;
|
|
||||||
|
|
||||||
// Any other status than READ is not supposed to be sent to the server
|
// Any other status than READ is not supposed to be sent to the server
|
||||||
if (statusChange.get() != MessageStatus.READ) {
|
if (statusChange.get() != MessageStatus.READ) {
|
||||||
|
Reference in New Issue
Block a user