新增TcpGateWay服务,支持通过配置进行路由转发

This commit is contained in:
boyce
2020-10-07 16:14:19 +08:00
parent 40ff2f7932
commit 0c55961c44
17 changed files with 1203 additions and 58 deletions

View File

@@ -0,0 +1,81 @@
package tcpgateway
import (
"github.com/duanhf2012/origin/log"
"github.com/duanhf2012/origin/network/processor"
"github.com/duanhf2012/origin/node"
"github.com/duanhf2012/origin/service"
"github.com/duanhf2012/origin/sysservice/tcpservice"
)
func init(){
node.Setup(&tcpservice.TcpService{})
node.Setup(&TcpGateService{})
}
type MsgTypeRouterInfo struct {
router IRouter
serviceName string
}
type TcpGateService struct {
service.Service
processor processor.IRawProcessor
tcpService *tcpservice.TcpService
loadBalance ILoadBalance
router IRouter
}
func (slf *TcpGateService) OnInit() error {
slf.OnLoad()
//获取安装好了的TcpService对象
slf.tcpService = node.GetService("TcpService").(*tcpservice.TcpService)
//新建内置的protobuf处理器您也可以自定义路由器比如json后续会补充
slf.processor = processor.NewPBRawProcessor()
//注册监听客户连接断开事件
slf.processor.SetDisConnectedHandler(slf.router.OnDisconnected)
//注册监听客户连接事件
slf.processor.SetConnectedHandler(slf.router.OnConnected)
//注册监听消息类型MsgType_MsgReq并注册回调
slf.processor.SetRawMsgHandler(slf.router.RouterMessage)
//将protobuf消息处理器设置到TcpService服务中
slf.tcpService.SetProcessor(slf.processor,slf.GetEventHandler())
return nil
}
func (slf *TcpGateService) OnLoad() {
slf.loadBalance = &LoadBalance{}
slf.router = NewRouter(slf.loadBalance,slf,slf.GetServiceCfg())
//加载路由
slf.router.Load()
}
func (slf *TcpGateService) SetupLoadBalance(loadBalance ILoadBalance){
slf.loadBalance = loadBalance
}
func (slf *TcpGateService) SetupRouter(router IRouter){
slf.router = router
}
func (slf *TcpGateService) RPC_Dispatch(replyMsg *ReplyMessage) error {
for _,id := range replyMsg.ClientList {
err := slf.tcpService.SendRawMsg(id,replyMsg.Msg)
if err != nil {
log.Debug("SendRawMsg fail:%+v!",err)
}
}
return nil
}