SmartfoxServer and Oracle With Example Programs


  • Step 1:- Configure the databaseManager under the zone in order to establish the communication between extension and database.
  • Step 2:- Open ZoneConfiguration using AdminPanel (default port is 8080 see this link to know adminpanel port ) and configure the database tab as
    adminpanel
    adminpanel's DataBase Manager TAB
  • Step 3:- In the above Database manager tab we need to fill the fields, initially those are empty or filled with the data available in .zone.xml file.
  • Step 4:- Fill the Fields with these
    FieldName Description
    Activate enable it
    Database Driver Class oracle.jdbc.driver.OracleDriver
    ConnectionString jdbc:oracle:oci:@host:port:databasename
    (jdbc:oracle:oci:127.0.0.1:1521:tutorialtous)
    Username root
    Password Password for the root user
    Test SQL select getdate()
    Max Active Connections 10
    Max Idle Connections 10
    Exhausted Pool Connections GROW (is prefered)
  • step 6 :- Follow This Step Only If you are unable to open ADMIN PANEL

Open the concerned .zone.xml file in any text editor. In SFS2X folder we will have a 'zones' folder in that our zone file will be there open it in any text editor (SFS2x->zones->CasinoGameServer.zone.xml).

Find/Search the tag <databaseManager> and edit like this (sample Oracle driver details are mentioned here fill with your db related entries there, for more about tags description check this link

<databaseManager active="true">
    <driverName>oracle.jdbc.driver.OracleDriver</driverName>
    <connectionString>jdbc:oracle:oci:127.0.0.1:1521:tutorialtous</connectionString>
    <userName>root</userName>
    <password>www.tutorialtous.com</password>
    <testSql>select sysdate from dual</testSql>
    <maxActiveConnections>10</maxActiveConnections>
    <maxIdleConnections>10</maxIdleConnections>
    <exhaustedPoolAction>FAIL</exhaustedPoolAction>
    <blockTime>3000</blockTime>
 </databaseManager>
  • Step 7:- Press the submit and reload buttons
  • Step 8:- Load the Oracle-Jdbc Jar File in the sfs2x’s lib folder or __ lib folder.
    Download the Oracle-jdbc jar file from either of these links Oracle Dev JDBC Connector Official Link .
  • Step 7:- Assuming I have a class named "LoginRequestHandler" to handle the custom login in that I am writing the code as like this
/**
 * @author tutorialtous.com
 */
package com.tutorialtous.smartfoxserver;

import java.sql.SQLException;

import com.smartfoxserver.bitswarm.sessions.ISession;
import com.smartfoxserver.v2.core.ISFSEvent;
import com.smartfoxserver.v2.core.SFSEventParam;
import com.smartfoxserver.v2.db.IDBManager;
import com.smartfoxserver.v2.entities.User;
import com.smartfoxserver.v2.entities.data.ISFSArray;
import com.smartfoxserver.v2.entities.data.ISFSObject;
import com.smartfoxserver.v2.exceptions.SFSErrorCode;
import com.smartfoxserver.v2.exceptions.SFSErrorData;
import com.smartfoxserver.v2.exceptions.SFSException;
import com.smartfoxserver.v2.exceptions.SFSLoginException;
import com.smartfoxserver.v2.extensions.BaseServerEventHandler;

public class LoginRequestHandler extends BaseServerEventHandler {

  @Override
  public void handleServerEvent(ISFSEvent event) throws SFSException {
    User user = (User) event.getParameter(SFSEventParam.USER);
    ISession session = user.getSession();
    String username = user.getName();
    String pwd = (String) event.getParameter(SFSEventParam.LOGIN_PASSWORD);
    SFSErrorData errdata = null;
    String dbpwd = null;

    dbpwd = getPasswordFromDb(username);
    if (dbpwd != null) {
      if (getApi().checkSecurePassword(session, dbpwd, pwd)) {
        trace("login success for user " + username);
      } else {
        errdata = new SFSErrorData(SFSErrorCode.LOGIN_BAD_PASSWORD);
      }
    } else {
      errdata = new SFSErrorData(SFSErrorCode.LOGIN_BAD_USERNAME);
    }
    if (errdata != null) {
      throw new SFSLoginException("Login Failed",errdata);
    }
  }

  private String getPasswordFromDb(String username) {
    String password = null;
    try {
      IDBManager dbm = getParentExtension().getParentZone()
          .getDBManager();
      ISFSArray resultset = dbm.executeQuery(
          "select pwd from users where userid=?",
          new Object[] { username });
      if (resultset != null) {
        ISFSObject obj = resultset.getSFSObject(0);
        password = obj.getUtfString("pwd");
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }
    return password;
  }

}
/**
 * @author smartfoxserver@tutorialtous.com
 * How to Run:-
 * Step1:- javac MainClass.java
 * step2:- java MainClass
 */
package com.avishkarclient;

import java.util.Map;

import sfs2x.client.SmartFox;
import sfs2x.client.core.BaseEvent;
import sfs2x.client.core.IEventListener;
import sfs2x.client.core.SFSEvent;
import sfs2x.client.requests.LoginRequest;

import com.smartfoxserver.v2.exceptions.SFSException;

class SmartfoxJavaClient implements IEventListener {
  private SmartFox sfs;

  public SmartfoxJavaClient() {
    sfs = new SmartFox();
    sfs.addEventListener(SFSEvent.CONNECTION, this);
    sfs.addEventListener(SFSEvent.CONNECTION_LOST, this);
    sfs.addEventListener(SFSEvent.LOGIN, this);
    sfs.addEventListener(SFSEvent.LOGIN_ERROR, this);
  }

  public void connectToServer() {
    sfs.connect("smartfoxserver.tutorialtous.com", 9934);
  }

  public void sendLoginRequest(String username, String password,
      String zonename) {
    LoginRequest req = new LoginRequest(username, password, zonename);
    if (sfs.isConnected()) {
      sfs.send(req);
      System.out.println("LoginRequest Sent to Server");
    } else {
      System.out
          .println("Please Connect to server to send the LoginRequest");
    }
  }

  public void dispatch(BaseEvent event) throws SFSException {
    Map params = event.getArguments();
    switch (event.getType()) {
    case SFSEvent.CONNECTION:
      if ((Boolean) params.get("success")) {
        System.out.println("Connected to server");
      } else {
        System.out.println("Failed to connect server");
      }
      break;
    case SFSEvent.LOGIN:
      System.out.println("Login Success");
      break;
    case SFSEvent.LOGIN_ERROR:
      System.out.println("Login Failed");
      break;
    }

  }
}

public class MainClass {

  public static void main(String args[]) {
    SmartfoxJavaClient obj = new SmartfoxJavaClient();
    obj.connectToServer();
    obj.sendLoginRequest("player", "123456", "CasinoGameServer");
  }
}
Copyright © 2018-2020 TutorialToUs. All rights reserved.