Exemple #1
0
        /// <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();
        }
Exemple #2
0
        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);
        }