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

📄 iapconnectdemoconnectionmonitor.cpp

📁 symbian联网接入点的示例代码.新增,设置接入点.
💻 CPP
字号:
/*
* ============================================================================
*  Name     : CIAPConnectDemoConnectionMonitor from 
*			IAPConnectDemoConnectionMonitor.cpp
*  Part of  : Internet Access Points Example v2.0
*  Created  : 01.09.2006 by Forum Nokia
*  Version  : 2.0
*  Copyright: Forum Nokia
* ============================================================================
*/

// INCLUDE FILES
#include <e32std.h>
#include <eikgted.h>
#include <cdbcols.h>
#include <commdb.h>
#include <es_sock.h>
#include <eikenv.h>
#include <commdbconnpref.h>
#include <IAPConnect.rsg>
#include <es_enum.h>	//subConnectionInfo

#include "IAPConnectDemoConnectionMonitor.h"
#include "IAPConnect.hrh"
#include "IAPConnectDemoSettings.h"

// CONSTANTS
const TInt KTextMaxLength = 50;
const TInt KTimeOut = 30000000; // 30 seconds time-out
const TInt KDemoIap = -10;
const TInt KMaxInfoMsgLength = 20;
_LIT(KTimeInfo, " minutes");
_LIT(KDataInfo, " bytes");
_LIT(KErrorMsg, "Error: ");
 
// ================= MEMBER FUNCTIONS =======================

// Constructor
CIAPConnectDemoConnectionMonitor::CIAPConnectDemoConnectionMonitor(
	MIAPConnectDemoConnectionMonitorObserver& aObserver): 
        CActive(EPriorityStandard), iObserver(aObserver), 
        iEngineStatus(EStopped), iSubconnectionIndex(1), iConnectionIndex(1)
	{
		
	}

// Destructor
CIAPConnectDemoConnectionMonitor::~CIAPConnectDemoConnectionMonitor()
	{
	//Could be used to close active connections even if other
	//applications are still using them.
	//iMonitor.SetBoolAttribute(0,0,KConnectionStopAll, ETrue);
	
    if (iConnections)
        {
    	iConnections -> Reset();
    	delete iConnections;
        iConnections = NULL;
        }
	iMonitor.Close();
	}

// ----------------------------------------------------
// CIAPConnectDemoConnectionMonitor::NewL()
//
// ----------------------------------------------------
//
CIAPConnectDemoConnectionMonitor* CIAPConnectDemoConnectionMonitor::NewL(
	MIAPConnectDemoConnectionMonitorObserver& aObserver)
	{
	CIAPConnectDemoConnectionMonitor* self = 
		CIAPConnectDemoConnectionMonitor::NewLC( aObserver );
	CleanupStack::Pop(self);
	return self;
	}

// ----------------------------------------------------
// CIAPConnectDemoConnectionMonitor::NewLC()
//
// ----------------------------------------------------
//	
CIAPConnectDemoConnectionMonitor* CIAPConnectDemoConnectionMonitor::NewLC(
	MIAPConnectDemoConnectionMonitorObserver& aObserver)
	{
	CIAPConnectDemoConnectionMonitor* self = 
		new (ELeave) CIAPConnectDemoConnectionMonitor( aObserver );
	CleanupStack::PushL( self );
	self -> ConstructL();
	return self;	
	}

// ---------------------------------------------------------
// CIAPConnectDemoConnectionMonitor::ConstructL()
// Symbian two-phased constructor
// ---------------------------------------------------------
//	
void CIAPConnectDemoConnectionMonitor::ConstructL()
	{
	TInt count = 1;
	iConnections = new (ELeave)CArrayFixSeg<TConnectionElement>( count );
	User::LeaveIfError( iMonitor.ConnectL() );
	CActiveScheduler::Add(this);
	}

	
// ---------------------------------------------------------
// CIAPConnectDemoConnectionMonitor::DoCancel()
// Implements cancellation of an outstanding request.
// Handles an active object抯 request completion event
// ---------------------------------------------------------
//	
void CIAPConnectDemoConnectionMonitor::DoCancel()
	{
	iMonitor.CancelNotifications();   
	}

