AChannel.cs 958 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System;
  2. using System.Collections.Generic;
  3. namespace Base
  4. {
  5. [Flags]
  6. public enum PacketFlags
  7. {
  8. None = 0,
  9. Reliable = 1 << 0,
  10. Unsequenced = 1 << 1,
  11. NoAllocate = 1 << 2
  12. }
  13. public abstract class AChannel: IDisposable
  14. {
  15. public long Id { get; private set; }
  16. protected AService service;
  17. protected AChannel(AService service)
  18. {
  19. this.Id = IdGenerater.GenerateId();
  20. this.service = service;
  21. }
  22. public abstract void ConnectAsync();
  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 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. }