diff options
Diffstat (limited to 'AndroidAsync')
8 files changed, 83 insertions, 39 deletions
diff --git a/AndroidAsync/AndroidManifest.xml b/AndroidAsync/AndroidManifest.xml index d89e9aa..9443c98 100644 --- a/AndroidAsync/AndroidManifest.xml +++ b/AndroidAsync/AndroidManifest.xml @@ -7,6 +7,7 @@ android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET"/> + <uses-permission android:name="android.permission.READ_LOGS"/> <application android:icon="@drawable/ic_launcher" diff --git a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java index 0d1da6d..2bd9a3b 100644 --- a/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java +++ b/AndroidAsync/src/com/koushikdutta/async/AsyncServer.java @@ -25,7 +25,7 @@ import android.util.Log; public class AsyncServer { private static final String LOGTAG = "NIO"; - static AsyncServer mInstance; + static AsyncServer mInstance = new AsyncServer(); public static AsyncServer getDefault() { if (mInstance == null) mInstance = new AsyncServer(); @@ -229,6 +229,8 @@ public class AsyncServer { while (mRun) { try { runLoop(); + if (mSelector.keys().size() == 0) + mRun = false; } catch (Exception e) { Log.i(LOGTAG, "exception?"); @@ -253,11 +255,17 @@ public class AsyncServer { mSelector = null; mShuttingDown = false; mAffinity = null; + Log.i(LOGTAG, "****AsyncServer has shut down.****"); } private void runLoop() throws IOException { - mSelector.select(); runQueue(); + int readyNow = mSelector.selectNow(); + if (readyNow == 0) { + if (mSelector.keys().size() == 0) + return; + mSelector.select(); + } Set<SelectionKey> readyKeys = mSelector.selectedKeys(); for (SelectionKey key : readyKeys) { if (key.isAcceptable()) { diff --git a/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java b/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java index 61f49c2..8179e57 100644 --- a/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java +++ b/AndroidAsync/src/com/koushikdutta/async/ByteBufferList.java @@ -87,6 +87,9 @@ public class ByteBufferList implements Iterable<ByteBuffer> { public ByteBuffer read(int count) { Assert.assertTrue(count <= remaining()); + if (count == 0) { + return ByteBuffer.wrap(new byte[0]); + } ByteBuffer first = mBuffers.peek(); while (first.position() == first.limit()) { diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java index d4bbcac..733d444 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpClient.java @@ -98,7 +98,6 @@ public class AsyncHttpClient { } String kas = headers.get("Connection"); - // wip if (kas != null && "keep-alive".toLowerCase().equals(kas.toLowerCase())) keepalive = true; } @@ -161,7 +160,6 @@ public class AsyncHttpClient { for (final SocketExchange se: sockets) { final AsyncSocket socket = se.socket; if (socket.isConnected()) { - System.out.println("reuing socket"); sockets.remove(se); socket.setClosedCallback(null); server.post(new Runnable() { @@ -317,7 +315,7 @@ public class AsyncHttpClient { } private static void download(AsyncHttpRequest req, final ResultPairCallback callback, final ResultConvert convert) { - final Handler handler = new Handler(); + final Handler handler = Looper.myLooper() == null ? null : new Handler(); connect(req, new HttpConnectCallback() { ByteBufferList buffer = new ByteBufferList(); @Override diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java index 5d64a44..22a65a1 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncHttpRequest.java @@ -14,7 +14,7 @@ public class AsyncHttpRequest { if (path.length() == 0) path = "/"; String query = getUri().getQuery(); - if (query.length() != 0) + if (query != null && query.length() != 0) path += "?" + getUri().getQuery(); return String.format("%s %s HTTP/1.1", mMethod, path); } diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/HybiParser.java b/AndroidAsync/src/com/koushikdutta/async/http/server/HybiParser.java index aff2025..253a402 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/HybiParser.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/HybiParser.java @@ -37,12 +37,10 @@ import java.util.Arrays; import java.util.List; import junit.framework.Assert; -import android.util.Log; import com.koushikdutta.async.ByteBufferList; import com.koushikdutta.async.DataEmitter; import com.koushikdutta.async.DataEmitterReader; -import com.koushikdutta.async.DataSink; import com.koushikdutta.async.callback.DataCallback; abstract class HybiParser { @@ -266,7 +264,7 @@ abstract class HybiParser { private byte[] frame(Object data, int opcode, int errorCode) { if (mClosed) return null; - Log.d(TAG, "Creating frame for: " + data + " op: " + opcode + " err: " + errorCode); +// Log.d(TAG, "Creating frame for: " + data + " op: " + opcode + " err: " + errorCode); byte[] buffer = (data instanceof String) ? decode((String) data) : (byte[]) data; int insert = (errorCode > 0) ? 2 : 0; @@ -363,18 +361,18 @@ abstract class HybiParser { } else if (opcode == OP_CLOSE) { int code = (payload.length >= 2) ? 256 * payload[0] + payload[1] : 0; String reason = (payload.length > 2) ? encode(slice(payload, 2)) : null; - Log.d(TAG, "Got close op! " + code + " " + reason); +// Log.d(TAG, "Got close op! " + code + " " + reason); onDisconnect(code, reason); } else if (opcode == OP_PING) { if (payload.length > 125) { throw new ProtocolError("Ping payload too large"); } - Log.d(TAG, "Sending pong!!"); +// Log.d(TAG, "Sending pong!!"); sendFrame(frame(payload, OP_PONG, -1)); } else if (opcode == OP_PONG) { String message = encode(payload); // FIXME: Fire callback... - Log.d(TAG, "Got pong! " + message); +// Log.d(TAG, "Got pong! " + message); } } diff --git a/AndroidAsync/src/com/koushikdutta/async/http/server/WebSocketImpl.java b/AndroidAsync/src/com/koushikdutta/async/http/server/WebSocketImpl.java index bcf4135..dfa9811 100644 --- a/AndroidAsync/src/com/koushikdutta/async/http/server/WebSocketImpl.java +++ b/AndroidAsync/src/com/koushikdutta/async/http/server/WebSocketImpl.java @@ -40,8 +40,8 @@ public class WebSocketImpl implements WebSocket { response.getHeaders().getHeaders().set("Upgrade", "WebSocket"); response.getHeaders().getHeaders().set("Connection", "Upgrade"); response.getHeaders().getHeaders().set("Sec-WebSocket-Accept", sha1); - if (origin != null) - response.getHeaders().getHeaders().set("Access-Control-Allow-Origin", "http://" + origin); +// if (origin != null) +// response.getHeaders().getHeaders().set("Access-Control-Allow-Origin", "http://" + origin); response.writeHead(); mParser = new HybiParser(request) { diff --git a/AndroidAsync/src/com/koushikdutta/test/TestActivity.java b/AndroidAsync/src/com/koushikdutta/test/TestActivity.java index ae5a665..2058065 100644 --- a/AndroidAsync/src/com/koushikdutta/test/TestActivity.java +++ b/AndroidAsync/src/com/koushikdutta/test/TestActivity.java @@ -1,5 +1,7 @@ package com.koushikdutta.test; +import java.io.DataInputStream; +import java.io.OutputStream; import java.net.Inet4Address; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -79,6 +81,7 @@ public class TestActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + /* AsyncHttpServer server = new AsyncHttpServer(3000); server.get("/", new HttpServerRequestCallback() { @Override @@ -93,18 +96,52 @@ public class TestActivity extends Activity { server.websocket("/test", new WebSocketCallback() { @Override public void onConnected(final WebSocket webSocket) { + new Thread() { + public void run() { + try { + final Process process = Runtime.getRuntime().exec("su -c /system/bin/logcat"); + new Thread() { + public void run() { + try { + DataInputStream dd = new DataInputStream(process.getErrorStream()); + String s; + while (null != (s = dd.readLine())) { + if (s.length() == 0) + continue; + webSocket.send(s); + } + } + catch (Exception ex) { + + } + }; + + }.start(); + DataInputStream dis = new DataInputStream(process.getInputStream()); + OutputStream os = process.getOutputStream(); + String s; + while (null != (s = dis.readLine())) { + if (s.length() == 0) + continue; + webSocket.send(s); + os.write("\n".getBytes()); + } + } + catch (Exception e) { + e.printStackTrace(); + } + Log.i(TAG, "Done!!!!"); + }; + }.start(); webSocket.setStringCallback(new WebSocket.StringCallback() { @Override public void onStringAvailable(String s) { Log.i(TAG, s); - webSocket.send(s); } }); } }); - if (true) - return; - + */ // try { // ByteArrayOutputStream bout = new ByteArrayOutputStream(); @@ -160,18 +197,8 @@ public class TestActivity extends Activity { // if (true) // return; - ThreadPolicy.Builder b = new Builder(); - StrictMode.setThreadPolicy(b.permitAll().build()); - final String host = "builder.clockworkmod.com"; - final int port = 443; - - final String shit = "GET / HTTP/1.1\n" - + "User-Agent: curl/7.25.0 (x86_64-apple-darwin11.3.0) libcurl/7.25.0 OpenSSL/1.0.1c zlib/1.2.7 libidn/1.22\n" - + String.format("Host: %s\n", host) - + "Accept: */*\n" + "\n\n"; - // final AsyncServer server = new AsyncServer(); try { // server.initialize(); @@ -221,19 +248,28 @@ public class TestActivity extends Activity { if (true) return; */ - - for (int i = 0; i < 5; i++) { - AsyncHttpClient.download("http://builder.clockworkmod.com", new StringCallback() { - @Override - public void onCompleted(Exception e, AsyncHttpResponse response, String result) { - if (e != null) { - e.printStackTrace(); + + new Thread() { + public void run() { + try { + for (int i = 0; i < 5; i++) { + AsyncHttpClient.download("http://builder.clockworkmod.com", new StringCallback() { + @Override + public void onCompleted(Exception e, AsyncHttpResponse response, String result) { + if (e != null) { + e.printStackTrace(); + } + System.out.println(result); + } + }); + Thread.sleep(5000); } - System.out.println(result); } - }); - Thread.sleep(5000); - } + catch (Exception ex) { + ex.printStackTrace(); + } + }; + }.start(); if (true) return; |