public void Deliver(int time) { int units = RobotClass.massToUnit(this.load.storageMass, this.load.currentHoldNum); double mass = this.load.storageMass; int itemNum = this.load.currentHoldNum; if (itemNum == 0) { FullTest.underway_Queue.Enqueue(new OrderClass(units, 0, 0, 0, 0, time)); } else if (itemNum == 1) { FullTest.underway_Queue.Enqueue(new OrderClass(0, units, 0, 0, 0, time)); } else if (itemNum == 2) { FullTest.underway_Queue.Enqueue(new OrderClass(0, 0, units, 0, 0, time)); } else if (itemNum == 3) { FullTest.underway_Queue.Enqueue(new OrderClass(0, 0, 0, units, 0, time)); } else if (itemNum == 4) { FullTest.underway_Queue.Enqueue(new OrderClass(0, 0, 0, 0, units, time)); } this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; }
public void Unload(int[] cubbard_Co) { int units = RobotClass.massToUnit(this.load.storageMass, this.load.currentHoldNum); double mass = this.load.storageMass; int itemNum = this.load.currentHoldNum; int column = cubbard_Co[0]; int subColumn = cubbard_Co[1]; int side = cubbard_Co[2]; int cubbard = cubbard_Co[3]; if (itemNum == 0) { FullTest.shelf_Mutex.WaitOne(); FullTest.shelfMass[column, subColumn, side, cubbard] += mass; //Console.WriteLine("Mass on shelf: {0}", FullTest.shelfMass[column, subColumn, side, cubbard]); //Console.WriteLine("Co-Ordinates: {0}, {1}, {2}, {3}", column, subColumn, side, cubbard); FullTest.shelf_Mutex.ReleaseMutex(); FullTest.item1_Mutex.WaitOne(); FullTest.item1Tracker[column, subColumn, side, cubbard].UpdateRecord(units); FullTest.item1_Mutex.ReleaseMutex(); } else if (itemNum == 1) { FullTest.shelf_Mutex.WaitOne(); FullTest.shelfMass[column, subColumn, side, cubbard] += mass; FullTest.shelf_Mutex.ReleaseMutex(); FullTest.item2_Mutex.WaitOne(); FullTest.item2Tracker[column, subColumn, side, cubbard].UpdateRecord(units); FullTest.item2_Mutex.ReleaseMutex(); } else if (itemNum == 2) { FullTest.shelf_Mutex.WaitOne(); FullTest.shelfMass[column, subColumn, side, cubbard] += mass; FullTest.shelf_Mutex.ReleaseMutex(); FullTest.item3_Mutex.WaitOne(); FullTest.item3Tracker[column, subColumn, side, cubbard].UpdateRecord(units); FullTest.item3_Mutex.ReleaseMutex(); } else if (itemNum == 3) { FullTest.shelf_Mutex.WaitOne(); FullTest.shelfMass[column, subColumn, side, cubbard] += mass; FullTest.shelf_Mutex.ReleaseMutex(); FullTest.item4_Mutex.WaitOne(); FullTest.item4Tracker[column, subColumn, side, cubbard].UpdateRecord(units); FullTest.item4_Mutex.ReleaseMutex(); } else if (itemNum == 4) { FullTest.shelf_Mutex.WaitOne(); FullTest.shelfMass[column, subColumn, side, cubbard] += mass; FullTest.shelf_Mutex.ReleaseMutex(); FullTest.item5_Mutex.WaitOne(); FullTest.item5Tracker[column, subColumn, side, cubbard].UpdateRecord(units); FullTest.item5_Mutex.ReleaseMutex(); } this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; this.load.item1Load.totalMass = 0.0; this.load.item1Load.units = 0; }
static void Main(string[] args) { for (int a = 0; a < length; a++) { for (int b = 0; b < width; b++) { layout[b, a] = 'o'; } } //for (int i = 0; i < numberOfRobots; i++) // { // layout[0, i] = 'x'; // } Mutex[] robotManager = new Mutex[numberOfRobots]; for (int i = 0; i < numberOfRobots; i++) { robotManager[i] = new Mutex(); } LayoutPrint(layoutReadWrite); int[] r1Start = new int[] { 0, 1 }; int[] r1StartObj = new int[] { 0, 0 }; RobotClass rob1 = new RobotClass(1, r1Start, r1StartObj, 0, boundaries, layoutReadWrite); rob1.ObjectiveStep(r1StartObj, 0, layoutReadWrite); int[] fullLoopTest = new int[] { 0, 2 }; rob1.ObjectiveStep(fullLoopTest, 0, layoutReadWrite); fullLoopTest = new int[] { 0, 0 }; rob1.ObjectiveStep(fullLoopTest, 0, layoutReadWrite); Task rob1Task = Task.Run(() => { for (int i = boundaryLeft + 1; i < (boundaryRight + 1); i++) { int[] fullLoopTest1 = new int[] { i, ((i % 3) + 1) }; Task robot1 = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite)); robot1.Wait(); fullLoopTest1 = new int[] { i, 4 }; robot1 = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite)); robot1.Wait(); fullLoopTest1 = new int[] { 0, 0 }; robot1 = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite)); robot1.Wait(); } }); Task rob2Task = Task.Run(() => { int[] r2Start = new int[] { 0, 1 }; int[] r2StartObj = new int[] { 0, 0 }; RobotClass rob2 = new RobotClass(2, r2Start, r2StartObj, 0, boundaries, layoutReadWrite); rob2.ObjectiveStep(r2StartObj, 0, layoutReadWrite); for (int k = boundaryLeft + 1; k < (boundaryRight + 1); k++) { int[] fullLoopTest2 = new int[] { k, ((k % 3) + 1) }; Task robot2 = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite)); robot2.Wait(); fullLoopTest2 = new int[] { k, 4 }; robot2 = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite)); robot2.Wait(); if (k != 1) { fullLoopTest2 = new int[] { 0, 0 }; robot2 = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite)); robot2.Wait(); } else { fullLoopTest2 = new int[] { 0, 1 }; robot2 = Task.Run(() => rob2.ObjectiveStep(fullLoopTest2, 0, layoutReadWrite)); robot2.Wait(); } } }); while ((!rob2Task.IsCompleted) || (!rob1Task.IsCompleted)) { if (rob1Task.IsCompleted) { int[] fullLoopTest1 = new int[] { 0, 1 }; Task robot1 = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite)); robot1.Wait(); if (!rob2Task.IsCompleted) { fullLoopTest1 = new int[] { 0, 0 }; robot1 = Task.Run(() => rob1.ObjectiveStep(fullLoopTest1, 0, layoutReadWrite)); robot1.Wait(); } } } rob2Task.Wait(); rob1Task.Wait(); Console.WriteLine("\nFinished."); LayoutPrint(layoutReadWrite); Console.WriteLine("\n\n\n\n\n"); }