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); }
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); }