Aliendreamer

animal center oop exam engine class

Nov 20th, 2018
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.30 KB | None | 0 0
  1. namespace AnimalCenter.Models.BaseModels
  2. {
  3.     using System;
  4.     using System.Linq;
  5.     using System.Reflection;
  6.     using Interfaces;
  7.     using IO.Interfaces;
  8.  
  9.     public class Engine
  10.     {
  11.         public Engine(IInputReader reader, IOutputWriter writer, IAnimalCentre centre)
  12.         {
  13.             this.Writer = writer;
  14.  
  15.             this.Reader = reader;
  16.  
  17.             this.Centre = centre;
  18.         }
  19.  
  20.         public IOutputWriter Writer { get; set; }
  21.  
  22.         public IInputReader Reader { get; set; }
  23.  
  24.         public IAnimalCentre Centre { get; set; }
  25.  
  26.         public void Run()
  27.         {
  28.             string input = string.Empty;
  29.             while ((input = Reader.Read()) != "End")
  30.             {
  31.                 string[] tokens = input.Split().ToArray();
  32.  
  33.                 var command = tokens[0];
  34.                 try
  35.                 {
  36.                     var methods = this.Centre.GetType().GetRuntimeMethods();
  37.  
  38.                     var method = methods.First(x => x.Name == command);
  39.  
  40.                     var parameters = method.GetParameters();
  41.  
  42.                     var inputparams = tokens.Skip(1).ToArray();
  43.  
  44.                     var objarr = new object[parameters.Length];
  45.  
  46.                     for (int i = 0; i < inputparams.Length; i++)
  47.                     {
  48.                         var convertTo = parameters[i].ParameterType;
  49.  
  50.                         var paramOfMethod = Convert.ChangeType(inputparams[i], convertTo);
  51.  
  52.                         objarr[i] = paramOfMethod;
  53.                     }
  54.  
  55.                     var result = method.Invoke(this.Centre, objarr).ToString();
  56.                     Writer.Write(result);
  57.  
  58.                     //int procedureTime = 0;
  59.                     //string name = string.Empty;
  60.                     //switch (command)
  61.                     //{
  62.                     //    case "RegisterAnimal":
  63.  
  64.                     //        string type = tokens[1];
  65.                     //        name = tokens[2];
  66.                     //        int energy = int.Parse(tokens[3]);
  67.                     //        int happiness = int.Parse(tokens[4]);
  68.                     //        procedureTime = int.Parse(tokens[5]);
  69.  
  70.                     //        Writer.Write(this.Centre.RegisterAnimal(type, name, energy, happiness, procedureTime));
  71.                     //        break;
  72.  
  73.                     //    case "Chip":
  74.                     //        name = tokens[1];
  75.                     //        procedureTime = int.Parse(tokens[2]);
  76.                     //        Writer.Write(this.Centre.Chip(name, procedureTime));
  77.                     //        break;
  78.  
  79.                     //    case "Vaccinate":
  80.                     //        name = tokens[1];
  81.                     //        procedureTime = int.Parse(tokens[2]);
  82.                     //        Writer.Write(this.Centre.Vaccinate(name, procedureTime));
  83.                     //        break;
  84.  
  85.                     //    case "Fitness":
  86.                     //        name = tokens[1];
  87.                     //        procedureTime = int.Parse(tokens[2]);
  88.                     //        Writer.Write(this.Centre.Fitness(name, procedureTime));
  89.                     //        break;
  90.  
  91.                     //    case "Play":
  92.                     //        name = tokens[1];
  93.                     //        procedureTime = int.Parse(tokens[2]);
  94.                     //        Writer.Write(this.Centre.Play(name, procedureTime));
  95.                     //        break;
  96.  
  97.                     //    case "DentalCare":
  98.                     //        name = tokens[1];
  99.                     //        procedureTime = int.Parse(tokens[2]);
  100.                     //        Writer.Write(this.Centre.DentalCare(name, procedureTime));
  101.                     //        break;
  102.  
  103.                     //    case "NailTrim":
  104.                     //        name = tokens[1];
  105.                     //        procedureTime = int.Parse(tokens[2]);
  106.                     //        Writer.Write(this.Centre.NailTrim(name, procedureTime));
  107.                     //        break;
  108.  
  109.                     //    case "Adopt":
  110.                     //        name = tokens[1];
  111.                     //        string owner = tokens[2];
  112.                     //        Writer.Write(this.Centre.Adopt(name, owner));
  113.                     //        break;
  114.  
  115.                     //    case "History":
  116.                     //        string procedure = tokens[1];
  117.                     //        Writer.Write(this.Centre.History(procedure));
  118.                     //        break;
  119.  
  120.                     //    default:
  121.                     //        throw new InvalidOperationException(GlobalConstants.NotLegalAction);
  122.                     //}
  123.                 }
  124.                 catch (ArgumentException e)
  125.                 {
  126.                     this.Writer.Write(e.Message);
  127.                 }
  128.                 catch (InvalidOperationException e)
  129.                 {
  130.                     this.Writer.Write(e.Message);
  131.                 }
  132.                 catch (TargetInvocationException e)
  133.                 {
  134.                     this.Writer.Write(e.InnerException.Message);
  135.                 }
  136.             }
  137.  
  138.             this.Writer.Write(End());
  139.         }
  140.  
  141.         protected string End()
  142.         {
  143.             var stringResult = this.Centre.GetAnimalsAndOwners();
  144.  
  145.             return stringResult;
  146.         }
  147.     }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment