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

📄 picdownload.c

📁 brew平台 通过网络下载图片 并显示
💻 C
📖 第 1 页 / 共 2 页
字号:
			case IDS_MAINMENU_DOWNLOAD:
				IMENUCTL_SetActive(pMe->pIMenuCtlMain,FALSE);
				PicDownload_InitNetwork(pMe);
				pMe->appState = enWait;
				return TRUE;
			case IDS_MAINMENU_VIEW:
				IMENUCTL_SetActive(pMe->pIMenuCtlMain,FALSE);
				{
					IFileMgr *pIFileMgr;
					FileInfo fileInfo;
					AECHAR buffer[16]={0};
					int i = 0;
					ISHELL_CreateInstance(pMe->pIShell,AEECLSID_FILEMGR,(void**)&pIFileMgr);
					IFILEMGR_EnumInit(pIFileMgr,"*.png",FALSE);
					IMENUCTL_DeleteAll(pMe->pIMenuCtlList);
					while(IFILEMGR_EnumNext(pIFileMgr,&fileInfo))
					{
						MEMSET(buffer,0,sizeof(buffer));
						STRTOWSTR(fileInfo.szName,buffer,sizeof(buffer));
						IMENUCTL_AddItem(pMe->pIMenuCtlList,RES_FILE,-1,i,buffer,i);
						i++;
					}
					IFILEMGR_Release(pIFileMgr);
					IMENUCTL_SetActive(pMe->pIMenuCtlList,TRUE);
					pMe->appState = enFileView;
				}
				return TRUE;
			case IDS_MAINMENU_EXIT:
				ISHELL_CloseApplet(pMe->pIShell,FALSE);
				return TRUE;
			}
		}
		break;
	default:
		if(IMENUCTL_HandleEvent(pMe->pIMenuCtlMain,eCode,wParam,dwParam))
		{
			return TRUE;
		}
		else
		{
			if(eCode==EVT_KEY&&wParam==AVK_CLR)
			{
				return FALSE;
			}
		}
	}
	return FALSE;
}

void PicDownload_InitNetwork(PicDownload *pMe)
{
	ISHELL_CreateInstance(pMe->pIShell, AEECLSID_NET, (void **)&pMe->pNetMgr);
	INETMGR_SetLinger(pMe->pNetMgr,100);
	pMe->pSocket = INETMGR_OpenSocket(pMe->pNetMgr, AEE_SOCK_STREAM);
	CALLBACK_Init(&pMe->cbConnect,GetHostByName,pMe);
	pMe->m_nSendSize = 0;
	pMe->m_nRecvSize = 0;
	pMe->m_bRecvBuf = FALSE;
	pMe->m_bHasSend = FALSE;
	pMe->m_nNetState = -1;
	pMe->m_bIsReadBuf = FALSE;
	SetTimeOut(pMe,30);
	pMe->m_iPort = 2050;
	INETMGR_GetHostByName(pMe->pNetMgr, &pMe->m_DNSRes, "127.0.0.1", &pMe->cbConnect);
}
static void GetHostByName(PicDownload *pMe)
{
	switch(pMe->m_DNSRes.nResult)
	{
	case AEE_NET_BADDOMAIN:
	case AEE_NET_UNKDOMAIN: 
	case AEE_NET_ETIMEDOUT:
	case EUNSUPPORTED:
	case ENOMEMORY:
		//给出错误提示信息
		break;
	default:
		if(pMe->m_DNSRes.nResult > 0) // 成功解析
		{
			uint16 iPort;
			int nRes;
			iPort = HTONS(pMe->m_iPort);
			SetTimeOut(pMe,30);
			if((nRes = ISOCKET_Connect(pMe->pSocket, pMe->m_DNSRes.addrs[0], iPort, 
				(PFNCONNECTCB)CBConnect, (void *)pMe)) != AEE_NET_SUCCESS)
			{
				if (nRes != AEE_NET_WOULDBLOCK)
				{
					ErrorTip(pMe,IDS_ERROR_1);
				}
			}
		}
		else
		{
			ErrorTip(pMe,IDS_ERROR_1);
		}
		break;
	}
}

void SetTimeOut(PicDownload *pMe,int32 timeOut)
{
	ISHELL_CancelTimer(pMe->pIShell, (PFNNOTIFY)TimeOut, pMe);
	ISHELL_SetTimer(pMe->pIShell,timeOut*1000 , (PFNNOTIFY)TimeOut, pMe);
}
void CancelTimeOut(PicDownload *pMe)
{
	ISHELL_CancelTimer(pMe->pIShell, (PFNNOTIFY)TimeOut, pMe);
}
void TimeOut(PicDownload *pMe)
{
	ErrorTip(pMe,IDS_ERROR_TIMEOUT);
}

