mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-04-22 20:19:35 +08:00
添加更新房间设置和用户房间的状态管理
This commit is contained in:
parent
2391d83aec
commit
333bdc72aa
@ -118,8 +118,8 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
UpdatePassword(data, result);
|
UpdatePassword(data, result);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DataRequestType.Room_GetRoomSettings:
|
case DataRequestType.Room_UpdateRoomSettings:
|
||||||
GetRoomSettings(data, result);
|
UpdateRoomSettings(data, result);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DataRequestType.Room_GetRoomPlayerCount:
|
case DataRequestType.Room_GetRoomPlayerCount:
|
||||||
@ -131,7 +131,7 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DataRequestType.UserCenter_GetUserProfile:
|
case DataRequestType.UserCenter_GetUserProfile:
|
||||||
GetUserProfile(data, result);
|
GetUserProfile(result);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DataRequestType.UserCenter_GetUserStatistics:
|
case DataRequestType.UserCenter_GetUserStatistics:
|
||||||
@ -355,6 +355,7 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
{
|
{
|
||||||
FunGameSystem.RoomList.IntoRoom(roomid, Server.User);
|
FunGameSystem.RoomList.IntoRoom(roomid, Server.User);
|
||||||
Server.InRoom = FunGameSystem.RoomList[roomid];
|
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),
|
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 + " ] 进入了房间。");
|
SocketMessageType.Chat, Server.User.Username, DateTimeUtility.GetNowShortTime() + " [ " + Server.User.Username + " ] 进入了房间。");
|
||||||
result = true;
|
result = true;
|
||||||
@ -549,12 +550,15 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
{
|
{
|
||||||
if (FunGameSystem.GameModuleLoader != null && FunGameSystem.GameModuleLoader.ModuleServers.ContainsKey(room.GameModule))
|
if (FunGameSystem.GameModuleLoader != null && FunGameSystem.GameModuleLoader.ModuleServers.ContainsKey(room.GameModule))
|
||||||
{
|
{
|
||||||
|
room.RoomState = RoomState.Gaming;
|
||||||
Server.NowGamingServer = FunGameSystem.GameModuleLoader.GetServerMode(room.GameModule);
|
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);
|
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))
|
foreach (IServerModel model in all.Values.Where(s => s.User.Username != Server.User.Username))
|
||||||
{
|
{
|
||||||
model.NowGamingServer = Server.NowGamingServer;
|
model.NowGamingServer = Server.NowGamingServer;
|
||||||
|
model.User.OnlineState = OnlineState.Gaming;
|
||||||
}
|
}
|
||||||
GamingObject obj = new(room, users, Server, all);
|
GamingObject obj = new(room, users, Server, all);
|
||||||
if (Server.NowGamingServer.StartServer(obj))
|
if (Server.NowGamingServer.StartServer(obj))
|
||||||
@ -778,13 +782,49 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
#region Room
|
#region Room
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取房间设置
|
/// 更新房间设置
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="requestData"></param>
|
/// <param name="requestData"></param>
|
||||||
/// <param name="resultData"></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>
|
/// <summary>
|
||||||
@ -852,6 +892,7 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
private void StartMatching(RoomType type, User user)
|
private void StartMatching(RoomType type, User user)
|
||||||
{
|
{
|
||||||
_isMatching = true;
|
_isMatching = true;
|
||||||
|
if (user.OnlineState == OnlineState.Online) user.OnlineState = OnlineState.Matching;
|
||||||
ServerHelper.WriteLine(Server.GetClientName() + " 开始匹配。类型:" + RoomSet.GetTypeString(type));
|
ServerHelper.WriteLine(Server.GetClientName() + " 开始匹配。类型:" + RoomSet.GetTypeString(type));
|
||||||
TaskUtility.NewTask(async () =>
|
TaskUtility.NewTask(async () =>
|
||||||
{
|
{
|
||||||
@ -879,6 +920,7 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
if (_isMatching)
|
if (_isMatching)
|
||||||
{
|
{
|
||||||
ServerHelper.WriteLine(Server.GetClientName() + " 取消了匹配。");
|
ServerHelper.WriteLine(Server.GetClientName() + " 取消了匹配。");
|
||||||
|
if (Server.User.OnlineState == OnlineState.Matching) Server.User.OnlineState = OnlineState.Online;
|
||||||
_isMatching = false;
|
_isMatching = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -975,9 +1017,8 @@ namespace Milimoe.FunGame.Server.Controller
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取用户资料信息
|
/// 获取用户资料信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="requestData"></param>
|
|
||||||
/// <param name="resultData"></param>
|
/// <param name="resultData"></param>
|
||||||
private void GetUserProfile(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
|
private void GetUserProfile(Dictionary<string, object> resultData)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,8 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
NowGamingServer.CloseAnonymousServer(this);
|
NowGamingServer.CloseAnonymousServer(this);
|
||||||
}
|
}
|
||||||
NowGamingServer = null;
|
NowGamingServer = null;
|
||||||
|
User.OnlineState = OnlineState.InRoom;
|
||||||
|
if (User.Id == InRoom.RoomMaster.Id) InRoom.RoomState = RoomState.Created;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -388,6 +390,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
FunGameSystem.RoomList.CancelReady(roomid, User);
|
FunGameSystem.RoomList.CancelReady(roomid, User);
|
||||||
FunGameSystem.RoomList.QuitRoom(roomid, User);
|
FunGameSystem.RoomList.QuitRoom(roomid, User);
|
||||||
Room Room = FunGameSystem.RoomList[roomid] ?? General.HallInstance;
|
Room Room = FunGameSystem.RoomList[roomid] ?? General.HallInstance;
|
||||||
|
User.OnlineState = OnlineState.Online;
|
||||||
// 是否是房主
|
// 是否是房主
|
||||||
if (isMaster)
|
if (isMaster)
|
||||||
{
|
{
|
||||||
@ -476,6 +479,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
{
|
{
|
||||||
// 创建User对象
|
// 创建User对象
|
||||||
User = Factory.GetUser(_dsUser);
|
User = Factory.GetUser(_dsUser);
|
||||||
|
User.OnlineState = OnlineState.Online;
|
||||||
// 检查有没有重复登录的情况
|
// 检查有没有重复登录的情况
|
||||||
await ForceLogOutDuplicateLogonUser();
|
await ForceLogOutDuplicateLogonUser();
|
||||||
// 添加至玩家列表
|
// 添加至玩家列表
|
||||||
@ -502,6 +506,7 @@ namespace Milimoe.FunGame.Server.Model
|
|||||||
{
|
{
|
||||||
if (User.Id != 0 && this != null)
|
if (User.Id != 0 && this != null)
|
||||||
{
|
{
|
||||||
|
User.OnlineState = OnlineState.Offline;
|
||||||
_checkLoginKey = Guid.Empty;
|
_checkLoginKey = Guid.Empty;
|
||||||
_logoutTime = DateTime.Now.Ticks;
|
_logoutTime = DateTime.Now.Ticks;
|
||||||
int TotalMinutes = Convert.ToInt32((new DateTime(_logoutTime) - new DateTime(_loginTime)).TotalMinutes);
|
int TotalMinutes = Convert.ToInt32((new DateTime(_logoutTime) - new DateTime(_loginTime)).TotalMinutes);
|
||||||
|
@ -250,6 +250,35 @@ namespace Milimoe.FunGame.WebAPI.Controllers
|
|||||||
return StatusCode(500, response);
|
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>
|
||||||
/// 获取房间内玩家数量
|
/// 获取房间内玩家数量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user