/// <summary> /// 开始接收数据包 /// </summary> public void StartRecv() { int recvCount = 0; try { if (this.Acceptor.Available == 0) { return; } recvCount = this.Acceptor.ReceiveFrom(ReuseRecvBytes, SocketFlags.None, ref this.ReuseEndPoint); } catch (Exception e) { Log.Warn(e, LoggerBllType.Network); return; } if (recvCount == PacketParser.HeadSize) { //握手处理 ConnectParser.WriteBuffer(ReuseRecvBytes, 0, recvCount); var packet = this.ConnectParser.Packet; if (!ConnectParser.TryRead()) { Log.Error($"丢弃非法数据包:{this.Acceptor.RemoteEndPoint}.", LoggerBllType.Network); ConnectParser.Flush(); return; } if (packet.KcpProtocal == KcpNetProtocal.SYN) { HandleSYN(this.Acceptor, this.ReuseEndPoint as IPEndPoint); } else if (packet.KcpProtocal == KcpNetProtocal.ACK) { HandleACK(packet, this.Acceptor, this.ReuseEndPoint as IPEndPoint); } else if (packet.KcpProtocal == KcpNetProtocal.FIN) { HandleFIN(packet, this.ReuseEndPoint as IPEndPoint); } this.ConnectParser.Flush(); } else { uint connectConv = BitConverter.ToUInt32(ReuseRecvBytes, 0); if (!this.Channels.TryGetValue(connectConv, out ANetChannel channel)) { return; } var kChannel = channel as KcpChannel; kChannel.Input(ReuseRecvBytes, recvCount); channel.StartRecv(); } this.StartRecv(); }
public IMonitoredRemoteOperator Create(string address) { var instructionSenderHolder = new InstructionSenderHolder(_recorder); var remoteApiOperator = new RemoteApiOperator( instructionSenderHolder, _instructionSenderFactory, _applicationRecorder, _recorder); var connectParser = new ConnectParser(remoteApiOperator, _recorder); var autoLocalConnector = new AutoLocalConnector(connectParser, _recorder, address); var monitoredRemoteOperator = new MonitoredRemoteOperator(autoLocalConnector, _remoteTraceMonitor, _recorder); return(monitoredRemoteOperator); }