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) }); }); }
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); }