Files
bl/logic/server.go
昔念 d84100a52f ```
refactor(controller): 重构ParseCmd函数并优化Init方法

- 修改ParseCmd函数参数,移除不必要的泛型参数T
- 为Init函数添加详细注释说明参数含义
- 优化getCmd函数的注释和代码结构
- 重命名ParseCmdTagWithStructField为parseCmdTagWithStructField以符合私有函数命名规范

refactor(pet_info): 统一玩家参数命名从c到player

- 将pet_info.go中所有方法的player参数名从c改为player
- 保持代码逻辑不变,仅统一参数命名规范
- 更新相关
2025-12-25 12:21:15 +08:00

77 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"blazing/common/data/xmlres"
"blazing/common/rpc"
"blazing/common/socket"
"blazing/cool"
"blazing/logic/controller"
blservice "blazing/modules/blazing/service"
"fmt"
"log"
"net"
"github.com/gogf/gf/v2/util/gconv"
)
const (
minRandomPort = 10000
maxRandomPort = 60000
maxPortRetryCount = 5
)
var candidatePorts = cool.Config.GamePort
// determinePort 确定服务器使用的端口
func determinePort() (int, error) {
// 尝试从指定端口列表中找可用端口最多尝试maxPortRetryCount轮
for i := 0; i < maxPortRetryCount; i++ {
// 遍历指定的端口列表
for _, port := range candidatePorts {
if isPortAvailable(port) {
return int(port), nil
}
log.Printf("Port %d is not available, checking next...", port)
}
log.Printf("All candidate ports are in use, retrying round %d...", i+1)
}
return 0, fmt.Errorf("failed to find available port after %d rounds of checking", maxPortRetryCount)
}
// isPortAvailable 检查端口是否可用
func isPortAvailable(port uint64) bool {
address := fmt.Sprintf(":%d", port)
listener, err := net.Listen("tcp", address)
if err != nil {
return false
}
defer listener.Close()
return true
}
// Start 启动服务器
// 如果id是0,那就是login server
func Start(serverID uint16) {
// 确定端口
port, err := determinePort()
if err != nil {
log.Fatalf("Failed to determine port: %v", err)
}
server := socket.NewServer(
socket.WithCORS(),
socket.WithPort(port),
)
// go func() {
rpcClient := rpc.StartClient(serverID, uint16(port), server)
controller.Maincontroller.RPCClient = *rpcClient //将RPC赋值Start
controller.Maincontroller.Port = uint16(port) //赋值服务器ID
controller.Init(true)
xmlres.Initfile()
blservice.NewLoginServiceService().SetServerID(serverID, gconv.Uint16(port))
server.Boot()
}