server

package
v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Dec 11, 2022 License: MIT Imports: 43 Imported by: 12

Documentation ¶

Overview ¶

Package server is a generated GoMock package.

Package server is a generated GoMock package.

Package server is a generated GoMock package.

Package server is a generated GoMock package.

Package server is a generated GoMock package.

Package server is a generated GoMock package.

Package server is a generated GoMock package.

Index ¶

Constants ¶

View Source
const (
	Connecting = iota
	Connected
)

Client status

Variables ¶

View Source
var (
	ErrConnectTimeOut = errors.New("connect time out")
)

Error

View Source
var (
	// ErrInvalWsMsgType [MQTT-6.0.0-1]
	ErrInvalWsMsgType = errors.New("invalid websocket message type")
)

Functions ¶

func LoggerWithField ¶

func LoggerWithField(fields ...zap.Field) *zap.Logger

LoggerWithField release fields to a new logger. Plugins can use this method to release plugin name field.

func New ¶

func New(opts ...Options) *server

New returns a gmqtt server instance with the given options

func RegisterPersistenceFactory ¶

func RegisterPersistenceFactory(name string, new NewPersistence)

func RegisterPlugin ¶

func RegisterPlugin(name string, new NewPlugin)

func RegisterTopicAliasMgrFactory ¶

func RegisterTopicAliasMgrFactory(name string, new NewTopicAliasManager)

Types ¶

type APIRegistrar ¶ added in v0.3.0

type APIRegistrar interface {
	// RegisterHTTPHandler registers the handler to all http servers.
	RegisterHTTPHandler(fn HTTPHandler) error
	// RegisterService registers a service and its implementation to all gRPC servers.
	RegisterService(desc *grpc.ServiceDesc, impl interface{})
}

APIRegistrar is the registrar for all gRPC servers and HTTP servers. It provides the ability for plugins to register gRPC and HTTP handler.

type AuthOptions ¶

type AuthOptions struct {
	// SessionExpiry is session expired time in seconds.
	SessionExpiry uint32
	// ReceiveMax limits the number of QoS 1 and QoS 2 publications that the server is willing to process concurrently for the client.
	// If the client version is v5, this value will be set into  Receive Maximum property in CONNACK packet.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901083
	ReceiveMax uint16
	// MaximumQoS is the highest QOS level permitted for a Publish.
	MaximumQoS uint8
	// MaxPacketSize is the maximum packet size that the server is willing to accept from the client.
	// If the client version is v5, this value will be set into Receive Maximum property in CONNACK packet.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086
	MaxPacketSize uint32
	// TopicAliasMax indicates the highest value that the server will accept as a Topic Alias sent by the client.
	// The server uses this value to limit the number of Topic Aliases that it is willing to hold on this connection.
	// This option only affect v5 client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901088
	TopicAliasMax uint16
	// RetainAvailable indicates whether the server supports retained messages.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901085
	RetainAvailable bool
	// WildcardSubAvailable indicates whether the server supports Wildcard Subscriptions.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901091
	WildcardSubAvailable bool
	// SubIDAvailable indicates whether the server supports Subscription Identifiers.
	// This option only affect v5 client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901092
	SubIDAvailable bool
	// SharedSubAvailable indicates whether the server supports Shared Subscriptions.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901093
	SharedSubAvailable bool
	// KeepAlive is the keep alive time assigned by the server.
	// This option only affect v5 client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901094
	KeepAlive uint16
	// UserProperties is be used to provide additional information to the client.
	// This option only affect v5 client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901090
	UserProperties []*packets.UserProperty
	// AssignedClientID allows the server to assign a client id for the client.
	// It will override the client id in the connect packet.
	AssignedClientID []byte
	// ResponseInfo is used as the basis for creating a Response Topic.
	// This option only affect v5 client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901095
	ResponseInfo []byte
	// MaxInflight limits the number of QoS 1 and QoS 2 publications that the client is willing to process concurrently.
	MaxInflight uint16
}

AuthOptions provides several options which controls how the server interacts with the client. The default value of these options is defined in the configuration file.

type AuthRequest ¶

type AuthRequest struct {
	Auth    *packets.Auth
	Options *AuthOptions
}

type AuthResponse ¶

type AuthResponse struct {
	// Continue indicate that whether more authentication data is needed.
	Continue bool
	// AuthData is the auth data property of the auth packet.
	AuthData []byte
}

ReAuthResponse is the response of the OnAuth hook.

type Client ¶

type Client interface {
	// ClientOptions return a reference of ClientOptions. Do not edit.
	// This is mainly used in hooks.
	ClientOptions() *ClientOptions
	// SessionInfo return a reference of session information of the client. Do not edit.
	// Session info will be available after the client has passed OnSessionCreated or OnSessionResume.
	SessionInfo() *gmqtt.Session
	// Version return the protocol version of the used client.
	Version() packets.Version
	// ConnectedAt returns the connected time
	ConnectedAt() time.Time
	// Connection returns the raw net.Conn
	Connection() net.Conn
	// Close closes the client connection.
	Close()
	// Disconnect sends a disconnect packet to client, it is use to close v5 client.
	Disconnect(disconnect *packets.Disconnect)
}

Client represent a mqtt client.

type ClientIterateFn ¶

type ClientIterateFn = func(client Client) bool

ClientIterateFn is the callback function used by ClientService.IterateClient Return false means to stop the iteration.

type ClientOptions ¶

