public override void ProcessServer()
        {
            EconomyScript.Instance.ServerLogger.WriteVerbose("Player '{0}' connected", SenderDisplayName);

            if (ModCommunicationVersion != EconomyConsts.ModCommunicationVersion)
            {
                // TODO: respond to the potentional communication conflict.
                // Could Client be older than Server?
                // It's possible, if the Client has trouble downloading from Steam Community which can happen on occasion.
            }

            // Is Server version older than what Client is running, or Server version is newer than Client.
            MessageConnectionResponse.SendMessage(SenderSteamId,
                                                  ModCommunicationVersion <EconomyConsts.ModCommunicationVersion, ModCommunicationVersion> EconomyConsts.ModCommunicationVersion, EconomyScript.Instance.Config.TradeNetworkName);

            var account = EconomyScript.Instance.Data.Accounts.FirstOrDefault(
                a => a.SteamId == SenderSteamId);

            // Create the Bank Account when the player first joins.
            if (account == null)
            {
                EconomyScript.Instance.ServerLogger.WriteInfo("Creating new Bank Account for '{0}'", SenderDisplayName);
                account = AccountManager.CreateNewDefaultAccount(SenderSteamId, SenderDisplayName, SenderLanguage);
                EconomyScript.Instance.Data.Accounts.Add(account);
            }
            else
            {
                AccountManager.UpdateLastSeen(SenderSteamId, SenderDisplayName, SenderLanguage);
            }
        }
        public override void ProcessServer()
        {
            EconomyScript.Instance.ServerLogger.WriteVerbose("Player '{0}' connected", SenderDisplayName);

            IMyPlayer player = MyAPIGateway.Players.GetPlayer(SenderSteamId);

            if (player == null)
            {
                EconomyScript.Instance.ServerLogger.WriteVerbose($"Player '{SenderDisplayName}' {SenderSteamId} connected with invalid SteamId or before server has player information ready.");
                // If the Server isn't ready yet, the Client will send another Request automatically.
                // If the SteamId is invalid, we'll keep ignoring it anyhow.
                return;
            }

            uint userSecurity = player.UserSecurityLevel();

            if (ModCommunicationVersion != EconomyConsts.ModCommunicationVersion)
            {
                EconomyScript.Instance.ServerLogger.WriteVerbose($"Player '{SenderDisplayName}' {SenderSteamId} connected with invalid version {ModCommunicationVersion}. Should be {EconomyConsts.ModCommunicationVersion}.");

                // TODO: respond to the potentional communication conflict.
                // Could Client be older than Server?
                // It's possible, if the Client has trouble downloading from Steam Community which can happen on occasion.

                MessageConnectionResponse.SendMessage(SenderSteamId, ModCommunicationVersion, EconomyConsts.ModCommunicationVersion, userSecurity);
                return;
            }

            // Client connection is valid at this stage, so we can log it.
            EconomyScript.Instance.ServerLogger.WriteVerbose($"Player '{SenderDisplayName}' {SenderSteamId} connected. Version {ModCommunicationVersion}");

            var account = EconomyScript.Instance.Data.Clients.FirstOrDefault(
                a => a.SteamId == SenderSteamId);

            bool newAccount = false;

            // Create the Bank Account when the player first joins.
            if (account == null)
            {
                EconomyScript.Instance.ServerLogger.WriteInfo("Creating new Bank Account for '{0}'", SenderDisplayName);
                account = AccountManager.CreateNewDefaultAccount(SenderSteamId, SenderDisplayName, SenderLanguage);
                EconomyScript.Instance.Data.Clients.Add(account);
                EconomyScript.Instance.Data.CreditBalance -= account.BankBalance;
                newAccount = true;
            }
            else
            {
                AccountManager.UpdateLastSeen(SenderSteamId, SenderDisplayName, SenderLanguage);
            }


            // Is Server version older than what Client is running, or Server version is newer than Client.
            MessageConnectionResponse.SendMessage(SenderSteamId, ModCommunicationVersion, EconomyConsts.ModCommunicationVersion, userSecurity);

            ClientConfig clientConfig = new ClientConfig
            {
                ServerConfig      = EconomyScript.Instance.ServerConfig,
                BankBalance       = account.BankBalance,
                OpenedDate        = account.OpenedDate,
                NewAccount        = newAccount,
                ClientHudSettings = account.ClientHudSettings,
                Missions          = EconomyScript.Instance.Data.Missions.Where(m => m.PlayerId == SenderSteamId).ToList(),
                Markets           = EconomyScript.Instance.Data.Markets.Where(m => m.Open &&
                                                                              ((EconomyScript.Instance.ServerConfig.EnableNpcTradezones && m.MarketId == EconomyConsts.NpcMerchantId) ||
                                                                               (EconomyScript.Instance.ServerConfig.EnablePlayerTradezones && m.MarketId != EconomyConsts.NpcMerchantId))).ToList()
            };

            EconomyScript.Instance.ServerLogger.WriteInfo($"ClientConfig response: Opened:{clientConfig.OpenedDate}  Balance:{clientConfig.BankBalance}  Hud:{clientConfig.ClientHudSettings.ShowHud}  Missions:{clientConfig.Missions?.Count ?? -1}");

            MessageUpdateClient.SendClientConfig(SenderSteamId, clientConfig);
        }