master #59

Merged
sin365 merged 4 commits from Alienjack/AxibugEmuOnline:master into master 2024-12-04 14:28:14 +08:00
11 changed files with 404 additions and 209 deletions
Showing only changes of commit ace25f4a3f - Show all commits

View File

@ -15,6 +15,10 @@ namespace AxiReplay
/// </summary> /// </summary>
public int mRemoteFrameIdx { get; private set; } public int mRemoteFrameIdx { get; private set; }
/// <summary> /// <summary>
/// 服务器远端当前提前量
/// </summary>
public int mRemoteForwardCount { get; private set; }
/// <summary>
/// Remote 2 Client Frame Gap /// Remote 2 Client Frame Gap
/// </summary> /// </summary>
public int mDiffFrameCount => mRemoteFrameIdx - mCurrClientFrameIdx; public int mDiffFrameCount => mRemoteFrameIdx - mCurrClientFrameIdx;
@ -110,19 +114,27 @@ namespace AxiReplay
public int GetSkipFrameCount() public int GetSkipFrameCount()
{ {
var frameGap = mDiffFrameCount;
if (frameGap > 10000) return 0;
int skip = 0; int skip = 0;
//本地队列差异高于服务器提前量的值
if (frameGap <= 2) skip = 0; int moreNum = mDiffFrameCount - mRemoteForwardCount;
if (frameGap > 2 && frameGap < 6) skip = 1 + 1; if (mDiffFrameCount > short.MaxValue) skip = 0;
else if (frameGap > 7 && frameGap < 12) skip = 2 + 1; else if (moreNum <= 1) skip = 0;
else if (frameGap > 13 && frameGap < 20) skip = 3 + 1; else if (moreNum <= 3) skip = 2;
else skip = frameGap - 2; else if (moreNum <= 6) skip = 2;
else if (moreNum <= 20) skip = moreNum / 2; //20帧以内平滑跳帧数
else skip = moreNum;//完全追上
return skip; return skip;
//var frameGap = mDiffFrameCount;
//if (frameGap > 10000) return 0;
//if (frameGap <= 2) skip = 0;
//if (frameGap > 2 && frameGap < 6) skip = 1 + 1;
//else if (frameGap > 7 && frameGap < 12) skip = 2 + 1;
//else if (frameGap > 13 && frameGap < 20) skip = 3 + 1;
//else skip = frameGap - 2;
//return skip;
} }
} }
} }

View File

