private void LoginSuccess(LoginSuccessMessage message) { LoginProtect.TimeStop(); System.Windows.Application.Current.Dispatcher.BeginInvoke( new Action( delegate { App.Current.MainWindow.Hide(); MainWindow.ni.BalloonTipTitle = "ClassAssistance"; MainWindow.ni.BalloonTipText = "已将ClassAssistance最小化到托盘,程序将在后台运行"; MainWindow.ni.BalloonTipIcon = ToolTipIcon.Info; MainWindow.ni.ShowBalloonTip(30000); MainWindow.startTime = DateTime.Now.Ticks; MainWindow.price = message.Price; } ) ); }
private async Task HandleLoginRequest(IClient client, Message message, CancellationToken cancellationToken) { var lrMessage = (LoginRequestMessage)message; var level = (Level)null; const string ERROR_ACC_RESOLVE = "Problem resolving account. Clear application data and try again."; const string MARKET_URL = "market://details?id=com.supercell.clashofclans"; const int MAJ_VER = 8; const int MIN_VER = 709; // If the configuration says we're in maintenance we // tell the client the server is maintenance. if (_maintenance) { var lfMessage = new LoginFailedMessage { Reason = LoginFailureReason.Maintenance, }; client.SendMessage(lfMessage); return; } // Make sure the client is running on the version we want it to run. if (lrMessage.MajorVersion != MAJ_VER || lrMessage.MinorVersion != MIN_VER) { var lfMessage = new LoginFailedMessage { Reason = LoginFailureReason.OutdatedVersion, }; client.SendMessage(lfMessage); } // If the client master-hash is not the same as the server master-hash, // we ask the client to download the new assets. else if (lrMessage.MasterHash != Server.Assets.Fingerprint.MasterHash) { var lfMessage = new LoginFailedMessage { Reason = LoginFailureReason.OutdatedContent, FingerprintJson = Server.Assets.Fingerprint.ToJson(), MarketUrl = MARKET_URL, ContentUrl = Server.Configuration.ContentUrl, }; client.SendMessage(lfMessage); } else { try { // Determine if the client is requesting a new Level // to be associated with it. if (lrMessage.UserId == 0) { // If somehow a client had a client ID of 0 but had a non null user token. if (lrMessage.UserToken != null) { var lfMessage = new LoginFailedMessage { Message = ERROR_ACC_RESOLVE }; client.SendMessage(lfMessage); return; } // Otherwise the client had a client ID of 0 and a null user token. // Meaning its a requesting a new account. else { level = await Server.Levels.NewLevelAsync(cancellationToken); } } else { // If somehow a client had a user ID but not a user token. if (lrMessage.UserToken == null) { var lfMessage = new LoginFailedMessage { Message = ERROR_ACC_RESOLVE }; client.SendMessage(lfMessage); return; } else { level = await Server.Levels.GetLevelAsync(lrMessage.UserId, cancellationToken); // If there is no level in the db with the same user id as specified, we create // a level with the same user id and token as specified. if (level == null) { level = await Server.Levels.NewLevelAsync(lrMessage.UserId, lrMessage.UserToken, cancellationToken); } if (level.Token != lrMessage.UserToken) { var lfMessage = new LoginFailedMessage { Message = ERROR_ACC_RESOLVE }; client.SendMessage(lfMessage); return; } } } } catch { var lfMessage = new LoginFailedMessage { Message = ERROR_ACC_RESOLVE // Sorta lie since its not related to account resolving. }; client.SendMessage(lfMessage); throw; } // Client has been successfully logged in! client.Session.Login(level); const string ENV_PROD = "prod"; const string FB_APP_ID = "297484437009394"; var lsMessage = new LoginSuccessMessage { UserToken = level.Token, UserId = level.Avatar.Id, HomeId = level.Avatar.Id, FacebookId = null, GameCenterId = null, MajorVersion = MAJ_VER, MinorVersion = MIN_VER, RevisionVersion = 0, ServerEnvironment = ENV_PROD, LoginCount = level.LoginCount, PlayTime = level.PlayTime, FacebookAppId = FB_APP_ID, DateLastSave = level.DateLastSave, DateCreated = level.DateCreated, GooglePlusId = null, CountryCode = "EN" //TODO: Return Country code of IP. }; var ohdMessage = level.OwnHomeData; client.SendMessage(lsMessage); client.SendMessage(ohdMessage); // If the Level forms part of a clan, we send the AllianceStream message of the alliance, // So that the client knows when stuff was sent. if (level.Avatar.Alliance != null) { var asMessage = level.Avatar.Alliance.AllianceStream; client.SendMessage(asMessage); } } }