IFilter.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. namespace Universal.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 ITcpConnectNority
  25. //{
  26. // void Connect(string ip, int port);
  27. // void DisConnect(string ip, int port);
  28. //}
  29. public interface IFilter : ISender, IReceiver, IConnect
  30. {
  31. public static IFilter operator >>(IFilter filter1, IFilter filter2)
  32. {
  33. filter1.NextSender = filter2;
  34. filter2.PrevReceiver = filter1;
  35. filter2.PrevConnector = filter1;
  36. return filter2;
  37. }
  38. bool IReceiver.Receive(Data data)
  39. {
  40. return this.PrevReceiver?.Receive(data) == true;
  41. }
  42. bool ISender.Send(Data data)
  43. {
  44. return this.NextSender?.Send(data) == true;
  45. }
  46. void IConnect.Connected(Connection connection)
  47. {
  48. this.PrevConnector?.Connected(connection);
  49. }
  50. void IConnect.Disconnected(Connection connection)
  51. {
  52. this.PrevConnector?.Disconnected(connection);
  53. }
  54. }
  55. public abstract class BaseFilter : IFilter
  56. {
  57. public static BaseFilter operator >>(BaseFilter filter1, BaseFilter filter2)
  58. {
  59. filter1.NextSender = filter2;
  60. filter2.PrevReceiver = filter1;
  61. filter2.PrevConnector = filter1;
  62. return filter2;
  63. }
  64. public ISender? NextSender { get; set; }
  65. public IReceiver? PrevReceiver { get; set; }
  66. public IConnect? PrevConnector { get; set; }
  67. public virtual bool Receive(Data data)
  68. {
  69. return this.PrevReceiver?.Receive(data) == true;
  70. }
  71. public virtual bool Send(Data data)
  72. {
  73. return this.NextSender?.Send(data) == true;
  74. }
  75. public virtual void Connected(Connection connection)
  76. {
  77. this.PrevConnector?.Connected(connection);
  78. }
  79. public virtual void Disconnected(Connection connection)
  80. {
  81. this.PrevConnector?.Disconnected(connection);
  82. }
  83. }