mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 12:52:31 +08:00
优化代码
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
client_proto_proxy_enable = false
|
||||
game_data_config_path = "./game_data_config"
|
||||
gacha_history_server = "https://hk4e.flswld.com/api/v1"
|
||||
load_scene_lua_config = true # 是否加载场景详情LUA配置数据
|
||||
|
||||
[logger]
|
||||
level = "DEBUG"
|
||||
|
||||
@@ -46,7 +46,8 @@ type Hk4e struct {
|
||||
Version string `toml:"version"` // 支持的客户端协议版本号 三位数字 多个以逗号分隔 如300,310,320
|
||||
GateTcpMqAddr string `toml:"gate_tcp_mq_addr"` // 访问网关tcp直连消息队列的地址 填网关的内网地址
|
||||
GateTcpMqPort int32 `toml:"gate_tcp_mq_port"`
|
||||
LoginSdkUrl string `toml:"login_sdk_url"` // 网关登录验证token的sdk服务器地址 目前填dispatch的内网地址
|
||||
LoginSdkUrl string `toml:"login_sdk_url"` // 网关登录验证token的sdk服务器地址 目前填dispatch的内网地址
|
||||
LoadSceneLuaConfig bool `toml:"load_scene_lua_config"` // 是否加载场景详情LUA配置数据
|
||||
}
|
||||
|
||||
// MQ 消息队列
|
||||
@@ -59,6 +60,10 @@ func InitConfig(filePath string) {
|
||||
CONF.loadConfigFile(filePath)
|
||||
}
|
||||
|
||||
func GetConfig() *Config {
|
||||
return CONF
|
||||
}
|
||||
|
||||
// 加载配置文件
|
||||
func (c *Config) loadConfigFile(filePath string) {
|
||||
_, err := toml.DecodeFile(filePath, &c)
|
||||
|
||||
@@ -41,7 +41,7 @@ type MessageQueue struct {
|
||||
|
||||
func NewMessageQueue(serverType string, appId string, rpcClient *rpc.Client) (r *MessageQueue) {
|
||||
r = new(MessageQueue)
|
||||
conn, err := nats.Connect(config.CONF.MQ.NatsUrl)
|
||||
conn, err := nats.Connect(config.GetConfig().MQ.NatsUrl)
|
||||
if err != nil {
|
||||
logger.Error("connect nats error: %v", err)
|
||||
return nil
|
||||
@@ -247,7 +247,7 @@ type GateTcpMqEvent struct {
|
||||
}
|
||||
|
||||
func (m *MessageQueue) runGateTcpMqServer() {
|
||||
addr, err := net.ResolveTCPAddr("tcp4", "0.0.0.0:"+strconv.Itoa(int(config.CONF.Hk4e.GateTcpMqPort)))
|
||||
addr, err := net.ResolveTCPAddr("tcp4", "0.0.0.0:"+strconv.Itoa(int(config.GetConfig().Hk4e.GateTcpMqPort)))
|
||||
if err != nil {
|
||||
logger.Error("gate tcp mq parse port error: %v", err)
|
||||
return
|
||||
|
||||
@@ -19,7 +19,7 @@ type Client struct {
|
||||
// NewClient 构造
|
||||
func NewClient() (*Client, error) {
|
||||
r := new(Client)
|
||||
conn, err := nats.Connect(config.CONF.MQ.NatsUrl)
|
||||
conn, err := nats.Connect(config.GetConfig().MQ.NatsUrl)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func UnmarshalProtoObj(serverProtoObj pb.Message, clientProtoObj pb.Message, data []byte) bool {
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
err := pb.Unmarshal(data, clientProtoObj)
|
||||
if err != nil {
|
||||
logger.Error("parse client proto obj error: %v", err)
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"hk4e/common/config"
|
||||
"hk4e/common/rpc"
|
||||
@@ -20,6 +19,9 @@ func Run(ctx context.Context, configFile string) error {
|
||||
|
||||
logger.InitLogger("dispatch")
|
||||
logger.Warn("dispatch start")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
db := dao.NewDao()
|
||||
defer db.CloseDao()
|
||||
@@ -43,8 +45,6 @@ func Run(ctx context.Context, configFile string) error {
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
logger.Warn("dispatch exit")
|
||||
|
||||
time.Sleep(time.Second)
|
||||
return nil
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
|
||||
@@ -60,7 +60,7 @@ func (c *Controller) authorize() gin.HandlerFunc {
|
||||
}
|
||||
|
||||
func (c *Controller) registerRouter() {
|
||||
if config.CONF.Logger.Level == "DEBUG" {
|
||||
if config.GetConfig().Logger.Level == "DEBUG" {
|
||||
gin.SetMode(gin.DebugMode)
|
||||
} else {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
@@ -138,7 +138,7 @@ func (c *Controller) registerRouter() {
|
||||
engine.Use(c.authorize())
|
||||
engine.POST("/gate/token/verify", c.gateTokenVerify)
|
||||
engine.POST("/gate/token/reset", c.gateTokenReset)
|
||||
port := config.CONF.HttpPort
|
||||
port := config.GetConfig().HttpPort
|
||||
addr := ":" + strconv.Itoa(int(port))
|
||||
err := engine.Run(addr)
|
||||
if err != nil {
|
||||
|
||||
@@ -20,7 +20,7 @@ type Dao struct {
|
||||
|
||||
func NewDao() (r *Dao) {
|
||||
r = new(Dao)
|
||||
clientOptions := options.Client().ApplyURI(config.CONF.Database.Url).SetMinPoolSize(10).SetMaxPoolSize(100)
|
||||
clientOptions := options.Client().ApplyURI(config.GetConfig().Database.Url).SetMinPoolSize(10).SetMaxPoolSize(100)
|
||||
client, err := mongo.Connect(context.TODO(), clientOptions)
|
||||
if err != nil {
|
||||
logger.Error("mongo connect error: %v", err)
|
||||
@@ -34,8 +34,8 @@ func NewDao() (r *Dao) {
|
||||
r.mongo = client
|
||||
r.db = client.Database("dispatch_hk4e")
|
||||
r.redis = redis.NewClient(&redis.Options{
|
||||
Addr: config.CONF.Redis.Addr,
|
||||
Password: config.CONF.Redis.Password,
|
||||
Addr: config.GetConfig().Redis.Addr,
|
||||
Password: config.GetConfig().Redis.Password,
|
||||
DB: 0,
|
||||
PoolSize: 10,
|
||||
MinIdleConns: 1,
|
||||
|
||||
@@ -4,6 +4,8 @@ services:
|
||||
restart: always
|
||||
image: flswld/node:1.0.0
|
||||
container_name: node
|
||||
ports:
|
||||
- "1234:1234/tcp"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
GOLANG_PROTOBUF_REGISTRATION_CONFLICT: ignore
|
||||
@@ -23,6 +25,7 @@ services:
|
||||
container_name: dispatch
|
||||
ports:
|
||||
- "8080:8080/tcp"
|
||||
- "2345:2345/tcp"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
GOLANG_PROTOBUF_REGISTRATION_CONFLICT: ignore
|
||||
@@ -47,6 +50,7 @@ services:
|
||||
ports:
|
||||
- "22222:22222/udp"
|
||||
- "33333:33333/tcp"
|
||||
- "3456:3456/tcp"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
GOLANG_PROTOBUF_REGISTRATION_CONFLICT: ignore
|
||||
@@ -67,6 +71,8 @@ services:
|
||||
restart: always
|
||||
image: flswld/fight:1.0.0
|
||||
container_name: fight
|
||||
ports:
|
||||
- "5678:5678/tcp"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
GOLANG_PROTOBUF_REGISTRATION_CONFLICT: ignore
|
||||
@@ -86,6 +92,8 @@ services:
|
||||
restart: always
|
||||
image: flswld/pathfinding:1.0.0
|
||||
container_name: pathfinding
|
||||
ports:
|
||||
- "6789:6789/tcp"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
GOLANG_PROTOBUF_REGISTRATION_CONFLICT: ignore
|
||||
@@ -105,6 +113,8 @@ services:
|
||||
restart: always
|
||||
image: flswld/gs:1.0.0
|
||||
container_name: gs
|
||||
ports:
|
||||
- "4567:4567/tcp"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
GOLANG_PROTOBUF_REGISTRATION_CONFLICT: ignore
|
||||
@@ -127,6 +137,7 @@ services:
|
||||
container_name: gm
|
||||
ports:
|
||||
- "9001:9001/tcp"
|
||||
- "7890:7890/tcp"
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
GOLANG_PROTOBUF_REGISTRATION_CONFLICT: ignore
|
||||
|
||||
@@ -57,6 +57,9 @@ func Run(ctx context.Context, configFile string) error {
|
||||
|
||||
logger.InitLogger("fight_" + APPID)
|
||||
logger.Warn("fight start, appid: %v", APPID)
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
messageQueue := mq.NewMessageQueue(api.FIGHT, APPID, client)
|
||||
defer messageQueue.Close()
|
||||
@@ -74,7 +77,6 @@ func Run(ctx context.Context, configFile string) error {
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
logger.Warn("fight exit, appid: %v", APPID)
|
||||
time.Sleep(time.Second)
|
||||
return nil
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
|
||||
@@ -228,7 +228,7 @@ func (f *FightRoutine) attackHandle(gameMsg *mq.GameMsg) {
|
||||
continue
|
||||
}
|
||||
hitInfo := new(proto.EvtBeingHitInfo)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientProtoObj := GetClientProtoObjByName("EvtBeingHitInfo")
|
||||
if clientProtoObj == nil {
|
||||
logger.Error("get client proto obj is nil")
|
||||
@@ -303,7 +303,7 @@ func (f *FightRoutine) getAllPlayer(entityMap map[uint32]*Entity) []uint32 {
|
||||
var ClientCmdProtoMap *client_proto.ClientCmdProtoMap
|
||||
|
||||
func initClientCmdProtoMap() {
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
ClientCmdProtoMap = client_proto.NewClientCmdProtoMap()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,12 +33,12 @@ func Run(ctx context.Context, configFile string) error {
|
||||
rsp, err := client.Discovery.RegisterServer(context.TODO(), &api.RegisterServerReq{
|
||||
ServerType: api.GATE,
|
||||
GateServerAddr: &api.GateServerAddr{
|
||||
KcpAddr: config.CONF.Hk4e.KcpAddr,
|
||||
KcpPort: uint32(config.CONF.Hk4e.KcpPort),
|
||||
MqAddr: config.CONF.Hk4e.GateTcpMqAddr,
|
||||
MqPort: uint32(config.CONF.Hk4e.GateTcpMqPort),
|
||||
KcpAddr: config.GetConfig().Hk4e.KcpAddr,
|
||||
KcpPort: uint32(config.GetConfig().Hk4e.KcpPort),
|
||||
MqAddr: config.GetConfig().Hk4e.GateTcpMqAddr,
|
||||
MqPort: uint32(config.GetConfig().Hk4e.GateTcpMqPort),
|
||||
},
|
||||
Version: strings.Split(config.CONF.Hk4e.Version, ","),
|
||||
Version: strings.Split(config.GetConfig().Hk4e.Version, ","),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -67,6 +67,9 @@ func Run(ctx context.Context, configFile string) error {
|
||||
|
||||
logger.InitLogger("gate_" + APPID)
|
||||
logger.Warn("gate start, appid: %v", APPID)
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
messageQueue := mq.NewMessageQueue(api.GATE, APPID, client)
|
||||
defer messageQueue.Close()
|
||||
@@ -93,7 +96,6 @@ func Run(ctx context.Context, configFile string) error {
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
logger.Warn("gate exit, appid: %v", APPID)
|
||||
time.Sleep(time.Second)
|
||||
return nil
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
|
||||
@@ -73,7 +73,7 @@ func NewKcpConnectManager(messageQueue *mq.MessageQueue, discovery *rpc.Discover
|
||||
r.kcpEventOutput = make(chan *KcpEvent, 1000)
|
||||
r.reLoginRemoteKickRegChan = make(chan *RemoteKick, 1000)
|
||||
r.serverCmdProtoMap = cmd.NewCmdProtoMap()
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
r.clientCmdProtoMap = client_proto.NewClientCmdProtoMap()
|
||||
}
|
||||
r.messageQueue = messageQueue
|
||||
@@ -100,7 +100,7 @@ func (k *KcpConnectManager) run() {
|
||||
regionEc2b.SetSeed(ec2b.Seed())
|
||||
k.dispatchKey = regionEc2b.XorKey()
|
||||
// kcp
|
||||
port := strconv.Itoa(int(config.CONF.Hk4e.KcpPort))
|
||||
port := strconv.Itoa(int(config.GetConfig().Hk4e.KcpPort))
|
||||
listener, err := kcp.ListenWithOptions("0.0.0.0:" + port)
|
||||
if err != nil {
|
||||
logger.Error("listen kcp err: %v", err)
|
||||
|
||||
@@ -28,7 +28,7 @@ type ProtoMessage struct {
|
||||
func ProtoDecode(kcpMsg *KcpMsg,
|
||||
serverCmdProtoMap *cmd.CmdProtoMap, clientCmdProtoMap *client_proto.ClientCmdProtoMap) (protoMsgList []*ProtoMsg) {
|
||||
protoMsgList = make([]*ProtoMsg, 0)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientCmdId := kcpMsg.CmdId
|
||||
clientProtoData := kcpMsg.ProtoData
|
||||
cmdName := clientCmdProtoMap.GetClientCmdNameByCmdId(clientCmdId)
|
||||
@@ -139,7 +139,7 @@ func ProtoDecodePayloadLoop(cmdId uint16, protoData []byte, protoMessageList *[]
|
||||
return
|
||||
}
|
||||
for _, unionCmd := range unionCmdNotify.GetCmdList() {
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientCmdId := uint16(unionCmd.MessageId)
|
||||
clientProtoData := unionCmd.Body
|
||||
cmdName := clientCmdProtoMap.GetClientCmdNameByCmdId(clientCmdId)
|
||||
@@ -231,7 +231,7 @@ func ProtoEncode(protoMsg *ProtoMsg,
|
||||
} else {
|
||||
kcpMsg.ProtoData = nil
|
||||
}
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
serverCmdId := kcpMsg.CmdId
|
||||
serverProtoData := kcpMsg.ProtoData
|
||||
serverProtoObj := serverCmdProtoMap.GetProtoObjByCmdId(serverCmdId)
|
||||
|
||||
@@ -191,11 +191,10 @@ func (k *KcpConnectManager) sendMsgHandle() {
|
||||
})
|
||||
} else if protoMsg.CmdId == cmd.ClientReconnectNotify {
|
||||
tokenResetRsp, err := httpclient.PostJson[controller.TokenResetRsp](
|
||||
config.CONF.Hk4e.LoginSdkUrl+"/gate/token/reset?key=flswld",
|
||||
config.GetConfig().Hk4e.LoginSdkUrl+"/gate/token/reset?key=flswld",
|
||||
&controller.TokenResetReq{
|
||||
PlayerId: session.userId,
|
||||
},
|
||||
"")
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error("reset token error: %v", err)
|
||||
k.kcpEventInput <- &KcpEvent{
|
||||
@@ -343,12 +342,11 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session
|
||||
}
|
||||
}
|
||||
tokenVerifyRsp, err := httpclient.PostJson[controller.TokenVerifyRsp](
|
||||
config.CONF.Hk4e.LoginSdkUrl+"/gate/token/verify?key=flswld",
|
||||
config.GetConfig().Hk4e.LoginSdkUrl+"/gate/token/verify?key=flswld",
|
||||
&controller.TokenVerifyReq{
|
||||
AccountId: req.AccountUid,
|
||||
AccountToken: req.AccountToken,
|
||||
},
|
||||
"")
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error("verify token error: %v, account uid: %v", err, req.AccountUid)
|
||||
loginFailClose()
|
||||
|
||||
@@ -71,7 +71,7 @@ func ReplaceGameDataConfig() {
|
||||
}
|
||||
|
||||
func (g *GameDataConfig) loadAll() {
|
||||
pathPrefix := config.CONF.Hk4e.GameDataConfigPath
|
||||
pathPrefix := config.GetConfig().Hk4e.GameDataConfigPath
|
||||
|
||||
dirInfo, err := os.Stat(pathPrefix)
|
||||
if err != nil || !dirInfo.IsDir() {
|
||||
@@ -116,19 +116,21 @@ func (g *GameDataConfig) load() {
|
||||
g.loadSceneData() // 场景
|
||||
g.loadScenePoint() // 场景传送点
|
||||
g.loadSceneTagData() // 场景地图图标
|
||||
g.loadSceneDetail() // 场景详情LUA配置数据
|
||||
g.loadWorldAreaData() // 世界区域
|
||||
g.loadGatherData() // 采集物
|
||||
g.loadFetterData() // 角色资料解锁
|
||||
g.loadItemData() // 统一道具
|
||||
g.loadAvatarLevelData() // 角色等级
|
||||
g.loadAvatarPromoteData() // 角色突破
|
||||
g.loadPlayerLevelData() // 玩家等级
|
||||
g.loadWeaponLevelData() // 武器等级
|
||||
g.loadWeaponPromoteData() // 武器突破
|
||||
g.loadRewardData() // 奖励
|
||||
g.loadAvatarCostumeData() // 角色时装
|
||||
g.loadAvatarFlycloakData() // 角色风之翼
|
||||
if config.GetConfig().Hk4e.LoadSceneLuaConfig {
|
||||
g.loadSceneDetail() // 场景详情LUA配置数据
|
||||
}
|
||||
g.loadWorldAreaData() // 世界区域
|
||||
g.loadGatherData() // 采集物
|
||||
g.loadFetterData() // 角色资料解锁
|
||||
g.loadItemData() // 统一道具
|
||||
g.loadAvatarLevelData() // 角色等级
|
||||
g.loadAvatarPromoteData() // 角色突破
|
||||
g.loadPlayerLevelData() // 玩家等级
|
||||
g.loadWeaponLevelData() // 武器等级
|
||||
g.loadWeaponPromoteData() // 武器突破
|
||||
g.loadRewardData() // 奖励
|
||||
g.loadAvatarCostumeData() // 角色时装
|
||||
g.loadAvatarFlycloakData() // 角色风之翼
|
||||
}
|
||||
|
||||
func (g *GameDataConfig) readCsvFileData(fileName string) []byte {
|
||||
|
||||
@@ -94,6 +94,9 @@ func TestGenGdCsv(t *testing.T) {
|
||||
func TestInitGameDataConfig(t *testing.T) {
|
||||
config.InitConfig("./bin/application.toml")
|
||||
logger.InitLogger("InitGameDataConfig")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
logger.Info("start load conf")
|
||||
InitGameDataConfig()
|
||||
logger.Info("load conf finish, conf: %v", CONF)
|
||||
@@ -132,6 +135,9 @@ func CheckJsonLoop(path string, errorJsonFileList *[]string, totalJsonFileCount
|
||||
func TestCheckJsonValid(t *testing.T) {
|
||||
config.InitConfig("./bin/application.toml")
|
||||
logger.InitLogger("CheckJsonValid")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
errorJsonFileList := make([]string, 0)
|
||||
totalJsonFileCount := 0
|
||||
CheckJsonLoop("./game_data_config/json", &errorJsonFileList, &totalJsonFileCount)
|
||||
@@ -146,6 +152,9 @@ func TestCheckJsonValid(t *testing.T) {
|
||||
func TestSceneBlock(t *testing.T) {
|
||||
config.InitConfig("./bin/application.toml")
|
||||
logger.InitLogger("SceneBlock")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
InitGameDataConfig()
|
||||
scene, exist := CONF.SceneDetailMap[3]
|
||||
if !exist {
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"hk4e/common/config"
|
||||
"hk4e/common/rpc"
|
||||
@@ -18,6 +17,9 @@ func Run(ctx context.Context, configFile string) error {
|
||||
|
||||
logger.InitLogger("gm")
|
||||
logger.Warn("gm start")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
// natsrpc client
|
||||
client, err := rpc.NewClient()
|
||||
@@ -38,7 +40,6 @@ func Run(ctx context.Context, configFile string) error {
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
logger.Warn("gm exit")
|
||||
time.Sleep(time.Second)
|
||||
return nil
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
|
||||
@@ -39,7 +39,7 @@ func (c *Controller) authorize() gin.HandlerFunc {
|
||||
}
|
||||
|
||||
func (c *Controller) registerRouter() {
|
||||
if config.CONF.Logger.Level == "DEBUG" {
|
||||
if config.GetConfig().Logger.Level == "DEBUG" {
|
||||
gin.SetMode(gin.DebugMode)
|
||||
} else {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
@@ -47,7 +47,7 @@ func (c *Controller) registerRouter() {
|
||||
engine := gin.Default()
|
||||
engine.Use(c.authorize())
|
||||
engine.POST("/gm/cmd", c.gmCmd)
|
||||
port := config.CONF.HttpPort
|
||||
port := config.GetConfig().HttpPort
|
||||
addr := ":" + strconv.Itoa(int(port))
|
||||
err := engine.Run(addr)
|
||||
if err != nil {
|
||||
|
||||
@@ -18,6 +18,7 @@ func (c *Controller) gmCmd(context *gin.Context) {
|
||||
gmCmdReq := new(GmCmdReq)
|
||||
err := context.ShouldBindJSON(gmCmdReq)
|
||||
if err != nil {
|
||||
logger.Error("parse json error: %v", err)
|
||||
return
|
||||
}
|
||||
rep, err := c.gm.Cmd(context.Request.Context(), &api.CmdRequest{
|
||||
|
||||
@@ -70,6 +70,9 @@ func Run(ctx context.Context, configFile string) error {
|
||||
|
||||
logger.InitLogger("gs_" + APPID)
|
||||
logger.Warn("gs start, appid: %v, gsid: %v", APPID, GSID)
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
gdconf.InitGameDataConfig()
|
||||
|
||||
@@ -86,7 +89,7 @@ func Run(ctx context.Context, configFile string) error {
|
||||
defer gameManager.Close()
|
||||
|
||||
// natsrpc server
|
||||
conn, err := nats.Connect(config.CONF.MQ.NatsUrl)
|
||||
conn, err := nats.Connect(config.GetConfig().MQ.NatsUrl)
|
||||
if err != nil {
|
||||
logger.Error("connect nats error: %v", err)
|
||||
return err
|
||||
@@ -109,7 +112,6 @@ func Run(ctx context.Context, configFile string) error {
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
logger.Warn("gs exit, appid: %v", APPID)
|
||||
time.Sleep(time.Second)
|
||||
return nil
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
|
||||
@@ -20,7 +20,7 @@ type Dao struct {
|
||||
|
||||
func NewDao() (r *Dao, err error) {
|
||||
r = new(Dao)
|
||||
clientOptions := options.Client().ApplyURI(config.CONF.Database.Url).SetMinPoolSize(1).SetMaxPoolSize(10)
|
||||
clientOptions := options.Client().ApplyURI(config.GetConfig().Database.Url).SetMinPoolSize(1).SetMaxPoolSize(10)
|
||||
client, err := mongo.Connect(context.TODO(), clientOptions)
|
||||
if err != nil {
|
||||
logger.Error("mongo connect error: %v", err)
|
||||
@@ -34,8 +34,8 @@ func NewDao() (r *Dao, err error) {
|
||||
r.mongo = client
|
||||
r.db = client.Database("gs_hk4e")
|
||||
r.redis = redis.NewClient(&redis.Options{
|
||||
Addr: config.CONF.Redis.Addr,
|
||||
Password: config.CONF.Redis.Password,
|
||||
Addr: config.GetConfig().Redis.Addr,
|
||||
Password: config.GetConfig().Redis.Password,
|
||||
DB: 0,
|
||||
PoolSize: 10,
|
||||
MinIdleConns: 1,
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"hk4e/gdconf"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"hk4e/gdconf"
|
||||
|
||||
"hk4e/gs/model"
|
||||
)
|
||||
|
||||
|
||||
@@ -31,6 +31,8 @@ type CommandMessage struct {
|
||||
Text string // 命令原始文本
|
||||
Name string // 命令前缀
|
||||
Args map[string]string // 命令参数
|
||||
FuncName string // 函数名
|
||||
Param []string // 函数参数列表
|
||||
}
|
||||
|
||||
// CommandManager 命令管理器
|
||||
@@ -129,6 +131,12 @@ func (c *CommandManager) InputCommand(executor any, text string) {
|
||||
// HandleCommand 处理命令
|
||||
// 主协程接收到命令消息后执行
|
||||
func (c *CommandManager) HandleCommand(cmd *CommandMessage) {
|
||||
if cmd.FuncName != "" {
|
||||
logger.Info("run gm cmd, FuncName: %v, Param: %v", cmd.FuncName, cmd.Param)
|
||||
// TODO 反射调用command_gm.go中的函数并反射解析传入参数类型
|
||||
return
|
||||
}
|
||||
|
||||
executor := cmd.Executor
|
||||
|
||||
// 分割出命令的每个参数
|
||||
|
||||
@@ -63,7 +63,7 @@ func NewGameManager(dao *dao.Dao, messageQueue *mq.MessageQueue, gsId uint32, gs
|
||||
r.dao = dao
|
||||
MESSAGE_QUEUE = messageQueue
|
||||
r.snowflake = alg.NewSnowflakeWorker(int64(gsId))
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
r.clientCmdProtoMap = client_proto.NewClientCmdProtoMap()
|
||||
// 反射调用的方法在启动时测试是否正常防止中途panic
|
||||
r.GetClientProtoObjByName("PingReq")
|
||||
@@ -276,7 +276,6 @@ func (g *GameManager) Close() {
|
||||
},
|
||||
})
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
|
||||
// SendMsgToGate 发送消息给客户端 指定网关
|
||||
|
||||
@@ -112,7 +112,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p
|
||||
switch entry.ArgumentType {
|
||||
case proto.CombatTypeArgument_COMBAT_EVT_BEING_HIT:
|
||||
hitInfo := new(proto.EvtBeingHitInfo)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientProtoObj := g.GetClientProtoObjByName("EvtBeingHitInfo")
|
||||
if clientProtoObj == nil {
|
||||
logger.Error("get client proto obj is nil")
|
||||
@@ -170,7 +170,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p
|
||||
player.CombatInvokeHandler.AddEntry(entry.ForwardType, entry)
|
||||
case proto.CombatTypeArgument_ENTITY_MOVE:
|
||||
entityMoveInfo := new(proto.EntityMoveInfo)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientProtoObj := g.GetClientProtoObjByName("EntityMoveInfo")
|
||||
if clientProtoObj == nil {
|
||||
logger.Error("get client proto obj is nil")
|
||||
@@ -239,7 +239,7 @@ func (g *GameManager) CombatInvocationsNotify(player *model.Player, payloadMsg p
|
||||
player.CombatInvokeHandler.AddEntry(entry.ForwardType, entry)
|
||||
case proto.CombatTypeArgument_COMBAT_ANIMATOR_STATE_CHANGED:
|
||||
evtAnimatorStateChangedInfo := new(proto.EvtAnimatorStateChangedInfo)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientProtoObj := g.GetClientProtoObjByName("EvtAnimatorStateChangedInfo")
|
||||
if clientProtoObj == nil {
|
||||
logger.Error("get client proto obj is nil")
|
||||
@@ -403,7 +403,7 @@ func (g *GameManager) ClientAbilityChangeNotify(player *model.Player, payloadMsg
|
||||
switch abilityInvokeEntry.ArgumentType {
|
||||
case proto.AbilityInvokeArgument_ABILITY_META_ADD_NEW_ABILITY:
|
||||
abilityMetaAddAbility := new(proto.AbilityMetaAddAbility)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientProtoObj := g.GetClientProtoObjByName("AbilityMetaAddAbility")
|
||||
if clientProtoObj == nil {
|
||||
logger.Error("get client proto obj is nil")
|
||||
@@ -433,7 +433,7 @@ func (g *GameManager) ClientAbilityChangeNotify(player *model.Player, payloadMsg
|
||||
worldAvatar.SetAbilityList(abilityList)
|
||||
case proto.AbilityInvokeArgument_ABILITY_META_MODIFIER_CHANGE:
|
||||
abilityMetaModifierChange := new(proto.AbilityMetaModifierChange)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientProtoObj := g.GetClientProtoObjByName("AbilityMetaModifierChange")
|
||||
if clientProtoObj == nil {
|
||||
logger.Error("get client proto obj is nil")
|
||||
|
||||
@@ -23,7 +23,7 @@ type UserInfo struct {
|
||||
// 获取卡池信息
|
||||
func (g *GameManager) GetGachaInfoReq(player *model.Player, payloadMsg pb.Message) {
|
||||
logger.Debug("user get gacha info, uid: %v", player.PlayerID)
|
||||
serverAddr := config.CONF.Hk4e.GachaHistoryServer
|
||||
serverAddr := config.GetConfig().Hk4e.GachaHistoryServer
|
||||
userInfo := &UserInfo{
|
||||
UserId: player.PlayerID,
|
||||
RegisteredClaims: jwt.RegisteredClaims{
|
||||
|
||||
@@ -23,7 +23,7 @@ func (g *GameManager) HandleAbilityStamina(player *model.Player, entry *proto.Ab
|
||||
case proto.AbilityInvokeArgument_ABILITY_MIXIN_COST_STAMINA:
|
||||
// 大剑重击 或 持续技能 耐力消耗
|
||||
costStamina := new(proto.AbilityMixinCostStamina)
|
||||
if config.CONF.Hk4e.ClientProtoProxyEnable {
|
||||
if config.GetConfig().Hk4e.ClientProtoProxyEnable {
|
||||
clientProtoObj := g.GetClientProtoObjByName("AbilityMixinCostStamina")
|
||||
if clientProtoObj == nil {
|
||||
logger.Error("get client proto obj is nil")
|
||||
|
||||
@@ -2,7 +2,6 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"hk4e/gs/api"
|
||||
"hk4e/gs/game"
|
||||
@@ -15,9 +14,12 @@ type GMService struct {
|
||||
}
|
||||
|
||||
func (s *GMService) Cmd(ctx context.Context, req *api.CmdRequest) (*api.CmdReply, error) {
|
||||
// TODO implement me
|
||||
fmt.Println("Cmd", req.FuncName, req.Param)
|
||||
commandTextInput := game.COMMAND_MANAGER.GetCommandTextInput()
|
||||
commandTextInput <- &game.CommandMessage{
|
||||
FuncName: req.FuncName,
|
||||
Param: req.Param,
|
||||
}
|
||||
return &api.CmdReply{
|
||||
Message: "TODO",
|
||||
Message: "OK",
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"hk4e/common/config"
|
||||
"hk4e/node/service"
|
||||
@@ -20,9 +19,12 @@ func Run(ctx context.Context, configFile string) error {
|
||||
|
||||
logger.InitLogger("node")
|
||||
logger.Warn("node start")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
// natsrpc server
|
||||
conn, err := nats.Connect(config.CONF.MQ.NatsUrl)
|
||||
conn, err := nats.Connect(config.GetConfig().MQ.NatsUrl)
|
||||
if err != nil {
|
||||
logger.Error("connect nats error: %v", err)
|
||||
return err
|
||||
@@ -45,7 +47,6 @@ func Run(ctx context.Context, configFile string) error {
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
logger.Warn("node exit")
|
||||
time.Sleep(time.Second)
|
||||
return nil
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"hk4e/common/region"
|
||||
@@ -53,8 +52,7 @@ type ServerInstance struct {
|
||||
type DiscoveryService struct {
|
||||
regionEc2b *random.Ec2b // 全局区服密钥信息
|
||||
serverInstanceMap map[string]*sync.Map // 全部服务器实例集合 key:服务器类型 value:服务器实例集合 -> key:appid value:服务器实例
|
||||
serverAppIdMap map[string]bool // 服务器appid集合 key:appid value:是否存在
|
||||
gsIdCounter uint32 // GSID计数器
|
||||
serverAppIdMap *sync.Map // 服务器appid集合 key:appid value:是否存在
|
||||
}
|
||||
|
||||
func NewDiscoveryService() *DiscoveryService {
|
||||
@@ -62,12 +60,11 @@ func NewDiscoveryService() *DiscoveryService {
|
||||
r.regionEc2b = region.NewRegionEc2b()
|
||||
logger.Info("region ec2b create ok, seed: %v", r.regionEc2b.Seed())
|
||||
r.serverInstanceMap = make(map[string]*sync.Map)
|
||||
r.serverInstanceMap[api.GATE] = &sync.Map{}
|
||||
r.serverInstanceMap[api.GS] = &sync.Map{}
|
||||
r.serverInstanceMap[api.FIGHT] = &sync.Map{}
|
||||
r.serverInstanceMap[api.PATHFINDING] = &sync.Map{}
|
||||
r.serverAppIdMap = make(map[string]bool)
|
||||
r.gsIdCounter = 0
|
||||
r.serverInstanceMap[api.GATE] = new(sync.Map)
|
||||
r.serverInstanceMap[api.GS] = new(sync.Map)
|
||||
r.serverInstanceMap[api.FIGHT] = new(sync.Map)
|
||||
r.serverInstanceMap[api.PATHFINDING] = new(sync.Map)
|
||||
r.serverAppIdMap = new(sync.Map)
|
||||
go r.removeDeadServer()
|
||||
return r
|
||||
}
|
||||
@@ -82,9 +79,9 @@ func (s *DiscoveryService) RegisterServer(ctx context.Context, req *api.Register
|
||||
var appId string
|
||||
for {
|
||||
appId = strings.ToLower(random.GetRandomStr(8))
|
||||
_, exist := s.serverAppIdMap[appId]
|
||||
_, exist := s.serverAppIdMap.Load(appId)
|
||||
if !exist {
|
||||
s.serverAppIdMap[appId] = true
|
||||
s.serverAppIdMap.Store(appId, true)
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -108,12 +105,29 @@ func (s *DiscoveryService) RegisterServer(ctx context.Context, req *api.Register
|
||||
AppId: appId,
|
||||
}
|
||||
if req.ServerType == api.GS {
|
||||
gsId := atomic.AddUint32(&s.gsIdCounter, 1)
|
||||
if gsId > MaxGsId {
|
||||
return nil, errors.New("above max gs count")
|
||||
gsIdUseList := make([]bool, MaxGsId+1)
|
||||
gsIdUseList[0] = true
|
||||
instMap.Range(func(key, value any) bool {
|
||||
serverInstance := value.(*ServerInstance)
|
||||
if serverInstance.gsId > MaxGsId {
|
||||
logger.Error("invalid gs id inst: %v", serverInstance)
|
||||
return true
|
||||
}
|
||||
gsIdUseList[serverInstance.gsId] = true
|
||||
return true
|
||||
})
|
||||
newGsId := uint32(0)
|
||||
for gsId, use := range gsIdUseList {
|
||||
if !use {
|
||||
newGsId = uint32(gsId)
|
||||
break
|
||||
}
|
||||
}
|
||||
inst.gsId = gsId
|
||||
rsp.GsId = gsId
|
||||
if newGsId == 0 {
|
||||
return nil, errors.New("no gs id can use")
|
||||
}
|
||||
inst.gsId = newGsId
|
||||
rsp.GsId = newGsId
|
||||
}
|
||||
return rsp, nil
|
||||
}
|
||||
@@ -250,12 +264,12 @@ func (s *DiscoveryService) GetMainGameServerAppId(ctx context.Context, req *api.
|
||||
return nil, errors.New("no game server found")
|
||||
}
|
||||
appid := ""
|
||||
minGsId := uint32(MaxGsId)
|
||||
mainGsId := uint32(1)
|
||||
instMap.Range(func(key, value any) bool {
|
||||
serverInstance := value.(*ServerInstance)
|
||||
if serverInstance.gsId < minGsId {
|
||||
minGsId = serverInstance.gsId
|
||||
if serverInstance.gsId == mainGsId {
|
||||
appid = serverInstance.appId
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
@@ -57,6 +57,9 @@ func Run(ctx context.Context, configFile string) error {
|
||||
|
||||
logger.InitLogger("pathfinding_" + APPID)
|
||||
logger.Warn("pathfinding start, appid: %v", APPID)
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
messageQueue := mq.NewMessageQueue(api.PATHFINDING, APPID, client)
|
||||
defer messageQueue.Close()
|
||||
@@ -74,7 +77,6 @@ func Run(ctx context.Context, configFile string) error {
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
logger.Warn("pathfinding exit, appid: %v", APPID)
|
||||
time.Sleep(time.Second)
|
||||
return nil
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
|
||||
@@ -11,6 +11,9 @@ func TestAoiManagerGetSurrGridListByGid(t *testing.T) {
|
||||
filePath := "./application.toml"
|
||||
config.InitConfig(filePath)
|
||||
logger.InitLogger("")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
aoiManager := NewAoiManager()
|
||||
aoiManager.SetAoiRange(
|
||||
-150, 150,
|
||||
|
||||
@@ -26,13 +26,14 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
func GetJson[T any](url string, authToken string) (*T, error) {
|
||||
func GetJson[T any](url string, authToken ...string) (*T, error) {
|
||||
logger.Debug("http get req url: %v", url)
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if authToken != "" {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken)
|
||||
if len(authToken) != 0 {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken[0])
|
||||
}
|
||||
rsp, err := httpClient.Do(req)
|
||||
if err != nil {
|
||||
@@ -52,13 +53,14 @@ func GetJson[T any](url string, authToken string) (*T, error) {
|
||||
return responseData, nil
|
||||
}
|
||||
|
||||
func GetRaw(url string, authToken string) (string, error) {
|
||||
func GetRaw(url string, authToken ...string) (string, error) {
|
||||
logger.Debug("http get req url: %v", url)
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if authToken != "" {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken)
|
||||
if len(authToken) != 0 {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken[0])
|
||||
}
|
||||
rsp, err := httpClient.Do(req)
|
||||
if err != nil {
|
||||
@@ -69,21 +71,23 @@ func GetRaw(url string, authToken string) (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
logger.Debug("http get rsp data: %v", string(data))
|
||||
return string(data), nil
|
||||
}
|
||||
|
||||
func PostJson[T any](url string, body any, authToken string) (*T, error) {
|
||||
func PostJson[T any](url string, body any, authToken ...string) (*T, error) {
|
||||
reqData, err := json.Marshal(body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logger.Debug("http post req url: %v", url)
|
||||
req, err := http.NewRequest("POST", url, bytes.NewBuffer(reqData))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
if authToken != "" {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken)
|
||||
if len(authToken) != 0 {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken[0])
|
||||
}
|
||||
rsp, err := httpClient.Do(req)
|
||||
if err != nil {
|
||||
@@ -103,14 +107,15 @@ func PostJson[T any](url string, body any, authToken string) (*T, error) {
|
||||
return responseData, nil
|
||||
}
|
||||
|
||||
func PostRaw(url string, body string, authToken string) (string, error) {
|
||||
func PostRaw(url string, body string, authToken ...string) (string, error) {
|
||||
logger.Debug("http post req url: %v", url)
|
||||
req, err := http.NewRequest("POST", url, strings.NewReader(body))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
if authToken != "" {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken)
|
||||
if len(authToken) != 0 {
|
||||
req.Header.Set("Authorization", "Bearer"+" "+authToken[0])
|
||||
}
|
||||
rsp, err := httpClient.Do(req)
|
||||
if err != nil {
|
||||
@@ -121,5 +126,6 @@ func PostRaw(url string, body string, authToken string) (string, error) {
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
logger.Debug("http post rsp data: %v", string(rspData))
|
||||
return string(rspData), nil
|
||||
}
|
||||
|
||||
@@ -66,15 +66,25 @@ func InitLogger(appName string) {
|
||||
log.SetFlags(0)
|
||||
LOG = new(Logger)
|
||||
LOG.AppName = appName
|
||||
LOG.Level = LOG.getLevelInt(config.CONF.Logger.Level)
|
||||
LOG.Mode = LOG.getModeInt(config.CONF.Logger.Mode)
|
||||
LOG.Track = config.CONF.Logger.Track
|
||||
LOG.MaxSize = config.CONF.Logger.MaxSize
|
||||
LOG.Level = LOG.getLevelInt(config.GetConfig().Logger.Level)
|
||||
LOG.Mode = LOG.getModeInt(config.GetConfig().Logger.Mode)
|
||||
LOG.Track = config.GetConfig().Logger.Track
|
||||
LOG.MaxSize = config.GetConfig().Logger.MaxSize
|
||||
LOG.LogInfoChan = make(chan *LogInfo, 1000)
|
||||
LOG.File = nil
|
||||
go LOG.doLog()
|
||||
}
|
||||
|
||||
func CloseLogger() {
|
||||
// 等待所有日志打印完毕
|
||||
for {
|
||||
if len(LOG.LogInfoChan) == 0 {
|
||||
break
|
||||
}
|
||||
time.Sleep(time.Millisecond * 100)
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Logger) doLog() {
|
||||
for {
|
||||
logInfo := <-l.LogInfoChan
|
||||
|
||||
@@ -18,8 +18,11 @@ import (
|
||||
func main() {
|
||||
config.InitConfig("application.toml")
|
||||
logger.InitLogger("robot")
|
||||
defer func() {
|
||||
logger.CloseLogger()
|
||||
}()
|
||||
|
||||
config.CONF.Hk4e.ClientProtoProxyEnable = false
|
||||
config.GetConfig().Hk4e.ClientProtoProxyEnable = false
|
||||
|
||||
// // DPDK模式需开启
|
||||
// err := engine.InitEngine("00:0C:29:3E:3E:DF", "192.168.199.199", "255.255.255.0", "192.168.199.1")
|
||||
@@ -39,11 +42,8 @@ func main() {
|
||||
s := <-c
|
||||
switch s {
|
||||
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
|
||||
|
||||
// // DPDK模式需开启
|
||||
// engine.StopEngine()
|
||||
|
||||
time.Sleep(time.Second)
|
||||
return
|
||||
case syscall.SIGHUP:
|
||||
default:
|
||||
@@ -85,7 +85,7 @@ func runRobot(name string) {
|
||||
pingSeq++
|
||||
// 通过这个接口发消息给服务器
|
||||
session.SendMsg(cmd.PingReq, &proto.PingReq{
|
||||
ClientTime: uint32(time.Now().UnixMilli()),
|
||||
ClientTime: uint32(time.Now().Unix()),
|
||||
Seq: pingSeq,
|
||||
})
|
||||
case protoMsg := <-session.RecvChan:
|
||||
|
||||
@@ -26,7 +26,7 @@ type DispatchInfo struct {
|
||||
|
||||
func GetDispatchInfo(regionListUrl string, curRegionUrl string, regionListParam string, curRegionParam string, keyId string) (*DispatchInfo, error) {
|
||||
logger.Info("http get url: %v", regionListUrl+"/query_region_list"+regionListParam)
|
||||
regionListBase64, err := httpclient.GetRaw(regionListUrl+"/query_region_list"+regionListParam, "")
|
||||
regionListBase64, err := httpclient.GetRaw(regionListUrl + "/query_region_list" + regionListParam)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -49,7 +49,7 @@ func GetDispatchInfo(regionListUrl string, curRegionUrl string, regionListParam
|
||||
curRegionUrl = selectRegion.DispatchUrl
|
||||
}
|
||||
logger.Info("http get url: %v", curRegionUrl+curRegionParam)
|
||||
regionCurrJson, err := httpclient.GetRaw(curRegionUrl+curRegionParam, "")
|
||||
regionCurrJson, err := httpclient.GetRaw(curRegionUrl + curRegionParam)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -122,7 +122,7 @@ func AccountLogin(url string, account string, password string) (*AccountInfo, er
|
||||
IsCrypto: true,
|
||||
}
|
||||
logger.Info("http post url: %v", url+"/hk4e_global/mdk/shield/api/login")
|
||||
loginResult, err := httpclient.PostJson[api.LoginResult](url+"/hk4e_global/mdk/shield/api/login", loginAccountRequestJson, "")
|
||||
loginResult, err := httpclient.PostJson[api.LoginResult](url+"/hk4e_global/mdk/shield/api/login", loginAccountRequestJson)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -148,7 +148,7 @@ func AccountLogin(url string, account string, password string) (*AccountInfo, er
|
||||
Data: string(loginTokenDataJson),
|
||||
}
|
||||
logger.Info("http post url: %v", url+"/hk4e_global/combo/granter/login/v2/login")
|
||||
comboTokenRsp, err := httpclient.PostJson[api.ComboTokenRsp](url+"/hk4e_global/combo/granter/login/v2/login", comboTokenReq, "")
|
||||
comboTokenRsp, err := httpclient.PostJson[api.ComboTokenRsp](url+"/hk4e_global/combo/granter/login/v2/login", comboTokenReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user