From 11929dbcce3bb03742879337d0c4f07bfb3dbba0 Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Mon, 17 Mar 2025 16:54:19 +0800 Subject: [PATCH] server fixed --- .../Common/ProtoBufHelper.cs | 1 - .../Manager/ClientManager.cs | 69 ++++++++++--------- .../Manager/GameShareManager.cs | 32 +++++---- .../Manager/SavDataManager.cs | 7 +- AxibugEmuOnline.Server/Manager/UserManager.cs | 2 - 5 files changed, 56 insertions(+), 55 deletions(-) diff --git a/AxibugEmuOnline.Server/Common/ProtoBufHelper.cs b/AxibugEmuOnline.Server/Common/ProtoBufHelper.cs index 15546784..608df6b6 100644 --- a/AxibugEmuOnline.Server/Common/ProtoBufHelper.cs +++ b/AxibugEmuOnline.Server/Common/ProtoBufHelper.cs @@ -4,7 +4,6 @@ namespace AxibugEmuOnline.Server.Common { public static class ProtoBufHelper { - public static byte[] Serizlize(IMessage msg) { return msg.ToByteArray(); diff --git a/AxibugEmuOnline.Server/Manager/ClientManager.cs b/AxibugEmuOnline.Server/Manager/ClientManager.cs index ea3351a1..580539bf 100644 --- a/AxibugEmuOnline.Server/Manager/ClientManager.cs +++ b/AxibugEmuOnline.Server/Manager/ClientManager.cs @@ -10,9 +10,9 @@ namespace AxibugEmuOnline.Server.Manager { public class ClientManager { - private List<ClientInfo> ClientList = new List<ClientInfo>(); - private Dictionary<Socket, ClientInfo> _DictSocketClient = new Dictionary<Socket, ClientInfo>(); - private Dictionary<long?, ClientInfo> _DictUIDClient = new Dictionary<long?, ClientInfo>(); + private HashSet<ClientInfo> mClientList = new HashSet<ClientInfo>(); + private Dictionary<Socket, ClientInfo> mDictSocketClient = new Dictionary<Socket, ClientInfo>(); + private Dictionary<long?, ClientInfo> mDictUIDClient = new Dictionary<long?, ClientInfo>(); private long TestUIDSeed = 0; private System.Timers.Timer clientCheckTimer; @@ -53,7 +53,7 @@ namespace AxibugEmuOnline.Server.Manager private void ClientCheckClearOffline_Elapsed(object sender, ElapsedEventArgs e) { DateTime CheckDT = DateTime.Now.AddMinutes(-1 * _RemoveOfflineCacheMin); - ClientInfo[] OfflineClientlist = ClientList.Where(w => w.IsOffline == true && w.LogOutDT < CheckDT).ToArray(); + ClientInfo[] OfflineClientlist = mClientList.Where(w => w.IsOffline == true && w.LogOutDT < CheckDT).ToArray(); for (int i = 0; i < OfflineClientlist.Length; i++) { @@ -80,10 +80,10 @@ namespace AxibugEmuOnline.Server.Manager Socket oldsocket = cinfo._socket; cinfo._socket = _socket; - if (_DictSocketClient.ContainsKey(oldsocket)) - _DictSocketClient.Remove(oldsocket); + if (mDictSocketClient.ContainsKey(oldsocket)) + mDictSocketClient.Remove(oldsocket); - _DictSocketClient[_socket] = cinfo; + mDictSocketClient[_socket] = cinfo; } else { @@ -108,11 +108,11 @@ namespace AxibugEmuOnline.Server.Manager try { Console.WriteLine("追加连接玩家 UID=>" + clientInfo.UID + " | " + clientInfo.Account); - lock (ClientList) + lock (mClientList) { - _DictUIDClient.Add(clientInfo.UID, clientInfo); - _DictSocketClient.Add(clientInfo._socket, clientInfo); - ClientList.Add(clientInfo); + mDictUIDClient.Add(clientInfo.UID, clientInfo); + mDictSocketClient.Add(clientInfo._socket, clientInfo); + mClientList.Add(clientInfo); } } catch (Exception ex) @@ -127,15 +127,15 @@ namespace AxibugEmuOnline.Server.Manager /// <param name="client"></param> public void RemoveClient(ClientInfo client) { - lock (ClientList) + lock (mClientList) { - if (_DictUIDClient.ContainsKey(client.UID)) - _DictUIDClient.Remove(client.UID); + if (mDictUIDClient.ContainsKey(client.UID)) + mDictUIDClient.Remove(client.UID); - if (_DictSocketClient.ContainsKey(client._socket)) - _DictSocketClient.Remove(client._socket); + if (mDictSocketClient.ContainsKey(client._socket)) + mDictSocketClient.Remove(client._socket); - ClientList.Remove(client); + mClientList.Remove(client); } } @@ -145,15 +145,15 @@ namespace AxibugEmuOnline.Server.Manager /// <param name="client"></param> public bool GetClientByUID(long uid, out ClientInfo client, bool bNeedOnline = false) { - lock (ClientList) + lock (mClientList) { - if (!_DictUIDClient.ContainsKey(uid)) + if (!mDictUIDClient.ContainsKey(uid)) { client = null; return false; } - client = _DictUIDClient[uid]; + client = mDictUIDClient[uid]; if (bNeedOnline && client.IsOffline) @@ -164,12 +164,12 @@ namespace AxibugEmuOnline.Server.Manager public ClientInfo GetClientForUID(long UID) { - return _DictUIDClient.ContainsKey(UID) ? _DictUIDClient[UID] : null; + return mDictUIDClient.ContainsKey(UID) ? mDictUIDClient[UID] : null; } public ClientInfo GetClientForSocket(Socket sk) { - return _DictSocketClient.ContainsKey(sk) ? _DictSocketClient[sk] : null; + return mDictSocketClient.ContainsKey(sk) ? mDictSocketClient[sk] : null; } /// <summary> @@ -178,7 +178,7 @@ namespace AxibugEmuOnline.Server.Manager /// <returns></returns> public List<ClientInfo> GetOnlineClientList() { - return ClientList.Where(w => w.IsOffline == false).ToList(); + return mClientList.Where(w => w.IsOffline == false).ToList(); } @@ -188,10 +188,10 @@ namespace AxibugEmuOnline.Server.Manager /// <param name="sk"></param> public void SetClientOfflineForSocket(Socket sk) { - if (!_DictSocketClient.ContainsKey(sk)) + if (!mDictSocketClient.ContainsKey(sk)) return; - ClientInfo cinfo = _DictSocketClient[sk]; + ClientInfo cinfo = mDictSocketClient[sk]; Console.WriteLine("标记玩家UID" + cinfo.UID + "为离线"); cinfo.IsOffline = true; cinfo.LogOutDT = DateTime.Now; @@ -201,10 +201,10 @@ namespace AxibugEmuOnline.Server.Manager public void RemoveClientForSocket(Socket sk) { - if (!_DictSocketClient.ContainsKey(sk)) + if (!mDictSocketClient.ContainsKey(sk)) return; - RemoveClient(_DictSocketClient[sk]); + RemoveClient(mDictSocketClient[sk]); } #endregion @@ -279,7 +279,7 @@ namespace AxibugEmuOnline.Server.Manager public void ClientSendALL(int CMDID, int ERRCODE, byte[] data, long SkipUID = -1) { - ClientSend(ClientList, CMDID, ERRCODE, data, SkipUID); + ClientSend(mClientList, CMDID, ERRCODE, data, SkipUID); } public void ClientSend(List<long> UIDs, int CMDID, int ERRCODE, byte[] data, long SkipUID = -1) @@ -299,17 +299,18 @@ namespace AxibugEmuOnline.Server.Manager /// <param name="CMDID"></param> /// <param name="ERRCODE"></param> /// <param name="data"></param> - public void ClientSend(List<ClientInfo> _toclientlist, int CMDID, int ERRCODE, byte[] data, long SkipUID = -1) + public void ClientSend(IEnumerable<ClientInfo> _toclientlist, int CMDID, int ERRCODE, byte[] data, long SkipUID = -1) { - for (int i = 0; i < _toclientlist.Count(); i++) + //for (int i = 0; i < _toclientlist.Count(); i++) + foreach(var _c in _toclientlist) { - if (_toclientlist[i] == null || _toclientlist[i].IsOffline) + if (_c == null || _c.IsOffline) continue; - if (SkipUID > -1 && _toclientlist[i].UID == SkipUID) + if (SkipUID > -1 && _c.UID == SkipUID) continue; - AppSrv.g_SocketMgr.SendToSocket(_toclientlist[i]._socket, CMDID, ERRCODE, data); + AppSrv.g_SocketMgr.SendToSocket(_c._socket, CMDID, ERRCODE, data); } } @@ -335,7 +336,7 @@ namespace AxibugEmuOnline.Server.Manager public int GetOnlineClient() { - return ClientList.Where(w => !w.IsOffline).Count(); + return mClientList.Where(w => !w.IsOffline).Count(); } } } diff --git a/AxibugEmuOnline.Server/Manager/GameShareManager.cs b/AxibugEmuOnline.Server/Manager/GameShareManager.cs index 16df6fe3..dc1b8304 100644 --- a/AxibugEmuOnline.Server/Manager/GameShareManager.cs +++ b/AxibugEmuOnline.Server/Manager/GameShareManager.cs @@ -171,32 +171,34 @@ namespace AxibugEmuOnline.Server.Manager ptype = RomPlatformType.Invalid; using (MySqlConnection conn = SQLRUN.GetConn("GetRomPlatformType")) - { - try { - string query = "SELECT PlatformType from romlist where Id = ?RomID "; - using (var command = new MySqlCommand(query, conn)) + try { - // 设置参数值 - command.Parameters.AddWithValue("?RomID", RomID); - // 执行查询并处理结果 - using (var reader = command.ExecuteReader()) + string query = "SELECT PlatformType from romlist where Id = ?RomID "; + using (var command = new MySqlCommand(query, conn)) { - while (reader.Read()) + // 设置参数值 + command.Parameters.AddWithValue("?RomID", RomID); + // 执行查询并处理结果 + using (var reader = command.ExecuteReader()) { - ptype = (RomPlatformType)reader.GetInt32(0); + while (reader.Read()) + { + ptype = (RomPlatformType)reader.GetInt32(0); + } } } } - } - catch (Exception e) - { - AppSrv.g_Log.Error(e); - } + catch (Exception e) + { + AppSrv.g_Log.Error(e); + } } if (ptype == RomPlatformType.Invalid) AppSrv.g_Log.Error($"RomID {RomID} 没找到平台配置"); + else + mDictRomID2Platform[RomID] = ptype; return ptype; } diff --git a/AxibugEmuOnline.Server/Manager/SavDataManager.cs b/AxibugEmuOnline.Server/Manager/SavDataManager.cs index ad329d5e..d4af4547 100644 --- a/AxibugEmuOnline.Server/Manager/SavDataManager.cs +++ b/AxibugEmuOnline.Server/Manager/SavDataManager.cs @@ -247,11 +247,12 @@ namespace AxibugEmuOnline.Server.Manager { string dir = Path.GetDirectoryName(path); if (!Directory.Exists(dir)) - { Directory.CreateDirectory(dir); - } - File.WriteAllBytes(path, data); + using (var fs = new FileStream(path, FileMode.Create)) + { + fs.Write(data, 0, data.Length); + } return true; } catch (Exception ex) diff --git a/AxibugEmuOnline.Server/Manager/UserManager.cs b/AxibugEmuOnline.Server/Manager/UserManager.cs index 6a9750be..dca044a6 100644 --- a/AxibugEmuOnline.Server/Manager/UserManager.cs +++ b/AxibugEmuOnline.Server/Manager/UserManager.cs @@ -33,8 +33,6 @@ namespace AxibugEmuOnline.Server.Manager public void RecvGetUserList(Socket _socket, byte[] reqData) { - Protobuf_UserList msg = ProtoBufHelper.DeSerizlize<Protobuf_UserList>(reqData); - ClientInfo _c = AppSrv.g_ClientMgr.GetClientForSocket(_socket); Protobuf_UserList_RESP respData = new Protobuf_UserList_RESP();