Advertisement
simonradev

GameControllerBrokenReflection

Aug 19th, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.02 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Reflection;
  4. using System.Text;
  5.  
  6. public class GameController : IGameController
  7. {
  8.     private const string ManagePrefix = "Manage";
  9.  
  10.     private static readonly MethodInfo[] ManageMethods;
  11.  
  12.     private IArmy army;
  13.     private IWareHouse wareHouse;
  14.     private IMissionController missionController;
  15.  
  16.     static GameController()
  17.     {
  18.         ManageMethods = typeof(GameController).GetMethods(BindingFlags.Instance | BindingFlags.NonPublic);
  19.     }
  20.  
  21.     public GameController(IArmy army, IMissionController missionController, IWareHouse wareHouse)
  22.     {
  23.         this.Army = army;
  24.         this.WareHouse = wareHouse;
  25.         this.MissionController = missionController;
  26.     }
  27.  
  28.     public IArmy Army
  29.     {
  30.         get
  31.         {
  32.             return this.army;
  33.         }
  34.  
  35.         private set
  36.         {
  37.             this.army = value;
  38.         }
  39.     }
  40.  
  41.     public IWareHouse WareHouse
  42.     {
  43.         get
  44.         {
  45.             return this.wareHouse;
  46.         }
  47.  
  48.         private set
  49.         {
  50.             this.wareHouse = value;
  51.         }
  52.     }
  53.  
  54.     public IMissionController MissionController
  55.     {
  56.         get
  57.         {
  58.             return this.missionController;
  59.         }
  60.  
  61.         private set
  62.         {
  63.             this.missionController = value;
  64.         }
  65.     }
  66.    
  67.     private void ManageSoldier(string commandName, string soldierType)
  68.     {
  69.     }
  70.  
  71.     private void ManageSoldier(string soldierTypeName, string name, int age, double experience, double endurance)
  72.     {
  73.     }
  74.  
  75.     private void ManageWareHouse(string name, int count)
  76.     {
  77.     }
  78.  
  79.     private void ManageMission(string difficultyLevel, double neededPoints)
  80.     {
  81.     }
  82.  
  83.     public void GiveInputToGameController(string input)
  84.     {
  85.         // Ideqta e da vikna opredelen metod koito da se griji za opredelno neshto
  86.         // Chupi se kogato mi podadat Soldier Regenerate zashtoto v segashnata logika tursq
  87.         // purviq metod koito se kazva po opredelen nachin i mi vrushta overloada na metoda koito trqbva da registrira soldier
  88.         // za da se fixne trqbva da se proverqt i broq na poluchenite ot konzolata parametri
  89.  
  90.         string[] data = input.Split();
  91.  
  92.         string methodName = ManagePrefix + data[0];
  93.  
  94.         MethodInfo methodToInvoke = ManageMethods.First(t => t.Name.Equals(methodName, StringComparison.OrdinalIgnoreCase));
  95.         ParameterInfo[] methodParams = methodToInvoke.GetParameters();
  96.  
  97.         object[] parsedParams = new object[methodParams.Length];
  98.         for (int currentConvertion = 0; currentConvertion < methodParams.Length; currentConvertion++)
  99.         {
  100.             Type typeOfCurrentParam = methodParams[currentConvertion].ParameterType;
  101.  
  102.             parsedParams[currentConvertion] = Convert.ChangeType(data[currentConvertion + 1], typeOfCurrentParam);
  103.         }
  104.  
  105.         methodToInvoke.Invoke(this, parsedParams);
  106.     }
  107.  
  108.     public void RequestResult(StringBuilder result)
  109.     {
  110.         throw new NotImplementedException();
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement