mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-05-14 05:29: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() ?? "";
|
string client = Console.ReadLine() ?? "";
|
||||||
if (client != "" && server != null)
|
if (client != "" && server != null)
|
||||||
{
|
{
|
||||||
await Kick((ServerModel<T>)server.ClientList[client]);
|
await Kick(server.ClientList[client]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -35,7 +35,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
string user = Console.ReadLine() ?? "";
|
string user = Console.ReadLine() ?? "";
|
||||||
if (user != "" && server != null)
|
if (user != "" && server != null)
|
||||||
{
|
{
|
||||||
await ForceLogOut((ServerModel<T>)server.UserList[user]);
|
await ForceLogOut(server.UserList[user]);
|
||||||
}
|
}
|
||||||
break;
|
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("您已被服务器管理员踢出此服务器。");
|
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("您已被服务器管理员强制下线。");
|
await clientModel.ForceLogOut("您已被服务器管理员强制下线。");
|
||||||
}
|
}
|
||||||
|
@ -456,15 +456,24 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
await Send(SocketMessageType.ForceLogout, msg);
|
await Send(SocketMessageType.ForceLogout, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ForceLogOutDuplicateLogonUser()
|
public async Task ForceLogOutDuplicateLogonUser(bool checkGlobal = true)
|
||||||
{
|
{
|
||||||
if (User.Id != 0)
|
if (User.Id != 0)
|
||||||
{
|
{
|
||||||
string user = User.Username;
|
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 + " 重复登录!");
|
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)
|
if (User.Id != 0 && this != null)
|
||||||
{
|
{
|
||||||
Listener.UserList.Add(User.Username, this);
|
Listener.UserList.Add(User.Username, this);
|
||||||
|
FunGameSystem.UserList.Add(User.Username, this);
|
||||||
_username = User.Username;
|
_username = User.Username;
|
||||||
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Username + " 已添加");
|
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Username + " 已添加");
|
||||||
// 更新最后登录时间、IP地址
|
// 更新最后登录时间、IP地址
|
||||||
@ -522,6 +532,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
else ServerHelper.WriteLine("OnlinePlayers: 无法更新玩家 " + User.Username + " 的游戏时长");
|
else ServerHelper.WriteLine("OnlinePlayers: 无法更新玩家 " + User.Username + " 的游戏时长");
|
||||||
if (Listener.UserList.Remove(User.Username))
|
if (Listener.UserList.Remove(User.Username))
|
||||||
{
|
{
|
||||||
|
FunGameSystem.UserList.Remove(User.Username);
|
||||||
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Username + " 已移除");
|
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Username + " 已移除");
|
||||||
User = General.UnknownUserInstance;
|
User = General.UnknownUserInstance;
|
||||||
return true;
|
return true;
|
||||||
|
@ -272,6 +272,12 @@ namespace Milimoe.FunGame.Server.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
// 检查重复登录
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return (success, dsUser, msg, key);
|
return (success, dsUser, msg, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using Milimoe.FunGame.Core.Api.Transmittal;
|
using Milimoe.FunGame.Core.Api.Transmittal;
|
||||||
using Milimoe.FunGame.Core.Api.Utility;
|
using Milimoe.FunGame.Core.Api.Utility;
|
||||||
|
using Milimoe.FunGame.Core.Interface.Base;
|
||||||
using Milimoe.FunGame.Core.Library.Common.Addon;
|
using Milimoe.FunGame.Core.Library.Common.Addon;
|
||||||
using Milimoe.FunGame.Core.Library.Constant;
|
using Milimoe.FunGame.Core.Library.Constant;
|
||||||
using Milimoe.FunGame.Core.Library.SQLScript.Common;
|
using Milimoe.FunGame.Core.Library.SQLScript.Common;
|
||||||
@ -26,6 +27,11 @@ namespace Milimoe.FunGame.Server.Services
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static RoomList RoomList { get; } = new();
|
public static RoomList RoomList { get; } = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 在线用户列表(如果需要统一管理用户在线的话用这个)
|
||||||
|
/// </summary>
|
||||||
|
public static ConcurrentModelList<IServerModel> UserList { get; } = [];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Server实际安装的模组
|
/// Server实际安装的模组
|
||||||
/// </summary>
|
/// </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