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

📄 appsviewer.cpp

📁 C++实现的brew程序管理器例子
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// wState: State of the window to be inserted
void CAppsViewer::InsertWindow(CBaseWnd *pWnd, uint16 wState)
{
	//Pause current window?
	if(m_pCurrWnd != NULL)
	{
		m_pCurrWnd->Pause();
		m_wIndex++;
	}
	//Save window pointer
	m_pCurrWnd = pWnd;
	//Save Window pointer
	m_wCurrState = wState;
	//display window
	m_pCurrWnd->Resume();
}

// Create base window and add two softkeys
// wType: Window type, static or menu
// wSoftkey1: ID of soft key 1, 0 indicate no soft key 1
// wSoftkey2: ID of soft key 2, 0 indicate no soft key 2
CBaseWnd *CAppsViewer::CreateBaseWnd(uint16 wType, uint16 wSoftkey1, uint16 wSoftkey2)
{
	//New first window
	CBaseWnd *pWnd = new CBaseWnd(wType);
	if(!pWnd)
	{
		return NULL;
	}
	//Create window
	if(!pWnd->Create(m_pShell, m_pDisplay, APPSVIEWER_RES_FILE))
	{
		delete pWnd;
		return NULL;
	}
	//add two softkey
	if(wSoftkey1 != 0 && !pWnd->AddSoftkey(APPSVIEWER_RES_FILE, wSoftkey1, wSoftkey1, NULL, 0)
		|| wSoftkey2 != 0 && !pWnd->AddSoftkey(APPSVIEWER_RES_FILE, wSoftkey2, wSoftkey2, NULL, 0))
	{
		delete pWnd;
		return NULL;
	}
	pWnd->SetSoftKeySel(wSoftkey1);
	//set window title
	pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_BASEWND_TITLE, IDB_BASEWND_ICON);
	return pWnd;
}

// Create static base window and then set text and add two softkeys
// wSoftkey1: ID of soft key 1, 0 indicate no soft key 1
// wSoftkey2: ID of soft key 2, 0 indicate no soft key 2
// pwszText: Text to set to the window
CBaseWnd *CAppsViewer::CreateStaticBaseWnd(uint16 wSoftkey1, uint16 wSoftkey2, AECHAR *pwszText, AECHAR *pwszTitle)
{
	//Create static base window
	CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_STATIC, wSoftkey1, wSoftkey2);
	if(!pWnd)
	{
		return NULL;
	}
	//Set text
	if(!pWnd->SetText(pwszText, pwszTitle))
	{
		delete pWnd;
		return NULL;
	}

	return pWnd;
}

