|
- package packet
-
- import (
- "errors"
- "io"
- )
-
- // Error value
- var ErrInvalidPacketType = errors.New("invalid MQTT Control Packet type")
-
- // Packet represents an MQTT Control Packet.
- type Packet interface {
- io.WriterTo
- // Type returns the MQTT Control Packet type of the Packet.
- Type() (byte, error)
- }
-
- // NewFromBytes creates a Packet from the byte data and returns it.
- func NewFromBytes(fixedHeader FixedHeader, remaining []byte) (Packet, error) {
- // Extract the MQTT Control Packet type from the fixed header.
- ptype, err := fixedHeader.ptype()
- if err != nil {
- return nil, err
- }
-
- // Create and return a Packet.
- switch ptype {
- case TypeCONNACK:
- return NewCONNACKFromBytes(fixedHeader, remaining)
- case TypePUBLISH:
- return NewPUBLISHFromBytes(fixedHeader, remaining)
- case TypePUBACK:
- return NewPUBACKFromBytes(fixedHeader, remaining)
- case TypePUBREC:
- return NewPUBRECFromBytes(fixedHeader, remaining)
- case TypePUBREL:
- return NewPUBRELFromBytes(fixedHeader, remaining)
- case TypePUBCOMP:
- return NewPUBCOMPFromBytes(fixedHeader, remaining)
- case TypeSUBACK:
- return NewSUBACKFromBytes(fixedHeader, remaining)
- case TypeUNSUBACK:
- return NewUNSUBACKFromBytes(fixedHeader, remaining)
- case TypePINGRESP:
- return NewPINGRESPFromBytes(fixedHeader, remaining)
- default:
- return nil, ErrInvalidPacketType
- }
- }
|