iop/apps/node/internal/transport/client.go
toki c46874055a feat: edge node unit tests and related updates
- Add edge node unit tests and transport package
- Add node test client and related artifacts
- Update bootstrap, node, and config modules
- Add proto generated files
- Update Makefile and configuration files
2026-05-02 20:09:55 +09:00

37 lines
1,015 B
Go

package transport
import (
"context"
"fmt"
"net"
"strconv"
toki "git.toki-labs.com/toki/common-proto-socket/go"
"go.uber.org/zap"
)
const (
heartbeatIntervalSec = 30
heartbeatWaitSec = 10
)
// DialEdge connects to the edge TCP server and returns a Session.
func DialEdge(ctx context.Context, addr string, handler Handler, nodeID string, logger *zap.Logger) (*Session, error) {
host, portStr, err := net.SplitHostPort(addr)
if err != nil {
return nil, fmt.Errorf("transport: invalid addr %q: %w", addr, err)
}
port, err := strconv.Atoi(portStr)
if err != nil {
return nil, fmt.Errorf("transport: invalid port %q: %w", portStr, err)
}
client, err := toki.DialTcp(ctx, host, port, heartbeatIntervalSec, heartbeatWaitSec, nodeParserMap())
if err != nil {
return nil, fmt.Errorf("transport: dial edge %s: %w", addr, err)
}
sess := newSession(client, handler, nodeID, logger)
logger.Info("connected to edge", zap.String("addr", addr), zap.String("node_id", nodeID))
return sess, nil
}