Пример #1
0
        // Called when the heartbeat server responds.
        static void ResponseCallback([NotNull] IAsyncResult result)
        {
            if (Server.IsShuttingDown)
            {
                return;
            }
            HeartbeatRequestState state = (HeartbeatRequestState)result.AsyncState;

            try {
                string responseText;
                using (HttpWebResponse response = (HttpWebResponse)state.Request.EndGetResponse(result)) {
                    // ReSharper disable AssignNullToNotNullAttribute
                    using (StreamReader responseReader = new StreamReader(response.GetResponseStream())) {
                        // ReSharper restore AssignNullToNotNullAttribute
                        responseText = responseReader.ReadToEnd();
                    }
                    RaiseHeartbeatSentEvent(state.Data, response, responseText);
                }

                // try parse response as server Url, if needed
                string replyString = responseText.Trim();
                ParseHeartbeatResponse(replyString);
            } catch (Exception ex) {
                LogHeartbeatError(state, ex);
                heartBeatRequest.ServicePoint.CloseConnectionGroup(null);
            }
        }
Пример #2
0
        // Called when the heartbeat server responds.
        static void ResponseCallback(IAsyncResult result)
        {
            if (Server.IsShuttingDown)
            {
                return;
            }
            HeartbeatRequestState state = (HeartbeatRequestState)result.AsyncState;

            try {
                string responseText;
                using (HttpWebResponse response = (HttpWebResponse)state.Request.EndGetResponse(result)) {
                    // ReSharper disable AssignNullToNotNullAttribute
                    using (StreamReader responseReader = new StreamReader(response.GetResponseStream())) {
                        // ReSharper restore AssignNullToNotNullAttribute
                        responseText = responseReader.ReadToEnd();
                    }
                    RaiseHeartbeatSentEvent(state.Data, response, responseText);
                }

                // try parse response as server Uri, if needed
                if (state.GetServerUri)
                {
                    string replyString = responseText.Trim();
                    if (replyString.StartsWith("bad heartbeat", StringComparison.OrdinalIgnoreCase))
                    {
                        Logger.Log(LogType.Error, "Heartbeat: {0}", replyString);
                    }
                    else
                    {
                        try {
                            Uri newUri = new Uri(replyString);
                            Uri oldUri = Server.Uri;
                            if (newUri != oldUri)
                            {
                                Server.Uri = newUri;
                                RaiseUriChangedEvent(oldUri, newUri);
                            }
                        } catch (UriFormatException) {
                            Logger.Log(LogType.Error,
                                       "Heartbeat: Server replied with: {0}",
                                       replyString);
                        }
                    }
                }
            } catch (Exception ex) {
                if (ex is WebException || ex is IOException)
                {
                    Logger.Log(LogType.Warning,
                               "Heartbeat: {0} is probably down ({1})",
                               state.Request.RequestUri.Host,
                               ex.Message);
                }
                else
                {
                    Logger.Log(LogType.Error, "Heartbeat: {0}", ex);
                }
            }
        }
Пример #3
0
 static void SendMinecraftNetBeat() {
     HeartbeatData data = new HeartbeatData( MinecraftNetUri );
     if( !RaiseHeartbeatSendingEvent( data, MinecraftNetUri, true ) ) {
         return;
     }
     minecraftNetRequest = CreateRequest( data.CreateUri() );
     var state = new HeartbeatRequestState( minecraftNetRequest, data );
     minecraftNetRequest.BeginGetResponse( ResponseCallback, state );
 }
Пример #4
0
 static void SendMinecraftNetBeat()
 {
     HeartbeatData data = new HeartbeatData( MinecraftNetUri );
     if( !RaiseHeartbeatSendingEvent( data, MinecraftNetUri, true ) ) {
         return;
     }
     HttpWebRequest request = CreateRequest( data.CreateUri() );
     var state = new HeartbeatRequestState( request, data, true );
     request.BeginGetResponse( ResponseCallback, state );
 }
Пример #5
0
        static void SendClassiCubeBeat()
        {
            HeartbeatData data = new HeartbeatData(ClassiCubeNetUri);

            if (!RaiseHeartbeatSendingEvent(data, ClassiCubeNetUri, true))
            {
                return;
            }
            minecraftNetRequest = CreateRequest(data.CreateUri(Salt2));
            var state = new HeartbeatRequestState(minecraftNetRequest, data, true);

            minecraftNetRequest.BeginGetResponse(ResponseCallback, state);
        }
Пример #6
0
        static void SendMinecraftNetBeat()
        {
            HeartbeatData data = new HeartbeatData(HeartbeatServerUrl);

            if (!RaiseHeartbeatSendingEvent(data, HeartbeatServerUrl))
            {
                return;
            }
            minecraftNetRequest = CreateRequest(data.CreateUri());
            var state = new HeartbeatRequestState(minecraftNetRequest, data);

            minecraftNetRequest.BeginGetResponse(ResponseCallback, state);
        }
