Blame view

components/net/msg.go 1.16 KB
fee11bff   zhangqijia   客户端无法使用grpc热更,不用g...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  package net
  
  import (
  	"bytes"
  	"encoding/binary"
  	"fmt"
  	"pro2d/common"
  )
  
  func ParseMsg (data []byte, atEOF bool) (advance int, token []byte, err error) {
  	// 表示我们已经扫描到结尾了
  	if atEOF && len(data) == 0 {
  		return 0, nil, nil
  	}
  	if !atEOF && len(data) >= common.HEADLEN { //4字节数据包长度  4字节指令
  		length := int32(0)
  		binary.Read(bytes.NewReader(data[0:4]), binary.BigEndian, &length)
  		if length <= 0 {
  			return 0, nil, fmt.Errorf("length is 0")
  		}
  		if int(length) <= len(data) {
  			return int(length) , data[:int(length)], nil
  		}
  		return 0 , nil, nil
  	}
  	if atEOF {
  		return len(data), data, nil
  	}
  	return 0, nil, nil
  }
  
  
  func DecodeMsg(data []byte) (*MsgPkg, error) {
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
34
35
  	h := &Head{}
  	err := binary.Read(bytes.NewReader(data), binary.BigEndian, h)
fee11bff   zhangqijia   客户端无法使用grpc热更,不用g...
36
37
38
39
40
41
42
43
  	if err != nil {
  		return nil, err
  	}
  	return &MsgPkg{
  		Head: h,
  		Body: data[common.HEADLEN:],
  	},nil
  }
9644352a   zhangqijia   登录服改为http,游戏服改为长连...
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  
  func EncodeMsg(pkg *MsgPkg) ([]byte, error) {
  	buf := &bytes.Buffer{}
  	err := binary.Write(buf, binary.BigEndian, pkg.Head)
  	if err != nil {
  		return nil, err
  	}
  
  	err = binary.Write(buf, binary.BigEndian, pkg.Body)
  	if err != nil {
  		return nil, err
  	}
  	return buf.Bytes(), nil
  }