Changed the temp tcp client and server to send packets made by us and other fixes

-xmlmessagedecoder now outputs a inputsource for the vis team
-tests fixed for the new xmlmessagedecoder
-tcpclient now generates a packet encoded by our methods and sends it
-tcpserver now recieves a packet encoded by us and prints out some of its info

#story[778, 782]
main
hba56 9 years ago
parent b346e10774
commit 0257b9e18c

@ -55,7 +55,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);
@ -130,14 +130,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];
@ -146,6 +139,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);

Loading…
Cancel
Save