// handlePacket handles the Packet. func (cli *Client) handlePacket(p packet.Packet) error { // Get the MQTT Control Packet type. ptype, err := p.Type() if err != nil { return err } switch ptype { case packet.TypeCONNACK: cli.handleCONNACK() return nil case packet.TypePUBLISH: return cli.handlePUBLISH(p) case packet.TypePUBACK: return cli.handlePUBACK(p) case packet.TypePUBREC: return cli.handlePUBREC(p) case packet.TypePUBREL: return cli.handlePUBREL(p) case packet.TypePUBCOMP: return cli.handlePUBCOMP(p) case packet.TypeSUBACK: return cli.handleSUBACK(p) case packet.TypeUNSUBACK: return cli.handleUNSUBACK(p) case packet.TypePINGRESP: return cli.handlePINGRESP() default: return packet.ErrInvalidPacketType } }
// send sends an MQTT Control Packet to the Server. func (cli *Client) send(p packet.Packet) error { // Return an error if the Client has not yet connected to the Server. if cli.conn == nil { return ErrNotYetConnected } // Write the Packet to the buffered writer. if _, err := p.WriteTo(cli.conn.w); err != nil { return err } // Flush the buffered writer. return cli.conn.w.Flush() }