예제 #1
0
        private async void HandleDownloadedData(object sender, DownloadDataResponse e)
        {
            if (_disposed)
            {
                return;
            }

            await HandleDownloadedData(e);

            OnDataDownloaded();
        }
예제 #2
0
        internal static void HandleDataChanges <TUser>(object sender, UpdatedDataBatch updatedDataBatch)
        {
            var hubContext = GlobalHost.ConnectionManager.GetConnectionContext <RealmiusPersistentConnection <TUser> >();

            foreach (var item in updatedDataBatch.Items)
            {
                var download = new DownloadDataResponse();
                download.ChangedObjects.Add(item.DownloadResponseItem);
                var date = DateTimeOffset.UtcNow;

                var tags = new List <string>
                {
                    item.Tag0, item.Tag1, item.Tag2, item.Tag3
                };

                download.LastChange = tags.Where(x => x != null).Distinct().ToDictionary(x => x, x => date);
                var msg = RealmiusPersistentConnection <TUser> .Serialize(download);

                hubContext.Groups.Send(tags, $"{MethodConstants.ClientDataDownloaded}{msg}");
            }
        }
예제 #3
0
        private async Task HandleDownloadedData(DownloadDataResponse result)
        {
            Logger.Info($"HandleDownloadedData: {result?.LastChange}");
            lock (_handleDownloadDataLock)
            {
                try
                {
                    var realmLocal = _realmFactoryMethod();
                    var realmius   = CreateRealmius();
                    realmius.Refresh();
                    realmLocal.Refresh();

                    var changedObjects = result.ChangedObjects.ToList();

                    StoreChangedObjects(changedObjects, realmius, realmLocal);

                    //if (result.ChangedObjects.Any())
                    {
                        var syncOptions = realmius.Find <SyncConfiguration>(1);
                        foreach (KeyValuePair <string, DateTimeOffset> dateTimeOffset in result.LastChange)
                        {
                            if (result.LastChangeContainsNewTags || syncOptions.LastDownloadedTags.ContainsKey(dateTimeOffset.Key))
                            {
                                syncOptions.LastDownloadedTags[dateTimeOffset.Key] = dateTimeOffset.Value;
                            }
                        }
                        realmius.Write(() =>
                        {
                            syncOptions.SaveLastDownloadedTags();
                        });
                        _apiClient.UpdateOptions(GetOptions(syncOptions));
                    }
                }
                catch (Exception ex)
                {
                    Logger.Info("HandleDownloadedData");
                    Logger.Exception(ex);
                }
            }
        }
        /// <summary>
        /// Obtain a copy of the current documents specified by the signatureRequestId parameter.
        /// If the files are currently being prepared, a status code of 409 will be returned instead.
        /// </summary>
        /// <param name="signatureRequestId">The id of the SignatureRequest to retrieve.</param>
        /// <param name="fileType">Set to <see cref="FileType.Pdf" /> for a single merged document or
        /// <see cref="FileType.Zip" /> for a collection of individual documents.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentException">Signature request id is required.</exception>
        public Task <DownloadDataResponse> GetFilesAsync(string signatureRequestId, FileType fileType)
        {
            if (string.IsNullOrEmpty(signatureRequestId))
            {
                throw new ArgumentException("Signature request id is required.");
            }

            var ft  = fileType == FileType.Zip ? "zip" : "pdf";
            var url = $"{SignatureUrl}/files/{signatureRequestId}?file_type={ft}";

            _log.Requesting("GET", url);
            var resp = _client.GetAsync(url)
                       .ContinueWith(t =>
            {
                var apiR = new DownloadDataResponse();
                apiR.FillExtraValues(t.Result);
                apiR.FileResponse = t.Result;
                return(apiR);
            });

            return(resp);
        }
