Пример #1
0
 protected void DecodeMultiplePacketsByteArray(uint clientIndex, byte[] data, bool isWebSocketClient)
 {
     lock (oldDecodedFrame)
     {
         int         numberOfBytesProcessed = 0;
         int         numberOfBytesToProcess = 0;
         int         numberOfBytesReceived  = data.Length;
         byte[]      packetByteArray;
         List <byte> packets   = new List <byte>();
         MqttMsgBase tmpPacket = new MqttMsgSubscribe();
         try
         {
             while (numberOfBytesProcessed != numberOfBytesReceived)
             {
                 int remainingLength      = MqttMsgBase.decodeRemainingLength(data);
                 int remainingLenghtIndex = tmpPacket.encodeRemainingLength(remainingLength, data, 1);
                 numberOfBytesToProcess = remainingLength + remainingLenghtIndex;
                 packetByteArray        = new byte[numberOfBytesToProcess];
                 Array.Copy(data, 0, packetByteArray, 0, numberOfBytesToProcess);
                 MqttMsgBase packet = PacketDecoder.DecodeControlPacket(packetByteArray);
                 OnPacketReceived(clientIndex, packet, isWebSocketClient);
                 {
                     byte[] tmp = new byte[data.Length - numberOfBytesToProcess];
                     Array.Copy(data, numberOfBytesToProcess, tmp, 0, tmp.Length);
                     data = tmp;
                 }
                 numberOfBytesProcessed += numberOfBytesToProcess;
             }
         }
         catch (Exception e)
         {
             oldDecodedFrame[clientIndex].AddRange(data);
         }
     }
 }
Пример #2
0
        public void DecodeMultiplePacketsByteArray(byte[] data)
        {
            List <MqttMsgBase> packetsInTheByteArray = new List <MqttMsgBase>();
            int numberOfBytesProcessed = 0;
            int numberOfBytesToProcess = 0;
            int numberOfBytesReceived  = data.Length;

            byte[]      packetByteArray;
            MqttMsgBase tmpPacket = new MqttMsgSubscribe();

            while (numberOfBytesProcessed != numberOfBytesReceived)
            {
                int remainingLength      = MqttMsgBase.decodeRemainingLength(data);
                int remainingLenghtIndex = tmpPacket.encodeRemainingLength(remainingLength, data, 1);
                numberOfBytesToProcess = remainingLength + remainingLenghtIndex;
                packetByteArray        = new byte[numberOfBytesToProcess];
                Array.Copy(data, 0, packetByteArray, 0, numberOfBytesToProcess);
                {
                    byte[] tmp = new byte[data.Length - numberOfBytesToProcess];
                    Array.Copy(data, numberOfBytesToProcess, tmp, 0, tmp.Length);
                    data = tmp;
                }
                numberOfBytesProcessed += numberOfBytesToProcess;
                MqttMsgBase packet = PacketDecoder.DecodeControlPacket(packetByteArray);
                //RouteControlPacketDelegate r = new RouteControlPacketDelegate(RouteControlPacketToMethodHandler);
                //r.Invoke(packet);
                CrestronInvoke.BeginInvoke(RouteControlPacketToMethodHandler, packet);
            }
        }