Sha256: 90c269b20d8972f007ecf983fe7d9389763e29360d529815c7d24864ab329f07
Contents?: true
Size: 1.27 KB
Versions: 13
Compression:
Stored size: 1.27 KB
Contents
# frozen_string_literal: true module DjiMqttConnect module Thing::Product class OsdTopicRepository < TopicRepository OSD_TOPIC_REGEX = /\Athing\/product\/(?<device_sn>.+)\/osd\z/ def listen! listen_to_topic("thing/product/+/osd") do |topic, raw_message| logger.debug(raw_message) matched_topic = OSD_TOPIC_REGEX.match(topic) raise Error, "Unknown topic: #{topic}" unless matched_topic device_sn = matched_topic[:device_sn] message = OsdMarshal.load(raw_message) logger.info("Received #{message} from #{device_sn}") # Broadcast a generic received osd message event broadcast(:received_osd_message, device_sn, message) if message.instance_of?(OsdMessage) # Broadcast an unsupported message event broadcast(:unsupported_message, topic, raw_message) else # Build event name and broadcast (i.e. ::RemoteOsdMessage => remote_osd_update) event_name = message.class.name.demodulize.sub(/Message\z/, "Update").underscore.to_sym broadcast(event_name, device_sn, message) end rescue ParseError => error broadcast(:parse_error, error, topic, raw_message) end end end end end
Version data entries
13 entries across 13 versions & 1 rubygems