Fork me on GitHub

SuperSocket 1.5 Documentation译文 2 ----- 实现你的AppServer和AppSession

什么是AppSession?

    AppSession表示逻辑socket连接,基于连接的操作应在该类中定义。您可以使用这个类的实例,将数据发送到TCP客户端,接收数据连接或关闭连接。

什么是AppServer?

    AppServer表示监听所有客户端连接的服务端实例。在理想的情况下,我们可以从AppServer得到我们想找到的任何会话。它应该被定义在应用程序级别的操作和逻辑里。

创建你的 AppSession

  1. 您可以重写基类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); } }

     

    在上面的代码中,客户端连接上的时候服务端发送欢迎消息,这段代码也重写了其他用来处理我们自己逻辑的方法。

  2. 根据业务需求你可以为你的会话添加一个新的属性,创建一个将用于游戏服务端的AppSession

    public class PlayerSession :AppSession<PlayerSession>
    {
        public int GameHallId { get; internal set; }
    
        public int RoomId { get; internal set; }
    }

     

  3. 关于命令

    在第一份文档中,我们讨论了有关命令,现在我们在这里修改了一点:

    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

  1. 如果你想使用你的AppSession作为会话,你必须修改你的AppServer来使用它:

    public class TelnetServer : AppServer<TelnetSession>
    {
    
    }

    现在 TelnetSession 将可以用在 TelnetServer 的会话中。

  2. 这里也有很多保护类方法你可以重写

    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服务器。

posted @ 2013-01-16 22:18  逗豆豆  阅读(553)  评论(0编辑  收藏  举报