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());
}
}
SuperSocket命令和命令加载器的更多相关文章
- SuperSocket命令加载器 (Command Loader)
在某些情况下,你可能希望通过直接的方式来加载命令,而不是通过自动的反射. 如果是这样,你可以实现你自己的命令加载器 (Command Loader): public interface IComman ...
- KnockoutJS 3.X API 第六章 组件(5) 高级应用组件加载器
无论何时使用组件绑定或自定义元素注入组件,Knockout都将使用一个或多个组件装载器获取该组件的模板和视图模型. 组件加载器的任务是异步提供任何给定组件名称的模板/视图模型对. 本节目录 默认组件加 ...
- java 27 - 1 反射之 类的加载器
说到反射,首先说类的加载器. 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载: 就是指将class文件读入内存,并为之 ...
- C编译器、链接器、加载器详解
摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代 ...
- Webpack模块加载器
一.介绍 Webpack是德国开发者 Tobias Koppers 开发的模块加载器,它能把所有的资源文件(JS.JSX.CSS.CoffeeScript.Less.Sass.Image等)都作为模块 ...
- 自己实现so加载器
在进行安全研究中,我们需要经常使用ida等工具对app的so进行动态调试.这其中遇到的最大问题可能就是app加了反调试.反root等保护手段对应用运行环境进行检测,而这些手段往往是在我们附加进程之前就 ...
- webpack loader加载器
配置loader,通过加载器处理文件,例如css sass less等,告诉webpack每一种文件都需要使用什么来加载器来处理. 1.node.js安装好之后也会自动默认安装好npm,所以cmd c ...
- Webpack的加载器
一.什么是加载器(loaders)loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用load ...
- JVM笔记11-类加载器和OSGI
一.JVM 类加载器: 一个类在使用前,如何通过类调用静态字段,静态方法,或者new一个实例对象,第一步就是需要类加载,然后是连接和初始化,最后才能使用. 类从被加载到虚拟机内存中开始,到卸载出内存为 ...
随机推荐
- BootStrap 栅格化换行问题
bootstrap 3的栅格系统有时会出现错位情况,原因是上一行的元素高度不一,导致元素float错误. 解决方法 使用栅格系统的时候,应该在每一行都使用row单独包裹起来,不要直接在一行中连续加入c ...
- deque简单解析
deque是支持双端插入删除的容器,oi中用来维护单调队列 声明方式 deque<int> d1;//声明一个叫d1的双向队列 deque<int> d2(d1);//声明一个 ...
- activity与fragment之间的传递数据
首先activity之间的数据传递就是 用intent和intent+bundle intent 传递 Intent i= new Intent(MainActivity.this,TheAty.cl ...
- Python3.7.4入门-4模块
4 模块 Python有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们.这样的文件被称作 模块 :模块中的定义可以 导入 到其它模块或者 主 模块 模块是一个包含Python ...
- Leetcode687.Longest Univalue Path最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 1: 输入: 5 / \ 4 5 / ...
- cmake时选择的VS生成器
运行cmake --help 在得到的输出中可以得到下面的结果:
- 利用Factory-boy来生成实例数据
库和版本:Faker==2.0.0factory-boy==2.12.0 官方文档:https://factoryboy.readthedocs.io/en/latest/index.html 1. ...
- 云计算、大数据、编程语言学习指南下载,100+技术课程免费学!这份诚意满满的新年技术大礼包,你Get了吗?
开发者认证.云学院.技术社群,更多精彩,尽在开发者会场 近年来,新技术发展迅速.互联网行业持续高速增长,平均薪资水平持续提升,互联网技术学习已俨然成为学生.在职人员都感兴趣的“业余项目”. 阿里云大学 ...
- 第二章 使用eclipse创建web项目
一.启动eclipse,点击菜单栏中的File->New->Dynamic Web Project新建一个动态网站项目 二.设置项目名称和运行服务器 三.点击next,进行下一步 四.如图 ...
- Directx11教程(48) depth/stencil buffer的作用
原文:Directx11教程(48) depth/stencil buffer的作用 在D3D11中,有depth/stencil buffer,它们和framebuffer相对应,如下图所 ...