forked from quickfix/quickfix
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathReflectorClient.rb
More file actions
123 lines (104 loc) Β· 2.87 KB
/
ReflectorClient.rb
File metadata and controls
123 lines (104 loc) Β· 2.87 KB
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#****************************************************************************
# 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"
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.waitConnectAction(cid)
end
def @reflector.waitDisconnectAction(cid)
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
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