- 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
37 lines
1,015 B
Go
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
|
|
}
|