khatru: ForceBroadcastEvent()
This commit is contained in:
@@ -7,5 +7,10 @@ import (
|
|||||||
// BroadcastEvent emits an event to all listeners whose filters' match, skipping all filters and actions
|
// BroadcastEvent emits an event to all listeners whose filters' match, skipping all filters and actions
|
||||||
// it also doesn't attempt to store the event or trigger any reactions or callbacks
|
// it also doesn't attempt to store the event or trigger any reactions or callbacks
|
||||||
func (rl *Relay) BroadcastEvent(evt nostr.Event) int {
|
func (rl *Relay) BroadcastEvent(evt nostr.Event) int {
|
||||||
return rl.notifyListeners(evt)
|
return rl.notifyListeners(evt, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForceBroadcastEvent is like BroadcastEvent, but it skips the PreventBroadcast hook.
|
||||||
|
func (rl *Relay) ForceBroadcastEvent(evt nostr.Event) int {
|
||||||
|
return rl.notifyListeners(evt, true)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ func (rl *Relay) HandleWebsocket(w http.ResponseWriter, r *http.Request) {
|
|||||||
if writeErr == nil {
|
if writeErr == nil {
|
||||||
ok = true
|
ok = true
|
||||||
if !skipBroadcast {
|
if !skipBroadcast {
|
||||||
n := srl.notifyListeners(env.Event)
|
n := srl.notifyListeners(env.Event, false)
|
||||||
|
|
||||||
// the number of notified listeners matters in ephemeral events
|
// the number of notified listeners matters in ephemeral events
|
||||||
if env.Event.Kind.IsEphemeral() {
|
if env.Event.Kind.IsEphemeral() {
|
||||||
|
|||||||
@@ -133,12 +133,12 @@ func (rl *Relay) removeClientAndListeners(ws *WebSocket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// returns how many listeners were notified
|
// returns how many listeners were notified
|
||||||
func (rl *Relay) notifyListeners(event nostr.Event) int {
|
func (rl *Relay) notifyListeners(event nostr.Event, skipPrevent bool) int {
|
||||||
count := 0
|
count := 0
|
||||||
listenersloop:
|
listenersloop:
|
||||||
for _, listener := range rl.listeners {
|
for _, listener := range rl.listeners {
|
||||||
if listener.filter.Matches(event) {
|
if listener.filter.Matches(event) {
|
||||||
if nil != rl.PreventBroadcast {
|
if !skipPrevent && nil != rl.PreventBroadcast {
|
||||||
if rl.PreventBroadcast(listener.ws, listener.filter, event) {
|
if rl.PreventBroadcast(listener.ws, listener.filter, event) {
|
||||||
continue listenersloop
|
continue listenersloop
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user