//连接完成
void CAppsViewer::OnWebEnd(AEEEvent evt, uint16 wParam, uint32 dwParam)
{
	if(!m_bConnectionAction)
		return;
	//delete the waiting for connection window
	delete m_pCurrWnd;
	m_wIndex--;

	if(evt == EVT_APP_WEBSUCCEED)
	{	
		// 成功
		switch(m_wCurrState)
		{
		case STATE_POLICY_RENEW:
			uint16 wError;
			char *pszText;
			pszText =(char*)dwParam; 
			
			if(STRNCMP(pszText, "ErrorCode=", STRLEN("ErrorCode=")) != 0)
			{
				wError = 0;
			}
			pszText += STRLEN("ErrorCode=");
			//
			wError =  ATOI(pszText);
			if(wError == 1)
			{
				ShowMessageWnd(0, 0, IDS_RENEW_SUCCESS, STATE_ORDERRESULT);
			}
			else
			{
				ShowMessageWnd(0, 0, IDS_RENEW_FAIL, STATE_ORDERRESULT);
			}
			break;
		case STATE_MAINMENU:		//主菜单
		case STATE_SERVICE_CATALOG: //应用分类
			uint16 nResIconID;
			uint16 nStateType;
			uint16 nReturnCode;		
			FREEIF(m_pAppInfos)
			if(m_nViewType == APP_TYPE_ALL)
				m_pAppInfos = PROTOCOL_ServiceDecode((char *)dwParam, m_nAppsCount, nReturnCode);
			else
				m_pAppInfos = PROTOCOL_AppDownloadDecode((char *)dwParam, m_nAppsCount, nReturnCode);
			/*
			⑴如果CatalogID下存在子目录,返回
				ErrorCode=2%CatalogCount=3%CatID=0: 图片&1: 流媒体&2: 在线游戏%
			⑴如果CatalogID下不存在子目录,返回服务列表,返回
				ErrorCode=1%CatalogCount =3% CatID =1100: 推箱子&1101: CS游戏&1102:俄罗斯方块%
			⑵如果不存在服务或子目录,返回
				ErrorCode=0%
			*/
			switch(nReturnCode)
			{
			case 2://分类目录
			case 1://应用列表
				if(m_pAppInfos && m_nAppsCount != 0)
				{
					//New first window
					CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, 0, 0);
					if(!pWnd)
					{
						m_pCurrWnd->Resume();
						return;
					}
					if(nReturnCode == 2)
					{
						nResIconID = IDB_ICON_ARROW;
						nStateType = STATE_SERVICE_CATALOG;
					}
					else if(nReturnCode == 1)
					{
						nResIconID = IDB_ICON_ITEM;
						nStateType = STATE_APP_LIST;
					}
					for(int i = 0; i < m_nAppsCount; i++)
					{
						if(nReturnCode == 2)
						{
							pWnd->AddItemEx(APPSVIEWER_RES_FILE, nResIconID, 0, m_pAppInfos[i].cls,
									m_pAppInfos[i].wszName, i);
						}
						else
						{
							pWnd->AddItemEx(APPSVIEWER_RES_FILE, nResIconID, 0,i ,
									m_pAppInfos[i].wszName, m_pAppInfos[i].cls);
						}
					}
					InsertWindow(pWnd, nStateType);
				}//end if
				break;
			default:
				//其它错误,未曾下载东西
				ShowMessageWnd(0, 0, IDS_NO_APP_DOWN, STATE_NO_APP_DOWN);
				break;
			}	
			break;
		case STATE_APP_LIST:
			uint16 returnCode;		
			m_pBillingPolicys = PROTOCOL_BillPolicyDecode((char *)dwParam, m_nPolicysCount,returnCode);
			switch(returnCode)
			{
			case CODE_ORDER_POLICY:
				//已有的定购关系	
				CBaseWnd *pWnd ;
				AECHAR *pwszTemp;
				pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, IDS_BILL_INFO);
				pWnd = CreateStaticBaseWnd(IDS_SOFTKEY_OK, IDS_SOFTKEY_CHECKOUT, m_pBillingPolicys->wszPolicy, pwszTemp);	
				FREEIF(pwszTemp);
				if(!pWnd)
				{
					return ;
				}
			//	pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_BILL_INFO, NULL);
				InsertWindow(pWnd, STATE_SHOW_BILLING);
				return;
			case CODE_ALL_POLICY:
				//无定购, 显示资费策略---goto <STATE_CHARGETYPE>
				if(m_pBillingPolicys && m_nPolicysCount != 0)
				{
					//New first window
					CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, IDS_SOFTKEY_DOWNLOAD, IDS_SOFTKEY_CANCEL);
					if(!pWnd)
					{
						m_pCurrWnd->Resume();
						return;
					}
					for(int i = 0; i < m_nPolicysCount; i++)
					{
						pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_BASEWND_ITEM2,0, m_pBillingPolicys[i].wId,
						m_pBillingPolicys[i].wszPolicy, (uint32)m_pBillingPolicys[i].bIsRenewable);
					}
					InsertWindow(pWnd, STATE_CHARGETYPE);
				}//end if
				break;
			case CODE_NONE_POLICY:
			case CODE_PARAM_ERROR:
				//查询参数错误		
			default:
				//其它错误
				ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_NOTIFY_DISABLE, STATE_APP_DISABLE);
				break;
			}	
			break;
		case STATE_CHARGETYPE:
			//返回结果
			uint16 nErrorCode;
			//AECHAR *pszMsg = NULL;
			nErrorCode = PROTOCOL_ResultDecode((char *)dwParam/*, pszMsg*/);
			//success
			switch(nErrorCode)
			{
			case CODE_ORDER_EXIST:
			case CODE_ORDER_SUCCESS:
				delete m_pCurrWnd;
				m_wIndex--;
				ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ORDER_SUCCESS, STATE_ORDER_SUCCESS);
				//...写记录...
				//...
				break;
			case CODE_ORDER_FAIL:
			default:
				ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_NOTIFY_ORDERFAIL, STATE_APP_DISABLE);
				break;
			}
			break;
		}//~end switch(m_wCurrState)
	}
	else
	{
		//网络连接出错
		AECHAR *pszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, IDS_CONNECTING_ERROR);
		if(!pszTemp)
			return;
		CBaseWnd *pWnd = CreateStaticBaseWnd(IDS_SOFTKEY_RETRY, IDS_SOFTKEY_CANCEL, pszTemp);
		FREEIF(pszTemp);
		if(!pWnd)
		{
			return;
		}
		InsertWindow(pWnd, STATE_CONNECTFAIL);
	}
}