@ -25,6 +25,9 @@ namespace AxibugEmuOnline.Client
private void Start() private void Start()
{ {
//关闭垂直同步
QualitySettings.vSyncCount = 0;
//设为60帧
Application.targetFrameRate = 60; Application.targetFrameRate = 60;
VideoProvider.NesEmu = this; VideoProvider.NesEmu = this;
AudioProvider.NesEmu = this; AudioProvider.NesEmu = this;

View File

@ -66,60 +66,61 @@ namespace AxibugProtobuf {
"Zm8iSwoVUHJvdG9idWZfU2NyZW5uX0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIP", "Zm8iSwoVUHJvdG9idWZfU2NyZW5uX0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIP",
"CgdGcmFtZUlEGAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1", "CgdGcmFtZUlEGAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1",
"Zl9Sb29tX1NpbmdsZVBsYXllcklucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgN", "Zl9Sb29tX1NpbmdsZVBsYXllcklucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgN",
"EhEKCUlucHV0RGF0YRgCIAEoDSJkCidQcm90b2J1Zl9Sb29tX1N5bl9Sb29t", "EhEKCUlucHV0RGF0YRgCIAEoDSKAAQonUHJvdG9idWZfUm9vbV9TeW5fUm9v",
"RnJhbWVBbGxJbnB1dERhdGESDwoHRnJhbWVJRBgBIAEoDRIRCglJbnB1dERh", "bUZyYW1lQWxsSW5wdXREYXRhEg8KB0ZyYW1lSUQYASABKA0SEQoJSW5wdXRE",
"dGEYAiABKAQSFQoNU2VydmVyRnJhbWVJRBgDIAEoDSJVChRQcm90b2J1Zl9S", "YXRhGAIgASgEEhUKDVNlcnZlckZyYW1lSUQYAyABKA0SGgoSU2VydmVyRm9y",
"b29tX0NyZWF0ZRIRCglHYW1lUm9tSUQYASABKAUSEwoLR2FtZVJvbUhhc2gY", "d2FyZENvdW50GAQgASgNIlUKFFByb3RvYnVmX1Jvb21fQ3JlYXRlEhEKCUdh",
"AiABKAkSFQoNSm9pblBsYXllcklkeBgDIAEoBSJZChlQcm90b2J1Zl9Sb29t", "bWVSb21JRBgBIAEoBRITCgtHYW1lUm9tSGFzaBgCIAEoCRIVCg1Kb2luUGxh",
"X0NyZWF0ZV9SRVNQEjwKDFJvb21NaW5pSW5mbxgBIAEoCzImLkF4aWJ1Z1By", "eWVySWR4GAMgASgFIlkKGVByb3RvYnVmX1Jvb21fQ3JlYXRlX1JFU1ASPAoM",
"b3RvYnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iNwoSUHJvdG9idWZfUm9v", "Um9vbU1pbmlJbmZvGAEgASgLMiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZf",
"bV9Kb2luEg4KBlJvb21JRBgBIAEoBRIRCglQbGF5ZXJOdW0YAiABKAUiVwoX", "Um9vbV9NaW5pSW5mbyI3ChJQcm90b2J1Zl9Sb29tX0pvaW4SDgoGUm9vbUlE",
"UHJvdG9idWZfUm9vbV9Kb2luX1JFU1ASPAoMUm9vbU1pbmlJbmZvGAEgASgL", "GAEgASgFEhEKCVBsYXllck51bRgCIAEoBSJXChdQcm90b2J1Zl9Sb29tX0pv",
"MiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9vbV9NaW5pSW5mbyIlChNQ", "aW5fUkVTUBI8CgxSb29tTWluaUluZm8YASABKAsyJi5BeGlidWdQcm90b2J1",
"cm90b2J1Zl9Sb29tX0xlYXZlEg4KBlJvb21JRBgBIAEoBSIqChhQcm90b2J1", "Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIiUKE1Byb3RvYnVmX1Jvb21fTGVh",
"Zl9Sb29tX0xlYXZlX1JFU1ASDgoGUm9vbUlEGAEgASgFImEKIVByb3RvYnVm", "dmUSDgoGUm9vbUlEGAEgASgFIioKGFByb3RvYnVmX1Jvb21fTGVhdmVfUkVT",
"X1Jvb21fTXlSb29tX1N0YXRlX0NoYW5nZRI8CgxSb29tTWluaUluZm8YASAB", "UBIOCgZSb29tSUQYASABKAUiYQohUHJvdG9idWZfUm9vbV9NeVJvb21fU3Rh",
"KAsyJi5BeGlidWdQcm90b2J1Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIkUK", "dGVfQ2hhbmdlEjwKDFJvb21NaW5pSW5mbxgBIAEoCzImLkF4aWJ1Z1Byb3Rv",
"G1Byb3RvYnVmX1Jvb21fV2FpdFN0ZXBfUkVTUBIQCghXYWl0U3RlcBgBIAEo", "YnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iRQobUHJvdG9idWZfUm9vbV9X",
"BRIUCgxMb2FkU3RhdGVSYXcYAiABKAwiPwonUHJvdG9idWZfUm9vbV9Ib3N0", "YWl0U3RlcF9SRVNQEhAKCFdhaXRTdGVwGAEgASgFEhQKDExvYWRTdGF0ZVJh",
"UGxheWVyX1VwZGF0ZVN0YXRlUmF3EhQKDExvYWRTdGF0ZVJhdxgBIAEoDCIu", "dxgCIAEoDCI/CidQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBkYXRlU3Rh",
"CixQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBkYXRlU3RhdGVSYXdfUkVT", "dGVSYXcSFAoMTG9hZFN0YXRlUmF3GAEgASgMIi4KLFByb3RvYnVmX1Jvb21f",
"UCIcChpQcm90b2J1Zl9Sb29tX1BsYXllcl9SZWFkeSIqChhQcm90b2J1Zl9S", "SG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhd19SRVNQIhwKGlByb3RvYnVmX1Jv",
"b29tX0dldF9TY3JlZW4SDgoGUm9vbUlEGAEgASgFIlMKHVByb3RvYnVmX1Jv", "b21fUGxheWVyX1JlYWR5IioKGFByb3RvYnVmX1Jvb21fR2V0X1NjcmVlbhIO",
"b21fR2V0X1NjcmVlbl9SRVNQEg4KBlJvb21JRBgBIAEoBRIPCgdGcmFtZUlE", "CgZSb29tSUQYASABKAUiUwodUHJvdG9idWZfUm9vbV9HZXRfU2NyZWVuX1JF",
"GAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJmChJQcm90b2J1Zl9HYW1lX01h", "U1ASDgoGUm9vbUlEGAEgASgFEg8KB0ZyYW1lSUQYAiABKAUSEQoJUmF3Qml0",
"cmsSDQoFUm9tSUQYASABKAUSDQoFc3RhdGUYAiABKAUSMgoMUGxhdGZvcm1U", "bWFwGAMgASgMImYKElByb3RvYnVmX0dhbWVfTWFyaxINCgVSb21JRBgBIAEo",
"eXBlGAMgASgOMhwuQXhpYnVnUHJvdG9idWYuUGxhdGZvcm1UeXBlIlwKF1By", "BRINCgVzdGF0ZRgCIAEoBRIyCgxQbGF0Zm9ybVR5cGUYAyABKA4yHC5BeGli",
"b3RvYnVmX0dhbWVfTWFya19SRVNQEg0KBVJvbUlEGAEgASgFEjIKDFBsYXRm", "dWdQcm90b2J1Zi5QbGF0Zm9ybVR5cGUiXAoXUHJvdG9idWZfR2FtZV9NYXJr",
"b3JtVHlwZRgCIAEoDjIcLkF4aWJ1Z1Byb3RvYnVmLlBsYXRmb3JtVHlwZSr+", "X1JFU1ASDQoFUm9tSUQYASABKAUSMgoMUGxhdGZvcm1UeXBlGAIgASgOMhwu",
"BAoJQ29tbWFuZElEEg4KCkNNRF9ERUZBVUwQABIMCghDTURfUElORxABEgwK", "QXhpYnVnUHJvdG9idWYuUGxhdGZvcm1UeXBlKv4ECglDb21tYW5kSUQSDgoK",
"CENNRF9QT05HEAISDgoJQ01EX0xPR0lOENEPEhgKE0NNRF9VU0VSX09OTElO", "Q01EX0RFRkFVTBAAEgwKCENNRF9QSU5HEAESDAoIQ01EX1BPTkcQAhIOCglD",
"RUxJU1QQuBcSEgoNQ01EX1VTRVJfSk9JThDXFxITCg5DTURfVVNFUl9MRUFW", "TURfTE9HSU4Q0Q8SGAoTQ01EX1VTRVJfT05MSU5FTElTVBC4FxISCg1DTURf",
"RRDYFxIaChVDTURfVVNFUl9TVEFURV9VUERBVEUQ2RcSGAoTQ01EX01vZGlm", "VVNFUl9KT0lOENcXEhMKDkNNRF9VU0VSX0xFQVZFENgXEhoKFUNNRF9VU0VS",
"eV9OaWNrTmFtZRCdGBIcChdDTURfVXBkYXRlX1NlbGZVc2VySW5mbxCmGBId", "X1NUQVRFX1VQREFURRDZFxIYChNDTURfTW9kaWZ5X05pY2tOYW1lEJ0YEhwK",
"ChhDTURfVXBkYXRlX090aGVyVXNlckluZm8QqBgSEAoLQ01EX0NIQVRNU0cQ", "F0NNRF9VcGRhdGVfU2VsZlVzZXJJbmZvEKYYEh0KGENNRF9VcGRhdGVfT3Ro",
"oR8SEgoNQ01EX1Jvb21fTGlzdBCJJxIZChRDTURfUm9vbV9MaXN0X1VwZGF0", "ZXJVc2VySW5mbxCoGBIQCgtDTURfQ0hBVE1TRxChHxISCg1DTURfUm9vbV9M",
"ZRCKJxIYChNDTURfUm9vbV9HZXRfU2NyZWVuEJMnEhQKD0NNRF9Sb29tX0Ny", "aXN0EIknEhkKFENNRF9Sb29tX0xpc3RfVXBkYXRlEIonEhgKE0NNRF9Sb29t",
"ZWF0ZRDtJxISCg1DTURfUm9vbV9Kb2luEPEnEhMKDkNNRF9Sb29tX0xlYXZl", "X0dldF9TY3JlZW4QkycSFAoPQ01EX1Jvb21fQ3JlYXRlEO0nEhIKDUNNRF9S",
"EPInEiIKHUNNRF9Sb29tX015Um9vbV9TdGF0ZV9DaGFuZ2VkEPYnEhYKEUNN", "b29tX0pvaW4Q8ScSEwoOQ01EX1Jvb21fTGVhdmUQ8icSIgodQ01EX1Jvb21f",
"RF9Sb29tX1dhaXRTdGVwENEoEicKIkNNRF9Sb29tX0hvc3RQbGF5ZXJfVXBk", "TXlSb29tX1N0YXRlX0NoYW5nZWQQ9icSFgoRQ01EX1Jvb21fV2FpdFN0ZXAQ",
"YXRlU3RhdGVSYXcQ1CgSGgoVQ01EX1Jvb21fUGxheWVyX1JlYWR5ENgoEiAK", "0SgSJwoiQ01EX1Jvb21fSG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhdxDUKBIa",
"G0NNRF9Sb29tX1NpbmdlbF9QbGF5ZXJJbnB1dBD6LhIdChhDTURfUk9PTV9T", "ChVDTURfUm9vbV9QbGF5ZXJfUmVhZHkQ2CgSIAobQ01EX1Jvb21fU2luZ2Vs",
"WU5fUGxheWVySW5wdXQQ/y4SDwoKQ01EX1NjcmVlbhDZNhISCg1DTURfR0FN", "X1BsYXllcklucHV0EPouEh0KGENNRF9ST09NX1NZTl9QbGF5ZXJJbnB1dBD/",
"RV9NQVJLEPVOKtABCglFcnJvckNvZGUSEAoMRVJST1JfREVGQVVMEAASDAoI", "LhIPCgpDTURfU2NyZWVuENk2EhIKDUNNRF9HQU1FX01BUksQ9U4q0AEKCUVy",
"RVJST1JfT0sQARIYChRFUlJPUl9ST09NX05PVF9GT1VORBAKEicKI0VSUk9S", "cm9yQ29kZRIQCgxFUlJPUl9ERUZBVUwQABIMCghFUlJPUl9PSxABEhgKFEVS",
"X1JPT01fU0xPVF9BTFJFQURMWV9IQURfUExBWUVSEAsSIQodRVJST1JfUk9P", "Uk9SX1JPT01fTk9UX0ZPVU5EEAoSJwojRVJST1JfUk9PTV9TTE9UX0FMUkVB",
"TV9DQU5UX0RPX0NVUlJfU1RBVEUQMhIfChpFUlJPUl9ST01fQUxSRUFEWV9I", "RExZX0hBRF9QTEFZRVIQCxIhCh1FUlJPUl9ST09NX0NBTlRfRE9fQ1VSUl9T",
"QURfU1RBUhCTAxIcChdFUlJPUl9ST01fRE9OVF9IQURfU1RBUhCUAypACglM", "VEFURRAyEh8KGkVSUk9SX1JPTV9BTFJFQURZX0hBRF9TVEFSEJMDEhwKF0VS",
"b2dpblR5cGUSDQoJVXNlRGV2aWNlEAASDgoKVXNlQWNjb3VudBABEhQKEFVz", "Uk9SX1JPTV9ET05UX0hBRF9TVEFSEJQDKkAKCUxvZ2luVHlwZRINCglVc2VE",
"ZUhhb1l1ZUFjY291bnQQAipLCgpEZXZpY2VUeXBlEhYKEkRldmljZVR5cGVf", "ZXZpY2UQABIOCgpVc2VBY2NvdW50EAESFAoQVXNlSGFvWXVlQWNjb3VudBAC",
"RGVmYXVsdBAAEgYKAlBDEAESCwoHQW5kcm9pZBACEgcKA0lPUxADEgcKA1BT", "KksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZhdWx0EAASBgoCUEMQ",
"VhAEKiAKDFBsYXRmb3JtVHlwZRIHCgNBbGwQABIHCgNOZXMQASpwCg1Sb29t", "ARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoDUFNWEAQqIAoMUGxhdGZvcm1U",
"R2FtZVN0YXRlEhIKDk5vbmVfR2FtZVN0YXRlEAASDAoIT25seUhvc3QQARIR", "eXBlEgcKA0FsbBAAEgcKA05lcxABKnAKDVJvb21HYW1lU3RhdGUSEgoOTm9u",
"Cg1XYWl0UmF3VXBkYXRlEAISDQoJV2FpdFJlYWR5EAMSCQoFUGF1c2UQBBIQ", "ZV9HYW1lU3RhdGUQABIMCghPbmx5SG9zdBABEhEKDVdhaXRSYXdVcGRhdGUQ",
"CgxJbk9ubGluZUdhbWUQBSpOChFMb2dpblJlc3VsdFN0YXR1cxIhCh1Mb2dp", "AhINCglXYWl0UmVhZHkQAxIJCgVQYXVzZRAEEhAKDEluT25saW5lR2FtZRAF",
"blJlc3VsdFN0YXR1c19CYXNlRGVmYXVsdBAAEgYKAk9LEAESDgoKQWNjb3Vu", "Kk4KEUxvZ2luUmVzdWx0U3RhdHVzEiEKHUxvZ2luUmVzdWx0U3RhdHVzX0Jh",
"dEVychACQgJIAWIGcHJvdG8z")); "c2VEZWZhdWx0EAASBgoCT0sQARIOCgpBY2NvdW50RXJyEAJCAkgBYgZwcm90",
"bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { }, 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.PlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.PlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] {
@ -145,7 +146,7 @@ namespace AxibugProtobuf {
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_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_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), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData), global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData.Parser, new[]{ "FrameID", "InputData" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData), global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData.Parser, new[]{ "FrameID", "InputData", "ServerFrameID" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData), global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData.Parser, new[]{ "FrameID", "InputData", "ServerFrameID", "ServerForwardCount" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create), global::AxibugProtobuf.Protobuf_Room_Create.Parser, new[]{ "GameRomID", "GameRomHash", "JoinPlayerIdx" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create), global::AxibugProtobuf.Protobuf_Room_Create.Parser, new[]{ "GameRomID", "GameRomHash", "JoinPlayerIdx" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create_RESP), global::AxibugProtobuf.Protobuf_Room_Create_RESP.Parser, new[]{ "RoomMiniInfo" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create_RESP), global::AxibugProtobuf.Protobuf_Room_Create_RESP.Parser, new[]{ "RoomMiniInfo" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Join), global::AxibugProtobuf.Protobuf_Room_Join.Parser, new[]{ "RoomID", "PlayerNum" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Join), global::AxibugProtobuf.Protobuf_Room_Join.Parser, new[]{ "RoomID", "PlayerNum" }, null, null, null, null),
@ -5492,6 +5493,7 @@ namespace AxibugProtobuf {
frameID_ = other.frameID_; frameID_ = other.frameID_;
inputData_ = other.inputData_; inputData_ = other.inputData_;
serverFrameID_ = other.serverFrameID_; serverFrameID_ = other.serverFrameID_;
serverForwardCount_ = other.serverForwardCount_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
} }
@ -5542,6 +5544,20 @@ namespace AxibugProtobuf {
} }
} }
/// <summary>Field number for the "ServerForwardCount" field.</summary>
public const int ServerForwardCountFieldNumber = 4;
private uint serverForwardCount_;
/// <summary>
///服务器提前量
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public uint ServerForwardCount {
get { return serverForwardCount_; }
set {
serverForwardCount_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) { public override bool Equals(object other) {
return Equals(other as Protobuf_Room_Syn_RoomFrameAllInputData); return Equals(other as Protobuf_Room_Syn_RoomFrameAllInputData);
@ -5558,6 +5574,7 @@ namespace AxibugProtobuf {
if (FrameID != other.FrameID) return false; if (FrameID != other.FrameID) return false;
if (InputData != other.InputData) return false; if (InputData != other.InputData) return false;
if (ServerFrameID != other.ServerFrameID) return false; if (ServerFrameID != other.ServerFrameID) return false;
if (ServerForwardCount != other.ServerForwardCount) return false;
return Equals(_unknownFields, other._unknownFields); return Equals(_unknownFields, other._unknownFields);
} }
@ -5567,6 +5584,7 @@ namespace AxibugProtobuf {
if (FrameID != 0) hash ^= FrameID.GetHashCode(); if (FrameID != 0) hash ^= FrameID.GetHashCode();
if (InputData != 0UL) hash ^= InputData.GetHashCode(); if (InputData != 0UL) hash ^= InputData.GetHashCode();
if (ServerFrameID != 0) hash ^= ServerFrameID.GetHashCode(); if (ServerFrameID != 0) hash ^= ServerFrameID.GetHashCode();
if (ServerForwardCount != 0) hash ^= ServerForwardCount.GetHashCode();
if (_unknownFields != null) { if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode(); hash ^= _unknownFields.GetHashCode();
} }
@ -5595,6 +5613,10 @@ namespace AxibugProtobuf {
output.WriteRawTag(24); output.WriteRawTag(24);
output.WriteUInt32(ServerFrameID); output.WriteUInt32(ServerFrameID);
} }
if (ServerForwardCount != 0) {
output.WriteRawTag(32);
output.WriteUInt32(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(output); _unknownFields.WriteTo(output);
} }
@ -5616,6 +5638,10 @@ namespace AxibugProtobuf {
output.WriteRawTag(24); output.WriteRawTag(24);
output.WriteUInt32(ServerFrameID); output.WriteUInt32(ServerFrameID);
} }
if (ServerForwardCount != 0) {
output.WriteRawTag(32);
output.WriteUInt32(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(ref output); _unknownFields.WriteTo(ref output);
} }
@ -5634,6 +5660,9 @@ namespace AxibugProtobuf {
if (ServerFrameID != 0) { if (ServerFrameID != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerFrameID); size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerFrameID);
} }
if (ServerForwardCount != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
size += _unknownFields.CalculateSize(); size += _unknownFields.CalculateSize();
} }
@ -5654,6 +5683,9 @@ namespace AxibugProtobuf {
if (other.ServerFrameID != 0) { if (other.ServerFrameID != 0) {
ServerFrameID = other.ServerFrameID; ServerFrameID = other.ServerFrameID;
} }
if (other.ServerForwardCount != 0) {
ServerForwardCount = other.ServerForwardCount;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
} }
@ -5680,6 +5712,10 @@ namespace AxibugProtobuf {
ServerFrameID = input.ReadUInt32(); ServerFrameID = input.ReadUInt32();
break; break;
} }
case 32: {
ServerForwardCount = input.ReadUInt32();
break;
}
} }
} }
#endif #endif
@ -5706,6 +5742,10 @@ namespace AxibugProtobuf {
ServerFrameID = input.ReadUInt32(); ServerFrameID = input.ReadUInt32();
break; break;
} }
case 32: {
ServerForwardCount = input.ReadUInt32();
break;
}
} }
} }
} }

