Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
 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);
 }