binary message decoder as well as refactor of xml encoder and decoder placement

-added binary message decoder

#story[782]
main
hba56 9 years ago
parent 54a2c08258
commit a99f91a075

@ -0,0 +1,89 @@
package seng302.Networking;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;
/**
* Created by hba56 on 21/04/17.
*/
public class BinaryMessageDecoder {
private byte[] fullMessage;
private byte[] header;
private byte[] message;
private byte[] crc;
private byte headerSync1;
private byte headerSync2;
private byte headerMessageType;
private byte[] headerTimeStamp;
private byte[] headerSourceID;
private byte[] headerMessageLength;
public BinaryMessageDecoder(byte[] fullMessage) {
this.fullMessage = fullMessage;
}
public void decode() throws IndexOutOfBoundsException{
//get the header
this.header = Arrays.copyOfRange(this.fullMessage, 0, 16);
this.headerSync1 = this.header[0];
this.headerSync2 = this.header[1];
this.headerMessageType = this.header[2];
this.headerTimeStamp = Arrays.copyOfRange(this.header, 3, 9);
this.headerSourceID = Arrays.copyOfRange(this.header, 9, 13);
this.headerMessageLength = Arrays.copyOfRange(this.header, 13, 16);
//get message
this.message = Arrays.copyOfRange(this.fullMessage, 16, this.fullMessage.length - 4);
//get crc
this.crc = Arrays.copyOfRange(this.fullMessage, this.fullMessage.length - 4, fullMessage.length);
if (this.message.length != bytesToInt(this.headerMessageLength)){
System.err.println("message length in header does not equal the message length");
System.err.println("message length in header: " + bytesToInt(this.headerMessageLength));
System.err.println("message length: " + this.message.length);
}else if(false){
//todo check crc
}
}
private short bytesToShort(byte[] bytesShort){
ByteBuffer byteBuffer = ByteBuffer.allocate(2);
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
byteBuffer.put(bytesShort[0]);
byteBuffer.put(bytesShort[1]);
short shortVal = byteBuffer.getShort(0);
return shortVal;
}
private short bytesToInt(byte[] bytesInt){
ByteBuffer byteBuffer = ByteBuffer.allocate(4);
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
byteBuffer.put(bytesInt[0]);
byteBuffer.put(bytesInt[1]);
byteBuffer.put(bytesInt[2]);
byteBuffer.put(bytesInt[3]);
short shortVal = byteBuffer.getShort(0);
return shortVal;
}
private long bytesToLong(byte[] bytesLong){
ByteBuffer byteBuffer = ByteBuffer.allocate(8);
byteBuffer.order(ByteOrder.BIG_ENDIAN);
byteBuffer.put((byte)0);
byteBuffer.put((byte)0);
byteBuffer.put(bytesLong[0]);
byteBuffer.put(bytesLong[1]);
byteBuffer.put(bytesLong[2]);
byteBuffer.put(bytesLong[3]);
byteBuffer.put(bytesLong[4]);
byteBuffer.put(bytesLong[5]);
long longVal = byteBuffer.getLong(0);
return longVal;
}
}

@ -1,4 +1,4 @@
package seng302;
package seng302.Networking;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

@ -1,4 +1,4 @@
package seng302;
package seng302.Networking;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

@ -1,7 +1,7 @@
import org.junit.Assert;
import org.junit.Test;
import seng302.XMLMessageDecoder;
import seng302.XMLMessageEncoder;
import seng302.Networking.XMLMessageDecoder;
import seng302.Networking.XMLMessageEncoder;
import java.io.BufferedReader;
import java.io.IOException;

@ -1,6 +1,6 @@
import org.junit.Assert;
import org.junit.Test;
import seng302.XMLMessageEncoder;
import seng302.Networking.XMLMessageEncoder;
import java.io.*;

Loading…
Cancel
Save