Пример #7
0
        static void SendWoMDirectBeat()
        {
            HeartbeatData data = new HeartbeatData( WoMDirectUri );

            // we dont want WoM redirecting back to minecraft.net
            data.CustomData["noforward"] = "1";

            if( !RaiseHeartbeatSendingEvent( data, WoMDirectUri, false ) ) {
                return;
            }
            HttpWebRequest request = CreateRequest( data.CreateUri() );
            var state = new HeartbeatRequestState( request, data, false );
            request.BeginGetResponse( ResponseCallback, state );
        }
Пример #8
0
        static void SendHeartBeat()
        {
            HeartbeatData data = new HeartbeatData(HeartbeatServerUrl);

            if (!RaiseHeartbeatSendingEvent(data, HeartbeatServerUrl))
            {
                return;
            }

            try {
                heartBeatRequest = CreateRequest(data.CreateUri());
            } catch (Exception ex) {
                Logger.Log(LogType.Debug, ex.ToString());
                return;
            }

            var state = new HeartbeatRequestState(heartBeatRequest, data);

            heartBeatRequest.BeginGetResponse(ResponseCallback, state);
        }
Пример #9
0
        static void SendWoMDirectBeat()
        {
            HeartbeatData data = new HeartbeatData(WoMDirectUri);

            // we dont want WoM redirecting back to minecraft.net
            data.CustomData["noforward"] = "1";

            // wom description and flags
            data.CustomData["desc"]  = ConfigKey.WoMDirectDescription.GetString();
            data.CustomData["flags"] = ConfigKey.WoMDirectFlags.GetString();

            if (!RaiseHeartbeatSendingEvent(data, WoMDirectUri, false))
            {
                return;
            }
            womDirectRequest = CreateRequest(data.CreateUri());
            var state = new HeartbeatRequestState(womDirectRequest, data, false);

            womDirectRequest.BeginGetResponse(ResponseCallback, state);
        }
Пример #10
0
        static void LogHeartbeatError(HeartbeatRequestState state, Exception ex)
        {
            if (ex is WebException || ex is IOException)
            {
                string host = state.Request.RequestUri.Host;
                Logger.Log(LogType.Warning, "Heartbeat: {0} is probably down ({1})", host, ex.Message);

                // avoid leaking resources in case of error
                try {
                    WebException webEx = ex as WebException;
                    if (webEx != null && webEx.Response != null)
                    {
                        webEx.Response.Close();
                    }
                } catch { }
            }
            else
            {
                Logger.Log(LogType.Error, "Heartbeat: {0}", ex);
            }
        }
Пример #11
0
        static void SendWoMDirectBeat() {
            HeartbeatData data = new HeartbeatData( WoMDirectUri );

            // we dont want WoM redirecting back to minecraft.net
            data.CustomData["noforward"] = "1";

            // wom description and flags
            data.CustomData["desc"] = ConfigKey.WoMDirectDescription.GetString();
            data.CustomData["flags"] = ConfigKey.WoMDirectFlags.GetString();

            if( !RaiseHeartbeatSendingEvent( data, WoMDirectUri, false ) ) {
                return;
            }
            womDirectRequest = CreateRequest( data.CreateUri() );
            var state = new HeartbeatRequestState( womDirectRequest, data, false );
            womDirectRequest.BeginGetResponse( ResponseCallback, state );
        }
Пример #12
0
        static void SendWoMDirectBeat() {
            HeartbeatData data = new HeartbeatData( WoMDirectUri );

            // we dont want WoM redirecting back to minecraft.net
            data.CustomData["noforward"] = "1";

            if( !RaiseHeartbeatSendingEvent( data, WoMDirectUri, false ) ) {
                return;
            }
            womDirectRequest = CreateRequest( data.CreateUri() );
            var state = new HeartbeatRequestState( womDirectRequest, data, false );
            womDirectRequest.BeginGetResponse( ResponseCallback, state );
        }
Пример #13
0
 static void SendHeartBeat()
 {
     HeartbeatData data = new HeartbeatData(HeartbeatServerUrl);
     if (!RaiseHeartbeatSendingEvent(data, HeartbeatServerUrl))
     {
         return;
     }
     try {
         heartBeatRequest = CreateRequest(data.CreateUri());
         } catch (Exception UriFormatException) {
             Logger.Log(LogType.Debug, UriFormatException.ToString());
             return;
         }
     var state = new HeartbeatRequestState(heartBeatRequest, data);
     heartBeatRequest.BeginGetResponse(ResponseCallback, state);
     
 }