Class: IB::Messages::Outgoing::AbstractMessage

Inherits:
AbstractMessage show all
Defined in:
lib/ib/messages/outgoing/abstract_message.rb

Instance Attribute Summary

Attributes inherited from AbstractMessage

#created_at, #data

Instance Method Summary collapse

Methods inherited from AbstractMessage

data_map, message_id, #message_id, message_type, #message_type, #to_human, version

Constructor Details

#initialize(data = {}) ⇒ AbstractMessage

Returns a new instance of AbstractMessage.



12
13
14
15
# File 'lib/ib/messages/outgoing/abstract_message.rb', line 12

def initialize data={}
  @data = data
  @created_at = Time.now
end

Instance Method Details

#encode(server) ⇒ Object

At minimum, Outgoing message contains message_id and version. Most messages also contain (ticker, request or order) :id. Then, content of @data Hash is encoded per instructions in data_map.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ib/messages/outgoing/abstract_message.rb', line 36

def encode server
  [self.class.message_id,
   self.class.version,
   @data[:id] || @data[:ticker_id] || @data[:request_id] ||
       @data[:local_id] || @data[:order_id] || [],
   self.class.data_map.map do |(field, default_method, args)|
     case
       when default_method.nil?
         @data[field]

       when default_method.is_a?(Symbol) # method name with args
         @data[field].send default_method, *args

       when default_method.respond_to?(:call) # callable with args
         default_method.call @data[field], *args

       else # default
         @data[field].nil? ? default_method : @data[field] # may be false still
     end
   end
  ].flatten
end

#send_to(server) ⇒ Object

This causes the message to send itself over the server socket in server. “server” is the @server instance variable from the IB object. You can also use this to e.g. get the server version number.

Subclasses can either override this method for precise control over how stuff gets sent to the server, or else define a method encode() that returns an Array of elements that ought to be sent to the server by calling to_s on each one and postpending a ‘0’.



26
27
28
29
30
31
# File 'lib/ib/messages/outgoing/abstract_message.rb', line 26

def send_to server
  self.encode(server).flatten.each do |datum|
    #p datum
    server[:socket].write_data datum
  end
end