Example #1
0
 public void Update(GameTime gameTime)
 {
     if (RemainingCountdownTime > TimeSpan.Zero)
     {
         RemainingCountdownTime -= gameTime.ElapsedGameTime;
     }
     ProcessMessages();
     _interpolator.Apply(gameTime);
     TickCountdown(gameTime);
     GameInstance.Tick(gameTime);
     if (MessageProcessor.MessageQueue.Count > 0 &&
         NetworkClient.ConnectionStatus == Lidgren.Network.NetConnectionStatus.Connected)
     {
         var msg = NetworkClient.CreateMessage();
         MessageProcessor.WriteMessages(msg);
         NetworkClient.SendMessage(msg, Lidgren.Network.NetDeliveryMethod.ReliableOrdered);
     }
     MessageProcessor.ClearQueue();
     NetworkClient.FlushSendQueue();
 }
Example #2
0
        public void Connect()
        {
            if (_hasConnected == true)
            {
                return;
            }
            _hasConnected = true;
            if (!string.IsNullOrWhiteSpace(Host) && Port != 0)
            {
                //Do a deferred web request to get a token
                Logger.Trace("Doing web request for auth token");
                Task.Run(async() =>
                {
                    Status       = ClientStatus.Authenticating;
                    Message      = "Authenticating with ZSB servers...";
                    string token = "OFFLINE";
                    try
                    {
                        if (!GlobalSettings.Instance.NoLoginMode)
                        {
                            token = await ZSB.DrmClient.Multiplayer.GetServerTokenAsync();
                        }
                    }
                    //Catch issues that force us offline
                    catch (UnableToAccessAccountServerException)
                    { } //Offline mode
                    catch (AccountServerException)
                    { if (GlobalSettings.Trace)
                      {
                          throw;
                      }
                    }
                    catch (InvalidAccountServerResponseException)
                    { if (GlobalSettings.Trace)
                      {
                          throw;
                      }
                    }
                    //Get the username and UID
                    _playerName = GlobalSettings.Instance.NoLoginMode ? GenerateOfflineUsername() : ZSB.DrmClient.User.Username;
                    _playerId   = GlobalSettings.Instance.NoLoginMode ? Guid.NewGuid() : ZSB.DrmClient.User.UniqueId;

                    //And send connection message

                    Status = ClientStatus.Connecting;

                    Logger.Info($"Connecting to {Host}:{Port} (DRM Status: (" + (ZSB.DrmClient.Offline ? "Offline" : "Online") + ")");
                    Logger.Info($"Client version {StaticSettings.VersionMajor}.{StaticSettings.VersionMinor}");
                    Logger.Info($"Name: {_playerName}.");

                    Message = $"Connecting to {Host}:{Port} in " + (ZSB.DrmClient.Offline ? "Offline" : "Online") + " mode...";

                    var msg = NetworkClient.CreateMessage();
                    msg.Write(_playerId.ToByteArray());
                    msg.Write(_playerName);
                    msg.Write(token);
                    msg.Write(Password ?? ""); //Write an empty password just in case
                    msg.Write(StaticSettings.VersionMajor);
                    msg.Write(StaticSettings.VersionMinor);
                    NetworkClient.Start();
                    NetworkClient.Connect(Host, Port, msg);
                    Logger.Trace("Connection message sent");
                });
            }
        }