Ejemplo n.º 1
0
        public void PushRecordsAsync(PushRecordsRequest request, CloudSaveCallback <PushRecordsResponse> callback)
        {
            if (Logger.LoggingConfig.LogHttpOption == LogHttpOption.Always)
            {
                _logger.DebugFormat("INTERNAL LOG - Push request is : {0}", JsonUtility.ToJson(request));
            }

            _credentialProvider.GetOrRefreshCredentialAsync((err, credential) =>
            {
                if (err != null)
                {
                    var exception = err as Exception;
                    callback(
                        exception != null
                            ? new CredentialException("Failed to GetOrRefresh credential.", exception)
                            : new CredentialException(err.ToString()), null);
                    return;
                }

                byte[] requestBody = request.ToByteArray();

                SuperAgent.Post(Endpoints.CloudSaveEndpoint + "/identities/" + request.identityId + "/datasets/" +
                                request.DatasetName)
                .Set("Authorization", "Bearer " + credential.token)
                .Set("Content-Type", "application/json; charset=utf-8")
                .Send(requestBody)
                .End((agentErr, response) =>
                {
                    if (agentErr != null)
                    {
                        callback(agentErr, null);
                        return;
                    }

                    // todo:
                    // handle statusCode != 200.
                    // call _credentialProvider.Logout() in case of invalid token.

                    var jsonStr = Encoding.UTF8.GetString(response.Body);

                    if (Logger.LoggingConfig.LogHttpOption == LogHttpOption.Always)
                    {
                        _logger.DebugFormat("INTERNAL LOG - Push response is : {0}", jsonStr);
                    }

                    var pushRecordsResponse = JsonUtility.FromJson <PushRecordsResponse>(jsonStr);

                    callback(null, pushRecordsResponse);
                });
            });
        }
        public void PutRecordsAsync(string identityId, string datasetName, string syncRevisions, string syncSessionToken,
                                    IList <Record> records, CloudSaveCallback <DatasetPutResult> callback)
        {
            var request = new PushRecordsRequest
            {
                identityId  = identityId,
                syncCount   = syncRevisions,
                DatasetName = datasetName,
                deviceId    = SystemInfo.deviceUniqueIdentifier,
                // TODO: disable syncSession for now.
//                syncSessionToken = syncSessionToken,
            };

            var patches = new List <RecordPatch>();

            foreach (var record in records)
            {
                patches.Add(RecordToPatch(record));
            }

            request.recordPatches = patches.ToArray();

            _client.PushRecordsAsync(request, (err, result) =>
            {
                if (err != null)
                {
                    callback(err, null);
                    return;
                }

                var datasetRecords = new List <Record>();
                foreach (var record in result.records)
                {
                    datasetRecords.Add(new Record.Builder(record.key)
                                       .Value(record.value)
                                       .SyncCount(record.syncCount)
                                       .SyncRegion(record.lastModifiedRegion)
                                       .LastModifiedBy(record.lastModifiedBy)
                                       .LastModifiedDate(SdkUtils.ConvertFromUnixEpochSeconds(record.lastModifiedDate))
                                       .Build()
                                       );
                }

                callback(null, new DatasetPutResult
                {
                    Records       = datasetRecords,
                    SyncRevisions = SdkUtils.ConvertStringToSyncRevision(result.syncCount)
                });
            });
        }
Ejemplo n.º 3
0
        public void PullRecordsAsync(PullRecordsRequest request, CloudSaveCallback <PullRecordsResponse> callback)
        {
            if (Logger.LoggingConfig.LogHttpOption == LogHttpOption.Always)
            {
                _logger.DebugFormat("INTERNAL LOG - Pull request is : {0}", JsonUtility.ToJson(request));
            }

            _credentialProvider.GetOrRefreshCredentialAsync((err, credential) =>
            {
                if (err != null)
                {
                    var exception = err as Exception;
                    callback(
                        exception != null
                            ? new CredentialException("Failed to GetOrRefresh credential.", exception)
                            : new CredentialException(err.ToString()), null);
                    return;
                }

                SuperAgent.Get(Endpoints.CloudSaveEndpoint + "/identities/" + request.IdentityId + "/datasets/" +
                               request.DatasetName + "/records")
                .Query("syncCount", request.OldSyncRevisions)
                .Set("Authorization", "Bearer " + credential.token)
                .End((agentErr, response) =>
                {
                    if (agentErr != null)
                    {
                        callback(agentErr, null);
                        return;
                    }

                    // todo:
                    // call _credentialProvider.Logout() in case of invalid token.

                    var jsonStr = Encoding.UTF8.GetString(response.Body);

                    if (Logger.LoggingConfig.LogHttpOption == LogHttpOption.Always)
                    {
                        _logger.DebugFormat("Pull response is : {0}", jsonStr);
                    }

                    var pullRecordsResponse = JsonUtility.FromJson <PullRecordsResponse>(jsonStr);

                    callback(null, pullRecordsResponse);
                });
            });
        }
        public void ListUpdatesAsync(string identityId, string datasetName, IList <SyncRevision> syncRevisions,
                                     CloudSaveCallback <DatasetUpdates> callback)
        {
            var lastSyncRevisionStr = SdkUtils.ConvertSyncRevisionToString(syncRevisions);
            var request             = new PullRecordsRequest
            {
                IdentityId       = identityId,
                DatasetName      = datasetName,
                OldSyncRevisions = lastSyncRevisionStr,
            };

            _client.PullRecordsAsync(request, (err, pullRecordsResponse) =>
            {
                if (err != null)
                {
                    callback(err, null);
                    return;
                }

                var records        = pullRecordsResponse.Records;
                var datasetRecords = new List <Record>();
                if (records.Count > 0)
                {
                    foreach (var remoteRecord in records)
                    {
                        datasetRecords.Add(new Record.Builder(remoteRecord.key)
                                           .Value(remoteRecord.value)
                                           .SyncRegion(remoteRecord.lastModifiedRegion)
                                           .SyncCount(remoteRecord.syncCount)
                                           .LastModifiedBy(remoteRecord.lastModifiedBy)
                                           .LastModifiedDate(SdkUtils.ConvertFromUnixEpochSeconds(remoteRecord.lastModifiedDate))
                                           .DeviceLastModifiedDate(SdkUtils.ConvertFromUnixEpochSeconds(remoteRecord.deviceLastModifiedDate))
                                           .Build()
                                           );
                    }
                }
                callback(null, new DatasetUpdates
                {
                    IdentityId       = pullRecordsResponse.identityId,
                    DatasetName      = pullRecordsResponse.name,
                    SyncSessionToken = pullRecordsResponse.syncSessionToken,
                    SyncRevisions    = SdkUtils.ConvertStringToSyncRevision(pullRecordsResponse.syncCount),
                    Records          = datasetRecords
                });
            });
        }
 public void End(CloudSaveCallback <SuperAgentResponse> callback)
 {
     Callback = callback;
     WebRequestQueue.Instance.Enqueue(this);
 }