最近见很多人问道SmartFoxServer的问题,看大家很抓狂,网上的文章也很零碎。索性抛砖引玉,共同求进步吧。
先简单介绍下SmartFoxServer吧,一个非常优秀的跨平台socket服务器,内有很多游戏开发用到的数据结构和支撑性功能。多用于游戏、在线聊天室方面的应用。支持多种客户端和服务器语言。分为免费和收费版本。免费版本有100人限制。
整体上它有3个比较核心的概念。zone、room、user。房间依赖于zone、用户依赖于房间。zone需要在它的配置文件进行生命。扩展配置如下:
xxxExt JAVA com.xxx.xxx NONE
xxxExt你起的扩展名称,将来写好的程序要打包到 /extensions/xxxExt 下,sfs会自动加载里边的jar包。type代表你用什么语言进行服务器端扩展,file代表你写的扩展主程序入口,一些重要的事件需要在此声明。我们先看下这个扩展主类都需要些什么吧。
public class xxxExtensionMain extends SFSExtension { @Override public void init() { initEventHandlers(); } public void destroy(){ super.destroy(); } // 绑定sfs系统事件 private void initEventHandlers() { //注册登录事件 this.addEventHandler(SFSEventType.USER_LOGIN, LoginEventHandler.class); //注册加入zone事件 this.addEventHandler(SFSEventType.USER_JOIN_ZONE, JoinZoneEventHandler.class); //注册加入房间事件 this.addEventHandler(SFSEventType.USER_JOIN_ROOM, JoinRoomEventHandler.class); //注册离开房间事件 this.addEventHandler(SFSEventType.USER_LEAVE_ROOM, LeaveRoomEventHandler.class); //注册断开连接事件 this.addEventHandler(SFSEventType.USER_DISCONNECT, LeaveRoomEventHandler.class); } // 初始化过滤器 private void initFilters(){ }}sfs扩展很强,它允许你进行房间扩展。
public class MyRoomExtension extends SFSExtension { @Override public void init() { } @Override public void destroy() { super.destroy(); } }
该扩展需要你在CreateRoomSettings createRoomSettings = new CreateRoomSettings();这个类进行设置。createRoomSettings.setExtension(new RoomExtensionSettings("xxxExt", 你的扩展全类名));
好了,这样至少你的第一个smartfoxserver就可以跑起来了。下次为大家解析登陆流程。