type ClientOptions struct {
	// ClientID is the client id for the client.
	ClientID string
	// Username is the username for the client.
	Username string
	// KeepAlive is the keep alive time in seconds for the client.
	// The server will close the client if no there is no packet has been received for 1.5 times the KeepAlive time.
	KeepAlive uint16
	// SessionExpiry is the session expiry interval in seconds.
	// If the client version is v5, this value will be set into CONNACK Session Expiry Interval property.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901082
	SessionExpiry uint32
	// MaxInflight limits the number of QoS 1 and QoS 2 publications that the client is willing to process concurrently.
	// For v3 client, it is default to config.MQTT.MaxInflight.
	// For v5 client, it is the minimum of config.MQTT.MaxInflight and Receive Maximum property in CONNECT packet.
	MaxInflight uint16
	// ReceiveMax limits the number of QoS 1 and QoS 2 publications that the server is willing to process concurrently for the Client.
	// If the client version is v5, this value will be set into Receive Maximum property in CONNACK packet.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901083
	ReceiveMax uint16
	// ClientMaxPacketSize is the maximum packet size that the client is willing to accept.
	// The server will drop the packet if it exceeds ClientMaxPacketSize.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901050
	ClientMaxPacketSize uint32
	// ServerMaxPacketSize is the maximum packet size that the server is willing to accept from the client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901086
	ServerMaxPacketSize uint32
	// ClientTopicAliasMax is highest value that the client will accept as a Topic Alias sent by the server.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901051
	ClientTopicAliasMax uint16
	// ServerTopicAliasMax is highest value that the server will accept as a Topic Alias sent by the client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901088
	ServerTopicAliasMax uint16
	// RequestProblemInfo is the value to indicate whether the Reason String or User Properties should be sent in the case of failures.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901053
	RequestProblemInfo bool
	// UserProperties is the user properties provided by the client.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901090
	UserProperties []*packets.UserProperty
	// WildcardSubAvailable indicates whether the client is permitted to send retained messages.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901091
	RetainAvailable bool
	// WildcardSubAvailable indicates whether the client is permitted to subscribe Wildcard Subscriptions.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901091
	WildcardSubAvailable bool
	// SubIDAvailable indicates whether the client is permitted to set Subscription Identifiers.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901092
	SubIDAvailable bool
	// SharedSubAvailable indicates whether the client is permitted to subscribe Shared Subscriptions.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901093
	SharedSubAvailable bool
	// AuthMethod is the auth method send by the client.
	// Only MQTT v5 client can set this value.
	// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901055
	AuthMethod []byte
}

ClientOptions is the options which controls how the server interacts with the client. It will be set after the client has connected.

type ClientService ¶

type ClientService interface {
	IterateSession(fn session.IterateFn) error
	GetSession(clientID string) (*gmqtt.Session, error)
	GetClient(clientID string) Client
	IterateClient(fn ClientIterateFn)
	TerminateSession(clientID string)
}

ClientService provides the ability to query and close clients.

type ClientStats ¶

type ClientStats struct {
	PacketStats       PacketStats
	MessageStats      MessageStats
	SubscriptionStats subscription.Stats
}

ClientStats is the statistic information of one client.

func (ClientStats) GetDroppedTotal ¶

func (c ClientStats) GetDroppedTotal() uint64

type ConnectRequest ¶

type ConnectRequest struct {
	// Connect is the CONNECT packet.It is immutable, do not edit.
	Connect *packets.Connect
	// Options represents the setting which will be applied to the current client if auth success.
	// Caller can edit this property to change the setting.
	Options *AuthOptions
}

ConnectRequest represents a connect request made by a CONNECT packet.

type ConnectionStats ¶

type ConnectionStats struct {
	ConnectedTotal      uint64
	DisconnectedTotal   uint64
	SessionCreatedTotal uint64
	SessionTerminated   struct {
		TakenOver uint64
		Expired   uint64
		Normal    uint64
	}
	// ActiveCurrent is the number of used active session.
	ActiveCurrent uint64
	// InactiveCurrent is the number of used inactive session.
	InactiveCurrent uint64
}

ConnectionStats provides the statistics of client connections.

type DeliveryMode ¶

type DeliveryMode = string
const (
	Overlap  DeliveryMode = "overlap"
	OnlyOnce DeliveryMode = "onlyonce"
)

type DroppedTotal ¶

type DroppedTotal struct {
	Internal             uint64
	ExceedsMaxPacketSize uint64
	QueueFull            uint64
	Expired              uint64
	InflightExpired      uint64
}

type EnhancedAuthResponse ¶

type EnhancedAuthResponse struct {
	Continue bool
	OnAuth   OnAuth
	AuthData []byte
}

type GlobalStats ¶

type GlobalStats struct {
	ConnectionStats   ConnectionStats
	PacketStats       PacketStats
	MessageStats      MessageStats
	SubscriptionStats subscription.Stats
}

GlobalStats is the collection of global statistics.

type HTTPHandler ¶ added in v0.3.0

type HTTPHandler = func(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error)

HTTPHandler is the http handler defined by gRPC-gateway.

type HookWrapper ¶

type HookWrapper struct {
	OnBasicAuthWrapper         OnBasicAuthWrapper
	OnEnhancedAuthWrapper      OnEnhancedAuthWrapper
	OnConnectedWrapper         OnConnectedWrapper
	OnReAuthWrapper            OnReAuthWrapper
	OnSessionCreatedWrapper    OnSessionCreatedWrapper
	OnSessionResumedWrapper    OnSessionResumedWrapper
	OnSessionTerminatedWrapper OnSessionTerminatedWrapper
	OnSubscribeWrapper         OnSubscribeWrapper
	OnSubscribedWrapper        OnSubscribedWrapper
	OnUnsubscribeWrapper       OnUnsubscribeWrapper
	OnUnsubscribedWrapper      OnUnsubscribedWrapper
	OnMsgArrivedWrapper        OnMsgArrivedWrapper
	OnMsgDroppedWrapper        OnMsgDroppedWrapper
	OnDeliveredWrapper         OnDeliveredWrapper
	OnClosedWrapper            OnClosedWrapper
	OnAcceptWrapper            OnAcceptWrapper
	OnStopWrapper              OnStopWrapper
	OnWillPublishWrapper       OnWillPublishWrapper
	OnWillPublishedWrapper     OnWillPublishedWrapper
}

HookWrapper groups all hook wrappers function

type MessageQosStats ¶

type MessageQosStats struct {
	DroppedTotal  DroppedTotal
	ReceivedTotal uint64
	SentTotal     uint64
}

func (*MessageQosStats) GetDroppedTotal ¶

func (m *MessageQosStats) GetDroppedTotal() uint64

type MessageStats ¶

type MessageStats struct {
	Qos0            MessageQosStats
	Qos1            MessageQosStats
	Qos2            MessageQosStats
	InflightCurrent uint64
	QueuedCurrent   uint64
}

MessageStats represents the statistics of PUBLISH in, separated by QOS.

func (*MessageStats) GetDroppedTotal ¶

func (m *MessageStats) GetDroppedTotal() uint64

type MockClient ¶

type MockClient struct {
	// contains filtered or unexported fields
}

MockClient is a mock of Client interface

func NewMockClient ¶

func NewMockClient(ctrl *gomock.Controller) *MockClient

NewMockClient creates a new mock instance

func (*MockClient) ClientOptions ¶

func (m *MockClient) ClientOptions() *ClientOptions

ClientOptions mocks base method

func (*MockClient) Close ¶

func (m *MockClient) Close()

Close mocks base method

func (*MockClient) ConnectedAt ¶

func (m *MockClient) ConnectedAt() time.Time

ConnectedAt mocks base method

func (*MockClient) Connection ¶

func (m *MockClient) Connection() net.Conn

Connection mocks base method

