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];
object[] read = socket.Receive();
SocketMessageType type = (SocketMessageType)read[0];
object[] objs = (object[])read[1];
object[] objs = (object[])read[2];
if (type != SocketMessageType.Unknown)
{
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;
byte[] buffer = new byte[2048];
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) + " <- " + "已确认连接");
return true;
@ -182,9 +182,6 @@ bool Send(ClientSocket socket)
SQLResult TestSQLConnection()
{
SQLResult TestResult = SQLResult.Success;
MySQLHelper SQLHelper = MySQLHelper.GetHelper();
SQLHelper.Script = SQLConstant.Insert_ServerLoginLogs(Config.SERVER_NAME, Config.SERVER_KEY);
SQLHelper.Execute(out TestResult);
new MySQLHelper(true, SQLConstant.Insert_ServerLoginLogs(Config.SERVER_NAME, Config.SERVER_KEY)).Execute(out SQLResult TestResult);
return TestResult;
}

View File

@ -2,6 +2,7 @@
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Network;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Core.Library.Server;
using Milimoe.FunGame.Server.Others;
using Milimoe.FunGame.Server.Utility;
@ -27,12 +28,13 @@ namespace Milimoe.FunGame.Server.Model
private string UserName = "";
private string Password = "";
private int FailedTimes = 0; // 超过一定次数断开连接
private MySQLHelper SQLHelper = MySQLHelper.GetHelper();
private readonly MySQLHelper SQLHelper;
public ServerModel(ClientSocket socket, bool running)
{
Socket = socket;
Running = running;
SQLHelper = new(SocketHelper.MakeClientName(socket.ClientIP));
}
public override bool Read(ClientSocket socket)
@ -42,7 +44,8 @@ namespace Milimoe.FunGame.Server.Model
{
object[] objs = socket.Receive();
SocketMessageType type = (SocketMessageType)objs[0];
object[] args = (object[])objs[1];
Guid token = (Guid)objs[1];
object[] args = (object[])objs[2];
string msg = "";
// 如果不等于这些Type就不会输出一行记录。这些Type有特定的输出。
@ -135,6 +138,11 @@ namespace Milimoe.FunGame.Server.Model
case SocketMessageType.HeartBeat:
msg = "";
break;
case SocketMessageType.IntoRoom:
msg = "-1";
if (args != null && args.Length > 0) msg = NetworkUtility.ConvertJsonObject<string>(args[0])!;
break;
}
return Send(socket, type, msg);
}
@ -154,8 +162,15 @@ namespace Milimoe.FunGame.Server.Model
if (socket.Send(type, objs) == SocketResult.Success)
{
// Logout和Disconnect需要移除User与其线程
if (type == SocketMessageType.Logout || type == SocketMessageType.Disconnect)
if (type == SocketMessageType.Logout)
{
RemoveUser();
}
if (type == SocketMessageType.Disconnect)
{
RemoveUser();
Close();
}
object obj = objs[0];
if (obj.GetType() == typeof(string) && (string)obj != "")
ServerHelper.WriteLine("[" + ServerSocket.GetTypeString(type) + "] " + SocketHelper.MakeClientName(ClientName, User) + " <- " + obj);
@ -238,8 +253,8 @@ namespace Milimoe.FunGame.Server.Model
{
RemoveUser();
GetUserCount();
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) + " Error -> Too Many Faileds.");
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Close -> StreamReader is Closed.");
break;
}
}
@ -249,11 +264,30 @@ namespace Milimoe.FunGame.Server.Model
{
RemoveUser();
GetUserCount();
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) + " Error -> Socket is Closed.");
ServerHelper.WriteLine(SocketHelper.MakeClientName(ClientName, User) + " Close -> StringStream is Closed.");
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 CommandType CommandType { get; set; } = CommandType.Text;
public MySqlParameter[] Parameters { get; set; }
public override SQLResult Result => _Result;
public override SQLServerInfo ServerInfo => _ServerInfo ?? SQLServerInfo.Create();
public MySQLConnection? Connection => _Connection;
public override int UpdateRows => _UpdateRows;
public override DataSet DataSet => _DataSet;
public MySqlParameter[] Parameters { get; set; }
public MySQLConnection? Connection => _Connection;
private SQLResult _Result = SQLResult.Success;
private SQLServerInfo? _ServerInfo;
private int _UpdateRows = 0;
private DataSet _DataSet = new();
private MySQLConnection? _Connection;
/// <summary>
/// 创建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);
}
private bool _IsOneTime = false;
private string _ClientName = "";
/// <summary>
/// 执行一个命令
@ -43,10 +33,12 @@ namespace Milimoe.FunGame.Server.Utility
/// <returns>影响的行数</returns>
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);
_DataSet = new DataSet();
_UpdateRows = MySQLManager.Execute(this, out Result);
Close();
if (_IsOneTime) Close();
return _UpdateRows;
}
@ -57,11 +49,11 @@ namespace Milimoe.FunGame.Server.Utility
/// <returns>结果集</returns>
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);
_DataSet = MySQLManager.ExecuteDataSet(this, out Result);
_UpdateRows = _DataSet.Tables[0].Rows.Count;
Close();
_DataSet = MySQLManager.ExecuteDataSet(this, out Result, out _UpdateRows);
if (_IsOneTime) Close();
return DataSet;
}
@ -70,21 +62,42 @@ namespace Milimoe.FunGame.Server.Utility
/// </summary>
public override void Close()
{
// _IsOneTime = false需要手动调用此方法
_Connection?.Close();
ServerHelper.WriteLine("Connection Release");
ServerHelper.WriteLine($"{(_ClientName != "" ? _ClientName : "")} 已释放MySQL连接");
}
/// <summary>
/// 创建SQLHelper
/// </summary>
/// <param name="IsOneTime">是否是单次使用的(执行完毕会自动Close连接)</param>
/// <param name="script">存储过程名称或者script语句</param>
/// <param name="type">存储过程, 文本, 等等</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;
CommandType = type;
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="Result">执行结果</param>
/// <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();
DataSet ds = new();
Rows = 0;
try
{
@ -61,7 +62,10 @@ namespace Milimoe.FunGame.Server.Utility
//清除参数
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)
{