/// <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); }
/// <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'); } }