Refactor part of core.legacy to core.networking

This commit is contained in:
2016-07-11 22:54:24 +01:00
parent 0a000884e0
commit 7868c742a5
42 changed files with 531 additions and 27 deletions

View File

@@ -0,0 +1,196 @@
/**
* Copyright (C) 2015 Rik Veenboer <rik.veenboer@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package mimis.value;
public enum Key {
/*
* VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
* 0x40 : unassigned
* VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
*/
LBUTTON (0x01),
RBUTTON (0x02),
CANCEL (0x03),
MBUTTON (0x04),
XBUTTON1 (0x05),
XBUTTON2 (0x06),
BACK (0x08),
TAB (0x09),
CLEAR (0x0C),
RETURN (0x0D),
SHIFT (0x10),
CONTROL (0x11),
MENU (0x12),
PAUSE (0x13),
CAPITAL (0x14),
KANA (0x15),
HANGEUL (0x15),
HANGUL (0x15),
JUNJA (0x17),
FINAL (0x18),
HANJA (0x19),
KANJI (0x19),
ESCAPE (0x1B),
CONVERT (0x1C),
NONCONVERT (0x1D),
ACCEPT (0x1E),
MODECHANGE (0x1F),
SPACE (0x20),
PRIOR (0x21),
NEXT (0x22),
END (0x23),
HOME (0x24),
LEFT (0x25),
UP (0x26),
RIGHT (0x27),
DOWN (0x28),
SELECT (0x29),
PRINT (0x2A),
EXECUTE (0x2B),
SNAPSHOT (0x2C),
INSERT (0x2D),
DELETE (0x2E),
HELP (0x2F),
LWIN (0x5B),
RWIN (0x5C),
APPS (0x5D),
SLEEP (0x5F),
NUMPAD0 (0x60),
NUMPAD1 (0x61),
NUMPAD2 (0x62),
NUMPAD3 (0x63),
NUMPAD4 (0x64),
NUMPAD5 (0x65),
NUMPAD6 (0x66),
NUMPAD7 (0x67),
NUMPAD8 (0x68),
NUMPAD9 (0x69),
MULTIPLY (0x6A),
ADD (0x6B),
SEPARATOR (0x6C),
SUBTRACT (0x6D),
DECIMAL (0x6E),
DIVIDE (0x6F),
F1 (0x70),
F2 (0x71),
F3 (0x72),
F4 (0x73),
F5 (0x74),
F6 (0x75),
F7 (0x76),
F8 (0x77),
F9 (0x78),
F10 (0x79),
F11 (0x7A),
F12 (0x7B),
F13 (0x7C),
F14 (0x7D),
F15 (0x7E),
F16 (0x7F),
F17 (0x80),
F18 (0x81),
F19 (0x82),
F20 (0x83),
F21 (0x84),
F22 (0x85),
F23 (0x86),
F24 (0x87),
NUMLOCK (0x90),
SCROLL (0x91),
OEM_NEC_EQUAL (0x92),
OEM_FJ_JISHO (0x92),
OEM_FJ_MASSHOU (0x93),
OEM_FJ_TOUROKU (0x94),
OEM_FJ_LOYA (0x95),
OEM_FJ_ROYA (0x96),
LSHIFT (0xA0),
RSHIFT (0xA1),
LCONTROL (0xA2),
RCONTROL (0xA3),
LMENU (0xA4),
RMENU (0xA5),
BROWSER_BACK (0xA6),
BROWSER_FORWARD (0xA7),
BROWSER_REFRESH (0xA8),
BROWSER_STOP (0xA9),
BROWSER_SEARCH (0xAA),
BROWSER_FAVORITES (0xAB),
BROWSER_HOME (0xAC),
VOLUME_MUTE (0xAD),
VOLUME_DOWN (0xAE),
VOLUME_UP (0xAF),
MEDIA_NEXT_TRACK (0xB0),
MEDIA_PREV_TRACK (0xB1),
MEDIA_STOP (0xB2),
MEDIA_PLAY_PAUSE (0xB3),
LAUNCH_MAIL (0xB4),
LAUNCH_MEDIA_SELECT (0xB5),
LAUNCH_APP1 (0xB6),
LAUNCH_APP2 (0xB7),
OEM_1 (0xBA),
OEM_PLUS (0xBB),
OEM_COMMA (0xBC),
OEM_MINUS (0xBD),
OEM_PERIOD (0xBE),
OEM_2 (0xBF),
OEM_3 (0xC0),
OEM_4 (0xDB),
OEM_5 (0xDC),
OEM_6 (0xDD),
OEM_7 (0xDE),
OEM_8 (0xDF),
OEM_AX (0xE1),
OEM_102 (0xE2),
ICO_HELP (0xE3),
ICO_00 (0xE4),
PROCESSKEY (0xE5),
ICO_CLEAR (0xE6),
PACKET (0xE7),
OEM_RESET (0xE9),
OEM_JUMP (0xEA),
OEM_PA1 (0xEB),
OEM_PA2 (0xEC),
OEM_PA3 (0xED),
OEM_WSCTRL (0xEE),
OEM_CUSEL (0xEF),
OEM_ATTN (0xF0),
OEM_FINISH (0xF1),
OEM_COPY (0xF2),
OEM_AUTO (0xF3),
OEM_ENLW (0xF4),
OEM_BACKTAB (0xF5),
ATTN (0xF6),
CRSEL (0xF7),
EXSEL (0xF8),
EREOF (0xF9),
PLAY (0xFA),
ZOOM (0xFB),
NONAME (0xFC),
PA1 (0xFD),
OEM_CLEAR (0xFE);
protected int code;
private Key(int code) {
this.code = code;
}
public int getCode() {
return code;
}
}

