adding quickfix library
This commit is contained in:
135
quickfix/_test/ReflectorClient.rb
Normal file
135
quickfix/_test/ReflectorClient.rb
Normal file
@ -0,0 +1,135 @@
|
||||
#****************************************************************************
|
||||
# Copyright (c) quickfixengine.org All rights reserved.
|
||||
#
|
||||
# This file is part of the QuickFIX FIX Engine
|
||||
#
|
||||
# This file may be distributed under the terms of the quickfixengine.org
|
||||
# license as defined by quickfixengine.org and appearing in the file
|
||||
# LICENSE included in the packaging of this file.
|
||||
#
|
||||
# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||
#
|
||||
# Contact ask@quickfixengine.org if any conditions of this licensing are
|
||||
# not clear to you.
|
||||
#****************************************************************************
|
||||
|
||||
require 'Reflector'
|
||||
require 'FixParser'
|
||||
require "socket"
|
||||
require 'uri'
|
||||
require 'net/http'
|
||||
|
||||
class ReflectorClient
|
||||
|
||||
def initialize(messages, address, port)
|
||||
@reflector = Reflector.new
|
||||
@messages = messages
|
||||
@sockets = Hash.new(nil)
|
||||
@parsers = Hash.new(nil)
|
||||
|
||||
def @reflector.address=(a)
|
||||
@address = a
|
||||
end
|
||||
|
||||
def @reflector.port=(p)
|
||||
@port = p
|
||||
end
|
||||
|
||||
def @reflector.client=(c)
|
||||
@client = c
|
||||
end
|
||||
|
||||
def @reflector.sockets=(s)
|
||||
@sockets = s
|
||||
end
|
||||
|
||||
def @reflector.parsers=(p)
|
||||
@parsers = p
|
||||
end
|
||||
|
||||
def @reflector.connectAction(cid)
|
||||
socket = TCPSocket.open(@address, @port)
|
||||
if socket == nil
|
||||
raise IOError("failed to connect")
|
||||
end
|
||||
@sockets[cid] = socket
|
||||
@parsers[cid] = FixParser.new(socket)
|
||||
end
|
||||
|
||||
def @reflector.disconnectAction(cid)
|
||||
@sockets[cid].close
|
||||
@sockets.delete(cid)
|
||||
@parsers.delete(cid)
|
||||
end
|
||||
|
||||
def @reflector.setSeqnum(body)
|
||||
left_array = body.split(" ")
|
||||
uri = URI('http://localhost:8095/seqnum?SESSION='+left_array[1]+'&'+left_array[2])
|
||||
Net::HTTP.get_response(uri)
|
||||
end
|
||||
|
||||
def @reflector.waitConnectAction(cid)
|
||||
end
|
||||
|
||||
def @reflector.waitDisconnectAction(cid)
|
||||
begin
|
||||
socket = @sockets[cid]
|
||||
if IO.select([socket], nil, nil, 10) == nil then
|
||||
raise "Connection hangs after ten seconds."
|
||||
elsif !socket.eof? then
|
||||
raise "Expected disconnection, got data"
|
||||
end
|
||||
rescue Errno::ECONNRESET
|
||||
# Ignore, server has already disconnected the socket
|
||||
end
|
||||
end
|
||||
|
||||
def @reflector.initiateAction(msg, cid)
|
||||
if( @sockets[cid] == nil )
|
||||
raise "Unable to send message because connection was dropped"
|
||||
end
|
||||
@sockets[cid].write(msg)
|
||||
@client.initiateAction(msg, cid)
|
||||
end
|
||||
|
||||
def @reflector.expectedAction(msg, cid)
|
||||
m = @parsers[cid].readFixMessage
|
||||
@client.expectedAction(msg, cid)
|
||||
@client.compareAction(msg, m)
|
||||
end
|
||||
|
||||
def @reflector.errorAction(lineNum, line)
|
||||
@client.errorAction(lineNum, line)
|
||||
end
|
||||
|
||||
@reflector.client = self
|
||||
@reflector.address = address
|
||||
@reflector.port = port
|
||||
@reflector.sockets = @sockets
|
||||
@reflector.parsers = @parsers
|
||||
end
|
||||
|
||||
def start()
|
||||
@reflector.processFile(@messages)
|
||||
end
|
||||
|
||||
def stop()
|
||||
@sockets.each do
|
||||
|cid, s|
|
||||
begin
|
||||
s.close
|
||||
rescue
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def initiateAction(msg, cid)
|
||||
end
|
||||
def expectedAction(msg, cid)
|
||||
end
|
||||
def responseAction(msg, cid)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user