static void CBConnect(PicDownload *pMe,int nError)
{
	CancelTimeOut(pMe);
	if(ISOCKET_GetLastError(pMe->pSocket)!=AEE_NET_SUCCESS)
	{
		// 给出错误提示信息
		ErrorTip(pMe,IDS_ERROR_1);
		return;
	}
	//已经连接
	pMe->m_nNetState = 0;
	pMe->m_SendDataHead.dwCommandId = GET_FILE_LIST;
	pMe->m_SendDataHead.dwSize = 0;
	Send(pMe,&pMe->m_SendDataHead,sizeof(pMe->m_SendDataHead));
	Recv(pMe,&pMe->m_RecvDataHead,sizeof(pMe->m_RecvDataHead));
	pMe->m_bIsRecv = TRUE;
}
void ErrorTip(PicDownload *pMe,int16 errorId)
{
	pMe->appState = enError;
	pMe->m_nErrorId = errorId;
}


static void CBSend(PicDownload *pMe)
{
	SendData(pMe,pMe->m_pbSendData + pMe->m_nSendSize,pMe->m_nSendNum - pMe->m_nSendSize);
}

static void CBRecv(PicDownload *pMe)
{
	RecvData(pMe,pMe->m_pbRecvData+pMe->m_nRecvSize,pMe->m_nRecvNum-pMe->m_nRecvSize);
}

void SendData(PicDownload *pMe,byte *pbData,int32 nSendSize)
{
	int32 nResult;
	while(nSendSize > 0) 
	{
		SetTimeOut(pMe,30);
		nResult = ISOCKET_Write(pMe->pSocket,pbData, (uint16)nSendSize);
		if(nResult == AEE_NET_WOULDBLOCK) 
		{
			SetTimeOut(pMe,30);
			ISOCKET_Writeable(pMe->pSocket, (PFNNOTIFY)CBSend, (void *)pMe);
			return;
		}
		else if(nResult == AEE_NET_ERROR) 
		{
			ErrorTip(pMe,IDS_ERROR_1);
			return;
		}
		pMe->m_nSendSize += nResult;
		nSendSize -= nResult;
		pbData += nResult;
	}
	if(nSendSize == 0) 
	{
		pMe->m_nSendSize = 0;
		pMe->m_bHasSend = TRUE;
	}
	CancelTimeOut(pMe);
}

void RecvData(PicDownload *pMe,byte *pbData,int32 nRecvSize)
{
	int nResult;
	while(nRecvSize > 0)
	{
		SetTimeOut(pMe,30);
		nResult = ISOCKET_Read(pMe->pSocket, pbData, nRecvSize);
		if(nResult == AEE_NET_WOULDBLOCK)
		{
			SetTimeOut(pMe,30);
			ISOCKET_Readable(pMe->pSocket, (PFNNOTIFY)CBRecv, (void*)pMe); 
			return;
		}
		else if(nResult == AEE_NET_ERROR) 
		{
			ErrorTip(pMe,IDS_ERROR_1);
			return;
		}
		else if(nResult > 0)
		{
			pMe->m_nRecvSize += nResult;
			nRecvSize -= nResult;
			pbData += nResult;
		}
		else
		{
			ErrorTip(pMe,IDS_ERROR_1);
			return;
		}
	}
	if(nRecvSize == 0)
	{
		pMe->m_nRecvSize = 0;
		pMe->m_bRecvBuf = TRUE;
	}
	CancelTimeOut(pMe);
}
void Send(PicDownload *pMe,void *pData,int32 iSize)
{
	if(!pMe->pSocket)
	{
		return;
	}
	pMe->m_pbSendData = (byte*)pData;
	pMe->m_nSendNum = iSize;
	pMe->m_bHasSend = FALSE;
	ISOCKET_Cancel(pMe->pSocket, (PFNNOTIFY)CBSend, (void *)pMe);
	SendData(pMe,pMe->m_pbSendData,iSize);
}

