public override void OnRefresh() { if (!Available) { return; } OnReceive(); peer.OnRefresh(); if (awaitHandle.Count > 0) { UdpReceiveResult data; if (awaitHandle.TryDequeue(out data)) { UdpNetworkMessage netMsg = Facade.SpawnReference <UdpNetworkMessage>(); netMsg.CacheDecodeBuffer(data.Buffer); if (Conv == 0) { Conv = netMsg.Conv; peer.Conv = Conv; peer.AllocateConv(Conv); } if (netMsg.IsFull) { peer.MessageHandler(netMsg); } } } }
public override void OnRefresh() { clientPeerRefreshHandler?.Invoke(); if (awaitHandle.Count > 0) { UdpReceiveResult data; if (awaitHandle.TryDequeue(out data)) { UdpNetMessage netMsg = CosmosEntry.ReferencePoolManager.Spawn <UdpNetMessage>(); netMsg.DecodeMessage(data.Buffer); #if DEBUG if (netMsg.Cmd == UdpProtocol.MSG) { Utility.Debug.LogInfo($" OnRefresh KCP_MSG:{netMsg} ;ServiceMessage : {Utility.Converter.GetString(netMsg.ServiceData)},TS:{netMsg.TS}"); } #endif if (netMsg.IsFull) { if (netMsg.Conv == 0) { conv += 1; netMsg.Conv = conv; UdpClientPeer peer; CreateClientPeer(netMsg, data.RemoteEndPoint, out peer); } if (peerDict.TryGetValue(netMsg.Conv, out var rPeer)) { UdpClientPeer tmpPeer = rPeer as UdpClientPeer; //如果peer失效,则移除 if (!tmpPeer.Available) { clientPeerRefreshHandler -= tmpPeer.OnRefresh; AbortUnavilablePeer(rPeer); } else { tmpPeer.MessageHandler(netMsg); } } else { //发送终结命令; UdpNetMessage finMsg = UdpNetMessage.EncodeMessage(netMsg.Conv); finMsg.Cmd = UdpProtocol.FIN; SendFINMessageAsync(finMsg, data.RemoteEndPoint); } } } } }