Example #1
0
        /// <summary>
        /// Creates a packet for sending data to the chat server. I've already made a good API for this but if you insist on doing it the hard way i can't stop you.
        /// </summary>
        /// <param name="packetType">The type of packet, duh</param>
        /// <param name="pars">No documentation for this one, sorry</param>
        public Packet(PacketTypes packetType, params string[] pars)
        {
            this.Valid = true;
            for (int i = 0; i < pars.Length; i++)
            {
                if (pars[i].Contains("\0"))
                {
                    this.Valid = false;
                    this.Error = PacketErrors.ContainsNull;
                    return;
                }
            }

            string joinedText = string.Join("\0", pars);

            byte[] encodedText = Encoding.UTF8.GetBytes(joinedText);

            if (encodedText.Length >= 1000)
            {
                this.Valid = false;
                this.Error = PacketErrors.TooLong;
                return;
            }

            this.data = new byte[encodedText.Length + 1];
            this.data[0] = (byte)packetType;

            Array.Copy(encodedText, 0, this.data, 1, encodedText.Length);
        }
Example #2
0
        /// <summary>
        /// Magically turns the data sent from the chat server into a packet type and parameters
        /// </summary>
        /// <param name="data">The data sent from the server</param>
        /// <param name="dataLength">The effective length of the data sent. Very important, so don't screw it up</param>
        public Packet(byte[] data, int dataLength)
        {
            this.Valid = true;
            if (dataLength == 0)
            {
                Valid = false;
                Error = PacketErrors.NoData;
                return;
            }

            try
            {
                this.packetType = (PacketTypes)data[0];
            }
            catch
            {
                Valid = false;
                Error = PacketErrors.InvalidPacketType;
                return;
            }

            if (dataLength > 1)
            {
                byte[] encodedText = new byte[dataLength - 1];
                Array.Copy(data, 1, encodedText, 0, dataLength - 1);
                this.pars = Encoding.UTF8.GetString(encodedText, 0, encodedText.Length).Split('\0');
            }
        }