예제 #5
0
        public static void AddUserGroup(Func <TUser, bool> userPredicate, string group)
        {
            var connectionIds = Connections.Where(x => userPredicate(x.Value));
            var connection    = GlobalHost.ConnectionManager.GetConnectionContext <RealmiusPersistentConnection <TUser> >();

            foreach (KeyValuePair <string, TUser> connectionId in connectionIds)
            {
                connection.Groups.Add(connectionId.Key, group);

                var tags = ProcessorStatic.GetTagsForUser(connectionId.Value);
                if (tags.Contains(group))
                {
                    continue;
                }

                tags.Add(group);
                //include data for the tag
                var changes = ProcessorStatic.Download(new DownloadDataRequest()
                {
                    LastChangeTime = new Dictionary <string, DateTimeOffset>()
                    {
                        { group, DateTimeOffset.MinValue }
                    },
                    Types = ProcessorStatic.Configuration.TypesToSync.Select(x => x.Name),
                    OnlyDownloadSpecifiedTags = true,
                }, connectionId.Value);

                var downloadData = new DownloadDataResponse()
                {
                    ChangedObjects = changes.ChangedObjects,
                    LastChange     = new Dictionary <string, DateTimeOffset>()
                    {
                        { group, DateTimeOffset.UtcNow }
                    },
                    LastChangeContainsNewTags = true,
                };
                connection.Connection.Send(connectionId.Key, MethodConstants.ClientDataDownloaded + Serialize(downloadData));
            }
        }
예제 #6
0
 protected virtual void OnNewDataDownloaded(DownloadDataResponse e)
 {
     NewDataDownloaded?.Invoke(this, e);
 }
예제 #7
0
    /// <summary>
    /// 拉取排行榜信息
    /// </summary>
    /// <param name="form"></param>
    /// <param name="OnSucceed"></param>
    /// <returns></returns>
    public IEnumerator DownloadRecord(CategoryInstance instance, Action <ArrayList> OnSucceed, Action <string> OnFail)
    {
        if (!CanRefreshRankData(instance))
        {
            List <RankInstance> instances;
            rankDataDict.TryGetValue(instance, out instances);
            if (instances != null && instances.Count > 0)
            {
                if (OnSucceed != null)
                {
                    ArrayList dataList = new ArrayList(instances);
                    OnSucceed(dataList);
                }
            }
            else
            {
                if (OnFail != null)
                {
                    string msg = LanguageController.Instance.GetLanguage("Text_20071");
                    OnFail(msg);
                }
            }
            yield break;
        }

        WWWForm form = new WWWForm();

        form.AddField("userId", GameManager.Instance.UserID);
        form.AddField("jwttoken", GameManager.Instance.Token);
        form.AddField("model", (int)instance.patternID + 1);
        form.AddField("num", (int)instance.amountID + 1);
        form.AddField("calcu", (int)instance.symbolID + 1);
        form.AddField("digit", (int)instance.digitID + 2);
        form.AddField("operate", (int)instance.operandID + 2);

        WWW www = new WWW(DownloadURL, form);

        float responseTime = 0;

        while (!www.isDone && responseTime < TimeOut)
        {
            responseTime += Time.deltaTime;
            yield return(www);
        }

        string message = "";

        if (www.isDone)
        {
            DownloadDataResponse response = JsonUtility.FromJson <DownloadDataResponse>(www.text);
            if (response != null)
            {
                if (response.code == (int)CodeID.SUCCESS)
                {
                    MyDebug.LogGreen("Download Rank Data Succeed!");
                    lastRefreshTimeDict[instance] = DateTime.Now;
                    if (response.data != null && response.data.Count > 0)
                    {
                        rankDataDict[instance] = response.data;
                        if (OnSucceed != null)
                        {
                            ArrayList dataList = new ArrayList(response.data);
                            OnSucceed(dataList);
                        }
                        yield break;
                    }
                    else
                    {
                        message = LanguageController.Instance.GetLanguage("Text_20071");
                    }
                }
                else if (response.code == (int)CodeID.GAME_VERSION_ERROR)
                {
                    MyDebug.LogYellow("Download Rank Data Fail:" + response.code);
                    message = LanguageController.Instance.GetLanguage("Text_20079");
                }
                else
                {
                    MyDebug.LogYellow("Download Rank Data Fail:" + response.code);
                    message = LanguageController.Instance.GetLanguage("Text_20066");
                }
            }
            else
            {
                MyDebug.LogYellow("Download Rank Data Fail: Message Is Not Response!");
                message = LanguageController.Instance.GetLanguage("Text_20066");
            }
        }
        else
        {
            MyDebug.LogYellow("Download Rank Data Fail: Long Time!");
            message = LanguageController.Instance.GetLanguage("Text_20067");
        }

        if (OnFail != null)
        {
            OnFail(message);
        }
    }
 protected virtual void OnNewDataDownloaded(DownloadDataResponse e)
 {
     Logger.Info("OnNewDataDownloaded");
     NewDataDownloaded?.Invoke(this, e);
 }
예제 #9
0
 private void CallDataDownloaded(string connectionId, DownloadDataResponse data)
 {
     Send(connectionId, MethodConstants.ClientDataDownloaded, data);
 }