class AgentFIX::Agent

Attributes

bookmark[RW]
connection_type[R]
default[RW]
name[R]
session[RW]

Public Class Methods

new(name, connection_type) click to toggle source
# File lib/agent_fix/agent.rb, line 13
def initialize name, connection_type
  @name = name
  @connection_type = connection_type
  @logged_on = false
  @bookmark = 0
  @all_messages = MessageCache.new
  @logger = Java::org.slf4j.LoggerFactory.getLogger("AgentFIX.Agent")
end

Public Instance Methods

fromAdmin(message, sessionId) click to toggle source
# File lib/agent_fix/agent.rb, line 66
def fromAdmin(message, sessionId)
  @logger.debug "#{@name} fromAdmin #{sessionId.to_s}: #{message.to_s.gsub("","|")}"
  @all_messages.add_message(message:message,sent:false,admin:true)
end
fromApp(message, sessionId) click to toggle source
# File lib/agent_fix/agent.rb, line 56
def fromApp(message, sessionId)
  @logger.debug "#{@name} fromApp #{sessionId.to_s}: #{message.to_s.gsub("","|")}"
  @all_messages.add_message(message:message,sent:false,admin:false)
end
history(opts={}) click to toggle source
# File lib/agent_fix/agent.rb, line 98
def history opts={}
  opts[:since] ||= 0
  opts[:received_only] ||= false
  opts[:include_session]||= AgentFIX::include_session_level?

  indexed_msgs = []
  @all_messages.messages.each_with_index { |m,i| indexed_msgs << m.merge(index:i) }
  indexed_msgs = indexed_msgs.slice(opts[:since], indexed_msgs.length)

  if opts[:received_only]
    indexed_msgs = indexed_msgs.find_all {|m| !m[:sent]}
  end

  unless opts[:include_session]
    indexed_msgs = indexed_msgs.find_all {|m| !m[:admin]}
  end

  indexed_msgs
end
init() click to toggle source
# File lib/agent_fix/agent.rb, line 22
def init
  parse_settings
  @connector = case @connection_type
    when :acceptor then quickfix.SocketAcceptor.new(self, @storeFactory, @settings, @logFactory, @messageFactory)
    when :initiator then quickfix.SocketInitiator.new(self, @storeFactory, @settings, @logFactory, @messageFactory)
    else nil
  end
end
loggedOn?() click to toggle source
# File lib/agent_fix/agent.rb, line 71
def loggedOn?
  lock.synchronize do
    return @logged_on
  end
end
messages_received(opts = {}) click to toggle source
# File lib/agent_fix/agent.rb, line 118
def messages_received opts = {}
  history opts.merge(:received_only=>true)
end
onCreate(sessionId) click to toggle source
# File lib/agent_fix/agent.rb, line 31
def onCreate(sessionId)
  @default_session = sessionId
end
onLogon(sessionId) click to toggle source
# File lib/agent_fix/agent.rb, line 35
def onLogon(sessionId)
  @logger.debug "#{@name} onLogon: #{sessionId.to_s}"

  lock.synchronize do
    @logged_on = true
  end
end
onLogout(sessionId) click to toggle source
# File lib/agent_fix/agent.rb, line 43
def onLogout(sessionId)
  @logger.debug "#{@name} onLogout: #{sessionId.to_s}"

  lock.synchronize do
    @logged_on = false
  end
end
reset() click to toggle source
# File lib/agent_fix/agent.rb, line 85
def reset
  clear_state!
end
sendToTarget(msg) click to toggle source
# File lib/agent_fix/agent.rb, line 77
def sendToTarget msg
  msg.getHeader.setField(quickfix.field.BeginString.new(@default_session.getBeginString))
  msg.getHeader.setField(quickfix.field.TargetCompID.new(@default_session.getTargetCompID))
  msg.getHeader.setField(quickfix.field.SenderCompID.new(@default_session.getSenderCompID))

  quickfix.Session.sendToTarget(msg)
end
start() click to toggle source
# File lib/agent_fix/agent.rb, line 89
def start
  @connector.start
end
stop(force=false) click to toggle source
# File lib/agent_fix/agent.rb, line 93
def stop force=false
  @connector.stop force
  clear_state!
end
toAdmin(message, sessionId) click to toggle source
# File lib/agent_fix/agent.rb, line 61
def toAdmin(message, sessionId)
  @logger.debug "#{@name} toAdmin #{sessionId.to_s}: #{message.to_s.gsub("","|")}"
  @all_messages.add_message(message:message,sent:true,admin:true)
end
toApp(message, sessionId) click to toggle source
# File lib/agent_fix/agent.rb, line 51
def toApp(message, sessionId) 
  @logger.debug "#{@name} toApp #{sessionId.to_s}: #{message.to_s.gsub("","|")}"
  @all_messages.add_message(message:message,sent:true,admin:false)
end

Protected Instance Methods

clear_state!() click to toggle source
# File lib/agent_fix/agent.rb, line 124
def clear_state!
  @all_messages.clear!
  @bookmark = 0
end
parse_settings() click to toggle source
# File lib/agent_fix/agent.rb, line 129
def parse_settings
  session_settings = "[DEFAULT]\n"
  session_settings << "ConnectionType=#{@connection_type}\n"

  @default ||= {}
  AgentFIX::session_defaults.merge(@default).each do |k,v|
    session_settings << "#{k}=#{v}\n"
  end

  unless @session.nil?
    session_settings << "[SESSION]\n"
    @session.each { |k,v| session_settings << "#{k}=#{v}\n"}
  end

  @logger.info "Settings for #{@name}: #{session_settings}"

  @storeFactory = quickfix.MemoryStoreFactory.new()
  @messageFactory = quickfix.DefaultMessageFactory.new()
  @settings = quickfix.SessionSettings.new( Java::java.io.ByteArrayInputStream.new(session_settings.to_java_bytes) )
  @logFactory = quickfix.FileLogFactory.new(@settings)
end

Private Instance Methods

lock() click to toggle source
# File lib/agent_fix/agent.rb, line 153
def lock
  @lock||=Mutex.new
end