Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace AnimalCenter.Models.BaseModels
- {
- using System;
- using System.Linq;
- using System.Reflection;
- using Interfaces;
- using IO.Interfaces;
- public class Engine
- {
- public Engine(IInputReader reader, IOutputWriter writer, IAnimalCentre centre)
- {
- this.Writer = writer;
- this.Reader = reader;
- this.Centre = centre;
- }
- public IOutputWriter Writer { get; set; }
- public IInputReader Reader { get; set; }
- public IAnimalCentre Centre { get; set; }
- public void Run()
- {
- string input = string.Empty;
- while ((input = Reader.Read()) != "End")
- {
- string[] tokens = input.Split().ToArray();
- var command = tokens[0];
- try
- {
- var methods = this.Centre.GetType().GetRuntimeMethods();
- var method = methods.First(x => x.Name == command);
- var parameters = method.GetParameters();
- var inputparams = tokens.Skip(1).ToArray();
- var objarr = new object[parameters.Length];
- for (int i = 0; i < inputparams.Length; i++)
- {
- var convertTo = parameters[i].ParameterType;
- var paramOfMethod = Convert.ChangeType(inputparams[i], convertTo);
- objarr[i] = paramOfMethod;
- }
- var result = method.Invoke(this.Centre, objarr).ToString();
- Writer.Write(result);
- //int procedureTime = 0;
- //string name = string.Empty;
- //switch (command)
- //{
- // case "RegisterAnimal":
- // string type = tokens[1];
- // name = tokens[2];
- // int energy = int.Parse(tokens[3]);
- // int happiness = int.Parse(tokens[4]);
- // procedureTime = int.Parse(tokens[5]);
- // Writer.Write(this.Centre.RegisterAnimal(type, name, energy, happiness, procedureTime));
- // break;
- // case "Chip":
- // name = tokens[1];
- // procedureTime = int.Parse(tokens[2]);
- // Writer.Write(this.Centre.Chip(name, procedureTime));
- // break;
- // case "Vaccinate":
- // name = tokens[1];
- // procedureTime = int.Parse(tokens[2]);
- // Writer.Write(this.Centre.Vaccinate(name, procedureTime));
- // break;
- // case "Fitness":
- // name = tokens[1];
- // procedureTime = int.Parse(tokens[2]);
- // Writer.Write(this.Centre.Fitness(name, procedureTime));
- // break;
- // case "Play":
- // name = tokens[1];
- // procedureTime = int.Parse(tokens[2]);
- // Writer.Write(this.Centre.Play(name, procedureTime));
- // break;
- // case "DentalCare":
- // name = tokens[1];
- // procedureTime = int.Parse(tokens[2]);
- // Writer.Write(this.Centre.DentalCare(name, procedureTime));
- // break;
- // case "NailTrim":
- // name = tokens[1];
- // procedureTime = int.Parse(tokens[2]);
- // Writer.Write(this.Centre.NailTrim(name, procedureTime));
- // break;
- // case "Adopt":
- // name = tokens[1];
- // string owner = tokens[2];
- // Writer.Write(this.Centre.Adopt(name, owner));
- // break;
- // case "History":
- // string procedure = tokens[1];
- // Writer.Write(this.Centre.History(procedure));
- // break;
- // default:
- // throw new InvalidOperationException(GlobalConstants.NotLegalAction);
- //}
- }
- catch (ArgumentException e)
- {
- this.Writer.Write(e.Message);
- }
- catch (InvalidOperationException e)
- {
- this.Writer.Write(e.Message);
- }
- catch (TargetInvocationException e)
- {
- this.Writer.Write(e.InnerException.Message);
- }
- }
- this.Writer.Write(End());
- }
- protected string End()
- {
- var stringResult = this.Centre.GetAnimalsAndOwners();
- return stringResult;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment