示例#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);
         }
     }
 }
 private void ConnectToServerCallback(SecureTCPClient myTCPClient)
 {
     try
     {
         if (myTCPClient.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED)
         {
             MqttMsgConnect connect = MsgBuilder.BuildConnect(this.ClientId, MqttSettings.Instance.Username, MqttSettings.Instance.Password, this.WillRetain,
                                                              this.WillQosLevel, this.WillFlag, this.WillTopic, this.WillMessage, this.CleanSession, this.KeepAlivePeriod, ProtocolVersion);
             Send(connect);
             //TODO: timer for connack
             tcpClient.ReceiveData();
             MqttMsgBase packet = PacketDecoder.DecodeControlPacket(tcpClient.IncomingDataBuffer);
             if (packet.Type == MqttMsgBase.MQTT_MSG_CONNACK_TYPE)
             {
                 RouteControlPacketToMethodHandler(packet);
             }
             else
             {
                 throw new MqttConnectionException("MQTTCLIENT - ConnectToServerCallback - " + PayloadMapper.ClientType + " , Expected CONNACK , received " + packet, new ArgumentException());
             }
         }
     }
     catch (MqttClientException e)
     {
         CrestronLogger.WriteToLog("MQTTCLIENT - ConnectToServerCallback - Error occured : " + e.ErrorCode, 7);
         CrestronLogger.WriteToLog("MQTTCLIENT - ConnectToServerCallback - Error occured : " + e.StackTrace, 7);
     }
     catch (Exception e)
     {
         CrestronLogger.WriteToLog("MQTTCLIENT - ConnectToServerCallback - Error occured : " + e.Message, 7);
         CrestronLogger.WriteToLog("MQTTCLIENT - ConnectToServerCallback - Error occured : " + e.StackTrace, 7);
         //Disconnect from server , signal error at module lvl;
     }
 }
        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);
            }
        }
示例#4
0
 override protected void ConnectionCallback(SecureTCPServer server, uint clientIndex)
 {
     try
     {
         Server.WaitForConnectionAsync(IPAddress.Parse("0.0.0.0"), this.ConnectionCallback);
         if (Server.ClientConnected(clientIndex))
         {
             oldDecodedFrame.Add(clientIndex, new List <byte>());
             int         lenghtOfData = Server.ReceiveData(clientIndex);
             byte[]      data         = Server.GetIncomingDataBufferForSpecificClient(clientIndex);
             MqttMsgBase packet       = PacketDecoder.DecodeControlPacket(data);
             if (packet.Type == MqttMsgBase.MQTT_MSG_CONNECT_TYPE)
             {
                 OnPacketReceived(clientIndex, packet, false);
             }
             else
             {
                 throw new ArgumentException("Attempted connection with a non CONNECT packet");
             }
         }
     }
     catch (Exception e)
     {
         DisconnectClient(clientIndex, false);
     }
 }