Implement remaining group chat responses

This commit is contained in:
floppydiskette 2024-05-10 12:46:39 +01:00
parent d73fb78686
commit b656a44e24
Signed by: fwoppydwisk
SSH key fingerprint: SHA256:Hqn452XQ1ETzUt/FthJu6+OFkS4NBxCv5VQSEvuk7CE
7 changed files with 452 additions and 6 deletions

View file

@ -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

View file

@ -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);

View file

@ -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<String> usersTemp = new ArrayList<String>();
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));
}
}

View file

@ -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));
}
}

View file

@ -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));
}
}

View file

@ -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));
}
}

View file

@ -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());
}
}