gitee.com/KyleChenSource/lib-robot@v1.0.2/robottest/robot/net/network.go (about) 1 package net 2 3 import ( 4 "gitee.com/KyleChenSource/lib-robot/robottest/protos" 5 ) 6 7 // ------------------------------ 网络外部逻辑注册函数 Start--------------------------- 8 // 获取包大小函数 9 type MsgLenGet func([]byte) (int, error) 10 11 // 获取包解析最小长度函数 12 type MsgMinGet func() int 13 14 // 通过协议解析ID,而不是所有数据。可以优先进行抛弃处理,而非所有包都进行json解析。极大优化Robot性能 15 type MsgDecodeProtoID func([]byte) (protos.ProtoID, error) 16 17 // 协议解析函数 18 // Ret: 19 // 20 // ProtoID: 网络协议ID 21 // string: 网络协议头 Json 22 // string: 网络数据 Json 23 // error: 24 type MsgDecode func([]byte) (protos.ProtoID, protos.JsonString, protos.JsonString, error) 25 26 // 协议封装函数 27 // 28 // ProtoID: 网络协议ID 29 // string: 网络数据 Json 30 type MsgEncode func(protos.ProtoID, protos.JsonString) ([]byte, error) 31 32 // ------------------------------ 网络外部逻辑注册函数 End--------------------------- 33 type MsgType int 34 35 const ( 36 MSGTYPE_CONNECTED MsgType = iota // 连接消息,具体看err == nil, 连接成功,否则失败 37 MSGTYPE_ERR // err查看原因 38 MSGTYPE_CLOSED // 关闭完毕,后续可以重新开始Start 39 MSGTYPE_RECV // 接收到消息 40 ) 41 42 type Msg struct { 43 Type MsgType 44 Err error 45 Data []byte 46 } 47 48 type IClientHandler interface { 49 MsgChannel() chan<- *Msg 50 } 51 52 type IClient interface { 53 Initialize(h IClientHandler, func_msglen_get MsgLenGet, func_msgmin_get MsgMinGet, func_msg_decode MsgDecode, func_msg_encode MsgEncode) error 54 55 // 开始。后续所有的流程都是通过回调来通知 56 // OnConnected(error) 57 // OnDisconnected(error) 58 Start(addr string) error 59 60 Close() 61 // 数据发送 62 // protoId: 网络协议ID 63 // data: 网络数据json描述 64 Send(protoId protos.ProtoID, data protos.JsonString) error 65 }