Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

zmlink

一个定义了基本交互报文的tcp C/S端链接sdk,简化链接服务构建,使用方式如下方demo

报文结构

注册帧(对使用者透明)

| ZM | 19 | 0 | 1 | clientID |

长度位 类型位 报文编号 载荷
ZM uint32 int8 uint64 string

数据存储类型采用大端字节序

类型位,载荷位用户自定义,但约定发送类型为1126,Ack类型为对应的-1-126

demo

server端

package zmlink

import (
	"log/slog"
	"testing"
)

type linstenerTestEventHandler struct{}

func (t linstenerTestEventHandler) OnStream(link *Link, payload Payload, dir StreamDir) {
	slog.Info("OnStream", "client_id", link.GetClientID(), "payload", string(payload.Bytes()), "dir", dir.String())
	if dir == StreamIncoming {
		link.ASend(payload.Ack([]byte("回复点消息拉卡拉绿绿绿绿绿绿绿")), nil)
	}
}

func (t linstenerTestEventHandler) OnStatus(link *Link, statusType StatusType) {
	slog.Info("OnStatus", "client_id", link.GetClientID(), "status", statusType)
}

func TestLink_ASend(t *testing.T) {
	service := NewLinkListener("tcp", ":4469", &linstenerTestEventHandler{})
	service.Start()
	select {}
	/*for{
		time.Sleep(4 *time.Second)
		payload, _ := NewBytesPayload(1, []byte("hahahahah"))
		link := service.GetLink("1235")
		if link != nil {
			send, err := link.SSend(payload, 0)
			slog.Info("send result", "payload", string(send.Bytes()), "error", err)
		}
	}*/
}

client端

package zmlink

import (
	"log/slog"
	"testing"
)

type clientTestEventHandler struct{}

func (t clientTestEventHandler) OnStream(link *Link, payload Payload, dir StreamDir) {
	slog.Info("OnStream", "client_id", link.GetClientID(), "payload", string(payload.Bytes()), "dir", dir.String())
}

func (t clientTestEventHandler) OnStatus(link *Link, statusType StatusType) {
	slog.Info("OnStatus", "client_id", link.GetClientID(), "status", statusType)
}

func TestClientLink_ASend(t *testing.T) {
	service := NewLinkClient("1235", "tcp", ":4469", &clientTestEventHandler{})
	service.Start()
	for {
		time.Sleep(4 * time.Second)
		payload, _ := NewBytesPayload(1, []byte("22ZM222"))
		link := service.GetLink()
		if link == nil {
			slog.Error("connection closed")
			continue
		}
		send, err := link.SSend(payload, 10*time.Second)
		if err != nil {
			slog.Error("SSend failed", "error", err)
			continue
		}
		fmt.Println(string(send.Bytes()))
		err = link.ASend(payload, func(p Payload) {
			slog.Info("clientDataHandler", "payload", string(p.Bytes()))
		})
		if err != nil {
			slog.Error("ASend failed", "error", err)
			continue
		}
	}
}

About

一个定义了基本交互报文的tcp C/S端链接sdk

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages