protocol

package
v0.0.0-...-856ceee Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 21, 2020 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidLengthProtocol = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowProtocol   = fmt.Errorf("proto: integer overflow")
)
View Source
var DefaultMemPool = new(memPool)
View Source
var HelloRStatus_name = map[int32]string{
	0:   "HelloRStatusOk",
	1:   "HelloRStatusTimeout",
	256: "HelloRStatusConnectionNotAllowedByRuleset",
}
View Source
var HelloRStatus_value = map[string]int32{
	"HelloRStatusOk":                            0,
	"HelloRStatusTimeout":                       1,
	"HelloRStatusConnectionNotAllowedByRuleset": 256,
}
View Source
var IVersion uint64 = 0x0000000000000001

协议版本

View Source
var MagicClient = []byte("gomux-c")

协议魔数

View Source
var MagicServer = []byte("gomux-s")
View Source
var PackType_name = map[int32]string{
	0:  "UNIVERSAL",
	1:  "PackTypeHello",
	2:  "PackTypeHelloR",
	16: "PackTypeStreamNew",
	17: "PackTypeStreamData",
	18: "PackTypeStreamDown",
	19: "PackTypeStreamClose",
	20: "PackTypeStreamRst",
	22: "PackTypeStreamWindowsSet",
	23: "PackTypeStreamWindowsSetR",
}
View Source
var PackType_value = map[string]int32{
	"UNIVERSAL":                 0,
	"PackTypeHello":             1,
	"PackTypeHelloR":            2,
	"PackTypeStreamNew":         16,
	"PackTypeStreamData":        17,
	"PackTypeStreamDown":        18,
	"PackTypeStreamClose":       19,
	"PackTypeStreamRst":         20,
	"PackTypeStreamWindowsSet":  22,
	"PackTypeStreamWindowsSetR": 23,
}

Functions

func ReadPackAuto

func ReadPackAuto(r io.Reader, mp Mempool, auto func(packType PackType) (Pack, error)) (Pack, PackType, []byte, []byte, error)

读取并解析包 返回值:

 pack		包
	PackType	包类型
	[]byte		包全部数据,即从 Mempool 申请的空间已使用的部分。内存使用完毕时,可以使用 mp.Put 释放回内存池
	[]byte		附加数据
	error

func UvarintSize

func UvarintSize(x uint64) (n int)

计算 uvarint 序列化后需要多少字节

func WriteAll

func WriteAll(w io.Writer, buf []byte) (n int, err error)

func WritePack

func WritePack(writer io.Writer, pack PackMarshalTo, data []byte) error

func WritePack2Bytes

func WritePack2Bytes(m Mempool, pack PackMarshalTo, data []byte) ([]byte, error)

Types

type Hello

type Hello struct {
	// 协议版本
	ProtocolVersion uint64 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion,proto3" json:"protocol_version,omitempty"`
	// 库的内部版本
	LibraryVersion uint64 `protobuf:"varint,2,opt,name=library_version,json=libraryVersion,proto3" json:"library_version,omitempty"`
	// 支持的特征列表
	// 一般约定是,排前面的优先支持,即当多个特征互相冲突时,协商时优先使用排行靠前的特征。
	// 每个 bytes,最前面为 uvarint 值,表示特征id,后面为具体详细数据
	Feature [][]byte `protobuf:"bytes,3,rep,name=feature,proto3" json:"feature,omitempty"`
}

客户端发送第一次握手 让客户端优先发送第一个包的目的是为了方便后期扩展

func (*Hello) Descriptor

func (*Hello) Descriptor() ([]byte, []int)

func (*Hello) Equal

func (this *Hello) Equal(that interface{}) bool

func (*Hello) GetFeature

func (m *Hello) GetFeature() [][]byte

func (*Hello) GetLibraryVersion

func (m *Hello) GetLibraryVersion() uint64

func (*Hello) GetPackType

func (p *Hello) GetPackType() PackType

func (*Hello) GetProtocolVersion

func (m *Hello) GetProtocolVersion() uint64

