Started implementing group message status handling
* Group creation works
This commit is contained in:
		| @@ -11,7 +11,16 @@ import envoy.server.data.PersistenceManager; | |||||||
| import envoy.server.net.ConnectionManager; | import envoy.server.net.ConnectionManager; | ||||||
| import envoy.server.net.ObjectMessageProcessor; | import envoy.server.net.ObjectMessageProcessor; | ||||||
| import envoy.server.net.ObjectMessageReader; | import envoy.server.net.ObjectMessageReader; | ||||||
| import envoy.server.processors.*; | import envoy.server.processors.ContactOperationProcessor; | ||||||
|  | import envoy.server.processors.ContactsRequestEventProcessor; | ||||||
|  | import envoy.server.processors.GroupCreationProcessor; | ||||||
|  | import envoy.server.processors.GroupMessageProcessor; | ||||||
|  | import envoy.server.processors.IDGeneratorRequestProcessor; | ||||||
|  | import envoy.server.processors.LoginCredentialProcessor; | ||||||
|  | import envoy.server.processors.MessageProcessor; | ||||||
|  | import envoy.server.processors.MessageStatusChangeProcessor; | ||||||
|  | import envoy.server.processors.ObjectProcessor; | ||||||
|  | import envoy.server.processors.UserStatusChangeProcessor; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Starts the server.<br> |  * Starts the server.<br> | ||||||
| @@ -36,6 +45,7 @@ public class Startup { | |||||||
| 		Set<ObjectProcessor<?>> processors = new HashSet<>(); | 		Set<ObjectProcessor<?>> processors = new HashSet<>(); | ||||||
| 		processors.add(new LoginCredentialProcessor()); | 		processors.add(new LoginCredentialProcessor()); | ||||||
| 		processors.add(new MessageProcessor()); | 		processors.add(new MessageProcessor()); | ||||||
|  | 		processors.add(new GroupCreationProcessor()); | ||||||
| 		processors.add(new GroupMessageProcessor()); | 		processors.add(new GroupMessageProcessor()); | ||||||
| 		processors.add(new MessageStatusChangeProcessor()); | 		processors.add(new MessageStatusChangeProcessor()); | ||||||
| 		processors.add(new UserStatusChangeProcessor()); | 		processors.add(new UserStatusChangeProcessor()); | ||||||
|   | |||||||
| @@ -1,9 +1,12 @@ | |||||||
| package envoy.server.data; | package envoy.server.data; | ||||||
|  |  | ||||||
|  | import java.util.Date; | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
|  |  | ||||||
| import javax.persistence.ElementCollection; | import javax.persistence.ElementCollection; | ||||||
| import javax.persistence.Entity; | import javax.persistence.Entity; | ||||||
|  | import javax.persistence.Temporal; | ||||||
|  | import javax.persistence.TemporalType; | ||||||
|  |  | ||||||
| import envoy.data.MessageBuilder; | import envoy.data.MessageBuilder; | ||||||
|  |  | ||||||
| @@ -22,6 +25,9 @@ public class GroupMessage extends Message { | |||||||
| 	@ElementCollection | 	@ElementCollection | ||||||
| 	private Map<Long, envoy.data.Message.MessageStatus> memberMessageStatus; | 	private Map<Long, envoy.data.Message.MessageStatus> memberMessageStatus; | ||||||
|  |  | ||||||
|  | 	@Temporal(TemporalType.TIMESTAMP) | ||||||
|  | 	protected Date lastStatusChangeDate; | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| 	 * The constructor for a database object. | 	 * The constructor for a database object. | ||||||
| 	 * | 	 * | ||||||
| @@ -32,13 +38,16 @@ public class GroupMessage extends Message { | |||||||
| 	/** | 	/** | ||||||
| 	 * Constructs a database groupMessage from a common groupMessage. | 	 * Constructs a database groupMessage from a common groupMessage. | ||||||
| 	 * | 	 * | ||||||
| 	 * @param groupMessage the {@link envoy.data.GroupMessage} to convert into a | 	 * @param groupMessage         the {@link envoy.data.GroupMessage} to convert | ||||||
|  | 	 *                             into a | ||||||
| 	 *                             database {@link GroupMessage} | 	 *                             database {@link GroupMessage} | ||||||
|  | 	 * @param lastStatusChangeDate the {@link Date} to set | ||||||
| 	 * @since Envoy Server Standalone v0.1-beta | 	 * @since Envoy Server Standalone v0.1-beta | ||||||
| 	 */ | 	 */ | ||||||
| 	public GroupMessage(envoy.data.GroupMessage groupMessage) { | 	public GroupMessage(envoy.data.GroupMessage groupMessage, Date lastStatusChangeDate) { | ||||||
| 		super(groupMessage); | 		super(groupMessage); | ||||||
| 		memberMessageStatus	= groupMessage.getMemberStatuses(); | 		memberMessageStatus	= groupMessage.getMemberStatuses(); | ||||||
|  | 		this.lastStatusChangeDate	= lastStatusChangeDate; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
| @@ -76,4 +85,16 @@ public class GroupMessage extends Message { | |||||||
| 	public void setMemberMessageStatus(Map<Long, envoy.data.Message.MessageStatus> memberMessageStatus) { | 	public void setMemberMessageStatus(Map<Long, envoy.data.Message.MessageStatus> memberMessageStatus) { | ||||||
| 		this.memberMessageStatus = memberMessageStatus; | 		this.memberMessageStatus = memberMessageStatus; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @return the date at which one of the member statuses changed last | ||||||
|  | 	 * @since Envoy Server Standalone v0.1-beta | ||||||
|  | 	 */ | ||||||
|  | 	public Date getLastStatusChangeDate() { return lastStatusChangeDate; } | ||||||
|  |  | ||||||
|  | 	/** | ||||||
|  | 	 * @param date the date to set | ||||||
|  | 	 * @since Envoy Server Standalone v0.1-beta | ||||||
|  | 	 */ | ||||||
|  | 	public void setLastStatusChangeDate(Date date) { lastStatusChangeDate = date; } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,8 +1,11 @@ | |||||||
| package envoy.server.processors; | package envoy.server.processors; | ||||||
|  |  | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  | import java.util.HashSet; | ||||||
|  |  | ||||||
|  | import envoy.event.ElementOperation; | ||||||
| import envoy.event.GroupCreationEvent; | import envoy.event.GroupCreationEvent; | ||||||
|  | import envoy.event.contact.ContactOperationEvent; | ||||||
| import envoy.server.data.Contact; | import envoy.server.data.Contact; | ||||||
| import envoy.server.data.PersistenceManager; | import envoy.server.data.PersistenceManager; | ||||||
| import envoy.server.net.ConnectionManager; | import envoy.server.net.ConnectionManager; | ||||||
| @@ -25,10 +28,12 @@ public class GroupCreationProcessor implements ObjectProcessor<GroupCreationEven | |||||||
| 	public void process(GroupCreationEvent input, long socketID, ObjectWriteProxy writeProxy) throws IOException { | 	public void process(GroupCreationEvent input, long socketID, ObjectWriteProxy writeProxy) throws IOException { | ||||||
| 		envoy.server.data.Group group = new envoy.server.data.Group(); | 		envoy.server.data.Group group = new envoy.server.data.Group(); | ||||||
| 		group.setName(input.get()); | 		group.setName(input.get()); | ||||||
|  | 		group.setContacts(new HashSet<>()); | ||||||
| 		input.getInitialMemberIDs().stream().map(persistenceManager::getUserByID).forEach(group.getContacts()::add); | 		input.getInitialMemberIDs().stream().map(persistenceManager::getUserByID).forEach(group.getContacts()::add); | ||||||
|  | 		group.getContacts().add(persistenceManager.getContactByID(connectionManager.getUserIdBySocketId(socketID))); | ||||||
|  | 		group.getContacts().forEach(c -> c.getContacts().add(group)); | ||||||
| 		group.getContacts().add(persistenceManager.getUserByID(connectionManager.getUserIdBySocketId(socketID))); | 		group.getContacts().add(persistenceManager.getUserByID(connectionManager.getUserIdBySocketId(socketID))); | ||||||
| 		persistenceManager.addContact(group); | 		persistenceManager.addContact(group); | ||||||
| 		writeProxy.write(socketID, group); |  | ||||||
| 		group.getContacts() | 		group.getContacts() | ||||||
| 			.stream() | 			.stream() | ||||||
| 			.map(Contact::getID) | 			.map(Contact::getID) | ||||||
| @@ -36,7 +41,7 @@ public class GroupCreationProcessor implements ObjectProcessor<GroupCreationEven | |||||||
| 			.map(connectionManager::getSocketId) | 			.map(connectionManager::getSocketId) | ||||||
| 			.forEach(memberSocketID -> { | 			.forEach(memberSocketID -> { | ||||||
| 				try { | 				try { | ||||||
| 					writeProxy.write(memberSocketID, group); | 					writeProxy.write(memberSocketID, new ContactOperationEvent(group.toCommon(), ElementOperation.ADD)); | ||||||
| 				} catch (IOException e) { | 				} catch (IOException e) { | ||||||
| 					e.printStackTrace(); | 					e.printStackTrace(); | ||||||
| 				} | 				} | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package envoy.server.processors; | package envoy.server.processors; | ||||||
|  |  | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
| import javax.persistence.EntityExistsException; | import javax.persistence.EntityExistsException; | ||||||
|  |  | ||||||
| @@ -33,7 +34,7 @@ public class GroupMessageProcessor implements ObjectProcessor<GroupMessage> { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		final var members = PersistenceManager.getInstance().getGroupByID(groupMessage.getRecipientID()).getContacts(); | 		final var members = PersistenceManager.getInstance().getGroupByID(groupMessage.getRecipientID()).getContacts(); | ||||||
| 		for (long i = 0; i < groupMessage.getMemberStatuses().keySet().size(); i++) { | 		for (long i = 0; i < groupMessage.getMemberStatuses().size(); i++) { | ||||||
| 			groupMessage.getMemberStatuses().replace(i, MessageStatus.SENT); | 			groupMessage.getMemberStatuses().replace(i, MessageStatus.SENT); | ||||||
| 		} | 		} | ||||||
| 		members.forEach(user -> { setMemberStatus(connectionManager, groupMessage, user.getID()); }); | 		members.forEach(user -> { setMemberStatus(connectionManager, groupMessage, user.getID()); }); | ||||||
| @@ -45,9 +46,9 @@ public class GroupMessageProcessor implements ObjectProcessor<GroupMessage> { | |||||||
| 		members.forEach(user -> { sendToMember(connectionManager, groupMessage, user.getID(), writeProxy); }); | 		members.forEach(user -> { sendToMember(connectionManager, groupMessage, user.getID(), writeProxy); }); | ||||||
|  |  | ||||||
| 		try { | 		try { | ||||||
| 			PersistenceManager.getInstance().addMessage(new envoy.server.data.Message(groupMessage)); | 			PersistenceManager.getInstance().addMessage(new envoy.server.data.GroupMessage(groupMessage, new Date())); | ||||||
| 		} catch (EntityExistsException e) { | 		} catch (EntityExistsException e) { | ||||||
| 			System.err.println("Received a groupMessage with an id that already exists"); | 			System.err.println("Received a groupMessage with an ID that already exists"); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 DieGurke
					DieGurke