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

📄 net.c

📁 这一款新闻类业务的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "newsddt.h"


boolean	Net_Init(Newsddt * pme)
{	
	WebOpt awo[12];
	int i = 0;

	AECHAR wszVer[16];
	char szVer[16];
	char szPLAT[16];
	char szIMSI[32];
	//char szPT[16];
	//char szLT[16];

	//AEERect rc;


	if(pme->m_pIWeb)
		IWEB_Release(pme->m_pIWeb);
	ISHELL_CreateInstance(pme->a.m_pIShell, AEECLSID_WEB, (void **)(&pme->m_pIWeb));

	awo[i].nId  = WEBOPT_FLAGS;
	awo[i].pVal = (void *)(WEBREQUEST_REDIRECT | WEBREQUEST_FORCENEWCONN);
	i++;

	awo[i].nId  = WEBOPT_USERAGENT;
	awo[i].pVal = (void *)"JTB";
	i++;

	awo[i].nId  = WEBOPT_HEADER;
	awo[i].pVal = (void *)"Content-Type:application/x-www-form-urlencoded";
	i++;

	awo[i].nId  = WEBOPT_HEADER;
	SPRINTF(szPLAT, "PLAT:%d\r\n", pme->m_dwPlatformID);
	awo[i].pVal = (void *)szPLAT;
	i++;

	awo[i].nId  = WEBOPT_HEADER;
	ISHELL_GetAppVersion(pme->a.m_pIShell, wszVer, sizeof(wszVer));
	STRCPY(szVer, "VER:");
	WSTRTOSTR(wszVer, szVer + STRLEN(szVer), sizeof(szVer) - STRLEN(szVer));
	STRCAT(szVer, "\r\n");
	awo[i].pVal = (void *)szVer;
	i++;

	awo[i].nId  = WEBOPT_HEADER;
#ifdef AEE_SIMULATOR
	SPRINTF(szIMSI, "IMSI:%s\r\n", "460030900000000");
#else
	SPRINTF(szIMSI, "IMSI:%s\r\n", pme->m_szMobileID);
#endif
	awo[i].pVal = (void *)szIMSI;
	i++;

	//awo[i].nId  = WEBOPT_HEADER;
	//SPRINTF(szPT, "PT:%d\r\n", pme->m_pt);
	//awo[i].pVal = (void *)szPT;
	//i++;

	//awo[i].nId  = WEBOPT_HEADER;
	//SPRINTF(szLT, "LT:%d\r\n", pme->m_lt);
	//awo[i].pVal = (void *)szLT;
	//i++;

	awo[i].nId  = WEBOPT_END;
	IWEB_AddOpt(pme->m_pIWeb, awo);

	ISHELL_CreateInstance(pme->a.m_pIShell, AEECLSID_WEBUTIL, (void **)(&pme->m_pIWebUtil));

	pme->m_pIWebResp = NULL;
	pme->m_pWebBody = NULL;
	pme->m_pszLocation = NULL;
	pme->m_pszContentType = NULL;
	pme->m_pszParam = NULL;

	//载入状态字符串
	return TRUE;
}


void Net_Free(Newsddt * pme)
{
	FREEIF(pme->m_pszParam);
	pme->m_pszParam = NULL;
	Net_Stop(pme);
	if(pme->m_pIWeb)
		IWEB_Release(pme->m_pIWeb);
	pme->m_pIWeb = NULL;
	if(pme->m_pIWebUtil)
		IWEBUTIL_Release(pme->m_pIWebUtil);
	pme->m_pIWebUtil = NULL;
	FREEIF(pme->m_pszLocation);
	pme->m_pszLocation = NULL;
	FREEIF(pme->m_pszContentType);
	pme->m_pszContentType = NULL;

}