func (*MockClient) Disconnect ¶

func (m *MockClient) Disconnect(disconnect *packets.Disconnect)

Disconnect mocks base method

func (*MockClient) EXPECT ¶

func (m *MockClient) EXPECT() *MockClientMockRecorder

EXPECT returns an object that allows the caller to indicate expected use

func (*MockClient) SessionInfo ¶

func (m *MockClient) SessionInfo() *gmqtt.Session

SessionInfo mocks base method

func (*MockClient) Version ¶

func (m *MockClient) Version() packets.Version

Version mocks base method

type MockClientMockRecorder ¶

type MockClientMockRecorder struct {
	// contains filtered or unexported fields
}

MockClientMockRecorder is the mock recorder for MockClient

func (*MockClientMockRecorder) ClientOptions ¶

func (mr *MockClientMockRecorder) ClientOptions() *gomock.Call

ClientOptions indicates an expected call of ClientOptions

func (*MockClientMockRecorder) Close ¶

func (mr *MockClientMockRecorder) Close() *gomock.Call

Close indicates an expected call of Close

func (*MockClientMockRecorder) ConnectedAt ¶

func (mr *MockClientMockRecorder) ConnectedAt() *gomock.Call

ConnectedAt indicates an expected call of ConnectedAt

func (*MockClientMockRecorder) Connection ¶

func (mr *MockClientMockRecorder) Connection() *gomock.Call

Connection indicates an expected call of Connection

func (*MockClientMockRecorder) Disconnect ¶

func (mr *MockClientMockRecorder) Disconnect(disconnect interface{}) *gomock.Call

Disconnect indicates an expected call of Disconnect

func (*MockClientMockRecorder) SessionInfo ¶

func (mr *MockClientMockRecorder) SessionInfo() *gomock.Call

SessionInfo indicates an expected call of SessionInfo

func (*MockClientMockRecorder) Version ¶

func (mr *MockClientMockRecorder) Version() *gomock.Call

Version indicates an expected call of Version

type MockClientService ¶

type MockClientService struct {
	// contains filtered or unexported fields
}

MockClientService is a mock of ClientService interface

func NewMockClientService ¶

func NewMockClientService(ctrl *gomock.Controller) *MockClientService

NewMockClientService creates a new mock instance

func (*MockClientService) EXPECT ¶

EXPECT returns an object that allows the caller to indicate expected use

func (*MockClientService) GetClient ¶

func (m *MockClientService) GetClient(clientID string) Client

GetClient mocks base method

func (*MockClientService) GetSession ¶

func (m *MockClientService) GetSession(clientID string) (*gmqtt.Session, error)

GetSession mocks base method

func (*MockClientService) IterateClient ¶

func (m *MockClientService) IterateClient(fn ClientIterateFn)

IterateClient mocks base method

func (*MockClientService) IterateSession ¶

func (m *MockClientService) IterateSession(fn session.IterateFn) error

IterateSession mocks base method

func (*MockClientService) TerminateSession ¶

func (m *MockClientService) TerminateSession(clientID string)

TerminateSession mocks base method

type MockClientServiceMockRecorder ¶

type MockClientServiceMockRecorder struct {
	// contains filtered or unexported fields
}

MockClientServiceMockRecorder is the mock recorder for MockClientService

func (*MockClientServiceMockRecorder) GetClient ¶

func (mr *MockClientServiceMockRecorder) GetClient(clientID interface{}) *gomock.Call

GetClient indicates an expected call of GetClient

func (*MockClientServiceMockRecorder) GetSession ¶

func (mr *MockClientServiceMockRecorder) GetSession(clientID interface{}) *gomock.Call

GetSession indicates an expected call of GetSession

func (*MockClientServiceMockRecorder) IterateClient ¶

func (mr *MockClientServiceMockRecorder) IterateClient(fn interface{}) *gomock.Call

IterateClient indicates an expected call of IterateClient

func (*MockClientServiceMockRecorder) IterateSession ¶

func (mr *MockClientServiceMockRecorder) IterateSession(fn interface{}) *gomock.Call

IterateSession indicates an expected call of IterateSession

func (*MockClientServiceMockRecorder) TerminateSession ¶

func (mr *MockClientServiceMockRecorder) TerminateSession(clientID interface{}) *gomock.Call

TerminateSession indicates an expected call of TerminateSession

type MockPersistence ¶

type MockPersistence struct {
	// contains filtered or unexported fields
}

MockPersistence is a mock of Persistence interface

func NewMockPersistence ¶

func NewMockPersistence(ctrl *gomock.Controller) *MockPersistence

NewMockPersistence creates a new mock instance

func (*MockPersistence) Close ¶

func (m *MockPersistence) Close() error

Close mocks base method

func (*MockPersistence) EXPECT ¶

EXPECT returns an object that allows the caller to indicate expected use

func (*MockPersistence) NewQueueStore ¶

func (m *MockPersistence) NewQueueStore(config config.Config, defaultNotifier queue.Notifier, clientID string) (queue.Store, error)

NewQueueStore mocks base method

func (*MockPersistence) NewSessionStore ¶

func (m *MockPersistence) NewSessionStore(config config.Config) (session.Store, error)

NewSessionStore mocks base method

func (*MockPersistence) NewSubscriptionStore ¶

func (m *MockPersistence) NewSubscriptionStore(config config.Config) (subscription.Store, error)

NewSubscriptionStore mocks base method

func (*MockPersistence) NewUnackStore ¶

func (m *MockPersistence) NewUnackStore(config config.Config, clientID string) (unack.Store, error)

NewUnackStore mocks base method

func (*MockPersistence) Open ¶

func (m *MockPersistence) Open() error

Open mocks base method

type MockPersistenceMockRecorder ¶

type MockPersistenceMockRecorder struct {
	// contains filtered or unexported fields
}

MockPersistenceMockRecorder is the mock recorder for MockPersistence

func (*MockPersistenceMockRecorder) Close ¶

Close indicates an expected call of Close

func (*MockPersistenceMockRecorder) NewQueueStore ¶

func (mr *MockPersistenceMockRecorder) NewQueueStore(config, defaultNotifier, clientID interface{}) *gomock.Call

NewQueueStore indicates an expected call of NewQueueStore

func (*MockPersistenceMockRecorder) NewSessionStore ¶

func (mr *MockPersistenceMockRecorder) NewSessionStore(config interface{}) *gomock.Call

NewSessionStore indicates an expected call of NewSessionStore

func (*MockPersistenceMockRecorder) NewSubscriptionStore ¶

func (mr *MockPersistenceMockRecorder) NewSubscriptionStore(config interface{}) *gomock.Call

