30 lines
583 B
Go
30 lines
583 B
Go
package rpc
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"log/slog"
|
|
)
|
|
|
|
func (s *server) handleResponse(ctx context.Context, data []byte) {
|
|
var response Response
|
|
err := json.Unmarshal(data, &response)
|
|
if err != nil {
|
|
slog.ErrorContext(ctx, "Cannot Parse Response", "err", err)
|
|
return
|
|
}
|
|
|
|
s.requestMutex.Lock()
|
|
defer s.requestMutex.Unlock()
|
|
r, ok := s.requests[response.ID]
|
|
if !ok {
|
|
slog.ErrorContext(ctx, "Unknown Response", "response", response)
|
|
return
|
|
}
|
|
|
|
// remove request from map
|
|
delete(s.requests, response.ID)
|
|
|
|
// Send Response to Original Caller
|
|
r <- &response
|
|
}
|