private void TextArea_MarginClick(object sender, MarginClickEventArgs e) { if (e.Margin == BOOKMARK_MARGIN) { var line = TextArea.Lines[TextArea.LineFromPosition(e.Position)]; // Do we have a marker for this line? if ((line.MarkerGet() & BREAKPOINT_MASK) > 0) { if (!_debugger.RemoveBreakpoint(line.Index)) { SendLogToPanel("Error removing breakpoint."); return; } // Remove existing from UI line.MarkerDelete(BREAKPOINT_MARKER); } else { if (!_debugger.AddBreakpoint(line.Index)) { SendLogToPanel("Error adding breakpoint."); return; } // Add breakpoint to UI line.MarkerAdd(BREAKPOINT_MARKER); } } }
public Backend(ServerSettings serverSettings) { var settings = new DebuggerSettings(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); var curPath = Directory.GetCurrentDirectory(); if (!settings.compilerPaths.ContainsKey(SourceLanguage.CSharp)) { settings.compilerPaths[SourceLanguage.CSharp] = curPath + "/compilers"; } if (!settings.compilerPaths.ContainsKey(SourceLanguage.Python)) { settings.compilerPaths[SourceLanguage.Python] = curPath + "/compilers"; } _debugger = new DebugManager(settings); _shell = new DebuggerShell(_debugger); // initialize a logger //var log = new SynkServer.Core.Logger(); var server = new HTTPServer(serverSettings); // instantiate a new site, the second argument is the file path where the public site contents will be found //var site = new Site("../public"); var templateEngine = new TemplateEngine(server, "../views"); LoadContract(curPath + "/contracts/DefaultContract.cs"); server.Get("/", (request) => { var context = GetContext(); return(templateEngine.Render(context, new string[] { "index" })); }); server.Post("/switch", (request) => { var code = request.args["code"]; projectFiles[this.activeDocumentID].content = code; this.activeDocumentID = request.args["id"]; var context = GetContext(); return("ok"); }); server.Get("/content", (request) => { var content = projectFiles[activeDocumentID].content; return(content); }); server.Get("/breakpoint/list", (request) => { var breakpoints = projectFiles[activeDocumentID].breakpoints; var node = DataNode.CreateArray(); foreach (var line in breakpoints) { var item = DataNode.CreateValue(line); node.AddNode(item); } return(node); }); server.Post("/breakpoint/add", (request) => { int line = int.Parse(request.args["line"]); var file = projectFiles[activeDocumentID]; if (_debugger.AddBreakpoint(line, file.path)) { var breakpoints = file.breakpoints; breakpoints.Add(line); return("ok"); } return("fail"); }); server.Post("/breakpoint/remove", (request) => { int line = int.Parse(request.args["line"]); var file = projectFiles[activeDocumentID]; var breakpoints = file.breakpoints; breakpoints.Remove(line); _debugger.RemoveBreakpoint(line, file.path); return("ok"); }); server.Post("/compile", (request) => { var code = request.args["code"]; request.session.SetString("code", code); if (Compile(serverSettings, code)) { return("OK"); } return("FAIL"); }); server.Post("/shell", (request) => { var input = request.args["input"]; var output = DataNode.CreateObject(); var lines = DataNode.CreateArray("lines"); output.AddNode(lines); if (!_shell.Execute(input, (type, text) => { lines.AddValue(text); })) { output.AddValue("Invalid command"); } string filePath; var curLine = _shell.Debugger.ResolveLine(_shell.Debugger.Info.offset, true, out filePath); output.AddField("state", _shell.Debugger.Info.state); output.AddField("offset", _shell.Debugger.Info.offset); output.AddField("line", curLine); output.AddField("path", filePath); if (_shell.Debugger.Info.state == Emulation.DebuggerState.State.Finished) { var val = _debugger.Emulator.GetOutput(); _debugger.Blockchain.Save(); var methodName = _debugger.Emulator.currentMethod; var hintType = !string.IsNullOrEmpty(methodName) && _debugger.ABI != null && _debugger.ABI.functions.ContainsKey(methodName) ? _debugger.ABI.functions[methodName].returnType : Emulator.Type.Unknown; var temp = FormattingUtils.StackItemAsString(val, false, hintType); output.AddField("result", temp); output.AddField("gas", _debugger.Emulator.usedGas); } var json = JSONWriter.WriteToString(output); return(json); }); server.Run(); }