mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-05-11 20:19:34 +08:00
重复登录检查增强;更新 readme
This commit is contained in:
parent
ceffccb2d2
commit
5f80e5934b
@ -25,7 +25,7 @@ namespace Milimoe.FunGame.Server.Model
|
||||
string client = Console.ReadLine() ?? "";
|
||||
if (client != "" && server != null)
|
||||
{
|
||||
await Kick((ServerModel<T>)server.ClientList[client]);
|
||||
await Kick(server.ClientList[client]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -35,7 +35,7 @@ namespace Milimoe.FunGame.Server.Model
|
||||
string user = Console.ReadLine() ?? "";
|
||||
if (user != "" && server != null)
|
||||
{
|
||||
await ForceLogOut((ServerModel<T>)server.UserList[user]);
|
||||
await ForceLogOut(server.UserList[user]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -76,12 +76,12 @@ namespace Milimoe.FunGame.Server.Model
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task Kick<T>(ServerModel<T> clientModel) where T : ISocketMessageProcessor
|
||||
public static async Task Kick(IServerModel clientModel)
|
||||
{
|
||||
await clientModel.Kick("您已被服务器管理员踢出此服务器。");
|
||||
}
|
||||
|
||||
public static async Task ForceLogOut<T>(ServerModel<T> clientModel) where T : ISocketMessageProcessor
|
||||
public static async Task ForceLogOut(IServerModel clientModel)
|
||||
{
|
||||
await clientModel.ForceLogOut("您已被服务器管理员强制下线。");
|
||||
}
|
||||
|
@ -456,15 +456,24 @@ namespace Milimoe.FunGame.Server.Model
|
||||
await Send(SocketMessageType.ForceLogout, msg);
|
||||
}
|
||||
|
||||
public async Task ForceLogOutDuplicateLogonUser()
|
||||
public async Task ForceLogOutDuplicateLogonUser(bool checkGlobal = true)
|
||||
{
|
||||
if (User.Id != 0)
|
||||
{
|
||||
string user = User.Username;
|
||||
if (Listener.UserList.ContainsKey(user))
|
||||
if (Listener.UserList.ContainsKey(user) || (checkGlobal && FunGameSystem.UserList.ContainsKey(user)))
|
||||
{
|
||||
IServerModel model;
|
||||
try
|
||||
{
|
||||
model = Listener.UserList[user];
|
||||
}
|
||||
catch
|
||||
{
|
||||
model = FunGameSystem.UserList[user];
|
||||
}
|
||||
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + user + " 重复登录!");
|
||||
await ((ServerModel<T>)Listener.UserList[user]).ForceLogOut("您的账号在别处登录,已强制下线。");
|
||||
await model.ForceLogOut("您的账号在别处登录,已强制下线。");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -496,6 +505,7 @@ namespace Milimoe.FunGame.Server.Model
|
||||
if (User.Id != 0 && this != null)
|
||||
{
|
||||
Listener.UserList.Add(User.Username, this);
|
||||
FunGameSystem.UserList.Add(User.Username, this);
|
||||
_username = User.Username;
|
||||
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Username + " 已添加");
|
||||
// 更新最后登录时间、IP地址
|
||||
@ -522,6 +532,7 @@ namespace Milimoe.FunGame.Server.Model
|
||||
else ServerHelper.WriteLine("OnlinePlayers: 无法更新玩家 " + User.Username + " 的游戏时长");
|
||||
if (Listener.UserList.Remove(User.Username))
|
||||
{
|
||||
FunGameSystem.UserList.Remove(User.Username);
|
||||
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Username + " 已移除");
|
||||
User = General.UnknownUserInstance;
|
||||
return true;
|
||||
|
@ -272,6 +272,12 @@ namespace Milimoe.FunGame.Server.Services
|
||||
}
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
// 检查重复登录
|
||||
|
||||
}
|
||||
|
||||
return (success, dsUser, msg, key);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
using Milimoe.FunGame.Core.Api.Transmittal;
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Interface.Base;
|
||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Library.SQLScript.Common;
|
||||
@ -26,6 +27,11 @@ namespace Milimoe.FunGame.Server.Services
|
||||
/// </summary>
|
||||
public static RoomList RoomList { get; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 在线用户列表(如果需要统一管理用户在线的话用这个)
|
||||
/// </summary>
|
||||
public static ConcurrentModelList<IServerModel> UserList { get; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Server实际安装的模组
|
||||
/// </summary>
|
||||
|
41
README.md
41
README.md
@ -1,3 +1,40 @@
|
||||
# FunGame-Server
|
||||
# 项目简介
|
||||
|
||||
基于.NET 8的FunGame服务器端程序
|
||||
FunGameServer 是 [FunGame](https://github.com/project-redbud/FunGame-Core) 的服务器端实现,基于 ASP.NET Core Web API,轻量、高性能、跨平台。
|
||||
|
||||
它支持多种服务模式,使得服务器端的扩展和集成更加灵活:
|
||||
|
||||
- Socket 服务:支持传统的 TCP 通信。
|
||||
- WebSocket 服务:支持基于 Web 的实时通信。
|
||||
- WebAPI 服务:提供标准的 RESTful API 接口。
|
||||
|
||||
# 使用
|
||||
|
||||
本项目将构建两个服务器端程序:`FunGameServer` 和 `FunGameWebAPI`。
|
||||
|
||||
FunGameServer 提供 Socket 和 WebSocket 的通信服务,但只允许开启其中一种,不能同时开启。
|
||||
|
||||
FunGameWebAPI 提供 WebSocket 和 RESTful API 共存的服务,共享数据处理。
|
||||
|
||||
# 插件和模组集成
|
||||
|
||||
实现 FunGame 的 `GameModuleServer` 和使用基于 ASP.NET Core Web API 的 `Controller` 可以轻松扩展服务器功能。
|
||||
|
||||
## Modules 和 GameModuleServer
|
||||
|
||||
具体的实现可以参考示例代码:[示例代码](https://github.com/project-redbud/FunGame-Core/tree/master/Library/Common/Addon/Example)
|
||||
|
||||
此类 DLL 需要放在服务器编译目录的 `Modules` 文件夹下,需要连同依赖的 DLL 一起复制。
|
||||
|
||||
## Web API Controller
|
||||
|
||||
集成 ASP.NET Core Controller 的方式:
|
||||
|
||||
- 新建一个 ASP.NET Core 类库项目,新建一个类,继承并实现 `WebAPIPlugin`;
|
||||
- 新建一个 ASP.NET Core Controller 类;
|
||||
- 编译项目为 DLL 后,放入服务器编译目录的 `Plugins` 文件夹下,需要连同依赖的 DLL 一起复制;
|
||||
- 启动 `FunGameWebAPI.exe`,`FunGameServer.exe` 没有这个功能。
|
||||
|
||||
# 文档
|
||||
|
||||
需要更多帮助请查看 [FunGame 开发文档](https://project-redbud.github.io/),此文档不保证及时更新。
|
||||
|
Loading…
x
Reference in New Issue
Block a user