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);
|
||||
|
||||
//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: " + twoByteToInt(this.headerMessageLength));
|
||||
System.err.println("message length: " + this.message.length);
|
||||
@@ -155,14 +155,7 @@ public class BinaryMessageDecoder {
|
||||
return num;
|
||||
}
|
||||
|
||||
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);*/
|
||||
|
||||
private int twoByteToInt(byte[] bytesInt){
|
||||
byte[] bytes = new byte[2];
|
||||
bytes[1] = bytesInt[0];
|
||||
bytes[0] = bytesInt[1];
|
||||
@@ -171,6 +164,16 @@ public class BinaryMessageDecoder {
|
||||
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){
|
||||
ByteBuffer byteBuffer = ByteBuffer.allocate(8);
|
||||
byteBuffer.order(ByteOrder.BIG_ENDIAN);
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package seng302.Networking.MessageDecoders;
|
||||
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
import java.io.StringReader;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Arrays;
|
||||
@@ -96,7 +99,12 @@ public class XMLMessageDecoder {
|
||||
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;
|
||||
import seng302.Networking.BinaryMesageEncoder;
|
||||
import seng302.Networking.BinaryMessageDecoder;
|
||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||
import seng302.Networking.Utils.MessageType;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
|
||||
@@ -9,18 +14,48 @@ public class TCPClient
|
||||
{
|
||||
public static void main(String argv[]) throws Exception
|
||||
{
|
||||
String sentence;
|
||||
String modifiedSentence;
|
||||
BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
|
||||
|
||||
// String sentence;
|
||||
// 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 clientSocket = new Socket("localhost", 4942);
|
||||
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();
|
||||
Socket mockSocket = new Socket("localhost", 4942);
|
||||
|
||||
while(true)
|
||||
{
|
||||
DataOutputStream outToVisualiser = new DataOutputStream(mockSocket.getOutputStream());
|
||||
outToVisualiser.write(binaryMesageEncoder.getFullMessage());
|
||||
}
|
||||
/**************sockets*******************/
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,12 @@
|
||||
package seng302;
|
||||
import seng302.Networking.BinaryMessageDecoder;
|
||||
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
||||
|
||||
import java.io.*;
|
||||
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
|
||||
@@ -9,21 +15,60 @@ public class TCPServer
|
||||
{
|
||||
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
|
||||
ServerSocket welcomeSocket = new ServerSocket(4942);
|
||||
ServerSocket visualiserSocket = new ServerSocket(4942);
|
||||
|
||||
while(true)
|
||||
{
|
||||
Socket connectionSocket = welcomeSocket.accept();
|
||||
BufferedReader inFromClient =
|
||||
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
|
||||
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
|
||||
clientSentence = inFromClient.readLine();
|
||||
System.out.println("Received: " + clientSentence);
|
||||
capitalizedSentence = clientSentence.toUpperCase() + '\n';
|
||||
outToClient.writeBytes(capitalizedSentence);
|
||||
Socket connectionSocket = visualiserSocket.accept();
|
||||
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("----");
|
||||
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.Test;
|
||||
import org.xml.sax.InputSource;
|
||||
import seng302.Networking.MessageDecoders.XMLMessageDecoder;
|
||||
import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||
import seng302.Networking.Utils.MessageType;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.*;
|
||||
|
||||
/**
|
||||
* Created by hba56 on 21/04/17.
|
||||
@@ -54,7 +53,14 @@ public class BinaryMessageDecoderTest {
|
||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||
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){
|
||||
System.out.println(e);
|
||||
|
||||
@@ -7,6 +7,7 @@ import seng302.Networking.MessageEncoders.XMLMessageEncoder;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
|
||||
/**
|
||||
* Created by hba56 on 20/04/17.
|
||||
@@ -38,7 +39,14 @@ public class XMLMessageDecoderTest {
|
||||
Assert.assertEquals((byte)7, decoderXML.getXmlMsgSubType());
|
||||
Assert.assertEquals((short)1, decoderXML.getSequenceNumber());
|
||||
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){
|
||||
System.out.println(e);
|
||||
|
||||
Reference in New Issue
Block a user