File: ReflectorClient.rb

package info (click to toggle)
quickfix 1.15.1%2Bdfsg-4
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye
  • size: 42,080 kB
  • sloc: cpp: 631,686; python: 129,549; ruby: 106,716; xml: 43,737; ansic: 7,668; java: 1,826; cs: 816; makefile: 544; sh: 462; sql: 313
file content (123 lines) | stat: -rw-r--r-- 2,915 bytes parent folder | download | duplicates (2)
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) 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 './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