public Simulator(Statistics statistics) { this.statistics = statistics; calender = new Calender(); resourceManager = new ResourceManager(); rGen = new RandomNumberGenerator(); entityFactory = new EntityFactory(); eventFactory = new EventFactory(); // Set global clock //Global.Clock = Global.StartSimulationTime; // Add EndSim Event Event endSimulationEvent = eventFactory.Spawn(EEventType.END_SIMULATION, Global.EndSimulationTime, entityFactory.CreateEntity()); calender.Add(endSimulationEvent); // Create First Arrival Event Entity firstCaller = entityFactory.CreateEntity(); int nextArrivalTime = Global.Clock + rGen.TimeBetweenArrivals; Event firstArrivalEvent = eventFactory.Spawn(EEventType.ARRIVAL, nextArrivalTime, firstCaller); calender.Add(firstArrivalEvent); }
public override void Execute(Calender calender, ResourceManager resourceManager, Statistics statistics, RandomNumberGenerator rGen, EntityFactory entitiyFactory, EventFactory eventFactory) { // Set entities start time at call centre CurrentEntity.StartTime = EventTime; // Total of the two product queues if (resourceManager.IsSpaceInQueues) { // Set active entites call type CurrentEntity.CallType = rGen.GetCallType; // Calculate the next event time int nextEventTime = CurrentEntity.StartTime + rGen.DelayAtSwitch; // Setup next event for active entity switch complete event Event processingCompleteEvent = eventFactory.Spawn(EEventType.SWITCH_COMPLETE, nextEventTime, CurrentEntity); // Add to calender calender.Add(processingCompleteEvent); } else { // Entity hangs up at the switch Global.BusySignalCount++; } // Calculate next arrival time int nextArrivalTime = EventTime + rGen.TimeBetweenArrivals; // Create entity Entity nextEntity = entitiyFactory.CreateEntity(); // Setup next event for entity Event nextEvent = eventFactory.Spawn(EEventType.ARRIVAL, nextArrivalTime, nextEntity); // Add to the calender calender.Add(nextEvent); }