I'm writing this simple chat room in Java, and I wish to refactor a couple of things, like the following switch statement that should be replaced with polymorphism or at least not rely on otheranother class enum).
I'm writing this simple chat room in Java, and I wish to refactor a couple of things, like the following switch statement that should be replaced with polymorphism or at least not rely on other class enum).
I'm writing this simple chat room in Java, and I wish to refactor a couple of things, like the following switch statement that should be replaced with polymorphism or at least not rely on another class enum.
I'm writing this simple chat room in javaJava, and iI wish to refactor a couple of things (like, like the following switchswitch statement that should be replaced with polymorphism or at least not rely on other class enum). my question is if and how to do so? Looking forward to your suggestions.
public class Message implements Serializable { public enum MessageTypes {PUBLIC_MESSAGE,PTIVATE_MASSAGE,USER_DUPLICATE,USER_LOGOUT,SERVER_LOGOUT,USERSLIST}; private String dest; private String src; private String messageContent; private MessageTypes type; public Message(String source) { src = source; } public Message(String source,String message) { this(source); messageContent = message; type = MessageTypes.PUBLIC_MESSAGE; } public Message(String source,String destination,String message) { this(source); messageContent = message; dest= destination; type = MessageTypes.PTIVATE_MASSAGE; } public String getDest() { return dest; } public String getSrc() { return src; } public String getMessageContent() { return messageContent; } public MessageTypes getType() { return type; } private void setType(MessageTypes typeToSet) { type = typeToSet; } public static Message getServerLogoutMessage() { Message logoutMessage = new Message("Server"); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getServerLogoutMessage(String src) { Message logoutMessage = new Message(src); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getUserLogoutMessage(String source) { Message logoutMessage = new Message(source); logoutMessage.setType(MessageTypes.USER_LOGOUT); return logoutMessage; } public static Message getUsersListMessage(String source) { Message usersMessage = new Message(source); usersMessage.setType(MessageTypes.USERSLIST); return usersMessage; } public static Message getDuplicateMessage() { Message msg = new Message("Server"); msg.setType(MessageTypes.USER_DUPLICATE); return msg; } @Override public String toString() { return "Source : " + getSrc() + "\n" + "Dest : " + getDest() + "\n" + "Type : " + getType() + "\n" + "Content : " + getMessageContent() + "\n"; } } }
public synchronized void handelMessage(Message msg) { ClientListenerWriterPair p; String src = msg.getSrc(); String content = msg.getMessageContent(); String toWrite; switch (msg.getType()) { case PTIVATE_MASSAGE: sendPrivateMessage(msg); break; case PUBLIC_MESSAGE: toWrite = String.format("%s : %s",src,content); control.writeTextToGui(toWrite); spreadTheMessage(msg); break; case USER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.getWriter().close(); p.getWriter().setMsg(Message.getUserLogoutMessage("Server")); try { p.getWriter().join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } p.close(); break; case SERVER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.close(); break; case USERSLIST: p = nameToClientHash.get(msg.getSrc()); final Set<String> userSet = nameToClientHash.keySet(); break; } } I'm writing this simple chat room in java, and i wish to refactor couple of things (like the following switch statement that should be replaced with polymorphism or at least not rely on other class enum). my question is if and how to do so? Looking forward to your suggestions.
public class Message implements Serializable { public enum MessageTypes {PUBLIC_MESSAGE,PTIVATE_MASSAGE,USER_DUPLICATE,USER_LOGOUT,SERVER_LOGOUT,USERSLIST}; private String dest; private String src; private String messageContent; private MessageTypes type; public Message(String source) { src = source; } public Message(String source,String message) { this(source); messageContent = message; type = MessageTypes.PUBLIC_MESSAGE; } public Message(String source,String destination,String message) { this(source); messageContent = message; dest= destination; type = MessageTypes.PTIVATE_MASSAGE; } public String getDest() { return dest; } public String getSrc() { return src; } public String getMessageContent() { return messageContent; } public MessageTypes getType() { return type; } private void setType(MessageTypes typeToSet) { type = typeToSet; } public static Message getServerLogoutMessage() { Message logoutMessage = new Message("Server"); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getServerLogoutMessage(String src) { Message logoutMessage = new Message(src); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getUserLogoutMessage(String source) { Message logoutMessage = new Message(source); logoutMessage.setType(MessageTypes.USER_LOGOUT); return logoutMessage; } public static Message getUsersListMessage(String source) { Message usersMessage = new Message(source); usersMessage.setType(MessageTypes.USERSLIST); return usersMessage; } public static Message getDuplicateMessage() { Message msg = new Message("Server"); msg.setType(MessageTypes.USER_DUPLICATE); return msg; } @Override public String toString() { return "Source : " + getSrc() + "\n" + "Dest : " + getDest() + "\n" + "Type : " + getType() + "\n" + "Content : " + getMessageContent() + "\n"; } }
public synchronized void handelMessage(Message msg) { ClientListenerWriterPair p; String src = msg.getSrc(); String content = msg.getMessageContent(); String toWrite; switch (msg.getType()) { case PTIVATE_MASSAGE: sendPrivateMessage(msg); break; case PUBLIC_MESSAGE: toWrite = String.format("%s : %s",src,content); control.writeTextToGui(toWrite); spreadTheMessage(msg); break; case USER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.getWriter().close(); p.getWriter().setMsg(Message.getUserLogoutMessage("Server")); try { p.getWriter().join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } p.close(); break; case SERVER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.close(); break; case USERSLIST: p = nameToClientHash.get(msg.getSrc()); final Set<String> userSet = nameToClientHash.keySet(); break; } } I'm writing this simple chat room in Java, and I wish to refactor a couple of things, like the following switch statement that should be replaced with polymorphism or at least not rely on other class enum).
public class Message implements Serializable { public enum MessageTypes {PUBLIC_MESSAGE,PTIVATE_MASSAGE,USER_DUPLICATE,USER_LOGOUT,SERVER_LOGOUT,USERSLIST}; private String dest; private String src; private String messageContent; private MessageTypes type; public Message(String source) { src = source; } public Message(String source,String message) { this(source); messageContent = message; type = MessageTypes.PUBLIC_MESSAGE; } public Message(String source,String destination,String message) { this(source); messageContent = message; dest= destination; type = MessageTypes.PTIVATE_MASSAGE; } public String getDest() { return dest; } public String getSrc() { return src; } public String getMessageContent() { return messageContent; } public MessageTypes getType() { return type; } private void setType(MessageTypes typeToSet) { type = typeToSet; } public static Message getServerLogoutMessage() { Message logoutMessage = new Message("Server"); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getServerLogoutMessage(String src) { Message logoutMessage = new Message(src); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getUserLogoutMessage(String source) { Message logoutMessage = new Message(source); logoutMessage.setType(MessageTypes.USER_LOGOUT); return logoutMessage; } public static Message getUsersListMessage(String source) { Message usersMessage = new Message(source); usersMessage.setType(MessageTypes.USERSLIST); return usersMessage; } public static Message getDuplicateMessage() { Message msg = new Message("Server"); msg.setType(MessageTypes.USER_DUPLICATE); return msg; } @Override public String toString() { return "Source : " + getSrc() + "\n" + "Dest : " + getDest() + "\n" + "Type : " + getType() + "\n" + "Content : " + getMessageContent() + "\n"; } } public synchronized void handelMessage(Message msg) { ClientListenerWriterPair p; String src = msg.getSrc(); String content = msg.getMessageContent(); String toWrite; switch (msg.getType()) { case PTIVATE_MASSAGE: sendPrivateMessage(msg); break; case PUBLIC_MESSAGE: toWrite = String.format("%s : %s",src,content); control.writeTextToGui(toWrite); spreadTheMessage(msg); break; case USER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.getWriter().close(); p.getWriter().setMsg(Message.getUserLogoutMessage("Server")); try { p.getWriter().join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } p.close(); break; case SERVER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.close(); break; case USERSLIST: p = nameToClientHash.get(msg.getSrc()); final Set<String> userSet = nameToClientHash.keySet(); break; } } Simple chat room
I'm writing this simple chat room in java, and i wish to refactor couple of things (like the following switch statement that should be replaced with polymorphism or at least not rely on other class enum). my question is if and how to do so? Looking forward to your suggestions.
Message Object :
public class Message implements Serializable { public enum MessageTypes {PUBLIC_MESSAGE,PTIVATE_MASSAGE,USER_DUPLICATE,USER_LOGOUT,SERVER_LOGOUT,USERSLIST}; private String dest; private String src; private String messageContent; private MessageTypes type; public Message(String source) { src = source; } public Message(String source,String message) { this(source); messageContent = message; type = MessageTypes.PUBLIC_MESSAGE; } public Message(String source,String destination,String message) { this(source); messageContent = message; dest= destination; type = MessageTypes.PTIVATE_MASSAGE; } public String getDest() { return dest; } public String getSrc() { return src; } public String getMessageContent() { return messageContent; } public MessageTypes getType() { return type; } private void setType(MessageTypes typeToSet) { type = typeToSet; } public static Message getServerLogoutMessage() { Message logoutMessage = new Message("Server"); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getServerLogoutMessage(String src) { Message logoutMessage = new Message(src); logoutMessage.setType(MessageTypes.SERVER_LOGOUT); return logoutMessage; } public static Message getUserLogoutMessage(String source) { Message logoutMessage = new Message(source); logoutMessage.setType(MessageTypes.USER_LOGOUT); return logoutMessage; } public static Message getUsersListMessage(String source) { Message usersMessage = new Message(source); usersMessage.setType(MessageTypes.USERSLIST); return usersMessage; } public static Message getDuplicateMessage() { Message msg = new Message("Server"); msg.setType(MessageTypes.USER_DUPLICATE); return msg; } @Override public String toString() { return "Source : " + getSrc() + "\n" + "Dest : " + getDest() + "\n" + "Type : " + getType() + "\n" + "Content : " + getMessageContent() + "\n"; } }
Function at the server class :
public synchronized void handelMessage(Message msg) { ClientListenerWriterPair p; String src = msg.getSrc(); String content = msg.getMessageContent(); String toWrite; switch (msg.getType()) { case PTIVATE_MASSAGE: sendPrivateMessage(msg); break; case PUBLIC_MESSAGE: toWrite = String.format("%s : %s",src,content); control.writeTextToGui(toWrite); spreadTheMessage(msg); break; case USER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.getWriter().close(); p.getWriter().setMsg(Message.getUserLogoutMessage("Server")); try { p.getWriter().join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } p.close(); break; case SERVER_LOGOUT: p = nameToClientHash.remove(msg.getSrc()); p.getListener().close(); p.close(); break; case USERSLIST: p = nameToClientHash.get(msg.getSrc()); final Set<String> userSet = nameToClientHash.keySet(); break; } }