private void SendUsage()
        {
            string usageText = $@"Basic Usage:
    Dump the contents of a database: DB_Database
    Insert a row into a database (EXPERIMENTAL!): DB_Database(1, 2, 3)
    Delete a row from a database (EXPERIMENTAL!): NOT DB_Database(4, 5, 6)
    Evaluate a query: QRY_Query(""test"")
    Evaluate a built-in query: IntegerSum(100, 200, _)
    Call a PROC: PROC_Proc(111.0, TEST_12345678-1234-1234-1234-123456789abc)
    Call a built-in call (NOT YET COMPLETE!): SetStoryEvent(...)
    Trigger an event: GameStarted(""FTJ_FortJoy"", 1)

Notes:
    - Built-in queries will return their output if they succeed.
    - You can use local variables from the active rule (_Char, etc.) in the expressions.
";

            var outputMsg = new DAPOutputMessage
            {
                category = "console",
                output   = usageText
            };

            DAP.SendEvent("output", outputMsg);
        }
Example #2
0
        public void SendOutput(string category, string output)
        {
            var outputMsg = new DAPOutputMessage
            {
                category = category,
                output   = output
            };

            Stream.SendEvent("output", outputMsg);
        }
        private void OnEvaluateFinished(UInt32 seq, BkEvaluateFinished msg)
        {
            var eval = PendingEvaluations[seq];

            if (msg.ResultCode != StatusCode.Success)
            {
                DAP.SendReply(eval.Request, $"Evaluation failed: DBG server sent error code: {msg.ResultCode}");
                return;
            }

            var funcType = (LSLib.LS.Story.FunctionType)eval.Function.TypeId;

            if (eval.Node.Type == Node.Type.UserQuery)
            {
                funcType = LSLib.LS.Story.FunctionType.UserQuery;
            }

            string resultText  = "";
            string consoleText = "";
            bool   returnResults;

            switch (funcType)
            {
            case LSLib.LS.Story.FunctionType.Event:
                consoleText   = $"Event {eval.Node.FunctionName} triggered";
                returnResults = false;
                break;

            case LSLib.LS.Story.FunctionType.Query:
            case LSLib.LS.Story.FunctionType.SysQuery:
            case LSLib.LS.Story.FunctionType.UserQuery:
                if (msg.QuerySucceeded)
                {
                    consoleText = $"Query {eval.Node.FunctionName} SUCCEEDED";
                }
                else
                {
                    consoleText = $"Query {eval.Node.FunctionName} FAILED";
                }

                resultText    = "Query results";
                returnResults = (funcType != LSLib.LS.Story.FunctionType.UserQuery);
                break;

            case LSLib.LS.Story.FunctionType.Proc:
                consoleText   = $"PROC {eval.Node.FunctionName} called";
                returnResults = false;
                break;

            case LSLib.LS.Story.FunctionType.SysCall:
            case LSLib.LS.Story.FunctionType.Call:
                consoleText   = $"Built-in function {eval.Node.FunctionName} called";
                returnResults = false;
                break;

            case LSLib.LS.Story.FunctionType.Database:
                consoleText   = $"Inserted row into {eval.Node.FunctionName}";
                returnResults = false;
                break;

            default:
                throw new InvalidOperationException($"Unknown function type: {eval.Function.TypeId}");
            }

            if (consoleText.Length > 0)
            {
                var outputMsg = new DAPOutputMessage
                {
                    category = "console",
                    output   = consoleText + "\r\n"
                };
                DAP.SendEvent("output", outputMsg);
            }

            if (funcType == LSLib.LS.Story.FunctionType.Database)
            {
                // For database inserts we'll return the whole database in the response.
                DatabaseDumper.RequestDatabaseEvaluation(eval.Request, eval.Node.DatabaseId);
                return;
            }

            var evalResponse = new DAPEvaluateResponse
            {
                result             = resultText,
                namedVariables     = 0,
                indexedVariables   = returnResults ? eval.Results.Count : 0,
                variablesReference = returnResults ? eval.Results.VariablesReference : 0
            };

            DAP.SendReply(eval.Request, evalResponse);

            PendingEvaluations.Remove(seq);
        }