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

📄 picdownload.c

📁 brew平台 通过网络下载图片 并显示
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "PicDownload.h"
#include "PicDownload.bid"
#include "PicDownload_res.h"
#include "AEEStdLib.h"


#define RES_FILE PICDOWNLOAD_RES_FILE 

static  boolean PicDownload_HandleEvent(PicDownload* pMe, AEEEvent eCode, uint16 wParam,uint32 dwParam);
boolean PicDownload_InitAppData(PicDownload* pMe);
void    PicDownload_FreeAppData(PicDownload* pMe);
void PicDownload_ChangeState(PicDownload *pMe);
void PicDownload_InitMainMenu(PicDownload* pMe);
static void GetHostByName(PicDownload* pMe);
static void CBConnect(PicDownload *pMe,int nError);
static void PicDownload_MainLoop(PicDownload *pMe);
void SetFileData(PicDownload *pMe,byte *pData,int size);

boolean PicDownload_MainMenuHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);
boolean PicDownload_FileListHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);
boolean PicDownload_ViewHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);
boolean PicDownload_FileViewHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);

void ErrorTip(PicDownload *pMe,int16 errorId);

void SetTimeOut(PicDownload *pMe,int32 timeOut);
void TimeOut(PicDownload *pMe);
void CancelTimeOut(PicDownload *pMe);

static void CBSend(PicDownload *pMe);
static void CBRecv(PicDownload *pMe);
void RecvData(PicDownload *pMe,byte *pbData,int32 nRecvSize);
void SendData(PicDownload *pMe,byte *pbData,int32 nSendSize);
void Send(PicDownload *pMe,void *pData,int32 iSize);
void Recv(PicDownload *pMe,void *pData,int32 iSize);
void NetworkProcess(PicDownload *pMe);
void ProcessRecvData(PicDownload *pMe);
void UpdateScreen(PicDownload *pMe);
void PicDownload_InitNetwork(PicDownload *pMe);
int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj)
{
	*ppObj = NULL;
	if( ClsId == AEECLSID_PICDOWNLOAD )
	{
		if( AEEApplet_New(sizeof(PicDownload),
			ClsId,
			pIShell,
			po,
			(IApplet**)ppObj,
			(AEEHANDLER)PicDownload_HandleEvent,
			(PFNFREEAPPDATA)PicDownload_FreeAppData))
		{
			if(PicDownload_InitAppData((PicDownload*)*ppObj))
			{
				return(AEE_SUCCESS);
			}
			else
			{
				IAPPLET_Release((IApplet*)*ppObj);
				return EFAILED;
			}
		} 
	}
	return(EFAILED);
}

