lib/artoo/connection.rb in artoo-0.4.0 vs lib/artoo/connection.rb in artoo-0.4.1
- old
+ new
@@ -1,65 +1,83 @@
require 'artoo/utility'
module Artoo
- # The Connection class represents the interface to
+ # The Connection class represents the interface to
# a specific group of hardware devices. Examples would be an
# Arduino, a Sphero, or an ARDrone.
class Connection
include Celluloid
include Artoo::Utility
include Comparable
attr_reader :parent, :name, :port, :adaptor, :connection_id
+ # Create new connection
+ # @param [Hash] params
+ # @option params :name [String]
+ # @option params :parent [String]
+ # @option params :adaptor [String]
+ # @option params :port [Integer]
def initialize(params={})
@connection_id = rand(10000)
@name = params[:name].to_s
@port = Port.new(params[:port])
@parent = params[:parent]
require_adaptor(params[:adaptor] || :loopback)
end
+ # Creates adaptor connection
+ # @return [Boolean]
def connect
Logger.info "Connecting to '#{name}' on port '#{port}'..."
adaptor.connect
rescue Exception => e
Logger.error e.message
Logger.error e.backtrace.inspect
end
+ # Closes adaptor connection
+ # @return [Boolean]
def disconnect
Logger.info "Disconnecting from '#{name}' on port '#{port}'..."
adaptor.disconnect
end
+ # @return [Boolean] Connection status
def connected?
adaptor.connected?
end
+ # @return [String] Adaptor class name
def adaptor_name
adaptor.class.name
end
+ # @return [Hash] connection
def to_hash
- {:name => name,
- :connection_id => connection_id,
- :port => port.to_s,
- :adaptor => adaptor_name.demodulize,
- :connected => connected?
+ {
+ :name => name,
+ :connection_id => connection_id,
+ :port => port.to_s,
+ :adaptor => adaptor_name.to_s.gsub(/^.*::/, ''),
+ :connected => connected?
}
end
+ # @return [JSON] connection
def as_json
MultiJson.dump(to_hash)
end
+ # @return [String] Formated connection
def inspect
"#<Connection @id=#{object_id}, @name='#{name}', @adaptor=#{adaptor_name}>"
end
+ # Redirects missing methods to adaptor,
+ # attemps reconnection if adaptor not connected
def method_missing(method_name, *arguments, &block)
unless adaptor.connected?
Logger.warn "Cannot call unconnected adaptor '#{name}', attempting to reconnect..."
adaptor.reconnect
return nil
@@ -76,6 +94,6 @@
def require_adaptor(type)
require "artoo/adaptors/#{type.to_s}"
@adaptor = constantize("Artoo::Adaptors::#{classify(type.to_s)}").new(:port => port, :parent => current_instance)
end
end
-end
\ No newline at end of file
+end