public override async void SendMessageAsync(INetworkMessage netMsg) { IRemotePeer tmpPeer; if (peerDict.TryGetValue(netMsg.Conv, out tmpPeer)) { UdpClientPeer peer = tmpPeer as UdpClientPeer; UdpNetMessage udpNetMsg = netMsg as UdpNetMessage; var result = peer.EncodeMessage(ref udpNetMsg); if (result) { if (udpSocket != null) { try { var buffer = udpNetMsg.GetBuffer(); int length = await udpSocket.SendAsync(buffer, buffer.Length, peer.PeerEndPoint); if (length != buffer.Length) { //消息未完全发送,则重新发送 SendMessageAsync(udpNetMsg); } } catch (Exception e) { Utility.Debug.LogError($"Send net message exceotion : {e.Message}"); } } } } }
async void SendFINMessageAsync(INetworkMessage netMsg, IPEndPoint endPoint) { UdpNetMessage udpNetMsg = netMsg as UdpNetMessage; udpNetMsg.TS = Utility.Time.MillisecondTimeStamp(); udpNetMsg.EncodeMessage(); if (udpSocket != null) { try { var buffer = udpNetMsg.GetBuffer(); int length = await udpSocket.SendAsync(buffer, buffer.Length, endPoint); if (length != buffer.Length) { //消息未完全发送,则重新发送 SendFINMessageAsync(udpNetMsg, endPoint); } } catch (Exception e) { Utility.Debug.LogError($"Send net message exceotion:{e.Message}"); } } }