|
@@ -5,8 +5,7 @@ import (
|
|
|
"dlt645-server/errors"
|
|
|
"encoding/binary"
|
|
|
"encoding/json"
|
|
|
- "fmt"
|
|
|
- log "github.com/sirupsen/logrus"
|
|
|
+ "github.com/gogf/gf/os/glog"
|
|
|
"reflect"
|
|
|
"strconv"
|
|
|
)
|
|
@@ -51,7 +50,7 @@ func (message *Message) Decode(data []byte) error {
|
|
|
if data[0] != ReceiveByte && data[0] != RegisterByte {
|
|
|
return errors.ErrInvalidMessage
|
|
|
}
|
|
|
- if !message.checkSum(data){
|
|
|
+ if !message.checkSum(data) {
|
|
|
return errors.ErrInvalidCheckSum
|
|
|
}
|
|
|
var header Header
|
|
@@ -60,39 +59,40 @@ func (message *Message) Decode(data []byte) error {
|
|
|
if data[0] == RegisterByte {
|
|
|
|
|
|
header := Header{}
|
|
|
- _ = json.Unmarshal(data, &header)
|
|
|
+ _ = json.Unmarshal(data, &header)
|
|
|
|
|
|
//fmt.Println(header.Imei)
|
|
|
//fmt.Println()
|
|
|
|
|
|
header.IccID, err = strconv.ParseUint(header.Imei, 10, 64)
|
|
|
header.MsgID = 0x0040 //消息ID
|
|
|
- if err == nil {
|
|
|
- message.Body = nil
|
|
|
- } else {
|
|
|
- log.WithFields(log.Fields{
|
|
|
- "id": fmt.Sprintf("0x%x", header.MsgID),
|
|
|
- "reason": err,
|
|
|
- }).Warn("failed to decode message")
|
|
|
+ if err != nil {
|
|
|
+ if err != nil {
|
|
|
+ glog.Errorf("解析报文失败:%s", err.Error())
|
|
|
+ }
|
|
|
}
|
|
|
+ message.Body = nil
|
|
|
message.Header = header
|
|
|
return nil
|
|
|
- } else if len(data) < 8 {
|
|
|
- log.WithFields(log.Fields{
|
|
|
- "data": fmt.Sprintf("V:%v", data),
|
|
|
- "reason": "error datalen",
|
|
|
- }).Warn("failed to decode message")
|
|
|
+ }
|
|
|
+ if len(data) < 8 {
|
|
|
+ if err != nil {
|
|
|
+ glog.Errorf("解析报文失败:%s", errors.ErrInvalidBody)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if data[7] == 0x93 {
|
|
|
+ entity, _, err := message.decode(uint32(0x93), data[:])
|
|
|
+ if err != nil {
|
|
|
+ glog.Errorf("解析报文失败:%s", err.Error())
|
|
|
+ }
|
|
|
+ message.Body = entity
|
|
|
} else {
|
|
|
header.MsgID = MsgID(binary.BigEndian.Uint32(data[10:15])) //消息ID
|
|
|
entity, _, err := message.decode(uint32(header.MsgID), data[:]) //解析实体对象 entity buffer : 为消息标识
|
|
|
- if err == nil {
|
|
|
- message.Body = entity
|
|
|
- } else {
|
|
|
- log.WithFields(log.Fields{
|
|
|
- "id": fmt.Sprintf("0x%x", header.MsgID),
|
|
|
- "reason": err,
|
|
|
- }).Warn("failed to decode message")
|
|
|
+ if err != nil {
|
|
|
+ glog.Errorf("解析报文失败:%s", err.Error())
|
|
|
}
|
|
|
+ message.Body = entity
|
|
|
}
|
|
|
|
|
|
message.Header = header
|
|
@@ -108,11 +108,11 @@ func (message *Message) decode(dataType uint32, data []byte) (Entity, int, error
|
|
|
|
|
|
entity := creator()
|
|
|
|
|
|
- count, err := entity.Decode(data) //解析data数据
|
|
|
- if err != nil {
|
|
|
- return nil, 0, err
|
|
|
- }
|
|
|
- return entity, count, nil
|
|
|
+ count, err := entity.Decode(data) //解析data数据
|
|
|
+ if err != nil {
|
|
|
+ return nil, 0, err
|
|
|
+ }
|
|
|
+ return entity, count, nil
|
|
|
}
|
|
|
|
|
|
// 写入二进制数据
|
|
@@ -135,7 +135,7 @@ func (message *Message) write(buffer *bytes.Buffer, data []byte) *Message {
|
|
|
func (message *Message) checkSum(data []byte) bool {
|
|
|
var checkSum byte
|
|
|
for _, b := range data[:len(data)-2] {
|
|
|
- checkSum +=b
|
|
|
+ checkSum += b
|
|
|
}
|
|
|
checkSum = checkSum & 0xFF
|
|
|
|