云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > SuperSocket学习进展

SuperSocket学习进展

  • 62 次阅读
  • 3 次下载
  • 2025/5/2 16:50:39

接收过滤器工厂(ReceiveFilterFactory)

接收过滤器工厂(ReceiveFilterFactory)用于为每个会话创建接收过滤器. 定义一个过滤器工厂(ReceiveFilterFactory)类型, 你必须实现接口 IReceiveFilterFactory. 类型参数 \是你要在整个程序中使用的请求类型 ///

/// Receive filter factory interface ///

///

public interface IReceiveFilterFactory : IReceiveFilterFactory where TRequestInfo : IRequestInfo {

///

/// 创建接收过滤器 ///

/// ///

/// the new created request filer assosiated with this socketSession ///新建的请求过滤器与SocketSession产生关联 ///

IReceiveFilter CreateFilter(IAppServer appServer, IAppSession appSession, IPEndPoint remoteEndPoint); }

你也可以直接使用默认的过滤器工厂(ReceiveFilterFactory) DefaultReceiveFilterFactory

, 当工厂的CreateFilter方法被调用时,它将会调用TReceiveFilter类型的无参构造方法来创建并返回TReceiveFilter.

和 AppSession,AppServer 配合工作

现在, 你已经有了 RequestInfo, ReceiveFilter 和 ReceiveFilterFactory, 但是你还没有正式使用它们. 如果你想让他们在你的程序里面可用, 你需要定义你们的 AppSession 和 AppServer 来使用他们.

1.为 AppSession 设置 RequestInfo

public class YourSession : AppSession {

//More code... }

2.为 AppServer 设置 RequestInfo 和 ReceiveFilterFactory

public class YourAppServer : AppServer {

public YourAppServer()

: base(new YourReceiveFilterFactory()) { } }

完成上面两件事情,你的自定义协议就应该可以工作了。

命令和命令加载器

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

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

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

public interface ICommand : ICommand where TRequestInfo : IRequestInfo where TAppSession : IAppSession {

void ExecuteCommand(TAppSession session, TRequestInfo requestInfo); }

public interface ICommand {

string Name { get; } }

请求处理代码必须被放置于方法 \requestInfo)\之中,并且属性 \的值用于匹配接收到请求实例(requestInfo)的Key。当一个请求实例(requestInfo) 被收到时,SuperSocket 将会通过匹配请求实例(requestInfo)的Key和命令的Name的方法来查找用于处理该请求的命令。 举个例子, 如果你收到如下请求(requestInfo): Key: \Body: \

于是 SuperSocket 将会寻找Name属性为\的命令。如果有个命令定义如下: 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: \Body: \

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

public class ADD : StringCommandBase {

public override string Name {

get { return \ }

public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo) {

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

命令程序集定义

是的,SuperSocket是用反射来查找哪些公开的类实现了基本的命令接口,但是它只在你的AppServer类定义的程序集中查找。

举例来说, 你的 AppServer 定义在程序集 GameServer.dll 中, 但是你的 ADD 命令是定义在程序集 BasicModules.dll 中: GameServer.dll + MyGameServer.cs BasicModules.dll + ADD.cs

默认的, 命令 \将不会被加载到游戏服务器实例。 如果你想要加载该命令, 你如要在配置中添加程序集 BasicModules.dll 到命令程序集列表之中:

type=\SuperSocket.SocketEngine\

serverType=\ ip=\

搜索更多关于: SuperSocket学习进展 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

接收过滤器工厂(ReceiveFilterFactory) 接收过滤器工厂(ReceiveFilterFactory)用于为每个会话创建接收过滤器. 定义一个过滤器工厂(ReceiveFilterFactory)类型, 你必须实现接口 IReceiveFilterFactory. 类型参数 \是你要在整个程序中使用的请求类型 /// /// Receive filter factory interface /// ///

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com