private void AcknowledgeConnect(EndPoint endPoint, IReadStream readStream, PacketHead packetHead)
        {
            if (_connections.ContainsKey(endPoint))
            {
                Logger.Warn($"{endPoint}已经连接,无需重复连接!");
                return;
            }

            var service = PoolAllocator <SocketService> .GetObject();

            service.Connection.RemoteAddress = endPoint;
            service.Connection.LocalAddress  = _readSocket.LocalEndPoint as IPEndPoint;

            if (_connections.TryAdd(endPoint, service))
            {
                CreateAck(service);
                HandleConnect?.Invoke(service, readStream);

                SocketStatistics.LogUnreliableReceive();
                SocketStatistics.LogAcknowledgementReceive();
                SocketStatistics.LogDataBytesReceived(packetHead.TotalBytes);
                SocketStatistics.LogTotalBytesReceived(packetHead.Length);
                Logger.Info($"{endPoint}连接成功!");
            }
            else
            {
                Logger.Error($"添加连接{endPoint}失败!");
            }
        }
示例#2
0
        /// <summary>
        /// 带数据的连接
        /// </summary>
        public void Connect(string ip, int port, IWriteStream writeStream)
        {
            if (writeStream == null)
            {
                throw new ArgumentNullException(nameof(writeStream));
            }

            var endPoint = new IPEndPoint(IPAddress.Parse(ip), port);

            var socketService = new SocketService();

            socketService.Connection.RemoteAddress = endPoint;
            socketService.Connection.LocalAddress  = endPoint;

            if (Write(socketService, writeStream, SendOption.Connect))
            {
                if (!_autoResetEvent.WaitOne(_networkConfig.AckInterval))
                {
                    HandleConnect?.Invoke(socketService, null);
                }
            }
            else
            {
                HandleConnect?.Invoke(socketService, null);
            }
        }
示例#3
0
        private void AcknowledgeConnect(IPEndPoint endPoint, IReadStream readStream,
                                        PacketHead packetHead)
        {
            if (_connections.ContainsKey(endPoint))
            {
                Logger.Warn($"{endPoint}已经连接,无需重复连接!");
                return;
            }

            var service = new SocketService();

            service.Connection.RemoteAddress = endPoint;
            service.Connection.LocalAddress  = _writer.Client.LocalEndPoint as IPEndPoint;

            if (_connections.TryAdd(endPoint, service))
            {
                _autoResetEvent.Set();
                UdpKeepAlive.AddConnection(service,
                                           () => HandleReconnect?.Invoke(service, true),
                                           () => {
                    HandleReconnect?.Invoke(service, false);
                    OnDisconnect(service);
                });

                HandleConnect?.Invoke(service, readStream);

                Logger.Info($"{endPoint}连接成功!");
            }
            else
            {
                Logger.Error($"添加连接{endPoint}失败!");
            }
        }
示例#4
0
 public SeverNet()
 {
     handleConnect = new HandleConnect();
     instance      = this;
 }