public static string GetHttpResponse(HttpListenerRequest request) { string response = ""; string body; using (var breader = new StreamReader(request.InputStream, request.ContentEncoding)) { body = breader.ReadToEnd(); } switch (request.HttpMethod) { case "POST": JObject json; try { json = JObject.Parse(body); } catch (Exception e) { Console.WriteLine("[JSON]:{0}:{1}", e.Message, e.StackTrace); return("{\"error\":\"Invalid Json\"}"); } string[] path = request.Url.AbsolutePath.ToLower().Split('/'); path = path.Where(w => w != path[0]).ToArray(); string at = ""; if (path.Length >= 1) { if (accessToken.Length > 0) { if (path.Length > 1) { if (path[0].ToLower() != accessToken) { response = "{\"error\":\"token invalid\"}"; break; } else { at = path[0]; List <string> pathl = new List <string>(path); pathl.RemoveAt(0); path = pathl.ToArray(); } } else { response = "{\"error\":\"token error\"}"; break; } } switch (path[0]) { case "service": List <CommandResult> results = new List <CommandResult>(); if (json["commands"].GetType() == typeof(Newtonsoft.Json.Linq.JArray)) { JArray commands = (JArray)json["commands"]; foreach (JObject command in commands) { var type = Type.GetType("SteelCityAutomatonServiceCommands." + ((string)command["command"]).ToLower()); if (type != null) { ServiceCommand cmd = (ServiceCommand)Activator.CreateInstance(type); cmd.Setup(command); cmd.Excecute(automatons, at); results.Add(cmd.result); } else { CommandResult result = new CommandResult(((string)command["command"]).ToLower()); result.success = false; result.data = "unrecognized command"; results.Add(result); Console.WriteLine("CMD NOT RECOGNIZED - {0} : {1}", ((string)command["command"]).ToLower(), "null"); } } CommandResponse resp = new CommandResponse((string)json["label"], results); response = resp.serialise(); } break; case "automaton": if (path.Length > 1) { string session = path[1]; if (automatons.ContainsKey(at + session)) { response = automatons[at + session].processCommands(json); } else { response = "{\"error\":\"unrecognized session id\"}"; } } else { response = "{\"error\":\"missing session id\"}"; } break; default: Console.WriteLine("------Parts------"); foreach (string s in path) { Console.WriteLine(s); } Console.WriteLine("-----------------"); response = "{\"error\":\"unrecognized endpoint, not automaton or service\"}"; break; } } else { response = "{\"error\":\"unrecognized endpoint, not specifed\"}"; } break; case "GET": if (webPage) { string pathf = request.Url.AbsolutePath.ToLower(); if (pathf.Length < 3) { pathf = "BasicWebTest.html"; } pathf = "Resources/" + pathf; //string f = @"Resources/BasicWebTest.html"; if (File.Exists(pathf)) { response = File.ReadAllText(pathf); } else { response = "{\"error\":\"BasicWebTest Missing\"}"; } } else { response = "{\"error\":\"Web Page not enabled\"}"; } break; default: response = "{\"error\":\"Unsuported Method\"}"; break; } return(response); }