imuserloginview.cpp

来自「国内著名嵌入式培训机构内部资料,内含一些实例代码,包括技术专题书籍」· C++ 代码 · 共 238 行

CPP
238
字号
/*
 ============================================================================
 Author	  : hou maoqing
 Version	 : 1.0
 Copyright   : Copyright (c) Hou maoqing 2008
 Mail	: houmqing@163.com
 ============================================================================
 */

#include  <aknviewappui.h>
#include  <avkon.hrh>
#include <stringloader.h> 
#include <aknquerydialog.h> 
#include  <ImClientExam.rsg>
#include "socketsappui.h"
#include  "ImUserLoginView.h"
#include  "ImUserLoginContainer.h"
#include "sockets.hrh"
#include "SocketsEngine.h"

#include "ImMsgCommandID.h"
#include "ImMsg.h"
#include "ImRegistryReq.h"
#include "ImUserLoginReq.h"

// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CImUserLoginView::ConstructL(const TRect& aRect)
// EPOC two-phased constructor
// ---------------------------------------------------------
//
void CImUserLoginView::ConstructL()
    {
    BaseConstructL( R_IMCLIENT_IMUSERLOGINVIEW );
    }

// ---------------------------------------------------------
// CImUserLoginView::~CImUserLoginView()
// destructor
// ---------------------------------------------------------
//
CImUserLoginView::~CImUserLoginView()
    {
    if ( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        }

    delete iContainer;
    }

// ---------------------------------------------------------
// TUid CImUserLoginView::Id()
//
// ---------------------------------------------------------
//
TUid CImUserLoginView::Id() const
    {
    return KImUserLoginViewViewId;
    }

// ---------------------------------------------------------
// CImUserLoginView::HandleCommandL(TInt aCommand)
// takes care of view command handling
// ---------------------------------------------------------
//
void CImUserLoginView::HandleCommandL(TInt aCommand)
    {   
    switch ( aCommand )
        {
        case EImCmdRegister:
        	{
        	TBuf<30> bufPassword;
    		CAknTextQueryDialog* pInputNameQuery = CAknTextQueryDialog::NewL(bufPassword);
    		CleanupStack::PushL(pInputNameQuery);
    		
    		HBufC* prompt;
    		prompt = StringLoader::LoadLC(R_REGISTER_INPUT_PROMPT);	// Pushes prompt onto the Cleanup Stack.
    		pInputNameQuery->SetPromptL(*prompt);
    		CleanupStack::PopAndDestroy(prompt);
    		CleanupStack::Pop(pInputNameQuery);
    		
    		if (pInputNameQuery->ExecuteLD(R_REGISTER_INPUT_QUERY))
    			{
    			this->SendRegisterMessage(bufPassword);
    			}
        	}
        	break;
        	
        case EImCmdLogin:
        	{
        	TBuf<10> bufAcc,bufPw;
        	iContainer->GetUserAccAndPassword(bufAcc,bufPw);
        	//bufAcc.Copy(_L("10001"));
        	//bufPw.Copy(_L("12345"));
        	SendLoginMessage(bufAcc,bufPw);
        	
        	((CSocketsAppUi*)AppUi())->m_bufMyAcc.Copy(bufAcc);
        	break;
        	}
        	
        case EAknSoftkeyOk:
            {
            iEikonEnv->InfoMsg( _L("view1 ok") );
            break;
            }
        case EAknSoftkeyBack:
            {
            AppUi()->HandleCommandL(EEikCmdExit);
            break;
            }
        default:
            {
            //AppUi()->HandleCommandL( aCommand );
            break;
            }
        }
    }

// ---------------------------------------------------------
// CImUserLoginView::HandleClientRectChange()
// ---------------------------------------------------------
//
void CImUserLoginView::HandleClientRectChange()
    {
    if ( iContainer )
        {
        iContainer->SetRect( ClientRect() );
        }
    }

// ---------------------------------------------------------
// CImUserLoginView::DoActivateL(...)
// 
// ---------------------------------------------------------
//
void CImUserLoginView::DoActivateL(
   const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
   const TDesC8& /*aCustomMessage*/)
    {
    if (!iContainer)
        {
        iContainer = new (ELeave) CImUserLoginContainer;
        iContainer->SetMopParent(this);
        iContainer->ConstructL( ClientRect() );
        AppUi()->AddToStackL( *this, iContainer );
        } 
   }

// ---------------------------------------------------------
// CImUserLoginView::DoDeactivate()
// 
// ---------------------------------------------------------
//
void CImUserLoginView::DoDeactivate()
    {
    if ( iContainer )
        {
        AppUi()->RemoveFromViewStack( *this, iContainer );
        }
    
    delete iContainer;
    iContainer = NULL;
    }

void CImUserLoginView::SendRegisterMessage(const TDesC& desPassword)
	{
	CImMsg* pImMsg=CImMsg::NewL();
	CleanupStack::PushL(pImMsg);
	pImMsg->m_nCommandID=ImRegisterUserReq;
	pImMsg->m_nSeqNo=1;
	memset(pImMsg->m_strSrcUser,0,11);
	memset(pImMsg->m_strDstUser,0,11);
	pImMsg->m_nRespResult=0;
	
	HBufC8* pPassword=HBufC8::NewLC(desPassword.Length());
	TPtr8 ptrPassword=pPassword->Des();
	ptrPassword.Append(desPassword);
	
	CImRegistryReq* pReq=new (ELeave) CImRegistryReq();
	memset(pReq->m_strPassword,0,11);
	memcpy(pReq->m_strPassword,ptrPassword.Ptr(),ptrPassword.Length());
	pImMsg->m_pBody=pReq;
	
	//发送消息
	CSocketsAppUi* pAppUi=(CSocketsAppUi*)AppUi();
	TUint8* pMsgBuf=NULL;
	TInt nMsgLen=0;
	pImMsg->Encode(&pMsgBuf,nMsgLen);
	CleanupStack::PushL(pMsgBuf);
	
	TPtrC8 ptr8(pMsgBuf,nMsgLen);
	pAppUi->iSocketsEngine->WriteL(ptr8);
	CleanupStack::PopAndDestroy(3);
	}

void CImUserLoginView::SendLoginMessage(
		const TDesC& desUserAcc,const TDesC& desPassword)
	{
	HBufC8* pUser=HBufC8::NewLC(desUserAcc.Length());
	TPtr8 ptrUser=pUser->Des();
	ptrUser.Append(desUserAcc);
	
	HBufC8* pPassword=HBufC8::NewLC(desPassword.Length());
	TPtr8 ptrPassword=pPassword->Des();
	ptrPassword.Append(desPassword);
		
	//--------------------------------------------
	//构建请求消息
	CImMsg* pImMsg=CImMsg::NewL();
	CleanupStack::PushL(pImMsg);
	pImMsg->m_nCommandID=ImUserLoginReq;
	pImMsg->m_nSeqNo=1;
	memset(pImMsg->m_strSrcUser,0,11);
	memset(pImMsg->m_strDstUser,0,11);
	pImMsg->m_nRespResult=0;
	
	CImUserLoginReq* pReq=new (ELeave) CImUserLoginReq();
	memcpy(pReq->m_strUserAcc,ptrUser.Ptr(),ptrUser.Length());
	memcpy(pReq->m_strPassword,ptrPassword.Ptr(),ptrPassword.Length());
	pImMsg->m_pBody=pReq;
	
	//发送消息
	CSocketsAppUi* pAppUi=(CSocketsAppUi*)AppUi();
	TUint8* pMsgBuf=NULL;
	TInt nMsgLen=0;
	pImMsg->Encode(&pMsgBuf,nMsgLen);
	CleanupStack::PushL(pMsgBuf);
	
	TPtrC8 ptr8(pMsgBuf,nMsgLen);
	pAppUi->iSocketsEngine->WriteL(ptr8);
	CleanupStack::PopAndDestroy(3);
	}

// End of File

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?