void Net_Stop(Newsddt * pme)
{
	ISHELL_CancelTimer(pme->a.m_pIShell, (PFNNOTIFY)Net_Timeout, pme);
	if(!pme->m_bWeb)
		return;
	if(pme->m_cbWebBody.pfnCancel != NULL)
	{
		CALLBACK_Cancel(&pme->m_cbWebBody);
	}
	if(pme->m_cbWebResp.pfnCancel != NULL)
	{
		CALLBACK_Cancel(&pme->m_cbWebResp);
	}
	
	if(pme->m_pIWebResp != NULL)
	{
		IWEBRESP_Release(pme->m_pIWebResp);
		pme->m_pIWebResp = NULL;
	}
	FREEIF(pme->m_pWebBody);
	pme->m_pWebBody = NULL;
	pme->m_dwRecvSize = 0;
	pme->m_bWeb = FALSE;
}


boolean MakeURL(Newsddt * pme, const char * cpszParam)
{
    //精彩推荐
    char *pWebHost = NULL;
    if (pme->m_eAppState == APP_STATE_Recomand)
    {
        pWebHost = WEB_HOST_RECOMMEND;
    }
    else
    {
        pWebHost = WEB_HOST;
    }

	if(cpszParam && (pme->m_pszParam != cpszParam))
	{
		FREEIF(pme->m_pszParam);
		pme->m_pszParam = STRDUP(cpszParam);
	}
    if(pme->m_pszLocation)
    {
        if(!STRBEGINS("http://", pme->m_pszLocation))
        {
            SPRINTF(pme->m_pszURL, "%s%s", pWebHost, cpszParam);    //精彩推荐
        }
        else
        {
            SPRINTF(pme->m_pszURL, "%s%s", pWebHost, pme->m_pszParam);
        }
    }
    else
        SPRINTF(pme->m_pszURL, "%s%s", pWebHost, cpszParam);        //精彩推荐

    DBGPRINTF("**%s**",pme->m_pszURL);
	return TRUE;
}


boolean SendRequest(Newsddt * pme)
{
	CALLBACK_Init(&pme->m_cbWebResp, GotResponse, pme);

	IWEB_GetResponse(pme->m_pIWeb,
						(pme->m_pIWeb, &pme->m_pIWebResp, &pme->m_cbWebResp, pme->m_pszURL,
                        WEBOPT_HANDLERDATA, pme, 
                        WEBOPT_HEADER, "X-Method: GET\r\n",
                        WEBOPT_HEADERHANDLER, GotHeader, 
                        WEBOPT_STATUSHANDLER, GotStatus, 
                        WEBOPT_END));

	pme->m_bWeb = TRUE;
	ISHELL_SetTimer(pme->a.m_pIShell, WEB_TIMEOUT, (PFNNOTIFY)Net_Timeout, pme);
	return TRUE;
}


void GotHeader(void *p, const char *cpszName, GetLine *pglVal)
{
	Newsddt * pme = (Newsddt *)p;

	if(!pme->m_bWeb)
		return;

	if ((char *)0 != cpszName)
	{
		ISHELL_SetTimer(pme->a.m_pIShell, WEB_TIMEOUT, (PFNNOTIFY)Net_Timeout, pme);
		//DBGPRINTF("GotHeader: %s = %s", cpszName, pglVal->psz);
        //精彩推荐
        if(0 == STRICMP(cpszName, "Notify"))
        {
            pme->m_nDataType = ATOI(pglVal->psz);
        }
        else if(0 == STRICMP(cpszName, "Location"))
		{
			if(pme->m_pszLocation == NULL || 0 != STRICMP(pme->m_pszLocation, pglVal->psz))
			{
				FREEIF(pme->m_pszLocation);
				pme->m_pszLocation = STRDUP(pglVal->psz);
				return;
			}
		}
		if(0 == STRICMP(cpszName, "Content-Length"))
		{
			pme->m_dwContentSize = STRTOUL(pglVal->psz, NULL, 0);
			return;
		}
/*
		if(0 == STRICMP(cpszName, "Content-Type"))
		{
			if(pme->m_pszContentType == NULL || 0 != STRICMP(pme->m_pszContentType, pglVal->psz))
			{
				FREEIF(pme->m_pszContentType);
				pme->m_pszContentType = GetPartString(STRLOWER(pglVal->psz), ';', 0);
				return;
			}		
		}
*/
		if ( 0 == STRICMP(cpszName, "Notify") )
		{
			if(pme->m_pszContentType == NULL || 0 != STRICMP(pme->m_pszContentType, pglVal->psz))
			{
				FREEIF(pme->m_pszContentType);
				pme->m_pszContentType = GetPartString(STRLOWER(pglVal->psz), ';', 0);
				return;
			}
		}
      }
}