NewSubscriptionStore indicates an expected call of NewSubscriptionStore

func (*MockPersistenceMockRecorder) NewUnackStore ¶

func (mr *MockPersistenceMockRecorder) NewUnackStore(config, clientID interface{}) *gomock.Call

NewUnackStore indicates an expected call of NewUnackStore

func (*MockPersistenceMockRecorder) Open ¶

Open indicates an expected call of Open

type MockPlugin ¶ added in v0.2.2

type MockPlugin struct {
	// contains filtered or unexported fields
}

MockPlugin is a mock of Plugin interface

func NewMockPlugin ¶ added in v0.2.2

func NewMockPlugin(ctrl *gomock.Controller) *MockPlugin

NewMockPlugin creates a new mock instance

func (*MockPlugin) EXPECT ¶ added in v0.2.2

func (m *MockPlugin) EXPECT() *MockPluginMockRecorder

EXPECT returns an object that allows the caller to indicate expected use

func (*MockPlugin) HookWrapper ¶ added in v0.2.2

func (m *MockPlugin) HookWrapper() HookWrapper

HookWrapper mocks base method

func (*MockPlugin) Load ¶ added in v0.2.2

func (m *MockPlugin) Load(service Server) error

Load mocks base method

func (*MockPlugin) Name ¶ added in v0.2.2

func (m *MockPlugin) Name() string

Name mocks base method

func (*MockPlugin) Unload ¶ added in v0.2.2

func (m *MockPlugin) Unload() error

Unload mocks base method

type MockPluginMockRecorder ¶ added in v0.2.2

type MockPluginMockRecorder struct {
	// contains filtered or unexported fields
}

MockPluginMockRecorder is the mock recorder for MockPlugin

func (*MockPluginMockRecorder) HookWrapper ¶ added in v0.2.2

func (mr *MockPluginMockRecorder) HookWrapper() *gomock.Call

HookWrapper indicates an expected call of HookWrapper

func (*MockPluginMockRecorder) Load ¶ added in v0.2.2

func (mr *MockPluginMockRecorder) Load(service interface{}) *gomock.Call

Load indicates an expected call of Load

func (*MockPluginMockRecorder) Name ¶ added in v0.2.2

func (mr *MockPluginMockRecorder) Name() *gomock.Call

Name indicates an expected call of Name

func (*MockPluginMockRecorder) Unload ¶ added in v0.2.2

func (mr *MockPluginMockRecorder) Unload() *gomock.Call

Unload indicates an expected call of Unload

type MockPublisher ¶

type MockPublisher struct {
	// contains filtered or unexported fields
}

MockPublisher is a mock of Publisher interface

func NewMockPublisher ¶

func NewMockPublisher(ctrl *gomock.Controller) *MockPublisher

NewMockPublisher creates a new mock instance

func (*MockPublisher) EXPECT ¶

EXPECT returns an object that allows the caller to indicate expected use

func (*MockPublisher) Publish ¶

func (m *MockPublisher) Publish(message *gmqtt.Message)

Publish mocks base method

type MockPublisherMockRecorder ¶

type MockPublisherMockRecorder struct {
	// contains filtered or unexported fields
}

MockPublisherMockRecorder is the mock recorder for MockPublisher

func (*MockPublisherMockRecorder) Publish ¶

func (mr *MockPublisherMockRecorder) Publish(message interface{}) *gomock.Call

Publish indicates an expected call of Publish

type MockRetainedService ¶

type MockRetainedService struct {
	// contains filtered or unexported fields
}

MockRetainedService is a mock of RetainedService interface

func NewMockRetainedService ¶

func NewMockRetainedService(ctrl *gomock.Controller) *MockRetainedService

NewMockRetainedService creates a new mock instance

func (*MockRetainedService) AddOrReplace ¶

func (m *MockRetainedService) AddOrReplace(message *gmqtt.Message)

AddOrReplace mocks base method

func (*MockRetainedService) ClearAll ¶

func (m *MockRetainedService) ClearAll()

ClearAll mocks base method

func (*MockRetainedService) EXPECT ¶

EXPECT returns an object that allows the caller to indicate expected use

func (*MockRetainedService) GetMatchedMessages ¶

func (m *MockRetainedService) GetMatchedMessages(topicFilter string) []*gmqtt.Message

GetMatchedMessages mocks base method

func (*MockRetainedService) GetRetainedMessage ¶

func (m *MockRetainedService) GetRetainedMessage(topicName string) *gmqtt.Message

GetRetainedMessage mocks base method

func (*MockRetainedService) Iterate ¶

func (m *MockRetainedService) Iterate(fn retained.IterateFn)

Iterate mocks base method

func (*MockRetainedService) Remove ¶

func (m *MockRetainedService) Remove(topicName string)

Remove mocks base method

type MockRetainedServiceMockRecorder ¶

type MockRetainedServiceMockRecorder struct {
	// contains filtered or unexported fields
}

MockRetainedServiceMockRecorder is the mock recorder for MockRetainedService

func (*MockRetainedServiceMockRecorder) AddOrReplace ¶

func (mr *MockRetainedServiceMockRecorder) AddOrReplace(message interface{}) *gomock.Call

AddOrReplace indicates an expected call of AddOrReplace

func (*MockRetainedServiceMockRecorder) ClearAll ¶

ClearAll indicates an expected call of ClearAll

func (*MockRetainedServiceMockRecorder) GetMatchedMessages ¶

func (mr *MockRetainedServiceMockRecorder) GetMatchedMessages(topicFilter interface{}) *gomock.Call

GetMatchedMessages indicates an expected call of GetMatchedMessages

func (*MockRetainedServiceMockRecorder) GetRetainedMessage ¶

func (mr *MockRetainedServiceMockRecorder) GetRetainedMessage(topicName interface{}) *gomock.Call

GetRetainedMessage indicates an expected call of GetRetainedMessage

func (*MockRetainedServiceMockRecorder) Iterate ¶

func (mr *MockRetainedServiceMockRecorder) Iterate(fn interface{}) *gomock.Call

Iterate indicates an expected call of Iterate

func (*MockRetainedServiceMockRecorder) Remove ¶

func (mr *MockRetainedServiceMockRecorder) Remove(topicName interface{}) *gomock.Call

Remove indicates an expected call of Remove

type MockServer ¶

type MockServer struct {
	// contains filtered or unexported fields
}

MockServer is a mock of Server interface

func NewMockServer ¶

func NewMockServer(ctrl *gomock.Controller) *MockServer

NewMockServer creates a new mock instance

func (*MockServer) APIRegistrar ¶ added in v0.3.0

