Sha256: 59cbda0683ce5fe2c2a6394af5757f60c0664a2f942fd06716ae311288fc586e

Contents?: true

Size: 1.34 KB

Versions: 22

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

module DjiMqttConnect
  module Thing::Product
    class ServicesReplyTopicRepository < TopicRepository
      SERVICES_REPLY_TOPIC_REGEX = /\Athing\/product\/(?<gateway_sn>.+)\/services_reply\z/

      def listen!
        listen_to_topic("thing/product/+/services_reply") do |topic, raw_message|
          logger.debug(raw_message)

          matched_topic = SERVICES_REPLY_TOPIC_REGEX.match(topic)
          raise Error, "Unknown topic: #{topic}" unless matched_topic

          gateway_sn = matched_topic[:gateway_sn]
          message = services_reply_marshal.load(raw_message)

          logger.info("Received #{message} from #{gateway_sn}")

          if message.instance_of?(ServicesReplyMessage)
            # Broadcast an unsupported message event
            broadcast(:unsupported_message, topic, raw_message)
          else
            # Build event name and broadcast (i.e. ::FlighttaskPrepareServicesReplyMessage => flighttask_prepare_reply)
            event_name = "#{message._method.to_sym}_reply"
            broadcast(event_name, gateway_sn, message)
          end
        rescue ParseError => error
          broadcast(:parse_error, error, topic, raw_message)
        end
      end

      private

      def services_reply_marshal
        @services_reply_marshal ||= ServicesReplyMarshal.new
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
dji_mqtt_connect-0.1.22.2 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.22.1 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.22 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.21 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.20.1 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.20 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.19.2 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.19.1 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.19 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.18 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.17.1 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.17 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.16.2 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.16.1 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.16 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.15.2 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.15.1 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.15 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.14.1 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb
dji_mqtt_connect-0.1.14 lib/dji_mqtt_connect/topics/thing/product/services_reply.rb