static void Main(string[] args)
        {
            if (!File.Exists("config.json"))
                MakeConfig();
            else
                config = Config.Load();

            Client client = new Client();
            try
            {
                client.PacketReceived += Client_PacketReceived;
                client.ClientDisconnected += Client_ClientDisconnected;
                Console.WriteLine("Connecting...");
                client.Connect(config.ServerIp, config.Port);
                Console.Clear();
                client.Send(new Packet((short)PacketType.Authenticate, (byte)0, Version.Major, Version.Minor, config.Username, config.Password));
            }
            catch
            {
                Console.WriteLine("Error connecting. Attempting to reconnect in 5 seconds...");
                resetEvent.Set();
            }

            if (client.Connected)
            {
                new Thread(() =>
                {
                    for (;;)
                    {
                        string input = Console.ReadLine();
                        if (!client.tcpClient.Connected)
                            break;
                        client.Send(new Packet((short)PacketType.Input, input));
                    }
                }).Start();
            }

            resetEvent.WaitOne();
            Thread.Sleep(5000);
            Console.Clear();
            Main(args);
            return;
        }