mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-12-15 04:48:21 +00:00
填充一些请求控制器的方法
This commit is contained in:
parent
60c667a929
commit
e462dc7b71
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@ -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))
|
||||
{
|
||||
|
||||
@ -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() ?? "");
|
||||
}
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user