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  }