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 }