From 9d641e260269aa2b303ae2133d6b372820c8749b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=8A=B2=E9=B9=8F?= Date: Wed, 13 Nov 2019 15:29:56 +0800 Subject: [PATCH] debugger send back to switch js engine --- .../src/main/java/pub/doric/DoricDriver.java | 2 +- .../main/java/pub/doric/async/AsyncCall.java | 2 +- doric-cli/scripts/server.js | 61 +++++++++---------- js-framework/index.debug.ts | 24 ++++++-- 4 files changed, 52 insertions(+), 37 deletions(-) diff --git a/Android/doric/src/main/java/pub/doric/DoricDriver.java b/Android/doric/src/main/java/pub/doric/DoricDriver.java index ec02bd73..c1a4c1e8 100644 --- a/Android/doric/src/main/java/pub/doric/DoricDriver.java +++ b/Android/doric/src/main/java/pub/doric/DoricDriver.java @@ -81,7 +81,7 @@ public class DoricDriver implements IDoricDriver { return AsyncCall.ensureRunInHandler(mUIHandler, callable); case INDEPENDENT: default: - return AsyncCall.ensureRunIExecutor(mBridgeExecutor, callable); + return AsyncCall.ensureRunInExecutor(mBridgeExecutor, callable); } } diff --git a/Android/doric/src/main/java/pub/doric/async/AsyncCall.java b/Android/doric/src/main/java/pub/doric/async/AsyncCall.java index 25f8c1e3..b83926ce 100644 --- a/Android/doric/src/main/java/pub/doric/async/AsyncCall.java +++ b/Android/doric/src/main/java/pub/doric/async/AsyncCall.java @@ -51,7 +51,7 @@ public class AsyncCall { return asyncResult; } - public static AsyncResult ensureRunIExecutor(ExecutorService executorService, final Callable callable) { + public static AsyncResult ensureRunInExecutor(ExecutorService executorService, final Callable callable) { final AsyncResult asyncResult = new AsyncResult<>(); executorService.execute(new Runnable() { @Override diff --git a/doric-cli/scripts/server.js b/doric-cli/scripts/server.js index 5e20c283..4f5e1c0d 100644 --- a/doric-cli/scripts/server.js +++ b/doric-cli/scripts/server.js @@ -1,46 +1,45 @@ const ws = require('nodejs-websocket') const { exec, spawn } = require('child_process') +var clientConnection = null +var debuggerConnection = null + const createServer = () => { let server = ws.createServer(connection => { - console.log('connected', connection.key) + console.log('connected', connection.headers.host) + + if (connection.headers.host.startsWith("localhost")) { + console.log("debugger " + connection.key + " attached to dev kit") + debuggerConnection = connection + + clientConnection.sendText(JSON.stringify({ + cmd: 'SWITCH_TO_DEBUG' + }), function() { + + }) + } else { + console.log("client " + connection.key + " attached to dev kit") + } + connection.on('text', function (result) { console.log('text', result) let resultObject = JSON.parse(result) switch(resultObject.cmd) { case 'DEBUG': + clientConnection = connection + let contextId = resultObject.data.contextId let projectHome = resultObject.data.projectHome - console.log(projectHome) - { - const code = spawn('code', [projectHome, projectHome + "/src/Snake.ts"]) - code.stdout.on('data', (data) => { - console.log(`stdout: ${data}`) + console.log(connection.key + " request debug, project home: " + projectHome) + + spawn('code', [projectHome, projectHome + "/src/Snake.ts"]) + setTimeout(() => { + exec('osascript -e \'tell application "System Events"\ntell application "Visual Studio Code" to activate\nkey code 96\nend tell\'', (err, stdout, stderr) => { + if (err) { + console.log(`stdout: ${err}`) + } }) - - code.stderr.on('data', (data) => { - console.error(`stderr: ${data}`) - }) - - code.on('close', (code) => { - console.log(`child process exited with code ${code}`) - }) - } - { - setTimeout(() => { - exec('osascript -e \'tell application "System Events"\ntell application "Visual Studio Code" to activate\nkey code 96\nend tell\'', (err, stdout, stderr) => { - if (err) { - // node couldn't execute the command - console.log(`stdout: ${err}`) - return; - } - - // the *entire* stdout and stderr (buffered) - console.log(`stdout: ${stdout}`); - console.log(`stderr: ${stderr}`); - }) - }, 4000) - } + }, 3000) break } @@ -49,7 +48,7 @@ const createServer = () => { console.log('connect', code) }) connection.on('close', function (code) { - console.log('close', code) + console.log('close: code = ' + code, connection.key) }) connection.on('error', function (code) { console.log('error', code) diff --git a/js-framework/index.debug.ts b/js-framework/index.debug.ts index 9d9c2f20..4d8c0298 100644 --- a/js-framework/index.debug.ts +++ b/js-framework/index.debug.ts @@ -15,6 +15,7 @@ */ import * as doric from './src/runtime/sandbox' import * as WebSocket from 'ws' +const WebSocketClient = require('ws') let global = new Function('return this')() global.doric = doric @@ -22,9 +23,22 @@ const contextId = "1" global.context = doric.jsObtainContext(contextId) global.Entry = doric.jsObtainEntry(contextId) -const wss = new WebSocket.Server({ port: 2080 }) -wss.on('connection', function connection(ws) { - console.log('Connected') +// dev kit client +const devClient = new WebSocketClient('ws://localhost:7777') +devClient.on('open', function open() { + console.log('dev kit connected on 7777') +}) +devClient.on('message', function incoming(data: any) { + console.log(data) +}) +devClient.on('error', function incoming(error: any) { + console.log(error) +}) + +// debug server +const debugServer = new WebSocket.Server({ port: 2080 }) +debugServer.on('connection', function connection(ws) { + console.log('connected') ws.on('message', function incoming(message: string) { let messageObject = JSON.parse(message) switch (messageObject.cmd) { @@ -79,7 +93,9 @@ wss.on('connection', function connection(ws) { } }) }) -console.log('Start Server') +debugServer.on('listening', function connection(ws: WebSocket) { + console.log('debugger server started on 2080') +}) global.injectGlobal = (objName: string, obj: string) => { Reflect.set(global, objName, JSON.parse(obj))