46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package lobbyservice
|
|
|
|
import (
|
|
"context"
|
|
|
|
"galaxy/gateway/internal/downstream"
|
|
lobbymodel "galaxy/model/lobby"
|
|
)
|
|
|
|
var noOpClose = func() error { return nil }
|
|
|
|
// NewRoutes returns the reserved authenticated gateway routes owned by
|
|
// the Gateway -> Game Lobby boundary.
|
|
//
|
|
// When baseURL is empty, the returned routes still reserve the stable
|
|
// `lobby.*` message types but resolve them to a dependency-unavailable
|
|
// client so callers receive the transport-level unavailable outcome
|
|
// instead of a route-miss error.
|
|
func NewRoutes(baseURL string) (map[string]downstream.Client, func() error, error) {
|
|
client := downstream.Client(unavailableClient{})
|
|
closeFn := noOpClose
|
|
|
|
if baseURL != "" {
|
|
httpClient, err := NewHTTPClient(baseURL)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
client = httpClient
|
|
closeFn = httpClient.Close
|
|
}
|
|
|
|
return map[string]downstream.Client{
|
|
lobbymodel.MessageTypeMyGamesList: client,
|
|
lobbymodel.MessageTypeOpenEnrollment: client,
|
|
}, closeFn, nil
|
|
}
|
|
|
|
type unavailableClient struct{}
|
|
|
|
func (unavailableClient) ExecuteCommand(context.Context, downstream.AuthenticatedCommand) (downstream.UnaryResult, error) {
|
|
return downstream.UnaryResult{}, downstream.ErrDownstreamUnavailable
|
|
}
|
|
|
|
var _ downstream.Client = unavailableClient{}
|