public async Task SynchroniseAsync(CommitSynchronisationCriteria criteria, Action <CommitSynchronisationResult> onComplete, Action onError)
        {
            HttpResponseMessage response;

            try
            {
                response = await synchronisationHttpClient.GetCommitsAsync(serverUriProvider.ServerUri, criteria.ClientId, criteria.PullCommitsFrom.Ticks);
            }
            catch (WebException)
            {
                onError();
                return;
            }

            if (!response.IsSuccessStatusCode)
            {
                onError();
                return;
            }

            CommitSynchronisation pullCommits = await response.ReadContentAsCommitSynchronisationAsync();

            DateTime lastPullCommitDate = criteria.PullCommitsFrom;

            pullCommits.Commits.ForEach(commit =>
            {
                synchronisableCommitSynchroniser.SynchroniseCommit(commit);
                lastPullCommitDate = commit.CreatedOn;
            });

            DateTime lastPushCommitDate = criteria.PullCommitsFrom;

            try
            {
                CommitSynchronisation pushCommits = synchronisableCommitBuilder.Build(
                    criteria.ClientId,
                    criteria.PullCommitsFrom,
                    commit => commit.OriginatesOnMachineNamed(localMachine.GetName()));

                if (pushCommits.Commits.Any())
                {
                    lastPushCommitDate = pushCommits.Commits.Last().CreatedOn;
                }

                response = await synchronisationHttpClient.PostCommitsAsync(serverUriProvider.ServerUri, pushCommits);
            }
            catch (WebException)
            {
                onError();
                return;
            }

            if (!response.IsSuccessStatusCode)
            {
                onError();
                return;
            }

            onComplete(new CommitSynchronisationResult(lastPullCommitDate, lastPushCommitDate));
        }
        public Task <HttpResponseMessage> PostCommitsAsync(Uri serverUri, CommitSynchronisation content)
        {
            LastAsyncCallServerUri          = serverUri;
            LastPostCommitsAsyncCallContent = content;
            var response = new HttpResponseMessage
            {
                StatusCode = StatusToReturn
            };

            return(Task.FromResult(response));
        }
        public async Task <IHttpActionResult> PostAsync(CommitSynchronisation toPost)
        {
            await commandHandler.Handle(new CommitSynchronisableCommits { Synchronisation = toPost });

            return(Ok());
        }
Example #4
0
 public async Task <HttpResponseMessage> PostCommitsAsync(Uri serverUri, CommitSynchronisation content)
 {
     return(await httpClientFactory.Create().PostAsJsonAsync(PostEventsSynchronisationUri.Parse(serverUri), content));
 }