supersocket缓冲区_supersockets接收过滤器(ReceiveFilter)

接收过滤器(ReceiveFilter)用于将接收到的二进制数据转化成请求实例(RequestInfo)。

实现一个接收过滤器(ReceiveFilter), 你需要实现接口 IReceiveFilter:

public interface IReceiveFilter

where TRequestInfo : IRequestInfo

{

///

/// Filters received data of the specific session into request info.

///

/// 待读取的缓冲数据.

/// 这个待读取缓冲中当前接收数据的偏移量

/// 当前接收数据的长度

/// if set to true [to be copied].

/// 没有被解析的数据的长度

///

TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest);

///

/// Gets the size of the left buffer.

///

///

/// 接收过滤器已缓存数据的长度

///

int LeftBufferSize { get; }

///

/// Gets the next receive filter.

///

IReceiveFilter NextReceiveFilter { get; }

///

/// Resets this instance to initial state.重置这个实例到初始化状态

///

void Reset();

}

TRequestInfo: 类型参数 "TRequestInfo" 是你要在程序中使用的请求类型(RequestInfo);

LeftBufferSize: 该接收过滤器已缓存数据的长度;

NextReceiveFilter: 当下一块数据收到时,用于处理数据的接收过滤器实例;

Reset(): 重设接收过滤器实例到初始状态;

Filter(....): 该方法将会在 SuperSocket 收到一块二进制数据时被执行,接收到的数据在 readBuffer 中从 offset 开始, 长度为 length 的部分。

TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest);

readBuffer: 接收缓冲区, 接收到的数据存放在此数组里

offset: 接收到的数据在接收缓冲区的起始位置

length: 本轮接收到的数据的长度

toBeCopied: 表示当你想缓存接收到的数据时,是否需要为接收到的数据重新创建一个备份而不是直接使用接收缓冲区

rest: 这是一个输出参数, 它应该被设置为当解析到一个为正的请求后,接收缓冲区还剩余多少数据未被解析

这儿有很多种情况需要你处理:

当你在接收缓冲区中找到一条完整的请求时,你必须返回一个你的请求类型的实例.

当你在接收缓冲区中没有找到一个完整的请求时, 你需要返回 NULL.

当你在接收缓冲区中找到一条完整的请求, 但接收到的数据并不仅仅包含一个请求时,设置剩余数据的长度到输出变量 "rest". SuperSocket 将会检查这个输出参数 "rest", 如果它大于 0, 此 Filter 方法 将会被再次执行, 参数 "offset" 和 "length" 会被调整为合适的值.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android网络盒子改,有什么办法可以把淘汰下来的安卓手机改造成电视盒子用?...

基本上谁家都会有一两部旧的手机,其实并不是不能用或者坏了,只是配置有些低。我们只需要简单改造一下,就可以将旧手机改造成电视盒子,而且比普通的网络盒子性能更强大。有线方式我们需要准备一根MHL线,大部分的安卓手机…

心电信号越界怎么回事_心电监护仪常见故障分析与排除

心电监护仪常见故障分析与排除心电监护仪是一种连续实时的无创伤监测患者多种生理参数的监护仪器。本文结合EM-6多参数仪(北京康宏兴业科技发展有限公司生产)在临床使用巾经常出现的故障现象以及故障的排除方法予以分析.供大家参考。1屏幕无显示1.1故障现…

android palette组件用法,Android Support Palette使用详解

使用Palette API选择颜色良好的视觉设计是app成功所必不可少的, 而色彩设计体系是设计的基础构成. Palette包是支持包, 能够从图片中解析出突出的颜色, 从而帮助你创建出视觉迷人的应用你能够使用Palette包设计布局主题, 并把自定义色彩应用到可视化元素中. 比如, 你可以根据专…

pdf文件如何生成目录 wps_wps制作pdf文档的详细方法

一些用户在使用wps软件的时候,wps怎样制作pdf文档?你们知道怎么操作的吗?对此感兴趣的伙伴们可以去下文看看wps制作pdf文档的详细方法。wps制作pdf文档的详细方法一、打开或生成原始文件本文选择用WPS打开《岳飞传.txt》,并进行智能格式整理。二、添加…

ecshop活动页_ECSHOP团购活动,ECSHOP团购列表

网店的团购活动和现实中的团购差不多。都是希望大量的人参与进来,从而以一个相对优惠的价格买的商品。下面介绍下网店的团购活动。进入后台 > 促销管理 > 团购活动如果已经添加过团购活动的话,这里会看到添加过的所有团购活动。点击右上角的 添加团…

android studio aspectj使用,androidStudio中使用 AspectJ

关于 AOP 的详细介绍请参考 深入理解Android之AOP本文主要介绍 怎么在 AndroidStudio 中使用 AspectJ1 . 在android studio 中新建一个项目 MyApplication2. 在 app 目录下 的 build.gradle 中完成如下配置:apply plugin: com.android.applicationimport org.aspectj.bridge.IM…

ndnsim r语言 ubuntu_Ubuntu14.04安装配置ndnSIM

Ubuntu14.04安装配置ndnSIM预环境Ubuntu14.04官方系统请先使用sudo apt-get update更新一下源列表安装步骤安装boost-libsudo apt-get install build-essential libsqlite3-dev libcrypto-devsudo apt-get install libboost-all-dev其中,build-essential和libboost是…

android ui stencil kit 下载,实用的iOS6/iPhone5 GUI/iPad PSD以及其它版本素材

实用的iOS6/iPhone5 GUI/iPad PSD以及其它版本素材10月 16, 2012评论 (1)Sponsor现在使用Apple旗下产品越来越多,比如iPhoneiPad等,正因如此,我们需要设计这类的apps应用也相对多了,所以如果有一些现用素材的话可以帮助设计师快速…

华为acl怎么生效_华为ACL配置教程(一)

一、ACL基本配置1、ACL规则生效时间段配置(需要先配置设备的时间,建议用ntp同步时间)某些引用ACL的业务或功能需要限制在一定的时间范围内生效,比如,在流量高峰期时启动设备的QoS功能。用户可以为ACL创建生效时间段,通过在规则中引…

android 中文参数,(原)Android: 启动另外的APP及传递参数

有时候需要从一个APP中启动另外一个APP,比如Twitter/微信等。如果你不知道那个APP的Activity,但是知道包名(package name),那么可以使用如下的方法:Intent LaunchIntent getPackageManager().getLaunchIntentForPackage("co…

kafka 主动消费_Kafka核心API——Consumer消费者

Consumer之自动提交在上文中介绍了Producer API的使用,现在我们已经知道如何将消息通过API发送到Kafka中了,那么现在的生产者/消费者模型就还差一位扮演消费者的角色了。因此,本文将介绍Consumer API的使用,使用API从Kafka中消费消…

android下拉弹性gif,android-pulltorefresh 下拉加载中使用gif动图

效果预览:xml布局xmlns:ptr"http://schemas.android.com/apk/res-auto"android:layout_width"fill_parent"android:layout_height"fill_parent"android:divider"#00000000"android:cacheColorHint"#00000000"and…

linux本地时间与utc不一致_Linux下CST和UTC时间的区别以及不一致的解决方法

1.在linux中,用date查看时间的时候显示:2013年 2月 17日 星期三 19:04:14 CST世界协调时间(Universal Time Coordinated,UTC):GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的…

ios uiview 如何刷新_ios-如何在Swift中刷新imageview而无需重新加载页面?

我有一个更新照片按钮,该按钮连接到facebookgraphAPI并下载当前用户的个人资料图片.我希望刷新视图上的图像,而无需重新加载viewController.有什么办法可以做到这一点?我知道tableview具有reloadData和refreshcontrol,但是我没有使用tableview.class ProfileViewCon…

unity3d android aar,Android Stuido导出AAR 给Unity3D调用注意事项

1. 导出 AAR过程需要注意,依赖的文件并没有打进去,所以要收到拷入到 Unity项目中,如下图中的 support包,是我项目中要用到的:2.删除aar包中重复的 libs下的 jar文件和 jni下的 .so文件,否则调用的时候会报…

识别产品外观的合格软件_产品外观质量视觉检测系统.PDF

产品外观质量视觉检测系统产品外观质量视觉检测系统北京大恒图像视觉有限公司Beijing Daheng Image Vision Co., Ltd公司简介中国大恒(集团)有限公司是中国科学院于 1987 年报经国务院批准创办的高新技术企业,公司于 1996 年至2007 年连续十二年进入全国电子百强企业…

html中图片响应式怎么写,如何使用 HTML5 的picture元素处理响应式图片

图片在响应式网页设计中是出了名的最具挑战性的方面之一。今天我们就来看看如何使用元素来处理响应式图片.让我们先了解一下问题固定宽度,像素完美的网站设计已经离我们远去了。在宽屏显示器,互联网电视,多尺寸的平板电脑和智能手机的今天&am…

安卓 多条通知_安卓11第一版发布:原生滚动截屏、屏幕录像、抄国内ROM这么多...

自2008年第一部Android智能手机HTC G1发布,安卓手机系统已经走过十几个年头。虽然系统存在一些大家吐槽较多的问题,但安卓一直活跃在智能手机系统前沿,不断发展完善着。昨天谷歌刚刚发布了全新的安卓11新系统,这次的系统更新出一些…

python樱花手绘_GitHub 硬核项目:动漫生成器让照片秒变手绘日漫风!!!

根据真实店铺照片生成的效果图,一度以为,这就是某个日漫番剧的截图本文转自:机器之心随手拍张照片,顺势转换为宫崎骏、新海诚等日漫大师的手绘风格作品,这个专门生成动漫图像的 GAN,实测很好用。尽管最近 2…

html表格字体格式转换,【转】常用HTML代码速查表

在搏客中比较常用的代码一、美化文字的代码:1.文字间换行:文字内容文字内容2.一个段落:文字内容3.字体加粗:文字内容4.字体加大:文字内容5.文字标题: 从一号标题H1到六号标题H6,逐渐减小文字内容…