1
1
using Gazillion ;
2
2
using Google . ProtocolBuffers ;
3
3
using MHServerEmu . Auth ;
4
+ using MHServerEmu . Common ;
4
5
using MHServerEmu . Common . Config ;
5
6
using MHServerEmu . Common . Logging ;
6
7
using MHServerEmu . Frontend ;
@@ -115,6 +116,13 @@ public void BroadcastMessage(GameMessage message)
115
116
116
117
public void Handle ( FrontendClient client , ushort muxId , GameMessage message )
117
118
{
119
+ // Timestamp sync messages
120
+ if ( message . Id == ( byte ) ClientToGameServerMessage . NetMessageSyncTimeRequest || message . Id == ( byte ) ClientToGameServerMessage . NetMessagePing )
121
+ {
122
+ message . GameTimeReceived = Clock . GetGameTime ( ) ;
123
+ message . DateTimeReceived = Clock . GetDateTime ( ) ;
124
+ }
125
+
118
126
switch ( ( ClientToGameServerMessage ) message . Id )
119
127
{
120
128
// Self-handled messages
@@ -136,12 +144,12 @@ public void Handle(FrontendClient client, ushort muxId, GameMessage message)
136
144
137
145
case ClientToGameServerMessage . NetMessageSyncTimeRequest :
138
146
if ( message . TryDeserialize < NetMessageSyncTimeRequest > ( out var syncTimeRequest ) )
139
- OnSyncTimeRequest ( client , syncTimeRequest ) ;
147
+ OnSyncTimeRequest ( client , syncTimeRequest , message . GameTimeReceived , message . DateTimeReceived ) ;
140
148
break ;
141
149
142
150
case ClientToGameServerMessage . NetMessagePing :
143
151
if ( message . TryDeserialize < NetMessagePing > ( out var ping ) )
144
- OnPing ( client , ping ) ;
152
+ OnPing ( client , ping , message . GameTimeReceived ) ;
145
153
break ;
146
154
147
155
case ClientToGameServerMessage . NetMessageFPS :
@@ -257,39 +265,44 @@ private void OnReadyForGameJoin(FrontendClient client, NetMessageReadyForGameJoi
257
265
258
266
// Sync time
259
267
client . SendMessage ( MuxChannel , new ( NetMessageInitialTimeSync . CreateBuilder ( )
260
- . SetGameTimeServerSent ( 161351679299542 ) // dumped - Gazillion time?
261
- . SetDateTimeServerSent ( 1509657957345525 ) // dumped - unix time stamp in microseconds
268
+ . SetGameTimeServerSent ( Clock . GetGameTime ( ) . Ticks / 10 )
269
+ . SetDateTimeServerSent ( Clock . GetDateTime ( ) . Ticks / 10 )
262
270
. Build ( ) ) ) ;
263
271
}
264
272
265
- private void OnSyncTimeRequest ( FrontendClient client , NetMessageSyncTimeRequest syncTimeRequest )
273
+ private void OnSyncTimeRequest ( FrontendClient client , NetMessageSyncTimeRequest syncTimeRequest , TimeSpan gameTimeReceived , TimeSpan dateTimeReceived )
266
274
{
267
- // NOTE: this is old experimental code
268
- /*
269
- Logger.Info($"Received NetMessageSyncTimeRequest:");
270
- Logger.Trace(syncTimeRequest.ToString());
275
+ //Logger.Debug($"NetMessageSyncTimeRequest:");
276
+ //Logger.Debug(syncTimeRequest.ToString());
271
277
272
- Logger.Info("Sending NetMessageSyncTimeReply");
273
- client.SendMessage(1, new(NetMessageSyncTimeReply.CreateBuilder()
278
+ client . SendMessage ( MuxChannel , new ( NetMessageSyncTimeReply . CreateBuilder ( )
274
279
. SetGameTimeClientSent ( syncTimeRequest . GameTimeClientSent )
275
- .SetGameTimeServerReceived(_serverManager.GetGameTime())
276
- .SetGameTimeServerSent(_serverManager.GetGameTime())
277
-
280
+ . SetGameTimeServerReceived ( gameTimeReceived . Ticks / 10 )
281
+ . SetGameTimeServerSent ( Clock . GetGameTime ( ) . Ticks / 10 )
278
282
. SetDateTimeClientSent ( syncTimeRequest . DateTimeClientSent )
279
- .SetDateTimeServerReceived(_serverManager.GetDateTime())
280
- .SetDateTimeServerSent(_serverManager.GetDateTime())
281
-
283
+ . SetDateTimeServerReceived ( dateTimeReceived . Ticks / 10 )
284
+ . SetDateTimeServerSent ( Clock . GetDateTime ( ) . Ticks / 10 )
282
285
. SetDialation ( 1.0f )
283
286
. SetGametimeDialationStarted ( 0 )
284
287
. SetDatetimeDialationStarted ( 0 )
285
288
. Build ( ) ) ) ;
286
- */
287
289
}
288
290
289
- private void OnPing ( FrontendClient client , NetMessagePing ping )
291
+ private void OnPing ( FrontendClient client , NetMessagePing ping , TimeSpan gameTimeReceived )
290
292
{
291
- //Logger.Info($"Received ping:");
292
- //Logger.Trace(ping.ToString());
293
+ //Logger.Debug($"NetMessagePing:");
294
+ //Logger.Debug(ping.ToString());
295
+
296
+ client . SendMessage ( MuxChannel , new ( NetMessagePingResponse . CreateBuilder ( )
297
+ . SetDisplayOutput ( ping . DisplayOutput )
298
+ . SetRequestSentClientTime ( ping . SendClientTime )
299
+ . SetRequestSentGameTime ( ping . SendGameTime )
300
+ . SetRequestNetReceivedGameTime ( ( ulong ) gameTimeReceived . TotalMilliseconds )
301
+ . SetResponseSendTime ( ( ulong ) Clock . GetGameTime ( ) . TotalMilliseconds )
302
+ . SetServerTickforecast ( 0 )
303
+ . SetGameservername ( "BOPR-MHVGIS2" )
304
+ . SetFrontendname ( "bopr-mhfes2" )
305
+ . Build ( ) ) ) ;
293
306
}
294
307
295
308
private void OnFps ( FrontendClient client , NetMessageFPS fps )
0 commit comments