mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 05:11:04 +00:00
refactored SwissTiming connector APIs
This commit is contained in:
1 parent
9ee8128701
commit
c802d2885d
10 files changed
+104
-27
No files matched your search
+3
-3
@@ -10,9 +10,9 @@ import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFormatException;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingMessage;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingMessageParser;
|
||||
|
||||
public class ParseSingleSwissTimingPacketFromFileTest {
|
||||
@Test
|
||||
@@ -20,7 +20,7 @@ public class ParseSingleSwissTimingPacketFromFileTest {
|
||||
byte[] message = new byte[65536];
|
||||
InputStream is = getClass().getResourceAsStream("/SwissTimingExampleTrack.bin");
|
||||
is.read(message);
|
||||
SwissTimingMessage swissTimingMessage = SwissTimingMessageParser.INSTANCE.parse(message);
|
||||
SwissTimingMessage swissTimingMessage = SwissTimingFactory.INSTANCE.createMessageParser().parse(message);
|
||||
assertNotNull(swissTimingMessage);
|
||||
int lat = ((0x1e<<8 | 0x2c)<<8 | 0x31)<<8 | 0x14;
|
||||
int lng = ((0xfe << 8 | 0x97)<<8 | 0x1d)<<8 | 0x73;
|
||||
@@ -37,7 +37,7 @@ public class ParseSingleSwissTimingPacketFromFileTest {
|
||||
int offset = 0;
|
||||
int messageLength = 0;
|
||||
while (offset < bytesRead) {
|
||||
SwissTimingMessage swissTimingMessage = SwissTimingMessageParser.INSTANCE.parse(message, offset, bytesRead-offset);
|
||||
SwissTimingMessage swissTimingMessage = SwissTimingFactory.INSTANCE.createMessageParser().parse(message, offset, bytesRead-offset);
|
||||
assertNotNull(swissTimingMessage);
|
||||
messages.add(swissTimingMessage);
|
||||
messageLength = swissTimingMessage.length();
|
||||
|
||||
+10
-16
@@ -3,45 +3,39 @@ package com.sap.sailing.domain.swisstimingadapter.test;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.swisstimingadapter.impl.SailMasterTransceiver;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||
|
||||
public class SailMasterConnectivityTest {
|
||||
private SailMasterDummy sailMaster;
|
||||
private static final int port = 50002;
|
||||
|
||||
private SailMasterTransceiver transceiver;
|
||||
private SailMasterConnector connector;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
public void setUp() throws InterruptedException {
|
||||
// create a SailMaster dummy on port 50002 and launch it in a separate thread
|
||||
sailMaster = new SailMasterDummy(port);
|
||||
new Thread(sailMaster, "SailMasterDummy on port "+port).start();
|
||||
transceiver = new SailMasterTransceiver();
|
||||
Thread.sleep(100); // give dummy sail master server a change to start listening on its socket
|
||||
connector = SwissTimingFactory.INSTANCE.createSailMasterConnector("localhost", port);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws IOException {
|
||||
Socket s = connect();
|
||||
transceiver.sendMessage("StopServer", s.getOutputStream());
|
||||
connector.sendRequestAndGetResponse("StopServer");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRaceId() throws UnknownHostException, IOException {
|
||||
Socket s = connect();
|
||||
transceiver.sendMessage("RaceId", s.getOutputStream());
|
||||
String response = transceiver.receiveMessage(s.getInputStream());
|
||||
assertEquals("RaceId|4711,A wonderful test race|4712,Not such a wonderful race", response);
|
||||
}
|
||||
|
||||
private Socket connect() throws UnknownHostException, IOException {
|
||||
Socket s = new Socket("localhost", port);
|
||||
return s;
|
||||
SailMasterMessage response = connector.sendRequestAndGetResponse("RaceId");
|
||||
assertEquals("RaceId|4711,A wonderful test race|4712,Not such a wonderful race", response.getMessage());
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -29,6 +29,9 @@ public class SailMasterDummy implements Runnable {
|
||||
while (!stopped) {
|
||||
Socket s = listenOn.accept();
|
||||
processRequests(s);
|
||||
if (stopped) {
|
||||
s.close();
|
||||
}
|
||||
}
|
||||
System.out.println("Server stopped. Thread ending.");
|
||||
} catch (IOException e) {
|
||||
@@ -39,8 +42,9 @@ public class SailMasterDummy implements Runnable {
|
||||
private void processRequests(Socket s) throws IOException {
|
||||
InputStream is = s.getInputStream();
|
||||
String message = transceiver.receiveMessage(is);
|
||||
if (message != null) {
|
||||
while (message != null) {
|
||||
respondToMessage(message, s.getOutputStream());
|
||||
message = transceiver.receiveMessage(is);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
public interface SailMasterConnector {
|
||||
SailMasterMessage sendRequestAndGetResponse(String requestMessage) throws UnknownHostException, IOException;
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter;
|
||||
|
||||
public interface SailMasterMessage {
|
||||
|
||||
/**
|
||||
* @return the entire message with STX and ETX stripped
|
||||
*/
|
||||
String getMessage();
|
||||
|
||||
/**
|
||||
* @return the {@link #getMessage()} result split along occurrences of the "|" character ("pipe")
|
||||
*/
|
||||
String[] getSections();
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter;
|
||||
|
||||
import com.sap.sailing.domain.swisstimingadapter.impl.SwissTimingFactoryImpl;
|
||||
|
||||
public interface SwissTimingFactory {
|
||||
SwissTimingFactory INSTANCE = new SwissTimingFactoryImpl();
|
||||
|
||||
SwissTimingMessageParser createMessageParser();
|
||||
|
||||
SailMasterConnector createSailMasterConnector(String host, int port);
|
||||
}
|
||||
-3
@@ -1,11 +1,8 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter;
|
||||
|
||||
import com.sap.sailing.domain.swisstimingadapter.impl.SwissTimingMessageParserImpl;
|
||||
import com.sap.sailing.udpconnector.UDPMessageParser;
|
||||
|
||||
public interface SwissTimingMessageParser extends UDPMessageParser<SwissTimingMessage> {
|
||||
SwissTimingMessageParser INSTANCE = new SwissTimingMessageParserImpl();
|
||||
|
||||
SwissTimingMessage parse(byte[] message) throws SwissTimingFormatException;
|
||||
|
||||
SwissTimingMessage parse(byte[] message, int offset, int length) throws SwissTimingFormatException;
|
||||
|
||||
+7
-4
@@ -5,22 +5,25 @@ import java.io.OutputStream;
|
||||
import java.net.Socket;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
public class SailMasterConnector extends SailMasterTransceiver {
|
||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
|
||||
|
||||
public class SailMasterConnectorImpl extends SailMasterTransceiver implements SailMasterConnector {
|
||||
private final String host;
|
||||
private final int port;
|
||||
private Socket socket;
|
||||
|
||||
public SailMasterConnector(String host, int port) {
|
||||
public SailMasterConnectorImpl(String host, int port) {
|
||||
super();
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public String sendRequestAndGetResponse(String requestMessage) throws UnknownHostException, IOException {
|
||||
public SailMasterMessage sendRequestAndGetResponse(String requestMessage) throws UnknownHostException, IOException {
|
||||
ensureSocketIsOpen();
|
||||
OutputStream os = socket.getOutputStream();
|
||||
sendMessage(requestMessage, os);
|
||||
return receiveMessage(socket.getInputStream());
|
||||
return new SailMasterMessageImpl(receiveMessage(socket.getInputStream()));
|
||||
}
|
||||
|
||||
private void ensureSocketIsOpen() throws UnknownHostException, IOException {
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter.impl;
|
||||
|
||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
|
||||
|
||||
public class SailMasterMessageImpl implements SailMasterMessage {
|
||||
private final String message;
|
||||
|
||||
public SailMasterMessageImpl(String message) {
|
||||
super();
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getSections() {
|
||||
return getMessage().split("|");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getMessage();
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.sap.sailing.domain.swisstimingadapter.impl;
|
||||
|
||||
import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
|
||||
import com.sap.sailing.domain.swisstimingadapter.SwissTimingMessageParser;
|
||||
|
||||
public class SwissTimingFactoryImpl implements SwissTimingFactory {
|
||||
|
||||
@Override
|
||||
public SwissTimingMessageParser createMessageParser() {
|
||||
return new SwissTimingMessageParserImpl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SailMasterConnector createSailMasterConnector(String host, int port) {
|
||||
return new SailMasterConnectorImpl(host, port);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user