SQLHelper添加OneTime模式,添加加入房间

This commit is contained in:
Mili 2023-02-28 00:03:10 +08:00
parent 49b96979f2
commit 83ca070f38
4 changed files with 85 additions and 37 deletions

View File

@ -151,7 +151,7 @@ bool Read(ClientSocket socket)
byte[] buffer = new byte[2048]; byte[] buffer = new byte[2048];
object[] read = socket.Receive(); object[] read = socket.Receive();
SocketMessageType type = (SocketMessageType)read[0]; SocketMessageType type = (SocketMessageType)read[0];
object[] objs = (object[])read[1]; object[] objs = (object[])read[2];
if (type != SocketMessageType.Unknown) if (type != SocketMessageType.Unknown)
{ {
if (objs[0] != null && objs[0].GetType() == typeof(string) && objs[0].ToString()!.Trim() != "") if (objs[0] != null && objs[0].GetType() == typeof(string) && objs[0].ToString()!.Trim() != "")
@ -170,7 +170,7 @@ bool Send(ClientSocket socket)
string msg = Config.SERVER_NAME + ";" + Config.SERVER_NOTICE; string msg = Config.SERVER_NAME + ";" + Config.SERVER_NOTICE;
byte[] buffer = new byte[2048]; byte[] buffer = new byte[2048];
buffer = Config.DEFAULT_ENCODING.GetBytes($"1;{msg}"); buffer = Config.DEFAULT_ENCODING.GetBytes($"1;{msg}");
if (socket.Send(SocketMessageType.Connect, msg, Guid.NewGuid().ToString()) == SocketResult.Success) if (socket.Send(SocketMessageType.Connect, msg, Guid.NewGuid()) == SocketResult.Success)
{ {
ServerHelper.WriteLine(SocketHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接"); ServerHelper.WriteLine(SocketHelper.MakeClientName(socket.ClientIP) + " <- " + "已确认连接");
return true; return true;
@ -182,9 +182,6 @@ bool Send(ClientSocket socket)
SQLResult TestSQLConnection() SQLResult TestSQLConnection()
{ {
SQLResult TestResult = SQLResult.Success; new MySQLHelper(true, SQLConstant.Insert_ServerLoginLogs(Config.SERVER_NAME, Config.SERVER_KEY)).Execute(out SQLResult TestResult);
MySQLHelper SQLHelper = MySQLHelper.GetHelper();
SQLHelper.Script = SQLConstant.Insert_ServerLoginLogs(Config.SERVER_NAME, Config.SERVER_KEY);
SQLHelper.Execute(out TestResult);
return TestResult; return TestResult;
} }

View File

@ -2,6 +2,7 @@
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Network; using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Core.Library.Server; using Milimoe.FunGame.Core.Library.Server;
using Milimoe.FunGame.Server.Others; using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Utility; using Milimoe.FunGame.Server.Utility;
@ -27,12 +28,13 @@ namespace Milimoe.FunGame.Server.Model
private string UserName = ""; private string UserName = "";
private string Password = ""; private string Password = "";
private int FailedTimes = 0; // 超过一定次数断开连接 private int FailedTimes = 0; // 超过一定次数断开连接
private MySQLHelper SQLHelper = MySQLHelper.GetHelper(); private readonly MySQLHelper SQLHelper;
public ServerModel(ClientSocket socket, bool running) public ServerModel(ClientSocket socket, bool running)
{ {
Socket = socket; Socket = socket;
Running = running; Running = running;
SQLHelper = new(SocketHelper.MakeClientName(socket.ClientIP));
} }
public override bool Read(ClientSocket socket) public override bool Read(ClientSocket socket)
@ -42,7 +44,8 @@ namespace Milimoe.FunGame.Server.Model
{ {
object[] objs = socket.Receive(); object[] objs = socket.Receive();
SocketMessageType type = (SocketMessageType)objs[0]; SocketMessageType type = (SocketMessageType)objs[0];
object[] args = (object[])objs[1]; Guid token = (Guid)objs[1];
object[] args = (object[])objs[2];
string msg = ""; string msg = "";
// 如果不等于这些Type就不会输出一行记录。这些Type有特定的输出。 // 如果不等于这些Type就不会输出一行记录。这些Type有特定的输出。
@ -135,6 +138,11 @@ namespace Milimoe.FunGame.Server.Model
case SocketMessageType.HeartBeat: case SocketMessageType.HeartBeat:
msg = ""; msg = "";
break; break;
case SocketMessageType.IntoRoom:
msg = "-1";
if (args != null && args.Length > 0) msg = NetworkUtility.ConvertJsonObject<string>(args[0])!;
break;
} }
return Send(socket, type, msg); return Send(socket, type, msg);
} }
@ -154,8 +162,15 @@ namespace Milimoe.FunGame.Server.Model
if (socket.Send(type, objs) == SocketResult.Success) if (socket.Send(type, objs) == SocketResult.Success)
{ {
// Logout和Disconnect需要移除User与其线程 // Logout和Disconnect需要移除User与其线程
if (type == SocketMessageType.Logout || type == SocketMessageType.Disconnect) if (type == SocketMessageType.Logout)
{
RemoveUser(); RemoveUser();
}
if (type == SocketMessageType.Disconnect)
{
RemoveUser();
Close();
}
object obj = objs[0]; object obj = objs[0];
if (obj.GetType() == typeof(string) && (string)obj != "") if (obj.GetType() == typeof(string) && (string)obj != "")
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(ClientName, User) + " <- " + obj); ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(ClientName, User) + " <- " + obj);
@ -238,8 +253,8 @@ namespace Milimoe.FunGame.Server.Model
{ {
RemoveUser(); RemoveUser();
GetUserCount(); GetUserCount();
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " ERROR -> Too Many Faileds."); ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Error -> Too Many Faileds.");
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " CLOSE -> StreamReader is Closed."); ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Close -> StreamReader is Closed.");
break; break;
} }
} }
@ -249,11 +264,30 @@ namespace Milimoe.FunGame.Server.Model
{ {
RemoveUser(); RemoveUser();
GetUserCount(); GetUserCount();
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " ERROR -> Socket is Closed."); ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Error -> Socket is Closed.");
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " CLOSE -> StringStream is Closed."); ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Close -> StringStream is Closed.");
break; break;
} }
} }
} }
private void Close()
{
try
{
SQLHelper.Close();
if (Socket != null)
{
Socket.Close();
Socket = null;
}
Running = false;
}
catch (Exception e)
{
ServerHelper.Error(e);
}
}
} }
} }

