Class: Artoo::Connection

Inherits:
Object
  • Object
show all
Includes:
Utility, Celluloid, Comparable
Defined in:
lib/artoo/connection.rb

Overview

The Connection class represents the interface to a specific group of hardware devices. Examples would be an Arduino, a Sphero, or an ARDrone.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utility

#classify, #constantize, #current_class, #current_instance, #random_string

Methods included from Celluloid

#timers

Constructor Details

#initialize(params = {}) ⇒ Connection

Returns a new instance of Connection.



14
15
16
17
18
19
20
21
# File 'lib/artoo/connection.rb', line 14

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *arguments, &block) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/artoo/connection.rb', line 61

def method_missing(method_name, *arguments, &block)
  unless adaptor.connected?
    Logger.warn "Cannot call unconnected adaptor '#{name}', attempting to reconnect..."
    adaptor.reconnect
    return nil
  end
  adaptor.send(method_name, *arguments, &block)
rescue Exception => e
  Logger.error e.message
  Logger.error e.backtrace.inspect
  return nil
end

Instance Attribute Details

#adaptorObject (readonly)

Returns the value of attribute adaptor.



12
13
14
# File 'lib/artoo/connection.rb', line 12

def adaptor
  @adaptor
end

#connection_idObject (readonly)

Returns the value of attribute connection_id.



12
13
14
# File 'lib/artoo/connection.rb', line 12

def connection_id
  @connection_id
end

#nameObject (readonly)

Returns the value of attribute name.



12
13
14
# File 'lib/artoo/connection.rb', line 12

def name
  @name
end

#parentObject (readonly)

Returns the value of attribute parent.



12
13
14
# File 'lib/artoo/connection.rb', line 12

def parent
  @parent
end

#portObject (readonly)

Returns the value of attribute port.



12
13
14
# File 'lib/artoo/connection.rb', line 12

def port
  @port
end

Instance Method Details

#adaptor_nameObject



40
41
42
# File 'lib/artoo/connection.rb', line 40

def adaptor_name
  adaptor.class.name
end

#as_jsonObject



53
54
55
# File 'lib/artoo/connection.rb', line 53

def as_json
  MultiJson.dump(to_hash)
end

#connectObject



23
24
25
26
27
28
29
# File 'lib/artoo/connection.rb', line 23

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

#connected?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/artoo/connection.rb', line 36

def connected?
  adaptor.connected?
end

#disconnectObject



31
32
33
34
# File 'lib/artoo/connection.rb', line 31

def disconnect
  Logger.info "Disconnecting from '#{name}' on port '#{port}'..."
  adaptor.disconnect
end

#inspectObject



57
58
59
# File 'lib/artoo/connection.rb', line 57

def inspect
  "#<Connection @id=#{object_id}, @name='#{name}', @adaptor=#{adaptor_name}>"
end

#to_hashObject



44
45
46
47
48
49
50
51
# File 'lib/artoo/connection.rb', line 44

def to_hash
  {:name => name,
   :connection_id => connection_id,
   :port => port.to_s,
   :adaptor => adaptor_name.demodulize,
   :connected => connected?
  }
end