AChannel.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. using Common.Base;
  5. using Common.Helper;
  6. namespace Common.Network
  7. {
  8. [Flags]
  9. public enum PacketFlags
  10. {
  11. None = 0,
  12. Reliable = 1 << 0,
  13. Unsequenced = 1 << 1,
  14. NoAllocate = 1 << 2
  15. }
  16. public abstract class AChannel: Entity<AChannel>, IDisposable
  17. {
  18. protected IService service;
  19. protected Action<AChannel> onDispose = channel => { };
  20. protected AChannel(IService service)
  21. {
  22. this.service = service;
  23. }
  24. public abstract Task<bool> ConnectAsync();
  25. /// <summary>
  26. /// 发送消息
  27. /// </summary>
  28. public abstract void SendAsync(
  29. byte[] buffer, byte channelID = 0, PacketFlags flags = PacketFlags.Reliable);
  30. public abstract void SendAsync(
  31. List<byte[]> buffers, byte channelID = 0, PacketFlags flags = PacketFlags.Reliable);
  32. /// <summary>
  33. /// 接收消息
  34. /// </summary>
  35. public abstract Task<byte[]> RecvAsync();
  36. public abstract Task<bool> DisconnnectAsync();
  37. public abstract string RemoteAddress { get; }
  38. public event Action<AChannel> OnDispose
  39. {
  40. add
  41. {
  42. this.onDispose += value;
  43. }
  44. remove
  45. {
  46. this.onDispose -= value;
  47. }
  48. }
  49. public abstract void Dispose();
  50. }
  51. }