コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }