Documentation
¶
Index ¶
- Constants
- Variables
- func NewHeartbeatHandler(opts Options) func(client IClient, message models.IMessage) bool
- func NewTransmissionHandler(realm IRealm, opts Options) func(client IClient, message models.IMessage) bool
- type Auth
- type AuthError
- type CheckBrokenConnections
- type Client
- type ClientMessage
- type HTTPServer
- type Handler
- type HandlersRegistry
- type IClient
- type IHandlersRegistry
- type IMessageHandler
- type IMessageQueue
- type IMessagesExpire
- type IRealm
- type MessageHandler
- type MessageQueue
- type MessagesExpire
- type Options
- type PeerServer
- type Realm
- func (r *Realm) AddMessageToQueue(id string, message models.IMessage)
- func (r *Realm) ClearMessageQueue(id string)
- func (r *Realm) GenerateClientID() string
- func (r *Realm) GetClientByID(clientID string) IClient
- func (r *Realm) GetClientsIds() []string
- func (r *Realm) GetClientsIdsWithQueue() []string
- func (r *Realm) GetMessageQueueByID(id string) IMessageQueue
- func (r *Realm) RemoveClientByID(id string) bool
- func (r *Realm) SetClient(client IClient, id string)
- type WebSocketServer
Constants ¶
const ( // ErrorInvalidKey Invalid key provided ErrorInvalidKey = "Invalid key provided" // ErrorInvalidToken Invalid token provided ErrorInvalidToken = "Invalid token provided" // ErrorInvalidWSParameters No id, token, or key supplied to websocket server ErrorInvalidWSParameters = "No id, token, or key supplied to websocket server" // ErrorConnectionLimitExceeded Server has reached its concurrent user limit ErrorConnectionLimitExceeded = "Server has reached its concurrent user limit" // MessageTypeOpen OPEN MessageTypeOpen = "OPEN" // MessageTypeLeave LEAVE MessageTypeLeave = "LEAVE" // MessageTypeCandidate CANDIDATE MessageTypeCandidate = "CANDIDATE" // MessageTypeOffer OFFER MessageTypeOffer = "OFFER" // MessageTypeAnswer ANSWER MessageTypeAnswer = "ANSWER" // MessageTypeExpire EXPIRE MessageTypeExpire = "EXPIRE" // MessageTypeHeartbeat HEARTBEAT MessageTypeHeartbeat = "HEARTBEAT" // MessageTypeIDTaken ID-TAKEN MessageTypeIDTaken = "ID-TAKEN" // MessageTypeError ERROR MessageTypeError = "ERROR" // WebsocketEventMessage message WebsocketEventMessage = "message" // WebsocketEventConnection connection WebsocketEventConnection = "connection" // WebsocketEventError error WebsocketEventError = "error" // WebsocketEventClose close WebsocketEventClose = "close" )
const DefaultCheckInterval = 300
Variables ¶
var ClientIDGenerator = func() string { return util.RandomToken() }
ClientIDGenerator default hash generator
Functions ¶
func NewHeartbeatHandler ¶
NewHeartbeatHandler handles a heartbeat
Types ¶
type Auth ¶
type Auth struct {
// contains filtered or unexported fields
}
Auth handles request authentication
func (*Auth) HTTPHandler ¶
func (a *Auth) HTTPHandler(handler http.HandlerFunc) http.Handler
HTTPHandler return an HTTP handler middleware
func (*Auth) WSHandler ¶
func (a *Auth) WSHandler(handler http.HandlerFunc) http.HandlerFunc
WSHandler return a websocket handler middleware
type AuthError ¶
AuthError is an error that occurs during authentication and contains the original error plus the http status code that should be returned to the client
type CheckBrokenConnections ¶
type CheckBrokenConnections struct {
// contains filtered or unexported fields
}
CheckBrokenConnections watch for broken connections
func NewCheckBrokenConnections ¶
func NewCheckBrokenConnections(realm IRealm, opts Options, onClose func(client IClient)) *CheckBrokenConnections
NewCheckBrokenConnections create a new CheckBrokenConnections
func (*CheckBrokenConnections) Start ¶
func (b *CheckBrokenConnections) Start()
Start initialize the connection checker
func (*CheckBrokenConnections) Stop ¶
func (b *CheckBrokenConnections) Stop()
Stop close the connection checker
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client implementation
func (*Client) GetLastPing ¶
GetLastPing return the last ping timestamp
func (*Client) SetLastPing ¶
SetLastPing set last ping timestamp
type ClientMessage ¶
ClientMessage wrap a message received by a client
type HTTPServer ¶
type HTTPServer struct {
// contains filtered or unexported fields
}
HTTPServer peer server
func NewHTTPServer ¶
func NewHTTPServer(realm IRealm, auth *Auth, wss *WebSocketServer, opts Options) *HTTPServer
NewHTTPServer init a server
func (*HTTPServer) StartTLS ¶
func (h *HTTPServer) StartTLS(certFile, keyFile string) error
Start start the HTTPS server
type HandlersRegistry ¶
type HandlersRegistry struct {
// contains filtered or unexported fields
}
HandlersRegistry handlers registry
func (*HandlersRegistry) Handle ¶
func (r *HandlersRegistry) Handle(client IClient, message models.IMessage) bool
Handle handles a message
func (*HandlersRegistry) RegisterHandler ¶
func (r *HandlersRegistry) RegisterHandler(messageType string, handler Handler)
RegisterHandler register an handler
type IClient ¶
type IClient interface { GetID() string GetToken() string GetSocket() *websocket.Conn SetSocket(socket *websocket.Conn) GetLastPing() int64 SetLastPing(lastPing int64) Send(data []byte) error }
IClient client interface
type IHandlersRegistry ¶
type IHandlersRegistry interface { RegisterHandler(messageType string, handler Handler) Handle(client IClient, message models.IMessage) bool }
IHandlersRegistry interface for HandlersRegistry
func NewHandlersRegistry ¶
func NewHandlersRegistry() IHandlersRegistry
NewHandlersRegistry creates a new HandlersRegistry
type IMessageHandler ¶
IMessageHandler interface for MessageHandler
type IMessageQueue ¶
type IMessageQueue interface { GetLastReadAt() int64 AddMessage(message models.IMessage) ReadMessage() models.IMessage GetMessages() []models.IMessage }
IMessageQueue message queue interface
type IMessagesExpire ¶
type IMessagesExpire interface { Start() Stop() }
IMessagesExpire MessagesExpire interface
type IRealm ¶
type IRealm interface { GetClientsIds() []string GetClientByID(clientID string) IClient GetClientsIdsWithQueue() []string SetClient(client IClient, id string) RemoveClientByID(id string) bool GetMessageQueueByID(id string) IMessageQueue AddMessageToQueue(id string, message models.IMessage) ClearMessageQueue(id string) GenerateClientID() string }
IRealm interface for Realm
type MessageHandler ¶
type MessageHandler struct {
// contains filtered or unexported fields
}
MessageHandler wrap the message handler
func NewMessageHandler ¶
func NewMessageHandler(realm IRealm, handlersRegistry IHandlersRegistry, opts Options) *MessageHandler
NewMessageHandler creates a new MessageHandler
type MessageQueue ¶
type MessageQueue struct {
// contains filtered or unexported fields
}
MessageQueue type
func NewMessageQueue ¶
func NewMessageQueue() *MessageQueue
NewMessageQueue creates a new MessageQueue
func (*MessageQueue) AddMessage ¶
func (mq *MessageQueue) AddMessage(message models.IMessage)
AddMessage add message to queue
func (*MessageQueue) GetLastReadAt ¶
func (mq *MessageQueue) GetLastReadAt() int64
GetLastReadAt return last message read time
func (*MessageQueue) GetMessages ¶
func (mq *MessageQueue) GetMessages() []models.IMessage
GetMessages return all queued messages
func (*MessageQueue) ReadMessage ¶
func (mq *MessageQueue) ReadMessage() models.IMessage
ReadMessage read last message
type MessagesExpire ¶
type MessagesExpire struct {
// contains filtered or unexported fields
}
MessagesExpire check for expired messages
func NewMessagesExpire ¶
func NewMessagesExpire(realm IRealm, opts Options, messageHandler IMessageHandler) *MessagesExpire
type Options ¶
type Options struct { Port int Host string LogLevel string ExpireTimeout int64 AliveTimeout int64 Key string Path string ConcurrentLimit int AllowDiscovery bool CleanupOutMsgs int }
Options peer server options
type PeerServer ¶
PeerServer wrap the peer server functionalities
func (*PeerServer) StartTLS ¶
func (p *PeerServer) StartTLS(certFile, keyFile string) error
Start start the TLS peer server
type Realm ¶
type Realm struct {
// contains filtered or unexported fields
}
Realm implementation of a realm
func (*Realm) AddMessageToQueue ¶
AddMessageToQueue add message to queue
func (*Realm) ClearMessageQueue ¶
ClearMessageQueue clear message queue
func (*Realm) GenerateClientID ¶
GenerateClientID generate a client id
func (*Realm) GetClientByID ¶
GetClientByID return client by id
func (*Realm) GetClientsIds ¶
GetClientsIds return the list of client id
func (*Realm) GetClientsIdsWithQueue ¶
GetClientsIdsWithQueue retur clients with queue
func (*Realm) GetMessageQueueByID ¶
func (r *Realm) GetMessageQueueByID(id string) IMessageQueue
GetMessageQueueByID get message by queue id
func (*Realm) RemoveClientByID ¶
RemoveClientByID remove a client by id
type WebSocketServer ¶
WebSocketServer wrap the websocket server
func NewWebSocketServer ¶
func NewWebSocketServer(realm IRealm, opts Options) *WebSocketServer
NewWebSocketServer create a new WebSocketServer
func (*WebSocketServer) Handler ¶
func (wss *WebSocketServer) Handler() http.HandlerFunc
Handler expose the http handler for websocket
func (*WebSocketServer) Send ¶
func (wss *WebSocketServer) Send(data []byte)
Send send data to the clients