Class IB::IncomingMessages::AbstractMessage
In: messages.rb
Parent: Object

This is just a basic generic message from the server.

Class variables: @@message_id - integer message id.

Instance attributes: :data - Hash of actual data read from a stream.

Override the load(socket) method in your subclass to do actual reading into @data.

Methods

autoload   inherited   load   message_id   new   version_load  

Attributes

data  [RW] 

Public Class methods

[Source]

     # File messages.rb, line 704
704:       def AbstractMessage.inherited(by)
705:         super(by)
706:         Classes.push(by)
707:       end

[Source]

     # File messages.rb, line 683
683:       def self.message_id
684:         raise Exception("AbstractMessage.message_id called - you need to override this in a subclass.")
685:       end

[Source]

     # File messages.rb, line 688
688:       def initialize(socket, server_version)
689:         raise Exception.new("Don't use AbstractMessage directly; use the subclass for your specific message type") if self.class.name == "AbstractMessage"
690:         IBLogger.debug(" * loading #{self.class.name}")
691: 
692:         @data = Hash.new
693:         @socket = socket
694:         @server_version = server_version
695: 
696:         self.load()
697: 
698:         @socket = nil
699:         
700: 
701:         IBLogger.debug(" * New #{self.class.name}: #{ @data.inspect }")
702:       end

Public Instance methods

[Source]

     # File messages.rb, line 709
709:       def load
710:         raise Exception.new("Don't use AbstractMessage; override load() in a subclass.")
711:       end

Protected Instance methods

map is a series of Arrays in the format [ [ :name, :type ] ], e.g. autoload([:version, :int ], [:ticker_id, :int]) type identifiers must have a corresponding read_type method on socket.

[Source]

     # File messages.rb, line 717
717:       def autoload(*map)
718:         map.each { |spec|
719:           @data[spec[0]] = @socket.__send__(("read_" + spec[1].to_s).to_sym)
720:         }
721:       end

version_load loads map only if @data[:version] is >= required_version.

[Source]

     # File messages.rb, line 724
724:       def version_load(required_version, *map)
725:         autoload(map) if @data[:version] >= required_version 
726:       end

[Validate]