diff --git a/src/se/vidstige/jadb/server/AdbDeviceResponder.java b/src/se/vidstige/jadb/server/AdbDeviceResponder.java index 5598072..6dc8ad1 100644 --- a/src/se/vidstige/jadb/server/AdbDeviceResponder.java +++ b/src/se/vidstige/jadb/server/AdbDeviceResponder.java @@ -4,4 +4,6 @@ package se.vidstige.jadb.server; * Created by vidstige on 20/03/14. */ public interface AdbDeviceResponder { + String getSerial(); + String getType(); } diff --git a/src/se/vidstige/jadb/server/AdbProtocolHandler.java b/src/se/vidstige/jadb/server/AdbProtocolHandler.java index 4e09844..b991f98 100644 --- a/src/se/vidstige/jadb/server/AdbProtocolHandler.java +++ b/src/se/vidstige/jadb/server/AdbProtocolHandler.java @@ -8,11 +8,13 @@ import java.net.Socket; import java.nio.charset.Charset; public class AdbProtocolHandler implements Runnable { - private Socket socket; + private final Socket socket; + private final AdbResponder responder; - public AdbProtocolHandler(Socket socket) { + public AdbProtocolHandler(Socket socket, AdbResponder responder) { this.socket = socket; - } + this.responder = responder; + } @Override public void run() @@ -28,34 +30,33 @@ public class AdbProtocolHandler implements Runnable { byte[] buffer = new byte[4]; input.readFully(buffer); String encodedLength = new String(buffer, Charset.forName("utf-8")); - System.out.println("DEBUG: " + encodedLength); int length = Integer.parseInt(encodedLength, 16); buffer = new byte[length]; input.readFully(buffer); String command = new String(buffer, Charset.forName("utf-8")); - System.out.println("Command: " + command); + + responder.onCommand(command); if ("host:version".equals(command)) { output.write("OKAY"); - send(output, "001F"); // version. required to be 31 - System.out.println("OK"); + send(output, String.format("%04x", responder.getVersion())); } else if ("host:transport-any".equals(command)) { output.write("OKAY"); - System.out.println("OK"); } else if ("host:devices".equals(command)) { output.write("OKAY"); - send(output, "X\tdevice\nY\tdevice"); - System.out.println("OK"); + for (AdbDeviceResponder d : responder.getDevices()) + { + send(output, d.getSerial() + "\t" + d.getType() + "\n"); + } } else { output.write("FAIL"); send(output, "Unknown command: " + command); - System.out.println("FAIL"); } output.flush(); } diff --git a/src/se/vidstige/jadb/server/AdbResponder.java b/src/se/vidstige/jadb/server/AdbResponder.java index 6ab9547..e9291b2 100644 --- a/src/se/vidstige/jadb/server/AdbResponder.java +++ b/src/se/vidstige/jadb/server/AdbResponder.java @@ -1,7 +1,14 @@ package se.vidstige.jadb.server; +import java.util.List; + /** * Created by vidstige on 20/03/14. */ public interface AdbResponder { + void onCommand(String command); + + int getVersion(); + + List getDevices(); } diff --git a/src/se/vidstige/jadb/server/AdbServer.java b/src/se/vidstige/jadb/server/AdbServer.java index f9f4db1..8f336fc 100644 --- a/src/se/vidstige/jadb/server/AdbServer.java +++ b/src/se/vidstige/jadb/server/AdbServer.java @@ -8,24 +8,20 @@ import java.net.Socket; public class AdbServer extends SocketServer { public static final int DEFAULT_PORT = 15037; + private AdbResponder responder; - public AdbServer() + public AdbServer(AdbResponder responder) { - this(DEFAULT_PORT); + this(responder, DEFAULT_PORT); } - public AdbServer(int port) { + public AdbServer(AdbResponder responder, int port) { super(port); + this.responder = responder; } @Override protected Runnable createResponder(Socket socket) { - return new AdbProtocolHandler(socket); - } - - public static void main(String[] args) - { - SocketServer server = new AdbServer(); - server.run(); + return new AdbProtocolHandler(socket, responder); } } diff --git a/test/se/vidstige/jadb/test/MockedTestCases.java b/test/se/vidstige/jadb/test/MockedTestCases.java index e6f47fb..4bc44c7 100644 --- a/test/se/vidstige/jadb/test/MockedTestCases.java +++ b/test/se/vidstige/jadb/test/MockedTestCases.java @@ -32,7 +32,8 @@ public class MockedTestCases { @Test public void testListDevices() throws Exception { + server.add("serial-123"); List devices = connection.getDevices(); - Assert.assertEquals("X", devices.get(0).getSerial()); + Assert.assertEquals("serial-123", devices.get(0).getSerial()); } } diff --git a/test/se/vidstige/jadb/test/fakes/FakeAdbServer.java b/test/se/vidstige/jadb/test/fakes/FakeAdbServer.java index 2d5ec50..11ec23e 100644 --- a/test/se/vidstige/jadb/test/fakes/FakeAdbServer.java +++ b/test/se/vidstige/jadb/test/fakes/FakeAdbServer.java @@ -5,15 +5,18 @@ import se.vidstige.jadb.server.AdbResponder; import se.vidstige.jadb.server.AdbServer; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; /** * Created by vidstige on 2014-03-20. */ -public class FakeAdbServer implements AdbResponder, AdbDeviceResponder { +public class FakeAdbServer implements AdbResponder { private final AdbServer server; + private List devices = new ArrayList(); public FakeAdbServer(int port) { - server = new AdbServer(port); + server = new AdbServer(this, port); } @@ -24,4 +27,42 @@ public class FakeAdbServer implements AdbResponder, AdbDeviceResponder { public void stop() throws IOException, InterruptedException { server.stop(); } + + @Override + public void onCommand(String command) { + System.out.println("command: " +command); + } + + @Override + public int getVersion() { + return 31; + } + + public void add(String serial) + { + devices.add(new DeviceResponder(serial)); + } + + @Override + public List getDevices() { + return devices; + } + + private static class DeviceResponder implements AdbDeviceResponder { + private final String serial; + + private DeviceResponder(String serial) { + this.serial = serial; + } + + @Override + public String getSerial() { + return serial; + } + + @Override + public String getType() { + return "device"; + } + } }