void GotStatus(void *p, WebStatus ws, void *pVal)
{
   Newsddt * pme = (Newsddt *)p;

   ISHELL_SetTimer(pme->a.m_pIShell, WEB_TIMEOUT, (PFNNOTIFY)Net_Timeout, pme);
   pme->m_ws = ws;
   DrawStatus(pme);
}

void DrawStatus(Newsddt * pme)
{
	AECHAR szText[16]={0};
	AEERect rc;

	rc.x = 0;
	rc.dy = BAR_BOTTOM;
	rc.y = pme->m_nDevHeight - rc.dy;
	rc.dx = pme->m_nDevWidth;

	switch(pme->m_ws)
	{
	case WEBS_STARTING:
		WSTRCPY(szText, pme->m_wszCon);
		break;
	case WEBS_GETHOSTBYNAME:
		WSTRCPY(szText, pme->m_wszCon);
		break;
	case WEBS_CONNECT:
		WSTRCPY(szText, pme->m_wszCon);
		break;
	case WEBS_SENDREQUEST:
		WSTRCPY(szText, pme->m_wszSend);
		break;
	case WEBS_READRESPONSE:
		WSTRCPY(szText, pme->m_wszRecv);
		if(pme->m_dwContentSize > 0)
		{
			char szTmp[8];
			SPRINTF(szTmp, "(%d%%)", pme->m_dwRecvSize * 100 / pme->m_dwContentSize);
			STRTOWSTR(szTmp, szText + WSTRLEN(szText), sizeof(szText));
		}
		break;
	default:
		break;
	}

	if(WSTRLEN(szText) > 0)
	{
		RGBVAL rgb;
		IDISPLAY_DrawRect(pme->a.m_pIDisplay, &rc, RGB_TEXT, RGB_BK, IDF_RECT_FRAME | IDF_RECT_FILL);
		rgb = IDISPLAY_SetColor(pme->a.m_pIDisplay, CLR_USER_TEXT, RGB_TEXT);
		IDISPLAY_DrawText(pme->a.m_pIDisplay, AEE_FONT_NORMAL, szText, -1, rc.x + 2, rc.y, &rc, IDF_ALIGN_LEFT | IDF_TEXT_TRANSPARENT);
		IDISPLAY_SetColor(pme->a.m_pIDisplay, CLR_USER_TEXT, rgb);
		IDISPLAY_Update(pme->a.m_pIDisplay);
	}
}


void GotResponse(void *p)
{
	Newsddt * pme = (Newsddt *)p;
	WebRespInfo * pwri;

	if(!pme->m_bWeb)
		return;
	pwri = IWEBRESP_GetInfo(pme->m_pIWebResp);
	
	//DBGPRINTF("GotResponse: %d", pwri->nCode);
	switch(pwri->nCode)
	{
	case 302:	//重定向处理,仅登录的时候可能
		if(pme->m_pIWebResp)
			IWEBRESP_Release(pme->m_pIWebResp);
		pme->m_pIWebResp = NULL;
		MakeURL(pme, pme->m_pszParam);
		SendRequest(pme);
		break;
	case 200:	//正确,接收
		RecvWebBody(pme);
		return;
	case 404:	//出现错误(不存在、超时等)
		ShowErrMsg(pme, IDS_ERR_404, 0);
		break;
	default:
		ShowErrMsg(pme, IDS_ERR_WEB, pwri->nCode);
		break;
	}

	if(pme->m_pIWebResp)
	{
		IWEBRESP_Release(pme->m_pIWebResp);
		pme->m_pIWebResp = NULL;
	}
}

⌨️ 快捷键说明

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