mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-04-23 04:29:38 +08:00
SQLHelper添加OneTime模式,添加加入房间
This commit is contained in:
parent
49b96979f2
commit
83ca070f38
@ -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;
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user