Improve NostrManager::PublishEvent
* Use URI hostname as relay name * Log relay name/URL for every websocket event * Fix variable assignment for nostr event * Fix Sidekiq job finishing too early, by creating a new thread waiting for it to be closed from a callback
This commit is contained in:
parent
08e783d185
commit
eeb9b0a331
@ -1,50 +1,50 @@
|
|||||||
module NostrManager
|
module NostrManager
|
||||||
class PublishEvent < NostrManagerService
|
class PublishEvent < NostrManagerService
|
||||||
def initialize(event:, relay_url:)
|
def initialize(event:, relay_url:)
|
||||||
relay_name = relay_url.gsub(/^ws(s):\/\//, "")
|
relay_name = URI.parse(relay_url).host
|
||||||
@relay = Nostr::Relay.new(url: relay_url, name: relay_name)
|
@relay = Nostr::Relay.new(url: relay_url, name: relay_name)
|
||||||
@event = case event.class
|
|
||||||
when Nostr::Event
|
if event.is_a?(Nostr::Event)
|
||||||
event
|
@event = event
|
||||||
when Hash
|
else
|
||||||
Nostr::Event.new(**event.symbolize_keys)
|
@event = Nostr::Event.new(**event.symbolize_keys)
|
||||||
# else
|
|
||||||
# TODO
|
|
||||||
# raise NotImplementedError
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@client = Nostr::Client.new
|
@client = Nostr::Client.new
|
||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
client, relay, event = @client, @relay, @event
|
client, relay, event = @client, @relay, @event
|
||||||
|
log_prefix = "[nostr][#{relay.name}]"
|
||||||
|
|
||||||
|
thread = Thread.new do
|
||||||
client.on :connect do
|
client.on :connect do
|
||||||
puts "Connected to #{relay.url}"
|
puts "#{log_prefix} Publishing #{event.id}..."
|
||||||
puts "Publishing #{event.id}..."
|
|
||||||
client.publish event
|
client.publish event
|
||||||
end
|
end
|
||||||
|
|
||||||
client.on :error do |e|
|
client.on :error do |e|
|
||||||
# TODO log relay URL/name
|
puts "#{log_prefix} Error: #{e}"
|
||||||
puts "Error: #{e}"
|
puts "#{log_prefix} Closing thread..."
|
||||||
puts "Closing thread..."
|
thread.exit
|
||||||
Thread.exit
|
|
||||||
end
|
end
|
||||||
|
|
||||||
client.on :message do |m|
|
client.on :message do |m|
|
||||||
puts "Message: #{m}"
|
puts "#{log_prefix} Message: #{m}"
|
||||||
msg = JSON.parse(m) rescue []
|
msg = JSON.parse(m) rescue []
|
||||||
if msg[0] == "OK" && msg[1] == event.id
|
if msg[0] == "OK" && msg[1] == event.id
|
||||||
puts "Event published. Closing thread..."
|
puts "#{log_prefix} Event published. Closing thread..."
|
||||||
else
|
else
|
||||||
# TODO log relay URL/name
|
puts "#{log_prefix} Unexpected message from relay. Closing thread..."
|
||||||
puts "Unexpected message from relay. Closing thread..."
|
|
||||||
end
|
end
|
||||||
Thread.exit
|
thread.exit
|
||||||
end
|
end
|
||||||
|
|
||||||
puts "Connecting to #{relay.url}..."
|
puts "#{log_prefix} Connecting to #{relay.url}..."
|
||||||
client.connect relay
|
client.connect relay
|
||||||
end
|
end
|
||||||
|
|
||||||
|
thread.join
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user