This commit is contained in:
zhouyuyan
2017-08-22 16:45:01 +08:00
parent 25a9a759f7
commit b4ec8ea870
40 changed files with 5864 additions and 13 deletions

View File

@@ -2,6 +2,7 @@ package broker
import (
"errors"
"fhmq/lib/message"
"io"
"net"
@@ -13,6 +14,7 @@ func checkError(desc string, err error) {
log.Error(desc, " : ", err)
}
}
func ReadPacket(conn net.Conn) ([]byte, error) {
if conn == nil {
return nil, errors.New("conn is null")
@@ -58,3 +60,177 @@ func decodeLength(r io.Reader) ([]byte, int) {
}
return buf, int(rLength)
}
func DecodeMessage(buf []byte) (message.Message, error) {
msgType := uint8(buf[0] & 0xF0 >> 4)
switch msgType {
case CONNECT:
return DecodeConnectMessage(buf)
case CONNACK:
return DecodeConnackMessage(buf)
case PUBLISH:
return DecodePublishMessage(buf)
case PUBACK:
return DecodePubackMessage(buf)
case PUBCOMP:
return DecodePubcompMessage(buf)
case PUBREC:
return DecodePubrecMessage(buf)
case PUBREL:
return DecodePubrelMessage(buf)
case SUBSCRIBE:
return DecodeSubscribeMessage(buf)
case SUBACK:
return DecodeSubackMessage(buf)
case UNSUBSCRIBE:
return DecodeUnsubscribeMessage(buf)
case UNSUBACK:
return DecodeUnsubackMessage(buf)
case PINGREQ:
return DecodePingreqMessage(buf)
case PINGRESP:
return DecodePingrespMessage(buf)
case DISCONNECT:
return DecodeDisconnectMessage(buf)
default:
return nil, errors.New("error message type")
}
}
func DecodeConnectMessage(buf []byte) (*message.ConnectMessage, error) {
connMsg := message.NewConnectMessage()
_, err := connMsg.Decode(buf)
if err != nil {
if !message.ValidConnackError(err) {
return nil, errors.New("Connect message format error, " + err.Error())
}
return nil, errors.New("Deode connect message error, " + err.Error())
}
return connMsg, nil
}
func DecodeConnackMessage(buf []byte) (*message.ConnackMessage, error) {
msg := message.NewConnackMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Connack message error, " + err.Error())
}
return msg, nil
}
func DecodePublishMessage(buf []byte) (*message.PublishMessage, error) {
msg := message.NewPublishMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Publish message error, " + err.Error())
}
return msg, nil
}
func DecodePubackMessage(buf []byte) (*message.PubackMessage, error) {
msg := message.NewPubackMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Puback message error, " + err.Error())
}
return msg, nil
}
func DecodePubrecMessage(buf []byte) (*message.PubrecMessage, error) {
msg := message.NewPubrecMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Pubrec message error, " + err.Error())
}
return msg, nil
}
func DecodePubrelMessage(buf []byte) (*message.PubrelMessage, error) {
msg := message.NewPubrelMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Pubrel message error, " + err.Error())
}
return msg, nil
}
func DecodePubcompMessage(buf []byte) (*message.PubcompMessage, error) {
msg := message.NewPubcompMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Pubcomp message error, " + err.Error())
}
return msg, nil
}
func DecodeSubscribeMessage(buf []byte) (*message.SubscribeMessage, error) {
msg := message.NewSubscribeMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Subscribe message error, " + err.Error())
}
return msg, nil
}
func DecodeSubackMessage(buf []byte) (*message.SubackMessage, error) {
msg := message.NewSubackMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Suback message error, " + err.Error())
}
return msg, nil
}
func DecodeUnsubscribeMessage(buf []byte) (*message.UnsubscribeMessage, error) {
msg := message.NewUnsubscribeMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Unsubscribe message error, " + err.Error())
}
return msg, nil
}
func DecodeUnsubackMessage(buf []byte) (*message.UnsubackMessage, error) {
msg := message.NewUnsubackMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Unsuback message error, " + err.Error())
}
return msg, nil
}
func DecodePingreqMessage(buf []byte) (*message.PingreqMessage, error) {
msg := message.NewPingreqMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Pingreq message error, " + err.Error())
}
return msg, nil
}
func DecodePingrespMessage(buf []byte) (*message.PingrespMessage, error) {
msg := message.NewPingrespMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Pingresp message error, " + err.Error())
}
return msg, nil
}
func DecodeDisconnectMessage(buf []byte) (*message.DisconnectMessage, error) {
msg := message.NewDisconnectMessage()
_, err := msg.Decode(buf)
if err != nil {
return nil, errors.New("Decode Disconnect message error, " + err.Error())
}
return msg, nil
}
func EncodeMessage(msg message.Message) ([]byte, error) {
buf := make([]byte, msg.Len())
_, err := msg.Encode(buf)
if err != nil {
return nil, err
}
return buf, nil
}