mirror of
https://github.com/project-redbud/FunGame-Desktop.git
synced 2025-04-20 20:19:34 +08:00
Add UpdateRoomMaster, GetPlayerCount (#6)
This commit is contained in:
parent
70cda7bd43
commit
8b435390bd
@ -34,11 +34,13 @@ namespace Milimoe.FunGame.Desktop.Controller
|
|||||||
GeneralEventArgs EventArgs = new();
|
GeneralEventArgs EventArgs = new();
|
||||||
if (Main.OnBeforeLogoutEvent(EventArgs) == EventResult.Fail) return result;
|
if (Main.OnBeforeLogoutEvent(EventArgs) == EventResult.Fail) return result;
|
||||||
|
|
||||||
if (Usercfg.LoginUser is null) return result;
|
if (Usercfg.LoginUser.Id == 0) return result;
|
||||||
|
|
||||||
if (Usercfg.InRoom.Roomid != "-1")
|
if (Usercfg.InRoom.Roomid != "-1")
|
||||||
{
|
{
|
||||||
await MainModel.QuitRoom(Usercfg.InRoom.Roomid);
|
string roomid = Usercfg.InRoom.Roomid;
|
||||||
|
bool isMaster = Usercfg.InRoom.RoomMaster?.Id == Usercfg.LoginUser?.Id;
|
||||||
|
await MainModel.QuitRoom(roomid, isMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
result = await MainModel.LogOut();
|
result = await MainModel.LogOut();
|
||||||
@ -83,7 +85,7 @@ namespace Milimoe.FunGame.Desktop.Controller
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> QuitRoom(Room room)
|
public async Task<bool> QuitRoom(Room room, bool isMaster)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
string roomid = room.Roomid;
|
string roomid = room.Roomid;
|
||||||
@ -93,7 +95,7 @@ namespace Milimoe.FunGame.Desktop.Controller
|
|||||||
RoomEventArgs EventArgs = new(room);
|
RoomEventArgs EventArgs = new(room);
|
||||||
if (Main.OnBeforeQuitRoomEvent(EventArgs) == EventResult.Fail) return result;
|
if (Main.OnBeforeQuitRoomEvent(EventArgs) == EventResult.Fail) return result;
|
||||||
|
|
||||||
result = await MainModel.QuitRoom(roomid);
|
result = await MainModel.QuitRoom(roomid, isMaster);
|
||||||
|
|
||||||
if (result) Main.OnSucceedQuitRoomEvent(EventArgs);
|
if (result) Main.OnSucceedQuitRoomEvent(EventArgs);
|
||||||
else Main.OnFailedQuitRoomEvent(EventArgs);
|
else Main.OnFailedQuitRoomEvent(EventArgs);
|
||||||
@ -130,6 +132,11 @@ namespace Milimoe.FunGame.Desktop.Controller
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<int> GetRoomPlayerCount(string roomid)
|
||||||
|
{
|
||||||
|
return await MainModel.GetRoomPlayerCount(roomid);
|
||||||
|
}
|
||||||
|
|
||||||
public bool Chat(string msg)
|
public bool Chat(string msg)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
@ -8,7 +8,7 @@ namespace Milimoe.FunGame.Desktop.Library
|
|||||||
/**
|
/**
|
||||||
* 玩家设定内容
|
* 玩家设定内容
|
||||||
*/
|
*/
|
||||||
public static User? LoginUser { get; set; } = null; // 已登录的用户
|
public static User LoginUser { get; set; } = General.UnknownUserInstance; // 已登录的用户
|
||||||
public static string LoginUserName { get; set; } = ""; // 已登录用户名
|
public static string LoginUserName { get; set; } = ""; // 已登录用户名
|
||||||
public static Room InRoom { get; set; } = General.HallInstance; // 所处的房间
|
public static Room InRoom { get; set; } = General.HallInstance; // 所处的房间
|
||||||
}
|
}
|
||||||
|
@ -100,13 +100,31 @@ namespace Milimoe.FunGame.Desktop.Model
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> QuitRoom(string roomid)
|
public async Task<int> GetRoomPlayerCount(string roomid)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SetWorking();
|
||||||
|
if (RunTime.Socket?.Send(SocketMessageType.GetRoomPlayerCount, roomid) == SocketResult.Success)
|
||||||
|
{
|
||||||
|
return await Task.Factory.StartNew(SocketHandler_GetRoomPlayerCount);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Main.GetMessage(e.GetErrorInfo());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> QuitRoom(string roomid, bool isMaster)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SetWorking();
|
SetWorking();
|
||||||
if (RunTime.Socket?.Send(SocketMessageType.QuitRoom, roomid) == SocketResult.Success)
|
if (RunTime.Socket?.Send(SocketMessageType.QuitRoom, roomid, isMaster) == SocketResult.Success)
|
||||||
{
|
{
|
||||||
result = await Task.Factory.StartNew(SocketHandler_QuitRoom);
|
result = await Task.Factory.StartNew(SocketHandler_QuitRoom);
|
||||||
if (result)
|
if (result)
|
||||||
@ -129,7 +147,7 @@ namespace Milimoe.FunGame.Desktop.Model
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
SetWorking();
|
SetWorking();
|
||||||
if (RunTime.Socket?.Send(SocketMessageType.CreateRoom, RoomType, Usercfg.LoginUser?.Id ?? 0, Password) == SocketResult.Success)
|
if (RunTime.Socket?.Send(SocketMessageType.CreateRoom, RoomType, Usercfg.LoginUser.Id, Password) == SocketResult.Success)
|
||||||
{
|
{
|
||||||
string roomid = await Task.Factory.StartNew(SocketHandler_CreateRoom);
|
string roomid = await Task.Factory.StartNew(SocketHandler_CreateRoom);
|
||||||
if (roomid.Trim() != "")
|
if (roomid.Trim() != "")
|
||||||
@ -173,7 +191,7 @@ namespace Milimoe.FunGame.Desktop.Model
|
|||||||
if (SocketObject.SocketType == SocketMessageType.HeartBeat)
|
if (SocketObject.SocketType == SocketMessageType.HeartBeat)
|
||||||
{
|
{
|
||||||
// 心跳包单独处理
|
// 心跳包单独处理
|
||||||
if ((RunTime.Socket?.Connected ?? false) && Usercfg.LoginUser != null)
|
if ((RunTime.Socket?.Connected ?? false) && Usercfg.LoginUser.Id != 0)
|
||||||
Main.UpdateUI(MainInvokeType.SetGreenAndPing);
|
Main.UpdateUI(MainInvokeType.SetGreenAndPing);
|
||||||
}
|
}
|
||||||
else if (SocketObject.SocketType == SocketMessageType.ForceLogout)
|
else if (SocketObject.SocketType == SocketMessageType.ForceLogout)
|
||||||
@ -201,6 +219,15 @@ namespace Milimoe.FunGame.Desktop.Model
|
|||||||
Main.GetMessage(msg, TimeType.None);
|
Main.GetMessage(msg, TimeType.None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (SocketObject.SocketType == SocketMessageType.UpdateRoomMaster)
|
||||||
|
{
|
||||||
|
// 收到房间更换房主的信息
|
||||||
|
DataSet? user = null, room = null;
|
||||||
|
if (SocketObject.Length > 0) user = SocketObject.GetParam<DataSet>(0);
|
||||||
|
if (SocketObject.Length > 1) room = SocketObject.GetParam<DataSet>(1);
|
||||||
|
Room r = Core.Api.Utility.Factory.GetRoom(room, user);
|
||||||
|
if (r.Roomid != "-1" && r.Roomid == Usercfg.InRoom.Roomid) Main.UpdateUI(MainInvokeType.UpdateRoomMaster, r);
|
||||||
|
}
|
||||||
else if (SocketMessageTypes.Contains(SocketObject.SocketType))
|
else if (SocketMessageTypes.Contains(SocketObject.SocketType))
|
||||||
{
|
{
|
||||||
Work = SocketObject;
|
Work = SocketObject;
|
||||||
@ -283,6 +310,21 @@ namespace Milimoe.FunGame.Desktop.Model
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int SocketHandler_GetRoomPlayerCount()
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
WaitForWorkDone();
|
||||||
|
if (Work.Length > 0) count = Work.GetParam<int>(0);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Main.GetMessage(e.GetErrorInfo());
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
private List<Room> SocketHandler_UpdateRoom()
|
private List<Room> SocketHandler_UpdateRoom()
|
||||||
{
|
{
|
||||||
List<Room> list = new();
|
List<Room> list = new();
|
||||||
|
@ -235,7 +235,7 @@ namespace Milimoe.FunGame.Desktop.Model
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SocketMessageType.HeartBeat:
|
case SocketMessageType.HeartBeat:
|
||||||
if (Socket.Connected && Usercfg.LoginUser != null)
|
if (Socket.Connected && Usercfg.LoginUser.Id != 0)
|
||||||
Main.UpdateUI(MainInvokeType.SetGreenAndPing);
|
Main.UpdateUI(MainInvokeType.SetGreenAndPing);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -149,6 +149,7 @@ namespace Milimoe.FunGame.Desktop.UI
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MainInvokeType.Disconnected:
|
case MainInvokeType.Disconnected:
|
||||||
|
Rooms.Clear();
|
||||||
RoomList.Items.Clear();
|
RoomList.Items.Clear();
|
||||||
Config.FunGame_isRetrying = false;
|
Config.FunGame_isRetrying = false;
|
||||||
Config.FunGame_isConnected = false;
|
Config.FunGame_isConnected = false;
|
||||||
@ -160,6 +161,7 @@ namespace Milimoe.FunGame.Desktop.UI
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MainInvokeType.Disconnect:
|
case MainInvokeType.Disconnect:
|
||||||
|
Rooms.Clear();
|
||||||
RoomList.Items.Clear();
|
RoomList.Items.Clear();
|
||||||
Config.FunGame_isAutoRetry = false;
|
Config.FunGame_isAutoRetry = false;
|
||||||
Config.FunGame_isRetrying = false;
|
Config.FunGame_isRetrying = false;
|
||||||
@ -214,7 +216,22 @@ namespace Milimoe.FunGame.Desktop.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MainInvokeType.UpdateRoomMaster:
|
||||||
|
if (objs != null && objs.Length > 0)
|
||||||
|
{
|
||||||
|
Room r = (Room)objs[0];
|
||||||
|
Usercfg.InRoom = r;
|
||||||
|
Rooms.RemoveRoom(r.Roomid);
|
||||||
|
Rooms.AddRoom(r);
|
||||||
|
if (r.RoomMaster != null)
|
||||||
|
{
|
||||||
|
string msg = $"房间 [ {r.Roomid} ] 的房主已变更为" + (r.RoomMaster.Username != Usercfg.LoginUserName ? $" [ {r.RoomMaster.Username} ]" : "您") + "。";
|
||||||
|
GetMessage(msg, TimeType.TimeOnly);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -625,7 +642,7 @@ namespace Milimoe.FunGame.Desktop.UI
|
|||||||
if (objs != null && objs.Length > 0)
|
if (objs != null && objs.Length > 0)
|
||||||
{
|
{
|
||||||
Usercfg.LoginUser = (User)objs[0];
|
Usercfg.LoginUser = (User)objs[0];
|
||||||
if (Usercfg.LoginUser is null)
|
if (Usercfg.LoginUser.Id == 0)
|
||||||
{
|
{
|
||||||
throw new NoUserLogonException();
|
throw new NoUserLogonException();
|
||||||
}
|
}
|
||||||
@ -645,9 +662,10 @@ namespace Milimoe.FunGame.Desktop.UI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void LogoutAccount()
|
private void LogoutAccount()
|
||||||
{
|
{
|
||||||
InMain();
|
Usercfg.InRoom = General.HallInstance;
|
||||||
Usercfg.LoginUser = null;
|
Usercfg.LoginUser = General.UnknownUserInstance;
|
||||||
Usercfg.LoginUserName = "";
|
Usercfg.LoginUserName = "";
|
||||||
|
InMain();
|
||||||
NowAccount.Text = "请登录账号";
|
NowAccount.Text = "请登录账号";
|
||||||
Logout.Visible = false;
|
Logout.Visible = false;
|
||||||
Login.Visible = true;
|
Login.Visible = true;
|
||||||
@ -692,7 +710,7 @@ namespace Milimoe.FunGame.Desktop.UI
|
|||||||
msg = DateTimeUtility.GetNowShortTime() + " [ " + Usercfg.LoginUserName + " ] 说: " + text;
|
msg = DateTimeUtility.GetNowShortTime() + " [ " + Usercfg.LoginUserName + " ] 说: " + text;
|
||||||
}
|
}
|
||||||
WritelnGameInfo(msg);
|
WritelnGameInfo(msg);
|
||||||
if (Usercfg.LoginUser != null && !await SwitchTalkMessage(text))
|
if (Usercfg.LoginUser.Id != 0 && !await SwitchTalkMessage(text))
|
||||||
{
|
{
|
||||||
MainController?.Chat(" [ " + Usercfg.LoginUserName + " ] 说: " + text);
|
MainController?.Chat(" [ " + Usercfg.LoginUserName + " ] 说: " + text);
|
||||||
}
|
}
|
||||||
@ -959,7 +977,8 @@ namespace Milimoe.FunGame.Desktop.UI
|
|||||||
if (MainController != null)
|
if (MainController != null)
|
||||||
{
|
{
|
||||||
string roomid = Usercfg.InRoom.Roomid;
|
string roomid = Usercfg.InRoom.Roomid;
|
||||||
if (await MainController.QuitRoom(Usercfg.InRoom))
|
bool isMaster = Usercfg.InRoom.RoomMaster?.Id == Usercfg.LoginUser.Id;
|
||||||
|
if (await MainController.QuitRoom(Usercfg.InRoom, isMaster))
|
||||||
{
|
{
|
||||||
WritelnGameInfo(DateTimeUtility.GetNowShortTime() + " 离开房间");
|
WritelnGameInfo(DateTimeUtility.GetNowShortTime() + " 离开房间");
|
||||||
WritelnGameInfo("[ " + Usercfg.LoginUserName + " ] 已离开房间 -> [ " + roomid + " ]");
|
WritelnGameInfo("[ " + Usercfg.LoginUserName + " ] 已离开房间 -> [ " + roomid + " ]");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user