mirror of
https://github.com/wisplite/tether.git
synced 2026-05-01 06:22:41 -05:00
add tracker methods
This commit is contained in:
+47
-12
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user