View File

@ -114,11 +114,19 @@ namespace AxibugEmuOnline.Server.Manager
public ClientInfo JoinNewClient(long _uid, Socket _socket) public ClientInfo JoinNewClient(long _uid, Socket _socket)
{ {
//也许这个函数需加lock //也许这个函数需加lock
ClientInfo cinfo = GetClientForSocket(_socket); //ClientInfo cinfo = GetClientForSocket(_socket);
GetClientByUID(_uid, out ClientInfo cinfo, false);
//如果连接还在 //如果连接还在
if (cinfo != null) if (cinfo != null)
{ {
cinfo.IsOffline = false; cinfo.IsOffline = false;
Socket oldsocket = cinfo._socket;
cinfo._socket = _socket;
if (_DictSocketClient.ContainsKey(oldsocket))
_DictSocketClient.Remove(oldsocket);
_DictSocketClient[_socket] = cinfo;
} }
else else
{ {

View File

@ -105,6 +105,8 @@ namespace AxibugEmuOnline.Server
} }
public void RoomLog(long uid, int platform, int RoomID, int RomID, RoomLogType state) public void RoomLog(long uid, int platform, int RoomID, int RomID, RoomLogType state)
{ {
return;
MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("RoomLog"); MySqlConnection conn = Haoyue_SQLPoolManager.DequeueSQLConn("RoomLog");
try try
{ {
@ -352,7 +354,7 @@ namespace AxibugEmuOnline.Server
else else
SendRoomUpdateToAll(room.RoomID, 0); SendRoomUpdateToAll(room.RoomID, 0);
RoomLog(_c.UID,1,room.RoomID,room.GameRomID,RoomLogType.Leave); RoomLog(_c.UID, 1, room.RoomID, room.GameRomID, RoomLogType.Leave);
} }
public void OnHostPlayerUpdateStateRaw(Socket sk, byte[] reqData) public void OnHostPlayerUpdateStateRaw(Socket sk, byte[] reqData)
@ -419,8 +421,8 @@ namespace AxibugEmuOnline.Server
if (i + 1 == forwaFrame)//最后一帧 if (i + 1 == forwaFrame)//最后一帧
{ {
//写入操作前、将网络波动堆积可能造成瞬时多个连续推帧结果最后一帧除外立即广播不等16msTick //写入操作前、将网络波动堆积可能造成瞬时多个连续推帧结果最后一帧除外立即广播不等16msTick
if (forwaFrame > 1) //if (forwaFrame > 1)
room.SynInputData(); // room.SynInputData();
//推帧过程中,最后一帧才写入操作 //推帧过程中,最后一帧才写入操作
room.SetPlayerInput(_c.RoomState.PlayerIdx, msg.FrameID, temp); room.SetPlayerInput(_c.RoomState.PlayerIdx, msg.FrameID, temp);
@ -592,7 +594,7 @@ namespace AxibugEmuOnline.Server
/// <summary> /// <summary>
/// 服务器提前帧数 /// 服务器提前帧数
/// </summary> /// </summary>
public int SrvForwardFrames { get; set; } public uint SrvForwardFrames { get; set; }
bool IsAllReady() bool IsAllReady()
@ -759,6 +761,18 @@ namespace AxibugEmuOnline.Server
mInputQueue.Clear(); mInputQueue.Clear();
mDictPlayerIdx2SendQueue.Clear(); mDictPlayerIdx2SendQueue.Clear();
mCurrServerFrameId = 0;
mCurrInputData.all = 1;
UpdateRoomForwardNum();
//服务器提前跑帧数
for (int i = 0; i < SrvForwardFrames; i++)
TakeFrame();
}
public void UpdateRoomForwardNum()
{
List<ClientInfo> playerlist = GetAllPlayerClientList(); List<ClientInfo> playerlist = GetAllPlayerClientList();
double maxNetDelay = 0; double maxNetDelay = 0;
for (int i = 0; i < playerlist.Count; i++) for (int i = 0; i < playerlist.Count; i++)
@ -766,53 +780,87 @@ namespace AxibugEmuOnline.Server
ClientInfo player = playerlist[i]; ClientInfo player = playerlist[i];
maxNetDelay = Math.Max(maxNetDelay, player.AveNetDelay); maxNetDelay = Math.Max(maxNetDelay, player.AveNetDelay);
} }
float MustTaskFrame = 1;
mCurrServerFrameId = 0; SrvForwardFrames = (uint)((maxNetDelay / 0.016f) + MustTaskFrame);
mCurrInputData.all = 1; if (SrvForwardFrames < 2)
SrvForwardFrames = 2;
float MustTaskFrame = 3; AppSrv.g_Log.Debug($"服务器提前跑帧数Max(2,({maxNetDelay} / {0.016f}) + {MustTaskFrame}) = {SrvForwardFrames}");
SrvForwardFrames = (int)((maxNetDelay / 0.016f) + MustTaskFrame);
AppSrv.g_Log.Debug($"服务器提前跑帧数:({maxNetDelay} / {0.016f}) + {MustTaskFrame} = {SrvForwardFrames}");
//服务器提前跑帧数
for (int i = 0; i < SrvForwardFrames; i++)
TakeFrame();
} }
public void TakeFrame() public void TakeFrame()
{ {
mInputQueue.Enqueue((mCurrServerFrameId, mCurrInputData)); lock (synInputLock)
mCurrServerFrameId++; {
mInputQueue.Enqueue((mCurrServerFrameId, mCurrInputData));
mCurrServerFrameId++;
if (mCurrServerFrameId % 60 == 0)
{
UpdateRoomForwardNum();
}
}
} }
ulong LastTestSend = 0; ulong LastTestSend = 0;
internal ulong LastTestRecv; internal ulong LastTestRecv;
public List<double> send2time = new List<double>();
const int SynLimitOnSec = 63;
/// <summary> /// <summary>
/// 广播数据 /// 广播数据
/// </summary> /// </summary>
public void SynInputData() public void SynInputData()
{ {
List<(uint frameId, ServerInputSnapShot inputdata)> temp = null;
bool flagInitList = false;
lock (synInputLock) lock (synInputLock)
{ {
double timeNow = AppSrv.g_Tick.timeNow;
while (mInputQueue.Count > 0) while (mInputQueue.Count > 0)
{ {
(uint frameId, ServerInputSnapShot inputdata) data = mInputQueue.Dequeue(); if (send2time.Count >= SynLimitOnSec)
Protobuf_Room_Syn_RoomFrameAllInputData resp = new Protobuf_Room_Syn_RoomFrameAllInputData()
{ {
FrameID = data.frameId, //AppSrv.g_Log.Info($"{timeNow} - {send2time[0]} =>{timeNow - send2time[0]}");
InputData = data.inputdata.all, if (timeNow - send2time[0] < 1f) //最早的历史发送还在一秒之内
ServerFrameID = mCurrServerFrameId break;
}; else
//if (LastTestSend != data.inputdata.all) send2time.RemoveAt(0);
//{ }
// LastTestSend = data.inputdata.all;
// AppSrv.g_Log.Debug($" {DateTime.Now.ToString("hh:mm:ss.fff")} SynInput=> RoomID->{RoomID} ServerFrameID->{mCurrServerFrameId} SynUIDs=>{string.Join(",", SynUIDs)} "); if (!flagInitList)
//} {
AppSrv.g_ClientMgr.ClientSend(SynUIDs, (int)CommandID.CmdRoomSynPlayerInput, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(resp)); flagInitList = true;
//AppSrv.g_Log.Debug($" {DateTime.Now.ToString("hh:mm:ss.fff")} SynInput=> RoomID->{RoomID} ServerFrameID->{mCurrServerFrameId} SynUIDs=>{string.Join(",", SynUIDs)} "); temp = new List<(uint frameId, ServerInputSnapShot inputdata)>();
}
temp.Add(mInputQueue.Dequeue());
send2time.Add(timeNow);
} }
//while (mInputQueue.Count > 0)
//{
// temp.Add(mInputQueue.Dequeue());
//}
}
if (!flagInitList)
return;
for (int i = 0; i < temp.Count; i++)
{
(uint frameId, ServerInputSnapShot inputdata) data = temp[i];
Protobuf_Room_Syn_RoomFrameAllInputData resp = new Protobuf_Room_Syn_RoomFrameAllInputData()
{
FrameID = data.frameId,
InputData = data.inputdata.all,
ServerFrameID = mCurrServerFrameId,
ServerForwardCount = this.SrvForwardFrames
};
AppSrv.g_ClientMgr.ClientSend(SynUIDs, (int)CommandID.CmdRoomSynPlayerInput, (int)ErrorCode.ErrorOk, ProtoBufHelper.Serizlize(resp));
//if (LastTestSend != data.inputdata.all)
//{
// LastTestSend = data.inputdata.all;
// AppSrv.g_Log.Debug($" {DateTime.Now.ToString("hh:mm:ss.fff")} SynInput=> RoomID->{RoomID} ServerFrameID->{mCurrServerFrameId} SynUIDs=>{string.Join(",", SynUIDs)} ");
//}
} }
} }

View File

@ -5,6 +5,7 @@ namespace AxibugEmuOnline.Server.Manager
public class TickManager public class TickManager
{ {
public Stopwatch sw; public Stopwatch sw;
public double timeNow => sw.Elapsed.TotalSeconds;
public enum TickType public enum TickType
{ {
Interval_16MS, Interval_16MS,

View File

@ -30,6 +30,8 @@ namespace AxibugEmuOnline.Server
AppSrv.g_Log.Info($"GameState:{room.GameState}"); AppSrv.g_Log.Info($"GameState:{room.GameState}");
AppSrv.g_Log.Info($"HostUID:{room.HostUID}"); AppSrv.g_Log.Info($"HostUID:{room.HostUID}");
AppSrv.g_Log.Info($"mCurrFrameId:{room.mCurrServerFrameId}"); AppSrv.g_Log.Info($"mCurrFrameId:{room.mCurrServerFrameId}");
AppSrv.g_Log.Info($"SrvForwardFrames:{room.SrvForwardFrames}");
AppSrv.g_Log.Info($"room.send2time.Count:{room.send2time.Count}");
AppSrv.g_Log.Info($"input all:{room.mCurrInputData.all}"); AppSrv.g_Log.Info($"input all:{room.mCurrInputData.all}");
AppSrv.g_Log.Info($"input p1:{room.mCurrInputData.p1_byte}"); AppSrv.g_Log.Info($"input p1:{room.mCurrInputData.p1_byte}");
AppSrv.g_Log.Info($"input p2:{room.mCurrInputData.p2_byte}"); AppSrv.g_Log.Info($"input p2:{room.mCurrInputData.p2_byte}");

View File

@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
--> -->
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<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> <History>True|2024-12-03T17:43:54.7646411Z||;True|2024-12-04T01:22:11.8117030+08:00||;True|2024-12-04T01:20:06.5770785+08:00||;True|2024-12-04T01:16:31.6391421+08:00||;True|2024-12-04T01:12:43.4697251+08:00||;True|2024-12-04T01:07:04.8333668+08:00||;True|2024-12-04T00:59:23.6611648+08:00||;True|2024-12-04T00:27:05.0229247+08:00||;True|2024-12-03T23:50:48.5712706+08:00||;True|2024-12-03T23:47:47.1095592+08:00||;True|2024-12-03T20:24:57.4098592+08:00||;True|2024-12-03T20:16:36.9886489+08:00||;True|2024-12-03T20:15:52.5482738+08:00||;True|2024-12-02T20:10:07.8192795+08:00||;True|2024-11-28T19:58:55.3995125+08:00||;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>

View File

@ -66,60 +66,61 @@ namespace AxibugProtobuf {
"Zm8iSwoVUHJvdG9idWZfU2NyZW5uX0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIP", "Zm8iSwoVUHJvdG9idWZfU2NyZW5uX0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIP",
"CgdGcmFtZUlEGAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1", "CgdGcmFtZUlEGAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1",
"Zl9Sb29tX1NpbmdsZVBsYXllcklucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgN", "Zl9Sb29tX1NpbmdsZVBsYXllcklucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgN",
"EhEKCUlucHV0RGF0YRgCIAEoDSJkCidQcm90b2J1Zl9Sb29tX1N5bl9Sb29t", "EhEKCUlucHV0RGF0YRgCIAEoDSKAAQonUHJvdG9idWZfUm9vbV9TeW5fUm9v",
"RnJhbWVBbGxJbnB1dERhdGESDwoHRnJhbWVJRBgBIAEoDRIRCglJbnB1dERh", "bUZyYW1lQWxsSW5wdXREYXRhEg8KB0ZyYW1lSUQYASABKA0SEQoJSW5wdXRE",
"dGEYAiABKAQSFQoNU2VydmVyRnJhbWVJRBgDIAEoDSJVChRQcm90b2J1Zl9S", "YXRhGAIgASgEEhUKDVNlcnZlckZyYW1lSUQYAyABKA0SGgoSU2VydmVyRm9y",
"b29tX0NyZWF0ZRIRCglHYW1lUm9tSUQYASABKAUSEwoLR2FtZVJvbUhhc2gY", "d2FyZENvdW50GAQgASgNIlUKFFByb3RvYnVmX1Jvb21fQ3JlYXRlEhEKCUdh",
"AiABKAkSFQoNSm9pblBsYXllcklkeBgDIAEoBSJZChlQcm90b2J1Zl9Sb29t", "bWVSb21JRBgBIAEoBRITCgtHYW1lUm9tSGFzaBgCIAEoCRIVCg1Kb2luUGxh",
"X0NyZWF0ZV9SRVNQEjwKDFJvb21NaW5pSW5mbxgBIAEoCzImLkF4aWJ1Z1By", "eWVySWR4GAMgASgFIlkKGVByb3RvYnVmX1Jvb21fQ3JlYXRlX1JFU1ASPAoM",
"b3RvYnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iNwoSUHJvdG9idWZfUm9v", "Um9vbU1pbmlJbmZvGAEgASgLMiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZf",
"bV9Kb2luEg4KBlJvb21JRBgBIAEoBRIRCglQbGF5ZXJOdW0YAiABKAUiVwoX", "Um9vbV9NaW5pSW5mbyI3ChJQcm90b2J1Zl9Sb29tX0pvaW4SDgoGUm9vbUlE",
"UHJvdG9idWZfUm9vbV9Kb2luX1JFU1ASPAoMUm9vbU1pbmlJbmZvGAEgASgL", "GAEgASgFEhEKCVBsYXllck51bRgCIAEoBSJXChdQcm90b2J1Zl9Sb29tX0pv",
"MiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9vbV9NaW5pSW5mbyIlChNQ", "aW5fUkVTUBI8CgxSb29tTWluaUluZm8YASABKAsyJi5BeGlidWdQcm90b2J1",
"cm90b2J1Zl9Sb29tX0xlYXZlEg4KBlJvb21JRBgBIAEoBSIqChhQcm90b2J1", "Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIiUKE1Byb3RvYnVmX1Jvb21fTGVh",
"Zl9Sb29tX0xlYXZlX1JFU1ASDgoGUm9vbUlEGAEgASgFImEKIVByb3RvYnVm", "dmUSDgoGUm9vbUlEGAEgASgFIioKGFByb3RvYnVmX1Jvb21fTGVhdmVfUkVT",
"X1Jvb21fTXlSb29tX1N0YXRlX0NoYW5nZRI8CgxSb29tTWluaUluZm8YASAB", "UBIOCgZSb29tSUQYASABKAUiYQohUHJvdG9idWZfUm9vbV9NeVJvb21fU3Rh",
"KAsyJi5BeGlidWdQcm90b2J1Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIkUK", "dGVfQ2hhbmdlEjwKDFJvb21NaW5pSW5mbxgBIAEoCzImLkF4aWJ1Z1Byb3Rv",
"G1Byb3RvYnVmX1Jvb21fV2FpdFN0ZXBfUkVTUBIQCghXYWl0U3RlcBgBIAEo", "YnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iRQobUHJvdG9idWZfUm9vbV9X",
"BRIUCgxMb2FkU3RhdGVSYXcYAiABKAwiPwonUHJvdG9idWZfUm9vbV9Ib3N0", "YWl0U3RlcF9SRVNQEhAKCFdhaXRTdGVwGAEgASgFEhQKDExvYWRTdGF0ZVJh",
"UGxheWVyX1VwZGF0ZVN0YXRlUmF3EhQKDExvYWRTdGF0ZVJhdxgBIAEoDCIu", "dxgCIAEoDCI/CidQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBkYXRlU3Rh",
"CixQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBkYXRlU3RhdGVSYXdfUkVT", "dGVSYXcSFAoMTG9hZFN0YXRlUmF3GAEgASgMIi4KLFByb3RvYnVmX1Jvb21f",
"UCIcChpQcm90b2J1Zl9Sb29tX1BsYXllcl9SZWFkeSIqChhQcm90b2J1Zl9S", "SG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhd19SRVNQIhwKGlByb3RvYnVmX1Jv",
"b29tX0dldF9TY3JlZW4SDgoGUm9vbUlEGAEgASgFIlMKHVByb3RvYnVmX1Jv", "b21fUGxheWVyX1JlYWR5IioKGFByb3RvYnVmX1Jvb21fR2V0X1NjcmVlbhIO",
"b21fR2V0X1NjcmVlbl9SRVNQEg4KBlJvb21JRBgBIAEoBRIPCgdGcmFtZUlE", "CgZSb29tSUQYASABKAUiUwodUHJvdG9idWZfUm9vbV9HZXRfU2NyZWVuX1JF",
"GAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJmChJQcm90b2J1Zl9HYW1lX01h", "U1ASDgoGUm9vbUlEGAEgASgFEg8KB0ZyYW1lSUQYAiABKAUSEQoJUmF3Qml0",
"cmsSDQoFUm9tSUQYASABKAUSDQoFc3RhdGUYAiABKAUSMgoMUGxhdGZvcm1U", "bWFwGAMgASgMImYKElByb3RvYnVmX0dhbWVfTWFyaxINCgVSb21JRBgBIAEo",
"eXBlGAMgASgOMhwuQXhpYnVnUHJvdG9idWYuUGxhdGZvcm1UeXBlIlwKF1By", "BRINCgVzdGF0ZRgCIAEoBRIyCgxQbGF0Zm9ybVR5cGUYAyABKA4yHC5BeGli",
"b3RvYnVmX0dhbWVfTWFya19SRVNQEg0KBVJvbUlEGAEgASgFEjIKDFBsYXRm", "dWdQcm90b2J1Zi5QbGF0Zm9ybVR5cGUiXAoXUHJvdG9idWZfR2FtZV9NYXJr",
"b3JtVHlwZRgCIAEoDjIcLkF4aWJ1Z1Byb3RvYnVmLlBsYXRmb3JtVHlwZSr+", "X1JFU1ASDQoFUm9tSUQYASABKAUSMgoMUGxhdGZvcm1UeXBlGAIgASgOMhwu",
"BAoJQ29tbWFuZElEEg4KCkNNRF9ERUZBVUwQABIMCghDTURfUElORxABEgwK", "QXhpYnVnUHJvdG9idWYuUGxhdGZvcm1UeXBlKv4ECglDb21tYW5kSUQSDgoK",
"CENNRF9QT05HEAISDgoJQ01EX0xPR0lOENEPEhgKE0NNRF9VU0VSX09OTElO", "Q01EX0RFRkFVTBAAEgwKCENNRF9QSU5HEAESDAoIQ01EX1BPTkcQAhIOCglD",
"RUxJU1QQuBcSEgoNQ01EX1VTRVJfSk9JThDXFxITCg5DTURfVVNFUl9MRUFW", "TURfTE9HSU4Q0Q8SGAoTQ01EX1VTRVJfT05MSU5FTElTVBC4FxISCg1DTURf",
"RRDYFxIaChVDTURfVVNFUl9TVEFURV9VUERBVEUQ2RcSGAoTQ01EX01vZGlm", "VVNFUl9KT0lOENcXEhMKDkNNRF9VU0VSX0xFQVZFENgXEhoKFUNNRF9VU0VS",
"eV9OaWNrTmFtZRCdGBIcChdDTURfVXBkYXRlX1NlbGZVc2VySW5mbxCmGBId", "X1NUQVRFX1VQREFURRDZFxIYChNDTURfTW9kaWZ5X05pY2tOYW1lEJ0YEhwK",
"ChhDTURfVXBkYXRlX090aGVyVXNlckluZm8QqBgSEAoLQ01EX0NIQVRNU0cQ", "F0NNRF9VcGRhdGVfU2VsZlVzZXJJbmZvEKYYEh0KGENNRF9VcGRhdGVfT3Ro",
"oR8SEgoNQ01EX1Jvb21fTGlzdBCJJxIZChRDTURfUm9vbV9MaXN0X1VwZGF0", "ZXJVc2VySW5mbxCoGBIQCgtDTURfQ0hBVE1TRxChHxISCg1DTURfUm9vbV9M",
"ZRCKJxIYChNDTURfUm9vbV9HZXRfU2NyZWVuEJMnEhQKD0NNRF9Sb29tX0Ny", "aXN0EIknEhkKFENNRF9Sb29tX0xpc3RfVXBkYXRlEIonEhgKE0NNRF9Sb29t",
"ZWF0ZRDtJxISCg1DTURfUm9vbV9Kb2luEPEnEhMKDkNNRF9Sb29tX0xlYXZl", "X0dldF9TY3JlZW4QkycSFAoPQ01EX1Jvb21fQ3JlYXRlEO0nEhIKDUNNRF9S",
"EPInEiIKHUNNRF9Sb29tX015Um9vbV9TdGF0ZV9DaGFuZ2VkEPYnEhYKEUNN", "b29tX0pvaW4Q8ScSEwoOQ01EX1Jvb21fTGVhdmUQ8icSIgodQ01EX1Jvb21f",
"RF9Sb29tX1dhaXRTdGVwENEoEicKIkNNRF9Sb29tX0hvc3RQbGF5ZXJfVXBk", "TXlSb29tX1N0YXRlX0NoYW5nZWQQ9icSFgoRQ01EX1Jvb21fV2FpdFN0ZXAQ",
"YXRlU3RhdGVSYXcQ1CgSGgoVQ01EX1Jvb21fUGxheWVyX1JlYWR5ENgoEiAK", "0SgSJwoiQ01EX1Jvb21fSG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhdxDUKBIa",
"G0NNRF9Sb29tX1NpbmdlbF9QbGF5ZXJJbnB1dBD6LhIdChhDTURfUk9PTV9T", "ChVDTURfUm9vbV9QbGF5ZXJfUmVhZHkQ2CgSIAobQ01EX1Jvb21fU2luZ2Vs",
"WU5fUGxheWVySW5wdXQQ/y4SDwoKQ01EX1NjcmVlbhDZNhISCg1DTURfR0FN", "X1BsYXllcklucHV0EPouEh0KGENNRF9ST09NX1NZTl9QbGF5ZXJJbnB1dBD/",
"RV9NQVJLEPVOKtABCglFcnJvckNvZGUSEAoMRVJST1JfREVGQVVMEAASDAoI", "LhIPCgpDTURfU2NyZWVuENk2EhIKDUNNRF9HQU1FX01BUksQ9U4q0AEKCUVy",
"RVJST1JfT0sQARIYChRFUlJPUl9ST09NX05PVF9GT1VORBAKEicKI0VSUk9S", "cm9yQ29kZRIQCgxFUlJPUl9ERUZBVUwQABIMCghFUlJPUl9PSxABEhgKFEVS",
"X1JPT01fU0xPVF9BTFJFQURMWV9IQURfUExBWUVSEAsSIQodRVJST1JfUk9P", "Uk9SX1JPT01fTk9UX0ZPVU5EEAoSJwojRVJST1JfUk9PTV9TTE9UX0FMUkVB",
"TV9DQU5UX0RPX0NVUlJfU1RBVEUQMhIfChpFUlJPUl9ST01fQUxSRUFEWV9I", "RExZX0hBRF9QTEFZRVIQCxIhCh1FUlJPUl9ST09NX0NBTlRfRE9fQ1VSUl9T",
"QURfU1RBUhCTAxIcChdFUlJPUl9ST01fRE9OVF9IQURfU1RBUhCUAypACglM", "VEFURRAyEh8KGkVSUk9SX1JPTV9BTFJFQURZX0hBRF9TVEFSEJMDEhwKF0VS",
"b2dpblR5cGUSDQoJVXNlRGV2aWNlEAASDgoKVXNlQWNjb3VudBABEhQKEFVz", "Uk9SX1JPTV9ET05UX0hBRF9TVEFSEJQDKkAKCUxvZ2luVHlwZRINCglVc2VE",
"ZUhhb1l1ZUFjY291bnQQAipLCgpEZXZpY2VUeXBlEhYKEkRldmljZVR5cGVf", "ZXZpY2UQABIOCgpVc2VBY2NvdW50EAESFAoQVXNlSGFvWXVlQWNjb3VudBAC",
"RGVmYXVsdBAAEgYKAlBDEAESCwoHQW5kcm9pZBACEgcKA0lPUxADEgcKA1BT", "KksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZhdWx0EAASBgoCUEMQ",
"VhAEKiAKDFBsYXRmb3JtVHlwZRIHCgNBbGwQABIHCgNOZXMQASpwCg1Sb29t", "ARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoDUFNWEAQqIAoMUGxhdGZvcm1U",
"R2FtZVN0YXRlEhIKDk5vbmVfR2FtZVN0YXRlEAASDAoIT25seUhvc3QQARIR", "eXBlEgcKA0FsbBAAEgcKA05lcxABKnAKDVJvb21HYW1lU3RhdGUSEgoOTm9u",
"Cg1XYWl0UmF3VXBkYXRlEAISDQoJV2FpdFJlYWR5EAMSCQoFUGF1c2UQBBIQ", "ZV9HYW1lU3RhdGUQABIMCghPbmx5SG9zdBABEhEKDVdhaXRSYXdVcGRhdGUQ",
"CgxJbk9ubGluZUdhbWUQBSpOChFMb2dpblJlc3VsdFN0YXR1cxIhCh1Mb2dp", "AhINCglXYWl0UmVhZHkQAxIJCgVQYXVzZRAEEhAKDEluT25saW5lR2FtZRAF",
"blJlc3VsdFN0YXR1c19CYXNlRGVmYXVsdBAAEgYKAk9LEAESDgoKQWNjb3Vu", "Kk4KEUxvZ2luUmVzdWx0U3RhdHVzEiEKHUxvZ2luUmVzdWx0U3RhdHVzX0Jh",
"dEVychACQgJIAWIGcHJvdG8z")); "c2VEZWZhdWx0EAASBgoCT0sQARIOCgpBY2NvdW50RXJyEAJCAkgBYgZwcm90",
"bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { }, 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.PlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.PlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] {
@ -145,7 +146,7 @@ namespace AxibugProtobuf {
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_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_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), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData), global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData.Parser, new[]{ "FrameID", "InputData" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData), global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData.Parser, new[]{ "FrameID", "InputData", "ServerFrameID" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData), global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData.Parser, new[]{ "FrameID", "InputData", "ServerFrameID", "ServerForwardCount" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create), global::AxibugProtobuf.Protobuf_Room_Create.Parser, new[]{ "GameRomID", "GameRomHash", "JoinPlayerIdx" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create), global::AxibugProtobuf.Protobuf_Room_Create.Parser, new[]{ "GameRomID", "GameRomHash", "JoinPlayerIdx" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create_RESP), global::AxibugProtobuf.Protobuf_Room_Create_RESP.Parser, new[]{ "RoomMiniInfo" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create_RESP), global::AxibugProtobuf.Protobuf_Room_Create_RESP.Parser, new[]{ "RoomMiniInfo" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Join), global::AxibugProtobuf.Protobuf_Room_Join.Parser, new[]{ "RoomID", "PlayerNum" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Join), global::AxibugProtobuf.Protobuf_Room_Join.Parser, new[]{ "RoomID", "PlayerNum" }, null, null, null, null),
@ -5492,6 +5493,7 @@ namespace AxibugProtobuf {
frameID_ = other.frameID_; frameID_ = other.frameID_;
inputData_ = other.inputData_; inputData_ = other.inputData_;
serverFrameID_ = other.serverFrameID_; serverFrameID_ = other.serverFrameID_;
serverForwardCount_ = other.serverForwardCount_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
} }
@ -5542,6 +5544,20 @@ namespace AxibugProtobuf {
} }
} }
/// <summary>Field number for the "ServerForwardCount" field.</summary>
public const int ServerForwardCountFieldNumber = 4;
private uint serverForwardCount_;
/// <summary>
///服务器提前量
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public uint ServerForwardCount {
get { return serverForwardCount_; }
set {
serverForwardCount_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) { public override bool Equals(object other) {
return Equals(other as Protobuf_Room_Syn_RoomFrameAllInputData); return Equals(other as Protobuf_Room_Syn_RoomFrameAllInputData);
@ -5558,6 +5574,7 @@ namespace AxibugProtobuf {
if (FrameID != other.FrameID) return false; if (FrameID != other.FrameID) return false;
if (InputData != other.InputData) return false; if (InputData != other.InputData) return false;
if (ServerFrameID != other.ServerFrameID) return false; if (ServerFrameID != other.ServerFrameID) return false;
if (ServerForwardCount != other.ServerForwardCount) return false;
return Equals(_unknownFields, other._unknownFields); return Equals(_unknownFields, other._unknownFields);
} }
@ -5567,6 +5584,7 @@ namespace AxibugProtobuf {
if (FrameID != 0) hash ^= FrameID.GetHashCode(); if (FrameID != 0) hash ^= FrameID.GetHashCode();
if (InputData != 0UL) hash ^= InputData.GetHashCode(); if (InputData != 0UL) hash ^= InputData.GetHashCode();
if (ServerFrameID != 0) hash ^= ServerFrameID.GetHashCode(); if (ServerFrameID != 0) hash ^= ServerFrameID.GetHashCode();
if (ServerForwardCount != 0) hash ^= ServerForwardCount.GetHashCode();
if (_unknownFields != null) { if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode(); hash ^= _unknownFields.GetHashCode();
} }
@ -5595,6 +5613,10 @@ namespace AxibugProtobuf {
output.WriteRawTag(24); output.WriteRawTag(24);
output.WriteUInt32(ServerFrameID); output.WriteUInt32(ServerFrameID);
} }
if (ServerForwardCount != 0) {
output.WriteRawTag(32);
output.WriteUInt32(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(output); _unknownFields.WriteTo(output);
} }
@ -5616,6 +5638,10 @@ namespace AxibugProtobuf {
output.WriteRawTag(24); output.WriteRawTag(24);
output.WriteUInt32(ServerFrameID); output.WriteUInt32(ServerFrameID);
} }
if (ServerForwardCount != 0) {
output.WriteRawTag(32);
output.WriteUInt32(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(ref output); _unknownFields.WriteTo(ref output);
} }
@ -5634,6 +5660,9 @@ namespace AxibugProtobuf {
if (ServerFrameID != 0) { if (ServerFrameID != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerFrameID); size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerFrameID);
} }
if (ServerForwardCount != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
size += _unknownFields.CalculateSize(); size += _unknownFields.CalculateSize();
} }
@ -5654,6 +5683,9 @@ namespace AxibugProtobuf {
if (other.ServerFrameID != 0) { if (other.ServerFrameID != 0) {
ServerFrameID = other.ServerFrameID; ServerFrameID = other.ServerFrameID;
} }
if (other.ServerForwardCount != 0) {
ServerForwardCount = other.ServerForwardCount;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
} }
@ -5680,6 +5712,10 @@ namespace AxibugProtobuf {
ServerFrameID = input.ReadUInt32(); ServerFrameID = input.ReadUInt32();
break; break;
} }
case 32: {
ServerForwardCount = input.ReadUInt32();
break;
}
} }
} }
#endif #endif
@ -5706,6 +5742,10 @@ namespace AxibugProtobuf {
ServerFrameID = input.ReadUInt32(); ServerFrameID = input.ReadUInt32();
break; break;
} }
case 32: {
ServerForwardCount = input.ReadUInt32();
break;
}
} }
} }
} }

