private bool Update()
        {
            handler.OnUpdate();
            bool connection_ok = true;

            while (c.Client.Available > 0 && connection_ok)
            {
                byte id = readNextByte();
                connection_ok = processPacket(id);
            }
            return(connection_ok);
        }
Пример #2
0
        /// <summary>
        /// Read data from the network. Should be called on a separate thread.
        /// </summary>
        /// <returns></returns>

        private bool Update()
        {
            handler.OnUpdate();
            if (c.Client == null || !c.Connected)
            {
                return(false);
            }
            try
            {
                while (c.Client.Available > 0)
                {
                    int    packetID   = 0;
                    byte[] packetData = new byte[] { };
                    readNextPacket(ref packetID, ref packetData);
                    handlePacket(packetID, packetData);
                }
            }
            catch (SocketException) { return(false); }
            return(true);
        }
Пример #3
0
 /// <summary>
 /// Read data from the network. Should be called on a separate thread.
 /// </summary>
 /// <returns>FALSE if an error occured, TRUE otherwise.</returns>
 private bool Update()
 {
     handler.OnUpdate();
     if (!socketWrapper.IsConnected())
     {
         return(false);
     }
     try
     {
         while (socketWrapper.HasDataAvailable())
         {
             int         packetID   = 0;
             List <byte> packetData = new List <byte>();
             ReadNextPacket(ref packetID, packetData);
             HandlePacket(packetID, new List <byte>(packetData));
         }
     }
     catch (SocketException) { return(false); }
     catch (NullReferenceException) { return(false); }
     return(true);
 }
Пример #4
0
        /// <summary>
        /// Read and data from the network. Should be called on a separate thread.
        /// </summary>
        /// <returns></returns>

        private bool Update()
        {
            handler.OnUpdate();
            if (c.Client == null || !c.Connected)
            {
                return(false);
            }
            int id = 0, size = 0;

            try
            {
                while (c.Client.Available > 0)
                {
                    size = readNextVarInt(); //Packet size
                    id   = readNextVarInt(); //Packet ID

                    switch (id)
                    {
                    case 0x00:
                        byte[] keepalive = new byte[4] {
                            0, 0, 0, 0
                        };
                        Receive(keepalive, 0, 4, SocketFlags.None);
                        byte[] keepalive_packet = concatBytes(getVarInt(0x00), keepalive);
                        byte[] keepalive_tosend = concatBytes(getVarInt(keepalive_packet.Length), keepalive_packet);
                        Send(keepalive_tosend);
                        break;

                    case 0x02:
                        handler.OnTextReceived(ChatParser.ParseText(readNextString()));
                        break;

                    case 0x38:
                        string name     = readNextString();
                        bool   online   = readNextBool();
                        short  ping     = readNextShort();
                        Guid   FakeUUID = new Guid(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(name)).Take(16).ToArray());
                        if (online)
                        {
                            handler.OnPlayerJoin(FakeUUID, name);
                        }
                        else
                        {
                            handler.OnPlayerLeave(FakeUUID);
                        }
                        break;

                    case 0x3A:
                        int    autocomplete_count = readNextVarInt();
                        string tab_list           = "";
                        for (int i = 0; i < autocomplete_count; i++)
                        {
                            autocomplete_result = readNextString();
                            if (autocomplete_result != "")
                            {
                                tab_list = tab_list + autocomplete_result + " ";
                            }
                        }
                        autocomplete_received = true;
                        tab_list = tab_list.Trim();
                        if (tab_list.Length > 0)
                        {
                            ConsoleIO.WriteLineFormatted("§8" + tab_list, false);
                        }
                        break;

                    case 0x40:
                        handler.OnConnectionLost(ChatBot.DisconnectReason.InGameKick, ChatParser.ParseText(readNextString()));
                        return(false);

                    default:
                        readData(size - getVarInt(id).Length);     //Skip packet
                        break;
                    }
                }
            }
            catch (SocketException) { return(false); }
            return(true);
        }