Sha256: 978e5c6b949cc4ccf3f4b2eaf004d06b155c5e2bef26de9aa3ef8c246e581efb
Contents?: true
Size: 1.89 KB
Versions: 1
Compression:
Stored size: 1.89 KB
Contents
require 'async' require 'async/http/endpoint' require 'async/websocket/client' require 'nostrb/source' module Nostrb class Client attr_reader :url, :endpoint, :sid def initialize(relay_url, sid: nil) @url = relay_url @endpoint = Async::HTTP::Endpoint.parse(@url) @sid = sid.nil? ? Source.random_sid : sid end def log msg warn msg end # open, send req, get response, return response def single(req) Sync do Async::WebSocket::Client.connect(@endpoint) do |conn| conn.write(Nostrb.json(req)) conn.flush resp = conn.read conn.shutdown Nostrb.parse(resp.buffer) end end end def publish(signed_event) case single(Nostrb::Source.publish(signed_event)) in ['OK', String => event_id, ok, String => msg] log "id mismatch: #{event_id}" unless event_id == signed_event.id log msg unless ok ok in ['NOTICE', String => msg] log msg end end def subscribe(*filters, &blk) Sync do Async::WebSocket::Client.connect(@endpoint) do |conn| conn.write(Nostrb.json(Nostrb::Source.subscribe(@sid, *filters))) conn.flush eose = false while !eose and resp = conn.read case Nostrb.parse(resp.buffer) in ['EVENT', String => sid, Hash => event] log "sid mismatch: #{sid}" unless sid == @sid yield event in ['EOSE', String => sid] log "sid mismatch: #{sid}" unless sid == @sid eose = true end end conn.shutdown end end end def close case single(Nostrb::Source.close(@sid)) in ['CLOSED', String => sid, String => msg] log "sid mismatch: #{sid}" unless sid == @sid log msg unless msg.empty? true end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
nostrb-0.2.0.1 | lib/nostrb/client.rb |