I've been trying to load Room Extension Dynamically. As a part of the test, I was loading an Extension JAR for a Room through my code whilst No such JAR existed.
Accordingly, I got the Error in my Logs :
[com.smartfoxserver.v2.controllers.ExtensionController-1] man
agers.SFSRoomManager -
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Exception: com.smartfoxserver.v2.exceptions.SFSExtensionException
Message: Class not found: Main.ProofForJitesh
Description: Failure while creating room extension.
Possible Causes: If the CreateRoom request was sent from client make sure that t
he extension name matches the name of an existing extension
+--- --- ---+
Stack Trace:
+--- --- ---+
com.smartfoxserver.v2.entities.managers.SFSExtensionManager.createJavaExtension(
SFSExtensionManager.java:364)
com.smartfoxserver.v2.entities.managers.SFSExtensionManager.createExtension(SFSE
xtensionManager.java:266)
com.smartfoxserver.v2.entities.managers.SFSRoomManager.createRoomExtension(SFSRo
omManager.java:209)
com.smartfoxserver.v2.entities.managers.SFSRoomManager.createRoom(SFSRoomManager
.java:168)
com.smartfoxserver.v2.entities.SFSZone.createRoom(SFSZone.java:230)
com.smartfoxserver.v2.api.SFSApi.createRoom(SFSApi.java:608)
com.smartfoxserver.v2.api.SFSApi.createRoom(SFSApi.java:578)
kechuppserver.zone.KechuppZoneExtension.LaunchSession(KechuppZoneExtension.java:
663)
kechuppserver.zone.KechuppZoneExtension.OnLaunchRequest(KechuppZoneExtension.jav
a:623)
kechuppserver.zone.LaunchHandler.handleClientRequest(LaunchHandler.java:20)
com.smartfoxserver.v2.extensions.SFSExtension.handleClientRequest(SFSExtension.j
ava:192)
com.smartfoxserver.v2.controllers.ExtensionController.processRequest(ExtensionCo
ntroller.java:137)
com.smartfoxserver.bitswarm.controllers.AbstractController.run(AbstractControlle
r.java:96)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Although it throws this exception just as expected, it still creates the room! I dont want to create this room in case of such an exception.
While I did try putting a Try Catch block, for some reason this SFSExtensionException is not caught.
Following is the code:
Code: Select all
CreateRoomSettings csr = new CreateRoomSettings();
csr.setName(m_strKechuppRoomName);
csr.setMaxUsers(20);
csr.setMaxVariablesAllowed(10);
csr.setPassword("");
csr.setGame(false);
csr.setMaxSpectators(10);
try
{
RoomExtensionSettings res = new RoomExtensionSettings("KechuppFlash", "Main.ProofForJitesh");
csr.setExtension(res);
trace("\n no issues in creating extension________________");
}
catch(Exception e)
{
trace("Create extension failed:\n" + e.getMessage() + "\nStack Trace: \n" + e.getStackTrace());
return;
}
Room kechuppRoom = zone.getRoomByName(m_strKechuppRoomName);
assert(kechuppRoom == null);
try
{
kechuppRoom = this.getApi().createRoom(zone, csr, null);
}
catch (SFSCreateRoomException ex)
{
trace("Create Room Exception caught :" + ex.getMessage() + "\nstack trace :" + ex.getStackTrace());
//Logger.getLogger(KechuppZoneExtension.class.getName()).log(Level.SEVERE, null, ex);
trace("\nErrrrrrrrrrrrrrorr \n deleting room for SFSCreateRoomException");
this.getApi().removeRoom(kechuppRoom);
return;
}
catch (Exception ex)
{
//trace("Exception caught :" + ex.getMessage() + "\nstack trace :" + ex.getStackTrace());
Logger.getLogger(KechuppZoneExtension.class.getName()).log(Level.SEVERE, null, ex);
trace("\nErrrrrrrrrrrrrrorr \n deleting room for general Exception");
this.getApi().removeRoom(kechuppRoom);
return;
}
How do I handle the thrown SFSExtensionException in order to stop the creation of the room even when such an exception is thrown?
Thanks.