add tracker methods

This commit is contained in:
2026-04-08 10:06:22 -05:00
parent 877ea338ad
commit c883df4733
+47 -12
View File
@@ -1,23 +1,58 @@
package reactivity
import "github.com/gorilla/websocket"
import (
"sync"
)
// TODO: populate with needed structures for tracking state
type Tracker struct {
mu sync.RWMutex
// Maps a Client's UUID to their actual Client struct
clients map[string]*Client
// Maps a Query Hash (e.g. "getUser?id=1") to a Set of Client IDs
subscriptions map[string]map[string]bool
}
func NewTracker() *Tracker {
return &Tracker{}
return &Tracker{clients: make(map[string]*Client), subscriptions: make(map[string]map[string]bool)}
}
func (t *Tracker) Track(conn *websocket.Conn) {}
func (t *Tracker) Untrack(conn *websocket.Conn) {}
func (t *Tracker) SubscribeToQuery(query string) {}
func (t *Tracker) UnsubscribeFromQuery(query string) {}
func (t *Tracker) GetQuerySubscriptions() []string {
return []string{}
func (t *Tracker) Track(c *Client) {
t.mu.Lock()
defer t.mu.Unlock()
t.clients[c.ID] = c
}
func (t *Tracker) Untrack(c *Client) {
t.mu.Lock()
defer t.mu.Unlock()
delete(t.clients, c.ID)
}
func (t *Tracker) SubscribeToQuery(clientID string, queryHash string) {
t.mu.Lock()
defer t.mu.Unlock()
if t.subscriptions[queryHash] == nil {
t.subscriptions[queryHash] = make(map[string]bool)
}
t.subscriptions[queryHash][clientID] = true
}
func (t *Tracker) UnsubscribeFromQuery(clientID string, queryHash string) {
t.mu.Lock()
defer t.mu.Unlock()
delete(t.subscriptions[queryHash], clientID)
}
func (t *Tracker) GetQuerySubscriptions(queryHash string) []string {
t.mu.RLock()
defer t.mu.RUnlock()
subscriptions := t.subscriptions[queryHash]
subscriptionIDs := make([]string, 0, len(subscriptions))
for clientID := range subscriptions {
subscriptionIDs = append(subscriptionIDs, clientID)
}
return subscriptionIDs
}