public static void RemovePlayer(Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> input = Blaze.ReadPacketContent(p); Blaze.TdfInteger CNTX = (Blaze.TdfInteger)input[1]; Blaze.TdfInteger PID = (Blaze.TdfInteger)input[3]; Blaze.TdfInteger REAS = (Blaze.TdfInteger)input[4]; pi.game.removePlayer((int)PID.Value); GC.Collect(); byte[] buff = Blaze.CreatePacket(p.Component, p.Command, 0, 0x1000, p.ID, new List <Blaze.Tdf>()); ns.Write(buff, 0, buff.Length); ns.Flush(); foreach (PlayerInfo player in BlazeServer.allClients) { if (player != null && player.userId == PID.Value) { player.cntx = CNTX.Value; } } foreach (PlayerInfo player in pi.game.players) { if (player != null && player.userId != PID.Value) { try { AsyncGameManager.NotifyPlayerRemoved(player, p, player, player.ns, PID.Value, CNTX.Value, REAS.Value); } catch { Logger.Error("[CLNT] #" + pi.userId + " : 'RemovePlayer' peer crashed!"); } } } }
public static void RemovePlayer(Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> input = Blaze.ReadPacketContent(p); Blaze.TdfInteger PID = (Blaze.TdfInteger)input[3]; pi.game.removePlayer((int)PID.Value); pi.game = null; GC.Collect(); byte[] buff = Blaze.CreatePacket(p.Component, p.Command, 0, 0x1000, p.ID, new List <Blaze.Tdf>()); ns.Write(buff, 0, buff.Length); ns.Flush(); }
public static void UpdateMeshConnection(Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> input = Blaze.ReadPacketContent(p); List <Blaze.TdfStruct> entries = (List <Blaze.TdfStruct>)((Blaze.TdfList)input[1]).List; Blaze.TdfInteger pid = (Blaze.TdfInteger)entries[0].Values[1]; Blaze.TdfInteger stat = (Blaze.TdfInteger)entries[0].Values[2]; byte[] buff = Blaze.CreatePacket(p.Component, p.Command, 0, 0x1000, p.ID, new List <Blaze.Tdf>()); ns.Write(buff, 0, buff.Length); ns.Flush(); PlayerInfo target = null; foreach (PlayerInfo info in BlazeServer.allClients) { if (info.userId == pid.Value) { target = info; break; } } if (target != null) { if (stat.Value == 2) { if (pi.isServer) { AsyncUserSessions.UserSessionExtendedDataUpdateNotification(pi, p, target, ns); AsyncGameManager.NotifyGamePlayerStateChange(pi, p, target, ns, 4); AsyncGameManager.NotifyPlayerJoinCompleted(pi, p, target, ns); } else { AsyncGameManager.NotifyGamePlayerStateChange(pi, p, pi, ns, 4); AsyncGameManager.NotifyPlayerJoinCompleted(pi, p, pi, ns); } } else { AsyncUserSessions.NotifyUserRemoved(pi, p, pid.Value, ns); } } }
private static void PreAuth(Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> input = Blaze.ReadPacketContent(p); Blaze.TdfStruct CDAT = (Blaze.TdfStruct)input[0]; Blaze.TdfInteger TYPE = (Blaze.TdfInteger)CDAT.Values[3]; pi.isServer = TYPE.Value != 0; if (pi.isServer) { pi.game = new GameInfo(); pi.profile = Profiles.Create("test-server", 999); pi.userId = 999; } Blaze.TdfStruct CINF = (Blaze.TdfStruct)input[1]; Blaze.TdfString CVER = (Blaze.TdfString)CINF.Values[4]; Blaze.TdfInteger LOC = (Blaze.TdfInteger)CINF.Values[7]; pi.loc = LOC.Value; pi.version = CVER.Value; BlazeServer.Log("[CLNT] #" + pi.userId + " is a " + (pi.isServer ? "server" : "client"), System.Drawing.Color.Blue); List <Blaze.Tdf> Result = new List <Blaze.Tdf>(); Result.Add(Blaze.TdfInteger.Create("ANON", 0)); Result.Add(Blaze.TdfString.Create("ASRC", "300294")); List <string> t = Helper.ConvertStringList("{1} {25} {4} {27} {28} {6} {7} {9} {10} {11} {30720} {30721} {30722} {30723} {20} {30725} {30726} {2000}"); List <long> t2 = new List <long>(); foreach (string v in t) { t2.Add(Convert.ToInt64(v)); } Result.Add(Blaze.TdfList.Create("CIDS", 0, t2.Count, t2)); t = new List <string>(); List <string> t3 = new List <string>(); Helper.ConvertDoubleStringList("{connIdleTimeout ; 90s} {defaultRequestTimeout ; 60s} {pingPeriod ; 20s} {voipHeadsetUpdateRate ; 1000} {xlspConnectionIdleTimeout ; 300}", out t, out t3); Blaze.TdfDoubleList conf2 = Blaze.TdfDoubleList.Create("CONF", 1, 1, t, t3, t.Count); List <Blaze.Tdf> t4 = new List <Blaze.Tdf>(); t4.Add(conf2); Result.Add(Blaze.TdfStruct.Create("CONF", t4)); Result.Add(Blaze.TdfString.Create("INST", "battlefield-assault-pc")); Result.Add(Blaze.TdfInteger.Create("MINR", 0)); Result.Add(Blaze.TdfString.Create("NASP", "cem_ea_id")); Result.Add(Blaze.TdfString.Create("PILD", "")); Result.Add(Blaze.TdfString.Create("PLAT", "pc")); List <Blaze.Tdf> QOSS = new List <Blaze.Tdf>(); List <Blaze.Tdf> BWPS = new List <Blaze.Tdf>(); BWPS.Add(Blaze.TdfString.Create("PSA\0", ProviderInfo.QOS_IP)); BWPS.Add(Blaze.TdfInteger.Create("PSP\0", ProviderInfo.QOS_Port)); BWPS.Add(Blaze.TdfString.Create("SNA\0", ProviderInfo.QOS_Name)); QOSS.Add(Blaze.TdfStruct.Create("BWPS", BWPS)); QOSS.Add(Blaze.TdfInteger.Create("LNP\0", 0xA)); List <Blaze.Tdf> LTPS1 = new List <Blaze.Tdf>(); LTPS1.Add(Blaze.TdfString.Create("PSA\0", ProviderInfo.QOS_IP)); LTPS1.Add(Blaze.TdfInteger.Create("PSP\0", ProviderInfo.QOS_Port)); LTPS1.Add(Blaze.TdfString.Create("SNA\0", ProviderInfo.QOS_Name)); List <Blaze.TdfStruct> LTPS = new List <Blaze.TdfStruct>(); LTPS.Add(Blaze.CreateStructStub(LTPS1)); t = Helper.ConvertStringList("{" + ProviderInfo.QOS_SName + "}"); QOSS.Add(Blaze.TdfDoubleList.Create("LTPS", 1, 3, t, LTPS, 1)); QOSS.Add(Blaze.TdfInteger.Create("SVID", 0x45410805)); Result.Add(Blaze.TdfStruct.Create("QOSS", QOSS)); Result.Add(Blaze.TdfString.Create("RSRC", "300294")); Result.Add(Blaze.TdfString.Create("SVER", "WV Server")); byte[] buff = Blaze.CreatePacket(p.Component, p.Command, 0, 0x1000, p.ID, Result); ns.Write(buff, 0, buff.Length); ns.Flush(); }
private void tv1_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode t = e.Node; if (t != null && t.Name != "") { int n = Convert.ToInt32(t.Name); Blaze.Tdf tdf = inlist[n]; string s; switch (tdf.Type) { case 0: Blaze.TdfInteger ti = (Blaze.TdfInteger)tdf; rtb2.Text = "0x" + ti.Value.ToString("X"); if (ti.Label == "IP ") { rtb2.Text += Environment.NewLine + "(" + Blaze.GetStringFromIP(ti.Value) + ")"; } break; case 1: rtb2.Text = ((Blaze.TdfString)tdf).Value.ToString(); break; case 2: rtb2.Text = "Length: " + ((Blaze.TdfBlob)tdf).Data.Length.ToString(); rtb2.Text += Environment.NewLine + Blaze.HexDump(((Blaze.TdfBlob)tdf).Data); break; case 4: Blaze.TdfList l = (Blaze.TdfList)tdf; s = ""; for (int i = 0; i < l.Count; i++) { switch (l.SubType) { case 0: s += "{" + ((List <long>)l.List)[i] + "} "; break; case 1: s += "{" + ((List <string>)l.List)[i] + "} "; break; case 9: Blaze.TrippleVal t2 = ((List <Blaze.TrippleVal>)l.List)[i]; s += "{" + t2.v1.ToString("X") + "; " + t2.v2.ToString("X") + "; " + t2.v3.ToString("X") + "} "; break; } } rtb2.Text = s; break; case 5: s = ""; Blaze.TdfDoubleList ll = (Blaze.TdfDoubleList)tdf; for (int i = 0; i < ll.Count; i++) { s += "{"; switch (ll.SubType1) { case 0: List <long> l1 = (List <long>)ll.List1; s += l1[i].ToString("X"); break; case 1: List <string> l2 = (List <string>)ll.List1; s += l2[i]; break; case 0xA: List <float> lf1 = (List <float>)ll.List1; s += lf1[i].ToString(); break; default: s += "(see List1[" + i + "])"; break; } s += " ; "; switch (ll.SubType2) { case 0: List <long> l1 = (List <long>)ll.List2; s += l1[i].ToString("X"); break; case 1: List <string> l2 = (List <string>)ll.List2; s += l2[i]; break; case 0xA: List <float> lf1 = (List <float>)ll.List2; s += lf1[i].ToString(); break; default: s += "(see List2[" + i + "])"; break; } s += "}\n"; } rtb2.Text = s; break; case 6: rtb2.Text = "Type: 0x" + ((Blaze.TdfUnion)tdf).UnionType.ToString("X2"); break; case 7: Blaze.TdfIntegerList til = (Blaze.TdfIntegerList)tdf; s = ""; for (int i = 0; i < til.Count; i++) { s += til.List[i].ToString("X"); if (i < til.Count - 1) { s += "; "; } } rtb2.Text = s; break; case 8: Blaze.TdfDoubleVal dval = (Blaze.TdfDoubleVal)tdf; rtb2.Text = "0x" + dval.Value.v1.ToString("X") + " 0x" + dval.Value.v2.ToString("X"); break; case 9: Blaze.TdfTrippleVal tval = (Blaze.TdfTrippleVal)tdf; rtb2.Text = "0x" + tval.Value.v1.ToString("X") + " 0x" + tval.Value.v2.ToString("X") + " 0x" + tval.Value.v3.ToString("X"); break; default: rtb2.Text = ""; break; } } }