adding quickfix library
This commit is contained in:
111
quickfix/_test/ReflectorServer.rb
Normal file
111
quickfix/_test/ReflectorServer.rb
Normal file
@ -0,0 +1,111 @@
|
||||
#****************************************************************************
|
||||
# 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 'SocketServer'
|
||||
require 'Reflector'
|
||||
|
||||
class ReflectorServer < SocketServer
|
||||
|
||||
def initialize(messages, address = "localhost", port = 5000)
|
||||
@reflector = Reflector.new
|
||||
@parser = nil
|
||||
@socket = nil
|
||||
@messages = messages
|
||||
@port = port
|
||||
|
||||
def @reflector.socket=(s)
|
||||
@socket = s
|
||||
end
|
||||
|
||||
def @reflector.socket
|
||||
return @socket
|
||||
end
|
||||
|
||||
def @reflector.server=(s)
|
||||
@server = s
|
||||
end
|
||||
|
||||
def @reflector.parser=(s)
|
||||
@parser = s
|
||||
end
|
||||
|
||||
def @reflector.expectedAction(msg, cid)
|
||||
m = @parser.readFixMessage
|
||||
@server.compareAction(msg, m)
|
||||
end
|
||||
|
||||
def @reflector.initiateAction(msg, cid)
|
||||
@socket.write(msg)
|
||||
end
|
||||
|
||||
def @reflector.waitConnectAction(cid)
|
||||
@server.waitConnectAction
|
||||
end
|
||||
|
||||
def @reflector.waitDisconnectAction(cid)
|
||||
begin
|
||||
if IO.select([@socket], nil, nil, 10) == nil then
|
||||
raise "Connection hangs after five seconds."
|
||||
elsif !@socket.eof? then
|
||||
raise "Expected disconnection, got data"
|
||||
end
|
||||
rescue Errno::ECONNRESET
|
||||
# Ignore, client has already disconnected the socket
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def connectAction(s)
|
||||
if @socket == nil
|
||||
@socket = s
|
||||
@reflector.socket = s
|
||||
@reflector.server = self
|
||||
else
|
||||
s.close
|
||||
end
|
||||
end
|
||||
|
||||
def waitConnectAction
|
||||
gs = TCPServer.open(@port)
|
||||
addr = gs.addr
|
||||
addr.shift
|
||||
if IO.select([gs], nil, nil, 10) == nil then
|
||||
raise "Connection hangs after ten seconds."
|
||||
end
|
||||
@socket = gs.accept
|
||||
@parser = FixParser.new(@socket)
|
||||
@reflector.parser = @parser
|
||||
@reflector.socket = @socket
|
||||
end
|
||||
|
||||
def disconnectAction(s)
|
||||
end
|
||||
|
||||
def receiveAction(s)
|
||||
end
|
||||
|
||||
def compareAction(e, a)
|
||||
end
|
||||
|
||||
def start
|
||||
@reflector.server = self
|
||||
@reflector.processFile(@messages)
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user