Implement Send Priv Message and Delete Buddy

- Needs Testing
This commit is contained in:
Julia Butenhoff 2022-07-19 12:01:24 -05:00 committed by Julia Butenhoff
parent 29398b62f0
commit 0c624ac68a
2 changed files with 123 additions and 0 deletions

View File

@ -88,6 +88,15 @@ public class ArkOneController implements TcpHandler {
case "u_abr":
responses.add(userPlugin.AddBuddyResponse(commandInfo, connection));
break;
case "u_spm":
responses.add(userPlugin.SendPrivateMessage(commandInfo));
break;
case "u_dbd":
responses.add(userPlugin.DeleteBuddy(commandInfo, connection));
break;
case "u_dbr":
responses.add(userPlugin.DeleteBuddyResponse(commandInfo, connection));
break;
case "p":
responses.add(userPlugin.Ping());
break;
@ -108,6 +117,9 @@ public class ArkOneController implements TcpHandler {
case "lp":
responses.add(galaxyPlugin.LoadProfile(connection));
break;
//case "gls":
//responses.add(galaxyPlugin.GetLeaderboardStats());
// break;
// Plugin 10 (Trunk)

View File

@ -18,6 +18,7 @@ import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.UUID;
@Service
public class UserPlugin {
@ -305,6 +306,116 @@ public class UserPlugin {
}
}
public String SendPrivateMessage(Element element) throws ParserConfigurationException, TransformerException {
// Start of response
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document resp = dBuilder.newDocument();
Element rootElement = resp.createElement("u_spm");
rootElement.setAttribute("r", "0");
rootElement.setAttribute("m", element.getAttribute("m"));
rootElement.setAttribute("t", element.getAttribute("t"));
rootElement.setAttribute("f", element.getAttribute("f"));
resp.appendChild(rootElement);
UUID connID = UUID.randomUUID();
User buddy = userService.findByUUID(Integer.valueOf(element.getAttribute("t"))).orElse(null);
// If the user is online, grab their connection id to send the message
if (buddy.getIsOnline() == 1) {
connID = buddy.getConnectionId();
}
arkOneSender.SendToUser(connID, ArkOneParser.RemoveXMLTag(resp));
return ArkOneParser.RemoveXMLTag(resp);
}
public String DeleteBuddy(Element element, Connection connection) throws ParserConfigurationException, TransformerException {
User buddy = userService.findByUUID(Integer.valueOf(element.getAttribute("b"))).orElse(null);
User thisUser = server.getConnectedUsers().get(connection.getClientIdentifier());
boolean fail = false;
// Start of response
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document respFail = dBuilder.newDocument();
Element rootElement = respFail.createElement("u_dbd");
if (buddy.getUsername().equals("") || buddy.getUsername().equals("GUESTUSER")) {
fail = true;
rootElement.setAttribute("r", "2");
}
rootElement.setAttribute("u", String.valueOf(thisUser.getUUID()));
rootElement.setAttribute("b", element.getAttribute("b"));
respFail.appendChild(rootElement);
if (fail) {
return ArkOneParser.RemoveXMLTag(respFail);
} else {
// Send a remove message to the buddy if they are online
if (buddy.getIsOnline() == 1) {
Document send = dBuilder.newDocument();
Element sendRoot = send.createElement("u_dbr");
sendRoot.setAttribute("b", String.valueOf(thisUser.getUUID()));
sendRoot.setAttribute("n", thisUser.getUsername());
send.appendChild(sendRoot);
// Send
arkOneSender.SendToUser(buddy.getConnectionId(), ArkOneParser.RemoveXMLTag(send));
}
// Remove the users from each other's buddy list
ArrayList<String> buddyList = new ArrayList<>(Arrays.asList(buddy.getRawBuddyList().split(",")));
buddyList.remove(String.valueOf(thisUser.getUUID()));
if (buddyList.size() > 0) {
buddy.setRawBuddyList(String.join(",", buddyList));
} else {
buddy.setRawBuddyList("");
}
userService.updateUserOnServer(buddy.getConnectionId(), buddy);
ArrayList<String> buddyList2 = new ArrayList<>(Arrays.asList(thisUser.getRawBuddyList().split(",")));
buddyList2.remove(String.valueOf(buddy.getUUID()));
if (buddyList2.size() > 0) {
thisUser.setRawBuddyList(String.join(",", buddyList2));
} else {
thisUser.setRawBuddyList("");
}
userService.updateUserOnServer(thisUser.getConnectionId(), thisUser);
Document resp = dBuilder.newDocument();
Element respRoot = resp.createElement("u_dbd");
respRoot.setAttribute("r", "0");
respRoot.setAttribute("u", String.valueOf(thisUser.getUUID()));
respRoot.setAttribute("b", element.getAttribute("b"));
resp.appendChild(respRoot);
// Return response
return ArkOneParser.RemoveXMLTag(resp);
}
}
public String DeleteBuddyResponse(Element element, Connection connection) throws ParserConfigurationException,
TransformerException {
User thisUser = server.getConnectedUsers().get(connection.getClientIdentifier());
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document resp = dBuilder.newDocument();
Element rootElement = resp.createElement("u_dbd");
rootElement.setAttribute("r", "0");
rootElement.setAttribute("u", String.valueOf(thisUser.getUUID()));
rootElement.setAttribute("b", element.getAttribute("b"));
resp.appendChild(rootElement);
return ArkOneParser.RemoveXMLTag(resp);
}
public String Ping() {
return "<p t=\"30\" />";
}