zoukankan      html  css  js  c++  java
  • 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());

        }

    }

  • 相关阅读:
    android studio学习---怎么创建一个新的module并且再次运行起来(在当前的project里面)
    你真的了解WebSocket吗?
    vue学习(十二)vue全家桶 Vue-router&Vuex
    GoJs的使用
    vue学习(十一)vue-cli3开发单文件组件
    vue学习(十)mixin 偷懒
    vue学习(九)对象变更检测注意事项
    vue学习(八)nextTick[异步更新队列]的使用和应用
    django的url 传不传参
    vue学习(七)refs的使用
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11126772.html
Copyright © 2011-2022 走看看