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 package reactivity
import "github.com/gorilla/websocket" import (
"sync"
)
// TODO: populate with needed structures for tracking state // TODO: populate with needed structures for tracking state
type Tracker struct { 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 { 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) Track(c *Client) {
t.mu.Lock()
func (t *Tracker) Untrack(conn *websocket.Conn) {} defer t.mu.Unlock()
t.clients[c.ID] = c
func (t *Tracker) SubscribeToQuery(query string) {} }
func (t *Tracker) UnsubscribeFromQuery(query string) {} func (t *Tracker) Untrack(c *Client) {
t.mu.Lock()
func (t *Tracker) GetQuerySubscriptions() []string { defer t.mu.Unlock()
return []string{} 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
} }