Compare commits

...

3 Commits

Author SHA1 Message Date
d567cd9e71 服务端逻辑修改 2024-09-13 10:10:14 +08:00
5b8ed639f3 Merge branch 'master' of http://git.axibug.com/sin365/AxibugEmuOnline 2024-09-13 10:08:02 +08:00
a4caf1d3ad 新增ping 2024-09-13 10:07:24 +08:00
17 changed files with 652 additions and 211 deletions

View File

@ -1,7 +1,10 @@
using AxibugEmuOnline.Client.Manager;
using AxibugEmuOnline.Client.Network;
using System.Collections;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
using static AxibugEmuOnline.Client.HttpAPI;
namespace AxibugEmuOnline.Client.ClientCore
{
@ -23,7 +26,11 @@ namespace AxibugEmuOnline.Client.ClientCore
public static AppSceneLoader SceneLoader;
public static AppRoom roomMgr;
#region Mono
public static TickLoop tickLoop;
private static CoroutineRunner coRunner;
#endregion
public static string PersistentDataPath => Application.persistentDataPath;
@ -46,12 +53,14 @@ namespace AxibugEmuOnline.Client.ClientCore
var go = new GameObject("[AppAxibugEmuOnline]");
GameObject.DontDestroyOnLoad(go);
tickLoop = go.AddComponent<TickLoop>();
coRunner = go.AddComponent<CoroutineRunner>();
var importNode = GameObject.Find("IMPORTENT");
GameObject.DontDestroyOnLoad(importNode);
StartCoroutine(AppTickFlow());
RePullNetInfo();
}
private static IEnumerator AppTickFlow()
@ -63,6 +72,37 @@ namespace AxibugEmuOnline.Client.ClientCore
}
}
public static void RePullNetInfo()
{
StartCoroutine(StartNetInit());
}
static IEnumerator StartNetInit()
{
if (App.network.isConnected)
yield break;
int platform = 0;
UnityWebRequest request = UnityWebRequest.Get($"{App.httpAPI.WebSiteApi}/CheckStandInfo?platform={platform}&version={Application.version}");
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
yield break;
App.log.Debug($"ApiResp => {request.downloadHandler.text}");
Resp_CheckStandInfo resp = JsonUtility.FromJson<Resp_CheckStandInfo>(request.downloadHandler.text);
//需要更新
if (resp.needUpdateClient == 1)
{
//TODO
}
yield return null;
Connect("127.0.0.1", 10492);
//Connect(resp.serverIp, resp.serverPort);
}
private static void Tick()
{
nesRomLib.ExecuteFetchRomInfo();
@ -78,9 +118,13 @@ namespace AxibugEmuOnline.Client.ClientCore
coRunner.StopCoroutine(cor);
}
public static bool Connect(string IP, int port)
public static void Connect(string IP, int port)
{
return network.Init(IP, port);
Task task = new Task(() =>
{
network.Init(IP, port);
});
task.Start();
}
public static void Close()

View File

@ -3,12 +3,16 @@ using AxibugEmuOnline.Client.Common;
using AxibugEmuOnline.Client.Network;
using AxibugProtobuf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
namespace AxibugEmuOnline.Client.Manager
{
public class AppLogin
{
static string LastLoginGuid = "";
public AppLogin()
{
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdLogin, RecvLoginMsg);
@ -42,5 +46,6 @@ namespace AxibugEmuOnline.Client.Manager
App.log.Info("登录失败");
}
}
}
}

View File

@ -1,45 +0,0 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Common;
using AxibugEmuOnline.Client.Network;
using AxibugProtobuf;
using Google.Protobuf;
using System.Linq;
namespace AxibugEmuOnline.Client.Manager
{
public class AppNetGame
{
int CurrRoomID;
int[] _palette;
public int[] _renderbuffer { private set; get; }
public AppNetGame()
{
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdScreen, OnScreen);
}
Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame();
public void SendScreen(byte[] RenderBuffer)
{
byte[] comData = Helper.CompressByteArray(RenderBuffer);
_Protobuf_Screnn_Frame.FrameID = 0;
_Protobuf_Screnn_Frame.RawBitmap = ByteString.CopyFrom(comData);
App.network.SendToServer((int)CommandID.CmdScreen, ProtoBufHelper.Serizlize(_Protobuf_Screnn_Frame));
}
public void OnScreen(byte[] reqData)
{
Protobuf_Screnn_Frame msg = ProtoBufHelper.DeSerizlize<Protobuf_Screnn_Frame>(reqData);
lock (_renderbuffer)
{
byte[] data = Helper.DecompressByteArray(msg.RawBitmap.ToArray());
for (int i = 0; i < data.Length; i++)
{
_renderbuffer[i] = _palette[data[i]];
}
}
}
}
}

View File

@ -6,6 +6,7 @@ using AxibugProtobuf;
using AxiReplay;
using Google.Protobuf;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace AxibugEmuOnline.Client.Manager
@ -21,14 +22,21 @@ namespace AxibugEmuOnline.Client.Manager
public byte[] RawData { get; private set; } = null;
public NetReplay netReplay { get; private set; }
Dictionary<int, Protobuf_Room_MiniInfo> dictRoomListID2Info = new Dictionary<int, Protobuf_Room_MiniInfo>();
static Protobuf_Room_List _Protobuf_Room_List = new Protobuf_Room_List();
static Protobuf_Room_Create _Protobuf_Room_Create = new Protobuf_Room_Create();
static Protobuf_Room_Join _Protobuf_Room_Join = new Protobuf_Room_Join();
static Protobuf_Room_Leave _Protobuf_Room_Leave = new Protobuf_Room_Leave();
static Protobuf_Room_Player_Ready _Protobuf_Room_Player_Ready = new Protobuf_Room_Player_Ready();
static Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData();
struct S_PlayerMiniInfo
{
public long UID;
public string NickName;
}
Protobuf_Room_List _Protobuf_Room_List = new Protobuf_Room_List();
Protobuf_Room_Create _Protobuf_Room_Create = new Protobuf_Room_Create();
Protobuf_Room_Join _Protobuf_Room_Join = new Protobuf_Room_Join();
Protobuf_Room_Leave _Protobuf_Room_Leave = new Protobuf_Room_Leave();
Protobuf_Room_Player_Ready _Protobuf_Room_Player_Ready = new Protobuf_Room_Player_Ready();
Protobuf_Room_SinglePlayerInputData _Protobuf_Room_SinglePlayerInputData = new Protobuf_Room_SinglePlayerInputData();
Protobuf_Screnn_Frame _Protobuf_Screnn_Frame = new Protobuf_Screnn_Frame();
public AppRoom()
{
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomList, RecvGetRoomList);
@ -40,6 +48,7 @@ namespace AxibugEmuOnline.Client.Manager
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomWaitStep, RecvRoom_WaitStep);
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomHostPlayerUpdateStateRaw, RecvHostPlayer_UpdateStateRaw);
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdRoomSynPlayerInput, RecvHostSyn_RoomFrameAllInputData);
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdScreen, OnScreen);
}
#region
@ -90,7 +99,7 @@ namespace AxibugEmuOnline.Client.Manager
}
public void ReleaseRePlay()
{
}
#endregion
@ -107,17 +116,47 @@ namespace AxibugEmuOnline.Client.Manager
return -1;
}
long[] GetRoom4Player()
long[] GetRoom4PlayerUIDs()
{
if (mineRoomMiniInfo == null)
return null;
long[] result = new long[4];
if (mineRoomMiniInfo.Player1UID > 0)
result[0] = mineRoomMiniInfo.Player1UID;
if (mineRoomMiniInfo.Player2UID == App.user.userdata.UID)
if (mineRoomMiniInfo.Player2UID > 0)
result[1] = mineRoomMiniInfo.Player2UID;
if (mineRoomMiniInfo.Player3UID > 0)
result[2] = mineRoomMiniInfo.Player3UID;
if (mineRoomMiniInfo.Player4UID > 0)
result[3] = mineRoomMiniInfo.Player4UID;
return result;
}
S_PlayerMiniInfo[] GetRoom4PlayerMiniInfos()
{
if (mineRoomMiniInfo == null)
return null;
S_PlayerMiniInfo[] result = new S_PlayerMiniInfo[4];
if (mineRoomMiniInfo.Player1UID > 0)
{
result[0].UID = mineRoomMiniInfo.Player1UID;
result[0].NickName = mineRoomMiniInfo.Player1NickName;
}
if (mineRoomMiniInfo.Player2UID > 0)
{
result[1].UID = mineRoomMiniInfo.Player2UID;
result[1].NickName = mineRoomMiniInfo.Player2NickName;
}
if (mineRoomMiniInfo.Player3UID > 0)
{
result[2].UID = mineRoomMiniInfo.Player3UID;
result[2].NickName = mineRoomMiniInfo.Player3NickName;
}
if (mineRoomMiniInfo.Player4UID > 0)
{
result[3].UID = mineRoomMiniInfo.Player4UID;
result[3].NickName = mineRoomMiniInfo.Player4NickName;
}
return result;
}
@ -238,9 +277,9 @@ namespace AxibugEmuOnline.Client.Manager
void RecvRoomMyRoomStateChange(byte[] reqData)
{
Protobuf_Room_MyRoom_State_Change msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_MyRoom_State_Change>(reqData);
long[] oldRoomPlayer = GetRoom4Player();
long[] oldRoomPlayer = GetRoom4PlayerUIDs();
mineRoomMiniInfo = msg.RoomMiniInfo;
long[] newRoomPlayer = GetRoom4Player();
long[] newRoomPlayer = GetRoom4PlayerUIDs();
for (int i = 0; i < 4; i++)
{
long OldPlayer = oldRoomPlayer[i];
@ -309,7 +348,7 @@ namespace AxibugEmuOnline.Client.Manager
/// <summary>
/// 同步上行
/// </summary>
public void SendRoomSingelPlayerInput(uint FrameID,uint InputData)
public void SendRoomSingelPlayerInput(uint FrameID, uint InputData)
{
_Protobuf_Room_SinglePlayerInputData.FrameID = FrameID;
_Protobuf_Room_SinglePlayerInputData.InputData = InputData;
@ -322,5 +361,21 @@ namespace AxibugEmuOnline.Client.Manager
Protobuf_Room_Syn_RoomFrameAllInputData msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_Syn_RoomFrameAllInputData>(reqData);
netReplay.InData(new ReplayStep() { FrameStartID = (int)msg.FrameID, InPut = msg.InputData });
}
public void SendScreen(byte[] RenderBuffer)
{
//压缩
byte[] comData = Helper.CompressByteArray(RenderBuffer);
_Protobuf_Screnn_Frame.FrameID = 0;
_Protobuf_Screnn_Frame.RawBitmap = ByteString.CopyFrom(comData);
App.network.SendToServer((int)CommandID.CmdScreen, ProtoBufHelper.Serizlize(_Protobuf_Screnn_Frame));
}
public void OnScreen(byte[] reqData)
{
Protobuf_Screnn_Frame msg = ProtoBufHelper.DeSerizlize<Protobuf_Screnn_Frame>(reqData);
//解压
byte[] data = Helper.DecompressByteArray(msg.RawBitmap.ToArray());
}
}
}

View File

