icompontents.go 1.74 KB
package components

//网络包头
type IHead interface {
	GetDataLen() uint32 //获取消息数据段长度
	GetMsgID() uint32   //获取消息ID
	GetErrCode() int32   //获取消息错误码
	GetPreserve() uint32   //获取预留数据
}

//网络包
type IMessage interface {
	IHead
	GetHeader() IHead       //获取消息头
	SetHeader(header IHead) //设置消息头

	GetData() []byte    //获取消息内容
	SetData([]byte)    //设置消息内容

	SetSessId(int)	//设置连接id
	GetSessId() int	//获取连接id
}

//网络拆包解包器
type ISplitter interface {
	UnPack([]byte) (IMessage, error)
	Pack(cmd uint32, data []byte, errcode int32, preserve uint32) ([]byte, error)
	ParseMsg (data []byte, atEOF bool) (advance int, token []byte, err error)
	GetHeadLen() uint32
}

type ConnectionCallback func(IConnection)
type CloseCallback func(IConnection)
type MessageCallback func(IMessage)
type TimerCallback func(IConnection)

//链接
type IConnection interface {
	GetID() int
	Start()
	Stop()
	Send(code int32, cmd uint32, b []byte) error

	SetConnectionCallback(ConnectionCallback)
	SetMessageCallback(MessageCallback)
	SetCloseCallback(CloseCallback)
	SetTimerCallback(TimerCallback)
}

//server
type IServer interface {
	Start() error
	Stop()

	GetSplitter() ISplitter
	GetIConnection(id int) IConnection
	GetPlugin() IPlugin

	SetConnectionCallback(ConnectionCallback)
	SetMessageCallback(MessageCallback)
	SetCloseCallback(CloseCallback)
	SetTimerCallback(TimerCallback)
}

//httpserver
type IHttp interface {
	Start() error
	Stop()
	BindHandler(interface{})
}

type ActionHandler 	func (conn IConnection, msg IMessage)  (int32, interface{})
//用于热更逻辑的插件接口
type IPlugin interface {
	LoadPlugin() error
	GetAction(uint32) interface{}
}