Add another air traffic controller example for mediator

This commit is contained in:
Petrutiu Mihai
2016-06-23 19:45:10 +03:00
parent 06d201c917
commit 0a130b0405
19 changed files with 241 additions and 28 deletions

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace MediatorPattern.GroundAirTrafficControl
{
public class AirTrafficControl : IAirTrafficControlTower
{
List<Lane> lanes;
object lockLanes = new object();
public AirTrafficControl(List<Lane> lanes)
{
this.lanes = lanes;
}
public bool RequestLaneForMaintainance(MaintainerTeam team, Lane lane)
{
var requestedLane = lanes.FirstOrDefault(l => l.ID == lane.ID);
if (requestedLane == null)
return false;
lock (lockLanes)
{
if (requestedLane.IsAvailable)
{
requestedLane.IsAvailable = false;
Console.WriteLine("Lane {0} is now used by maintainers", lane.ID);
return true;
}
else
{
Console.WriteLine("Lane {0} cannot be used by maintainers because it's already in use", lane.ID);
return false;
}
}
}
public Optional<Lane> RequestPermissionToLand(Plane plane)
{
lock (lockLanes)
{
var availableLane = lanes.FirstOrDefault(l => l.IsAvailable);
if (availableLane != null)
{
availableLane.IsAvailable = false;
Console.WriteLine("Approved landing for plane {0} on lane {1}", plane.ID, availableLane.ID);
return Optional<Lane>.Of(availableLane);
}
else
{
Console.WriteLine("Landing not approved for plane {0}", plane.ID);
return Optional<Lane>.Empty;
}
}
}
}
}