Example #1
0
        public DebugAdapter(Stream @in, Stream @out, Action <LogCategory, string>?logger, DebugSession.DebugView defaultDebugView)
        {
            this.logger           = logger ?? ((_, __) => { });
            this.defaultDebugView = defaultDebugView;

            InitializeProtocolClient(@in, @out);
            Protocol.LogMessage += (sender, args) => this.logger(args.Category, args.Message);

            Protocol.RegisterRequestType <DebugViewRequest, DebugViewArguments>(a =>
            {
                HandleDebugViewRequest(a.Arguments);
            });
        }
        public static async Task <DebugSession> CreateDebugSession(LaunchArguments arguments, Action <DebugEvent> sendEvent, DebugSession.DebugView defaultDebugView)
        {
            var config        = arguments.ConfigurationProperties;
            var sourceFileMap = ParseSourceFileMap(config);
            var contract      = await Contract.Load(config["program"].Value <string>(), sourceFileMap).ConfigureAwait(false);

            var storages = ParseStorage(contract.ScriptHash, config);

            var(storedContracts, storedContractStorages) = await ParseStoredContracts(config, sourceFileMap);

            var invokeScript = BuildInvokeScript(contract.ScriptHash, ParseArguments(contract.EntryPoint, config));
            var engine       = CreateExecutionEngine(invokeScript,
                                                     storedContracts.Append(contract),
                                                     storedContractStorages.Concat(storages),
                                                     config,
                                                     sendEvent);

            var returnTypes = ParseReturnTypes(config).ToList();

            return(new DebugSession(engine, storedContracts.Append(contract), sendEvent, returnTypes, defaultDebugView));