supersocket缓冲区_supersockets接收过滤器(ReceiveFilter)
接收過濾器(ReceiveFilter)用于將接收到的二進(jìn)制數(shù)據(jù)轉(zhuǎn)化成請求實(shí)例(RequestInfo)。
實(shí)現(xiàn)一個(gè)接收過濾器(ReceiveFilter), 你需要實(shí)現(xiàn)接口 IReceiveFilter:
public interface IReceiveFilter
where TRequestInfo : IRequestInfo
{
///
/// Filters received data of the specific session into request info.
///
/// 待讀取的緩沖數(shù)據(jù).
/// 這個(gè)待讀取緩沖中當(dāng)前接收數(shù)據(jù)的偏移量
/// 當(dāng)前接收數(shù)據(jù)的長度
/// if set to true [to be copied].
/// 沒有被解析的數(shù)據(jù)的長度
///
TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest);
///
/// Gets the size of the left buffer.
///
///
/// 接收過濾器已緩存數(shù)據(jù)的長度
///
int LeftBufferSize { get; }
///
/// Gets the next receive filter.
///
IReceiveFilter NextReceiveFilter { get; }
///
/// Resets this instance to initial state.重置這個(gè)實(shí)例到初始化狀態(tài)
///
void Reset();
}
TRequestInfo: 類型參數(shù) "TRequestInfo" 是你要在程序中使用的請求類型(RequestInfo);
LeftBufferSize: 該接收過濾器已緩存數(shù)據(jù)的長度;
NextReceiveFilter: 當(dāng)下一塊數(shù)據(jù)收到時(shí),用于處理數(shù)據(jù)的接收過濾器實(shí)例;
Reset(): 重設(shè)接收過濾器實(shí)例到初始狀態(tài);
Filter(....): 該方法將會在 SuperSocket 收到一塊二進(jìn)制數(shù)據(jù)時(shí)被執(zhí)行,接收到的數(shù)據(jù)在 readBuffer 中從 offset 開始, 長度為 length 的部分。
TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest);
readBuffer: 接收緩沖區(qū), 接收到的數(shù)據(jù)存放在此數(shù)組里
offset: 接收到的數(shù)據(jù)在接收緩沖區(qū)的起始位置
length: 本輪接收到的數(shù)據(jù)的長度
toBeCopied: 表示當(dāng)你想緩存接收到的數(shù)據(jù)時(shí),是否需要為接收到的數(shù)據(jù)重新創(chuàng)建一個(gè)備份而不是直接使用接收緩沖區(qū)
rest: 這是一個(gè)輸出參數(shù), 它應(yīng)該被設(shè)置為當(dāng)解析到一個(gè)為正的請求后,接收緩沖區(qū)還剩余多少數(shù)據(jù)未被解析
這兒有很多種情況需要你處理:
當(dāng)你在接收緩沖區(qū)中找到一條完整的請求時(shí),你必須返回一個(gè)你的請求類型的實(shí)例.
當(dāng)你在接收緩沖區(qū)中沒有找到一個(gè)完整的請求時(shí), 你需要返回 NULL.
當(dāng)你在接收緩沖區(qū)中找到一條完整的請求, 但接收到的數(shù)據(jù)并不僅僅包含一個(gè)請求時(shí),設(shè)置剩余數(shù)據(jù)的長度到輸出變量 "rest". SuperSocket 將會檢查這個(gè)輸出參數(shù) "rest", 如果它大于 0, 此 Filter 方法 將會被再次執(zhí)行, 參數(shù) "offset" 和 "length" 會被調(diào)整為合適的值.
總結(jié)
以上是生活随笔為你收集整理的supersocket缓冲区_supersockets接收过滤器(ReceiveFilter)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冻干面膜用7A抗菌铂可拉膜布真的能解决细
- 下一篇: 临县5.8号火灾马累平什么情况了?