fayec/transport/transport.go
2023-09-18 21:01:38 -05:00

63 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package transport
import (
"crypto/tls"
"gitea.watsonlabs.net/watsonb8/fayec/message"
"net/http"
"time"
)
// Options represents the connection options to be used by a transport
type Options struct {
Headers http.Header
Cookies http.CookieJar
TLS *tls.Config
MaxRetries int
RetryInterval time.Duration
DialDeadline time.Duration
ReadDeadline time.Duration
WriteDeadline time.Duration
}
// Transport represents the transport to be used to comunicate with the faye server
type Transport interface {
//name returns the transport name
Name() string
//Init initializes the transport with the provided options
Init(endpoint string, options *Options) error
//Options return the transport Options
Options() *Options
//Handshake initiates a connection negotiation by sending a message to the /meta/handshake channel.
Handshake(msg *message.Message) (*message.Message, error)
//Init is called after a client has discovered the servers capabilities with a handshake exchange,
//a connection is established by sending a message to the /meta/connect channel
Connect(msg *message.Message) error
//Disconnect closes all subscriptions and inform the server to remove any client-related state.
//any subsequent method call to the transport object will result in undefined behaviour.
Disconnect(msg *message.Message) error
//SendMessage sens a message through the transport
SendMessage(msg *message.Message) error
SetOnMessageReceivedHandler(onMsg func(msg *message.Message))
//SetOnTransportUpHandler is called when the transport is connected
SetOnTransportUpHandler(callback func())
//SetOnTransportDownHandler is called when the transport goes down
SetOnTransportDownHandler(callback func(error))
//handled by dispatcher
SetOnErrorHandler(onError func(err error))
}
var registeredTransports = map[string]Transport{}
func RegisterTransport(t Transport) {
registeredTransports[t.Name()] = t //todo validate
}
func GetTransport(name string) Transport {
return registeredTransports[name]
}