test[go]: golang protocol test

This commit is contained in:
godotg committed 2024-07-16 15:01:27 +08:00
1 parent 955408052d
commit 3e3c398ed5
7 files changed
+214 -197

No files matched your search

+2 -2
View File
@@ -133,11 +133,11 @@ func packetTest() {
buffer.WriteUBytes(bytes)
var packet = zfoogo.Read(buffer)
fmt.Println(packet)
fmt.Println("source size ", buffer.WriteOffset())
fmt.Println("source size ", buffer.GetWriteOffset())
buffer.Clear()
zfoogo.Write(buffer, packet)
var newPacket = zfoogo.Read(buffer)
fmt.Println("target size ", buffer.WriteOffset())
fmt.Println("target size ", buffer.GetWriteOffset())
fmt.Println(newPacket)
}
+44 -40
View File
@@ -13,14 +13,14 @@ const maxSize int = 655537
var initArray []byte = make([]byte, initSize, initSize)
type ByteBuffer struct {
buffer []byte
writeIndex int
readIndex int
buffer []byte
writeOffset int
readOffset int
}
func (byteBuffer *ByteBuffer) AdjustPadding(predictionLength int, beforeWriteIndex int) {
// 因为写入的是可变长的int,如果预留的位置过多,则清除多余的位置
var currentWriteIndex = byteBuffer.WriteOffset()
var currentWriteIndex = byteBuffer.GetWriteOffset()
var predictionCount = byteBuffer.WriteIntCount(int32(predictionLength))
var length = currentWriteIndex - beforeWriteIndex - predictionCount
var lengthCount = byteBuffer.WriteIntCount(int32(length))
@@ -38,44 +38,48 @@ func (byteBuffer *ByteBuffer) AdjustPadding(predictionLength int, beforeWriteInd
}
func (byteBuffer *ByteBuffer) CompatibleRead(beforeReadIndex int, length int) bool {
return length != -1 && byteBuffer.readIndex < length+beforeReadIndex
return length != -1 && byteBuffer.readOffset < length+beforeReadIndex
}
// -------------------------------------------------get/set-------------------------------------------------
func (byteBuffer *ByteBuffer) WriteOffset() int {
return byteBuffer.writeIndex
func (byteBuffer *ByteBuffer) GetBuffer() []byte {
return byteBuffer.buffer
}
func (byteBuffer *ByteBuffer) GetWriteOffset() int {
return byteBuffer.writeOffset
}
func (byteBuffer *ByteBuffer) SetWriteOffset(writeIndex int) {
if writeIndex > len(byteBuffer.buffer) {
var error = fmt.Sprintf("writeIndex:[{%d}] out of bounds exception: readerIndex:[{%d}] , writerIndex:[{%d}] (expected: 0 <= readerIndex <= writerIndex <= capacity:[{%d}])", writeIndex, byteBuffer.readIndex, byteBuffer.writeIndex, len(byteBuffer.buffer))
var error = fmt.Sprintf("writeIndex:[{%d}] out of bounds exception: readOffset:[{%d}] , writeOffset:[{%d}] (expected: 0 <= readOffset <= writeOffset <= capacity:[{%d}])", writeIndex, byteBuffer.readOffset, byteBuffer.writeOffset, len(byteBuffer.buffer))
panic(error)
}
byteBuffer.writeIndex = writeIndex
byteBuffer.writeOffset = writeIndex
}
func (byteBuffer *ByteBuffer) ReadOffset() int {
return byteBuffer.readIndex
func (byteBuffer *ByteBuffer) GetReadOffset() int {
return byteBuffer.readOffset
}
func (byteBuffer *ByteBuffer) SetReadOffset(readIndex int) {
if readIndex > byteBuffer.writeIndex {
var error = fmt.Sprintf("readIndex:[{%d}] out of bounds exception: readerIndex:[{%d}] , writerIndex:[{%d}] (expected: 0 <= readerIndex <= writerIndex <= capacity:[{%d}])", readIndex, byteBuffer.readIndex, byteBuffer.writeIndex, len(byteBuffer.buffer))
if readIndex > byteBuffer.writeOffset {
var error = fmt.Sprintf("readIndex:[{%d}] out of bounds exception: readOffset:[{%d}] , writeOffset:[{%d}] (expected: 0 <= readOffset <= writeOffset <= capacity:[{%d}])", readIndex, byteBuffer.readOffset, byteBuffer.writeOffset, len(byteBuffer.buffer))
panic(error)
}
byteBuffer.readIndex = readIndex
byteBuffer.readOffset = readIndex
}
func (byteBuffer *ByteBuffer) ToBytes() []byte {
return byteBuffer.buffer[0:byteBuffer.writeIndex]
return byteBuffer.buffer[0:byteBuffer.writeOffset]
}
func (byteBuffer *ByteBuffer) ToString() string {
return fmt.Sprintf("writeIndex:[{%d}], readIndex:[{%d}], len:[{%d}], cap:[{%d}]", byteBuffer.writeIndex, byteBuffer.readIndex, len(byteBuffer.buffer), cap(byteBuffer.buffer))
return fmt.Sprintf("writeOffset:[{%d}], readOffset:[{%d}], len:[{%d}], cap:[{%d}]", byteBuffer.writeOffset, byteBuffer.readOffset, len(byteBuffer.buffer), cap(byteBuffer.buffer))
}
func (byteBuffer *ByteBuffer) GetCapacity() int {
return len(byteBuffer.buffer) - byteBuffer.writeIndex
return len(byteBuffer.buffer) - byteBuffer.writeOffset
}
func (byteBuffer *ByteBuffer) EnsureCapacity(capacity int) {
@@ -93,12 +97,12 @@ func (byteBuffer *ByteBuffer) EnsureCapacity(capacity int) {
}
func (byteBuffer *ByteBuffer) Clear() {
byteBuffer.writeIndex = 0
byteBuffer.readIndex = 0
byteBuffer.writeOffset = 0
byteBuffer.readOffset = 0
}
func (byteBuffer *ByteBuffer) IsReadable() bool {
return byteBuffer.writeIndex > byteBuffer.readIndex
return byteBuffer.writeOffset > byteBuffer.readOffset
}
// -------------------------------------------------write/read-------------------------------------------------
@@ -122,55 +126,55 @@ func BytesToInt(b []byte) int {
func (byteBuffer *ByteBuffer) WriteBool(value bool) {
byteBuffer.EnsureCapacity(1)
if value {
byteBuffer.buffer[byteBuffer.writeIndex] = 1
byteBuffer.buffer[byteBuffer.writeOffset] = 1
} else {
byteBuffer.buffer[byteBuffer.writeIndex] = 0
byteBuffer.buffer[byteBuffer.writeOffset] = 0
}
byteBuffer.writeIndex++
byteBuffer.writeOffset++
}
func (byteBuffer *ByteBuffer) ReadBool() bool {
var byteValue = byteBuffer.buffer[byteBuffer.readIndex]
byteBuffer.readIndex++
var byteValue = byteBuffer.buffer[byteBuffer.readOffset]
byteBuffer.readOffset++
return byteValue == 1
}
func (byteBuffer *ByteBuffer) WriteByte(value int8) {
byteBuffer.EnsureCapacity(1)
byteBuffer.buffer[byteBuffer.writeIndex] = byte(value)
byteBuffer.writeIndex++
byteBuffer.buffer[byteBuffer.writeOffset] = byte(value)
byteBuffer.writeOffset++
}
func (byteBuffer *ByteBuffer) ReadByte() int8 {
var byteValue = byteBuffer.buffer[byteBuffer.readIndex]
byteBuffer.readIndex++
var byteValue = byteBuffer.buffer[byteBuffer.readOffset]
byteBuffer.readOffset++
return int8(byteValue)
}
func (byteBuffer *ByteBuffer) WriteUByte(value byte) {
byteBuffer.EnsureCapacity(1)
byteBuffer.buffer[byteBuffer.writeIndex] = value
byteBuffer.writeIndex++
byteBuffer.buffer[byteBuffer.writeOffset] = value
byteBuffer.writeOffset++
}
func (byteBuffer *ByteBuffer) ReadUByte() byte {
var byteValue = byteBuffer.buffer[byteBuffer.readIndex]
byteBuffer.readIndex++
var byteValue = byteBuffer.buffer[byteBuffer.readOffset]
byteBuffer.readOffset++
return byteValue
}
func (byteBuffer *ByteBuffer) WriteUBytes(bytes []byte) {
var length = len(bytes)
byteBuffer.EnsureCapacity(length)
copy(byteBuffer.buffer[byteBuffer.writeIndex:], bytes)
byteBuffer.writeIndex += length
copy(byteBuffer.buffer[byteBuffer.writeOffset:], bytes)
byteBuffer.writeOffset += length
}
func (byteBuffer *ByteBuffer) ReadUBytes(length int) []byte {
var readOffset = byteBuffer.readIndex
var endOffset = byteBuffer.readIndex + length
var readOffset = byteBuffer.readOffset
var endOffset = byteBuffer.readOffset + length
var bytes = byteBuffer.buffer[readOffset:endOffset]
byteBuffer.readIndex += length
byteBuffer.readOffset += length
return bytes
}
@@ -514,7 +518,7 @@ func Read(buffer *ByteBuffer) any {
}
// -------------------------------------------------CutDown-------------------------------------------------
func (byteBuffer *ByteBuffer) WriteBooleanArray(array []bool) {
func (byteBuffer *ByteBuffer) WriteBoolArray(array []bool) {
if array == nil {
byteBuffer.WriteInt(0)
} else {
@@ -525,7 +529,7 @@ func (byteBuffer *ByteBuffer) WriteBooleanArray(array []bool) {
}
}
func (byteBuffer *ByteBuffer) ReadBooleanArray() []bool {
func (byteBuffer *ByteBuffer) ReadBoolArray() []bool {
var size = byteBuffer.ReadInt()
var array = make([]bool, size)
if size > 0 {
@@ -0,0 +1,31 @@
package zfoogo
type EmptyObject struct {
}
func (protocol EmptyObject) ProtocolId() int16 {
return 0
}
func (protocol EmptyObject) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
buffer.WriteInt(-1)
}
func (protocol EmptyObject) read(buffer *ByteBuffer) any {
var packet = new(EmptyObject)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.GetReadOffset()
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
@@ -1,14 +1,11 @@
package zfoogo
type EmptyObject struct {
}
// 常规的对象,取所有语言语法的交集,基本上所有语言都支持下面的语法
type NormalObject struct {
A int8
Aaa []int8
B int16
// 整数类型
C int
D int64
E float32
@@ -28,47 +25,6 @@ type NormalObject struct {
OutCompatibleValue2 int
}
type ObjectA struct {
A int
M map[int]string
ObjectB ObjectB
InnerCompatibleValue int
}
type ObjectB struct {
Flag bool
InnerCompatibleValue int
}
type SimpleObject struct {
C int
G bool
}
func (protocol EmptyObject) ProtocolId() int16 {
return 0
}
func (protocol EmptyObject) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
buffer.WriteInt(-1)
}
func (protocol EmptyObject) read(buffer *ByteBuffer) any {
var packet = new(EmptyObject)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.ReadOffset()
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
func (protocol NormalObject) ProtocolId() int16 {
return 101
}
@@ -79,7 +35,7 @@ func (protocol NormalObject) write(buffer *ByteBuffer, packet any) {
return
}
var message = packet.(*NormalObject)
var beforeWriteIndex = buffer.WriteOffset()
var beforeWriteIndex = buffer.GetWriteOffset()
buffer.WriteInt(857)
buffer.WriteByte(message.A)
buffer.WriteByteArray(message.Aaa)
@@ -127,7 +83,7 @@ func (protocol NormalObject) read(buffer *ByteBuffer) any {
if length == 0 {
return packet
}
var beforeReadIndex = buffer.ReadOffset()
var beforeReadIndex = buffer.GetReadOffset()
var result0 = buffer.ReadByte()
packet.A = result0
var array1 = buffer.ReadByteArray()
@@ -191,111 +147,4 @@ func (protocol NormalObject) read(buffer *ByteBuffer) any {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
func (protocol ObjectA) ProtocolId() int16 {
return 102
}
func (protocol ObjectA) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
var message = packet.(*ObjectA)
var beforeWriteIndex = buffer.WriteOffset()
buffer.WriteInt(201)
buffer.WriteInt(message.A)
buffer.WriteIntStringMap(message.M)
buffer.WritePacket(&message.ObjectB, 103)
buffer.WriteInt(message.InnerCompatibleValue)
buffer.AdjustPadding(201, beforeWriteIndex)
}
func (protocol ObjectA) read(buffer *ByteBuffer) any {
var packet = new(ObjectA)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.ReadOffset()
var result0 = buffer.ReadInt()
packet.A = result0
var map1 = buffer.ReadIntStringMap()
packet.M = map1
var result2 = *buffer.ReadPacket(103).(*ObjectB)
packet.ObjectB = result2
if buffer.CompatibleRead(beforeReadIndex, length) {
var result3 = buffer.ReadInt()
packet.InnerCompatibleValue = result3
}
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
func (protocol ObjectB) ProtocolId() int16 {
return 103
}
func (protocol ObjectB) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
var message = packet.(*ObjectB)
var beforeWriteIndex = buffer.WriteOffset()
buffer.WriteInt(4)
buffer.WriteBool(message.Flag)
buffer.WriteInt(message.InnerCompatibleValue)
buffer.AdjustPadding(4, beforeWriteIndex)
}
func (protocol ObjectB) read(buffer *ByteBuffer) any {
var packet = new(ObjectB)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.ReadOffset()
var result0 = buffer.ReadBool()
packet.Flag = result0
if buffer.CompatibleRead(beforeReadIndex, length) {
var result1 = buffer.ReadInt()
packet.InnerCompatibleValue = result1
}
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
func (protocol SimpleObject) ProtocolId() int16 {
return 104
}
func (protocol SimpleObject) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
var message = packet.(*SimpleObject)
buffer.WriteInt(-1)
buffer.WriteInt(message.C)
buffer.WriteBool(message.G)
}
func (protocol SimpleObject) read(buffer *ByteBuffer) any {
var packet = new(SimpleObject)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.ReadOffset()
var result0 = buffer.ReadInt()
packet.C = result0
var result1 = buffer.ReadBool()
packet.G = result1
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
@@ -0,0 +1,51 @@
package zfoogo
type ObjectA struct {
A int
M map[int]string
ObjectB ObjectB
InnerCompatibleValue int
}
func (protocol ObjectA) ProtocolId() int16 {
return 102
}
func (protocol ObjectA) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
var message = packet.(*ObjectA)
var beforeWriteIndex = buffer.GetWriteOffset()
buffer.WriteInt(201)
buffer.WriteInt(message.A)
buffer.WriteIntStringMap(message.M)
buffer.WritePacket(&message.ObjectB, 103)
buffer.WriteInt(message.InnerCompatibleValue)
buffer.AdjustPadding(201, beforeWriteIndex)
}
func (protocol ObjectA) read(buffer *ByteBuffer) any {
var packet = new(ObjectA)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.GetReadOffset()
var result0 = buffer.ReadInt()
packet.A = result0
var map1 = buffer.ReadIntStringMap()
packet.M = map1
var result2 = *buffer.ReadPacket(103).(*ObjectB)
packet.ObjectB = result2
if buffer.CompatibleRead(beforeReadIndex, length) {
var result3 = buffer.ReadInt()
packet.InnerCompatibleValue = result3
}
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
@@ -0,0 +1,43 @@
package zfoogo
type ObjectB struct {
Flag bool
InnerCompatibleValue int
}
func (protocol ObjectB) ProtocolId() int16 {
return 103
}
func (protocol ObjectB) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
var message = packet.(*ObjectB)
var beforeWriteIndex = buffer.GetWriteOffset()
buffer.WriteInt(4)
buffer.WriteBool(message.Flag)
buffer.WriteInt(message.InnerCompatibleValue)
buffer.AdjustPadding(4, beforeWriteIndex)
}
func (protocol ObjectB) read(buffer *ByteBuffer) any {
var packet = new(ObjectB)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.GetReadOffset()
var result0 = buffer.ReadBool()
packet.Flag = result0
if buffer.CompatibleRead(beforeReadIndex, length) {
var result1 = buffer.ReadInt()
packet.InnerCompatibleValue = result1
}
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}
@@ -0,0 +1,39 @@
package zfoogo
type SimpleObject struct {
C int
G bool
}
func (protocol SimpleObject) ProtocolId() int16 {
return 104
}
func (protocol SimpleObject) write(buffer *ByteBuffer, packet any) {
if packet == nil {
buffer.WriteInt(0)
return
}
var message = packet.(*SimpleObject)
buffer.WriteInt(-1)
buffer.WriteInt(message.C)
buffer.WriteBool(message.G)
}
func (protocol SimpleObject) read(buffer *ByteBuffer) any {
var packet = new(SimpleObject)
var length = buffer.ReadInt()
if length == 0 {
return packet
}
var beforeReadIndex = buffer.GetReadOffset()
var result0 = buffer.ReadInt()
packet.C = result0
var result1 = buffer.ReadBool()
packet.G = result1
if length > 0 {
buffer.SetReadOffset(beforeReadIndex + length)
}
return packet
}