lib/dcell/server.rb in dcell-0.12.0.pre vs lib/dcell/server.rb in dcell-0.13.0.pre
- old
+ new
@@ -1,10 +1,12 @@
module DCell
# Servers handle incoming 0MQ traffic
class Server
include Celluloid::ZMQ
+ finalizer :close
+
# Bind to the given 0MQ address (in URL form ala tcp://host:port)
def initialize
# The gossip protocol is dependent on the node manager
link Celluloid::Actor[:node_manager]
@@ -16,35 +18,34 @@
rescue IOError
@socket.close
raise
end
- run!
+ async.run
end
# Wait for incoming 0MQ messages
def run
- while true; handle_message! @socket.read; end
+ while true; async.handle_message @socket.read; end
end
- # Shut down the server
- def finalize
+ def close
@socket.close if @socket
end
# Handle incoming messages
def handle_message(message)
begin
message = decode_message message
rescue InvalidMessageError => ex
- Celluloid::Logger.warn("couldn't decode message: #{ex.class}: #{ex}")
+ Logger.crash("couldn't decode message", ex)
return
end
begin
message.dispatch
rescue => ex
- Celluloid::Logger.crash("DCell::Server: message dispatch failed", ex)
+ Logger.crash("DCell::Server: message dispatch failed", ex)
end
end
class InvalidMessageError < StandardError; end # undecodable message