Пример #1
0
        public override async Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip)
        {
            Guid tokenId  = item.Result.WorkId;
            Guid cancelId = await PostCompensationEndpointAddress <Guid>();

            Console.WriteLine("Compensate token {0} - confirmation Id: {1}.", tokenId, cancelId);

            return(true);
        }
Пример #2
0
 private async Task ProcessForwardMessageAsync(IRoutingSlip routingSlip)
 {
     if (routingSlip.IsCompleted == false)
     {
         if (await routingSlip.ProcessNextAsync())
             await this._send(routingSlip.ProgressUri, routingSlip);
         else
             await this._send(routingSlip.CompensationUri, routingSlip);
     }
 }
Пример #3
0
 private async Task ProcessBackwardMessageAsync(IRoutingSlip routingSlip)
 {
     if (routingSlip.IsInProgress)
     {
         if (await routingSlip.UndoLastAsync())
             await this._send(routingSlip.CompensationUri, routingSlip);
         else
             await this._send(routingSlip.ProgressUri, routingSlip);
     }
 }
Пример #4
0
 private async Task SendAsync(Uri uri, IRoutingSlip routingSlip)
 {
     foreach (IHostProcess process in this._processHosts)
     {
         if (await process.AcceptMessageAsync(uri, routingSlip))
         {
             break;
         }
     }
 }
Пример #5
0
        public override async Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip)
        {
            await Task.Delay(TimeSpan.FromSeconds(3));

            Guid fileId   = item.Result.WorkId;
            Guid cancelId = Guid.NewGuid();

            Console.WriteLine("Compensate move file {0} - confirmation Id: {1}.", fileId, cancelId);

            return(true);
        }
Пример #6
0
        public override async Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip)
        {
            return(await Task.Run(() =>
            {
                Guid fileId = item.Result.WorkId;
                Guid cancelId = Guid.NewGuid();
                Console.WriteLine("Compensate send file {0} - confirmation Id: {1}.", fileId, cancelId);

                return true;
            }));
        }
Пример #7
0
        public async Task<bool> AcceptMessageAsync(Uri uri, IRoutingSlip routingSlip)
        {
            TProcess process = new TProcess();

            if (process.WorkItemEndpointAddress.Equals(uri))
            {
                await this.ProcessForwardMessageAsync(routingSlip);
                return true;
            }

            if (!process.CompensationEndpointAddress.Equals(uri)) return false;

            await this.ProcessBackwardMessageAsync(routingSlip);

            return true;
        }
Пример #8
0
 public abstract Task <bool> CompensateAsync(WorkLog item, IRoutingSlip routingSlip);
Пример #9
0
 public Builder()
 {
     this._routingSlip  = new RoutingSlip.RoutingSlip();
     this._processHosts = new List <IHostProcess>();
 }