func (*Hello) GetStreamId

func (p *Hello) GetStreamId() uint64

func (*Hello) GoString

func (this *Hello) GoString() string

func (*Hello) Marshal

func (m *Hello) Marshal() (dAtA []byte, err error)

func (*Hello) MarshalTo

func (m *Hello) MarshalTo(dAtA []byte) (int, error)

func (*Hello) MarshalToSizedBuffer

func (m *Hello) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Hello) ProtoMessage

func (*Hello) ProtoMessage()

func (*Hello) Reset

func (m *Hello) Reset()

func (*Hello) Size

func (m *Hello) Size() (n int)

func (*Hello) String

func (this *Hello) String() string

func (*Hello) Unmarshal

func (m *Hello) Unmarshal(dAtA []byte) error

func (*Hello) XXX_DiscardUnknown

func (m *Hello) XXX_DiscardUnknown()

func (*Hello) XXX_Marshal

func (m *Hello) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Hello) XXX_Merge

func (m *Hello) XXX_Merge(src proto.Message)

func (*Hello) XXX_Size

func (m *Hello) XXX_Size() int

func (*Hello) XXX_Unmarshal

func (m *Hello) XXX_Unmarshal(b []byte) error

type HelloR

type HelloR struct {
	// 协议版本
	ProtocolVersion uint64 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion,proto3" json:"protocol_version,omitempty"`
	// 库的内部版本
	LibraryVersion uint64 `protobuf:"varint,2,opt,name=library_version,json=libraryVersion,proto3" json:"library_version,omitempty"`
	// 状态
	Status uint64 `protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"`
	// 延迟,当失败等错误时,客户端需要在 delay 秒后才能重试
	Delay uint64 `protobuf:"varint,4,opt,name=delay,proto3" json:"delay,omitempty"`
	//错误消息
	Message string `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
	// 服务端返回最终支持的特征列表
	Feature [][]byte `protobuf:"bytes,6,rep,name=feature,proto3" json:"feature,omitempty"`
}

func (*HelloR) Descriptor

func (*HelloR) Descriptor() ([]byte, []int)

func (*HelloR) Equal

func (this *HelloR) Equal(that interface{}) bool

func (*HelloR) GetDelay

func (m *HelloR) GetDelay() uint64

func (*HelloR) GetFeature

func (m *HelloR) GetFeature() [][]byte

func (*HelloR) GetLibraryVersion

func (m *HelloR) GetLibraryVersion() uint64

func (*HelloR) GetMessage

func (m *HelloR) GetMessage() string

func (*HelloR) GetPackType

func (p *HelloR) GetPackType() PackType

func (*HelloR) GetProtocolVersion

func (m *HelloR) GetProtocolVersion() uint64

func (*HelloR) GetStatus

func (m *HelloR) GetStatus() uint64

func (*HelloR) GetStreamId

func (p *HelloR) GetStreamId() uint64

func (*HelloR) GoString

func (this *HelloR) GoString() string

func (*HelloR) Marshal

func (m *HelloR) Marshal() (dAtA []byte, err error)

func (*HelloR) MarshalTo

func (m *HelloR) MarshalTo(dAtA []byte) (int, error)

func (*HelloR) MarshalToSizedBuffer

func (m *HelloR) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*HelloR) ProtoMessage

func (*HelloR) ProtoMessage()

func (*HelloR) Reset

func (m *HelloR) Reset()

func (*HelloR) Size

func (m *HelloR) Size() (n int)

func (*HelloR) String

func (this *HelloR) String() string

func (*HelloR) Unmarshal

func (m *HelloR) Unmarshal(dAtA []byte) error

func (*HelloR) XXX_DiscardUnknown

func (m *HelloR) XXX_DiscardUnknown()

func (*HelloR) XXX_Marshal

func (m *HelloR) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*HelloR) XXX_Merge

func (m *HelloR) XXX_Merge(src proto.Message)

func (*HelloR) XXX_Size

func (m *HelloR) XXX_Size() int

func (*HelloR) XXX_Unmarshal

func (m *HelloR) XXX_Unmarshal(b []byte) error

type HelloRStatus

type HelloRStatus int32

status 还是分开吧,如果统一空间浪费比较严重。

const (
	HelloRStatusOk                            HelloRStatus = 0
	HelloRStatusTimeout                       HelloRStatus = 1
	HelloRStatusConnectionNotAllowedByRuleset HelloRStatus = 256
)

func (HelloRStatus) EnumDescriptor

func (HelloRStatus) EnumDescriptor() ([]byte, []int)

func (HelloRStatus) String

func (x HelloRStatus) String() string

type Mempool

type Mempool interface {
	Get(l int) []byte
	Put([]byte)
}

type Pack

type Pack interface {
	PackMarshalTo
	PackUnmarshal
}

func PackAuto

func PackAuto(packType PackType) (Pack, error)

type PackMarshalTo

type PackMarshalTo interface {
	MarshalTo(dAtA []byte) (int, error)
	GetPackType() PackType
	Size() int
	GetStreamId() uint64
}

type PackType

type PackType int32
const (
	UNIVERSAL         PackType = 0
	PackTypeHello     PackType = 1
	PackTypeHelloR    PackType = 2
	PackTypeStreamNew PackType = 16
	// 流数据包
	// 内部还可能会包含接收缓冲区剩余空间
	PackTypeStreamData  PackType = 17
	PackTypeStreamDown  PackType = 18
	PackTypeStreamClose PackType = 19
	PackTypeStreamRst   PackType = 20
	// 修改缓冲区大小
	// 包内同时包含接收、发送双方的缓冲区字段
	// 虽然流的双方都可以发送这个包
	// 但是只有接收方发送的有效,另一方发送的只是建议
	// 扩大缓冲区可以立刻生效
	// 但是如果是缩小接收缓冲区,必须等到收到 SetR 后才能实际缩小接收缓冲区
	PackTypeStreamWindowsSet  PackType = 22
	PackTypeStreamWindowsSetR PackType = 23
)

func ReadPack

func ReadPack(r io.Reader, mp Mempool, pack Pack) (PackType, []byte, []byte, []byte, error)

读取并解析包 返回值:

PackType	包类型
[]byte		包全部数据,即从 Mempool 申请的空间已使用的部分。内存使用完毕时,可以使用 mp.Put 释放回内存池
[]byte		序列化后的包数据
[]byte		附加数据
error

func ReadPackBuf

func ReadPackBuf(r io.Reader, mp Mempool) (PackType, []byte, []byte, []byte, error)

读取包到缓冲区 返回值:

PackType	包类型
[]byte		包全部数据,即从 Mempool 申请的空间已使用的部分。内存使用完毕时,可以使用 mp.Put 释放回内存池
[]byte		序列化后的包数据
[]byte		附加数据
error

func (PackType) EnumDescriptor

func (PackType) EnumDescriptor() ([]byte, []int)

func (PackType) String

func (x PackType) String() string

type PackUnmarshal

type PackUnmarshal interface {
	Unmarshal(dAtA []byte) error
	GetPackType() PackType
	GetStreamId() uint64
}

type StreamClose

type StreamClose struct {
	Id uint64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
}

func (*StreamClose) Descriptor

func (*StreamClose) Descriptor() ([]byte, []int)

func (*StreamClose) Equal

func (this *StreamClose) Equal(that interface{}) bool

func (*StreamClose) GetId

func (m *StreamClose) GetId() uint64

func (*StreamClose) GetPackType

func (p *StreamClose) GetPackType() PackType

func (*StreamClose) GetStreamId

func (p *StreamClose) GetStreamId() uint64

func (*StreamClose) GoString

func (this *StreamClose) GoString() string

func (*StreamClose) Marshal

func (m *StreamClose) Marshal() (dAtA []byte, err error)

func (*StreamClose) MarshalTo

func (m *StreamClose) MarshalTo(dAtA []byte) (int, error)

func (*StreamClose) MarshalToSizedBuffer

func (m *StreamClose) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StreamClose) ProtoMessage

func (*StreamClose) ProtoMessage()

func (*StreamClose) Reset

func (m *StreamClose) Reset()

func (*StreamClose) Size

func (m *StreamClose) Size() (n int)

func (*StreamClose) String

func (this *StreamClose) String() string

func (*StreamClose) Unmarshal

func (m *StreamClose) Unmarshal(dAtA []byte) error

func (*StreamClose) XXX_DiscardUnknown

func (m *StreamClose) XXX_DiscardUnknown()

func (*StreamClose) XXX_Marshal

func (m *StreamClose) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StreamClose) XXX_Merge

func (m *StreamClose) XXX_Merge(src proto.Message)

func (*StreamClose) XXX_Size

func (m *StreamClose) XXX_Size() int

func (*StreamClose) XXX_Unmarshal

func (m *StreamClose) XXX_Unmarshal(b []byte) error

type StreamData

type StreamData struct {
	Id uint64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
}

func (*StreamData) Descriptor

func (*StreamData) Descriptor() ([]byte, []int)

func (*StreamData) Equal

func (this *StreamData) Equal(that interface{}) bool

func (*StreamData) GetId

func (m *StreamData) GetId() uint64

func (*StreamData) GetPackType

func (p *StreamData) GetPackType() PackType

func (*StreamData) GetStreamId

func (p *StreamData) GetStreamId() uint64

func (*StreamData) GoString

func (this *StreamData) GoString() string

func (*StreamData) Marshal

func (m *StreamData) Marshal() (dAtA []byte, err error)

func (*StreamData) MarshalTo

func (m *StreamData) MarshalTo(dAtA []byte) (int, error)

func (*StreamData) MarshalToSizedBuffer

func (m *StreamData) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StreamData) ProtoMessage

func (*StreamData) ProtoMessage()

func (*StreamData) Reset

func (m *StreamData) Reset()

func (*StreamData) Size

func (m *StreamData) Size() (n int)

func (*StreamData) String

func (this *StreamData) String() string

func (*StreamData) Unmarshal

func (m *StreamData) Unmarshal(dAtA []byte) error

func (*StreamData) XXX_DiscardUnknown

func (m *StreamData) XXX_DiscardUnknown()

func (*StreamData) XXX_Marshal

func (m *StreamData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StreamData) XXX_Merge

func (m *StreamData) XXX_Merge(src proto.Message)

func (*StreamData) XXX_Size

func (m *StreamData) XXX_Size() int

func (*StreamData) XXX_Unmarshal

func (m *StreamData) XXX_Unmarshal(b []byte) error

type StreamDown

type StreamDown struct {
}

func (*StreamDown) Descriptor

func (*StreamDown) Descriptor() ([]byte, []int)

func (*StreamDown) Equal

func (this *StreamDown) Equal(that interface{}) bool

func (*StreamDown) GetPackType

func (p *StreamDown) GetPackType() PackType

func (*StreamDown) GetStreamId

func (p *StreamDown) GetStreamId() uint64

func (*StreamDown) GoString

func (this *StreamDown) GoString() string

func (*StreamDown) Marshal

func (m *StreamDown) Marshal() (dAtA []byte, err error)

func (*StreamDown) MarshalTo

func (m *StreamDown) MarshalTo(dAtA []byte) (int, error)

func (*StreamDown) MarshalToSizedBuffer

func (m *StreamDown) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StreamDown) ProtoMessage

func (*StreamDown) ProtoMessage()

func (*StreamDown) Reset

func (m *StreamDown) Reset()

func (*StreamDown) Size

func (m *StreamDown) Size() (n int)

func (*StreamDown) String

func (this *StreamDown) String() string

func (*StreamDown) Unmarshal

func (m *StreamDown) Unmarshal(dAtA []byte) error

func (*StreamDown) XXX_DiscardUnknown

func (m *StreamDown) XXX_DiscardUnknown()

func (*StreamDown) XXX_Marshal

func (m *StreamDown) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StreamDown) XXX_Merge

func (m *StreamDown) XXX_Merge(src proto.Message)

func (*StreamDown) XXX_Size

func (m *StreamDown) XXX_Size() int

func (*StreamDown) XXX_Unmarshal

func (m *StreamDown) XXX_Unmarshal(b []byte) error

type StreamNew

type StreamNew struct {
	// 客户端为单数、服务端为双数
	// 0 保留
	Id uint64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
}

func (*StreamNew) Descriptor

func (*StreamNew) Descriptor() ([]byte, []int)

func (*StreamNew) Equal

func (this *StreamNew) Equal(that interface{}) bool

func (*StreamNew) GetId

func (m *StreamNew) GetId() uint64

func (*StreamNew) GetPackType

func (p *StreamNew) GetPackType() PackType

func (*StreamNew) GetStreamId

func (p *StreamNew) GetStreamId() uint64

func (*StreamNew) GoString

func (this *StreamNew) GoString() string

func (*StreamNew) Marshal

func (m *StreamNew) Marshal() (dAtA []byte, err error)

func (*StreamNew) MarshalTo

func (m *StreamNew) MarshalTo(dAtA []byte) (int, error)

func (*StreamNew) MarshalToSizedBuffer

func (m *StreamNew) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StreamNew) ProtoMessage

func (*StreamNew) ProtoMessage()

func (*StreamNew) Reset

func (m *StreamNew) Reset()

func (*StreamNew) Size

func (m *StreamNew) Size() (n int)

func (*StreamNew) String

func (this *StreamNew) String() string

func (*StreamNew) Unmarshal

func (m *StreamNew) Unmarshal(dAtA []byte) error

func (*StreamNew) XXX_DiscardUnknown

func (m *StreamNew) XXX_DiscardUnknown()

func (*StreamNew) XXX_Marshal

func (m *StreamNew) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StreamNew) XXX_Merge

func (m *StreamNew) XXX_Merge(src proto.Message)

func (*StreamNew) XXX_Size

func (m *StreamNew) XXX_Size() int

func (*StreamNew) XXX_Unmarshal

func (m *StreamNew) XXX_Unmarshal(b []byte) error

type StreamRst

type StreamRst struct {
	Id uint64 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"`
}

