You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.9 KiB
74 lines
2.9 KiB
package seng302.Networking;
|
|
import seng302.Networking.BinaryMessageDecoder;
|
|
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
|
import seng302.Networking.Utils.MessageType;
|
|
|
|
import java.io.*;
|
|
import java.net.*;
|
|
import java.nio.ByteBuffer;
|
|
import java.nio.ByteOrder;
|
|
import java.util.Arrays;
|
|
|
|
import static seng302.Networking.Utils.ByteConverter.bytesToInt;
|
|
import static seng302.Networking.Utils.ByteConverter.bytesToShort;
|
|
|
|
/**
|
|
* TCP server to act as the mock AC35 streaming interface
|
|
*/
|
|
public class VisualiserInput
|
|
{
|
|
public static void main(String argv[]) throws Exception
|
|
{
|
|
//socket port 4942 as 4940 is ac35 live port and 4941 is ac35 test port
|
|
ServerSocket visualiserSocket = new ServerSocket(4942);
|
|
Socket connectionSocket = visualiserSocket.accept();
|
|
|
|
while(true)
|
|
{
|
|
InputStream inFromClient = connectionSocket.getInputStream();
|
|
byte[] binaryMessage = getBytes(inFromClient);
|
|
|
|
BinaryMessageDecoder testDecoder = new BinaryMessageDecoder(binaryMessage);
|
|
testDecoder.decode();
|
|
System.out.println("--header--");
|
|
System.out.println(testDecoder.getMessageType());
|
|
System.out.println(testDecoder.getTimeStamp());
|
|
System.out.println(testDecoder.getSourceID());
|
|
System.out.println(testDecoder.getMessageLength());
|
|
System.out.println("----");
|
|
if (testDecoder.getMessageType() == MessageType.XMLMESSAGE.getValue()){
|
|
XMLMessageDecoder xmlMessageDecoder = new XMLMessageDecoder(testDecoder.getMessage());
|
|
xmlMessageDecoder.decode();
|
|
System.out.println("--message--");
|
|
System.out.println(xmlMessageDecoder.getXmlMessageInputSource());
|
|
}
|
|
if (testDecoder.getMessageType() == MessageType.HEARTBEAT.getValue()){
|
|
System.out.println(bytesToInt(testDecoder.getMessage()));
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Takes an inputStream and reads the first 15 bytes (the header) and gets the message length
|
|
* for the whole message then reads that and returns the byte array
|
|
* @param inStream inputStream from socket
|
|
* @return encoded binary messsage bytes
|
|
* @throws IOException
|
|
*/
|
|
private static byte[] getBytes(InputStream inStream) throws IOException {
|
|
byte[] headerBytes = new byte[15];
|
|
int i = inStream.read(headerBytes);
|
|
byte[] messageLenBytes = Arrays.copyOfRange(headerBytes, 13, 15);
|
|
short messageLen = bytesToShort(messageLenBytes, ByteOrder.BIG_ENDIAN);
|
|
byte[] messageBytesWithCRC = new byte[messageLen+4];
|
|
int j = inStream.read(messageBytesWithCRC);
|
|
ByteBuffer binaryMessageBytes = ByteBuffer.allocate(i+j);
|
|
binaryMessageBytes.put(headerBytes);
|
|
binaryMessageBytes.put(messageBytesWithCRC);
|
|
return binaryMessageBytes.array();
|
|
}
|
|
|
|
}
|