public static void NotifyPlayerJoining(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { uint t = Blaze.GetUnixTimeStamp(); List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); List <Blaze.Tdf> PDAT = new List <Blaze.Tdf>(); PDAT.Add(Blaze.TdfInteger.Create("EXID", pi.userId)); PDAT.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); PDAT.Add(Blaze.TdfInteger.Create("LOC\0", pi.loc)); PDAT.Add(Blaze.TdfString.Create("NAME", pi.profile.name)); PDAT.Add(Blaze.TdfInteger.Create("PID\0", pi.userId)); PDAT.Add(BlazeHelper.CreateNETFieldUnion(pi, "PNET")); PDAT.Add(Blaze.TdfInteger.Create("SID\0", pi.slot)); PDAT.Add(Blaze.TdfInteger.Create("STAT", pi.stat)); PDAT.Add(Blaze.TdfInteger.Create("TIDX", 0xFFFF)); PDAT.Add(Blaze.TdfInteger.Create("TIME", t)); PDAT.Add(Blaze.TdfInteger.Create("UID\0", pi.userId)); result.Add(Blaze.TdfStruct.Create("PDAT", PDAT)); byte[] buff = Blaze.CreatePacket(0x4, 0x15, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [0004:0015] NotifyPlayerJoining"); }
public static void Exit() { Logger.Warn("[MAIN] Exit the Server..."); stop = false; if (!BlazeServer._exit) { BlazeServer.Stop(); } if (!MagmaServer._exit) { MagmaServer.Stop(); } if (!QOSServer._exit) { QOSServer.Stop(); } if (!RedirectorServer._exit) { RedirectorServer.Stop(); } if (!Webserver._exit) { Webserver.Stop(); } }
public static void NotifyUserRemoved(PlayerInfo src, Blaze.Packet p, long pid, NetworkStream ns) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("BUID", pid)); byte[] buff = Blaze.CreatePacket(0x7802, 0x3, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [7802:0001] NotifyUserRemoved"); }
public static void UserSessionExtendedDataUpdateNotification(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> Result = new List <Blaze.Tdf>(); Result.Add(BlazeHelper.CreateUserDataStruct(pi)); Result.Add(Blaze.TdfInteger.Create("USID", pi.userId)); byte[] buff = Blaze.CreatePacket(0x7802, 1, 0, 0x2000, 0, Result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [7802:0001] UserSessionExtendedDataUpdateNotification"); }
public static void NotifyUserAdded(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(BlazeHelper.CreateUserDataStruct(pi)); result.Add(BlazeHelper.CreateUserStruct(pi)); byte[] buff = Blaze.CreatePacket(0x7802, 0x2, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [7802:0001] NotifyUserAdded"); }
public static void NotifyGameStateChange(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); result.Add(Blaze.TdfInteger.Create("GSTA", pi.game.GSTA)); byte[] buff = Blaze.CreatePacket(4, 0x64, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [0004:0064] NotifyGameStateChange"); }
public static void NotifyPlayerJoinCompleted(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); result.Add(Blaze.TdfInteger.Create("PID\0", pi.userId)); byte[] buff = Blaze.CreatePacket(0x4, 0x1E, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [0004:001E] NotifyPlayerJoinCompleted"); }
public static void StartServers() { bool useQOS = Config.useQOS; bool useWebServer = Config.useWebServer; bool RediSSL = Config.RediSSL; bool useShark = Config.useShark; bool DEDISRV = Config.DEDIServer; ProviderInfo.backendIP = Config.IPAddress; if (useQOS) { ProviderInfo.QOS_IP = ProviderInfo.backendIP; } else { ProviderInfo.QOS_IP = "gossjcprod-qos01.ea.com"; } if (RediSSL) { RedirectorServer.useSSL = true; } else { RedirectorServer.useSSL = false; } if (!useShark) { RedirectorServer.targetPort = 30001; } RedirectorServer.Start(); BlazeServer.Start(); MagmaServer.basicMode = true; MagmaServer.Start(); if (useQOS) { QOSServer.Start(); } if (useWebServer) { Webserver.Start(); } if (DEDISRV) { StartDEDServer(); } }
public static void NotifyUserStatus(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("FLGS", 3)); result.Add(Blaze.TdfInteger.Create("ID\0\0", pi.userId)); byte[] buff = Blaze.CreatePacket(0x7802, 0x5, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [7802:0001] NotifyUserStatus"); }
public static void NotifyPlatformHostInitialized(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); result.Add(Blaze.TdfInteger.Create("PHID", pi.userId)); result.Add(Blaze.TdfInteger.Create("PHST", 0)); byte[] buff = Blaze.CreatePacket(4, 0x47, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [0004:0047] NotifyPlatformHostInitialized"); }
public static void NotifyPlayerRemoved(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns, long pid, long cntx, long reas) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("CNTX", cntx)); result.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); result.Add(Blaze.TdfInteger.Create("PID\0", pid)); result.Add(Blaze.TdfInteger.Create("REAS", reas)); byte[] buff = Blaze.CreatePacket(4, 0x28, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [0004:001E] NotifyPlayerRemoved"); }
public static void JoinGame(Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { PlayerInfo srv = null; foreach (PlayerInfo info in BlazeServer.allClients) { if (info.isServer) { srv = info; break; } } if (srv == null) { Logger.Error("[CLNT] #" + pi.userId + " : cant find game to join!"); return; } pi.game = srv.game; pi.slot = srv.game.getNextSlot(); BlazeServer.Log("[CLNT] #" + pi.userId + " : assigned Slot Id " + pi.slot); if (pi.slot == 255) { Logger.Warn("[CLNT] #" + pi.userId + " : server full!"); return; } srv.game.setNextSlot((int)pi.userId); srv.game.players[pi.slot] = pi; List <Blaze.Tdf> result = new List <Blaze.Tdf>(); result.Add(Blaze.TdfInteger.Create("GID\0", srv.game.id)); result.Add(Blaze.TdfInteger.Create("JGS\0", 0)); byte[] buff = Blaze.CreatePacket(p.Component, p.Command, 0, 0x1000, p.ID, result); ns.Write(buff, 0, buff.Length); ns.Flush(); pi.stat = 2; AsyncUserSessions.NotifyUserAdded(pi, p, pi, ns); AsyncUserSessions.NotifyUserStatus(pi, p, pi, ns); AsyncGameManager.NotifyClientGameSetup(pi, p, pi, srv, ns); AsyncUserSessions.NotifyUserAdded(srv, p, pi, srv.ns); AsyncUserSessions.NotifyUserStatus(srv, p, pi, srv.ns); AsyncUserSessions.UserSessionExtendedDataUpdateNotification(srv, p, pi, srv.ns); AsyncGameManager.NotifyPlayerJoining(srv, p, pi, srv.ns); }
public static void GetStatsAsyncNotification(Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> input = Blaze.ReadPacketContent(p); string statSpace = ((Blaze.TdfString)input[2]).Value; long vid = ((Blaze.TdfInteger)input[7]).Value; long eid = ((List <long>)((Blaze.TdfList)input[1]).List)[0]; List <Blaze.Tdf> Result = new List <Blaze.Tdf>(); Result.Add(Blaze.TdfString.Create("GRNM", statSpace)); Result.Add(Blaze.TdfString.Create("KEY\0", "No_Scope_Defined")); Result.Add(Blaze.TdfInteger.Create("LAST", 1)); List <Blaze.Tdf> STS = new List <Blaze.Tdf>(); List <Blaze.TdfStruct> STAT = new List <Blaze.TdfStruct>(); List <Blaze.Tdf> e0 = new List <Blaze.Tdf>(); e0.Add(Blaze.TdfInteger.Create("EID\0", eid)); e0.Add(Blaze.TdfDoubleVal.Create("ETYP", new Blaze.DoubleVal(30722, 1))); e0.Add(Blaze.TdfInteger.Create("POFF", 0)); List <string> values = new List <string>(); if (statSpace == "crit") { values.AddRange(new string[] { pi.profile.level.ToString(), pi.profile.xp.ToString(), "10000" }); } else { values.AddRange(new string[] { pi.profile.kit.ToString(), pi.profile.head.ToString(), pi.profile.face.ToString(), pi.profile.shirt.ToString() }); } e0.Add(Blaze.TdfList.Create("STAT", 1, values.Count, values)); STAT.Add(Blaze.TdfStruct.Create("0", e0)); STS.Add(Blaze.TdfList.Create("STAT", 3, STAT.Count, STAT)); Result.Add(Blaze.TdfStruct.Create("STS\0", STS)); Result.Add(Blaze.TdfInteger.Create("VID\0", vid)); byte[] buff = Blaze.CreatePacket(7, 0x32, 0, 0x2000, 0, Result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + pi.userId + " [0007:0032] GetStatsAsyncNotification"); }
public static void Refresh() { profiles = new List <Profile>(); if (!Directory.Exists("backend")) { Directory.CreateDirectory("backend"); } if (!Directory.Exists("backend\\profiles")) { Directory.CreateDirectory("backend\\profiles"); } string[] files = Directory.GetFiles("backend\\profiles\\", "*.txt"); foreach (string file in files) { Profile p = Profile.Load(file); if (p != null) { profiles.Add(p); } } BlazeServer.Log("[MAIN] Loaded " + profiles.Count + " player profiles"); }
public static void tBlazeMain(object obj) { try { Log("[MAIN] Blaze starting..."); Profiles.Refresh(); lBlaze = new TcpListener(IPAddress.Parse(ProviderInfo.backendIP), 30001); Log("[MAIN] Blaze bound to " + ProviderInfo.backendIP + ":30001"); lBlaze.Start(); Log("[MAIN] Blaze listening..."); while (!GetExit()) { while (!BlazeServer.GetExit()) { new Thread(new ParameterizedThreadStart(tBlazeClientHandler)).Start((object)lBlaze.AcceptTcpClient()); } } } catch (Exception ex) { LogError("MAIN", ex); } }
public static void NotifyServerGameSetup(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, NetworkStream ns) { List <Blaze.Tdf> input = Blaze.ReadPacketContent(p); uint t = Blaze.GetUnixTimeStamp(); pi.game.GNAM = ((Blaze.TdfString)input[2]).Value; pi.game.GSET = ((Blaze.TdfInteger)input[3]).Value; pi.game.VOIP = ((Blaze.TdfInteger)input[21]).Value; pi.game.VSTR = ((Blaze.TdfString)input[22]).Value; List <Blaze.Tdf> result = new List <Blaze.Tdf>(); List <Blaze.Tdf> GAME = new List <Blaze.Tdf>(); GAME.Add(Blaze.TdfList.Create("ADMN", 0, 1, new List <long>(new long[] { pi.userId }))); GAME.Add(Blaze.TdfList.Create("CAP\0", 0, 2, new List <long>(new long[] { 0x20, 0 }))); GAME.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); GAME.Add(Blaze.TdfString.Create("GNAM", pi.game.GNAM)); GAME.Add(Blaze.TdfInteger.Create("GPVH", 666)); GAME.Add(Blaze.TdfInteger.Create("GSET", pi.game.GSET)); GAME.Add(Blaze.TdfInteger.Create("GSID", 1)); GAME.Add(Blaze.TdfInteger.Create("GSTA", pi.game.GSTA)); GAME.Add(Blaze.TdfString.Create("GTYP", "AssaultStandard")); GAME.Add(BlazeHelper.CreateNETField(pi, "HNET")); GAME.Add(Blaze.TdfInteger.Create("HSES", 13666)); GAME.Add(Blaze.TdfInteger.Create("IGNO", 0)); GAME.Add(Blaze.TdfInteger.Create("MCAP", 0x20)); GAME.Add(BlazeHelper.CreateNQOSField(pi, "NQOS")); GAME.Add(Blaze.TdfInteger.Create("NRES", 0)); GAME.Add(Blaze.TdfInteger.Create("NTOP", 1)); GAME.Add(Blaze.TdfString.Create("PGID", "")); List <Blaze.Tdf> PHST = new List <Blaze.Tdf>(); PHST.Add(Blaze.TdfInteger.Create("HPID", pi.userId)); GAME.Add(Blaze.TdfStruct.Create("PHST", PHST)); GAME.Add(Blaze.TdfInteger.Create("PRES", 1)); GAME.Add(Blaze.TdfString.Create("PSAS", "wv")); GAME.Add(Blaze.TdfInteger.Create("QCAP", 0x10)); GAME.Add(Blaze.TdfInteger.Create("SEED", 0x2CF2048F)); GAME.Add(Blaze.TdfInteger.Create("TCAP", 0x10)); List <Blaze.Tdf> THST = new List <Blaze.Tdf>(); THST.Add(Blaze.TdfInteger.Create("HPID", pi.userId)); GAME.Add(Blaze.TdfStruct.Create("THST", THST)); GAME.Add(Blaze.TdfList.Create("TIDS", 0, 2, new List <long>(new long[] { 1, 2 }))); GAME.Add(Blaze.TdfString.Create("UUID", "f5193367-c991-4429-aee4-8d5f3adab938")); GAME.Add(Blaze.TdfInteger.Create("VOIP", pi.game.VOIP)); GAME.Add(Blaze.TdfString.Create("VSTR", pi.game.VSTR)); result.Add(Blaze.TdfStruct.Create("GAME", GAME)); List <Blaze.TdfStruct> PROS = new List <Blaze.TdfStruct>(); List <Blaze.Tdf> ee0 = new List <Blaze.Tdf>(); ee0.Add(Blaze.TdfInteger.Create("EXID", pi.userId)); ee0.Add(Blaze.TdfInteger.Create("GID\0", pi.game.id)); ee0.Add(Blaze.TdfInteger.Create("LOC\0", pi.loc)); ee0.Add(Blaze.TdfString.Create("NAME", pi.profile.name)); ee0.Add(Blaze.TdfInteger.Create("PID\0", pi.userId)); ee0.Add(BlazeHelper.CreateNETFieldUnion(pi, "PNET")); ee0.Add(Blaze.TdfInteger.Create("SID\0", pi.slot)); ee0.Add(Blaze.TdfInteger.Create("SLOT", 0)); ee0.Add(Blaze.TdfInteger.Create("STAT", 2)); ee0.Add(Blaze.TdfInteger.Create("TIDX", 0xFFFF)); ee0.Add(Blaze.TdfInteger.Create("TIME", t)); ee0.Add(Blaze.TdfInteger.Create("UID\0", pi.userId)); PROS.Add(Blaze.TdfStruct.Create("0", ee0)); result.Add(Blaze.TdfList.Create("PROS", 3, 1, PROS)); List <Blaze.Tdf> VALU = new List <Blaze.Tdf>(); VALU.Add(Blaze.TdfInteger.Create("DCTX", 0)); result.Add(Blaze.TdfUnion.Create("REAS", 0, Blaze.TdfStruct.Create("VALU", VALU))); byte[] buff = Blaze.CreatePacket(p.Component, 0x14, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [0004:0014] NotifyServerGameSetup"); }
public static void NotifyClientGameSetup(PlayerInfo src, Blaze.Packet p, PlayerInfo pi, PlayerInfo srv, NetworkStream ns, long reas = 1) { List <Blaze.Tdf> result = new List <Blaze.Tdf>(); List <Blaze.Tdf> GAME = new List <Blaze.Tdf>(); GAME.Add(Blaze.TdfList.Create("ADMN", 0, 1, new List <long>(new long[] { srv.userId }))); if (srv.game.ATTR != null) { GAME.Add(srv.game.ATTR); } GAME.Add(Blaze.TdfList.Create("CAP\0", 0, 2, new List <long>(new long[] { 0x20, 0 }))); GAME.Add(Blaze.TdfInteger.Create("GID\0", srv.game.id)); GAME.Add(Blaze.TdfString.Create("GNAM", srv.game.GNAM)); GAME.Add(Blaze.TdfInteger.Create("GPVH", 666)); GAME.Add(Blaze.TdfInteger.Create("GSET", srv.game.GSET)); GAME.Add(Blaze.TdfInteger.Create("GSID", 1)); GAME.Add(Blaze.TdfInteger.Create("GSTA", srv.game.GSTA)); GAME.Add(Blaze.TdfString.Create("GTYP", "AssaultStandard")); GAME.Add(BlazeHelper.CreateNETField(srv, "HNET")); GAME.Add(Blaze.TdfInteger.Create("HSES", 13666)); GAME.Add(Blaze.TdfInteger.Create("IGNO", 0)); GAME.Add(Blaze.TdfInteger.Create("MCAP", 0x20)); GAME.Add(BlazeHelper.CreateNQOSField(srv, "NQOS")); GAME.Add(Blaze.TdfInteger.Create("NRES", 0)); GAME.Add(Blaze.TdfInteger.Create("NTOP", 1)); GAME.Add(Blaze.TdfString.Create("PGID", "")); List <Blaze.Tdf> PHST = new List <Blaze.Tdf>(); PHST.Add(Blaze.TdfInteger.Create("HPID", srv.userId)); PHST.Add(Blaze.TdfInteger.Create("HSLT", srv.slot)); GAME.Add(Blaze.TdfStruct.Create("PHST", PHST)); GAME.Add(Blaze.TdfInteger.Create("PRES", 1)); GAME.Add(Blaze.TdfString.Create("PSAS", "wv")); GAME.Add(Blaze.TdfInteger.Create("QCAP", 0x10)); GAME.Add(Blaze.TdfInteger.Create("SEED", 0x2CF2048F)); GAME.Add(Blaze.TdfInteger.Create("TCAP", 0x10)); List <Blaze.Tdf> THST = new List <Blaze.Tdf>(); THST.Add(Blaze.TdfInteger.Create("HPID", srv.userId)); THST.Add(Blaze.TdfInteger.Create("HSLT", srv.slot)); GAME.Add(Blaze.TdfStruct.Create("THST", THST)); List <long> playerIdList = new List <long>(); for (int i = 0; i < 32; i++) { if (srv.game.slotUse[i] != -1) { playerIdList.Add(srv.game.slotUse[i]); } } GAME.Add(Blaze.TdfList.Create("TIDS", 0, 2, playerIdList)); GAME.Add(Blaze.TdfString.Create("UUID", "f5193367-c991-4429-aee4-8d5f3adab938")); GAME.Add(Blaze.TdfInteger.Create("VOIP", srv.game.VOIP)); GAME.Add(Blaze.TdfString.Create("VSTR", srv.game.VSTR)); result.Add(Blaze.TdfStruct.Create("GAME", GAME)); List <Blaze.TdfStruct> PROS = new List <Blaze.TdfStruct>(); for (int i = 0; i < 32; i++) { if (srv.game.players[i] != null) { PROS.Add(BlazeHelper.MakePROSEntry(i, srv.game.players[i])); } } result.Add(Blaze.TdfList.Create("PROS", 3, PROS.Count, PROS)); List <Blaze.Tdf> VALU = new List <Blaze.Tdf>(); VALU.Add(Blaze.TdfInteger.Create("DCTX", reas)); result.Add(Blaze.TdfUnion.Create("REAS", 0, Blaze.TdfStruct.Create("VALU", VALU))); byte[] buff = Blaze.CreatePacket(0x4, 0x14, 0, 0x2000, 0, result); ns.Write(buff, 0, buff.Length); ns.Flush(); BlazeServer.Log("[CLNT] #" + src.userId + " [0004:0014] NotifyClientGameSetup"); }