Merge branch 'networkingTest' of https://eng-git.canterbury.ac.nz/seng302-2017/team-7 into networkingTest
This commit is contained in:
@@ -57,7 +57,7 @@ public class BinaryMessageDecoder {
|
|||||||
crc.update(this.fullMessage);
|
crc.update(this.fullMessage);
|
||||||
|
|
||||||
//run through the checks
|
//run through the checks
|
||||||
if (this.message.length != twoByteToInt(this.headerMessageLength)){
|
if (this.message.length != twoByteToInt(this.headerMessageLength) && this.message.length != twoByteToIntBE(this.headerMessageLength)){
|
||||||
System.err.println("message length in header does not equal the message length");
|
System.err.println("message length in header does not equal the message length");
|
||||||
System.err.println("message length in header: " + twoByteToInt(this.headerMessageLength));
|
System.err.println("message length in header: " + twoByteToInt(this.headerMessageLength));
|
||||||
System.err.println("message length: " + this.message.length);
|
System.err.println("message length: " + this.message.length);
|
||||||
@@ -155,14 +155,7 @@ public class BinaryMessageDecoder {
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int twoByteToInt(byte[] bytesInt){/*
|
private int twoByteToInt(byte[] bytesInt){
|
||||||
ByteBuffer byteBuffer = ByteBuffer.allocate(4);
|
|
||||||
byteBuffer.order(ByteOrder.BIG_ENDIAN);
|
|
||||||
byteBuffer.put((byte)0);
|
|
||||||
byteBuffer.put((byte)0);
|
|
||||||
byteBuffer.put(bytesInt);
|
|
||||||
int num = byteBuffer.getInt(0);*/
|
|
||||||
|
|
||||||
byte[] bytes = new byte[2];
|
byte[] bytes = new byte[2];
|
||||||
bytes[1] = bytesInt[0];
|
bytes[1] = bytesInt[0];
|
||||||
bytes[0] = bytesInt[1];
|
bytes[0] = bytesInt[1];
|
||||||
@@ -171,6 +164,16 @@ public class BinaryMessageDecoder {
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int twoByteToIntBE(byte[] bytesInt){
|
||||||
|
ByteBuffer byteBuffer = ByteBuffer.allocate(4);
|
||||||
|
byteBuffer.order(ByteOrder.BIG_ENDIAN);
|
||||||
|
byteBuffer.put((byte)0);
|
||||||
|
byteBuffer.put((byte)0);
|
||||||
|
byteBuffer.put(bytesInt);
|
||||||
|
int num = byteBuffer.getInt(0);
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
private long bytesToLong(byte[] bytesLong){
|
private long bytesToLong(byte[] bytesLong){
|
||||||
ByteBuffer byteBuffer = ByteBuffer.allocate(8);
|
ByteBuffer byteBuffer = ByteBuffer.allocate(8);
|
||||||
byteBuffer.order(ByteOrder.BIG_ENDIAN);
|
byteBuffer.order(ByteOrder.BIG_ENDIAN);
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package seng302.Networking.MessageDecoders;
|
package seng302.Networking.MessageDecoders;
|
||||||
|
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
|
import java.io.StringReader;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -96,7 +99,12 @@ public class XMLMessageDecoder {
|
|||||||
return xmlMsgLength;
|
return xmlMsgLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getXmlMessage() {
|
/**
|
||||||
return xmlMessage;
|
* this will be used latter for the vis
|
||||||
|
* @return xml string as inputsource
|
||||||
|
*/
|
||||||
|
public InputSource getXmlMessageInputSource() {
|
||||||
|
InputSource is = new InputSource(new StringReader(xmlMessage));
|
||||||
|
return is;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
package seng302;
|
package seng302;
|
||||||
|
import seng302.Networking.BinaryMesageEncoder;
|
||||||
|
import seng302.Networking.BinaryMessageDecoder;
|
||||||
|
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||||
|
import seng302.Networking.Utils.MessageType;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
|
|
||||||
@@ -9,18 +14,48 @@ public class TCPClient
|
|||||||
{
|
{
|
||||||
public static void main(String argv[]) throws Exception
|
public static void main(String argv[]) throws Exception
|
||||||
{
|
{
|
||||||
String sentence;
|
|
||||||
String modifiedSentence;
|
// String sentence;
|
||||||
BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
|
// String modifiedSentence;
|
||||||
|
// BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
|
||||||
|
// Socket clientSocket = new Socket("localhost", 6789);
|
||||||
|
// DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
|
||||||
|
// BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||||
|
// sentence = inFromUser.readLine();
|
||||||
|
// outToServer.writeBytes(sentence + '\n');
|
||||||
|
// modifiedSentence = inFromServer.readLine();
|
||||||
|
// System.out.println("FROM SERVER: " + modifiedSentence);
|
||||||
|
// clientSocket.close();
|
||||||
|
TCPClient client = new TCPClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
TCPClient() throws IOException{
|
||||||
|
StringBuilder xmlString;
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(
|
||||||
|
this.getClass().getResourceAsStream(("/raceXML/Regatta.xml"))));
|
||||||
|
|
||||||
|
String line;
|
||||||
|
xmlString = new StringBuilder();
|
||||||
|
while((line=br.readLine())!= null){
|
||||||
|
xmlString.append(line.trim());
|
||||||
|
}
|
||||||
|
XMLMessageEncoder encodedMessage = new XMLMessageEncoder((byte)1, (short)1, System.currentTimeMillis(), (byte)7, (short)1, (short)xmlString.length(), xmlString.toString());
|
||||||
|
byte[] encodedXML = encodedMessage.encode();
|
||||||
|
|
||||||
|
BinaryMesageEncoder binaryMesageEncoder = new BinaryMesageEncoder(MessageType.XMLMESSAGE, System.currentTimeMillis(), 1, (short)encodedXML.length, encodedXML);
|
||||||
|
|
||||||
|
/**************sockets*******************/
|
||||||
|
|
||||||
//socket port 4942 as 4940 is ac35 live port and 4941 is ac35 test port
|
//socket port 4942 as 4940 is ac35 live port and 4941 is ac35 test port
|
||||||
Socket clientSocket = new Socket("localhost", 4942);
|
Socket mockSocket = new Socket("localhost", 4942);
|
||||||
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
|
|
||||||
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
while(true)
|
||||||
sentence = inFromUser.readLine();
|
{
|
||||||
outToServer.writeBytes(sentence + '\n');
|
DataOutputStream outToVisualiser = new DataOutputStream(mockSocket.getOutputStream());
|
||||||
modifiedSentence = inFromServer.readLine();
|
outToVisualiser.write(binaryMesageEncoder.getFullMessage());
|
||||||
System.out.println("FROM SERVER: " + modifiedSentence);
|
|
||||||
clientSocket.close();
|
|
||||||
}
|
}
|
||||||
|
/**************sockets*******************/
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,12 @@
|
|||||||
package seng302;
|
package seng302;
|
||||||
|
import seng302.Networking.BinaryMessageDecoder;
|
||||||
|
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TCP server to act as the mock AC35 streaming interface
|
* TCP server to act as the mock AC35 streaming interface
|
||||||
@@ -9,21 +15,60 @@ public class TCPServer
|
|||||||
{
|
{
|
||||||
public static void main(String argv[]) throws Exception
|
public static void main(String argv[]) throws Exception
|
||||||
{
|
{
|
||||||
String clientSentence;
|
|
||||||
String capitalizedSentence;
|
|
||||||
//socket port 4942 as 4940 is ac35 live port and 4941 is ac35 test port
|
//socket port 4942 as 4940 is ac35 live port and 4941 is ac35 test port
|
||||||
ServerSocket welcomeSocket = new ServerSocket(4942);
|
ServerSocket visualiserSocket = new ServerSocket(4942);
|
||||||
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
Socket connectionSocket = welcomeSocket.accept();
|
Socket connectionSocket = visualiserSocket.accept();
|
||||||
BufferedReader inFromClient =
|
InputStream inFromClient = connectionSocket.getInputStream();
|
||||||
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
|
byte[] binaryMessage = getBytes(inFromClient);
|
||||||
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
|
|
||||||
clientSentence = inFromClient.readLine();
|
BinaryMessageDecoder testDecoder = new BinaryMessageDecoder(binaryMessage);
|
||||||
System.out.println("Received: " + clientSentence);
|
testDecoder.decode();
|
||||||
capitalizedSentence = clientSentence.toUpperCase() + '\n';
|
System.out.println("--header--");
|
||||||
outToClient.writeBytes(capitalizedSentence);
|
System.out.println(testDecoder.getMessageType());
|
||||||
|
System.out.println(testDecoder.getTimeStamp());
|
||||||
|
System.out.println(testDecoder.getSourceID());
|
||||||
|
System.out.println(testDecoder.getMessageLength());
|
||||||
|
System.out.println("----");
|
||||||
|
XMLMessageDecoder xmlMessageDecoder = new XMLMessageDecoder(testDecoder.getMessage());
|
||||||
|
xmlMessageDecoder.decode();
|
||||||
|
System.out.println("--message--");
|
||||||
|
System.out.println(xmlMessageDecoder.getXmlMessageInputSource());
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
System.out.println(i);
|
||||||
|
byte[] messageLenBytes = Arrays.copyOfRange(headerBytes, 13, 15);
|
||||||
|
short messageLen = bytesToShort(messageLenBytes);
|
||||||
|
System.out.println("m " + messageLen);
|
||||||
|
byte[] messageBytesWithCRC = new byte[messageLen+4];
|
||||||
|
int j = inStream.read(messageBytesWithCRC);
|
||||||
|
System.out.println(j);
|
||||||
|
ByteBuffer binaryMessageBytes = ByteBuffer.allocate(i+j);
|
||||||
|
binaryMessageBytes.put(headerBytes);
|
||||||
|
binaryMessageBytes.put(messageBytesWithCRC);
|
||||||
|
return binaryMessageBytes.array();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static short bytesToShort(byte[] bytesShort){
|
||||||
|
ByteBuffer byteBuffer = ByteBuffer.allocate(2);
|
||||||
|
byteBuffer.put(bytesShort[0]);
|
||||||
|
byteBuffer.put(bytesShort[1]);
|
||||||
|
short shortVal = byteBuffer.getShort(0);
|
||||||
|
return shortVal;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,12 @@ package seng302.Networking;
|
|||||||
|
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
||||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||||
import seng302.Networking.Utils.MessageType;
|
import seng302.Networking.Utils.MessageType;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.*;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 21/04/17.
|
* Created by hba56 on 21/04/17.
|
||||||
@@ -54,7 +53,14 @@ public class BinaryMessageDecoderTest {
|
|||||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
||||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||||
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
||||||
Assert.assertEquals(xmlString.toString(), decoderXML.getXmlMessage());
|
|
||||||
|
Reader reader = decoderXML.getXmlMessageInputSource().getCharacterStream();
|
||||||
|
int c;
|
||||||
|
String contents = "";
|
||||||
|
while((c = reader.read()) != -1) {
|
||||||
|
contents += (char)c;
|
||||||
|
}
|
||||||
|
Assert.assertEquals(xmlString.toString(), contents);
|
||||||
|
|
||||||
}catch (IOException e){
|
}catch (IOException e){
|
||||||
System.out.println(e);
|
System.out.println(e);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
|||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by hba56 on 20/04/17.
|
* Created by hba56 on 20/04/17.
|
||||||
@@ -38,7 +39,14 @@ public class XMLMessageDecoderTest {
|
|||||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
||||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||||
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
Assert.assertEquals((short)xmlString.length(), decoderXML.getXmlMsgLength());
|
||||||
Assert.assertEquals(xmlString.toString(), decoderXML.getXmlMessage());
|
|
||||||
|
Reader reader = decoderXML.getXmlMessageInputSource().getCharacterStream();
|
||||||
|
int c;
|
||||||
|
String contents = "";
|
||||||
|
while((c = reader.read()) != -1) {
|
||||||
|
contents += (char)c;
|
||||||
|
}
|
||||||
|
Assert.assertEquals(xmlString.toString(), contents);
|
||||||
|
|
||||||
}catch (IOException e){
|
}catch (IOException e){
|
||||||
System.out.println(e);
|
System.out.println(e);
|
||||||
|
|||||||
Reference in New Issue
Block a user