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(); }
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"); }); } }