using System; using System.Collections.Generic; using System.Threading.Tasks; using Common.Base; namespace Common.Network { [Flags] public enum PacketFlags { None = 0, Reliable = 1 << 0, Unsequenced = 1 << 1, NoAllocate = 1 << 2 } public abstract class AChannel: Entity, IDisposable { protected IService service; protected Action onDispose = channel => { }; protected AChannel(IService service) { this.service = service; } public abstract Task ConnectAsync(); /// /// 发送消息 /// public abstract void SendAsync( byte[] buffer, byte channelID = 0, PacketFlags flags = PacketFlags.Reliable); public abstract void SendAsync( List buffers, byte channelID = 0, PacketFlags flags = PacketFlags.Reliable); /// /// 接收消息 /// public abstract Task RecvAsync(); public abstract Task DisconnnectAsync(); public abstract string RemoteAddress { get; } public event Action OnDispose { add { this.onDispose += value; } remove { this.onDispose -= value; } } public abstract void Dispose(); } }