⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nettestappui.cpp

📁 Symbian第二版断点续传代码,可以节省用户下载流量
💻 CPP
字号:
/*
============================================================================
 Name        : CNetTestAppUi from NetTestAppui.cpp
 Author      : 
 Version     :
 Copyright   : Your copyright notice
 Description : CNetTestAppUi implementation
============================================================================
*/

// INCLUDE FILES
#include "NetTestAppui.h"
#include "NetTestContainer.h" 
#include <NetTest.rsg>
#include "NetTest.hrh"
#include <sys/reent.h> // for CloseSTDLib()
#include <avkon.hrh>
#include <aknnotewrappers.h>
#include <m5httpdown.h>
#include <bautils.h>   // for file exist check 

_LIT8(KTargetUri, "http://image.fotoever.com/PhotoServer01/Blog/Music/1132037/319200852305AM42589.mp3") ; //http://www.5mbox.com/bbs/test1.mp3
                                                                                                          //http://www.chatyy.cn/bbsxp/mid/fangmin/qhc.mp3
_LIT(KTargetFilename, "c:\\Deepinlove.mp3") ; 

void CNetTestAppUi::ConstructL()
    {
    BaseConstructL();

    iAppContainer = new (ELeave) CNetTestContainer;
    iAppContainer->SetMopParent( this );
    iAppContainer->ConstructL( ClientRect() );
    AddToStackL( iAppContainer );
	
	iPrintBuf.SetLength(0) ; 
	iHttpDown = NULL ; 
	iRecvSize = 0 ; 
	iFirstIn = ETrue ; 
    }

// ----------------------------------------------------
// CNetTestAppUi::~CNetTestAppUi()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CNetTestAppUi::~CNetTestAppUi()
{
    if (iAppContainer)
        {
        RemoveFromStack( iAppContainer );
        delete iAppContainer;
        }
}

// ------------------------------------------------------------------------------
// CNetTestAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
//  This function is called by the EIKON framework just before it displays
//  a menu pane. Its default implementation is empty, and by overriding it,
//  the application can set the state of menu items dynamically according
//  to the state of application data.
// ------------------------------------------------------------------------------
//
void CNetTestAppUi::DynInitMenuPaneL( TInt /*aResourceId*/,CEikMenuPane* /*aMenuPane*/)
{}

// ----------------------------------------------------
// CNetTestAppUi::HandleKeyEventL(
//     const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
// takes care of key event handling
// ----------------------------------------------------
//
TKeyResponse CNetTestAppUi::HandleKeyEventL(
    const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
{
    return EKeyWasNotConsumed;
}

void CNetTestAppUi::M5PrintNotify(const TDesC & aMessage)
{
	if(iPrintBuf.Length() + aMessage.Length() >= PRINT_BUF_LEN) {
		iPrintBuf.SetLength(0) ; 
		return ; 
	}
	iPrintBuf.Append(aMessage) ; 
	iPrintBuf.Append(_L("\n")) ; 
	iAppContainer->SetMsgBody(iPrintBuf) ;
}

void CNetTestAppUi::M5RecvNotify(const TDesC8 & recv_buf) 
{	
	if(iFirstIn) {
		TBuf<30> s ; 
		s.Format(_L("total size : %d"), iHttpDown->HttpTotalSize()) ; 
		M5PrintNotify(s) ; 
		s.Format(_L("recv size : %d"), iHttpDown->HttpRecvSize()) ; 
		M5PrintNotify(s) ; 
		iFirstIn = EFalse ; 
	} else {
		iPrintBuf.Format(_L("total %d bytes\nrecv %d bytes"),
						 iHttpDown->HttpTotalSize(), 
						 iHttpDown->HttpRecvSize()) ;
		iAppContainer->SetMsgBody(iPrintBuf) ;
	}
	
	// record the music data into file
	iFile.Write(recv_buf) ; 

	if(iHttpDown->HttpTotalSize() > 0 &&
	   iHttpDown->HttpTotalSize() <= iHttpDown->HttpRecvSize()) {
		TBuf<20> s ; 
		s.Format(_L("\nend recv!\n")) ; 
		M5PrintNotify(s) ; 
	}
}

void CNetTestAppUi::M5TimerExpireNotify()
{
}

void CNetTestAppUi::M5ErrorNotify(const TDesC& aErrMessage, TInt aErrCode) 
{
}

void CNetTestAppUi::HandleCommandL(TInt aCommand)
{
	TBuf8<100> s8(KTargetUri) ;
    switch ( aCommand )
        {
        case EAknSoftkeyBack:
        case EEikCmdExit:
            {
				if(iHttpDown) delete iHttpDown ; 
				Exit();
            }
			break;
        case ENetTestCMWapConn:
            { 
				iPrintBuf.SetLength(0) ; 
				iFirstIn = ETrue ; 
				if(iHttpDown) delete iHttpDown ;   
				iHttpDown = CM5HttpDown::NewL(*this) ; 
				iHttpDown->HttpConnPorxy(s8, HTTP_DOWN_CMWAP) ; 
				iRecvSize = 0 ; 
				// check whether the file exists 
				User::LeaveIfError(iFs.Connect()) ; 
				iRecvSize = 0 ; 
				if(BaflUtils::FileExists(iFs, KTargetFilename)) {
					TInt seek_pos = 0 ; 
					iFile.Open(iFs, KTargetFilename, EFileStream | EFileWrite) ; 
					if(iFile.Size(iRecvSize) != KErrNone) 
						iRecvSize = 0 ; 
					iFile.Seek(ESeekEnd, seek_pos) ; 
				} else {
					iFile.Replace(iFs, KTargetFilename, EFileStream | EFileWrite) ; 
				}
            }
			break ; 
		case ENetTestCMNetConn:
			{
				iPrintBuf.SetLength(0) ; 
				iFirstIn = ETrue ; 
				if(iHttpDown) delete iHttpDown ;   
				iHttpDown = CM5HttpDown::NewL(*this) ; 
				iHttpDown->HttpConnPorxy(s8, HTTP_DOWN_CMNET) ; 
				iRecvSize = 0 ; 
				// check whether the file exists 
				User::LeaveIfError(iFs.Connect()) ; 
				iRecvSize = 0 ; 
				if(BaflUtils::FileExists(iFs, KTargetFilename)) {
					TInt seek_pos = 0 ; 
					iFile.Open(iFs, KTargetFilename, EFileStream | EFileWrite) ; 
					if(iFile.Size(iRecvSize) != KErrNone) 
						iRecvSize = 0 ; 
					iFile.Seek(ESeekEnd, seek_pos) ; 
				} else {
					iFile.Replace(iFs, KTargetFilename, EFileStream | EFileWrite) ; 
				}
			}
			break ; 
		case ENetTestResume:
			{
				TBuf<20>   s16 ; 
				if(iHttpDown->HttpDown(s8, iRecvSize)) {
					s16.Format(_L("req sent!")) ; 
					M5PrintNotify(s16) ; 
				} else {
					s16.Format(_L("req send failed!")) ; 
					M5PrintNotify(s16) ; 
				}
			}
			break; 
		case ENetTestStop:
			{
				if(iHttpDown->IsRunning()) {
					iHttpDown->HttpStopDown() ; 
					delete iHttpDown ; 
					iHttpDown = NULL ; 
					iFile.Close() ; 
					iFs.Close() ; 
					iFirstIn = ETrue ;
				} 
			}
			break ; 
        default:
            break;      
        }
}

  

⌨️ 快捷键说明

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