void NetworkRelease(PicDownload* pMe)
{
	if(pMe->pSocket)
	{
		ISOCKET_Cancel(pMe->pSocket,NULL,NULL);
		ISOCKET_Release(pMe->pSocket);
		pMe->pSocket = NULL;
	}
	if(pMe->pNetMgr)
	{
		INETMGR_Release(pMe->pNetMgr);
		pMe->pNetMgr = NULL;
	}
	if(pMe->m_pbRecvBuffer)
	{
		FREE(pMe->m_pbRecvBuffer);
		pMe->m_pbRecvBuffer = NULL;
	}
}
static boolean PicDownload_HandleEvent(PicDownload* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{  
	switch (eCode) 
	{
	case EVT_APP_START:    
		ISHELL_SetTimerEx(pMe->pIShell,0,&pMe->cbMainTimer);
		IMENUCTL_SetActive(pMe->pIMenuCtlMain,TRUE);
		pMe->appState = enMainMenu;
		return(TRUE);
	case EVT_APP_STOP:
		return(TRUE);
	case EVT_APP_SUSPEND:
		switch(pMe->appState)
		{
		case enMainMenu:
			IMENUCTL_SetActive(pMe->pIMenuCtlMain,FALSE);
			break;
		case enWait:
			NetworkRelease(pMe);
			break;
		case enFileList:
			IMENUCTL_SetActive(pMe->pIMenuCtlList,FALSE);
			NetworkRelease(pMe);
			break;
		case enView:
			NetworkRelease(pMe);
			break;
		case enFileView:
			IMENUCTL_SetActive(pMe->pIMenuCtlList,FALSE);
			break;
		case enError:
			break;
		case enView2:
			break;
		}
		return(TRUE);
	case EVT_APP_RESUME:
		switch(pMe->appState)
		{
		case enMainMenu:
			IMENUCTL_SetActive(pMe->pIMenuCtlMain,TRUE);
			break;
		case enWait:
			PicDownload_InitNetwork(pMe);
			pMe->appState = enWait;
			break;
		case enFileList:
			PicDownload_InitNetwork(pMe);
			IMENUCTL_SetActive(pMe->pIMenuCtlList,FALSE);
			pMe->appState = enWait;
		case enView:
			PicDownload_InitNetwork(pMe);
			pMe->appState = enWait;
			break;
		case enFileView:
			IMENUCTL_SetActive(pMe->pIMenuCtlList,TRUE);
			break;
		case enError:
			break;
		case enView2:
			break;
		}
		return(TRUE);
	case EVT_APP_MESSAGE:
		return(TRUE);
	case EVT_APP_NO_SLEEP:
		return TRUE;
	default:
		{
			switch(pMe->appState)
			{
			case enMainMenu:
				return PicDownload_MainMenuHandleEvent(pMe,eCode,wParam,dwParam);
			case enFileList:
				return PicDownload_FileListHandleEvent(pMe,eCode,wParam,dwParam);
			case enView:
				return PicDownload_ViewHandleEvent(pMe,eCode,wParam,dwParam);
			case enView2:
				{
					if(eCode==EVT_KEY&&wParam==AVK_CLR)
					{
						IMENUCTL_SetActive(pMe->pIMenuCtlList,TRUE);
						pMe->appState = enFileView;
						return TRUE;
					}
				}
				break;
			case enFileView:
				return PicDownload_FileViewHandleEvent(pMe,eCode,wParam,dwParam);
			}
		}
		break;
	}
	return FALSE;
}
void NetworkProcess(PicDownload *pMe)
{	
	if(pMe->m_nNetState>=0)
	{
		if(pMe->m_bIsRecv)
		{
			if(pMe->m_bRecvBuf)
			{
				if(pMe->m_RecvDataHead.dwSize!=0)
				{
					if(!pMe->m_bIsReadBuf)
					{
						if(pMe->m_pbRecvBuffer)
						{
							FREE(pMe->m_pbRecvBuffer);
						}
						pMe->m_pbRecvBuffer = (byte*)MALLOC(pMe->m_RecvDataHead.dwSize);
						Recv(pMe,pMe->m_pbRecvBuffer,pMe->m_RecvDataHead.dwSize);
						pMe->m_bIsReadBuf = TRUE;
					}
					else
					{
						pMe->m_bIsRecv = FALSE;
						pMe->m_bIsReadBuf = FALSE;
						ProcessRecvData(pMe);
					}
				}
				else
				{
					pMe->m_bIsRecv = FALSE;
					pMe->m_bIsReadBuf = FALSE;
					ProcessRecvData(pMe);
				}
			}
		}
	}
}
void SetFileList(PicDownload *pMe,byte *pData,int size)
{
	int i;
	int length = size/(FILENAME_LENGTH*2);
	AECHAR buffer[FILENAME_LENGTH];
	IMENUCTL_DeleteAll(pMe->pIMenuCtlList);
	for(i=0;i<length;i++)
	{
		MEMSET(buffer,0,sizeof(buffer));
		MEMCPY(buffer,(AECHAR*)pData+i*FILENAME_LENGTH,sizeof(buffer));
		IMENUCTL_AddItem(pMe->pIMenuCtlList,RES_FILE,-1,i,buffer,i);
	}
	IMENUCTL_SetActive(pMe->pIMenuCtlList,TRUE);
	IMENUCTL_Redraw(pMe->pIMenuCtlList);
}
void ProcessRecvData(PicDownload *pMe)
{
	switch(pMe->m_RecvDataHead.dwCommandId)
	{
	case SET_FILE_LIST:
		{
			SetFileList(pMe,pMe->m_pbRecvData,pMe->m_RecvDataHead.dwSize);
			pMe->appState = enFileList;
		}
		break;
	case SET_FILE:
		{
			SetFileData(pMe,pMe->m_pbRecvBuffer,pMe->m_RecvDataHead.dwSize);
			pMe->appState = enView;
		}
		break;
	}
}
void UpdateScreen(PicDownload *pMe)
{
	switch(pMe->appState)
	{
	case enFileList:
		break;
	case enWait:
		{
			AEERect rect;
			AECHAR buffer[20]={0};
			rect.x = 0;
			rect.y= 0;
			rect.dx = pMe->DeviceInfo.cxScreen;
			rect.dy = pMe->DeviceInfo.cyScreen;
			IDISPLAY_FillRect(pMe->pIDisplay,&rect,MAKE_RGB(255,255,255));
			ISHELL_LoadResString(pMe->pIShell,RES_FILE,IDS_WAIT,buffer,sizeof(buffer));
			IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,buffer,-1,
				0,0,NULL,
				IDF_ALIGN_CENTER|IDF_ALIGN_MIDDLE);
		}
		break;
	case enError:
		{
			AEERect rect;
			AECHAR buffer[20]={0};
			rect.x = 0;
			rect.y= 0;
			rect.dx = pMe->DeviceInfo.cxScreen;
			rect.dy = pMe->DeviceInfo.cyScreen;
			IDISPLAY_FillRect(pMe->pIDisplay,&rect,MAKE_RGB(255,255,255));
			ISHELL_LoadResString(pMe->pIShell,RES_FILE,pMe->m_nErrorId,buffer,sizeof(buffer));
			IDISPLAY_DrawText(pMe->pIDisplay,AEE_FONT_NORMAL,buffer,-1,
				0,0,NULL,
				IDF_ALIGN_CENTER|IDF_ALIGN_MIDDLE);
		}
		break;
	case enView:
	case enView2:
		IIMAGE_Draw(pMe->m_pIImage,0,0);
		break;
	}
	IDISPLAY_Update(pMe->pIDisplay);
}
static void PicDownload_MainLoop(PicDownload *pMe)
{
	ISHELL_SetTimerEx(pMe->pIShell,80,&pMe->cbMainTimer);
	NetworkProcess(pMe);
	UpdateScreen(pMe);

}
boolean PicDownload_InitAppData(PicDownload* pMe)
{
	pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
	ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);
	pMe->pIDisplay = pMe->a.m_pIDisplay;
	pMe->pIShell   = pMe->a.m_pIShell;
	PicDownload_InitMainMenu(pMe);
	pMe->m_nNetState = -1;
	CALLBACK_Init(&pMe->cbMainTimer,PicDownload_MainLoop,pMe);
	return TRUE;
}
void PicDownload_InitMainMenu(PicDownload* pMe)
{
	AEERect rect;
	ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MENUCTL,(void**)&pMe->pIMenuCtlMain);

	rect.x = 0;
	rect.y = 0;
	rect.dx = pMe->DeviceInfo.cxScreen;
	rect.dy = pMe->DeviceInfo.cyScreen;
	IMENUCTL_SetRect(pMe->pIMenuCtlMain,&rect);
	IMENUCTL_SetTitle(pMe->pIMenuCtlMain,RES_FILE,IDS_MAINMENU_TITLE,NULL);
	IMENUCTL_AddItem(pMe->pIMenuCtlMain,RES_FILE,IDS_MAINMENU_DOWNLOAD,IDS_MAINMENU_DOWNLOAD,NULL,IDS_MAINMENU_DOWNLOAD);
	IMENUCTL_AddItem(pMe->pIMenuCtlMain,RES_FILE,IDS_MAINMENU_VIEW,IDS_MAINMENU_VIEW,NULL,IDS_MAINMENU_VIEW);
	IMENUCTL_AddItem(pMe->pIMenuCtlMain,RES_FILE,IDS_MAINMENU_EXIT,IDS_MAINMENU_EXIT,NULL,IDS_MAINMENU_EXIT);
	IMENUCTL_EnableCommand(pMe->pIMenuCtlMain,TRUE);

	ISHELL_CreateInstance(pMe->pIShell,AEECLSID_MENUCTL,(void**)&pMe->pIMenuCtlList);
	IMENUCTL_SetRect(pMe->pIMenuCtlList,&rect);
	IMENUCTL_SetTitle(pMe->pIMenuCtlList,RES_FILE,IDS_LIST_TITLE,NULL);
	IMENUCTL_EnableCommand(pMe->pIMenuCtlList,TRUE);

}
void PicDownload_FreeAppData(PicDownload* pMe)
{
	if(pMe->pIMenuCtlMain)
	{
		IMENUCTL_Release(pMe->pIMenuCtlMain);
		pMe->pIMenuCtlMain = NULL;
	}
	if(pMe->pIMenuCtlList)
	{
			IMENUCTL_Release(pMe->pIMenuCtlList);
		pMe->pIMenuCtlList = NULL;
	}
	if(pMe->m_pbRecvBuffer)
	{
		FREE(pMe->m_pbRecvBuffer);
		pMe->m_pbRecvBuffer = NULL;
	}
	if(pMe->pSocket)
	{
		ISOCKET_Cancel(pMe->pSocket,NULL,NULL);
		ISOCKET_Release(pMe->pSocket);
		pMe->pSocket = NULL;
	}
	if(pMe->pNetMgr)
	{
		INETMGR_Release(pMe->pNetMgr);
		pMe->pNetMgr = NULL;
	}
	if(pMe->m_pIImage)
	{
		IIMAGE_Release(pMe->m_pIImage);
		pMe->m_pIImage = NULL;
	}
}

void PicDownload_ChangeState(PicDownload *pMe)
{
}
boolean PicDownload_MainMenuHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch(eCode)
	{
	case EVT_COMMAND:
		{
			switch(wParam)
			{

⌨️ 快捷键说明

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