填充一些请求控制器的方法

This commit is contained in:
milimoe 2025-04-03 01:13:49 +08:00
parent 60c667a929
commit e462dc7b71
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
3 changed files with 387 additions and 85 deletions

View File

@ -4,13 +4,13 @@ using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Interface.Base; 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.Common.Event;
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;
using Milimoe.FunGame.Core.Library.SQLScript.Entity; using Milimoe.FunGame.Core.Library.SQLScript.Entity;
using Milimoe.FunGame.Server.Model; using Milimoe.FunGame.Server.Model;
using Milimoe.FunGame.Server.Others; using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Services; using Milimoe.FunGame.Server.Services;
using ProjectRedbud.FunGame.SQLQueryExtension;
namespace Milimoe.FunGame.Server.Controller namespace Milimoe.FunGame.Server.Controller
{ {
@ -51,6 +51,7 @@ namespace Milimoe.FunGame.Server.Controller
{ {
Dictionary<string, object> result = []; Dictionary<string, object> result = [];
_lastRequest = type; _lastRequest = type;
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
switch (type) switch (type)
{ {
@ -118,6 +119,7 @@ namespace Milimoe.FunGame.Server.Controller
break; break;
case DataRequestType.Room_GetRoomSettings: case DataRequestType.Room_GetRoomSettings:
GetRoomSettings(data, result);
break; break;
case DataRequestType.Room_GetRoomPlayerCount: case DataRequestType.Room_GetRoomPlayerCount:
@ -128,6 +130,78 @@ namespace Milimoe.FunGame.Server.Controller
await UpdateRoomMaster(data, result); await UpdateRoomMaster(data, result);
break; break;
case DataRequestType.UserCenter_GetUserProfile:
GetUserProfile(data, result);
break;
case DataRequestType.UserCenter_GetUserStatistics:
GetUserStatistics(data, result);
break;
case DataRequestType.UserCenter_UpdateUser:
UpdateUser(data, result);
break;
case DataRequestType.UserCenter_UpdatePassword:
UpdatePassword(data, result);
break;
case DataRequestType.UserCenter_DailySignIn:
DailySignIn(result);
break;
case DataRequestType.Inventory_GetStore:
GetStore(data, result);
break;
case DataRequestType.Inventory_GetMarket:
GetMarket(data, result);
break;
case DataRequestType.Inventory_StoreBuy:
StoreBuy(data, result);
break;
case DataRequestType.Inventory_MarketBuy:
MarketBuy(data, result);
break;
case DataRequestType.Inventory_GetInventory:
GetInventory(data, result);
break;
case DataRequestType.Inventory_Use:
Use(data, result);
break;
case DataRequestType.Inventory_StoreSell:
StoreSell(data, result);
break;
case DataRequestType.Inventory_MarketSell:
MarketSell(data, result);
break;
case DataRequestType.Inventory_UpdateMarketPrice:
UpdateMarketPrice(data, result);
break;
case DataRequestType.Inventory_GetOffer:
GetOffer(data, result);
break;
case DataRequestType.Inventory_MakeOffer:
MakeOffer(data, result);
break;
case DataRequestType.Inventory_ReviseOffer:
ReviseOffer(data, result);
break;
case DataRequestType.Inventory_RespondOffer:
RespondOffer(data, result);
break;
default: default:
break; break;
} }
@ -148,7 +222,6 @@ namespace Milimoe.FunGame.Server.Controller
Guid key = Guid.Empty; Guid key = Guid.Empty;
if (requestData.Count >= 1) if (requestData.Count >= 1)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
key = DataRequest.GetDictionaryJsonObject<Guid>(requestData, "key"); key = DataRequest.GetDictionaryJsonObject<Guid>(requestData, "key");
if (Server.IsLoginKey(key)) if (Server.IsLoginKey(key))
{ {
@ -170,9 +243,8 @@ namespace Milimoe.FunGame.Server.Controller
/// 获取公告 /// 获取公告
/// </summary> /// </summary>
/// <param name="resultData"></param> /// <param name="resultData"></param>
private void GetServerNotice(Dictionary<string, object> resultData) private static void GetServerNotice(Dictionary<string, object> resultData)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
resultData.Add("notice", Config.ServerNotice); resultData.Add("notice", Config.ServerNotice);
} }
@ -190,7 +262,7 @@ namespace Milimoe.FunGame.Server.Controller
string gamemodule = DataRequest.GetDictionaryJsonObject<string>(requestData, "gamemoduleserver") ?? ""; string gamemodule = DataRequest.GetDictionaryJsonObject<string>(requestData, "gamemoduleserver") ?? "";
string gamemap = DataRequest.GetDictionaryJsonObject<string>(requestData, "gamemap") ?? ""; string gamemap = DataRequest.GetDictionaryJsonObject<string>(requestData, "gamemap") ?? "";
bool isrank = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isrank"); bool isrank = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isrank");
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest) + " : " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [gamemodule, gamemap]) + ")", InvokeMessageType.DataRequest); ServerHelper.WriteLine("[CreateRoom] " + RoomSet.GetTypeString(type) + " (" + string.Join(", ", [gamemodule, gamemap]) + ")", InvokeMessageType.DataRequest);
if (gamemodule == "" || gamemap == "" || FunGameSystem.GameModuleLoader is null || !FunGameSystem.GameModuleLoader.ModuleServers.ContainsKey(gamemodule) || !FunGameSystem.GameModuleLoader.Maps.ContainsKey(gamemap)) if (gamemodule == "" || gamemap == "" || FunGameSystem.GameModuleLoader is null || !FunGameSystem.GameModuleLoader.ModuleServers.ContainsKey(gamemodule) || !FunGameSystem.GameModuleLoader.Maps.ContainsKey(gamemap))
{ {
ServerHelper.WriteLine("缺少对应的模组或地图,无法创建房间。"); ServerHelper.WriteLine("缺少对应的模组或地图,无法创建房间。");
@ -219,10 +291,10 @@ namespace Milimoe.FunGame.Server.Controller
if (SQLHelper.Result == SQLResult.Success) if (SQLHelper.Result == SQLResult.Success)
{ {
ServerHelper.WriteLine("[CreateRoom] Master: " + user.Username + " RoomID: " + roomid); ServerHelper.WriteLine("[CreateRoom] Master: " + user.Username + " RoomID: " + roomid);
SQLHelper.ExecuteDataSet(RoomQuery.Select_IsExistRoom(SQLHelper, roomid)); DataRow? dr = SQLHelper.ExecuteDataRow(RoomQuery.Select_IsExistRoom(SQLHelper, roomid));
if (SQLHelper.Result == SQLResult.Success && SQLHelper.DataSet.Tables[0].Rows.Count > 0) if (dr != null)
{ {
room = Factory.GetRoom(SQLHelper.DataSet.Tables[0].Rows[0], user); room = Factory.GetRoom(dr, user);
FunGameSystem.RoomList.AddRoom(room); FunGameSystem.RoomList.AddRoom(room);
} }
} }
@ -236,9 +308,8 @@ namespace Milimoe.FunGame.Server.Controller
/// 更新房间列表 /// 更新房间列表
/// </summary> /// </summary>
/// <param name="resultData"></param> /// <param name="resultData"></param>
private void UpdateRoom(Dictionary<string, object> resultData) private static void UpdateRoom(Dictionary<string, object> resultData)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
resultData.Add("rooms", FunGameSystem.RoomList.ListRoom); // 传RoomList resultData.Add("rooms", FunGameSystem.RoomList.ListRoom); // 传RoomList
} }
@ -252,7 +323,6 @@ namespace Milimoe.FunGame.Server.Controller
bool result = false; bool result = false;
if (requestData.Count >= 2) if (requestData.Count >= 2)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1"; string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
bool isMaster = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isMaster"); bool isMaster = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isMaster");
@ -274,7 +344,6 @@ namespace Milimoe.FunGame.Server.Controller
bool result = false; bool result = false;
if (requestData.Count >= 1) if (requestData.Count >= 1)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1"; string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
if (roomid != "-1") if (roomid != "-1")
@ -313,7 +382,7 @@ namespace Milimoe.FunGame.Server.Controller
bool iscancel = DataRequest.GetDictionaryJsonObject<bool>(requestData, "iscancel"); bool iscancel = DataRequest.GetDictionaryJsonObject<bool>(requestData, "iscancel");
if (!iscancel) if (!iscancel)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest) + " : Start", InvokeMessageType.DataRequest); ServerHelper.WriteLine("[MatchRoom] Start", InvokeMessageType.DataRequest);
RoomType type = DataRequest.GetDictionaryJsonObject<RoomType>(requestData, "roomtype"); RoomType type = DataRequest.GetDictionaryJsonObject<RoomType>(requestData, "roomtype");
User user = DataRequest.GetDictionaryJsonObject<User>(requestData, "matcher") ?? Factory.GetUser(); User user = DataRequest.GetDictionaryJsonObject<User>(requestData, "matcher") ?? Factory.GetUser();
StartMatching(type, user); StartMatching(type, user);
@ -321,7 +390,7 @@ namespace Milimoe.FunGame.Server.Controller
else else
{ {
// 取消匹配 // 取消匹配
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest) + " : Cancel", InvokeMessageType.DataRequest); ServerHelper.WriteLine("[MatchRoom] Cancel", InvokeMessageType.DataRequest);
StopMatching(); StopMatching();
} }
} }
@ -339,7 +408,6 @@ namespace Milimoe.FunGame.Server.Controller
string roomid = "-1"; string roomid = "-1";
if (requestData.Count >= 1) if (requestData.Count >= 1)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1"; roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
User user = Server.User; User user = Server.User;
@ -365,7 +433,6 @@ namespace Milimoe.FunGame.Server.Controller
string roomid = "-1"; string roomid = "-1";
if (requestData.Count >= 1) if (requestData.Count >= 1)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1"; roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
User user = Server.User; User user = Server.User;
@ -407,7 +474,6 @@ namespace Milimoe.FunGame.Server.Controller
bool result = false; bool result = false;
if (requestData.Count >= 2) if (requestData.Count >= 2)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1"; string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
bool isMaster = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isMaster"); bool isMaster = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isMaster");
@ -523,7 +589,6 @@ namespace Milimoe.FunGame.Server.Controller
bool success = false; bool success = false;
if (requestData.Count >= 4) if (requestData.Count >= 4)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string username = DataRequest.GetDictionaryJsonObject<string>(requestData, "username") ?? ""; string username = DataRequest.GetDictionaryJsonObject<string>(requestData, "username") ?? "";
string password = DataRequest.GetDictionaryJsonObject<string>(requestData, "password") ?? ""; string password = DataRequest.GetDictionaryJsonObject<string>(requestData, "password") ?? "";
string email = DataRequest.GetDictionaryJsonObject<string>(requestData, "email") ?? ""; string email = DataRequest.GetDictionaryJsonObject<string>(requestData, "email") ?? "";
@ -550,7 +615,6 @@ namespace Milimoe.FunGame.Server.Controller
/// <param name="resultData"></param> /// <param name="resultData"></param>
private async Task Login(Dictionary<string, object> requestData, Dictionary<string, object> resultData) private async Task Login(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string msg = ""; string msg = "";
User user = Factory.GetUser(); User user = Factory.GetUser();
@ -609,7 +673,6 @@ namespace Milimoe.FunGame.Server.Controller
string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息 string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息
if (requestData.Count >= 3) if (requestData.Count >= 3)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string username = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_Username) ?? ""; string username = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_Username) ?? "";
string email = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_Email) ?? ""; string email = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_Email) ?? "";
string verifycode = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_ForgetVerifyCode) ?? ""; string verifycode = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_ForgetVerifyCode) ?? "";
@ -620,11 +683,11 @@ namespace Milimoe.FunGame.Server.Controller
// 先检查验证码 // 先检查验证码
if (SQLHelper != null) if (SQLHelper != null)
{ {
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_ForgetVerifyCode(SQLHelper, username, email, verifycode)); DataRow? dr = SQLHelper.ExecuteDataRow(ForgetVerifyCodes.Select_ForgetVerifyCode(SQLHelper, username, email, verifycode));
if (SQLHelper.Result == SQLResult.Success) if (dr != null)
{ {
// 检查验证码是否过期 // 检查验证码是否过期
if (!DateTime.TryParse(SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime].ToString(), out DateTime SendTime)) if (!DateTime.TryParse(dr[ForgetVerifyCodes.Column_SendTime].ToString(), out DateTime SendTime))
{ {
SendTime = General.DefaultTime; SendTime = General.DefaultTime;
} }
@ -637,7 +700,7 @@ namespace Milimoe.FunGame.Server.Controller
else else
{ {
// 检查验证码是否正确 // 检查验证码是否正确
if (verifycode.Equals(SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode])) if (verifycode.Equals(dr[ForgetVerifyCodes.Column_ForgetVerifyCode]))
{ {
ServerHelper.WriteLine("[ForgerPassword] Username: " + username + " Email: " + email); ServerHelper.WriteLine("[ForgerPassword] Username: " + username + " Email: " + email);
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(SQLHelper, username, email)); SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(SQLHelper, username, email));
@ -662,8 +725,8 @@ namespace Milimoe.FunGame.Server.Controller
else else
{ {
// 检查验证码是否发送过和是否过期 // 检查验证码是否发送过和是否过期
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_HasSentForgetVerifyCode(SQLHelper, username, email)); DataRow? dr = SQLHelper.ExecuteDataRow(ForgetVerifyCodes.Select_HasSentForgetVerifyCode(SQLHelper, username, email));
if (SQLHelper.Result != SQLResult.Success || (DateTime.TryParse(SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_SendTime].ToString(), out DateTime SendTime) && (DateTime.Now - SendTime).TotalMinutes >= 10)) if (dr is null || (DateTime.TryParse(dr[ForgetVerifyCodes.Column_SendTime].ToString(), out DateTime SendTime) && (DateTime.Now - SendTime).TotalMinutes >= 10))
{ {
// 发送验证码,需要先删除之前过期的验证码 // 发送验证码,需要先删除之前过期的验证码
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(SQLHelper, username, email)); SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(SQLHelper, username, email));
@ -691,7 +754,7 @@ namespace Milimoe.FunGame.Server.Controller
} }
else // 不使用MailSender的情况 else // 不使用MailSender的情况
{ {
ServerHelper.WriteLine(Server.GetClientName() + $" 验证码为:{forgetVerify}请服务器管理员告知此用户"); ServerHelper.WriteLine(Server.GetClientName() + $" 验证码为:{forgetVerify}但因 SMTP 服务未开启,请服务器管理员告知此用户");
msg = ""; msg = "";
} }
} }
@ -699,7 +762,7 @@ namespace Milimoe.FunGame.Server.Controller
else else
{ {
// 发送过验证码且验证码没有过期 // 发送过验证码且验证码没有过期
string ForgetVerifyCode = (string)SQLHelper.DataSet.Tables[0].Rows[0][ForgetVerifyCodes.Column_ForgetVerifyCode]; string ForgetVerifyCode = (string)dr[ForgetVerifyCodes.Column_ForgetVerifyCode];
ServerHelper.WriteLine(Server.GetClientName() + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}"); ServerHelper.WriteLine(Server.GetClientName() + $" 十分钟内已向{email}发送过验证码:{ForgetVerifyCode}");
msg = ""; msg = "";
} }
@ -710,49 +773,30 @@ namespace Milimoe.FunGame.Server.Controller
resultData.Add("msg", msg); resultData.Add("msg", msg);
} }
/// <summary>
/// 更新用户的密码
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void UpdatePassword(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
string msg = "无法更新您的密码,请稍后再试。";
if (requestData.Count >= 2)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string username = DataRequest.GetDictionaryJsonObject<string>(requestData, UserQuery.Column_Username) ?? "";
string password = DataRequest.GetDictionaryJsonObject<string>(requestData, UserQuery.Column_Password) ?? "";
if (username.Trim() != "" && password.Trim() != "")
{
FunGameSystem.UpdateUserKey(username);
password = password.Encrypt(FunGameSystem.GetUserKey(username));
SQLHelper?.Execute(UserQuery.Update_Password(SQLHelper, username, password));
if (SQLHelper?.Success ?? false)
{
// 更新成功返回空值
msg = "";
}
}
}
resultData.Add("msg", msg);
}
#endregion #endregion
#region Room #region Room
/// <summary>
/// 获取房间设置
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private static void GetRoomSettings(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary> /// <summary>
/// 获取房间内玩家数量 /// 获取房间内玩家数量
/// </summary> /// </summary>
/// <param name="requestData"></param> /// <param name="requestData"></param>
/// <param name="resultData"></param> /// <param name="resultData"></param>
private void GetRoomPlayerCount(Dictionary<string, object> requestData, Dictionary<string, object> resultData) private static void GetRoomPlayerCount(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{ {
string roomid = "-1"; string roomid = "-1";
if (requestData.Count >= 1) if (requestData.Count >= 1)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1"; roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
} }
resultData.Add("count", FunGameSystem.RoomList.GetUserCount(roomid)); resultData.Add("count", FunGameSystem.RoomList.GetUserCount(roomid));
@ -770,7 +814,6 @@ namespace Milimoe.FunGame.Server.Controller
if (requestData.Count >= 2) if (requestData.Count >= 2)
{ {
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1"; string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
User newMaster = DataRequest.GetDictionaryJsonObject<User>(requestData, "newMaster") ?? Factory.GetUser(); User newMaster = DataRequest.GetDictionaryJsonObject<User>(requestData, "newMaster") ?? Factory.GetUser();
@ -783,10 +826,10 @@ namespace Milimoe.FunGame.Server.Controller
if (SQLHelper != null) if (SQLHelper != null)
{ {
SQLHelper.Execute(RoomQuery.Update_UpdateRoomMaster(SQLHelper, roomid, newMaster.Id)); SQLHelper.UpdateRoomMaster(roomid, newMaster.Id);
if (SQLHelper.Result == SQLResult.Success) if (SQLHelper.Result == SQLResult.Success)
{ {
await Server.UpdateRoomMaster(room, true); await Server.SendClients(Server.Listener.ClientList.Where(c => c != null && c.InRoom.Roomid == roomid), SocketMessageType.UpdateRoomMaster, room);
ServerHelper.WriteLine($"[UpdateRoomMaster] RoomID: {roomid} 房主变更: {oldMaster.Username} -> {newMaster.Username}"); ServerHelper.WriteLine($"[UpdateRoomMaster] RoomID: {roomid} 房主变更: {oldMaster.Username} -> {newMaster.Username}");
} }
} }
@ -852,9 +895,8 @@ namespace Milimoe.FunGame.Server.Controller
double time = 0; // 已经匹配的时间 double time = 0; // 已经匹配的时间
double expandInterval = 10; // 扩大匹配范围的间隔时间 double expandInterval = 10; // 扩大匹配范围的间隔时间
double maxTime = 50; // 最大匹配时间 double maxTime = 50; // 最大匹配时间
bool isRefreshRoom = false; // 是否刷新房间列表
while (_isMatching)
{
// 匹配房间类型如果是All则匹配所有房间 // 匹配房间类型如果是All则匹配所有房间
List<Room> targets; List<Room> targets;
if (roomtype == RoomType.All) if (roomtype == RoomType.All)
@ -866,6 +908,21 @@ namespace Milimoe.FunGame.Server.Controller
targets = [.. FunGameSystem.RoomList.ListRoom.Where(r => (r.RoomState == RoomState.Created || r.RoomState == RoomState.Matching) && r.RoomType == roomtype)]; targets = [.. FunGameSystem.RoomList.ListRoom.Where(r => (r.RoomState == RoomState.Created || r.RoomState == RoomState.Matching) && r.RoomType == roomtype)];
} }
while (_isMatching)
{
if (isRefreshRoom)
{
isRefreshRoom = false;
if (roomtype == RoomType.All)
{
targets = [.. FunGameSystem.RoomList.ListRoom.Where(r => r.RoomState == RoomState.Created || r.RoomState == RoomState.Matching)];
}
else
{
targets = [.. FunGameSystem.RoomList.ListRoom.Where(r => (r.RoomState == RoomState.Created || r.RoomState == RoomState.Matching) && r.RoomType == roomtype)];
}
}
// 如果匹配停止,则退出 // 如果匹配停止,则退出
if (!_isMatching) break; if (!_isMatching) break;
@ -895,6 +952,8 @@ namespace Milimoe.FunGame.Server.Controller
if (time >= expandInterval * i) if (time >= expandInterval * i)
{ {
i++; i++;
// 刷新房间列表
isRefreshRoom = true;
} }
// 达到最大匹配时间后不再匹配Elo直接返回第一个房间 // 达到最大匹配时间后不再匹配Elo直接返回第一个房间
if (time >= maxTime) if (time >= maxTime)
@ -910,5 +969,240 @@ namespace Milimoe.FunGame.Server.Controller
} }
#endregion #endregion
#region UserCenter
/// <summary>
/// 获取用户资料信息
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void GetUserProfile(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 获取用户统计数据
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void GetUserStatistics(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 更新用户(全部数据)
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void UpdateUser(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 更新用户的密码
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void UpdatePassword(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
string msg = "无法更新您的密码,请稍后再试。";
if (requestData.Count >= 2)
{
string username = DataRequest.GetDictionaryJsonObject<string>(requestData, UserQuery.Column_Username) ?? "";
string password = DataRequest.GetDictionaryJsonObject<string>(requestData, UserQuery.Column_Password) ?? "";
if (username.Trim() != "" && password.Trim() != "")
{
FunGameSystem.UpdateUserKey(username);
password = password.Encrypt(FunGameSystem.GetUserKey(username));
SQLHelper?.UpdatePassword(username, password);
if (SQLHelper?.Success ?? false)
{
// 更新成功返回空值
msg = "";
}
}
}
resultData.Add("msg", msg);
}
/// <summary>
/// 每日签到
/// </summary>
/// <param name="resultData"></param>
private void DailySignIn(Dictionary<string, object> resultData)
{
if (SQLHelper != null)
{
long userId = Server.User.Id;
if (userId != 0)
{
DataRow? dr = SQLHelper.ExecuteDataRow(UserSignIns.Select_GetUserSignIn(SQLHelper, userId));
if (dr != null)
{
int days = Convert.ToInt32(dr[UserSignIns.Column_Days]) + 1;
bool isSigned = Convert.ToInt32(dr[UserSignIns.Column_IsSigned]) != 0;
if (dr[UserSignIns.Column_LastTime] != DBNull.Value && DateTime.TryParseExact(dr[UserSignIns.Column_LastTime].ToString(), General.GeneralDateTimeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime dt))
{
if (isSigned)
{
resultData.Add("msg", "今天已经签到过了,请明天再来。");
return;
}
if ((DateTime.Now - dt).TotalDays > 1)
{
days = 1;
}
}
SQLHelper.Execute(UserSignIns.Update_UserSignIn(SQLHelper, userId, days));
if (SQLHelper.Success)
{
resultData.Add("msg", $"签到成功!你已经连续签到 {days} 天!");
return;
}
}
}
}
resultData.Add("msg", "签到失败!");
}
#endregion
#region Inventory
/// <summary>
/// 获取商店信息
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void GetStore(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 获取市场信息
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void GetMarket(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 购买物品(商店)
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void StoreBuy(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 购买物品(市场)
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void MarketBuy(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 获取库存信息
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void GetInventory(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 使用物品
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void Use(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 出售物品(商店)
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void StoreSell(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 出售物品(市场)
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void MarketSell(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 更新市场价格
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void UpdateMarketPrice(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 获取交易报价
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void GetOffer(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 创建交易报价
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void MakeOffer(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 修改交易报价
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void ReviseOffer(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
/// <summary>
/// 回应交易报价
/// </summary>
/// <param name="requestData"></param>
/// <param name="resultData"></param>
private void RespondOffer(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
// TODO
}
#endregion
} }
} }

View File

@ -11,6 +11,7 @@ using Milimoe.FunGame.Core.Library.SQLScript.Entity;
using Milimoe.FunGame.Server.Controller; using Milimoe.FunGame.Server.Controller;
using Milimoe.FunGame.Server.Others; using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Services; using Milimoe.FunGame.Server.Services;
using ProjectRedbud.FunGame.SQLQueryExtension;
namespace Milimoe.FunGame.Server.Model namespace Milimoe.FunGame.Server.Model
{ {
@ -382,6 +383,7 @@ namespace Milimoe.FunGame.Server.Model
public async Task<bool> QuitRoom(string roomid, bool isMaster) public async Task<bool> QuitRoom(string roomid, bool isMaster)
{ {
bool result; bool result;
SQLHelper?.NewTransaction();
FunGameSystem.RoomList.CancelReady(roomid, User); FunGameSystem.RoomList.CancelReady(roomid, User);
FunGameSystem.RoomList.QuitRoom(roomid, User); FunGameSystem.RoomList.QuitRoom(roomid, User);
@ -390,36 +392,37 @@ namespace Milimoe.FunGame.Server.Model
if (isMaster) if (isMaster)
{ {
List<User> users = [.. FunGameSystem.RoomList[roomid].UserAndIsReady.Keys]; List<User> users = [.. FunGameSystem.RoomList[roomid].UserAndIsReady.Keys];
if (users.Count > 0) // 如果此时房间还有人,更新房主 User? newRoomMaster = null;
if (users.Count > 0) newRoomMaster = users[0];
SQLHelper?.QuitRoomByRoomMaster(roomid, User.Id, newRoomMaster?.Id);
if (newRoomMaster != null)
{ {
User NewMaster = users[0]; Room.RoomMaster = users[0];
Room.RoomMaster = NewMaster; ServerHelper.WriteLine("[ " + GetClientName() + " ] 退出了房间 " + roomid + ",并更新房主为:" + newRoomMaster);
SQLHelper?.Execute(RoomQuery.Update_QuitRoom(SQLHelper, roomid, User.Id, NewMaster.Id)); await NotifyQuitRoom(Room, true);
this.InRoom = General.HallInstance;
await UpdateRoomMaster(Room, true);
result = true;
} }
else // 没人了就解散房间 else
{ {
FunGameSystem.RoomList.RemoveRoom(roomid); FunGameSystem.RoomList.RemoveRoom(roomid);
SQLHelper?.Execute(RoomQuery.Delete_QuitRoom(SQLHelper, roomid, User.Id));
this.InRoom = General.HallInstance;
ServerHelper.WriteLine("[ " + GetClientName() + " ] 解散了房间 " + roomid); ServerHelper.WriteLine("[ " + GetClientName() + " ] 解散了房间 " + roomid);
result = true;
} }
InRoom = General.HallInstance;
result = true;
} }
// 不是房主直接退出房间 // 不是房主直接退出房间
else else
{ {
this.InRoom = General.HallInstance; this.InRoom = General.HallInstance;
await UpdateRoomMaster(Room); await NotifyQuitRoom(Room);
result = true; result = true;
} }
SQLHelper?.Commit();
return result; return result;
} }
public async Task UpdateRoomMaster(Room room, bool isUpdateRoomMaster = false) public async Task NotifyQuitRoom(Room room, bool isUpdateRoomMaster = false)
{ {
foreach (IServerModel Client in Listener.ClientList.Where(c => c != null && c.User.Id != 0 && room.Roomid == c.InRoom?.Roomid)) foreach (IServerModel Client in Listener.ClientList.Where(c => c != null && c.User.Id != 0 && room.Roomid == c.InRoom?.Roomid))
{ {

View File

@ -215,11 +215,16 @@ try
IExceptionHandlerFeature? contextFeature = context.Features.Get<IExceptionHandlerFeature>(); IExceptionHandlerFeature? contextFeature = context.Features.Get<IExceptionHandlerFeature>();
if (contextFeature != null) if (contextFeature != null)
{ {
await context.Response.WriteAsync(new await context.Response.WriteAsync(new PayloadModel<DataRequestType>()
{ {
context.Response.StatusCode, Event = "system_error",
RequestType = DataRequestType.UnKnown,
StatusCode = context.Response.StatusCode,
Message = "Internal Server Error.", Message = "Internal Server Error.",
Detailed = contextFeature.Error.Message Data = new()
{
{ "detail", contextFeature.Error.Message }
}
}.ToString() ?? ""); }.ToString() ?? "");
} }
}); });