mirror of
https://github.com/duanhf2012/origin.git
synced 2026-05-14 03:37:31 +08:00
新增TcpGateWay服务,支持通过配置进行路由转发
This commit is contained in:
81
sysservice/tcpgateway/TcpGateService.go
Normal file
81
sysservice/tcpgateway/TcpGateService.go
Normal 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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user