func (this *DasProtocol) ReadPacket(goconn *gotcp.Conn) (gotcp.Packet, error) { conn := goconn.GetRawConn() for { data := make([]byte, 1024) readLengh, err := conn.Read(data) if err != nil { // EOF, or worse return nil, err } if readLengh == 0 { // Connection maybe cloased by the client return nil, gotcp.ErrConnClosing } else { goconn.GetRecvBytes().Write(data[:readLengh]) fmt.Println(goconn.GetRecvBytes().Bytes()) if goconn.GetRecvBytes().Bytes()[0] == 0xBA || goconn.GetRecvBytes().Bytes()[0] == 0xBB || goconn.GetRecvBytes().Bytes()[0] == 0xBC { if goconn.GetRecvBytes().Len() >= 8 { cmdtype, _ := goconn.GetRecvBytes().ReadByte() if cmdtype == 0xBA { result := goconn.GetRecvBytes().Next(6) // cmdtype + result + serialid goconn.GetRecvBytes().Next(1) return NewDasPacket(0xBA, result), nil } else if cmdtype == 0xBB { mac := goconn.GetRecvBytes().Next(6) goconn.GetRecvBytes().Next(1) return NewDasPacket(0xBB, mac), nil } else if cmdtype == 0xBC { mac := goconn.GetRecvBytes().Next(6) goconn.GetRecvBytes().Next(1) return NewDasPacket(0xBC, mac), nil } } else { return nil, gotcp.ErrReadHalf } } else { goconn.GetRecvBytes().Reset() return nil, gotcp.ErrReadHalf } } } }