示例#1
0
        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());
            }
        }