- Add server_test.go for socket server testing - Update socket-session-loop.md roadmap milestone - Refactor services/api/internal/socket/server.go - Add agent-task documentation for socket session loop
42 lines
1.3 KiB
Go
42 lines
1.3 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 {
|
|
server := protoSocket.NewWsServer(cfg.Host, cfg.Port, cfg.SocketPath, 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
|
|
})
|
|
}
|