View File

@ -11,30 +11,20 @@ namespace Milimoe.FunGame.Server.Utility
{ {
public override string Script { get; set; } = ""; public override string Script { get; set; } = "";
public override CommandType CommandType { get; set; } = CommandType.Text; public override CommandType CommandType { get; set; } = CommandType.Text;
public MySqlParameter[] Parameters { get; set; }
public override SQLResult Result => _Result; public override SQLResult Result => _Result;
public override SQLServerInfo ServerInfo => _ServerInfo ?? SQLServerInfo.Create(); public override SQLServerInfo ServerInfo => _ServerInfo ?? SQLServerInfo.Create();
public MySQLConnection? Connection => _Connection;
public override int UpdateRows => _UpdateRows; public override int UpdateRows => _UpdateRows;
public override DataSet DataSet => _DataSet; public override DataSet DataSet => _DataSet;
public MySqlParameter[] Parameters { get; set; }
public MySQLConnection? Connection => _Connection;
private SQLResult _Result = SQLResult.Success; private SQLResult _Result = SQLResult.Success;
private SQLServerInfo? _ServerInfo; private SQLServerInfo? _ServerInfo;
private int _UpdateRows = 0; private int _UpdateRows = 0;
private DataSet _DataSet = new(); private DataSet _DataSet = new();
private MySQLConnection? _Connection; private MySQLConnection? _Connection;
private bool _IsOneTime = false;
/// <summary> private string _ClientName = "";
/// 创建MySQLHelper实例
/// </summary>
/// <param name="script"></param>
/// <param name="type"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public static MySQLHelper GetHelper(string script = "", CommandType type = CommandType.Text, params MySqlParameter[] parameters)
{
return new MySQLHelper(script, type, parameters);
}
/// <summary> /// <summary>
/// 执行一个命令 /// 执行一个命令
@ -43,10 +33,12 @@ namespace Milimoe.FunGame.Server.Utility
/// <returns>影响的行数</returns> /// <returns>影响的行数</returns>
public override int Execute(out SQLResult Result) public override int Execute(out SQLResult Result)
{ {
_Connection = new MySQLConnection(out _ServerInfo); // _IsOneTime = true需要手动创建连接和关闭
if (_IsOneTime) _Connection = new MySQLConnection(out _ServerInfo);
ServerHelper.WriteLine("SQLQuery -> " + Script); ServerHelper.WriteLine("SQLQuery -> " + Script);
_DataSet = new DataSet();
_UpdateRows = MySQLManager.Execute(this, out Result); _UpdateRows = MySQLManager.Execute(this, out Result);
Close(); if (_IsOneTime) Close();
return _UpdateRows; return _UpdateRows;
} }
@ -57,11 +49,11 @@ namespace Milimoe.FunGame.Server.Utility
/// <returns>结果集</returns> /// <returns>结果集</returns>
public override DataSet ExecuteDataSet(out SQLResult Result) public override DataSet ExecuteDataSet(out SQLResult Result)
{ {
_Connection = new MySQLConnection(out _ServerInfo); // _IsOneTime = true需要手动创建连接和关闭
if (_IsOneTime) _Connection = new MySQLConnection(out _ServerInfo);
ServerHelper.WriteLine("SQLQuery -> " + Script); ServerHelper.WriteLine("SQLQuery -> " + Script);
_DataSet = MySQLManager.ExecuteDataSet(this, out Result); _DataSet = MySQLManager.ExecuteDataSet(this, out Result, out _UpdateRows);
_UpdateRows = _DataSet.Tables[0].Rows.Count; if (_IsOneTime) Close();
Close();
return DataSet; return DataSet;
} }
@ -70,21 +62,42 @@ namespace Milimoe.FunGame.Server.Utility
/// </summary> /// </summary>
public override void Close() public override void Close()
{ {
// _IsOneTime = false需要手动调用此方法
_Connection?.Close(); _Connection?.Close();
ServerHelper.WriteLine("Connection Release"); ServerHelper.WriteLine($"{(_ClientName != "" ? _ClientName : "")} 已释放MySQL连接");
} }
/// <summary> /// <summary>
/// 创建SQLHelper /// 创建SQLHelper
/// </summary> /// </summary>
/// <param name="IsOneTime">是否是单次使用的(执行完毕会自动Close连接)</param>
/// <param name="script">存储过程名称或者script语句</param> /// <param name="script">存储过程名称或者script语句</param>
/// <param name="type">存储过程, 文本, 等等</param> /// <param name="type">存储过程, 文本, 等等</param>
/// <param name="parameters">执行命令所用参数的集合</param> /// <param name="parameters">执行命令所用参数的集合</param>
private MySQLHelper(string script, CommandType type, params MySqlParameter[] parameters) public MySQLHelper(bool IsOneTime = false, string script = "", CommandType type = CommandType.Text, params MySqlParameter[] parameters)
{ {
_IsOneTime = IsOneTime;
Script = script; Script = script;
CommandType = type; CommandType = type;
Parameters = parameters; Parameters = parameters;
if (!IsOneTime)
{
_Connection = new MySQLConnection(out _ServerInfo);
}
}
/// <summary>
/// 创建为SocketModel服务的SQLHelper
/// </summary>
/// <param name="ClientName">Socket客户端名称</param>
public MySQLHelper(string ClientName)
{
_ClientName = ClientName;
_IsOneTime = false;
Script = "";
CommandType = CommandType.Text;
Parameters = new MySqlParameter[] { };
_Connection = new MySQLConnection(out _ServerInfo);
} }
} }
} }

View File

@ -44,10 +44,11 @@ namespace Milimoe.FunGame.Server.Utility
/// <param name="Helper">MySQLHelper</param> /// <param name="Helper">MySQLHelper</param>
/// <param name="Result">执行结果</param> /// <param name="Result">执行结果</param>
/// <returns>结果集</returns> /// <returns>结果集</returns>
public static DataSet ExecuteDataSet(MySQLHelper Helper, out SQLResult Result) public static DataSet ExecuteDataSet(MySQLHelper Helper, out SQLResult Result, out int Rows)
{ {
MySqlCommand cmd = new(); MySqlCommand cmd = new();
DataSet ds = new(); DataSet ds = new();
Rows = 0;
try try
{ {
@ -61,7 +62,10 @@ namespace Milimoe.FunGame.Server.Utility
//清除参数 //清除参数
cmd.Parameters.Clear(); cmd.Parameters.Clear();
Result = SQLResult.Success;
Rows = ds.Tables[0].Rows.Count;
if (Rows > 0) Result = SQLResult.Success;
else Result = SQLResult.NotFound;
} }
catch (Exception e) catch (Exception e)
{ {