khatru: add and remove listener hooks.
This commit is contained in:
+17
-2
@@ -100,10 +100,14 @@ func (d *dispatcher) addSubscription(sub subscription) int {
|
|||||||
return ssid
|
return ssid
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *dispatcher) removeSubscription(ssid int) {
|
func (d *dispatcher) removeSubscription(ssid int) nostr.Filter {
|
||||||
|
var filter nostr.Filter
|
||||||
|
|
||||||
d.subscriptions.Compute(ssid, func(sub subscription, loaded bool) (subscription, bool) {
|
d.subscriptions.Compute(ssid, func(sub subscription, loaded bool) (subscription, bool) {
|
||||||
indexed := false
|
indexed := false
|
||||||
|
|
||||||
|
filter = sub.filter
|
||||||
|
|
||||||
if sub.filter.Authors != nil {
|
if sub.filter.Authors != nil {
|
||||||
indexed = true
|
indexed = true
|
||||||
for _, author := range sub.filter.Authors {
|
for _, author := range sub.filter.Authors {
|
||||||
@@ -150,6 +154,8 @@ func (d *dispatcher) removeSubscription(ssid int) {
|
|||||||
|
|
||||||
return sub, true
|
return sub, true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
return filter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *dispatcher) candidates(event nostr.Event) iter.Seq[subscription] {
|
func (d *dispatcher) candidates(event nostr.Event) iter.Seq[subscription] {
|
||||||
@@ -305,6 +311,10 @@ func (rl *Relay) addListener(
|
|||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
sid: id,
|
sid: id,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if rl.OnListenerAdded != nil {
|
||||||
|
rl.OnListenerAdded(ws, ssid, id, filter)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,7 +329,12 @@ func (rl *Relay) removeListenerId(ws *WebSocket, id string) {
|
|||||||
for _, spec := range specs {
|
for _, spec := range specs {
|
||||||
if spec.sid == id {
|
if spec.sid == id {
|
||||||
spec.cancel(ErrSubscriptionClosedByClient)
|
spec.cancel(ErrSubscriptionClosedByClient)
|
||||||
rl.dispatcher.removeSubscription(spec.ssid)
|
filter := rl.dispatcher.removeSubscription(spec.ssid)
|
||||||
|
|
||||||
|
if rl.OnListenerRemoved != nil {
|
||||||
|
rl.OnListenerRemoved(ws, spec.ssid, id, filter)
|
||||||
|
}
|
||||||
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
kept = append(kept, spec)
|
kept = append(kept, spec)
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ type Relay struct {
|
|||||||
RejectConnection func(r *http.Request) bool
|
RejectConnection func(r *http.Request) bool
|
||||||
OnConnect func(ctx context.Context)
|
OnConnect func(ctx context.Context)
|
||||||
OnDisconnect func(ctx context.Context)
|
OnDisconnect func(ctx context.Context)
|
||||||
|
OnListenerAdded func(ws *WebSocket, ssid int, id string, filter nostr.Filter)
|
||||||
|
OnListenerRemoved func(ws *WebSocket, ssid int, id string, filter nostr.Filter)
|
||||||
OverwriteRelayInformation func(ctx context.Context, r *http.Request, info nip11.RelayInformationDocument) nip11.RelayInformationDocument
|
OverwriteRelayInformation func(ctx context.Context, r *http.Request, info nip11.RelayInformationDocument) nip11.RelayInformationDocument
|
||||||
PreventBroadcast func(ws *WebSocket, filter nostr.Filter, event nostr.Event) bool
|
PreventBroadcast func(ws *WebSocket, filter nostr.Filter, event nostr.Event) bool
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user