SmartFoxServer 2X 雙方進行連線

在雙方建立連線時
會經過連線、登入驗証的階段
這就是一般遊戲玩家要輸入帳密
登入伺服器的過程登入驗証預設是關閉狀態
代表每個人都可以連進Zone
自訂登入驗証外掛
可以在Zone Configurator選項中啟用
連線(Connection)完成
就可以送出LoginRequest請求
傳送帳密給Server端驗証

 

流程:

  1. 讀取sfs-config.xml,取得連線的ip及port
  2. 由Client發送連線請求,進行雙方連線(handshake)
  3. 進行登入驗証,發送new LoginRequest()請求 sfs.send(new LoginRequest(“帳號", “密碼", “Zone名稱"));
  4. Server端驗証帳密後,即登入成功

Client端

1
2
3
4
5
6
7
8
9
10
sfs = new SmartFox();
 
sfs.addEventListener(SFSEvent.CONFIG_LOAD_SUCCESS, onConfigLoadSuccess)
sfs.addEventListener(SFSEvent.CONFIG_LOAD_FAILURE, onConfigLoadFailure)
sfs.addEventListener(SFSEvent.CONNECTION, onConnection)
sfs.addEventListener(SFSEvent.CONNECTION_LOST, onConnectionLost)
sfs.addEventListener(SFSEvent.LOGIN, onLogin);
sfs.addEventListener(SFSEvent.LOGIN_ERROR, onLoginError);
 
sfs.loadConfig(); //讀取config.xml

在Zone外掛(ZoneExt.java)
監聽SFSEventType.USER_LOGIN事件
交由UserLoginEventHandler類別處理

Server端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ZoneExt extends SFSExtension {
@Override
public void init()
{
trace("Zone外掛 - 啟動");
addEventHandler(SFSEventType.USER_LOGIN, UserLoginEventHandler.class);
}
 
@Override
public void destroy()
{
trace("Zone外掛 - 停止");
super.destroy();
}
}

在UserLoginEventHandler.java裡處理LOGIN請求

1
2
3
4
5
6
7
8
9
10
11
12
public class UserLoginEventHandler extends BaseServerEventHandler {
public void handleServerEvent(ISFSEvent event) throws SFSException {
// 取得登入者帳號、密碼
String name = (String) event.getParameter(SFSEventParam.LOGIN_NAME);
String pass = (String) event.getParameter(SFSEventParam.LOGIN_PASSWORD);
 
if (!(name.equals("aaa") && pass.equals("bbb")))
{
throw new SFSLoginException("帳密錯誤");
}
}
}

在處理UserLoginEventHandler階段時
可以判斷帳密、過濾黑名單、玩家帳號重覆等等驗証
如果沒有Exception丟出的話
系統就會接受這個Client
下一步就可以加入Room(聊天室、大廳、戰場等等)

posted @ 2013-02-01 16:56  星尘  阅读(860)  评论(0编辑  收藏  举报