Пример #1
0
 public void Process(OperationContext context)
 {
     if (context.CurrentOperation.Title == nameof(ISubDemoPlugin.OrderSandwich))
     {
         // Компонент не обрабатывает текущую операцию, но имеет возможность считать нужную информацию
         _counter++;
     }
     else if (context.CurrentOperation.Title == nameof(ISubDemoPlugin.GetOrderCount))
     {
         context.Complete(_counter);
     }
 }
Пример #2
0
        public void Process(OperationContext context)
        {
            var title = context.CurrentOperation.Title;

            if (title == nameof(IMotionPlugin.GetCoords))
            {
                context.Complete(_odometry.GetCoords());
            }
            else if (title == nameof(IMotionPlugin.GetVelocities))
            {
                context.Complete(_odometry.GetVelocities());
            }
            else if (title == nameof(IMotionPlugin.GetAbsCoords))
            {
                var coords = _odometry.GetCoords();
                context.Complete(_kinematics.ForwardPosTransform(coords));
            }
            else if (title == nameof(IMotionPlugin.GetAbsVelocities))
            {
                var velocities = _odometry.GetCoords();
                context.Complete(_kinematics.ForwardVelocityTransform(velocities));
            }
        }
Пример #3
0
 public void Process(OperationContext context)
 {
     // Вместо константы "GetSubOfTheDayRecipe" используется непосредственно контракт сервиса
     // с целью более простого обновления наименований в будущем
     if (context.CurrentOperation.Title == nameof(ISubDemoPlugin.GetSubOfTheDayRecipe))
     {
         // Операция полностью выполнена, следующие обработчики в конвейере вызваны не будут
         var recipe = GetRecipe();
         context.Complete(recipe);
     }
     else if (context.CurrentOperation.Title == nameof(ISubDemoPlugin.OrderSubOfTheDay))
     {
         // Вместо непосредственного вызова необходимых функций, операция трасформируется
         // в более простую и передаётся дальше. Таким образом компоненты остаются слабо связанными.
         var recipe = GetRecipe();
         context.SetNextOperation(new Message(nameof(ISubDemoPlugin.OrderSandwich), recipe));
     }
 }
Пример #4
0
        public void Process(OperationContext context)
        {
            if (!_registry.List.Contains("Повар"))
            {
                return;
            }

            if (context.CurrentOperation.Title == nameof(ISubDemoPlugin.OrderSandwich))
            {
                // Входные данные операции передаются в свойстве Payload в типе, соответствующему контракту операции
                var recipe   = context.CurrentOperation.Payload as Recipe;
                var sandwich = new Sandwich()
                {
                    Depiction = $"Вкусный сэндвич, включающий {string.Join(", ", recipe.Ingridients)}"
                };
                context.Complete(sandwich);
            }
        }
Пример #5
0
 public void Process(OperationContext context)
 {
     if (context.CurrentOperation.Title == nameof(ISubDemoPlugin.FireEmployee))
     {
         var count = _registry.List.Count;
         if (count > 0)
         {
             var firedIndex    = new Random().Next(count);
             var firedEmployee = _registry.List[firedIndex];
             _registry.List.RemoveAt(firedIndex);
             var args = new JobOpeningArgs()
             {
                 Vacancy = firedEmployee
             };
             _raiser.Post(nameof(ISubDemoPlugin.PositionOpened), args);
             context.Complete();
         }
     }
 }