fix im business event delivery
This commit is contained in:
@@ -149,6 +149,13 @@ func dispatchIMBusinessEvents(tenantID types.TenantID) {
|
||||
TenantID: tenantID, RcptTo: event.Target, AsUser: from, Timestamp: event.CreatedAt,
|
||||
Info: &MsgServerInfo{Topic: event.Target, From: from, What: "im", Event: event.EventType, Payload: payload},
|
||||
}
|
||||
if deliverIMBusinessEventToUserSessions(tenantID, event, message) {
|
||||
if err = store.HTTPInfrastructure.MarkEventDelivered(tenantID, event.EventID, now); err != nil {
|
||||
logs.Warn.Printf("business outbox: mark delivered event=%s: %v", event.EventID, err)
|
||||
return
|
||||
}
|
||||
continue
|
||||
}
|
||||
select {
|
||||
case globals.hub.routeSrv <- message:
|
||||
if err = store.HTTPInfrastructure.MarkEventDelivered(tenantID, event.EventID, now); err != nil {
|
||||
@@ -192,3 +199,24 @@ func startIMExternalBusinessEventPoller() func() {
|
||||
}()
|
||||
return func() { close(stop) }
|
||||
}
|
||||
|
||||
func deliverIMBusinessEventToUserSessions(tenantID types.TenantID, event types.BusinessEvent, message *ServerComMessage) bool {
|
||||
if event.TargetType != "user" || globals.sessionStore == nil || message == nil {
|
||||
return false
|
||||
}
|
||||
uid := types.ParseUserId(event.Target)
|
||||
if uid.IsZero() {
|
||||
return false
|
||||
}
|
||||
delivered := false
|
||||
globals.sessionStore.Range(func(_ string, session *Session) bool {
|
||||
if session == nil || session.uid != uid || session.tenantID != tenantID {
|
||||
return true
|
||||
}
|
||||
if session.queueOut(message.copy()) {
|
||||
delivered = true
|
||||
}
|
||||
return true
|
||||
})
|
||||
return delivered
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user