CSUpdate.exe源代码

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

  J2 N) @% j  m7 v+ O% m8 ]0 \
  1. / RevApp.cpp : Defines the class behaviors for the application.
    & y5 Y7 p; i6 N* ?0 X' F* h1 I
  2. //
    5 ]+ c) h: X2 U1 w/ |

  3. 1 z+ F0 F$ R  F9 r+ N4 o
  4. #include "stdafx.h"$ v: D& h8 X4 L! w

  5. 4 }! O) M1 @5 y2 J7 L( o
  6. //#define UNICODE
    : o% |  e- Y: R2 p; m& w/ W* _# d; |
  7. //#include <gdiplus.h>
    8 {. `* H* G: E$ v: v
  8. //using namespace Gdiplus;: a& \# i% b& @2 s8 ^; A- G/ w

  9. 8 F2 t. G/ b: n2 [" [
  10. #include "RevApp.h"4 d" G& |/ I) Y$ z( Y
  11. #include "RevAppDlg.h"8 z8 G( n% W! e* @9 C( h. P
  12. - Y/ w3 R$ B* z% J
  13. #pragma warning(disable:4786)
    7 a! Y, \; e$ M" ], ]
  14. #include <map>
    3 I6 ^  G3 ^' H" D- x+ Y
  15. #include <list>
    % ?  B8 [1 a. w  [; o% R% R
  16. #include <direct.h>% U8 f+ T6 K6 c& S4 z+ p8 T) w
  17. + I5 C  b8 k5 I
  18. #ifdef _DEBUG
    ( A- Z% j8 b1 F8 Z+ E0 e" ]$ w
  19. #define new DEBUG_NEW
    $ [+ B. I, v( ]/ ?. F
  20. #undef THIS_FILE
    8 L8 D  [1 a' T# l( E
  21. static char THIS_FILE[] = __FILE__;
    2 R- [( g3 F* U" T# Z
  22. #endif
    ( U* _8 b6 y8 L4 `! ]& V0 u
  23. #include "SkinResDef.h"
    ) {( ?$ C1 Y$ t4 y( Q, t4 x9 M1 U
  24. #include "ChangeBG.h"
    # s2 ~, z$ q+ J  i
  25. #include "AFXINET.H"/ L: r5 ^; z% f- h5 f9 P6 M

  26.   |  A0 b5 z& N1 T' z8 _9 K4 }" x
  27. #define TRADITIONAL_CHINESE 0
    " M  B1 J5 ~% o7 b1 H& v+ z6 {6 ]
  28. #define SIMPLIFY_CHINESE 12 p2 ]9 W1 @& i3 A- C! r
  29. #define ENGLISH 2
    5 S4 Q2 |6 C- p/ G# C- Q
  30. int m_iLanguage = ENGLISH;
    5 ^4 p1 v0 m8 H2 v/ K
  31. /////////////////////////////////////////////////////////////////////////////
    ! Q6 j* ^7 ]4 A  S
  32. // CRevAppApp# w$ y1 f# ]3 Z& b
  33. 2 o# V% y9 U/ e6 V, }+ s+ l
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 N( L8 R# n; Z& f
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / M4 U) f6 M! d& g& F% A% [
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    5 c  W. A8 t" p- h8 f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ X- |9 q2 p* t" T$ ]
  38.         //}}AFX_MSG
    5 X- }9 m  K/ p* H3 b& D$ j
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , f1 {" Z6 h; |: ~1 x0 F$ f# q
  40. END_MESSAGE_MAP()
    # e+ {) _. x' {2 z4 h7 ?

  41. & {2 n4 N5 L3 W; R8 O9 m$ _! d
  42. /////////////////////////////////////////////////////////////////////////////
    - Z7 l, r! }& r+ o% r+ E) M# j
  43. // CRevAppApp construction
    & h1 u& v, Y+ I. p" h
  44. $ k% D4 n; v- V2 c
  45. CRevAppApp::CRevAppApp()  R4 v5 A0 x3 a( H( V+ p
  46. {
    . I( a0 Y3 t7 G) e: E1 g
  47.         // TODO: add construction code here,
    2 N! t' T/ b3 a, ?2 \! W0 r7 a
  48.         // Place all significant initialization in InitInstance
    1 Q' L4 O" p  E  ~+ a" b: a
  49.   bDisplayIsBig5=FALSE;
    / {7 g+ ~- ~) G$ v- V. H6 m
  50.   bRestartUpdater=FALSE;% V0 Y- {" ]6 I' Y0 {
  51.   bFinishUpdated=FALSE;
    / e' P7 K: x% z$ ]* `) z$ A" Y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" e: z- R. T) y2 ?2 Y, i* v$ [
  53.   InitChangeDataBig52GBKS();
    9 E" t7 _* K, |; h" S- d; H4 S
  54.   InitChangeDataGBKS2Big5();
    / _( h9 x/ I& V4 L# n% f
  55.         //. a# X8 e- S; d. J
  56.         bClickRunExe = FALSE;
    , F" ]& L  {6 _! d/ v
  57.         //
    * u+ [3 J- f! J, T8 y; V" A
  58. }% c$ v9 m2 M+ Y. r
  59. & i1 g  L3 j  l* u) m$ _
  60. CRevAppApp::~CRevAppApp()
    ( i/ g$ D' a. B3 V4 F2 |. x
  61. {
    . J. W0 U8 o# j- r: }
  62.         // TODO: add construction code here,$ P, M3 A9 f9 W4 F7 s! N8 P. E' V
  63.         // Place all significant initialization in InitInstance2 g+ i" R& n, w# x8 G- Z/ t# |' z
  64.   EndChangeData();
    9 I4 R* o+ t. M# A3 K0 _0 e9 `
  65. }: V/ A6 K& J3 B
  66. / R* b( \& L' L. C2 B+ r  K
  67. /////////////////////////////////////////////////////////////////////////////
    , E% J2 J- a# G- d: T
  68. // The one and only CRevAppApp object
    , g. H& }7 k- e' B6 H  O

  69. + \/ E5 ^& f4 j* {6 K2 b: r, O! \
  70. CRevAppApp theApp;
    7 @4 Q( }1 M$ J5 _% f, N9 l+ i: ]$ x

  71. + B" s" O* ^6 X& ^+ D
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : x# Y( h$ x9 J) y) k
  73. {
    6 y; O' b0 Y" Y' I
  74.   int iEOF=0;
    4 R  o, w3 }) j$ }4 j+ r
  75.   char szTempName[MAX_PATH];
    4 ?$ d& {* k' u9 m1 Z
  76.   *szFileName=0;% j; P- r+ M6 C; n1 }: I+ `* W
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 \5 M* q6 D2 A9 O: ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 ]" B8 Z0 D' H6 t6 u$ B$ i
  79.   {
    " b. ~( F9 e0 j+ ]
  80.     strcpy(szFileName,&szTempName[1]);
    8 e. |+ J: x0 E8 @; a; G! q) a8 C' \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)2 ^# s0 S1 N" U* s
  82.     {
      H" s6 C$ `  g9 Q  w+ A0 Z' E
  83.       iEOF=fscanf(fp,"%s",szTempName);9 U# H' y$ [. \/ ~2 }% r( B
  84.       strcat(szFileName," ");9 S# [& I6 h" x+ D' s0 p
  85.       strcat(szFileName,szTempName);5 l+ u4 A8 l1 w. U4 @# m
  86.     }' m  u/ x5 \! K! n1 J" l# l3 H
  87.     if(strlen(szFileName)>=1)/ E6 }6 h8 s# L. l9 r+ T4 s, Z
  88.     {. M0 ]" k- L' z: s* W5 l# G$ d
  89.       szFileName[strlen(szFileName)-1]=0;9 a6 e( d' Y. |! r+ W' f3 g5 D
  90.     }
    9 \' M* _/ w, L/ `
  91.   }( M4 O4 X) L) u( x
  92.   return szFileName;
    6 W6 {& x: d5 z1 K; ^
  93. }& _6 ]! l! j& \1 N4 n) n
  94. 3 w: p) V& B, L3 z& |" t) [
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile); |! ?/ b% M- J, l( o" D- i+ y
  96. {1 p6 ^# ^5 R, P& u) p& [& E
  97.   FILE *fp;7 Y: {# F8 a% r( c
  98.   char *key=NULL;. m* F! f* b& u6 J( e7 g9 b+ V# P
  99.   char version[MAX_PATH];4 c! p9 i. I; o7 k3 R. |+ ~
  100.   LPUPDATEFILE file,olds;3 p' R' \3 J, Y3 k4 i6 y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / c+ g) u$ n9 y
  102. & a6 b! z3 b0 i7 p
  103.   UpdateList.clear();
    : J- l/ e7 F+ n( ~
  104.   UpdateFile.clear();
    , ^! V+ C. `' d3 E  X
  105.   if(GetFileAttributes(filename)==-1) return false;* j4 O0 |7 O6 |& s: O2 u
  106.   if(!(fp=fopen(filename,"r"))) return false;# i! j6 M) x3 {/ Z; c7 C& @
  107.   fscanf(fp,"%s",version);# ]2 [4 w* e4 W4 x  ~' S" X/ ?- n
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' i3 k/ }& Q5 Q. F+ T
  109.   while(fscanf(fp,"%s",version)!=EOF)
    " r1 C" Z/ H' R6 \3 R7 b# n
  110.   {7 `/ e0 G! `, i" R9 c. t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & J# v7 b2 e+ a$ l
  112.     fscanf(fp,"%s",file->path);
    % L) s6 R! B' [* {. ^  J' h; ?* [5 f8 V
  113.     ReadFileNames(fp,file->file);
    & b  D8 D/ F2 R7 u
  114.     strcpy(file->full,".");
    9 P" ~1 N" i% _: `: W+ I, _3 b
  115.     strcat(file->full,file->path);
    " d/ X9 t% Y1 q& R4 ~
  116.     strcat(file->full,file->file);
    ( h( h% b0 ?3 U
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# c: R; o& n! ]6 I5 l2 Q2 n
  118.     {8 w3 V, g1 J$ S8 K" z" c9 f
  119.       file->vers=(float)atof(version);; k3 @. X5 g, i8 D
  120.       UpdateList.push_back(file->full);
    0 j- ^5 U. X+ @) u% \1 y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; Q2 H" \2 \$ c" R7 {
  122.     }
    0 ~& U6 Q4 L7 n; e
  123.     else
    3 m, s" Q$ g9 K; }. }* T5 h3 L
  124.     {
    * p8 _( I3 u0 L( Z6 Y
  125.       olds=(*p).second;
    9 d$ b, @: g! u) C6 k6 s$ n, g
  126.       if(olds->vers<(float)atof(version))6 P! O1 D4 ^7 Z: i8 c. H8 G% V9 N. S
  127.       {4 `* \8 i: v& p) y: e' G
  128.         olds->vers=(float)atof(version);
    0 z: R2 k# D. H
  129.       }+ f/ V  T2 U3 j9 v
  130.       free(file);
    : ~' W/ `* K* L% V
  131.     }
    6 Y- j! W  c; n; f3 X' ?! F
  132.   }
    $ _  m: f+ j& K2 H+ l7 U/ g
  133.   fclose(fp);0 w) \0 H8 g4 L1 F
  134.   return true;
    / }- A) y$ I( w+ p4 G
  135. }
    % Y3 }! V6 U' D. I

  136. ; p2 n1 t  Z" `; j4 U3 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( v$ M2 q0 h4 E" l" G0 s8 T; X
  138. {+ c5 d( Z8 j$ Y5 J" o: Y% M
  139.   TCHAR  szFull[MAX_PATH];7 Y! p% w6 u  P
  140.   TCHAR *token,*inter;
    * {% x. J# ~: _* y$ g1 l
  141.   *szPath=0;3 ~4 N( U% Y# ~2 t/ Y
  142.   strcpy(szFull,szFullPath);
    ( S5 k6 U8 d2 F( T3 }+ W1 B
  143.   token=strtok(szFull,"\\/");9 J/ [( A6 f) c* v, g
  144.   inter=token;* @! f. b, B( h! [/ U
  145.   while(token=strtok(NULL,"\\/"))+ t2 f1 x1 R0 {9 E& {! V
  146.   {/ J% m. ^% O. l/ B/ m) l) \
  147.     strcat(szPath,inter);
    / d  A0 i2 j& H# W7 R# `( K9 ^( q$ E
  148.     strcat(szPath,"\");
    # r/ ]: w3 M4 Z/ u8 F: c( W
  149.     inter=token;8 Y- x/ c0 k' y
  150.   }. E. e( T4 b+ o6 S; k7 W
  151.   return strlen(szPath);
    " Y6 m: w) n& o0 Q2 F
  152. }' z% U; r3 J( W- T' u' L2 `
  153. 6 _8 R" I# J7 G# P  a8 Y* E
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)& I/ n* i" Y  i; y
  155. {
    * P4 r2 Z7 \8 [/ O% F: E# b
  156.   DWORD attrib=GetFileAttributes(Target);
    ' D. L8 x& \" p  `2 b  j
  157.   if(attrib!=-1)4 V! l4 x! y* X$ y4 p
  158.   {
    ; A/ J5 g$ ~& X: p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 _/ S- ^( G" B( g; @+ m8 i
  160.     {: P" ~! g) \/ r' m+ n* Q
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& V+ j- ?& k7 T! a/ d5 e
  162.       SetFileAttributes(Target,attrib);
    " V+ X3 B8 l* S
  163.     }; h5 |+ Q) y+ H! s1 |" l5 Q
  164.   }
    . F% s$ W! N& g) P) e* D/ |
  165.   CopyFile(Source,Target,Erase);
    1 f- L1 D8 c$ V6 F
  166. }
    ( I7 P( n' h# J7 g
  167. * h2 R1 T! W  }, f" b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; h' w, t& X  g1 {: x+ w
  169. {. k( A9 x9 `+ o6 s9 ]. W
  170.      FILE *fp;  i+ h( t2 f- m
  171.      char  szBuffer[8192];- j7 ^3 Y6 w8 {1 h
  172.   va_list  argptr;6 u8 J# {& i" P5 q4 u
  173. + C* ^% r4 Q/ X1 m) @0 t* q0 O
  174.         va_start(argptr,message);
    $ o3 c! E6 m+ P$ ]
  175.         vsprintf(szBuffer,message,argptr);
    2 z6 i0 d  z/ v* z, }% R
  176.         va_end(argptr);
    , M! T7 E9 o$ B" F  f
  177.   fp=fopen(FileName,"a");* p2 d- C" E/ S/ @. l
  178.   if(fp)
    ) Y- S5 @' P$ n* _* I' _
  179.   {- n9 N& S3 @" T/ }) y: y  L
  180.     fprintf(fp,szBuffer);5 |: w5 e& n, n' @
  181.     fclose(fp);
    . k  O7 H, F, Q0 Y' W
  182.           _flushall();
    4 Z# R' Q% O# Y
  183.   }8 {/ S: j3 ~0 O2 x' b. w! L7 s
  184. }4 v& t# }! M6 v1 G4 u
  185. 5 t+ l+ F3 n- p$ b  `
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / a8 N5 G- D( t, L2 h
  187. {4 Q: R/ i5 f% ^' T8 u
  188.      FILE *fp;* R1 d9 k; t1 B
  189.     DWORD  attrib;
    1 ^! S% C; p  b1 V3 O
  190.   attrib=GetFileAttributes(FileName);: a( V. ?- E, _1 e# O3 S
  191.   if(attrib!=-1); P% T0 c; P8 P7 Q
  192.   {. b* [) q5 o. d$ G6 y$ Q) S! H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);/ }) B) Y& ^$ P# `* H! C
  194.     if(!SetFileAttributes(FileName,attrib))
    ' q5 n" r% G# z7 @' U. F
  195.     {
    4 g. r% N% ]( q$ K8 A4 z
  196.       return FALSE;5 S' S8 p+ Z6 K" p8 }! s5 S
  197.     }; ]2 B# Y1 m2 M: C. x
  198.   }
    0 ]& B( E7 e/ |
  199.   fp=fopen(FileName,"wb");; Z& M* |5 d( [1 h' C* `
  200.   if(fp)+ X2 Y: w$ \2 P4 u8 m5 Q2 c) R
  201.   {* H% w  m, {( N; D# m
  202.     fclose(fp);
    , m1 ]" l# _* s" s
  203.   }6 o+ V% t6 J; M* n
  204.   return TRUE;
    ( h; b7 A0 e5 D0 k; [4 Q
  205. }. j( Z! x4 y% @4 M5 V

  206. ! k" u& T; p& K2 z" S/ K
  207. BOOL CRevAppApp::UpdateLocalVersion(void)+ }: m: u! x& t( Y/ S
  208. {
    / n+ j+ v* u4 I& d9 c& n3 z
  209.   char filename[MAX_PATH];8 `# o  H( i  j' e) N
  210.   LPUPDATEFILE file,olds;. O& b$ v) i/ w, g
  211.   std::map<int,CString>::iterator i;
    . n- n+ X- L3 ]5 Q( p
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    + F  O2 @7 g- D7 P
  213.   std::list<CString>::iterator l;+ k- Y: p3 [* d8 l
  214. , U' y) w* m5 [0 g' h: X
  215.   if(bFirstUpdate)
    1 U* R/ M- R* ^: I$ \
  216.   {
    ( G9 F" y1 R6 d# J9 q4 D% g
  217.     dwCurrFile=0;
    $ C1 S+ i1 e" k; ~" R" U
  218.     bFirstUpdate=FALSE;) H4 j# E) R8 Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): q6 K) ], A2 V3 i
  220.     {' p# S6 f& T" A5 E
  221.       dwTotalFiles=UpdateLocal.size();
    0 p$ F% `1 {6 ?1 E/ z
  222.       dwDownLoaded=0;1 m- o( e3 x9 M/ K* h, k) C
  223.       bSilentStep=FALSE;* Z+ C2 J- ~% ?4 ?6 L$ s3 S
  224.       bCompressed=TRUE;
    5 h1 x% w+ g$ i' i8 S/ k5 S$ i
  225.       strExtLocal.Empty();
    0 R9 _8 X6 E" _/ G0 M7 s: Z
  226.       strFullName=(*i).second;
    1 N1 C- f3 y8 p& r9 C; N' g' x
  227.       dwProgramState=AP_CONNECT;
    2 V! x0 @9 W* E! h4 h7 _
  228.       return TRUE;
    6 K! _6 J8 _' F# @
  229.     }
    0 t6 t; S& V' p# t6 t
  230.   }
    & }; Z* x9 F3 c, }6 o' Z
  231.   else if(bRestartUpdater==FALSE): _5 `, ^3 ~. y  F. J
  232.   {
    ) ~  g( A& }; Y$ t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 C- i* W2 G" r: [
  234.     {  q, m* U0 R8 ?; U2 B; ~6 H; V
  235.       file=(*p).second;
    + x1 g3 K2 ?5 ~7 M8 y/ @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * e/ i& u/ @  \* W, a( B" P
  237.       {
    ' N! G2 j. g- Z' e
  238.         olds=(*p).second;
    ! y% x" p  V$ C7 Q4 e1 L6 f
  239.         olds->vers=file->vers;0 U2 H  d3 o6 W
  240.       }* J( j- ^+ o, k4 k. V( X* }. J- v$ \. Q
  241.       else
      `8 T; o6 D" X- P0 R. S8 r
  242.       {2 P+ W2 _* M. V# p2 e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ }% e1 x8 ~1 G
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& ~, r3 Z( A+ x1 k6 V4 w
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    6 h( G5 e5 V; m$ o2 [
  246.       }3 [7 l7 {) {3 D4 l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 O9 i- C1 e+ L) R
  248.       sprintf(filename,"(%s)",file->file);
    5 F! B+ j! I8 G5 M+ K0 d# _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ x/ {" ~: W3 v2 ]! b+ p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 U5 f: D# }; d/ l7 W7 d# ^
  251.     }
    - {& b/ A( B0 ?4 g2 j+ a+ D
  252.     dwCurrFile++;$ b3 ?* P9 E6 q6 E% c1 t6 _0 Q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 [# S2 f' E) ?$ r) M( @2 a* s
  254.     {" \9 ?, a+ P) C& J, `. V! K
  255.       bSilentStep=FALSE;2 r. }. J4 O5 c7 c
  256.       bCompressed=TRUE;9 h  `- Q" b$ Z" Q& T% j& L
  257.       strExtLocal.Empty();
    & a# s) N  G$ Y7 d# K+ _
  258.       strFullName=(*i).second;
      _4 @2 d* y5 [: T2 a  ^. A- v7 ?
  259.       dwProgramState=AP_CONNECT;
    - t" `; t1 H/ M/ c0 u
  260.       return TRUE;
    3 `4 W- s$ I1 {, j, E
  261.     }; r+ U* G, Q8 V" M/ [: s
  262.     if(!bRestartUpdater)# r$ V4 w, t) j% d" m, \. ?) D1 J
  263.     {5 Y7 a% S# \9 Y* y/ e6 d, y9 Y3 E2 s
  264.       int iCurrSize,iFileSize;
    # k3 G' D& B" _% k# m
  265.       iCurrSize=0;
    6 o# F( p. b# u4 z& c- u* M  P
  266.       iFileSize=UpdateList2.size();
    / T3 f7 q8 \! G
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    * o8 k6 M$ y3 U( c$ E+ i6 X
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");* k+ z3 `. J4 |% v% U
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    2 c+ u8 b& R' n3 P6 q5 N: O* }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) {+ q# y  O, X! U
  271.       Fclearf(".\\update.dat");
      }+ K/ O0 @& n) R
  272.       Fprintf(".\\update.dat","Bloodyf\n");  }' m& `( `6 o( H, _
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)5 k) U* J! L8 z/ E: L/ f* z
  274.       {. E' a& }! u# r- I6 A! j  L. G
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 A1 t8 `3 a% X1 R
  276.         {. [" W/ ?' a: L: y
  277.           file=(*p).second;- o- y/ e' K1 t
  278.           sprintf(filename,"(%s)",file->file);
    ) ?6 b& B. b* e7 s) X9 q+ d: ^$ D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; w- R# I# M/ U3 j! s
  280.           iCurrSize++;
    / m' R+ D4 [% d% r; V& ^- E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . T# k8 r% k$ j9 T/ x4 ]
  282.         }
    ) D; L6 M/ i' h0 Q3 g, q
  283.       }; I- W% I  L! x0 T* l9 C. l  N
  284.       unlink(".\\update.txt");3 J# O2 U) r" D5 I2 P
  285.       unlink(".\\update.tmp");
    ! T# C' G  k, G; A2 ~+ `( N6 Y* o
  286.       Fclearf(".\\checkversion.dat");) Q* X/ B7 L+ A4 Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
      m6 _: R% B+ R* ~, R7 ?; R6 E
  288.       if(UpdateLocal.size())
    # \$ [! W2 }/ e0 ^& t9 J
  289.       {5 ?! ?2 ?$ Y& a; C
  290.         UpdateLocal.clear();- \$ K! `& b2 O, K6 a$ G
  291.       }
    # o  D* }: j& E
  292.       if(UpdateFile3.size())6 s2 K* Q0 x9 x+ S- [/ o
  293.       {" f1 C. |/ Z7 T, W9 X$ Y3 b* Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! a, Z( |, T) V/ D/ ?2 n
  295.         {. Z  j# _5 \4 `: s" c
  296.           file=(*p).second;+ F+ b+ Q' _: e5 z3 `+ |5 X, U" c5 P
  297.           free(file);
    % A  G' m' Z6 ?: ]$ g  o. J9 t
  298.         }
    7 e+ A  A; I; s2 K5 p: u& K
  299.         UpdateFile3.clear();: [) d: v; k% C: X  `6 p* b, t! `
  300.         UpdateList3.clear();) Q2 m: M0 R7 }: @  L- e* a4 I2 E
  301.       }
    0 ]$ y" s2 M5 \& r
  302.       if(UpdateFile2.size())
    / i. W6 V& w/ Y- }# e$ W
  303.       {3 @9 y8 z9 l1 U! W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 n6 k+ {. X$ `& [) m4 F( U! N, @. X
  305.         {
    / K, {- P: Y/ i# Y4 E* C2 J
  306.           file=(*p).second;
    , h! h+ Y) A2 f, \5 w4 w
  307.           free(file);
    0 a& _+ g' T9 l3 R
  308.         }- P3 C7 \$ N4 H' q# ^9 ]! c& U
  309.         UpdateFile2.clear();3 W8 A2 B$ Z9 @+ ~- P0 o
  310.         UpdateList2.clear();) ?; t" s) J. X  O8 b  W3 u- ?0 d
  311.       }% M( Q: S" A* n* h9 P, C+ N
  312.       if(UpdateFile1.size())
    + h9 Z- t% i* {3 _5 C/ E9 O+ T
  313.       {
    6 d5 V$ S2 b; Y: c+ d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' w- v) t3 o* J! k* a% O: e
  315.         {
    % t9 ], `; _$ W
  316.           file=(*p).second;9 t5 n3 m9 M( o* X+ @
  317.           free(file);7 X9 ^4 w" _( K: W+ O; Q) ^
  318.         }) |9 }) S* T% w+ n4 I9 c
  319.         UpdateFile1.clear();
    4 n% S; \6 N+ r1 L  \) `
  320.         UpdateList1.clear();
    & t- G1 i0 Y2 u2 Y& s3 z% j4 @
  321.       }
    4 l2 ?$ O: b$ i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));: L4 w( l3 r$ H: g% ^
  323.     }- p- _) M+ C: F6 u( N
  324.   }7 w" H9 v/ |& k# F+ i
  325.   return FALSE;5 A( R9 |/ J: n+ |0 q, G' Q
  326. }
    ; i! Z2 [( ]/ ?
  327. + j" {. ~# D0 Z* R2 J" ~: g* L( ~
  328. void CRevAppApp::ClearAll(void)$ e. ^& b# @3 c! U2 |, v+ P
  329. {* g; [1 U, ]8 e+ s$ |  ~' O  o7 w$ e
  330.   LPUPDATEFILE file;
    ! h1 y1 X2 u: G; ^. R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% r4 t2 r' C; {( R" s

  332. . y# h" v. I# Y! r8 T
  333.   if(UpdateLocal.size())4 A1 v3 g8 Q9 g7 E6 w
  334.   {
    6 p. ?4 L4 }  X4 ^3 C. j
  335.     UpdateLocal.clear();9 u5 c) H2 }, e4 r4 o
  336.   }" u( K9 n: J2 o7 W# x2 a3 {
  337.   if(UpdateFile3.size())
    9 _# d* e, w5 ]( H
  338.   {
    9 U/ F' d7 x% s7 z& Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' ^# d6 s, p% h! J3 d
  340.     {
    * m) H, n- M2 r! D
  341.       file=(*p).second;
    5 @) W' R. {# F5 g7 w
  342.       free(file);
    ; t' p0 e7 G  d2 d
  343.     }. N) o7 h  _2 o+ V0 a
  344.     UpdateFile3.clear();
    * U6 ^6 ~3 H. y" \; K5 Y3 n
  345.     UpdateList3.clear();
    1 O' A9 x. ]- p  S1 i
  346.   }* s9 r3 z% K& G
  347.   if(UpdateFile2.size())
    0 u) k6 [( }) u& U" N! {' R
  348.   {
      }9 o' T4 A9 B9 E  \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% `2 ^2 r  g. f' F) Q
  350.     {) u+ Q6 S  Q% C/ f  x! t
  351.       file=(*p).second;& T- p# B! ^+ O% p4 x: z+ L4 U+ e8 F
  352.       free(file);
    8 }7 d2 N& Y7 G% D
  353.     }4 q" d. z, W  D8 ]6 f) s" c- M7 R
  354.     UpdateFile2.clear();: ?9 l1 @/ Z* M5 N% ~0 z
  355.     UpdateList2.clear();: x8 t" l6 X' u
  356.   }  ]9 b% t0 r# I8 |" t' Y
  357.   if(UpdateFile1.size())$ h* E+ [. m8 A; b
  358.   {
    ( _4 S) [; \! d) L+ K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 E2 |& n# k, r9 F
  360.     {
    ( w( X7 l) c' r0 H3 J: ^
  361.       file=(*p).second;% ]; X! P+ v; z: X4 w
  362.       free(file);+ q: P9 f) a$ U) |6 l0 `2 j
  363.     }4 t! z: L/ u0 t/ R; @
  364.     UpdateFile1.clear();
    0 c1 R- ^4 p: p) Z, H$ J
  365.     UpdateList1.clear();
    $ t7 ~! Z' _9 I9 ~; M
  366.   }0 m7 e- |3 b: t! |
  367. }  
    * O8 f. @  P# N$ [
  368.   " J) [6 t: H1 D+ {4 C$ d
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , N1 D& S, ~6 Y7 ?' J2 F% ?
  370. {
    ( N! g  D. _1 O0 t0 F
  371.   int c;! N8 t0 U2 i$ H& m/ i
  372.   LPUPDATEFILE file1,file2;
    3 M$ D  z' J4 V+ A0 j: V9 [
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: G" L* S& R) ?2 `* o
  374.   std::list<CString>::iterator l;& f8 ?8 Y9 J; f. i9 f

  375. 8 {5 {- g. G3 H( F6 _* f
  376.   UpdateLocal.clear();
    ) ~# ?7 ]  {* `6 \2 p; n; i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : |: Y6 w+ T: r  l+ u& g! H" C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);% P* A' ~* n2 [( ?8 j6 H+ @- V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 t7 S% x, Z. \) d0 h) \! i
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 W. {# `. M! e3 R+ x& A
  381.   if(UpdateFile3.size()); Y. s' j' O, C( J+ I
  382.   {6 x5 T( U( R4 H3 e1 A$ P* [/ u
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ! Q( ^1 J3 {6 |
  384.     {4 N6 r' m+ j* E, q7 Y/ _
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; [3 q! j7 J+ L" T% z. x
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : N( ~7 o' s  P1 }$ D( g0 v
  387.       {* O- a: S0 _8 g5 E7 @
  388.         file1=(LPUPDATEFILE)(*p).second;+ y; \8 ?+ C" x7 S& i
  389.         file1->vers=file2->vers;2 W3 }" E( m0 i& v2 n- W/ f, M
  390.       }, K5 H) _) v/ e& t# J3 ]
  391.       else
    / \) v7 B6 T/ e4 S1 ^
  392.       {  V8 x0 Q6 E+ S! [) T! B
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) [% U3 ]2 e( t  a
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    1 r0 o2 F' x& n
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));4 C- Q# C  O3 V1 D( j; Z" {( L5 ~
  396.       }; a4 ^: c* ]& }( u0 m1 ~% Y
  397.     }$ X" Q3 ?6 R1 a7 \. `
  398.   }) ^% i# y7 T% w* b  [! w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)& k1 c7 r) X2 A5 K3 A
  400.   {3 Y. C. l4 I+ B, X
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ; Q  o; u) g/ L; j
  402.     {4 D! u1 `3 M; l7 h6 H
  403.       file2=(LPUPDATEFILE)(*i).second;
    ! r7 U0 M: _6 e1 ^* B+ g: K" ]0 i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + K3 ?% P6 k7 `/ K2 k8 o, f* S' b2 _/ v% v
  405.       {) P7 m4 G2 {, g! Y  |' F1 t6 o
  406.         file1=(LPUPDATEFILE)(*p).second;- q& J/ D2 Q5 ~1 ^" V, b$ P; s
  407.         if(file1->vers!=file2->vers), j" ?( ]  W0 E1 \8 k& T% \
  408.         {6 L- O4 v: b4 f+ y1 r6 n& G
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  o' A) n: b7 U
  410.           c++;
    $ G8 }' D$ K* V
  411.         }) M" H8 ]4 A2 [
  412.       }
    6 V) A. u( v7 n9 O3 K3 ~! t
  413.       else: P! y( N3 Q3 L+ p0 z6 @  C' E% \. I0 ~
  414.       {
    / h6 d" y( u* D: U7 c
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# v: c* v4 t3 Q% r
  416.         c++;
    , L0 @# E2 ]7 k- F0 ]$ i8 o
  417.       }
      C  O6 M* w* E& X/ f% t$ B
  418.     }* M4 ^$ ~7 p! Q+ ~- V" i
  419.   }
    / D0 N. }& a: H/ {% n3 e" b
  420.   unlink(".\\DownLoad\\update.txt");; @0 R4 V5 ?  x5 I- m
  421.   if(UpdateLocal.size()) return TRUE;* ^8 r/ b8 w6 v/ T" i
  422.   else                   return FALSE;
    8 ~0 ^1 |' l4 `, n& f" p5 c
  423. }
    9 k% b: `1 b; I: J( @3 A

  424. ! l& Z* k5 |1 V% _. [0 l- d
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" S2 n# T! I" i  z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , Y' o) w& k: Y6 o! C+ A8 i

  427. ' O1 m1 }# {4 U: ?
  428. ( s& X4 y, k# z4 ^! j( I) q
  429. ! |3 H" `0 z  V$ F) j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" ]  ~* J8 |& H0 d  _
  431. {
    / B9 w5 ^) @& R4 X9 w1 W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    9 }. @6 A1 e* z' M6 \- y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ \7 V, y' i. S
  434.   {- i8 v7 j) c, v. p% A+ B- @  C6 e
  435.     char szLanguage[50];- I0 H1 U% c/ y8 y* l( @; Q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 t+ R; ?* E" b' g7 W5 i* S
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: W/ x, l" ^9 r' S$ g  j  C
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + P! B! g) I$ h' Y4 A2 s6 J1 c6 f
  439.     else                                   m_iLanguage=ENGLISH;' f, U& i5 S! {5 j- ?8 t
  440.     char szRegister[100];
    ' j( B8 R2 n2 p8 d% `" z6 I
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 _$ J. f1 ^, B5 L6 I
  442.     strRegsName=szRegister;! Y1 Y; V: s* b0 d2 t  h
  443.     char szPatchURL[100];
    3 }0 }: X2 P5 W( _) e9 y- J
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / G5 e8 a1 d4 X7 o9 i! N, I
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & B  n8 ?4 j+ O/ w2 ^& o7 ~7 w2 ^# h3 s
  446.   }2 f2 I3 o9 ]' t$ g+ ~
  447.   else$ w& R) Q8 F8 x  D' T
  448.   {# ]( K. ~4 I% V& E& j
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + Z4 H% {" o' B/ U; d
  450.     strRegsName=DEFAULT_REG_URL;- J; x( h2 y0 G) W
  451.   }
    6 O, u& A; @( P7 A' ~3 j3 d
  452.   if(GetFileAttributes("hosts.ini")!=-1)* [5 ~# A6 ?# _6 ]; r" ]8 _: E4 d
  453.   {/ S% ^5 O/ R! K% j, m9 Z
  454.     char szIP[50];
    0 h) y: G# n; X' Q" O* |5 ^
  455.     char szDIR[300];' b/ b9 m' C# b* m. M6 m5 J
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    2 n' J6 f1 v7 d
  457.     {
    , G6 E; Z5 V0 [! n& q' l, Z: q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* j2 u2 Q) f2 U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 U- A/ r  g7 q/ d: S" U, x
  460.       strHostName=szIP;9 v. Z- O" V% r: Z7 P
  461.       strHostPath.Format("/%s",szDIR);
    - @2 ]# }: Q# O( P; {" P, U
  462.     }7 n. T8 l: G5 ]8 S6 r
  463.     else
    , u8 }2 Z9 Y; R& R$ r2 J
  464.     {
    ; [2 p" v$ f) e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 O, n% q! x' S) l- Z: R
  466.       {1 M1 Q3 l3 u$ v
  467.         char szLanguage[50];$ l7 S1 i- V9 P" x9 c: k7 J$ Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    & d8 |# F+ _. C) g" S# @
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 J! Q+ X' i% H7 e+ z( l
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 J! X( _; h- w5 N
  471.         else                                   m_iLanguage=ENGLISH;  w" S/ u& d0 ^! Y5 N6 d
  472.         char szRegister[100];7 u: n! C9 z  d& U- O# f
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 `# R1 y2 @2 e$ {9 p- D5 w
  474.         strRegsName=szRegister;
    0 U& p7 }* R3 H2 t- x1 o* _
  475.         char szPatchURL[100];) Z3 U( H6 \9 p2 h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 s, D9 D& Z1 F; |6 `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 T- D$ M/ M, _2 n  O7 _* Q, r4 ^, @
  478.       }' I6 t% p/ D& a# U. D$ D! O
  479.       else1 A( @4 ?1 _% N
  480.       {
    , d! K  h. h* j7 ^% u; S) m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ x. W, M/ [( q) J" M
  482.         strRegsName=DEFAULT_REG_URL;2 Q1 J" ^$ }/ q& R0 q& J
  483.       }
    0 s, j) _. K( x
  484.     }* Q* o6 T. W" Y: e$ V. k
  485.   }" j1 ?  Q: x3 G  C4 ^; x7 F, }
  486.   return true;+ l. k$ H, }3 ~" f
  487. }
    # q; m5 S1 X4 |5 q" K

  488. % M  R' H- }' k
  489. #include ".\ZLib\unzip.h"
    6 q( w( p3 y! v) H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 v7 v" e3 O1 s+ Z
  491. /////////////////////////////////////////////////////////////////////////////
    ( Q  m: \1 ~7 w9 w: L( ]$ r
  492. // CRevAppApp initialization7 s6 E+ Q& Y8 C. `
  493. ( v, r1 g$ E+ h! r
  494. BOOL CRevAppApp::InitInstance(). d$ S" e8 c0 t  J$ u, I  W
  495. {
    7 s  f5 N6 o6 b* Z1 j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . }- k7 v- ]3 H/ {' @! g
  497. ; M% n6 V5 H9 p4 i- P+ |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * x# e* c# }) D! f
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))4 _/ \3 l; h. c8 f" c% I% }* N+ A, A
  500.   {8 h4 H/ m. i. j
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 j3 m( T1 u2 [( L8 u5 \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 P4 _/ J# B" P6 t8 I! k. [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ k9 l; v2 N' c
  504.     {
    6 L& K4 s; Z; W. }! M: t, N  w
  505.       strcpy(szPath,szPathTarget);
    ; g5 |% m: z. a0 o3 W5 z7 D, _9 q! o
  506.       SetCurrentDirectory(szPath);. R! U7 v9 P+ s
  507.     }7 U8 q% x$ L2 l
  508.   }
    4 l  P) f# M  H$ |" y( w6 A6 h
  509. #ifdef _DEBUG/ c9 `/ W9 S% o# {0 j
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) {2 _- E" a( C& s9 T# G
  511. #else0 h- K: ^! O- @9 ]
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # s) k0 n+ f7 w; e8 v) V
  513. #endif0 Q. `( Y, ~* O% _$ ?, o
  514.   {
    ; D' r( Q5 S, i7 p: q
  515.     char tempFileName[MAX_PATH];; A( [% Y# K( ]9 R* x2 f
  516.     strcpy(tempFileName,szPathSource);& ^! q9 Z) n7 _
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * A% z9 r) X" h9 f0 q, T' ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ I# L7 d/ S2 P
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    3 M9 e2 F4 V9 `/ I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 N+ l( t7 U' z4 L$ w$ \6 ^1 M% j
  521.     return TRUE;
    ) Q* {+ w" \* H* x& M9 Y. [
  522.   }
    1 ~2 V8 p+ d; v9 Y
  523.   // Nuke 0118: Delete run.exe6 M1 l+ B8 T. Z8 t/ D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. g4 c8 }/ {+ W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) u# x0 f/ G" f! ?7 @
  526.   if(!ReadCfgFile("Config.ini"))" i& `6 I) @3 C* w1 z* X+ _6 m1 _
  527.   {
    : H' U8 s) I$ `0 L7 @" Y# a- f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      b! f6 ?7 m5 ?
  529.     return TRUE;/ ^2 k( S; C, {2 c2 m- d
  530.   }" |, f& V$ v' _  N8 H, i1 B6 z
  531.   HANDLE mutex;
    0 d+ _* l9 f' I3 X0 C
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))1 Q9 b1 _! o1 t( j
  533.   {
    4 ?: n8 \# K' k8 Z+ t5 |' i# H  X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ m4 S; G2 D  b3 Y
  535.     {
    ; ~2 ?" k' E# M
  536.       CloseHandle(mutex);
    & N+ M9 V9 @9 a! S! O: F8 I) Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 i; T9 \7 m2 g7 F( _) A1 Y
  538.       return TRUE;- v& D% ?- S2 Z6 m, J3 p" |" E: f6 v, |
  539.     }! U3 J8 T0 @3 D4 x
  540.   }  
    $ e: V0 Q) b1 X, a+ N( a. }/ V
  541.   CloseHandle(mutex);6 ~4 G( W' c; v+ w

  542. 3 v+ ~; t$ ?# R1 N" {
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);+ u* [* Z2 ~$ ^, H& A4 e

  544. ' B0 v! q2 X: k( j* i
  545.         AfxEnableControlContainer();
    9 L( x6 g9 C' J. \: u& e
  546. 3 ~# L( N& q" l5 i: `4 X
  547.   bCanUpdate=FALSE;
    0 R) u- s' E4 r4 k& y7 H) d% U
  548.   dwStartUpSteps=1;3 F9 b  y3 v' @& N6 H8 x: [& V
  549.   dwProgramState=AP_NOTHING;0 ~* t, ~+ o$ O- J4 Y- K

  550. 2 e+ e; K# a& d* {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; p/ K9 F0 B* ?5 B5 y# ]

  552. % M5 ^1 P& s( _- o' |. ~
  553.         // Standard initialization( p: d$ {& Q& V& I- M0 F, X# \
  554.         // If you are not using these features and wish to reduce the size3 f& o) L8 W" J' {$ F
  555.         //  of your final executable, you should remove from the following: q, d& M7 K: a4 q8 `
  556.         //  the specific initialization routines you do not need.7 o: J8 P; @- ]' v, S

  557. # s3 x/ s' G* w4 \4 B. \0 U
  558. #ifdef _AFXDLL/ c$ f0 D! v$ C- v  e3 z* n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' {. X: k" i8 g" x
  560. #else
    1 q: m3 T% c  X3 U1 Y3 s
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 U7 C5 z% n0 G
  562. #endif6 K7 o1 V4 c1 B5 E

  563. 4 A1 X1 ?6 G% t* Z
  564.   dlg=new CRevAppDlg;! O8 o) F: Y! w: B: e3 j. ^) O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 ?8 a3 I9 a+ C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' z$ L  l3 }' b& S, u& x. A
  567.   m_pMainWnd=dlg;0 }' O* p0 r/ j& K+ {' N
  568. : k0 X: J  j7 H! ]  |% Y# U# T! E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    7 g' u8 w1 n  ?' ~0 Q& ]4 L
  570. ! V! G8 `  w' Q7 w
  571. //  GdiplusStartupInput gdiplusStartupInput;
      ^# i) Y2 g2 T! ?: \6 `
  572. //  ULONG_PTR gdiplusToken;
      E9 |, G5 ~& K  J6 I! r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! q( L: z* n, _! Q5 E" d
  574. # \; ]9 K4 O; A8 K
  575. //        CRevAppDlg dlg;
    # o% c) r) B% x' Y/ T" X# m. X
  576. //        int nResponse = dlg.DoModal();
    , \* t* E1 d- D% J/ k& ~
  577. //        if (nResponse == IDOK)
    ) D! S6 E! U8 t& X- a8 v
  578. //        {
    / u4 [$ X) e- Z" ]! C, ?  s3 ~
  579. //                // TODO: Place code here to handle when the dialog is. e# m/ J* z$ c0 w! a. F) ?
  580. //                //  dismissed with OK
    4 D) K+ w/ I* o" L+ |0 G2 U8 R
  581. //        }* V6 o% `: h1 h# u; ^; u
  582. //        else if (nResponse == IDCANCEL)
    ) W: v: t' K/ f. W' Z
  583. //        {" P  |+ k, c( N& Z! d( H
  584. //                // TODO: Place code here to handle when the dialog is
    3 {6 Y, g% ^- b: i( f
  585. //                //  dismissed with Cancel3 }0 j3 I! D$ R, x* C2 n! e$ M) [! {+ f
  586. //        }* V: @' K( i) u" [
  587. 1 X) P! e, d  o/ h
  588.         // Since the dialog has been closed, return FALSE so that we exit the) u# F8 }8 U! r8 E$ A1 h5 J
  589.         //  application, rather than start the application's message pump.
    - p/ d' M8 Y* ^3 P5 {5 Y/ z% T
  590.         return TRUE;
    3 c; k( c: G& a
  591. }; ?4 R+ x# M( K  z" N  ?. k

  592. % ^# V$ W  z9 X  z- x8 W9 A( ^  C  p
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ |2 I! I9 k. w
  594. {
    ! f. h) l, O2 w
  595.   int i;, s3 @% m+ c8 I* R; z
  596.   char *szRet;! N* X5 m5 O( F& s% d% w
  597. % _7 l8 Y9 w( D) t) S) @# q% ^
  598.   if(pSource) { itoken=0; sztoken=pSource; }! k0 F7 p. {6 v
  599.   if(sztoken)
    / z% f! H2 j, o$ {- h
  600.   {
    + v! G' m; u5 ~, B. W! T3 B  I
  601.     szRet=&sztoken[itoken];
    6 n1 V1 |  p. O8 c
  602.     while(sztoken[itoken]). r5 }; i. \: i# A+ w8 D6 u
  603.     {$ ]1 X( Y6 i% v( i
  604.       for(i=0;i<(int)strlen(token);i++)% z$ k! u) {, Z: O( b9 Z
  605.       {
    * p) Q+ w3 S1 }* [7 V  t' m) i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' F4 V5 B7 p( ^3 ^. D6 f! n
  607.         {) A# U( K  T. u2 y5 F
  608.           sztoken[itoken++]=0;
    * e% y# W, g" q, \
  609.           sztoken[itoken++]=0;
    1 s" x" A' b+ U5 O3 \
  610.           return szRet;
    " ?( ~  I$ R+ `" N5 y! F* Y  c' |
  611.         }
    5 f" Q1 d% I, A8 Q# q
  612.       }
    5 Q) J9 w3 H. ?/ ]9 f
  613.       itoken++;3 Z5 Q& G5 l; a4 t
  614.     }
    , w/ S) m# Q2 U1 R$ A  C
  615.   }$ Q6 y# D& u( z1 k- o  B  n
  616.   return NULL;
    + Z0 a. Y3 ~6 {, t" }& @2 z
  617. }2 A0 o5 n' J- K! Q1 a& y8 l; I3 q
  618. 6 _$ R  d! b5 x
  619. void ProcessProc(long Total,long Current)+ X8 r! a4 |& b! ?" _; G
  620. {: Y: V7 G) m; N) o) H
  621.         MSG msg;- Q# T9 E, k8 ?0 M0 l' R$ O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    7 _: y# B. }# |$ Q" S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 f; S9 L- P7 U; e4 y" T' J9 w, q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))8 t2 W0 P$ h! g: r% ]
  625.         {
    1 f0 s: P  d6 ^3 a: D- R* A
  626.                 if(!GetMessage(&msg,NULL,0,0))
    1 e7 Y( @5 k& J' S
  627.                 {
    ! v1 a- d* w/ s0 Q! W4 z7 ?
  628.                         return;  ~3 S& Q! U4 S
  629.                 }
    % Q3 B; h- w2 {6 O3 I, T9 q3 M
  630.                 TranslateMessage(&msg);  V- ]5 A( {  W
  631.                 DispatchMessage(&msg);
    4 l' G7 r, V5 c! k" Q
  632.         }       
    2 k2 k" e3 j* \  A6 J2 u
  633. }+ t( f# C* i$ l1 O8 |
  634. 2 S) ?6 q8 C1 f! A& ~* I
  635. BOOL bFirstChar=TRUE;
    ) L9 L' v; B6 H. z/ {, @
  636. * e4 F' U& `/ K( F. S
  637. BOOL CRevAppApp::OnIdle(LONG lCount)& `9 s2 v' O# M, m% d6 T% L: r
  638. {) Y8 s1 s$ x/ t5 y9 w) y# m- L
  639.         // TODO: Add your specialized code here and/or call the base class% X: ?/ ^7 Y  O
  640.   switch(dwProgramState)
    ( W0 [! I9 P9 c
  641.   {6 T. P* G' i2 c, h7 ~# a
  642.   case AP_NOTHING:, G6 n% {3 P1 M
  643.     switch(dwStartUpSteps)
    , r7 V- D6 h" H+ |
  644.     {! t$ j" k! \( M  E
  645.     case 1:( D- Z1 n8 \+ ], L6 E' E
  646.       {
    3 a3 e+ m2 d0 \! U2 R) V; U0 J; S  w
  647.         int i;. a9 ^* u7 i( L- r
  648.         CDC *pCDC=dlg->GetDC();7 Z- S3 s. E3 i4 h; U! [  L! o5 f
  649.         HDC hdcwnd=pCDC->m_hDC;
    5 z! ?/ H% A/ ^  ?% `; l
  650. //        Graphics graphics(hdcwnd);
    0 m1 Z& \7 s# o& O" {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      B+ I4 x; {9 e
  652. //        INT iWidth=bitmap.GetWidth();
    & ]) [" b% p1 c6 l& j
  653. //        INT iHeight=bitmap.GetHeight();9 u3 \, h. ]; P' Y
  654. //        Color color,colorTemp;
    & r( t( }+ I; y. [: c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ! H' S% o( s' n+ o: F
  656. //        {6 u3 X4 `# U7 q2 V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 f5 \) k# t  f: Z) @
  658. //          {
    4 ]4 O2 j1 R# d; E& R, }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* b- k! G6 I) f/ N7 r
  660. //            colorTemp.SetValue(color.MakeARGB(" S8 t4 w$ A/ Y+ ]
  661. //              (BYTE)(255*iColumn/iWidth),( q- K' T* v  R1 e' X. h
  662. //              color.GetRed(),2 p5 n3 @: b, A; z4 b
  663. //              color.GetGreen(),0 c0 A4 q* _" |2 i
  664. //              color.GetBlue()));
      s1 e, i+ U* z" Z7 I5 v& L
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    : C* L! {" }! U6 Y* ^
  666. //          }6 W6 U+ ]+ Q% V3 H. e5 `7 ~
  667. //        }/ |/ X9 q. o5 [$ u& T8 R  E. @% I/ B$ Q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . O- h) d& P  B$ B2 ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 V: o6 U3 t! v
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");/ J& H- x( ]2 q; U
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( l0 b, n: K6 \8 h& T3 B- b0 x4 Y
  672.         for(i=0;i<240;i+=8)
    5 Q! H  B$ Y- w" N9 I. J5 ]
  673.         {7 G% f$ w$ R4 ]- k. |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & i  \! t; r  v
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : {; y, Y9 L5 d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" D4 H! j$ \3 Y+ N8 h
  677.           Sleep(33);
    & B  K. {  ?3 A: Z4 F
  678.         }
    ( h) N# {* j) q# }3 `; G
  679.         Sleep(1000);
    + w! j: L4 ~7 S
  680.         for(i=240;i>0;i-=8), X& l4 q/ w% C% B
  681.         {
    # z5 R8 t/ a0 S# M$ Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 |' }% N6 `5 U; n8 e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : [- l, q6 P* i+ b& a& o
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " I7 O# {; I3 m( g- u, [
  685.           Sleep(33);1 `" P# M5 ]/ |0 f! y6 q
  686.         }
    ' c# b9 o3 X& U; v+ \! c5 }. Q1 t% Z' Y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);+ P) d6 Z9 ~0 C- X+ k1 k- i9 C$ I- {
  688.         dlg->ReleaseDC(pCDC);3 R* `3 t1 Q8 f  s
  689.         DeleteDC(hdctar);1 }9 F& }; U6 G  z: [; k7 f& `: ^
  690.         DeleteDC(hdcsrc);
    5 |( e7 ^" T) D2 @0 [
  691.         DeleteDC(hdcorg);7 K3 R5 [4 V3 a: C1 g! }' F+ Y
  692.       }
    2 Z/ s. q# S) D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);( f# E0 }( G/ ]) j, G0 d( I- i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* c2 _. b0 W! O' m( [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& A3 Q; q$ p5 M' v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      ^, |8 t* ^, J
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ D% _* j" B- R& ?
  698.       if(!Dn.Connected())( {0 D  M" H/ e
  699.       {! z2 ~7 r& y: {5 `- w* h6 B9 S2 h
  700.         dwTotalFiles=1;
    * Y9 Q- N: S! E7 h* ~; E
  701.         dwDownLoaded=0;
    . T4 U4 T$ U  J; s' [- D5 n  e
  702.         bSilentStep=TRUE;
    / p' @% e- E- k# m7 g( a
  703.         bCompressed=FALSE;
    ) q8 e$ A9 O7 q2 E( v; Z1 t
  704.         strExtLocal.Empty();6 c! ?( |+ |1 R* l, h% D' R& s
  705.         strFullName="readme.txt";$ j# r0 I7 a5 L9 B3 L4 N. U3 H: J% x6 R
  706.         dwProgramState=AP_CONNECT;
    % {. d3 D' u0 Y7 f3 U! i
  707.       }  Y  c) s, C0 P) }
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();) P0 K4 I( G3 Z! `, w* `) Y
  709.       dwStartUpSteps=2;
    2 S! Q# s& l2 U" f! E* x( \3 L9 v
  710.       break;6 M. d4 n0 l  y
  711.     case 2:/ v$ _6 U* `) _; ~; G
  712.       {1 k6 L" h* T' g
  713.         int iEOF;8 j/ g6 W1 L0 d( |* {( Z! @
  714.         FILE *fp;
    4 p  U( i& h+ r) q/ v
  715.         char szString[512];+ D2 N4 X& m* b8 G4 K
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    1 j8 Z$ l! Z1 M; K; U
  717.         if(fp)+ b, q4 [+ i; q8 E& x
  718.         {
    % ^% S. m$ C6 v0 X( q
  719.           do
    # H6 l" E5 W' m9 k$ c4 [2 I% x
  720.           {/ o5 J9 {- }3 o& d
  721.             iEOF=fscanf(fp,"%s",szString);
    $ t# T2 b" C' y
  722.             if(strlen(szString))4 W' S7 H; K6 t6 g3 e$ H6 \! O# v
  723.             {
    8 b7 n: N. t; `6 m5 r) M8 l: l0 \
  724.               if(bFirstChar)% I% Z& `" d4 w: _
  725.               {& F1 ~6 e5 U7 ~
  726.                 bFirstChar=FALSE;
    + Y- H! t  ]$ r% I; [
  727.                 bConnectIsBig5=FALSE;
    . v3 V% B  ?2 Q9 I: S. I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    0 U" _1 h. ?. J& d7 y; N5 n" ]* P
  729.               }
    5 J. m3 }/ S& m$ u5 `, l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));4 }6 T2 }3 d/ R  S
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 D* \( T+ S- f* \' @9 E) [
  732.               dlg->m_ListText.AddString(szString);
    $ `3 x1 q% q& s8 g5 m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 y9 B/ l1 C' L# b/ W$ N  A- x. J
  734.               *szString=0;
    * F( P$ w* b& B/ w) A1 E' y4 M
  735.             }
    7 ]7 m# M& \, I5 l% y
  736.           } while(iEOF!=EOF);" M8 @2 @3 a7 x/ P1 s1 J: @- T' f
  737.           fclose(fp);
    3 q( r, t( C, ], @' m  d
  738.           unlink(".\\DownLoad\\readme.txt");7 [; n. g( ?& j9 @' u3 U; |
  739.           dwStartUpSteps=3;
    . U9 J6 k) e7 h, n5 D
  740.         }5 c% M3 Z8 O) \% T- d$ W, k5 k! D
  741.       }$ N/ j$ A+ N4 u" ~9 g; \
  742.       break;
    8 `  ?: ^# v( K4 R
  743.     case 3:
    $ J* S7 s1 v6 w# J; W' @0 V
  744.       if(!Dn.Connected())
    & \5 B1 e9 c9 `) {
  745.       {9 r, _1 g& B9 z5 ?' a% j5 _6 \
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    1 m! R/ f- U. I
  747.         dwTotalFiles=1;" ^6 z) p& E! p7 t3 g3 q
  748.         dwDownLoaded=0;
    % H. n, l! c: Z7 J' b9 g6 P
  749.         bSilentStep=TRUE;
    : ~0 C3 f: {3 n
  750.         bCompressed=FALSE;6 F/ N" a( L- F' W( M. q
  751.         strExtLocal.Empty();' a' ]) t' z2 j% q, m" S% }
  752.         strFullName="checkversion.txt";
    ! Q: B6 [7 W2 J( y1 C& D5 t
  753.         dwProgramState=AP_CONNECT;1 [( P# X- t8 E* }1 F8 N
  754.       }% v! ^% ~+ Q! T$ |- _9 K+ u4 O
  755.       dwStartUpSteps=4;0 c1 s2 r, B( n
  756.       break;' G" f0 v" W. \3 [
  757.     case 4:2 T& Y4 l. \& C
  758.       {
    / B! t5 N& y! H/ c2 Q- x& h8 n
  759.         FILE *fp;
    ! d+ G& ?: z7 K
  760.         char szString1[128];
      \6 {3 a1 \: }- [% x5 `
  761.         char szString2[128];
    $ F. k: C2 X; ~% b- J: r& E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; m' F5 W, y9 K; `' h
  763.         if(fp)
    . V1 s9 }) A2 _$ w( y
  764.         {
    - X- C1 M9 Q- c8 J
  765.           fscanf(fp,"%s",szString1);
    6 I# J# y8 {& j6 z' u
  766.           fclose(fp);# M2 D# n2 {2 I, e
  767.           fCheckVersion=atof(szString1);! P# i) E2 \+ S  A" F* _
  768.           fp=fopen(".\\checkversion.dat","r");! M, C' k1 Z/ L! b$ f" E0 n, j3 b
  769.           if(fp)2 i' ^) `8 X/ H! G- b4 _
  770.           {% N, u4 h( \- ^) m( `, x6 \9 c
  771.             fscanf(fp,"%s",szString2);
    ( Z) j$ c) Y7 ~
  772.             fclose(fp);
    8 v) v5 N) h. `
  773.             if(atof(szString1)!=atof(szString2))
    " l7 ^+ A+ c: }9 b& ?1 V. G
  774.             {% A: ~3 G% v3 {5 N9 F2 O
  775.               if(!Dn.Connected())
    1 f" Z( k8 s) N& ?1 S
  776.               {
    # D; v+ f  ^: M7 k; ~% `( d0 n
  777.                 bFirstUpdate=TRUE;
    $ {: M6 e2 v: ?7 t4 J4 ?' ~" R0 t
  778.                 dwTotalFiles=1;
    ( ]: d+ b6 x( C+ e8 b5 ^5 D
  779.                 dwDownLoaded=0;4 f8 I: [8 u/ |8 y4 l
  780.                 bSilentStep=FALSE;6 K" Z  ]/ }3 B4 q
  781.                 bCompressed=TRUE;+ f! o! O( F, k
  782.                 strExtLocal=".\\DownLoad\";
    , A0 n  Y; U4 w8 o- \: W8 E5 R2 h
  783.                 strFullName="update.txt";
    ' \4 M! y7 T. U
  784.                 dwProgramState=AP_CONNECT;
    0 ^" m; d/ i5 Z5 J$ k/ v
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / l& P2 x8 K3 x! d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 m/ c" b1 _9 y$ u* Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- n+ K  {6 `' V! A

  788. 2 c) W) _/ X$ ~7 H1 i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & j, d0 f  U& m% h% j
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 m& P% }8 N/ E1 K$ R2 s% s6 }& s$ f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    0 h. m/ M% f0 p# X
  792.                 {% p+ N" j' W/ F" r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 u; ?9 h5 y" g3 {8 g" n/ Q+ b
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% }" e8 x. m* ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " F1 }7 ]% @! a  Y5 v4 T
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * l7 N/ [# q+ h- C8 ^

  797. 0 T; }  K1 U! e, \5 k  Z* C8 t& `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- ~5 l- k2 O+ p
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 @' O, g: L: J" W$ S8 n
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# W+ X" M: u& N& ~2 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # ^( x* }) s2 H/ C7 Q) @! k
  802.                 }
    - U/ C& T4 J6 L  a
  803.                 dwStartUpSteps=5;
    % e. }5 ?# v1 D  d3 |  ~6 r
  804.               }" b* }( K6 H) w: p
  805.             }
    ; x5 f) H) l' j, s* Q5 l
  806.             else
    " {0 s" r! Z, F
  807.             {; D& c+ B& \, d' I' l; T5 b
  808.               unlink(".\\DownLoad\\checkversion.txt");+ [1 @& A! G6 X* ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( b4 R$ ^" ]  v' z: h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 K% d, k4 P' I6 [' k. n
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    * x# Z2 b  z2 [
  812. % K* _  c4 ?& s' }7 s$ W! R" N
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : P* E" ~1 k! Z
  814.               dwStartUpSteps=99;- U  i; G3 }9 m9 p) F
  815.               bFinishUpdated=TRUE;
    % D2 d7 P% ~0 M! W
  816.               bCanUpdate=TRUE;
    * q1 g) h8 r8 W8 N( J( k+ S
  817.             }: d6 l; K; m8 W3 [) r, _: a0 M
  818.           }
    " C+ k. f! o/ {2 v% [0 i: Z
  819.           else
    9 F. u! s0 {% E. p+ T
  820.           {% m) x- d; O7 {" N! k4 L* h2 q
  821.             if(!Dn.Connected())
    6 A0 y; Z+ X, x( ]! k9 k! f" t3 ?
  822.             {" d* {. ~! s) d: n5 j
  823.               bFirstUpdate=TRUE;: I7 }* E% s: d6 r5 }% a$ R& `! N, l
  824.               dwTotalFiles=1;
    + h# z' C" x5 j, A; Y$ O
  825.               dwDownLoaded=0;: E- b) ?1 s' K0 S6 v
  826.               bSilentStep=FALSE;' x0 J- e$ b5 H  n/ y; j0 l9 u3 C
  827.               bCompressed=TRUE;
    & R- L! N1 Q/ H
  828.               strExtLocal=".\\DownLoad\";
    4 M' K/ U& P. F4 R: D; o5 Y! h9 z
  829.               strFullName="update.txt";
    1 F' h, j+ _; a, ~8 {) x, w
  830.               dwProgramState=AP_CONNECT;; n! c. @6 m8 i6 b% |
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 v: P/ W" S( n5 G3 D
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");2 U8 F. V$ `$ B, J$ [. b* @
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");$ Y; y& y5 ?) j. o/ H& ~
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ Y9 i; O2 O; F% x  }# O
  835.               unlink(".\\DownLoad\\checkversion.txt");- L* d. z( {, v6 n& a
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)3 }( E6 K, @" B* z8 u
  837.               {
    5 e! p1 d2 ]4 W/ J+ }" E/ I& R( E
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");' U2 N' ~" N* {5 h& y# y: V; F
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 f' X5 X- X7 w: G
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ' J1 a, M# @8 h1 T& h% b$ l' O
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) c( t) q% l. U/ d2 T
  842.                 : e! k0 k" o& v  O) m6 o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      s4 [3 ]7 j5 \: O
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 e" k( t3 r! {9 N8 Z1 ?8 ~+ r
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; X' m1 K! \9 N- n3 E  N
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 R# W* g$ Z# }. H4 `& I
  847.               }
    + ]1 B4 n1 V( c* E4 k( h; p
  848.               dwStartUpSteps=5;6 F9 A, L6 [$ k( \# u8 ?
  849.             }2 n' J) e, k2 z: d9 \4 A5 G  |
  850.           }" B5 u( [& a; X2 B+ v
  851.         }
    5 m( _1 ?9 s* V) p" ~! L
  852.         else: X+ u6 L% w. N* T8 S4 K
  853.         {2 F& B, W2 _: w$ O. z$ W2 ?# v
  854.           dwStartUpSteps=3;3 {+ M4 Q) u; Z  L' V% N
  855.         }
    7 G* b: |6 P" g& r* \/ d+ I0 c4 R
  856.       }4 t1 i" A, R% {. O" q# L. ^
  857.       break;
    0 Z& v6 b7 t; j/ r( f' P( o* m
  858.     case 5:/ p) l: T5 M; s! x
  859.       {
    2 v0 k/ ?! r8 x8 `& w" E0 ~- G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 s+ q' d' c" n' M+ t# a. F$ l
  861.         {
    # H1 ~- }* F/ }/ w1 |5 p1 r9 ~- g
  862.           int opt_overwrite=1;
    ; X+ n& _$ d; G* J7 ^
  863.           int opt_do_extract_withoutpath=0;# O" J  D, h: \* C+ m0 l6 S
  864.           unzFile uf=NULL;
    / K3 C5 Y3 f9 ^* S' ~! X' }
  865. $ j' N: R+ q* M# s# A% F
  866.           uf=unzOpen("Wsa.zip");9 i# x. @! F. o% X& M
  867.           if(uf)
    9 w+ `2 L; l% Z7 H) Y
  868.           {" P. z) t6 t9 @( C+ I% _8 h
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    * r0 F! [1 O  n, \. B$ j+ ?
  870.             unzClose(uf);$ l5 K# ]7 a' e4 a. X9 t) Q
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    2 G! _5 ?# O: |: g. O- a9 ]
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
      j4 \# |$ f7 l+ @; z& H% x
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");  W; J% W) V: ?# v% X3 `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - R) ~- C7 E: d. I- ^( @) O
  875.           }
    ' ~: U4 G  U1 H9 [0 \& f1 Y
  876.           DeleteFile("Wsa.zip" );( y7 ]2 e) F- |
  877.         }) o- n, \% u2 A% D- H, A! g( M9 w! [

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

. W3 i% o  i4 G. ~6 ]0 c) b
7 Q4 l' D  I1 O3 F: L6 _+ t

評分

參與人數 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客服返回頂部