feat: added benchmarks
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package arpackmsg
|
||||
|
||||
type Vector3 struct {
|
||||
X float32 `pack:"min=-500,max=500,bits=16"`
|
||||
Y float32 `pack:"min=-500,max=500,bits=16"`
|
||||
Z float32 `pack:"min=-500,max=500,bits=16"`
|
||||
}
|
||||
|
||||
type Opcode uint16
|
||||
|
||||
const (
|
||||
OpcodeUnknown Opcode = iota
|
||||
OpcodeAuthorize
|
||||
OpcodeJoinRoom
|
||||
)
|
||||
|
||||
type MoveMessage struct {
|
||||
Position Vector3
|
||||
Velocity [3]float32
|
||||
Waypoints []Vector3
|
||||
PlayerID uint32
|
||||
Active bool
|
||||
Visible bool
|
||||
Ghost bool
|
||||
Name string
|
||||
}
|
||||
|
||||
type SpawnMessage struct {
|
||||
EntityID uint64
|
||||
Position Vector3
|
||||
Health int16
|
||||
Tags []string
|
||||
Data []uint8
|
||||
}
|
||||
|
||||
type EnvelopeMessage struct {
|
||||
Code Opcode
|
||||
Counter uint8
|
||||
}
|
||||
@@ -0,0 +1,221 @@
|
||||
// Code generated by arpack. DO NOT EDIT.
|
||||
|
||||
package arpackmsg
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"math"
|
||||
)
|
||||
|
||||
func (m *Vector3) Marshal(buf []byte) []byte {
|
||||
_qm_X := uint16((m.X - (-500)) / (500 - (-500)) * 65535)
|
||||
buf = binary.LittleEndian.AppendUint16(buf, _qm_X)
|
||||
_qm_Y := uint16((m.Y - (-500)) / (500 - (-500)) * 65535)
|
||||
buf = binary.LittleEndian.AppendUint16(buf, _qm_Y)
|
||||
_qm_Z := uint16((m.Z - (-500)) / (500 - (-500)) * 65535)
|
||||
buf = binary.LittleEndian.AppendUint16(buf, _qm_Z)
|
||||
return buf
|
||||
}
|
||||
|
||||
func (m *Vector3) Unmarshal(data []byte) (int, error) {
|
||||
if len(data) < 6 {
|
||||
return 0, errors.New("arpack: buffer too short for Vector3")
|
||||
}
|
||||
offset := 0
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_qm_X := binary.LittleEndian.Uint16(data[offset:])
|
||||
offset += 2
|
||||
m.X = float32(_qm_X)/65535*(500-(-500)) + (-500)
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_qm_Y := binary.LittleEndian.Uint16(data[offset:])
|
||||
offset += 2
|
||||
m.Y = float32(_qm_Y)/65535*(500-(-500)) + (-500)
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_qm_Z := binary.LittleEndian.Uint16(data[offset:])
|
||||
offset += 2
|
||||
m.Z = float32(_qm_Z)/65535*(500-(-500)) + (-500)
|
||||
return offset, nil
|
||||
}
|
||||
|
||||
func (m *MoveMessage) Marshal(buf []byte) []byte {
|
||||
buf = m.Position.Marshal(buf)
|
||||
for _iVelocity := 0; _iVelocity < 3; _iVelocity++ {
|
||||
buf = binary.LittleEndian.AppendUint32(buf, math.Float32bits(m.Velocity[_iVelocity]))
|
||||
}
|
||||
buf = binary.LittleEndian.AppendUint16(buf, uint16(len(m.Waypoints)))
|
||||
for _iWaypoints := range m.Waypoints {
|
||||
buf = m.Waypoints[_iWaypoints].Marshal(buf)
|
||||
}
|
||||
buf = binary.LittleEndian.AppendUint32(buf, m.PlayerID)
|
||||
var _boolByte4 uint8
|
||||
if m.Active {
|
||||
_boolByte4 |= 1 << 0
|
||||
}
|
||||
if m.Visible {
|
||||
_boolByte4 |= 1 << 1
|
||||
}
|
||||
if m.Ghost {
|
||||
_boolByte4 |= 1 << 2
|
||||
}
|
||||
buf = append(buf, _boolByte4)
|
||||
buf = binary.LittleEndian.AppendUint16(buf, uint16(len(m.Name)))
|
||||
buf = append(buf, m.Name...)
|
||||
return buf
|
||||
}
|
||||
|
||||
func (m *MoveMessage) Unmarshal(data []byte) (int, error) {
|
||||
if len(data) < 23 {
|
||||
return 0, errors.New("arpack: buffer too short for MoveMessage")
|
||||
}
|
||||
offset := 0
|
||||
_nPosition, _err := m.Position.Unmarshal(data[offset:])
|
||||
if _err != nil {
|
||||
return 0, _err
|
||||
}
|
||||
offset += _nPosition
|
||||
for _iVelocity := 0; _iVelocity < 3; _iVelocity++ {
|
||||
if len(data) < offset+4 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.Velocity[_iVelocity] = math.Float32frombits(binary.LittleEndian.Uint32(data[offset:]))
|
||||
offset += 4
|
||||
}
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_lenWaypoints := int(binary.LittleEndian.Uint16(data[offset:]))
|
||||
offset += 2
|
||||
m.Waypoints = make([]Vector3, _lenWaypoints)
|
||||
for _iWaypoints := 0; _iWaypoints < _lenWaypoints; _iWaypoints++ {
|
||||
_nWaypoints__iWaypoints_, _err := m.Waypoints[_iWaypoints].Unmarshal(data[offset:])
|
||||
if _err != nil {
|
||||
return 0, _err
|
||||
}
|
||||
offset += _nWaypoints__iWaypoints_
|
||||
}
|
||||
if len(data) < offset+4 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.PlayerID = binary.LittleEndian.Uint32(data[offset:])
|
||||
offset += 4
|
||||
if len(data) < offset+1 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_boolByte4 := data[offset]
|
||||
offset++
|
||||
m.Active = _boolByte4&(1<<0) != 0
|
||||
m.Visible = _boolByte4&(1<<1) != 0
|
||||
m.Ghost = _boolByte4&(1<<2) != 0
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_slenm_Name := int(binary.LittleEndian.Uint16(data[offset:]))
|
||||
offset += 2
|
||||
if len(data) < offset+_slenm_Name {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.Name = string(data[offset : offset+_slenm_Name])
|
||||
offset += _slenm_Name
|
||||
return offset, nil
|
||||
}
|
||||
|
||||
func (m *SpawnMessage) Marshal(buf []byte) []byte {
|
||||
buf = binary.LittleEndian.AppendUint64(buf, m.EntityID)
|
||||
buf = m.Position.Marshal(buf)
|
||||
buf = binary.LittleEndian.AppendUint16(buf, uint16(m.Health))
|
||||
buf = binary.LittleEndian.AppendUint16(buf, uint16(len(m.Tags)))
|
||||
for _iTags := range m.Tags {
|
||||
buf = binary.LittleEndian.AppendUint16(buf, uint16(len(m.Tags[_iTags])))
|
||||
buf = append(buf, m.Tags[_iTags]...)
|
||||
}
|
||||
buf = binary.LittleEndian.AppendUint16(buf, uint16(len(m.Data)))
|
||||
for _iData := range m.Data {
|
||||
buf = append(buf, m.Data[_iData])
|
||||
}
|
||||
return buf
|
||||
}
|
||||
|
||||
func (m *SpawnMessage) Unmarshal(data []byte) (int, error) {
|
||||
if len(data) < 16 {
|
||||
return 0, errors.New("arpack: buffer too short for SpawnMessage")
|
||||
}
|
||||
offset := 0
|
||||
if len(data) < offset+8 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.EntityID = binary.LittleEndian.Uint64(data[offset:])
|
||||
offset += 8
|
||||
_nPosition, _err := m.Position.Unmarshal(data[offset:])
|
||||
if _err != nil {
|
||||
return 0, _err
|
||||
}
|
||||
offset += _nPosition
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.Health = int16(binary.LittleEndian.Uint16(data[offset:]))
|
||||
offset += 2
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_lenTags := int(binary.LittleEndian.Uint16(data[offset:]))
|
||||
offset += 2
|
||||
m.Tags = make([]string, _lenTags)
|
||||
for _iTags := 0; _iTags < _lenTags; _iTags++ {
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_slenm_Tags__iTags_ := int(binary.LittleEndian.Uint16(data[offset:]))
|
||||
offset += 2
|
||||
if len(data) < offset+_slenm_Tags__iTags_ {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.Tags[_iTags] = string(data[offset : offset+_slenm_Tags__iTags_])
|
||||
offset += _slenm_Tags__iTags_
|
||||
}
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
_lenData := int(binary.LittleEndian.Uint16(data[offset:]))
|
||||
offset += 2
|
||||
m.Data = make([]uint8, _lenData)
|
||||
for _iData := 0; _iData < _lenData; _iData++ {
|
||||
if len(data) < offset+1 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.Data[_iData] = data[offset]
|
||||
offset += 1
|
||||
}
|
||||
return offset, nil
|
||||
}
|
||||
|
||||
func (m *EnvelopeMessage) Marshal(buf []byte) []byte {
|
||||
buf = binary.LittleEndian.AppendUint16(buf, uint16(m.Code))
|
||||
buf = append(buf, m.Counter)
|
||||
return buf
|
||||
}
|
||||
|
||||
func (m *EnvelopeMessage) Unmarshal(data []byte) (int, error) {
|
||||
if len(data) < 3 {
|
||||
return 0, errors.New("arpack: buffer too short for EnvelopeMessage")
|
||||
}
|
||||
offset := 0
|
||||
if len(data) < offset+2 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.Code = Opcode(binary.LittleEndian.Uint16(data[offset:]))
|
||||
offset += 2
|
||||
if len(data) < offset+1 {
|
||||
return 0, errors.New("arpack: buffer too short")
|
||||
}
|
||||
m.Counter = data[offset]
|
||||
offset += 1
|
||||
return offset, nil
|
||||
}
|
||||
Reference in New Issue
Block a user