using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.WebAPI.Models; namespace Milimoe.FunGame.WebAPI.Controllers { [ApiController] [Route("[controller]")] [Authorize] public class RoomController(RESTfulAPIModel model, ILogger logger) : ControllerBase { private readonly ILogger _logger = logger; /// /// 创建房间 /// [HttpPost("create")] public async Task CreateRoom([FromBody] Dictionary data) { string msg = "服务器暂时无法处理此请求。"; PayloadModel response = new() { Event = "room_create", RequestType = DataRequestType.Main_CreateRoom }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_CreateRoom, data); if (result.TryGetValue("room", out object? value) && value is Room room && room.Roomid != "-1") { response.StatusCode = 200; response.Data = result; return Ok(response); } msg = "创建房间失败!"; } catch (Exception e) { _logger.LogError("Error: {e}", e); } response.StatusCode = 500; response.Message = msg; return StatusCode(500, response); } /// /// 获取/更新房间列表 /// [HttpGet("list")] public async Task GetRoomList() { PayloadModel response = new() { Event = "room_list", RequestType = DataRequestType.Main_UpdateRoom }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_UpdateRoom, []); 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); } /// /// 进入房间 /// [HttpPost("join")] public async Task IntoRoom([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_join", RequestType = DataRequestType.Main_IntoRoom }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_IntoRoom, 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); } /// /// 退出房间 /// [HttpPost("quit")] public async Task QuitRoom([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_quit", RequestType = DataRequestType.Main_QuitRoom }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_QuitRoom, 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); } /// /// 匹配房间 /// [HttpPost("match")] public async Task MatchRoom([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_match", RequestType = DataRequestType.Main_MatchRoom }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_MatchRoom, 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); } /// /// 设置准备状态 /// [HttpPost("ready")] public async Task SetReady([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_ready", RequestType = DataRequestType.Main_Ready }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_Ready, 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); } /// /// 取消准备状态 /// [HttpPost("cancelready")] public async Task CancelReady([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_cancelready", RequestType = DataRequestType.Main_CancelReady }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_CancelReady, 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); } /// /// 开始游戏 /// [HttpPost("start")] public async Task StartGame([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_start", RequestType = DataRequestType.Main_StartGame }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Main_StartGame, 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); } /// /// 更新房间设置 /// [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); } /// /// 获取房间内玩家数量 /// [HttpPost("playercount")] public async Task GetRoomPlayerCount([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_playercount", RequestType = DataRequestType.Room_GetRoomPlayerCount }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Room_GetRoomPlayerCount, 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); } /// /// 更新房主 /// [HttpPost("updatemaster")] public async Task UpdateRoomMaster([FromBody] Dictionary data) { PayloadModel response = new() { Event = "room_updatemaster", RequestType = DataRequestType.Room_UpdateRoomMaster }; try { Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Room_UpdateRoomMaster, 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); } } }