mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 20:03:03 +00:00
48 lines
967 B
Go
48 lines
967 B
Go
package pubsub
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
// PresenceHandler handles GET /v1/pubsub/presence?topic=mytopic
|
|
func (p *PubSubHandlers) PresenceHandler(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodGet {
|
|
writeError(w, http.StatusMethodNotAllowed, "method not allowed")
|
|
return
|
|
}
|
|
|
|
ns := resolveNamespaceFromRequest(r)
|
|
if ns == "" {
|
|
writeError(w, http.StatusForbidden, "namespace not resolved")
|
|
return
|
|
}
|
|
|
|
topic := r.URL.Query().Get("topic")
|
|
if topic == "" {
|
|
writeError(w, http.StatusBadRequest, "missing 'topic'")
|
|
return
|
|
}
|
|
|
|
topicKey := fmt.Sprintf("%s.%s", ns, topic)
|
|
|
|
p.presenceMu.RLock()
|
|
members, ok := p.presenceMembers[topicKey]
|
|
p.presenceMu.RUnlock()
|
|
|
|
if !ok {
|
|
writeJSON(w, http.StatusOK, map[string]any{
|
|
"topic": topic,
|
|
"members": []PresenceMember{},
|
|
"count": 0,
|
|
})
|
|
return
|
|
}
|
|
|
|
writeJSON(w, http.StatusOK, map[string]any{
|
|
"topic": topic,
|
|
"members": members,
|
|
"count": len(members),
|
|
})
|
|
}
|