?? picdownload.c
字號:
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;
}
//已經(jīng)連接
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)
{
//這個地方應(yīng)該報錯
}
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -