Module: Toolshed
- Included in:
- Garden, Garden::Rows, Gardener
- Defined in:
- lib/toolshed.rb
Overview
This module provides a toolkit of helper methods to Abundance
It uses the Socket Ruby standard library to provide a communication mechanism between Abundance concurent processes. It’s used as both a namespace for init variables of the different Abundance Classes, using Toolshed’s Class Method like qualified names, and as mixins methods which access directly the instance variables of the client classes .
- Author
-
lp ([email protected])
- Copyright
-
2008 Louis-Philippe Perron - Released under the terms of the MIT license
:title:Toolshed
Constant Summary collapse
- UDP_HOST =
'localhost'
- @@start_port =
50000
Class Method Summary collapse
- .available_port ⇒ Object
- .block_size ⇒ Object
- .block_size=(block_size) ⇒ Object
- .garden_port ⇒ Object
- .garden_port=(garden_port) ⇒ Object
- .socket_client_perm ⇒ Object
- .socket_client_temp ⇒ Object
- .socket_server(port) ⇒ Object
Instance Method Summary collapse
- #socket_client_perm_duplex(command, data) ⇒ Object
- #socket_client_perm_send(command, data) ⇒ Object
- #socket_client_temp(command, data, port) ⇒ Object
- #socket_server_recv ⇒ Object
- #socket_server_send(command, data, clientaddr, clientport) ⇒ Object
Class Method Details
.available_port ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/toolshed.rb', line 18 def Toolshed.available_port port = @@start_port + 1 catch :scan_port do loop do begin socket = UDPSocket.new socket.connect(UDP_HOST,port) socket.send('',0) response,address = socket.recvfrom(1024) rescue Errno::ECONNREFUSED throw :scan_port end port += 1 end end @@start_port = port return port end |
.block_size ⇒ Object
57 58 59 |
# File 'lib/toolshed.rb', line 57 def Toolshed::block_size @@block_size end |
.block_size=(block_size) ⇒ Object
53 54 55 |
# File 'lib/toolshed.rb', line 53 def Toolshed::block_size=(block_size) @@block_size = block_size end |
.garden_port ⇒ Object
65 66 67 |
# File 'lib/toolshed.rb', line 65 def Toolshed::garden_port @@garden_port end |
.garden_port=(garden_port) ⇒ Object
61 62 63 |
# File 'lib/toolshed.rb', line 61 def Toolshed::garden_port=(garden_port) @@garden_port = garden_port end |
.socket_client_perm ⇒ Object
37 38 39 40 41 |
# File 'lib/toolshed.rb', line 37 def Toolshed.socket_client_perm socket = UDPSocket.new socket.connect(UDP_HOST,@@garden_port) return socket end |
.socket_client_temp ⇒ Object
43 44 45 |
# File 'lib/toolshed.rb', line 43 def Toolshed.socket_client_temp UDPSocket.new end |
.socket_server(port) ⇒ Object
47 48 49 50 51 |
# File 'lib/toolshed.rb', line 47 def Toolshed.socket_server(port) socket_server = UDPSocket.new socket_server.bind(nil,port) return socket_server end |
Instance Method Details
#socket_client_perm_duplex(command, data) ⇒ Object
69 70 71 72 73 |
# File 'lib/toolshed.rb', line 69 def socket_client_perm_duplex(command,data) @socket_client_perm.send(Marshal.dump([command,data]),0) recv_block,address = @socket_client_perm.recvfrom(@@block_size) return Marshal.load(recv_block) end |
#socket_client_perm_send(command, data) ⇒ Object
75 76 77 |
# File 'lib/toolshed.rb', line 75 def socket_client_perm_send(command,data) @socket_client_perm.send(Marshal.dump([command,data]),0) end |
#socket_client_temp(command, data, port) ⇒ Object
79 80 81 82 |
# File 'lib/toolshed.rb', line 79 def socket_client_temp(command,data,port) @socket_client_temp.connect(UDP_HOST,port) @socket_client_temp.send(Marshal.dump([command,data]),0) end |
#socket_server_recv ⇒ Object
84 85 86 87 88 89 |
# File 'lib/toolshed.rb', line 84 def socket_server_recv block,address = @socket_server.recvfrom(@@block_size) clientport = address[1]; clientname = address[2]; clientaddr = address[3] command, data = Marshal.load(block) return command, data, clientport, clientname, clientaddr end |
#socket_server_send(command, data, clientaddr, clientport) ⇒ Object
91 92 93 |
# File 'lib/toolshed.rb', line 91 def socket_server_send(command,data,clientaddr,clientport) @socket_server.send(Marshal.dump([command,data]), 0, clientaddr, clientport) end |