前期準備工做前面都已作好, 就不在多說, 直接功能實現了!session
SmartFoxServer的登陸分Guest Login 和Custom Login 兩種, 默認爲Guset Loginide
Guset Login加密
1. 只須要用戶名, 甚至用戶名都不須要, 密碼就更不須要了, 直接發送LoginRequest 便可, 不作任何驗證spa
2. 不會觸發服務端的USER_LOGIN 事件3d
Gustom Logincode
1. 須要用戶名, 須要密碼, 驗證經過後纔算登陸成功blog
2. 會觸發服務端的USER_LOGIN 事件事件
Custom Login 開啓方式get
登陸後臺, 進入 Zone Configurator, 選中要設置的Zone, 雙擊進入編輯模式, 在General tab頁找到Use Custom Login, 將其設置爲開啓狀態.input
下面是Custom Login實現
客戶端實現
1. 添加監聽事件
1 //add events 2 _sfs.AddEventListener(SFSEvent.CONNECTION, onConnection); 3 _sfs.AddEventListener(SFSEvent.CONNECTION_LOST, onConnectionLost); 4 5 _sfs.AddEventListener(SFSEvent.LOGIN, onLogin); 6 _sfs.AddEventListener(SFSEvent.LOGIN_ERROR, onLoginError);
2. 鏈接成功後發送登陸請求
1 ISFSObject paras = SFSObject.NewInstance(); 2 paras.PutUtfString("test", "登陸參數"); 3 // 參數1: 用戶名 4 // 參數2: 密碼 5 // 參數3: 登入的Zone名稱 6 // 參數4: 額外參數 7 IRequest req = new LoginRequest(inputUsername.text, inputPassword.text, "GameZone", paras); 8 _sff.Send(req);
3. 若登陸成功會觸發LOGIN 的監聽方法, 失敗則會觸發LOGIN_ERROR 的監聽方法.
服務端實現
1. 添加USER_LOGIN事件處理類
1 addEventHandler(SFSEventType.USER_LOGIN, OnUserLogin.class);
1 public class OnUserLogin extends BaseServerEventHandler { 2 3 @Override 4 public void handleServerEvent(ISFSEvent event) throws SFSException { 5 // do something 6 } 7 }
2. 登陸驗證
1 @Override 2 public void execute(ISFSEvent event) throws SFSLoginException { 3 4 // 用戶名 5 String username = (String) event.getParameter(SFSEventParam.LOGIN_NAME); 6 // 密碼(密文) 7 String password = (String) event.getParameter(SFSEventParam.LOGIN_PASSWORD); 8 // 當前Session 9 Session session = (Session) event.getParameter(SFSEventParam.SESSION); 10 11 // 密碼(明文),與客戶端密碼進行驗證 12 String pwd = "test"; 13 if (!getApi().checkSecurePassword(session, pwd, password)) { 14 // 驗證失敗,拋出登陸異常信息 15 throw new SFSLoginException("密碼錯誤!"); 16 }else{ 17 // 驗證經過 18 } 19 }
須要注意的地方
1. 客戶端的密碼是通過加密後發送的, 非明文!
2. 服務端若是驗證失敗直接拋出異常便可, SmartFoxServer會本身封裝請求返回, 本身不用另外推送消息.
整個登陸過程仍是挺簡單的, 具體流程爲, 首先客戶端和服務端分別監聽本身的登陸事件, 當鏈接成功後客戶端發送登陸請求, 服務端觸發USER_LOGIN事件進行驗證, 驗證難過客戶端觸發LOGIN事件, 驗證失敗拋出SFSLoginException, 客戶端觸發LOGIN_ERROR事件.
本文版權歸做者和博客園共有,來源網址:http://www.cnblogs.com/code-boy/歡迎各位轉載,可是未經做者本人贊成,轉載文章以後必須在文章頁面明顯位置給出做者和原文鏈接,不然保留追究法律責任的權利。