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());

    }

}

posted @ 2019-07-03 15:34  樊伟胜  阅读(782)  评论(0)    收藏  举报