void NodeJSDevToolsProtocol::SetBreakpoint(clWebSocketClient& socket, const NodeJSBreakpoint& bp) { try { JSONItem params = bp.ToJSON("params"); // Nodejs is using 0 based line numbers, while the editor starts from 1 params.removeProperty("lineNumber"); params.addProperty("lineNumber", bp.GetLine() - 1); // Send the command SendSimpleCommand(socket, "Debugger.setBreakpointByUrl", params); // Register a handler to handle this command when it returns CommandHandler handler(message_id, [=](const JSONItem& result) { wxString breakpointId = result.namedObject("breakpointId").toString(); NodeJSBreakpoint& b = m_debugger->GetBreakpointsMgr()->GetBreakpoint(bp.GetFilename(), bp.GetLine()); if(b.IsOk()) { b.SetNodeBpID(breakpointId); clDebugEvent bpEvent(wxEVT_NODEJS_DEBUGGER_UPDATE_BREAKPOINTS_VIEW); EventNotifier::Get()->AddPendingEvent(bpEvent); } }); m_waitingReplyCommands.insert({ handler.m_commandID, handler }); } catch(clSocketException& e) { clWARNING() << e.what(); } }
void NodeJSDebugger::SetBreakpoint(const NodeJSBreakpoint& bp) { // Sanity if(!IsConnected()) return; // Build the request JSONElement request = JSONElement::createObject(); request.addProperty("type", "request"); request.addProperty("command", "setbreakpoint"); JSONElement args = JSONElement::createObject("arguments"); request.append(args); args.addProperty("type", "script"); args.addProperty("target", bp.GetFilename()); args.addProperty("line", bp.GetLine() - 1); args.addProperty("column", 0); // Write the command m_socket->WriteRequest(request, new NodeJSSetBreakpointHandler(bp)); }