func (*StreamRst) Descriptor

func (*StreamRst) Descriptor() ([]byte, []int)

func (*StreamRst) Equal

func (this *StreamRst) Equal(that interface{}) bool

func (*StreamRst) GetId

func (m *StreamRst) GetId() uint64

func (*StreamRst) GetPackType

func (p *StreamRst) GetPackType() PackType

func (*StreamRst) GetStreamId

func (p *StreamRst) GetStreamId() uint64

func (*StreamRst) GoString

func (this *StreamRst) GoString() string

func (*StreamRst) Marshal

func (m *StreamRst) Marshal() (dAtA []byte, err error)

func (*StreamRst) MarshalTo

func (m *StreamRst) MarshalTo(dAtA []byte) (int, error)

func (*StreamRst) MarshalToSizedBuffer

func (m *StreamRst) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StreamRst) ProtoMessage

func (*StreamRst) ProtoMessage()

func (*StreamRst) Reset

func (m *StreamRst) Reset()

func (*StreamRst) Size

func (m *StreamRst) Size() (n int)

func (*StreamRst) String

func (this *StreamRst) String() string

func (*StreamRst) Unmarshal

func (m *StreamRst) Unmarshal(dAtA []byte) error

func (*StreamRst) XXX_DiscardUnknown

func (m *StreamRst) XXX_DiscardUnknown()

func (*StreamRst) XXX_Marshal

func (m *StreamRst) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StreamRst) XXX_Merge

func (m *StreamRst) XXX_Merge(src proto.Message)

func (*StreamRst) XXX_Size

func (m *StreamRst) XXX_Size() int

func (*StreamRst) XXX_Unmarshal

func (m *StreamRst) XXX_Unmarshal(b []byte) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL