DownloadDlg.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:25k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // DownloadDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "DownloadDlg.h"
  5. #include "UpgradeDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CDownloadDlg dialog
  13. HANDLE CDownloadDlg::m_hEventKillDownloadThread = NULL;
  14. HANDLE CDownloadDlg::m_hEventDownloadThreadKilled = NULL;
  15. BOOL CALLBACK DownloadCallback(DWORD dwCode, DWORD dwProgress,
  16. LPCTSTR lpszMsg, void *cookie)
  17. {
  18. HWND hMainWnd = (HWND)cookie;
  19. if( PROG_PROGRESS == dwCode && ::IsWindow(hMainWnd) )
  20. {
  21. ::SendMessage( hMainWnd, WM_USER_DOWNLOAD_PROGRESS, dwProgress, (LPARAM)lpszMsg );
  22. }
  23. else if( ::IsWindow(hMainWnd) )
  24. {
  25. ::SendMessage( hMainWnd, WM_USER_DOWNLOAD_MESSAGE, dwCode, (LPARAM)lpszMsg );
  26. }
  27. // User wants to quit program
  28. if(WAIT_OBJECT_0 == WaitForSingleObject(CDownloadDlg::m_hEventKillDownloadThread,0) )
  29. {
  30. ::PostMessage( hMainWnd, WM_USER_DOWNLOAD_END, FALSE, 0 );
  31. SetEvent(CDownloadDlg::m_hEventDownloadThreadKilled);
  32. AfxEndThread( 0, TRUE );
  33. return FALSE;
  34. }
  35. return TRUE;
  36. }
  37. UINT DownloadMain(LPVOID pParam)
  38. {
  39. LPDOWNLOAD_INFO pInfo=(LPDOWNLOAD_INFO)pParam;
  40. int nCountDay = 0;
  41. int nCountBase = 0;
  42. int nCountXDR = 0;
  43. int nCountMin5 = 0;
  44. if( pInfo->bDay )
  45. {
  46. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_DAY );
  47. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL );
  48. CSPTime tmFrom( pInfo->tmDayFrom );
  49. CSPTime tmTo( pInfo->tmDayTo );
  50. tmFrom = CSPTime( tmFrom.GetYear(), tmFrom.GetMonth(), tmFrom.GetDay(), 0, 0, 0 );
  51. tmTo = CSPTime( tmTo.GetYear(), tmTo.GetMonth(), tmTo.GetDay(), 23, 59, 59 );
  52. nCountDay = pInfo->pNetDB->NetloadDayKLine( NULL, &tmFrom, &tmTo, DownloadCallback, pInfo->hMainWnd );
  53. }
  54. // User wants to quit program
  55. if(WAIT_OBJECT_0 == WaitForSingleObject(CDownloadDlg::m_hEventKillDownloadThread,0) )
  56. {
  57. ::PostMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, FALSE, 0 );
  58. SetEvent(CDownloadDlg::m_hEventDownloadThreadKilled);
  59. AfxEndThread( 0, TRUE );
  60. return 0;
  61. }
  62. if( pInfo->bBase )
  63. {
  64. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_BASE );
  65. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL );
  66. nCountBase = pInfo->pNetDB->NetloadBasetable( NULL, NULL, NULL, DownloadCallback, pInfo->hMainWnd );
  67. }
  68. // User wants to quit program
  69. if(WAIT_OBJECT_0 == WaitForSingleObject(CDownloadDlg::m_hEventKillDownloadThread,0) )
  70. {
  71. ::PostMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, FALSE, 0 );
  72. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL );
  73. SetEvent(CDownloadDlg::m_hEventDownloadThreadKilled);
  74. AfxEndThread( 0, TRUE );
  75. return 0;
  76. }
  77. if( pInfo->bXDR )
  78. {
  79. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_XDR );
  80. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL );
  81. nCountXDR = pInfo->pNetDB->NetloadDRData( NULL, NULL, NULL, DownloadCallback, pInfo->hMainWnd );
  82. }
  83. // User wants to quit program
  84. if(WAIT_OBJECT_0 == WaitForSingleObject(CDownloadDlg::m_hEventKillDownloadThread,0) )
  85. {
  86. ::PostMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, FALSE, 0 );
  87. SetEvent(CDownloadDlg::m_hEventDownloadThreadKilled);
  88. AfxEndThread( 0, TRUE );
  89. return 0;
  90. }
  91. if( pInfo->bMin5 )
  92. {
  93. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_MIN5 );
  94. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_PROGRESS, 0, NULL );
  95. CSPTime tmFrom( pInfo->tmMin5From );
  96. CSPTime tmTo( pInfo->tmMin5To );
  97. tmFrom = CSPTime( tmFrom.GetYear(), tmFrom.GetMonth(), tmFrom.GetDay(), 0, 0, 0 );
  98. tmTo = CSPTime( tmTo.GetYear(), tmTo.GetMonth(), tmTo.GetDay(), 23, 59, 59 );
  99. nCountMin5 = pInfo->pNetDB->Netload5MinKLine( NULL, &tmFrom, &tmTo, DownloadCallback, pInfo->hMainWnd );
  100. }
  101. if( pInfo->bMin5 && nCountMin5 == 0 )
  102. {
  103. CString strNote;
  104. strNote.LoadString( IDS_DLMIN5_NOTSUPPORT );
  105. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, TRUE, (LPARAM)strNote.GetBuffer(strNote.GetLength()+1) );
  106. strNote.ReleaseBuffer();
  107. }
  108. else if( pInfo->bBase && nCountBase == 0 )
  109. {
  110. CString strNote;
  111. strNote.LoadString( IDS_DLBASE_NOTSUPPORT );
  112. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, TRUE, (LPARAM)strNote.GetBuffer(strNote.GetLength()+1) );
  113. strNote.ReleaseBuffer();
  114. }
  115. else
  116. {
  117. ::SendMessage( pInfo->hMainWnd, WM_USER_DOWNLOAD_END, TRUE, 0 );
  118. }
  119. AfxEndThread( 0, TRUE );
  120. return 0;
  121. }
  122. CDownloadDlg::CDownloadDlg(CWnd* pParent /*=NULL*/)
  123. : CDialog(CDownloadDlg::IDD, pParent)
  124. {
  125. //{{AFX_DATA_INIT(CDownloadDlg)
  126. m_tmDayFrom = 0;
  127. m_tmDayTo = 0;
  128. m_tmMin5From = 0;
  129. m_tmMin5To = 0;
  130. //}}AFX_DATA_INIT
  131. m_pDownloadInfo = NULL;
  132. m_bDBModified = FALSE;
  133. CSPTime tmLatestOld = 0;
  134. if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) )
  135. m_netdb.GetTimeLocalRange( &tmLatestOld, NULL, NULL );
  136. m_tmLatestOld = tmLatestOld.GetTime();
  137. m_bInitDownloadTime = FALSE;
  138. m_bAutoRun = FALSE;
  139. m_bReportFinished = TRUE;
  140. }
  141. CDownloadDlg::~CDownloadDlg()
  142. {
  143. if( m_pDownloadInfo )
  144. {
  145. delete m_pDownloadInfo;
  146. m_pDownloadInfo = NULL;
  147. }
  148. }
  149. void CDownloadDlg::SetInitDownloadTime( CSPTime tmDLBegin, CSPTime tmDLEnd, BOOL bAutoRun )
  150. {
  151. m_bInitDownloadTime = TRUE;
  152. m_tmDLBegin = tmDLBegin;
  153. m_tmDLEnd = tmDLEnd;
  154. m_bAutoRun = TRUE;
  155. }
  156. void CDownloadDlg::DoDataExchange(CDataExchange* pDX)
  157. {
  158. CDialog::DoDataExchange(pDX);
  159. //{{AFX_DATA_MAP(CDownloadDlg)
  160. DDX_Control(pDX, IDC_STATIC_LATEST, m_staticLatest);
  161. DDX_Control(pDX, IDC_STATIC_PROGRESS, m_staticProgress);
  162. DDX_Control(pDX, IDC_CHECK_MIN5, m_btnCheckMin5);
  163. DDX_Control(pDX, IDC_CHECK_REPORT, m_btnCheckReport);
  164. DDX_Control(pDX, IDC_PROXY_SET, m_btnProxySet);
  165. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  166. DDX_Control(pDX, IDC_STATIC_STATUS, m_staticStatus);
  167. DDX_Control(pDX, IDOK, m_btnOK);
  168. DDX_Control(pDX, IDC_STOP_REFRESH, m_btnStopRefresh);
  169. DDX_Control(pDX, IDC_STOP, m_btnStop);
  170. DDX_Control(pDX, IDC_REFRESH_SERVERS, m_btnRefreshServers);
  171. DDX_Control(pDX, IDC_CHECK_XDR, m_btnCheckXDR);
  172. DDX_Control(pDX, IDC_CHECK_DAY, m_btnCheckDay);
  173. DDX_Control(pDX, IDC_CHECK_BASE, m_btnCheckBase);
  174. DDX_Control(pDX, IDC_TIME_DAYTO, m_dtctrlDayTo);
  175. DDX_Control(pDX, IDC_TIME_DAYFROM, m_dtctrlDayFrom);
  176. DDX_Control(pDX, IDC_DL_PROGRESS, m_ctrlProgress);
  177. DDX_Control(pDX, IDC_STATIC_REFRESH, m_staticRefreshServer);
  178. DDX_Control(pDX, IDC_COMBO_SERVERS, m_comboServers);
  179. DDX_DateTimeCtrl(pDX, IDC_TIME_DAYFROM, m_tmDayFrom);
  180. DDX_DateTimeCtrl(pDX, IDC_TIME_DAYTO, m_tmDayTo);
  181. DDX_DateTimeCtrl(pDX, IDC_TIME_MIN5FROM, m_tmMin5From);
  182. DDX_DateTimeCtrl(pDX, IDC_TIME_MIN5TO, m_tmMin5To);
  183. //}}AFX_DATA_MAP
  184. }
  185. BEGIN_MESSAGE_MAP(CDownloadDlg, CDialog)
  186. //{{AFX_MSG_MAP(CDownloadDlg)
  187. ON_BN_CLICKED(IDC_REFRESH_SERVERS, OnRefreshServers)
  188. ON_BN_CLICKED(IDC_STOP_REFRESH, OnStopRefresh)
  189. ON_BN_CLICKED(IDC_STOP, OnStop)
  190. ON_NOTIFY(NM_SETFOCUS, IDC_TIME_DAYFROM, OnSetfocusTimeDay)
  191. ON_BN_CLICKED(IDC_PROXY_SET, OnProxySet)
  192. ON_NOTIFY(NM_SETFOCUS, IDC_TIME_DAYTO, OnSetfocusTimeDay)
  193. ON_NOTIFY(NM_SETFOCUS, IDC_TIME_MIN5FROM, OnSetfocusTimeMin5)
  194. ON_NOTIFY(NM_SETFOCUS, IDC_TIME_MIN5TO, OnSetfocusTimeMin5)
  195. //}}AFX_MSG_MAP
  196. ON_MESSAGE(WM_USER_DOWNLOAD_MESSAGE, OnDownloadMessage)
  197. ON_MESSAGE(WM_USER_DOWNLOAD_PROGRESS, OnDownloadProgress)
  198. ON_MESSAGE(WM_USER_DOWNLOAD_END, OnDownloadEnd)
  199. ON_MESSAGE(WM_APP_STKRECEIVER_DATA, OnStkReceiverData)
  200. END_MESSAGE_MAP()
  201. /////////////////////////////////////////////////////////////////////////////
  202. // CDownloadDlg message handlers
  203. BOOL CDownloadDlg::OnInitDialog() 
  204. {
  205. CDialog::OnInitDialog();
  206. // TODO: Add extra initialization here
  207. m_staticRefreshServer.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW);
  208. m_staticStatus.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW);
  209. m_ctrlProgress.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_HIDEWINDOW);
  210. m_btnStopRefresh.EnableWindow( FALSE );
  211. m_btnStop.EnableWindow( FALSE );
  212. InitComboServers();
  213. m_ctrlProgress.SetRange( 0, STKLIB_MAX_PROGRESS );
  214. m_ctrlProgress.SetPos( 0 );
  215. m_btnCheckReport.SetCheck( AfxGetStkReceiver().NetEngineIsWorking() );
  216. m_btnCheckReport.EnableWindow( AfxGetStkReceiver().NetEngineIsWorking() );
  217. m_btnCheckDay.SetCheck( TRUE );
  218. // Set Time
  219. CSPTime tmCurrent = CSPTime::GetCurrentTime();
  220. if( tmCurrent.GetHour() < 15 )
  221. tmCurrent -= CSPTimeSpan(1,0,0,0);
  222. if( tmCurrent.GetMonth() == 1 && tmCurrent.GetDay() == 1 )
  223. tmCurrent -= CSPTimeSpan(1,0,0,0);
  224. if( tmCurrent.GetMonth() == 5 && tmCurrent.GetDay() == 1 )
  225. tmCurrent -= CSPTimeSpan(1,0,0,0);
  226. if( tmCurrent.GetMonth() == 10 && tmCurrent.GetDay() == 1 )
  227. tmCurrent -= CSPTimeSpan(1,0,0,0);
  228. if( tmCurrent.GetDayOfWeek() == 1 )
  229. tmCurrent -= CSPTimeSpan(2,0,0,0);
  230. if( tmCurrent.GetDayOfWeek() == 7 )
  231. tmCurrent -= CSPTimeSpan(1,0,0,0);
  232. m_tmDayFrom = m_netdb.GetTimeInitial().GetTime();
  233. m_tmDayTo = tmCurrent;
  234. m_tmMin5From = m_tmMin5To = tmCurrent;
  235. CSPTime tmLatest;
  236. if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB )
  237. && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) )
  238. {
  239. CString strTimeLatest = (LPCTSTR)AfxGetTimeString( tmLatest.GetTime(), "%Y-%m-%d", TRUE ); //tmLatest.Format( "%Y-%m-%d,%A" );
  240. m_staticLatest.SetWindowText( strTimeLatest );
  241. m_tmDayFrom = CSPTime(tmLatest.GetTime()) + CSPTimeSpan(1,0,0,0 );
  242. if( m_tmDayFrom.GetMonth() == 1 && m_tmDayFrom.GetDay() == 1 )
  243. m_tmDayFrom += CSPTimeSpan(1,0,0,0);
  244. if( m_tmDayFrom.GetMonth() == 5 && m_tmDayFrom.GetDay() == 1 )
  245. m_tmDayFrom += CSPTimeSpan(1,0,0,0);
  246. if( m_tmDayFrom.GetMonth() == 10 && m_tmDayFrom.GetDay() == 1 )
  247. m_tmDayFrom += CSPTimeSpan(1,0,0,0);
  248. if( m_tmDayFrom.GetDayOfWeek() == 1 )
  249. m_tmDayFrom += CSPTimeSpan(1,0,0,0);
  250. if( m_tmDayFrom.GetDayOfWeek() == 7 )
  251. m_tmDayFrom += CSPTimeSpan(2,0,0,0);
  252. if( m_tmDayFrom > m_tmDayTo )
  253. m_tmDayTo = m_tmDayFrom;
  254. }
  255. // Initial Download
  256. if( m_bInitDownloadTime )
  257. {
  258. m_tmDayFrom = m_tmDLBegin;
  259. m_tmDayTo = m_tmDLEnd;
  260. }
  261. UpdateData( FALSE );
  262. if( m_bAutoRun )
  263. {
  264. UpdateWindow( );
  265. ShowWindow( SW_SHOW );
  266. OnOK( );
  267. }
  268. return TRUE;  // return TRUE unless you set the focus to a control
  269.               // EXCEPTION: OCX Property Pages should return FALSE
  270. }
  271. void CDownloadDlg::InitComboServers( )
  272. {
  273. for( int i=m_comboServers.GetCount()-1; i>=0; i-- )
  274. m_comboServers.DeleteString(i);
  275. CString strMain = AfxGetProfile().GetMainServer();
  276. m_comboServers.AddString( strMain );
  277. CSPStringArray & astr = AfxGetProfile().GetDownloadServers();
  278. for( i=0; i<astr.GetSize(); i++ )
  279. {
  280. if( 0 != strMain.CompareNoCase((LPCTSTR)astr.ElementAt(i)) )
  281. m_comboServers.AddString( (LPCTSTR)astr.ElementAt(i) );
  282. }
  283. m_comboServers.SelectString( 0, AfxGetProfile().GetDefaultServer() );
  284. }
  285. BOOL CDownloadDlg::PreTranslateMessage(MSG* pMsg) 
  286. {
  287. // TODO: Add your specialized code here and/or call the base class
  288. return CDialog::PreTranslateMessage(pMsg);
  289. }
  290. void CDownloadDlg::OnOK() 
  291. {
  292. UpdateData( );
  293. // clear error pac msg
  294. m_astrErrorPac.RemoveAll();
  295. // disable and enble buttons
  296. m_btnOK.EnableWindow( FALSE );
  297. m_btnCancel.EnableWindow( FALSE );
  298. m_btnProxySet.EnableWindow( FALSE );
  299. m_btnRefreshServers.EnableWindow( FALSE );
  300. m_btnStop.EnableWindow( TRUE );
  301. BOOL bOK = TRUE;
  302. // Set Message
  303. SendMessage( WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_CONNECTING );
  304. m_staticStatus.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
  305. MSG msg;
  306. while (::PeekMessage(&msg, NULL, NULL, NULL, PM_NOREMOVE) )
  307. AfxGetApp()->PumpMessage();
  308. // set server info
  309. if( bOK && !m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB ) )
  310. {
  311. AfxMessageBox( IDS_ROOTPATH_ERROR, MB_OK | MB_ICONINFORMATION );
  312. bOK = FALSE;
  313. }
  314. CString strServer;
  315. m_comboServers.GetWindowText( strServer );
  316. CDownloadServer server;
  317. if( !server.FromString( strServer ) )
  318. {
  319. AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
  320. bOK = FALSE;
  321. }
  322. AfxGetProfile().SetDefaultServer( strServer );
  323. if( bOK && !m_netdb.SetServer( server.m_strAddress, server.m_nPort ) )
  324. {
  325. AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
  326. bOK = FALSE;
  327. }
  328. // set access type
  329. if( bOK && !m_netdb.SetAccessType( AfxGetQSProfile().GetAccessType(), AfxGetQSProfile().GetProxyType(),
  330. AfxGetQSProfile().GetProxyAddress(), AfxGetQSProfile().GetProxyPort(),
  331. AfxGetQSProfile().GetProxyUser(), AfxGetQSProfile().GetProxyPasswd() ) )
  332. {
  333. AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
  334. bOK = FALSE;
  335. }
  336. // login
  337. if( bOK && !m_netdb.Login( AfxGetSView().GetS(), AfxGetSView().GetU(),
  338.    NULL, AfxGetProfile().GetVersion() ) )
  339. {
  340. char szErr[1024];
  341. if( m_netdb.GetLastErrorMessage(szErr,1023) )
  342. AfxMessageBox( szErr, MB_OK | MB_ICONINFORMATION );
  343. else
  344. AfxMessageBox( IDS_LOGIN_FAILED, MB_OK | MB_ICONINFORMATION );
  345. bOK = FALSE;
  346. }
  347. // load package info
  348. if( bOK && ! m_netdb.NetloadPackageInfo( NULL, NULL ) )
  349. {
  350. char szErr[1024];
  351. if( m_netdb.GetLastErrorMessage(szErr,1023) )
  352. AfxMessageBox( szErr, MB_OK | MB_ICONINFORMATION );
  353. else
  354. AfxMessageBox( IDS_DOWNLOAD_FAILED, MB_OK | MB_ICONINFORMATION );
  355. bOK = FALSE;
  356. }
  357. if( bOK )
  358. {
  359. // show message
  360. m_staticStatus.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
  361. m_ctrlProgress.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
  362. CString strMsg;
  363. strMsg.LoadString( IDS_DATA_DOWNLOADING );
  364. m_staticStatus.SetWindowText( strMsg );
  365. CDownloadDlg::m_hEventKillDownloadThread = CreateEvent(NULL,FALSE,FALSE,NULL);
  366. CDownloadDlg::m_hEventDownloadThreadKilled = CreateEvent(NULL,FALSE,FALSE,NULL);
  367. if( NULL == m_pDownloadInfo )
  368. m_pDownloadInfo = new DOWNLOAD_INFO;
  369. memset( m_pDownloadInfo, 0, sizeof(DOWNLOAD_INFO) );
  370. m_pDownloadInfo->hMainWnd = GetSafeHwnd();
  371. m_pDownloadInfo->pNetDB = &m_netdb;
  372. m_pDownloadInfo->bReport = m_btnCheckReport.GetCheck();
  373. m_pDownloadInfo->bDay = m_btnCheckDay.GetCheck();
  374. m_pDownloadInfo->tmDayFrom = m_tmDayFrom.GetTime();
  375. m_pDownloadInfo->tmDayTo = m_tmDayTo.GetTime();
  376. m_pDownloadInfo->bMin5 = m_btnCheckMin5.GetCheck();
  377. m_pDownloadInfo->tmMin5From = m_tmMin5From.GetTime();
  378. m_pDownloadInfo->tmMin5To = m_tmMin5To.GetTime();
  379. m_pDownloadInfo->bBase = m_btnCheckBase.GetCheck();
  380. m_pDownloadInfo->bXDR = m_btnCheckXDR.GetCheck();
  381. if( m_pDownloadInfo->bReport )
  382. {
  383. ::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_MESSAGE, PROG_NEWGROUP, IDS_DLMSG_REPORT );
  384. ::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_PROGRESS, 0, NULL );
  385. m_nReportCount = 0;
  386. m_bReportFinished = FALSE;
  387. AfxGetStkReceiver().AddRcvDataWnd( GetSafeHwnd() );
  388. CStockContainer & container = AfxGetStockContainer();
  389. container.Lock();
  390. m_nReportTotal = container.GetSize();
  391. m_nReportRequestSent = AfxGetStkReceiver().RequestStockData( CStock::dataReport, container.GetData(), min(160,container.GetSize()), 0, 0 );
  392. container.UnLock();
  393. }
  394. else
  395. {
  396. AfxBeginThread( DownloadMain, (LPVOID)m_pDownloadInfo,THREAD_PRIORITY_NORMAL);
  397. }
  398. }
  399. else
  400. {
  401. // disable and enble buttons
  402. m_btnOK.EnableWindow( TRUE );
  403. m_btnCancel.EnableWindow( TRUE );
  404. m_btnProxySet.EnableWindow( TRUE );
  405. m_btnRefreshServers.EnableWindow( TRUE );
  406. m_btnStop.EnableWindow( FALSE );
  407. }
  408. }
  409. void CDownloadDlg::OnCancel() 
  410. {
  411. // TODO: Add extra cleanup here
  412. m_btnCancel.EnableWindow( FALSE );
  413. AfxGetStkReceiver().RemoveRcvDataWnd( GetSafeHwnd() );
  414. AfxReleaseDB();
  415. char szErr[1024];
  416. if( !AfxInitializeDB( szErr, sizeof(szErr) ) ) AfxMessageBox( szErr, MB_OK|MB_ICONINFORMATION );
  417. CDialog::OnCancel( );
  418. if( m_bDBModified )
  419. {
  420. BOOL bRecalculate = FALSE;
  421. CSPTime tmLatest = 0;
  422. if( ( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB )
  423. && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL )
  424. && tmLatest.GetTime() > m_tmLatestOld.GetTime() ) )
  425. {
  426. bRecalculate = TRUE;
  427. }
  428. if( m_bAutoRun )
  429. bRecalculate = FALSE;
  430. AfxGetStkUIApp()->OnDBChanged( FALSE /*bRecalculate*/ );
  431. }
  432. //if( !m_bAutoRun )
  433. //{
  434. // CNetInfoDlg dlg;
  435. // dlg.DoModal( );
  436. // if( AfxGetProfile().HasNewVersion()
  437. // && IDYES == AfxMessageBox( IDS_DOWNLOAD_UPGRADENOW, MB_YESNO ) )
  438. // {
  439. // CUpgradeDlg dlg;
  440. // dlg.SetAutoRun( TRUE );
  441. // dlg.DoModal();
  442. // }
  443. //}
  444. CDialog::PostNcDestroy();
  445. }
  446. void CDownloadDlg::OnRefreshServers() 
  447. {
  448. UpdateData( );
  449. // disable and enble buttons
  450. m_btnRefreshServers.EnableWindow( FALSE );
  451. m_btnOK.EnableWindow( FALSE );
  452. m_btnStop.EnableWindow( FALSE );
  453. m_btnCancel.EnableWindow( FALSE );
  454. m_btnProxySet.EnableWindow( FALSE );
  455. m_btnStopRefresh.EnableWindow( TRUE );
  456. // show message
  457. m_staticRefreshServer.SetWindowPos( NULL, 0,0,0,0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_SHOWWINDOW);
  458. CString strMsg;
  459. strMsg.LoadString( IDS_SERVERS_REFRESHING );
  460. m_staticRefreshServer.SetWindowText( strMsg );
  461. m_bStopRefresh = FALSE;
  462. BOOL bOK = TRUE;
  463. // refresh servers
  464. CString strServer = AfxGetProfile().GetMainServer();
  465. CDownloadServer server;
  466. if( !server.FromString( strServer ) )
  467. {
  468. AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
  469. bOK = FALSE;
  470. }
  471. if( bOK && !m_netdb.SetServer( server.m_strAddress, server.m_nPort ) )
  472. {
  473. AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
  474. bOK = FALSE;
  475. }
  476. // set access type
  477. if( bOK && !m_netdb.SetAccessType( AfxGetQSProfile().GetAccessType(), AfxGetQSProfile().GetProxyType(),
  478. AfxGetQSProfile().GetProxyAddress(), AfxGetQSProfile().GetProxyPort(),
  479. AfxGetQSProfile().GetProxyUser(), AfxGetQSProfile().GetProxyPasswd() ) )
  480. {
  481. AfxMessageBox( IDS_NOSERVER_DEFINED, MB_OK | MB_ICONINFORMATION );
  482. bOK = FALSE;
  483. }
  484. // login
  485. if( bOK && !m_netdb.Login( AfxGetSView().GetS(), AfxGetSView().GetU(),
  486. NULL, AfxGetProfile().GetVersion() ) ) 
  487. {
  488. char szErr[1024];
  489. if( m_netdb.GetLastErrorMessage(szErr,1023) )
  490. AfxMessageBox( szErr, MB_OK | MB_ICONINFORMATION );
  491. else
  492. AfxMessageBox( IDS_LOGIN_FAILED, MB_OK | MB_ICONINFORMATION );
  493. bOK = FALSE;
  494. }
  495. // load server info
  496. if( bOK && ! m_netdb.NetloadServerInfo( NULL, NULL ) )
  497. {
  498. char szErr[1024];
  499. if( m_netdb.GetLastErrorMessage(szErr,1023) )
  500. AfxMessageBox( szErr, MB_OK | MB_ICONINFORMATION );
  501. else
  502. AfxMessageBox( IDS_REFRESHSERVERS_FAILED, MB_OK | MB_ICONINFORMATION );
  503. }
  504. // refresh server combo list
  505. if( bOK )
  506. {
  507. CServers & servers = m_netdb.GetServers();
  508. servers.SaveToProfile();
  509. InitComboServers();
  510. }
  511. // logout
  512. m_netdb.Logout();
  513. // set message and enable buttons
  514. if( bOK )
  515. strMsg.LoadString( IDS_SERVERS_REFRESHED );
  516. else
  517. strMsg.LoadString( IDS_REFRESHSERVERS_PAUSED );
  518. m_staticRefreshServer.SetWindowText( strMsg );
  519. m_btnRefreshServers.EnableWindow( TRUE );
  520. m_btnOK.EnableWindow( TRUE );
  521. m_btnCancel.EnableWindow( TRUE );
  522. m_btnProxySet.EnableWindow( TRUE );
  523. m_btnStop.EnableWindow( FALSE );
  524. m_btnStopRefresh.EnableWindow( FALSE );
  525. }
  526. void CDownloadDlg::OnStopRefresh() 
  527. {
  528. // TODO: Add your control notification handler code here
  529. // set message and enable buttons
  530. m_bStopRefresh = TRUE;
  531. }
  532. void CDownloadDlg::OnStop()
  533. {
  534. if( !m_bReportFinished )
  535. {
  536. m_bReportFinished = TRUE;
  537. ::PostMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_END, FALSE, 0 );
  538. }
  539. if( m_hEventKillDownloadThread )
  540. SetEvent( m_hEventKillDownloadThread );
  541. // if( m_hEventDownloadThreadKilled )
  542. // WaitForSingleObject( m_hEventDownloadThreadKilled, INFINITE );
  543. }
  544. LRESULT CDownloadDlg::OnStkReceiverData(WPARAM wParam, LPARAM lParam)
  545. {
  546. PCOMMPACKET pCommPacket = (PCOMMPACKET)lParam;
  547. switch( wParam )
  548. {
  549. case CStock::dataReport:
  550. if( pCommPacket && CStock::dataReport == pCommPacket->m_dwDataType 
  551. && pCommPacket->m_dwCount > 0 )
  552. {
  553. m_nReportCount += pCommPacket->m_dwCount;
  554. for( DWORD i=0; i<pCommPacket->m_dwCount; i++ )
  555. {
  556. CKData kdata;
  557. kdata.SetKType( CKData::ktypeDay );
  558. KDATA kd;
  559. if( UpdateKDATAByREPORT( kd, &(pCommPacket->m_pReport[i]) ) )
  560. {
  561. kdata.Add( kd );
  562. AfxGetDB().InstallKData( kdata, FALSE );
  563. }
  564. }
  565. CStockContainer & container = AfxGetStockContainer();
  566. if( m_nReportRequestSent - m_nReportCount < 64 && m_nReportRequestSent < (UINT)container.GetSize() )
  567. {
  568. container.Lock();
  569. m_nReportRequestSent += AfxGetStkReceiver().RequestStockData( CStock::dataReport, container.GetData()+m_nReportRequestSent, min(160,container.GetSize()-m_nReportRequestSent), 0, 0 );
  570. container.UnLock();
  571. }
  572. if( !m_bReportFinished && m_nReportCount > 0.95 * m_nReportTotal )
  573. {
  574. m_bReportFinished = TRUE;
  575. ::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_PROGRESS, STKLIB_MAX_PROGRESS, NULL );
  576. AfxBeginThread( DownloadMain, (LPVOID)m_pDownloadInfo,THREAD_PRIORITY_NORMAL);
  577. }
  578. else if( !m_bReportFinished && m_nReportTotal > 0 )
  579. {
  580. DWORD dwProgress = STKLIB_MAX_PROGRESS * m_nReportCount / m_nReportTotal;
  581. ::SendMessage( GetSafeHwnd(), WM_USER_DOWNLOAD_PROGRESS, dwProgress, NULL );
  582. }
  583. }
  584. break;
  585. }
  586. return 0L;
  587. }
  588. LRESULT CDownloadDlg::OnDownloadMessage(WPARAM wParam, LPARAM lParam)
  589. {
  590. // set message and enable buttons
  591. CString strNewMsg;
  592. CString strOldMsg;
  593. m_staticStatus.GetWindowText( strOldMsg );
  594. if( PROG_NEWGROUP == wParam )
  595. {
  596. strNewMsg.LoadString( lParam );
  597. }
  598. else if( PROG_ERRORPAC == wParam )
  599. {
  600. for( int i=0; i<m_astrErrorPac.GetSize(); i++ )
  601. {
  602. if( 0 == m_astrErrorPac.ElementAt(i).Compare( (LPCTSTR)lParam ) )
  603. break;
  604. }
  605. if( i == m_astrErrorPac.GetSize() )
  606. m_astrErrorPac.Add( (LPCTSTR)lParam );
  607. CString strMsg = CNetDatabase::GetProgressMessage( wParam );
  608. strMsg += (LPCTSTR)lParam;
  609. if( strMsg.GetLength() > 0 )
  610. {
  611. strNewMsg = strOldMsg;
  612. int nIndex = strOldMsg.Find( " -- " );
  613. if( -1 != nIndex )
  614. strNewMsg = strOldMsg.Left( nIndex );
  615. strNewMsg += " -- " + strMsg;
  616. }
  617. }
  618. else
  619. {
  620. CString strMsg = CNetDatabase::GetProgressMessage( wParam );
  621. if( strMsg.GetLength() > 0 )
  622. {
  623. strNewMsg = strOldMsg;
  624. int nIndex = strOldMsg.Find( " -- " );
  625. if( -1 != nIndex )
  626. strNewMsg = strOldMsg.Left( nIndex );
  627. strNewMsg += " -- " + strMsg;
  628. }
  629. }
  630. if( strNewMsg.GetLength() > 0 )
  631. {
  632. if( 0 != strNewMsg.Compare( strOldMsg ) )
  633. m_staticStatus.SetWindowText( strNewMsg );
  634. }
  635. return 1;
  636. }
  637. LRESULT CDownloadDlg::OnDownloadProgress(WPARAM wParam, LPARAM lParam)
  638. {
  639. // set message and enable buttons
  640. if( wParam < 0 )
  641. wParam = 0;
  642. if( wParam > STKLIB_MAX_PROGRESS )
  643. wParam = STKLIB_MAX_PROGRESS;
  644. m_ctrlProgress.SetPos( wParam );
  645. CString strProgressNew;
  646. strProgressNew.Format( "%.2f%%", 100.*wParam/STKLIB_MAX_PROGRESS );
  647. CString strProgressOld;
  648. m_staticProgress.GetWindowText( strProgressOld );
  649. if( 0 != strProgressNew.Compare( strProgressOld ) )
  650. m_staticProgress.SetWindowText( strProgressNew );
  651. return 1;
  652. }
  653. LRESULT CDownloadDlg::OnDownloadEnd(WPARAM wParam, LPARAM lParam)
  654. {
  655. // logout
  656. m_netdb.Logout();
  657. m_ctrlProgress.SetPos( STKLIB_MAX_PROGRESS );
  658. CString strProgressNew;
  659. strProgressNew.Format( "%.2f%%", 100. );
  660. m_staticProgress.SetWindowText( strProgressNew );
  661. // set message and enable buttons
  662. CString strMsg;
  663. if( wParam )
  664. strMsg.LoadString( IDS_DOWNLOAD_FINISHED );
  665. else
  666. strMsg.LoadString( IDS_DOWNLOAD_PAUSED );
  667. CString strComma;
  668. strComma.LoadString( IDS_COMMA );
  669. CString strFullStop;
  670. strFullStop.LoadString( IDS_FULLSTOP );
  671. for( int i=0; i<m_astrErrorPac.GetSize(); i++ )
  672. {
  673. if( 0 == i )
  674. strMsg += CNetDatabase::GetProgressMessage( PROG_ERRORPAC );
  675. else
  676. strMsg += strComma;
  677. strMsg += m_astrErrorPac.ElementAt(i);
  678. }
  679. if( m_astrErrorPac.GetSize() > 0 )
  680. strMsg += strFullStop;
  681. if( lParam )
  682. strMsg += (LPCTSTR)lParam;
  683. m_staticStatus.SetWindowText( strMsg );
  684. m_btnOK.EnableWindow( TRUE );
  685. m_btnCancel.EnableWindow( TRUE );
  686. m_btnProxySet.EnableWindow( TRUE );
  687. m_btnRefreshServers.EnableWindow( TRUE );
  688. m_btnStop.EnableWindow( FALSE );
  689. if( CDownloadDlg::m_hEventKillDownloadThread )
  690. CloseHandle(CDownloadDlg::m_hEventKillDownloadThread);
  691. if( CDownloadDlg::m_hEventDownloadThreadKilled )
  692. CloseHandle(CDownloadDlg::m_hEventDownloadThreadKilled);
  693. CDownloadDlg::m_hEventKillDownloadThread = NULL;
  694. CDownloadDlg::m_hEventDownloadThreadKilled = NULL;
  695. CSPTime tmLatest;
  696. if( m_netdb.SetRootPath( AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB )
  697. && m_netdb.GetTimeLocalRange( &tmLatest, NULL, NULL ) )
  698. {
  699. CString strTimeLatest = tmLatest.Format( "%Y-%m-%d,%A" );
  700. m_staticLatest.SetWindowText( strTimeLatest );
  701. }
  702. m_bDBModified = TRUE;
  703. if( m_bAutoRun && wParam )
  704. OnCancel( );
  705. return 1;
  706. }
  707. void CDownloadDlg::OnSetfocusTimeDay(NMHDR* pNMHDR, LRESULT* pResult) 
  708. {
  709. // TODO: Add your control notification handler code here
  710. m_btnCheckDay.SetCheck( 1 );
  711. *pResult = 0;
  712. }
  713. void CDownloadDlg::OnSetfocusTimeMin5(NMHDR* pNMHDR, LRESULT* pResult) 
  714. {
  715. // TODO: Add your control notification handler code here
  716. m_btnCheckMin5.SetCheck( 1 );
  717. *pResult = 0;
  718. }
  719. void CDownloadDlg::OnProxySet() 
  720. {
  721. AfxDoProxySetting();
  722. }