DeliveryConnection.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using Sers.Core.CL.MessageDelivery;
  3. using Vit.Core.Module.Log;
  4. using Vit.Extensions.Json_Extensions;
  5. namespace Sers.CL.Zmq.FullDuplex
  6. {
  7. public class DeliveryConnection : IDeliveryConnection
  8. {
  9. ~DeliveryConnection()
  10. {
  11. Close();
  12. }
  13. public Sers.Core.Util.StreamSecurity.SecurityManager securityManager { set => _securityManager = value; }
  14. Sers.Core.Util.StreamSecurity.SecurityManager _securityManager;
  15. /// <summary>
  16. /// 连接状态(0:waitForCertify; 2:certified; 4:waitForClose; 8:closed;)
  17. /// </summary>
  18. public byte state { get; set; } = DeliveryConnState.waitForCertify;
  19. public void SetIdentity(long identity)
  20. {
  21. identity <<= 1;
  22. identityOfWriter = identity.Int64ToBytes();
  23. identityOfReader = (++identity).Int64ToBytes();
  24. }
  25. internal byte[] identityOfReader { get; set; }
  26. internal byte[] identityOfWriter { get; set; }
  27. Action<IDeliveryConnection, ArraySegment<byte>> _OnGetFrame;
  28. public Action<IDeliveryConnection, ArraySegment<byte>> OnGetFrame
  29. {
  30. internal get => _OnGetFrame;
  31. set
  32. {
  33. if (_securityManager != null)
  34. {
  35. value =
  36. (conn, data) => { _securityManager.Decryption(data); }
  37. + value;
  38. }
  39. _OnGetFrame = value;
  40. }
  41. }
  42. public Action<DeliveryConnection, byte[]> OnSendFrameAsync { private get; set; }
  43. public void SendFrameAsync(Vit.Core.Util.Pipelines.ByteData data)
  44. {
  45. var bytes = data.ToBytes();
  46. _securityManager?.Encryption(bytes.BytesToArraySegmentByte());
  47. OnSendFrameAsync(this, bytes);
  48. }
  49. public Action<IDeliveryConnection> Conn_OnDisconnected { get; set; }
  50. public void Close()
  51. {
  52. state = DeliveryConnState.closed;
  53. try
  54. {
  55. Conn_OnDisconnected?.Invoke(this);
  56. }
  57. catch (Exception ex)
  58. {
  59. Logger.Error(ex);
  60. }
  61. }
  62. }
  63. }