Skip to content

Commit

Permalink
add beginnings of ipc
Browse files Browse the repository at this point in the history
  • Loading branch information
mafintosh committed Jul 29, 2017
1 parent 983ee3e commit 98bd3e1
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 24 deletions.
20 changes: 17 additions & 3 deletions app/src/main/assets/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,18 @@
console.log("hello world")

var http = require('http')
var net = require('net')

var android = function () { // TODO: move to internal module
var port = Number(process.argv[process.argv.length - 1])
var sock = net.connect(port, '127.0.0.1')
return {
loadUrl: function (u) {
sock.write(u)
}
}
}()

console.log("hello world")
console.log('argv', process.argv)

var server = http.createServer(function (req, res) {
res.setHeader('Content-Type', 'text/html')
Expand All @@ -15,4 +27,6 @@ var server = http.createServer(function (req, res) {
`)
})

server.listen(10000)
server.listen(0, function () {
android.loadUrl('http://localhost:' + server.address().port)
})
65 changes: 56 additions & 9 deletions app/src/main/java/com/mafintosh/nodeonandroid/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,79 @@
package com.mafintosh.nodeonandroid;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {
private WebView browser;
private NodeReceiver receiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Intent i = new Intent(MainActivity.this, NodeService.class);
startService(i);
receiver = new NodeReceiver();
IntentFilter filter = new IntentFilter("com.mafintosh.nodeonandroid.ipc");
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter);

WebView browser = (WebView) findViewById(R.id.webview);
browser = (WebView) findViewById(R.id.webview);
browser.getSettings().setLoadWithOverviewMode(true);
browser.getSettings().setUseWideViewPort(true);
browser.getSettings().setJavaScriptEnabled(true);

try {
Thread.sleep(3000);
} catch (Exception e) {
e.printStackTrace();
}
final Context me = this;

new Thread(
new Runnable() {
@Override
public void run() {
try {
ServerSocket server = new ServerSocket(0, 5, InetAddress.getByName("127.0.0.1"));

Intent i = new Intent(MainActivity.this, NodeService.class);
i.putExtra("ipc-port", "" + server.getLocalPort());
startService(i);

Socket socket = server.accept();
BufferedInputStream inp = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());

browser.loadUrl("http://localhost:10000");
byte[] buf = new byte[65536];

while (true) {
int read = inp.read(buf);
String u = new String(Arrays.copyOfRange(buf, 0, read));
Intent in = new Intent("com.mafintosh.nodeonandroid.ipc");
in.putExtra("loadUrl", u);
LocalBroadcastManager.getInstance(me).sendBroadcast(in);
}
} catch (Exception err) {
err.printStackTrace();
}
}
}
).start();

}

private class NodeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String loadUrl = intent.getStringExtra("loadUrl");
if (loadUrl != null) browser.loadUrl(loadUrl);
}
}
}
24 changes: 12 additions & 12 deletions app/src/main/java/com/mafintosh/nodeonandroid/NodeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@
import android.content.Intent;
import android.content.res.AssetManager;
import android.os.IBinder;
import android.os.Process;
import android.support.annotation.Nullable;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
Expand All @@ -16,15 +14,6 @@ public class NodeService extends Service {
@Override
public void onCreate() {
super.onCreate();

new Thread(new Runnable() {
@Override
public void run() {
String jsPath = getCacheDir().getAbsolutePath() + "/index.js";
copyAssetFile(getAssets(), "index.js", jsPath);
startNode("node", jsPath);
}
}).start();
}

@Override
Expand All @@ -34,7 +23,18 @@ public void onDestroy() {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
final String ipcPort = intent.getStringExtra("ipc-port");

new Thread(new Runnable() {
@Override
public void run() {
String jsPath = getCacheDir().getAbsolutePath() + "/index.js";
copyAssetFile(getAssets(), "index.js", jsPath);
startNode("node", jsPath, "" + ipcPort);
}
}).start();

return START_REDELIVER_INTENT;
}

@Nullable
Expand Down

0 comments on commit 98bd3e1

Please sign in to comment.