1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#****************************************************************************
# Copyright (c) 2001-2014
#
# 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)
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
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
|