I am trying to do some custom logic on the server when a "AddBuddyRequest" is sent. However, even though I throw an error in the server, the client still just adds the user. I tried updating to the latest Smartfox version (2.18.3) and also the latest client API version (1.7.17).
Server log:
Code: Select all
12 Jun 2022 | 18:56:03,673 | WARN | SFSWorker:Ext:2 | entities.managers.SFSExtensionManager | | com.smartfoxserver.v2.exceptions.SFSBuddyListException:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Exception: com.smartfoxserver.v2.exceptions.SFSBuddyListException
Message: The requested player does not exist.
Description: Error during event handling: com.smartfoxserver.v2.exceptions.SFSBuddyListException: The requested player does not exist., Listener: { Ext: __lib__, Type: JAVA, Lev: ZONE, { Zone: GlobalLobby }, {} }
+--- --- ---+
Stack Trace:
+--- --- ---+
rukukun.tdg.BuddyEventHandler.handleServerEvent(BuddyEventHandler.java:32)
com.smartfoxserver.v2.extensions.SFSExtension.handleServerEvent(SFSExtension.java:259)
com.smartfoxserver.v2.entities.managers.SFSExtensionManager.dispatchEvent(SFSExtensionManager.java:773)
com.smartfoxserver.v2.entities.managers.SFSExtensionManager.dispatchZoneLevelEvent(SFSExtensionManager.java:694)
com.smartfoxserver.v2.entities.managers.SFSExtensionManager.handleServerEvent(SFSExtensionManager.java:994)
com.smartfoxserver.v2.core.SFSEventManager$SFSEventRunner.run(SFSEventManager.java:66)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:829)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Client log:
Code: Select all
Buddy added: [Buddy: bvb, id: -1]
UnityEngine.Debug:Log (object)
Please see my simplified code;
Client code
Code: Select all
void Start() {
[...]
sfs.AddEventListener(SFSBuddyEvent.BUDDY_LIST_INIT, OnBuddyListInit);
sfs.AddEventListener(SFSBuddyEvent.BUDDY_ADD, OnBuddyAdded);
sfs.AddEventListener(SFSBuddyEvent.BUDDY_ERROR, OnBuddyError);
}
public void SendFriendRequest(string friendName)
{
sfs.Send(new Sfs2X.Requests.Buddylist.AddBuddyRequest(friendName));
}
private void OnBuddyListInit(BaseEvent evt)
{
Debug.Log("Buddy list initiated");
}
private void OnBuddyAdded(BaseEvent evt)
{
Debug.Log("Buddy added: " + (Buddy)evt.Params["buddy"]);
}
private void OnBuddyError(BaseEvent evt)
{
Debug.Log("BuddyList error: " + (string)evt.Params["errorMessage"]);
}
CustomExtension.java
Code: Select all
@Override
public void init() {
[...]
addEventHandler(SFSEventType.BUDDY_ADD, BuddyEventHandler.class);
[...]
}
BuddyEventHandler.java
Code: Select all
@Override
public void handleServerEvent(ISFSEvent arg0) throws SFSException {
SFSErrorData errdata = null;
Buddy targetBuddy = (Buddy) arg0.getParameter(SFSBuddyEventParam.BUDDY);
if(checkIfUserExists(targetBuddy.getName()))
{
} else {
errdata = new SFSErrorData(SFSErrorCode.BUDDY_LIST_FULL);
errdata.addParameter("The requested player does not exist");
throw new SFSBuddyListException("The requested player does not exist.", errdata);
}
}
private boolean checkIfUserExists(String username)
{
try {
IDBManager dbm = getParentExtension().getParentZone().getDBManager();
ISFSArray resultset = [...]
if (resultset != null && resultset.size() > 0) {
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
Please let me know if you have any solutions for me here.
Thanks!