• SuperSocket命令和命令加载器


    关键字: 命令, 命令加载器, 多命令程序集

    命令 (Command)

    SuperSocket 中的命令设计出来是为了处理来自客户端的请求的, 它在业务逻辑处理之中起到了很重要的作用。

    命令类必须实现下面的基本命令接口:

    public interface ICommand<TAppSession, TRequestInfo> : ICommand

        where TRequestInfo : IRequestInfo

        where TAppSession : IAppSession

    {

        void ExecuteCommand(TAppSession session, TRequestInfo requestInfo);

    }

    public interface ICommand

    {

        string Name { get; }

    }

    请求处理代码必须被放置于方法 "ExecuteCommand(TAppSession session, TRequestInfo requestInfo)" 之中,并且属性 "Name" 的值用于匹配接收到请求实例(requestInfo)的Key。当一个请求实例(requestInfo) 被收到时,SuperSocket 将会通过匹配请求实例(requestInfo)的Key和命令的Name的方法来查找用于处理该请求的命令。

    举个例子, 如果你收到如下请求(requestInfo):

    Key: "ADD"

    Body: "1 2"

    于是 SuperSocket 将会寻找Name属性为"ADD"的命令。如果有个命令定义如下:

    public class ADD : StringCommandBase

    {

        public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo)

        {

              session.Send((int.Parse(requestInfo[0] + int.Parse(requestInfo[1])).ToString());

        }

    }

    因为基类 StringCommandBase 会设置Name属性的值为此类的名称(ADD),因此个命令将会被找到.

    但是在有些情况, 请求实例(requestInfo)的Key 无法当做类的名称。 比如说:

    Key: "01"

    Body: "1 2"

    为了让让你的 ADD 命令起作用,你需要为命令类重写Name属性:

    public class ADD : StringCommandBase

    {

        public override string Name

        {

            get { return "01"; }

        }

        public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo)

        {

              session.Send((int.Parse(requestInfo[0] + int.Parse(requestInfo[1])).ToString());

        }

    }

  • 相关阅读:
    bodybuilding
    DBLINK的session无法关闭,报异常!
    失控
    eclipse
    Linux下查看用户列表
    org.apache.commons.httpclient
    java map 遍历
    java String split
    胸上肌到底要怎么练啊!
    POI操作Excel常用方法总结
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11126772.html
Copyright © 2020-2023  润新知