wsclient

package
v1.4.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 29, 2024 License: Apache-2.0 Imports: 29 Imported by: 2

Documentation

Index

Constants

View Source
const (
	// WSSpecificConfPrefix is the named sub-section of the http config options that contains websocket specific config
	WSSpecificConfPrefix = "ws"
	// WSConfigKeyWriteBufferSize is the write buffer size
	WSConfigKeyWriteBufferSize = "ws.writeBufferSize"
	// WSConfigKeyReadBufferSize is the read buffer size
	WSConfigKeyReadBufferSize = "ws.readBufferSize"
	// WSConfigKeyInitialConnectAttempts sets how many times the websocket should attempt to connect on startup, before failing (after initial connection, retry is indefinite)
	WSConfigKeyInitialConnectAttempts = "ws.initialConnectAttempts"
	// WSConfigKeyPath if set will define the path to connect to - allows sharing of the same URL between HTTP and WebSocket connection info
	WSConfigKeyPath = "ws.path"
	// WSConfigURL if set will be a completely separate URL for WebSockets (must be a ws: or wss: scheme)
	WSConfigURL = "ws.url"
	// WSConfigKeyHeartbeatInterval is the frequency of ping/pong requests, and also used for the timeout to receive a response to the heartbeat
	WSConfigKeyHeartbeatInterval = "ws.heartbeatInterval"
	// WSConnectionTimeout is the amount of time to wait while attempting to establish a connection (or automatic reconnection)
	WSConfigKeyConnectionTimeout = "ws.connectionTimeout"
)

Variables

This section is empty.

Functions

func GenerateTLSCertficates added in v1.2.10

func GenerateTLSCertficates(t *testing.T) (publicKeyFile *os.File, privateKeyFile *os.File)

GenerateTLSCertificates creates a key pair for server and client auth

func InitConfig added in v0.1.4

func InitConfig(conf config.Section)

InitConfig ensures the config is initialized for HTTP too, as WS and HTTP can share the same tree of configuration (and all the HTTP options apply to the initial upgrade)

func NewTestTLSWSServer added in v1.2.10

func NewTestTLSWSServer(testReq func(req *http.Request), publicKeyFile *os.File, privateKeyFile *os.File) (toServer, fromServer chan string, url string, done func(), err error)

NewTestTLSWSServer creates a little test server for packages (including wsclient itself) to use in unit tests and secured with mTLS by passing in a key pair

func NewTestWSServer

func NewTestWSServer(testReq func(req *http.Request)) (toServer, fromServer chan string, url string, done func())

NewTestWSServer creates a little test server for packages (including wsclient itself) to use in unit tests

Types

type WSClient

type WSClient interface {
	Connect() error
	Receive() <-chan []byte
	ReceiveExt() <-chan *WSPayload
	URL() string
	SetURL(url string)
	SetHeader(header, value string)
	Send(ctx context.Context, message []byte) error
	Close()
}

func New

func New(ctx context.Context, config *WSConfig, beforeConnect WSPreConnectHandler, afterConnect WSPostConnectHandler) (WSClient, error)

type WSConfig

type WSConfig struct {
	HTTPURL                string             `json:"httpUrl,omitempty"`
	WebSocketURL           string             `json:"wsUrl,omitempty"`
	WSKeyPath              string             `json:"wsKeyPath,omitempty"`
	ReadBufferSize         int                `json:"readBufferSize,omitempty"`
	WriteBufferSize        int                `json:"writeBufferSize,omitempty"`
	InitialDelay           time.Duration      `json:"initialDelay,omitempty"`
	MaximumDelay           time.Duration      `json:"maximumDelay,omitempty"`
	InitialConnectAttempts int                `json:"initialConnectAttempts,omitempty"`
	DisableReconnect       bool               `json:"disableReconnect"`
	AuthUsername           string             `json:"authUsername,omitempty"`
	AuthPassword           string             `json:"authPassword,omitempty"`
	HTTPHeaders            fftypes.JSONObject `json:"headers,omitempty"`
	HeartbeatInterval      time.Duration      `json:"heartbeatInterval,omitempty"`
	TLSClientConfig        *tls.Config        `json:"tlsClientConfig,omitempty"`
	ConnectionTimeout      time.Duration      `json:"connectionTimeout,omitempty"`
	// This one cannot be set in JSON - must be configured on the code interface
	ReceiveExt bool
}

func GenerateConfig added in v0.1.4

func GenerateConfig(ctx context.Context, conf config.Section) (*WSConfig, error)

type WSPayload added in v1.2.11

type WSPayload struct {
	MessageType int
	Reader      io.Reader
	// contains filtered or unexported fields
}

WSPayload allows API consumers of this package to stream data, and inspect the message type, rather than just being passed the bytes directly.

func NewWSPayload added in v1.2.11

func NewWSPayload(mt int, r io.Reader) *WSPayload

func (*WSPayload) Processed added in v1.2.11

func (wsp *WSPayload) Processed()

Must call done on each payload, before being delivered the next

type WSPostConnectHandler

type WSPostConnectHandler func(ctx context.Context, w WSClient) error

WSPostConnectHandler will be called after every connect/reconnect. Can send data over ws, but must not block listening for data on the ws.

type WSPreConnectHandler

type WSPreConnectHandler func(ctx context.Context, w WSClient) error

WSPreConnectHandler will be called before every connect/reconnect. Any error returned will prevent the websocket from connecting.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL