public void Connect(IPEndPoint address) { resendThread = new Thread(ResendLoop) { Name = "PacketHandler" }; resendThreadId = resendThread.ManagedThreadId; lock (sendLoopLock) { ClientId = 0; ExitReason = null; smoothedRtt = MaxRetryInterval; smoothedRttVar = TimeSpan.Zero; currentRto = MaxRetryInterval; lastSentPingId = 0; lastReceivedPingId = 0; initPacketCheck = null; packetAckManager.Clear(); receiveQueue.Clear(); receiveQueueLow.Clear(); Array.Clear(packetCounter, 0, packetCounter.Length); Array.Clear(generationCounter, 0, generationCounter.Length); NetworkStats.Reset(); ConnectUdpClient(address); } resendThread.Start(); AddOutgoingPacket(ts3Crypt.ProcessInit1(null).Value, PacketType.Init1); }
public void Connect(string host, ushort port) { resendThread = new Thread(ResendLoop) { Name = "PacketHandler" }; resendThreadId = resendThread.ManagedThreadId; lock (sendLoopLock) { ClientId = 0; ExitReason = null; ConnectUdpClient(host, port); packetAckManager.Clear(); receiveQueue.Clear(); receiveQueueLow.Clear(); Array.Clear(packetCounter, 0, packetCounter.Length); Array.Clear(generationCounter, 0, generationCounter.Length); } resendThread.Start(); AddOutgoingPacket(ts3Crypt.ProcessInit1(null), PacketType.Init1); }
private void NetworkLoop() { while (true) { lock (statusLock) { if (wasExit) { break; } } if (wasExit) { break; } IncomingPacket packet = packetHandler.FetchPacket(); if (packet == null) { break; } switch (packet.PacketType) { case PacketType.Command: case PacketType.CommandLow: string message = Util.Encoder.GetString(packet.Data, 0, packet.Data.Length); var result = msgProc.PushMessage(message); if (result.HasValue) { dispatcher.Invoke(result.Value); } break; case PacketType.Voice: case PacketType.VoiceWhisper: // VOICE break; case PacketType.Init1: var forwardData = ts3Crypt.ProcessInit1(packet.Data); if (forwardData == null) { break; } packetHandler.AddOutgoingPacket(forwardData, PacketType.Init1); break; } } lock (statusLock) { status = Ts3ClientStatus.Disconnected; DisconnectInternal(); } }
public void Connect(IPEndPoint address) { Initialize(address, true); // The old client used to send 'clientinitiv' as the first message. // All newer server still ack it but do not require it anymore. // Therefore there is no use in seding it. // We still have to increase the packet counter as if we had sent // it because the packed-ids the server expects are fixed. IncPacketCounter(PacketType.Command); // Send the actual new init packet. AddOutgoingPacket(ts3Crypt.ProcessInit1 <TIn>(null).Value, PacketType.Init1); }