View File

@@ -0,0 +1,3 @@
dependencies {
compile project(':core.legacy')
}

View File

@@ -0,0 +1,20 @@
package junit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import networking.TestUdpMulticastCommunication;
import networking.TestUdpUnicastCommunication;
@RunWith(Suite.class)
@SuiteClasses({
TestTcpSocketCommunication.class,
TestTcpChannelCommunication.class,
TestUdpUnicastCommunication.class,
TestUdpMulticastCommunication.class,
TestUdpDuplexCommunication.class
})
public class AllTests {}
// Should test start()/stop() of components, check implementation

View File

@@ -1,4 +1,4 @@
package junit;
package networking;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

View File

@@ -0,0 +1,94 @@
package networking;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import base.server.channel.TcpClient;
import base.server.channel.TcpServer;
import base.server.channel.TcpServerClient;
public class TestTcpChannelCommunication {
protected TestTcpServer server;
protected TestTcpClient client;
@Before
public void setUp() throws Exception {
server = new TestTcpServer(1234);
server.start();
client = new TestTcpClient(1234);
client.start();
}
@After
public void tearDown() throws Exception {
client.exit();
server.exit();
// Should add blocking stop and exit to worker
while (client.active() || server.active()) {
Thread.sleep(100);
}
}
@Test
public void testSendClientToServer() throws Exception {
String message = "test";
client.send(message.getBytes());
synchronized (server) {
server.wait(2000);
}
byte[] buffer = server.buffer;
assertNotNull("Received input", buffer);
assertEquals("Message intact", message, new String(buffer).trim());
}
@Test
public void testSendServerToClient() throws Exception {
// If client can send, connection has been established
client.send("init".getBytes());
String message = "test";
server.send(message.getBytes());
synchronized (client) {
client.wait(2000);
}
byte[] buffer = client.buffer;
assertNotNull("Received input", buffer);
assertEquals("Message intact", message, new String(buffer).trim());
}
class TestTcpServer extends TcpServer {
public byte[] buffer;
public TestTcpServer(int port) {
super(port);
}
public void input(TcpServerClient client, byte[] buffer) {
this.buffer = buffer;
synchronized (this) {
notifyAll();
}
}
}
class TestTcpClient extends TcpClient {
public byte[] buffer;
public TestTcpClient(int port) {
super(port);
}
protected void input(byte[] buffer) {
this.buffer = buffer;
synchronized (this) {
notifyAll();
}
}
}
}

View File

@@ -0,0 +1,93 @@
package networking;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import base.server.socket.TcpClient;
import base.server.socket.TcpServer;
import base.server.socket.TcpServerClient;
public class TestTcpSocketCommunication {
protected TestTcpServer server;
protected TestTcpClient client;
@Before
public void setUp() throws Exception {
server = new TestTcpServer(1234);
server.start();
client = new TestTcpClient(1234);
client.start();
}
@After
public void tearDown() throws Exception {
client.exit();
server.exit();
// Should add blocking stop and exit to worker
while (client.active() || server.active()) {
Thread.sleep(100);
}
}
@Test
public void testSendClientToServer() throws Exception {
String message = "test";
client.send(message.getBytes());
synchronized (server) {
server.wait(2000);
}
byte[] buffer = server.buffer;
assertNotNull("Received input", buffer);
assertEquals("Message intact", message, new String(buffer).trim());
}
@Test
public void testSendServerToClient() throws Exception {
// If client can send, connection has been established
client.send("init".getBytes());
String message = "test";
server.send(message.getBytes());
synchronized (client) {
client.wait(2000);
}
byte[] buffer = client.buffer;
assertNotNull("Received input", buffer);
assertEquals("Message intact", message, new String(buffer).trim());
}
class TestTcpServer extends TcpServer {
public byte[] buffer;
public TestTcpServer(int port) {
super(port);
}
public void input(TcpServerClient client, byte[] buffer) {
this.buffer = buffer;
synchronized (this) {
notifyAll();
}
}
}
class TestTcpClient extends TcpClient {
public byte[] buffer;
public TestTcpClient(int port) {
super(port);
}
protected void input(byte[] buffer) {
this.buffer = buffer;
synchronized (this) {
notifyAll();
}
}
}
}

View File

