Exemplo n.º 1
0
        static void Beat([NotNull] SchedulerTask scheduledTask)
        {
            if (Server.IsShuttingDown)
            {
                return;
            }

            if (ConfigKey.HeartbeatEnabled.Enabled())
            {
                SendHeartBeat();
            }
            else
            {
                // If heartbeats are disabled, the server data is written
                // to a text file instead (heartbeatdata.txt)
                string[] data =
                {
                    Salt,
                    Server.InternalIP.ToString(),
                    Server.Port.ToStringInvariant(),
                    Server.CountPlayers(false).ToStringInvariant(),
                    ConfigKey.MaxPlayers.GetString(),
                    Color.StripColors(ConfigKey.ServerName.GetString(),false),
                    ConfigKey.IsPublic.GetString(),
                    ConfigKey.HeartbeatUrl.GetString()
                };
                const string tempFile = Paths.HeartbeatDataFileName + ".tmp";
                File.WriteAllLines(tempFile, data, Encoding.ASCII);
                Paths.MoveOrReplaceFile(tempFile, Paths.HeartbeatDataFileName);
            }
        }
Exemplo n.º 2
0
        static void Beat( SchedulerTask scheduledTask )
        {
            if( Server.IsShuttingDown ) return;

            if( ConfigKey.HeartbeatEnabled.Enabled() ) {
                SendMinecraftNetBeat();
                if( ConfigKey.IsPublic.Enabled() && ConfigKey.HeartbeatToWoMDirect.Enabled() ) {
                    SendWoMDirectBeat();
                }

            } else {
                // If heartbeats are disabled, the server data is written
                // to a text file instead (heartbeatdata.txt)
                string[] data = new[]{
                    Salt,
                    Server.InternalIP.ToString(),
                    Server.Port.ToString(),
                    Server.CountPlayers( false ).ToString(),
                    ConfigKey.MaxPlayers.GetString(),
                    ConfigKey.ServerName.GetString(),
                    ConfigKey.IsPublic.GetString()
                };
                const string tempFile = Paths.HeartbeatDataFileName + ".tmp";
                File.WriteAllLines( tempFile, data, Encoding.ASCII );
                Paths.MoveOrReplace( tempFile, Paths.HeartbeatDataFileName );
            }
        }
Exemplo n.º 3
0
        public static void HbSave()
        {
            try
            {
                const string SaverFile = "heartbeatsaver.txt";

                if (File.Exists(SaverFile))
                {
                    File.Delete(SaverFile);
                }
                if (Salt == null)
                {
                    return;
                }
                if (Server.CountPlayers(false).ToString() == null)
                {
                    return;
                }
                HbData = "port=" + Server.Port.ToString() + "&max=" + ConfigKey.MaxPlayers.GetString() + "&name=" +
                         Uri.EscapeDataString(ConfigKey.ServerName.GetString()) +
                         "&public=True" + "&salt=" + Salt + "&users=" + Server.CountPlayers(false).ToString();
                File.WriteAllText(SaverFile, HbData, Encoding.ASCII);
            }
            catch (Exception ex) { Logger.Log(LogType.Error, "" + ex); }
        }
Exemplo n.º 4
0
        bool HandleOpcode(byte opcode)
        {
            switch (opcode)
            {
            case (byte)OpCode.Handshake:
                return(true);

            case 0xFE:     // SMP ping packet id
                // 1.4 - 1.6
                string name = Chat.ReplacePercentColorCodes(ConfigKey.ServerName.GetString(), false).Replace('&', '§');
                string data = "§1\078\00.30c\0§E" + name + '\0' + Server.CountPlayers(false) + '\0' + ConfigKey.MaxPlayers.GetInt();
                SendOldSMPKick(data);
                return(false);

            case 0x02:
            case 0xFA:
                SendOldSMPKick("§EPlease join us at §9http://classicube.net/");
                Logger.Log(LogType.Warning, "Player.LoginSequence: A player tried connecting with Minecraft Beta client from {0}.", IP);
                // ignore SMP pings
                return(false);

            case (byte)'G':     // WoM GET requests
                return(false);

            default:
                if (CheckModernSMP(opcode))
                {
                    return(false);
                }
                Logger.Log(LogType.Error, "Player.LoginSequence: Unexpected op code in the first packet from {0}: {1}.", IP, opcode);
                KickNow("Incompatible client, or a network error.", LeaveReason.ProtocolViolation);
                return(false);
            }
        }
Exemplo n.º 5
0
 internal HeartbeatData( [NotNull] Uri heartbeatUri )
 {
     if( heartbeatUri == null ) throw new ArgumentNullException( "heartbeatUri" );
     IsPublic = ConfigKey.IsPublic.Enabled();
     MaxPlayers = ConfigKey.MaxPlayers.GetInt();
     PlayerCount = Server.CountPlayers( false );
     ServerIP = Server.InternalIP;
     Port = Server.Port;
     ProtocolVersion = Config.ProtocolVersion;
     Salt = Heartbeat.Salt;
     ServerName = ConfigKey.ServerName.GetString();
     CustomData = new Dictionary<string, string>();
     HeartbeatUri = heartbeatUri;
 }
