Example #1
0
        //------------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);
        }
Example #2
0
        //------------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);
        }