AChannel.cs 956 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4. namespace Base
  5. {
  6. [Flags]
  7. public enum PacketFlags
  8. {
  9. None = 0,
  10. Reliable = 1 << 0,
  11. Unsequenced = 1 << 1,
  12. NoAllocate = 1 << 2
  13. }
  14. public abstract class AChannel: IDisposable
  15. {
  16. public long Id { get; private set; }
  17. protected AService service;
  18. protected AChannel(AService service)
  19. {
  20. this.Id = IdGenerater.GenerateId();
  21. this.service = service;
  22. }
  23. /// <summary>
  24. /// 发送消息
  25. /// </summary>
  26. public abstract void Send(byte[] buffer, byte channelID = 0, PacketFlags flags = PacketFlags.Reliable);
  27. public abstract void Send(List<byte[]> buffers, byte channelID = 0, PacketFlags flags = PacketFlags.Reliable);
  28. /// <summary>
  29. /// 接收消息
  30. /// </summary>
  31. public abstract Task<byte[]> Recv();
  32. public virtual void Dispose()
  33. {
  34. if (this.Id == 0)
  35. {
  36. return;
  37. }
  38. this.service.Remove(this.Id);
  39. this.Id = 0;
  40. }
  41. }
  42. }