コード例 #1
0
        ////////////////

        public static void AnnounceServer()
        {
            ServerBrowserMod mymod = ServerBrowserMod.Instance;
            Version          vers  = mymod.Version;

            int port = Netplay.ListenPort;
            //if( mymod.Config.ServerBrowserCustomPort != -1 ) {
            //	port = mymod.Config.ServerBrowserCustomPort;
            //}

            int pvp = 0;

            bool[] team_checks = new bool[10];
            ServerBrowserReporter server_browser = mymod.Reporter;

            for (int i = 0; i < Main.player.Length; i++)
            {
                Player player = Main.player[i];
                if (player == null || !player.active)
                {
                    continue;
                }

                if (player.hostile)
                {
                    pvp++;
                }
                team_checks[player.team] = true;
            }

            int team_count = 0;

            for (int i = 1; i < team_checks.Length; i++)
            {
                if (team_checks[i])
                {
                    team_count++;
                }
            }

            try {
                var server_data = new ServerBrowserEntry();
                server_data.ServerIP       = NetHelpers.GetPublicIP();
                server_data.Port           = port;
                server_data.IsPassworded   = Netplay.ServerPassword != "";
                server_data.Motd           = Main.motd;
                server_data.WorldName      = Main.worldName;
                server_data.WorldProgress  = InfoHelpers.GetVanillaProgress();
                server_data.WorldEvent     = string.Join(", ", InfoHelpers.GetCurrentVanillaEvents().ToArray());
                server_data.MaxPlayerCount = Main.maxNetPlayers;
                server_data.PlayerCount    = Main.ActivePlayersCount;
                server_data.PlayerPvpCount = pvp;
                server_data.TeamsCount     = team_count;
                server_data.AveragePing    = InfoHelpers.GetAveragePingOfServer();
                server_data.Mods           = new Dictionary <string, string>();
                server_data.Version        = (vers.Major * 1000000) + (vers.Minor * 10000) + (vers.Build * 100) + vers.Revision;

                foreach (Mod mod in ModLoader.LoadedMods)
                {
                    if (mod.File == null)
                    {
                        continue;
                    }
                    server_data.Mods[mod.DisplayName] = mod.Version.ToString();
                }

                string json_str   = JsonConvert.SerializeObject(server_data, Formatting.None);
                byte[] json_bytes = Encoding.UTF8.GetBytes(json_str);

                Action <string> on_response = delegate(string output) {
                    ServerBrowserReporter.HandleServerAnnounceOutputAsync(server_data, output);
                };
                Action <Exception, string> on_error = delegate(Exception e, string output) {
                    LogHelpers.Log("Server browser returned error: " + e.ToString());
                };

                NetHelpers.MakePostRequestAsync(ServerBrowserReporter.URL, json_bytes, on_response, on_error);

                ServerBrowserReporter.LastSendTimestamp = SystemHelpers.TimeStampInSeconds();
            } catch (Exception e) {
                LogHelpers.Log("AnnounceServer - " + e.ToString());
                return;
            }
        }
コード例 #2
0
        public static bool CanAnnounceServer()
        {
            //return Netplay.ServerPassword == "";
            if (Main.netMode == 0)
            {
                //throw new Exception("Cannot add single player games to server browser.");
                return(false);
            }

            /*if( ServerBrowserMod.Instance.Config.IsServerHiddenFromBrowser ) {
             *      return false;
             * }
             * if( ServerBrowserMod.Instance.Config.IsServerHiddenFromBrowserUnlessPortForwardedViaUPNP && !Netplay.UseUPNP ) {
             *      return false;
             * }*/

            if (Main.netMode == 1)
            {
                if (NetHelpers.GetServerPing() == -1)
                {
                    return(false);
                }
            }

            string ip;

            try {
                ip = NetHelpers.GetPublicIP();
            } catch (Exception) {
                LogHelpers.Log("CanAddToBrowser - Invalid public IP");
                return(false);
            }

            if (ip == "127.0.0.1" || ip.Substring(0, 3) == "10.")
            {
                return(false);
            }
            switch (ip.Substring(0, 7))
            {
            case "192.168":
            case "172.16.":
            case "172.17.":
            case "172.18.":
            case "172.19.":
            case "172.20.":
            case "172.21.":
            case "172.22.":
            case "172.23.":
            case "172.24.":
            case "172.25.":
            case "172.26.":
            case "172.27.":
            case "172.28.":
            case "172.29.":
            case "172.30.":
            case "172.31.":
            case "172.32.":
                return(false);
            }

            return(true);
        }