前兩篇都是基礎工做, 只說不練是學不會的, 不廢話, 來寫第一個Hello world".html
一. 環境java
服務端: java 1.7服務器
客戶端: unity 5.2eclipse
二. 服務端tcp
1. 依賴包ide
新建項目就不說了, java project就能夠, 加入SmartFoxServer的依賴包sfs2x.jar和sfs2x-core.jar, 兩個jar包能夠在SmartFoxServer的安裝目錄下的SFS2X/lib/下找到.測試
2. 代碼編寫spa
a. 新建類繼承SFSExtension, 並重寫init方法code
1 public class StudyExtenstion extends SFSExtension { 2 3 @Override 4 public void init() { 5 6 // Client Requests 7 addRequestHandler("test", TestHandler.class); 8 9 // Server Events 10 addEventHandler(SFSEventType.SERVER_READY, OnServerReady.class); 11 12 } 13 }
1 public class TestHandler extends BaseClientRequestHandler{ 2 3 @Override 4 public void handleClientRequest(User user, ISFSObject obj) { 5 tract("Hello world, client request."); 6 } 7 8 }
1 public class OnServerReady extends BaseServerEventHandler{ 2 3 @Override 4 public void execute(ISFSEvent event) { 5 trace("Hello world, server event."); 6 } 7 }
StudyExtension: 能夠把理解成main方法(但很明顯不是), 它是SmartFoxServer獲取extendsion註冊事件的入口, 至關於咱們業務邏輯和SmartFoxServer之間的一箇中轉, 具體能夠看 這裏 .orm
TestHandler: 客戶端請求的處理類, 當服務端收到某個請求後, 根據請求ID找到對應的處理類來處理相關邏輯.
OnServerReady: 服務端事件觸發處理類, 當服務端某個事件被觸發後, 通知該事件的監聽類來處理類.
3. 打包
導出jar包就不說了, 須要注意的是jar的名稱, jar文件名稱必定要以Extension結尾, 即 xxxExtension.jar, 這是SmartFoxServer的一個約定, 不按這個來在後臺頁面是看不到你的extension的.
4. 發佈
找到此目錄SmarFoxServer安裝目錄/SmartFoxServer_2X/SFS2X/extensions/, 新建一個文件夾, 取個好名字, 這個好名字是有用的, 而後將打包好的jar包放到此目錄下(這步操做能夠經過後臺管理頁面來實現).
登陸後臺, 打開Extension Manager, 剛建的文件夾名字若是出如今列表裏且裏面含有xxxExtension.jar說明發布成功.
此時在eclipse裏啓動SmartFoxServer(怎麼在eclipse裏啓動SmartFoxServer看這裏), 在控制檯會看到 "Hello world, server event." 的輸出信息.
萬事具有, 還差不少!
三. 後臺配置
先看下Zone 和Room 的結構關係, 更詳細的看 這裏
1. 建立Zone
登陸後臺, 打開Zone Configurator, 點擊左下角的小綠色圖標, 打開Zone 的配置界面, 配置信息不少, 主要關注General 和Zone Extension 兩個
General 主要是基本信息的配置, 包括登陸方式, 人數, 房間, 詞過濾, 鏈接等一些的配置, 除了Zone name 都有默認值
Zone name: zone名稱(GameZone), 必填, 最好取個好聽點的名稱, 由於這個也是有用的
Force logout: 用戶重名驗證, 若是爲true, 當有重名用戶登陸時, 先登陸的用戶會被踢下線
Use custom login: 是否容許遊客登陸, false 遊客登陸, true 驗證登陸, 注: 若是爲false 是不會觸發USER_LOGIN 事件的
Maximum length of Room names: 房間名稱最長長度, 這個修改大一點, 否則會形成房間房間失敗
Zone Extension 附加到此Zone的邏輯處理程序, 即咱們的代碼, 其實就是剛纔那個jar包
Name: 文件夾名稱, 就是發佈那一步建立的文件夾名稱
Type: 這裏就選JAVA
Main class: 咱們的擴展類的完整包路徑名稱, 這裏SmartFoxServer會自動掃描該類, 當name選擇完成後這裏會自動填充.
Zone配置完成, 點擊下面的submit保存, 而後再cancel關閉
2. 建立Room
選中剛新建的TestZone, 點擊對應在Rooms下面的綠色圖標, 出現Room的配置界面, 一樣是General 和Room Extension
Room Name: 房間名稱(GameRoom), 必填.
其它就不說了, 須要注意的是Room Extension, 這裏也能夠附加對應邏輯處理程序, 並且也能夠和Zone Extension是同一個處理程序, 形成的結果就是一樣的事件會被觸發兩次.
四. 客戶端
客戶端相對就比較簡單了, 直接上代碼.
1 using Sfs2X; 2 using Sfs2X.Core; 3 using Sfs2X.Entities.Data; 4 using Sfs2X.Requests; 5 using Sfs2X.Util; 6 using UnityEngine; 7 8 public class Test : MonoBehaviour 9 { 10 public const string host = "192.168.11.100"; 11 public const int tcpPort = 9933; 12 public const int udpPort = 9933; 13 public const string defaultZone = "GameZone"; 14 public const string defaultRoom = "GameRoom"; 15 16 private SmartFox _sfs; 17 18 void Start() 19 { 20 connect(); 21 } 22 23 void Update() 24 { 25 // 處理SmartFoxServer事件 26 if (null != _sfs) 27 _sfs.ProcessEvents(); 28 } 29 private void connect() 30 { 31 // 獲得配置數據 32 ConfigData cfg = initConfig(); 33 34 // 鏈接服務器 35 _sfs = new SmartFox(); 36 _sfs.Connect(cfg); 37 38 // 添加監聽事件 39 _sfs.AddEventListener(SFSEvent.CONNECTION, onConnection); 40 _sfs.AddEventListener(SFSEvent.CONNECTION_LOST, onConnectionLost); 41 42 _sfs.AddEventListener(SFSEvent.LOGIN, onLogin); 43 _sfs.AddEventListener(SFSEvent.LOGIN_ERROR, onLoginError); 44 } 45 private ConfigData initConfig() 46 { 47 ConfigData conf = new ConfigData(); 48 conf.Host = host; 49 conf.Port = tcpPort; 50 conf.UdpHost = host; 51 conf.UdpPort = udpPort; 52 conf.Zone = defaultZone; 53 conf.Debug = true; 54 return conf; 55 } 56 57 private void onConnection(BaseEvent evt) 58 { 59 bool success = (bool)evt.Params["success"]; 60 if (success) 61 { 62 // 鏈接成功後發送登陸請求 63 Debug.Log("connect server successed."); 64 IRequest req = new LoginRequest("username"); 65 send(req); 66 } 67 else 68 { 69 string errorMsg = (string)evt.Params["errorMessage"]; 70 Debug.Log("connect server failed, errorMessage: " + errorMsg); 71 } 72 73 } 74 private void onConnectionLost(BaseEvent evt) 75 { 76 string reason = (string)evt.Params["reason"]; 77 Debug.Log("connection lost, reason: " + reason); 78 } 79 private void onLogin(BaseEvent evt) 80 { 81 // 登陸成功後發送測試請求 82 string extCmd = "test"; 83 ISFSObject parameters = SFSObject.NewInstance(); 84 IRequest req = new ExtensionRequest(extCmd, parameters); 85 send(req); 86 } 87 private void onLoginError(BaseEvent evt) 88 { 89 string errorMsg = ComUtil.getErrorMessage(evt); 90 Debug.Log("login error, error message: " + errorMsg); 91 } 92 public void send(IRequest req) 93 { 94 if (null == _sfs) 95 return; 96 97 // 向服務端發送請求 98 Debug.Log("[send message, message: ] " + req.ToString()); 99 _sfs.Send(req); 100 } 101 102 }
運行客戶端, 服務端收到請求, 輸出 "Hello world, client request." 信息.
代碼很簡單, 鏈接成功後發送登陸請求,登陸成功發送測試請求, 就很少說了.
第一個簡單的extension已經完成了, 這裏主要說的流程上的東西, 對整個開發過程作了個總體介紹, 知道寫一個SmartFoxServer擴展要作哪些工做, 因此沒涉及到任何業務邏輯, 後續再寫一些具體與邏輯有關東西!
本文版權歸做者和博客園共有,來源網址:http://www.cnblogs.com/code-boy/歡迎各位轉載,可是未經做者本人贊成,轉載文章以後必須在文章頁面明顯位置給出做者和原文鏈接,不然保留追究法律責任的權利。