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

Instance Method Summary collapse

Class Method Details

.available_portObject



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_sizeObject



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_portObject



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_permObject



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_tempObject



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_recvObject



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