This commit is contained in:
327
CheckServer/WebReloadThread.cpp
Normal file
327
CheckServer/WebReloadThread.cpp
Normal file
@@ -0,0 +1,327 @@
|
|||||||
|
// WebReloadThread.cpp : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "CheckServer.h"
|
||||||
|
#include "WebReloadThread.h"
|
||||||
|
#include "MainFrm.h"
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// MSHTML 파서
|
||||||
|
#include <comdef.h>
|
||||||
|
#include <mshtml.h>
|
||||||
|
#pragma warning(disable : 4146) //see Q231931 for explaintation
|
||||||
|
#import <mshtml.tlb> no_auto_exclude
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <afxsock.h> // MFC socket extensions
|
||||||
|
#include <afxinet.h>
|
||||||
|
#include <atlbase.h>
|
||||||
|
|
||||||
|
#pragma comment(lib,"Wininet.lib")
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#define new DEBUG_NEW
|
||||||
|
#undef THIS_FILE
|
||||||
|
static char THIS_FILE[] = __FILE__;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CWebReloadThread
|
||||||
|
UINT CWebReloadThread::tm_CWebReloadThreadOnDoContinuous = ::RegisterWindowMessage( "CWebReloadThread OnDoContinuous" );
|
||||||
|
|
||||||
|
IMPLEMENT_DYNCREATE(CWebReloadThread, CWinThread)
|
||||||
|
|
||||||
|
CWebReloadThread::CWebReloadThread()
|
||||||
|
{
|
||||||
|
m_pCMainFrame = NULL;
|
||||||
|
m_hStopEvent = ::CreateEvent( NULL, TRUE, FALSE, NULL );
|
||||||
|
|
||||||
|
m_strURL[0] = _T("");
|
||||||
|
m_strURL[1] = _T("");
|
||||||
|
|
||||||
|
m_strNews[0] = _T("");
|
||||||
|
m_strNews[1] = _T("");
|
||||||
|
|
||||||
|
m_bFirst[0] = TRUE;
|
||||||
|
m_bFirst[1] = TRUE;
|
||||||
|
|
||||||
|
m_strError = _T("");
|
||||||
|
}
|
||||||
|
|
||||||
|
CWebReloadThread::~CWebReloadThread()
|
||||||
|
{
|
||||||
|
m_pCMainFrame = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CWebReloadThread::InitInstance()
|
||||||
|
{
|
||||||
|
// TODO: perform and per-thread initialization here
|
||||||
|
AfxOleInit();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CWebReloadThread::ExitInstance()
|
||||||
|
{
|
||||||
|
// TODO: perform any per-thread cleanup here
|
||||||
|
return CWinThread::ExitInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CWebReloadThread, CWinThread)
|
||||||
|
//{{AFX_MSG_MAP(CWebReloadThread)
|
||||||
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
||||||
|
ON_REGISTERED_THREAD_MESSAGE( tm_CWebReloadThreadOnDoContinuous, OnDoContinuous )
|
||||||
|
//}}AFX_MSG_MAP
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// CWebReloadThread message handlers
|
||||||
|
|
||||||
|
//DEL int CWebReloadThread::Run()
|
||||||
|
//DEL {
|
||||||
|
//DEL // TODO: Add your specialized code here and/or call the base class
|
||||||
|
//DEL
|
||||||
|
//DEL return CWinThread::Run();
|
||||||
|
//DEL }
|
||||||
|
|
||||||
|
|
||||||
|
//void CMyThread::OnDoTest( WPARAM wParam, LPARAM lParam )
|
||||||
|
//{
|
||||||
|
// ASSERT( m_pCheckServerView ); // make sure we have the dialog to send it back to.
|
||||||
|
// char* pchar = (char*) wParam;
|
||||||
|
// CString s;
|
||||||
|
// s.Format( "%d", atol( pchar ) + 1 );
|
||||||
|
// delete pchar;
|
||||||
|
// pchar = NULL;
|
||||||
|
// pchar = new char[ s.GetLength( ) + 1 ];
|
||||||
|
// strcpy( pchar, s );
|
||||||
|
//
|
||||||
|
// //m_pCheckServerView->TestCompleted( pchar );
|
||||||
|
//
|
||||||
|
// CStatic *p = (CStatic*)m_pCheckServerView->GetDlgItem(IDC_MY_TEXT);
|
||||||
|
// p->SetWindowText(pchar);
|
||||||
|
//}
|
||||||
|
|
||||||
|
void CWebReloadThread::OnDoContinuous( WPARAM wParam, LPARAM lParam )
|
||||||
|
{
|
||||||
|
ASSERT( m_pCMainFrame ); // make sure we have the dialog to send it back to.
|
||||||
|
|
||||||
|
char* pchar = (char*) wParam;
|
||||||
|
CString s;
|
||||||
|
s.Format( "%d\n", atol( pchar ) + 1 );
|
||||||
|
delete pchar;
|
||||||
|
TRACE( s );
|
||||||
|
|
||||||
|
m_strNews[0] = _T("");
|
||||||
|
m_strNews[1] = _T("");
|
||||||
|
m_bFirst[0] = TRUE;
|
||||||
|
m_bFirst[1] = TRUE;
|
||||||
|
|
||||||
|
char *location1;
|
||||||
|
char *location2;
|
||||||
|
LPTSTR pppp1 = m_strURL[0].GetBuffer(m_strURL[0].GetLength());
|
||||||
|
location1 = pppp1;
|
||||||
|
LPTSTR pppp2 = m_strURL[1].GetBuffer(m_strURL[1].GetLength());
|
||||||
|
location2 = pppp2;
|
||||||
|
if (_strnicmp(location1, "http://",7)==0 &&
|
||||||
|
_strnicmp(location2, "http://",7)==0)
|
||||||
|
{
|
||||||
|
HINTERNET hInternet=InternetOpen("Daemon", INTERNET_OPEN_TYPE_PRECONFIG , NULL, NULL, NULL);
|
||||||
|
if (hInternet)
|
||||||
|
{
|
||||||
|
while( ::WaitForSingleObject( m_hStopEvent, 100 ) == WAIT_TIMEOUT )
|
||||||
|
{
|
||||||
|
WebReload( hInternet, location1, m_bFirst[0], m_strNews[0] );
|
||||||
|
|
||||||
|
WebReload( hInternet, location2, m_bFirst[1], m_strNews[1] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_strError = "The sURL location must contain 'http://' string";
|
||||||
|
}
|
||||||
|
|
||||||
|
InternetCloseHandle( hInternet );
|
||||||
|
}
|
||||||
|
|
||||||
|
::ResetEvent( m_hStopEvent );
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CWebReloadThread::WebReload( HINTERNET hInternet, char * szUrl, BOOL &bFirst, CString &strNews )
|
||||||
|
{
|
||||||
|
// HINTERNET file_handle=InternetOpenUrl( hInternet,
|
||||||
|
// szUrl, NULL, 0,
|
||||||
|
// INTERNET_FLAG_KEEP_CONNECTION & INTERNET_FLAG_DONT_CACHE & INTERNET_FLAG_RELOAD, 0);
|
||||||
|
|
||||||
|
HINTERNET file_handle=InternetOpenUrl(hInternet,
|
||||||
|
szUrl, NULL, 0,
|
||||||
|
INTERNET_FLAG_RELOAD, 0);
|
||||||
|
|
||||||
|
if (file_handle)
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
// Beep(200, 200);
|
||||||
|
#endif
|
||||||
|
memset(m_szPageData, NULL, sizeof(m_szPageData));
|
||||||
|
char *pBuff = m_szPageData;
|
||||||
|
|
||||||
|
DWORD bytes_read=0;
|
||||||
|
DWORD bytes_read_tot=0;
|
||||||
|
BOOL bSuccess = TRUE;
|
||||||
|
while(bSuccess)
|
||||||
|
{
|
||||||
|
bSuccess = InternetReadFile(file_handle, pBuff, 1024, &bytes_read);
|
||||||
|
if( bytes_read == 0 )
|
||||||
|
break;
|
||||||
|
bytes_read_tot += bytes_read;
|
||||||
|
if( bytes_read_tot < PAGE_READMAX )
|
||||||
|
pBuff += bytes_read;
|
||||||
|
}
|
||||||
|
m_szPageData[bytes_read_tot] = 0;
|
||||||
|
|
||||||
|
//in szPageData am &bytes_read bytes de pe internet
|
||||||
|
//tre sa bag szPageData in sBody
|
||||||
|
// FILE *fp;
|
||||||
|
// if ((fp=fopen("C:\\HTTPFILE.TXT","wb")) !=NULL)
|
||||||
|
// {
|
||||||
|
// fwrite(m_szPageData, bytes_read, 1, fp);
|
||||||
|
// fclose(fp);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// CString strBody = CString (m_szPageData);
|
||||||
|
// strBody = strBody.Left(bytes_read_tot);
|
||||||
|
|
||||||
|
// long lll= strBody.GetLength();
|
||||||
|
|
||||||
|
PageParser( m_szPageData, bFirst, strNews );
|
||||||
|
|
||||||
|
//Sleep(0);
|
||||||
|
//AfxMessageBox("GetPage: "+ sURL + " "+ sBody);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_strError = "Is not possible to connect to internet";
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
::InternetCloseHandle( file_handle ) ;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CWebReloadThread::PageParser(char * szBody, BOOL &bFirst, CString &strNews)
|
||||||
|
{
|
||||||
|
BOOL bRet = TRUE;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//declare our MSHTML variables and create a document
|
||||||
|
MSHTML::IHTMLDocument2Ptr pDoc;
|
||||||
|
MSHTML::IHTMLDocument3Ptr pDoc3;
|
||||||
|
MSHTML::IHTMLElementCollectionPtr pCollection;
|
||||||
|
MSHTML::IHTMLElementPtr pElement;
|
||||||
|
|
||||||
|
HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER,
|
||||||
|
IID_IHTMLDocument2, (void**)&pDoc);
|
||||||
|
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
//put the code into SAFEARRAY and write it into document
|
||||||
|
SAFEARRAY* psa = SafeArrayCreateVector(VT_VARIANT, 0, 1);
|
||||||
|
VARIANT *param;
|
||||||
|
bstr_t bsData = (LPCTSTR)szBody;
|
||||||
|
hr = SafeArrayAccessData(psa, (LPVOID*)¶m);
|
||||||
|
param->vt = VT_BSTR;
|
||||||
|
param->bstrVal = (BSTR)bsData;
|
||||||
|
|
||||||
|
hr = pDoc->write(psa);
|
||||||
|
hr = pDoc->close();
|
||||||
|
|
||||||
|
SafeArrayDestroy(psa);
|
||||||
|
|
||||||
|
//I'll use IHTMLDocument3 to retrieve tags. Note it is available only in IE5+
|
||||||
|
//If you don't want to use it, u can just run through all tags in HTML
|
||||||
|
//(IHTMLDocument2->all property)
|
||||||
|
pDoc3 = pDoc;
|
||||||
|
|
||||||
|
CString NewNews = "";
|
||||||
|
|
||||||
|
//display HREF parameter of every link (A tag) in ListBox
|
||||||
|
pCollection = pDoc3->getElementsByTagName(L"A");
|
||||||
|
for(long i=0; i<pCollection->length; i++)
|
||||||
|
{
|
||||||
|
pElement = pCollection->item(i, (long)0);
|
||||||
|
if(pElement != NULL)
|
||||||
|
{
|
||||||
|
//second parameter says that you want to get text inside attribute as is
|
||||||
|
bstr_t bstrTag = pElement->getAttribute("href", 2);
|
||||||
|
// m_wndLinksList.AddString( (LPCTSTR)bstrTag );
|
||||||
|
|
||||||
|
if( strncmp( (LPCTSTR)bstrTag, "javascript:viewCrp", 18 ) == 0 ) // 회사명.
|
||||||
|
{
|
||||||
|
CComBSTR bstrText;
|
||||||
|
pElement->get_innerText( &bstrText );
|
||||||
|
NewNews = bstrText;
|
||||||
|
NewNews += "@";
|
||||||
|
}
|
||||||
|
else if( strncmp( (LPCTSTR)bstrTag, "javascript:viewDoc", 18 ) == 0 ) // 공시내용.
|
||||||
|
{
|
||||||
|
if( NewNews != "" )
|
||||||
|
{
|
||||||
|
CComBSTR bstrText;
|
||||||
|
pElement->get_innerText( &bstrText );
|
||||||
|
NewNews += CString(bstrText);
|
||||||
|
|
||||||
|
if( bFirst )
|
||||||
|
{
|
||||||
|
bFirst = FALSE;
|
||||||
|
strNews = NewNews;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
TRACE2( "%s, %s\n", strNews, NewNews );
|
||||||
|
#endif
|
||||||
|
if( strNews != NewNews )
|
||||||
|
{
|
||||||
|
strNews = NewNews;
|
||||||
|
|
||||||
|
Beep(2000,200);
|
||||||
|
|
||||||
|
char * pchar = new char[ NewNews.GetLength( ) + 1 ];
|
||||||
|
strcpy( pchar, NewNews );
|
||||||
|
m_pCMainFrame->WebNewsFinded( pchar );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( _com_error e )
|
||||||
|
{
|
||||||
|
TRACE("CWebReloadThread::PageParser catch(_com_error)\n");
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
TRACE("CWebReloadThread::PageParser catch(...)\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
<tr>
|
||||||
|
<td bgcolor="#F2F8F2" height="24" align="center">21:02</td>
|
||||||
|
<td height="24"> </td>
|
||||||
|
<td height="24"><a HREF="javascript:viewCrp('hgngjklgih');" >한마음상호저축은행</a></td>
|
||||||
|
<td bgcolor="#F2F8F2" height="24"> </td>
|
||||||
|
<td bgcolor="#F2F8F2" height="24"><A HREF="javascript:viewDoc(20040917000308);" ><font color = "FF5E06"> </font>감사보고서제출</A></td>
|
||||||
|
<td height="24"> </td>
|
||||||
|
<td height="24">한마음상호저축은행</td>
|
||||||
|
<td bgcolor="#F2F8F2" align="center">2004.09.18</td>
|
||||||
|
<td align="center"></td>
|
||||||
|
</tr>
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user