Exemple #1
0
 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());
         });
     });
 }
Exemple #2
0
        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());
            }
        }