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

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();
}
}