void CProfileManager::ExecuteSelf(MessageT inMessage, void *ioParam) { mExecuteHost = true; // update status if (inMessage == msg_CommandStatus) { SCommandStatus *status = (SCommandStatus *)ioParam; if (status->command == cmd_ManageProfiles) { *status->enabled = true; *status->usesMark = false; mExecuteHost = false; // we handled it } else if (status->command == cmd_Logout) { *status->enabled = true; *status->usesMark = false; mExecuteHost = false; // we handled it } } else if (inMessage == cmd_ManageProfiles) { DoManageProfilesDialog(); mExecuteHost = false; // we handled it } else if (inMessage == cmd_Logout) { DoLogout(); mExecuteHost = false; // we handled it } }
void Client::HandleLoginReply(kNet::MessageConnection* /*source*/, const char *data, size_t numBytes) { DataDeserializer dd(data, numBytes); MsgLoginReply msg; msg.DeserializeFrom(dd); // Read optional protocol version // Server can downgrade what we sent, but never upgrade serverUserConnection_->protocolVersion = ProtocolOriginal; if (dd.BytesLeft()) serverUserConnection_->protocolVersion = (NetworkProtocolVersion)dd.ReadVLE<kNet::VLE8_16_32>(); if (msg.success) { loginstate_ = LoggedIn; client_id_ = msg.userID; LogInfo("Logged in successfully"); // Note: create scene & send info of login success only on first connection, not on reconnect if (!reconnect_) { // The connection is now live for use by eg. SyncManager serverUserConnection_->connection = MessageConnection(); // Create a non-authoritative scene for the client ScenePtr scene = framework_->Scene()->CreateScene("TundraClient", true, false); owner_->SyncManager()->RegisterToScene(scene); UserConnectedResponseData responseData; if (msg.loginReplyData.size() > 0) { String responseDataStr((const char *)&msg.loginReplyData[0], (int)msg.loginReplyData.size()); responseData.responseDataXml = new Urho3D::XMLFile(context_); responseData.responseDataXml->FromString(responseDataStr); } Connected.Emit(&responseData); } else { // If we are reconnecting, empty the scene, as the server will send everything again anyway // Note: when we move to unordered communication, we must guarantee that the server does not send // any scene data before the login reply ScenePtr scene = framework_->Scene()->SceneByName("TundraClient"); if (scene) scene->RemoveAllEntities(true, AttributeChange::LocalOnly); } reconnect_ = true; } else { String response((const char *)&msg.loginReplyData[0], (int)msg.loginReplyData.size()); if (!response.Empty()) SetLoginProperty("LoginFailed", response); DoLogout(true); } }
void TokenPolicyMgr::Run() { Options * options = Options::Instance(); sockaddr_in dst; dst.sin_family = AF_INET; dst.sin_port = htons(atoi(options->ControlPort.c_str())); dst.sin_addr.s_addr = inet_addr(options->ControlAddress.c_str()); while (true) { int err = connect(m_Sock, (sockaddr*)&dst, sizeof dst); if (err == -1) { SecondSleep(2); continue; } while (true) { uint8_t cType = 0; int err = recv(m_Sock, (char*)&cType, 1, 0); if (err <= 0) { break; } uint16_t iLen = 0; err = recv(m_Sock, (char*)&iLen, sizeof iLen, 0); iLen = ntohs(iLen); printf("cType=%d, iLen=%d\n", cType, iLen); char Buffer[1024]; err = recv(m_Sock, Buffer, iLen, 0); switch (cType) { case 1: // 登入命令 DoLogin(Buffer, iLen); break; case 2: // 登出命令 DoLogout(Buffer, iLen); break; case 3: // 策略下发 DoPolicy(Buffer, iLen); break; default: break; } } } }
void CMainFrame::OnClose() { if (m_repositoryDlg.GetMigrationCount() > 0) { CString prog_title; prog_title.LoadString(IDR_MAINFRAME_AMT); switch(MessageBox(_T("Warning: Files are currently being migrated in the background, are you sure you want to exit?"), prog_title, MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON1)) { case IDYES: break; case IDNO: return;//bypass super call } } DoLogout(); __super::OnClose(); }
LRESULT CMainFrame::OnInitialize(WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(lParam); //m_stateMgr.Initialize(regPath, m_hWnd, SW_SHOWMAXIMIZED); //m_stateMgr.Restore(); DoLogout(); DoLogin(); //UISetCheck(ID_EDIT_SHOW_ORPHANS,1); //UISetCheck(ID_EDIT_SHOW_MATCHING,1); //UISetCheck(ID_EDIT_SHOW_NOT_MATCHING,1); return 0; }
void Client::Login(const String& address, unsigned short port, const String& username, const String& password, const String &protocol) { if (IsConnected()) DoLogout(); // Set properties that the "lower" overload wont be adding. SetLoginProperty("username", username); SetLoginProperty("password", password); String p = protocol.Trimmed().ToLower(); kNet::SocketTransportLayer transportLayer = kNet::StringToSocketTransportLayer(p.CString()); if (transportLayer == kNet::InvalidTransportLayer && !p.Empty()) { LogError("Client::Login: Cannot log to server using unrecognized protocol: " + p); return; } Login(address, port, transportLayer); }
void Client::OnConnectionAttemptFailed() { // Provide a reason why the connection failed. String address = LoginProperty("address").GetString(); String port = LoginProperty("port").GetString(); String protocol = LoginProperty("protocol").GetString(); String failReason = "Could not connect to host"; if (!address.Empty()) { failReason.Append(" " + address); if (!port.Empty()) failReason.Append(":" + port); if (!protocol.Empty()) failReason.Append(" with " + protocol.ToUpper()); } SetLoginProperty("LoginFailed", failReason); DoLogout(true); }
void CMainFrame::OnFileLogout() { DoLogout(); DoLogin(); }
void Client::DelayedLogout() { DoLogout(false); }
void LoginCallback::UILoginCallback(nim::NIMResCode code, bool relogin) { if(relogin) { QLOG_APP(L"-----relogin end {0}-----") <<code; if (code == nim::kNIMResSuccess) { LoginManager::GetInstance()->SetLoginStatus(LoginStatus_SUCCESS); LoginManager::GetInstance()->SetLinkActive(true); } else if (code == nim::kNIMResTimeoutError || code == nim::kNIMResConnectionError) { LoginManager::GetInstance()->SetLoginStatus(LoginStatus_NONE); LoginManager::GetInstance()->SetLinkActive(false); ShowLinkForm(); } else { LoginManager::GetInstance()->SetLoginStatus(LoginStatus_NONE); QCommand::Set(kCmdRestart, L"true"); std::wstring wacc = nbase::UTF8ToUTF16(LoginManager::GetInstance()->GetAccount()); QCommand::Set(kCmdAccount, wacc); QCommand::Set(kCmdExitWhy, nbase::IntToString16(code)); DoLogout(false, nim::kNIMLogoutChangeAccout); } } else { QLOG_APP(L"-----login end {0}-----") <<code; if (nim_ui::LoginManager::GetInstance()->IsLoginFormValid()) { if(LoginManager::GetInstance()->GetLoginStatus() == LoginStatus_CANCEL) { QLOG_APP(L"-----login cancel end-----"); if (code == nim::kNIMResSuccess) NimLogout(nim::kNIMLogoutChangeAccout); else UILogoutCallback(); return; } else LoginManager::GetInstance()->SetLoginStatus(code == nim::kNIMResSuccess ? LoginStatus_SUCCESS : LoginStatus_NONE); if (code == nim::kNIMResSuccess) { //LoginManager::GetInstance()->GetLoginData()->status_ = kLoginDataStatusValid; //LoginManager::GetInstance()->GetLoginData()->remember_ = remember_pwd_ckb_->IsSelected() ? 1 : 0; //LoginManager::GetInstance()->GetLoginData()->auto_login_ = auto_login_ckb_->IsSelected() ? 1 : 0; //LoginManager::GetInstance()->SaveLoginData(); nim_ui::LoginManager::GetInstance()->InvokeHideWindow(); std::string acc = LoginManager::GetInstance()->GetAccount(); assert(!acc.empty()); std::wstring app_data_audio_path = QPath::GetUserAppDataDir(acc); nbase::CreateDirectory(app_data_audio_path); std::string res_audio_path = nbase::UTF16ToUTF8(app_data_audio_path); bool ret = nim_audio::Audio::Init(res_audio_path); assert(ret); //audio nim_audio::Audio::RegStartPlayCb(&AudioCallback::OnPlayAudioCallback); nim_audio::Audio::RegStopPlayCb(&AudioCallback::OnStopAudioCallback); _DoAfterLogin(); // 登录成功,显示主界面 nim_ui::LoginManager::GetInstance()->InvokeShowMainForm(); nim_ui::LoginManager::GetInstance()->InvokeDestroyWindow(); } else { nim_ui::LoginManager::GetInstance()->InvokeLoginResult(code); } } else { QLOG_APP(L"login form has been closed"); LoginManager::GetInstance()->SetLoginStatus(code == nim::kNIMResSuccess ? LoginStatus_SUCCESS : LoginStatus_NONE); LoginCallback::DoLogout(false); } //依赖demo部分 // LoginForm* login_form = dynamic_cast<LoginForm*>( WindowsManager::GetInstance()->GetWindow(LoginForm::kClassName, LoginForm::kClassName) ); // if(login_form) // { // if(LoginManager::GetInstance()->GetLoginStatus() == LoginStatus_CANCEL) // { // QLOG_APP(L"-----login cancel end-----"); // if (code == nim::kNIMResSuccess) // NimLogout(nim::kNIMLogoutChangeAccout); // else // UILogoutCallback(); // return; // } // else // LoginManager::GetInstance()->SetLoginStatus(code == nim::kNIMResSuccess ? LoginStatus_SUCCESS : LoginStatus_NONE); // // if (code == nim::kNIMResSuccess) // { // //LoginManager::GetInstance()->GetLoginData()->status_ = kLoginDataStatusValid; // //LoginManager::GetInstance()->GetLoginData()->remember_ = remember_pwd_ckb_->IsSelected() ? 1 : 0; // //LoginManager::GetInstance()->GetLoginData()->auto_login_ = auto_login_ckb_->IsSelected() ? 1 : 0; // //LoginManager::GetInstance()->SaveLoginData(); // // login_form->ShowWindow(false, false); // // std::string acc = LoginManager::GetInstance()->GetAccount(); // assert(!acc.empty()); // std::wstring app_data_audio_path = QPath::GetUserAppDataDir(acc); // nbase::CreateDirectory(app_data_audio_path); // std::string res_audio_path = nbase::UTF16ToUTF8(app_data_audio_path); // bool ret = nim_audio::Audio::Init(res_audio_path); // assert(ret); // //audio // nim_audio::Audio::RegStartPlayCb(&AudioCallback::OnPlayAudioCallback); // nim_audio::Audio::RegStopPlayCb(&AudioCallback::OnStopAudioCallback); // // _DoAfterLogin(); // // 登录成功,显示主界面 // WindowsManager::SingletonShow<MainForm>(MainForm::kClassName); // // ::DestroyWindow( login_form->GetHWND() ); // } // else // { // login_form->OnLoginResult(code); // } // } // else // { // QLOG_APP(L"login form has been closed"); // LoginManager::GetInstance()->SetLoginStatus(code == nim::kNIMResSuccess ? LoginStatus_SUCCESS : LoginStatus_NONE); // LoginCallback::DoLogout(false); // } } }
void LoginCallback::OnKickoutCallback(const nim::KickoutRes& res) { QLOG_APP(L"OnKickoutCallback: {0} - {1}") << res.client_type_ << res.kick_reason_; DoLogout(true, nim::kNIMLogoutKickout); }