void Recv(PicDownload *pMe,void *pData,int32 iSize)
{
	if(!pMe->pSocket)
	{
		return;
	}
	pMe->m_pbRecvData = (byte*)pData;
	pMe->m_nRecvNum = iSize;
	pMe->m_bRecvBuf = FALSE;
	ISOCKET_Cancel(pMe->pSocket, (PFNNOTIFY)CBRecv, (void *)pMe);
	RecvData(pMe,pMe->m_pbRecvData,iSize);
}
boolean PicDownload_FileListHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch(eCode)
	{
	case EVT_COMMAND:
		{
			pMe->m_nItemId = IMENUCTL_GetSel(pMe->pIMenuCtlList);
			IMENUCTL_SetActive(pMe->pIMenuCtlList,FALSE);
			{
				pMe->m_nSendBufferSize = 0;
				pMe->m_SendDataHead.dwCommandId = GET_FILE;
				pMe->m_SendDataHead.dwSize = sizeof(pMe->m_nItemId);
				MEMCPY(pMe->m_bSendBuffer,&pMe->m_SendDataHead,sizeof(pMe->m_SendDataHead));
				pMe->m_nSendBufferSize += sizeof(pMe->m_SendDataHead);
				MEMCPY(pMe->m_bSendBuffer+pMe->m_nSendBufferSize,&pMe->m_nItemId,sizeof(pMe->m_nItemId));
				pMe->m_nSendBufferSize += sizeof(pMe->m_nItemId);
				Send(pMe,pMe->m_bSendBuffer,pMe->m_nSendBufferSize);
				pMe->m_bIsRecv = TRUE;
				Recv(pMe,&pMe->m_RecvDataHead,sizeof(pMe->m_RecvDataHead));
				pMe->appState = enWait;
			}
			return TRUE;
		}
		break;
	default:
		if(IMENUCTL_HandleEvent(pMe->pIMenuCtlList,eCode,wParam,dwParam))
		{
			return TRUE;
		}
		else
		{
			if(eCode==EVT_KEY&&wParam==AVK_CLR)
			{
				return FALSE;
			}
		}
	}
	return FALSE;
}

void SetFileData(PicDownload *pMe,byte *pData,int size)
{
	byte *pBuffer = (byte*)MALLOC(size);
	IMemAStream *pIStream;
	if(pBuffer==NULL)
	{
		//这个地方应该报错
	}
	MEMCPY(pBuffer,pData,size);
	ISHELL_CreateInstance(pMe->pIShell, AEECLSID_MEMASTREAM, (void **)&pIStream);
	IMEMASTREAM_Set(pIStream,pBuffer,size,0,FALSE);
	if(pMe->m_pIImage)
	{
		IIMAGE_Release(pMe->m_pIImage);
	}
	ISHELL_CreateInstance(pMe->pIShell, AEECLSID_PNG, (void **)&pMe->m_pIImage);
	IIMAGE_SetStream(pMe->m_pIImage,(IAStream*)pIStream);
	pMe->m_nFileSize = size;
	IMEMASTREAM_Release(pIStream);
}
boolean PicDownload_ViewHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch(eCode)
	{
	case EVT_KEY:
		switch(wParam)
		{
		case AVK_CLR:
			{
				pMe->appState = enFileList;
				IMENUCTL_SetActive(pMe->pIMenuCtlList,TRUE);
				return TRUE;
			}
			break;
		case AVK_1:
			{
				IFileMgr *pIFileMgr;
				IFile *pIFile;
				CtlAddItem item;
				char buffer[20]={0};
				char buffer2[20] = {0};
				ISHELL_CreateInstance(pMe->pIShell,AEECLSID_FILEMGR,(void**)&pIFileMgr);
				IMENUCTL_GetItem(pMe->pIMenuCtlList,pMe->m_nItemId,&item);
				WSTRTOSTR(item.pText,buffer,sizeof(buffer));
				SPRINTF(buffer2,"%s.png",buffer);
				pIFile = IFILEMGR_OpenFile(pIFileMgr,buffer2,_OFM_CREATE);
				IFILE_Write(pIFile,pMe->m_pbRecvBuffer,pMe->m_nFileSize);
				IFILE_Release(pIFile);
				IFILEMGR_Release(pIFileMgr);
				return TRUE;
			}
			break;
		}
		break;
	}
	return FALSE;
}
boolean PicDownload_FileViewHandleEvent(PicDownload *pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	switch(eCode)
	{
	case EVT_COMMAND:
		{
			pMe->m_nItemId = IMENUCTL_GetSel(pMe->pIMenuCtlList);
			IMENUCTL_SetActive(pMe->pIMenuCtlList,FALSE);
			{
				CtlAddItem item;
				char buffer[20]={0};
				IMENUCTL_GetItem(pMe->pIMenuCtlList,pMe->m_nItemId,&item);
				WSTRTOSTR(item.pText,buffer,sizeof(buffer));
				if(pMe->m_pIImage)
				{
					IIMAGE_Release(pMe->m_pIImage);
				}
				pMe->m_pIImage = ISHELL_LoadImage(pMe->pIShell,buffer);
				pMe->appState = enView2;
			}
			return TRUE;
		}
		break;
	default:
		if(IMENUCTL_HandleEvent(pMe->pIMenuCtlList,eCode,wParam,dwParam))
		{
			return TRUE;
		}
		else
		{
			if(eCode==EVT_KEY&&wParam==AVK_CLR)
			{
				IMENUCTL_SetActive(pMe->pIMenuCtlList,FALSE);
				IMENUCTL_SetActive(pMe->pIMenuCtlMain,TRUE);
				pMe->appState = enMainMenu;
				return TRUE;
			}
		}
	}
	return FALSE;
}

⌨️ 快捷键说明

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