Seeking thoughts on the following design. I know the design could be lot simpler if use Sockets. But I wanted to think of a design with pure POJO classes.
User
string id;
string displayname;
ChatWindow
User user;
ChatManager room; //interface to access ChatRoom
readDeliveryReceipts boolean;
LinkedHashMap<id-userid, AcknowledgeMessage>messages;
Message currentMessage;
displayMessage(Message message);//Adds an entry to logs
acknowledgeMessage (String messageId);
acceptAcknowledgement(String messageId);
Message → TextMessage , Video Message , Audio Message (inheritance)
-string id;
-DateTime timestamp;
-User user;
-string text;
AcknowledgeMessage (use decorator Pattern) //Store Message logs
-Message msg;
-Type (ServerAccepted , SentToClient);
ChatManager //An Adapter Class to interact with ChatRoom
ChatRoom room;
sendMessage(Message message);
register(ChatWindow window);
deregister(ChatWindow window);
acknowledgeMessage(String messageId);
ChatRoom (Chat Session)
List<ChatWindow> chatWindows;
BlockedQueue<Messages> messagesToSend;
//Listener Pattern
register(ChatWindow window);
deregister(ChatWindow window);
receivingMessage(Message); //will add it to the Queue and send acknowledgement
//Listener Pattern
sendMessage(Message); //Will iterate all the chatwindows