Files
behavioral-patterns/src/MediatorPattern/GroundAirTrafficControl/AirTrafficControl.cs
2016-07-14 12:22:02 +03:00

58 lines
1.8 KiB
C#

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;
}
}
}
}
}