private void PopulateListUpdatesAsync(string datasetName, long lastSyncCount, List <Record> records, string nextToken, AmazonCognitoSyncCallback <DatasetUpdates> callback, AsyncOptions options)
        {
            ListRecordsRequest request = new ListRecordsRequest();

            request.IdentityPoolId = identityPoolId;
            request.IdentityId     = this.GetCurrentIdentityId();
            request.DatasetName    = datasetName;
            request.LastSyncCount  = lastSyncCount;
            // mark it large enough to reduce # of requests
            request.MaxResults = 1024;
            request.NextToken  = nextToken;

            client.ListRecordsAsync(request, (responseObj) =>
            {
                ListRecordsResponse res = responseObj.Response;
                Exception ex            = responseObj.Exception;
                object obj = responseObj.state;

                if (ex != null)
                {
                    InternalSDKUtils.AsyncExecutor(() => callback(new AmazonCognitoSyncResult <DatasetUpdates>(null, ex, obj)), options);;
                }
                else
                {
                    ListRecordsResponse listRecordsResponse = res;
                    foreach (Amazon.CognitoSync.Model.Record remoteRecord in listRecordsResponse.Records)
                    {
                        //builder.addRecord(modelToRecord(remoteRecord));
                        records.Add(this.ModelToRecord(remoteRecord));
                    }
                    if (listRecordsResponse.NextToken == null)
                    {
                        DatasetUpdates updates = new DatasetUpdates(
                            datasetName,
                            records,
                            listRecordsResponse.DatasetSyncCount,
                            listRecordsResponse.SyncSessionToken,
                            listRecordsResponse.DatasetExists,
                            listRecordsResponse.DatasetDeletedAfterRequestedSyncCount,
                            listRecordsResponse.MergedDatasetNames
                            );

                        InternalSDKUtils.AsyncExecutor(() => callback(new AmazonCognitoSyncResult <DatasetUpdates>(updates, ex, obj)), options);

                        return;
                    }
                    // update last evaluated key
                    nextToken = listRecordsResponse.NextToken;

                    // emulating the while loop
                    PopulateListUpdatesAsync(datasetName, lastSyncCount, records, nextToken, callback, new AsyncOptions()
                    {
                        ExecuteCallbackOnMainThread = false, State = obj
                    });
                }
            },
                                    options);
        }
        private void PopulateListUpdates(string datasetName, long lastSyncCount, List <Record> records, string nextToken, AmazonCognitoCallback callback, object state)
        {
            {
                ListRecordsRequest request = new ListRecordsRequest();
                //appendUserAgent(request, userAgent);
                request.IdentityPoolId = identityPoolId;
                request.IdentityId     = this.GetCurrentIdentityId();
                request.DatasetName    = datasetName;
                request.LastSyncCount  = lastSyncCount;
                // mark it large enough to reduce # of requests
                request.MaxResults = 1024;
                request.NextToken  = nextToken;

                client.ListRecordsAsync(request, delegate(AmazonServiceResult result)
                {
                    if (result.Exception != null)
                    {
                        AmazonMainThreadDispatcher.ExecCallback(callback,
                                                                new AmazonCognitoResult(null, HandleException(result.Exception, "Failed to list records in dataset: " + datasetName), state));

                        return;
                    }

                    ListRecordsResponse listRecordsResponse = result.Response as ListRecordsResponse;
                    foreach (Amazon.CognitoSync.Model.Record remoteRecord in listRecordsResponse.Records)
                    {
                        //builder.addRecord(modelToRecord(remoteRecord));
                        records.Add(this.ModelToRecord(remoteRecord));
                    }
                    if (listRecordsResponse.NextToken == null)
                    {
                        DatasetUpdatesImpl updates = new DatasetUpdatesImpl(
                            datasetName,
                            records,
                            listRecordsResponse.DatasetSyncCount,
                            listRecordsResponse.SyncSessionToken,
                            listRecordsResponse.DatasetExists,
                            listRecordsResponse.DatasetDeletedAfterRequestedSyncCount,
                            listRecordsResponse.MergedDatasetNames
                            );
                        ListUpdatesResponse listUpdatesResponse = new ListUpdatesResponse
                        {
                            DatasetUpdates = updates
                        };
                        AmazonMainThreadDispatcher.ExecCallback(callback,
                                                                new AmazonCognitoResult(listUpdatesResponse, null, state));
                        return;
                    }
                    // update last evaluated key
                    nextToken = listRecordsResponse.NextToken;

                    // emulating the while loop
                    PopulateListUpdates(datasetName, lastSyncCount, records, nextToken, callback, state);
                }, state);
            }
        }
Ejemplo n.º 3
0
        private DatasetUpdates PopulateListUpdates(string datasetName, long lastSyncCount, List <Record> records, string nextToken)
        {
            ListRecordsRequest request = new ListRecordsRequest();

            request.IdentityPoolId = identityPoolId;
            request.IdentityId     = this.GetCurrentIdentityId();
            request.DatasetName    = datasetName;
            request.LastSyncCount  = lastSyncCount;
            // mark it large enough to reduce # of requests
            request.MaxResults = 1024;
            request.NextToken  = nextToken;


            ListRecordsResponse listRecordsResponse = client.ListRecords(request);

            foreach (Amazon.CognitoSync.Model.Record remoteRecord in listRecordsResponse.Records)
            {
                records.Add(ModelToRecord(remoteRecord));
            }
            if (listRecordsResponse.NextToken != null)
            {
                // update last evaluated key
                nextToken = listRecordsResponse.NextToken;
                PopulateListUpdates(datasetName, lastSyncCount, records, nextToken);
            }


            DatasetUpdates updates = new DatasetUpdates(
                datasetName,
                records,
                listRecordsResponse.DatasetSyncCount,
                listRecordsResponse.SyncSessionToken,
                listRecordsResponse.DatasetExists,
                listRecordsResponse.DatasetDeletedAfterRequestedSyncCount,
                listRecordsResponse.MergedDatasetNames
                );

            return(updates);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            ListRecordsResponse response = new ListRecordsResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("Count", targetDepth))
                {
                    var unmarshaller = IntUnmarshaller.Instance;
                    response.Count = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("DatasetDeletedAfterRequestedSyncCount", targetDepth))
                {
                    var unmarshaller = BoolUnmarshaller.Instance;
                    response.DatasetDeletedAfterRequestedSyncCount = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("DatasetExists", targetDepth))
                {
                    var unmarshaller = BoolUnmarshaller.Instance;
                    response.DatasetExists = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("DatasetSyncCount", targetDepth))
                {
                    var unmarshaller = LongUnmarshaller.Instance;
                    response.DatasetSyncCount = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("LastModifiedBy", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.LastModifiedBy = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("MergedDatasetNames", targetDepth))
                {
                    var unmarshaller = new ListUnmarshaller <string, StringUnmarshaller>(StringUnmarshaller.Instance);
                    response.MergedDatasetNames = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("NextToken", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.NextToken = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("Records", targetDepth))
                {
                    var unmarshaller = new ListUnmarshaller <Record, RecordUnmarshaller>(RecordUnmarshaller.Instance);
                    response.Records = unmarshaller.Unmarshall(context);
                    continue;
                }
                if (context.TestExpression("SyncSessionToken", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.SyncSessionToken = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }