示例#1
0
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
	}
}
示例#2
0
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);
    }
}
示例#3
0
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;
			}
		}
	}
}
示例#4
0
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();
}
示例#5
0
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;
}
示例#6
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);
}
示例#7
0
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);
}
示例#8
0
void CMainFrame::OnFileLogout()
{
    DoLogout();
    DoLogin();
}
示例#9
0
void Client::DelayedLogout()
{
    DoLogout(false);
}
示例#10
0
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);
// 		}
	}
}
示例#11
0
void LoginCallback::OnKickoutCallback(const nim::KickoutRes& res)
{
	QLOG_APP(L"OnKickoutCallback: {0} - {1}") << res.client_type_ << res.kick_reason_;
	DoLogout(true, nim::kNIMLogoutKickout);
}