Merge branch 'master' of http://git.axibug.com/sin365/AxibugEmuOnline
This commit is contained in:
commit
2ecf190107
@ -29,6 +29,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
public static AppRoom roomMgr;
|
public static AppRoom roomMgr;
|
||||||
public static AppSettings settings;
|
public static AppSettings settings;
|
||||||
public static FilterManager filter;
|
public static FilterManager filter;
|
||||||
|
public static AppShare share;
|
||||||
#region Mono
|
#region Mono
|
||||||
public static TickLoop tickLoop;
|
public static TickLoop tickLoop;
|
||||||
private static CoroutineRunner coRunner;
|
private static CoroutineRunner coRunner;
|
||||||
@ -55,6 +56,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
nesRomLib = new RomLib(EnumPlatform.NES);
|
nesRomLib = new RomLib(EnumPlatform.NES);
|
||||||
CacheMgr = new CacheManager();
|
CacheMgr = new CacheManager();
|
||||||
roomMgr = new AppRoom();
|
roomMgr = new AppRoom();
|
||||||
|
share = new AppShare();
|
||||||
filter = new FilterManager(initer.m_filterVolume, initer.m_filterPreview,initer.m_xmbBg);
|
filter = new FilterManager(initer.m_filterVolume, initer.m_filterPreview,initer.m_xmbBg);
|
||||||
var go = new GameObject("[AppAxibugEmuOnline]");
|
var go = new GameObject("[AppAxibugEmuOnline]");
|
||||||
GameObject.DontDestroyOnLoad(go);
|
GameObject.DontDestroyOnLoad(go);
|
||||||
|
@ -5,6 +5,18 @@
|
|||||||
// 添加你自己需要的事件类型
|
// 添加你自己需要的事件类型
|
||||||
OnChatMsg,
|
OnChatMsg,
|
||||||
|
|
||||||
|
//自己的信息更新(比如改名更新)
|
||||||
|
OnSelfInfoUpdate,
|
||||||
|
//更新其他用户信息
|
||||||
|
OnOtherUserInfoUpdate,
|
||||||
|
|
||||||
|
//当收藏数发生变化
|
||||||
|
OnDoStars,
|
||||||
|
|
||||||
|
//用户列表,登录和离开
|
||||||
|
OnUserListAllUpdate,
|
||||||
|
OnUserLogin,
|
||||||
|
OnUserLoginOut,
|
||||||
|
|
||||||
OnRoomListAllUpdate,//房间列表全量刷新
|
OnRoomListAllUpdate,//房间列表全量刷新
|
||||||
OnRoomListSingleAdd,//房间列表中新增房间
|
OnRoomListSingleAdd,//房间列表中新增房间
|
||||||
|
@ -9,10 +9,12 @@ namespace AxibugEmuOnline.Client
|
|||||||
public PostProcessVolume m_filterVolume;
|
public PostProcessVolume m_filterVolume;
|
||||||
public CanvasGroup m_filterPreview;
|
public CanvasGroup m_filterPreview;
|
||||||
public CanvasGroup m_xmbBg;
|
public CanvasGroup m_xmbBg;
|
||||||
|
public static string dev_UUID;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
App.Init(this);
|
App.Init(this);
|
||||||
|
dev_UUID = SystemInfo.deviceUniqueIdentifier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ using AxibugEmuOnline.Client.Common;
|
|||||||
using AxibugEmuOnline.Client.Network;
|
using AxibugEmuOnline.Client.Network;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
using System;
|
using System;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client.Manager
|
namespace AxibugEmuOnline.Client.Manager
|
||||||
{
|
{
|
||||||
@ -22,11 +23,23 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
LastLoginGuid = Guid.NewGuid().ToString();
|
LastLoginGuid = Guid.NewGuid().ToString();
|
||||||
|
|
||||||
App.user.userdata.Account = LastLoginGuid;
|
App.user.userdata.Account = LastLoginGuid;
|
||||||
|
AxibugProtobuf.DeviceType devType;
|
||||||
|
if (Application.platform == RuntimePlatform.PSP2)
|
||||||
|
devType = AxibugProtobuf.DeviceType.Psv;
|
||||||
|
else if (Application.platform == RuntimePlatform.Android)
|
||||||
|
devType = AxibugProtobuf.DeviceType.Android;
|
||||||
|
else if (Application.platform == RuntimePlatform.IPhonePlayer)
|
||||||
|
devType = AxibugProtobuf.DeviceType.Ios;
|
||||||
|
else
|
||||||
|
devType = AxibugProtobuf.DeviceType.Pc;
|
||||||
|
|
||||||
Protobuf_Login msg = new Protobuf_Login()
|
Protobuf_Login msg = new Protobuf_Login()
|
||||||
{
|
{
|
||||||
LoginType = 0,
|
LoginType = LoginType.UseDevice,
|
||||||
Account = App.user.userdata.Account,
|
DeviceStr = Initer.dev_UUID,
|
||||||
|
DeviceType = devType,
|
||||||
};
|
};
|
||||||
|
|
||||||
App.network.SendToServer((int)CommandID.CmdLogin, ProtoBufHelper.Serizlize(msg));
|
App.network.SendToServer((int)CommandID.CmdLogin, ProtoBufHelper.Serizlize(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,6 +53,8 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
|
|
||||||
App.log.Info("获取Room列表");
|
App.log.Info("获取Room列表");
|
||||||
App.roomMgr.SendGetRoomList();
|
App.roomMgr.SendGetRoomList();
|
||||||
|
App.log.Info("获取在线玩家列表");
|
||||||
|
App.user.Send_GetUserList();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
46
AxibugEmuOnline.Client/Assets/Script/Manager/AppShare.cs
Normal file
46
AxibugEmuOnline.Client/Assets/Script/Manager/AppShare.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
|
using AxibugEmuOnline.Client.Common;
|
||||||
|
using AxibugEmuOnline.Client.Event;
|
||||||
|
using AxibugEmuOnline.Client.Network;
|
||||||
|
using AxibugProtobuf;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Client.Manager
|
||||||
|
{
|
||||||
|
public class AppShare
|
||||||
|
{
|
||||||
|
public AppShare()
|
||||||
|
{
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdGameMark, RecvGameStar);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送收藏
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="RomID"></param>
|
||||||
|
/// <param name="Motion">[0]收藏[1]取消收藏</param>
|
||||||
|
public void SendGameStar(int RomID, PlatformType Platform, int Motion)
|
||||||
|
{
|
||||||
|
Protobuf_Game_Mark req = new Protobuf_Game_Mark()
|
||||||
|
{
|
||||||
|
State = Motion,
|
||||||
|
RomID = RomID,
|
||||||
|
PlatformType = Platform
|
||||||
|
};
|
||||||
|
|
||||||
|
App.log.Info($"LeavnRoom");
|
||||||
|
App.network.SendToServer((int)CommandID.CmdGameMark, ProtoBufHelper.Serizlize(req));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 离开房间成功
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reqData"></param>
|
||||||
|
void RecvGameStar(byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_Game_Mark_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_Game_Mark_RESP>(reqData);
|
||||||
|
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnDoStars, msg.PlatformType, msg.RomID);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8a704bd24172e02428eeba6b94674011
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -1,4 +1,12 @@
|
|||||||
using AxibugEmuOnline.Client.ClientCore;
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
|
using AxibugEmuOnline.Client.Common;
|
||||||
|
using AxibugEmuOnline.Client.Event;
|
||||||
|
using AxibugEmuOnline.Client.Network;
|
||||||
|
using AxibugProtobuf;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
using static AxibugEmuOnline.Client.ClientCore.RomDB;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Client.Manager
|
namespace AxibugEmuOnline.Client.Manager
|
||||||
{
|
{
|
||||||
@ -6,6 +14,7 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
{
|
{
|
||||||
public long UID { get; set; }
|
public long UID { get; set; }
|
||||||
public string Account { get; set; }
|
public string Account { get; set; }
|
||||||
|
public string NickName { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MainUserDataBase : UserDataBase
|
public class MainUserDataBase : UserDataBase
|
||||||
@ -19,19 +28,29 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
{
|
{
|
||||||
//注册重连成功事件,以便后续自动登录
|
//注册重连成功事件,以便后续自动登录
|
||||||
App.network.OnReConnected += OnReConnected;
|
App.network.OnReConnected += OnReConnected;
|
||||||
|
|
||||||
|
//网络事件注册
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdUserOnlinelist, RecvUserOnlinelist);
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdUserJoin, RecvCmdUserJoin);
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdUserLeave, RecvGetUserLeave);
|
||||||
|
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdModifyNickName, RecvModifyNickName);
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdUpdateSelfUserInfo, RecvUpdateSelfUserInfo);
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdUpdateOtherUserInfo, RecvUpdateOtherUserInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MainUserDataBase userdata { get; private set; } = new MainUserDataBase();
|
public MainUserDataBase userdata { get; private set; } = new MainUserDataBase();
|
||||||
public bool IsLoggedIn => userdata.IsLoggedIn;
|
public bool IsLoggedIn => userdata.IsLoggedIn;
|
||||||
|
Dictionary<long, UserDataBase> DictUID2User = new Dictionary<long, UserDataBase>();
|
||||||
|
public int OnlinePlayerCount => DictUID2User.Count;
|
||||||
public void InitMainUserData(string UName, long UID)
|
public void InitMainUserData(string UName, long UID)
|
||||||
{
|
{
|
||||||
userdata.Account = UName;
|
userdata.NickName = UName;
|
||||||
userdata.IsLoggedIn = true;
|
userdata.IsLoggedIn = true;
|
||||||
userdata.UID = UID;
|
userdata.UID = UID;
|
||||||
//以及其他数据初始化
|
//以及其他数据初始化
|
||||||
//...
|
//...
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 登出
|
/// 登出
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -41,7 +60,6 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
//以及其他数据清理
|
//以及其他数据清理
|
||||||
//...
|
//...
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当重连成功
|
/// 当重连成功
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -53,5 +71,143 @@ namespace AxibugEmuOnline.Client.Manager
|
|||||||
App.login.Login();
|
App.login.Login();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region 角色管理
|
||||||
|
public void UpdateOrAddUser(UserMiniInfo minfo, out bool isNewUser)
|
||||||
|
{
|
||||||
|
lock (DictUID2User)
|
||||||
|
{
|
||||||
|
if (!DictUID2User.ContainsKey(minfo.UID))
|
||||||
|
{
|
||||||
|
DictUID2User[minfo.UID] = new UserDataBase()
|
||||||
|
{
|
||||||
|
UID = minfo.UID,
|
||||||
|
NickName = minfo.NickName,
|
||||||
|
Account = "",
|
||||||
|
};
|
||||||
|
isNewUser = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isNewUser = false;
|
||||||
|
DictUID2User[minfo.UID].NickName = minfo.NickName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveUser(long UID)
|
||||||
|
{
|
||||||
|
bool bflag = false;
|
||||||
|
string UName = "";
|
||||||
|
lock (DictUID2User)
|
||||||
|
{
|
||||||
|
if (DictUID2User.ContainsKey(UID))
|
||||||
|
{
|
||||||
|
UName = DictUID2User[UID].NickName;
|
||||||
|
DictUID2User.Remove(UID);
|
||||||
|
bflag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bflag)
|
||||||
|
{
|
||||||
|
//抛出用户离开事件
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnUserLoginOut, UID, UName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public UserDataBase GetUserByUid(long UID)
|
||||||
|
{
|
||||||
|
lock (DictUID2User)
|
||||||
|
{
|
||||||
|
if (DictUID2User.ContainsKey(UID))
|
||||||
|
{
|
||||||
|
return DictUID2User[UID];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserDataBase[] GetUserList()
|
||||||
|
{
|
||||||
|
UserDataBase[] ulist = new UserDataBase[DictUID2User.Count];
|
||||||
|
long[] UIDs = DictUID2User.Keys.ToArray();
|
||||||
|
for (int i = 0; i < UIDs.Length; i++)
|
||||||
|
{
|
||||||
|
ulist[i] = DictUID2User[UIDs[i]];
|
||||||
|
}
|
||||||
|
return ulist;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 请求拉取房间列表
|
||||||
|
/// </summary>
|
||||||
|
public void Send_GetUserList()
|
||||||
|
{
|
||||||
|
Protobuf_UserList msg = new Protobuf_UserList()
|
||||||
|
{
|
||||||
|
};
|
||||||
|
App.network.SendToServer((int)CommandID.CmdUserOnlinelist, ProtoBufHelper.Serizlize(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RecvUserOnlinelist(byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_UserList_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_UserList_RESP>(reqData);
|
||||||
|
for (int i = 0; i < msg.UserList.Count; i++)
|
||||||
|
{
|
||||||
|
UserMiniInfo mi = msg.UserList[i];
|
||||||
|
UpdateOrAddUser(mi, out bool isNewUser);
|
||||||
|
}
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnUserListAllUpdate);
|
||||||
|
}
|
||||||
|
public void RecvCmdUserJoin(byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_UserJoin_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_UserJoin_RESP>(reqData);
|
||||||
|
UpdateOrAddUser(msg.UserInfo, out bool isNewUser);
|
||||||
|
if (isNewUser)
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnUserLogin, msg.UserInfo.UID, msg.UserInfo.NickName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RecvGetUserLeave(byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_UserLeave_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_UserLeave_RESP>(reqData);
|
||||||
|
RemoveUser(msg.UID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送修改昵称请求
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="NickName"></param>
|
||||||
|
public void Send_ModifyNickName(string NickName)
|
||||||
|
{
|
||||||
|
Protobuf_Modify_NickName msg = new Protobuf_Modify_NickName()
|
||||||
|
{
|
||||||
|
NickName = NickName
|
||||||
|
};
|
||||||
|
App.network.SendToServer((int)CommandID.CmdModifyNickName, ProtoBufHelper.Serizlize(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
void RecvModifyNickName(byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_Modify_NickName_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_Modify_NickName_RESP>(reqData);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecvUpdateSelfUserInfo(byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_Update_UserInfo_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_Update_UserInfo_RESP>(reqData);
|
||||||
|
userdata.NickName = msg.UserInfo.NickName;
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnSelfInfoUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecvUpdateOtherUserInfo(byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_Update_OtherUserInfo_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_Update_OtherUserInfo_RESP>(reqData);
|
||||||
|
UserDataBase userdata = GetUserByUid(msg.UID);
|
||||||
|
if (userdata == null)
|
||||||
|
return;
|
||||||
|
userdata.NickName = msg.UserInfo.NickName;
|
||||||
|
//TODO其他
|
||||||
|
Eventer.Instance.PostEvent(EEvent.OnOtherUserInfoUpdate, msg.UID);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -3,7 +3,7 @@
|
|||||||
public enum EEvent
|
public enum EEvent
|
||||||
{
|
{
|
||||||
// 添加你自己需要的事件类型
|
// 添加你自己需要的事件类型
|
||||||
OnUserJoin,
|
OnUserOnline,
|
||||||
OnUserLeave
|
OnUserOffline
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,10 @@ namespace AxibugEmuOnline.Server
|
|||||||
public static LogManager g_Log;
|
public static LogManager g_Log;
|
||||||
public static LoginManager g_Login;
|
public static LoginManager g_Login;
|
||||||
public static ChatManager g_Chat;
|
public static ChatManager g_Chat;
|
||||||
|
public static UserManager g_UserMgr;
|
||||||
public static IOCPNetWork g_SocketMgr;
|
public static IOCPNetWork g_SocketMgr;
|
||||||
public static RoomManager g_Room;
|
public static RoomManager g_Room;
|
||||||
|
public static GameShareManager g_GameShareMgr;
|
||||||
|
|
||||||
public static void InitServer(int port)
|
public static void InitServer(int port)
|
||||||
{
|
{
|
||||||
@ -26,8 +28,10 @@ namespace AxibugEmuOnline.Server
|
|||||||
g_Log = new LogManager();
|
g_Log = new LogManager();
|
||||||
g_Login = new LoginManager();
|
g_Login = new LoginManager();
|
||||||
g_Chat = new ChatManager();
|
g_Chat = new ChatManager();
|
||||||
g_SocketMgr = new IOCPNetWork(1024, 4096*2);
|
g_UserMgr = new UserManager();
|
||||||
|
g_SocketMgr = new IOCPNetWork(1024, 4096 * 2);
|
||||||
g_Room = new RoomManager();
|
g_Room = new RoomManager();
|
||||||
|
g_GameShareMgr = new GameShareManager();
|
||||||
|
|
||||||
g_SocketMgr.Init();
|
g_SocketMgr.Init();
|
||||||
g_SocketMgr.Start(new IPEndPoint(IPAddress.Any.Address, port));
|
g_SocketMgr.Start(new IPEndPoint(IPAddress.Any.Address, port));
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
using AxibugEmuOnline.Server.Common;
|
using AxibugEmuOnline.Server.Common;
|
||||||
|
using AxibugEmuOnline.Server.Event;
|
||||||
using AxibugEmuOnline.Server.NetWork;
|
using AxibugEmuOnline.Server.NetWork;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
using MySqlX.XDevAPI;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
|
|
||||||
@ -9,12 +13,14 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
public class ClientInfo
|
public class ClientInfo
|
||||||
{
|
{
|
||||||
public long UID { get; set; }
|
public long UID { get; set; }
|
||||||
public string NickName { get; set; }
|
public string NickName { get; set; } = string.Empty;
|
||||||
public string Account { get; set; }
|
public string Account { get; set; } = string.Empty;
|
||||||
public Socket _socket { get; set; }
|
public Socket _socket { get; set; }
|
||||||
public bool IsOffline { get; set; } = false;
|
public bool IsOffline { get; set; } = false;
|
||||||
|
public DateTime RegisterDT { get; set; }
|
||||||
public DateTime LogOutDT { get; set; }
|
public DateTime LogOutDT { get; set; }
|
||||||
public DateTime LogInDT { get; set; }
|
public DateTime LogInDT { get; set; }
|
||||||
|
public DateTime LastLogInDT { get; set; }
|
||||||
public UserRoomState RoomState { get; set; } = new UserRoomState();
|
public UserRoomState RoomState { get; set; } = new UserRoomState();
|
||||||
public TimeSpan LastStartPingTime { get; set; }
|
public TimeSpan LastStartPingTime { get; set; }
|
||||||
public int LastPingSeed { get; set; }
|
public int LastPingSeed { get; set; }
|
||||||
@ -81,6 +87,7 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
threadPingTick.Start();
|
threadPingTick.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public long GetNextUID()
|
public long GetNextUID()
|
||||||
{
|
{
|
||||||
return ++TestUIDSeed;
|
return ++TestUIDSeed;
|
||||||
@ -104,7 +111,7 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
//通用处理
|
//通用处理
|
||||||
#region clientlist 处理
|
#region clientlist 处理
|
||||||
|
|
||||||
public ClientInfo JoinNewClient(Protobuf_Login data, Socket _socket)
|
public ClientInfo JoinNewClient(long _uid, Socket _socket)
|
||||||
{
|
{
|
||||||
//也许这个函数需加lock
|
//也许这个函数需加lock
|
||||||
ClientInfo cinfo = GetClientForSocket(_socket);
|
ClientInfo cinfo = GetClientForSocket(_socket);
|
||||||
@ -117,10 +124,8 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
{
|
{
|
||||||
cinfo = new ClientInfo()
|
cinfo = new ClientInfo()
|
||||||
{
|
{
|
||||||
UID = GetNextUID(),
|
UID = _uid,
|
||||||
_socket = _socket,
|
_socket = _socket,
|
||||||
Account = data.Account,
|
|
||||||
NickName = data.Account,
|
|
||||||
IsOffline = false,
|
IsOffline = false,
|
||||||
};
|
};
|
||||||
AddClient(cinfo);
|
AddClient(cinfo);
|
||||||
@ -192,6 +197,10 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ClientInfo GetClientForUID(long UID)
|
||||||
|
{
|
||||||
|
return _DictUIDClient.ContainsKey(UID) ? _DictUIDClient[UID] : null;
|
||||||
|
}
|
||||||
|
|
||||||
public ClientInfo GetClientForSocket(Socket sk)
|
public ClientInfo GetClientForSocket(Socket sk)
|
||||||
{
|
{
|
||||||
@ -221,8 +230,8 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
Console.WriteLine("标记玩家UID" + cinfo.UID + "为离线");
|
Console.WriteLine("标记玩家UID" + cinfo.UID + "为离线");
|
||||||
cinfo.IsOffline = true;
|
cinfo.IsOffline = true;
|
||||||
cinfo.LogOutDT = DateTime.Now;
|
cinfo.LogOutDT = DateTime.Now;
|
||||||
|
|
||||||
AppSrv.g_Room.LeaveRoom(cinfo, cinfo.RoomState.RoomID);
|
AppSrv.g_Room.LeaveRoom(cinfo, cinfo.RoomState.RoomID);
|
||||||
|
EventSystem.Instance.PostEvent(EEvent.OnUserOffline, cinfo.UID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveClientForSocket(Socket sk)
|
public void RemoveClientForSocket(Socket sk)
|
||||||
@ -264,7 +273,6 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
public void OnCmdPing(Socket sk, byte[] reqData)
|
public void OnCmdPing(Socket sk, byte[] reqData)
|
||||||
{
|
{
|
||||||
//AppSrv.g_Log.Debug($"OnCmdPing");
|
//AppSrv.g_Log.Debug($"OnCmdPing");
|
||||||
ClientInfo _c = AppSrv.g_ClientMgr.GetClientForSocket(sk);
|
|
||||||
Protobuf_Ping msg = ProtoBufHelper.DeSerizlize<Protobuf_Ping>(reqData);
|
Protobuf_Ping msg = ProtoBufHelper.DeSerizlize<Protobuf_Ping>(reqData);
|
||||||
|
|
||||||
//创建成功下行
|
//创建成功下行
|
||||||
@ -272,7 +280,7 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
{
|
{
|
||||||
Seed = msg.Seed,
|
Seed = msg.Seed,
|
||||||
};
|
};
|
||||||
AppSrv.g_ClientMgr.ClientSend(_c._socket, (int)CommandID.CmdPong, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(resp));
|
AppSrv.g_ClientMgr.ClientSend(sk, (int)CommandID.CmdPong, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(resp));
|
||||||
}
|
}
|
||||||
public void OnCmdPong(Socket sk, byte[] reqData)
|
public void OnCmdPong(Socket sk, byte[] reqData)
|
||||||
{
|
{
|
||||||
@ -303,6 +311,7 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
public void ClientSendALL(int CMDID, int ERRCODE, byte[] data, long SkipUID = -1)
|
public void ClientSendALL(int CMDID, int ERRCODE, byte[] data, long SkipUID = -1)
|
||||||
{
|
{
|
||||||
ClientSend(ClientList, CMDID, ERRCODE, data, SkipUID);
|
ClientSend(ClientList, CMDID, ERRCODE, data, SkipUID);
|
||||||
|
104
AxibugEmuOnline.Server/Manager/GameShareManager.cs
Normal file
104
AxibugEmuOnline.Server/Manager/GameShareManager.cs
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
using AxibugEmuOnline.Server.Common;
|
||||||
|
using AxibugEmuOnline.Server.Event;
|
||||||
|
using AxibugEmuOnline.Server.NetWork;
|
||||||
|
using AxibugProtobuf;
|
||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using static AxibugEmuOnline.Server.RoomManager;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Server.Manager
|
||||||
|
{
|
||||||
|
public class GameShareManager
|
||||||
|
{
|
||||||
|
public GameShareManager()
|
||||||
|
{
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdGameMark, RecvGameMark);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RecvGameMark(Socket _socket, byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_Game_Mark msg = ProtoBufHelper.DeSerizlize<Protobuf_Game_Mark>(reqData);
|
||||||
|
ClientInfo _c = AppSrv.g_ClientMgr.GetClientForSocket(_socket);
|
||||||
|
Protobuf_Game_Mark_RESP respData = new Protobuf_Game_Mark_RESP();
|
||||||
|
|
||||||
|
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("RecvGameMark");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string query = "SELECT id from rom_stars where uid = ?uid and romid = ?platform and platform = ?romid";
|
||||||
|
bool bHad = false;
|
||||||
|
using (var command = new MySqlCommand(query, conn))
|
||||||
|
{
|
||||||
|
// 设置参数值
|
||||||
|
command.Parameters.AddWithValue("?uid", _c.UID);
|
||||||
|
command.Parameters.AddWithValue("?platform", 1);
|
||||||
|
command.Parameters.AddWithValue("?romid", msg.RomID);
|
||||||
|
using (var reader = command.ExecuteReader())
|
||||||
|
{
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
if (reader.GetInt32(0) > 0)
|
||||||
|
bHad = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg.State == 0)
|
||||||
|
{
|
||||||
|
if (bHad)
|
||||||
|
{
|
||||||
|
AppSrv.g_ClientMgr.ClientSend(_c, (int)CommandID.CmdGameMark, (int)ErrorCode.ErrorRomAlreadyHadStar, ProtoBufHelper.Serizlize(respData));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
query = "INSERT INTO `haoyue_emu`.`rom_stars` (`uid`, `platform`, `romid`) VALUES (?uid, ?platform, ?romid);";
|
||||||
|
using (var command = new MySqlCommand(query, conn))
|
||||||
|
{
|
||||||
|
// 设置参数值
|
||||||
|
command.Parameters.AddWithValue("?uid", _c.UID);
|
||||||
|
command.Parameters.AddWithValue("?platform", (int)msg.PlatformType);
|
||||||
|
command.Parameters.AddWithValue("?romid", msg.RomID);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else//取消收藏
|
||||||
|
{
|
||||||
|
if (bHad)
|
||||||
|
{
|
||||||
|
query = "DELETE from rom_stars where uid = ?uid and romid = ?romid and platform = ?platform";
|
||||||
|
using (var command = new MySqlCommand(query, conn))
|
||||||
|
{
|
||||||
|
// 设置参数值
|
||||||
|
command.Parameters.AddWithValue("?uid", _c.UID);
|
||||||
|
command.Parameters.AddWithValue("?platform", (int)msg.PlatformType);
|
||||||
|
command.Parameters.AddWithValue("?romid", msg.RomID);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppSrv.g_ClientMgr.ClientSend(_c, (int)CommandID.CmdGameMark, (int)ErrorCode.ErrorRomDontHadStar, ProtoBufHelper.Serizlize(respData));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//更新收藏数
|
||||||
|
query = "update romlist_nes set stars = (SELECT COUNT(id) from rom_stars where rom_stars.romid = ?romid and rom_stars.platform = ?platform) where romlist_nes.id = ?romid";
|
||||||
|
using (var command = new MySqlCommand(query, conn))
|
||||||
|
{
|
||||||
|
command.Parameters.AddWithValue("?platform", (int)msg.PlatformType);
|
||||||
|
command.Parameters.AddWithValue("?romid", msg.RomID);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Haoyue_SQLPoolManager.EnqueueSQLConn(conn);
|
||||||
|
respData.PlatformType = msg.PlatformType;
|
||||||
|
respData.RomID = msg.RomID;
|
||||||
|
AppSrv.g_ClientMgr.ClientSend(_c, (int)CommandID.CmdGameMark, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(respData));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,9 @@
|
|||||||
using AxibugEmuOnline.Server.Common;
|
using AxibugEmuOnline.Server.Common;
|
||||||
|
using AxibugEmuOnline.Server.Event;
|
||||||
using AxibugEmuOnline.Server.NetWork;
|
using AxibugEmuOnline.Server.NetWork;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
|
using MySql.Data.MySqlClient;
|
||||||
|
using Org.BouncyCastle.Ocsp;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Server.Manager
|
namespace AxibugEmuOnline.Server.Manager
|
||||||
@ -10,24 +13,214 @@ namespace AxibugEmuOnline.Server.Manager
|
|||||||
public LoginManager()
|
public LoginManager()
|
||||||
{
|
{
|
||||||
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdLogin, UserLogin);
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdLogin, UserLogin);
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdModifyNickName, OnCmdModifyNickName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UserLogin(Socket _socket, byte[] reqData)
|
void UserLogin(Socket _socket, byte[] reqData)
|
||||||
{
|
{
|
||||||
AppSrv.g_Log.Debug("收到新的登录请求");
|
AppSrv.g_Log.DebugCmd("UserLogin");
|
||||||
Protobuf_Login msg = ProtoBufHelper.DeSerizlize<Protobuf_Login>(reqData);
|
Protobuf_Login msg = ProtoBufHelper.DeSerizlize<Protobuf_Login>(reqData);
|
||||||
ClientInfo _c = AppSrv.g_ClientMgr.JoinNewClient(msg, _socket);
|
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()
|
byte[] respData = ProtoBufHelper.Serizlize(new Protobuf_Login_RESP()
|
||||||
{
|
{
|
||||||
Status = LoginResultStatus.Ok,
|
Status = LoginResultStatus.Ok,
|
||||||
RegDate = "",
|
RegDate = _c.RegisterDT.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||||
LastLoginDate = "",
|
LastLoginDate = _c.LastLogInDT.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||||
Token = "",
|
Token = "",
|
||||||
|
NickName = _c.NickName,
|
||||||
UID = _c.UID
|
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);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,9 +2,10 @@
|
|||||||
using AxibugEmuOnline.Server.Manager;
|
using AxibugEmuOnline.Server.Manager;
|
||||||
using AxibugEmuOnline.Server.NetWork;
|
using AxibugEmuOnline.Server.NetWork;
|
||||||
using AxibugProtobuf;
|
using AxibugProtobuf;
|
||||||
|
using MySql.Data.MySqlClient;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using static System.Runtime.CompilerServices.RuntimeHelpers;
|
using System.Security.Policy;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Server
|
namespace AxibugEmuOnline.Server
|
||||||
{
|
{
|
||||||
@ -94,6 +95,48 @@ namespace AxibugEmuOnline.Server
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region
|
||||||
|
|
||||||
|
public enum RoomLogType
|
||||||
|
{
|
||||||
|
Create = 0,
|
||||||
|
Join = 1,
|
||||||
|
Leave = 2
|
||||||
|
}
|
||||||
|
public void RoomLog(long uid, int platform, int RoomID, int RomID, RoomLogType state)
|
||||||
|
{
|
||||||
|
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("RoomLog");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string query = "INSERT INTO `haoyue_emu`.`room_log` (`uid`, `platform`, `romid`,`roomid`, `state`) VALUES ( ?uid, ?platform, ?romid, ?roomid, ?state);";
|
||||||
|
using (var command = new MySqlCommand(query, conn))
|
||||||
|
{
|
||||||
|
// 设置参数值
|
||||||
|
command.Parameters.AddWithValue("?uid", uid);
|
||||||
|
command.Parameters.AddWithValue("?platform", platform);
|
||||||
|
command.Parameters.AddWithValue("?romid", RomID);
|
||||||
|
command.Parameters.AddWithValue("?roomid", RoomID);
|
||||||
|
command.Parameters.AddWithValue("?state", state);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state == RoomLogType.Join)
|
||||||
|
{
|
||||||
|
query = "update romlist_nes set playcount = playcount + 1 where id = ?romid";
|
||||||
|
using (var command = new MySqlCommand(query, conn))
|
||||||
|
{
|
||||||
|
command.Parameters.AddWithValue("?romid", RomID);
|
||||||
|
command.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
Haoyue_SQLPoolManager.EnqueueSQLConn(conn);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
private Protobuf_Room_MiniInfo GetProtoDataRoom(Data_RoomData room)
|
private Protobuf_Room_MiniInfo GetProtoDataRoom(Data_RoomData room)
|
||||||
{
|
{
|
||||||
Protobuf_Room_MiniInfo result = new Protobuf_Room_MiniInfo()
|
Protobuf_Room_MiniInfo result = new Protobuf_Room_MiniInfo()
|
||||||
@ -203,6 +246,8 @@ namespace AxibugEmuOnline.Server
|
|||||||
SendRoomStepChange(newRoom);
|
SendRoomStepChange(newRoom);
|
||||||
|
|
||||||
SendRoomUpdateToAll(newRoom.RoomID, 0);
|
SendRoomUpdateToAll(newRoom.RoomID, 0);
|
||||||
|
|
||||||
|
RoomLog(_c.UID, 1, newRoom.RoomID, newRoom.GameRomID, RoomLogType.Create);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnCmdRoomJoin(Socket sk, byte[] reqData)
|
public void OnCmdRoomJoin(Socket sk, byte[] reqData)
|
||||||
@ -241,6 +286,7 @@ namespace AxibugEmuOnline.Server
|
|||||||
SendRoomUpdateToAll(room.RoomID, 0);
|
SendRoomUpdateToAll(room.RoomID, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RoomLog(_c.UID, 1, room.RoomID, room.GameRomID, RoomLogType.Join);
|
||||||
}
|
}
|
||||||
public void OnCmdRoomLeave(Socket sk, byte[] reqData)
|
public void OnCmdRoomLeave(Socket sk, byte[] reqData)
|
||||||
{
|
{
|
||||||
@ -305,6 +351,8 @@ namespace AxibugEmuOnline.Server
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
SendRoomUpdateToAll(room.RoomID, 0);
|
SendRoomUpdateToAll(room.RoomID, 0);
|
||||||
|
|
||||||
|
RoomLog(_c.UID,1,room.RoomID,room.GameRomID,RoomLogType.Leave);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnHostPlayerUpdateStateRaw(Socket sk, byte[] reqData)
|
public void OnHostPlayerUpdateStateRaw(Socket sk, byte[] reqData)
|
||||||
@ -783,7 +831,7 @@ namespace AxibugEmuOnline.Server
|
|||||||
int oldPlayerCount = GetPlayerCount();
|
int oldPlayerCount = GetPlayerCount();
|
||||||
if (GetPlayerUIDByIdx(PlayerNum, out long hadUID))
|
if (GetPlayerUIDByIdx(PlayerNum, out long hadUID))
|
||||||
{
|
{
|
||||||
errcode = ErrorCode.ErrorRoomSlotReadlyHadPlayer;
|
errcode = ErrorCode.ErrorRoomSlotAlreadlyHadPlayer;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
AppSrv.g_Log.Debug($"Join _c.UID->{_c.UID} RoomID->{RoomID}");
|
AppSrv.g_Log.Debug($"Join _c.UID->{_c.UID} RoomID->{RoomID}");
|
||||||
@ -911,7 +959,7 @@ namespace AxibugEmuOnline.Server
|
|||||||
this.ScreenRaw = NextStateRaw;
|
this.ScreenRaw = NextStateRaw;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetNeedForwardTick(uint clientFrame,out long forwaFrame)
|
public bool GetNeedForwardTick(uint clientFrame, out long forwaFrame)
|
||||||
{
|
{
|
||||||
forwaFrame = 0;
|
forwaFrame = 0;
|
||||||
//目标帧,客户端+服务器提前量
|
//目标帧,客户端+服务器提前量
|
||||||
|
81
AxibugEmuOnline.Server/Manager/UserManager.cs
Normal file
81
AxibugEmuOnline.Server/Manager/UserManager.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using AxibugEmuOnline.Server.Common;
|
||||||
|
using AxibugEmuOnline.Server.Event;
|
||||||
|
using AxibugEmuOnline.Server.NetWork;
|
||||||
|
using AxibugProtobuf;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Server.Manager
|
||||||
|
{
|
||||||
|
public class UserManager
|
||||||
|
{
|
||||||
|
public UserManager()
|
||||||
|
{
|
||||||
|
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdUserOnlinelist, RecvGetUserList);
|
||||||
|
|
||||||
|
//事件
|
||||||
|
EventSystem.Instance.RegisterEvent<long>(EEvent.OnUserOnline, OnUserJoin);
|
||||||
|
EventSystem.Instance.RegisterEvent<long>(EEvent.OnUserOffline, OnUserLeave);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region 事件
|
||||||
|
void OnUserJoin(long UID)
|
||||||
|
{
|
||||||
|
AppSrv.g_Log.Debug($"P2PUserManager->OnUserJoin UID->{UID}");
|
||||||
|
SendUserJoin(UID);
|
||||||
|
}
|
||||||
|
void OnUserLeave(long UID)
|
||||||
|
{
|
||||||
|
AppSrv.g_Log.Debug($"P2PUserManager->OnUserLeave UID->{UID}");
|
||||||
|
SendUserLeave(UID);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public void RecvGetUserList(Socket _socket, byte[] reqData)
|
||||||
|
{
|
||||||
|
Protobuf_UserList msg = ProtoBufHelper.DeSerizlize<Protobuf_UserList>(reqData);
|
||||||
|
|
||||||
|
ClientInfo _c = AppSrv.g_ClientMgr.GetClientForSocket(_socket);
|
||||||
|
Protobuf_UserList_RESP respData = new Protobuf_UserList_RESP();
|
||||||
|
|
||||||
|
ClientInfo[] cArr = AppSrv.g_ClientMgr.GetOnlineClientList().ToArray();
|
||||||
|
respData.UserCount = cArr.Length;
|
||||||
|
for (int i = 0; i < cArr.Length; i++)
|
||||||
|
{
|
||||||
|
ClientInfo client = cArr[i];
|
||||||
|
respData.UserList.Add(new UserMiniInfo()
|
||||||
|
{
|
||||||
|
NickName = client.NickName,
|
||||||
|
UID = client.UID,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
AppSrv.g_Log.Debug($"拉取用户列表->{respData.UserCount}个用户");
|
||||||
|
AppSrv.g_ClientMgr.ClientSend(_c, (int)CommandID.CmdUserOnlinelist, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(respData));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void SendUserJoin(long UID)
|
||||||
|
{
|
||||||
|
ClientInfo _c = AppSrv.g_ClientMgr.GetClientForUID(UID);
|
||||||
|
if (_c == null)
|
||||||
|
return;
|
||||||
|
UserMiniInfo miniInfo = new UserMiniInfo();
|
||||||
|
|
||||||
|
miniInfo.NickName = _c.NickName;
|
||||||
|
UID = _c.UID;
|
||||||
|
Protobuf_UserJoin_RESP resp = new Protobuf_UserJoin_RESP()
|
||||||
|
{
|
||||||
|
UserInfo = miniInfo
|
||||||
|
};
|
||||||
|
AppSrv.g_ClientMgr.ClientSendALL((int)CommandID.CmdUserJoin, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(resp));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendUserLeave(long UID)
|
||||||
|
{
|
||||||
|
Protobuf_UserLeave_RESP resp = new Protobuf_UserLeave_RESP()
|
||||||
|
{
|
||||||
|
UID = UID,
|
||||||
|
};
|
||||||
|
AppSrv.g_ClientMgr.ClientSendALL((int)CommandID.CmdUserLeave, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(resp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -16,7 +16,7 @@ namespace AxibugEmuOnline.Server.NetWork
|
|||||||
|
|
||||||
private void ClientNumberChange(int num, AsyncUserToken token)
|
private void ClientNumberChange(int num, AsyncUserToken token)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Client数发生变化");
|
Console.WriteLine($"Client数发生变化 num->{num}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
|||||||
-->
|
-->
|
||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<History>True|2024-09-14T08:39:29.4677979Z||;True|2024-09-14T16:38:22.2398996+08:00||;True|2024-09-13T13:39:28.9591993+08:00||;True|2024-09-12T17:48:43.1521740+08:00||;True|2024-09-12T17:43:57.0504432+08:00||;True|2024-09-12T17:19:48.6392091+08:00||;True|2024-09-12T13:38:45.0141937+08:00||;False|2024-09-12T13:37:57.6131232+08:00||;True|2024-06-28T16:25:59.3159172+08:00||;True|2024-06-28T15:30:49.8257235+08:00||;</History>
|
<History>True|2024-11-28T11:58:55.3995125Z||;True|2024-09-14T16:39:29.4677979+08:00||;True|2024-09-14T16:38:22.2398996+08:00||;True|2024-09-13T13:39:28.9591993+08:00||;True|2024-09-12T17:48:43.1521740+08:00||;True|2024-09-12T17:43:57.0504432+08:00||;True|2024-09-12T17:19:48.6392091+08:00||;True|2024-09-12T13:38:45.0141937+08:00||;False|2024-09-12T13:37:57.6131232+08:00||;True|2024-06-28T16:25:59.3159172+08:00||;True|2024-06-28T15:30:49.8257235+08:00||;</History>
|
||||||
<LastFailureDetails />
|
<LastFailureDetails />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,7 @@
|
|||||||
using AxibugEmuOnline.Web.Common;
|
using AxibugEmuOnline.Web.Common;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using MySql.Data.MySqlClient;
|
using MySql.Data.MySqlClient;
|
||||||
|
using Mysqlx.Crud;
|
||||||
|
|
||||||
namespace AxibugEmuOnline.Web.Controllers
|
namespace AxibugEmuOnline.Web.Controllers
|
||||||
{
|
{
|
||||||
@ -52,7 +53,6 @@ namespace AxibugEmuOnline.Web.Controllers
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string query = "SELECT count(id) FROM romlist_nes where `Name` like ?searchPattern " + GameTypeCond;
|
string query = "SELECT count(id) FROM romlist_nes where `Name` like ?searchPattern " + GameTypeCond;
|
||||||
using (var command = new MySqlCommand(query, conn))
|
using (var command = new MySqlCommand(query, conn))
|
||||||
{
|
{
|
||||||
@ -70,7 +70,10 @@ namespace AxibugEmuOnline.Web.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash` FROM romlist_nes where `Name` like ?searchPattern {GameTypeCond} LIMIT ?offset, ?pageSize;";
|
|
||||||
|
string HotOrderBy = "ORDER BY playcount DESC, id ASC";
|
||||||
|
|
||||||
|
query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars` FROM romlist_nes where `Name` like ?searchPattern {GameTypeCond} {HotOrderBy} LIMIT ?offset, ?pageSize;";
|
||||||
using (var command = new MySqlCommand(query, conn))
|
using (var command = new MySqlCommand(query, conn))
|
||||||
{
|
{
|
||||||
// ÉèÖòÎÊýÖµ
|
// ÉèÖòÎÊýÖµ
|
||||||
@ -93,7 +96,8 @@ namespace AxibugEmuOnline.Web.Controllers
|
|||||||
url = !reader.IsDBNull(4) ? reader.GetString(4) : string.Empty,
|
url = !reader.IsDBNull(4) ? reader.GetString(4) : string.Empty,
|
||||||
imgUrl = !reader.IsDBNull(5) ? reader.GetString(5) : string.Empty,
|
imgUrl = !reader.IsDBNull(5) ? reader.GetString(5) : string.Empty,
|
||||||
hash = !reader.IsDBNull(6) ? reader.GetString(6) : string.Empty,
|
hash = !reader.IsDBNull(6) ? reader.GetString(6) : string.Empty,
|
||||||
stars = 0,
|
playcount = reader.GetInt32(7),
|
||||||
|
stars = reader.GetInt32(8),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -103,7 +107,6 @@ namespace AxibugEmuOnline.Web.Controllers
|
|||||||
return new JsonResult(resp);
|
return new JsonResult(resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public JsonResult RomInfo(int Ptype, int RomID)
|
public JsonResult RomInfo(int Ptype, int RomID)
|
||||||
{
|
{
|
||||||
@ -111,7 +114,7 @@ namespace AxibugEmuOnline.Web.Controllers
|
|||||||
Resp_RomInfo resp = new Resp_RomInfo();
|
Resp_RomInfo resp = new Resp_RomInfo();
|
||||||
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("NesRomList");
|
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("NesRomList");
|
||||||
{
|
{
|
||||||
string query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash` FROM romlist_nes where id = ?romid;";
|
string query = $"SELECT id,`Name`,GameType,Note,RomUrl,ImgUrl,`Hash`,`playcount`,`stars` FROM romlist_nes where id = ?romid;";
|
||||||
using (var command = new MySqlCommand(query, conn))
|
using (var command = new MySqlCommand(query, conn))
|
||||||
{
|
{
|
||||||
// ÉèÖòÎÊýÖµ
|
// ÉèÖòÎÊýÖµ
|
||||||
@ -128,7 +131,8 @@ namespace AxibugEmuOnline.Web.Controllers
|
|||||||
resp.url = !reader.IsDBNull(4) ? reader.GetString(4) : string.Empty;
|
resp.url = !reader.IsDBNull(4) ? reader.GetString(4) : string.Empty;
|
||||||
resp.imgUrl = !reader.IsDBNull(5) ? reader.GetString(5) : string.Empty;
|
resp.imgUrl = !reader.IsDBNull(5) ? reader.GetString(5) : string.Empty;
|
||||||
resp.hash = !reader.IsDBNull(6) ? reader.GetString(6) : string.Empty;
|
resp.hash = !reader.IsDBNull(6) ? reader.GetString(6) : string.Empty;
|
||||||
resp.stars = 0;
|
resp.playcount = reader.GetInt32(7);
|
||||||
|
resp.stars = reader.GetInt32(8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -194,6 +198,7 @@ namespace AxibugEmuOnline.Web.Controllers
|
|||||||
public string imgUrl { get; set; }
|
public string imgUrl { get; set; }
|
||||||
public string hash { get; set; }
|
public string hash { get; set; }
|
||||||
public int stars { get; set; }
|
public int stars { get; set; }
|
||||||
|
public int playcount { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -12,6 +12,15 @@ enum CommandID
|
|||||||
|
|
||||||
CMD_LOGIN = 2001; //自动登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP
|
CMD_LOGIN = 2001; //自动登录上行 | 下行 对应 Protobuf_Login | Protobuf_Login_RESP
|
||||||
|
|
||||||
|
CMD_USER_ONLINELIST = 3000; //获取在线用户列表 上行 | 下行 对应 Protobuf_UserList | Protobuf_UserList_RESP
|
||||||
|
CMD_USER_JOIN = 3031; //用户上线 下行 对应 Protobuf_UserOnline_RESP
|
||||||
|
CMD_USER_LEAVE = 3032; //用户下线 下行 对应 Protobuf_UserOffline_RESP
|
||||||
|
CMD_USER_STATE_UPDATE = 3033; //更新在线用户状态 下行 对应 Protobuf_UserState_RESP
|
||||||
|
|
||||||
|
CMD_Modify_NickName = 3101; //修改名称上行 | 下行 对应 Protobuf_Modify_NickName | Protobuf_Modify_NickName_RESP
|
||||||
|
CMD_Update_SelfUserInfo = 3110; //更新用户信息 下行 Protobuf_Update_UserInfo_RESP
|
||||||
|
CMD_Update_OtherUserInfo = 3112; //更新其他用户信息 下行 Protobuf_Update_OtherUserInfo_RESP
|
||||||
|
|
||||||
CMD_CHATMSG = 4001; //广播聊天信息上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP
|
CMD_CHATMSG = 4001; //广播聊天信息上行 | 下行 对应 Protobuf_ChatMsg | Protobuf_ChatMsg_RESP
|
||||||
|
|
||||||
//房间列表相关(仅用于列表显示)
|
//房间列表相关(仅用于列表显示)
|
||||||
@ -55,6 +64,8 @@ enum CommandID
|
|||||||
|
|
||||||
//画面采集
|
//画面采集
|
||||||
CMD_Screen = 7001; //画面采集 | 同步广播 对应 Protobuf_Screnn_Frame
|
CMD_Screen = 7001; //画面采集 | 同步广播 对应 Protobuf_Screnn_Frame
|
||||||
|
|
||||||
|
CMD_GAME_MARK = 10101; //房间列表 上行 | 下行 对应 Protobuf_Game_Mark | Protobuf_Game_Mark_RESP
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ErrorCode
|
enum ErrorCode
|
||||||
@ -63,14 +74,19 @@ enum ErrorCode
|
|||||||
ERROR_OK = 1; //成功
|
ERROR_OK = 1; //成功
|
||||||
|
|
||||||
ERROR_ROOM_NOT_FOUND = 10;//房间不存在
|
ERROR_ROOM_NOT_FOUND = 10;//房间不存在
|
||||||
ERROR_ROOM_SLOT_READLY_HAD_PLAYER=11;//加入目标位置已经有人
|
ERROR_ROOM_SLOT_ALREADLY_HAD_PLAYER=11;//加入目标位置已经有人
|
||||||
|
|
||||||
ERROR_ROOM_CANT_DO_CURR_STATE =50;//当前房间状态不允许本操作
|
ERROR_ROOM_CANT_DO_CURR_STATE =50;//当前房间状态不允许本操作
|
||||||
|
|
||||||
|
ERROR_ROM_ALREADY_HAD_STAR =403;//已经收藏
|
||||||
|
ERROR_ROM_DONT_HAD_STAR =404;//并没有收藏
|
||||||
}
|
}
|
||||||
|
|
||||||
enum LoginType
|
enum LoginType
|
||||||
{
|
{
|
||||||
BaseDefault = 0;//缺省不使用
|
UseDevice = 0;//使用设备登录
|
||||||
|
UseAccount = 1;//使用账户
|
||||||
|
UseHaoYueAccount = 2;//使用皓月通行证
|
||||||
}
|
}
|
||||||
|
|
||||||
enum DeviceType
|
enum DeviceType
|
||||||
@ -82,6 +98,12 @@ enum DeviceType
|
|||||||
PSV = 4;
|
PSV = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum PlatformType
|
||||||
|
{
|
||||||
|
All = 0;
|
||||||
|
Nes = 1;
|
||||||
|
}
|
||||||
|
|
||||||
//enum RoomPlayerState
|
//enum RoomPlayerState
|
||||||
//{
|
//{
|
||||||
// None_PlayerState = 0;//缺省
|
// None_PlayerState = 0;//缺省
|
||||||
@ -135,16 +157,17 @@ message Protobuf_Pong
|
|||||||
//登录数据上行
|
//登录数据上行
|
||||||
message Protobuf_Login
|
message Protobuf_Login
|
||||||
{
|
{
|
||||||
LoginType loginType = 1;//登录操作类型 [0]皓月通行证 [3] 皓月BF3 [4] 皓月BF4
|
LoginType loginType = 1;//登录操作类型
|
||||||
DeviceType deviceType = 2;//设备类型 [0]PC [1]AndroidPad预留 [3]IPad预留
|
DeviceType deviceType = 2;//设备类型 [0] PC [1] AndroidPad预留 [3] IPad预留
|
||||||
string Account = 3;//用户名
|
string deviceStr = 3;//设备串
|
||||||
string Password = 4;//密码
|
string Account = 4;//用户名
|
||||||
|
string Password = 5;//密码
|
||||||
}
|
}
|
||||||
|
|
||||||
//登录数据下行
|
//登录数据下行
|
||||||
message Protobuf_Login_RESP
|
message Protobuf_Login_RESP
|
||||||
{
|
{
|
||||||
string DeviceUUID = 1;//设备唯一串
|
string NickName = 1;//昵称(第一次是自动生成)
|
||||||
string Token = 2;//登录凭据 (本次登录之后,所有业务请求凭据,需要存储在内存中)
|
string Token = 2;//登录凭据 (本次登录之后,所有业务请求凭据,需要存储在内存中)
|
||||||
string LastLoginDate = 3;//上次登录时间(只用于呈现的字符串,若界面需求需要)
|
string LastLoginDate = 3;//上次登录时间(只用于呈现的字符串,若界面需求需要)
|
||||||
string RegDate = 4;//注册时间(只用于呈现的字符串,若界面需求需要)
|
string RegDate = 4;//注册时间(只用于呈现的字符串,若界面需求需要)
|
||||||
@ -152,6 +175,70 @@ message Protobuf_Login_RESP
|
|||||||
int64 UID = 6;
|
int64 UID = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//获取在线用户列表 上行
|
||||||
|
message Protobuf_UserList
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取在线用户列表 下行
|
||||||
|
message Protobuf_UserList_RESP
|
||||||
|
{
|
||||||
|
int32 UserCount = 1;//玩家数量
|
||||||
|
repeated UserMiniInfo UserList = 2;//用户列表
|
||||||
|
}
|
||||||
|
|
||||||
|
//用户上线 下行
|
||||||
|
message Protobuf_UserJoin_RESP
|
||||||
|
{
|
||||||
|
UserMiniInfo UserInfo = 1;//用户
|
||||||
|
}
|
||||||
|
|
||||||
|
//用户下线 下行
|
||||||
|
message Protobuf_UserLeave_RESP
|
||||||
|
{
|
||||||
|
int64 UID = 1;//用户ID
|
||||||
|
}
|
||||||
|
|
||||||
|
//更新在线用户状态 下行
|
||||||
|
message Protobuf_UserState_RESP
|
||||||
|
{
|
||||||
|
int64 UID = 1;//用户ID
|
||||||
|
int32 State = 2;//状态
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserMiniInfo
|
||||||
|
{
|
||||||
|
int64 UID = 1;//用户ID
|
||||||
|
string NickName = 2;//昵称
|
||||||
|
}
|
||||||
|
|
||||||
|
//修改昵称上行
|
||||||
|
message Protobuf_Modify_NickName
|
||||||
|
{
|
||||||
|
string NickName = 1;//昵称
|
||||||
|
}
|
||||||
|
|
||||||
|
//修改昵称下行
|
||||||
|
message Protobuf_Modify_NickName_RESP
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//用户信息更新
|
||||||
|
message Protobuf_Update_UserInfo_RESP
|
||||||
|
{
|
||||||
|
UserMiniInfo UserInfo = 1;//用户
|
||||||
|
}
|
||||||
|
|
||||||
|
//其他用户信息更新
|
||||||
|
message Protobuf_Update_OtherUserInfo_RESP
|
||||||
|
{
|
||||||
|
int64 UID = 1;//用户ID
|
||||||
|
UserMiniInfo UserInfo = 2;//用户
|
||||||
|
}
|
||||||
|
|
||||||
message Protobuf_Room_List
|
message Protobuf_Room_List
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -277,3 +364,17 @@ message Protobuf_Room_Get_Screen_RESP
|
|||||||
int32 FrameID = 2;//帧编号
|
int32 FrameID = 2;//帧编号
|
||||||
bytes RawBitmap = 3;//渲染层画面
|
bytes RawBitmap = 3;//渲染层画面
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
message Protobuf_Game_Mark
|
||||||
|
{
|
||||||
|
int32 RomID = 1;//RomID
|
||||||
|
int32 state = 2;//[0]收藏 [1]取消收藏
|
||||||
|
PlatformType PlatformType = 3;//平台类型
|
||||||
|
}
|
||||||
|
|
||||||
|
message Protobuf_Game_Mark_RESP
|
||||||
|
{
|
||||||
|
int32 RomID = 1;//RomID
|
||||||
|
PlatformType PlatformType = 2;//平台类型
|
||||||
|
}
|
@ -138,8 +138,6 @@ Response:
|
|||||||
序列化C#实体类示例
|
序列化C#实体类示例
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
class Resp_GameList
|
class Resp_GameList
|
||||||
{
|
{
|
||||||
public int page { get; set; }
|
public int page { get; set; }
|
||||||
@ -152,13 +150,14 @@ Response:
|
|||||||
{
|
{
|
||||||
public int orderid { get; set; }
|
public int orderid { get; set; }
|
||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public string romName { get; set;}
|
public string romName { get; set; }
|
||||||
public string gType { get; set; }
|
public string gType { get; set; }
|
||||||
public string desc { get; set; }
|
public string desc { get; set; }
|
||||||
public string url { get; set; }
|
public string url { get; set; }
|
||||||
public string imgUrl { get; set; }
|
public string imgUrl { get; set; }
|
||||||
public string hash { get; set; }
|
public string hash { get; set; }
|
||||||
public int stars { get; set; }
|
public int stars { get; set; }
|
||||||
|
public int playcount { get; set; }
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -11,12 +11,25 @@
|
|||||||
Target Server Version : 100311
|
Target Server Version : 100311
|
||||||
File Encoding : 65001
|
File Encoding : 65001
|
||||||
|
|
||||||
Date: 16/07/2024 10:56:10
|
Date: 28/11/2024 19:55:49
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
SET FOREIGN_KEY_CHECKS = 0;
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for rom_stars
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `rom_stars`;
|
||||||
|
CREATE TABLE `rom_stars` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`uid` int(11) NOT NULL,
|
||||||
|
`platform` int(11) NOT NULL,
|
||||||
|
`romid` int(11) NOT NULL,
|
||||||
|
`logdate` datetime NOT NULL DEFAULT current_timestamp(),
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = MyISAM AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Fixed;
|
||||||
|
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Table structure for romlist_nes
|
-- Table structure for romlist_nes
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
@ -29,7 +42,58 @@ CREATE TABLE `romlist_nes` (
|
|||||||
`GameType` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`GameType` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
`Note` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`Note` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
`Hash` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
`Hash` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`playcount` int(11) NOT NULL DEFAULT 0,
|
||||||
|
`stars` int(11) NOT NULL DEFAULT 0,
|
||||||
PRIMARY KEY (`Id`) USING BTREE
|
PRIMARY KEY (`Id`) USING BTREE
|
||||||
) ENGINE = MyISAM AUTO_INCREMENT = 2702 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
) ENGINE = MyISAM AUTO_INCREMENT = 2702 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for room_log
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `room_log`;
|
||||||
|
CREATE TABLE `room_log` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`uid` int(11) NOT NULL,
|
||||||
|
`platform` int(11) NOT NULL,
|
||||||
|
`romid` int(11) NOT NULL,
|
||||||
|
`roomid` int(11) NULL DEFAULT NULL,
|
||||||
|
`state` int(11) NOT NULL,
|
||||||
|
`logdate` datetime NULL DEFAULT current_timestamp(),
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = MyISAM AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Fixed;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for room_log_state
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `room_log_state`;
|
||||||
|
CREATE TABLE `room_log_state` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = MyISAM CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for user_devices
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `user_devices`;
|
||||||
|
CREATE TABLE `user_devices` (
|
||||||
|
`device` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
|
||||||
|
`devicetype` int(11) NOT NULL,
|
||||||
|
`uid` int(11) NOT NULL
|
||||||
|
) ENGINE = MyISAM CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
-- ----------------------------
|
||||||
|
-- Table structure for users
|
||||||
|
-- ----------------------------
|
||||||
|
DROP TABLE IF EXISTS `users`;
|
||||||
|
CREATE TABLE `users` (
|
||||||
|
`uid` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`account` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`regdate` datetime NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`nikename` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
|
||||||
|
`lastlogindate` datetime NULL DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`uid`) USING BTREE
|
||||||
|
) ENGINE = MyISAM AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 1;
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user