public void Update() { this.OnEvents(); if (this.Service() < 0) { return; } while (true) { ENetEvent eNetEvent = this.TryGetEvent(); if (eNetEvent == null) { return; } switch (eNetEvent.Type) { case EventType.Connect: { // 这是一个connect peer if (this.USocketManager.ContainsKey(eNetEvent.Peer)) { USocket uSocket = this.USocketManager[eNetEvent.Peer]; uSocket.OnConnected(); break; } // 这是accept peer if (this.AcceptTcs != null) { this.OnAccepted(eNetEvent); break; } // 如果server端没有acceptasync,则请求放入队列 this.connQueue.Add(eNetEvent.Peer, eNetEvent); break; } case EventType.Receive: { USocket uSocket = this.USocketManager[eNetEvent.Peer]; uSocket.OnReceived(eNetEvent); break; } case EventType.Disconnect: { USocket uSocket = this.USocketManager[eNetEvent.Peer]; this.USocketManager.Remove(uSocket.PeerPtr); uSocket.PeerPtr = IntPtr.Zero; uSocket.OnDisconnect(eNetEvent); break; } } } }
internal void OnReceived(ENetEvent eNetEvent) { // 将包放到缓存队列 using (UPacket packet = new UPacket(eNetEvent.Packet)) { byte[] bytes = packet.Bytes; this.RecvQueue.Enqueue(bytes); } }
internal void OnConnected(ENetEvent eNetEvent) { isConnected = true; while (this.sendQueue.Count > 0) { BufferInfo info = this.sendQueue.Dequeue(); this.SendAsync(info.Buffer, info.ChannelID, info.Flags); } }
private ENetEvent TryGetEvent() { if (this.eNetEventCache == null) { this.eNetEventCache = new ENetEvent(); } if (NativeMethods.ENetHostCheckEvents(this.host, this.eNetEventCache) <= 0) { return null; } ENetEvent eNetEvent = this.eNetEventCache; this.eNetEventCache = null; return eNetEvent; }
private ENetEvent TryGetEvent() { if (this.eNetEventCache == null) { this.eNetEventCache = new ENetEvent(); } if (NativeMethods.ENetHostCheckEvents(this.host, this.eNetEventCache) <= 0) { return(null); } ENetEvent eNetEvent = this.eNetEventCache; this.eNetEventCache = null; return(eNetEvent); }
public void Update() { this.OnEvents(); if (this.Service() < 0) { return; } while (true) { ENetEvent eNetEvent = this.GetEvent(); if (eNetEvent == null) { return; } switch (eNetEvent.Type) { case EventType.Connect: { // 这是一个connect peer if (this.USocketManager.ContainsKey(eNetEvent.Peer)) { USocket uSocket = this.USocketManager[eNetEvent.Peer]; uSocket.OnConnected(eNetEvent); } break; } case EventType.Receive: { USocket uSocket = this.USocketManager[eNetEvent.Peer]; uSocket.OnReceived(eNetEvent); break; } case EventType.Disconnect: { USocket uSocket = this.USocketManager[eNetEvent.Peer]; this.USocketManager.Remove(uSocket.PeerPtr); uSocket.PeerPtr = IntPtr.Zero; uSocket.OnDisconnect(eNetEvent); break; } } } }
private void OnAccepted(ENetEvent eEvent) { if (eEvent.Type == EventType.Disconnect) { this.AcceptTcs.TrySetException(new Exception("socket disconnected in accpet")); } USocket socket = new USocket(eEvent.Peer, this); this.USocketManager.Add(socket.PeerPtr, socket); socket.OnAccepted(); var tcs = this.AcceptTcs; this.AcceptTcs = null; tcs.SetResult(socket); }
internal static extern int ENetHostService(IntPtr host, ENetEvent ev, uint timeout);
internal static extern int ENetHostCheckEvents(IntPtr host, ENetEvent ev);
internal void OnDisconnect(ENetEvent eNetEvent) { disconnect(); }
internal void OnReceived(ENetEvent eNetEvent) { // 将包放到缓存队列 using (UPacket packet = new UPacket(eNetEvent.Packet)) { byte[] bytes = packet.Bytes; this.RecvQueue.Enqueue(bytes); } this.received(); }
internal static extern int enet_host_check_events(IntPtr host, ref ENetEvent ev);