Merge branch 'networkingTest' of https://eng-git.canterbury.ac.nz/seng302-2017/team-7 into networkingTest

main
Fan-Wu Yang 9 years ago
commit 7b4a428574

@ -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);

Loading…
Cancel
Save