func (m *MockServer) APIRegistrar() APIRegistrar

APIRegistrar mocks base method

func (*MockServer) ApplyConfig ¶

func (m *MockServer) ApplyConfig(config config.Config)

ApplyConfig mocks base method

func (*MockServer) ClientService ¶

func (m *MockServer) ClientService() ClientService

ClientService mocks base method

func (*MockServer) EXPECT ¶

func (m *MockServer) EXPECT() *MockServerMockRecorder

EXPECT returns an object that allows the caller to indicate expected use

func (*MockServer) GetConfig ¶

func (m *MockServer) GetConfig() config.Config

GetConfig mocks base method

func (*MockServer) Plugins ¶ added in v0.2.2

func (m *MockServer) Plugins() []Plugin

Plugins mocks base method

func (*MockServer) Publisher ¶

func (m *MockServer) Publisher() Publisher

Publisher mocks base method

func (*MockServer) RetainedService ¶

func (m *MockServer) RetainedService() RetainedService

RetainedService mocks base method

func (*MockServer) StatsManager ¶

func (m *MockServer) StatsManager() StatsReader

StatsManager mocks base method

func (*MockServer) Stop ¶

func (m *MockServer) Stop(ctx context.Context) error

Stop mocks base method

func (*MockServer) SubscriptionService ¶

func (m *MockServer) SubscriptionService() SubscriptionService

SubscriptionService mocks base method

type MockServerMockRecorder ¶

type MockServerMockRecorder struct {
	// contains filtered or unexported fields
}

MockServerMockRecorder is the mock recorder for MockServer

func (*MockServerMockRecorder) APIRegistrar ¶ added in v0.3.0

func (mr *MockServerMockRecorder) APIRegistrar() *gomock.Call

APIRegistrar indicates an expected call of APIRegistrar

func (*MockServerMockRecorder) ApplyConfig ¶

func (mr *MockServerMockRecorder) ApplyConfig(config interface{}) *gomock.Call

ApplyConfig indicates an expected call of ApplyConfig

func (*MockServerMockRecorder) ClientService ¶

func (mr *MockServerMockRecorder) ClientService() *gomock.Call

ClientService indicates an expected call of ClientService

func (*MockServerMockRecorder) GetConfig ¶

func (mr *MockServerMockRecorder) GetConfig() *gomock.Call

GetConfig indicates an expected call of GetConfig

func (*MockServerMockRecorder) Plugins ¶ added in v0.2.2

func (mr *MockServerMockRecorder) Plugins() *gomock.Call

Plugins indicates an expected call of Plugins

func (*MockServerMockRecorder) Publisher ¶

func (mr *MockServerMockRecorder) Publisher() *gomock.Call

Publisher indicates an expected call of Publisher

func (*MockServerMockRecorder) RetainedService ¶

func (mr *MockServerMockRecorder) RetainedService() *gomock.Call

RetainedService indicates an expected call of RetainedService

func (*MockServerMockRecorder) StatsManager ¶

func (mr *MockServerMockRecorder) StatsManager() *gomock.Call

StatsManager indicates an expected call of StatsManager

func (*MockServerMockRecorder) Stop ¶

func (mr *MockServerMockRecorder) Stop(ctx interface{}) *gomock.Call

Stop indicates an expected call of Stop

func (*MockServerMockRecorder) SubscriptionService ¶

func (mr *MockServerMockRecorder) SubscriptionService() *gomock.Call

SubscriptionService indicates an expected call of SubscriptionService

type MockStatsReader ¶

type MockStatsReader struct {
	// contains filtered or unexported fields
}

MockStatsReader is a mock of StatsReader interface

func NewMockStatsReader ¶

func NewMockStatsReader(ctrl *gomock.Controller) *MockStatsReader

NewMockStatsReader creates a new mock instance

func (*MockStatsReader) EXPECT ¶

EXPECT returns an object that allows the caller to indicate expected use

func (*MockStatsReader) GetClientStats ¶

func (m *MockStatsReader) GetClientStats(clientID string) (ClientStats, bool)

GetClientStats mocks base method

func (*MockStatsReader) GetGlobalStats ¶

func (m *MockStatsReader) GetGlobalStats() GlobalStats

GetGlobalStats mocks base method

type MockStatsReaderMockRecorder ¶

type MockStatsReaderMockRecorder struct {
	// contains filtered or unexported fields
}

MockStatsReaderMockRecorder is the mock recorder for MockStatsReader

func (*MockStatsReaderMockRecorder) GetClientStats ¶

func (mr *MockStatsReaderMockRecorder) GetClientStats(clientID interface{}) *gomock.Call

GetClientStats indicates an expected call of GetClientStats

func (*MockStatsReaderMockRecorder) GetGlobalStats ¶

func (mr *MockStatsReaderMockRecorder) GetGlobalStats() *gomock.Call

GetGlobalStats indicates an expected call of GetGlobalStats

type MockSubscriptionService ¶

type MockSubscriptionService struct {
	// contains filtered or unexported fields
}

MockSubscriptionService is a mock of SubscriptionService interface

func NewMockSubscriptionService ¶

func NewMockSubscriptionService(ctrl *gomock.Controller) *MockSubscriptionService

NewMockSubscriptionService creates a new mock instance

func (*MockSubscriptionService) EXPECT ¶

EXPECT returns an object that allows the caller to indicate expected use

func (*MockSubscriptionService) GetClientStats ¶

func (m *MockSubscriptionService) GetClientStats(clientID string) (subscription.Stats, error)

GetClientStats mocks base method

func (*MockSubscriptionService) GetStats ¶

GetStats mocks base method

func (*MockSubscriptionService) Iterate ¶

Iterate mocks base method

func (*MockSubscriptionService) Subscribe ¶

func (m *MockSubscriptionService) Subscribe(clientID string, subscriptions ...*gmqtt.Subscription) (subscription.SubscribeResult, error)

Subscribe mocks base method

func (*MockSubscriptionService) Unsubscribe ¶

func (m *MockSubscriptionService) Unsubscribe(clientID string, topics ...string) error

Unsubscribe mocks base method

func (*MockSubscriptionService) UnsubscribeAll ¶

func (m *MockSubscriptionService) UnsubscribeAll(clientID string) error

UnsubscribeAll mocks base method

type MockSubscriptionServiceMockRecorder ¶

type MockSubscriptionServiceMockRecorder struct {
	// contains filtered or unexported fields
}

MockSubscriptionServiceMockRecorder is the mock recorder for MockSubscriptionService

func (*MockSubscriptionServiceMockRecorder) GetClientStats ¶

