public void OnActivate(MatchStateMachine matchStateMachine) { matchStateMachine.NetworkTimeService.Synch(matchStateMachine.UDPClient, () => { matchStateMachine.AckedMessageHelper.SendAckedMessage(new TimeSyncDoneMessage(), MessageId.TIME_SYNC_DONE_ACK, ackMessage => { DIContainer.Logger.Debug("Time synch done, switching to WaitForStartMatchState"); TimeSyncDoneAckMessage receivedMessage = new TimeSyncDoneAckMessage(ackMessage); matchStateMachine.LocalPlayerId = receivedMessage.PlayerId; matchStateMachine.StartRoundTripTimeService(); matchStateMachine.ChangeMatchState(new WaitForStartMatchState()); }); }); }
public void OnFixedUpdateTick() { if (receivedMatchStartTimestamp == 0) { return; } // send three times to increase chance of delivery, if not deliver with three tries network is too bad to play anyway. if (ackMessagesSent < 3) { matchStateMachine.UDPClient.SendMessage(ackMessageToSend); ackMessagesSent++; } // match starts if (this.matchStateMachine.NetworkTimeService.NetworkTimestampMs >= receivedMatchStartTimestamp) { DIContainer.Logger.Debug("Match start wait time is over. Switching to RunningMatchState"); matchStateMachine.ChangeMatchState(new RunningMatchState()); } }