コード例 #1
0
        public bool PostMessage(JObject msg)
        {
            try
            {
                BaseUtils.ResponseData resp = RequestPost(msg.ToString(), "");

                if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (System.Net.WebException ex)
            {
                System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse;
                string responsetext = null;
                using (var responsestream = response.GetResponseStream())
                {
                    using (var reader = new System.IO.StreamReader(responsestream))
                    {
                        responsetext = reader.ReadToEnd();
                    }
                }

                System.Diagnostics.Trace.WriteLine($"EDDN message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nResponse: {responsetext}\nEDDN Message: {msg.ToString()}");
                return(false);
            }
        }
コード例 #2
0
ファイル: EGOClass.cs プロジェクト: wokket/EDDiscovery
        public bool PostMessage(JObject msg, ref bool recordSet)
        {
            try
            {
                BaseUtils.ResponseData resp = RequestPost(msg.ToString(), "");

                JObject result = JObject.Parse(resp.Body);
                JObject res    = (JObject)result["response"];
                if ((bool)res["is_valid"])
                {
                    JObject conf = (JObject)res["confirmation_message"];
                    recordSet = (bool)conf["unique_record_holder"];
                    return(true);
                }
                else
                {
                    System.Diagnostics.Trace.WriteLine($"EGO message post failed - status: {res["validation_messages"].ToNullSafeString()}\nEGO Message: {msg.ToString().Replace(ego_apikey, "**********").Replace(auth_code, "*********")}");
                    return(false);
                }
            }
            catch (System.Net.WebException ex)
            {
                System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse;
                System.Diagnostics.Trace.WriteLine($"EGO message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nEGO Message: {msg.ToString().Replace(ego_apikey, "**********").Replace(auth_code, "*********")}");
                return(false);
            }
        }
コード例 #3
0
        public bool PostMessage(JObject msg)
        {
            if (igau_address.IsEmpty())
            {
                return(false);
            }

            try
            {
                BaseUtils.ResponseData resp = RequestPost(msg.ToString(), "");

                var result = JToken.Parse(resp.Body);

                if (result.Value <string>() == "SUCCESS")
                {
                    return(true);
                }
                else
                {
                    var res    = result["response"];
                    var errmsg = res?.Value <string>("errorMessage");
                    Trace.WriteLine($"IGAU message post failed: {errmsg}");
                    return(false);
                }
            }
            catch (System.Net.WebException ex)
            {
                System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse;
                System.Diagnostics.Trace.WriteLine($"IGAU message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nIGAU Message: {msg.ToString()}");
                return(false);
            }
        }
コード例 #4
0
ファイル: EDDNClass.cs プロジェクト: ndefilippis/EDDiscovery
        public bool PostMessage(JObject msg)
        {
            try
            {
                BaseUtils.ResponseData resp = RequestPost(msg.ToString(), "");

                if (resp.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (System.Net.WebException ex)
            {
                System.Net.HttpWebResponse response = ex.Response as System.Net.HttpWebResponse;
                System.Diagnostics.Trace.WriteLine($"EDDN message post failed - status: {response?.StatusCode.ToString() ?? ex.Status.ToString()}\nEDDN Message: {msg.ToString()}");
                return(false);
            }
        }
コード例 #5
0
        private void FetcherThreadProc()
        {
            Trace.WriteLine($"EDSM Thread logs start");
            DateTime lastCommentFetch = DateTime.MinValue;

            int waittime = 1000; // initial waittime, will be reestimated later

            DateTime curtime = DateTime.UtcNow;

            KeyName(out string latestdatekeyname, out string oldestdatekeyname);

            while (!ExitRequested.WaitOne(waittime))
            {
                if (ExitRequested.WaitOne(0))
                {
                    return;
                }

                EDSMClass edsm = new EDSMClass(Commander);

                // logic checked 21/12/2018 RJP

                if (edsm.ValidCredentials && Commander.SyncFromEdsm)
                {
                    if (DateTime.UtcNow > lastCommentFetch.AddHours(1))
                    {
                        edsm.GetComments(l => Trace.WriteLine(l));
                        lastCommentFetch = DateTime.UtcNow;
                    }

                    DateTime latestentry = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingDate(latestdatekeyname, GammaStart);      // lastest entry
                    DateTime oldestentry = EliteDangerousCore.DB.UserDatabase.Instance.GetSettingDate(oldestdatekeyname, DateTime.UtcNow); // oldest entry

                    DateTime logstarttime           = DateTime.MinValue;                                                                   // return what we got..
                    DateTime logendtime             = DateTime.MinValue;
                    List <JournalFSDJump>  edsmlogs = null;
                    BaseUtils.ResponseData response = default(BaseUtils.ResponseData);
                    int res = -1;

                    if (DateTime.UtcNow.Subtract(latestentry).TotalMinutes >= EDSMMaxLogAgeMinutes)     // is latest entry old?
                    {
                        DateTime askfor = DateTime.UtcNow;
                        System.Diagnostics.Debug.WriteLine("Fetch latest since Curtime > lastestentry + gap " + askfor.ToStringZulu());
                        res = edsm.GetLogs(null, askfor, out edsmlogs, out logstarttime, out logendtime, out response);
                        //res = 100;  logstarttime = askfor.AddDays(-7); logendtime = askfor; // debug it
                    }
                    else if (oldestentry > GammaStart)      // if oldest entry younger than gamma?
                    {
                        System.Diagnostics.Debug.WriteLine("Go back in time to gamma ");
                        res = edsm.GetLogs(null, oldestentry, out edsmlogs, out logstarttime, out logendtime, out response);
                        //res = 100; logstarttime = oldestentry.AddDays(-7); logendtime = oldestentry; // debug it
                    }

                    if (res == 100)     // hunky dory - note if Anthor faults, we just retry again and again
                    {
                        System.Diagnostics.Debug.WriteLine("Data stored from " + oldestentry.ToStringZulu() + " -> " + latestentry.ToStringZulu());
                        System.Diagnostics.Debug.WriteLine("Process logs from " + logstarttime.ToStringZulu() + " => " + logendtime.ToStringZulu());
                        if (edsmlogs != null && edsmlogs.Count > 0)     // if anything to process..
                        {
                            Process(edsmlogs, logstarttime, logendtime);
                        }

                        if (logendtime > latestentry)
                        {
                            EliteDangerousCore.DB.UserDatabase.Instance.PutSettingDate(latestdatekeyname, logendtime);
                        }

                        if (logstarttime < oldestentry)
                        {
                            EliteDangerousCore.DB.UserDatabase.Instance.PutSettingDate(oldestdatekeyname, logstarttime);
                        }
                    }
                    else if (res != -1)
                    {
                        System.Diagnostics.Debug.WriteLine("EDSM Log request rejected with " + res);
                    }

                    if (response.Headers != null &&
                        response.Headers["X-Rate-Limit-Limit"] != null &&
                        response.Headers["X-Rate-Limit-Remaining"] != null &&
                        response.Headers["X-Rate-Limit-Reset"] != null &&
                        Int32.TryParse(response.Headers["X-Rate-Limit-Limit"], out int ratelimitlimit) &&
                        Int32.TryParse(response.Headers["X-Rate-Limit-Remaining"], out int ratelimitremain) &&
                        Int32.TryParse(response.Headers["X-Rate-Limit-Reset"], out int ratelimitreset))
                    {
                        if (ratelimitremain < ratelimitlimit * 2 / 4)                              // lets keep at least X remaining for other purposes later..
                        {
                            waittime = 1000 * ratelimitreset / (ratelimitlimit - ratelimitremain); // slow down to its pace now.. example 878/(360-272) = 10 seconds per quota
                        }
                        else
                        {
                            waittime = 1000;        // 1 second so we don't thrash
                        }
                        System.Diagnostics.Debug.WriteLine("EDSM Log Delay Parameters {0} {1} {2} => {3}ms", ratelimitlimit, ratelimitremain, ratelimitreset, waittime);
                    }
                }
            }
        }
コード例 #6
0
        // Protected against bad JSON  Visual Inspection Nov 2020 - using Int()

        public int GetLogs(DateTime?starttimeutc, DateTime?endtimeutc, out List <JournalFSDJump> log, out DateTime logstarttime, out DateTime logendtime, out BaseUtils.ResponseData response)
        {
            log          = new List <JournalFSDJump>();
            logstarttime = DateTime.MaxValue;
            logendtime   = DateTime.MinValue;
            response     = new BaseUtils.ResponseData {
                Error = true, StatusCode = HttpStatusCode.Unauthorized
            };

            if (!ValidCredentials)
            {
                return(0);
            }

            string query = "get-logs?showId=1&apiKey=" + apiKey + "&commanderName=" + HttpUtility.UrlEncode(commanderName);

            if (starttimeutc != null)
            {
                query += "&startDateTime=" + HttpUtility.UrlEncode(starttimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
            }

            if (endtimeutc != null)
            {
                query += "&endDateTime=" + HttpUtility.UrlEncode(endtimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
            }

            response = RequestGet("api-logs-v1/" + query, handleException: true);

            if (response.Error)
            {
                if ((int)response.StatusCode == 429)
                {
                    return(429);
                }
                else
                {
                    return(0);
                }
            }

            var json = response.Body;

            if (json == null)
            {
                return(0);
            }

            try
            {
                JObject msg   = JObject.ParseThrowCommaEOL(json);
                int     msgnr = msg["msgnum"].Int(0);

                JArray logs = (JArray)msg["logs"];

                if (logs != null)
                {
                    string startdatestr = msg["startDateTime"].Str();
                    string enddatestr   = msg["endDateTime"].Str();
                    if (startdatestr == null || !DateTime.TryParseExact(startdatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logstarttime))
                    {
                        logstarttime = DateTime.MaxValue;
                    }
                    if (enddatestr == null || !DateTime.TryParseExact(enddatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logendtime))
                    {
                        logendtime = DateTime.MinValue;
                    }

                    var tofetch = SystemsDatabase.Instance.ExecuteWithDatabase(db =>
                    {
                        var xtofetch = new List <Tuple <JObject, ISystem> >();

                        foreach (JObject jo in logs)
                        {
                            string name    = jo["system"].Str();
                            string ts      = jo["date"].Str();
                            long id        = jo["systemId"].Long();
                            DateTime etutc = DateTime.ParseExact(ts, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); // UTC time

                            ISystem sc = DB.SystemCache.FindSystem(new SystemClass(name, id), db);                                                                                            // find in our DB only.

                            xtofetch.Add(new Tuple <JObject, ISystem>(jo, sc));
                        }

                        return(xtofetch);
                    });

                    var xlog = new List <JournalFSDJump>();

                    foreach (var js in tofetch)
                    {
                        var      jo            = js.Item1;
                        var      sc            = js.Item2;
                        string   name          = jo["system"].Str();
                        string   ts            = jo["date"].Str();
                        long     id            = jo["systemId"].Long();
                        bool     firstdiscover = jo["firstDiscover"].Bool();
                        DateTime etutc         = DateTime.ParseExact(ts, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); // UTC time

                        if (sc == null)
                        {
                            if (DateTime.UtcNow.Subtract(etutc).TotalHours < 6) // Avoid running into the rate limit
                            {
                                sc = GetSystem(name)?.FirstOrDefault(s => s.EDSMID == id);
                            }

                            if (sc == null)
                            {
                                sc = new SystemClass(name, id);     // make an EDSM system
                            }
                        }

                        JournalFSDJump fsd = new JournalFSDJump(etutc, sc, EDCommander.Current.MapColour, firstdiscover, true);
                        xlog.Add(fsd);
                    }

                    log = xlog;
                }

                return(msgnr);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("Failed due to " + e.ToString());
                return(499);     // BAD JSON
            }
        }
コード例 #7
0
ファイル: EDSMClass.cs プロジェクト: Zafford/EDDiscovery
        // Protected against bad JSON

        public int GetLogs(DateTime?starttimeutc, DateTime?endtimeutc, out List <JournalFSDJump> log, out DateTime logstarttime, out DateTime logendtime, out BaseUtils.ResponseData response)
        {
            log          = new List <JournalFSDJump>();
            logstarttime = DateTime.MaxValue;
            logendtime   = DateTime.MinValue;
            response     = new BaseUtils.ResponseData {
                Error = true, StatusCode = HttpStatusCode.Unauthorized
            };

            if (!ValidCredentials)
            {
                return(0);
            }

            string query = "get-logs?showId=1&apiKey=" + apiKey + "&commanderName=" + HttpUtility.UrlEncode(commanderName);

            if (starttimeutc != null)
            {
                query += "&startDateTime=" + HttpUtility.UrlEncode(starttimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
            }

            if (endtimeutc != null)
            {
                query += "&endDateTime=" + HttpUtility.UrlEncode(endtimeutc.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture));
            }

            response = RequestGet("api-logs-v1/" + query, handleException: true);

            if (response.Error)
            {
                if ((int)response.StatusCode == 429)
                {
                    return(429);
                }
                else
                {
                    return(0);
                }
            }

            var json = response.Body;

            if (json == null)
            {
                return(0);
            }

            try
            {
                JObject msg   = JObject.Parse(json);
                int     msgnr = msg["msgnum"].Int(0);

                JArray logs = (JArray)msg["logs"];

                if (logs != null)
                {
                    string startdatestr = msg["startDateTime"].Value <string>();
                    string enddatestr   = msg["endDateTime"].Value <string>();
                    if (startdatestr == null || !DateTime.TryParseExact(startdatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logstarttime))
                    {
                        logstarttime = DateTime.MaxValue;
                    }
                    if (enddatestr == null || !DateTime.TryParseExact(enddatestr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out logendtime))
                    {
                        logendtime = DateTime.MinValue;
                    }

                    using (SQLiteConnectionSystem cn = new SQLiteConnectionSystem())
                    {
                        foreach (JObject jo in logs)
                        {
                            string   name          = jo["system"].Value <string>();
                            string   ts            = jo["date"].Value <string>();
                            long     id            = jo["systemId"].Value <long>();
                            bool     firstdiscover = jo["firstDiscover"].Value <bool>();
                            DateTime etutc         = DateTime.ParseExact(ts, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal); // UTC time

                            ISystem sc = SystemClassDB.GetSystem(id, cn, SystemClassDB.SystemIDType.EdsmId, name: name);
                            if (sc == null)
                            {
                                if (DateTime.UtcNow.Subtract(etutc).TotalHours < 6) // Avoid running into the rate limit
                                {
                                    sc = GetSystemsByName(name)?.FirstOrDefault(s => s.EDSMID == id);
                                }

                                if (sc == null)
                                {
                                    sc = new SystemClass(name)
                                    {
                                        EDSMID = id
                                    };
                                }
                            }

                            JournalFSDJump fsd = new JournalFSDJump(etutc, sc, EliteConfigInstance.InstanceConfig.DefaultMapColour, firstdiscover, true);
                            log.Add(fsd);
                        }
                    }
                }

                return(msgnr);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("Failed due to " + e.ToString());
                return(499);     // BAD JSON
            }
        }