protected void initialConnectionCallback(NetworkState state)
        {
            SFMLPacket packet = new SFMLPacket(state.Buffer);
            state.Buffer = new byte[state.Buffer.Length];
            state.ConnectionState = NetworkState.ConnectionStates.CONNECTED;

            Thread.Sleep(500); // Wait 0.5 seconds to prevent brute-force log-in attempts

            if (packet.packetCode == 101 || packet.packetCode == 102)
            {
                if (packet.packetCode == 101) //Register request
                {
                    Console.WriteLine("Register Request");
                    String username = packet.ExtractString();
                    String realName = packet.ExtractString();
                    String email = packet.ExtractString();
                    String password = packet.ExtractString();
                    if (!registerRequest(username, password, email, realName))
                    {
                        Console.WriteLine("Unable to register new client");
                        Network.Send(state.Socket, "\u0000");
                        Thread.Sleep(5000); // Wait 5 seconds for the send to complete
                        state.Socket.Shutdown(System.Net.Sockets.SocketShutdown.Both);
                        state.Socket.Close();
                        return;
                    }
                }
                else if (packet.packetCode == 102) //Login request
                {
                    Console.WriteLine("Login Request");
                    String username = packet.ExtractString();
                    String password = packet.ExtractString();
                    if (!loginRequest(username, password))
                    {
                        Console.WriteLine("Invalid Login Attempt");
                        Network.Send(state.Socket, "\u0000");
                        Thread.Sleep(5000); // Wait 5 seconds for the send to complete
                        state.Socket.Shutdown(System.Net.Sockets.SocketShutdown.Both);
                        state.Socket.Close();
                        return;
                    }
                }
                Network.Send(state.Socket, "\u0001"); //Send success
                state.CallBack = DataReceivedCallback;
                Network.RequestMoreData(state);
            }
            else
            {
                Console.WriteLine("Illegal request from non logged in client");
                Network.Send(state.Socket, "\u0000");
                Thread.Sleep(5000); // Wait 5 seconds for the send to complete
                state.Socket.Shutdown(System.Net.Sockets.SocketShutdown.Both);
                state.Socket.Close();
            }
        }
        protected void DataReceivedCallback(NetworkState state)
        {
            SFMLPacket incomingPacket = new SFMLPacket(state.Buffer);
            state.Buffer = new byte[state.Buffer.Length];
            state.ConnectionState = NetworkState.ConnectionStates.CONNECTED;

            foreach (String data in incomingPacket)
            {
                Console.WriteLine(data);
            }
        }
 protected void ClientConnectedCallback(NetworkState state)
 {
     state.CallBack = initialConnectionCallback;
     Network.RequestMoreData(state);
 }