Add Request Timeout, Cleanup Request map

This commit is contained in:
speatzle 2024-05-21 15:43:08 +02:00
parent 21801362f9
commit 313257a1ab
2 changed files with 32 additions and 15 deletions

View file

@ -4,6 +4,7 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"time"
"github.com/google/uuid" "github.com/google/uuid"
"nhooyr.io/websocket" "nhooyr.io/websocket"
@ -57,9 +58,14 @@ func (s *server) Call(ctx context.Context, c *websocket.Conn, method string, par
return nil, fmt.Errorf("Error Writing Request: %w", err) return nil, fmt.Errorf("Error Writing Request: %w", err)
} }
// Wait for Response, TODO add Select Timeout timeout := time.NewTimer(time.Second * 10)
response := <-resp
select {
case response := <-resp:
// Cleanup timeout
if !timeout.Stop() {
<-timeout.C
}
if response.Error != nil { if response.Error != nil {
return response, fmt.Errorf("Call Error: %w", err) return response, fmt.Errorf("Call Error: %w", err)
} }
@ -77,6 +83,14 @@ func (s *server) Call(ctx context.Context, c *websocket.Conn, method string, par
return response, fmt.Errorf("Error Parsing Result: %w", err) return response, fmt.Errorf("Error Parsing Result: %w", err)
} }
return response, nil return response, nil
case <-timeout.C:
s.requestMutex.Lock()
defer s.requestMutex.Unlock()
// remove request from map
delete(s.requests, id)
return nil, fmt.Errorf("Request timed out")
}
} }
// TODO Call with Multiple Response (Chunked file upload) // TODO Call with Multiple Response (Chunked file upload)

View file

@ -22,6 +22,9 @@ func (s *server) handleResponse(ctx context.Context, data []byte) {
return return
} }
// remove request from map
delete(s.requests, response.ID)
// Send Response to Original Caller // Send Response to Original Caller
r <- &response r <- &response
} }