Files
bl/logic/server.go
昔念 8983222dcb ```
refactor(logic): 重构服务器启动逻辑与任务状态管理

- 移除了 `gcmd` 包在 controller 中的直接使用,改为通过参数传递端口和服务器类型
- 统一使用 `GetTask` 和 `SetTask` 方法替代直接访问 `TaskList` 数组,提升代码可维护性
- 修改了战斗逻辑中部分调试打印语句,并优化战斗循环结束日志输出
- 调整了新手玩家初始化流程,默认完成新手任务4
- 更新了数据库模型字段及结构定义,如增加 `max_ts` 字段、扩展 `TaskList` 长度等
- 改进了宠物添加逻辑,采用 SQL 方式确保捕捉时间唯一递增
- 清理了无用或注释掉的旧代码块
2025-12-08 17:03:43 +08:00

78 lines
1.9 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
}
// 如果id是0,那就是login server
func Start(serverid uint16) {
// 确定端口
port, err := determinePort()
if err != nil {
log.Fatalf("Failed to determine port: %v", err)
}
ser := socket.NewServer(
socket.WithCORS(),
socket.WithPort(port),
)
// go func() {
t := rpc.StartClient(serverid, uint16(port), ser)
controller.Maincontroller.RPCClient = *t //将RPC赋值Start
controller.Maincontroller.Port = uint16(port) //赋值服务器ID
controller.Init(true)
xmlres.Initfile()
blservice.NewLoginServiceService().SetServerID(serverid, gconv.Uint16(port))
ser.Boot()
}