public void ProcessStockOutputRequest(StockOutputRequest stockOutputRequest)
        {
            StockOutputResponse stockOutputResponse = new StockOutputResponse(stockOutputRequest.ConverterStream);

            stockOutputResponse.AdoptHeader(stockOutputRequest);
            stockOutputResponse.Order = stockOutputRequest.Order.Clone();

            if ((this.generateBoxId) &&
                (String.IsNullOrEmpty(stockOutputRequest.Order.BoxNumber)))
            {
                stockOutputRequest.Order.BoxNumber = nextBoxId.ToString();
                nextBoxId++;
            }

            // create SimulatorOutputOrder to handle output result.
            SimulatorOutputOrder outputOrder = new SimulatorOutputOrder(
                this.stock,
                this.simulatorTenant,
                this.simulatorStockLocation,
                stockOutputRequest,
                this.outputResult,
                this.enableAutoReply,
                this.converterStreamList);

            outputOrder.OutputOrderUpdated += this.OutputOrder_OutputOrderUpdated;
            this.orderList.Add(outputOrder);

            stockOutputResponse.ConverterStream.Write(stockOutputResponse);

            this.DoOutputOrderListUpdated();
        }
        public Task GetTaskInformation(Task requestedTask, bool includeTaskDetails)
        {
            SimulatorOutputOrder outputOrder = this.GetOutputOrderByID(requestedTask.ID);

            if (outputOrder != null)
            {
                return(outputOrder.GetTaskInformation(includeTaskDetails));
            }

            return(requestedTask);
        }
        public void DirectOutput(RobotPack pack)
        {
            // send a output response to every PMR conencted and matching tenant.
            foreach (IConverterStream stream in this.converterStreamList)
            {
                if (pack.TenantID != stream.TenantID)
                {
                    continue;
                }

                StockOutputRequest stockOutputRequest = new StockOutputRequest(stream);
                stockOutputRequest.ID       = "1"; // is always 1
                stockOutputRequest.TenantID = pack.TenantID;

                int machineLocation;
                if (int.TryParse(pack.MachineLocation, out machineLocation))
                {
                    stockOutputRequest.Source = machineLocation;
                }
                stockOutputRequest.Destination = 100;

                stockOutputRequest.Order = new StockOutputOrder();
                stockOutputRequest.Order.OutputNumber = 1;

                StockOutputOrderItem orderItem = new StockOutputOrderItem();
                orderItem.RobotArticleCode = pack.RobotArticleCode;
                orderItem.PackID           = pack.ID;
                if (pack.SubItemQuantity == 0)
                {
                    orderItem.RequestedQuantity = 1;
                }
                else
                {
                    orderItem.RequestedSubItemQuantity = pack.SubItemQuantity;
                }

                stockOutputRequest.Order.Items.Add(orderItem);

                // create SimulatorOutputOrder to handle output result.
                SimulatorOutputOrder outputOrder = new SimulatorOutputOrder(
                    this.stock,
                    this.simulatorTenant,
                    this.simulatorStockLocation,
                    stockOutputRequest,
                    OutputResult.Normal,
                    this.enableAutoReply,
                    this.converterStreamList);
                outputOrder.OutputOrderUpdated += this.OutputOrder_OutputOrderUpdated;
                this.orderList.Add(outputOrder);

                this.DoOutputOrderListUpdated();
            }
        }
        private SimulatorOutputOrder GetOutputOrderByID(string orderID)
        {
            SimulatorOutputOrder result = null;

            foreach (SimulatorOutputOrder outputOrder in this.orderList)
            {
                if (outputOrder.ID.ToString() == orderID)
                {
                    // if multiple order exist with the same ID, select lastest order.
                    result = outputOrder;
                }
            }

            return(result);
        }
        public void ProcessTaskCancelRequest(TaskCancelRequest taskCancelRequest)
        {
            TaskCancelResponse taskCancelResponse = new TaskCancelResponse();

            taskCancelResponse.AdoptHeader(taskCancelRequest);

            foreach (Task task in taskCancelRequest.Tasks)
            {
                SimulatorOutputOrder outputOrder = this.GetOutputOrderByID(task.ID);

                if (outputOrder != null)
                {
                    taskCancelResponse.Tasks.Add(outputOrder.CancelOrder());
                }
            }

            taskCancelResponse.ConverterStream.Write(taskCancelResponse);
        }