/// <summary> /// Handle Received Data /// </summary> /// protected override void HandleData(CString Packet) { int prevPacket = 0; uint readc = 0; while (Packet.BytesLeft > 0) { CString CurPacket; // Grab Single Packet if (prevPacket == 100) CurPacket = Packet.ReadChars2(readc); else CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Run Internal Packet Function switch ((PacketIn)PacketId) { // Packet 6 - Set Active Level & Clear case PacketIn.LEVELNAME: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); //ActiveLevel.Clear(); break; // Paceket 1 - Level Links case PacketIn.LEVELLINK: break; // Packet 3 - Level NPC Props case PacketIn.NPCPROPS: { int npcId = CurPacket.ReadGByte3(); //if (ActiveLevel != null) // ActiveLevel.GetNPC(npcId).SetProps(CurPacket); break; } // Packet 5 - Level Signs case PacketIn.LEVELSIGN: break; // Packet 39 - Level Mod Time case PacketIn.LEVELMODTIME: uint modTime = CurPacket.ReadGUByte5(); //if (ActiveLevel != null) // ActiveLevel.SetModTime(modTime); break; case PacketIn.SIGNATURE: { this.ReceivedSignature(); break; } case PacketIn.BOARDPACKET: { break; } case PacketIn.RAWDATA: readc = CurPacket.ReadGUByte3(); //Console.WriteLine(":::readc::::" + readc.ToString() + "::::"); break; // Packet 150 - Delete Level NPC case PacketIn.NPCDEL2: string _levelName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); int _npcId = CurPacket.ReadGByte3(); this.DeleteLevelNpc(_levelName, _npcId); break; // Packet 156 - Set Active Level case PacketIn.SETACTIVELEVEL: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); break; case PacketIn.ADDPLAYER: { short playerId = CurPacket.ReadGByte2(); string playerAccount = CurPacket.ReadChars(CurPacket.ReadGUByte1()); Dictionary<int,dynamic> props = GraalPlayer.ParseProps(CurPacket); this.AddPlayer(playerId, playerAccount, props); break; } case PacketIn.DELPLAYER: { short pId = CurPacket.ReadGByte2(); //Server.PlayerManager.DeletePlayer(pId); break; } // Add Player & Set Props case PacketIn.OTHERPLPROPS: { /* GraalPlayer Player = (GraalPlayer)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { Player.SetProps(CurPacket); } */ break; } case PacketIn.FLAGSET: { //GraalPlayer Player = (GraalPlayer)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); String FlagName = CurPacket.ReadString('=').Text; String FlagValue = CurPacket.ReadString().Text; /* if (Player != null) Player.Flags[FlagName] = FlagValue; */ break; } case PacketIn.PLAYERPROPS: { /* if (this.form.NCPlayer == null) this.form.NCPlayer = Server.PlayerManager.AddPlayer(0); //this.form.WriteText(" -!- ME!\r\n"); this.form.NCPlayer.SetProps(CurPacket); */ break; } // Add weapon to list case PacketIn.NPCWEAPONADD: { String WeaponName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponImage = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponScript = CurPacket.ReadString().Text; //Server.SetWeapon(WeaponName, WeaponImage, WeaponScript, false); break; } // Add/Remove weapon from Player case PacketIn.NPCWEAPONDEL: { /* GraalPlayer Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { bool addWeapon = (CurPacket.ReadGByte1() > 0); String name = CurPacket.ReadString().Text; if (addWeapon) Player.AddWeapon(name); else Player.DeleteWeapon(name, false); } */ break; } case PacketIn.UNKNOWN60: { /* GraalPlayer Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { while (CurPacket.BytesLeft > 0) Player.AddWeapon(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } */ break; } case PacketIn.NEWWORLDTIME: // Remove Class from List //Server.NWTime = CurPacket.ReadGByte4(); break; // Private Message case PacketIn.PRIVATEMESSAGE: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); this.ReceivedPM(PlayerId, Message); break; } case PacketIn.TOALL: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); //this.form.WriteText(Message.Text); this.ReceivedToall(PlayerId, Message); break; } case PacketIn.RC_SERVEROPTIONSGET: string serverOptions = CurPacket.ReadString().Untokenize().ToString(); this.ReceivedServerOptions(serverOptions); break; case PacketIn.RC_SERVERFLAGSGET: int serverFlagsTotal = CurPacket.ReadGByte2(); List<string> serverFlags = new List<string>(); string serverFlagsString = ""; while (CurPacket.BytesLeft > 0) { serverFlags.Add(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } serverFlags.Sort(); foreach (string sf in serverFlags) serverFlagsString += sf + "\n"; this.ReceivedServerFlags(serverFlagsTotal, serverFlagsString); break; case PacketIn.RC_FOLDERCONFIGGET: string folderConfig = CurPacket.ReadString().Untokenize().ToString(); this.ReceivedFolderConfig(folderConfig); break; case PacketIn.RC_FILEBROWSER_DIR: //CString s2 = CurPacket.Untokenize(); this.WriteText(CurPacket.Text); break; // Servertext case PacketIn.SERVERTEXT: { CString Message = CurPacket.ReadString(); string TheMessage2 = ""; TheMessage2 = CString.untokenize(Message.Text); string[] test = TheMessage2.Split('\n'); List<string> test2 = new List<string>(test); this.ReceivedServertext(test2); break; } case PacketIn.SHOWIMG: { break; } case PacketIn.DISCMESSAGE: { //Console.WriteLine("PacketId: " + PacketId.ToString()); string _disconnectMessage = CurPacket.ReadString().Text;//Enum.GetName(typeof(PacketIn), PacketId).ToString(); this.Disconnected(_disconnectMessage); break; } case PacketIn.RC_CHAT: this.ReceivedRCChat(CurPacket.ReadString().Text); break; default: { Console.WriteLine("PacketId: " + PacketId.ToString()); try { string packetName = Enum.GetName(typeof(PacketIn), PacketId).ToString(); //this.form.WriteText("[" + packetName + "]: " + CurPacket.ReadString().Text + ""); } catch (IndexOutOfRangeException e) { } catch (NullReferenceException e) { } break; } } prevPacket = PacketId; } }
/// <summary> /// Handle Received Data /// </summary> /// protected override void HandleData(CString Packet) { if (this.serverWindow == null) this.serverWindow = ServerWindow.GetInstance(); int prevPacket = 0; uint readc = 0; //System.Console.WriteLine("Test: " + Packet.Text); while (Packet.BytesLeft > 0) { CString CurPacket; // Grab Single Packet if (prevPacket == 100) CurPacket = Packet.ReadChars2(readc); else CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Call Packet Callback //RemoteControl.CallCallBack(PacketId, (CString)CurPacket.DeepClone()); // Run Internal Packet Function switch ((PacketIn)PacketId) { case PacketIn.LEVELCHEST: { CString Message = CurPacket.ReadString(); this.serverWindow.ErrorMsg = Message.Text.ToString(); //this.errorWindow.error_label.Text = Message.Text.ToString(); break; } case PacketIn.LEVELBOARD: int serverCount = CurPacket.ReadGUByte1(); this.serverWindow.Write_Text("Number of servers: " + serverCount.ToString()); this.serverList.Clear(); this.listStore.Clear(); for (int i = 0; i < serverCount; i++) { // empty byte CurPacket.ReadGUByte1(); // add server TServer server = this.serverList.AddTServer((short)i); // parse server server.setName(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setLanguage(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setDescription(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setUrl(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setVersion(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setPCount(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setIp(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); int port; int.TryParse(CurPacket.ReadChars(CurPacket.ReadGUByte1()), out port); server.setPort(port); Gdk.Pixbuf icon; if (server.getType() == "1") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_nuclear.png"); else if (server.getType() == "2") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_gold.png"); else if (server.getType() == "3") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_silver.png"); else if (server.getType() == "4") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_bronze.png"); else if (server.getType() == "5") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_uc.png"); else icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_uc.png"); ServerWindow sw = ServerWindow.GetInstance(); this.listStore.AppendValues(icon, server.name, server.getPCount()); } break; default: this.serverWindow.Write_Text("[" + Enum.GetName(typeof(PacketIn), PacketId).ToString() + "]: " + CurPacket.ReadString().Text + "\r\n"); break; } prevPacket = PacketId; } //if (this.serverWindow.ErrorMsg != "error") // this.serverWindow.Hide(); }
/// <summary> /// Handle Received Data /// </summary> /// protected override void HandleData(CString Packet) { // Check if the instance of Framework is null and get the instance if it is. if (Server == null) Server = Framework.GetInstance(); if (this.form == null) this.form = Abstraction.GetInstance(); int prevPacket = 0; uint readc = 0; while (Packet.BytesLeft > 0) { CString CurPacket; // Grab Single Packet if (prevPacket == 100) CurPacket = Packet.ReadChars2(readc); else CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Run Internal Packet Function switch ((PacketIn)PacketId) { // Packet 6 - Set Active Level & Clear case PacketIn.LEVELNAME: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); //ActiveLevel.Clear(); break; // Paceket 1 - Level Links case PacketIn.LEVELLINK: break; // Packet 3 - Level NPC Props case PacketIn.NPCPROPS: { int npcId = CurPacket.ReadGByte3(); //if (ActiveLevel != null) // ActiveLevel.GetNPC(npcId).SetProps(CurPacket); break; } // Packet 5 - Level Signs case PacketIn.LEVELSIGN: break; // Packet 39 - Level Mod Time case PacketIn.LEVELMODTIME: uint modTime = CurPacket.ReadGUByte5(); //if (ActiveLevel != null) // ActiveLevel.SetModTime(modTime); break; case PacketIn.SIGNATURE: { this.form.WriteText("Connected!"); Server.SendGSPacket(new CString() + (byte)PacketOut.PLAYERPROPS + (byte)PLPROPS.NICKNAME + (byte)this.Nickname.Length + this.Nickname); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,pmguilds,\"\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,pmservers,\"all\""); //Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,pmserverplayers,\"U Classic iPhone\"\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.SENDTEXT + "GraalEngine,lister,options,globalpms=true,buddytracking=true,showbuddies=true"); Server.SendGSPacket(new CString() + (byte)PacketOut.SENDTEXT + "GraalEngine,lister,verifybuddies,1,1964252486"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"unixmad\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"stefan\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"tig\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"skyld\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"xor\""); //Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-ShopGlobal,lister,getglobalitems\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,list,all"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,upgradeinfo\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,subscriptions\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,getlockcomputer"); // Logging into IRC. Server.SendGSPacket(new CString() + (byte)154 + "-Serverlist_Chat,irc,login,-"); Server.SendGSPacket(new CString() + (byte)154 + "-Serverlist_Chat,irc,privmsg,IRCBot,!geteventbots"); Server.SendGSPacket(new CString() + (byte)154 + "-Serverlist_Chat,irc,join,#graalim"); break; } case PacketIn.BOARDPACKET: { break; } case PacketIn.RAWDATA: readc = CurPacket.ReadGUByte3(); Console.WriteLine(":::readc::::" + readc.ToString() + "::::"); break; // Packet 150 - Delete Level NPC case PacketIn.NPCDEL2: //Server.FindLevel(CurPacket.ReadChars(CurPacket.ReadGUByte1())).DeleteNPC(CurPacket.ReadGByte3()); break; // Packet 156 - Set Active Level case PacketIn.SETACTIVELEVEL: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); break; case PacketIn.ADDPLAYER: { Player Player = (Player)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { Player.Account = CurPacket.ReadChars(CurPacket.ReadGUByte1()); Player.SetProps(CurPacket); } break; } case PacketIn.DELPLAYER: { short pId = CurPacket.ReadGByte2(); Server.PlayerManager.DeletePlayer(pId); break; } // Add Player & Set Props case PacketIn.OTHERPLPROPS: { Player Player = (Player)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { Player.SetProps(CurPacket); } break; } case PacketIn.FLAGSET: { Player Player = (Player)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); String FlagName = CurPacket.ReadString('=').Text; String FlagValue = CurPacket.ReadString().Text; if (Player != null) Player.Flags[FlagName] = FlagValue; break; } case PacketIn.PLAYERPROPS: { if (this.form.NCPlayer == null) this.form.NCPlayer = Server.PlayerManager.AddPlayer(0); //this.form.WriteText(" -!- ME!\r\n"); this.form.NCPlayer.SetProps(CurPacket); break; } // Add weapon to list case PacketIn.NPCWEAPONADD: { String WeaponName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponImage = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponScript = CurPacket.ReadString().Text; //Server.SetWeapon(WeaponName, WeaponImage, WeaponScript, false); break; } // Add/Remove weapon from Player case PacketIn.NPCWEAPONDEL: { Player Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { bool addWeapon = (CurPacket.ReadGByte1() > 0); String name = CurPacket.ReadString().Text; if (addWeapon) Player.AddWeapon(name); else Player.DeleteWeapon(name, false); } break; } case PacketIn.UNKNOWN60: { Player Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { while (CurPacket.BytesLeft > 0) Player.AddWeapon(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } break; } case PacketIn.NEWWORLDTIME: // Remove Class from List Server.NWTime = CurPacket.ReadGByte4(); break; // Private Message case PacketIn.PRIVATEMESSAGE: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); this.ReceivePM(PlayerId, Message); break; } case PacketIn.TOALL: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); //this.form.WriteText(Message.Text); this.ReceiveToall(PlayerId, Message); break; } case PacketIn.RC_SERVEROPTIONSGET: string serverOptions = CurPacket.ReadString().Untokenize().ToString(); this.form.WriteText(serverOptions); break; case PacketIn.RC_SERVERFLAGSGET: int serverFlagsTotal = CurPacket.ReadGByte2(); List<string> serverFlags = new List<string>(); string serverFlagsString = ""; while (CurPacket.BytesLeft > 0) { serverFlags.Add(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } serverFlags.Sort(); foreach (string sf in serverFlags) serverFlagsString += sf + "\n"; this.ReceivedServerFlags(serverFlagsTotal, serverFlagsString); break; case PacketIn.RC_FOLDERCONFIGGET: //CString s2 = CurPacket.Untokenize(); string folderConfig = CurPacket.ReadString().Untokenize().ToString(); this.ReceivedFolderConfig(folderConfig); break; case PacketIn.RC_FILEBROWSER_DIR: //CString s2 = CurPacket.Untokenize(); this.form.WriteText(CurPacket.ReadString().ToString()); break; case PacketIn.RC_FILEBROWSER_DIRLIST: List<string> fileBrowserDirList = new List<string>(CurPacket.ReadString().Untokenize().ToString().Split('\n')); fileBrowserDirList.Sort(); foreach (string dir in fileBrowserDirList) this.form.WriteText(dir); break; case PacketIn.RC_FILEBROWSER_MESSAGE: this.form.WriteText(CurPacket.ReadString().ToString()); break; // Servertext case PacketIn.SERVERTEXT: { CString Message = CurPacket.ReadString(); this.form = Abstraction.GetInstance(); string TheMessage2 = ""; TheMessage2 = CString.untokenize(Message.Text); string[] test = TheMessage2.Split('\n'); List<string> test2 = new List<string>(test); if (test2[0].Trim() == "GraalEngine" || test2[0].Trim() == "-Playerlist") { if (test2[1].Trim() == "lister") { } } else if (test2[0].Trim() == "-Serverlist_Chat") { if (test2[1].Trim() == "irc") { switch (test2[2].Trim()) { case "join": { this.form.OpenIRC(test2[3].Trim()); break; } case "addchanneluser"://[SERVERTEXT]: -Serverlist_Chat irc addchanneluser #graal CrypticMyst login1 Gos_Pira { this.form.IRC_AddChannelUser(test2[3].Trim(), test2[4].Trim()); break; } case "deletechanneluser"://[SERVERTEXT]: -Serverlist_Chat irc delchanneluser #graal CrypticMyst { this.form.IRC_AddChannelUser(test2[3].Trim(), test2[4].Trim(), true); break; } case "privmsg": { string message = test2[5].Trim(); if (test2[4].Trim().StartsWith("#")) this.form.IRC_Privmsg(test2[3].Trim(), test2[4].Trim(), message); else { this.ReceivePM(test2[3].Trim(), new CString(message)); } break; } default: { break; } } } } else if (test2[0].Trim() == "-Serverlist") { if (test2[1].Trim() == "lister") { #region SimpleServerList if (test2[2].Trim() == "subscriptions2") { string subscription = "Trial"; //this.form.WriteText(test2.Count.ToString()); if (test2.Count > 3) { //this.form.WriteText(test2.Count.ToString()); string server2 = CString.untokenize(test2[3].Trim()); string[] test3 = server2.Split('\n'); subscription = test3[1].Trim(); } this.form.SetSubscriptionText("Subscription: " + subscription); } else if (test2[2].Trim() == "lockcomputer") { int locked = 0; int.TryParse(test2[3].Trim(), out locked); this.form.SetLockedByComputerText("Locked by PC-ID: " + ((locked == 1) ? "Yes" : "No")); } else if (test2[2].Trim() == "simpleserverlist" || test2[2].Trim() == "serverlist") { List<string> servers = test2; servers.RemoveRange(0, 3); this.form.WriteText("SERVERS(" + servers.Count + "):"); this.form.WriteText("------------"); //this.form.WriteText("[SERVERTEXT]: " + TheMessage2 + ""); foreach (string server in servers) { //CString server2 = new CString(); //server2.Write(server); if (server != "") { string server2 = CString.untokenize(server); string[] test3 = server2.Split('\n'); //this.form.Write_Text(server2 + "\r\n"); var servername = ""; var servertype = ""; if (test3[1].Trim().Substring(0, 2) == "P " || test3[1].Trim().Substring(0, 2) == "H " || test3[1].Trim().Substring(0, 2) == "3 " || test3[1].Trim().Substring(0, 2) == "U ") { servertype = test3[1].Trim().Substring(0, 2); servername = test3[1].Trim().Substring(2, test3[1].Trim().Length - 2); if (servertype == "P ") servertype = "Gold"; if (servertype == "H ") servertype = "Hosted"; if (servertype == "3 ") servertype = "3D"; if (servertype == "U ") servertype = "Hidden"; } else { servertype = "Classic"; servername = test3[1].Trim(); } var serverid = test3[0].Trim(); var serverpc = test3[2].Trim(); this.form.WriteText(" * Id: " + serverid + " Type: " + servertype + " Name: " + servername + " Players: " + serverpc + ""); } } this.form.WriteText(""); } else this.form.WriteText("[SERVERTEXT]: " + TheMessage2.Replace("\r\n", ",") + ""); #endregion } } else { }// this.form.WriteText("[SERVERTEXT]: " + TheMessage2.Replace("\r\n", ",") + ""); break; } case PacketIn.SHOWIMG: { break; } case PacketIn.DISCMESSAGE: { //Console.WriteLine("PacketId: " + PacketId.ToString()); string packetName = "";//Enum.GetName(typeof(PacketIn), PacketId).ToString(); this.form.WriteText("Disconnect: " + CurPacket.ReadString().Text + "\r\n"); break; } case PacketIn.RC_CHAT: this.form.WriteText(CurPacket.ReadString().Text + ""); break; default: { Console.WriteLine("PacketId: " + PacketId.ToString()); try { string packetName = Enum.GetName(typeof(PacketIn), PacketId).ToString(); this.form.WriteText("[" + packetName + "]: " + CurPacket.ReadString().Text + ""); } catch (IndexOutOfRangeException e) { } catch (NullReferenceException e) { } break; } } prevPacket = PacketId; } }