debug protocol almost there (bugged)
This commit is contained in:
parent
086beeb2c2
commit
659affc85d
@ -37,7 +37,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
DoricContext doricContext = DoricContext.create(this, DoricUtils.readAssetFile("demo/Snake.js"), "test");
|
DoricContext doricContext = DoricContext.create(this, DoricUtils.readAssetFile("demo/Snake.js"), "test");
|
||||||
doricContext.init(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
doricContext.init(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
||||||
doricContext.callEntity("log");
|
// doricContext.callEntity("log");
|
||||||
doricContext.getRootNode().setRootView((FrameLayout) findViewById(R.id.root));
|
doricContext.getRootNode().setRootView((FrameLayout) findViewById(R.id.root));
|
||||||
Doric.connectDevKit("ws://192.168.11.38:7777");
|
Doric.connectDevKit("ws://192.168.11.38:7777");
|
||||||
LocalServer localServer = new LocalServer(getApplicationContext(), 8910);
|
LocalServer localServer = new LocalServer(getApplicationContext(), 8910);
|
||||||
|
@ -10,6 +10,7 @@ import com.google.gson.JsonObject;
|
|||||||
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonPrimitive;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.io.EOFException;
|
import java.io.EOFException;
|
||||||
import java.net.ConnectException;
|
import java.net.ConnectException;
|
||||||
@ -31,13 +32,15 @@ public class RemoteJSExecutor {
|
|||||||
|
|
||||||
private final Map<String, JavaFunction> globalFunctions = new HashMap<>();
|
private final Map<String, JavaFunction> globalFunctions = new HashMap<>();
|
||||||
|
|
||||||
|
private JSDecoder temp;
|
||||||
|
|
||||||
public RemoteJSExecutor() {
|
public RemoteJSExecutor() {
|
||||||
OkHttpClient okHttpClient = new OkHttpClient
|
OkHttpClient okHttpClient = new OkHttpClient
|
||||||
.Builder()
|
.Builder()
|
||||||
.readTimeout(10, TimeUnit.SECONDS)
|
.readTimeout(10, TimeUnit.SECONDS)
|
||||||
.writeTimeout(10, TimeUnit.SECONDS)
|
.writeTimeout(10, TimeUnit.SECONDS)
|
||||||
.build();
|
.build();
|
||||||
Request request = new Request.Builder().url("ws://192.168.24.166:2080").build();
|
final Request request = new Request.Builder().url("ws://192.168.24.166:2080").build();
|
||||||
|
|
||||||
final Thread current = Thread.currentThread();
|
final Thread current = Thread.currentThread();
|
||||||
webSocket = okHttpClient.newWebSocket(request, new WebSocketListener() {
|
webSocket = okHttpClient.newWebSocket(request, new WebSocketListener() {
|
||||||
@ -66,7 +69,7 @@ public class RemoteJSExecutor {
|
|||||||
JsonObject jo = ((JsonObject) je);
|
JsonObject jo = ((JsonObject) je);
|
||||||
String cmd = jo.get("cmd").getAsString();
|
String cmd = jo.get("cmd").getAsString();
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case "injectGlobalJSFunction":
|
case "injectGlobalJSFunction": {
|
||||||
String name = jo.get("name").getAsString();
|
String name = jo.get("name").getAsString();
|
||||||
JsonArray arguments = jo.getAsJsonArray("arguments");
|
JsonArray arguments = jo.getAsJsonArray("arguments");
|
||||||
JSDecoder[] decoders = new JSDecoder[arguments.size()];
|
JSDecoder[] decoders = new JSDecoder[arguments.size()];
|
||||||
@ -87,12 +90,35 @@ public class RemoteJSExecutor {
|
|||||||
decoders[i] = decoder;
|
decoders[i] = decoder;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ValueBuilder vb = new ValueBuilder(arguments.get(i));
|
try {
|
||||||
|
ValueBuilder vb = new ValueBuilder(new JSONObject(gson.toJson(arguments.get(i))));
|
||||||
JSDecoder decoder = new JSDecoder(vb.build());
|
JSDecoder decoder = new JSDecoder(vb.build());
|
||||||
decoders[i] = decoder;
|
decoders[i] = decoder;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
globalFunctions.get(name).exec(decoders);
|
globalFunctions.get(name).exec(decoders);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case "invokeMethod": {
|
||||||
|
try {
|
||||||
|
Object result = jo.get("result");
|
||||||
|
ValueBuilder vb = new ValueBuilder(result);
|
||||||
|
JSDecoder decoder = new JSDecoder(vb.build());
|
||||||
|
temp = decoder;
|
||||||
|
System.out.println(result);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
//LockSupport.unpark(current);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -122,6 +148,24 @@ public class RemoteJSExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public JSDecoder invokeMethod(String objectName, String functionName, JavaValue[] javaValues, boolean hashKey) {
|
public JSDecoder invokeMethod(String objectName, String functionName, JavaValue[] javaValues, boolean hashKey) {
|
||||||
|
JsonObject jo = new JsonObject();
|
||||||
|
jo.addProperty("cmd", "invokeMethod");
|
||||||
|
jo.addProperty("objectName", objectName);
|
||||||
|
jo.addProperty("functionName", functionName);
|
||||||
|
|
||||||
|
JsonArray ja = new JsonArray();
|
||||||
|
for (JavaValue javaValue : javaValues) {
|
||||||
|
JsonObject argument = new JsonObject();
|
||||||
|
argument.addProperty("type", javaValue.getType());
|
||||||
|
argument.addProperty("value", javaValue.getValue());
|
||||||
|
ja.add(argument);
|
||||||
|
}
|
||||||
|
jo.add("javaValues", ja);
|
||||||
|
|
||||||
|
jo.addProperty("hashKey", hashKey);
|
||||||
|
webSocket.send(gson.toJson(jo));
|
||||||
|
|
||||||
|
// LockSupport.park(Thread.currentThread());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public class ValueBuilder {
|
|||||||
Iterator<String> iterator = ((JSONObject) O).keys();
|
Iterator<String> iterator = ((JSONObject) O).keys();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
String key = iterator.next();
|
String key = iterator.next();
|
||||||
writeInt(output, key.hashCode());
|
write(output, key);
|
||||||
write(output, ((JSONObject) O).opt(key));
|
write(output, ((JSONObject) O).opt(key));
|
||||||
}
|
}
|
||||||
writeInt(output, 0);
|
writeInt(output, 0);
|
||||||
|
@ -18,7 +18,7 @@ import * as WebSocket from 'ws'
|
|||||||
|
|
||||||
let global = new Function('return this')()
|
let global = new Function('return this')()
|
||||||
global.doric = doric
|
global.doric = doric
|
||||||
const contextId = "DoricDebug"
|
const contextId = "1"
|
||||||
global.context = doric.jsObtainContext(contextId)
|
global.context = doric.jsObtainContext(contextId)
|
||||||
global.Entry = doric.jsObtainEntry(contextId)
|
global.Entry = doric.jsObtainEntry(contextId)
|
||||||
|
|
||||||
@ -31,6 +31,9 @@ wss.on('connection', function connection(ws) {
|
|||||||
console.log(messageObject.name)
|
console.log(messageObject.name)
|
||||||
Reflect.set(global, messageObject.name, function() {
|
Reflect.set(global, messageObject.name, function() {
|
||||||
let args = [].slice.call(arguments)
|
let args = [].slice.call(arguments)
|
||||||
|
console.log("===============================")
|
||||||
|
console.log(args)
|
||||||
|
console.log("===============================")
|
||||||
ws.send(JSON.stringify({
|
ws.send(JSON.stringify({
|
||||||
cmd: 'injectGlobalJSFunction',
|
cmd: 'injectGlobalJSFunction',
|
||||||
name: messageObject.name,
|
name: messageObject.name,
|
||||||
@ -38,6 +41,40 @@ wss.on('connection', function connection(ws) {
|
|||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
|
case "invokeMethod":
|
||||||
|
console.log(messageObject.objectName)
|
||||||
|
console.log(messageObject.functionName)
|
||||||
|
|
||||||
|
let args = []
|
||||||
|
for (let i = 0;i < messageObject.javaValues.length;i++) {
|
||||||
|
let javaValue = messageObject.javaValues[i]
|
||||||
|
if (javaValue.type === 0) {
|
||||||
|
args.push(null)
|
||||||
|
} else if (javaValue.type === 1) {
|
||||||
|
args.push(parseFloat(javaValue.value))
|
||||||
|
} else if (javaValue.type === 2) {
|
||||||
|
args.push((javaValue.value == 'true'))
|
||||||
|
} else if (javaValue.type === 3) {
|
||||||
|
args.push(javaValue.value.toString())
|
||||||
|
} else if (javaValue.type === 4) {
|
||||||
|
args.push(JSON.parse(javaValue.value))
|
||||||
|
} else if (javaValue.type === 5) {
|
||||||
|
args.push(JSON.parse(javaValue.value))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(args)
|
||||||
|
console.log(messageObject.hashKey)
|
||||||
|
|
||||||
|
let object = Reflect.get(global, messageObject.objectName)
|
||||||
|
let method = Reflect.get(object, messageObject.functionName)
|
||||||
|
let result = Reflect.apply(method, undefined, args)
|
||||||
|
|
||||||
|
console.log(result)
|
||||||
|
ws.send(JSON.stringify({
|
||||||
|
cmd: 'invokeMethod',
|
||||||
|
result: result
|
||||||
|
}))
|
||||||
|
break
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Reference in New Issue
Block a user