CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式

4 B' V# [6 A6 U) |
  1. / RevApp.cpp : Defines the class behaviors for the application.4 n) d# z* P5 B
  2. //& B! |6 `3 l* s# c

  3. 3 R3 f4 y' v* d, o: S/ M) a1 B7 I
  4. #include "stdafx.h"
    5 X4 |/ M6 B7 f; u7 o
  5.   E) I; {$ n" S2 ~+ o3 q- s
  6. //#define UNICODE$ u+ u9 ~' l2 A/ x
  7. //#include <gdiplus.h>
    0 T' w8 B1 k3 A% k/ F
  8. //using namespace Gdiplus;
    0 K! ]6 t, e+ ]+ [

  9. 0 r: Q, t" {! R
  10. #include "RevApp.h"; g( D. |! P" Y' ^( D+ B& L
  11. #include "RevAppDlg.h"
    1 k, }  m1 |, y  }9 [
  12. $ @. ], k) P% k
  13. #pragma warning(disable:4786)3 R  V: z  I0 z% v
  14. #include <map>
    2 S0 r$ C6 f3 y
  15. #include <list>% \4 [. H. N% i* r
  16. #include <direct.h>* Q& y2 q  D: X1 {9 h* O
  17. 9 X$ D8 d2 t" W1 i
  18. #ifdef _DEBUG
    9 ~3 B2 x; e- n6 k% Q
  19. #define new DEBUG_NEW
    , J8 ?! y1 i3 K$ K
  20. #undef THIS_FILE/ R- D; e; j7 G9 X7 Q9 o; y
  21. static char THIS_FILE[] = __FILE__;
    1 I6 G& o) P( M% h. L6 v
  22. #endif, {; O$ J1 w) y8 v: m) m
  23. #include "SkinResDef.h"
    % Z" ~4 g6 T/ e* U% f
  24. #include "ChangeBG.h". c, ?0 Z) g8 ^
  25. #include "AFXINET.H"/ I6 w- w% c. u( D4 j# N' V
  26. 2 _$ s7 A0 j. M0 \2 y. `- W* F! z
  27. #define TRADITIONAL_CHINESE 05 l2 Y/ W' O8 Z. D& n& [# @
  28. #define SIMPLIFY_CHINESE 1
    7 X. p  `% r  N4 _
  29. #define ENGLISH 2
    . c8 ?7 @8 I6 V, z- f
  30. int m_iLanguage = ENGLISH;
    ' V' O7 I5 @8 q7 u3 L( W( G
  31. /////////////////////////////////////////////////////////////////////////////
    4 m* P8 t4 g2 ]2 r: w
  32. // CRevAppApp
    $ r! v; @9 K6 ]
  33. , l& F7 Q9 ]9 k7 d& {
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & p9 ?, `) t: f* W
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ {! P4 V+ T6 v( j% p4 x9 d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 ?8 U) c$ Z/ K6 G( p" Q. L
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 T, A. e8 {  ^! _( K  a% h" y: z. e
  38.         //}}AFX_MSG$ j6 |# G$ ^) F- \8 \% r
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) ?0 s. }: N  ]& _9 Y
  40. END_MESSAGE_MAP()
    : W0 Q+ n4 r8 t, m  o! Z- ^* }
  41. ! B1 I6 u2 G) O
  42. /////////////////////////////////////////////////////////////////////////////8 @' n6 B2 d9 \* R
  43. // CRevAppApp construction
    . T8 ?' D! T$ X) T! }

  44. ( \; }+ G* C4 k/ \
  45. CRevAppApp::CRevAppApp()
    , b0 W! l* ?$ f& ?4 ]' x1 q9 P
  46. {- d( h% ^  j5 B8 Y9 ?
  47.         // TODO: add construction code here,( M) z4 b4 x: M2 L* y6 w* Q) E2 u
  48.         // Place all significant initialization in InitInstance
    : c; z$ ^! d" t# h# N3 O$ T% ^
  49.   bDisplayIsBig5=FALSE;1 e! N) @) w: v& Y+ {2 O
  50.   bRestartUpdater=FALSE;, k; y$ i. R3 F. B6 g2 Z0 O9 f8 C
  51.   bFinishUpdated=FALSE;. j  [2 U/ w4 d+ l, W6 k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;  Y7 ~- N# `: ?# n8 \, J
  53.   InitChangeDataBig52GBKS();
    8 f# o& m8 d: s4 ]
  54.   InitChangeDataGBKS2Big5();1 h! l. p: L6 x0 i8 T3 d, h! p
  55.         /// F9 a( K5 q$ U9 u
  56.         bClickRunExe = FALSE;
    / P! u' n# ~- _1 x
  57.         //
    ! L% a4 h; K8 u4 p, i
  58. }
    ! Z. }. U# J( q3 ^
  59. 7 s8 {7 ^2 S  ?+ r& Y$ J5 i! d* ^' d
  60. CRevAppApp::~CRevAppApp()
    4 [% v7 k; \- ^1 t- j) F
  61. {) L8 p: p+ H7 V7 F
  62.         // TODO: add construction code here,
    * B+ t9 t  U# ~# z3 U$ V
  63.         // Place all significant initialization in InitInstance
    & Y& @8 y- Z: a( ^9 M5 R; s3 c
  64.   EndChangeData();
      j0 }8 ]( @: U9 J$ z6 b$ O
  65. }4 H% h0 a$ F8 J6 {2 Y, c

  66. 9 N" W1 W% ?  c" M$ W$ p5 S
  67. /////////////////////////////////////////////////////////////////////////////
    0 |* ^% A9 @* L- M, u
  68. // The one and only CRevAppApp object
    * _! b$ z' T6 ^6 u; h2 q+ B

  69. ! ]( A5 _+ ^$ g
  70. CRevAppApp theApp;
    / f" ^0 Y5 m3 i' X% G6 i
  71.   O5 l( \! N" R9 X) z& ^8 S9 i7 {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    * W3 K  S3 O0 F1 |
  73. {
    & @/ r: N' ]: K
  74.   int iEOF=0;6 J# K. Y) i7 E- B" q% ?7 C8 C7 k/ I  p
  75.   char szTempName[MAX_PATH];
    3 l; Z: t: Q( v3 \5 ^
  76.   *szFileName=0;- ]* Z2 d( }+ C0 W, n$ }: \
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( \. z  k3 p# ~: ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')3 Z# f4 H1 U" e) c- d6 w, Y
  79.   {+ }" j9 p4 Q* w* T( o- s  r, B
  80.     strcpy(szFileName,&szTempName[1]);6 l- C; [" a# r) Q' W; V
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    $ }6 F) R( ]8 b+ m
  82.     {
      y& A1 V0 O3 `; M
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # t! X3 z# s4 h0 L6 ^
  84.       strcat(szFileName," ");
    4 I% r3 b# t& j
  85.       strcat(szFileName,szTempName);
    2 r  ^6 o* O! I; p6 B
  86.     }
    ) d. Q% f& X- c8 C+ Y1 V5 U, K4 Y; v
  87.     if(strlen(szFileName)>=1)
    ! _! |6 F- l; A( E
  88.     {
    & z5 w+ a- L6 i' M! Z
  89.       szFileName[strlen(szFileName)-1]=0;
    + e# b# K2 f9 z. Y
  90.     }9 R5 \. `, d) e: A
  91.   }3 s# j+ R! K' o" @( E1 X8 O- X
  92.   return szFileName;
    / n) o4 ~0 \. t7 i
  93. }( t* P  M& o' l: M6 ?4 o* _! c

  94. . [4 O: d) n( ^$ f# a' |5 q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , V5 b: k' P" h$ D: x" N8 ~
  96. {* k: V3 Z. t7 r& o
  97.   FILE *fp;
    ; F% f- R# d  `1 B0 S  [6 |
  98.   char *key=NULL;9 I. S! t" j% Q' n7 A
  99.   char version[MAX_PATH];& f6 E' Y4 D7 U/ Z* W+ O3 ~
  100.   LPUPDATEFILE file,olds;, O3 t: T# u7 V9 o& T2 U
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! V; `# X' r' ~5 _2 E# g0 ~
  102. ; ~# L- }/ P! R# v
  103.   UpdateList.clear();
    0 y* R2 D& u3 O, F% Z
  104.   UpdateFile.clear();
    7 w* y2 N6 r* Z+ N) _8 p
  105.   if(GetFileAttributes(filename)==-1) return false;
    + Q4 h: ~% J) t6 `( h: z1 S1 Y9 y
  106.   if(!(fp=fopen(filename,"r"))) return false;3 M* l, S7 D* X7 t8 O1 l% a
  107.   fscanf(fp,"%s",version);% v) ~* O5 {% n/ k4 ~5 L
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    2 I6 H! c) k/ v% C( m, w7 U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    4 b7 [+ O( L' f9 [
  110.   {
      _( n( f4 q+ E' o
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 C' [* G2 \, f- q. }: B
  112.     fscanf(fp,"%s",file->path);, k0 [. p8 i$ v
  113.     ReadFileNames(fp,file->file);5 [, q7 E' Z8 o, b- R7 w
  114.     strcpy(file->full,".");/ U% Z, |2 a+ x  o7 Z
  115.     strcat(file->full,file->path);
      F/ ]% f( F9 G
  116.     strcat(file->full,file->file);3 I+ J+ C4 _' f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 m1 H* z# E0 y+ n
  118.     {: a: F3 B7 x: t+ l) A  b, Q# X
  119.       file->vers=(float)atof(version);
    ; W# n: d  E# K: A; W
  120.       UpdateList.push_back(file->full);
    & V$ Y* V9 A* I, H! G) M8 D7 c$ O/ L3 u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 X1 [- i8 l  h& [% O; y: X
  122.     }( J! D; [5 j6 v4 m( s
  123.     else
    : {; e$ t; z! ?( H' v5 g
  124.     {/ f- h% G. q( D' m+ t9 D
  125.       olds=(*p).second;
    4 C' G. x5 L7 V$ K2 J' P- Y. u/ u
  126.       if(olds->vers<(float)atof(version))2 |# O' [" W. j! W  }9 i7 H! l6 x. ]
  127.       {( s( i: `" s/ B; G* s1 j
  128.         olds->vers=(float)atof(version);
    6 L7 x' \2 X! \7 e. ]
  129.       }5 v; {5 ~1 y0 L3 t4 s7 o# M  r
  130.       free(file);
    # Y% T3 y0 B) V: K7 Y0 ?
  131.     }- C( m7 ~7 `% @" h) E* U
  132.   }) r0 l2 `: H& ]% N
  133.   fclose(fp);
    1 B& o4 ~% U/ q8 p
  134.   return true;% O- a5 X% B* a. b, r" V
  135. }8 f; j# h/ O: w2 \$ Z2 a( W1 d& g
  136. . ^7 G. ^0 u$ x7 _/ @4 Y8 U- J$ j0 r  @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 N) S; j$ [' z0 X7 [( `
  138. {; ?2 N; k, |5 A$ q7 O3 U
  139.   TCHAR  szFull[MAX_PATH];
    9 w; I6 P; c; N$ U8 x
  140.   TCHAR *token,*inter;
    % |9 E# Z; B2 k) S
  141.   *szPath=0;. Z, {  Q# l* z7 \. B, L4 L
  142.   strcpy(szFull,szFullPath);
    , O( I( b. x7 {3 z/ r
  143.   token=strtok(szFull,"\\/");
    & A4 X" W$ @7 p% c' O& B! F
  144.   inter=token;
    2 q) _5 ~0 a7 G+ {6 v
  145.   while(token=strtok(NULL,"\\/"))
    : P4 d, X: u/ B# d
  146.   {4 v* y, X, T: H0 r
  147.     strcat(szPath,inter);* N% v% @9 L4 y9 }$ @" d
  148.     strcat(szPath,"\");
    8 y) F7 L% c" K1 j) l7 V; L, E
  149.     inter=token;
    # b' n0 {6 ^2 A. s
  150.   }
    9 Z4 I/ y  A' l3 ?2 `6 `
  151.   return strlen(szPath);/ s7 w  J6 p  e0 p+ t& i. \
  152. }
    3 ~3 A- N* E  C

  153. ) n8 r2 Z- s( {$ X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' J: t0 C7 }/ t' `0 l
  155. {  q# u/ i; A9 ~
  156.   DWORD attrib=GetFileAttributes(Target);7 @4 @! j. r& N% h6 O5 g
  157.   if(attrib!=-1)
      C& M& _5 a6 d
  158.   {  ~9 [7 o. `+ J2 `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & [( c- q% d, u- r6 @
  160.     {
    * O  j# F: j. Y( e7 |5 X! w
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    / i0 F: [* E" g' A  l5 K' I
  162.       SetFileAttributes(Target,attrib);
    7 L8 s" n# W& k7 S+ T
  163.     }2 C/ F, D9 X2 m+ o. C  U2 [( _
  164.   }
    . l6 Q5 Z, `+ K& I, q1 F+ N
  165.   CopyFile(Source,Target,Erase);: G" r& `& D1 w$ g9 F1 z6 ?
  166. }
    ' {# N: G& X( ]  ?

  167. ; P, H6 R: X; c! q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 F, ?" S, j4 M& U
  169. {; ^. l$ {- Y) d1 @* B1 H9 q, O9 t5 v
  170.      FILE *fp;
    & Y. Q- I$ H2 ^$ Y5 ~) ~
  171.      char  szBuffer[8192];
    3 F1 l' K: Z! f# u1 Q$ W) W
  172.   va_list  argptr;  n/ F9 u: `$ p$ S+ G" p6 a

  173. ! y. m; |4 |, H0 P
  174.         va_start(argptr,message);
    / ?8 k4 S7 p* F' F/ e5 ?+ @
  175.         vsprintf(szBuffer,message,argptr);
    3 I! P2 w9 H7 V7 S! v- K: w: ~0 d0 U
  176.         va_end(argptr);$ f9 ], `3 r: l' m  {8 u# i
  177.   fp=fopen(FileName,"a");* V( y  K( O# e' }8 O! ^
  178.   if(fp)
    ( y8 `7 I9 F' E/ ]" y" `! s
  179.   {% j; N0 A  o) f
  180.     fprintf(fp,szBuffer);( M3 `; y2 t' |) a" M. `
  181.     fclose(fp);2 d% n; S0 x; l7 Z$ C# C
  182.           _flushall();
    / I' p: T3 D- N6 e5 l+ \9 W' x
  183.   }' z5 l- S7 t1 s1 B; @' ^' {, D
  184. }' G- D8 a9 R8 ?% Y* n( m9 A

  185. 6 _% e" e" j# Q0 e* U
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 M6 T; \4 I/ l2 L1 r
  187. {, i6 z9 p! C* ]+ [- V& q9 D% _
  188.      FILE *fp;
    7 R8 G# K/ d* _; f
  189.     DWORD  attrib;
    " o% B. H1 C7 d/ ^, a. F8 W4 o
  190.   attrib=GetFileAttributes(FileName);+ Z! T: e1 p6 i) P' Z
  191.   if(attrib!=-1)
    ( `$ r! e# y, O! W0 d" [
  192.   {2 g  g9 s3 E; h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. w% ?/ n! b# V0 Q
  194.     if(!SetFileAttributes(FileName,attrib))8 L! r* ^( {# z8 ]* \
  195.     {5 k7 _! @; c7 C+ t* P9 f0 c7 ^, J
  196.       return FALSE;
    2 Q) `* G) @  E6 X3 x2 L3 B
  197.     }
    ) k  N# [, R/ {( l) O, d: ~; w
  198.   }
    ! X4 E$ z9 @6 g+ A
  199.   fp=fopen(FileName,"wb");
    % ?7 n& F7 q* X- y$ n
  200.   if(fp)9 }; d. j7 A% R. k4 G' ~* Y; e
  201.   {
    ' G6 I4 ~& F- C" z
  202.     fclose(fp);
    1 N2 n, X0 l! w2 d( {7 U
  203.   }
    ) o) e) y/ }( s8 ~/ ]1 L( ]" s
  204.   return TRUE;
    / X9 E+ }) ~6 o9 q( ?3 g* z
  205. }
    % d! Y4 Y6 s" H) P  Q' g

  206. 8 j: y2 p& R5 ]" f& \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 G4 u- b( T. {2 T, Z  j5 P7 S
  208. {
    0 |, B1 I4 w: O
  209.   char filename[MAX_PATH];0 V8 c/ s* T* C2 N; p0 R
  210.   LPUPDATEFILE file,olds;
    8 t$ R# A" N4 H
  211.   std::map<int,CString>::iterator i;0 R+ Q8 z6 _# t% A! |% E" D: z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 M: v; P) M9 q* w1 [# o
  213.   std::list<CString>::iterator l;
    1 e2 u1 s9 Z: _# ]0 M6 e* G
  214. ' {/ }6 M3 z0 i* }. ]6 Y: p
  215.   if(bFirstUpdate)+ B: P. z! u9 @
  216.   {
    $ `6 I( x* i& O  B2 f# W  Z. O
  217.     dwCurrFile=0;
    ) d3 w9 t2 k+ e! B( L$ I- ?
  218.     bFirstUpdate=FALSE;
    ' F, x/ d5 U6 s/ R; A
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 `! n- ]2 p: S: v  b& i, y7 o
  220.     {4 L5 c' G7 V6 M+ T' T
  221.       dwTotalFiles=UpdateLocal.size();; t9 J2 c! Z1 g! P* K
  222.       dwDownLoaded=0;) y) j$ B& g9 B6 M4 O& U
  223.       bSilentStep=FALSE;
    0 p- G* b- I. D" F9 ^
  224.       bCompressed=TRUE;# _- p, @; }  m2 V
  225.       strExtLocal.Empty();* `9 }& g6 U% d' [+ g! h9 e
  226.       strFullName=(*i).second;, N" t5 r5 A* V# R
  227.       dwProgramState=AP_CONNECT;1 R  e! c4 \% X3 F. V$ f
  228.       return TRUE;( u! c" \; ^( T9 `# z- g
  229.     }' q& x8 O: a2 Y; e6 @+ q
  230.   }- }; j& `7 s( q5 Z
  231.   else if(bRestartUpdater==FALSE): }* r& G, z* w  x/ e* [& v- c
  232.   {
    / d1 Z  f6 r3 s$ \1 u
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    4 \: E) z9 `- C# T' r
  234.     {5 e9 d' D, i5 _2 @/ w
  235.       file=(*p).second;
    # T$ \( D  A' r  ~# ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    , q& N+ E+ h0 d# \# p' n# z
  237.       {- a" b: m. L2 I; y
  238.         olds=(*p).second;% `1 D% }3 p! [+ ~. M7 T
  239.         olds->vers=file->vers;4 ], _( i% q$ }
  240.       }& W; ?- f( a" Q7 G+ F
  241.       else: h2 q7 w' ~4 |' [
  242.       {3 w4 e. F, t: n
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + J6 u3 G4 G' x1 H$ ~. z' M  `2 d' m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));, Y8 a& c  K2 l0 _) H+ [- C
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 Q& J# P& l0 @  m  \" l# ]
  246.       }
    1 p; B1 y" r2 Q- @/ o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' Q; `% y! w. y  c
  248.       sprintf(filename,"(%s)",file->file);
    0 ~8 i0 f3 b/ k
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 w  |3 @' [( ]! P
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 f1 K" m& ^. H' t/ G
  251.     }
    : ^3 ^# y+ m0 m4 u3 U% `; |- `
  252.     dwCurrFile++;: ^4 M+ c+ U3 j, O: C0 X2 I
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); f& R9 J% D$ d9 W
  254.     {
    " t9 z+ x% H4 B
  255.       bSilentStep=FALSE;( n( }# [: h# Z
  256.       bCompressed=TRUE;$ L4 }- F$ H) B  N' P8 u( M
  257.       strExtLocal.Empty();* o+ b! n1 G& Z
  258.       strFullName=(*i).second;
    ; h; g7 [! x2 ~2 x/ u4 k
  259.       dwProgramState=AP_CONNECT;
    * [: @9 ?" c' r( q/ l3 h3 S8 V
  260.       return TRUE;8 x0 @( k+ x- ~# h7 q
  261.     }
    4 a) w8 A9 j  r/ s
  262.     if(!bRestartUpdater)% |7 }7 a+ r$ W  w' ~
  263.     {7 v( D' e  C  s% @& b+ z
  264.       int iCurrSize,iFileSize;
    7 K/ F( T& {! {
  265.       iCurrSize=0;9 S4 Q$ n, F$ N$ a/ k- P+ a( X
  266.       iFileSize=UpdateList2.size();9 X2 X' S3 ^+ ~, k0 n& C/ {+ F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 o8 M' N) Q4 _0 e
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");$ J) O7 y2 q" U
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");. Q: B3 x; r! z# \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 r7 B' T# i9 F2 Y+ s! H2 Z
  271.       Fclearf(".\\update.dat");3 p+ @( w! m  X, b" {  [( Y- R
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 o4 ^" @! _0 V: K; h3 I) g: x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); W: `, V; C5 E/ S
  274.       {
    ! [" h, F" T% ?9 d/ ?* {" }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())# g- v# [+ d. J4 d; g
  276.         {  O0 k, v( r  }: i$ D3 D  a* _  H% s
  277.           file=(*p).second;
    + O% x3 F- A$ k1 a& v
  278.           sprintf(filename,"(%s)",file->file);; A+ k! |6 _6 W5 a+ k* X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);8 L6 ?. k$ a7 u$ c* ]2 X
  280.           iCurrSize++;
    " }. q+ Z* z( n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 _; T& f" D0 F; x: B* j) L1 E( u9 Y, S3 L
  282.         }8 m6 s* p) j# R! H. M
  283.       }
    . [8 @1 y4 b# i# z5 F
  284.       unlink(".\\update.txt");
    & P" |2 K* i- }  _! Q
  285.       unlink(".\\update.tmp");/ e; A2 ?! x' |6 `# `
  286.       Fclearf(".\\checkversion.dat");4 u# K  r; y; }0 j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    8 ~/ m/ E7 ?% q: }% L& [/ Z
  288.       if(UpdateLocal.size())0 @) q7 ^' C3 E2 E3 q1 ]
  289.       {, n% r7 J4 h7 h: f, A! R3 D. W% |" Z
  290.         UpdateLocal.clear();
    ; L% J9 h: F( h
  291.       }( e/ u3 K0 i# L! v( m
  292.       if(UpdateFile3.size())
    ) F. k- @; A; J( ^) X, K4 F/ t8 H3 |
  293.       {! ^* n6 Z5 Y4 B; J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 n: O0 h* y. v, ]+ V
  295.         {
    0 h2 e4 V! S2 [9 k* a7 Y
  296.           file=(*p).second;
    , Z# l8 M; l' Y3 D8 k
  297.           free(file);
    6 p( ?9 ]6 h+ C9 e1 }+ b
  298.         }
    7 o+ N: E" m7 `/ J
  299.         UpdateFile3.clear();% I0 r- g& d" H+ F8 }
  300.         UpdateList3.clear();
    . b+ V, f  k' x/ J$ L; V% z! C) w& f! v
  301.       }
    . S- v/ Q4 e! G6 j/ b
  302.       if(UpdateFile2.size())/ h% _3 t* Q6 B, Q
  303.       {! U+ m# e- u1 D  q8 n3 J9 P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( C; y$ _9 D  i0 B. x9 q
  305.         {  `! {6 D: ^0 r: U
  306.           file=(*p).second;
    ) ?/ h: u" x  F2 k" w! e1 ^
  307.           free(file);/ Q% {+ P) [+ Z
  308.         }
    ( f& P4 y6 Y$ a4 ?' S
  309.         UpdateFile2.clear();8 L6 q& M  x8 p3 ^9 f6 y$ b
  310.         UpdateList2.clear();
    # p( Y! X6 b; ~' f. C( G; N4 M
  311.       }
    + f' L- Z% p  k) x9 z% k
  312.       if(UpdateFile1.size())
    ' i( |  Y/ P/ o& ^7 y( f; z
  313.       {
    $ o) e" a/ i, ~9 Q& Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), m0 x) ~% _9 Z9 h& ~- e8 c/ _' M
  315.         {
    7 o+ y6 D0 }6 R1 B3 z5 z3 i1 |
  316.           file=(*p).second;5 n+ i. O1 a4 m6 u5 J
  317.           free(file);
    8 T# U% w( ]$ C1 S
  318.         }
    4 K. J% q. u3 O
  319.         UpdateFile1.clear();. x; U9 v1 `2 \! W) r: y
  320.         UpdateList1.clear();! l0 H* @4 ^2 {" E7 h9 X8 x6 i
  321.       }
    8 D$ m% F: i/ \/ E
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));  W( x  h7 u+ r- D
  323.     }
    5 M% g; ~& I8 C, c2 J! d) V- L
  324.   }1 T2 _# M& f0 e+ j  J5 u/ L
  325.   return FALSE;% l4 o* [9 |8 S8 G+ m& V
  326. }
    0 E4 h0 ^1 `* n8 O8 {! o; e

  327. $ D6 f3 _/ R" ]8 q& V9 }: X. n# a+ V
  328. void CRevAppApp::ClearAll(void)
    / i" E7 P) ~* n/ k$ v9 k& Z
  329. {7 @% \2 m$ ]1 l, x1 Y- l/ ~+ N
  330.   LPUPDATEFILE file;5 R5 S0 p; g8 i# L2 y, P9 y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( m. i9 R+ ]) |
  332. * C: U" n* s% y  O) J0 B
  333.   if(UpdateLocal.size())
    % a5 a( Z7 N' n8 R/ ^; g
  334.   {
    2 D6 o  G# ~5 Y# j& t" o
  335.     UpdateLocal.clear();" N0 {# \; U* S5 Z: M- e9 r
  336.   }
    - c* s. n: G! h# h* H3 I# b: H
  337.   if(UpdateFile3.size())$ l) O* A( P* X: \8 Y* m
  338.   {
    " ]2 e- R8 z* m( [
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); e- m0 a" c% v5 V: T
  340.     {
    0 o# B3 @0 R/ ]$ @5 S7 J; m& u
  341.       file=(*p).second;  ?0 K6 N: Z+ N* N9 Q! e9 Q4 v
  342.       free(file);
    8 _1 Y* L( d- \6 e
  343.     }+ S9 i2 {5 k( ^2 l
  344.     UpdateFile3.clear();0 [5 i2 b% T, \6 {
  345.     UpdateList3.clear();
    $ a$ b$ O2 r* F, [1 z& A1 x
  346.   }  d8 G: W  o$ Q3 p, f, X. C( k4 m
  347.   if(UpdateFile2.size())0 A% y7 |3 y& d0 u+ u& N
  348.   {, I3 d! w9 w. v  Z" l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 _/ F( `* Q2 x$ E) a" P
  350.     {
    2 H: a2 D: v  p1 r" A6 c& f
  351.       file=(*p).second;
      D5 p: D& ~2 [- C0 {$ p* z
  352.       free(file);
    : O) a, \0 R, n, l0 w" k2 _% W8 y' j
  353.     }
    - A0 p$ p) g7 @4 W) M$ G" f7 D. Z- D8 M! s+ L
  354.     UpdateFile2.clear();1 a" o& C5 }/ B9 s2 Z! v" M
  355.     UpdateList2.clear();
      y' J/ w3 v- F% q( R4 |
  356.   }6 a' K& p) X# L) D! e* Z
  357.   if(UpdateFile1.size())
    # S& [- C7 D& Z
  358.   {  Z0 j0 N# z; k. v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : q9 T6 S/ A9 g9 A
  360.     {
    % x4 D9 [& Z9 F- [& o. N, ?# {
  361.       file=(*p).second;) j' K. _- Q9 X9 w
  362.       free(file);5 A; z1 ]0 Z3 T& r
  363.     }
    1 Z7 S3 D1 c, w5 b( z% }5 s; V
  364.     UpdateFile1.clear();
    : l6 Z7 ~  @6 C; @0 L
  365.     UpdateList1.clear();& s8 ~0 K8 t$ ]
  366.   }
    7 V! l' w' _( b) o# c; w( d
  367. }    @/ t9 L. Y3 l
  368.   . ^( a) A4 a4 l1 j6 m3 ~! p
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    1 v' b# n! J2 w7 ]0 H; Z3 W4 m
  370. {
    / v# G& s: E& G. M. w7 c
  371.   int c;
    / E8 S# _  |, u, h& ?
  372.   LPUPDATEFILE file1,file2;
    2 m7 |1 [2 m  u/ _6 Q0 }
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 V( c" z, t; [$ D$ Y, G# B# C1 d
  374.   std::list<CString>::iterator l;4 A  p+ B0 m) L( M" U
  375. ) W  f5 l  i6 Y/ k
  376.   UpdateLocal.clear();
    - C- W( |6 R3 T8 i0 H+ }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ D) B# w, z- L4 Q% Q4 [8 g- W
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ E1 B3 ~2 g( b5 R1 w! o/ s( F0 m8 ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + x& E. N* i! j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; ]* o& G* y+ L- ~- U1 J* h
  381.   if(UpdateFile3.size())/ y6 ~$ |% T0 q$ \7 m. H
  382.   {( U) r/ |- A( J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - N" Q/ a/ w) H7 t  M
  384.     {8 y  e/ F' N) p
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 ~, P/ v* k7 ~! ^# V, R; b4 p
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + R  t& I2 q, S8 E0 k4 n. ?! m/ k0 M, @
  387.       {! h' K9 z% Q: L; H6 }
  388.         file1=(LPUPDATEFILE)(*p).second;
    $ f# M% F9 O# k6 o" X9 y
  389.         file1->vers=file2->vers;
    : K, B) H0 y8 s8 z. Q% K- ~
  390.       }
    $ o3 X' V0 R9 G3 K
  391.       else
    / K2 @! {( T- K8 R4 \. ~7 S
  392.       {
    ! ]9 y, u& F+ \! B4 n/ u& ~3 [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 H# s% o  x( H1 u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 O! z/ X9 B) j/ g& T8 u  e0 Q  ]
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 S1 J/ a1 Y4 L* D  ~) s3 h/ \
  396.       }. [; w5 v: \  @: O7 N  [* i) O% _
  397.     }$ w  \8 _* x" f1 `' ?0 U
  398.   }
    - W1 }+ i  a1 E4 Y3 p2 t
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 K9 k6 a4 K4 ^
  400.   {
    ; K3 D2 Y8 u' b9 J! \9 o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 z2 u, S$ a- m" v- v
  402.     {! @' ~  a$ P4 M
  403.       file2=(LPUPDATEFILE)(*i).second;2 q0 C) L+ h- h
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - e9 ]  w  {' ]
  405.       {
    ' ]+ G0 b9 g# a  J
  406.         file1=(LPUPDATEFILE)(*p).second;. E( Y+ s/ q+ c8 C- V
  407.         if(file1->vers!=file2->vers), ]; T+ E; b+ ^% S2 B3 J
  408.         {" }4 L1 ~' P; b& y+ Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 v3 A$ W& J) p* |) @! R
  410.           c++;
    5 }6 Y  `! D& x; Z: u
  411.         }1 F8 B: w7 u8 B1 L. y, q+ c  ^
  412.       }/ |; \2 N3 B$ y7 u4 v2 J# X
  413.       else
    ) a4 m( f# n! `
  414.       {' s6 A/ a( k: [. [, ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' R. }1 X) ~. K8 x- a
  416.         c++;
    8 X. t% E+ ]& M
  417.       }
    ! d5 k" l5 ~. B; I# |
  418.     }* e* [( q& u3 s
  419.   }7 Q5 X' ]& x+ c8 `0 [5 ~* @
  420.   unlink(".\\DownLoad\\update.txt");
    6 E6 Z2 G# f; V1 k
  421.   if(UpdateLocal.size()) return TRUE;
    ' `; w5 I! K5 }# O- ~
  422.   else                   return FALSE;8 }$ f! f5 F! n8 T$ q
  423. }' ~0 ]% G3 L0 w8 s
  424. 7 k5 S6 \8 e; C9 l7 Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"  n; D. |7 |& z+ S6 l! J
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# B& P; p3 m' P% E) O8 N: |

  427. 1 a, |0 A' F( q, ^" y' a. }  d
  428. 6 g4 x0 x' t* B) f0 j0 s
  429. 4 m3 U6 D) Q" e) i5 w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)/ u( s9 Z2 ~1 N+ h, b  C
  431. {
    ( f; S3 i! u' u
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;+ W0 r8 x3 r4 y  q0 c. T
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : [0 ]# }- o' M: l+ R) e4 ]
  434.   {
    7 j9 F: H7 X( ~* @
  435.     char szLanguage[50];
    & E8 F5 H/ Q( t' S! M9 G: O: d$ I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* k. P* o1 j" d8 E, G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 z6 u& r! z* H7 v: l  V2 g7 {
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* @1 M$ Z$ D% d$ K
  439.     else                                   m_iLanguage=ENGLISH;
    # ~, |: U! y0 u" p# O* Z7 E
  440.     char szRegister[100];
    - k( y5 s: `) p9 L' z0 p/ J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" L$ t7 J0 O& k& q4 B7 g! Z9 e
  442.     strRegsName=szRegister;
    , z8 h0 ~  O; D
  443.     char szPatchURL[100];* A& F9 z5 {+ e( n( s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 }5 b4 k# W( n( y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( V( L: I- N! y; E
  446.   }7 I. k# a. o0 p/ z0 L
  447.   else' e: g2 b# y2 m) ~; V6 Q
  448.   {
    ) D" a; b) Q( d3 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . P. \; Y3 l1 U4 p- c, P5 d
  450.     strRegsName=DEFAULT_REG_URL;
    ( q$ q7 s1 f4 Y0 u
  451.   }
    . N) F, z  ~1 ]; {6 D5 K
  452.   if(GetFileAttributes("hosts.ini")!=-1)) O5 G+ }7 l) T8 A4 r
  453.   {9 L3 P, f: X4 G7 o) [9 p
  454.     char szIP[50];
    5 x7 z5 g/ L4 M! M" q% W
  455.     char szDIR[300];  m9 o: N( @3 `) V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 o- ~; ~$ _' y' ]' R
  457.     {* E$ v" z' @: _9 l6 I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");) ]2 h0 H  I8 r) y( O' x+ z* e8 x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");, l# S/ Y/ e( `2 b5 c
  460.       strHostName=szIP;
    2 |. W, ^$ c. ]6 A  ]3 m2 i8 @9 {$ _
  461.       strHostPath.Format("/%s",szDIR);
    6 O3 V, E) H2 i5 y
  462.     }9 n; {, n/ B, j% `9 N  A
  463.     else5 v. i$ o  i- R6 s: _+ b
  464.     {
    2 h, n' ~" _% v3 T) R" Q2 C# H: P
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      }4 A9 U1 k% b' h) }/ }: u
  466.       {+ c0 [2 ]% s6 V2 N& O
  467.         char szLanguage[50];. ^1 D2 `; A$ R
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( l3 k+ {0 D0 A
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ [9 ]3 S; M+ m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 W. {0 k: W" k9 s" M% f; U# n
  471.         else                                   m_iLanguage=ENGLISH;
    ) d- b8 P3 O) ^" W+ s
  472.         char szRegister[100];
    4 {* C4 k/ M9 V2 P# ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : s  A" [7 E. c/ o8 P) H
  474.         strRegsName=szRegister;& {' m+ @3 k" z/ O, k/ O6 k
  475.         char szPatchURL[100];, U( ?; {+ g( N
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ X3 }: i" a; j$ Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& L! y. g8 m2 E! t+ N+ h
  478.       }. c5 @4 J0 @0 ?3 o- v! _; y
  479.       else- p; e' v& r. @* C
  480.       {" G& j6 I5 o1 |; Q) X$ H
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 }! ^1 W! J0 P9 Z* y  u
  482.         strRegsName=DEFAULT_REG_URL;
    . F# D6 L3 j& {0 g5 T( b0 r
  483.       }+ V7 d' @4 O, Y* k' M+ d+ K" c
  484.     }% i- s# u  u4 b0 x" w$ C7 |
  485.   }7 V7 z7 @' l4 n7 X" y. y" E9 j- Q; ~
  486.   return true;* D4 O, L* ^$ c3 N! ]$ m
  487. }# ~  H9 z) a# F5 l

  488. , \- p, _/ L! J
  489. #include ".\ZLib\unzip.h"
    . O; O0 S* y# \. T; b: ^! H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 C* C$ h/ v1 o* a* P
  491. /////////////////////////////////////////////////////////////////////////////
    + x4 L! n8 A# y$ P$ N1 [
  492. // CRevAppApp initialization
    5 `7 p: v# ^( p& i

  493. . ^/ {% z6 P* g3 F3 ~0 y: [6 H) z4 G
  494. BOOL CRevAppApp::InitInstance()
    / ]- a  K/ z3 K+ l* K7 m  @3 A+ ?4 w
  495. {) U4 m; f. Y4 t# f: V
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 \. ^  L3 s& K; ]
  497. " I6 q  ]( @8 ?; q5 M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);/ `6 f# a8 e- k5 ^9 x* {. i' N1 a6 Z" b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 O3 D: W8 z* u: Z6 E4 F) I! C
  500.   {% T6 Y6 A6 j0 ^5 X2 B; O0 J2 T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 L$ J8 f% K' G  V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    5 u" |. S& Q' |& o0 u. S1 }' H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 h+ @$ P6 H. `8 \8 G
  504.     {
    ' i9 m' @( {' ~& u2 X
  505.       strcpy(szPath,szPathTarget);
    ! v& ^: A$ H' ~
  506.       SetCurrentDirectory(szPath);( G0 ~- A7 _. y+ k1 l+ u
  507.     }
    2 o7 f' l3 ^7 B$ r; y
  508.   }
      E7 u: U3 d- Y* l' O  p: N- _  w
  509. #ifdef _DEBUG
    . h1 B, _% H: l
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 n+ _- x0 V9 u: d$ c3 g
  511. #else/ ^' D& c$ C( L9 g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 m* G& S' c+ Z6 e. T  C! v
  513. #endif7 D! ~( ^; S, @
  514.   {
    0 f0 o4 z8 j+ n2 t  V- l
  515.     char tempFileName[MAX_PATH];
    2 W  C2 ]: r5 L0 t
  516.     strcpy(tempFileName,szPathSource);: E  d. s' ^& a" e
  517.     tempFileName[strlen(szPathSource)-12]=0;& ]% V6 N; l5 A" A( E% A; a
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , k( i/ u) J. a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);5 R! t4 _/ v  |" j) X- F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    * R/ l% @" Q+ u- V" ^" p3 v8 c  b8 h3 E
  521.     return TRUE;
    / V2 x( h6 T1 D+ \6 k5 P3 I& I
  522.   }
    1 [* ]# e( u  N2 x8 e" ]4 O$ q
  523.   // Nuke 0118: Delete run.exe
    4 v8 D7 v$ B& |" d  I8 F* i
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 w4 l3 F( C% p/ n; l2 M' Q( e
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 w/ D- M8 `2 `7 Q
  526.   if(!ReadCfgFile("Config.ini"))
    7 ?  [! @* T" [( J1 P
  527.   {9 N& d% ?+ H  y: `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. p+ h& [1 u' n! R) {
  529.     return TRUE;
    ' V8 Q( C" j9 t
  530.   }8 @  [& i$ |5 O* A. `
  531.   HANDLE mutex;
    5 F, V0 @: F+ s2 D% }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 s) ^4 r) G+ R4 k+ z, }6 u
  533.   {9 _/ q% e$ s' M( f' L% u
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    . e4 P/ g" m8 x% V
  535.     {
    1 X6 j0 i9 @. K$ Z& L7 q/ d, w
  536.       CloseHandle(mutex);
    # U9 d, K0 Z. \" F% a0 ~
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 n: }* {8 a5 a& V# ^
  538.       return TRUE;
    " ?& Z9 s; z; o. J, C
  539.     }% e* a, V+ X2 h$ B  ^& f# G& J
  540.   }  * c; q5 k& `7 B+ n, j) e# U0 y
  541.   CloseHandle(mutex);
    ) L0 M1 y! }( Q$ X$ s

  542. / i3 r% Y. h1 ^( f) l1 B
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% r4 F6 {( [1 c& f) X* y

  544. " M7 m7 o, D7 y4 {/ t. S2 _4 c& H
  545.         AfxEnableControlContainer();( {0 D) Q7 t: y3 s4 Y
  546. ! D4 P  I# }" A5 T- E$ f5 S
  547.   bCanUpdate=FALSE;: j) U& @5 T2 f* l! j
  548.   dwStartUpSteps=1;
    % z" f8 z- t6 _2 B$ S" K0 o
  549.   dwProgramState=AP_NOTHING;8 B7 X2 z, f' e. }$ R
  550. ; K7 e/ p9 i  X% v& z( {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! r9 c, U% ^4 p" m( @  I
  552. 6 l# V+ P4 S( ~" T- l5 K
  553.         // Standard initialization
    $ o2 B( Q  j- g
  554.         // If you are not using these features and wish to reduce the size
    - B! V- P% e; }' ^- Z4 l1 C
  555.         //  of your final executable, you should remove from the following
    ! T4 ^8 ^8 o6 n0 d( X$ F  i4 r! }
  556.         //  the specific initialization routines you do not need.8 B9 f, W/ Y2 I7 L/ y% ?$ a/ t
  557. # F% ?: c7 s. B& u. u9 U
  558. #ifdef _AFXDLL
    ) o" P6 f  @$ H% Z( J" i0 Z; b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " H* ~+ F; V8 T3 D7 v" e3 h: w& W
  560. #else) T* v7 s4 W+ ]  C
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% B: W  E8 _+ Q* u
  562. #endif0 o/ R+ ?: ~0 n
  563. 1 {7 J* z" L( D$ B( j
  564.   dlg=new CRevAppDlg;; e' o4 L9 T: s+ a
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 X4 V/ t8 g# X1 L( |
  566.   dlg->ShowWindow(SW_SHOWNORMAL);9 ]1 g2 P/ F1 c: i( w9 p1 c
  567.   m_pMainWnd=dlg;
      A" q* Q% V9 x3 c5 \1 S
  568. / [8 `5 C" h, y) w0 ]1 L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 J7 D8 h5 V7 @+ c3 U

  570. , ?8 |; I' y: _$ T
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + }* G) e# m* y! p5 c: N5 }5 ^
  572. //  ULONG_PTR gdiplusToken;. F% L, ^) X1 E( C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  h0 t, Q) ]' s4 k

  574. & [& S' }% Q5 v) ~
  575. //        CRevAppDlg dlg;
    * \5 T" X0 ~, `/ F# p% u0 V* M# ?
  576. //        int nResponse = dlg.DoModal();
    0 ^5 t& Z$ t1 `2 m* A1 J. G* h
  577. //        if (nResponse == IDOK)
    ) c) `: O1 q( \# P1 K$ s. x
  578. //        {
    - W* y  Z" k- W3 V  I) y& i8 f( I
  579. //                // TODO: Place code here to handle when the dialog is
    % U  U9 h9 w6 }, a
  580. //                //  dismissed with OK9 C* U1 T! Z2 b5 q6 c+ y
  581. //        }
    : W: v0 A1 `) E( s7 z1 k6 I, H
  582. //        else if (nResponse == IDCANCEL)) |6 B8 k0 Z$ i4 ]
  583. //        {, S9 c' h% q9 P% T/ K0 K* A
  584. //                // TODO: Place code here to handle when the dialog is
    / }: |/ S5 n7 ]1 b
  585. //                //  dismissed with Cancel
    6 Z8 A% x  [) n; P
  586. //        }
    , d/ u3 F1 w) [, E

  587. , Y% m6 c2 p. c; W1 N$ B: w
  588.         // Since the dialog has been closed, return FALSE so that we exit the4 v2 f8 u6 `& x( p' v8 @3 ~
  589.         //  application, rather than start the application's message pump.
    0 N3 {9 P6 a4 J$ f; X( g9 D- \! y. b
  590.         return TRUE;& ^0 H1 Y& F; c
  591. }4 ^" X4 [0 y- d4 l% m

  592. 5 B0 `8 h% Q2 N( R/ \% a7 G* I8 i
  593. char *CRevAppApp::strtok3(char *pSource,char *token)# L' t) N" K* B* T2 m. E% E
  594. {) C1 |4 V; z0 |7 _+ l
  595.   int i;
    & M/ S0 W& j$ ]3 l, W( S
  596.   char *szRet;
      f. h6 C( D5 s3 h# e5 p
  597. 3 P) ?. h* S% j( L
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 A: a7 H) F$ p9 G, C
  599.   if(sztoken)
    / K* C5 y  Q- c- q
  600.   {" X! ~7 a6 ~- C* h! `( u  z
  601.     szRet=&sztoken[itoken];
    ' h% b6 z/ F( U( h* {% W. H
  602.     while(sztoken[itoken])0 T& A4 x; j7 X( W) ]% Y( h
  603.     {
    : n, D  |& P  `, `; J" p8 x1 D& b
  604.       for(i=0;i<(int)strlen(token);i++)
    ! C, U' C; R0 U$ S
  605.       {
    ( {( v3 W8 q( M. e- @4 @6 l# p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / z% j4 `: B# W9 n* J* _3 S( M
  607.         {3 W: v. X( C5 x. ]& g2 d- t
  608.           sztoken[itoken++]=0;$ W/ |- y6 W' A- b# e& b+ y
  609.           sztoken[itoken++]=0;
    2 G. i) s8 {, `
  610.           return szRet;9 H3 W6 B  K  \/ N& E, T
  611.         }* X1 s3 e) [+ t2 i! U$ S6 O+ y
  612.       }
    2 D/ V+ A# E7 T& O* _% w9 r
  613.       itoken++;
    ( R2 a5 L# G% S3 P
  614.     }
    6 ~  B& {) m4 `) F4 x: h
  615.   }
    " J6 j7 R5 k' z! l' Q
  616.   return NULL;5 p  i$ a% t0 J
  617. }
    , L2 n" c& L" J: W0 o4 J
  618. 4 D* Q! L1 W( X' H
  619. void ProcessProc(long Total,long Current)8 Z' s! D0 x7 G& u) B- B; k- y& h0 a
  620. {
    % ]7 |, c( a' C1 A. T
  621.         MSG msg;2 p( I' U3 l0 c
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);6 r4 n+ h6 d- _1 l3 y. B
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    2 a4 _" o' j- u3 f1 g- i  X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! j$ w5 M. }0 ]
  625.         {
    * e( z7 n2 @9 f8 u) Z3 q! Z( f
  626.                 if(!GetMessage(&msg,NULL,0,0))6 k* n4 S1 o7 D" g- }
  627.                 {0 @% i7 R2 v4 f7 r: B$ J
  628.                         return;& k5 A  c$ @# Q
  629.                 }
    & G5 m2 C% h* c
  630.                 TranslateMessage(&msg);
    & u  D( [& r2 m3 t1 ]2 W7 k
  631.                 DispatchMessage(&msg);
    # \" b4 F% u  L
  632.         }        $ w4 C7 l1 R. I9 h9 \/ z% w
  633. }
    / z1 S! N- o1 e' q/ k, u( a

  634. % l* j2 _9 s1 Z
  635. BOOL bFirstChar=TRUE;
    / R2 t, m$ s* p% o8 r+ z
  636. 9 d' c, F% ^. i: N  Z& ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 {2 d2 D- z$ t& m+ t6 U+ g% F" Q
  638. {
    " ?9 \) k6 ~9 ?# V# G7 ^
  639.         // TODO: Add your specialized code here and/or call the base class: k* n1 f+ S( x
  640.   switch(dwProgramState)
    % M" J; G) ?7 e
  641.   {
    9 _: \1 V) T/ |' C2 j' {
  642.   case AP_NOTHING:6 N* Y6 \; M- A; D
  643.     switch(dwStartUpSteps)2 |. @. ^, |' |( S+ I
  644.     {2 \& @9 C7 D- V7 H$ B
  645.     case 1:
    - F  w% C4 W9 N/ w$ I0 Y
  646.       {
    0 J, }( x+ F1 s- A0 D
  647.         int i;3 Z# l9 ?5 W' W) j1 g) l. A3 c
  648.         CDC *pCDC=dlg->GetDC();2 E6 Q0 E7 Q* o- w
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! @" B( @0 R- E2 u6 H& m& Z4 M$ n# ?
  650. //        Graphics graphics(hdcwnd);  ?& I% v8 I4 k: [& ^9 \1 H" f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, p; U1 V4 [. p0 `, @- a3 T
  652. //        INT iWidth=bitmap.GetWidth();$ ?1 S, n3 M' p) I0 u8 U
  653. //        INT iHeight=bitmap.GetHeight();
    7 t, r4 |  V/ w: R0 ]2 g/ l
  654. //        Color color,colorTemp;7 M0 \( L+ }- {) G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 S2 r. B, Q6 X# u9 a9 y6 Q1 i; l
  656. //        {
    " g5 z3 z0 p6 ?1 V: W9 v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)  m- r0 z5 V7 ^5 ^) A5 X* W1 K
  658. //          {
    / D1 i( {7 v0 M4 _8 _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 C! U7 u1 ]7 _. B& ]( B
  660. //            colorTemp.SetValue(color.MakeARGB(
    * v5 F: p* S- j) V4 w6 l$ B3 u
  661. //              (BYTE)(255*iColumn/iWidth),: x! g. R4 W2 l" Q5 J
  662. //              color.GetRed(),2 d8 O  b% J7 \
  663. //              color.GetGreen(),
    1 p( N- `( c  B  a' F
  664. //              color.GetBlue()));' y& U* g, [/ [$ _# S0 A! U6 I" v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* V0 k, e" U3 N) A, n
  666. //          }! ?3 h) Q- j% c( c  S% k
  667. //        }
    $ G- U, O  e$ z. o, w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # i  r( O+ C; N* X* ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 ]* K( H" h6 O1 q7 T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 V' V& z. }* w  j  a. y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* ~  t% E: y% X6 l% l0 A; V
  672.         for(i=0;i<240;i+=8)# L2 r/ ]$ s0 D* }% i; l' r- u
  673.         {# L+ S; j/ @5 A* b+ T$ E6 {* X
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 c+ L5 ~* {  U( l/ d! E
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 w2 }8 ^# s/ W" V" Y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; A3 g7 A4 q2 ?. R
  677.           Sleep(33);# j& W( s  A5 ~6 }7 c, l7 Q% R; P' @
  678.         }
    . ~# h- S9 C/ @7 y
  679.         Sleep(1000);& p& M' b7 b3 |8 e; m8 ?/ B
  680.         for(i=240;i>0;i-=8)7 a: h, \8 W, @- E% D+ H) `  O
  681.         {: E% O+ t6 N* h2 q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ U2 H. A; y) q! `8 Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 A) S: H- X9 W; h0 J% |5 m& r
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) ]- r. H4 e1 S1 P" u) I) e
  685.           Sleep(33);3 o, ^- y& [# {3 S6 c
  686.         }
    & v  _0 J+ r0 a1 B
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  i' K; V; D' i- d
  688.         dlg->ReleaseDC(pCDC);
    - Z5 E; J6 ~8 {7 Z( ?) e9 Y
  689.         DeleteDC(hdctar);; ?( z# |0 h2 L* N1 U6 r) W% K+ c& e
  690.         DeleteDC(hdcsrc);
    2 v: y5 Q5 J; {7 n7 ~7 ~. ?
  691.         DeleteDC(hdcorg);
    * g' V8 U: _2 H$ P
  692.       }% ~  |4 R) w: A- t+ \7 b  g8 B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; B$ E  o  V% v* G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    : ?3 f! h1 g5 |; K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" G5 e( v! v' Q/ O
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");' \; n) @& {: v1 _( _4 k
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 f. V" }9 |3 P
  698.       if(!Dn.Connected())+ f9 V0 X9 b! k  s0 S
  699.       {
    ) D# W; ^. Z4 b% A; V+ O
  700.         dwTotalFiles=1;
    3 y* V! p' ~/ \9 t
  701.         dwDownLoaded=0;
    3 c4 `; e- s$ J4 @
  702.         bSilentStep=TRUE;
      n: ]5 z; w! r3 `, P( C- Q5 c$ u
  703.         bCompressed=FALSE;" J" `+ _# H7 ]! m( u  V  O. u
  704.         strExtLocal.Empty();) _2 o8 p* y; y# Z& r
  705.         strFullName="readme.txt";
    2 p+ z& ~5 r* @  o- g3 `8 }; y
  706.         dwProgramState=AP_CONNECT;) u! m% a) z6 [% L1 ^! ~7 P2 Z
  707.       }: i/ F" ?8 l0 r$ ]' A9 t8 c
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();6 \7 n) c! r* ]3 _/ U: J0 y% I
  709.       dwStartUpSteps=2;
    ) t, [. C3 M* j5 k- c* x+ s) X
  710.       break;0 h& G; b) f7 H; i, a
  711.     case 2:
    ! l6 ~0 w3 l+ K
  712.       {% t8 |3 p8 S# b. E$ F# ^
  713.         int iEOF;
    8 e) X6 c. I* i- {
  714.         FILE *fp;$ M4 W& ~  s" y2 j, R. b
  715.         char szString[512];- D0 R( x' w- j# e0 k
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 h6 d( l3 g) e8 e+ c; T; Y" Y
  717.         if(fp)3 H7 X" c! h9 ]
  718.         {
    7 f. A2 y# }! G: B
  719.           do* r( Z: a0 m/ N! i: G
  720.           {
    - j1 K- {+ |# x- F3 ^9 S
  721.             iEOF=fscanf(fp,"%s",szString);
    / c$ \' j: s6 C
  722.             if(strlen(szString))
    4 r" O9 i# a& C7 b% V
  723.             {2 A  n% r2 M4 \+ ~3 j7 J6 ]2 s
  724.               if(bFirstChar)
    ; @3 p8 m% }+ d
  725.               {9 k, e% E; C1 l( d
  726.                 bFirstChar=FALSE;
    0 @: n( Q' i: `" }# c* q1 U
  727.                 bConnectIsBig5=FALSE;
    7 d( ?# m% \# h( g  Z' B# f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;7 [7 _& ~3 Y- T7 h' X
  729.               }
    & Y2 _2 ]4 B: e; h1 K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));" W) N7 d& L  c' [( Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% D( y/ ]- q, t! Y4 _6 g
  732.               dlg->m_ListText.AddString(szString);6 J# q. h8 O5 a1 d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ }/ }6 `, c6 F
  734.               *szString=0;
    8 K, }, G: c6 d
  735.             }# L0 R) x  U+ P7 R7 {$ I; G& R
  736.           } while(iEOF!=EOF);* K+ ^9 T7 c; a) |, W! k+ i
  737.           fclose(fp);
    7 K9 }. S  R8 j5 l4 _; C/ E2 y  h; h
  738.           unlink(".\\DownLoad\\readme.txt");% W: j% e& u: w4 d% \
  739.           dwStartUpSteps=3;. N" r2 I% g4 _9 o  u2 Z
  740.         }3 N, p4 a; s1 d. |8 Z* O- C
  741.       }" U) ~5 |1 N3 v
  742.       break;; w8 F( H7 a2 P
  743.     case 3:0 ^& k4 y* t+ f$ v, M
  744.       if(!Dn.Connected())
    7 o8 B6 h9 U- p6 U, G
  745.       {& z; E, J: Q7 m( g
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" n5 q8 z" W! G- l
  747.         dwTotalFiles=1;2 M/ W7 ?4 ^1 S4 d* [
  748.         dwDownLoaded=0;. o0 m2 D4 r1 T% Q/ m8 e9 ?3 R( O
  749.         bSilentStep=TRUE;2 F$ E1 I) p- W, V& ~1 @
  750.         bCompressed=FALSE;
    / X% t# Z8 T7 \6 S7 O! p7 {
  751.         strExtLocal.Empty();' H2 K- F& l$ B
  752.         strFullName="checkversion.txt";
    ! P2 {2 t+ t, ]2 I: b$ l( j- c
  753.         dwProgramState=AP_CONNECT;
    $ u/ @* e/ j7 O7 i# j
  754.       }
    & z. @0 g7 J# ^. C, ~  p2 ^
  755.       dwStartUpSteps=4;
    - k; ^- q5 @  K  e/ p  Z6 Z
  756.       break;  S1 ?8 r% [; Y7 l4 i
  757.     case 4:9 h* }3 x8 {! R  V
  758.       {* V8 f- Z' f5 B" H9 t
  759.         FILE *fp;7 o7 F6 g/ A2 I9 `1 L% f" Y
  760.         char szString1[128];
    0 R1 E/ L' h" ?3 E* d) w
  761.         char szString2[128];& s+ Y3 d+ L% C2 o  I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    / H$ y& s/ R  h' L
  763.         if(fp)
    # j$ f9 C3 ~, _: a% k3 G
  764.         {
    8 q" o# [& z5 a( y5 S* K
  765.           fscanf(fp,"%s",szString1);/ |- q- X5 A  ~, z6 y* X
  766.           fclose(fp);
    ( D: `; |: F- Q, q8 }# S7 e8 x: K+ J
  767.           fCheckVersion=atof(szString1);
    ; j  m5 i" P3 G  Z( b: A* p
  768.           fp=fopen(".\\checkversion.dat","r");" k' b1 h" K4 k. i& ^
  769.           if(fp)
    $ _' s  h* I, B0 n! E0 b$ \5 o
  770.           {$ b2 @1 Q4 C+ L
  771.             fscanf(fp,"%s",szString2);
    , x: n- |* t! h' v" N
  772.             fclose(fp);# S6 O' X0 {( {; L, K
  773.             if(atof(szString1)!=atof(szString2)): V  {7 Z8 y9 q  j7 ^/ P
  774.             {
    + R( X0 P, |+ e+ J; N1 N% N
  775.               if(!Dn.Connected())
    , m4 x( X' }$ E+ f
  776.               {
    + J' {2 }( m7 _  D" Z) m
  777.                 bFirstUpdate=TRUE;9 T/ h9 t# I+ Q- x( b) J( i
  778.                 dwTotalFiles=1;
    " d& {. |6 N/ |6 v( Z
  779.                 dwDownLoaded=0;
    ( a8 f- K5 h* o& V
  780.                 bSilentStep=FALSE;
    % c, l2 H: d8 @) _: k
  781.                 bCompressed=TRUE;1 G; O" B1 E2 |
  782.                 strExtLocal=".\\DownLoad\";
    . v7 y' j$ M6 m1 L! t
  783.                 strFullName="update.txt";
    ; j2 P+ t( W( T+ y9 p+ w6 ~
  784.                 dwProgramState=AP_CONNECT;
    7 o! I' w% o* ]6 m; c! ]) N
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' @# m' q3 Q; X& T% I2 b. i& @9 x# O; p
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");! q6 ^7 E/ k! N. s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 B* P" O% t" y

  788. % z$ {1 A1 M' y# t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 S6 c7 T, I: E) I6 _
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    1 o" O* k% r; X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 S8 o; Y8 }, _% j3 f
  792.                 {: R6 {" v- R4 e- N/ f$ |# U1 t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");# H% @! F: Z* K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
      Q  L4 N( y5 ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' |  I2 g" G. z* Q. X5 A+ A
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % F6 M6 N8 Y% T" r( z+ B) f
  797. : B3 F4 w6 x! S' C
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 k6 f# J  Y1 B) w$ Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' z; [+ _) C- O1 n% z1 m+ U6 y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");3 q6 u2 E) Q! C' B! a7 g- D8 i
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( f* @4 s6 w! Z) p1 g' v
  802.                 }/ c5 e# ~! E' q- E2 R' Y3 C
  803.                 dwStartUpSteps=5;4 {# s* D- v5 W# h0 Q+ ^9 T
  804.               }$ ~  S. y  h; d+ I* J: h" j, z
  805.             }
    * `  W  R& W! Z
  806.             else
    0 ^3 }9 P7 v! d5 Y
  807.             {
    * V% U2 ?9 C' Y; V
  808.               unlink(".\\DownLoad\\checkversion.txt");2 g; @- N* ~; V" E
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - w% l! M/ J4 F8 Y6 D, y* W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 |6 A# q/ _  D1 R( i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    2 A  T4 Q, G! n+ J) J7 m6 l
  812.   w7 Y0 R4 |0 _( P! Y0 h+ }1 y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      J& m, V9 m7 r( V% x5 |
  814.               dwStartUpSteps=99;# \8 x7 j# Y/ P" K
  815.               bFinishUpdated=TRUE;0 a+ L( H. U4 l* b  U0 K6 e1 n/ |. N
  816.               bCanUpdate=TRUE;
    8 e& e8 v: O8 n0 \9 e- i$ F
  817.             }
    : z0 I- ^1 s$ p
  818.           }
    # Z" }! a% m: P' w) g) I
  819.           else
    8 M0 \' ~7 Q: d; d
  820.           {
    & U( _# p+ c* U4 P# b
  821.             if(!Dn.Connected())
    # z2 ~; q6 Q7 T. p
  822.             {0 T3 g( K7 i$ [+ e) e; k
  823.               bFirstUpdate=TRUE;
    # O; s" X' h3 G' e( f$ ?
  824.               dwTotalFiles=1;
    " Z1 Z/ N, R8 ?/ D5 Y
  825.               dwDownLoaded=0;2 ~4 S+ r; U* d  u
  826.               bSilentStep=FALSE;3 K$ [2 [: A1 o& X# V3 K' e* W
  827.               bCompressed=TRUE;
    5 S8 O; q- d. U; u: ?% D1 Y8 b
  828.               strExtLocal=".\\DownLoad\";
    8 F1 l$ A2 p- P& h% d
  829.               strFullName="update.txt";
    4 j: K& Y4 L4 Z
  830.               dwProgramState=AP_CONNECT;
    2 f& {; j/ b  j; L& _
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + s9 [( n# d. }0 ?
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ; F6 f$ H7 g8 y& u& s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 }1 z7 X# Z7 w+ c" a5 h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% _- e" ?* M2 E) I. X
  835.               unlink(".\\DownLoad\\checkversion.txt");* W& E& R; x; h
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)! B$ V7 V. ^( k9 T( }( w; v" @: b
  837.               {
    5 g2 }+ N; Y- ~, `* q; n8 T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");5 U0 T4 |$ i2 \- I- M; y2 C9 B0 c) o6 b
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");) U0 j; g: U2 c, c1 i/ o
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    % V3 e2 E# s/ ~0 K8 O( F6 ?
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ~/ B* D" D0 t5 B& J+ j4 I
  842.                 8 g0 a8 L1 Q; l7 l8 L! J
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 d' Q' ^9 G/ V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + J$ f  S6 }8 A: W- M4 A. O
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 t5 w2 g- d/ z% S/ `* @
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 N4 O7 p+ d( t9 c* R+ `# O) @2 z
  847.               }
    3 [7 R1 z& `0 A- n% f" g# R
  848.               dwStartUpSteps=5;
    / k, [% Q/ u1 h
  849.             }
    , f* t) R7 h. _
  850.           }2 }2 k, r8 Z. V
  851.         }
    0 n7 {0 g8 v' ?" d
  852.         else' @! m" [- R4 S4 E3 I9 n( h- B
  853.         {$ d( Z5 I9 ~; b* M7 b# H! d
  854.           dwStartUpSteps=3;
    0 K" J: w" H9 g2 z- s3 d
  855.         }+ Q$ P) H2 j; h* c
  856.       }
    3 D" C' L% W' s# H) ]5 ~
  857.       break;
    9 o3 ?2 h1 q6 W
  858.     case 5:( _7 v2 x' H- L% M/ t
  859.       {
    - {0 Z3 n( l# B; y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)9 `  ]" P  U8 n) J( C
  861.         {
    / w& |% D! D: p+ j/ x6 R
  862.           int opt_overwrite=1;
    # K$ }  m" C1 b) P9 X) I: S6 {6 [
  863.           int opt_do_extract_withoutpath=0;! ~5 ?1 F) B7 D0 m9 n: ^  y8 x
  864.           unzFile uf=NULL;( Q+ H2 _2 f- w  C5 h

  865. : [! Q5 R2 r3 t: z
  866.           uf=unzOpen("Wsa.zip");
    3 v' K9 h3 {- W$ B  X" K
  867.           if(uf)/ O( ]7 a9 ?& w9 g9 U
  868.           {
      h; g/ `- q' {$ D- w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 ~( X" v& O+ z! |, d5 E
  870.             unzClose(uf);+ V7 k  U1 `& f" z: H0 I- E, I
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    8 s! u2 A; E! q. c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    2 H- P# q/ F# P0 ?9 h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");8 o& H$ h8 u( d' }: g, b) _: Y
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- B6 u% u4 N8 l! p# K
  875.           }
    8 H% I* E5 j; \5 d
  876.           DeleteFile("Wsa.zip" );
    9 l' |% o, _+ M; j6 [& i) q
  877.         }" g8 {+ |$ O) K/ \* {  c

  878. 6 k4 g, P) z: C6 E" V! e
  879.         if(CheckLocalVersion())* O: p9 S$ t3 H/ m" q
  880.         {4 b; B3 R- ~. h5 M9 O
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");; M' Z; J+ t" R( L. @  R  A' P1 G' H
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    + G6 M" ?4 V0 x
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    5 G4 l6 Q$ R1 C6 Z0 `
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ \  i/ U6 |& X" z5 `
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);0 ]+ Q: H( z6 o- f- g
  886.           dwStartUpSteps=99;% S# {, n- w, u; v
  887.         }' s; C- _& Y/ U, E
  888.         else
    : W4 h4 v1 j1 A$ p
  889.         {3 E; F& {% h9 z, d3 F
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & p, z) [5 N5 V6 v! L9 f& V
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 d! h. e: \1 k/ s. p
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    % b& ~' Y2 t, u7 ?3 g

  893. 0 X3 n& r6 j; J! ^/ C
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / Q$ \5 u4 U- P+ S1 O" S0 |4 E5 g  z
  895.           dwStartUpSteps=99;% f3 ]* E' n6 Q; t/ c
  896.           bFinishUpdated=TRUE;9 w& k4 u2 ~& A4 p/ l! V' O4 ~3 V  ?
  897.         }4 L8 H. z/ q0 s! [+ c" _& d
  898.         bCanUpdate=TRUE;
    $ B7 M) v9 b1 }) b
  899.       }, A/ d1 V2 U' ~3 }6 {& W2 _) {: X
  900.       break;( @9 D6 J& J) r
  901.     case 6:. \+ t! f- N' J
  902.       {* `2 P  Z* y0 u7 i* Y5 G6 r
  903.         if(!UpdateLocalVersion())5 ]7 K; [. S: H6 \! o
  904.         {; e$ \1 l* _. d7 b$ a2 u+ y8 L  c
  905.           if(bRestartUpdater), m2 G, k& N/ X9 D4 K6 i
  906.           {' R; B! V% f7 R, Z- L% \" R, `
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);; ^# x" Z2 L! j& [
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    # k0 C. {! K2 S3 T( n0 }  M
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);" ]% M0 ^  ]- D) B; y
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());% o6 G- a9 A, N9 y5 y) ^
  911.             dwStartUpSteps=99;8 V5 T& L$ p" y9 I5 L: K, F, \
  912.           }+ w: {$ p2 R# s7 A4 c4 i( t
  913.           else, G# b) B* u& e! a. Q7 B# }& ~
  914.           {
    ! _, w9 X: T) `6 ^7 b1 r. m2 x. `
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");/ x- @* E  T; {0 m
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");! `; O0 Y0 T+ A
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");5 u7 p, _2 W9 x$ Y7 |0 U6 a) b% R
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 [; Y3 P: t4 m  c, a
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);; m1 g0 d, n& b& @1 E, ^8 p
  920.             dwStartUpSteps=7;( x% D7 g( t  s& _9 Q
  921.             bFinishUpdated=TRUE;
    1 ~8 N7 Z4 D/ V
  922.           }, k; n! m$ Z3 i% F* c! p9 z
  923.         }  Z# x- L6 {# k4 @; J1 K( a
  924.         else) I+ Y% F- S+ w0 Y
  925.         {
    $ ^0 d: U! ~7 q) q9 V2 f
  926.           if(bRestartUpdater)
    ; u8 @7 c4 c. s: o1 Q
  927.           {
      P+ ^' w& W: G  P: N+ E
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
    / [- m' N% O+ F% g8 v- a( s$ C
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    ! Q/ O; c0 d# m+ l; l& l9 q7 E9 ^
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);. ~: n( }; n$ o3 O
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());; u! I' E- I! h1 w6 h. j% h
  932.             dwStartUpSteps=99;
    9 |9 j( G- _( D$ |, Z1 n& J- Q
  933.           }
    , P# ~9 e$ s3 T& P5 y8 n
  934.         }( a; m4 n/ Y/ h1 ~8 a* V  M
  935.       }
    6 `0 K" c4 m7 m  `# L' m
  936.       break;4 y& h, O3 u! h$ I/ p4 q
  937.     case 7:
    1 R& i& k, L" r& B! ~
  938.       {
    9 L2 Z7 o3 T$ B1 {5 q4 W
  939.         char szExecuteFile[14]="Bf_Client.exe";
    ( L9 H9 p. u/ R. N: B" v
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");; ?/ E7 v& q' y* M7 f( z# C  P2 \
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    - M6 e* e+ n$ ~* \7 ?
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);. A2 z6 D: C8 h' M
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    7 a$ q2 s2 b! i, g) Y  W
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());
    , a% [0 _- z, k2 o
  945.         dwStartUpSteps=99;
    - [6 d, X1 I+ k6 F2 e+ D, s$ ~
  946.       }# W# q7 f! q% L; v
  947.       break;
      w. F# z- M3 ^: o  x
  948.                 //add by cece4 K4 N0 T% h  [5 d& n0 w
  949.                 case 8:! }+ a7 |* F2 E
  950.                         {0 {  _1 p5 W( O  N( f
  951.                                 if(!Dn.Connected()): j+ j- {) r6 A3 t6 t  `+ P
  952.                                 {
    9 b( e2 x4 F# k) P1 a( m
  953.                                         dwTotalFiles=1;7 e$ f: q) t- F- T' l! Q* L) X
  954.                                         dwDownLoaded=0;- W5 m; n$ ~. a7 Z0 b
  955.                                         bSilentStep=TRUE;
    8 L( Z( ]0 o4 |7 ?" n1 u. o* c
  956.                                         bCompressed=TRUE;
    - @- L2 v& b: Q' A7 Z$ A
  957.                                         strExtLocal.Empty();; o; }" o5 Q8 V3 Z  o& G) b
  958.                                         strFullName="download/CRCTable.txt";" W" F  t( x' u: l, R
  959.                                         dwProgramState=AP_CONNECT;' O$ j- N0 z( r$ Z* c
  960.                                 }
    " {: Y8 x% N2 G, X  |: ]6 {  i
  961.                                 //" \+ m6 a* [- y, i) e
  962.                                 dwStartUpSteps = 9;$ x: L/ V9 F# M( Y
  963.                         }
    ! W- Q- R9 p- B9 O! G: }' A  [
  964.                         break;. d. T: ]/ N1 Y$ N% `
  965.                 case 9:7 ?) e$ T/ e" g' Q4 ?
  966.                         {5 M  a$ k& y5 f; @# v( q% ?! K
  967.                                 if(!Dn.Connected()): @. P* L' B- I4 B
  968.                                 {
    ! D$ C5 ?3 g7 i+ P5 f! U9 `$ ^5 `
  969.                                         dwTotalFiles=1;# n; f) ?" ~8 X, _' p$ J8 Y
  970.                                         dwDownLoaded=0;
    / m5 X+ [0 K; w
  971.                                         bSilentStep=TRUE;
    5 |# n9 P5 @% ^# O2 i' |6 Y$ Z
  972.                                         bCompressed=TRUE;
    & N  _, u0 ~2 r. j4 v0 g* \) O
  973.                                         strExtLocal.Empty();: j% w" [. r# T( `+ h" |
  974.                                         strFullName="Run.exe";6 _1 P3 R( B. J
  975.                                         dwProgramState=AP_CONNECT;
    1 L0 j6 g6 C9 H
  976.                                 }6 v, [* u& Q* m
  977.                                 //
    ! \" f+ D" w( b. U/ m
  978.                                 dwStartUpSteps = 10;, q4 |0 p) l$ `1 F' E" O8 i9 g0 o
  979.                         }
    ! K) h% W9 M1 N: n
  980.                         break;
    " g5 |8 F# @1 u0 V* r' g
  981.                 case 10:
    1 N( ^  r* {7 @! S
  982.                         {# h: W' t) E- b8 X2 L
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);# A& B  \5 {- |" s8 x$ D7 {: q
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);
    ; u" Z0 P& R( _7 m- v+ ^* u
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);+ v7 g( ~) t. X! R
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    # P0 l. L6 @. }
  987.                                 theApp.bClickRunExe = FALSE;
    - i" K( U6 k+ D% p' f3 @
  988.         dwStartUpSteps = 99;
    0 j" Y  E  u2 f4 c; P6 x
  989.                                 //3 P' J2 X/ x. s8 T+ h( i
  990.                         }
    8 `/ a+ o% b* Q2 Q! @9 q
  991.                         break;( g. H- W; m3 q
  992.                 //& {$ X# i+ w' K' K: z7 w% I) f% m! P2 r
  993.     }- n% T$ Z  K8 R
  994.     break;
    3 C" P8 I) T; q3 G
  995.   case AP_CONNECT:  A$ A4 X/ f5 L# z! C9 H* M9 \4 [# ?8 H
  996.           if(Dn.InitNWSSock(4096,4096))$ E5 H" r, O- V( O  X0 z# ~
  997.     {! L# i3 h, z. J! m
  998.       char szPathName[MAX_PATH];5 v, A6 P( x% X/ I% y
  999.       dwLastSize=0;
    2 Z* U0 A; K9 n& z8 m
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);# h; a: ]" p1 b1 V) h+ S5 R
  1001.       strFilePath=strExtLocal+szPathName;
    ; V# r# w% J* ~8 H
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));
    0 H3 D5 r# y# s. J# Z' V" ?+ A( w' G
  1003.       dwResumeNums=0;
    8 u# C0 F# D6 C: p
  1004.       CString strTempName;# Y* S9 C- U6 N
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);& A% d: Z4 ]! Q2 l& o! d* Y. o4 e
  1006.       CString strCountData;
    : J# {1 j' `6 E" f! H1 {2 c) K
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);8 e3 ^6 v8 D% `" H6 ?
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);
    , I4 h( @& U1 y$ ~0 k
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; n" e0 j9 ^* l. r" H& X- T, J8 Q, k+ m
  1010.       if(bCompressed)- A7 M/ A- S# ]( q6 F2 c5 ]
  1011.       {; o6 f$ M% x: ~* L
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
    8 M7 ~4 }0 h( d5 \4 I/ @! x. ~
  1013.       }
    0 ]1 w" V# B  R
  1014.       else
    9 Z6 C! c1 O7 Y/ F
  1015.       {
    : p# E8 k/ H4 K7 k; y
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
    7 T9 x" e% s' `) w$ m
  1017.       }
    " A3 i! R5 P; f4 F5 I2 P7 j
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    " A$ O3 w3 b. K: b, M* D- q. c
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());' w5 \1 \  U. n, e7 T5 r
  1020.       LastTickCount=GetTickCount();
    ( z3 t. C- g1 ]9 j& G
  1021.       dwProgramState=AP_SENDING;' u4 s. e  f7 ]& C  H* u
  1022.     }$ g6 g( z# Z6 y/ f" T7 I; I1 Z
  1023.     else/ O% [2 w0 ]3 q( o
  1024.     {. }. V( v- f6 K3 P, e
  1025.       Dn.QuitNWSSock();
    ( p# S' d$ R2 e* n' _+ S* X) J  W
  1026.       dwProgramState=AP_NOTHING;' [" K2 k* r% H. O3 ^0 B' k
  1027.     }
    # x9 }$ e! r6 Z
  1028.     break;
    1 {! ]/ I5 E  @2 B
  1029.   case AP_RESUMED:
    & q4 \# o( d0 r( g0 A! `. `) I8 G
  1030.           if(Dn.InitNWSSock(4096,4096))
    3 L" Q8 ~4 i" J; v1 `7 U, S; z
  1031.     {3 \7 y( a; E$ @! E
  1032.       dwResumeNums++;
    0 T/ m' Z: V3 q! q2 C4 x) x/ y
  1033.       CString strTempName;
    ; y4 m+ a* Y6 W0 t
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);$ X3 u1 ^: T7 `( y& h, V
  1035.       CString strCountData;. @/ G, R; y) k# a, U$ }
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);0 ^0 R$ g, `3 Y: o
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);
    9 b+ ?/ \3 p2 i
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - H" }' ~1 K  W1 G& H; D7 r. I
  1039.       if(bCompressed): \5 {2 p9 f' t$ M
  1040.       {1 G3 u$ s! d+ j( L) `
  1041.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);
    " q( K! R' g- K
  1042.       }7 J. \- `3 [% W2 K" v5 M
  1043.       else
    / t& s3 e  M( v: ^: M7 Y
  1044.       {% G: Y! d% E7 M  A  F) B6 Q- G
  1045.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nRange: bytes=%d-\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName,dwCurrSize);
    # z$ y6 V% r" \9 r; _# J( u1 l& s# u
  1046.       }1 \* Y- A6 a0 V/ ~# A
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);( W6 A) b9 h' m& |
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());# ^( m& g' Z8 A
  1049.       LastTickCount=GetTickCount();) E+ S' ^& \4 s4 i* w
  1050.       dwProgramState=AP_SENDING;
    $ j- s, h: {) M1 Y& s0 T
  1051.     }
    3 U3 O2 x8 X- M' N3 v
  1052.     else" X" R3 I2 Y2 Q4 `( X; _+ r) T( b; V
  1053.     {
    & k: l4 Z' `1 N7 \/ j5 d
  1054.       Dn.QuitNWSSock();4 u2 W2 f2 L- T1 s4 y9 V/ x
  1055.       dwProgramState=AP_NOTHING;
    6 P9 h; r+ d& t! h$ u
  1056.     }- Q! F: W9 u4 p, _
  1057.     break;) @* m: L3 Y! ^: X- \" W4 d
  1058.   case AP_SENDING:. E# S5 E/ v3 S8 [) ]( X2 l
  1059.     {' z: J' Z( X: Y. }
  1060.       DWORD RecvLen,SendLen;
    ) k) C8 v+ p- W9 ~& b. E
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen))7 Y) c) J5 q! _' n; X
  1062.       {
    ! D6 Z/ \( l, @% T- d
  1063.         LastTickCount=GetTickCount();- y- X4 L# m: {: B) }; k6 h
  1064.         if(SendLen)
    $ l$ r& l, |9 v8 j( T
  1065.         {0 V" m# s0 z3 F0 g2 `5 z  q- |
  1066.           bReadHeaders=FALSE;  y* X) j! V1 w: H( K0 e
  1067.           dwProgramState=AP_RECEIVE;
    & @1 V% {2 o4 W8 ]. S( H8 L
  1068.         }, X& b# [* A* M5 o( z6 b* |
  1069.       }
    2 l1 m* G% Z" |1 b# f" B$ k2 h
  1070.       else
    + |; C0 ?' M1 c
  1071.       {0 l# C3 V# r& g! x. z  P
  1072.         if(GetTickCount()-LastTickCount>3000)
    ) W; U; I/ B1 h+ y
  1073.         {  g0 m& A) D) Y; k# D
  1074.           Dn.QuitNWSSock();
    ) f! W, R+ _# M- u+ H% E
  1075.           dwProgramState=AP_CONNECT;
    5 C" W& P, c; W2 t( U, q% l
  1076.                                         //5 E0 K" C1 o& t3 r3 w2 f6 E( {' g
  1077.                                         static DWORD s_dwCount = 0;) T& p8 ~+ [* C
  1078.                                         s_dwCount++;4 `" l( \; N: i6 r- T
  1079.                                         if( s_dwCount > 10 )
    5 E6 T5 q" v( m  J5 h* q( e
  1080.                                         {
    + T5 q3 O. c6 c& b& N) o  w! B' p
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);) }) p3 i+ ?% c; s& }( F: A2 [
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);9 z% q" |; h5 H8 o* b
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);
    - n7 v- I- p2 r& O& U
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());' A. Y+ F+ P) h& Y# |" D
  1085.                                         }0 l5 x+ l/ a+ q& x& V6 {  O
  1086.         }, m3 Y$ B4 r4 [
  1087.       }& N8 H( P* w5 ]# W9 x
  1088.     }7 s! o6 _8 a9 f3 @$ Q& ?
  1089.     break;5 F5 Z" z$ D+ Y6 a( p4 F  ?
  1090.   case AP_RECEIVE:0 ]" p4 V7 K2 Q1 @
  1091.     {8 ?7 F; E7 Z& f% ]; ?
  1092.       int Count;
    ; i/ ]) p( u, A: g9 E+ ~( \+ M
  1093.       DWORD RecvLen,SendLen;' z$ S; w7 {/ r' j  ]  K. E
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))
    ) y. B: S' z4 d8 m8 L; O
  1095.       {- a1 ~$ D% _6 M8 z5 Q
  1096.         LastTickCount=GetTickCount();3 C/ R- h) C( G5 H2 q
  1097.         if(RecvLen)
    . g# c5 Z8 {2 j- R* Z
  1098.         {$ a/ L' J+ D1 c' g: w; ^) S
  1099.           if(!bReadHeaders)7 @" I' `1 a/ V7 B" \7 N( |3 W/ n
  1100.           {
    ; r# T% ~3 M% k9 \& T. c
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");  ^1 s. F( k2 l: [2 c
  1102.             if(token)
    5 q) Z- t7 g; j& f
  1103.             {5 m- ]7 K, T* H6 _# X0 [( ]
  1104.               dwFileSize=0;* O3 Z/ J4 e% ~' C$ E4 X# v+ Z8 q
  1105.               for(int i=0;i<(int)strlen(token)-3;i++)
    ! D% C% k( L$ F8 O9 U* m4 Q9 s% v
  1106.               {# m( k2 J1 A! C! [1 j
  1107.                 if(!strnicmp(&token[i],"206",3))
    ! G, I* A/ R0 u1 ^
  1108.                 {
    1 P% t( {. A5 j+ {' r
  1109.                   if(!bSilentStep)2 e' n* T1 |5 c5 y& ^% Q
  1110.                   {
    7 @3 l4 }8 }" `: @1 S! W
  1111.                     CString strTempName;# s* Q9 q& Y9 `
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);! e! A% h* A4 I6 J
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    " r# r( g$ z- @6 w% ~2 {2 i
  1114.                     dlg->m_ListText.AddString(strTempName);/ B% A( I. M4 F9 O$ r5 e$ C6 s
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 ^2 Z2 V( B6 |8 p8 |: z$ E
  1116.                   }8 ^- a' a1 d7 H, a# I& v
  1117.                   bReadHeaders=TRUE;& a9 x$ H" i: U9 L
  1118.                   while(token=strtok3(NULL,"\r\n"))
    . ?' o/ s& |; k
  1119.                   {5 J$ O. e7 q) {! }6 E# @, `' G
  1120.                     if(!strlen(token)&&dwFileSize)
    # K2 ~, k, P  s1 [
  1121.                     {
    0 F7 k/ F+ R0 Q
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
    % L+ n; g; O3 \$ m3 p# w6 x
  1123.                       if((int)Dn.dwRecvLeft>0)
    ' E% {- n2 Q  a  u* N
  1124.                       {, D% \8 j: d- m7 L, d4 |1 u
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    & Y1 [+ p4 s" ]
  1126.                         {: d1 ]  H0 r/ p/ U7 g+ M
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;: A* c7 ^" Z+ k! C5 t9 L, Y% d
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);9 u4 a2 Z/ q$ J' K/ I* s
  1129.                         }; v: K6 f  V  c  V- g
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);( b8 e' g& Q" t* x6 n. P
  1131.                         dwCurrSize+=Dn.dwRecvLeft;
    , Z* J7 e/ A  H! s
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;$ ]7 q4 M; O. U' Z, k# K/ w7 @
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;7 J0 s& e" E( y; E  @
  1134.                       }+ g, w7 B6 N& F6 K8 {
  1135.                       break;! `# P% Z0 J7 f! W9 B) a
  1136.                     }
    . h/ B: q( f$ m$ x" z2 N% {
  1137.                     else$ M+ Q, W& V4 O$ Z) A
  1138.                     {8 ^, B" z3 W2 d7 [
  1139.                       if(!strnicmp(token,"Content-Length",14))
    ) F6 H5 j  `: j
  1140.                       {
    - }- K4 m3 A, ?2 U# A  q
  1141.                         if(!Dn.szCompBuff)
    & L' l+ S8 _& `4 i, E
  1142.                         {4 I; W4 e3 b/ z8 P0 W
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    4 Y7 u+ n& \# L$ n$ |- Z
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);7 w8 E1 ~  U  {% O
  1145.                         }( [4 z; X  G) D5 b& Y
  1146.                         else if(dwFileSize!=dwLastSize), ], ]. k; s( a
  1147.                         {7 R9 l4 Y3 J2 `
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    0 J$ A& K/ h( w) s! L* s  e# N
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    : F) C- {  {5 V4 z7 u. j! P
  1150.                         }; p* y* e. A( I8 j
  1151.                       }/ P5 d0 H8 I4 d9 z
  1152.                     }" Q+ s, Q/ i7 v
  1153.                   }+ D3 L" c( ?0 U$ d4 M' F4 _2 J
  1154.                   break;
    # Y% B# X8 T) B* H3 _
  1155.                 }
    9 r- N  r8 e) M$ m2 a8 Q
  1156.                 if(!strnicmp(&token[i],"200",3))( L2 z/ j2 w* F' I4 {
  1157.                 {
      v+ h. i: `( e5 ]' b$ {5 A, n
  1158.                   if(!bSilentStep)
    + Q9 D* l0 v0 x0 V" T
  1159.                   {
    7 Z  r( i! v5 }' }) J4 T
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");, ?0 L% J1 K( o% {! I
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 l" S9 m0 z% @* J0 [
  1162.                   }
    % z2 e/ N8 J  u& v" L3 _
  1163.                   dwCurrSize=0;
    ( d# w0 K6 z% C9 N# U
  1164.                   bReadHeaders=TRUE;
    9 ?# a+ c& P9 K1 I/ S3 i
  1165.                   while(token=strtok3(NULL,"\r\n"))3 y. R. i5 G; Z- H5 N  r; g
  1166.                   {
    ( Y8 ^5 U6 s) W
  1167.                     if(!strlen(token)&&dwFileSize)2 r, b. X6 Q/ a3 V
  1168.                     {2 y) M3 a0 E" x2 E! B
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;/ J' D' U8 m9 j( o
  1170.                       if((int)Dn.dwRecvLeft>0)
    7 S, m, ^, }6 P6 G$ h
  1171.                       {! _3 s/ C, @& t; J, @6 p3 n
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)
    9 E5 f; r9 I; |: r5 @7 D
  1173.                         {, |) Z7 H, @3 u5 _3 L# k
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;$ O( j( [$ L9 c; x; g5 {+ M
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
      \  ~' h7 g& Y1 c5 D3 j+ o
  1176.                         }8 H" G5 U9 B$ ]# @7 K/ S+ g
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);2 P" {: v' Y% ?: m& I! h
  1178.                         dwCurrSize+=Dn.dwRecvLeft;" }( n$ F7 ]; ^7 y4 b
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;7 P) t6 y1 I, G$ p+ j/ A, r+ ^
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    8 B& x  S) r& P7 V! P; I- o. r
  1181.                       }" Z. j+ i, \- r  g7 y7 P  @4 T" b
  1182.                       break;
    - I" S6 G1 J5 G$ h5 }& b
  1183.                     }% S( U8 g4 A8 z" q
  1184.                     else7 H/ s, u* c' P3 d* l
  1185.                     {
    * f& F5 L* ~) z5 u; x
  1186.                       if(!strnicmp(token,"Content-Length",14))
    - y) J( `: _% A
  1187.                       {
    % ]/ T, T  z* `' h1 z
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }) e8 H& N! Y% i% O5 ?& G
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);( p7 J4 z9 u* }% E
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);. i! g$ F" c& R( @4 ?6 b
  1191.                       }
    3 [4 V6 I& i; l$ X9 k
  1192.                     }
    0 _* N4 L2 I- W$ ^. F0 v; z
  1193.                   }
    5 T& q" V; l. \! y( M2 Y
  1194.                   break;
    . s- w: |5 z* q1 `( e
  1195.                 }
    2 T' R9 S, P! p1 v
  1196.               }1 T5 u7 n" [5 u
  1197.               if(!bReadHeaders||!dwFileSize)
    ; `+ `7 y% _3 u* E: Z1 R1 N
  1198.               {
    6 |" n& F! I1 N, E
  1199.                 // Wrong Header or Reading File Size Error
    , l, E0 |# K* E+ O( }( p7 t/ W" C
  1200.                 Dn.QuitNWSSock();# ]& t+ m- ~( w3 T) V, C
  1201.                 dwProgramState=AP_NOTHING;
    0 }& {1 T4 D& p0 B1 C# c% t! v
  1202.                 CString strTempName;4 ]: E( J# Z- q& |/ d6 k
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);
    0 c. S' E* F: L2 E, M+ r2 F
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);: q* U+ h( `. H0 E9 ^& g7 o1 P
  1205.                 bRestartUpdater=TRUE;; b$ B3 \% B% Z
  1206.               }
    6 x4 H# B6 Q, Z: L
  1207.             }' g0 h( Y# j1 K, R3 V- U
  1208.             else
    2 x2 ?, X% c) M2 U  @
  1209.             {: O/ f4 y, e2 t- N2 ]6 H+ ~$ q
  1210.               // Have No Header) T, r* D$ P5 }5 R( T1 w
  1211.               Dn.QuitNWSSock();
    ( G/ Z" b1 j4 T1 F* O
  1212.               dwProgramState=AP_CONNECT;& D9 E+ W' b. l5 L' p9 [' p( g" W
  1213.             }
    $ X) t. V% S8 n/ z0 p+ t) t6 J
  1214.           }$ ^- q6 M/ g% u7 v
  1215.           else# O. J; j8 s/ R& _, s
  1216.           {
    7 B* w5 P7 L3 V# {, h1 C
  1217.             // Reading File From Web
    . r& t( o. x& Z2 e) W
  1218.             if((int)Dn.dwRecvLeft>0)
    + U0 r1 B/ ]- v' y+ v" k6 y
  1219.             {
    4 h! N2 Z6 y6 {7 Z0 x' O
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize). i0 }, ^6 Z  E5 t5 x, z7 m
  1221.               {( \4 M: y" R7 B5 T% B0 a) m
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;. l7 C7 a7 ~) X/ U
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);3 u9 i8 V. r2 L0 @2 |' o) H
  1224.               }
    # m0 R+ r$ w& f- y2 M  e
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);7 {1 T# S6 A. c& ^
  1226.               dwCurrSize+=RecvLen;- {, N4 r! J+ G4 z0 F8 A3 c
  1227.               Dn.dwRecvLeft-=RecvLen;
    . {3 P/ B1 y/ M: z
  1228.             }
    8 ^2 c. m0 K8 D. X8 T, ^
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));
    ; P+ z3 g$ i, f1 G9 s+ f( u+ X
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);+ f0 S0 r+ e8 N$ t/ `
  1231. //            dlg->m_Process2.SetPos(iRate);/ u+ n" T! A+ G: C' d5 a
  1232. //            if(iRate < 0)   iRate = 0;  p3 z6 c" H& p' z
  1233. //            if(iRate > 100) iRate = 100;7 e( M; h4 S/ l4 U+ H# t
  1234. //            char szShow[5];0 y' H3 S5 {5 t$ ~7 e9 z0 k' v  T
  1235. //            sprintf(szShow,"%d%%",iRate);; A8 F% ]+ f7 \8 f) D4 ]: c( I
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);- W7 ?7 u- j/ U" q0 ~! a4 b' |
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    . ]" N0 e# Y; b% e1 F9 L
  1238.           }
    " s; t& @2 k$ x7 I9 |3 u
  1239.         }) M' R6 b# \0 Y7 V* Z# @% E
  1240.         else if(dwCurrSize<dwFileSize)
    9 s( I) S8 j" [  c
  1241.         {
    - f8 h' e; J8 F: U; v1 i2 m
  1242.           // Disconnection But Size Error
    , H6 L& |" `/ A: e' T4 m$ j3 S! Y
  1243.           Dn.QuitNWSSock();' ]7 [5 D4 f+ C4 J! u
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    3 X& [% E- ^6 R9 \+ A  b
  1245.           else           dwProgramState=AP_CONNECT;! ?/ @& Z1 j7 v! ^3 B
  1246.         }
    : s! Y/ r( \4 [; t+ x
  1247.         else. E) Z* q, ^- m/ ~3 r5 a3 A2 D
  1248.         {
    9 H& z. W; Z: V8 q7 s
  1249. SaveFileJump:% Q3 ~# n! V9 l- ]' n5 m
  1250.           // End of File and Disconnect5 I. y; `1 E; B8 K8 `+ Y0 L
  1251.           FILE *Fp;9 h0 s% i2 c2 q0 H2 r1 Y. V+ G
  1252.           char szTempName[MAX_PATH];
    % U4 p$ p+ y" y! Z+ x* N5 m
  1253.           strcpy(szTempName,".\\DownLoad\");* U$ D% ~* q* y+ B$ A3 l2 Z0 I
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);
    ; J5 b) [4 h, f' b& b$ R0 w
  1255.           if(bCompressed) strcat(szTempName,".zip");4 w+ O) w/ C6 L6 r  d
  1256.           if(dwCurrSize). C& e) r4 A8 D7 [" h9 n2 U
  1257.           {
    : I' u) i6 \3 |5 C  x' H, K
  1258.                   Fp=fopen(szTempName,"wb");4 ?( a' l$ l3 O6 P) Q. k* `! C" Q
  1259.             if(!Fp)! o) }' G& W& w  O' e
  1260.             {( \2 j. Q8 E: V
  1261.               _mkdir("DownLoad");3 n, R& L( y1 O/ {/ d, F3 O, S
  1262.               Fp=fopen(szTempName,"wb");' z& e# ?% k. M; M+ n
  1263.             }
      W) W% f( U9 I7 C9 v
  1264.             if(Fp)
    % Q/ C& Z- [5 z
  1265.             {7 n& N8 W/ A/ W+ ^: B2 j
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);
    " f# [+ l! |, g; ?* t& {
  1267.               fclose(Fp);
    6 V: D  y) ]9 l$ k: f- d8 z
  1268.             }
    , [- a. S7 F& C( }3 U
  1269.           }% B: u- Z* ]  ~# c+ \% C
  1270.           if(!bSilentStep)* R+ ]( n4 n. l% g3 Y) [) Y0 }
  1271.           {6 h* t) d3 H4 a- J- `7 A
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    + S9 I3 R. C+ A) U' t. H# J: g  h: g
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");
    0 @) H/ G6 y9 e1 z& f5 c" G) i
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 u& M7 Q. Z5 v
  1275.           }+ j" d5 Q; s. [. m6 ]
  1276.           if(bCompressed)
    + e( y7 i% x6 `6 I0 b
  1277.           {# W- m8 c% M, b- Q& Q% ]: m2 @0 t
  1278.                    int opt_overwrite=1;" o/ y7 J( M& x! {
  1279.             int opt_do_extract_withoutpath=0;, t" [) O5 }1 o+ Z) T; w
  1280.                    unzFile uf=NULL;
    8 P& ^5 I2 g0 {, _
  1281.                          uf=unzOpen(szTempName);
    : m0 p; b! ^1 H' P
  1282.             if(uf)
    * R  Z. C& S% d: r) |
  1283.             {
    $ W/ ^7 S/ X  S5 J0 c8 K9 }; [4 G
  1284.               if(!bSilentStep)2 n& P/ b) c. `4 O
  1285.               {
    ) g/ ]$ @9 I& D( k0 p% F" I$ M
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);; R- E' t7 M4 i1 |% B$ T" }
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");
    3 ~7 j. J2 {& l* b1 b! d  H/ m% `
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 ^3 t  }0 J% x1 \- G; z! f
  1289.               }
    : _1 O3 Y: l' {+ ?' {
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
    ( b+ v" R$ _" U* Q) ]3 j9 m8 q" K
  1291.               {
    , V. |3 K* K# L' H
  1292.                 if(!bSilentStep)) r7 d5 h- H: R) k% J( G
  1293.                 {
    3 r3 d, I% ^. q
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    0 J1 ?. y% u- n5 @3 ^( q
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");- e  E$ O# v5 l& {3 b. h2 ~+ A3 v9 B
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* [* C( ~; c; Y* F, m  `. q* w* J" a
  1297.                 }( J/ \9 K  i* T* C9 @% A
  1298.                 dwDownLoaded++;' y! i) ?- h9 P
  1299.                 dwProgramState=AP_NOTHING;
    - D7 E( J+ F9 o+ M) w/ t1 r
  1300.               }) x0 h: n, r9 `' m
  1301.               else4 S) A3 \( T/ J
  1302.               {
    # k) ^& Q5 |) D+ Z9 r+ ~
  1303.                 dwProgramState=AP_CONNECT;
    , I6 h, B. v2 ]& r& D! h4 ~/ q
  1304.               }7 d. k5 i9 K6 M+ h8 N! }+ T6 ^" R
  1305.                     unzClose(uf);9 G3 b% r0 X0 d  s% S6 _7 m
  1306.             }
    5 w- _' `% P: h: x, R0 @
  1307.             else
    # C0 S6 @5 V1 ?2 k- P$ C4 V8 W
  1308.             {
    ' R2 n+ }, j( i. Z; Q
  1309.               dwProgramState=AP_CONNECT;' K& @: ?. l2 U7 G7 K
  1310.             }& l9 c9 p- m3 f: a% Z
  1311.             unlink(szTempName);
    $ d4 _9 f/ c( E8 S9 J
  1312.           }
    # E) A- ^  j3 o4 m" @% j
  1313.           else$ F+ E  z% V/ C- H+ S% `4 A% Z, p" j; m
  1314.           {
    4 V% Q! @+ j7 t, N" `7 r% y/ Z; ^
  1315.             if(!bSilentStep)
    # {0 Y+ y% x- r+ u9 T  @  E/ r* c4 u
  1316.             {
    ! p9 r# x0 g. Q3 M; }; w6 J
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    , B2 g" b' a- k0 {5 ~
  1318.               dlg->m_ListText.AddString(strFileName+".....done");3 r3 K" \) z8 S4 m, h
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 j9 A1 M3 |" H, S6 p1 A
  1320.             }7 P& d5 t* L- c/ B' o, m
  1321.             dwDownLoaded++;
    6 t! C& v2 s; m; x+ _' u9 h
  1322.             dwProgramState=AP_NOTHING;
    " }; g, P% ^- m# @: x
  1323.           }
    ' J) F% X  H8 x% v5 H
  1324.           Dn.QuitNWSSock();
    5 }" r2 W& p$ x/ j2 u
  1325.         }
    0 G' a9 Q3 Y+ o; M
  1326.       }
    & \; n+ E7 |: \8 _% a5 R
  1327.       else- U' W/ e3 ^+ ]" n/ }- o, Y
  1328.       {
    6 {# Q2 w" H3 f# V2 x: X
  1329.         // Connect Timeout
    ( h! f0 }; R8 e
  1330.         if(GetTickCount()-LastTickCount>30000)
    / v) x; o* j9 R: N3 a) b& ^
  1331.         {7 K* R; o2 k, ?, F' f$ R8 a
  1332.           Dn.QuitNWSSock();! i2 ~4 M! t. H$ `0 k2 k7 h, O) b
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;* e7 d& {6 R& ]9 {* `' P
  1334.           else           dwProgramState=AP_CONNECT;8 ]5 c* S. v* V
  1335.         }
    8 C0 ^/ ]3 }0 o. d. s
  1336.       }' B; e3 X3 J, P5 q1 N
  1337.     }4 U5 E; `. T% n; L% b
  1338.     break;
    ! l3 v( }3 w% d7 \# I
  1339.   }
    0 C5 v+ ?$ U7 P& I  O# t. \
  1340.         return CWinApp::OnIdle(lCount);" [9 z7 R* J1 B  ~" v* T* O
  1341. }
    ; ]1 _# z; S( b( K, l9 k0 Z9 L, b
複製代碼
其实登陆器也就是这么一回事儿……; ^+ a# Z7 F  \' w
附件有编译教程和源码
6 n7 x% X+ Z# ^: ^
遊客,如果您要查看本帖隱藏內容請回覆

. Z0 q2 |6 b8 o3 h2 }) w
( c& q! U5 o9 h2 d# \% r  v

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回覆

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回覆

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回覆

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回覆

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部