Skip to content

Commit be83ff7

Browse files
committed
testing
1 parent d0ab5b5 commit be83ff7

1 file changed

Lines changed: 27 additions & 18 deletions

File tree

internals/server/websocket.go

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,13 @@ func register(req *http.Request, socket *websocket.Conn) string {
5959
clientsMutex.Lock()
6060
clients[clientID] = socket
6161
clientsMutex.Unlock()
62+
6263
waitersMutex.Lock()
6364
if ch, ok := waiters[clientID]; ok {
64-
ch <- socket
65-
65+
select {
66+
case ch <- socket:
67+
default:
68+
}
6669
close(ch)
6770
delete(waiters, clientID)
6871
}
@@ -72,24 +75,30 @@ func register(req *http.Request, socket *websocket.Conn) string {
7275
}
7376

7477
func waitForClient(clientID string, timeout time.Duration) (*websocket.Conn, error) {
75-
waitCh := make(chan *websocket.Conn, 1)
76-
77-
waitersMutex.Lock()
78-
waiters[clientID] = waitCh
79-
waitersMutex.Unlock()
80-
81-
select {
82-
case conn := <-waitCh:
83-
return conn, nil
84-
case <-time.After(timeout):
85-
waitersMutex.Lock()
86-
delete(waiters, clientID)
87-
waitersMutex.Unlock()
88-
return nil, errors.New("Timed out waiting for client")
89-
}
78+
clientsMutex.Lock()
79+
if conn, ok := clients[clientID]; ok {
80+
clientsMutex.Unlock()
81+
return conn, nil
82+
}
83+
clientsMutex.Unlock()
84+
85+
waitCh := make(chan *websocket.Conn, 1)
86+
87+
waitersMutex.Lock()
88+
waiters[clientID] = waitCh
89+
waitersMutex.Unlock()
90+
91+
select {
92+
case conn := <-waitCh:
93+
return conn, nil
94+
case <-time.After(timeout):
95+
waitersMutex.Lock()
96+
delete(waiters, clientID)
97+
waitersMutex.Unlock()
98+
return nil, errors.New("Timed out waiting for client")
99+
}
90100
}
91101

92-
93102
func sendToClient(client *websocket.Conn, data map[string]any) error {
94103
return client.WriteJSON(data)
95104
}

0 commit comments

Comments
 (0)