View File

@ -66,60 +66,61 @@ namespace AxibugProtobuf {
"Zm8iSwoVUHJvdG9idWZfU2NyZW5uX0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIP", "Zm8iSwoVUHJvdG9idWZfU2NyZW5uX0ZyYW1lEg4KBlJvb21JRBgBIAEoBRIP",
"CgdGcmFtZUlEGAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1", "CgdGcmFtZUlEGAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJJCiNQcm90b2J1",
"Zl9Sb29tX1NpbmdsZVBsYXllcklucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgN", "Zl9Sb29tX1NpbmdsZVBsYXllcklucHV0RGF0YRIPCgdGcmFtZUlEGAEgASgN",
"EhEKCUlucHV0RGF0YRgCIAEoDSJkCidQcm90b2J1Zl9Sb29tX1N5bl9Sb29t", "EhEKCUlucHV0RGF0YRgCIAEoDSKAAQonUHJvdG9idWZfUm9vbV9TeW5fUm9v",
"RnJhbWVBbGxJbnB1dERhdGESDwoHRnJhbWVJRBgBIAEoDRIRCglJbnB1dERh", "bUZyYW1lQWxsSW5wdXREYXRhEg8KB0ZyYW1lSUQYASABKA0SEQoJSW5wdXRE",
"dGEYAiABKAQSFQoNU2VydmVyRnJhbWVJRBgDIAEoDSJVChRQcm90b2J1Zl9S", "YXRhGAIgASgEEhUKDVNlcnZlckZyYW1lSUQYAyABKA0SGgoSU2VydmVyRm9y",
"b29tX0NyZWF0ZRIRCglHYW1lUm9tSUQYASABKAUSEwoLR2FtZVJvbUhhc2gY", "d2FyZENvdW50GAQgASgNIlUKFFByb3RvYnVmX1Jvb21fQ3JlYXRlEhEKCUdh",
"AiABKAkSFQoNSm9pblBsYXllcklkeBgDIAEoBSJZChlQcm90b2J1Zl9Sb29t", "bWVSb21JRBgBIAEoBRITCgtHYW1lUm9tSGFzaBgCIAEoCRIVCg1Kb2luUGxh",
"X0NyZWF0ZV9SRVNQEjwKDFJvb21NaW5pSW5mbxgBIAEoCzImLkF4aWJ1Z1By", "eWVySWR4GAMgASgFIlkKGVByb3RvYnVmX1Jvb21fQ3JlYXRlX1JFU1ASPAoM",
"b3RvYnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iNwoSUHJvdG9idWZfUm9v", "Um9vbU1pbmlJbmZvGAEgASgLMiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZf",
"bV9Kb2luEg4KBlJvb21JRBgBIAEoBRIRCglQbGF5ZXJOdW0YAiABKAUiVwoX", "Um9vbV9NaW5pSW5mbyI3ChJQcm90b2J1Zl9Sb29tX0pvaW4SDgoGUm9vbUlE",
"UHJvdG9idWZfUm9vbV9Kb2luX1JFU1ASPAoMUm9vbU1pbmlJbmZvGAEgASgL", "GAEgASgFEhEKCVBsYXllck51bRgCIAEoBSJXChdQcm90b2J1Zl9Sb29tX0pv",
"MiYuQXhpYnVnUHJvdG9idWYuUHJvdG9idWZfUm9vbV9NaW5pSW5mbyIlChNQ", "aW5fUkVTUBI8CgxSb29tTWluaUluZm8YASABKAsyJi5BeGlidWdQcm90b2J1",
"cm90b2J1Zl9Sb29tX0xlYXZlEg4KBlJvb21JRBgBIAEoBSIqChhQcm90b2J1", "Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIiUKE1Byb3RvYnVmX1Jvb21fTGVh",
"Zl9Sb29tX0xlYXZlX1JFU1ASDgoGUm9vbUlEGAEgASgFImEKIVByb3RvYnVm", "dmUSDgoGUm9vbUlEGAEgASgFIioKGFByb3RvYnVmX1Jvb21fTGVhdmVfUkVT",
"X1Jvb21fTXlSb29tX1N0YXRlX0NoYW5nZRI8CgxSb29tTWluaUluZm8YASAB", "UBIOCgZSb29tSUQYASABKAUiYQohUHJvdG9idWZfUm9vbV9NeVJvb21fU3Rh",
"KAsyJi5BeGlidWdQcm90b2J1Zi5Qcm90b2J1Zl9Sb29tX01pbmlJbmZvIkUK", "dGVfQ2hhbmdlEjwKDFJvb21NaW5pSW5mbxgBIAEoCzImLkF4aWJ1Z1Byb3Rv",
"G1Byb3RvYnVmX1Jvb21fV2FpdFN0ZXBfUkVTUBIQCghXYWl0U3RlcBgBIAEo", "YnVmLlByb3RvYnVmX1Jvb21fTWluaUluZm8iRQobUHJvdG9idWZfUm9vbV9X",
"BRIUCgxMb2FkU3RhdGVSYXcYAiABKAwiPwonUHJvdG9idWZfUm9vbV9Ib3N0", "YWl0U3RlcF9SRVNQEhAKCFdhaXRTdGVwGAEgASgFEhQKDExvYWRTdGF0ZVJh",
"UGxheWVyX1VwZGF0ZVN0YXRlUmF3EhQKDExvYWRTdGF0ZVJhdxgBIAEoDCIu", "dxgCIAEoDCI/CidQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBkYXRlU3Rh",
"CixQcm90b2J1Zl9Sb29tX0hvc3RQbGF5ZXJfVXBkYXRlU3RhdGVSYXdfUkVT", "dGVSYXcSFAoMTG9hZFN0YXRlUmF3GAEgASgMIi4KLFByb3RvYnVmX1Jvb21f",
"UCIcChpQcm90b2J1Zl9Sb29tX1BsYXllcl9SZWFkeSIqChhQcm90b2J1Zl9S", "SG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhd19SRVNQIhwKGlByb3RvYnVmX1Jv",
"b29tX0dldF9TY3JlZW4SDgoGUm9vbUlEGAEgASgFIlMKHVByb3RvYnVmX1Jv", "b21fUGxheWVyX1JlYWR5IioKGFByb3RvYnVmX1Jvb21fR2V0X1NjcmVlbhIO",
"b21fR2V0X1NjcmVlbl9SRVNQEg4KBlJvb21JRBgBIAEoBRIPCgdGcmFtZUlE", "CgZSb29tSUQYASABKAUiUwodUHJvdG9idWZfUm9vbV9HZXRfU2NyZWVuX1JF",
"GAIgASgFEhEKCVJhd0JpdG1hcBgDIAEoDCJmChJQcm90b2J1Zl9HYW1lX01h", "U1ASDgoGUm9vbUlEGAEgASgFEg8KB0ZyYW1lSUQYAiABKAUSEQoJUmF3Qml0",
"cmsSDQoFUm9tSUQYASABKAUSDQoFc3RhdGUYAiABKAUSMgoMUGxhdGZvcm1U", "bWFwGAMgASgMImYKElByb3RvYnVmX0dhbWVfTWFyaxINCgVSb21JRBgBIAEo",
"eXBlGAMgASgOMhwuQXhpYnVnUHJvdG9idWYuUGxhdGZvcm1UeXBlIlwKF1By", "BRINCgVzdGF0ZRgCIAEoBRIyCgxQbGF0Zm9ybVR5cGUYAyABKA4yHC5BeGli",
"b3RvYnVmX0dhbWVfTWFya19SRVNQEg0KBVJvbUlEGAEgASgFEjIKDFBsYXRm", "dWdQcm90b2J1Zi5QbGF0Zm9ybVR5cGUiXAoXUHJvdG9idWZfR2FtZV9NYXJr",
"b3JtVHlwZRgCIAEoDjIcLkF4aWJ1Z1Byb3RvYnVmLlBsYXRmb3JtVHlwZSr+", "X1JFU1ASDQoFUm9tSUQYASABKAUSMgoMUGxhdGZvcm1UeXBlGAIgASgOMhwu",
"BAoJQ29tbWFuZElEEg4KCkNNRF9ERUZBVUwQABIMCghDTURfUElORxABEgwK", "QXhpYnVnUHJvdG9idWYuUGxhdGZvcm1UeXBlKv4ECglDb21tYW5kSUQSDgoK",
"CENNRF9QT05HEAISDgoJQ01EX0xPR0lOENEPEhgKE0NNRF9VU0VSX09OTElO", "Q01EX0RFRkFVTBAAEgwKCENNRF9QSU5HEAESDAoIQ01EX1BPTkcQAhIOCglD",
"RUxJU1QQuBcSEgoNQ01EX1VTRVJfSk9JThDXFxITCg5DTURfVVNFUl9MRUFW", "TURfTE9HSU4Q0Q8SGAoTQ01EX1VTRVJfT05MSU5FTElTVBC4FxISCg1DTURf",
"RRDYFxIaChVDTURfVVNFUl9TVEFURV9VUERBVEUQ2RcSGAoTQ01EX01vZGlm", "VVNFUl9KT0lOENcXEhMKDkNNRF9VU0VSX0xFQVZFENgXEhoKFUNNRF9VU0VS",
"eV9OaWNrTmFtZRCdGBIcChdDTURfVXBkYXRlX1NlbGZVc2VySW5mbxCmGBId", "X1NUQVRFX1VQREFURRDZFxIYChNDTURfTW9kaWZ5X05pY2tOYW1lEJ0YEhwK",
"ChhDTURfVXBkYXRlX090aGVyVXNlckluZm8QqBgSEAoLQ01EX0NIQVRNU0cQ", "F0NNRF9VcGRhdGVfU2VsZlVzZXJJbmZvEKYYEh0KGENNRF9VcGRhdGVfT3Ro",
"oR8SEgoNQ01EX1Jvb21fTGlzdBCJJxIZChRDTURfUm9vbV9MaXN0X1VwZGF0", "ZXJVc2VySW5mbxCoGBIQCgtDTURfQ0hBVE1TRxChHxISCg1DTURfUm9vbV9M",
"ZRCKJxIYChNDTURfUm9vbV9HZXRfU2NyZWVuEJMnEhQKD0NNRF9Sb29tX0Ny", "aXN0EIknEhkKFENNRF9Sb29tX0xpc3RfVXBkYXRlEIonEhgKE0NNRF9Sb29t",
"ZWF0ZRDtJxISCg1DTURfUm9vbV9Kb2luEPEnEhMKDkNNRF9Sb29tX0xlYXZl", "X0dldF9TY3JlZW4QkycSFAoPQ01EX1Jvb21fQ3JlYXRlEO0nEhIKDUNNRF9S",
"EPInEiIKHUNNRF9Sb29tX015Um9vbV9TdGF0ZV9DaGFuZ2VkEPYnEhYKEUNN", "b29tX0pvaW4Q8ScSEwoOQ01EX1Jvb21fTGVhdmUQ8icSIgodQ01EX1Jvb21f",
"RF9Sb29tX1dhaXRTdGVwENEoEicKIkNNRF9Sb29tX0hvc3RQbGF5ZXJfVXBk", "TXlSb29tX1N0YXRlX0NoYW5nZWQQ9icSFgoRQ01EX1Jvb21fV2FpdFN0ZXAQ",
"YXRlU3RhdGVSYXcQ1CgSGgoVQ01EX1Jvb21fUGxheWVyX1JlYWR5ENgoEiAK", "0SgSJwoiQ01EX1Jvb21fSG9zdFBsYXllcl9VcGRhdGVTdGF0ZVJhdxDUKBIa",
"G0NNRF9Sb29tX1NpbmdlbF9QbGF5ZXJJbnB1dBD6LhIdChhDTURfUk9PTV9T", "ChVDTURfUm9vbV9QbGF5ZXJfUmVhZHkQ2CgSIAobQ01EX1Jvb21fU2luZ2Vs",
"WU5fUGxheWVySW5wdXQQ/y4SDwoKQ01EX1NjcmVlbhDZNhISCg1DTURfR0FN", "X1BsYXllcklucHV0EPouEh0KGENNRF9ST09NX1NZTl9QbGF5ZXJJbnB1dBD/",
"RV9NQVJLEPVOKtABCglFcnJvckNvZGUSEAoMRVJST1JfREVGQVVMEAASDAoI", "LhIPCgpDTURfU2NyZWVuENk2EhIKDUNNRF9HQU1FX01BUksQ9U4q0AEKCUVy",
"RVJST1JfT0sQARIYChRFUlJPUl9ST09NX05PVF9GT1VORBAKEicKI0VSUk9S", "cm9yQ29kZRIQCgxFUlJPUl9ERUZBVUwQABIMCghFUlJPUl9PSxABEhgKFEVS",
"X1JPT01fU0xPVF9BTFJFQURMWV9IQURfUExBWUVSEAsSIQodRVJST1JfUk9P", "Uk9SX1JPT01fTk9UX0ZPVU5EEAoSJwojRVJST1JfUk9PTV9TTE9UX0FMUkVB",
"TV9DQU5UX0RPX0NVUlJfU1RBVEUQMhIfChpFUlJPUl9ST01fQUxSRUFEWV9I", "RExZX0hBRF9QTEFZRVIQCxIhCh1FUlJPUl9ST09NX0NBTlRfRE9fQ1VSUl9T",
"QURfU1RBUhCTAxIcChdFUlJPUl9ST01fRE9OVF9IQURfU1RBUhCUAypACglM", "VEFURRAyEh8KGkVSUk9SX1JPTV9BTFJFQURZX0hBRF9TVEFSEJMDEhwKF0VS",
"b2dpblR5cGUSDQoJVXNlRGV2aWNlEAASDgoKVXNlQWNjb3VudBABEhQKEFVz", "Uk9SX1JPTV9ET05UX0hBRF9TVEFSEJQDKkAKCUxvZ2luVHlwZRINCglVc2VE",
"ZUhhb1l1ZUFjY291bnQQAipLCgpEZXZpY2VUeXBlEhYKEkRldmljZVR5cGVf", "ZXZpY2UQABIOCgpVc2VBY2NvdW50EAESFAoQVXNlSGFvWXVlQWNjb3VudBAC",
"RGVmYXVsdBAAEgYKAlBDEAESCwoHQW5kcm9pZBACEgcKA0lPUxADEgcKA1BT", "KksKCkRldmljZVR5cGUSFgoSRGV2aWNlVHlwZV9EZWZhdWx0EAASBgoCUEMQ",
"VhAEKiAKDFBsYXRmb3JtVHlwZRIHCgNBbGwQABIHCgNOZXMQASpwCg1Sb29t", "ARILCgdBbmRyb2lkEAISBwoDSU9TEAMSBwoDUFNWEAQqIAoMUGxhdGZvcm1U",
"R2FtZVN0YXRlEhIKDk5vbmVfR2FtZVN0YXRlEAASDAoIT25seUhvc3QQARIR", "eXBlEgcKA0FsbBAAEgcKA05lcxABKnAKDVJvb21HYW1lU3RhdGUSEgoOTm9u",
"Cg1XYWl0UmF3VXBkYXRlEAISDQoJV2FpdFJlYWR5EAMSCQoFUGF1c2UQBBIQ", "ZV9HYW1lU3RhdGUQABIMCghPbmx5SG9zdBABEhEKDVdhaXRSYXdVcGRhdGUQ",
"CgxJbk9ubGluZUdhbWUQBSpOChFMb2dpblJlc3VsdFN0YXR1cxIhCh1Mb2dp", "AhINCglXYWl0UmVhZHkQAxIJCgVQYXVzZRAEEhAKDEluT25saW5lR2FtZRAF",
"blJlc3VsdFN0YXR1c19CYXNlRGVmYXVsdBAAEgYKAk9LEAESDgoKQWNjb3Vu", "Kk4KEUxvZ2luUmVzdWx0U3RhdHVzEiEKHUxvZ2luUmVzdWx0U3RhdHVzX0Jh",
"dEVychACQgJIAWIGcHJvdG8z")); "c2VEZWZhdWx0EAASBgoCT0sQARIOCgpBY2NvdW50RXJyEAJCAkgBYgZwcm90",
"bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { }, 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.PlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(new[] {typeof(global::AxibugProtobuf.CommandID), typeof(global::AxibugProtobuf.ErrorCode), typeof(global::AxibugProtobuf.LoginType), typeof(global::AxibugProtobuf.DeviceType), typeof(global::AxibugProtobuf.PlatformType), typeof(global::AxibugProtobuf.RoomGameState), typeof(global::AxibugProtobuf.LoginResultStatus), }, null, new pbr::GeneratedClrTypeInfo[] {
@ -145,7 +146,7 @@ namespace AxibugProtobuf {
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_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_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), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData), global::AxibugProtobuf.Protobuf_Room_SinglePlayerInputData.Parser, new[]{ "FrameID", "InputData" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData), global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData.Parser, new[]{ "FrameID", "InputData", "ServerFrameID" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData), global::AxibugProtobuf.Protobuf_Room_Syn_RoomFrameAllInputData.Parser, new[]{ "FrameID", "InputData", "ServerFrameID", "ServerForwardCount" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create), global::AxibugProtobuf.Protobuf_Room_Create.Parser, new[]{ "GameRomID", "GameRomHash", "JoinPlayerIdx" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create), global::AxibugProtobuf.Protobuf_Room_Create.Parser, new[]{ "GameRomID", "GameRomHash", "JoinPlayerIdx" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create_RESP), global::AxibugProtobuf.Protobuf_Room_Create_RESP.Parser, new[]{ "RoomMiniInfo" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Create_RESP), global::AxibugProtobuf.Protobuf_Room_Create_RESP.Parser, new[]{ "RoomMiniInfo" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Join), global::AxibugProtobuf.Protobuf_Room_Join.Parser, new[]{ "RoomID", "PlayerNum" }, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::AxibugProtobuf.Protobuf_Room_Join), global::AxibugProtobuf.Protobuf_Room_Join.Parser, new[]{ "RoomID", "PlayerNum" }, null, null, null, null),
@ -5492,6 +5493,7 @@ namespace AxibugProtobuf {
frameID_ = other.frameID_; frameID_ = other.frameID_;
inputData_ = other.inputData_; inputData_ = other.inputData_;
serverFrameID_ = other.serverFrameID_; serverFrameID_ = other.serverFrameID_;
serverForwardCount_ = other.serverForwardCount_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
} }
@ -5542,6 +5544,20 @@ namespace AxibugProtobuf {
} }
} }
/// <summary>Field number for the "ServerForwardCount" field.</summary>
public const int ServerForwardCountFieldNumber = 4;
private uint serverForwardCount_;
/// <summary>
///服务器提前量
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public uint ServerForwardCount {
get { return serverForwardCount_; }
set {
serverForwardCount_ = value;
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute] [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) { public override bool Equals(object other) {
return Equals(other as Protobuf_Room_Syn_RoomFrameAllInputData); return Equals(other as Protobuf_Room_Syn_RoomFrameAllInputData);
@ -5558,6 +5574,7 @@ namespace AxibugProtobuf {
if (FrameID != other.FrameID) return false; if (FrameID != other.FrameID) return false;
if (InputData != other.InputData) return false; if (InputData != other.InputData) return false;
if (ServerFrameID != other.ServerFrameID) return false; if (ServerFrameID != other.ServerFrameID) return false;
if (ServerForwardCount != other.ServerForwardCount) return false;
return Equals(_unknownFields, other._unknownFields); return Equals(_unknownFields, other._unknownFields);
} }
@ -5567,6 +5584,7 @@ namespace AxibugProtobuf {
if (FrameID != 0) hash ^= FrameID.GetHashCode(); if (FrameID != 0) hash ^= FrameID.GetHashCode();
if (InputData != 0UL) hash ^= InputData.GetHashCode(); if (InputData != 0UL) hash ^= InputData.GetHashCode();
if (ServerFrameID != 0) hash ^= ServerFrameID.GetHashCode(); if (ServerFrameID != 0) hash ^= ServerFrameID.GetHashCode();
if (ServerForwardCount != 0) hash ^= ServerForwardCount.GetHashCode();
if (_unknownFields != null) { if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode(); hash ^= _unknownFields.GetHashCode();
} }
@ -5595,6 +5613,10 @@ namespace AxibugProtobuf {
output.WriteRawTag(24); output.WriteRawTag(24);
output.WriteUInt32(ServerFrameID); output.WriteUInt32(ServerFrameID);
} }
if (ServerForwardCount != 0) {
output.WriteRawTag(32);
output.WriteUInt32(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(output); _unknownFields.WriteTo(output);
} }
@ -5616,6 +5638,10 @@ namespace AxibugProtobuf {
output.WriteRawTag(24); output.WriteRawTag(24);
output.WriteUInt32(ServerFrameID); output.WriteUInt32(ServerFrameID);
} }
if (ServerForwardCount != 0) {
output.WriteRawTag(32);
output.WriteUInt32(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
_unknownFields.WriteTo(ref output); _unknownFields.WriteTo(ref output);
} }
@ -5634,6 +5660,9 @@ namespace AxibugProtobuf {
if (ServerFrameID != 0) { if (ServerFrameID != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerFrameID); size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerFrameID);
} }
if (ServerForwardCount != 0) {
size += 1 + pb::CodedOutputStream.ComputeUInt32Size(ServerForwardCount);
}
if (_unknownFields != null) { if (_unknownFields != null) {
size += _unknownFields.CalculateSize(); size += _unknownFields.CalculateSize();
} }
@ -5654,6 +5683,9 @@ namespace AxibugProtobuf {
if (other.ServerFrameID != 0) { if (other.ServerFrameID != 0) {
ServerFrameID = other.ServerFrameID; ServerFrameID = other.ServerFrameID;
} }
if (other.ServerForwardCount != 0) {
ServerForwardCount = other.ServerForwardCount;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
} }
@ -5680,6 +5712,10 @@ namespace AxibugProtobuf {
ServerFrameID = input.ReadUInt32(); ServerFrameID = input.ReadUInt32();
break; break;
} }
case 32: {
ServerForwardCount = input.ReadUInt32();
break;
}
} }
} }
#endif #endif
@ -5706,6 +5742,10 @@ namespace AxibugProtobuf {
ServerFrameID = input.ReadUInt32(); ServerFrameID = input.ReadUInt32();
break; break;
} }
case 32: {
ServerForwardCount = input.ReadUInt32();
break;
}
} }
} }
} }

View File

@ -292,6 +292,7 @@ message Protobuf_Room_Syn_RoomFrameAllInputData
uint32 FrameID = 1;// uint32 FrameID = 1;//
uint64 InputData = 2;// uint64 InputData = 2;//
uint32 ServerFrameID = 3;// uint32 ServerFrameID = 3;//
uint32 ServerForwardCount = 4;//
} }
message Protobuf_Room_Create message Protobuf_Room_Create