IFilter.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. namespace UniversalNetFrame451.IO;
  2. public class Data(byte[] rawData, Connection connection = null, DateTime? dateTime = default)
  3. {
  4. public byte[] RawData { get; } = rawData;
  5. public Connection Connection { get; } = connection;
  6. public DateTime DateTime { get; internal set; } = dateTime is null ? DateTime.Now : dateTime.Value;
  7. }
  8. public interface ISender
  9. {
  10. ISender NextSender { get; set; }
  11. bool Send(Data data);
  12. }
  13. public interface IReceiver
  14. {
  15. IReceiver PrevReceiver { get; set; }
  16. bool Receive(Data data);
  17. }
  18. public interface IConnect
  19. {
  20. IConnect PrevConnector { get; set; }
  21. void Connected(Connection connection);
  22. void Disconnected(Connection connection);
  23. }
  24. public interface IFilter : ISender, IReceiver, IConnect
  25. {
  26. }
  27. public abstract class BaseFilter : IFilter
  28. {
  29. public static BaseFilter operator >>(BaseFilter filter1, BaseFilter filter2)
  30. {
  31. filter1.NextSender = filter2;
  32. filter2.PrevReceiver = filter1;
  33. filter2.PrevConnector = filter1;
  34. return filter2;
  35. }
  36. public ISender NextSender { get; set; }
  37. public IReceiver PrevReceiver { get; set; }
  38. public IConnect PrevConnector { get; set; }
  39. public virtual bool Receive(Data data)
  40. {
  41. return this.PrevReceiver.Receive(data);
  42. }
  43. public virtual bool Send(Data data)
  44. {
  45. return this.NextSender.Send(data);
  46. }
  47. public virtual void Connected(Connection connection)
  48. {
  49. this.PrevConnector?.Connected(connection);
  50. }
  51. public virtual void Disconnected(Connection connection)
  52. {
  53. this.PrevConnector?.Disconnected(connection);
  54. }
  55. }