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; } } }