• SuperSocket 1.4系列文档(5) 实现你的Socket命令


    大部分的业务逻辑代码应该放在Command里面。Command会由SuperSocket引擎根据收到的CommandInfo的Key来自动的执行。

    例如,客户端向SuperSocket发送一个以ECHO为Key的Command时, 如

    "ECHO I love you\r\n",

    名为ECHO的Command就会被执行。

    Echo命令定义如下:

    public class ECHO : StringCommandBase<EchoSession>
    {
        #region CommandBase<EchoSession> Members
     
        public override void ExecuteCommand(EchoSession session, StringCommandInfo commandInfo)
        {
            session.SendResponse(commandInfo.Data);
        }
     
        #endregion
    }

    (注意,命令类必须为public)

    当SuperSocket引擎收到一个以"ECHO"为Key的StringCommandInfo时,ECHO命令类的ExecuteCommand方法会被自动的执行。

    如果你在你的协议里面定义了自己的CommandInfo类型,你应该基于CommandBase<SessionType, CommandInfoType>来创建Command:

    public class ECHO : CommandBase<EchoSession, MyCommandInfo>
    {
        #region CommandBase<EchoSession> Members
     
        public override void ExecuteCommand(EchoSession session, MyCommandInfo commandInfo)
        {
            session.SendResponse(commandInfo.Data);
        }
     
        #endregion
    }

    在某些情况下,你的CommandInfo的key必须为16进制数字构成的字符串或者其它不能用来作为类名的字符串,此时,你可以override Command类的Name属性用于匹配command info的 key:

    public class ECHO : CommandBase<EchoSession, MyCommandInfo>
    {
        public override string Name
        {
            get { return "0A"; }
        }
     
        #region CommandBase<EchoSession> Members
     
        public override void ExecuteCommand(EchoSession session, MyCommandInfo commandInfo)
        {
            session.SendResponse(commandInfo.Data);
        }
     
        #endregion
    }

    在ExecuteCommand方法之中,你可以使用session实例来发送数据到客户端,你也可以通过session.AppServer语句来访问AppServer,然后用AppServer的属性和方法来实现你的业务逻辑。

    public override void ExecuteCommand(EchoSession session, MyCommandInfo commandInfo)
    {
        var appServer = session.AppServer;
        //Your business logics
        //Send data to client
        session.SendResponse(commandInfo.Data);
    }
    作者:江振宇
    出处:http://jzywh.cnblogs.com
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    【Ionic+AngularJS 开发】之『个人日常管理』App(一)
    [热拔插] 轻量级Winform插件式框架
    Electron开发
    Cordova+Ionic之坑
    Unity学习笔记
    【树结构数据同步】公司部门—通讯录数据同步
    java enum用法
    Java中哈希表(Hashtable)是如何实现的
    注意for循环中变量的作用域
    BI-日期维度表-SQL SERVER
  • 原文地址:https://www.cnblogs.com/jzywh/p/2031085.html
Copyright © 2020-2023  润新知