前两篇都是基础工做, 只说不练是学不会的, 不废话, 来写第一个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/欢迎各位转载,可是未经做者本人赞成,转载文章以后必须在文章页面明显位置给出做者和原文链接,不然保留追究法律责任的权利。