private void ProcessApiV1Call(Uri uri, HttpListenerResponse response, InvokerData invoker) { string apirequest = uri.AbsolutePath.Substring("/api".Length); var ast = CommandParser.ParseCommandRequest(apirequest, '/', '/'); UnescapeAstTree(ast); var command = MainBot.CommandManager.CommandSystem.AstToCommandResult(ast); invoker.IsApi = true; var execInfo = new ExecutionInformation(MainBot, invoker, null); try { var res = command.Execute(execInfo, StaticList.Empty <ICommand>(), new[] { CommandResultType.Json, CommandResultType.Empty }); if (res.ResultType == CommandResultType.Empty) { response.StatusCode = (int)HttpStatusCode.NoContent; } else if (res.ResultType == CommandResultType.Json) { response.StatusCode = (int)HttpStatusCode.OK; var sRes = (JsonCommandResult)res; using (var responseStream = new StreamWriter(response.OutputStream)) responseStream.Write(sRes.JsonObject.Serialize()); } } catch (CommandException ex) { ReturnError(ex, response); } catch (Exception ex) { if (ex is NotImplementedException) { response.StatusCode = (int)HttpStatusCode.NotImplemented; } else { response.StatusCode = (int)HttpStatusCode.InternalServerError; } Log.Write(Log.Level.Error, "WA Unexpected command error: {0}", ex); using (var responseStream = new StreamWriter(response.OutputStream)) responseStream.Write(new JsonError(ex.Message, CommandExceptionReason.Unknown).Serialize()); } }