diff --git a/TODO.md b/TODO.md index a57659a..53f3921 100644 --- a/TODO.md +++ b/TODO.md @@ -12,8 +12,8 @@ ## Server commands -- [ ] CHAT_JOIN -- [ ] CHAT_IN -- [ ] CHAT_UPDATE_BUDDY +- [x] CHAT_JOIN +- [x] CHAT_IN +- [x] CHAT_UPDATE_BUDDY - [x] CHAT_INVITE -- [ ] CHAT_LEFT +- [x] CHAT_LEFT diff --git a/src/com/wilko/jaim/JaimConnection.java b/src/com/wilko/jaim/JaimConnection.java index 783ec70..969365f 100644 --- a/src/com/wilko/jaim/JaimConnection.java +++ b/src/com/wilko/jaim/JaimConnection.java @@ -132,6 +132,10 @@ public class JaimConnection implements java.lang.Runnable { TocResponseFactory.addResponseHandler(new GotoTocResponse()); TocResponseFactory.addResponseHandler(new ConfigTocResponse()); TocResponseFactory.addResponseHandler(new ChatInviteTocResponse()); + TocResponseFactory.addResponseHandler(new ChatJoinTocResponse()); + TocResponseFactory.addResponseHandler(new ChatBuddyUpdateTocResponse()); + TocResponseFactory.addResponseHandler(new ChatMessageTocResponse()); + TocResponseFactory.addResponseHandler(new ChatLeftTocResponse()); messageQueue = new Vector(); myThread = new Thread(this); myThread.setDaemon(true); diff --git a/src/com/wilko/jaim/responses/ChatBuddyUpdateTocResponse.java b/src/com/wilko/jaim/responses/ChatBuddyUpdateTocResponse.java new file mode 100644 index 0000000..17f6c6d --- /dev/null +++ b/src/com/wilko/jaim/responses/ChatBuddyUpdateTocResponse.java @@ -0,0 +1,110 @@ +/* + * (C) 2002 Paul Wilkinson wilko@users.sourceforge.net + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +/* + * BuddyUpdateTocResponse.java + * + * Created on 5 May 2002, 21:19 + */ + +package com.wilko.jaim.responses; + +import com.wilko.jaim.JaimEventListener; + +import java.util.*; + +/** + * A BuddyUpdateTocResponse is delivered to a {@link JaimEventListener } when a buddy update is received from the TOC server + * + * @author paulw + * @version $Revision: 1.7 $ + */ +public class ChatBuddyUpdateTocResponse extends TocResponse implements TocResponseHandler { + + public static String RESPONSE_TYPE = "CHAT_UPDATE_BUDDY"; + private String roomID; + private String type; + private String[] screennames; + + /** + * Creates new BuddyUpdateTocResponse + */ + public ChatBuddyUpdateTocResponse() { + roomID = ""; + type = ""; + } + + /** + * The parseString method is used to populate the fields of this class from a Buddy Update string from the TOC server + * + * @param str The String containing the buddy update + */ + public TocResponse parseString(String str) { + ChatBuddyUpdateTocResponse tr = new ChatBuddyUpdateTocResponse(); + tr.doParse(str); + return (tr); + } + + private void doParse(String str) { + cmd = str; + StringTokenizer st = new StringTokenizer(str, ":"); + + st.nextToken(); + roomID = st.nextToken(); + type = st.nextToken(); + List usersTemp = new ArrayList(); + while(st.hasMoreElements()) { + usersTemp.add(st.nextToken()); + } + screennames = new String[usersTemp.size()]; + usersTemp.toArray(screennames); + } + + /** + * Get the response type of this response. This method is used by the response dispatcher within JaimConnection + * + * @return The response type + */ + public String getResponseType() { + return RESPONSE_TYPE; + } + + public String getRoomID() { + return roomID; + } + + public String getType() { + return Objects.equals(type, "T") ? "joined" : "left"; + } + + public String[] getScreennames() { + return screennames; + } + + /** + * Returns true if this response handler can handle the specified response. + * + * @param Response - the response string from TOC. This is the part of the response before the first ':' + * @return true if the response can be handled + */ + public boolean canHandle(String Response) { + return (Response.equalsIgnoreCase(RESPONSE_TYPE)); + } + +} diff --git a/src/com/wilko/jaim/responses/ChatJoinTocResponse.java b/src/com/wilko/jaim/responses/ChatJoinTocResponse.java new file mode 100644 index 0000000..d38d405 --- /dev/null +++ b/src/com/wilko/jaim/responses/ChatJoinTocResponse.java @@ -0,0 +1,100 @@ +/* + * (C) 2002 Paul Wilkinson wilko@users.sourceforge.net + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +/* + * BuddyUpdateTocResponse.java + * + * Created on 5 May 2002, 21:19 + */ + +package com.wilko.jaim.responses; + +import com.wilko.jaim.JaimEventListener; + +import java.util.StringTokenizer; + +/** + * A BuddyUpdateTocResponse is delivered to a {@link JaimEventListener } when a buddy update is received from the TOC server + * + * @author paulw + * @version $Revision: 1.7 $ + */ +public class ChatJoinTocResponse extends TocResponse implements TocResponseHandler { + + public static String RESPONSE_TYPE = "CHAT_JOIN"; + private String roomID; + private String roomName; + + /** + * Creates new BuddyUpdateTocResponse + */ + public ChatJoinTocResponse() { + roomID = ""; + roomName = ""; + } + + /** + * The parseString method is used to populate the fields of this class from a Buddy Update string from the TOC server + * + * @param str The String containing the buddy update + */ + public TocResponse parseString(String str) { + ChatJoinTocResponse tr = new ChatJoinTocResponse(); + tr.doParse(str); + return (tr); + } + + private void doParse(String str) { + cmd = str; + StringTokenizer st = new StringTokenizer(str, ":"); + + st.nextToken(); + roomID = st.nextToken(); + roomName = st.nextToken(); + } + + /** + * Get the response type of this response. This method is used by the response dispatcher within JaimConnection + * + * @return The response type + */ + public String getResponseType() { + return RESPONSE_TYPE; + } + + + public String getRoomID() { + return roomID; + } + public String getRoomName() { + return roomName; + } + + + /** + * Returns true if this response handler can handle the specified response. + * + * @param Response - the response string from TOC. This is the part of the response before the first ':' + * @return true if the response can be handled + */ + public boolean canHandle(String Response) { + return (Response.equalsIgnoreCase(RESPONSE_TYPE)); + } + +} diff --git a/src/com/wilko/jaim/responses/ChatLeftTocResponse.java b/src/com/wilko/jaim/responses/ChatLeftTocResponse.java new file mode 100644 index 0000000..d015deb --- /dev/null +++ b/src/com/wilko/jaim/responses/ChatLeftTocResponse.java @@ -0,0 +1,94 @@ +/* + * (C) 2002 Paul Wilkinson wilko@users.sourceforge.net + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +/* + * BuddyUpdateTocResponse.java + * + * Created on 5 May 2002, 21:19 + */ + +package com.wilko.jaim.responses; + +import com.wilko.jaim.JaimEventListener; + +import java.util.StringTokenizer; + +/** + * A BuddyUpdateTocResponse is delivered to a {@link JaimEventListener } when a buddy update is received from the TOC server + * + * @author paulw + * @version $Revision: 1.7 $ + */ +public class ChatLeftTocResponse extends TocResponse implements TocResponseHandler { + + public static String RESPONSE_TYPE = "CHAT_LEFT"; + private String roomID; + + /** + * Creates new BuddyUpdateTocResponse + */ + public ChatLeftTocResponse() { + roomID = ""; + } + + /** + * The parseString method is used to populate the fields of this class from a Buddy Update string from the TOC server + * + * @param str The String containing the buddy update + */ + public TocResponse parseString(String str) { + ChatLeftTocResponse tr = new ChatLeftTocResponse(); + tr.doParse(str); + return (tr); + } + + private void doParse(String str) { + cmd = str; + StringTokenizer st = new StringTokenizer(str, ":"); + + st.nextToken(); + roomID = st.nextToken(); + } + + /** + * Get the response type of this response. This method is used by the response dispatcher within JaimConnection + * + * @return The response type + */ + public String getResponseType() { + return RESPONSE_TYPE; + } + + + public String getRoomID() { + return roomID; + } + + + /** + * Returns true if this response handler can handle the specified response. + * + * @param Response - the response string from TOC. This is the part of the response before the first ':' + * @return true if the response can be handled + */ + public boolean canHandle(String Response) { + return (Response.equalsIgnoreCase(RESPONSE_TYPE)); + } + +} diff --git a/src/com/wilko/jaim/responses/ChatMessageTocResponse.java b/src/com/wilko/jaim/responses/ChatMessageTocResponse.java new file mode 100644 index 0000000..db4ce9b --- /dev/null +++ b/src/com/wilko/jaim/responses/ChatMessageTocResponse.java @@ -0,0 +1,122 @@ +/* + * (C) 2002 Paul Wilkinson wilko@users.sourceforge.net + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +/* + * TocIMResponse.java + * + * Created on 4 May 2002, 14:38 + */ + +package com.wilko.jaim.responses; + +import com.wilko.jaim.JaimEventListener; +import com.wilko.jaim.Utils; + +import java.util.Objects; +import java.util.StringTokenizer; + +/** + * This response is delivered to a {@link JaimEventListener } when an instant message is received + * + * @author paulw + * @version $Revision: 1.6 $ + */ +public class ChatMessageTocResponse extends TocResponse implements TocResponseHandler { + + public static final String RESPONSE_TYPE = "CHAT_IN"; + String roomID; + String screenname; + Boolean whisper; + String message; + + /** + * Creates new TocIMResponse + */ + public ChatMessageTocResponse() { + roomID = ""; + screenname = ""; + whisper = false; + message = ""; + } + + public String getRoomID() { + return (roomID); + } + + public String getScreenname() { + return (screenname); + } + + public Boolean getWhisper() { + return whisper; + } + + + /** + * Obtain the message + * + * @return The message + * @see Utils#stripHTML + */ + public String getMessage() { + return (message); + } + + /** + * Parse an incoming IM response string + * + * @param str The string to be parsed + */ + public TocResponse parseString(String str) { + ChatMessageTocResponse tr = new ChatMessageTocResponse(); + tr.doParse(str); + return (tr); + } + + private void doParse(String str) { + cmd = str; + StringTokenizer st = new StringTokenizer(str, ":"); + + st.nextToken(); + roomID = st.nextToken(); + screenname = st.nextToken(); + whisper = (Objects.equals(st.nextToken(), "T")); + message = st.nextToken(); + } + + /** + * Obtain the response type for response dispatching purposes + * + * @return The response type + */ + public String getResponseType() { + return (RESPONSE_TYPE); + } + + /** + * Returns true if this response handler can handle the specified response. + * + * @param Response - the response string from TOC. This is the part of the response before the first ':' + * @return true if the response can be handled + */ + public boolean canHandle(String Response) { + return (Response.equalsIgnoreCase(RESPONSE_TYPE)); + } + +} diff --git a/src/com/wilko/jaimtest/JaimTest.java b/src/com/wilko/jaimtest/JaimTest.java index 2df11f9..e888e2d 100644 --- a/src/com/wilko/jaimtest/JaimTest.java +++ b/src/com/wilko/jaimtest/JaimTest.java @@ -135,7 +135,13 @@ public class JaimTest implements JaimEventListener { } else if (responseType.equalsIgnoreCase(ConnectionLostTocResponse.RESPONSE_TYPE)) { System.out.println("Connection lost!"); } else if (responseType.equalsIgnoreCase(ChatInviteTocResponse.RESPONSE_TYPE)) { - recieveChatInvite((ChatInviteTocResponse) tr); + receiveChatInvite((ChatInviteTocResponse) tr); + } else if (responseType.equalsIgnoreCase(ChatBuddyUpdateTocResponse.RESPONSE_TYPE)) { + receiveChatBuddyUpdate((ChatBuddyUpdateTocResponse) tr); + } else if (responseType.equalsIgnoreCase(ChatJoinTocResponse.RESPONSE_TYPE)) { + receiveChatJoin((ChatJoinTocResponse) tr); + } else if (responseType.equalsIgnoreCase(ChatMessageTocResponse.RESPONSE_TYPE)) { + receiveChatMessage((ChatMessageTocResponse) tr); } else { System.out.println("Unknown TOC Response:" + tr); } @@ -156,6 +162,10 @@ public class JaimTest implements JaimEventListener { } } + private void receiveChatMessage(ChatMessageTocResponse message) { + System.out.println(message.getScreenname() + "@" + message.getRoomID() + "->" + Utils.stripHTML(message.getMessage())); + } + private void receiveBuddyUpdate(BuddyUpdateTocResponse bu) { System.out.println("Buddy update: " + bu.getBuddy()); if (bu.isOnline()) { @@ -209,7 +219,7 @@ public class JaimTest implements JaimEventListener { } } - private void recieveChatInvite(ChatInviteTocResponse inviteTocResponse) { + private void receiveChatInvite(ChatInviteTocResponse inviteTocResponse) { c.joinChat(inviteTocResponse.getRoomName()); } @@ -241,5 +251,11 @@ public class JaimTest implements JaimEventListener { } } + private void receiveChatBuddyUpdate(ChatBuddyUpdateTocResponse tr) { + System.out.println("Buddies " + (tr.getType()) + " " + tr.getRoomID() + ": " + String.join(", ", tr.getScreennames())); + } + private void receiveChatJoin(ChatJoinTocResponse tr) { + System.out.println("Joined " + tr.getRoomName()); + } }