Commit 0802e984 authored by Sven Gestegård Robertz's avatar Sven Gestegård Robertz
Browse files

Csharp adapted to protocol with intentions. (Ignoring them)

parent b638d1b1
...@@ -31,7 +31,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -31,7 +31,7 @@ namespace se.lth.control.labcomm2014 {
} break; } break;
case Constant.SAMPLE_DEF: { case Constant.SAMPLE_DEF: {
int index = decodePacked32(); int index = decodePacked32();
String name = decodeString(); String name = decodeIntentions();
int signature_length = decodePacked32(); int signature_length = decodePacked32();
byte[] signature = new byte[signature_length]; byte[] signature = new byte[signature_length];
ReadBytes(signature, signature_length); ReadBytes(signature, signature_length);
...@@ -39,17 +39,17 @@ namespace se.lth.control.labcomm2014 { ...@@ -39,17 +39,17 @@ namespace se.lth.control.labcomm2014 {
} break; } break;
case Constant.SAMPLE_REF: { case Constant.SAMPLE_REF: {
int index = decodePacked32(); int index = decodePacked32();
String name = decodeString(); String name = decodeIntentions();
int signature_length = decodePacked32(); int signature_length = decodePacked32();
byte[] signature = new byte[signature_length]; byte[] signature = new byte[signature_length];
ReadBytes(signature, signature_length); ReadBytes(signature, signature_length);
ref_registry.add(index, name, signature); ref_registry.add(index, name, signature);
} break; } break;
case Constant.TYPE_DEF: case Constant.TYPE_DEF:
case Constant.TYPE_BINDING: { case Constant.TYPE_BINDING: {
for(int i=0; i<length;i++){ for(int i=0; i<length;i++){
decodeByte(); decodeByte();
} }
} break; } break;
default: { default: {
DecoderRegistry.Entry e = def_registry.get(tag); DecoderRegistry.Entry e = def_registry.get(tag);
...@@ -77,7 +77,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -77,7 +77,7 @@ namespace se.lth.control.labcomm2014 {
} }
} }
public void register(SampleDispatcher dispatcher, public void register(SampleDispatcher dispatcher,
SampleHandler handler) { SampleHandler handler) {
def_registry.add(dispatcher, handler); def_registry.add(dispatcher, handler);
} }
...@@ -92,7 +92,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -92,7 +92,7 @@ namespace se.lth.control.labcomm2014 {
int count = stream.Read(result, offset, length - offset); int count = stream.Read(result, offset, length - offset);
if (count <= 0) if (count <= 0)
throw new EndOfStreamException( throw new EndOfStreamException(
String.Format("End of stream reached with {0} bytes left to read", String.Format("End of stream reached with {0} bytes left to read",
length - offset)); length - offset));
offset += count; offset += count;
} }
...@@ -115,7 +115,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -115,7 +115,7 @@ namespace se.lth.control.labcomm2014 {
public byte decodeByte() { public byte decodeByte() {
return (byte)ReadInt(1); return (byte)ReadInt(1);
} }
public short decodeShort() { public short decodeShort() {
return (short)ReadInt(2); return (short)ReadInt(2);
} }
...@@ -123,11 +123,11 @@ namespace se.lth.control.labcomm2014 { ...@@ -123,11 +123,11 @@ namespace se.lth.control.labcomm2014 {
public int decodeInt() { public int decodeInt() {
return (int)ReadInt(4); return (int)ReadInt(4);
} }
public long decodeLong() { public long decodeLong() {
return (long)ReadInt(8); return (long)ReadInt(8);
} }
[StructLayout(LayoutKind.Explicit)] [StructLayout(LayoutKind.Explicit)]
private struct Int32SingleUnion { private struct Int32SingleUnion {
...@@ -141,7 +141,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -141,7 +141,7 @@ namespace se.lth.control.labcomm2014 {
u.AsInt = (int)ReadInt(4); u.AsInt = (int)ReadInt(4);
return u.AsFloat; return u.AsFloat;
} }
public double decodeDouble() { public double decodeDouble() {
return BitConverter.Int64BitsToDouble(ReadInt(8)); return BitConverter.Int64BitsToDouble(ReadInt(8));
} }
...@@ -155,7 +155,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -155,7 +155,7 @@ namespace se.lth.control.labcomm2014 {
public int decodePacked32() { public int decodePacked32() {
Int64 res = 0; Int64 res = 0;
bool cont = true; bool cont = true;
do { do {
Int64 c = decodeByte(); Int64 c = decodeByte();
...@@ -166,6 +166,30 @@ namespace se.lth.control.labcomm2014 { ...@@ -166,6 +166,30 @@ namespace se.lth.control.labcomm2014 {
return (int) (res & 0xffffffff); return (int) (res & 0xffffffff);
} }
private byte[] decodeBytes() {
int len = decodePacked32();
byte[] result = new byte[len];
for(int i=0; i<len; i++) {
result[i] = decodeByte();
}
return result;
}
private String decodeIntentions() {
int numIntentions = decodePacked32();
string name = "";
for(int i = 0; i<numIntentions; i++) {
byte[] key = decodeBytes();
byte[] val = decodeBytes();
if(key.Length == 0) {
name = Encoding.UTF8.GetString(val, 0, val.Length);
}
}
return name;
}
public Type decodeSampleRef() { public Type decodeSampleRef() {
int index = (int)ReadInt(4); int index = (int)ReadInt(4);
try { try {
...@@ -178,4 +202,4 @@ namespace se.lth.control.labcomm2014 { ...@@ -178,4 +202,4 @@ namespace se.lth.control.labcomm2014 {
} }
} }
...@@ -26,7 +26,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -26,7 +26,7 @@ namespace se.lth.control.labcomm2014 {
int index = def_registry.add(dispatcher); int index = def_registry.add(dispatcher);
begin(Constant.SAMPLE_DEF); begin(Constant.SAMPLE_DEF);
encodePacked32(index); encodePacked32(index);
encodeString(dispatcher.getName()); encodeIntentions(dispatcher.getName());
byte[] signature = dispatcher.getSignature(); byte[] signature = dispatcher.getSignature();
encodePacked32(signature.Length); encodePacked32(signature.Length);
for (int i = 0 ; i < signature.Length ; i++) { for (int i = 0 ; i < signature.Length ; i++) {
...@@ -39,7 +39,7 @@ namespace se.lth.control.labcomm2014 { ...@@ -39,7 +39,7 @@ namespace se.lth.control.labcomm2014 {
int index = ref_registry.add(dispatcher); int index = ref_registry.add(dispatcher);
begin(Constant.SAMPLE_REF); begin(Constant.SAMPLE_REF);
encodePacked32(index); encodePacked32(index);
encodeString(dispatcher.getName()); encodeIntentions(dispatcher.getName());
byte[] signature = dispatcher.getSignature(); byte[] signature = dispatcher.getSignature();
encodePacked32(signature.Length); encodePacked32(signature.Length);
for (int i = 0 ; i < signature.Length ; i++) { for (int i = 0 ; i < signature.Length ; i++) {
...@@ -132,6 +132,12 @@ namespace se.lth.control.labcomm2014 { ...@@ -132,6 +132,12 @@ namespace se.lth.control.labcomm2014 {
WritePacked32(bytes, value); WritePacked32(bytes, value);
} }
private void encodeIntentions(String name) {
encodePacked32(1); // one intention field
encodePacked32(0); // empty key: name
encodeString(name);
}
public void encodeSampleRef(Type value) { public void encodeSampleRef(Type value) {
int index = 0; int index = 0;
try { try {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment