File: ReflectorServer.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 (107 lines) | stat: -rw-r--r-- 2,438 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
#****************************************************************************
# 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