在雙方建立連線時
會經過連線、登入驗証的階段
這就是一般遊戲玩家要輸入帳密
登入伺服器的過程登入驗証預設是關閉狀態
代表每個人都可以連進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(聊天室、大廳、戰場等等)