diff --git a/FunGame.Core/Api/Factory/RoomFactory.cs b/FunGame.Core/Api/Factory/RoomFactory.cs
index d79a80b..70128da 100644
--- a/FunGame.Core/Api/Factory/RoomFactory.cs
+++ b/FunGame.Core/Api/Factory/RoomFactory.cs
@@ -5,9 +5,9 @@ namespace Milimoe.FunGame.Core.Api.Factory
{
internal class RoomFactory
{
- internal static Room GetInstance(DataSet? DsRoom, DataSet? DsUser)
+ internal static Room GetInstance(DataRow? DrRoom, DataRow? DrUser)
{
- return new Room(DsRoom, DsUser);
+ return new Room(DrRoom, DrUser);
}
}
}
diff --git a/FunGame.Core/Api/Factory/SkillFactory.cs b/FunGame.Core/Api/Factory/SkillFactory.cs
index 674a571..e475516 100644
--- a/FunGame.Core/Api/Factory/SkillFactory.cs
+++ b/FunGame.Core/Api/Factory/SkillFactory.cs
@@ -1,17 +1,17 @@
-using Milimoe.FunGame.Core.Entity;
+using System.Data;
+using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Constant;
-using System.Data;
namespace Milimoe.FunGame.Core.Api.Factory
{
internal class SkillFactory
{
- internal static Skill GetInstance(DataSet? DataSet, SkillType type = SkillType.Passive)
+ internal static Skill GetInstance(DataRow? DataRow, SkillType type = SkillType.Passive)
{
Skill skill = type switch
{
- SkillType.Active => new ActiveSkill(DataSet),
- _ => new PassiveSkill(DataSet)
+ SkillType.Active => new ActiveSkill(DataRow),
+ _ => new PassiveSkill(DataRow)
};
return skill;
}
diff --git a/FunGame.Core/Api/Factory/UserFactory.cs b/FunGame.Core/Api/Factory/UserFactory.cs
index cc7e0f7..28d3e3c 100644
--- a/FunGame.Core/Api/Factory/UserFactory.cs
+++ b/FunGame.Core/Api/Factory/UserFactory.cs
@@ -5,9 +5,9 @@ namespace Milimoe.FunGame.Core.Api.Factory
{
internal class UserFactory
{
- internal static User GetInstance(DataSet? DataSet)
+ internal static User GetInstance(DataRow? DataRow)
{
- return new User(DataSet);
+ return new User(DataRow);
}
}
}
diff --git a/FunGame.Core/Api/Utility/Factory.cs b/FunGame.Core/Api/Utility/Factory.cs
index 4607631..d56ae61 100644
--- a/FunGame.Core/Api/Utility/Factory.cs
+++ b/FunGame.Core/Api/Utility/Factory.cs
@@ -7,6 +7,38 @@ namespace Milimoe.FunGame.Core.Api.Utility
{
public class Factory
{
+ ///
+ /// 获取Room实例
+ ///
+ /// RoomRow
+ /// UserRow(RoomMaster)
+ ///
+ public static Room GetRoom(DataRow? DrRoom, DataRow? DrUser)
+ {
+ return RoomFactory.GetInstance(DrRoom, DrUser);
+ }
+
+ ///
+ /// 获取Skill实例,默认返回PassiveSkill
+ ///
+ /// SkillRow
+ /// Skill类型
+ ///
+ public static Skill GetSkill(DataRow? DataRow, SkillType SkillType = SkillType.Passive)
+ {
+ return SkillFactory.GetInstance(DataRow, SkillType);
+ }
+
+ ///
+ /// 获取User实例
+ ///
+ /// UserRow
+ ///
+ public static User GetUser(DataRow? DataRow)
+ {
+ return UserFactory.GetInstance(DataRow);
+ }
+
///
/// 获取一个不为NULL的实例
/// Item默认返回PassiveItem
@@ -14,29 +46,100 @@ namespace Milimoe.FunGame.Core.Api.Utility
/// 若无法找到T,返回唯一的空对象
///
/// Entity类
- /// 使用DataSet构造对象(真香)
- ///
- public static T GetInstance(params DataSet?[] DataSets)
+ /// 使用DataRow构造对象
+ /// T
+ public static T GetInstance(params DataRow?[] DataRows)
{
- if (DataSets is null || DataSets.Length == 0) throw new GetInstanceException();
+ if (DataRows is null || DataRows.Length == 0) throw new GetInstanceException();
object instance = General.EntityInstance;
if (typeof(T) == typeof(User))
{
- instance = UserFactory.GetInstance(DataSets[0]);
+ instance = GetUser(DataRows[0]);
}
else if (typeof(T) == typeof(Skill) || typeof(T) == typeof(PassiveSkill))
{
- instance = SkillFactory.GetInstance(DataSets[0]);
+ instance = GetSkill(DataRows[0]);
}
else if (typeof(T) == typeof(ActiveSkill))
{
- instance = SkillFactory.GetInstance(DataSets[0], SkillType.Active);
+ instance = GetSkill(DataRows[0], SkillType.Active);
}
else if (typeof(T) == typeof(Room))
{
- instance = RoomFactory.GetInstance(DataSets[0], DataSets[1]);
+ instance = GetRoom(DataRows[0], DataRows[1]);
}
return (T)instance;
}
+
+ ///
+ /// 获取T的数组
+ /// Item默认返回PassiveItem数组
+ /// Skill默认返回PassiveSkill数组
+ /// 若无法找到T,返回空数组
+ ///
+ /// Entity类
+ /// 使用DataSet构造对象数组
+ /// List T
+ public static List GetList(params DataSet?[] DataSets)
+ {
+ List list = new();
+ if (DataSets is null || DataSets.Length == 0) throw new GetInstanceException();
+ if (typeof(T) == typeof(User))
+ {
+ DataSet? ds = DataSets[0];
+ if (ds != null && ds.Tables[0].Rows.Count > 0)
+ {
+ foreach (DataRow? row in ds.Tables[0].Rows)
+ {
+ object entity = GetUser(row);
+ list.Add((T)entity);
+ }
+ }
+ }
+ else if (typeof(T) == typeof(Skill) || typeof(T) == typeof(PassiveSkill))
+ {
+ DataSet? ds = DataSets[0];
+ if (ds != null && ds.Tables[0].Rows.Count > 0)
+ {
+ foreach (DataRow? row in ds.Tables[0].Rows)
+ {
+ object entity = GetSkill(row);
+ list.Add((T)entity);
+ }
+ }
+ }
+ else if (typeof(T) == typeof(ActiveSkill))
+ {
+ DataSet? ds = DataSets[0];
+ if (ds != null && ds.Tables[0].Rows.Count > 0)
+ {
+ foreach (DataRow? row in ds.Tables[0].Rows)
+ {
+ object entity = GetSkill(row, SkillType.Active);
+ list.Add((T)entity);
+ }
+ }
+ }
+ else if (typeof(T) == typeof(Room))
+ {
+ DataSet? ds = DataSets[0];
+ if (ds != null && ds.Tables[0].Rows.Count > 0)
+ {
+ foreach (DataRow? row in ds.Tables[0].Rows)
+ {
+ if (row != null)
+ {
+ DataRow[] rows = ds.Tables[1].Select($"{Library.SQLScript.Entity.UserQuery.Column_Username} = '{row[Library.SQLScript.Entity.RoomQuery.Column_RoomMasterName]}'");
+ if (rows != null && rows.Length > 0)
+ {
+ object entity = GetRoom(row, rows[0]);
+ list.Add((T)entity);
+ }
+ }
+ }
+ }
+ }
+ return new List();
+ }
}
}
diff --git a/FunGame.Core/Entity/Skill/ActiveSkill.cs b/FunGame.Core/Entity/Skill/ActiveSkill.cs
index d4006d3..96f6c07 100644
--- a/FunGame.Core/Entity/Skill/ActiveSkill.cs
+++ b/FunGame.Core/Entity/Skill/ActiveSkill.cs
@@ -17,7 +17,7 @@ namespace Milimoe.FunGame.Core.Entity
public decimal Reference9 { get; set; } = 0;
public decimal Reference10 { get; set; } = 0;
- internal ActiveSkill(DataSet? DataSet)
+ internal ActiveSkill(DataRow? DataRow)
{
Active = true;
}
diff --git a/FunGame.Core/Entity/Skill/PassiveSkill.cs b/FunGame.Core/Entity/Skill/PassiveSkill.cs
index 66b64e4..6024144 100644
--- a/FunGame.Core/Entity/Skill/PassiveSkill.cs
+++ b/FunGame.Core/Entity/Skill/PassiveSkill.cs
@@ -15,7 +15,7 @@ namespace Milimoe.FunGame.Core.Entity
public decimal Reference9 { get; set; } = 0;
public decimal Reference10 { get; set; } = 0;
- internal PassiveSkill(DataSet? DataSet)
+ internal PassiveSkill(DataRow? DataRow)
{
Active = false;
}
diff --git a/FunGame.Core/Entity/System/Room.cs b/FunGame.Core/Entity/System/Room.cs
index c0bb4b7..d940192 100644
--- a/FunGame.Core/Entity/System/Room.cs
+++ b/FunGame.Core/Entity/System/Room.cs
@@ -27,18 +27,17 @@ namespace Milimoe.FunGame.Core.Entity
public string Password { get; set; } = "";
public GameStatistics? Statistics { get; set; } = null;
- internal Room(DataSet? DsRoom, DataSet? DsUser)
+ internal Room(DataRow? DrRoom, DataRow? DrUser)
{
- if (DsRoom != null && DsRoom.Tables.Count > 0 && DsRoom.Tables[0].Rows.Count > 0)
+ if (DrRoom != null)
{
- DataRow row = DsRoom.Tables[0].Rows[0];
- Id = (long)row[RoomQuery.Column_ID];
- Roomid = (string)row[RoomQuery.Column_RoomID];
- CreateTime = (DateTime)row[RoomQuery.Column_CreateTime];
- RoomMaster = Api.Utility.Factory.GetInstance(DsUser);
- RoomType = (RoomType)Convert.ToInt32(row[RoomQuery.Column_RoomType]);
- RoomState = (RoomState)Convert.ToInt32(row[RoomQuery.Column_RoomState]);
- Password = (string)row[RoomQuery.Column_Password];
+ Id = (long)DrRoom[RoomQuery.Column_ID];
+ Roomid = (string)DrRoom[RoomQuery.Column_RoomID];
+ CreateTime = (DateTime)DrRoom[RoomQuery.Column_CreateTime];
+ RoomMaster = Api.Utility.Factory.GetInstance(DrUser);
+ RoomType = (RoomType)Convert.ToInt32(DrRoom[RoomQuery.Column_RoomType]);
+ RoomState = (RoomState)Convert.ToInt32(DrRoom[RoomQuery.Column_RoomState]);
+ Password = (string)DrRoom[RoomQuery.Column_Password];
}
}
diff --git a/FunGame.Core/Entity/User/User.cs b/FunGame.Core/Entity/User/User.cs
index 5adf260..e1c38f9 100644
--- a/FunGame.Core/Entity/User/User.cs
+++ b/FunGame.Core/Entity/User/User.cs
@@ -28,25 +28,24 @@ namespace Milimoe.FunGame.Core.Entity
}
- internal User(DataSet? DataSet)
+ internal User(DataRow? DataRow)
{
- if (DataSet != null && DataSet.Tables.Count > 0 && DataSet.Tables[0].Rows.Count > 0)
+ if (DataRow != null)
{
- DataRow row = DataSet.Tables[0].Rows[0];
- Id = (long)row[UserQuery.Column_UID];
- Username = (string)row[UserQuery.Column_Username];
- Password = (string)row[UserQuery.Column_Password];
- RegTime = (DateTime)row[UserQuery.Column_RegTime];
- LastTime = (DateTime)row[UserQuery.Column_LastTime];
- Email = (string)row[UserQuery.Column_Email];
- NickName = (string)row[UserQuery.Column_Nickname];
- IsAdmin = Convert.ToInt32(row[UserQuery.Column_IsAdmin]) == 1;
- IsOperator = Convert.ToInt32(row[UserQuery.Column_IsOperator]) == 1;
- IsEnable = Convert.ToInt32(row[UserQuery.Column_IsEnable]) == 1;
- Credits = Convert.ToDecimal(row[UserQuery.Column_Credits]);
- Materials = Convert.ToDecimal(row[UserQuery.Column_Materials]);
- GameTime = Convert.ToDecimal(row[UserQuery.Column_GameTime]);
- AutoKey = (string)row[UserQuery.Column_AutoKey];
+ Id = (long)DataRow[UserQuery.Column_UID];
+ Username = (string)DataRow[UserQuery.Column_Username];
+ Password = (string)DataRow[UserQuery.Column_Password];
+ RegTime = (DateTime)DataRow[UserQuery.Column_RegTime];
+ LastTime = (DateTime)DataRow[UserQuery.Column_LastTime];
+ Email = (string)DataRow[UserQuery.Column_Email];
+ NickName = (string)DataRow[UserQuery.Column_Nickname];
+ IsAdmin = Convert.ToInt32(DataRow[UserQuery.Column_IsAdmin]) == 1;
+ IsOperator = Convert.ToInt32(DataRow[UserQuery.Column_IsOperator]) == 1;
+ IsEnable = Convert.ToInt32(DataRow[UserQuery.Column_IsEnable]) == 1;
+ Credits = Convert.ToDecimal(DataRow[UserQuery.Column_Credits]);
+ Materials = Convert.ToDecimal(DataRow[UserQuery.Column_Materials]);
+ GameTime = Convert.ToDecimal(DataRow[UserQuery.Column_GameTime]);
+ AutoKey = (string)DataRow[UserQuery.Column_AutoKey];
}
}
diff --git a/FunGame.Core/Library/Constant/General.cs b/FunGame.Core/Library/Constant/General.cs
index 68ddddb..a2fbe34 100644
--- a/FunGame.Core/Library/Constant/General.cs
+++ b/FunGame.Core/Library/Constant/General.cs
@@ -15,7 +15,7 @@ namespace Milimoe.FunGame.Core.Library.Constant
public const int MaxThread_General = 20;
public const int MaxTask_4C4G = 40;
- public const int SocketByteSize = 2048;
+ public const int SocketByteSize = 20480;
public const int StreamByteSize = 2048;
}
}
diff --git a/FunGame.Core/Library/Server/RoomList.cs b/FunGame.Core/Library/Server/RoomList.cs
index 4e96bd4..8a479fe 100644
--- a/FunGame.Core/Library/Server/RoomList.cs
+++ b/FunGame.Core/Library/Server/RoomList.cs
@@ -17,19 +17,37 @@ namespace Milimoe.FunGame.Core.Library.Server
_Server = Server;
}
- public List GetList()
+ public List GetRoomList()
{
return _List.Values.Cast().ToList();
}
+
+ public List GetRoomIDList()
+ {
+ return _List.Keys.Cast().ToList();
+ }
+
+ public void Clear()
+ {
+ _List.Clear();
+ }
public void AddRoom(Room Room)
{
- _List.Add(Room.Name, Room);
+ _List.Add(Room.Roomid, Room);
+ }
+
+ public void AddRooms(List Rooms)
+ {
+ foreach (Room Room in Rooms)
+ {
+ _List.Add(Room.Roomid, Room);
+ }
}
public void RemoveRoom(Room Room)
{
- _List.Remove(Room.Name);
+ _List.Remove(Room.Roomid);
}
public Room? GetRoom(string RoomID)
diff --git a/FunGame.Desktop/Model/LoginModel.cs b/FunGame.Desktop/Model/LoginModel.cs
index f87d35b..e094554 100644
--- a/FunGame.Desktop/Model/LoginModel.cs
+++ b/FunGame.Desktop/Model/LoginModel.cs
@@ -130,9 +130,9 @@ namespace Milimoe.FunGame.Desktop.Model
object[] objs = SocketObject.Parameters;
if (objs != null && objs.Length > 0)
{
- DataSet? Set = SocketObject.GetParam(0);
+ DataRow? row = SocketObject.GetParam(0);
// 创建User对象并返回到Main
- RunTime.Main?.UpdateUI(MainInvokeType.SetUser, new object[] { Factory.GetInstance(Set) });
+ RunTime.Main?.UpdateUI(MainInvokeType.SetUser, new object[] { Factory.GetInstance(row) });
RunTime.Login?.OnSucceedLoginEvent(Login.EventArgs);
RunTime.Login?.OnAfterLoginEvent(Login.EventArgs);
return;
diff --git a/FunGame.Desktop/Model/MainModel.cs b/FunGame.Desktop/Model/MainModel.cs
index af19c94..341468b 100644
--- a/FunGame.Desktop/Model/MainModel.cs
+++ b/FunGame.Desktop/Model/MainModel.cs
@@ -162,6 +162,10 @@ namespace Milimoe.FunGame.Desktop.Model
case SocketMessageType.Chat:
SocketHandler_Chat(SocketObject);
break;
+
+ case SocketMessageType.UpdateRoom:
+ SocketHandler_UpdateRoom(SocketObject);
+ break;
case SocketMessageType.Unknown:
default:
@@ -221,6 +225,11 @@ namespace Milimoe.FunGame.Desktop.Model
Main.OnAfterIntoRoomEvent(args);
}
+ private void SocketHandler_UpdateRoom(SocketObject SocketObject)
+ {
+ Main.UpdateUI(MainInvokeType.UpdateRoom, SocketObject.Parameters);
+ }
+
private void SocketHandler_Chat(SocketObject SocketObject)
{
SendTalkEventArgs SendTalkEventArgs = new(LastSendTalkMessage);
diff --git a/FunGame.Desktop/UI/Main/Main.Designer.cs b/FunGame.Desktop/UI/Main/Main.Designer.cs
index 0561e17..cae7ec4 100644
--- a/FunGame.Desktop/UI/Main/Main.Designer.cs
+++ b/FunGame.Desktop/UI/Main/Main.Designer.cs
@@ -306,18 +306,7 @@ namespace Milimoe.FunGame.Desktop.UI
this.PresetText.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.PresetText.Font = new System.Drawing.Font("LanaPixel", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.PresetText.FormattingEnabled = true;
- this.PresetText.Items.AddRange(new object[] {
- "- 快捷消息 -",
- "签到",
- "积分",
- "查看库存",
- "游戏商店",
- "创建游戏 混战",
- "创建游戏 团队",
- "开始游戏",
- "重新连接",
- "开启自动重连",
- "关闭自动重连"});
+ this.PresetText.Items.AddRange(new object[] { "- 快捷消息 -" });
this.PresetText.Location = new System.Drawing.Point(195, 422);
this.PresetText.Name = "PresetText";
this.PresetText.Size = new System.Drawing.Size(121, 26);
@@ -360,19 +349,6 @@ namespace Milimoe.FunGame.Desktop.UI
this.RoomList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.RoomList.FormattingEnabled = true;
this.RoomList.ItemHeight = 19;
- this.RoomList.Items.AddRange(new object[] {
- "114514",
- "1919810",
- "12900",
- "12600",
- "12100",
- "3329500",
- "111111",
- "123456",
- "123698745",
- "667678970",
- "3305106902",
- "987654"});
this.RoomList.Location = new System.Drawing.Point(0, 26);
this.RoomList.Name = "RoomList";
this.RoomList.Size = new System.Drawing.Size(186, 192);
diff --git a/FunGame.Desktop/UI/Main/Main.cs b/FunGame.Desktop/UI/Main/Main.cs
index 31d4486..4bf12b2 100644
--- a/FunGame.Desktop/UI/Main/Main.cs
+++ b/FunGame.Desktop/UI/Main/Main.cs
@@ -200,6 +200,14 @@ namespace Milimoe.FunGame.Desktop.UI
NoticeText.Text = Config.FunGame_Notice;
break;
+ case MainInvokeType.UpdateRoom:
+ if (objs != null && objs.Length > 0)
+ {
+ List list = (List)objs[0];
+ RoomList.Items.AddRange(list.ToArray());
+ }
+ break;
+
default:
break;
}