/// <summary> /// 更新(读取, 发送) /// </summary> public void Update() { //接受消息 while (client.Available > 0) { NetworkUtils.UnpackTCPMessage(client, out ushort cmd1, out ushort cmd2, out byte[] data); uint key = NetworkUtils.EnumToKey(cmd1, cmd2); if (callbackDict.ContainsKey(key)) { callbackDict[key](data); } } //发送消息 while (messagesToBeSend.Count > 0) { byte[] data = messagesToBeSend.Dequeue(); client.Send(data); } }
/// <summary> /// 更新(接受, 读取, 发送) /// </summary> public void Update() { //异步接收客户端 if (accept) { try { acceptAsync = server.BeginAccept(null, null); accept = false; } catch (Exception) { } } if (acceptAsync.IsCompleted) { try { Socket socket = server.EndAccept(acceptAsync); Client client = new Client(true, socket); clients.Add(client); OnConnected?.Invoke(client); } catch (Exception) { } finally { accept = true; } } //异步接收消息 foreach (Client client in clients) { try { while (client.Socket.Available > 0) { NetworkUtils.UnpackTCPMessage(client.Socket, out ushort cmd1, out ushort cmd2, out byte[] data); uint key = NetworkUtils.EnumToKey(cmd1, cmd2); if (callbackDict.ContainsKey(key)) { //执行回调方法 callbackDict[key](client, data); } } } catch (Exception ex) { RemoveClient(client, ex.Message); } } List <Client> deleteClients = new List <Client>(); //异步发送消息 while (messagesToBeSend.Count > 0) { ClientMessage message = messagesToBeSend.Dequeue(); Client client = message.Client; if (!client.Connected) { deleteClients.Add(client); } else { try { client.Socket.Send(message.Data); } catch (Exception ex) { RemoveClient(client, ex.Message); deleteClients.Add(client); } } } foreach (Client item in deleteClients) { clients.Remove(item); } }