func (mr *MockSubscriptionServiceMockRecorder) GetClientStats(clientID interface{}) *gomock.Call

GetClientStats indicates an expected call of GetClientStats

func (*MockSubscriptionServiceMockRecorder) GetStats ¶

GetStats indicates an expected call of GetStats

func (*MockSubscriptionServiceMockRecorder) Iterate ¶

func (mr *MockSubscriptionServiceMockRecorder) Iterate(fn, options interface{}) *gomock.Call

Iterate indicates an expected call of Iterate

func (*MockSubscriptionServiceMockRecorder) Subscribe ¶

func (mr *MockSubscriptionServiceMockRecorder) Subscribe(clientID interface{}, subscriptions ...interface{}) *gomock.Call

Subscribe indicates an expected call of Subscribe

func (*MockSubscriptionServiceMockRecorder) Unsubscribe ¶

func (mr *MockSubscriptionServiceMockRecorder) Unsubscribe(clientID interface{}, topics ...interface{}) *gomock.Call

Unsubscribe indicates an expected call of Unsubscribe

func (*MockSubscriptionServiceMockRecorder) UnsubscribeAll ¶

func (mr *MockSubscriptionServiceMockRecorder) UnsubscribeAll(clientID interface{}) *gomock.Call

UnsubscribeAll indicates an expected call of UnsubscribeAll

type MockTopicAliasManager ¶

type MockTopicAliasManager struct {
	// contains filtered or unexported fields
}

MockTopicAliasManager is a mock of TopicAliasManager interface

func NewMockTopicAliasManager ¶

func NewMockTopicAliasManager(ctrl *gomock.Controller) *MockTopicAliasManager

NewMockTopicAliasManager creates a new mock instance

func (*MockTopicAliasManager) Check ¶

func (m *MockTopicAliasManager) Check(publish *packets.Publish) (uint16, bool)

Check mocks base method

func (*MockTopicAliasManager) EXPECT ¶

EXPECT returns an object that allows the caller to indicate expected use

type MockTopicAliasManagerMockRecorder ¶

type MockTopicAliasManagerMockRecorder struct {
	// contains filtered or unexported fields
}

MockTopicAliasManagerMockRecorder is the mock recorder for MockTopicAliasManager

func (*MockTopicAliasManagerMockRecorder) Check ¶

func (mr *MockTopicAliasManagerMockRecorder) Check(publish interface{}) *gomock.Call

Check indicates an expected call of Check

type MsgArrivedRequest ¶

type MsgArrivedRequest struct {
	// Publish is the origin MQTT PUBLISH packet, it is immutable. DO NOT EDIT.
	Publish *packets.Publish
	// Message is the message that is going to be passed to topic match process.
	// The caller can modify it.
	Message *gmqtt.Message
	// IterationOptions provides the the ability to change the options of topic matching process.
	// In most of cases, you don't need to modify it.
	// The default value is:
	// 	subscription.IterationOptions{
	//		Type:      subscription.TypeAll,
	//		MatchType: subscription.MatchFilter,
	//		TopicName: msg.Topic,
	//	}
	// The user of this field is the federation plugin.
	// It will change the Type from subscription.TypeAll to subscription.subscription.TypeAll ^ subscription.TypeShared
	// that will prevent publishing the shared message to local client.
	IterationOptions subscription.IterationOptions
}

MsgArrivedRequest is the input param for OnMsgArrived hook.

func (*MsgArrivedRequest) Drop ¶

func (m *MsgArrivedRequest) Drop()

Drop drops the message, so the message will not be delivered to any clients.

type NewPersistence ¶

type NewPersistence func(config config.Config) (Persistence, error)

type NewPlugin ¶

type NewPlugin func(config config.Config) (Plugin, error)

NewPlugin is the constructor of a plugin.

type NewTopicAliasManager ¶

type NewTopicAliasManager func(config config.Config, maxAlias uint16, clientID string) TopicAliasManager

type OnAccept ¶

type OnAccept func(ctx context.Context, conn net.Conn) bool

OnAccept will be called after a new connection established in TCP server. If returns false, the connection will be close directly.

type OnAcceptWrapper ¶

type OnAcceptWrapper func(OnAccept) OnAccept

type OnAuth ¶

type OnAuth func(ctx context.Context, client Client, req *AuthRequest) (*AuthResponse, error)

type OnAuthWrapper ¶

type OnAuthWrapper func(OnAuth) OnAuth

type OnBasicAuth ¶

type OnBasicAuth func(ctx context.Context, client Client, req *ConnectRequest) (err error)

OnBasicAuth will be called when receive v311 connect packet or v5 connect packet with empty auth method property.

type OnBasicAuthWrapper ¶

type OnBasicAuthWrapper func(OnBasicAuth) OnBasicAuth

type OnClosed ¶

type OnClosed func(ctx context.Context, client Client, err error)

OnClosed will be called after the tcp connection of the client has been closed

type OnClosedWrapper ¶

type OnClosedWrapper func(OnClosed) OnClosed

type OnConnected ¶

type OnConnected func(ctx context.Context, client Client)

OnConnected will be called when a mqtt client connect successfully.

type OnConnectedWrapper ¶

type OnConnectedWrapper func(OnConnected) OnConnected

type OnDelivered ¶

type OnDelivered func(ctx context.Context, client Client, msg *gmqtt.Message)

OnDelivered will be called when publishing a message to a client.

type OnDeliveredWrapper ¶

type OnDeliveredWrapper func(OnDelivered) OnDelivered

type OnEnhancedAuth ¶

type OnEnhancedAuth func(ctx context.Context, client Client, req *ConnectRequest) (resp *EnhancedAuthResponse, err error)

OnEnhancedAuth will be called when receive v5 connect packet with auth method property.

type OnEnhancedAuthWrapper ¶

type OnEnhancedAuthWrapper func(OnEnhancedAuth) OnEnhancedAuth

type OnMsgArrived ¶

type OnMsgArrived func(ctx context.Context, client Client, req *MsgArrivedRequest) error

OnMsgArrived will be called when receive a Publish packets.It provides the ability to modify the message before topic match process. The return error is for V5 client to provide additional information for diagnostics and will be ignored if the version of used client is V3. If the returned error type is *codes.Error, the code, reason string and user property will be set into the ack packet(puback for qos1, and pubrel for qos2); otherwise, the code,reason string will be set to 0x80 and error.Error().

type OnMsgArrivedWrapper ¶

type OnMsgArrivedWrapper func(OnMsgArrived) OnMsgArrived

type OnMsgDropped ¶

type OnMsgDropped func(ctx context.Context, clientID string, msg *gmqtt.Message, err error)

