private void OnEndDatabaseContents(BkEndDatabaseContents msg) { var rows = DatabaseContents[msg.DatabaseId]; var db = DebugInfo.Databases[msg.DatabaseId]; var evalResponse = new DAPEvaluateResponse(); evalResponse.result = $"Database {db.Name} ({rows.Count} rows)"; evalResponse.namedVariables = 0; evalResponse.indexedVariables = rows.Count; evalResponse.variablesReference = rows.VariablesReference; var requests = PendingDatabaseRequests[msg.DatabaseId]; foreach (var request in requests) { DAP.SendReply(request, evalResponse); } requests.Clear(); }
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); }