summaryrefslogtreecommitdiff
path: root/akono/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'akono/src/main')
-rw-r--r--akono/src/main/cpp/akono-jni.cpp40
-rw-r--r--akono/src/main/java/akono/AkonoJni.kt11
-rw-r--r--akono/src/main/java/akono/Library.kt10
3 files changed, 41 insertions, 20 deletions
diff --git a/akono/src/main/cpp/akono-jni.cpp b/akono/src/main/cpp/akono-jni.cpp
index 804a364a..0480eea5 100644
--- a/akono/src/main/cpp/akono-jni.cpp
+++ b/akono/src/main/cpp/akono-jni.cpp
@@ -132,8 +132,9 @@ static const char *main_code = "global.__akono_run = (x) => {"
" if (res !== false) return res;"
" const args = JSON.stringify({ request, paths});"
" const loadResult = JSON.parse(global.__akono_loadModule(args));"
- " console.log('got loadModule result', loadResult);"
+ " console.log('got loadModule result');"
" if (!loadResult) return false;"
+ " console.log('loadModule path is', loadResult.path);"
" mod._akonoMods[loadResult.path] = loadResult;"
" console.log('returning path', loadResult.path);"
" return loadResult.path;"
@@ -151,13 +152,34 @@ static const char *main_code = "global.__akono_run = (x) => {"
" console.log('handling js extension', [module, filename]);"
" if (mod._akonoMods.hasOwnProperty(filename)) {"
" const akmod = mod._akonoMods[filename];"
- " console.log('found mod', akmod);"
+ " console.log('found mod');"
" const content = akmod.content;"
- " return module._compile(stripBOM(content), filename);"
+ " module._compile(stripBOM(content), filename);"
+ " return;"
" }"
" console.log('falling back');"
" return mod._saved_js_extension(module, filename);"
- "};";
+ "};"
+ ""
+ "mod._saved_json_extension = mod._extensions[\".json\"];"
+ "mod._extensions[\".json\"] = (module, filename) => {"
+ " console.log('handling json extension', [module, filename]);"
+ " if (mod._akonoMods.hasOwnProperty(filename)) {"
+ " const akmod = mod._akonoMods[filename];"
+ " console.log('found mod');"
+ " const content = akmod.content;"
+ " try {"
+ " module.exports = JSON.parse(stripBOM(content));"
+ " return;"
+ " } catch (err) {"
+ " err.message = filename + ': ' + err.message;"
+ " throw err;"
+ " }"
+ " }"
+ " console.log('falling back');"
+ " return mod._saved_json_extension(module, filename);"
+ "};"
+ "";
class NativeAkonoInstance {
@@ -223,7 +245,7 @@ public:
// Arguments for the script run by node
std::vector<const char *> nodeExecArgv{};
- mylog("entering global scopt");
+ mylog("entering global scope");
v8::Context::Scope context_scope(globalContext.Get(isolate));
@@ -283,6 +305,10 @@ public:
* @param env JNI env of the thread we're running in.
*/
void runNode() {
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::HandleScope handle_scope(isolate);
+ v8::Local<v8::Context> context = globalContext.Get(isolate);
+ v8::Context::Scope context_scope(context);
this->breakRequested = false;
while (1) {
uv_run(uv_default_loop(), UV_RUN_ONCE);
@@ -476,8 +502,6 @@ static void loadModuleCallback(const v8::FunctionCallbackInfo<v8::Value> &args)
JStringValue resultStringValue(env, jresult);
- printf("before creating string, res %s\n", *resultStringValue);
-
// Create a string containing the JavaScript source code.
v8::Local<v8::String> rs =
v8::String::NewFromUtf8(isolate, *resultStringValue,
@@ -532,8 +556,6 @@ static void getDataCallback(const v8::FunctionCallbackInfo<v8::Value> &args) {
JStringValue resultStringValue(env, jresult);
- printf("before creating string, res %s\n", *resultStringValue);
-
// Create a string containing the JavaScript source code.
v8::Local<v8::String> rs =
v8::String::NewFromUtf8(isolate, *resultStringValue,
diff --git a/akono/src/main/java/akono/AkonoJni.kt b/akono/src/main/java/akono/AkonoJni.kt
index 4a89a3f6..b3636031 100644
--- a/akono/src/main/java/akono/AkonoJni.kt
+++ b/akono/src/main/java/akono/AkonoJni.kt
@@ -67,9 +67,18 @@ class AkonoJni(vararg nodeArgv: String) {
val loadInfo = JSONObject(loadInfoStr)
val request: String = loadInfo.getString("request")
Log.i("myapp", "request is $request")
+ val paths = ArrayList<String>()
+ val pathsJson = loadInfo.getJSONArray("paths")
+ for (i in 0 until pathsJson.length()) {
+ val path = pathsJson.getString(i)
+ if (path.startsWith("/vmodroot/")) {
+ paths.add(path)
+ }
+ }
+ paths.add("/vmodroot")
val handler = loadModuleHandler
if (handler != null) {
- val modResult = handler.loadModule(request, arrayOf()) ?: return "null"
+ val modResult = handler.loadModule(request, paths.toTypedArray()) ?: return "null"
val result = JSONObject()
result.put("path", modResult.path)
result.put("content", modResult.contents)
diff --git a/akono/src/main/java/akono/Library.kt b/akono/src/main/java/akono/Library.kt
deleted file mode 100644
index 920648fd..00000000
--- a/akono/src/main/java/akono/Library.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * This Kotlin source file was generated by the Gradle 'init' task.
- */
-package akono
-
-class Library {
- fun someLibraryMethod(): Boolean {
- return true
- }
-}