| @@ -40,7 +40,7 @@ public class Startup { | ||||
| 		items.put("homeDirectory", | ||||
| 				new ConfigItem<>("homeDirectory", "h", File::new, new File(System.getProperty("user.home"), ".envoy-server"), true)); | ||||
| 		items.put("fileLevelBarrier", new ConfigItem<>("fileLevelBarrier", "fb", Level::parse, Level.SEVERE, true)); | ||||
| 		items.put("consoleLevelBarrier", new ConfigItem<>("consoleLevelBarrier", "cb", Level::parse, Level.INFO, true)); | ||||
| 		items.put("consoleLevelBarrier", new ConfigItem<>("consoleLevelBarrier", "cb", Level::parse, Level.FINE, true)); | ||||
|  | ||||
| 		final var config = new Config(); | ||||
| 		config.load(items); | ||||
|   | ||||
| @@ -4,12 +4,14 @@ import java.io.ByteArrayInputStream; | ||||
| import java.io.IOException; | ||||
| import java.io.ObjectInputStream; | ||||
| import java.util.Set; | ||||
| 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> | ||||
| @@ -25,6 +27,8 @@ 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. | ||||
| 	 * | ||||
| @@ -39,11 +43,11 @@ public class ObjectMessageProcessor implements IMessageProcessor { | ||||
| 		try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) { | ||||
| 			Object obj = in.readObject(); | ||||
| 			if (obj == null) { | ||||
| 				System.out.println("received a null object"); | ||||
| 				logger.warning("Received a null object"); | ||||
| 				return; | ||||
| 			} | ||||
|  | ||||
| 			System.out.println("Read object: " + obj); | ||||
| 			logger.fine("Received " + obj); | ||||
|  | ||||
| 			// Process object | ||||
| 			processors.stream().filter(p -> p.getInputClass().isInstance(obj)).forEach((@SuppressWarnings("rawtypes") ObjectProcessor p) -> { | ||||
|   | ||||
| @@ -1,10 +1,12 @@ | ||||
| package envoy.server.net; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import com.jenkov.nioserver.Message; | ||||
| import com.jenkov.nioserver.WriteProxy; | ||||
|  | ||||
| import envoy.util.EnvoyLog; | ||||
| import envoy.util.SerializationUtils; | ||||
|  | ||||
| /** | ||||
| @@ -21,6 +23,8 @@ public class ObjectWriteProxy { | ||||
|  | ||||
| 	private final WriteProxy writeProxy; | ||||
|  | ||||
| 	private static final Logger logger = EnvoyLog.getLogger(ObjectWriteProxy.class); | ||||
|  | ||||
| 	/** | ||||
| 	 * Creates an instance of {@link ObjectWriteProxy}. | ||||
| 	 * | ||||
| @@ -40,7 +44,7 @@ public class ObjectWriteProxy { | ||||
| 		final Message response = writeProxy.getMessage(); | ||||
| 		response.socketId = recipientSocketID; | ||||
|  | ||||
| 		System.out.println("Sending object " + obj); | ||||
| 		logger.fine("Sending " + obj); | ||||
|  | ||||
| 		// Serialize object to byte array | ||||
| 		final byte[] objBytes = SerializationUtils.writeToByteArray(obj); | ||||
|   | ||||
| @@ -1,12 +1,14 @@ | ||||
| package envoy.server.processors; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import envoy.event.ElementOperation; | ||||
| import envoy.event.contact.ContactOperationEvent; | ||||
| import envoy.server.data.PersistenceManager; | ||||
| import envoy.server.net.ConnectionManager; | ||||
| import envoy.server.net.ObjectWriteProxy; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-server-standalone</strong><br> | ||||
| @@ -19,6 +21,7 @@ import envoy.server.net.ObjectWriteProxy; | ||||
| public class ContactOperationProcessor implements ObjectProcessor<ContactOperationEvent> { | ||||
|  | ||||
| 	private static final ConnectionManager connectionManager = ConnectionManager.getInstance(); | ||||
| 	private static final Logger				logger				= EnvoyLog.getLogger(ContactOperationProcessor.class); | ||||
|  | ||||
| 	@Override | ||||
| 	public void process(ContactOperationEvent evt, long socketId, ObjectWriteProxy writeProxy) throws IOException { | ||||
| @@ -27,7 +30,7 @@ public class ContactOperationProcessor implements ObjectProcessor<ContactOperati | ||||
| 				final long userID = ConnectionManager.getInstance().getUserIdBySocketId(socketId); | ||||
| 				final long contactId = evt.get().getID(); | ||||
|  | ||||
| 				System.out.printf("Adding user %s to the contact list of user %d.%n", evt.get(), userID); | ||||
| 				logger.fine(String.format("Adding user %s to the contact list of user %d.%n", evt.get(), userID)); | ||||
| 				PersistenceManager.getInstance().addUserContact(userID, contactId); | ||||
|  | ||||
| 				// Notify the contact if online | ||||
| @@ -36,7 +39,7 @@ public class ContactOperationProcessor implements ObjectProcessor<ContactOperati | ||||
| 							new ContactOperationEvent(PersistenceManager.getInstance().getUserByID(userID).toCommon(), ElementOperation.ADD)); | ||||
| 				break; | ||||
| 			default: | ||||
| 				System.err.printf("Received %s with an unsupported operation.%n", evt); | ||||
| 				logger.warning(String.format("Received %s with an unsupported operation.%n", evt)); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package envoy.server.processors; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.Date; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import javax.persistence.EntityExistsException; | ||||
|  | ||||
| @@ -11,6 +12,7 @@ import envoy.event.MessageStatusChangeEvent; | ||||
| import envoy.server.data.PersistenceManager; | ||||
| import envoy.server.net.ConnectionManager; | ||||
| import envoy.server.net.ObjectWriteProxy; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-server-standalone</strong><br> | ||||
| @@ -22,6 +24,8 @@ import envoy.server.net.ObjectWriteProxy; | ||||
|  */ | ||||
| public class GroupMessageProcessor implements ObjectProcessor<GroupMessage> { | ||||
|  | ||||
| 	private static final Logger logger = EnvoyLog.getLogger(GroupCreationProcessor.class); | ||||
|  | ||||
| 	@Override | ||||
| 	public void process(GroupMessage groupMessage, long socketID, ObjectWriteProxy writeProxy) { | ||||
| 		groupMessage.nextStatus(); | ||||
| @@ -29,7 +33,7 @@ public class GroupMessageProcessor implements ObjectProcessor<GroupMessage> { | ||||
| 		try { | ||||
| 			writeProxy.write(socketID, new MessageStatusChangeEvent(groupMessage)); | ||||
| 		} catch (IOException e) { | ||||
| 			System.err.println("Could not send messageStatusChangeEvent to the sender of this groupMessage with ID: " + groupMessage.getID()); | ||||
| 			logger.warning("Could not send messageStatusChangeEvent to the sender of this groupMessage with ID: " + groupMessage.getID()); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
|  | ||||
| @@ -48,7 +52,7 @@ public class GroupMessageProcessor implements ObjectProcessor<GroupMessage> { | ||||
| 		try { | ||||
| 			PersistenceManager.getInstance().addMessage(new envoy.server.data.GroupMessage(groupMessage, new Date())); | ||||
| 		} catch (EntityExistsException e) { | ||||
| 			System.err.println("Received a groupMessage with an ID that already exists"); | ||||
| 			logger.warning("Received a groupMessage with an ID that already exists"); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -57,7 +61,7 @@ public class GroupMessageProcessor implements ObjectProcessor<GroupMessage> { | ||||
| 			// If recipient is online, send the groupMessage directly | ||||
| 			writeProxy.write(connectionManager.getSocketId(memberID), groupMessage); | ||||
| 		} catch (IOException e) { | ||||
| 			System.err.println("Recipient online. Failed to send message" + groupMessage.getID()); | ||||
| 			logger.warning("Recipient online. Failed to send message" + groupMessage.getID()); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -1,12 +1,14 @@ | ||||
| package envoy.server.processors; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import envoy.data.IDGenerator; | ||||
| import envoy.event.IDGeneratorRequest; | ||||
| import envoy.server.data.ConfigItem; | ||||
| import envoy.server.data.PersistenceManager; | ||||
| import envoy.server.net.ObjectWriteProxy; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-server-standalone</strong><br> | ||||
| @@ -20,15 +22,16 @@ import envoy.server.net.ObjectWriteProxy; | ||||
| public class IDGeneratorRequestProcessor implements ObjectProcessor<IDGeneratorRequest> { | ||||
|  | ||||
| 	private static final long ID_RANGE = 200; | ||||
| 	private static final Logger	logger		= EnvoyLog.getLogger(IDGeneratorRequestProcessor.class); | ||||
|  | ||||
| 	@Override | ||||
| 	public Class<IDGeneratorRequest> getInputClass() { return IDGeneratorRequest.class; } | ||||
|  | ||||
| 	@Override | ||||
| 	public void process(IDGeneratorRequest input, long socketID, ObjectWriteProxy writeProxy) throws IOException { | ||||
| 		System.out.println("Received id generation request."); | ||||
| 		logger.fine("Received id generation request."); | ||||
| 		var generator = createIDGenerator(); | ||||
| 		System.out.println("Sending new id generator " + generator); | ||||
| 		logger.info("Sending new id generator " + generator); | ||||
| 		writeProxy.write(socketID, generator); | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package envoy.server.processors; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.*; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import javax.persistence.NoResultException; | ||||
|  | ||||
| @@ -15,6 +16,7 @@ import envoy.server.data.Message; | ||||
| import envoy.server.data.PersistenceManager; | ||||
| import envoy.server.net.ConnectionManager; | ||||
| import envoy.server.net.ObjectWriteProxy; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * This {@link ObjectProcessor} handles {@link LoginCredentials}.<br> | ||||
| @@ -32,16 +34,18 @@ public class LoginCredentialProcessor implements ObjectProcessor<LoginCredential | ||||
| 	private final PersistenceManager	persistenceManager	= PersistenceManager.getInstance(); | ||||
| 	private final ConnectionManager		connectionManager	= ConnectionManager.getInstance(); | ||||
|  | ||||
| 	private static final Logger logger = EnvoyLog.getLogger(LoginCredentialProcessor.class); | ||||
|  | ||||
| 	@Override | ||||
| 	public void process(LoginCredentials input, long socketID, ObjectWriteProxy writeProxy) throws IOException { | ||||
| 		UserStatusChangeProcessor.setWriteProxy(writeProxy); | ||||
| 		System.out.println(String.format("Received login credentials %s from socket ID %d", input, socketID)); | ||||
| 		logger.info(String.format("Received login credentials %s from socket ID %d", input, socketID)); | ||||
|  | ||||
| 		envoy.server.data.User user = getUser(input, socketID, writeProxy); | ||||
|  | ||||
| 		// Not logged in successfully | ||||
| 		if (user == null) { | ||||
| 			System.out.println("Rejecting handshake on socket " + socketID); | ||||
| 			logger.info("Rejecting handshake on socket " + socketID); | ||||
| 			return; | ||||
| 		} | ||||
| 		connectionManager.registerUser(user.getID(), socketID); | ||||
| @@ -52,25 +56,25 @@ public class LoginCredentialProcessor implements ObjectProcessor<LoginCredential | ||||
| 		UserStatusChangeProcessor.updateUserStatus(user); | ||||
|  | ||||
| 		// Complete handshake | ||||
| 		System.out.println("Sending user..."); | ||||
| 		logger.fine("Sending user..."); | ||||
| 		writeProxy.write(socketID, user.toCommon()); | ||||
| 		System.out.println("Acquiring pending messages for the client..."); | ||||
| 		logger.fine("Acquiring pending messages for the client..."); | ||||
| 		List<Message> pendingMessages = PersistenceManager.getInstance().getPendingMessages(user); | ||||
| 		for (Message msg : pendingMessages) | ||||
| 			if (msg.getStatus() == MessageStatus.SENT) { | ||||
| 				System.out.println("Sending message " + msg.toCommon()); | ||||
| 				logger.info("Sending message " + msg.toCommon()); | ||||
| 				writeProxy.write(socketID, msg.toCommon()); | ||||
| 				msg.setReceivedDate(new Date()); | ||||
| 				msg.setStatus(MessageStatus.RECEIVED); | ||||
| 				if (connectionManager.isOnline(msg.getSender().getID())) { | ||||
| 					var evt = new MessageStatusChangeEvent(msg.toCommon()); | ||||
| 					System.out.println("Sending messageStatusChangeEvent to sender " + evt); | ||||
| 					logger.info("Sending messageStatusChangeEvent to sender " + evt); | ||||
| 					writeProxy.write(connectionManager.getSocketId(msg.getSender().getID()), evt); | ||||
| 				} | ||||
| 				PersistenceManager.getInstance().updateMessage(msg); | ||||
| 			} else { | ||||
| 				var evt = new MessageStatusChangeEvent(msg.toCommon()); | ||||
| 				System.out.println("Sending messageStatusChangeEvent " + evt); | ||||
| 				logger.info("Sending messageStatusChangeEvent " + evt); | ||||
| 				writeProxy.write(socketID, evt); | ||||
| 			} | ||||
| 	} | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package envoy.server.processors; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.Date; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import javax.persistence.EntityExistsException; | ||||
|  | ||||
| @@ -11,6 +12,7 @@ import envoy.event.MessageStatusChangeEvent; | ||||
| import envoy.server.data.PersistenceManager; | ||||
| import envoy.server.net.ConnectionManager; | ||||
| import envoy.server.net.ObjectWriteProxy; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * This {@link ObjectProcessor} handles incoming {@link Message}s.<br> | ||||
| @@ -25,6 +27,8 @@ import envoy.server.net.ObjectWriteProxy; | ||||
|  */ | ||||
| public class MessageProcessor implements ObjectProcessor<Message> { | ||||
|  | ||||
| 	private static final Logger logger = EnvoyLog.getLogger(MessageProcessor.class); | ||||
|  | ||||
| 	@Override | ||||
| 	public void process(Message message, long socketID, ObjectWriteProxy writeProxy) { | ||||
| 		message.nextStatus(); | ||||
| @@ -36,14 +40,14 @@ public class MessageProcessor implements ObjectProcessor<Message> { | ||||
| 			try { | ||||
| 				writeProxy.write(socketID, new MessageStatusChangeEvent(message)); | ||||
| 			} catch (IOException e) { | ||||
| 				System.err.println("Could not send messageStatusChangeEvent to the sender of this message with ID: " + message.getID()); | ||||
| 				logger.warning("Could not send messageStatusChangeEvent to the sender of this message with ID: " + message.getID()); | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 		} | ||||
| 		try { | ||||
| 			PersistenceManager.getInstance().addMessage(new envoy.server.data.Message(message)); | ||||
| 		} catch (EntityExistsException e) { | ||||
| 			System.err.println("Received a message with an id that already exists"); | ||||
| 			logger.warning("Received a message with an id that already exists"); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -54,9 +58,8 @@ public class MessageProcessor implements ObjectProcessor<Message> { | ||||
| 			// Update the message status to RECEIVED | ||||
| 			message.setReceivedDate(new Date()); | ||||
| 			message.nextStatus(); | ||||
|  | ||||
| 		} catch (IOException e) { | ||||
| 			System.err.println("Recipient online. Failed to send message" + message.getID()); | ||||
| 			logger.warning("Recipient online. Failed to send message" + message.getID()); | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package envoy.server.processors; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import envoy.data.User.UserStatus; | ||||
| import envoy.event.UserStatusChangeEvent; | ||||
| @@ -8,6 +9,7 @@ import envoy.server.data.PersistenceManager; | ||||
| import envoy.server.data.User; | ||||
| import envoy.server.net.ConnectionManager; | ||||
| import envoy.server.net.ObjectWriteProxy; | ||||
| import envoy.util.EnvoyLog; | ||||
|  | ||||
| /** | ||||
|  * This processor handles incoming {@link UserStatusChangeEvent}.<br> | ||||
| @@ -24,6 +26,8 @@ public class UserStatusChangeProcessor implements ObjectProcessor<UserStatusChan | ||||
| 	private static ObjectWriteProxy		writeProxy; | ||||
| 	private static PersistenceManager	persistenceManager	= PersistenceManager.getInstance(); | ||||
|  | ||||
| 	private static final Logger logger = EnvoyLog.getLogger(UserStatusChangeProcessor.class); | ||||
|  | ||||
| 	@Override | ||||
| 	public Class<UserStatusChangeEvent> getInputClass() { return UserStatusChangeEvent.class; } | ||||
|  | ||||
| @@ -31,11 +35,10 @@ public class UserStatusChangeProcessor implements ObjectProcessor<UserStatusChan | ||||
| 	public void process(UserStatusChangeEvent input, long socketID, ObjectWriteProxy writeProxy) throws IOException { | ||||
| 		// new status should not equal old status | ||||
| 		if (input.get().equals(persistenceManager.getUserByID(input.getID()).getStatus())) { | ||||
| 			System.out.println("Received an unnecessary UserStatusChangeEvent"); | ||||
| 			logger.warning("Received an unnecessary UserStatusChangeEvent"); | ||||
| 			return; | ||||
| 		} | ||||
| 		updateUserStatus(input); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -47,10 +50,11 @@ public class UserStatusChangeProcessor implements ObjectProcessor<UserStatusChan | ||||
| 	 */ | ||||
|  | ||||
| 	public static void updateUserStatus(User user) { | ||||
| 		// handling for newly logged in clients | ||||
|  | ||||
| 		// Handling for newly logged in clients | ||||
| 		persistenceManager.updateContact(user); | ||||
|  | ||||
| 		// handling for contacts that are already online | ||||
| 		// Handling for contacts that are already online | ||||
| 		notifyContacts(user); | ||||
| 	} | ||||
|  | ||||
| @@ -75,7 +79,7 @@ public class UserStatusChangeProcessor implements ObjectProcessor<UserStatusChan | ||||
| 				if (connectionManager.isOnline(contact.getID())) writeProxy.write(connectionManager.getSocketId(contact.getID()), evt); | ||||
| 		} catch (IOException e) { | ||||
| 			e.printStackTrace(); | ||||
| 			System.err.println("Could not notify online contacts of user " + evt.getID() + " that his status has been changed"); | ||||
| 			logger.warning("Could not notify online contacts of user " + evt.getID() + " that his status has been changed"); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user