2025-07-06 01:49:19 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2025-11-25 16:36:55 +08:00
|
|
|
|
"blazing/common/data/xmlres"
|
2025-07-06 19:31:30 +08:00
|
|
|
|
"blazing/common/rpc"
|
2025-07-06 17:05:10 +08:00
|
|
|
|
"blazing/common/socket"
|
2025-09-04 02:00:57 +08:00
|
|
|
|
|
2025-07-06 01:49:19 +08:00
|
|
|
|
"blazing/cool"
|
2025-07-06 17:05:10 +08:00
|
|
|
|
"blazing/logic/controller"
|
2025-09-14 01:35:16 +08:00
|
|
|
|
|
2025-09-04 02:00:57 +08:00
|
|
|
|
blservice "blazing/modules/blazing/service"
|
2025-07-06 19:31:30 +08:00
|
|
|
|
|
2025-07-06 01:49:19 +08:00
|
|
|
|
"fmt"
|
|
|
|
|
|
"log"
|
|
|
|
|
|
"net"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
|
minRandomPort = 10000
|
|
|
|
|
|
maxRandomPort = 60000
|
|
|
|
|
|
maxPortRetryCount = 5
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var defaultPort = gconv.Int(cool.Config.Port) //读入默认的端口
|
2025-10-08 17:16:54 +08:00
|
|
|
|
var candidatePorts = cool.Config.GamePort
|
2025-07-06 01:49:19 +08:00
|
|
|
|
|
|
|
|
|
|
// determinePort 确定服务器使用的端口
|
2025-07-17 05:20:30 +08:00
|
|
|
|
func determinePort(serverid uint16) (int, error) {
|
2025-10-08 16:54:03 +08:00
|
|
|
|
// 服务器ID为0时使用默认端口
|
2025-07-06 01:49:19 +08:00
|
|
|
|
if serverid == 0 {
|
|
|
|
|
|
return defaultPort, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-08 16:54:03 +08:00
|
|
|
|
// 尝试从指定端口列表中找可用端口,最多尝试maxPortRetryCount轮
|
2025-07-06 01:49:19 +08:00
|
|
|
|
for i := 0; i < maxPortRetryCount; i++ {
|
2025-10-08 16:54:03 +08:00
|
|
|
|
// 遍历指定的端口列表
|
|
|
|
|
|
for _, port := range candidatePorts {
|
|
|
|
|
|
if isPortAvailable(port) {
|
2025-10-08 17:16:54 +08:00
|
|
|
|
return int(port), nil
|
2025-10-08 16:54:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
log.Printf("Port %d is not available, checking next...", port)
|
2025-07-06 01:49:19 +08:00
|
|
|
|
}
|
2025-10-08 16:54:03 +08:00
|
|
|
|
log.Printf("All candidate ports are in use, retrying round %d...", i+1)
|
2025-07-06 01:49:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-08 16:54:03 +08:00
|
|
|
|
return 0, fmt.Errorf("failed to find available port after %d rounds of checking", maxPortRetryCount)
|
2025-07-06 01:49:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// isPortAvailable 检查端口是否可用
|
2025-10-08 17:16:54 +08:00
|
|
|
|
func isPortAvailable(port uint64) bool {
|
2025-07-06 01:49:19 +08:00
|
|
|
|
address := fmt.Sprintf(":%d", port)
|
|
|
|
|
|
listener, err := net.Listen("tcp", address)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
defer listener.Close()
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
2025-07-06 17:05:10 +08:00
|
|
|
|
|
|
|
|
|
|
// 如果id是0,那就是login server
|
2025-07-17 05:20:30 +08:00
|
|
|
|
func Start(serverid uint16) {
|
2025-10-27 09:36:49 +00:00
|
|
|
|
|
2025-07-06 17:05:10 +08:00
|
|
|
|
if serverid != 0 { //logic服务器
|
|
|
|
|
|
// 确定端口
|
|
|
|
|
|
port, err := determinePort(serverid)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Fatalf("Failed to determine port: %v", err)
|
|
|
|
|
|
}
|
2025-10-10 23:59:54 +08:00
|
|
|
|
ser := socket.NewServer(
|
|
|
|
|
|
socket.WithCORS(),
|
|
|
|
|
|
socket.WithPort(port),
|
2025-10-27 09:36:49 +00:00
|
|
|
|
)
|
2025-07-06 22:58:39 +08:00
|
|
|
|
// go func() {
|
2025-10-10 23:59:54 +08:00
|
|
|
|
t := rpc.StartClient(serverid, uint16(port), ser)
|
2025-08-15 22:44:28 +08:00
|
|
|
|
|
2025-07-17 05:20:30 +08:00
|
|
|
|
controller.Maincontroller.RPCClient = *t //将RPC赋值Start
|
2025-07-15 14:00:32 +00:00
|
|
|
|
controller.Maincontroller.Port = uint16(port) //赋值服务器ID
|
2025-11-25 16:36:55 +08:00
|
|
|
|
xmlres.Initfile()
|
2025-10-15 22:53:14 +00:00
|
|
|
|
blservice.NewLoginServiceService().SetServerID(serverid, gconv.Uint16(port))
|
2025-10-10 23:59:54 +08:00
|
|
|
|
ser.Boot()
|
2025-07-06 17:05:10 +08:00
|
|
|
|
|
|
|
|
|
|
} else {
|
2025-07-06 19:31:30 +08:00
|
|
|
|
go rpc.StartServer()
|
|
|
|
|
|
|
2025-07-06 17:05:10 +08:00
|
|
|
|
//go rpcserver() //对login tcp启动
|
|
|
|
|
|
//ants.Submit(rpcserver)
|
2025-07-07 19:58:23 +08:00
|
|
|
|
socket.NewServer(
|
|
|
|
|
|
socket.WithCORS(),
|
|
|
|
|
|
socket.WithPort(defaultPort),
|
2025-10-27 09:36:49 +00:00
|
|
|
|
).Boot()
|
2025-07-06 17:05:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|