diff --git a/net/src/test/go/goProtocol/ByteBuffer.go b/net/src/test/go/goProtocol/ByteBuffer.go index 64258db9..f84f93bd 100644 --- a/net/src/test/go/goProtocol/ByteBuffer.go +++ b/net/src/test/go/goProtocol/ByteBuffer.go @@ -163,15 +163,20 @@ func (byteBuffer *ByteBuffer) ReadShort() int16 { return value } -func (byteBuffer *ByteBuffer) WriteRawInt32(intValue int32) { - byteBuffer.WriteUByte(byte(intValue >> 24)) - byteBuffer.WriteUByte(byte(intValue >> 16)) - byteBuffer.WriteUByte(byte(intValue >> 8)) - byteBuffer.WriteUByte(byte(intValue)) +func (byteBuffer *ByteBuffer) WriteRawInt32(value int32) { + byteBuffer.EnsureCapacity(4) + var bytesBuffer = bytes.NewBuffer([]byte{}) + binary.Write(bytesBuffer, binary.BigEndian, value) + var byteArray = bytesBuffer.Bytes() + byteBuffer.WriteUBytes(byteArray) } func (byteBuffer *ByteBuffer) ReadRawInt32() int32 { - return int32(uint32(byteBuffer.ReadUByte())<<24 | uint32(byteBuffer.ReadUByte())<<16 | uint32(byteBuffer.ReadUByte())<<8 | uint32(byteBuffer.ReadUByte())) + var byteArray = byteBuffer.ReadUBytes(4) + bytesBuffer := bytes.NewBuffer(byteArray) + var value int32 + binary.Read(bytesBuffer, binary.BigEndian, &value) + return value } func (byteBuffer *ByteBuffer) WriteInt(intValue int) { @@ -444,7 +449,7 @@ func (byteBuffer *ByteBuffer) ReadPacket(protocolId int16) any { // -------------------------------------------------IProtocolRegistration------------------------------------------------- type IProtocolRegistration interface { - protocolId() int16 + ProtocolId() int16 write(buffer *ByteBuffer, packet any) @@ -459,7 +464,7 @@ func GetProtocol(protocolId int16) IProtocolRegistration { } func Write(buffer *ByteBuffer, packet any) { - var protocolId = packet.(IProtocolRegistration).protocolId() + var protocolId = packet.(IProtocolRegistration).ProtocolId() buffer.WriteShort(protocolId) var protocolRegistration = GetProtocol(protocolId) protocolRegistration.write(buffer, packet) diff --git a/net/src/test/go/goProtocol/common.go b/net/src/test/go/goProtocol/common.go index 70187324..947df5a5 100644 --- a/net/src/test/go/goProtocol/common.go +++ b/net/src/test/go/goProtocol/common.go @@ -6,7 +6,7 @@ type Message struct { Module int8 } -func (protocol Message) protocolId() int16 { +func (protocol Message) ProtocolId() int16 { return 100 } @@ -41,7 +41,7 @@ type Error struct { Module int } -func (protocol Error) protocolId() int16 { +func (protocol Error) ProtocolId() int16 { return 101 } @@ -74,7 +74,7 @@ type Heartbeat struct { } -func (protocol Heartbeat) protocolId() int16 { +func (protocol Heartbeat) ProtocolId() int16 { return 102 } @@ -97,7 +97,7 @@ type Ping struct { } -func (protocol Ping) protocolId() int16 { +func (protocol Ping) ProtocolId() int16 { return 103 } @@ -120,7 +120,7 @@ type Pong struct { Time int64 } -func (protocol Pong) protocolId() int16 { +func (protocol Pong) ProtocolId() int16 { return 104 } @@ -148,7 +148,7 @@ type PairLong struct { Value int64 } -func (protocol PairLong) protocolId() int16 { +func (protocol PairLong) ProtocolId() int16 { return 111 } @@ -179,7 +179,7 @@ type PairString struct { Value string } -func (protocol PairString) protocolId() int16 { +func (protocol PairString) ProtocolId() int16 { return 112 } @@ -210,7 +210,7 @@ type PairLS struct { Value string } -func (protocol PairLS) protocolId() int16 { +func (protocol PairLS) ProtocolId() int16 { return 113 } @@ -242,7 +242,7 @@ type TripleLong struct { Right int64 } -func (protocol TripleLong) protocolId() int16 { +func (protocol TripleLong) ProtocolId() int16 { return 114 } @@ -277,7 +277,7 @@ type TripleString struct { Right string } -func (protocol TripleString) protocolId() int16 { +func (protocol TripleString) ProtocolId() int16 { return 115 } @@ -312,7 +312,7 @@ type TripleLSS struct { Right string } -func (protocol TripleLSS) protocolId() int16 { +func (protocol TripleLSS) ProtocolId() int16 { return 116 } diff --git a/net/src/test/go/goProtocol/gateway.go b/net/src/test/go/goProtocol/gateway.go index 58fe5e46..eb139ac8 100644 --- a/net/src/test/go/goProtocol/gateway.go +++ b/net/src/test/go/goProtocol/gateway.go @@ -4,7 +4,7 @@ type GatewayToProviderRequest struct { Message string } -func (protocol GatewayToProviderRequest) protocolId() int16 { +func (protocol GatewayToProviderRequest) ProtocolId() int16 { return 5000 } @@ -31,7 +31,7 @@ type GatewayToProviderResponse struct { Message string } -func (protocol GatewayToProviderResponse) protocolId() int16 { +func (protocol GatewayToProviderResponse) ProtocolId() int16 { return 5001 } diff --git a/net/src/test/go/goProtocol/jprotobuf.go b/net/src/test/go/goProtocol/jprotobuf.go index 6db57cf3..7c5383f3 100644 --- a/net/src/test/go/goProtocol/jprotobuf.go +++ b/net/src/test/go/goProtocol/jprotobuf.go @@ -4,7 +4,7 @@ type JProtobufHelloRequest struct { Message string } -func (protocol JProtobufHelloRequest) protocolId() int16 { +func (protocol JProtobufHelloRequest) ProtocolId() int16 { return 1500 } @@ -31,7 +31,7 @@ type JProtobufHelloResponse struct { Message string } -func (protocol JProtobufHelloResponse) protocolId() int16 { +func (protocol JProtobufHelloResponse) ProtocolId() int16 { return 1501 } diff --git a/net/src/test/go/goProtocol/json.go b/net/src/test/go/goProtocol/json.go index dec0807d..ad1190da 100644 --- a/net/src/test/go/goProtocol/json.go +++ b/net/src/test/go/goProtocol/json.go @@ -4,7 +4,7 @@ type JsonHelloRequest struct { Message string } -func (protocol JsonHelloRequest) protocolId() int16 { +func (protocol JsonHelloRequest) ProtocolId() int16 { return 1600 } @@ -31,7 +31,7 @@ type JsonHelloResponse struct { Message string } -func (protocol JsonHelloResponse) protocolId() int16 { +func (protocol JsonHelloResponse) ProtocolId() int16 { return 1601 } diff --git a/net/src/test/go/goProtocol/tcp.go b/net/src/test/go/goProtocol/tcp.go index ef76365e..eb33b6ff 100644 --- a/net/src/test/go/goProtocol/tcp.go +++ b/net/src/test/go/goProtocol/tcp.go @@ -4,7 +4,7 @@ type TcpHelloRequest struct { Message string } -func (protocol TcpHelloRequest) protocolId() int16 { +func (protocol TcpHelloRequest) ProtocolId() int16 { return 1300 } @@ -31,7 +31,7 @@ type TcpHelloResponse struct { Message string } -func (protocol TcpHelloResponse) protocolId() int16 { +func (protocol TcpHelloResponse) ProtocolId() int16 { return 1301 } diff --git a/net/src/test/go/goProtocol/udp.go b/net/src/test/go/goProtocol/udp.go index bc206b36..b3931688 100644 --- a/net/src/test/go/goProtocol/udp.go +++ b/net/src/test/go/goProtocol/udp.go @@ -4,7 +4,7 @@ type UdpHelloRequest struct { Message string } -func (protocol UdpHelloRequest) protocolId() int16 { +func (protocol UdpHelloRequest) ProtocolId() int16 { return 1200 } @@ -31,7 +31,7 @@ type UdpHelloResponse struct { Message string } -func (protocol UdpHelloResponse) protocolId() int16 { +func (protocol UdpHelloResponse) ProtocolId() int16 { return 1201 } diff --git a/net/src/test/go/znet/codec.go b/net/src/test/go/znet/codec.go index d15b3c79..d81261d9 100644 --- a/net/src/test/go/znet/codec.go +++ b/net/src/test/go/znet/codec.go @@ -13,53 +13,25 @@ package znet import ( - "bytes" - "encoding/binary" + protocol "gonet/goProtocol" ) // Encode from Packet to []byte -func Encode(msg *Packet) ([]byte, error) { - buffer := new(bytes.Buffer) - - err := binary.Write(buffer, binary.LittleEndian, msg.length) - if err != nil { - return nil, err - } - err = binary.Write(buffer, binary.LittleEndian, msg.protocolId) - if err != nil { - return nil, err - } - err = binary.Write(buffer, binary.LittleEndian, msg.data) - if err != nil { - return nil, err - } - return buffer.Bytes(), nil +func Encode(packet any) *protocol.ByteBuffer { + var buffer = new(protocol.ByteBuffer) + buffer.WriteRawInt32(0) + protocol.Write(buffer, packet) + var writeOffset = buffer.WriteOffset() + buffer.SetWriteOffset(0) + buffer.WriteRawInt32(int32(writeOffset - 4)) + buffer.SetWriteOffset(writeOffset) + return buffer } // Decode from []byte to Packet -func Decode(data []byte) (*Packet, error) { - bufReader := bytes.NewReader(data) - - dataSize := len(data) - // 读取消息ID - var protocolId int16 - err := binary.Read(bufReader, binary.LittleEndian, &protocolId) - if err != nil { - return nil, err - } - - // 读取数据 - dataBufLength := dataSize - 2 - 4 - dataBuf := make([]byte, dataBufLength) - err = binary.Read(bufReader, binary.LittleEndian, &dataBuf) - if err != nil { - return nil, err - } - - message := &Packet{} - message.length = int32(dataSize) - message.protocolId = protocolId - message.data = dataBuf - - return message, nil +func Decode(data []byte) any { + var buffer = new(protocol.ByteBuffer) + buffer.WriteUBytes(data) + var packet = protocol.Read(buffer) + return packet } diff --git a/net/src/test/go/znet/conn.go b/net/src/test/go/znet/conn.go index 2a809275..e00726b4 100644 --- a/net/src/test/go/znet/conn.go +++ b/net/src/test/go/znet/conn.go @@ -26,10 +26,10 @@ type Conn struct { sid string rawConn net.Conn sendCh chan []byte + messageCh chan any done chan error hbTimer *time.Timer name string - messageCh chan *Packet hbInterval time.Duration hbTimeout time.Duration } @@ -45,7 +45,7 @@ func NewConn(c net.Conn, hbInterval time.Duration, hbTimeout time.Duration) *Con rawConn: c, sendCh: make(chan []byte, 100), done: make(chan error), - messageCh: make(chan *Packet, 100), + messageCh: make(chan any, 100), hbInterval: hbInterval, hbTimeout: hbTimeout, } @@ -68,12 +68,8 @@ func (c *Conn) Close() { // SendMessage send message func (c *Conn) SendMessage(msg *Packet) error { - pkg, err := Encode(msg) - if err != nil { - return err - } - - c.sendCh <- pkg + var buffer = Encode(msg) + c.sendCh <- buffer.ToBytes() return nil } @@ -135,32 +131,23 @@ func (c *Conn) readCoroutine(ctx context.Context) { bufReader := bytes.NewReader(buf) var dataSize int32 - err = binary.Read(bufReader, binary.LittleEndian, &dataSize) + err = binary.Read(bufReader, binary.BigEndian, &dataSize) if err != nil { c.done <- err continue } // 读取数据 - databuf := make([]byte, dataSize) - _, err = io.ReadFull(c.rawConn, databuf) + var bytes = make([]byte, dataSize) + _, err = io.ReadFull(c.rawConn, bytes) if err != nil { c.done <- err continue } // 解码 - msg, err := Decode(databuf) - if err != nil { - c.done <- err - continue - } - - if msg.protocolId == MsgHeartbeat { - continue - } - - c.messageCh <- msg + var packet = Decode(bytes) + c.messageCh <- packet } } } diff --git a/net/src/test/go/znet/service.go b/net/src/test/go/znet/service.go index 78b9a547..d0f74118 100644 --- a/net/src/test/go/znet/service.go +++ b/net/src/test/go/znet/service.go @@ -21,7 +21,7 @@ import ( // SocketService struct type SocketService struct { - onMessage func(*Session, *Packet) + onMessage func(*Session, any) onConnect func(*Session) onDisconnect func(*Session, error) sessions *sync.Map @@ -33,30 +33,26 @@ type SocketService struct { stopCh chan error } -// NewSocketService create a new socket service -func NewSocketService(laddr string) (*SocketService, error) { +// Server create a new socket service +func Server(laddr string) *SocketService { - l, err := net.Listen("tcp", laddr) + listen, _ := net.Listen("tcp", laddr) - if err != nil { - return nil, err - } - - s := &SocketService{ + server := &SocketService{ sessions: &sync.Map{}, stopCh: make(chan error), hbInterval: 0 * time.Second, hbTimeout: 0 * time.Second, laddr: laddr, status: STInited, - listener: l, + listener: listen, } - return s, nil + return server } // RegMessageHandler register message handler -func (s *SocketService) RegMessageHandler(handler func(*Session, *Packet)) { +func (s *SocketService) RegMessageHandler(handler func(*Session, any)) { s.onMessage = handler } @@ -70,8 +66,8 @@ func (s *SocketService) RegDisconnectHandler(handler func(*Session, error)) { s.onDisconnect = handler } -// Serv Start socket service -func (s *SocketService) Serv() { +// Start Start socket service +func (s *SocketService) Start() { s.status = STRunning ctx, cancel := context.WithCancel(context.Background()) @@ -134,9 +130,9 @@ func (s *SocketService) connectHandler(ctx context.Context, c net.Conn) { } return - case msg := <-conn.messageCh: + case packet := <-conn.messageCh: if s.onMessage != nil { - s.onMessage(session, msg) + s.onMessage(session, packet) } } } diff --git a/net/src/test/go/znet/zne_test.go b/net/src/test/go/znet/zne_test.go index 3c647178..c557da07 100644 --- a/net/src/test/go/znet/zne_test.go +++ b/net/src/test/go/znet/zne_test.go @@ -12,43 +12,30 @@ package znet import ( - protocol "gonet/goProtocol" "fmt" + protocol "gonet/goProtocol" "net" "testing" "time" ) func TestService(t *testing.T) { - host := "127.0.0.1:18787" + host := "127.0.0.1:9000" - ss, err := NewSocketService(host) - if err != nil { - return - } + server, _ := Server(host) + server.RegMessageHandler(HandleMessage) + server.RegConnectHandler(HandleConnect) + server.RegDisconnectHandler(HandleDisconnect) - // ss.SetHeartBeat(5*time.Second, 30*time.Second) + server.Start() - ss.RegMessageHandler(HandleMessage) - ss.RegConnectHandler(HandleConnect) - ss.RegDisconnectHandler(HandleDisconnect) - - go NewClientConnect() - - timer := time.NewTimer(time.Second * 1) - go func() { - <-timer.C - ss.Stop("stop service") - t.Log("service stoped") - }() - - t.Log("service running on " + host) - ss.Serv() + // clientTest() } -func HandleMessage(s *Session, msg *Packet) { - fmt.Println("receive protocolId:", msg) - fmt.Println("receive data:", string(msg.data)) + +func HandleMessage(s *Session, packet any) { + fmt.Println("receive packet") + fmt.Println(packet) } func HandleDisconnect(s *Session, err error) { @@ -59,26 +46,19 @@ func HandleConnect(s *Session) { fmt.Println(s.conn.GetName() + " connected.") } -func NewClientConnect() { - host := "127.0.0.1:18787" - tcpAddr, err := net.ResolveTCPAddr("tcp", host) - if err != nil { - return - } +func clientTest() { + host := "127.0.0.1:9000" + tcpAddr, _ := net.ResolveTCPAddr("tcp", host) - conn, err := net.DialTCP("tcp", nil, tcpAddr) - if err != nil { - return - } + conn, _ := net.DialTCP("tcp", nil, tcpAddr) - var buffer = new(protocol.ByteBuffer) var packet = new(protocol.TcpHelloRequest) + packet.Message = "Hello, This is Golang Client" + fmt.Println("send message") - msg := NewMessage(1, []byte("Hello Zero!")) - data, err := Encode(msg) - if err != nil { - return - } - conn.Write(data) + var buffer = Encode(packet) + conn.Write(buffer.ToBytes()) + + time.Sleep(time.Millisecond * 5000) } diff --git a/protocol/src/main/resources/go/ByteBuffer.go b/protocol/src/main/resources/go/ByteBuffer.go index 64258db9..f84f93bd 100644 --- a/protocol/src/main/resources/go/ByteBuffer.go +++ b/protocol/src/main/resources/go/ByteBuffer.go @@ -163,15 +163,20 @@ func (byteBuffer *ByteBuffer) ReadShort() int16 { return value } -func (byteBuffer *ByteBuffer) WriteRawInt32(intValue int32) { - byteBuffer.WriteUByte(byte(intValue >> 24)) - byteBuffer.WriteUByte(byte(intValue >> 16)) - byteBuffer.WriteUByte(byte(intValue >> 8)) - byteBuffer.WriteUByte(byte(intValue)) +func (byteBuffer *ByteBuffer) WriteRawInt32(value int32) { + byteBuffer.EnsureCapacity(4) + var bytesBuffer = bytes.NewBuffer([]byte{}) + binary.Write(bytesBuffer, binary.BigEndian, value) + var byteArray = bytesBuffer.Bytes() + byteBuffer.WriteUBytes(byteArray) } func (byteBuffer *ByteBuffer) ReadRawInt32() int32 { - return int32(uint32(byteBuffer.ReadUByte())<<24 | uint32(byteBuffer.ReadUByte())<<16 | uint32(byteBuffer.ReadUByte())<<8 | uint32(byteBuffer.ReadUByte())) + var byteArray = byteBuffer.ReadUBytes(4) + bytesBuffer := bytes.NewBuffer(byteArray) + var value int32 + binary.Read(bytesBuffer, binary.BigEndian, &value) + return value } func (byteBuffer *ByteBuffer) WriteInt(intValue int) { @@ -444,7 +449,7 @@ func (byteBuffer *ByteBuffer) ReadPacket(protocolId int16) any { // -------------------------------------------------IProtocolRegistration------------------------------------------------- type IProtocolRegistration interface { - protocolId() int16 + ProtocolId() int16 write(buffer *ByteBuffer, packet any) @@ -459,7 +464,7 @@ func GetProtocol(protocolId int16) IProtocolRegistration { } func Write(buffer *ByteBuffer, packet any) { - var protocolId = packet.(IProtocolRegistration).protocolId() + var protocolId = packet.(IProtocolRegistration).ProtocolId() buffer.WriteShort(protocolId) var protocolRegistration = GetProtocol(protocolId) protocolRegistration.write(buffer, packet) diff --git a/protocol/src/main/resources/go/ProtocolTemplate.go b/protocol/src/main/resources/go/ProtocolTemplate.go index d59be272..8a1799fe 100644 --- a/protocol/src/main/resources/go/ProtocolTemplate.go +++ b/protocol/src/main/resources/go/ProtocolTemplate.go @@ -4,7 +4,7 @@ type {} struct { {} } -func (protocol {}) protocolId() int16 { +func (protocol {}) ProtocolId() int16 { return {} } diff --git a/protocol/src/main/resources/go/ProtocolTemplateEmpty.go b/protocol/src/main/resources/go/ProtocolTemplateEmpty.go index 5bc2307a..a4a80cd2 100644 --- a/protocol/src/main/resources/go/ProtocolTemplateEmpty.go +++ b/protocol/src/main/resources/go/ProtocolTemplateEmpty.go @@ -4,7 +4,7 @@ type {} struct { {} } -func (protocol {}) protocolId() int16 { +func (protocol {}) ProtocolId() int16 { return {} }