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