@@ -0,0 +1,96 @@
package networking;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.net.UnknownHostException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import base.server.datagram.UdpDuplexAutoClient;
import base.server.datagram.UdpDuplexServer;
public class TestUdpDuplexCommunication {
protected TestUdpDuplexServer server;
protected TestUdpDuplexClient client;
@Before
public void setUp() throws Exception {
server = new TestUdpDuplexServer(1234, 1235);
server.start();
client = new TestUdpDuplexClient(1234, 1235);
client.start();
}
@After
public void tearDown() throws Exception {
client.exit();
server.exit();
// Should add blocking stop and exit to worker
while (client.active() || server.active()) {
Thread.sleep(1000);
}
}
@Test
public void testServerToClientCommunication() throws Exception {
String message = "test";
server.send(message.getBytes());
System.err.println("send");
synchronized (client) {
client.wait(2000);
}
byte[] buffer = client.buffer;
assertNotNull("Received input", buffer);
assertEquals("Message intact", message, new String(buffer).trim());
}
@Test
public void testClientToServerCommunication() throws Exception {
// Let client discover server address
testServerToClientCommunication();
String message = "test";
client.send(message.getBytes());
System.err.println("send");
synchronized (server) {
server.wait(2000);
}
byte[] buffer = server.buffer;
assertNotNull("Received input", buffer);
assertEquals("Message intact", message, new String(buffer).trim());
}
public class TestUdpDuplexServer extends UdpDuplexServer {
public byte[] buffer;
public TestUdpDuplexServer(int sendPort, int bindPort) {
super(sendPort, bindPort);
}
public void input(byte[] buffer) {
this.buffer = buffer;
synchronized (this) {
notifyAll();
}
}
}
class TestUdpDuplexClient extends UdpDuplexAutoClient {
public byte[] buffer;
public TestUdpDuplexClient(int bindPort, int sendPort) throws UnknownHostException {
super(bindPort, sendPort);
}
public void input(byte[] buffer) {
this.buffer = buffer;
synchronized (this) {
notifyAll();
}
}
}
}

View File

@@ -1,4 +1,4 @@
package junit;
package networking;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

View File

@@ -1,4 +1,4 @@
package junit;
package networking;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

View File

@@ -1,4 +1,5 @@
dependencies {
compile project(':core.networking')
compile project(':core.windows')
compile 'com.github.boukefalos:jlibmimis:0.1'

View File

@@ -1,6 +1,7 @@
dependencies {
compile project(':core.legacy')
compile project(':core.networking')
compile project(':core.mimis')
compile project(':core.legacy')
compile project(':device.lirc')
compile project(':exec.mimis')

View File

@@ -12,35 +12,35 @@ import dummy.Dummy;
public class TestTcpCommunication {
public static void main(String[] args) throws Exception {
Properties localProperties = new Properties();
localProperties.setProperty("implementation", "local");
localProperties.setProperty("server", "true");
localProperties.setProperty("server.port", "8883");
localProperties.setProperty("server.protocol", "tcp");
Properties localProperties = new Properties();
localProperties.setProperty("implementation", "local");
localProperties.setProperty("server", "true");
localProperties.setProperty("server.port", "8883");
localProperties.setProperty("server.protocol", "tcp");
Properties remoteProperties = new Properties();
remoteProperties.setProperty("implementation", "remote");
remoteProperties.setProperty("protocol", "tcp");
remoteProperties.setProperty("remote.host", "localhost");
remoteProperties.setProperty("remote.port", "8883");
Properties remoteProperties = new Properties();
remoteProperties.setProperty("implementation", "remote");
remoteProperties.setProperty("protocol", "tcp");
remoteProperties.setProperty("remote.host", "localhost");
remoteProperties.setProperty("remote.port", "8883");
Loader localLoader = new Loader(localProperties);
Loader remoteLoader = new Loader(remoteProperties);
Loader localLoader = new Loader(localProperties);
Loader remoteLoader = new Loader(remoteProperties);
Lirc localLirc = localLoader.getLirc();
Lirc remoteLirc = remoteLoader.getLirc();
Lirc localLirc = localLoader.getLirc();
Lirc remoteLirc = remoteLoader.getLirc();
Properties iBuddyProperties = new Properties();
iBuddyProperties.setProperty("implementation", "local");
iBuddy iBuddy = new com.github.boukefalos.ibuddy.Loader(iBuddyProperties).getiBuddy();
Dummy dummy = new Dummy(localLirc, iBuddy);
Properties iBuddyProperties = new Properties();
iBuddyProperties.setProperty("implementation", "local");
iBuddy iBuddy = new com.github.boukefalos.ibuddy.Loader(iBuddyProperties).getiBuddy();
Dummy dummy = new Dummy(localLirc, iBuddy);
Control server = localLoader.getServer();
Control server = localLoader.getServer();
remoteLirc.start();
server.start();
dummy.start();
remoteLirc.start();
server.start();
dummy.start();
Thread.sleep(10000);
Thread.sleep(10000);
}
}