// ---------------------------------------------------------
// CIAPConnectDemoConnectionMonitor::RunL()
// Handles an active object抯 request completion event.
// ---------------------------------------------------------
//	
void CIAPConnectDemoConnectionMonitor::RunL()
	{
	if (iStatus == KErrNone)
		{
		TBuf<KMaxInfoMsgLength> text;
		switch (iEngineStatus) 
			{
			case EConnectionCount:
			case EIapName:
				{
				// An empty event is added to to list				
				if ( iEngineStatus == EIapName )
					{
					//Add connections' information to the list for accounting
					TConnectionElement elem;
					elem.iConnectionId = iConnectionId;
					elem.iSubConnectionId = iSubconnectionId;
					iConnections -> AppendL( elem );		
					}
				if ( iConnectionIndex <= iConnectionCount )
					{
					
					//Find all connections and subconnections
					TUint connectionId = 0; 
					TUint subConnectionCount = 0;
					iMonitor.GetConnectionInfo( iConnectionIndex, 
                        connectionId, subConnectionCount);
					//if there is subconnections, first get connection info
					if (subConnectionCount >= 1 && iSubconnectionIndex == 0)
						{
						iMonitor.GetStringAttribute(connectionId, 0, 
                            KIAPName, iAttributeValue, iStatus);
						iSubconnectionIndex = 1;	
						}	
					else
						{
						// 0 is code for first loop and it must be
						// changed to 1 before calling info functions 
						if (iSubconnectionIndex == 0)
							iSubconnectionIndex = 1;
						
						TUint subConnectionId = 0;		
						iMonitor.GetSubConnectionInfo( connectionId, 
                            iSubconnectionIndex, subConnectionId );

						iConnectionId = connectionId;
						iSubconnectionId = subConnectionId;
						
						iMonitor.GetStringAttribute(connectionId, 
                            subConnectionId, KIAPName, iAttributeValue, iStatus);
								
						if ( iSubconnectionIndex >= subConnectionCount)
							{
							iSubconnectionIndex = 0;
							++iConnectionIndex;			
							}
						else
							{
							++iSubconnectionIndex ;
							}	
						}
						
					iEngineStatus = EIapName;								
					SetActive();
					}
				else
					{
					iEngineStatus = EStopped;
					}
				break;
			}
			case EStartTime:
				{
				TTime now;
				now.UniversalTime();
			
				TTime startTime = iStartTimePckg();
									
				//Calculate connection time 
				TTimeIntervalMinutes interval;
				TInt err = now.MinutesFrom( startTime, interval );
			
				if ( err == KErrNone)
					{
					text.AppendNum( interval.Int() );
					text.Append( KTimeInfo );	
					}
				else
					{
					text.Append( KErrorMsg );
					text.AppendNum( KErrOverflow );
					}
				iObserver.ShowInfoL( text );  // Show the connection time
				break;
				}
			//In both cases the code is exactly same
			case EUplinkData:
			case EDownlinkData:
				{
				text.AppendNum( iDataTransfer );
				text.Append( KDataInfo );
				iObserver.ShowInfoL( text );
				break;	
				}
			default:
				break;
			}
		
		}
	else
		{
    	// Nothing to do
		}
	}

// ---------------------------------------------------------
// CIAPConnectDemoConnectionMonitor::GetActiveConnections()
// Iniates the active connection search.
// ---------------------------------------------------------
//	
void CIAPConnectDemoConnectionMonitor::GetActiveConnections()
	{
	if (IsActive())
		{
		return;
		}
		
	//First must get connections count
	iMonitor.GetConnectionCount( iConnectionCount, iStatus );
	
	iConnections -> Reset();
	
	iSubconnectionIndex = 0;
	iConnectionIndex = 1;
	
	iEngineStatus = EConnectionCount;
	SetActive();		
	}
 
// ---------------------------------------------------------
// CIAPConnectDemoConnectionMonitor::CloseConnection()
// Closes a connection.
// ---------------------------------------------------------
//	
TBool CIAPConnectDemoConnectionMonitor::CloseConnection(const TInt& aIndex )
	{
	//Close connection if index is valid
	if (aIndex >= 0 && aIndex < iConnections -> Count())
		{
		TConnectionElement elem = iConnections -> At(aIndex);
		iMonitor.SetBoolAttribute(elem.iConnectionId,
									elem.iSubConnectionId,  
									KConnectionStop, ETrue);
		return ETrue;
		}
	else
		{
		return EFalse;						
		}
	 }

// ---------------------------------------------------------
// CIAPConnectDemoConnectionMonitor::GetInfo()
// Gets information about a connection.
// ---------------------------------------------------------
//		 
TBool CIAPConnectDemoConnectionMonitor::GetInfo(const TInt& aIndex, 
    const TMonitorState& aType)
	{
		if (IsActive())
			{
			return EFalse;
			}
			
		if (aIndex >= 0 && aIndex < iConnections -> Count())
		{
		//Get connection information, uses asynchronous callback functions
		switch ( aType )
			{
			case EConnectionTime:
				{
				TConnectionElement elem = iConnections -> At(aIndex);
				iMonitor.GetPckgAttribute(elem.iConnectionId,
										elem.iSubConnectionId,  
										KStartTime, iStartTimePckg , iStatus);
				iEngineStatus = EStartTime;
				SetActive();
				break;
				}
			case EDownlinkData:
				{
				TConnectionElement elem = iConnections -> At(aIndex);
				iMonitor.GetUintAttribute(elem.iConnectionId,
										elem.iSubConnectionId,  
										KDownlinkData, iDataTransfer, iStatus);
				iEngineStatus = EDownlinkData;
				SetActive();
				break;
				}
			case EUplinkData:
				{

				TConnectionElement elem = iConnections -> At(aIndex);
				iMonitor.GetUintAttribute(elem.iConnectionId,
										elem.iSubConnectionId,  
										KUplinkData, iDataTransfer , iStatus);
				iEngineStatus = EUplinkData;
				SetActive();
				break;
				}						
			default:
				{
				break;	
				}
			}
		return ETrue;
		}
	else
		{
		return EFalse;						
		}
	}
	
// End of file

⌨️ 快捷键说明

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