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);
}
posted @ 2011-04-27 21:02 江大渔 阅读(...) 评论(...) 编辑 收藏