mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-04-22 03:59:36 +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];
|
||||
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;
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user