Implemented Strategy Pattern
This commit is contained in:
11
.idea/.idea.Tello Drone/.idea/contentModel.xml
generated
11
.idea/.idea.Tello Drone/.idea/contentModel.xml
generated
@@ -26,11 +26,19 @@
|
||||
<e p="IConsoleLogger.cs" t="Include" />
|
||||
<e p="IDroneCommands.cs" t="Include" />
|
||||
<e p="IDroneFactory.cs" t="Include" />
|
||||
<e p="IMissionCommander.cs" t="Include" />
|
||||
<e p="IMissionList.cs" t="Include" />
|
||||
<e p="IMissions.cs" t="Include" />
|
||||
<e p="IModule.cs" t="Include" />
|
||||
<e p="IUdpClientWrapper.cs" t="Include" />
|
||||
<e p="IUdpClientWrapperFactory.cs" t="Include" />
|
||||
<e p="Missions.cs" t="Include" />
|
||||
<e p="MissionCommander.cs" t="Include" />
|
||||
<e p="MissionList.cs" t="Include" />
|
||||
<e p="Missions" t="Include">
|
||||
<e p="Mission1.cs" t="Include" />
|
||||
<e p="Mission2.cs" t="Include" />
|
||||
<e p="Mission3.cs" t="Include" />
|
||||
</e>
|
||||
<e p="obj" t="ExcludeRecursive">
|
||||
<e p="Debug" t="Include">
|
||||
<e p="netcoreapp2.2" t="Include">
|
||||
@@ -40,6 +48,7 @@
|
||||
</e>
|
||||
<e p="Program.cs" t="Include" />
|
||||
<e p="Tello Drone.csproj" t="IncludeRecursive" />
|
||||
<e p="TestNameAttributes.cs" t="Include" />
|
||||
<e p="UdpClientWrapper.cs" t="Include" />
|
||||
<e p="UdpClientWrapperFactory.cs" t="Include" />
|
||||
</e>
|
||||
|
||||
@@ -5,14 +5,15 @@ namespace Tello_Drone
|
||||
public class ConsoleClient
|
||||
{
|
||||
|
||||
private readonly IMissions _missions;
|
||||
private readonly IMissionList _missionList;
|
||||
private readonly IConsoleLogger _consoleLogger;
|
||||
private readonly IMissionCommander _missionCommander;
|
||||
|
||||
public ConsoleClient(IMissions missions, IConsoleLogger consoleLogger)
|
||||
public ConsoleClient(IMissionList missionList, IConsoleLogger consoleLogger, IMissionCommander missionCommander)
|
||||
{
|
||||
_missions = missions;
|
||||
_missionCommander = missionCommander;
|
||||
_missionList = missionList;
|
||||
_consoleLogger = consoleLogger;
|
||||
_missions.SetUpDrone();
|
||||
}
|
||||
|
||||
public void Run()
|
||||
@@ -20,27 +21,17 @@ namespace Tello_Drone
|
||||
while (true)
|
||||
{
|
||||
_consoleLogger.Log("Choose a mission to run.");
|
||||
_consoleLogger.Log("1: Mission 1");
|
||||
_consoleLogger.Log("2: Mission 2");
|
||||
_consoleLogger.Log("3: Mission 3");
|
||||
|
||||
var userInput = Console.ReadLine();
|
||||
|
||||
switch (userInput)
|
||||
for (int x = 0; x < _missionList.GetMissionList().Count; x++)
|
||||
{
|
||||
case "1":
|
||||
_missions.RunMission1();
|
||||
break;
|
||||
case "2":
|
||||
_missions.RunMission2();
|
||||
break;
|
||||
case "exit":
|
||||
return;
|
||||
default:
|
||||
_consoleLogger.Log("Not A Valid Entry...Try Again");
|
||||
Run();
|
||||
break;
|
||||
var currentMission = _missionList.GetMissionList()[x];
|
||||
_consoleLogger.Log($"{x+1}: {currentMission.Item1}");
|
||||
}
|
||||
|
||||
|
||||
var userInput = Convert.ToInt16(Console.ReadLine());
|
||||
_missionCommander.RunMission(_missionList.GetMissionList()[userInput-1].Item2);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,8 +8,11 @@ namespace Tello_Drone
|
||||
{
|
||||
container.Register<IDroneFactory, DroneFactory>(Reuse.Singleton);
|
||||
container.Register<IDroneCommands, DroneComands>(Reuse.Singleton);
|
||||
container.Register<IMissions, Missions>(Reuse.Singleton);
|
||||
//container.Register<IMissions, Missions>(Reuse.Singleton);
|
||||
container.Register<IMissionCommander, MissionCommander>(Reuse.Singleton);
|
||||
container.Register<IUdpClientWrapperFactory, UdpClientWrapperFactory>(Reuse.Singleton);
|
||||
container.Register<IConsoleLogger, ConsoleLogger>(Reuse.Singleton);
|
||||
container.Register<IMissionList, MissionList>(Reuse.Singleton);
|
||||
}
|
||||
|
||||
public void Resolve(IContainer container)
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
namespace Tello_Drone
|
||||
{
|
||||
public class DroneComands : IDroneCommands
|
||||
|
||||
7
Tello Drone/IMissionCommander.cs
Normal file
7
Tello Drone/IMissionCommander.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace Tello_Drone
|
||||
{
|
||||
public interface IMissionCommander
|
||||
{
|
||||
void RunMission(IMissions missions);
|
||||
}
|
||||
}
|
||||
9
Tello Drone/IMissionList.cs
Normal file
9
Tello Drone/IMissionList.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Tello_Drone
|
||||
{
|
||||
public interface IMissionList
|
||||
{
|
||||
List<(string, IMissions)> GetMissionList();
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,6 @@ namespace Tello_Drone
|
||||
{
|
||||
public interface IMissions
|
||||
{
|
||||
void SetUpDrone();
|
||||
void RunMission1();
|
||||
void RunMission2();
|
||||
void Run(Drone drone);
|
||||
}
|
||||
}
|
||||
40
Tello Drone/MissionCommander.cs
Normal file
40
Tello Drone/MissionCommander.cs
Normal file
@@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Security.Authentication.ExtendedProtection;
|
||||
|
||||
namespace Tello_Drone
|
||||
{
|
||||
public class MissionCommander : IMissionCommander
|
||||
{
|
||||
private readonly Drone _drone;
|
||||
|
||||
public MissionCommander(IDroneFactory droneFactory)
|
||||
{
|
||||
_drone = droneFactory.CreateDrone;
|
||||
}
|
||||
|
||||
public void RunMission(IMissions mission)
|
||||
{
|
||||
SetUpDrone(3);
|
||||
mission.Run(_drone);
|
||||
TearDownDrone();
|
||||
}
|
||||
|
||||
private void SetUpDrone(int retryCount)
|
||||
{
|
||||
var inCommandMode = false;
|
||||
while (inCommandMode != true && retryCount > 0)
|
||||
{
|
||||
inCommandMode = _drone.Command();
|
||||
retryCount--;
|
||||
}
|
||||
_drone.TakeOff();
|
||||
}
|
||||
|
||||
private void TearDownDrone()
|
||||
{
|
||||
_drone.Land();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
26
Tello Drone/MissionList.cs
Normal file
26
Tello Drone/MissionList.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using FastExpressionCompiler.LightExpression;
|
||||
using ImTools;
|
||||
using Tello_Drone.Missions;
|
||||
|
||||
namespace Tello_Drone
|
||||
{
|
||||
public class MissionList : IMissionList
|
||||
{
|
||||
public List<(string, IMissions)> GetMissionList( )
|
||||
{
|
||||
var list = new List<(string, IMissions)>();
|
||||
|
||||
list.Add(("Mission 1", new Mission1()));
|
||||
list.Add(("Mission 2", new Mission2()));
|
||||
list.Add(("Mission 3", new Mission3()));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
namespace Tello_Drone
|
||||
{
|
||||
public class Missions : IMissions
|
||||
{
|
||||
private Drone _drone;
|
||||
private int _setupRetry;
|
||||
|
||||
|
||||
public Missions( IDroneFactory droneFactory)
|
||||
{
|
||||
_drone = droneFactory.CreateDrone;
|
||||
}
|
||||
|
||||
public void SetUpDrone()
|
||||
{
|
||||
var inCommandMode = false;
|
||||
while (inCommandMode != true && _setupRetry < 3)
|
||||
{
|
||||
inCommandMode = _drone.Command();
|
||||
_setupRetry++;
|
||||
}
|
||||
}
|
||||
public void RunMission1()
|
||||
{
|
||||
MissionSetup();
|
||||
_drone.Up(20);
|
||||
_drone.Down(20);
|
||||
MissionTeardown();
|
||||
}
|
||||
|
||||
public void RunMission2()
|
||||
{
|
||||
MissionSetup();
|
||||
_drone.BackFlip();
|
||||
_drone.FrontFlip();
|
||||
_drone.Reverse(300);
|
||||
_drone.Forward(66);
|
||||
_drone.Up(20);
|
||||
MissionTeardown();
|
||||
}
|
||||
|
||||
private void MissionSetup()
|
||||
{
|
||||
|
||||
|
||||
if (!_drone.InitialTakeOff())
|
||||
_drone.InitialTakeOff();
|
||||
}
|
||||
|
||||
private void MissionTeardown()
|
||||
{
|
||||
_drone.Land();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
12
Tello Drone/Missions/Mission1.cs
Normal file
12
Tello Drone/Missions/Mission1.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace Tello_Drone.Missions
|
||||
{
|
||||
public class Mission1 : IMissions
|
||||
{
|
||||
|
||||
public void Run(Drone drone)
|
||||
{
|
||||
drone.Up(20);
|
||||
drone.Land();
|
||||
}
|
||||
}
|
||||
}
|
||||
12
Tello Drone/Missions/Mission2.cs
Normal file
12
Tello Drone/Missions/Mission2.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace Tello_Drone.Missions
|
||||
{
|
||||
[TestNameAttributes("Mission 2")]
|
||||
public class Mission2: IMissions
|
||||
{
|
||||
public void Run(Drone drone)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
14
Tello Drone/Missions/Mission3.cs
Normal file
14
Tello Drone/Missions/Mission3.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace Tello_Drone.Missions
|
||||
{
|
||||
public class Mission3 : IMissions
|
||||
{
|
||||
public void Run(Drone drone)
|
||||
{
|
||||
drone.Up(20);
|
||||
drone.FrontFlip();
|
||||
drone.BackFlip();
|
||||
drone.Left(20);
|
||||
drone.Right(20);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,9 +5,10 @@
|
||||
static void Main(string[] args)
|
||||
{
|
||||
var bootstrapper = BootStrapper.BootstrapSystem(new CoreModule());
|
||||
var missions = bootstrapper.Resolve<IMissions>();
|
||||
var missionList = bootstrapper.Resolve<IMissionList>();
|
||||
var missionCommander = bootstrapper.Resolve<IMissionCommander>();
|
||||
var consoleLogger = bootstrapper.Resolve<IConsoleLogger>();
|
||||
var consoleClient = new ConsoleClient(missions, consoleLogger);
|
||||
var consoleClient = new ConsoleClient(missionList, consoleLogger, missionCommander);
|
||||
consoleClient.Run();
|
||||
}
|
||||
}
|
||||
|
||||
17
Tello Drone/TestNameAttributes.cs
Normal file
17
Tello Drone/TestNameAttributes.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Dynamic;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Tello_Drone
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Class)]
|
||||
public class TestNameAttributes : Attribute
|
||||
{
|
||||
public TestNameAttributes(string name)
|
||||
{
|
||||
Name = name;
|
||||
}
|
||||
|
||||
public string Name { get; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user