OnMsgDropped will be called after the Msg dropped. The err indicates the reason of dropping. See: persistence/queue/error.go

type OnMsgDroppedWrapper ¶

type OnMsgDroppedWrapper func(OnMsgDropped) OnMsgDropped

type OnReAuth ¶

type OnReAuth func(ctx context.Context, client Client, auth *packets.Auth) (*AuthResponse, error)

type OnReAuthWrapper ¶

type OnReAuthWrapper func(OnReAuth) OnReAuth

type OnSessionCreated ¶

type OnSessionCreated func(ctx context.Context, client Client)

OnSessionCreated will be called when new session created.

type OnSessionCreatedWrapper ¶

type OnSessionCreatedWrapper func(OnSessionCreated) OnSessionCreated

type OnSessionResumed ¶

type OnSessionResumed func(ctx context.Context, client Client)

OnSessionResumed will be called when session resumed.

type OnSessionResumedWrapper ¶

type OnSessionResumedWrapper func(OnSessionResumed) OnSessionResumed

type OnSessionTerminated ¶

type OnSessionTerminated func(ctx context.Context, clientID string, reason SessionTerminatedReason)

OnSessionTerminated will be called when session has been terminated.

type OnSessionTerminatedWrapper ¶

type OnSessionTerminatedWrapper func(OnSessionTerminated) OnSessionTerminated

type OnStop ¶

type OnStop func(ctx context.Context)

OnStop will be called on server.Stop()

type OnStopWrapper ¶

type OnStopWrapper func(OnStop) OnStop

type OnSubscribe ¶

type OnSubscribe func(ctx context.Context, client Client, req *SubscribeRequest) error

OnSubscribe will be called when receive a SUBSCRIBE packet. It provides the ability to modify and authorize the subscriptions. If return an error, the returned error will override the error set in SubscribeRequest.

type OnSubscribeWrapper ¶

type OnSubscribeWrapper func(OnSubscribe) OnSubscribe

type OnSubscribed ¶

type OnSubscribed func(ctx context.Context, client Client, subscription *gmqtt.Subscription)

OnSubscribed will be called after the topic subscribe successfully

type OnSubscribedWrapper ¶

type OnSubscribedWrapper func(OnSubscribed) OnSubscribed

type OnUnsubscribe ¶

type OnUnsubscribe func(ctx context.Context, client Client, req *UnsubscribeRequest) error

OnUnsubscribe will be called when receive a UNSUBSCRIBE packet. User can use this function to modify and authorize unsubscription. If return an error, the returned error will override the error set in UnsubscribeRequest.

type OnUnsubscribeWrapper ¶

type OnUnsubscribeWrapper func(OnUnsubscribe) OnUnsubscribe

type OnUnsubscribed ¶

type OnUnsubscribed func(ctx context.Context, client Client, topicName string)

OnUnsubscribed will be called after the topic has been unsubscribed

type OnUnsubscribedWrapper ¶

type OnUnsubscribedWrapper func(OnUnsubscribed) OnUnsubscribed

type OnWillPublish ¶ added in v0.3.0

type OnWillPublish func(ctx context.Context, clientID string, req *WillMsgRequest)

OnWillPublish will be called before the client with the given clientID sending the will message. It provides the ability to modify the message before sending.

type OnWillPublishWrapper ¶ added in v0.3.0

type OnWillPublishWrapper func(OnWillPublish) OnWillPublish

type OnWillPublished ¶ added in v0.3.0

type OnWillPublished func(ctx context.Context, clientID string, msg *gmqtt.Message)

OnWillPublished will be called after the will message has been sent by the client. The msg param is immutable, DO NOT EDIT.

type OnWillPublishedWrapper ¶ added in v0.3.0

type OnWillPublishedWrapper func(OnWillPublished) OnWillPublished

type Options ¶

type Options func(srv *server)

func WithConfig ¶

func WithConfig(config config.Config) Options

WithConfig set the config of the server

func WithHook ¶

func WithHook(hooks Hooks) Options

WithHook set hooks of the server. Notice: WithPlugin() will overwrite hooks.

func WithLogger ¶

func WithLogger(logger *zap.Logger) Options

func WithPlugin ¶

func WithPlugin(plugin ...Plugin) Options

WithPlugin set plugin(s) of the server.

func WithRetainedStore ¶ added in v0.5.0

func WithRetainedStore(store retained.Store) Options

WithRetainedStore set retained db of the server. Notice: WithRetainedStore(s) will overwrite retainedDB.

func WithTCPListener ¶

func WithTCPListener(lns ...net.Listener) Options

WithTCPListener set tcp listener(s) of the server. Default listen on :1883.

func WithWebsocketServer ¶

func WithWebsocketServer(ws ...*WsServer) Options

WithWebsocketServer set websocket server(s) of the server.

type PacketBytes ¶

type PacketBytes struct {
	Auth        uint64
	Connect     uint64
	Connack     uint64
	Disconnect  uint64
	Pingreq     uint64
	Pingresp    uint64
	Puback      uint64
	Pubcomp     uint64
	Publish     uint64
	Pubrec      uint64
	Pubrel      uint64
	Suback      uint64
	Subscribe   uint64
	Unsuback    uint64
	Unsubscribe uint64
	Total       uint64
}

PacketBytes represents total bytes of each in type have been received or sent.

type PacketCount ¶

type PacketCount = PacketBytes

PacketCount represents total number of each in type have been received or sent.

type PacketStats ¶

type PacketStats struct {
	BytesReceived PacketBytes
	ReceivedTotal PacketCount
	BytesSent     PacketBytes
	SentTotal     PacketCount
}

PacketStats represents the statistics of MQTT Packet.

type Persistence ¶

type Persistence interface {
	Open() error
	NewQueueStore(config config.Config, defaultNotifier queue.Notifier, clientID string) (queue.Store, error)
	NewSubscriptionStore(config config.Config) (subscription.Store, error)
	NewSessionStore(config config.Config) (session.Store, error)
	NewUnackStore(config config.Config, clientID string) (unack.Store, error)
	Close() error
}

type Plugin ¶ added in v0.2.2

type Plugin interface {
	// Load will be called in server.Run(). If return error, the server will panic.
	Load(service Server) error
	// Unload will be called when the server is shutdown, the return error is only for logging
	Unload() error
	// HookWrapper returns all hook wrappers that used by the plugin.
	// Return a empty wrapper  if the plugin does not need any hooks
	HookWrapper() HookWrapper
	// Name return the plugin name
	Name() string
}

Plugin is the interface need to be implemented for every plugins.

type Publisher ¶