// create lart Message showed window
boolean CAppsViewer::ShowMessageWnd(uint16 nLeft, uint16 nRight, uint16 nMessageId, uint16 nState)
{
	// Local information is not available, we need confirm with server
	// Create static window
	AECHAR *pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, nMessageId);
	if(!pwszTemp)
		return FALSE;
	CBaseWnd *pWnd = CreateStaticBaseWnd(nLeft, nRight, pwszTemp);
	FREEIF(pwszTemp);
	if(!pWnd)
	{
		return FALSE;
	}
	InsertWindow(pWnd, nState);
	return TRUE;
}

// start to web connect to get subscription 查询定购信息
boolean CAppsViewer::StartGetAppsInfo(uint16 nType)
{
	int nUrlSize;
	FREEIF(m_pSvrUrl);
	if(nType == APP_TYPE_DOWNLOADED)
	{
		nUrlSize = STRLEN(QUERY_APPSINFO_URL) + STRLEN(URL_PARAM_IMSI) + 20;
		m_pSvrUrl = (char *)MALLOC(nUrlSize);
		if(!m_pSvrUrl)
		{
			return FALSE;
		}
		//组织URL
		SPRINTF(m_pSvrUrl, "%s%s%s", QUERY_APPSINFO_URL, 
							 URL_PARAM_IMSI,
							 m_szIMSI);
	
	}
	else
	{
		nUrlSize = STRLEN(QUERY_UNAPPSINFO_URL) + STRLEN(URL_PARAM_IMSI) + 20;
		m_pSvrUrl = (char *)MALLOC(nUrlSize);
		if(!m_pSvrUrl)
		{
			return FALSE;
		}

		SPRINTF(m_pSvrUrl, "%s%s%s", QUERY_UNAPPSINFO_URL, 
							 URL_PARAM_IMSI,
							 m_szIMSI);
		
	}	
	//http://localhost/BrewGatewayAgent/querysubscription.aspx?
	
	if(m_pWebAction)
	{
		m_bConnectionAction = TRUE;
		//Start web connect success?
		if(m_pWebAction->CreateWeb() &&
			m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
		{
			return TRUE;
		}
	}
	return FALSE;
}	

// start to web connect to get subscription 查询定购信息
boolean CAppsViewer::StartGetSubscription(uint32 classid)
{
	//计算Url长度
	int nUrlSize = STRLEN(QUERY_SUBSCRIPTION_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI) +  30;
	FREEIF(m_pSvrUrl);
	m_pSvrUrl = (char *)MALLOC(nUrlSize);
	if(!m_pSvrUrl)
	{
		return FALSE;
	}
	//http://localhost/BrewGatewayAgent/querysubscription.aspx?
	//组织URL

	SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s", QUERY_SUBSCRIPTION_URL, 
							 URL_PARAM_CLASSID, 
							 classid,
							 URL_PARAM_SYMBOL_AND, 
							 URL_PARAM_IMSI,
							 m_szIMSI);
	
	if(m_pWebAction)
	{
		m_bConnectionAction = TRUE;
		//Start web connect success?
		if(m_pWebAction->CreateWeb() &&
			m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
		{
			return TRUE;
		}
	}
	return FALSE;
}	

//查询服务分类
boolean CAppsViewer::StartGetService(uint16 nCatalogID)
{
	int nUrlSize = STRLEN(QUERY_SERVICE_URL) + STRLEN(URL_PARAM_CATALOG) + STRLEN(URL_PARAM_IMSI) + 30;
	FREEIF(m_pSvrUrl);
	m_pSvrUrl = (char *)MALLOC(nUrlSize);
	if(!m_pSvrUrl)
	{
		return FALSE;
	}
	SPRINTF(m_pSvrUrl, "%s%s%s%s%s%u", QUERY_SERVICE_URL,
							 URL_PARAM_IMSI,
							 m_szIMSI,
							 URL_PARAM_SYMBOL_AND, 
							 URL_PARAM_CATALOG,
							 nCatalogID
							 );
	
	if(m_pWebAction)
	{
		m_bConnectionAction = TRUE;
		//Start web connect success?
		if(m_pWebAction->CreateWeb() &&
			m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
		{
			return TRUE;
		}
	}
	return FALSE;
}


//发送定购信息
boolean CAppsViewer::StartOrder(uint16 nPolicyId, uint16 isRenew)
{
	int nUrlSize = STRLEN(ORDER_SUBSCRIPTION_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI) 
			+ STRLEN(URL_PARAM_BILLINGPOLICY) + STRLEN(URL_PARAM_ISRENEW) +  30;
	FREEIF(m_pSvrUrl);
	m_pSvrUrl = (char *)MALLOC(nUrlSize);
	if(!m_pSvrUrl)
	{
		return FALSE;
	}
	SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s%s%s%u%s%s%u", ORDER_SUBSCRIPTION_URL, 
							 URL_PARAM_CLASSID, 
							 m_clsCPApp,
							 URL_PARAM_SYMBOL_AND, 
							 URL_PARAM_IMSI,
							 m_szIMSI,
							 URL_PARAM_SYMBOL_AND,
							 URL_PARAM_BILLINGPOLICY,
							 nPolicyId,
							 URL_PARAM_SYMBOL_AND,
							 URL_PARAM_ISRENEW,
							 isRenew);

	if(m_pWebAction)
	{
		m_bConnectionAction = TRUE;
		//Start web connect success?
		if(m_pWebAction->CreateWeb() &&
			m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
		{
			return TRUE;
		}
	}
	return FALSE;
}

boolean CAppsViewer::StartRenew(uint32 clsID)
{
	int nUrlSize = STRLEN(RENEW_ORDER_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI) + 30;
	FREEIF(m_pSvrUrl);
	m_pSvrUrl = (char *)MALLOC(nUrlSize);
	if(!m_pSvrUrl)
	{
		return FALSE;
	}

	SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s", RENEW_ORDER_URL,
							URL_PARAM_CLASSID,
							 clsID,
							 URL_PARAM_SYMBOL_AND, 
							 URL_PARAM_IMSI,
							 m_szIMSI
							 );
	
	if(m_pWebAction)
	{
		m_bConnectionAction = TRUE;
		//Start web connect success?
		if(m_pWebAction->CreateWeb() &&
			m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
		{
			return TRUE;
		}
	}
	return FALSE;
}

boolean CAppsViewer::StartCancel(uint32 clsID)
{
	int nUrlSize = STRLEN(CANCEL_ORDER_URL) + STRLEN(URL_PARAM_CLASSID) + STRLEN(URL_PARAM_IMSI) + 30;
	FREEIF(m_pSvrUrl);
	m_pSvrUrl = (char *)MALLOC(nUrlSize);
	if(!m_pSvrUrl)
	{
		return FALSE;
	}
	SPRINTF(m_pSvrUrl, "%s%s%u%s%s%s", CANCEL_ORDER_URL,
							URL_PARAM_CLASSID,
							 clsID,
							 URL_PARAM_SYMBOL_AND, 
							 URL_PARAM_IMSI,
							 m_szIMSI
							 );
	
	if(m_pWebAction)
	{
		m_bConnectionAction = TRUE;
		//Start web connect success?
		if(m_pWebAction->CreateWeb() &&
			m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
		{
			return TRUE;
		}
	}
	return FALSE;
}

//handle mainmenu
boolean CAppsViewer::OnMainMenu(uint16 wParam)
{
	switch(wParam)
	{
	case IDS_MAINMENU_OWN:
		m_nViewType = APP_TYPE_DOWNLOADED;
		if(StartGetAppsInfo(APP_TYPE_DOWNLOADED))
		{
			ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_CHECK, STATE_CONNECTING);
		}
		else
		{
			ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
		}
		break;
	case IDS_MAINMENU_ALL:
		m_nViewType = APP_TYPE_ALL;
		if(StartGetService(0))
		{
			ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_CHECK, STATE_CONNECTING);
		}
		else
		{
			ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
		}
		break;
	case IDS_MAINMENU_ABOUT:
		ShowMessageWnd(0, 0, IDS_MAINMENU_ABOUT, STATE_ABOUT);
		break;
	case IDS_MAINMENU_HELP:
		ShowMessageWnd(0, 0, IDS_MAINMENU_HELP, STATE_HELP);
		break;
	default:
		return FALSE;
	}
	return TRUE;
}

//
boolean  CAppsViewer::CreatePolicyOption(uint16 nPolicyId)
{
	//New first window
	CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, IDS_SOFTKEY_OK, IDS_SOFTKEY_CANCEL);
	if(!pWnd)
		return FALSE;
	pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_OPTION_TITLE, IDB_ICON_ITEM);
	AECHAR *pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, IDS_OPTION_ITEM);
	pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_OPTION_YES, 0, nPolicyId, pwszTemp, 0);
	FREEIF(pwszTemp);
	InsertWindow(pWnd, STATE_POLICY_OPTION);
	return TRUE;
}

