SmartFoxServer 2X 雙方進行連線
在雙方建立連線時
會經過連線、登入驗証的階段
這就是一般遊戲玩家要輸入帳密
登入伺服器的過程登入驗証預設是關閉狀態
代表每個人都可以連進Zone
自訂登入驗証外掛
可以在Zone
Configurator選項中啟用
連線(Connection)完成後
就可以送出LoginRequest請求
傳送帳密給Server端驗証
流程:
- 讀取sfs-config.xml,取得連線的ip及port
- 由Client發送連線請求,進行雙方連線(handshake)
- 進行登入驗証,發送new LoginRequest()請求 sfs.send(new LoginRequest(“帳號", “密碼", “Zone名稱"));
- 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(聊天室、大廳、戰場等等)