コード例 #1
0
        public static void MoveBags(int totalnr)
        {
            if (TerminalNode.counter + Storage.GetNumberOfBagsInStorage() == totalnr)
            {
                IsSimulationFinished = true;
            }

            if (First != null)
            {
                if (current.Next != null && !(current is GateNode))
                {
                    bool check = true;
                    switch (current.Next)
                    {
                    case ConveyorNode NextNode when current is CheckinNode checkidNode:
                    {
                        if (checkidNode._bagsQueue.Count > 0 && NextNode.IsFull == false)
                        {
                            NextNode.PushBagToConveyorBelt(checkidNode.Remove());
                            Node.log.Add("Added bag to " + NextNode.Id);
                        }
                        break;
                    }

                    case SecurityNode nextNode when current is ConveyorNode conveyorNode:
                    {
                        if (!(nextNode.Next as ConveyorNode).IsFull || !(conveyorNode.IsEmpty()))
                        {
                            var bagToCheck = conveyorNode.RemoveBagFromConveyorBelt();
                            if (bagToCheck != null)
                            {
                                var bagChecked = nextNode.ScanBagSecurity(bagToCheck);
                                if (bagChecked != null)
                                {
                                    ((ConveyorNode)(nextNode.Next)).PushBagToConveyorBelt(bagChecked);
                                }
                                else
                                {
                                    current = first;
                                    check   = false;
                                }
                            }
                            else
                            {
                                current = first;
                                check   = false;
                            }
                        }
                        break;
                    }

                    case BagSortNode node when current is ConveyorNode conveyorNode:
                    {
                        if (!conveyorNode.IsEmpty() && !IsSimulationFinished)
                        {
                            var con = (ConveyorNode)(node.determineNextNode(conveyorNode.ListofBagsinqueue().Peek()));
                            con.PushBagToConveyorBelt(conveyorNode.RemoveBagFromConveyorBelt());

                            current = con;
                            check   = false;

                            //var tbag = conveyorNode.RemoveBagFromConveyorBelt();
                            //if (tbag != null)
                            //{
                            //    check = true;
                            //    node.PassBag(tbag);
                            //}
                        }
                        break;
                    }

                    case TerminalNode terminalNode when current is ConveyorNode conveyorNode:
                    {
                        if (!conveyorNode.IsEmpty() && !IsSimulationFinished)
                        {
                            ConveyorNode con =
                                (ConveyorNode)(terminalNode.determineNextNode(conveyorNode.ListofBagsinqueue()
                                                                              .Peek()));
                            con.PushBagToConveyorBelt(conveyorNode.RemoveBagFromConveyorBelt());

                            current = con;
                            check   = false;
                            //var tbag = conveyorNode.RemoveBagFromConveyorBelt();


                            //if (tbag != null)
                            //{
                            //    check = true;
                            //    node.PassBag(tbag);
                            //}
                        }


                        break;
                    }

                    case GateNode gateNode when current is ConveyorNode conveyorNode:
                    {
                        if (!conveyorNode.IsEmpty() && !IsSimulationFinished)
                        {
                            gateNode.AddBag(conveyorNode.RemoveBagFromConveyorBelt());


                            //var tbag = conveyorNode.RemoveBagFromConveyorBelt();


                            //if (tbag != null)
                            //{
                            //    check = true;
                            //    node.PassBag(tbag);
                            //}
                        }

                        if (((CheckinNode)First)._bagsQueue.Count > 0)
                        {
                            current = First;
                            check   = false;
                        }


                        break;
                    }

                    case ConveyorNode NextNode when current is ConveyorNode conveyorNode:    //err 1
                    {
                        if (!conveyorNode.IsEmpty() && NextNode.IsEmpty())
                        {
                            if (NextNode.IsFull == false)
                            {
                                NextNode.PushBagToConveyorBelt(conveyorNode
                                                               .RemoveBagFromConveyorBelt());
                            }
                        }

                        break;
                    }
                    }
                    if (check)
                    {
                        current = current.Next;
                    }
                }
            }
            else
            {
                throw new Exception("no simulation made");
            }
        }