📄 downloadbmp.c
字号:
FUNCTION: WebAction_Stop
DESCRIPTION:
Halts a web transaction, wrapped/represented by a WebAction
PARAMETERS:
pwa: the WebAction
DEPENDENCIES:
None
RETURN VALUE:
None
SIDE EFFECTS:
None
===========================================================================*/
//停止
static void WebAction_Stop(WebAction *pwa)
{
// this cancels any pending web transaction, or readable on the
// response body. if nothing is pending, this has no effect
CALLBACK_Cancel(&pwa->cb);
// then clean up, if necessary
if ((char *)0 != pwa->pszPostData) {
*pwa->pszPostData = 1; // write delimiter back in, if any
pwa->pszPostData = 0;
}
ReleaseObj((void **)&pwa->pipPostData);
ReleaseObj((void **)&pwa->piGetLine); // let body go
ReleaseObj((void **)&pwa->piWResp); // let response go
}
/*===========================================================================
FUNCTION: WebAction_ReadLines
DESCRIPTION:
consumes the body of a web response, line by line, is called when the
IGetLine that represents the body is readable.
PARAMETERS:
pwa: wrapper for the web transaction
pszUrl: the URL to go GET/POST
DEPENDENCIES:
None
RETURN VALUE:
None
SIDE EFFECTS:
None
===========================================================================*/
//从服务器读取文件信息
static void WebAction_ReadLines(void *p)
{
int rv;
GetLine gl;
WebAction *pwa = (WebAction *)p;
CDBApp * pApp = pwa->pParent;
// read a line
rv = IGETLINE_GetLine(pwa->piGetLine, &gl, IGETLINE_LF);
if (rv == IGETLINE_WAIT) {
CALLBACK_Init(&pwa->cb, WebAction_ReadLines, pwa);
IGETLINE_Peekable(pwa->piGetLine, &pwa->cb);
return;
}
// process line
pwa->nBytes += gl.nLen + IGETLINE_EOLSize(rv);
DB_WriteFile(pApp,gl.psz,gl.nLen,pwa->nBytes-gl.nLen-IGETLINE_EOLSize(rv));
//ND_Print(pApp, "%s\n", gl.psz, NULL, TRUE);
/*if (pApp->m_bRS) {
// show all data
ND_Print(pApp, "%s\n", gl.psz, NULL, TRUE);
} else {
// show one hash mark per line (truncated or otherwise)
ND_Print(pApp, "#");
}*/
// if stream has not reached EOF or ERROR
if (!IGETLINE_Exhausted(rv)) {
// 等待更多的数据
CALLBACK_Init(&pwa->cb, WebAction_ReadLines, pwa);
IGETLINE_Readable(pwa->piGetLine, &pwa->cb);
return;
}
// no more data
if (rv == IGETLINE_ERROR) {
ND_Print(pApp, "\n** error\n");
} else {
ISHELL_LoadResString(pApp->a.m_pIShell,DOWNLOADBMP_RES_FILE,IDC_END,pApp->m_AnimalTitle,sizeof(pApp->m_AnimalTitle));
//ND_Print(pApp, "\n** end\n");
}
/* if (pApp->m_bRT) {
uint32 uNow = GETUPTIMEMS();
ND_Print(pApp,
"** %d bytes\n"
"** %dB/s\n"
"** %dms et (recv)\n"
"** %dms et (total)\n",
pwa->nBytes,
pwa->nBytes * 1000 / MAX(1,uNow - pwa->uRecvStart),
uNow - pwa->uRecvStart,
uNow - pwa->uStart);
}*/
// am done, _Stop cleans up
//显示下在的图象
DB_LoadBMPFromBMPFile(pApp);
WebAction_Stop(pwa);
}
static void ReleaseObj(void ** ppObj)
{
if (*ppObj) {
(void)IBASE_Release(((IBase *)*ppObj));
*ppObj = NULL;
}
}
static void ND_Print(CDBApp *pApp, char *pszFmt, ...)
{
char buf[100];
va_list argptr;
va_start(argptr, pszFmt);
if( pApp->m_pIStatic )
{
if (VSNPRINTF(buf, sizeof(buf), pszFmt, argptr) >= 0) {
ISTATIC_SetTextEx(pApp->m_pIStatic, (byte*)buf, NULL, TRUE);
ISTATIC_Redraw(pApp->m_pIStatic);
}
}
va_end(argptr);
}
//得到网页信息
static void ND_StartTest(CDBApp* pApp, const char* pszSubmit)
{
AEERect rc;
IStatic * pStatic = NULL;
char *pszIter;
pApp->m_pszHost = "";
pApp->m_pszURL = "";
pApp->m_pszMsg = "";
// Duplicte form data so we can write over it
StrReplace(&pApp->m_pszFormData, pszSubmit);
// Locate, decode, and process form fields
pszIter = pApp->m_pszFormData;
if (!pszIter) {
return;
}
pszIter = STRCHREND(pszIter, '?');
if (*pszIter) {
++pszIter;
}
{
IWebUtil *piwu;
WebFormField wff;
// go get me a gosh-darn parsin' machine
if (SUCCESS != ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_WEBUTIL,
(void **)&piwu)) {
return;
}
// all pointers into a string we STRDUP'ed, all NULL terminated
// by IWebUtil in place for me
// IWebUtil can parse a bunch at a time, but we'll just iterate here
while (0 != IWEBUTIL_ParseFormFields(piwu,&pszIter,&wff,1,0)) {
boolean bOn = STREQ(wff.pcValue, "on");
if (STREQ(wff.pcName, "HOST")) {
pApp->m_pszHost = wff.pcValue;
} else if (STREQ(wff.pcName, "URL")) {
pApp->m_pszURL = wff.pcValue;
} else if (STREQ(wff.pcName, "MSG")) {
pApp->m_pszMsg = wff.pcValue;
}/* else if (STREQ(wff.pcName, "RS")) {
pApp->m_bRS = bOn;
} else if (STREQ(wff.pcName, "RT")) {
pApp->m_bRT = bOn;
} else if (STREQ(wff.pcName, "PROTOCOL")) {
if (STREQ(wff.pcValue, "1")) {
pApp->m_bTCP = 1;
}
}*/
}
IWEBUTIL_Release(piwu);
piwu = 0;
}
pApp->m_nDataLength = STRLEN(pApp->m_pszMsg);
// Create Static Control to Display Messages
if (ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_STATIC,(void**)&pApp->m_pIStatic) == AEE_SUCCESS)
pStatic = pApp->m_pIStatic; // Cache Pointer
else
return;
ISTATIC_SetRect(pStatic, &pApp->m_nScreenRect);
ISTATIC_SetProperties(pStatic, ST_ASCII|ST_NOSCROLL);
ISTATIC_SetActive(pStatic, 1);
// Disable Browser
SETAEERECT(&rc, 0, 0, 0, 0);
IHTMLVIEWER_SetRect(pApp->m_pHTMLViewer, &rc);
// Clear Screen
IDISPLAY_ClearScreen(pApp->a.m_pIDisplay);
ISHELL_LoadResString(pApp->a.m_pIShell,DOWNLOADBMP_RES_FILE,IDC_START,pApp->m_AnimalTitle,sizeof(pApp->m_AnimalTitle));
//显示动画
pApp->m_bSuspended=FALSE;
StartProgressDisplay(pApp);
// ND_Print(pApp, "** starting...\n");
FOR_ALL_WEBACTIONS(pApp, p, WebAction_Start(p, pApp->m_pszHost) );
/*if (STRBEGINS(JUMP_ECHOTEST, pszSubmit)) {
// Make note of type of cleanup to be performed when we exit this state
//pApp->m_pfnViewCleanup = ND_EchoCleanup;
// Start Echo Test
// Echoer_Start(pApp);
} else {
// Make note of type of cleanup to be performed when we exit this state
//pApp->m_pfnViewCleanup = ND_HTTPCleanup;
// Start HTTP test(s)
FOR_ALL_WEBACTIONS(pApp, p, WebAction_Start(p, pApp->m_pszURL) );
}*/
}
//将从服务器得到的文件信息写入文件
static DB_WriteFile(CDBApp * pApp,char *buffer, int32 bufferlength,int32 length)
{
IFile *pf;
if(length>0)
{
pf = IFILEMGR_OpenFile(pApp->m_pFileMgr, "aa.bmp", _OFM_READWRITE);
IFILE_Seek(pf,_SEEK_START,length);
}else
{
if(IFILEMGR_Test(pApp->m_pFileMgr, "aa.bmp")!=SUCCESS)
{
pf=IFILEMGR_OpenFile(pApp->m_pFileMgr, "aa.bmp", _OFM_CREATE);
}
else
{
pf = IFILEMGR_OpenFile(pApp->m_pFileMgr, "aa.bmp", _OFM_READWRITE);
}
}
IFILE_Write(pf,buffer,bufferlength);
IFILE_Release(pf);
}
static boolean DB_LoadBMPFromBMPFile (CDBApp*pApp)
{
IImage *pImage = NULL;
//AECHAR* pImageFile = NULL;
char pImageFile[]="aa.bmp";
//Update Screen
//DB_Reset(pApp);
pApp->m_bIsProgressDisp = FALSE;
ISHELL_CancelTimer(pApp->a.m_pIShell,(PFNNOTIFY)(StartProgressDisplay),pApp);
IIMAGE_Stop(pApp->m_pProgressImages[PROG_ANIM]);
//IDISPLAY_ClearScreen(pApp->a.m_pIDisplay);
pImage = ISHELL_LoadImage(pApp->a.m_pIShell, pImageFile);
if( !pImage )
return EFAILED; // load failed
// draw picture at (0,0)
IIMAGE_Draw(pImage, 0, 0);
// Upadte Screen
IDISPLAY_Update(pApp->a.m_pIDisplay);
// Release IIMAGE
IIMAGE_Release( pImage );
return SUCCESS;
}
//显示动画
static void StartProgressDisplay(CDBApp *pApp)
{
AEERect r;
AECHAR title[60];
if (!pApp->m_bSuspended)
{
pApp->m_bIsProgressDisp = TRUE;
SETAEERECT(&r, (pApp->m_nScreenRect.dx - CX_PROG_DISPLAY)/2, (pApp->m_nScreenRect.dy - CY_PROG_DISPLAY)/2,
CX_PROG_DISPLAY, CY_PROG_DISPLAY);
IDISPLAY_EraseRect(pApp->a.m_pIDisplay, &r);
IDISPLAY_FrameRect(pApp->a.m_pIDisplay, &r);
ISHELL_LoadResString(pApp->a.m_pIShell,DOWNLOADBMP_RES_FILE,IDB_DOWNLOAD,title,sizeof(title));
IDISPLAY_DrawText(pApp->a.m_pIDisplay,AEE_FONT_BOLD,title,-1,0,0,NULL,IDF_ALIGN_CENTER);
IDISPLAY_DrawText(pApp->a.m_pIDisplay,AEE_FONT_BOLD,pApp->m_AnimalTitle,-1,(pApp->m_nScreenRect.dx - CX_PROG_DISPLAY)/2+3,
(pApp->m_nScreenRect.dy - CY_PROG_DISPLAY)/2+3,&r,IDF_ALIGN_CENTER);
IIMAGE_Draw(pApp->m_pProgressImages[PROG_PHONE], r.x + 20, r.y + 32);
IIMAGE_Draw(pApp->m_pProgressImages[PROG_FILE], r.x + 62, r.y + 44);
IIMAGE_Start(pApp->m_pProgressImages[PROG_ANIM], r.x + 38, r.y + 48);
ISHELL_SetTimer(pApp->a.m_pIShell, 1000, (PFNNOTIFY)(StartProgressDisplay), pApp);
}
pApp->m_nTotleTimes++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -