?? picdownload.c
字號:
#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 + -