Sha256: 34390832cf4fe217b505e058c0b91b767f63d94aa98df6b6909e6f3d66e7b779

Contents?: true

Size: 923 Bytes

Versions: 2

Compression:

Stored size: 923 Bytes

Contents

module Grenache
  class NoPeerFoundError < Exception; end

  class Ws < Grenache::Base

    def listen(key, port,  opts={}, &block)
      EM.defer {
        @ws = WebsocketServer.new port, &block
        @ws.start_server
      }

      announce(key, port, opts) do |res|
        puts "#{key} announced #{res}"
      end
    end

    def request(key, payload, &cb)
      json = ServiceMessage.new(payload,key).to_json
      if service_cache[key] && service_cache[key].connected?
        service_cache[key].send json
      else
        lookup key do |services|
          if services && services.length > 0
            service = services.sample
            service_cache[key] = WebsocketClient.new(service, &cb)
            service_cache[key].send json
          else
            cb.call ["NoServiceFound", nil]
          end
        end
      end
    end

    def service_cache
      @service_cache ||= {}
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
grenache-ruby-ws-0.2.13 lib/grenache/ws.rb
grenache-ruby-ws-0.2.12 lib/grenache/ws.rb