/// <summary> /// 该方法并没有用 /// </summary> public override void StartRecv() { this.LastRecvTime = TimeUitls.Now(); SetKcpSendTime(); while (true) { int n = kcp.PeekSize(); if (n == 0) { //LogRecord.Log(LogLevel.Error, "StartRecv", $"解包失败:{this.RemoteEndPoint}"); return; } int count = this.kcp.Recv(cacheBytes, 0, cacheBytes.Length); if (count <= 0) { return; } RecvParser.WriteBuffer(cacheBytes, 0, count); while (true) { try { var packet = RecvParser.ReadBuffer(); if (!packet.IsSuccess) { break; } if (!packet.IsHeartbeat) { //LogRecord.Log(LogLevel.Error, "StartRecv", $"收到远程电脑:{this.RemoteEndPoint}"); if (packet.IsRpc) { if (RpcDictionarys.TryRemove(packet.RpcId, out Action <Packet> action)) { //执行RPC请求回调 action(packet); } else { OnReceive?.Invoke(packet); } } else { OnReceive?.Invoke(packet); } } else { #if DEBUG LogRecord.Log(LogLevel.Warn, "HandleRecv", $"接收到客户端:{this.RemoteEndPoint}心跳包."); #endif } } catch (Exception e) { DisConnect(); #if DEBUG LogRecord.Log(LogLevel.Warn, "StartRecv", e); #endif return; } } } }
private void OnRecvComplete(object o) { isReceiving = false; if (this.NetSocket == null) { return; } this.LastRecvTime = TimeUitls.Now(); SocketAsyncEventArgs e = (SocketAsyncEventArgs)o; if (e.SocketError != SocketError.Success) { DisConnect(); return; } if (e.BytesTransferred == 0) { DisConnect(); return; } RecvParser.Buffer.UpdateWrite(e.BytesTransferred); while (true) { try { var packet = RecvParser.ReadBuffer(); if (!packet.IsSuccess) { break; } LastRecvTime = TimeUitls.Now(); if (!packet.IsHeartbeat) { if (packet.IsRpc) { if (RpcDictionarys.TryRemove(packet.RpcId, out Action <Packet> action)) { //执行RPC请求回调 action(packet); } else { OnReceive?.Invoke(packet); } } else { OnReceive?.Invoke(packet); } } } catch (Exception ex) { DisConnect(); #if DEBUG LogRecord.Log(LogLevel.Warn, "OnRecvComplete", ex); #endif return; } } this.StartRecv(); }