SuperSocket 中的几个基本概念

    包类型代表从网络另一段收到的数据包的数据结构。

    包类型 TextPackageInfo(SuperSocket.ProtoBase.TextPackageInfo,SuperSocket.ProtoBase) 是在 SuperSocket 中定义的最简单的数据包。它代表这类型的包仅包含一个字符串。

    但是我们通常会有更复杂的网络数据包结构。例如,下面定义的包类型告诉我们此数据包包含两个字段,Sequence 和 Body。

    1. {
    2. public short Sequence { get; set; }
    3. public string Body { get; set; }
    4. }

    在后面的文档中,我们会解析如何根据 Key 字段的值定义命令来处理不不同种类的数据包。

    这种类型在网络协议解析中作用重要。它定义了如何将 IO 数据流解码成可以被应用程序理解的数据包。

    这些是 PipelineFilter 的基本接口。你的系统中至少需要一个实现这个接口的 PipelineFilter 类型。

    1. public interface IPipelineFilter
    2. void Reset();
    3. }
    4. public interface IPipelineFilter<TPackageInfo> : IPipelineFilter
    5. where TPackageInfo : class
    6. {
    7. IPackageDecoder<TPackageInfo> Decoder { get; set; }
    8. TPackageInfo Filter(ref SequenceReader<byte> reader);
    9. IPipelineFilter<TPackageInfo> NextFilter { get; }
    10. }

    CommandLinePipelineFilter (SuperSocket.ProtoBase.CommandLinePipelineFilter, SuperSocket.ProtoBase) 是在我们最常用的内置PipleFilter模版之一。我们将会在文档和示例代码中经常使用它。

    你定义好 Package 类型和 PipelineFilter 类型之后,你就可以使用 SuperSocketHostBuilder 创建 SuperSocket 宿主了。

    在某些情况下,你可能需要实现接口 IPipelineFilterFactory 来完全控制 PipelineFilter 的创建。

    1. public class MyFilterFactory : PipelineFilterFactoryBase<TextPackageInfo>
    2. {
    3. protected override IPipelineFilter<TPackageInfo> CreateCore(object client)
    4. {
    5. return new FixedSizePipelineFilter(10);