type Publisher interface {
	// Publish Publish a message to broker.
	// Calling this method will not trigger OnMsgArrived hook.
	Publish(message *gmqtt.Message)
}

Publisher provides the ability to Publish messages to the broker.

type RetainedService ¶

type RetainedService interface {
	retained.Store
}

RetainedService providers the ability to query and add/delete retained messages.

type Server ¶

type Server interface {
	// Publisher returns the Publisher
	Publisher() Publisher
	// GetConfig returns the config of the server
	GetConfig() config.Config
	// StatsManager returns StatsReader
	StatsManager() StatsReader
	// Stop stop the server gracefully
	Stop(ctx context.Context) error
	// ApplyConfig will replace the config of the server
	ApplyConfig(config config.Config)

	ClientService() ClientService

	SubscriptionService() SubscriptionService

	RetainedService() RetainedService
	// Plugins returns all enabled plugins
	Plugins() []Plugin
	APIRegistrar() APIRegistrar
}

Server interface represents a mqtt server instance.

type SessionTerminatedReason ¶

type SessionTerminatedReason byte
const (
	NormalTermination SessionTerminatedReason = iota
	TakenOverTermination
	ExpiredTermination
)

type StatsReader ¶

type StatsReader interface {
	// GetGlobalStats returns the server statistics.
	GetGlobalStats() GlobalStats
	// GetClientStats returns the client statistics for the given client id
	GetClientStats(clientID string) (sts ClientStats, exist bool)
}

StatsReader interface provides the ability to access the statistics of the server

type SubscribeRequest ¶

type SubscribeRequest struct {
	// Subscribe is the SUBSCRIBE packet. It is immutable, do not edit.
	Subscribe *packets.Subscribe
	// Subscriptions wraps all subscriptions by the full topic name.
	// You can modify the value of the map to edit the subscription. But must not change the length of the map.
	Subscriptions map[string]*struct {
		// Sub is the subscription.
		Sub *gmqtt.Subscription
		// Error indicates whether to allow the subscription.
		// Return nil means it is allow to make the subscription.
		// Return an error means it is not allow to make the subscription.
		// It is recommended to use *codes.Error if you want to disallow the subscription. e.g:&codes.Error{Code:codes.NotAuthorized}
		// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901178
		Error error
	}
	// ID is the subscription id, this value will override the id of subscriptions in Subscriptions.Sub.
	// This field take no effect on v3 client.
	ID uint32
}

SubscribeRequest represents the subscribe request made by a SUBSCRIBE packet.

func (*SubscribeRequest) GrantQoS ¶

func (s *SubscribeRequest) GrantQoS(topicName string, qos packets.QoS) *SubscribeRequest

GrantQoS grants the qos to the subscription for the given topic name.

func (*SubscribeRequest) Reject ¶

func (s *SubscribeRequest) Reject(topicName string, err error)

Reject rejects the subscription for the given topic name.

func (*SubscribeRequest) SetID ¶

SetID sets the subscription id for the subscriptions

type SubscriptionService ¶

type SubscriptionService interface {
	// Subscribe adds subscriptions to a specific client.
	// Notice:
	// This method will succeed even if the client is not exists, the subscriptions
	// will affect the new client with the client id.
	Subscribe(clientID string, subscriptions ...*gmqtt.Subscription) (rs subscription.SubscribeResult, err error)
	// Unsubscribe removes subscriptions of a specific client.
	Unsubscribe(clientID string, topics ...string) error
	// UnsubscribeAll removes all subscriptions of a specific client.
	UnsubscribeAll(clientID string) error
	// Iterate iterates all subscriptions. The callback is called once for each subscription.
	// If callback return false, the iteration will be stopped.
	// Notice:
	// The results are not sorted in any way, no ordering of any kind is guaranteed.
	// This method will walk through all subscriptions,
	// so it is a very expensive operation. Do not call it frequently.
	Iterate(fn subscription.IterateFn, options subscription.IterationOptions)
	subscription.StatsReader
}

SubscriptionService providers the ability to query and add/delete subscriptions.

type TopicAliasManager ¶

type TopicAliasManager interface {
	// Check return the alias number and whether the alias exist.
	// For examples:
	// If the Publish alias exist and the manager decides to use the alias, it return the alias number and true.
	// If the Publish alias exist, but the manager decides not to use alias, it return 0 and true.
	// If the Publish alias not exist and the manager decides to assign a new alias, it return the new alias and false.
	// If the Publish alias not exist, but the manager decides not to assign alias, it return the 0 and false.
	Check(publish *packets.Publish) (alias uint16, exist bool)
}

TopicAliasManager manage the topic alias for a V5 client. see topicalias/fifo for more details.

type UnsubscribeRequest ¶

type UnsubscribeRequest struct {
	// Unsubscribe is the UNSUBSCRIBE packet. It is immutable, do not edit.
	Unsubscribe *packets.Unsubscribe
	// Unsubs groups all unsubscribe topic by the full topic name.
	// You can modify the value of the map to edit the unsubscribe topic. But you cannot change the length of the map.
	Unsubs map[string]*struct {
		// TopicName is the topic that is going to unsubscribe.
		TopicName string
		// Error indicates whether to allow the unsubscription.
		// Return nil means it is allow to unsubscribe the topic.
		// Return an error means it is not allow to unsubscribe the topic.
		// It is recommended to use *codes.Error if you want to disallow the unsubscription. e.g:&codes.Error{Code:codes.NotAuthorized}
		// See: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901194
		Error error
	}
}

UnsubscribeRequest is the input param for OnSubscribed hook.

func (*UnsubscribeRequest) Reject ¶

func (u *UnsubscribeRequest) Reject(topicName string, err error)

Reject rejects the subscription for the given topic name.

type WillMsgRequest ¶ added in v0.3.0

type WillMsgRequest struct {
	// Message is the message that is going to send.
	// The caller can edit this field to modify the will message.
	// If nil, the broker will drop the message.
	Message *gmqtt.Message
	// IterationOptions is the same as MsgArrivedRequest.IterationOptions,
	// see MsgArrivedRequest for details
	IterationOptions subscription.IterationOptions
}

WillMsgRequest is the input param for OnWillPublish hook.

func (*WillMsgRequest) Drop ¶ added in v0.3.0

func (w *WillMsgRequest) Drop()

Drop drops the will message, so the message will not be delivered to any clients.

type WsServer ¶

type WsServer struct {
	Server   *http.Server
	Path     string // Url path
	CertFile string //TLS configration
	KeyFile  string //TLS configration
}

WsServer is used to build websocket server

Jump to

Keyboard shortcuts

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