添加更新房间设置和用户房间的状态管理

This commit is contained in:
milimoe 2025-04-13 01:21:42 +08:00
parent 2391d83aec
commit 333bdc72aa
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
3 changed files with 83 additions and 8 deletions

View File

@ -118,8 +118,8 @@ namespace Milimoe.FunGame.Server.Controller
UpdatePassword(data, result);
break;
case DataRequestType.Room_GetRoomSettings:
GetRoomSettings(data, result);
case DataRequestType.Room_UpdateRoomSettings:
UpdateRoomSettings(data, result);
break;
case DataRequestType.Room_GetRoomPlayerCount:
@ -131,7 +131,7 @@ namespace Milimoe.FunGame.Server.Controller
break;
case DataRequestType.UserCenter_GetUserProfile:
GetUserProfile(data, result);
GetUserProfile(result);
break;
case DataRequestType.UserCenter_GetUserStatistics:
@ -355,6 +355,7 @@ namespace Milimoe.FunGame.Server.Controller
{
FunGameSystem.RoomList.IntoRoom(roomid, Server.User);
Server.InRoom = FunGameSystem.RoomList[roomid];
Server.User.OnlineState = OnlineState.InRoom;
await Server.SendClients(Server.Listener.ClientList.Where(c => c != null && roomid == c.InRoom.Roomid && c.User.Id != 0),
SocketMessageType.Chat, Server.User.Username, DateTimeUtility.GetNowShortTime() + " [ " + Server.User.Username + " ] 进入了房间。");
result = true;
@ -549,12 +550,15 @@ namespace Milimoe.FunGame.Server.Controller
{
if (FunGameSystem.GameModuleLoader != null && FunGameSystem.GameModuleLoader.ModuleServers.ContainsKey(room.GameModule))
{
room.RoomState = RoomState.Gaming;
Server.NowGamingServer = FunGameSystem.GameModuleLoader.GetServerMode(room.GameModule);
Server.User.OnlineState = OnlineState.Gaming;
Dictionary<string, IServerModel> all = Server.Listener.UserList.Cast<IServerModel>().ToDictionary(k => k.User.Username, v => v);
// 给其他玩家赋值模组服务器
foreach (IServerModel model in all.Values.Where(s => s.User.Username != Server.User.Username))
{
model.NowGamingServer = Server.NowGamingServer;
model.User.OnlineState = OnlineState.Gaming;
}
GamingObject obj = new(room, users, Server, all);
if (Server.NowGamingServer.StartServer(obj))
@ -778,13 +782,49 @@ namespace Milimoe.FunGame.Server.Controller
#region Room
/// <summary>
/// 获取房间设置
/// 更新房间设置
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private static void GetRoomSettings(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
private void UpdateRoomSettings(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
bool result = false;
string msg = "";
string room = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
RoomType newType = DataRequest.GetDictionaryJsonObject<RoomType>(requestData, "type");
string newPassword = DataRequest.GetDictionaryJsonObject<string>(requestData, "password") ?? "";
int newMaxUsers = DataRequest.GetDictionaryJsonObject<int>(requestData, "maxUsers");
string newModule = DataRequest.GetDictionaryJsonObject<string>(requestData, "module") ?? "";
string newMap = DataRequest.GetDictionaryJsonObject<string>(requestData, "map") ?? "";
User user = Server.User;
if (room != "-1" && FunGameSystem.RoomList.IsExist(room))
{
Room r = FunGameSystem.RoomList[room];
if (user.Id != r.RoomMaster.Id)
{
msg = "更新失败,只有房主才可以更新房间设置。";
}
else
{
result = true;
ServerHelper.WriteLine("[UpdateRoomSettings] User: " + user.Username + " RoomID: " + r.Roomid);
if (r.RoomState == RoomState.Created)
{
r.RoomType = newType;
r.Password = newPassword;
r.MaxUsers = newMaxUsers;
r.GameModule = newModule;
r.GameMap = newMap;
}
else
{
msg = "更新失败,只能在房间状态稳定时更新其设置。";
}
}
}
resultData.Add("result", result);
resultData.Add("msg", msg);
resultData.Add("room", room);
}
/// <summary>
@ -852,6 +892,7 @@ namespace Milimoe.FunGame.Server.Controller
private void StartMatching(RoomType type, User user)
{
_isMatching = true;
if (user.OnlineState == OnlineState.Online) user.OnlineState = OnlineState.Matching;
ServerHelper.WriteLine(Server.GetClientName() + " 开始匹配。类型:" + RoomSet.GetTypeString(type));
TaskUtility.NewTask(async () =>
{
@ -879,6 +920,7 @@ namespace Milimoe.FunGame.Server.Controller
if (_isMatching)
{
ServerHelper.WriteLine(Server.GetClientName() + " 取消了匹配。");
if (Server.User.OnlineState == OnlineState.Matching) Server.User.OnlineState = OnlineState.Online;
_isMatching = false;
}
}
@ -975,9 +1017,8 @@ namespace Milimoe.FunGame.Server.Controller
/// <summary>
/// 获取用户资料信息
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void GetUserProfile(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
private void GetUserProfile(Dictionary<string, object> resultData)
{
// TODO
}

View File

@ -83,6 +83,8 @@ namespace Milimoe.FunGame.Server.Model
NowGamingServer.CloseAnonymousServer(this);
}
NowGamingServer = null;
User.OnlineState = OnlineState.InRoom;
if (User.Id == InRoom.RoomMaster.Id) InRoom.RoomState = RoomState.Created;
return true;
}
@ -388,6 +390,7 @@ namespace Milimoe.FunGame.Server.Model
FunGameSystem.RoomList.CancelReady(roomid, User);
FunGameSystem.RoomList.QuitRoom(roomid, User);
Room Room = FunGameSystem.RoomList[roomid] ?? General.HallInstance;
User.OnlineState = OnlineState.Online;
// 是否是房主
if (isMaster)
{
@ -476,6 +479,7 @@ namespace Milimoe.FunGame.Server.Model
{
// 创建User对象
User = Factory.GetUser(_dsUser);
User.OnlineState = OnlineState.Online;
// 检查有没有重复登录的情况
await ForceLogOutDuplicateLogonUser();
// 添加至玩家列表
@ -502,6 +506,7 @@ namespace Milimoe.FunGame.Server.Model
{
if (User.Id != 0 && this != null)
{
User.OnlineState = OnlineState.Offline;
_checkLoginKey = Guid.Empty;
_logoutTime = DateTime.Now.Ticks;
int TotalMinutes = Convert.ToInt32((new DateTime(_logoutTime) - new DateTime(_loginTime)).TotalMinutes);

View File

@ -250,6 +250,35 @@ namespace Milimoe.FunGame.WebAPI.Controllers
return StatusCode(500, response);
}
/// <summary>
/// 更新房间设置
/// </summary>
[HttpPost("updateroomsettings")]
public async Task<IActionResult> UpdateRoomSettings([FromBody] Dictionary<string, object> data)
{
PayloadModel<DataRequestType> response = new()
{
Event = "room_updatesettings",
RequestType = DataRequestType.Room_UpdateRoomSettings
};
try
{
Dictionary<string, object> result = await model.DataRequestController.GetResultData(DataRequestType.Room_UpdateRoomSettings, data);
response.StatusCode = 200;
response.Data = result;
return Ok(response);
}
catch (Exception e)
{
_logger.LogError("Error: {e}", e);
}
response.StatusCode = 500;
response.Message = "服务器暂时无法处理此请求。";
return StatusCode(500, response);
}
/// <summary>
/// 获取房间内玩家数量
/// </summary>