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

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.Interface.Base;
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.SQLScript.Common;
using Milimoe.FunGame.Core.Library.SQLScript.Entity;
using Milimoe.FunGame.Server.Model;
using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Services;
using ProjectRedbud.FunGame.SQLQueryExtension;
namespace Milimoe.FunGame.Server.Controller
{
@ -51,6 +51,7 @@ namespace Milimoe.FunGame.Server.Controller
{
Dictionary<string, object> result = [];
_lastRequest = type;
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
switch (type)
{
@ -118,6 +119,7 @@ namespace Milimoe.FunGame.Server.Controller
break;
case DataRequestType.Room_GetRoomSettings:
GetRoomSettings(data, result);
break;
case DataRequestType.Room_GetRoomPlayerCount:
@ -128,6 +130,78 @@ namespace Milimoe.FunGame.Server.Controller
await UpdateRoomMaster(data, result);
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:
break;
}
@ -148,7 +222,6 @@ namespace Milimoe.FunGame.Server.Controller
Guid key = Guid.Empty;
if (requestData.Count >= 1)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
key = DataRequest.GetDictionaryJsonObject<Guid>(requestData, "key");
if (Server.IsLoginKey(key))
{
@ -170,9 +243,8 @@ namespace Milimoe.FunGame.Server.Controller
/// 获取公告
/// </summary>
/// <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);
}
@ -190,7 +262,7 @@ namespace Milimoe.FunGame.Server.Controller
string gamemodule = DataRequest.GetDictionaryJsonObject<string>(requestData, "gamemoduleserver") ?? "";
string gamemap = DataRequest.GetDictionaryJsonObject<string>(requestData, "gamemap") ?? "";
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))
{
ServerHelper.WriteLine("缺少对应的模组或地图,无法创建房间。");
@ -219,10 +291,10 @@ namespace Milimoe.FunGame.Server.Controller
if (SQLHelper.Result == SQLResult.Success)
{
ServerHelper.WriteLine("[CreateRoom] Master: " + user.Username + " RoomID: " + roomid);
SQLHelper.ExecuteDataSet(RoomQuery.Select_IsExistRoom(SQLHelper, roomid));
if (SQLHelper.Result == SQLResult.Success && SQLHelper.DataSet.Tables[0].Rows.Count > 0)
DataRow? dr = SQLHelper.ExecuteDataRow(RoomQuery.Select_IsExistRoom(SQLHelper, roomid));
if (dr != null)
{
room = Factory.GetRoom(SQLHelper.DataSet.Tables[0].Rows[0], user);
room = Factory.GetRoom(dr, user);
FunGameSystem.RoomList.AddRoom(room);
}
}
@ -236,9 +308,8 @@ namespace Milimoe.FunGame.Server.Controller
/// 更新房间列表
/// </summary>
/// <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
}
@ -252,7 +323,6 @@ namespace Milimoe.FunGame.Server.Controller
bool result = false;
if (requestData.Count >= 2)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
bool isMaster = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isMaster");
@ -274,7 +344,6 @@ namespace Milimoe.FunGame.Server.Controller
bool result = false;
if (requestData.Count >= 1)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
if (roomid != "-1")
@ -313,7 +382,7 @@ namespace Milimoe.FunGame.Server.Controller
bool iscancel = DataRequest.GetDictionaryJsonObject<bool>(requestData, "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");
User user = DataRequest.GetDictionaryJsonObject<User>(requestData, "matcher") ?? Factory.GetUser();
StartMatching(type, user);
@ -321,7 +390,7 @@ namespace Milimoe.FunGame.Server.Controller
else
{
// 取消匹配
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest) + " : Cancel", InvokeMessageType.DataRequest);
ServerHelper.WriteLine("[MatchRoom] Cancel", InvokeMessageType.DataRequest);
StopMatching();
}
}
@ -339,7 +408,6 @@ namespace Milimoe.FunGame.Server.Controller
string roomid = "-1";
if (requestData.Count >= 1)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
User user = Server.User;
@ -365,7 +433,6 @@ namespace Milimoe.FunGame.Server.Controller
string roomid = "-1";
if (requestData.Count >= 1)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
User user = Server.User;
@ -407,7 +474,6 @@ namespace Milimoe.FunGame.Server.Controller
bool result = false;
if (requestData.Count >= 2)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
bool isMaster = DataRequest.GetDictionaryJsonObject<bool>(requestData, "isMaster");
@ -523,7 +589,6 @@ namespace Milimoe.FunGame.Server.Controller
bool success = false;
if (requestData.Count >= 4)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string username = DataRequest.GetDictionaryJsonObject<string>(requestData, "username") ?? "";
string password = DataRequest.GetDictionaryJsonObject<string>(requestData, "password") ?? "";
string email = DataRequest.GetDictionaryJsonObject<string>(requestData, "email") ?? "";
@ -550,7 +615,6 @@ namespace Milimoe.FunGame.Server.Controller
/// <param name="resultData"></param>
private async Task Login(Dictionary<string, object> requestData, Dictionary<string, object> resultData)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string msg = "";
User user = Factory.GetUser();
@ -609,7 +673,6 @@ namespace Milimoe.FunGame.Server.Controller
string msg = "无法找回您的密码,请稍后再试。"; // 返回的验证信息
if (requestData.Count >= 3)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string username = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_Username) ?? "";
string email = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_Email) ?? "";
string verifycode = DataRequest.GetDictionaryJsonObject<string>(requestData, ForgetVerifyCodes.Column_ForgetVerifyCode) ?? "";
@ -620,11 +683,11 @@ namespace Milimoe.FunGame.Server.Controller
// 先检查验证码
if (SQLHelper != null)
{
SQLHelper.ExecuteDataSet(ForgetVerifyCodes.Select_ForgetVerifyCode(SQLHelper, username, email, verifycode));
if (SQLHelper.Result == SQLResult.Success)
DataRow? dr = SQLHelper.ExecuteDataRow(ForgetVerifyCodes.Select_ForgetVerifyCode(SQLHelper, username, email, verifycode));
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;
}
@ -637,7 +700,7 @@ namespace Milimoe.FunGame.Server.Controller
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);
SQLHelper.Execute(ForgetVerifyCodes.Delete_ForgetVerifyCode(SQLHelper, username, email));
@ -662,8 +725,8 @@ namespace Milimoe.FunGame.Server.Controller
else
{
// 检查验证码是否发送过和是否过期
SQLHelper.ExecuteDataSet(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))
DataRow? dr = SQLHelper.ExecuteDataRow(ForgetVerifyCodes.Select_HasSentForgetVerifyCode(SQLHelper, username, email));
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));
@ -691,7 +754,7 @@ namespace Milimoe.FunGame.Server.Controller
}
else // 不使用MailSender的情况
{
ServerHelper.WriteLine(Server.GetClientName() + $" 验证码为:{forgetVerify}请服务器管理员告知此用户");
ServerHelper.WriteLine(Server.GetClientName() + $" 验证码为:{forgetVerify}但因 SMTP 服务未开启,请服务器管理员告知此用户");
msg = "";
}
}
@ -699,7 +762,7 @@ namespace Milimoe.FunGame.Server.Controller
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}");
msg = "";
}
@ -710,49 +773,30 @@ namespace Milimoe.FunGame.Server.Controller
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
#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>
/// <param name="requestData"></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";
if (requestData.Count >= 1)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
}
resultData.Add("count", FunGameSystem.RoomList.GetUserCount(roomid));
@ -770,7 +814,6 @@ namespace Milimoe.FunGame.Server.Controller
if (requestData.Count >= 2)
{
ServerHelper.WriteLine(Server.GetClientName() + " -> " + DataRequestSet.GetTypeString(_lastRequest), InvokeMessageType.DataRequest);
string roomid = DataRequest.GetDictionaryJsonObject<string>(requestData, "roomid") ?? "-1";
User newMaster = DataRequest.GetDictionaryJsonObject<User>(requestData, "newMaster") ?? Factory.GetUser();
@ -783,10 +826,10 @@ namespace Milimoe.FunGame.Server.Controller
if (SQLHelper != null)
{
SQLHelper.Execute(RoomQuery.Update_UpdateRoomMaster(SQLHelper, roomid, newMaster.Id));
SQLHelper.UpdateRoomMaster(roomid, newMaster.Id);
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}");
}
}
@ -852,18 +895,32 @@ namespace Milimoe.FunGame.Server.Controller
double time = 0; // 已经匹配的时间
double expandInterval = 10; // 扩大匹配范围的间隔时间
double maxTime = 50; // 最大匹配时间
bool isRefreshRoom = false; // 是否刷新房间列表
// 匹配房间类型如果是All则匹配所有房间
List<Room> targets;
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)];
}
while (_isMatching)
{
// 匹配房间类型如果是All则匹配所有房间
List<Room> targets;
if (roomtype == RoomType.All)
if (isRefreshRoom)
{
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)];
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)];
}
}
// 如果匹配停止,则退出
@ -895,6 +952,8 @@ namespace Milimoe.FunGame.Server.Controller
if (time >= expandInterval * i)
{
i++;
// 刷新房间列表
isRefreshRoom = true;
}
// 达到最大匹配时间后不再匹配Elo直接返回第一个房间
if (time >= maxTime)
@ -910,5 +969,240 @@ namespace Milimoe.FunGame.Server.Controller
}
#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.Others;
using Milimoe.FunGame.Server.Services;
using ProjectRedbud.FunGame.SQLQueryExtension;
namespace Milimoe.FunGame.Server.Model
{
@ -382,6 +383,7 @@ namespace Milimoe.FunGame.Server.Model
public async Task<bool> QuitRoom(string roomid, bool isMaster)
{
bool result;
SQLHelper?.NewTransaction();
FunGameSystem.RoomList.CancelReady(roomid, User);
FunGameSystem.RoomList.QuitRoom(roomid, User);
@ -390,36 +392,37 @@ namespace Milimoe.FunGame.Server.Model
if (isMaster)
{
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 = NewMaster;
SQLHelper?.Execute(RoomQuery.Update_QuitRoom(SQLHelper, roomid, User.Id, NewMaster.Id));
this.InRoom = General.HallInstance;
await UpdateRoomMaster(Room, true);
result = true;
Room.RoomMaster = users[0];
ServerHelper.WriteLine("[ " + GetClientName() + " ] 退出了房间 " + roomid + ",并更新房主为:" + newRoomMaster);
await NotifyQuitRoom(Room, true);
}
else // 没人了就解散房间
else
{
FunGameSystem.RoomList.RemoveRoom(roomid);
SQLHelper?.Execute(RoomQuery.Delete_QuitRoom(SQLHelper, roomid, User.Id));
this.InRoom = General.HallInstance;
ServerHelper.WriteLine("[ " + GetClientName() + " ] 解散了房间 " + roomid);
result = true;
}
InRoom = General.HallInstance;
result = true;
}
// 不是房主直接退出房间
else
{
this.InRoom = General.HallInstance;
await UpdateRoomMaster(Room);
await NotifyQuitRoom(Room);
result = true;
}
SQLHelper?.Commit();
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))
{

View File

@ -215,11 +215,16 @@ try
IExceptionHandlerFeature? contextFeature = context.Features.Get<IExceptionHandlerFeature>();
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.",
Detailed = contextFeature.Error.Message
Data = new()
{
{ "detail", contextFeature.Error.Message }
}
}.ToString() ?? "");
}
});