alt/services/api/internal/socket/server.go
toki db4ee8f78e feat: socket session loop implementation and agent-task documentation
- 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
2026-05-28 09:36:33 +09:00

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
})
}