mirror of
https://github.com/project-redbud/FunGame-Desktop.git
synced 2025-04-22 13:09:35 +08:00

* 移除多余实现 * 修改方法名 * 更新连接服务器的逻辑 * 添加异常处理 * 修改架构之Login * 修复IntoRoom Bug * 修复ForceLogOut Bug * 修复LogOut Bug * 修复CreateRoom QuitRoom IntoRoom * 断开连接后,应该关闭Socket连接 * 修复Reg Main Bug
209 lines
7.3 KiB
C#
209 lines
7.3 KiB
C#
using Milimoe.FunGame.Core.Api.Transmittal;
|
||
using Milimoe.FunGame.Core.Entity;
|
||
using Milimoe.FunGame.Core.Library.Constant;
|
||
using Milimoe.FunGame.Core.Library.Exception;
|
||
using Milimoe.FunGame.Core.Model;
|
||
using Milimoe.FunGame.Desktop.Library;
|
||
using Milimoe.FunGame.Desktop.Model;
|
||
using Milimoe.FunGame.Desktop.UI;
|
||
|
||
namespace Milimoe.FunGame.Desktop.Controller
|
||
{
|
||
public class MainController
|
||
{
|
||
private readonly Main Main;
|
||
private readonly Session Usercfg = RunTime.Session;
|
||
private readonly DataRequest ChatRequest;
|
||
private readonly DataRequest CreateRoomRequest;
|
||
private readonly DataRequest GetRoomPlayerCountRequest;
|
||
private readonly DataRequest UpdateRoomRequest;
|
||
private readonly DataRequest IntoRoomRequest;
|
||
private readonly DataRequest QuitRoomRequest;
|
||
|
||
public MainController(Main main)
|
||
{
|
||
Main = main;
|
||
ChatRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_Chat);
|
||
CreateRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_CreateRoom);
|
||
GetRoomPlayerCountRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Room_GetRoomPlayerCount);
|
||
UpdateRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_UpdateRoom);
|
||
IntoRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_IntoRoom);
|
||
QuitRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_QuitRoom);
|
||
}
|
||
|
||
#region 公开方法
|
||
|
||
public void MainController_Disposed()
|
||
{
|
||
ChatRequest.Dispose();
|
||
CreateRoomRequest.Dispose();
|
||
GetRoomPlayerCountRequest.Dispose();
|
||
UpdateRoomRequest.Dispose();
|
||
IntoRoomRequest.Dispose();
|
||
QuitRoomRequest.Dispose();
|
||
}
|
||
|
||
public async Task<bool> LogOutAsync()
|
||
{
|
||
try
|
||
{
|
||
// 需要当时登录给的Key发回去,确定是账号本人在操作才允许登出
|
||
if (Usercfg.LoginKey != Guid.Empty)
|
||
{
|
||
DataRequest request = RunTime.NewDataRequest(DataRequestType.RunTime_Logout);
|
||
request.AddRequestData("key", Usercfg.LoginKey);
|
||
await request.SendRequestAsync();
|
||
if (request.Result == RequestResult.Success)
|
||
{
|
||
string msg = "";
|
||
Guid key = Guid.Empty;
|
||
msg = request.GetResult<string>("msg") ?? "";
|
||
key = request.GetResult<Guid>("key");
|
||
if (key == Usercfg.LoginKey)
|
||
{
|
||
Usercfg.LoginKey = Guid.Empty;
|
||
Main.UpdateUI(MainInvokeType.LogOut, msg ?? "");
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
throw new CanNotLogOutException();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Main.ShowMessage(ShowMessageType.Error, "无法登出您的账号,请联系服务器管理员。", "登出失败", 5);
|
||
Main.GetMessage(e.GetErrorInfo());
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public async Task<bool> IntoRoomAsync(Room room)
|
||
{
|
||
try
|
||
{
|
||
IntoRoomRequest.AddRequestData("roomid", room.Roomid);
|
||
await IntoRoomRequest.SendRequestAsync();
|
||
if (IntoRoomRequest.Result == RequestResult.Success)
|
||
{
|
||
return IntoRoomRequest.GetResult<bool>("result");
|
||
}
|
||
throw new CanNotIntoRoomException();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Main.GetMessage(e.GetErrorInfo(), TimeType.None);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
public async Task<bool> UpdateRoomAsync()
|
||
{
|
||
bool result = false;
|
||
|
||
try
|
||
{
|
||
List<Room> list = new();
|
||
await UpdateRoomRequest.SendRequestAsync();
|
||
if (UpdateRoomRequest.Result == RequestResult.Success)
|
||
{
|
||
list = UpdateRoomRequest.GetResult<List<Room>>("rooms") ?? new();
|
||
Main.UpdateUI(MainInvokeType.UpdateRoom, list);
|
||
}
|
||
else throw new CanNotIntoRoomException();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Main.GetMessage(e.GetErrorInfo(), TimeType.None);
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
public async Task<int> GetRoomPlayerCountAsync(string roomid)
|
||
{
|
||
try
|
||
{
|
||
GetRoomPlayerCountRequest.AddRequestData("roomid", roomid);
|
||
await GetRoomPlayerCountRequest.SendRequestAsync();
|
||
return GetRoomPlayerCountRequest.GetResult<int>("count");
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Main.GetMessage(e.GetErrorInfo(), TimeType.None);
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
public async Task<bool> QuitRoomAsync(string roomid, bool isMaster)
|
||
{
|
||
bool result = false;
|
||
|
||
try
|
||
{
|
||
QuitRoomRequest.AddRequestData("roomid", roomid);
|
||
QuitRoomRequest.AddRequestData("isMaster", isMaster);
|
||
await QuitRoomRequest.SendRequestAsync();
|
||
if (QuitRoomRequest.Result == RequestResult.Success)
|
||
{
|
||
result = QuitRoomRequest.GetResult<bool>("result");
|
||
if (result)
|
||
{
|
||
Usercfg.InRoom = General.HallInstance;
|
||
return result;
|
||
}
|
||
}
|
||
throw new QuitRoomException();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Main.GetMessage(e.GetErrorInfo(), TimeType.None);
|
||
return result;
|
||
}
|
||
}
|
||
|
||
public async Task<string> CreateRoomAsync(string RoomType, string Password = "")
|
||
{
|
||
string roomid = "-1";
|
||
|
||
try
|
||
{
|
||
CreateRoomRequest.AddRequestData("roomtype", RoomType);
|
||
CreateRoomRequest.AddRequestData("master", Usercfg.LoginUser);
|
||
CreateRoomRequest.AddRequestData("password", Password);
|
||
await CreateRoomRequest.SendRequestAsync();
|
||
if (CreateRoomRequest.Result == RequestResult.Success)
|
||
{
|
||
roomid = CreateRoomRequest.GetResult<string>("roomid") ?? "-1";
|
||
}
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Main.GetMessage(e.GetErrorInfo(), TimeType.None);
|
||
}
|
||
|
||
return roomid;
|
||
}
|
||
|
||
public async Task<bool> ChatAsync(string msg)
|
||
{
|
||
try
|
||
{
|
||
ChatRequest.AddRequestData("msg", msg);
|
||
await ChatRequest.SendRequestAsync();
|
||
if (ChatRequest.Result == RequestResult.Success)
|
||
{
|
||
return true;
|
||
}
|
||
throw new CanNotSendTalkException();
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
Main.GetMessage(e.GetErrorInfo(), TimeType.None);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
}
|