we're doing a videogame, and we have setted a procedure to create rooms server side.
Now our rooms are created when a player create a clan, and when he has created a clan, we generate a clan room.
When all the members of the clan are disconnected we destroy the room of the clan.
We need this to doing a chat group.
Now to recreate the room we have think to do this.
When a member is login, we research into the database if he has a clan, and then create the clan room if room is not active.
But i have problem to write the procedure server side.
I post my code to show what i need
Code: Select all
public class LoginEventHandler extends BaseServerEventHandler {
@Override
public void handleServerEvent(ISFSEvent event) throws SFSException {
// TODO Auto-generated method stub
trace("Sto chiedendo al server di loggare un utente");
// Grab parameters from client request
String userName = (String) event.getParameter(SFSEventParam.LOGIN_NAME);
String cryptedPass = (String) event.getParameter(SFSEventParam.LOGIN_PASSWORD);
//String email = (String)event.getParameter(SFSEventParam.LOGIN_PASSWORD);
ISession session = (ISession) event.getParameter(SFSEventParam.SESSION);
trace("Username----------" + userName);
trace("Password----------" + cryptedPass);
trace("Session----------" + session);
ISFSObject outData = (ISFSObject) event.getParameter(SFSEventParam.LOGIN_OUT_DATA);
User user = null;
// Add data to the object
// Get password from DB
IDBManager dbManager = getParentExtension().getParentZone().getDBManager();
Connection connection = null;
// Grab a connection from the DBManager connection pool
try {
connection = dbManager.getConnection();
// Build a prepared statement
PreparedStatement stmt = connection.prepareStatement("SELECT username, password, trofei, gold, gems ,guesswho.users.position, clan_name, guesswho.clan.position as postoclan, trofei_total "
+ "FROM Users "
+ "left outer join guesswho.clan on guesswho.users.id_user = guesswho.clan.utente_fondatore "
+ "or guesswho.users.id_user = guesswho.clan.utente_2 "
+ "or guesswho.users.id_user = guesswho.clan.utente_3 "
+ "or guesswho.users.id_user = guesswho.clan.utente_4 "
+ "or guesswho.users.id_user = guesswho.clan.utente_5 "
+ "or guesswho.users.id_user = guesswho.clan.utente_6 "
+ "or guesswho.users.id_user = guesswho.clan.utente_7 "
+ "or guesswho.users.id_user = guesswho.clan.utente_8 "
+ "or guesswho.users.id_user = guesswho.clan.utente_9 "
+ "or guesswho.users.id_user = guesswho.clan.utente_10 "
+ "or guesswho.users.id_user = guesswho.clan.utente_11 "
+ "or guesswho.users.id_user = guesswho.clan.utente_12 "
+ "or guesswho.users.id_user = guesswho.clan.utente_13 "
+ "or guesswho.users.id_user = guesswho.clan.utente_14 "
+ "or guesswho.users.id_user = guesswho.clan.utente_15 "
+ "or guesswho.users.id_user = guesswho.clan.utente_16 "
+ "or guesswho.users.id_user = guesswho.clan.utente_17 "
+ "or guesswho.users.id_user = guesswho.clan.utente_18 "
+ "or guesswho.users.id_user = guesswho.clan.utente_19 "
+ "or guesswho.users.id_user = guesswho.clan.utente_20 "
+ "where username='"+userName+"'");
// Execute query
ResultSet res = stmt.executeQuery();
while(res.next())
{
String username = res.getString("username");
trace(username);
int trofei = res.getInt("trofei");
trace(trofei);
int gold = res.getInt("gold");
trace(gold);
int gems = res.getInt("gems");
trace(gems);
String position = res.getString("position");
if (position == null){
position = "";
}
trace(position);
String clan_name = res.getString("clan_name");
if (clan_name == null){
clan_name = "";
}
trace(clan_name);
String clan_position = res.getString("postoclan");
if(clan_position == null){
clan_position = "";
}
trace(clan_position);
int trofei_clan = res.getInt("trofei_total");
trace(trofei_clan);
outData.putUtfString("nome_utente", username);
outData.putInt("trofei", trofei);
outData.putInt("gold", gold);
outData.putInt("gems", gems);
outData.putUtfString("position", position);
outData.putUtfString("clan_name", clan_name);
outData.putUtfString("clan_position", clan_position);
outData.putInt("trofei_clan", trofei_clan);
// createRoom(user,clan_name);
}
//outData.putInt("number", 100);
// Verify that one record was found
if (!res.first())
{
// This is the part that goes to the client
SFSErrorData errData = new SFSErrorData(SFSErrorCode.LOGIN_BAD_USERNAME);
errData.addParameter(userName);
trace("mi sono intoppato qui???");
// Sends response if user gave incorrect user name
throw new SFSLoginException("Bad user name: " + userName, errData);
}
String dbPword = res.getString("password");
// Verify the secure password
if (!getApi().checkSecurePassword(session, dbPword, cryptedPass))
{
trace("mi sono intoppato dopo???");
SFSErrorData data = new SFSErrorData(SFSErrorCode.LOGIN_BAD_PASSWORD);
data.addParameter(userName);
// Sends response if user gave incorrect password
throw new SFSLoginException("Login failed for user: " + userName, data);
}
}
// User name was not found
catch (SQLException e)
{
SFSErrorData errData = new SFSErrorData(SFSErrorCode.GENERIC_ERROR);
errData.addParameter("SQL Error: " + e.getMessage());
trace("mi sono intoppato qui 2???");
// Sends response about mysql errors
throw new SFSLoginException("A SQL Error occurred: " + e.getMessage(), errData);
}
finally {
try{
connection.close();
}catch (SQLException e){
throw new SFSLoginException("A SQL Error occurred: " + e.getMessage());
}
}
}
private void createRoom(User sender, String clanname){
String clan_name = clanname;
//Room myfirstroom = getParentExtension().getParentZone().getRoomByName(clan_name);
RoomExtensionSettings res = new RoomExtensionSettings("Server","clanserver.ClanExtension");
CreateRoomSettings crs = new CreateRoomSettings();
crs.setName(clan_name);
crs.setGroupId("clan_name " + clan_name);
crs.setMaxVariablesAllowed(20);
crs.setMaxUsers(20);
crs.setAutoRemoveMode(SFSRoomRemoveMode.NEVER_REMOVE);
crs.setDynamic(true);
crs.setExtension(res);
ISFSObject reback = SFSObject.newInstance();
try {
getApi().createRoom(sender.getZone(),crs,sender);
reback.putBool("success", true);
} catch (SFSCreateRoomException e) {
e.printStackTrace();
reback.putBool("success", false);
}finally{
send("createRoom", reback, sender);
}
}
i have problem because the method createRoom needs a user, on the other handler is different because i call the execution when a user is logged in.
How can i do my procedure on my explaination??
Thanks to all for the help