private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                NetUtil.StateObject state = (NetUtil.StateObject)ar.AsyncState;

                int bytesRead = clientSocket.EndReceive(ar);

                if (bytesRead > 0)
                {
                    state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));
                    var content = state.sb.ToString();

                    Console.WriteLine($"Received Data: \"{content}\"");

                    List <NetUtil.Packet> packets = NetUtil.ParsePackets(content);

                    foreach (NetUtil.Packet packet in packets)
                    {
                        TreatMessage(packet.Type, packet.Data);
                    }
                }

                state.sb.Clear();
                clientSocket.BeginReceive(state.buffer, 0, NetUtil.StateObject.BufferSize, 0,
                                          new AsyncCallback(ReceiveCallback), state);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Disconnect(e, true);
            }
        }
        public void Receive()
        {
            try
            {
                NetUtil.StateObject state = new NetUtil.StateObject();

                clientSocket.BeginReceive(state.buffer, 0, NetUtil.StateObject.BufferSize, 0,
                                          new AsyncCallback(ReceiveCallback), state);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Disconnect(e, true);
            }
        }