SuperSocket 1.5 Documentation译文 2 ----- 实现你的AppServer和AppSession
什么是AppSession?
AppSession表示逻辑socket连接,基于连接的操作应在该类中定义。您可以使用这个类的实例,将数据发送到TCP客户端,接收数据连接或关闭连接。
什么是AppServer?
AppServer表示监听所有客户端连接的服务端实例。在理想的情况下,我们可以从AppServer得到我们想找到的任何会话。它应该被定义在应用程序级别的操作和逻辑里。
创建你的 AppSession
-
您可以重写基类AppSessions的业务
public class TelnetSession : AppSession<TelnetSession> { protected override void OnSessionStarted() { this.Send("Welcome to SuperSocket Telnet Server"); } protected override void HandleUnknownRequest(StringRequestInfo requestInfo) { this.Send("Unknow request"); } protected override void HandleException(Exception e) { this.Send("Application error: {0}", e.Message); } protected override void OnSessionClosed(CloseReason reason) { //添加在会话关闭后你的业务逻辑代码
base.OnSessionClosed(reason); } }在上面的代码中,客户端连接上的时候服务端发送欢迎消息,这段代码也重写了其他用来处理我们自己逻辑的方法。
-
根据业务需求你可以为你的会话添加一个新的属性,创建一个将用于游戏服务端的AppSession
public class PlayerSession :AppSession<PlayerSession> { public int GameHallId { get; internal set; } public int RoomId { get; internal set; } }
-
关于命令
在第一份文档中,我们讨论了有关命令,现在我们在这里修改了一点:
public class ECHO : CommandBase<AppSession, StringRequestInfo> { public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo) { session.Send(requestInfo.Body); } }
在该命令的代码中,你应该已经发现,父类是CommandBase,其中有一个泛型类型参数AppSession。这是的默认AppSession。如果你想使用新的AppSession,把你的AppSession类型作为参数传递,否则服务器无法解析你的命令:
public class ECHO : CommandBase<PlayerSession, StringRequestInfo> { public override void ExecuteCommand(PlayerSession session, StringRequestInfo requestInfo) { session.Send(requestInfo.Body); } }
创建你的 AppServer
-
如果你想使用你的AppSession作为会话,你必须修改你的AppServer来使用它:
public class TelnetServer : AppServer<TelnetSession> { }
现在 TelnetSession 将可以用在 TelnetServer 的会话中。
-
这里也有很多保护类方法你可以重写
public class TelnetServer : AppServer<TelnetSession> { protected override bool Setup(IRootConfig rootConfig, IServerConfig config) { return base.Setup(rootConfig, config); } protected override void OnStartup() { base.OnStartup(); } protected override void OnStopped() { base.OnStopped(); } }
优点
允许你根据业务需求拓展的SuperSocket来实现你的AppSession和App Server,你也可以看到会话的连接事件和关闭事件,服务器的启动和停止事件。
在服务端的Setup()方法中,您也可以读取自己定制的配置,总之,它有很多功能,而这正是你需要很容易创建的一个socket服务器。