Class: DCell::Server
- Inherits:
-
Object
- Object
- DCell::Server
- Includes:
- Celluloid::ZMQ
- Defined in:
- lib/dcell/server.rb
Overview
Servers handle incoming 0MQ traffic
Defined Under Namespace
Classes: InvalidMessageError
Instance Method Summary collapse
- #close ⇒ Object
-
#decode_message(message) ⇒ Object
Decode incoming messages.
-
#handle_message(message) ⇒ Object
Handle incoming messages.
-
#initialize ⇒ Server
constructor
Bind to the given 0MQ address (in URL form ala tcp://host:port).
-
#run ⇒ Object
Wait for incoming 0MQ messages.
-
#terminate ⇒ Object
Terminate this server.
Constructor Details
#initialize ⇒ Server
Bind to the given 0MQ address (in URL form ala tcp://host:port)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/dcell/server.rb', line 9 def initialize # The gossip protocol is dependent on the node manager link Celluloid::Actor[:node_manager] @socket = PullSocket.new begin @socket.bind(DCell.addr) real_addr = @socket.get(::ZMQ::LAST_ENDPOINT).strip DCell::Directory.set DCell.id, real_addr DCell.addr = real_addr rescue IOError @socket.close raise end async.run end |
Instance Method Details
#close ⇒ Object
33 34 35 |
# File 'lib/dcell/server.rb', line 33 def close @socket.close if @socket end |
#decode_message(message) ⇒ Object
Decode incoming messages
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/dcell/server.rb', line 56 def () if [0..1].unpack("CC") == [Marshal::MAJOR_VERSION, Marshal::MINOR_VERSION] begin Marshal.load rescue => ex raise InvalidMessageError, "invalid message: #{ex}" end else raise InvalidMessageError, "couldn't determine message format: #{}" end end |
#handle_message(message) ⇒ Object
Handle incoming messages
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/dcell/server.rb', line 38 def () begin = rescue InvalidMessageError => ex Logger.crash("couldn't decode message", ex) return end begin .dispatch rescue => ex Logger.crash("DCell::Server: message dispatch failed", ex) end end |
#run ⇒ Object
Wait for incoming 0MQ messages
29 30 31 |
# File 'lib/dcell/server.rb', line 29 def run while true; async. @socket.read; end end |
#terminate ⇒ Object
Terminate this server
68 69 70 71 |
# File 'lib/dcell/server.rb', line 68 def terminate @socket.close super end |