Merge branch 'main' into client-pubkey-flow

# By kiwiidb
# Via GitHub (2) and kiwiidb (1)
* main:
  reconnect on relay error
  reuse relay connection

# Conflicts:
#	main.go
#	service.go
This commit is contained in:
Michael Bumann 2023-04-24 13:05:56 +02:00
commit b824a17222
2 changed files with 18 additions and 12 deletions

22
main.go
View file

@ -139,8 +139,15 @@ func main() {
wg.Done()
}()
//connect to the relay
svc.Logger.Infof("Connecting to the relay: %s", cfg.Relay)
relay, err := nostr.RelayConnect(ctx, cfg.Relay)
if err != nil {
svc.Logger.Fatal(err)
}
//publish event with NIP-47 info
err = svc.PublishNip47Info(ctx)
err = svc.PublishNip47Info(ctx, relay)
if err != nil {
svc.Logger.WithError(err).Error("Could not publish NIP47 info")
}
@ -148,22 +155,25 @@ func main() {
//Start infinite loop which will be only broken by canceling ctx (SIGINT)
//TODO: we can start this loop for multiple relays
for {
svc.Logger.Infof("Connecting to the relay: %s", cfg.Relay)
relay, err := nostr.RelayConnect(ctx, cfg.Relay)
if err != nil {
svc.Logger.Fatal(err)
}
svc.Logger.Info("Subscribing to events")
sub := relay.Subscribe(ctx, svc.createFilters())
err = svc.StartSubscription(ctx, sub)
if err != nil {
//err being non-nil means that we have an error on the websocket error channel. In this case we just try to reconnect.
svc.Logger.WithError(err).Error("Got an error from the relay. Reconnecting...")
relay, err = nostr.RelayConnect(ctx, cfg.Relay)
if err != nil {
svc.Logger.Fatal(err)
}
continue
}
//err being nil means that the context was canceled and we should exit the program.
break
}
err = relay.Close()
if err != nil {
svc.Logger.Error(err)
}
svc.Logger.Info("Graceful shutdown completed. Goodbye.")
}

View file

@ -257,17 +257,13 @@ func (svc *Service) createResponse(initialEvent *nostr.Event, content interface{
return resp, nil
}
func (svc *Service) PublishNip47Info(ctx context.Context) error {
relay, err := nostr.RelayConnect(ctx, svc.cfg.Relay)
if err != nil {
return err
}
func (svc *Service) PublishNip47Info(ctx context.Context, relay *nostr.Relay) error {
ev := &nostr.Event{}
ev.Kind = NIP_47_INFO_EVENT_KIND
ev.Content = NIP_47_CAPABILITIES
ev.CreatedAt = time.Now()
ev.PubKey = svc.cfg.IdentityPubkey
err = ev.Sign(svc.cfg.NostrSecretKey)
err := ev.Sign(svc.cfg.NostrSecretKey)
if err != nil {
return err
}