Exemplo n.º 6
0
        public static void HbSave()
        {
            try
            {
                const string SaverFile = "heartbeatdata.txt";

                if (File.Exists(SaverFile))
                {
                    File.Delete(SaverFile);
                }
                if (Salt == null)
                {
                    return;
                }

                if (Server.CountPlayers(false).ToString() == null)
                {
                    return;
                }
                string[] data = new[] {
                    Salt,
                    Server.InternalIP.ToString(),
                    Server.Port.ToString(),
                    Server.CountPlayers(false).ToString(),
                    ConfigKey.MaxPlayers.GetString(),
                    ConfigKey.ServerName.GetString(),
                    ConfigKey.IsPublic.GetString(),
                    Salt2
                };

                //"port=" + Server.Port.ToString() + "&max=" + ConfigKey.MaxPlayers.GetString() + "&name=" +
                //Uri.EscapeDataString(ConfigKey.ServerName.GetString()) +
                //"&public=True" + "&salt=" + Salt + "&users=" + Server.CountPlayers(false).ToString();
                const string tempFile = Paths.HeartbeatDataFileName + ".tmp";
                File.WriteAllLines(tempFile, data, Encoding.ASCII);
                Paths.MoveOrReplace(tempFile, Paths.HeartbeatDataFileName);
            }
            catch (Exception ex) { Logger.Log(LogType.Error, "" + ex); }
        }
Exemplo n.º 7
0
        internal HeartbeatData([NotNull] Uri heartbeatUri)
        {
            if (heartbeatUri == null)
            {
                throw new ArgumentNullException("heartbeatUri");
            }
            IsPublic        = ConfigKey.IsPublic.Enabled();
            MaxPlayers      = ConfigKey.MaxPlayers.GetInt();
            PlayerCount     = Server.CountPlayers(false);
            Port            = Server.Port;
            ProtocolVersion = Config.ProtocolVersion;
            Salt            = Heartbeat.Salt;
            ServerName      = Color.StripColors(ConfigKey.ServerName.GetString(), false);

            if (Heartbeat.sendUptime)
            {
                string uptime     = "[Uptime: " + (DateTime.UtcNow.Subtract(Server.StartTime)).ToMiniString() + "]";
                string namePadded = ServerName.PadRight(64, ' ');
                ServerName = namePadded.Remove(namePadded.Length - uptime.Length, uptime.Length) + uptime;
            }
            CustomData   = new Dictionary <string, string>();
            HeartbeatUri = heartbeatUri;
        }
Exemplo n.º 8
0
        static void Beat(SchedulerTask scheduledTask)
        {
            if (Server.IsShuttingDown)
            {
                return;
            }

            data = new HeartbeatData {
                IsPublic        = ConfigKey.IsPublic.GetBool(),
                MaxPlayers      = ConfigKey.MaxPlayers.GetInt(),
                PlayerCount     = Server.CountPlayers(false),
                ServerIP        = Server.IP,
                Port            = Server.Port,
                ProtocolVersion = Config.ProtocolVersion,
                Salt            = Server.Salt,
                ServerName      = ConfigKey.ServerName.GetString()
            };

            // This needs to be wrapped in try/catch because and exception in an event handler
            // would permanently stop heartbeat sending.
            try {
                if (RaiseHeartbeatSendingEvent(data))
                {
                    RescheduleHeartbeat();
                    return;
                }
            } catch (Exception ex) {
                Logger.LogAndReportCrash("Heartbeat.Sending handler failed", "fCraft", ex, false);
            }

            if (ConfigKey.HeartbeatEnabled.GetBool())
            {
                UriBuilder    ub = new UriBuilder(Uri);
                StringBuilder sb = new StringBuilder();
                sb.AppendFormat("public={0}&max={1}&users={2}&port={3}&version={4}&salt={5}&name={6}",
                                data.IsPublic,
                                data.MaxPlayers,
                                data.PlayerCount,
                                data.Port,
                                data.ProtocolVersion,
                                Uri.EscapeDataString(data.Salt),
                                Uri.EscapeDataString(data.ServerName));

                foreach (var pair in data.CustomData)
                {
                    sb.AppendFormat("&{0}={1}",
                                    Uri.EscapeDataString(pair.Key),
                                    Uri.EscapeDataString(pair.Value));
                }
                ub.Query = sb.ToString();

                request = (HttpWebRequest)WebRequest.Create(ub.Uri);
                request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
                request.Method      = "GET";
                request.Timeout     = Timeout;
                request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.BypassCache);

                request.BeginGetResponse(ResponseCallback, null);
            }
            else
            {
                // If heartbeats are disabled, the data is written to a text file (heartbeatdata.txt)
                const string tempFile = Paths.HeartbeatDataFileName + ".tmp";

                File.WriteAllLines(tempFile,
                                   new[] {
                    Server.Salt,
                    Server.IP.ToString(),
                    Server.Port.ToString(),
                    Server.CountPlayers(false).ToString(),
                    ConfigKey.MaxPlayers.GetString(),
                    ConfigKey.ServerName.GetString(),
                    ConfigKey.IsPublic.GetString()
                },
                                   Encoding.ASCII);

                Paths.MoveOrReplace(tempFile, Paths.HeartbeatDataFileName);
                RescheduleHeartbeat();
            }
        }