class AwsIotDevice::MqttAdapter::RubyMqttAdapter

Attributes

client_id[R]
filtered_topics[RW]

Public Class Methods

new(*args) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 12
def initialize(*args)
  @client = MQTT::Client.new(*args)
  @filtered_topics = {}
  @client_id = ""
  @client_id = generate_client_id
end

Public Instance Methods

add_callback_filter_topic(topic, callback) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 168
def add_callback_filter_topic(topic, callback)
  unless callback.nil?
    @filtered_topics[topic] = callback
  else
    @filtered_topic.delete(topic)
  end
end
connect(*args, &block) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 31
def connect(*args, &block)
  @client = create_client(*args) if @client.nil?
  @client.connect(&block)
  loop_start
end
connected?() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 50
def connected?
  @client.connected?
end
create_client(*args) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 27
def create_client(*args)
  @client = MQTT::Client.new(*args)
end
disconnect(send_msg=true) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 46
def disconnect(send_msg=true)
  @client.disconnect(send_msg)
end
generate_client_id(prefix='ruby', lenght=16) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 37
def generate_client_id(prefix='ruby', lenght=16)
  charset = Array('A'..'Z') + Array('a'..'z') + Array('0'..'9')
  @client_id << prefix << Array.new(lenght) { charset.sample }.join
end
get(topic=nil, &block) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 58
def get(topic=nil, &block)
  @client.get(topic, &block)
end
get_packet(topic=nil, &block) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 62
def get_packet(topic=nil, &block)
  @client.get_packet(topic, &block)
end
host() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 78
def host
  @client.host
end
host=(host) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 82
def host=(host)
  @client.host = host
end
loop_forever() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 116
def loop_forever
  loop do
    mqtt_loop
    sleep 0.005
  end
end
loop_misc() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 149
def loop_misc
  puts "loop_misc is unavailable for ruby-mqtt client's"
end
loop_read(max_message=10) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 129
def loop_read(max_message=10)
  counter_message = 0
  while !@client.queue_empty? && counter_message <= max_message
    message = get_packet
    ### Fitlering message if matching to filtered topic
    topic = message.topic
    if @filtered_topics.key?(topic)
      callback = @filtered_topics[topic]
      callback.call(message)
    else
      on_message_callback(message)
    end
    counter_message += 1
  end
end
loop_start() click to toggle source

Custom Features #################

# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 108
def loop_start
  Thread.new{ loop_forever }
end
loop_stop(thread) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 112
def loop_stop(thread)
  thread.join
end
loop_write() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 145
def loop_write
  puts "loop_write is unavailable for ruby-mqtt client's"
end
mqtt_loop() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 123
def mqtt_loop
  loop_read
  loop_write
  loop_misc
end
on_message(&block) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 157
def on_message(&block)
  @on_message = block if block_given?
  @on_message
end
on_message=(callback) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 153
def on_message=(callback)
  @on_message = callback
end
on_message_callback(message) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 162
def on_message_callback(message)
  if @on_message.is_a?(Proc) || @on_message.lambda?
    @on_message.call(message)
  end
end
port() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 86
def port
  @client.port
end
port=(port) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 90
def port=(port)
  @client.port = port
end
publish(topic, payload='', retain=false, qos=0) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 23
def publish(topic, payload='', retain=false, qos=0)
  @client.publish(topic, payload, retain, qos)
end
queue_empty?() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 66
def queue_empty?
  @client.queue_empty?
end
queue_length() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 70
def queue_length
  @client.queue_length
end
remove_callback_filter_topic(topic) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 176
def remove_callback_filter_topic(topic)
  if @filtered_topics.key(topic)
    @filtered_topics.delete(topic)
  end
end
set_tls_ssl_context(ca_cert, cert=nil, key=nil) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 98
def set_tls_ssl_context(ca_cert, cert=nil, key=nil)
  @client.ssl ||= true
  @client.ssl_context
  @client.cert_file = cert
  @client.key_file = key
  @client.ca_file = ca_cert
end
ssl=(ssl) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 94
def ssl=(ssl)
  @client.ssl = ssl
end
ssl_context() click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 42
def ssl_context
  @client.ssl_context
end
subscribe(topics, qos=0) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 54
def subscribe(topics, qos=0)
  @client.subscribe(topics, qos)
end
unsubscribe(*topics) click to toggle source
# File lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb, line 74
def unsubscribe(*topics)
  @client.unsubscribe(*topics)
end