Sha256: 75b7d976d993b288f94a8a986fe9ae76d4745c7fd830c495188b1c039e363946

Contents?: true

Size: 763 Bytes

Versions: 5

Compression:

Stored size: 763 Bytes

Contents

require "eventmachine"
require 'rack/websocket'
require "em-hiredis"
require "json"

class FnordMetric::WebSocket < Rack::WebSocket::Application

  def initialize
    super

    @reactor = FnordMetric::Reactor.new
    @uuid = "websocket-#{get_uuid}"
  end

  def on_open(env)
    @reactor.ready!
  end

  def on_message(env, message)
    begin
      message = JSON.parse(message)
    rescue
      puts "websocket: invalid json"
    else
      message["_eid"] ||= get_uuid
      message["_sender"] = @uuid

      @reactor.execute(self, message).each do |m|
        send_data m.to_json
      end
    end
  rescue Exception => e
    FnordMetric.error("[WebSocket] #{e.to_s}")
    puts e.backtrace.join("\n")
  end

  def get_uuid
    rand(8**64).to_s(36)
  end

end

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
johnf-fnordmetric-1.2.10 lib/fnordmetric/web/websocket.rb
fnordmetric-1.2.9 lib/fnordmetric/web/websocket.rb
johnf-fnordmetric-1.2.7 lib/fnordmetric/web/websocket.rb
bp-fnordmetric-1.2.7 lib/fnordmetric/web/websocket.rb
fnordmetric-1.2.7 lib/fnordmetric/web/websocket.rb