//------------HandleSignal---------- protected void HandleSignal(byte[] rawSignal, uint source = 0) { GNIData data = new GNIData(); System.IO.MemoryStream ms = new System.IO.MemoryStream(rawSignal); //Read types int keyTypeByte = ReadVariableLengthInt(ms, 1); int valueTypeByte = ReadVariableLengthInt(ms, 1); //Enter types switch (keyTypeByte) { case 0: data.keyType = GNIDataType.None; break; case 1: data.keyType = GNIDataType.Short; break; case 2: data.keyType = GNIDataType.String; break; case 3: data.keyType = GNIDataType.ByteArray; break; } switch (valueTypeByte) { case 0: data.valueType = GNIDataType.None; break; case 1: data.valueType = GNIDataType.Short; break; case 2: data.valueType = GNIDataType.String; break; case 3: data.valueType = GNIDataType.ByteArray; break; } int keyLength = ReadVariableLengthInt(ms, GNIGeneral.GetLengthLength(data.keyType)); int valueLength = ReadVariableLengthInt(ms, GNIGeneral.GetLengthLength(data.valueType)); //If string, read encoding byte int encoding = 0; if (data.keyType == GNIDataType.String || data.valueType == GNIDataType.String) { encoding = ReadVariableLengthInt(ms, 1); } //Enter encoding switch (encoding) { case 0: data.encoding = GNIEncoding.ASCII; break; } //Read and enter key switch (data.keyType) { case GNIDataType.None: data.EnterKeyNull(); break; case GNIDataType.Short: data.EnterKeyInt(ReadShort(ms)); break; case GNIDataType.String: data.EnterKeyString(ReadString(ms, keyLength, data.encoding)); break; case GNIDataType.ByteArray: byte[] buffer = new byte[keyLength]; ms.Read(buffer, 0, keyLength); data.EnterKeyByteArray(buffer); break; } //Read and enter value switch (data.valueType) { case GNIDataType.None: data.EnterValueNull(); break; case GNIDataType.Short: data.EnterValueInt(ReadShort(ms)); break; case GNIDataType.String: data.EnterValueString(ReadString(ms, valueLength, data.encoding)); break; case GNIDataType.ByteArray: byte[] buffer = new byte[valueLength]; ms.Read(buffer, 0, valueLength); data.EnterValueByteArray(buffer); break; } OnDataReceived(data, source); }