Ejemplo n.º 1
0
        public List <SerializedPlayerItems> DownloadBuddyItems(List <long> buddies)
        {
            List <SerializedPlayerItems> result = new List <SerializedPlayerItems>();

            if (_downloadCooldown.IsReady)
            {
                _downloadCooldown.Reset();

                List <string> compressedJsonData = DownloadBuddyData(buddies);

                List <string> jsonData = compressedJsonData
                                         .Select(GzipCompressionHandler.DecodeBase64AndDecompress) // For some reason the string result is quoted, strip them.
                                         .ToList();

                foreach (string json in jsonData)
                {
                    if (!string.IsNullOrEmpty(json))
                    {
                        result.Add(JObject.Parse(json).ToObject <SerializedPlayerItems>());
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        public void Start()
        {
            if (_t != null)
            {
                throw new ArgumentException("Max one thread running per instance");
            }

            _t = new Thread(() => {
                ExceptionReporter.EnableLogUnhandledOnThread();

                while (!_isShuttingDown)
                {
                    if (_cooldown.IsReady)
                    {
                        Process();
                        _cooldown.Reset();
                    }

                    Thread.Sleep(1);
                }
            });

            _t.Start();
        }
Ejemplo n.º 3
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            if (Thread.CurrentThread.Name == null)
            {
                Thread.CurrentThread.Name = "BuddyBackground";
            }

            BackgroundWorker worker       = sender as BackgroundWorker;
            Serializer       serializer   = new Serializer(_buddyItemDao, _playerItemDao, _settings);
            Synchronizer     synchronizer = new Synchronizer(_settings);


            worker?.ReportProgress(ProgressSetUid, synchronizer.CreateUserId());

            while (!worker.CancellationPending)
            {
                try {
                    Thread.Sleep(10);

                    if (_cooldown.IsReady)
                    {
                        // Sync up, if UI thread has sent us any data.
                        SerializedPlayerItems element = serializer.Serialize();
                        if (element != null)
                        {
                            if (!synchronizer.UploadBuddyData(element))
                            {
                                Logger.Warn("Buddy items upload failed");
                            }
                        }
                        else
                        {
                            Logger.Warn("Buddy Items upload NULL!?");
                        }



                        // Sync down, and pass data to UI thread
                        List <SerializedPlayerItems> syncdownData = synchronizer.DownloadBuddyItems(_subscribers);
                        if (syncdownData != null && syncdownData.Count > 0)
                        {
                            Logger.InfoFormat("Downloaded itemdata for {0} buddies.", syncdownData.Count);

                            var deserializer = new Serializer(_buddyItemDao, _playerItemDao, _settings);
                            foreach (var item in syncdownData)
                            {
                                if (item.UserId > 0)
                                {
                                    deserializer.DeserializeAndSave(item);
                                }
                            }

                            worker.ReportProgress(ProgressStoreBuddydata);
                        }

                        _cooldown.Reset();
                    }
                }
                catch (NullReferenceException ex) {
                    Logger.Info("The following exception is logged, but can safely be ignored:");
                    Logger.Warn(ex.Message);
                    Logger.Warn(ex.StackTrace);
                }
                catch (Exception ex) {
                    Logger.Error(ex.Message);
                    Logger.Error(ex.StackTrace);
                    ExceptionReporter.ReportException(ex);
                }
            }
        }
Ejemplo n.º 4
0
        private BuddyUploadResponse UploadBuddyData(string postData, string url, bool forced = false)
        {
            if (_uploadCooldown.IsOnCooldown && !forced)
            {
                Logger.Info("Buddy data not uploaded, still on cooldown..");
                return(null);
            }


            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

            if (request == null)
            {
                Logger.Warn("Could not create HttpWebRequest");
                return(null);
            }
            var encoding = new UTF8Encoding();

            byte[] data = encoding.GetBytes(postData);

            request.Method = "POST";
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
            request.Headers.Add(HttpRequestHeader.ContentEncoding, "gzip");
            request.ContentType = "application/x-www-form-urlencoded";
            //request.ContentLength = data.Length;

            try {
                using (Stream stream = request.GetRequestStream()) {
                    stream.Write(data, 0, data.Length);
                }
                // threshold
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        Logger.Info("Failed to upload buddy item data.");
                        return(new BuddyUploadResponse {
                            Status = (int)response.StatusCode
                        });
                    }

                    string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                    Logger.Debug(responseString);
                    Logger.Info("Uploaded buddy item data.");

                    _uploadCooldown.Reset();
                    return(new BuddyUploadResponse {
                        Content = responseString,
                        Status = 200
                    });
                }
            }
            catch (WebException ex) {
                Logger.Info("Failed to upload buddy item data.");

                using (WebResponse response = ex.Response) {
                    HttpWebResponse httpResponse = (HttpWebResponse)response;
                    if (httpResponse.StatusCode == HttpStatusCode.Unauthorized)
                    {
                        return(new BuddyUploadResponse {
                            Status = (int)httpResponse.StatusCode
                        });
                    }
                }

                if (ex.Status != WebExceptionStatus.NameResolutionFailure && ex.Status != WebExceptionStatus.Timeout)
                {
                    Logger.Warn(ex.Message);
                    Logger.Warn(ex.StackTrace);
                    ExceptionReporter.ReportException(ex);
                }
                else
                {
                    Logger.Info("Could not resolve DNS for buddy server, skipping upload.");
                }
            }
            catch (IOException ex) {
                Logger.Warn(ex.Message);
                Logger.Warn(ex.StackTrace);
            }
            catch (Exception ex) {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                ExceptionReporter.ReportException(ex);
            }

            return(null);
        }