package pack
|
|
import (
|
"encoding/binary"
|
"fmt"
|
"io"
|
)
|
|
type Package struct {
|
Version [2]int8
|
Datalen int64
|
Data []byte
|
}
|
|
func (p *Package) String() string {
|
return fmt.Sprintf("Version:%d DataLen:%d Data:%s", p.Version, p.Datalen, p.Data)
|
}
|
|
func (p *Package) Pack(w io.Writer) {
|
binary.Write(w, binary.BigEndian, p.Version)
|
binary.Write(w, binary.BigEndian, p.Datalen)
|
binary.Write(w, binary.BigEndian, p.Data)
|
}
|
|
func (p *Package) Unpack(r io.Reader) {
|
binary.Read(r, binary.BigEndian, &p.Version)
|
binary.Read(r, binary.BigEndian, &p.Datalen)
|
if p.Datalen > 0 {
|
p.Data = make([]byte, p.Datalen)
|
}
|
binary.Read(r, binary.BigEndian, &p.Data)
|
}
|
|
func BuildMsg(data []byte) Package {
|
var pkg Package
|
pkg.Version[0] = 'V'
|
pkg.Version[1] = 1
|
pkg.Data = data
|
pkg.Datalen = int64(len(pkg.Data))
|
return pkg
|
}
|