79 lines
3.4 KiB
Go
79 lines
3.4 KiB
Go
|
package events
|
||
|
|
||
|
import (
|
||
|
"github.com/mochi-co/mqtt/server/internal/packets"
|
||
|
)
|
||
|
|
||
|
// Events provides callback handlers for different event hooks.
|
||
|
type Events struct {
|
||
|
OnProcessMessage // published message receieved before evaluation.
|
||
|
OnMessage // published message receieved.
|
||
|
OnError // server error.
|
||
|
OnConnect // client connected.
|
||
|
OnDisconnect // client disconnected.
|
||
|
OnSubscribe // topic subscription created.
|
||
|
OnUnsubscribe // topic subscription removed.
|
||
|
}
|
||
|
|
||
|
// Packets is an alias for packets.Packet.
|
||
|
type Packet packets.Packet
|
||
|
|
||
|
// Client contains limited information about a connected client.
|
||
|
type Client struct {
|
||
|
ID string
|
||
|
Remote string
|
||
|
Listener string
|
||
|
Username []byte
|
||
|
CleanSession bool
|
||
|
}
|
||
|
|
||
|
// Clientlike is an interface for Clients and client-like objects that
|
||
|
// are able to describe their client/listener IDs and remote address.
|
||
|
type Clientlike interface {
|
||
|
Info() Client
|
||
|
}
|
||
|
|
||
|
// OnProcessMessage is called when a publish message is received, allowing modification
|
||
|
// of the packet data after ACL checking has occurred but before any data is evaluated
|
||
|
// for processing - e.g. for changing the Retain flag. Note, this hook is ONLY called
|
||
|
// by connected client publishers, it is not triggered when using the direct
|
||
|
// s.Publish method. The function receives the sent message and the
|
||
|
// data of the client who published it, and allows the packet to be modified
|
||
|
// before it is dispatched to subscribers. If no modification is required, return
|
||
|
// the original packet data. If an error occurs, the original packet will
|
||
|
// be dispatched as if the event hook had not been triggered.
|
||
|
// This function will block message dispatching until it returns. To minimise this,
|
||
|
// have the function open a new goroutine on the embedding side.
|
||
|
// The `mqtt.ErrRejectPacket` error can be returned to reject and abandon any further
|
||
|
// processing of the packet.
|
||
|
type OnProcessMessage func(Client, Packet) (Packet, error)
|
||
|
|
||
|
// OnMessage function is called when a publish message is received. Note,
|
||
|
// this hook is ONLY called by connected client publishers, it is not triggered when
|
||
|
// using the direct s.Publish method. The function receives the sent message and the
|
||
|
// data of the client who published it, and allows the packet to be modified
|
||
|
// before it is dispatched to subscribers. If no modification is required, return
|
||
|
// the original packet data. If an error occurs, the original packet will
|
||
|
// be dispatched as if the event hook had not been triggered.
|
||
|
// This function will block message dispatching until it returns. To minimise this,
|
||
|
// have the function open a new goroutine on the embedding side.
|
||
|
type OnMessage func(Client, Packet) (Packet, error)
|
||
|
|
||
|
// OnConnect is called when a client successfully connects to the broker.
|
||
|
type OnConnect func(Client, Packet)
|
||
|
|
||
|
// OnDisconnect is called when a client disconnects to the broker. An error value
|
||
|
// is passed to the function if the client disconnected abnormally, otherwise it
|
||
|
// will be nil on a normal disconnect.
|
||
|
type OnDisconnect func(Client, error)
|
||
|
|
||
|
// OnError is called when errors that will not be passed to
|
||
|
// OnDisconnect are handled by the server.
|
||
|
type OnError func(Client, error)
|
||
|
|
||
|
// OnSubscribe is called when a new subscription filter for a client is created.
|
||
|
type OnSubscribe func(filter string, cl Client, qos byte)
|
||
|
|
||
|
// OnUnsubscribe is called when an existing subscription filter for a client is removed.
|
||
|
type OnUnsubscribe func(filter string, cl Client)
|