problem: can't unsub

This commit is contained in:
stanstacks
2022-12-22 18:48:41 +08:00
parent 72ef03f238
commit 6f1c60f66c
2 changed files with 13 additions and 5 deletions

View File

@@ -24,7 +24,7 @@ for notice := range pool.Notices {
### Listening for events ### Listening for events
```go ```go
subId, events := pool.Sub(nostr.Filters{ subId, events, unsub := pool.Sub(nostr.Filters{
{ {
Authors: []string{"0ded86bf80c76847320b16f22b7451c08169434837a51ad5fe3b178af6c35f5d"}, Authors: []string{"0ded86bf80c76847320b16f22b7451c08169434837a51ad5fe3b178af6c35f5d"},
Kinds: []int{nostr.KindTextNote}, // or {1} Kinds: []int{nostr.KindTextNote}, // or {1}
@@ -38,7 +38,7 @@ go func() {
}() }()
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
sub.Unsub() close(unsub)
``` ```
### Publishing an event ### Publishing an event
@@ -84,4 +84,4 @@ fmt.Println("pk:", nostr.GetPublicKey(sk))
``` ```
go run example/example.go go run example/example.go
``` ```

View File

@@ -124,7 +124,7 @@ func (r *RelayPool) Remove(url string) {
} }
} }
func (r *RelayPool) Sub(filters Filters) (string, chan EventMessage) { func (r *RelayPool) Sub(filters Filters) (string, chan EventMessage, chan struct{}) {
random := make([]byte, 7) random := make([]byte, 7)
rand.Read(random) rand.Read(random)
id := hex.EncodeToString(random) id := hex.EncodeToString(random)
@@ -132,6 +132,7 @@ func (r *RelayPool) Sub(filters Filters) (string, chan EventMessage) {
r.subscriptions.Store(id, filters) r.subscriptions.Store(id, filters)
eventStream := make(chan EventMessage) eventStream := make(chan EventMessage)
r.eventStreams.Store(id, eventStream) r.eventStreams.Store(id, eventStream)
unsub := make(chan struct{})
r.Relays.Range(func(_ string, relay *Relay) bool { r.Relays.Range(func(_ string, relay *Relay) bool {
sub := relay.prepareSubscription(id) sub := relay.prepareSubscription(id)
@@ -143,10 +144,17 @@ func (r *RelayPool) Sub(filters Filters) (string, chan EventMessage) {
} }
}(sub) }(sub)
go func() {
select {
case <-unsub:
sub.Unsub()
}
}()
return true return true
}) })
return id, eventStream return id, eventStream, unsub
} }
func Unique(all chan EventMessage) chan Event { func Unique(all chan EventMessage) chan Event {