File: ReflectorServer.rb

package info (click to toggle)
quickfix 1.13.3%2Bdfsg-9
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 152,548 kB
  • ctags: 679,426
  • sloc: cpp: 639,331; xml: 129,200; python: 108,722; ruby: 85,152; sh: 10,492; ansic: 9,025; java: 1,827; cs: 1,145; makefile: 523; sql: 313; perl: 108
file content (107 lines) | stat: -rw-r--r-- 2,465 bytes parent folder | download
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) 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)
      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