Class OpenWFE::SocketParticipant
In: lib/openwfe/participants/socketparticipants.rb
Parent: Object

This participant implementation dispatches workitems over TCP sockets. By default the workitem are dumped as YAML strings, but you can override the encode_workitem(wi) method.

A small example :

    require 'openwfe/particpants/socketparticipants'

    sp = OpenWFE::SocketParticipant.new("target.host.xx", 7007)

    engine.register_participant("Alfred", sp)

Methods

Attributes

host  [RW] 
port  [RW] 

Public Class methods

A ‘static’ method for dispatching workitems, you can use it directly, without instantiating the SocketParticipant :

    require 'openwfe/participants/socketparticipants'

    SocketParticipant.dispatch("127.0.0.1", 7007, workitem)

[Source]

     # File lib/openwfe/participants/socketparticipants.rb, line 109
109:         def SocketParticipant.dispatch (host, port, workitem)
110: 
111:             SocketParticipant.new(host, port).dispatch(workitem)
112:         end

The constructor

[Source]

    # File lib/openwfe/participants/socketparticipants.rb, line 70
70:         def initialize (host, port)
71: 
72:             @host = host
73:             @port = port
74:         end

Public Instance methods

The method called by the engine for each incoming workitem. Will dispatch the workitem over a TCP connection.

[Source]

    # File lib/openwfe/participants/socketparticipants.rb, line 80
80:         def consume (workitem)
81: 
82:             dispatch(workitem)
83:         end

[Source]

    # File lib/openwfe/participants/socketparticipants.rb, line 85
85:         def dispatch (workitem)
86: 
87:             socket = TCPSocket.new(@host, @port)
88:             socket.puts encode_workitem(workitem)
89:             socket.puts
90:             socket.close_write
91: 
92:             #print "\n__socket.closed? #{socket.closed?}"
93: 
94:             reply = fetch_reply(socket)
95: 
96:             socket.close
97: 
98:             decode_reply(reply)
99:         end

Protected Instance methods

By default, will just return the reply without touching it

[Source]

     # File lib/openwfe/participants/socketparticipants.rb, line 127
127:             def decode_reply (r)
128:                 r
129:             end

By default, uses YAML to serialize the workitem (of course you can override this method).

[Source]

     # File lib/openwfe/participants/socketparticipants.rb, line 120
120:             def encode_workitem (wi)
121:                 YAML.dump(wi)
122:             end

The code that waits for the reply from the server, nicely wrapped inside a timeout and a rescue block.

[Source]

     # File lib/openwfe/participants/socketparticipants.rb, line 135
135:             def fetch_reply (socket)
136: 
137:                 reply = ""
138: 
139:                 begin
140: 
141:                     timeout(7) do
142:                         while true
143:                             r = socket.gets
144:                             break unless r
145:                             reply << r
146:                         end
147:                     end
148: 
149:                 rescue Exception => e
150:                     puts e
151:                     raise "timeout while waiting for reply"
152:                 end
153: 
154:                 reply
155:             end

[Validate]