forked from sin365/AxibugEmuOnline
226 lines
8.9 KiB
C#
226 lines
8.9 KiB
C#
using AxibugEmuOnline.Server.Common;
|
|
using AxibugEmuOnline.Server.Event;
|
|
using AxibugEmuOnline.Server.NetWork;
|
|
using AxibugProtobuf;
|
|
using MySql.Data.MySqlClient;
|
|
using Org.BouncyCastle.Ocsp;
|
|
using System.Net.Sockets;
|
|
|
|
namespace AxibugEmuOnline.Server.Manager
|
|
{
|
|
public class LoginManager
|
|
{
|
|
public LoginManager()
|
|
{
|
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdLogin, UserLogin);
|
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdModifyNickName, OnCmdModifyNickName);
|
|
}
|
|
|
|
void UserLogin(Socket _socket, byte[] reqData)
|
|
{
|
|
AppSrv.g_Log.DebugCmd("UserLogin");
|
|
Protobuf_Login msg = ProtoBufHelper.DeSerizlize<Protobuf_Login>(reqData);
|
|
long _uid = 0;
|
|
|
|
AppSrv.g_Log.Info($"LoginType -> {msg.LoginType.ToString()}");
|
|
if (msg.LoginType == LoginType.UseDevice)
|
|
{
|
|
if (!GetUidByDevice(msg.DeviceStr, msg.DeviceType, out _uid))
|
|
{
|
|
byte[] ErrRespData = ProtoBufHelper.Serizlize(new Protobuf_Login_RESP()
|
|
{
|
|
Status = LoginResultStatus.AccountErr,
|
|
});
|
|
AppSrv.g_ClientMgr.ClientSend(_socket, (int)CommandID.CmdLogin, (int)ErrorCode.ErrorOk, ErrRespData);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
byte[] ErrRespData = ProtoBufHelper.Serizlize(new Protobuf_Login_RESP()
|
|
{
|
|
Status = LoginResultStatus.AccountErr,
|
|
});
|
|
AppSrv.g_ClientMgr.ClientSend(_socket, (int)CommandID.CmdLogin, (int)ErrorCode.ErrorOk, ErrRespData);
|
|
return;
|
|
}
|
|
|
|
ClientInfo _c = AppSrv.g_ClientMgr.JoinNewClient(_uid, _socket);
|
|
|
|
UpdateUserData(_uid, _c);
|
|
|
|
EventSystem.Instance.PostEvent(EEvent.OnUserOnline, _c.UID);
|
|
|
|
byte[] respData = ProtoBufHelper.Serizlize(new Protobuf_Login_RESP()
|
|
{
|
|
Status = LoginResultStatus.Ok,
|
|
RegDate = _c.RegisterDT.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
LastLoginDate = _c.LastLogInDT.ToString("yyyy-MM-dd HH:mm:ss"),
|
|
Token = "",
|
|
NickName = _c.NickName,
|
|
UID = _c.UID
|
|
});
|
|
AppSrv.g_Log.Info($"玩家登录成功 UID->{_c.UID} NikeName->{_c.NickName}");
|
|
AppSrv.g_ClientMgr.ClientSend(_c, (int)CommandID.CmdLogin, (int)ErrorCode.ErrorOk, respData);
|
|
}
|
|
|
|
void OnCmdModifyNickName(Socket socket, byte[] reqData)
|
|
{
|
|
AppSrv.g_Log.DebugCmd("OnCmdModifyNikeName");
|
|
bool bDone = false;
|
|
ClientInfo _c = AppSrv.g_ClientMgr.GetClientForSocket(socket);
|
|
Protobuf_Modify_NickName msg = ProtoBufHelper.DeSerizlize<Protobuf_Modify_NickName>(reqData);
|
|
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("ModifyNikeName");
|
|
try
|
|
{
|
|
string query = "update users set nikename = ?nikename where uid = ?uid ";
|
|
using (var command = new MySqlCommand(query, conn))
|
|
{
|
|
// 设置参数值
|
|
command.Parameters.AddWithValue("?uid", _c.UID);
|
|
command.Parameters.AddWithValue("?uid", msg.NickName);
|
|
|
|
if (command.ExecuteNonQuery() > 0)
|
|
{
|
|
bDone = true;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
}
|
|
Haoyue_SQLPoolManager.EnqueueSQLConn(conn);
|
|
|
|
if (bDone)
|
|
{
|
|
_c.NickName = msg.NickName;
|
|
|
|
UserMiniInfo miniinfo = new UserMiniInfo()
|
|
{
|
|
NickName = _c.NickName,
|
|
};
|
|
|
|
Protobuf_Update_UserInfo_RESP infodata = new Protobuf_Update_UserInfo_RESP()
|
|
{
|
|
UserInfo = miniinfo,
|
|
};
|
|
//回执给自己
|
|
AppSrv.g_ClientMgr.ClientSend(_c, (int)CommandID.CmdUpdateSelfUserInfo, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(infodata));
|
|
|
|
Protobuf_Update_OtherUserInfo_RESP otherinfo = new Protobuf_Update_OtherUserInfo_RESP()
|
|
{
|
|
UID = _c.UID,
|
|
UserInfo = miniinfo
|
|
};
|
|
//广播给他人
|
|
AppSrv.g_ClientMgr.ClientSendALL((int)CommandID.CmdUpdateOtherUserInfo, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(otherinfo), SkipUID: _c.UID);
|
|
}
|
|
}
|
|
|
|
public bool GetUidByDevice(string deviceStr, DeviceType DeviceType, out long uid)
|
|
{
|
|
uid = 0;
|
|
bool bDone = true;
|
|
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("GetUidByDevice");
|
|
try
|
|
{
|
|
string query = "SELECT uid from user_devices where device = ?deviceStr ";
|
|
using (var command = new MySqlCommand(query, conn))
|
|
{
|
|
// 设置参数值
|
|
command.Parameters.AddWithValue("?deviceStr", deviceStr);
|
|
// 执行查询并处理结果
|
|
using (var reader = command.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
uid = reader.GetInt64(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (uid > 0)
|
|
{
|
|
AppSrv.g_Log.Info($"设备串:{deviceStr} 对应 UID:{uid}");
|
|
}
|
|
else
|
|
{
|
|
query = "INSERT INTO `haoyue_emu`.`users` (`nikename`, `regdate`, `lastlogindate`) VALUES (NULL,now(),now());SELECT LAST_INSERT_ID(); ";
|
|
using (var command = new MySqlCommand(query, conn))
|
|
{
|
|
// 设置参数值
|
|
// 执行查询并处理结果
|
|
using (var reader = command.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
uid = reader.GetInt64(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
query = "INSERT INTO `haoyue_emu`.`user_devices` (`device`, `devicetype`, `uid`) VALUES (?deviceStr, ?DeviceType, ?uid);";
|
|
using (var command = new MySqlCommand(query, conn))
|
|
{
|
|
command.Parameters.AddWithValue("?deviceStr", deviceStr);
|
|
command.Parameters.AddWithValue("?DeviceType", (int)DeviceType);
|
|
command.Parameters.AddWithValue("?uid", uid);
|
|
if (command.ExecuteNonQuery() < 1)
|
|
bDone = false;
|
|
}
|
|
|
|
AppSrv.g_Log.Info($"创建新账户,设备:{deviceStr},设备类型:{DeviceType.ToString()},是否成功:{bDone}");
|
|
}
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
bDone = false;
|
|
}
|
|
Haoyue_SQLPoolManager.EnqueueSQLConn(conn);
|
|
|
|
if (uid <= 0)
|
|
bDone = false;
|
|
return bDone;
|
|
}
|
|
|
|
public void UpdateUserData(long uid, ClientInfo _c)
|
|
{
|
|
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("UpdateUserData");
|
|
try
|
|
{
|
|
string query = "SELECT account,nikename,regdate,lastlogindate from users where uid = ?uid ";
|
|
using (var command = new MySqlCommand(query, conn))
|
|
{
|
|
// 设置参数值
|
|
command.Parameters.AddWithValue("?uid", uid);
|
|
// 执行查询并处理结果
|
|
using (var reader = command.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
|
|
_c.Account = reader.IsDBNull(0) ? string.Empty : reader.GetString(0);
|
|
_c.NickName = reader.IsDBNull(1) ? string.Empty:reader.GetString(1);
|
|
_c.LogInDT = DateTime.Now;
|
|
_c.RegisterDT = reader.IsDBNull(2) ? DateTime.Now : reader.GetDateTime(2);
|
|
_c.LastLogInDT = reader.IsDBNull(3) ? DateTime.Now : reader.GetDateTime(3);
|
|
}
|
|
}
|
|
}
|
|
query = "update users set lastlogindate = now() where uid = ?uid ";
|
|
using (var command = new MySqlCommand(query, conn))
|
|
{
|
|
command.Parameters.AddWithValue("?uid", uid);
|
|
command.ExecuteNonQuery();
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
}
|
|
Haoyue_SQLPoolManager.EnqueueSQLConn(conn);
|
|
}
|
|
|
|
}
|
|
} |