diff --git a/FunGame.Server/Controllers/DataRequestController.cs b/FunGame.Server/Controllers/DataRequestController.cs index deafc03..375a050 100644 --- a/FunGame.Server/Controllers/DataRequestController.cs +++ b/FunGame.Server/Controllers/DataRequestController.cs @@ -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 all = Server.Listener.UserList.Cast().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 /// - /// 获取房间设置 + /// 更新房间设置 /// /// /// - private static void GetRoomSettings(Dictionary requestData, Dictionary resultData) + private void UpdateRoomSettings(Dictionary requestData, Dictionary resultData) { - // TODO + bool result = false; + string msg = ""; + string room = DataRequest.GetDictionaryJsonObject(requestData, "roomid") ?? "-1"; + RoomType newType = DataRequest.GetDictionaryJsonObject(requestData, "type"); + string newPassword = DataRequest.GetDictionaryJsonObject(requestData, "password") ?? ""; + int newMaxUsers = DataRequest.GetDictionaryJsonObject(requestData, "maxUsers"); + string newModule = DataRequest.GetDictionaryJsonObject(requestData, "module") ?? ""; + string newMap = DataRequest.GetDictionaryJsonObject(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); } /// @@ -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 /// /// 获取用户资料信息 /// - /// /// - private void GetUserProfile(Dictionary requestData, Dictionary resultData) + private void GetUserProfile(Dictionary resultData) { // TODO } diff --git a/FunGame.Server/Models/ServerModel.cs b/FunGame.Server/Models/ServerModel.cs index 7cb5820..789a840 100644 --- a/FunGame.Server/Models/ServerModel.cs +++ b/FunGame.Server/Models/ServerModel.cs @@ -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); diff --git a/FunGame.WebAPI/Controllers/RoomController.cs b/FunGame.WebAPI/Controllers/RoomController.cs index ec07bf2..bf75009 100644 --- a/FunGame.WebAPI/Controllers/RoomController.cs +++ b/FunGame.WebAPI/Controllers/RoomController.cs @@ -250,6 +250,35 @@ namespace Milimoe.FunGame.WebAPI.Controllers return StatusCode(500, response); } + /// + /// · + /// + [HttpPost("updateroomsettings")] + public async Task UpdateRoomSettings([FromBody] Dictionary data) + { + PayloadModel response = new() + { + Event = "room_updatesettings", + RequestType = DataRequestType.Room_UpdateRoomSettings + }; + + try + { + Dictionary 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); + } + /// /// ȡ ///