- Add worker storage layer with PostgreSQL/sqlc setup - Add migration files for worker backbone schema - Add job runner and built-in jobs implementation - Add Redis key definitions for worker state management - Archive socket-session-loop milestone (completed/renamed) - Update roadmap current.md and foundation-alignment phase - Add socket endpoint integration and runtime smoke tests - Add infra-check, worker-storage-check, worker-storage-gen CLI tools - Update API socket server and config - Add pubspec dependencies and client socket endpoint changes - Add config tests for API and worker services
48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package socket
|
|
|
|
import (
|
|
protoSocket "git.toki-labs.com/toki/proto-socket/go"
|
|
"nhooyr.io/websocket"
|
|
|
|
altv1 "git.toki-labs.com/toki/alt/packages/contracts/gen/go/alt/v1"
|
|
"git.toki-labs.com/toki/alt/services/api/internal/config"
|
|
apiContracts "git.toki-labs.com/toki/alt/services/api/internal/contracts"
|
|
)
|
|
|
|
const (
|
|
serverName = "alt-api"
|
|
serverVersion = "dev"
|
|
defaultAltProtocolVersion = "alt.v1"
|
|
)
|
|
|
|
func NewServer(cfg config.Config) *protoSocket.WsServer {
|
|
options := protoSocket.WsServerOptions{}
|
|
if len(cfg.WSOriginPatterns) > 0 {
|
|
options.AcceptOptions = &websocket.AcceptOptions{
|
|
OriginPatterns: cfg.WSOriginPatterns,
|
|
}
|
|
}
|
|
server := protoSocket.NewWsServerWithOptions(cfg.Host, cfg.Port, cfg.SocketPath, options, func(conn *websocket.Conn) *protoSocket.WsClient {
|
|
return protoSocket.NewWsClient(conn, cfg.HeartbeatIntervalSec, cfg.HeartbeatWaitSec, apiContracts.ParserMap())
|
|
})
|
|
server.OnClientConnected = registerSessionHandlers
|
|
return server
|
|
}
|
|
|
|
func registerSessionHandlers(client *protoSocket.WsClient) {
|
|
protoSocket.AddRequestListenerTyped[*altv1.HelloRequest, *altv1.HelloResponse](&client.Communicator, func(req *altv1.HelloRequest) (*altv1.HelloResponse, error) {
|
|
protocolVersion := req.GetAltProtocolVersion()
|
|
if protocolVersion == "" {
|
|
protocolVersion = defaultAltProtocolVersion
|
|
}
|
|
return &altv1.HelloResponse{
|
|
ServerName: serverName,
|
|
ServerVersion: serverVersion,
|
|
AltProtocolVersion: protocolVersion,
|
|
Capabilities: []string{
|
|
"hello",
|
|
"request-response",
|
|
},
|
|
}, nil
|
|
})
|
|
}
|