@ -27,7 +27,7 @@ namespace AxibugEmuOnline.Client
IEnumerator DownloadFromURL(string url, string path, Action<byte[]> callback)
{
var request = UnityWebRequest.Get($"{App.httpAPI.DownSite}/{url}");
var request = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{url}");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)

View File

@ -9,8 +9,8 @@ namespace AxibugEmuOnline.Client
{
public class HttpAPI
{
public string WebSite = "http://emu.axibug.com/api";
public string DownSite = "http://emu.axibug.com";
public string WebHost = "http://emu.axibug.com";
public string WebSiteApi => WebHost + "/api";
public delegate void GetRomListAPI(Action<Resp_GameList> callback, int page, int pageSize = 10);
@ -21,7 +21,7 @@ namespace AxibugEmuOnline.Client
private IEnumerator GetNesRomListFlow(int page, int pageSize, Action<Resp_GameList> callback)
{
UnityWebRequest request = UnityWebRequest.Get($"{WebSite}/NesRomList?Page={page}&PageSize={pageSize}");
UnityWebRequest request = UnityWebRequest.Get($"{WebSiteApi}/NesRomList?Page={page}&PageSize={pageSize}");
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
@ -78,5 +78,14 @@ namespace AxibugEmuOnline.Client
public string hash;
public int stars;
}
[Serializable]
public class Resp_CheckStandInfo
{
public int needUpdateClient;
public string serverIp;
public ushort serverPort;
public string clientVersion;
public string downLoadUrl;
}
}
}

View File

@ -106,7 +106,7 @@ namespace AxibugEmuOnline.Client
private IEnumerator DownloadRemoteRom(Action<byte[]> callback)
{
downloadRequest = UnityWebRequest.Get($"{App.httpAPI.DownSite}/{webData.url}");
downloadRequest = UnityWebRequest.Get($"{App.httpAPI.WebHost}/{webData.url}");
yield return downloadRequest.SendWebRequest();
if (downloadRequest.result != UnityWebRequest.Result.Success)

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d210d2c6168ca99488844ef0372050ff
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,111 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Common;
using AxibugEmuOnline.Client.Network;
using AxibugProtobuf;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Sockets;
using UnityEngine;
namespace AxibugEmuOnline.Client
{
public class TickLoop : MonoBehaviour
{
Action LoopAction;
public Stopwatch sw = Stopwatch.StartNew();
public TimeSpan LastStartPingTime;
public int LastPingSeed;
public double AveNetDelay;
public double MinNetDelay;
public double MaxNetDelay;
public List<double> NetDelays = new List<double>();
public const int NetAveDelayCount = 3;
private void Awake()
{
Application.targetFrameRate = 60;
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdPing, OnCmdPing);
NetMsg.Instance.RegNetMsgEvent((int)CommandID.CmdPong, OnCmdPong);
}
float LastPingTime;
private void Update()
{
NetMsg.Instance.DequeueNesMsg();
LoopAction?.Invoke();
if (Time.time - LastPingTime > 3)
{
LastPingTime = Time.time;
Ping();
}
}
void OnApplicationQuit()
{
App.log.Debug("OnApplicationQuit");
App.network.bAutoReConnect = false;
if (App.network.isConnected)
{
App.network.CloseConntect();
}
App.network.CancelReConnect();
}
void Ping()
{
if (!App.network.isConnected)
return;
int randSeed = new System.Random().Next(0, int.MaxValue);
LastPingSeed = randSeed;
LastStartPingTime = App.tickLoop.sw.Elapsed;
Protobuf_Ping resp = new Protobuf_Ping()
{
Seed = randSeed,
};
App.network.SendToServer((int)CommandID.CmdPing, ProtoBufHelper.Serizlize(resp));
}
public void OnCmdPing(byte[] reqData)
{
App.log.Debug($"OnCmdPing");
Protobuf_Ping msg = ProtoBufHelper.DeSerizlize<Protobuf_Ping>(reqData);
Protobuf_Pong resp = new Protobuf_Pong()
{
Seed = msg.Seed,
};
App.network.SendToServer((int)CommandID.CmdPong, ProtoBufHelper.Serizlize(resp));
}
public void OnCmdPong(byte[] reqData)
{
App.log.Debug($"OnCmdPong");
Protobuf_Pong msg = ProtoBufHelper.DeSerizlize<Protobuf_Pong>(reqData);
if (LastPingSeed == msg.Seed)
{
TimeSpan current = App.tickLoop.sw.Elapsed;
TimeSpan delta = current - LastStartPingTime;
NetDelays.Add(delta.TotalSeconds);
while (NetDelays.Count > NetAveDelayCount)
NetDelays.RemoveAt(0);
double tempMin = double.MaxValue;
double tempMax = double.MinValue;
for (int i = 0; i < NetDelays.Count; i++)
{
tempMin = Math.Min(NetDelays[i], tempMin);
tempMax = Math.Max(NetDelays[i], tempMax);
}
MinNetDelay = tempMin;
MaxNetDelay = tempMax;
AveNetDelay = NetDelays.Average(w => w);
}
}
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 5f7ca4d4fcf6c0f41a6ead44beed31dd
guid: 07b53eddba336d74dab08a8a037b0e73
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -12,6 +12,8 @@ namespace AxibugEmuOnline.Client.Network
private Dictionary<int, List<Delegate>> netEventDic = new Dictionary<int, List<Delegate>>(128);
private Queue<(int, int, byte[])> queueNetMsg = new Queue<(int, int, byte[])>();
private NetMsg() { }
@ -57,7 +59,21 @@ namespace AxibugEmuOnline.Client.Network
#endregion
#region PostEvent
public void PostNetMsgEvent(int cmd, byte[] arg)
public void EnqueueNesMsg(int cmd, int ERRCODE, byte[] arg)
{
queueNetMsg.Enqueue((cmd, ERRCODE, arg));
}
public void DequeueNesMsg()
{
if (queueNetMsg.Count > 0)
{
(int, int, byte[]) msgData = queueNetMsg.Dequeue();
PostNetMsgEvent(msgData.Item1, msgData.Item2, msgData.Item3);
}
}
public void PostNetMsgEvent(int cmd, int ERRCODE, byte[] arg)
{
List<Delegate> eventList = GetNetEventDicList(cmd);
if (eventList != null)

View File

@ -1,8 +1,10 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugProtobuf;
using HaoYueNet.ClientNetworkNet.Standard2;
using System;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
namespace AxibugEmuOnline.Client.Network
{
@ -31,7 +33,7 @@ namespace AxibugEmuOnline.Client.Network
/// <summary>
/// 是否自动重连
/// </summary>
public bool bAutoReConnect = false;
public bool bAutoReConnect = true;
/// <summary>
/// 重连尝试时间
/// </summary>
@ -80,7 +82,12 @@ namespace AxibugEmuOnline.Client.Network
try
{
//抛出网络数据
NetMsg.Instance.PostNetMsgEvent(CMDID, data);
//网络线程直接抛
if(CMDID == (int)CommandID.CmdPing || CMDID == (int)CommandID.CmdPong)
NetMsg.Instance.PostNetMsgEvent(CMDID,ERRCODE, data);
else//加入队列,主线程来取
NetMsg.Instance.EnqueueNesMsg(CMDID, ERRCODE, data);
}
catch (Exception ex)
{
@ -102,33 +109,44 @@ namespace AxibugEmuOnline.Client.Network
ReConnect();
}
bool bInReConnecting = false;
CancellationTokenSource cts;
Task ReConnectTask;
public void CancelReConnect()
{
App.log.Debug("CancelReConnect");
cts?.Cancel();
cts = null;
ReConnectTask = null;
}
/// <summary>
/// 自动重连
/// </summary>
void ReConnect()
{
if (bInReConnecting)
if (ReConnectTask != null)
return;
bInReConnecting = true;
bool bflagDone = false;
do
cts = new CancellationTokenSource();
ReConnectTask = new Task(() =>
{
//等待时间
Thread.Sleep(ReConnectTryTime);
App.log.Info($"尝试自动重连{LastConnectIP}:{LastConnectPort}……");
//第一步
if (Init(LastConnectIP, LastConnectPort))
bool bflagDone = false;
do
{
App.log.Info($"自动重连成功!");
bflagDone = true;
App.log.Info($"触发重连后的自动逻辑!");
OnReConnected?.Invoke();
}
} while (!bflagDone);
bInReConnecting = false;
//等待时间
Thread.Sleep(ReConnectTryTime);
App.log.Info($"尝试自动重连{LastConnectIP}:{LastConnectPort}……");
//第一步
if (Init(LastConnectIP, LastConnectPort))
{
App.log.Info($"自动重连成功!");
bflagDone = true;
App.log.Info($"触发重连后的自动逻辑!");
OnReConnected?.Invoke();
}
} while (!bflagDone);
ReConnectTask = null;
cts = null;
}, cts.Token);
ReConnectTask.Start();
}
bool CheckIsConnectd()

View File

@ -38,56 +38,59 @@ namespace AxibugProtobuf {
"b3RvYnVmLkxvZ2luUmVzdWx0U3RhdHVzEgsKA1VJRBgGIAEoAyIUChJQcm90",
"b2J1Zl9Sb29tX0xpc3QiWwoXUHJvdG9idWZfUm9vbV9MaXN0X1JFU1ASQAoQ",
"Um9vbU1pbmlJbmZvTGlzdBgBIAMoCzImLkF4aWJ1Z1Byb3RvYnVmLlByb3Rv",
"YnVmX1Jvb21fTWluaUluZm8ijQIKFlByb3RvYnVmX1Jvb21fTWluaUluZm8S",
"YnVmX1Jvb21fTWluaUluZm8ihgMKFlByb3RvYnVmX1Jvb21fTWluaUluZm8S",
"DgoGUm9vbUlEGAEgASgFEhEKCUdhbWVSb21JRBgCIAEoBRITCgtHYW1lUm9t",
"SGFzaBgDIAEoCRIwCglHYW1lU3RhdGUYBSABKA4yHS5BeGlidWdQcm90b2J1",
"Zi5Sb29tR2FtZVN0YXRlEhUKDUhvc3RQbGF5ZXJVSUQYBiABKAUSFAoMT2Jz",
"VXNlckNvdW50GAcgASgFEhMKC1BsYXllcjFfVUlEGAggASgDEhgKEFBsYXll",
"cjFfTmlja05hbWUYCSABKAkSEwoLUGxheWVyMl9VSUQYCiABKAMSGAoQUGxh",
"eWVyMl9OaWNrTmFtZRgLIAEoCSJtChlQcm90b2J1Zl9Sb29tX1VwZGF0ZV9S",
"RVNQEhIKClVwZGF0ZVR5cGUYASABKAUSPAoMUm9vbU1pbmlJbmZvGAIgASgL",
"MiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9vbV9NaW5pSW5mbyJLChVQ",
"cm90b2J1Zl9TY3Jlbm5fRnJhbWUSDgoGUm9vbUlEGAEgASgFEg8KB0ZyYW1l",
"SUQYAiABKAUSEQoJUmF3Qml0bWFwGAMgASgMIkkKI1Byb3RvYnVmX1Jvb21f",
"U2luZ2xlUGxheWVySW5wdXREYXRhEg8KB0ZyYW1lSUQYASABKA0SEQoJSW5w",
"dXREYXRhGAIgASgNIk0KJ1Byb3RvYnVmX1Jvb21fU3luX1Jvb21GcmFtZUFs",
"bElucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgNEhEKCUlucHV0RGF0YRgCIAEo",
"BCJVChRQcm90b2J1Zl9Sb29tX0NyZWF0ZRIRCglHYW1lUm9tSUQYASABKAUS",
"EwoLR2FtZVJvbUhhc2gYAiABKAkSFQoNSm9pblBsYXllcklkeBgDIAEoBSJZ",
"ChlQcm90b2J1Zl9Sb29tX0NyZWF0ZV9SRVNQEjwKDFJvb21NaW5pSW5mbxgB",
"IAEoCzImLkF4aWJ1Z1Byb3RvYnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8i",
"NwoSUHJvdG9idWZfUm9vbV9Kb2luEg4KBlJvb21JRBgBIAEoBRIRCglQbGF5",
"ZXJOdW0YAiABKAUiVwoXUHJvdG9idWZfUm9vbV9Kb2luX1JFU1ASPAoMUm9v",
"bU1pbmlJbmZvGAEgASgLMiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9v",
"bV9NaW5pSW5mbyIlChNQcm90b2J1Zl9Sb29tX0xlYXZlEg4KBlJvb21JRBgB",
"IAEoBSIqChhQcm90b2J1Zl9Sb29tX0xlYXZlX1JFU1ASDgoGUm9vbUlEGAEg",
"ASgFImEKIVByb3RvYnVmX1Jvb21fTXlSb29tX1N0YXRlX0NoYW5nZRI8CgxS",
"b29tTWluaUluZm8YASABKAsyJi5BeGlidWdQcm90b2J1Zi5Qcm90b2J1Zl9S",
"b29tX01pbmlJbmZvIkUKG1Byb3RvYnVmX1Jvb21fV2FpdFN0ZXBfUkVTUBIQ",
"CghXYWl0U3RlcBgBIAEoBRIUCgxMb2FkU3RhdGVSYXcYAiABKAwiPwonUHJv",
"dG9idWZfUm9vbV9Ib3N0UGxheWVyX1VwZGF0ZVN0YXRlUmF3EhQKDExvYWRT",
"dGF0ZVJhdxgBIAEoDCIuCixQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBk",
"YXRlU3RhdGVSYXdfUkVTUCIcChpQcm90b2J1Zl9Sb29tX1BsYXllcl9SZWFk",
"eSqaAwoJQ29tbWFuZElEEg4KCkNNRF9ERUZBVUwQABIMCghDTURfUElORxAB",
"EgwKCENNRF9QT05HEAISDgoJQ01EX0xPR0lOENEPEhAKC0NNRF9DSEFUTVNH",
"EKEfEhIKDUNNRF9Sb29tX0xpc3QQiScSGQoUQ01EX1Jvb21fTGlzdF9VcGRh",
"dGUQiicSFAoPQ01EX1Jvb21fQ3JlYXRlEO0nEhIKDUNNRF9Sb29tX0pvaW4Q",
"8ScSEwoOQ01EX1Jvb21fTGVhdmUQ8icSIgodQ01EX1Jvb21fTXlSb29tX1N0",
"YXRlX0NoYW5nZWQQ9icSFgoRQ01EX1Jvb21fV2FpdFN0ZXAQ0SgSJwoiQ01E",
"X1Jvb21fSG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhdxDUKBIaChVDTURfUm9v",
"bV9QbGF5ZXJfUmVhZHkQ2CgSIAobQ01EX1Jvb21fU2luZ2VsX1BsYXllcklu",
"cHV0EPouEh0KGENNRF9ST09NX1NZTl9QbGF5ZXJJbnB1dBD/LhIPCgpDTURf",
"U2NyZWVuENk2Ko8BCglFcnJvckNvZGUSEAoMRVJST1JfREVGQVVMEAASDAoI",
"RVJST1JfT0sQARIYChRFUlJPUl9ST09NX05PVF9GT1VORBAKEiUKIUVSUk9S",
"X1JPT01fU0xPVF9SRUFETFlfSEFEX1BMQVlFUhALEiEKHUVSUk9SX1JPT01f",
"Q0FOVF9ET19DVVJSX1NUQVRFEDIqHAoJTG9naW5UeXBlEg8KC0Jhc2VEZWZh",
"dWx0EAAqSwoKRGV2aWNlVHlwZRIWChJEZXZpY2VUeXBlX0RlZmF1bHQQABIG",
"CgJQQxABEgsKB0FuZHJvaWQQAhIHCgNJT1MQAxIHCgNQU1YQBCpwCg1Sb29t",
"R2FtZVN0YXRlEhIKDk5vbmVfR2FtZVN0YXRlEAASDAoIT25seUhvc3QQARIR",
"Cg1XYWl0UmF3VXBkYXRlEAISDQoJV2FpdFJlYWR5EAMSCQoFUGF1c2UQBBIQ",
"CgxJbk9ubGluZUdhbWUQBSpOChFMb2dpblJlc3VsdFN0YXR1cxIhCh1Mb2dp",
"blJlc3VsdFN0YXR1c19CYXNlRGVmYXVsdBAAEgYKAk9LEAESDgoKQWNjb3Vu",
"dEVychACQgJIAWIGcHJvdG8z"));
"SGFzaBgDIAEoCRIVCg1Ib3N0UGxheWVyVUlEGAQgASgDEjAKCUdhbWVTdGF0",
"ZRgFIAEoDjIdLkF4aWJ1Z1Byb3RvYnVmLlJvb21HYW1lU3RhdGUSFAoMT2Jz",
"VXNlckNvdW50GAYgASgFEhMKC1BsYXllcjFfVUlEGAcgASgDEhgKEFBsYXll",
"cjFfTmlja05hbWUYCCABKAkSEwoLUGxheWVyMl9VSUQYCSABKAMSGAoQUGxh",
"eWVyMl9OaWNrTmFtZRgKIAEoCRITCgtQbGF5ZXIzX1VJRBgLIAEoAxIYChBQ",
"bGF5ZXIzX05pY2tOYW1lGAwgASgJEhMKC1BsYXllcjRfVUlEGA0gASgDEhgK",
"EFBsYXllcjRfTmlja05hbWUYDiABKAkSGQoRU2NyZWVuUHJvdmlkZXJVSUQY",
"DyABKAMibQoZUHJvdG9idWZfUm9vbV9VcGRhdGVfUkVTUBISCgpVcGRhdGVU",
"eXBlGAEgASgFEjwKDFJvb21NaW5pSW5mbxgCIAEoCzImLkF4aWJ1Z1Byb3Rv",
"YnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iSwoVUHJvdG9idWZfU2NyZW5u",
"X0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIPCgdGcmFtZUlEGAIgASgFEhEKCVJh",
"d0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1Zl9Sb29tX1NpbmdsZVBsYXllcklu",
"cHV0RGF0YRIPCgdGcmFtZUlEGAEgASgNEhEKCUlucHV0RGF0YRgCIAEoDSJN",
"CidQcm90b2J1Zl9Sb29tX1N5bl9Sb29tRnJhbWVBbGxJbnB1dERhdGESDwoH",
"RnJhbWVJRBgBIAEoDRIRCglJbnB1dERhdGEYAiABKAQiVQoUUHJvdG9idWZf",
"Um9vbV9DcmVhdGUSEQoJR2FtZVJvbUlEGAEgASgFEhMKC0dhbWVSb21IYXNo",
"GAIgASgJEhUKDUpvaW5QbGF5ZXJJZHgYAyABKAUiWQoZUHJvdG9idWZfUm9v",
"bV9DcmVhdGVfUkVTUBI8CgxSb29tTWluaUluZm8YASABKAsyJi5BeGlidWdQ",
"cm90b2J1Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIjcKElByb3RvYnVmX1Jv",
"b21fSm9pbhIOCgZSb29tSUQYASABKAUSEQoJUGxheWVyTnVtGAIgASgFIlcK",
"F1Byb3RvYnVmX1Jvb21fSm9pbl9SRVNQEjwKDFJvb21NaW5pSW5mbxgBIAEo",
"CzImLkF4aWJ1Z1Byb3RvYnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iJQoT",
"UHJvdG9idWZfUm9vbV9MZWF2ZRIOCgZSb29tSUQYASABKAUiKgoYUHJvdG9i",
"dWZfUm9vbV9MZWF2ZV9SRVNQEg4KBlJvb21JRBgBIAEoBSJhCiFQcm90b2J1",
"Zl9Sb29tX015Um9vbV9TdGF0ZV9DaGFuZ2USPAoMUm9vbU1pbmlJbmZvGAEg",
"ASgLMiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9vbV9NaW5pSW5mbyJF",
"ChtQcm90b2J1Zl9Sb29tX1dhaXRTdGVwX1JFU1ASEAoIV2FpdFN0ZXAYASAB",
"KAUSFAoMTG9hZFN0YXRlUmF3GAIgASgMIj8KJ1Byb3RvYnVmX1Jvb21fSG9z",
"dFBsYXllcl9VcGRhdGVTdGF0ZVJhdxIUCgxMb2FkU3RhdGVSYXcYASABKAwi",
"LgosUHJvdG9idWZfUm9vbV9Ib3N0UGxheWVyX1VwZGF0ZVN0YXRlUmF3X1JF",
"U1AiHAoaUHJvdG9idWZfUm9vbV9QbGF5ZXJfUmVhZHkqmgMKCUNvbW1hbmRJ",
"RBIOCgpDTURfREVGQVVMEAASDAoIQ01EX1BJTkcQARIMCghDTURfUE9ORxAC",
"Eg4KCUNNRF9MT0dJThDRDxIQCgtDTURfQ0hBVE1TRxChHxISCg1DTURfUm9v",
"bV9MaXN0EIknEhkKFENNRF9Sb29tX0xpc3RfVXBkYXRlEIonEhQKD0NNRF9S",
"b29tX0NyZWF0ZRDtJxISCg1DTURfUm9vbV9Kb2luEPEnEhMKDkNNRF9Sb29t",
"X0xlYXZlEPInEiIKHUNNRF9Sb29tX015Um9vbV9TdGF0ZV9DaGFuZ2VkEPYn",
"EhYKEUNNRF9Sb29tX1dhaXRTdGVwENEoEicKIkNNRF9Sb29tX0hvc3RQbGF5",
"ZXJfVXBkYXRlU3RhdGVSYXcQ1CgSGgoVQ01EX1Jvb21fUGxheWVyX1JlYWR5",
"ENgoEiAKG0NNRF9Sb29tX1NpbmdlbF9QbGF5ZXJJbnB1dBD6LhIdChhDTURf",
"Uk9PTV9TWU5fUGxheWVySW5wdXQQ/y4SDwoKQ01EX1NjcmVlbhDZNiqPAQoJ",
"RXJyb3JDb2RlEhAKDEVSUk9SX0RFRkFVTBAAEgwKCEVSUk9SX09LEAESGAoU",
"RVJST1JfUk9PTV9OT1RfRk9VTkQQChIlCiFFUlJPUl9ST09NX1NMT1RfUkVB",
"RExZX0hBRF9QTEFZRVIQCxIhCh1FUlJPUl9ST09NX0NBTlRfRE9fQ1VSUl9T",
"VEFURRAyKhwKCUxvZ2luVHlwZRIPCgtCYXNlRGVmYXVsdBAAKksKCkRldmlj",
"ZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZhdWx0EAASBgoCUEMQARILCgdBbmRy",
"b2lkEAISBwoDSU9TEAMSBwoDUFNWEAQqcAoNUm9vbUdhbWVTdGF0ZRISCg5O",
"b25lX0dhbWVTdGF0ZRAAEgwKCE9ubHlIb3N0EAESEQoNV2FpdFJhd1VwZGF0",
"ZRACEg0KCVdhaXRSZWFkeRADEgkKBVBhdXNlEAQSEAoMSW5PbmxpbmVHYW1l",
"EAUqTgoRTG9naW5SZXN1bHRTdGF0dXMSIQodTG9naW5SZXN1bHRTdGF0dXNf",
"QmFzZURlZmF1bHQQABIGCgJPSxABEg4KCkFjY291bnRFcnIQAkICSAFiBnBy",
"b3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] {
@ -99,7 +102,7 @@ namespace AxibugProtobuf {
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Login_RESP), global::AxibugProtobuf.Protobuf_Login_RESP.Parser, new[]{ "DeviceUUID", "Token", "LastLoginDate", "RegDate", "Status", "UID" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_List), global::AxibugProtobuf.Protobuf_Room_List.Parser, null, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_List_RESP), global::AxibugProtobuf.Protobuf_Room_List_RESP.Parser, new[]{ "RoomMiniInfoList" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_MiniInfo), global::AxibugProtobuf.Protobuf_Room_MiniInfo.Parser, new[]{ "RoomID", "GameRomID", "GameRomHash", "GameState", "HostPlayerUID", "ObsUserCount", "Player1UID", "Player1NickName", "Player2UID", "Player2NickName" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_MiniInfo), global::AxibugProtobuf.Protobuf_Room_MiniInfo.Parser, new[]{ "RoomID", "GameRomID", "GameRomHash", "HostPlayerUID", "GameState", "ObsUserCount", "Player1UID", "Player1NickName", "Player2UID", "Player2NickName", "Player3UID", "Player3NickName", "Player4UID", "Player4NickName", "ScreenProviderUID" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Update_RESP), global::AxibugProtobuf.Protobuf_Room_Update_RESP.Parser, new[]{ "UpdateType", "RoomMiniInfo" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Screnn_Frame), global::AxibugProtobuf.Protobuf_Screnn_Frame.Parser, new[]{ "RoomID", "FrameID", "RawBitmap" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData), global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData.Parser, new[]{ "FrameID", "InputData" }, null, null, null, null),
@ -201,7 +204,7 @@ namespace AxibugProtobuf {
/// </summary>
[pbr::OriginalName("CMD_Room_Singel_PlayerInput")] CmdRoomSingelPlayerInput = 6010,
/// <summary>
///单个玩家操作同步下行 对应 Protobuf_Room_Syn_RoomFrameAllInputData
///所有玩家操作同步下行 对应 Protobuf_Room_Syn_RoomFrameAllInputData
/// </summary>
[pbr::OriginalName("CMD_ROOM_SYN_PlayerInput")] CmdRoomSynPlayerInput = 6015,
/// <summary>
@ -2071,13 +2074,18 @@ namespace AxibugProtobuf {
roomID_ = other.roomID_;
gameRomID_ = other.gameRomID_;
gameRomHash_ = other.gameRomHash_;
gameState_ = other.gameState_;
hostPlayerUID_ = other.hostPlayerUID_;
gameState_ = other.gameState_;
obsUserCount_ = other.obsUserCount_;
player1UID_ = other.player1UID_;
player1NickName_ = other.player1NickName_;
player2UID_ = other.player2UID_;
player2NickName_ = other.player2NickName_;
player3UID_ = other.player3UID_;
player3NickName_ = other.player3NickName_;
player4UID_ = other.player4UID_;
player4NickName_ = other.player4NickName_;
screenProviderUID_ = other.screenProviderUID_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@ -2125,6 +2133,20 @@ namespace AxibugProtobuf {
}
}
/// <summary>Field number for the "HostPlayerUID" field.</summary>
public const int HostPlayerUIDFieldNumber = 4;
private long hostPlayerUID_;
/// <summary>
///主机玩家ID
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public long HostPlayerUID {
get { return hostPlayerUID_; }
set {
hostPlayerUID_ = value;
}
}
/// <summary>Field number for the "GameState" field.</summary>
public const int GameStateFieldNumber = 5;
private global::AxibugProtobuf.RoomGameState gameState_ = global::AxibugProtobuf.RoomGameState.NoneGameState;
@ -2139,22 +2161,8 @@ namespace AxibugProtobuf {
}
}
/// <summary>Field number for the "HostPlayerUID" field.</summary>
public const int HostPlayerUIDFieldNumber = 6;
private int hostPlayerUID_;
/// <summary>
///主机玩家ID
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int HostPlayerUID {
get { return hostPlayerUID_; }
set {
hostPlayerUID_ = value;
}
}
/// <summary>Field number for the "ObsUserCount" field.</summary>
public const int ObsUserCountFieldNumber = 7;
public const int ObsUserCountFieldNumber = 6;
private int obsUserCount_;
/// <summary>
///观战用户数量
@ -2168,7 +2176,7 @@ namespace AxibugProtobuf {
}
/// <summary>Field number for the "Player1_UID" field.</summary>
public const int Player1UIDFieldNumber = 8;
public const int Player1UIDFieldNumber = 7;
private long player1UID_;
/// <summary>
///玩家1 UID
@ -2182,7 +2190,7 @@ namespace AxibugProtobuf {
}
/// <summary>Field number for the "Player1_NickName" field.</summary>
public const int Player1NickNameFieldNumber = 9;
public const int Player1NickNameFieldNumber = 8;
private string player1NickName_ = "";
/// <summary>
///玩家1 昵称
@ -2196,7 +2204,7 @@ namespace AxibugProtobuf {
}
/// <summary>Field number for the "Player2_UID" field.</summary>
public const int Player2UIDFieldNumber = 10;
public const int Player2UIDFieldNumber = 9;
private long player2UID_;
/// <summary>
///玩家2 UID
@ -2210,7 +2218,7 @@ namespace AxibugProtobuf {
}
/// <summary>Field number for the "Player2_NickName" field.</summary>
public const int Player2NickNameFieldNumber = 11;
public const int Player2NickNameFieldNumber = 10;
private string player2NickName_ = "";
/// <summary>
///玩家2 昵称
@ -2223,6 +2231,76 @@ namespace AxibugProtobuf {
}
}
/// <summary>Field number for the "Player3_UID" field.</summary>
public const int Player3UIDFieldNumber = 11;
private long player3UID_;
/// <summary>
///玩家3 UID
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public long Player3UID {
get { return player3UID_; }
set {
player3UID_ = value;
}
}
/// <summary>Field number for the "Player3_NickName" field.</summary>
public const int Player3NickNameFieldNumber = 12;
private string player3NickName_ = "";
/// <summary>
///玩家3 昵称
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string Player3NickName {
get { return player3NickName_; }
set {
player3NickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "Player4_UID" field.</summary>
public const int Player4UIDFieldNumber = 13;
private long player4UID_;
/// <summary>
///玩家4 UID
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public long Player4UID {
get { return player4UID_; }
set {
player4UID_ = value;
}
}
/// <summary>Field number for the "Player4_NickName" field.</summary>
public const int Player4NickNameFieldNumber = 14;
private string player4NickName_ = "";
/// <summary>
///玩家4 昵称
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string Player4NickName {
get { return player4NickName_; }
set {
player4NickName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "ScreenProviderUID" field.</summary>
public const int ScreenProviderUIDFieldNumber = 15;
private long screenProviderUID_;
/// <summary>
///屏幕数据供应者
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public long ScreenProviderUID {
get { return screenProviderUID_; }
set {
screenProviderUID_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as Protobuf_Room_MiniInfo);
@ -2239,13 +2317,18 @@ namespace AxibugProtobuf {
if (RoomID != other.RoomID) return false;
if (GameRomID != other.GameRomID) return false;
if (GameRomHash != other.GameRomHash) return false;
if (GameState != other.GameState) return false;
if (HostPlayerUID != other.HostPlayerUID) return false;
if (GameState != other.GameState) return false;
if (ObsUserCount != other.ObsUserCount) return false;
if (Player1UID != other.Player1UID) return false;
if (Player1NickName != other.Player1NickName) return false;
if (Player2UID != other.Player2UID) return false;
if (Player2NickName != other.Player2NickName) return false;
if (Player3UID != other.Player3UID) return false;
if (Player3NickName != other.Player3NickName) return false;
if (Player4UID != other.Player4UID) return false;
if (Player4NickName != other.Player4NickName) return false;
if (ScreenProviderUID != other.ScreenProviderUID) return false;
return Equals(_unknownFields, other._unknownFields);
}
@ -2255,13 +2338,18 @@ namespace AxibugProtobuf {
if (RoomID != 0) hash ^= RoomID.GetHashCode();
if (GameRomID != 0) hash ^= GameRomID.GetHashCode();
if (GameRomHash.Length != 0) hash ^= GameRomHash.GetHashCode();
if (HostPlayerUID != 0L) hash ^= HostPlayerUID.GetHashCode();
if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) hash ^= GameState.GetHashCode();
if (HostPlayerUID != 0) hash ^= HostPlayerUID.GetHashCode();
if (ObsUserCount != 0) hash ^= ObsUserCount.GetHashCode();
if (Player1UID != 0L) hash ^= Player1UID.GetHashCode();
if (Player1NickName.Length != 0) hash ^= Player1NickName.GetHashCode();
if (Player2UID != 0L) hash ^= Player2UID.GetHashCode();
if (Player2NickName.Length != 0) hash ^= Player2NickName.GetHashCode();
if (Player3UID != 0L) hash ^= Player3UID.GetHashCode();
if (Player3NickName.Length != 0) hash ^= Player3NickName.GetHashCode();
if (Player4UID != 0L) hash ^= Player4UID.GetHashCode();
if (Player4NickName.Length != 0) hash ^= Player4NickName.GetHashCode();
if (ScreenProviderUID != 0L) hash ^= ScreenProviderUID.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@ -2290,34 +2378,54 @@ namespace AxibugProtobuf {
output.WriteRawTag(26);
output.WriteString(GameRomHash);
}
if (HostPlayerUID != 0L) {
output.WriteRawTag(32);
output.WriteInt64(HostPlayerUID);
}
if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) {
output.WriteRawTag(40);
output.WriteEnum((int) GameState);
}
if (HostPlayerUID != 0) {
output.WriteRawTag(48);
output.WriteInt32(HostPlayerUID);
}
if (ObsUserCount != 0) {
output.WriteRawTag(56);
output.WriteRawTag(48);
output.WriteInt32(ObsUserCount);
}
if (Player1UID != 0L) {
output.WriteRawTag(64);
output.WriteRawTag(56);
output.WriteInt64(Player1UID);
}
if (Player1NickName.Length != 0) {
output.WriteRawTag(74);
output.WriteRawTag(66);
output.WriteString(Player1NickName);
}
if (Player2UID != 0L) {
output.WriteRawTag(80);
output.WriteRawTag(72);
output.WriteInt64(Player2UID);
}
if (Player2NickName.Length != 0) {
output.WriteRawTag(90);
output.WriteRawTag(82);
output.WriteString(Player2NickName);
}
if (Player3UID != 0L) {
output.WriteRawTag(88);
output.WriteInt64(Player3UID);
}
if (Player3NickName.Length != 0) {
output.WriteRawTag(98);
output.WriteString(Player3NickName);
}
if (Player4UID != 0L) {
output.WriteRawTag(104);
output.WriteInt64(Player4UID);
}
if (Player4NickName.Length != 0) {
output.WriteRawTag(114);
output.WriteString(Player4NickName);
}
if (ScreenProviderUID != 0L) {
output.WriteRawTag(120);
output.WriteInt64(ScreenProviderUID);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@ -2339,34 +2447,54 @@ namespace AxibugProtobuf {
output.WriteRawTag(26);
output.WriteString(GameRomHash);
}
if (HostPlayerUID != 0L) {
output.WriteRawTag(32);
output.WriteInt64(HostPlayerUID);
}
if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) {
output.WriteRawTag(40);
output.WriteEnum((int) GameState);
}
if (HostPlayerUID != 0) {
output.WriteRawTag(48);
output.WriteInt32(HostPlayerUID);
}
if (ObsUserCount != 0) {
output.WriteRawTag(56);
output.WriteRawTag(48);
output.WriteInt32(ObsUserCount);
}
if (Player1UID != 0L) {
output.WriteRawTag(64);
output.WriteRawTag(56);
output.WriteInt64(Player1UID);
}
if (Player1NickName.Length != 0) {
output.WriteRawTag(74);
output.WriteRawTag(66);
output.WriteString(Player1NickName);
}
if (Player2UID != 0L) {
output.WriteRawTag(80);
output.WriteRawTag(72);
output.WriteInt64(Player2UID);
}
if (Player2NickName.Length != 0) {
output.WriteRawTag(90);
output.WriteRawTag(82);
output.WriteString(Player2NickName);
}
if (Player3UID != 0L) {
output.WriteRawTag(88);
output.WriteInt64(Player3UID);
}
if (Player3NickName.Length != 0) {
output.WriteRawTag(98);
output.WriteString(Player3NickName);
}
if (Player4UID != 0L) {
output.WriteRawTag(104);
output.WriteInt64(Player4UID);
}
if (Player4NickName.Length != 0) {
output.WriteRawTag(114);
output.WriteString(Player4NickName);
}
if (ScreenProviderUID != 0L) {
output.WriteRawTag(120);
output.WriteInt64(ScreenProviderUID);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
@ -2385,12 +2513,12 @@ namespace AxibugProtobuf {
if (GameRomHash.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(GameRomHash);
}
if (HostPlayerUID != 0L) {
size += 1 + pb::CodedOutputStream.ComputeInt64Size(HostPlayerUID);
}
if (GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) {
size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) GameState);
}
if (HostPlayerUID != 0) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(HostPlayerUID);
}
if (ObsUserCount != 0) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(ObsUserCount);
}
@ -2406,6 +2534,21 @@ namespace AxibugProtobuf {
if (Player2NickName.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Player2NickName);
}
if (Player3UID != 0L) {
size += 1 + pb::CodedOutputStream.ComputeInt64Size(Player3UID);
}
if (Player3NickName.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Player3NickName);
}
if (Player4UID != 0L) {
size += 1 + pb::CodedOutputStream.ComputeInt64Size(Player4UID);
}
if (Player4NickName.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Player4NickName);
}
if (ScreenProviderUID != 0L) {
size += 1 + pb::CodedOutputStream.ComputeInt64Size(ScreenProviderUID);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@ -2426,12 +2569,12 @@ namespace AxibugProtobuf {
if (other.GameRomHash.Length != 0) {
GameRomHash = other.GameRomHash;
}
if (other.HostPlayerUID != 0L) {
HostPlayerUID = other.HostPlayerUID;
}
if (other.GameState != global::AxibugProtobuf.RoomGameState.NoneGameState) {
GameState = other.GameState;
}
if (other.HostPlayerUID != 0) {
HostPlayerUID = other.HostPlayerUID;
}
if (other.ObsUserCount != 0) {
ObsUserCount = other.ObsUserCount;
}
@ -2447,6 +2590,21 @@ namespace AxibugProtobuf {
if (other.Player2NickName.Length != 0) {
Player2NickName = other.Player2NickName;
}
if (other.Player3UID != 0L) {
Player3UID = other.Player3UID;
}
if (other.Player3NickName.Length != 0) {
Player3NickName = other.Player3NickName;
}
if (other.Player4UID != 0L) {
Player4UID = other.Player4UID;
}
if (other.Player4NickName.Length != 0) {
Player4NickName = other.Player4NickName;
}
if (other.ScreenProviderUID != 0L) {
ScreenProviderUID = other.ScreenProviderUID;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@ -2473,34 +2631,54 @@ namespace AxibugProtobuf {
GameRomHash = input.ReadString();
break;
}
case 32: {
HostPlayerUID = input.ReadInt64();
break;
}
case 40: {
GameState = (global::AxibugProtobuf.RoomGameState) input.ReadEnum();
break;
}
case 48: {
HostPlayerUID = input.ReadInt32();
break;
}
case 56: {
ObsUserCount = input.ReadInt32();
break;
}
case 64: {
case 56: {
Player1UID = input.ReadInt64();
break;
}
case 74: {
case 66: {
Player1NickName = input.ReadString();
break;
}
case 80: {
case 72: {
Player2UID = input.ReadInt64();
break;
}
case 90: {
case 82: {
Player2NickName = input.ReadString();
break;
}
case 88: {
Player3UID = input.ReadInt64();
break;
}
case 98: {
Player3NickName = input.ReadString();
break;
}
case 104: {
Player4UID = input.ReadInt64();
break;
}
case 114: {
Player4NickName = input.ReadString();
break;
}
case 120: {
ScreenProviderUID = input.ReadInt64();
break;
}
}
}
#endif
@ -2527,34 +2705,54 @@ namespace AxibugProtobuf {
GameRomHash = input.ReadString();
break;
}
case 32: {
HostPlayerUID = input.ReadInt64();
break;
}
case 40: {
GameState = (global::AxibugProtobuf.RoomGameState) input.ReadEnum();
break;
}
case 48: {
HostPlayerUID = input.ReadInt32();
break;
}
case 56: {
ObsUserCount = input.ReadInt32();
break;
}
case 64: {
case 56: {
Player1UID = input.ReadInt64();
break;
}
case 74: {
case 66: {
Player1NickName = input.ReadString();
break;
}
case 80: {
case 72: {
Player2UID = input.ReadInt64();
break;
}
case 90: {
case 82: {
Player2NickName = input.ReadString();
break;
}
case 88: {
Player3UID = input.ReadInt64();
break;
}
case 98: {
Player3NickName = input.ReadString();
break;
}
case 104: {
Player4UID = input.ReadInt64();
break;
}
case 114: {
Player4NickName = input.ReadString();
break;
}
case 120: {
ScreenProviderUID = input.ReadInt64();
break;
}
}
}
}

View File

@ -23,7 +23,6 @@ namespace AxibugEmuOnline.Server
g_Log = new LogManager();
g_Login = new LoginManager();
g_Chat = new ChatManager();
//g_SocketMgr = new IOCPNetWork(1024, 1024);
g_SocketMgr = new IOCPNetWork(1024, 4096);
g_Room = new RoomManager();

View File

@ -1,6 +1,6 @@
using AxibugProtobuf;
using AxibugEmuOnline.Server.Common;
using AxibugEmuOnline.Server.Common;
using AxibugEmuOnline.Server.NetWork;
using AxibugProtobuf;
using System.Net.Sockets;
namespace AxibugEmuOnline.Server.Manager
@ -16,7 +16,7 @@ namespace AxibugEmuOnline.Server.Manager
{
AppSrv.g_Log.Debug("收到新的登录请求");
Protobuf_Login msg = ProtoBufHelper.DeSerizlize<Protobuf_Login>(reqData);
ClientInfo cinfo = AppSrv.g_ClientMgr.JoinNewClient(msg, _socket);
ClientInfo _c = AppSrv.g_ClientMgr.JoinNewClient(msg, _socket);
byte[] respData = ProtoBufHelper.Serizlize(new Protobuf_Login_RESP()
{
@ -24,8 +24,10 @@ namespace AxibugEmuOnline.Server.Manager
RegDate = "",
LastLoginDate = "",
Token = "",
UID = cinfo.UID
UID = _c.UID
});
AppSrv.g_ClientMgr.ClientSend(_c, (int)CommandID.CmdLogin, (int)ErrorCode.ErrorOk, respData);
}
}
}

View File

@ -1,4 +1,6 @@
namespace AxibugEmuOnline.Server
using AxibugEmuOnline.Server.Manager;
namespace AxibugEmuOnline.Server
{
internal class Program
{
@ -8,9 +10,28 @@
Console.ForegroundColor = ConsoleColor.Green;
Console.Title = Title;
AppSrv.InitServer(10492);
while (true)
while (true)
{
Console.ReadLine();
string CommandStr = Console.ReadLine();
string Command = "";
Command = ((CommandStr.IndexOf(" ") <= 0) ? CommandStr : CommandStr.Substring(0, CommandStr.IndexOf(" ")));
switch (Command)
{
case "list":
{
AppSrv.g_Log.Info("当前在线:" + AppSrv.g_ClientMgr.GetOnlineClient());
var onlinelist = AppSrv.g_ClientMgr.GetOnlineClientList();
for (int i = 0; i < onlinelist.Count; i++)
{
ClientInfo cinfo = onlinelist[i];
AppSrv.g_Log.Info($"UID->{cinfo.UID} Name->{cinfo.NickName} Ping->{cinfo.AveNetDelay}");
}
}
break;
default:
Console.WriteLine("未知命令" + CommandStr);
break;
}
}
}
}

View File

@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<History>True|2024-09-12T05:38:45.0141937Z||;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-09-12T09:48:43.1521740Z||;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 />
</PropertyGroup>
</Project>