public override void handleInput(SocketMessage input)
        {
            if (!LoggedIn)
            {
                switch (input.Header)
                {
                    case "LOG":
                        Boolean worked = UserMysql.login(this, input.Arguments[0], input.Arguments[1]);
                        if (worked)
                        {
                            for (int i = 0; i < ClientContainer.Clients.Count; i++)
                            {
                                if (ClientContainer.Clients[i].User.UID == User.UID)
                                {
                                    if (ClientContainer.Clients[i].ID != this.ID)
                                    {
                                        if (ClientContainer.Clients[i].Connected)
                                        {
                                            ClientContainer.UserEvent(UserEventType.LogOut, ClientContainer.Clients[i]);
                                            ClientContainer.Clients[i].Close("Another user logged in.", false);
                                        }
                                    }
                                }
                            }
                            SocketMessage sm;
                            if (input.Arguments.Count < 3)
                            {
                                sm = new SocketMessage("LOGSUCCESS");
                                sm.Arguments.Add(this.User.Username);
                                writeMessage(sm);
                                ClientContainer.UserEvent(UserEventType.LogIn, this);
                                Thread th = new Thread(new ThreadStart(delegate()
                                {
                                    Thread.Sleep(1000);
                                    sm = new SocketMessage("CHATINFO");
                                    sm.Arguments.Add("YOU DO NOT HAVE THE LATEST LOBBY VERSION. PLEASE VISIT http://www.skylabsonline.com/blog/project/octgn-w-lobby/ TO GET IT!");
                                    this.writeMessage(sm);
                                    sm = new SocketMessage("CHATINFO");
                                    sm.Arguments.Add("User " + this.User.Username + " could not log in because he/she needs an update.");
                                    ClientContainer.AllUserCommand(sm);
                                    Thread.Sleep(1000);
                                    this.Close("Incompatable version.", true);
                                }
                                ));
                                th.Start();
                            }
                            else
                            {
                                if (!input.Arguments[2].Equals(MainClass.getCurRevision().Trim()))
                                {
                                    sm = new SocketMessage("LOGSUCCESS");
                                    sm.Arguments.Add(this.User.Username);
                                    writeMessage(sm);
                                    ClientContainer.UserEvent(UserEventType.LogIn, this);
                                    Thread th = new Thread(new ThreadStart(delegate()
                                        {
                                            Thread.Sleep(1000);
                                            sm = new SocketMessage("CHATINFO");
                                            sm.Arguments.Add("YOU DO NOT HAVE THE LATEST LOBBY VERSION. PLEASE VISIT http://www.skylabsonline.com/blog/project/octgn-w-lobby/ TO GET IT!");
                                            this.writeMessage(sm);
                                            sm = new SocketMessage("CHATINFO");
                                            sm.Arguments.Add("User " + this.User.Username + " could not log in because he/she needs an update.");
                                            ClientContainer.AllUserCommand(sm);
                                            Thread.Sleep(1000);
                                            this.Close("Incompatable version.", true);
                                        }
                                    ));
                                    th.Start();
                                }
                                else
                                {
                                    sm = new SocketMessage("LOGSUCCESS");
                                    sm.Arguments.Add(this.User.Username);
                                    writeMessage(sm);
                                    ClientContainer.UserEvent(UserEventType.LogIn, this);
                                    sm = new SocketMessage("CHATINFO");
                                    sm.Arguments.Add(MainClass.getDailyMessage());
                                    this.writeMessage(sm);
                                    LoggedIn = true;
                                }
                            }
                        }
                        else
                        {
                            SocketMessage sm = new SocketMessage("LOGERROR");
                            writeMessage(sm);
                            LoggedIn = false;
                        }
                        break;
                    case "REG":
                        String nick = input.Arguments[0];
                        String email = input.Arguments[1];
                        String pass = input.Arguments[2];
                        String regret = UserMysql.register(nick, email, pass);
                        writeMessage(new SocketMessage(regret));
                        break;
                    case "RC":
                        this.isRc = true;
                        User = new User(987654321, "rc", "rc");
                        break;
                }
            }
            else if (LoggedIn)
            {
                switch (input.Header)
                {
                    case "GETONLINELIST":

                        StringBuilder sb = new StringBuilder();
                        SocketMessage sm = new SocketMessage("ONLINELIST");
                        List<User> listOnlineUsers = ClientContainer.getOnlineUserList();
                        int intOnlineUsers = listOnlineUsers.Count;
                        for (int i = 0; i < intOnlineUsers; i++)
                        {
                            sb = new StringBuilder();
                            sb.Append(listOnlineUsers[i].Email);
                            sb.Append(':');
                            sb.Append(listOnlineUsers[i].Username);
                            sb.Append(':');
                            sb.Append(listOnlineUsers[i].Status.ToString());
                            sm.Arguments.Add(sb.ToString());
                        }
                        foreach (String user in IrcBot.Users)
                        {
                            sb = new StringBuilder();
                            sb.Append(user + "@irc.irc");
                            sb.Append(':');
                            sb.Append("<irc>" + user);
                            sb.Append(':');
                            sb.Append(UserStatus.Available.ToString());
                            sm.Arguments.Add(sb.ToString());
                        }
                        writeMessage(sm);
                        break;
                    case "LOBCHAT":
                        ClientContainer.LobbyChat(User.Username, input.Arguments[0].Trim());
                        break;
                    case "HOST":
                        String[] ips = input.Arguments[0].Split(new char[1] { '?' });
                        HostedGame h = new HostedGame(User.UID, input.Arguments[3], input.Arguments[1], input.Arguments[0], input.Arguments[2], "");
                        int gID = GameBox.AddGame(h);
                        SocketMessage stemp = input;
                        stemp.Arguments.Add(this.User.Username);
                        stemp.Arguments.Add(gID.ToString());
            #if(DEBUG)
                        stemp.Arguments.Add("localhost");
                        IPAddress[] addresslist = Dns.GetHostAddresses("localhost");
            #else
                        stemp.Arguments.Add(MainClass.getProperty("OusideHost"));
                        IPAddress[] addresslist = Dns.GetHostAddresses(MainClass.getProperty("OusideHost"));
            #endif
                        int port = (gID + 6000);
                        stemp.Arguments.Add(port.ToString());
                        ClientContainer.AllUserCommand(stemp);

                        IrcBot.GeneralChat(this.User.Username + " is hosting a " + h.GameName + " game at " + addresslist[0].ToString() + ":" + port.ToString() + " :" + h.Name);
                        foreach (IPAddress theaddress in addresslist)
                        {
                            Console.WriteLine(theaddress.ToString());
                        }
                        break;
                    case "UNHOST":
                        string ret = GameBox.RemoveByUID(User.UID);
                        String[] rets = ret.Split(new char[1] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (String b in rets)
                        {
                            if (!ret.Equals("-1"))
                            {
                                SocketMessage stemp2 = input;
                                stemp2.Arguments.Add(b);
                                ClientContainer.AllUserCommand(stemp2);
                            }
                        }
                        break;
                    case "STATUS":
                        User.Status = (UserStatus)Enum.Parse(typeof(UserStatus), input.Arguments[0], true);
                        input.Arguments.Add(User.Username);
                        ClientContainer.AllUserCommand(input);
                        break;
                    case "GAMELIST":
                        int mGames = GameBox.Games.Count;
                        for (int i = 0; i < mGames; i++)
                        {
                            HostedGame hg = (HostedGame)GameBox.Games[i];
                            if (hg.Available)
                            {
                                SocketMessage stemp3 = new SocketMessage("GAMELIST");

                                //Game list
                                //GID,IP,Port,GameName,GUID,GameVersion,Username,Name
                                //GID
                                stemp3.Arguments.Add(hg.ID.ToString());
                                //IP
            #if(DEBUG)
                                stemp3.Arguments.Add("localhost");
            #else
                                stemp3.Arguments.Add(MainClass.getProperty("OusideHost"));
            #endif
                                //Port
                                port = (hg.ID + 6000);
                                stemp3.Arguments.Add(port.ToString());
                                //GameName
                                stemp3.Arguments.Add(hg.GameName);
                                //GUID
                                stemp3.Arguments.Add(hg.GUID);
                                //GameVersion
                                stemp3.Arguments.Add(hg.GameVersion);

                                int uid = hg.UID;
                                Client cl = ClientContainer.getClientFromUID(uid);
                                //Username
                                stemp3.Arguments.Add(cl.User.Username);
                                //Name
                                stemp3.Arguments.Add(hg.Name);
                                //Main.writeEvent("Sending GAMELIST: " + stemp3.getMessage());
                                this.writeMessage(stemp3);
                            }
                        }
                        break;
                    default:
                        //TODO add ConsoleEvent to handle unknown input
                        //Main.writeEvent("Input from `" + super.strHost + "' :" + input.getMessage());
                        //Main.writeIn();
                        break;
                }
            }
            if (isRc)
            {
                ConsoleEventLog.addEvent(new ConsoleEvent("#RC: ", input.getMessage()), true);
                switch (input.Header)
                {
                    case "1":
                        SocketMessage sm = new SocketMessage("CHATINFO");
                        sm.Arguments.Add(input.Arguments[0]);
                        ClientContainer.AllUserCommand(sm);
                        break;
                    case "2":
                        MainClass.KillServer();
                        break;
                    case "3":
                        try
                        {
                            int time = int.Parse(input.Arguments[0]);
                            MainClass.TimeKillServer(time, null);
                        }
                        catch (Exception e)
                        {
                        }
                        break;
                    case "4":
                        try
                        {
                            int time = int.Parse(input.Arguments[0]);
                            MainClass.TimeKillServer(time, input.Arguments[1]);
                        }
                        catch (Exception e)
                        {
                        }
                        break;
                }
            }
        }
 protected override void handleInput(object me, SocketMessage input)
 {
     if(!LoggedIn)
     {
         switch(input.Header)
         {
             case "LOG":
                 iLogin(input);
                 break;
             case "REG":
                 String nick = input.Arguments[0];
                 String email = input.Arguments[1];
                 String pass = input.Arguments[2];
                 String regret = UserMysql.register(nick, email, pass);
                 writeMessage(new SocketMessage(regret));
                 break;
             case "RC":
                 this.isRc = true;
                 User = new User(987654321, "rc", "rc");
                 break;
         }
     }
     else if(LoggedIn)
     {
         switch(input.Header)
         {
             case "GETONLINELIST":
                 writeMessage(SocketMessages.OnlineUserList(ClientContainer.getOnlineUserList()));
                 break;
             case "LOBCHAT":
                 ClientContainer.LobbyChat(User.Username, input.Arguments[0].Trim());
                 break;
             case "HOST":
                 //HACK Should serialize game data and send it here.
                 HostedGame h = HostedGame.DeSerialize(Convert.FromBase64String(input.Arguments[0]));
                 h.UID = User.UID;
                 int gID = GameBox.AddGame(h);
                 h.ID = gID;
                 SocketMessage stemp = new SocketMessage("HOST");
                 stemp.Arguments.Add(Convert.ToBase64String(HostedGame.Serialize(h)));
                 ClientContainer.AllUserCommand(stemp);
                 break;
             case "UNHOST":
                 int g = GameBox.GetGame(User);
                 if(g != -1)
                 {
     #if(DEBUG)
                     ConsoleWriter.writeLine("#UNHOST", true);
     #endif
                     SocketMessage stemp2 = new SocketMessage("UNHOST");
                     stemp2.Arguments.Add(Convert.ToBase64String(HostedGame.Serialize(GameBox.Games[g])));
                     ClientContainer.AllUserCommand(stemp2);
                     GameBox.RemoveByUID(User.UID);
                 }
                 break;
             case "STATUS":
                 User.Status = (UserStatus)Enum.Parse(typeof(UserStatus), input.Arguments[0], true);
                 input.Arguments.Add(User.Username);
                 ClientContainer.AllUserCommand(input);
                 break;
             case "GAMELIST":
                 int mGames = GameBox.Games.Count;
                 for(int i = 0; i < mGames; i++)
                 {
                     HostedGame hg = (HostedGame)GameBox.Games[i];
                     if(hg.Available)
                     {
                         SocketMessage stemp3 = new SocketMessage("GAMELIST");
                         stemp3.Arguments.Add(Convert.ToBase64String(HostedGame.Serialize(hg)));
                         this.writeMessage(stemp3);
                     }
                 }
                 break;
             case "JOINGAME":
                 HostedGame hgg = HostedGame.DeSerialize(Convert.FromBase64String(input.Arguments[0]));
                 ConsoleWriter.writeLine("#JOINGAME(" + User.Username + ")", true);
                 int gn = GameBox.GetGame(hgg.ID);
                 if(gn > -1)
                 {
                     Client c = ClientContainer.getClientFromUID(GameBox.Games[gn].UID);
                     if(c.User.UID != -1)
                     {
                         c.writeMessage(input);
                     }
                 }
                 break;
             case "LEAVEGAME":
                 HostedGame hggg = HostedGame.DeSerialize(Convert.FromBase64String(input.Arguments[0]));
                 ConsoleWriter.writeLine("#LEAVEGAME(" + User.Username + ")", true);
                 int gnn = GameBox.GetGame(hggg.ID);
                 if(gnn > -1)
                 {
                     Client c = ClientContainer.getClientFromUID(GameBox.Games[gnn].UID);
                     if(c.User.UID != -1)
                     {
                         c.writeMessage(input);
                     }
                 }
                 break;
             case "USERMESSAGE":
                 User u = User.DeSerialize(Convert.FromBase64String(input.Arguments[0]));
                 String m = input.Arguments[1];
                 Client cl = ClientContainer.getClientFromUID(u.UID);
                 if(cl.User.UID != -1)
                 {
                     input.Arguments[0] = Convert.ToBase64String(User.Serialize(this.User));
                     cl.writeMessage(input);
                     //writeMessage(input);
                 }
                 break;
             case "GAMEFORWARD":
                 //Basically just forward the whole package to the Host, found by the game ID
                 //which resides at Argument 0
                 //Get the int
                 try
                 {
                     int gid = int.Parse(input.Arguments[0]);
                     HostedGame hg = GameBox.Games[GameBox.GetGame(gid)];
                     if(hg.Available)
                     {
                         if(hg.UID != User.UID)
                         {
                             Client tclient = ClientContainer.getClientFromUID(hg.UID);
                             if(tclient != null)
                             {
                                 input.Arguments.Insert(1, Convert.ToBase64String(User.Serialize(User)));
                                 tclient.writeMessage(input);
                             }
     #if DEBUG
                             else
                                 System.Diagnostics.Debugger.Break();
     #endif
                         }
                         else
                         {
                             int cid = int.Parse(input.Arguments[2]);
                             Client tclient = ClientContainer.getClientFromUID(cid);
                             if(tclient != null)
                             {
                                 input.Arguments.RemoveAt(2);
                                 input.Arguments.Insert(1, Convert.ToBase64String(User.Serialize(tclient.User)));
                                 tclient.writeMessage(input);
                             }
                         }
                     }
                 }
                 catch(FormatException fe)
                 {
     #if DEBUG
                     System.Diagnostics.Debugger.Break();
     #endif
                 }
                 break;
             default:
                 //TODO add ConsoleEvent to handle unknown input
                 //Main.writeEvent("Input from `" + super.strHost + "' :" + input.getMessage());
                 //Main.writeIn();
                 break;
         }
     }
     if(isRc)
     {
         ConsoleEventLog.addEvent(new ConsoleEvent("#RC: ", input.getMessage()), true);
         switch(input.Header)
         {
             case "1":
                 SocketMessage sm = new SocketMessage("CHATINFO");
                 sm.Arguments.Add(input.Arguments[0]);
                 ClientContainer.AllUserCommand(sm);
                 break;
             case "2":
                 MainClass.KillServer();
                 break;
             case "3":
                 try
                 {
                     int time = int.Parse(input.Arguments[0]);
                     MainClass.TimeKillServer(time, null);
                 }
                 catch(Exception e)
                 {
                 }
                 break;
             case "4":
                 try
                 {
                     int time = int.Parse(input.Arguments[0]);
                     MainClass.TimeKillServer(time, input.Arguments[1]);
                 }
                 catch(Exception e)
                 {
                 }
                 break;
         }
     }
 }