//
boolean CAppsViewer::CreatePolicyRenew(uint32 classId, boolean isCancel, boolean isRenew, AECHAR *pTitle)
{
		//New first window
	CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, 0, 0/*IDS_SOFTKEY_OK, IDS_SOFTKEY_CANCEL*/);
	if(!pWnd)
		return FALSE;
	pWnd->SetWindowTitle(pTitle);
	if(isRenew)
		pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_ICON_ARROW, IDS_MENU_RENEW, IDS_MENU_RENEW, NULL, classId);
	if(isCancel)
		pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_ICON_ARROW, IDS_MENU_CANCEL, IDS_MENU_CANCEL, NULL, classId);

	InsertWindow(pWnd, STATE_POLICY_RENEW);
	return TRUE;

}

//
boolean CAppsViewer::CreateConfirmWnd(AECHAR *pwszText)
{
	// Local information is not available, we need confirm with server
	// Create static window
	
	CBaseWnd *pWnd = CreateStaticBaseWnd(IDS_SOFTKEY_OK, IDS_SOFTKEY_CANCEL, pwszText);
	if(!pWnd)
	{
		return FALSE;
	}
	pWnd->SetWindowTitle(APPSVIEWER_RES_FILE, IDS_CONFIRM_TITLE, IDB_BASEWND_ITEM1);

	InsertWindow(pWnd, STATE_CONFIRM);
	return TRUE;
}

⌨️ 快捷键说明

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