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}失败!"); } }
/// <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); } }
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}失败!"); } }
public SeverNet() { handleConnect = new HandleConnect(); instance = this; }