| using System; |
| using System; |
| using System.Collections.Generic; |
| using System.Collections.Generic; |
| using UnityEngine; |
| using UnityEngine; |
| |
| |
| public class MasterClient |
| public class MasterClient |
| { |
| { |
| public static MasterClient instance |
| public static MasterClient instance |
| { |
| { |
| get |
| get |
| { |
| { |
| return MasterClient.m_instance; |
| return MasterClient.m_instance; |
| } |
| } |
| } |
| } |
| |
| |
| public static void Initialize() |
| public static void Initialize() |
| { |
| { |
| if (MasterClient.m_instance == null) |
| if (MasterClient.m_instance == null) |
| { |
| { |
| MasterClient.m_instance = new MasterClient(); |
| MasterClient.m_instance = new MasterClient(); |
| } |
| } |
| } |
| } |
| |
| |
| public MasterClient() |
| public MasterClient() |
| { |
| { |
| this.m_sessionUID = Utils.GenerateUID(); |
| this.m_sessionUID = Utils.GenerateUID(); |
| } |
| } |
| |
| |
| public void Dispose() |
| public void Dispose() |
| { |
| { |
| if (this.m_socket != null) |
| if (this.m_socket != null) |
| { |
| { |
| this.m_socket.Dispose(); |
| this.m_socket.Dispose(); |
| } |
| } |
| if (this.m_connector != null) |
| if (this.m_connector != null) |
| { |
| { |
| this.m_connector.Dispose(); |
| this.m_connector.Dispose(); |
| } |
| } |
| if (this.m_rpc != null) |
| if (this.m_rpc != null) |
| { |
| { |
| this.m_rpc.Dispose(); |
| this.m_rpc.Dispose(); |
| } |
| } |
| if (MasterClient.m_instance == this) |
| if (MasterClient.m_instance == this) |
| { |
| { |
| MasterClient.m_instance = null; |
| MasterClient.m_instance = null; |
| } |
| } |
| } |
| } |
| |
| |
| public void Update(float dt) |
| public void Update(float dt) |
| { |
| { |
| } |
| } |
| |
| |
| private void SendStats(float duration) |
| private void SendStats(float duration) |
| { |
| { |
| ZPackage zpackage = new ZPackage(); |
| ZPackage zpackage = new ZPackage(); |
| zpackage.Write(2); |
| zpackage.Write(2); |
| zpackage.Write(this.m_sessionUID); |
| zpackage.Write(this.m_sessionUID); |
| zpackage.Write(Time.time); |
| zpackage.Write(Time.time); |
| bool flag = Player.m_localPlayer != null; |
| bool flag = Player.m_localPlayer != null; |
| zpackage.Write(flag ? duration : 0f); |
| zpackage.Write(flag ? duration : 0f); |
| bool flag2 = ZNet.instance && !ZNet.instance.IsServer(); |
| bool flag2 = ZNet.instance && !ZNet.instance.IsServer(); |
| zpackage.Write(flag2 ? duration : 0f); |
| zpackage.Write(flag2 ? duration : 0f); |
| zpackage.Write(global::Version.CurrentVersion.ToString()); |
| zpackage.Write(global::Version.CurrentVersion.ToString()); |
| . | zpackage.Write(23U); |
| zpackage.Write(27U); |
| bool flag3 = ZNet.instance && ZNet.instance.IsServer(); |
| bool flag3 = ZNet.instance && ZNet.instance.IsServer(); |
| zpackage.Write(flag3); |
| zpackage.Write(flag3); |
| if (flag3) |
| if (flag3) |
| { |
| { |
| zpackage.Write(ZNet.instance.GetWorldUID()); |
| zpackage.Write(ZNet.instance.GetWorldUID()); |
| zpackage.Write(duration); |
| zpackage.Write(duration); |
| int num = ZNet.instance.GetPeerConnections(); |
| int num = ZNet.instance.GetPeerConnections(); |
| if (Player.m_localPlayer != null) |
| if (Player.m_localPlayer != null) |
| { |
| { |
| num++; |
| num++; |
| } |
| } |
| zpackage.Write(num); |
| zpackage.Write(num); |
| bool flag4 = ZNet.instance.GetZNat() != null && ZNet.instance.GetZNat().GetStatus(); |
| bool flag4 = ZNet.instance.GetZNat() != null && ZNet.instance.GetZNat().GetStatus(); |
| zpackage.Write(flag4); |
| zpackage.Write(flag4); |
| } |
| } |
| PlayerProfile playerProfile = ((Game.instance != null) ? Game.instance.GetPlayerProfile() : null); |
| PlayerProfile playerProfile = ((Game.instance != null) ? Game.instance.GetPlayerProfile() : null); |
| if (playerProfile != null) |
| if (playerProfile != null) |
| { |
| { |
| zpackage.Write(true); |
| zpackage.Write(true); |
| zpackage.Write(playerProfile.GetPlayerID()); |
| zpackage.Write(playerProfile.GetPlayerID()); |
| zpackage.Write(105); |
| zpackage.Write(105); |
| for (int i = 0; i < 105; i++) |
| for (int i = 0; i < 105; i++) |
| { |
| { |
| zpackage.Write(playerProfile.m_playerStats.m_stats[(PlayerStatType)i]); |
| zpackage.Write(playerProfile.m_playerStats.m_stats[(PlayerStatType)i]); |
| } |
| } |
| zpackage.Write(playerProfile.m_usedCheats); |
| zpackage.Write(playerProfile.m_usedCheats); |
| zpackage.Write(new DateTimeOffset(playerProfile.m_dateCreated).ToUnixTimeSeconds()); |
| zpackage.Write(new DateTimeOffset(playerProfile.m_dateCreated).ToUnixTimeSeconds()); |
| zpackage.Write(playerProfile.m_knownWorlds.Count); |
| zpackage.Write(playerProfile.m_knownWorlds.Count); |
| foreach (KeyValuePair<string, float> keyValuePair in playerProfile.m_knownWorlds) |
| foreach (KeyValuePair<string, float> keyValuePair in playerProfile.m_knownWorlds) |
| { |
| { |
| zpackage.Write(keyValuePair.Key); |
| zpackage.Write(keyValuePair.Key); |
| zpackage.Write(keyValuePair.Value); |
| zpackage.Write(keyValuePair.Value); |
| } |
| } |
| zpackage.Write(playerProfile.m_knownWorldKeys.Count); |
| zpackage.Write(playerProfile.m_knownWorldKeys.Count); |
| foreach (KeyValuePair<string, float> keyValuePair2 in playerProfile.m_knownWorldKeys) |
| foreach (KeyValuePair<string, float> keyValuePair2 in playerProfile.m_knownWorldKeys) |
| { |
| { |
| zpackage.Write(keyValuePair2.Key); |
| zpackage.Write(keyValuePair2.Key); |
| zpackage.Write(keyValuePair2.Value); |
| zpackage.Write(keyValuePair2.Value); |
| } |
| } |
| zpackage.Write(playerProfile.m_knownCommands.Count); |
| zpackage.Write(playerProfile.m_knownCommands.Count); |
| using (Dictionary<string, float>.Enumerator enumerator = playerProfile.m_knownCommands.GetEnumerator()) |
| using (Dictionary<string, float>.Enumerator enumerator = playerProfile.m_knownCommands.GetEnumerator()) |
| { |
| { |
| while (enumerator.MoveNext()) |
| while (enumerator.MoveNext()) |
| { |
| { |
| KeyValuePair<string, float> keyValuePair3 = enumerator.Current; |
| KeyValuePair<string, float> keyValuePair3 = enumerator.Current; |
| zpackage.Write(keyValuePair3.Key); |
| zpackage.Write(keyValuePair3.Key); |
| zpackage.Write(keyValuePair3.Value); |
| zpackage.Write(keyValuePair3.Value); |
| } |
| } |
| goto IL_2CD; |
| goto IL_2CD; |
| } |
| } |
| } |
| } |
| zpackage.Write(false); |
| zpackage.Write(false); |
| IL_2CD: |
| IL_2CD: |
| this.m_rpc.Invoke("Stats", new object[] { zpackage }); |
| this.m_rpc.Invoke("Stats", new object[] { zpackage }); |
| } |
| } |
| |
| |
| public void RegisterServer(string name, string host, int port, bool password, bool upnp, long worldUID, GameVersion gameVersion, uint networkVersion, List<string> modifiers) |
| public void RegisterServer(string name, string host, int port, bool password, bool upnp, long worldUID, GameVersion gameVersion, uint networkVersion, List<string> modifiers) |
| { |
| { |
| this.m_registerPkg = new ZPackage(); |
| this.m_registerPkg = new ZPackage(); |
| this.m_registerPkg.Write(1); |
| this.m_registerPkg.Write(1); |
| this.m_registerPkg.Write(name); |
| this.m_registerPkg.Write(name); |
| this.m_registerPkg.Write(host); |
| this.m_registerPkg.Write(host); |
| this.m_registerPkg.Write(port); |
| this.m_registerPkg.Write(port); |
| this.m_registerPkg.Write(password); |
| this.m_registerPkg.Write(password); |
| this.m_registerPkg.Write(upnp); |
| this.m_registerPkg.Write(upnp); |
| this.m_registerPkg.Write(worldUID); |
| this.m_registerPkg.Write(worldUID); |
| this.m_registerPkg.Write(gameVersion.ToString()); |
| this.m_registerPkg.Write(gameVersion.ToString()); |
| this.m_registerPkg.Write(networkVersion); |
| this.m_registerPkg.Write(networkVersion); |
| this.m_registerPkg.Write(StringUtils.EncodeStringListAsString(modifiers, true)); |
| this.m_registerPkg.Write(StringUtils.EncodeStringListAsString(modifiers, true)); |
| if (this.m_rpc != null) |
| if (this.m_rpc != null) |
| { |
| { |
| this.m_rpc.Invoke("RegisterServer2", new object[] { this.m_registerPkg }); |
| this.m_rpc.Invoke("RegisterServer2", new object[] { this.m_registerPkg }); |
| } |
| } |
| ZLog.Log(string.Concat(new string[] |
| ZLog.Log(string.Concat(new string[] |
| { |
| { |
| "Registering server ", |
| "Registering server ", |
| name, |
| name, |
| " ", |
| " ", |
| host, |
| host, |
| ":", |
| ":", |
| port.ToString() |
| port.ToString() |
| })); |
| })); |
| } |
| } |
| |
| |
| public void UnregisterServer() |
| public void UnregisterServer() |
| { |
| { |
| if (this.m_registerPkg == null) |
| if (this.m_registerPkg == null) |
| { |
| { |
| return; |
| return; |
| } |
| } |
| if (this.m_rpc != null) |
| if (this.m_rpc != null) |
| { |
| { |
| this.m_rpc.Invoke("UnregisterServer", Array.Empty<object>()); |
| this.m_rpc.Invoke("UnregisterServer", Array.Empty<object>()); |
| } |
| } |
| this.m_registerPkg = null; |
| this.m_registerPkg = null; |
| } |
| } |
| |
| |
| public List<ServerStatus> GetServers() |
| public List<ServerStatus> GetServers() |
| { |
| { |
| return this.m_servers; |
| return this.m_servers; |
| } |
| } |
| |
| |
| public bool GetServers(List<ServerStatus> servers) |
| public bool GetServers(List<ServerStatus> servers) |
| { |
| { |
| if (!this.m_haveServerlist) |
| if (!this.m_haveServerlist) |
| { |
| { |
| return false; |
| return false; |
| } |
| } |
| servers.Clear(); |
| servers.Clear(); |
| servers.AddRange(this.m_servers); |
| servers.AddRange(this.m_servers); |
| return true; |
| return true; |
| } |
| } |
| |
| |
| public void RequestServerlist() |
| public void RequestServerlist() |
| { |
| { |
| if (this.m_rpc != null) |
| if (this.m_rpc != null) |
| { |
| { |
| this.m_rpc.Invoke("RequestServerlist2", Array.Empty<object>()); |
| this.m_rpc.Invoke("RequestServerlist2", Array.Empty<object>()); |
| } |
| } |
| } |
| } |
| |
| |
| private void RPC_ServerList(ZRpc rpc, ZPackage pkg) |
| private void RPC_ServerList(ZRpc rpc, ZPackage pkg) |
| { |
| { |
| this.m_haveServerlist = true; |
| this.m_haveServerlist = true; |
| this.m_serverListRevision++; |
| this.m_serverListRevision++; |
| pkg.ReadInt(); |
| pkg.ReadInt(); |
| int num = pkg.ReadInt(); |
| int num = pkg.ReadInt(); |
| this.m_servers.Clear(); |
| this.m_servers.Clear(); |
| for (int i = 0; i < num; i++) |
| for (int i = 0; i < num; i++) |
| { |
| { |
| string text = pkg.ReadString(); |
| string text = pkg.ReadString(); |
| string text2 = pkg.ReadString(); |
| string text2 = pkg.ReadString(); |
| int num2 = pkg.ReadInt(); |
| int num2 = pkg.ReadInt(); |
| bool flag = pkg.ReadBool(); |
| bool flag = pkg.ReadBool(); |
| pkg.ReadBool(); |
| pkg.ReadBool(); |
| pkg.ReadLong(); |
| pkg.ReadLong(); |
| string text3 = pkg.ReadString(); |
| string text3 = pkg.ReadString(); |
| uint num3 = 0U; |
| uint num3 = 0U; |
| GameVersion gameVersion; |
| GameVersion gameVersion; |
| if (GameVersion.TryParseGameVersion(text3, out gameVersion) && gameVersion >= global::Version.FirstVersionWithNetworkVersion) |
| if (GameVersion.TryParseGameVersion(text3, out gameVersion) && gameVersion >= global::Version.FirstVersionWithNetworkVersion) |
| { |
| { |
| num3 = pkg.ReadUInt(); |
| num3 = pkg.ReadUInt(); |
| } |
| } |
| int num4 = pkg.ReadInt(); |
| int num4 = pkg.ReadInt(); |
| List<string> list = new List<string>(); |
| List<string> list = new List<string>(); |
| if (gameVersion >= global::Version.FirstVersionWithModifiers) |
| if (gameVersion >= global::Version.FirstVersionWithModifiers) |
| { |
| { |
| StringUtils.TryDecodeStringAsICollection<List<string>>(pkg.ReadString(), out list); |
| StringUtils.TryDecodeStringAsICollection<List<string>>(pkg.ReadString(), out list); |
| } |
| } |
| ServerStatus serverStatus = new ServerStatus(new ServerJoinDataDedicated(text2 + ":" + num2.ToString())); |
| ServerStatus serverStatus = new ServerStatus(new ServerJoinDataDedicated(text2 + ":" + num2.ToString())); |
| serverStatus.UpdateStatus(OnlineStatus.Online, text, (uint)num4, gameVersion, list, num3, flag, PrivilegeManager.Platform.None, serverStatus.m_hostId, true); |
| serverStatus.UpdateStatus(OnlineStatus.Online, text, (uint)num4, gameVersion, list, num3, flag, PrivilegeManager.Platform.None, serverStatus.m_hostId, true); |
| if (this.m_nameFilter.Length <= 0 || serverStatus.m_joinData.m_serverName.Contains(this.m_nameFilter)) |
| if (this.m_nameFilter.Length <= 0 || serverStatus.m_joinData.m_serverName.Contains(this.m_nameFilter)) |
| { |
| { |
| this.m_servers.Add(serverStatus); |
| this.m_servers.Add(serverStatus); |
| } |
| } |
| } |
| } |
| if (this.m_onServerList != null) |
| if (this.m_onServerList != null) |
| { |
| { |
| this.m_onServerList(this.m_servers); |
| this.m_onServerList(this.m_servers); |
| } |
| } |
| } |
| } |
| |
| |
| public int GetServerListRevision() |
| public int GetServerListRevision() |
| { |
| { |
| return this.m_serverListRevision; |
| return this.m_serverListRevision; |
| } |
| } |
| |
| |
| public bool IsConnected() |
| public bool IsConnected() |
| { |
| { |
| return this.m_rpc != null; |
| return this.m_rpc != null; |
| } |
| } |
| |
| |
| public void SetNameFilter(string filter) |
| public void SetNameFilter(string filter) |
| { |
| { |
| this.m_nameFilter = filter; |
| this.m_nameFilter = filter; |
| ZLog.Log("filter is " + filter); |
| ZLog.Log("filter is " + filter); |
| } |
| } |
| |
| |
| private const int statVersion = 2; |
| private const int statVersion = 2; |
| |
| |
| public Action<List<ServerStatus>> m_onServerList; |
| public Action<List<ServerStatus>> m_onServerList; |
| |
| |
| private string m_msHost = "dvoid.noip.me"; |
| private string m_msHost = "dvoid.noip.me"; |
| |
| |
| private int m_msPort = 9983; |
| private int m_msPort = 9983; |
| |
| |
| private long m_sessionUID; |
| private long m_sessionUID; |
| |
| |
| private ZConnector2 m_connector; |
| private ZConnector2 m_connector; |
| |
| |
| private ZSocket2 m_socket; |
| private ZSocket2 m_socket; |
| |
| |
| private ZRpc m_rpc; |
| private ZRpc m_rpc; |
| |
| |
| private bool m_haveServerlist; |
| private bool m_haveServerlist; |
| |
| |
| private List<ServerStatus> m_servers = new List<ServerStatus>(); |
| private List<ServerStatus> m_servers = new List<ServerStatus>(); |
| |
| |
| private ZPackage m_registerPkg; |
| private ZPackage m_registerPkg; |
| |
| |
| private float m_sendStatsTimer; |
| private float m_sendStatsTimer; |
| |
| |
| private int m_serverListRevision; |
| private int m_serverListRevision; |
| |
| |
| private string m_nameFilter = ""; |
| private string m_nameFilter = ""; |
| |
| |
| private static MasterClient m_instance; |
| private static MasterClient m_instance; |
| } |
| } |
| |
| |