lib/nyoibo/daemon.rb in nyoibo-0.0.2 vs lib/nyoibo/daemon.rb in nyoibo-0.0.3

- old
+ new

@@ -10,11 +10,11 @@ EventMachine::WebSocket.start(:host => config.host, :port => config.port) do |ws| ws.onopen{ ws.send "OK Ready" } ws.onclose{ - ws.send "OK Bye" + ws.close_websocket } ws.onmessage{|msg| @binary ||= "" @binary_type ||= 'binary' case msg @@ -22,19 +22,24 @@ if @binary_type == 'base64' @binary = Base64.decode64(@binary) elsif @binary.encoding == Encoding::UTF_8 @binary = @binary.unpack('U*').pack('c*') end - Nyoibo.run_callback(ws.request["path"], @json, @binary) - ws.close_connection + Nyoibo.run_callback(:after, ws.request["path"], @json, @binary) + @binary = @json = nil + ws.send("OK Bye") when CMD_JSON msg.gsub!(CMD_JSON, '') @json = JSON.parse(msg) @json['size'] = @json['size'].to_i - ws.send("NEXT") + if Nyoibo.run_callback(:before, ws.request["path"], @json, @binary) == false + ws.send("ABORT") + ws.close_websocket + else + ws.send("NEXT") + end else - if msg =~ TYPE_BASE64 msg.gsub!(TYPE_BASE64, '') @binary_type = 'base64' end @@ -50,9 +55,12 @@ } if ENV["NYOIBO_ENV"] == "test" daemon.call else @pid = Process.fork &daemon + at_exit do + Process.kill(:KILL, Nyoibo.pid) if Nyoibo.pid + end end end end end