找回密碼
 立即注册

CSUpdate.exe源代码

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

2 \$ S+ u7 q* H/ A- b
  1. / RevApp.cpp : Defines the class behaviors for the application.* e0 }: c, W2 J- T+ H4 o' {
  2. //
    & P7 r& x) [# [3 ^2 j7 [; f
  3. 7 s% D" ?) n7 W8 O, r5 Q
  4. #include "stdafx.h"2 ?( k2 R; E4 S
  5. 6 v; ^$ v3 Q3 R# f9 P
  6. //#define UNICODE
    " b6 F$ J. M. i+ t0 l
  7. //#include <gdiplus.h>- F% \, |/ \0 W8 F5 J$ z
  8. //using namespace Gdiplus;8 T! @/ Z5 L8 w

  9. / ~5 e/ c9 x% }7 H, b
  10. #include "RevApp.h"
    + }& O# F, `" z  W  o$ A
  11. #include "RevAppDlg.h"
    ' @$ x$ o% v7 R6 K" H0 V  b- P
  12. ; L3 }& t% J; N4 L
  13. #pragma warning(disable:4786)
    : w2 ?$ P6 E/ ?  s( V. r; ]  A
  14. #include <map>
    0 ~; T4 Q2 _% `% W) ]4 o
  15. #include <list>8 t6 y! H/ V, Q% \9 m
  16. #include <direct.h>
    5 X* I8 F  x. C. ]+ @& A/ [' n* P7 A' A

  17. ; p. }* `& I7 o/ j) b( v% W. Y
  18. #ifdef _DEBUG9 N2 T, \5 u7 B  K. r
  19. #define new DEBUG_NEW
    7 n/ h! r+ B0 |0 \0 \$ U% ^7 p7 C' D. ^8 y
  20. #undef THIS_FILE+ m, }9 Q' D6 q, w$ l
  21. static char THIS_FILE[] = __FILE__;
    ' Y, {& X: z  q$ o
  22. #endif& a, w. d8 q+ Z5 H# R
  23. #include "SkinResDef.h"" O: q3 u- }: A* n0 W5 n
  24. #include "ChangeBG.h"4 U% A7 a& \' I7 D$ r) {) C! H
  25. #include "AFXINET.H"
    / U) ~8 }: e5 }7 y# A  F
  26. 7 {$ C+ @% t3 V: w, E7 {+ J/ Z
  27. #define TRADITIONAL_CHINESE 0
    . o, J7 V. z' Y
  28. #define SIMPLIFY_CHINESE 1
    ) b2 h. t" z9 e( B6 k
  29. #define ENGLISH 27 U3 x! |8 A  ^/ q1 V# E' D# N& x
  30. int m_iLanguage = ENGLISH;1 U7 D0 v$ P) o3 e' d; i7 ~; n
  31. /////////////////////////////////////////////////////////////////////////////( D+ q5 F( K% n. e& L* \
  32. // CRevAppApp
    . `/ v% D4 `- a& k+ ]6 Q1 g2 V/ G( X
  33. : w3 b/ z$ E! V" a& L0 q* l0 w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp): K& q- K' A  t# c; x$ @4 p' a
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ( I1 q3 U7 a" M4 B, D5 b9 @# v9 F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 w  w. {/ o5 D8 f& K
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 }) e. O$ _9 s  k  E! i$ w
  38.         //}}AFX_MSG
    - \% ^" H  F' _+ L8 b: e+ g' z( I$ u  U9 {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% x8 m3 ]- L' C8 [8 |* `3 I( N' J
  40. END_MESSAGE_MAP(). x- c( C' A. y- k9 i5 ?# e9 }" q, ~
  41. + N' ?1 Q. `" o/ J- f
  42. /////////////////////////////////////////////////////////////////////////////
    , p+ Y2 L* M9 V7 O/ c) n/ Y
  43. // CRevAppApp construction# D5 K- a9 ]- N& l1 }% J

  44. * v; N+ x' E8 ]2 o9 e6 Z5 R: I
  45. CRevAppApp::CRevAppApp()
    - B7 C/ \+ h1 ^+ v8 l8 ^
  46. {
    9 t2 N) S# U* {, h  b. W3 j
  47.         // TODO: add construction code here,$ T0 j! H0 X( t% O# ~0 J  q! j
  48.         // Place all significant initialization in InitInstance
    . Q# ^8 k) _5 J5 u3 \
  49.   bDisplayIsBig5=FALSE;
    - K/ ~( C2 V1 h
  50.   bRestartUpdater=FALSE;
    / W0 @' @1 L. P2 o. {
  51.   bFinishUpdated=FALSE;; b2 S( n* I% S9 W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    9 y) S6 b" C2 E  o$ j
  53.   InitChangeDataBig52GBKS();
      M+ w3 c- s+ z
  54.   InitChangeDataGBKS2Big5();
    6 C( j" ?6 R7 M& q' [
  55.         //
    , p$ d. t- U0 J5 Y0 q7 y  {) ?( t" f; t
  56.         bClickRunExe = FALSE;
    & }/ e. }, p( q. @& y. o4 Z" S& E9 e" }
  57.         //0 x5 b+ ]4 j" a" y7 V' y$ W
  58. }
    4 d8 [- {. Q- k6 l% b9 `$ `
  59. 0 p% C3 o! j4 Y3 E$ ?
  60. CRevAppApp::~CRevAppApp()
    1 c! i+ {+ {/ r# }  x- B. {0 D
  61. {
    ! c, _, Q4 \( }6 _8 w. W4 t
  62.         // TODO: add construction code here,
    ) \* w7 j& ~* r5 G& s
  63.         // Place all significant initialization in InitInstance
    ( y- v7 Z7 s9 e& d
  64.   EndChangeData();( O7 w  q8 `2 \' J0 J
  65. }
    ! @) y% u0 W) U0 i" C' c1 j

  66. + a* J9 h+ ?% f* A  O
  67. /////////////////////////////////////////////////////////////////////////////
    1 t, U* t' h/ W
  68. // The one and only CRevAppApp object
    ! d& Z& e$ B! O
  69. 1 y& i) K0 k; M8 x; M4 G
  70. CRevAppApp theApp;1 p/ I5 V- X, F" x4 P

  71. " P* C2 ^4 ~; I2 u! e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 o; x# L( s( Q/ r2 ?
  73. {+ J  c, R' }8 A0 F5 u1 c& X; w# i
  74.   int iEOF=0;
    / I$ [+ ], g- Y. B# G2 h8 D; Z
  75.   char szTempName[MAX_PATH];7 f# u) l& P" V7 ~% _
  76.   *szFileName=0;+ Z  z) X4 T$ T5 {
  77.   iEOF=fscanf(fp,"%s",szTempName);) D2 w7 V1 P  s2 {9 t! E8 V  ^4 ^, D8 o
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ; b- Y8 p8 i( [9 p! O; Z, z
  79.   {
    * E$ x0 P5 @, r8 I/ G$ Q6 x; u! n
  80.     strcpy(szFileName,&szTempName[1]);
    1 H* Y3 F5 [  P0 I. h0 |3 w
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)" B: h2 \  ~: ?# H7 y% ]7 m" s
  82.     {
    - d& W7 Z2 W7 E+ j: K4 N9 n  q
  83.       iEOF=fscanf(fp,"%s",szTempName);5 r* A4 G! h7 n& z
  84.       strcat(szFileName," ");' ^! W8 I: |* p+ Q# D, {" F
  85.       strcat(szFileName,szTempName);
    % }) A* y' }: ]
  86.     }
    3 j8 X* Q3 M0 j
  87.     if(strlen(szFileName)>=1)* x  O# @, {. ^8 L' z
  88.     {
    : b! X6 o0 ]" G6 \1 e; g
  89.       szFileName[strlen(szFileName)-1]=0;
    : O) _/ ~# y  m+ j1 }# O, p
  90.     }
    - g: R& @8 g0 A: Q+ G; d2 m
  91.   }2 u4 ^3 P% s0 L& B$ a
  92.   return szFileName;
    - \+ [+ S4 S' ?( f/ ^
  93. }
    . o  P' h' x( o0 n: D

  94. - f; ~8 u- B1 I+ e7 |" o4 U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % E9 [$ ]# ?- ~$ t$ i* L5 B
  96. {
    . n3 m" u9 N1 m& n; }6 U
  97.   FILE *fp;
    % I; o+ Y1 l, ~% R$ C
  98.   char *key=NULL;
    ) y. f" X2 y/ \1 V  Q
  99.   char version[MAX_PATH];
    5 i  W/ ]+ d0 k, Z8 N2 g
  100.   LPUPDATEFILE file,olds;
    * z: M+ C, v7 L! l) b. @: k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! b3 {( T  ?3 n9 c/ F

  102. ! o: X& h' H$ D: B, }- b9 F- T5 D
  103.   UpdateList.clear();
    7 B; V, E- w0 G; N( E1 g
  104.   UpdateFile.clear();
    - z8 J) Z& b. @' J
  105.   if(GetFileAttributes(filename)==-1) return false;4 R4 {+ V" E5 M( Q4 g
  106.   if(!(fp=fopen(filename,"r"))) return false;
    0 {( E- h5 H) u, Z" s' S( B
  107.   fscanf(fp,"%s",version);' R% }& q6 I- `4 G+ p) K
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }0 E4 T8 [: `+ g* G
  109.   while(fscanf(fp,"%s",version)!=EOF)
    # L% A7 {! U. e/ B# s% W3 E7 c
  110.   {
    5 [( \: t3 H8 ?+ l2 b
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 J0 i1 _3 F. l* S: U
  112.     fscanf(fp,"%s",file->path);. m6 P8 }& U, T: Q6 r2 q3 U) S0 |
  113.     ReadFileNames(fp,file->file);+ w. b% X. y5 T, p" v
  114.     strcpy(file->full,".");4 N% L4 Q( F, i
  115.     strcat(file->full,file->path);
    # s  a! c9 o& D( B
  116.     strcat(file->full,file->file);- d8 }% l+ T( B& u* Y( T% c
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). a% C7 e' |- e* {6 Y
  118.     {( f- T1 Y& s' x( w1 z7 `
  119.       file->vers=(float)atof(version);/ i, A9 j: h" r& F8 e% B; m
  120.       UpdateList.push_back(file->full);
    * t6 T1 g7 F( N% W  Q( x6 l- c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " n0 z& a" b3 p/ |6 Z, C
  122.     }
    * g# G7 p! n% _/ \6 i
  123.     else
    # }' j/ p8 Z7 ]" L; k! _8 A' P
  124.     {
    8 c, A: }; |# x& {; u# h# x# s( ]
  125.       olds=(*p).second;7 ]" v* h$ A( x9 ~0 o# h
  126.       if(olds->vers<(float)atof(version))8 o% q4 M, O" N5 {9 i. {9 D
  127.       {
    7 B, Y7 O, i# _" D( e, S3 t
  128.         olds->vers=(float)atof(version);
      g# w7 v$ N9 t  h$ w5 A
  129.       }$ [: u* l) `' W2 g9 N; J2 Z
  130.       free(file);" h, h2 q* b* i
  131.     }3 h1 T1 W, n3 i
  132.   }6 ~; C9 }8 [' u) l
  133.   fclose(fp);
    ' s9 C$ @. {; y- I( h9 `5 Q
  134.   return true;
    " m! ]1 |3 k8 Y/ O9 J
  135. }
    , J6 z3 ^' |, r$ G

  136. 2 O: L( m: E9 k: v' r; G9 m. Q2 B% @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 U7 W! `  X$ O
  138. {
    + J- O! _* E9 v& o
  139.   TCHAR  szFull[MAX_PATH];
    / p0 ]4 P: X, m* z
  140.   TCHAR *token,*inter;- W5 k6 U6 p' R. j( f# U! P
  141.   *szPath=0;
    5 ?0 q# |: ]* z. m- I- ?
  142.   strcpy(szFull,szFullPath);
    $ @, y/ l' E: h2 ]$ L) ~" T
  143.   token=strtok(szFull,"\\/");
    * G% N) e- G6 n5 o- Y+ w
  144.   inter=token;$ v( q9 S/ {  n/ U0 B3 S$ v
  145.   while(token=strtok(NULL,"\\/"))0 x" N6 F8 c' z+ l1 Z* Z! P8 `
  146.   {
    5 m, c$ G2 k* a" \9 Q( a
  147.     strcat(szPath,inter);
    . U$ F; d$ v/ a. h  p! u
  148.     strcat(szPath,"\");
    3 u% C* a; P3 u$ L( B" Z3 X
  149.     inter=token;) w0 J9 I: `, @1 _& }( \; O: ?
  150.   }
    & H+ L& h& O! J, ?
  151.   return strlen(szPath);
    1 M8 o' r0 q+ p. R" _6 N
  152. }, j* P5 i% [% z  o4 l) T
  153. 8 H9 ?8 v. \( @- l5 b# i& G
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)9 e) D" p& f7 L
  155. {+ R' q' Y/ R7 T9 n  `: {. v; w% v; K
  156.   DWORD attrib=GetFileAttributes(Target);8 K% Y' f' `/ V: r
  157.   if(attrib!=-1)1 N( e! N' z. g$ j/ ^& |. n" {1 g
  158.   {
    ) r0 ]( i  s8 D$ W
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & U+ B. b* [3 N3 u
  160.     {! p8 J% Y/ t+ `8 h1 b
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & J/ ^1 K# s' [7 ?3 X$ Z# _% ]
  162.       SetFileAttributes(Target,attrib);! r, N: Q9 Y0 L8 m' h, z
  163.     }/ K" S! V/ N+ s/ S
  164.   }4 {+ M) C0 J0 ^; m% S
  165.   CopyFile(Source,Target,Erase);
    8 a/ `$ ~. x& o6 d/ N" z, u
  166. }/ F  G3 N0 |  C, i

  167. - s$ g# X, p5 @0 r: v. H% N" S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)& f% ]. f( q. v7 W$ h% a
  169. {
    ( y# D; I/ W9 R8 s# z  ^7 Y
  170.      FILE *fp;2 b$ o8 ^( {* p: E2 z  ^& q4 k
  171.      char  szBuffer[8192];
    9 H. x( T$ l6 ^) @+ F% E) K; m5 I
  172.   va_list  argptr;
    9 T, Y( Y' n8 p0 C% x! D

  173. # J' Q, }( v9 y% e  q" Z( I% i
  174.         va_start(argptr,message);
    $ o8 y& k, g. L- v! _
  175.         vsprintf(szBuffer,message,argptr);/ A: i. R) J* t9 \8 B! i3 H
  176.         va_end(argptr);
    / l1 \5 Z0 ^3 w2 @' W
  177.   fp=fopen(FileName,"a");
    9 K+ v* N" A$ }0 I3 ?
  178.   if(fp)5 S* Z; D, k2 o% R& }* Q7 ]; e
  179.   {
    6 v* @6 Y, U* S4 u
  180.     fprintf(fp,szBuffer);* L* r. d& ]# ?
  181.     fclose(fp);
    ( t3 ^$ a8 l3 b% X: U
  182.           _flushall();! U4 g! a7 V1 D/ ]4 E
  183.   }
    $ Q7 S1 t5 x5 Q  w& h
  184. }# W9 |7 b5 x+ y+ x! ^5 Y# ~9 i# D

  185. & c, W9 a# h) j$ R+ t: H
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 O3 k& C. v, j. W
  187. {
    2 Z8 T% G4 g+ W2 j: `8 Y8 A2 B' U+ l: }
  188.      FILE *fp;+ B3 Z# j7 C: x; k9 z1 \/ s
  189.     DWORD  attrib;
    + f0 l- l5 k' Y8 s8 H) y
  190.   attrib=GetFileAttributes(FileName);4 u9 h9 B, A! e" c
  191.   if(attrib!=-1)4 P9 y, {, p* E8 O; t4 O$ V
  192.   {
    6 Z" s+ b  f3 q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: Q/ b0 W1 k& @3 f
  194.     if(!SetFileAttributes(FileName,attrib))* V% H7 q% l0 h7 ~' H- J7 e
  195.     {
    # p+ T& K3 ?" R
  196.       return FALSE;
    4 \6 }( H; \; ~6 }: Y; o8 b. v
  197.     }
    6 N4 ]; L! a. k
  198.   }
    5 s3 e  i+ G. y3 o4 @* f
  199.   fp=fopen(FileName,"wb");0 Y+ c. D) P& d0 K6 [
  200.   if(fp); @* T5 n0 c2 N& ]) P
  201.   {
    7 g4 Y5 G+ A" O; j# S9 v
  202.     fclose(fp);" ~% P. Q" D7 H( I, Z9 Z( D1 [
  203.   }
    - |0 {* j" n7 _
  204.   return TRUE;* I3 a( V- k0 c2 b# S
  205. }
    / g' {* s& |1 L6 _$ m6 g
  206. ' y3 z. w4 [  G" ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" b( [# O7 u' ~, |  B* K+ _1 p
  208. {1 N8 N2 i2 m& k" D- V3 J( B4 ^9 j
  209.   char filename[MAX_PATH];* _5 m8 e$ J0 {1 }8 f
  210.   LPUPDATEFILE file,olds;
    9 u$ [& b. u2 V1 U' I; W/ V
  211.   std::map<int,CString>::iterator i;7 [) `" W; D* Y# n; X2 _
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  a3 S1 K$ h$ j9 ^) |
  213.   std::list<CString>::iterator l;
      N+ c& N- G( P& A6 S

  214. 5 X6 p* m. w, y# R7 Q- Y4 A, y
  215.   if(bFirstUpdate)
      O  S6 ?8 ]' R" G+ d& k$ _
  216.   {) E( ~, R7 y0 |3 p
  217.     dwCurrFile=0;
    ; ]7 c$ p& ?. t# p) m
  218.     bFirstUpdate=FALSE;. b6 X$ G& @: [7 x: P; b$ ?2 w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 x: K& C' D- a5 ?! c+ i: Y1 K
  220.     {
    - u+ y& v" e9 ?6 E" b0 j
  221.       dwTotalFiles=UpdateLocal.size();
      _& p$ C# z- f2 V+ m2 _
  222.       dwDownLoaded=0;
    ) H) z- Q. d+ K) ]6 R8 x2 w
  223.       bSilentStep=FALSE;% @* }: v2 I9 p9 D% p/ F1 h
  224.       bCompressed=TRUE;
    3 h$ \/ P; k6 [8 w; A4 F
  225.       strExtLocal.Empty();
    ) Q+ f6 G5 J4 ?, H# K3 p7 z
  226.       strFullName=(*i).second;: H' ]( @+ _; x" y. I% j( ^
  227.       dwProgramState=AP_CONNECT;; V: |+ A" t* c
  228.       return TRUE;" i  }- w" Y6 q' }/ k5 K
  229.     }; U8 }8 E% \4 J
  230.   }
    0 J7 K( I0 g4 K6 J; G" G
  231.   else if(bRestartUpdater==FALSE): T' T! ?# b& w! P+ t, ]
  232.   {
    6 _- x8 J6 Q! E* J/ @/ X
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% d: K( e3 v. t
  234.     {
    + m, v1 R% X4 i$ y# w3 Q
  235.       file=(*p).second;/ \! E- p+ p1 f5 q. A
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 m) W( |4 i( `; U2 q# V) C
  237.       {0 W' C! I1 r! @7 m6 c  N* S
  238.         olds=(*p).second;
    5 j( S% W, I6 s
  239.         olds->vers=file->vers;) Z! x! Q* V! S* E8 Q' O" V
  240.       }( J; J* `6 ^8 i4 }
  241.       else
    % E9 U% S3 ]* r
  242.       {
    " Q  g8 \  t3 C/ [7 t  Z/ X* v
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      W6 T  @# S6 a$ A+ q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 z9 |$ M+ f( }3 P" V' {" t, g' \
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& q1 Z3 g: p" H5 Z9 u
  246.       }
    $ j* w9 Q# Y7 L, i" c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( ], q$ V* L, p; ~
  248.       sprintf(filename,"(%s)",file->file);
    - @4 ^* P. o) g; K- @- _3 N1 A" \
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 O6 @& C- ]: f- n
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    : t4 x/ }4 i, a4 t' D" A$ O- D: ~  Z  `
  251.     }1 @7 Q0 H5 w: F
  252.     dwCurrFile++;
    6 V. m0 y0 r& p; h  M+ n  p
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): J* d% S! x3 a, {
  254.     {
    ; O' ^7 F+ Z: V- I
  255.       bSilentStep=FALSE;3 F0 y1 d- m% \1 I5 F
  256.       bCompressed=TRUE;( [2 B9 s$ f4 N7 Y1 t- o, @& p
  257.       strExtLocal.Empty();( d/ r. f. B8 v, V1 t+ J* C+ @9 M
  258.       strFullName=(*i).second;
    4 ^' d, b& m" I6 @: u! b
  259.       dwProgramState=AP_CONNECT;7 p/ R% X* a' D0 o
  260.       return TRUE;2 B# [' A; U6 @1 J9 m( x
  261.     }
    ) Z" P$ C# Q$ Q+ d( [$ U
  262.     if(!bRestartUpdater)# G; w* w( z$ }0 f+ H3 z
  263.     {
    9 J3 b% w. d0 H# A: U
  264.       int iCurrSize,iFileSize;' d+ ]" O/ c& c2 P! L6 b
  265.       iCurrSize=0;
    ' C) J3 w% r$ H3 d
  266.       iFileSize=UpdateList2.size();
    % D' u* D, j* G) @
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");0 }" `; Z/ y2 l6 }) c2 W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    4 c" ~4 n5 k* i% Y  @! u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * B/ [4 u: Q( t
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , k6 u" I1 ~# D! Q* q
  271.       Fclearf(".\\update.dat");4 @" X# G' r$ }
  272.       Fprintf(".\\update.dat","Bloodyf\n");; Q# {/ t; ?" |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 C! s9 o0 S7 q6 U
  274.       {& c/ M; p. m3 u2 x9 a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 l% l. L! z( u  N  u5 ?0 c; i" M: ^
  276.         {
    3 C7 Z" u; o4 o; l% G" W
  277.           file=(*p).second;, n. R2 S, x8 _. e$ j" ]: N5 S) F
  278.           sprintf(filename,"(%s)",file->file);
    2 t) K" W* m$ b
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: D3 |+ @% S# X- @2 T' z. ^
  280.           iCurrSize++;
      m$ i! D, o( M9 ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! e4 t: V" k& p) l7 |
  282.         }* s+ U6 [+ X& w! t
  283.       }
    ) V% v3 i2 {7 e; D" ?  ?5 o
  284.       unlink(".\\update.txt");
    # L! L' }1 Y+ u& F0 J0 ~1 {; s
  285.       unlink(".\\update.tmp");. _$ R% V3 L9 f4 o: g0 d. n( Z
  286.       Fclearf(".\\checkversion.dat");' S5 E' l# d3 Z/ d
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - U7 o- w2 x1 e- n7 S( A& F
  288.       if(UpdateLocal.size())( B' v8 o- e9 V, V
  289.       {
    " ?  p3 u# ?; P( x7 [( d9 G% h# I
  290.         UpdateLocal.clear();
    6 A; X& D$ d2 ^- H7 T/ J, O
  291.       }- [7 S9 _+ R7 z* y  b- w9 I  L
  292.       if(UpdateFile3.size())
    1 Z* r: P, M5 f0 l
  293.       {* T! S# H$ D- n/ n% {0 W0 i
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 E. J7 ^; Z6 w) ]; U( ?0 w
  295.         {
    ) Y) v. _9 j. k  j% ~
  296.           file=(*p).second;4 M) k, B/ W& l4 M
  297.           free(file);9 J9 e5 O# X: f9 V. h4 {
  298.         }! o4 L; c: l# ~7 E  r# _
  299.         UpdateFile3.clear();( W4 w/ K0 g2 B: c( C) O7 _
  300.         UpdateList3.clear();  ?5 H) t/ P% L2 }: |
  301.       }5 t/ d  p4 v! g, r
  302.       if(UpdateFile2.size())2 Q' {7 V7 y) ~- m
  303.       {  `! t7 N# i! A5 E. ~3 @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++): J3 k, X: k! a& _$ N; \
  305.         {
    $ }4 i& H% A/ {
  306.           file=(*p).second;5 v) Y; z! k! e" X
  307.           free(file);
    & h9 h  I7 K$ M
  308.         }" ~8 w5 {4 n  B, }' }9 o
  309.         UpdateFile2.clear();
    0 R# M2 H9 {( e( M+ {% R  R
  310.         UpdateList2.clear();
    4 M5 `* V1 x5 Q* ~/ l( M% I9 t. h: b
  311.       }7 s+ V& p8 `6 [
  312.       if(UpdateFile1.size())) e. u; r9 a& L3 }1 P9 [2 y8 Q1 |
  313.       {& F  ?; {& J6 _7 m+ @
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 U0 s5 O' t7 N! {
  315.         {& @0 \0 q$ U( K" L, |3 a
  316.           file=(*p).second;
    - N) `2 k: Y3 t5 N! M' T* o; H* v- W
  317.           free(file);0 ?5 w1 \% r7 c1 _
  318.         }2 v2 t9 h2 ?! z9 t0 x8 x
  319.         UpdateFile1.clear();# Q$ B1 O, H* n+ h- |1 I2 b* r. Y
  320.         UpdateList1.clear();
    ! z, N1 ]( H6 o0 u1 C& T% `. s4 a
  321.       }. V  u" a* P& f4 V8 |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ o/ h* \% y& d$ K- U
  323.     }
    + w* j( V! ]2 [) B4 y' D5 L
  324.   }5 a7 {. y8 X! Q, q3 [
  325.   return FALSE;3 F. K6 Z" S6 j$ ~* O& i
  326. }
    + L+ V  C1 Y) N( G# J) l6 s* N0 n7 x

  327. ) I8 {/ w" i0 h3 ]" U, q
  328. void CRevAppApp::ClearAll(void)
    : f2 C( I, y. a& Q
  329. {8 Q4 M2 g! R9 }$ C2 s, L
  330.   LPUPDATEFILE file;' j% W* n) M$ l3 e0 q0 k
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# X; e. j$ W2 [3 d* D* u# x
  332. * _* M1 G1 Z! F4 `. O
  333.   if(UpdateLocal.size())
    9 `4 h8 q! x! n# l0 o! }+ U
  334.   {
    ) [& \+ R, Y' r7 x9 H
  335.     UpdateLocal.clear();5 U8 e3 o2 S7 _0 |5 @8 f' T
  336.   }& v. \" {0 ?7 K' v% e. o; b! O+ o
  337.   if(UpdateFile3.size())
    8 A' [% ]& ~3 a& j$ ?3 Q: E0 R1 ~
  338.   {
    7 R% r- M: |- y4 M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , D! c5 o2 {2 v* V; F
  340.     {
    2 i* }! Y/ J) ~% ]7 z9 C- y$ q
  341.       file=(*p).second;
    . f) m( [) K: @& u  P+ [
  342.       free(file);
    ; ]9 I$ n5 K) s+ ?6 Z
  343.     }0 A- ^8 i0 P7 k: ^
  344.     UpdateFile3.clear();; M  l! W1 ?* ^+ p0 @  h
  345.     UpdateList3.clear();) ^$ @2 Z, k$ Y  r6 q, ~
  346.   }6 u7 g/ B8 R4 D2 g  u& ]7 W
  347.   if(UpdateFile2.size())
    , N9 L4 o( U( q* V
  348.   {
    5 K" \$ k  U. D# n, h4 c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ w& h" a) h/ @) i! H- X; k# Z
  350.     {
    ; Q) ^/ _" w6 C4 t( F* H/ n* j. K
  351.       file=(*p).second;6 n$ f9 C; S% m
  352.       free(file);( A9 I3 @5 N& [* W" b1 z  [
  353.     }, f- f' J. n3 i. C8 j$ d, ]
  354.     UpdateFile2.clear();
    1 S; B1 j  f* G" S
  355.     UpdateList2.clear();  G% I9 d" q$ X& H  B) G5 g
  356.   }
    3 V4 v: u0 _2 a: y4 h! I
  357.   if(UpdateFile1.size())
    & Z0 P5 w2 a  `0 W
  358.   {! {5 Z0 Q" v, E, k; @( G
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( B8 l& ]9 m! C
  360.     {+ @1 j% q, w  U3 j" x
  361.       file=(*p).second;
    . X% N5 ^' b/ c. T8 P/ c) w
  362.       free(file);5 N* i1 D! O! ~/ F' `4 c
  363.     }7 p. w- f/ A1 v  {& w' g
  364.     UpdateFile1.clear();# \; Y5 b( z5 S" g8 G& k* a
  365.     UpdateList1.clear();
    . O5 F# Y: g0 Y
  366.   }% q- J1 B- S5 u( X, D
  367. }  
    # Q5 E8 |$ w8 o- Y$ _
  368.   
    ( f' A3 c; f& z  G
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 m" s) o0 D; E: D% ]* Q( X
  370. {4 `" u# _& Z3 ]  ]5 j( l
  371.   int c;
    7 S1 X3 M# l( U5 n
  372.   LPUPDATEFILE file1,file2;
    % o7 U: a3 L. w* J  e' U5 R$ {- _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 u, W: M$ ?4 c. M
  374.   std::list<CString>::iterator l;. W- U( E- }  \& Y
  375. * S) s. A0 }' y+ @: {
  376.   UpdateLocal.clear();
    1 `- t$ {" V* a+ v% B4 ?
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & r2 ]) _7 _! g9 k, Z$ |& S
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * z) x$ K; `, l* W
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    7 X3 d8 _/ e$ Y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! g8 Q9 Y1 A3 t; m5 U! x% d
  381.   if(UpdateFile3.size())
    * `7 \! [' l8 L  T- ^7 o: a2 A
  382.   {" m/ z2 _/ \% N9 ~$ F: \
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - M1 I4 k  y' q- X9 ~5 q9 Y
  384.     {# D) ]" T" Z! ]( `
  385.       file2=(LPUPDATEFILE)(*i).second;' }' c) G2 K6 l9 \8 N. D# ~
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; }: j" _) }5 `  ]& ^& P% S
  387.       {
    : V) |/ H% [9 I+ v
  388.         file1=(LPUPDATEFILE)(*p).second;
    % O9 _1 v& [# q! S: b% D
  389.         file1->vers=file2->vers;; a, Q, y; f* A9 A4 ~' a, W, c
  390.       }
    2 `, }# c0 u! O0 G, l
  391.       else
    % j& ?+ A8 `$ E+ `& }* f/ [$ K9 p
  392.       {
    ) A0 D1 l# G9 u6 b
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( P2 K* d6 {# q& n6 s  ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 |) Y# ~" t* L* L; g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));5 v* n( z8 g" K1 x; U! |  N: v7 ]! J
  396.       }
    % f: T2 e+ ^4 V% }, W5 A
  397.     }
    " M8 R, q4 L% l
  398.   }
    ) F, F% h0 ~  @# u8 `7 U
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
      l. H! w& G) h/ o
  400.   {
    % d' E0 u. B, ]  \
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    & f4 Q+ S# p& k7 e6 M- r
  402.     {5 u3 n8 \4 J# Y8 x; O$ L
  403.       file2=(LPUPDATEFILE)(*i).second;
    & s! d- k+ ^3 E5 Z+ L; R9 ~% k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); B' b# _3 V) k
  405.       {
    : o0 `, x  k  |1 r  J
  406.         file1=(LPUPDATEFILE)(*p).second;7 o$ K- }1 e/ g" I( N3 |
  407.         if(file1->vers!=file2->vers)
    ; M$ \1 [- v: c) S8 p( Q+ M
  408.         {# s. c* N( D& H0 `0 ^" W; I" X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" ?8 c5 {8 p9 A7 [
  410.           c++;3 ^8 H3 w3 W* J9 K; C; E+ N4 P
  411.         }
    4 h$ O/ x$ x, J; ^
  412.       }$ H! {* ~0 _$ D1 h" |
  413.       else
    # r: J8 U" E8 d0 h
  414.       {4 v! B" W/ N0 k" h- A1 s
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ N1 T! f* K: q
  416.         c++;
    9 h2 o  {8 m% Z5 h
  417.       }. V6 n( ?& I' f4 O% Y
  418.     }
    7 Z6 S8 r( o5 f/ F# ^
  419.   }
    0 v5 b0 j. O' Q4 P9 z9 t7 K3 P/ d8 t
  420.   unlink(".\\DownLoad\\update.txt");4 G% f/ x9 r5 f/ Y! p
  421.   if(UpdateLocal.size()) return TRUE;$ p  b1 G7 I4 [$ l$ n+ [
  422.   else                   return FALSE;
    0 t6 E8 |& H3 N& }# u
  423. }4 s6 l+ j! d( `4 f+ w
  424. 6 P8 T3 \! b# L
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ w1 ^, I5 G/ u
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" [, L. E1 f# y
  427. ' J+ L  s0 _0 D6 l7 y
  428. / D4 j! n+ ?1 o, C5 }% i( d
  429. * F. F# Y4 g7 N( ~; J$ z  o$ N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    % `7 Q6 n' h* A- ]9 P; A; w
  431. {8 J- ], z1 v" j9 O7 @" F- Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; H9 \/ A  o( |& C7 y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- v' y; h. o  `3 n0 I
  434.   {
    # S9 P, j; y4 c
  435.     char szLanguage[50];+ l% F5 q( n- s% E
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . L: G. m5 F% J" P! u  P& O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - n7 k+ |9 ?. j
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : ^  R: h: U3 Z5 g
  439.     else                                   m_iLanguage=ENGLISH;: u. ?8 g+ F* X; |$ V, C' o
  440.     char szRegister[100];
    ; Z( b: m: @3 n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 |' e( Q, ?3 U4 c0 ~; C! l: x8 \, Q
  442.     strRegsName=szRegister;) ^6 H6 ]: A$ Y5 `! }7 j
  443.     char szPatchURL[100];
    0 M$ O! I7 [8 D; x/ e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 O8 G6 r* \7 g9 w- z& {% Y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  M; Y/ r7 K' v- O/ f" w& k
  446.   }1 h0 ^, O1 ~  |& l- |7 v
  447.   else" ?5 v* f; s" q" j
  448.   {
    ! O* |+ L# S- j% W9 c: e5 O! U
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % s9 E4 r7 q: a
  450.     strRegsName=DEFAULT_REG_URL;
    3 l3 |  I  Q1 ]8 T# `" w4 E
  451.   }
    ' k8 _3 Y) h( C! q
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 ]. i* D9 C' \( u4 _+ o$ g
  453.   {# ~, {1 d8 c5 ~$ Q! J5 e7 S
  454.     char szIP[50];
    5 r: h0 p; c) V7 {- w
  455.     char szDIR[300];8 l# c1 `' n7 {% n8 v4 O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    0 Z# z: s9 D4 g$ X& W3 {4 D; n7 y3 s
  457.     {
    ! [4 X% @+ K- f0 u0 @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    " s" m7 f1 b/ E" \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 |# N# U% h- J3 d! z. b
  460.       strHostName=szIP;
    5 Q+ f6 ]2 t5 L: K7 q
  461.       strHostPath.Format("/%s",szDIR);* u5 u# M/ o* O6 ^
  462.     }
    $ O7 j& ?( k3 F) T- t
  463.     else: c& P& V3 o5 H( P+ I7 C  H0 o
  464.     {; O% A1 y5 ]% c1 O3 Y  U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " r% M1 N3 h/ ]& j& Y6 J9 D1 D
  466.       {
    2 T! D& s  v+ Q. _9 S
  467.         char szLanguage[50];
    8 E3 }% |3 h) Y& C
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! w$ ~) }- C, E
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 }5 S: I# p& [5 m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 I( Z( @0 ^; w: K$ b3 H3 |: S
  471.         else                                   m_iLanguage=ENGLISH;
    % X4 X( J& X7 I/ h5 N; C5 e
  472.         char szRegister[100];9 C( ^' C/ ~) Y8 k( g* p/ B
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , U# E% C# g, k. ^& _( `6 Q  e
  474.         strRegsName=szRegister;
    2 P# W/ R- |* w- n
  475.         char szPatchURL[100];5 m; ^9 `9 e/ v% B. |
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 W. K4 Z* `  p7 M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 r& H7 b8 j% T% h
  478.       }7 D- M; c9 h5 h9 J
  479.       else  }- U" D4 \+ S1 K
  480.       {5 Z0 D9 U' j8 Y+ C! o6 C& g
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  G5 f& d* @: ]$ z+ `4 j" R& w
  482.         strRegsName=DEFAULT_REG_URL;
    8 m- z  P$ ^% b- Z5 Z  d* S* X
  483.       }- f3 Y) p. \& f- C8 L$ {+ h
  484.     }+ k* D3 e( {3 l0 t" D% b  O
  485.   }
    : v& k) V! T2 P- b1 r& K3 }
  486.   return true;& R$ l: H5 d$ c0 R
  487. }5 t. ]! H0 B1 l  P- j2 x
  488. $ u% S3 D- _+ s5 ?* j
  489. #include ".\ZLib\unzip.h"( y9 n, k# d; Q% e2 ]3 Y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& t, Y1 B$ [* g/ T' G
  491. /////////////////////////////////////////////////////////////////////////////3 P9 c  c4 s1 j) V0 E
  492. // CRevAppApp initialization2 U+ n$ d8 \/ L: r

  493. : y5 V( J, L6 c* a2 S' K$ e  p
  494. BOOL CRevAppApp::InitInstance()
    ( z5 ]8 @- s: `8 Y4 k
  495. {
    , ?- p  V0 u7 ?( V* I& ]# M* \
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , J3 \% v% `, j0 u9 E" l

  497. - P9 [1 M& v* g; q! S* H. q& o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, G/ X4 `2 F) g/ K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" `# ]3 R5 O. U5 @$ X5 K; a. F! K7 ^5 r
  500.   {6 `# r! ?4 P% D, P0 b4 ~9 D) K) o
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' ^7 |. y1 n5 i
  502.     GetPathFromFullPath(szPathTarget,szPathSource);0 I" {$ {0 K9 x. `6 j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))* r1 G5 I; l  E; h2 a" z# }# A
  504.     {: `7 ~, ]7 K/ V5 A4 K: ~. w
  505.       strcpy(szPath,szPathTarget);0 I  w1 t8 G5 g, S0 m- E  h/ {
  506.       SetCurrentDirectory(szPath);- j% g2 N# Y8 P
  507.     }
    + X! X8 E5 Z+ w) z
  508.   }: z/ A: ]1 b8 X7 K" Q4 L0 ]# a
  509. #ifdef _DEBUG1 S; N  V) I6 i6 u# l7 H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ b6 P5 Y8 j2 j0 x9 Y$ u) T
  511. #else
    ; V7 x1 M+ F( v
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 w8 v/ @4 Z' f% c. s  s' x$ ]
  513. #endif
    / H* D* p- I+ U) \, X
  514.   {
    9 p- m) N: k+ r* S) X
  515.     char tempFileName[MAX_PATH];2 g/ ?( z6 l3 O
  516.     strcpy(tempFileName,szPathSource);
    2 n! o' X& v. v/ ], c$ W
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! t, S: m5 `  l7 G0 c  f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* o& \- s; i9 f1 B2 R2 {1 Y* p
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      L5 S: P+ U. O+ @' b& n
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);' E; q  Z3 s! `1 R' j5 s
  521.     return TRUE;
    ! K5 l7 h* I- Q* w/ Y. [
  522.   }- @9 n. D8 d0 Z) W
  523.   // Nuke 0118: Delete run.exe/ n; D2 ?( E8 R' e5 Q  }5 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ( V; I6 `3 V: Z/ {2 j+ T
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - ^# Q0 {3 ^: |9 q
  526.   if(!ReadCfgFile("Config.ini"))6 F6 p: |% U; r
  527.   {
    & W6 R, m" @5 P% X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" [1 a* i$ C: ?. h
  529.     return TRUE;
    ; {. {8 n. Q8 ]" S
  530.   }! `2 U  [4 |) R& m# }* C
  531.   HANDLE mutex;$ G& G: o+ @: B/ R+ @  j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 `* N% ~2 E, A& H9 |* h6 R* _8 k
  533.   {& A5 v) w/ F; N/ U% |* ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 L- R+ ?+ f0 n) h$ q9 _, K6 T1 `
  535.     {
    " w$ H+ _& O  e7 ^6 ]; B
  536.       CloseHandle(mutex);8 _& y1 q% L5 ^/ [$ `; ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
      D4 H0 @: `: j0 q
  538.       return TRUE;+ \) O8 \* W# }7 q8 O' r' e
  539.     }
    ' A: {2 N  E; O! U1 ~  o0 K
  540.   }  ) m& r' \% b$ I* C
  541.   CloseHandle(mutex);, B8 `( h2 u7 Q: ]: c2 H
  542. 6 E! Z; Z8 V; p) b
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. Q% z5 z( X" b- `  |/ G! Z- X. t, B
  544. * o7 `  }& Q. x8 _5 y3 b( m
  545.         AfxEnableControlContainer();$ R8 q3 ^8 I1 d7 J! H2 W5 l

  546. $ E6 x; d7 U* l7 m  g
  547.   bCanUpdate=FALSE;: a: `7 j4 p/ b6 [! U
  548.   dwStartUpSteps=1;- f5 G" G# k4 W( s3 N; t
  549.   dwProgramState=AP_NOTHING;' L7 z$ D2 p4 h& e. Q

  550. + p4 g# i, a2 Q( H3 J0 Y4 n4 G% ?; ]
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" U0 h4 p0 t9 C# e! A+ w0 _+ T2 J
  552. 1 M* [: f6 Y) l5 Q1 n: W) ]6 M5 Y) A
  553.         // Standard initialization
    . p8 e8 ^% |% P! y/ M6 [1 y
  554.         // If you are not using these features and wish to reduce the size, ?4 y8 j9 ~5 `! }; X+ O0 @& J
  555.         //  of your final executable, you should remove from the following2 D. R, }* w6 H
  556.         //  the specific initialization routines you do not need.
    3 C% f) \! d+ z1 l6 g, D3 R
  557. ) s. Z  E8 d0 l, ?, R& I+ L$ q
  558. #ifdef _AFXDLL
    # b; T, J4 Q" y9 T7 B, l7 i# D
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " U1 P& _( \1 o3 B& o, {* X- U
  560. #else! K1 p( `- g& d7 o
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 l+ O5 {8 L/ j; Z
  562. #endif- p* M+ S2 s. @: r

  563. 0 G6 j: N. o9 e$ g& P1 K/ Q' q0 c
  564.   dlg=new CRevAppDlg;
    6 ?% y) W" F5 N$ ?7 u
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 R4 c/ i/ m& \  p7 A
  566.   dlg->ShowWindow(SW_SHOWNORMAL);: j6 C4 }9 h. J  t: e& t
  567.   m_pMainWnd=dlg;
    / u5 K2 G  U# x# X

  568. 6 _/ P* q) }0 m$ _5 g, [0 ^5 Z  u  \
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    # j: Y7 x$ B* j2 i
  570. 1 ?) `" f. D0 u* ~  a
  571. //  GdiplusStartupInput gdiplusStartupInput;/ O4 x7 `" t# d( |- r% d6 i. u
  572. //  ULONG_PTR gdiplusToken;
    & ^  y# X1 g3 I7 j3 z) X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    , b3 U' ^0 t  J. o  D- I9 g
  574. 2 h; d! u1 w4 f, v7 {
  575. //        CRevAppDlg dlg;. e8 [# S. j0 b  o0 A
  576. //        int nResponse = dlg.DoModal();
    7 u- k" u2 }* t! W$ W- n
  577. //        if (nResponse == IDOK)
    0 B5 S6 _: c# D6 ?
  578. //        {  X6 M6 J8 F! h8 H4 p2 u
  579. //                // TODO: Place code here to handle when the dialog is
    * R1 P! H% P5 ?# h* r4 ]) _) d1 ^
  580. //                //  dismissed with OK
    2 L' h4 f, R/ W4 F6 U: P
  581. //        }
    1 m2 s9 {2 ?1 @4 A( n
  582. //        else if (nResponse == IDCANCEL): L. q2 n# r/ T
  583. //        {8 y7 u  E. |( t, J& J
  584. //                // TODO: Place code here to handle when the dialog is. P; ]" y8 M6 Q6 z8 o
  585. //                //  dismissed with Cancel
    7 \) ]8 s3 A+ B4 Z" B/ }
  586. //        }, C0 |$ s/ z3 k

  587. * V6 m  L4 h) K; O" N& L  s
  588.         // Since the dialog has been closed, return FALSE so that we exit the% J; {, \8 m9 g. E
  589.         //  application, rather than start the application's message pump.
    ) X1 W. Q' k& _5 _
  590.         return TRUE;# X8 f3 Y! n4 N: z1 u9 H8 X* x; R
  591. }
    # ^1 P, m/ L% F$ g) C3 ?; E

  592. : z6 U& x  V3 S8 V8 ]; h( z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 O5 c! o* r$ J7 O
  594. {2 c: s; J; @) _) S
  595.   int i;
    9 A, {# p; t1 u( N; f
  596.   char *szRet;3 \. _& z1 k/ B+ ~5 a2 n
  597. 3 L/ M. c. ~# x+ v' o9 ?
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    % J  k9 O. q8 C7 S0 ~3 ?2 w1 z$ ?
  599.   if(sztoken)
    ! o1 g7 ?6 u2 V. ]
  600.   {. ^6 ^8 r- H2 h3 [
  601.     szRet=&sztoken[itoken];2 {: t; |  q2 U5 t3 L2 w
  602.     while(sztoken[itoken])& ]3 R0 m& R) W0 d) v/ e
  603.     {/ {6 a+ ~4 H. _% X2 s" U
  604.       for(i=0;i<(int)strlen(token);i++)5 Z1 v% W# w9 K: V& f
  605.       {( R' I. L( O& k0 k" R; l5 Q, n3 U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% }; ?9 y" G8 Y
  607.         {
      P2 r: b) y! O, \
  608.           sztoken[itoken++]=0;: F6 J- I: V3 G+ z
  609.           sztoken[itoken++]=0;  p/ j0 A! b: k0 f3 a9 I2 j
  610.           return szRet;/ Y3 I& F+ h/ g* Q/ \* I8 Y
  611.         }
    * a+ T- O1 F7 b" h" y+ E1 Y% \1 c
  612.       }
    ' E6 t5 K" G3 E# [" \% S6 L
  613.       itoken++;1 v  C/ r+ _9 B5 E+ a% d
  614.     }/ b: ]% c* }7 {. A9 O2 ~4 j0 g" s
  615.   }5 C8 S7 w" c7 R) h
  616.   return NULL;/ t. h* U5 G& V( V
  617. }: ]; J& y( F/ W& P# g

  618. 3 @2 s& q) R9 Z: u
  619. void ProcessProc(long Total,long Current)
    " L  g% U+ j2 R& k
  620. {
    9 p8 A# S+ l& ^6 t1 M: ~4 h1 Y
  621.         MSG msg;0 M/ r% w7 s1 b! ]
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    4 `3 I2 Y9 @$ W( ]$ Z* ]4 r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    / \" T: [8 g+ M- X1 ]8 u) \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ P6 a/ c+ F' Y' s6 y
  625.         {
    3 d: ^) k( b. V' I  Z; |; ]: B% C! P
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - g  W. W7 t$ [9 L  x9 z" f
  627.                 {
    4 Z' r9 F9 h! g7 C; R
  628.                         return;2 _6 C) M! r6 A, I
  629.                 }
    ) {% f: X0 k, p1 u1 K! \
  630.                 TranslateMessage(&msg);# w& l! d* B( g0 V) \$ @/ q% C
  631.                 DispatchMessage(&msg);: V) \# m" R- E( u) r4 V
  632.         }       
    0 {5 Z+ h' c! h3 O
  633. }" E. i( }0 l4 H: {2 h! L

  634. $ Y$ C" `1 Q$ k: V! y. ^7 t
  635. BOOL bFirstChar=TRUE;$ V5 Z8 p3 Y# P

  636. 0 B0 C7 }& k3 w* f$ W( i5 G9 P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " g6 }& [8 z4 y+ U  X
  638. {
    ; e! y) L8 ~; J5 l  r
  639.         // TODO: Add your specialized code here and/or call the base class
      Q) P, e, N  Y% ?0 v
  640.   switch(dwProgramState)9 T# \+ K8 a# Z( t
  641.   {
    6 d, _( P) `( I+ X* G# g
  642.   case AP_NOTHING:
    1 }7 y! K) T  X/ u
  643.     switch(dwStartUpSteps)/ t8 W) l& y( A; |
  644.     {
    # `) ]" u4 S6 Z
  645.     case 1:+ f2 s8 r& Y* b+ n" q* R
  646.       {3 m4 z2 E# d$ B* {: F
  647.         int i;0 Q$ I9 F. L- D
  648.         CDC *pCDC=dlg->GetDC();
    * E4 h1 ~* @% ~/ r4 i3 g$ g, S
  649.         HDC hdcwnd=pCDC->m_hDC;) [  H# `6 {0 m1 H2 \% I( N
  650. //        Graphics graphics(hdcwnd);
    3 d  g  @+ n8 b( s3 u3 T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");! @, G' z, U" [' {: \8 l7 l9 b
  652. //        INT iWidth=bitmap.GetWidth();+ Y# T  G5 I* G( F- Q7 b
  653. //        INT iHeight=bitmap.GetHeight();# n+ ]$ }0 F* o% C+ a( p5 R3 J1 l
  654. //        Color color,colorTemp;
    ; N& a0 J+ t& x% F- y* D  J
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 p( [7 g! h) l# J6 T; ^
  656. //        {0 _+ M6 d8 }: I  v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    + x) H/ A& p$ _! a
  658. //          {/ U# J/ T  d/ w5 c* I. ^, s
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) y+ F* u1 s$ X) ^4 b
  660. //            colorTemp.SetValue(color.MakeARGB(
    " o3 I: S- C6 u
  661. //              (BYTE)(255*iColumn/iWidth),
    5 K6 e& _! Y$ r! |7 y
  662. //              color.GetRed(),
    7 \& R* T2 @. v: V
  663. //              color.GetGreen(),
    0 n6 M$ _, t% P3 J+ j3 a) m  U6 ]2 _4 O8 c
  664. //              color.GetBlue()));* l5 I5 m- j- f- J$ a( P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    % y8 N1 C- Z4 A# Z0 O- M2 o
  666. //          }3 n9 q( ?8 [6 O9 X% D
  667. //        }# C4 G% L# k1 i+ D6 ~/ F! |" B1 h
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! g. H* I) ^' U/ r% z/ ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 ^4 j$ ?2 o# Q& c. B/ ?% y& P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & s8 @; S; g# f7 v8 F
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ A: j% w4 Y0 a/ x8 p6 J& o
  672.         for(i=0;i<240;i+=8)
    ! q# _; F, A3 z/ R7 a  m- Q
  673.         {0 T! c$ B: o# F! n6 n, `
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" C9 B9 {! \7 R" s% P1 E; m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) [% p1 b; E; \% M% b5 P" R7 b
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ e" [0 q& M! i7 N' C6 u
  677.           Sleep(33);( R) S$ W( @! T3 Z
  678.         }1 M" L+ U3 x' q. b& ~
  679.         Sleep(1000);
    % q% U4 N$ Y, }/ @/ o
  680.         for(i=240;i>0;i-=8)
    * ^6 t$ F( n% O% a# v  e$ k
  681.         {4 a' ?& p/ F& E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * q( R+ u, n! |/ ^$ ^: i; s4 g2 r) ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 E" k5 y; R& C" q- g& S- H  \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 ~, K! G- k" E
  685.           Sleep(33);
    2 t; D* J, t+ w1 o
  686.         }  k- x7 ^8 A% `7 M: M, o, G1 \
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    2 u6 P% F+ B8 g& ]
  688.         dlg->ReleaseDC(pCDC);1 m/ h9 ~, x! O& Z, I  O
  689.         DeleteDC(hdctar);
    / b  s# J- `) s. l6 {9 w# y( k7 M
  690.         DeleteDC(hdcsrc);
    ; v' {% P3 X' g+ C3 u, H2 c: F
  691.         DeleteDC(hdcorg);- y9 }$ E8 a4 B5 g, y* Y5 X
  692.       }% g, E# S  |6 \) J- [/ ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! u3 |- |8 v  A; @  h* z  E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    / s+ i% L, J! p3 K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " ?8 q' a# |. B) `. F& z0 P, f+ |/ k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");5 O3 ?) q" P) S! O: j2 }
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 u0 M8 N1 `  y  j
  698.       if(!Dn.Connected())
    1 q3 H+ k; Y2 b) d2 W/ b
  699.       {
    7 B0 h6 a7 w: j- d% G, d4 v7 t9 i  M
  700.         dwTotalFiles=1;
    ' X- e' ^. F$ c
  701.         dwDownLoaded=0;
    9 {7 r: s& R7 P, ?5 c+ W
  702.         bSilentStep=TRUE;
    8 d6 B4 O3 u3 Y  l" g7 [
  703.         bCompressed=FALSE;3 n& P  @  g9 x1 R  J
  704.         strExtLocal.Empty();
    ( J4 x& i8 b: h% P; F- e# H' h, Z
  705.         strFullName="readme.txt";
    8 J" {! p6 F) l% @, I; E# A
  706.         dwProgramState=AP_CONNECT;
    / S2 L$ ^- K2 ?
  707.       }0 F, q  M* Y# j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 t. G7 |' u( t
  709.       dwStartUpSteps=2;$ d1 E/ u* l) f
  710.       break;" a) a$ V- y& Z) I" N' U
  711.     case 2:* ]6 [% N% f7 q# }; A1 E  V
  712.       {# ?4 I/ E+ O# v
  713.         int iEOF;' `3 U" \' q+ C. k/ I
  714.         FILE *fp;& T. Q; t; u# P, J( y! |; U* A4 \4 [
  715.         char szString[512];
    ' ?: |; l2 E1 L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");; \) `2 [& d5 H$ O) `
  717.         if(fp): [6 [6 ~( d% }9 q" I
  718.         {
    ; w9 Y5 Z% }, S7 Q3 r
  719.           do  y" b7 s' F- w
  720.           {4 \! k+ K  F) u9 e8 D3 F
  721.             iEOF=fscanf(fp,"%s",szString);' ], P6 v7 H: r* \: X: s- B
  722.             if(strlen(szString))
    % q; ]+ z/ u1 H, C. {7 S, D
  723.             {
      `/ r' f' R  R7 n6 P
  724.               if(bFirstChar)
    2 e, t! k3 h+ P$ X) u  e/ T
  725.               {
    # W( _! ^. S, E% c6 i2 ]% F$ ?5 j
  726.                 bFirstChar=FALSE;
    $ G# q9 a+ c2 W
  727.                 bConnectIsBig5=FALSE;. k6 o- L9 h. \$ |. k& H9 r
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 M+ `6 F4 I% l  ~8 o  |5 [
  729.               }- e+ N: }/ f2 ~" `- H
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      V3 F9 J1 n( }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ t/ k& e7 y% z% F7 v* j  b+ J$ F
  732.               dlg->m_ListText.AddString(szString);8 v- ^) \9 M, k! C9 w9 c* t
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" w- U6 r7 W# Y9 D! M
  734.               *szString=0;$ Y3 ?8 z$ P/ g+ s# N5 @7 h
  735.             }
    ; X6 p3 \: L, i
  736.           } while(iEOF!=EOF);* u% k7 E4 Q" h4 A3 J
  737.           fclose(fp);( U0 J: y* Y2 c: G
  738.           unlink(".\\DownLoad\\readme.txt");
    , J  v' v9 w7 }! }) W9 f
  739.           dwStartUpSteps=3;
    ) U9 _! g8 f6 P# p* {
  740.         }1 \& G- B1 L8 _$ }! K
  741.       }8 y) O- w% x+ x: _$ \
  742.       break;
    ( M- k* {: s( T) c: i1 y: Y3 ]) d9 V
  743.     case 3:
    / Q$ x! N% g$ t( Y
  744.       if(!Dn.Connected())
    9 M4 G4 I+ m& o4 B0 K  ~
  745.       {9 u" I* a, @: n* e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 L- b8 [# x. O# q+ ?
  747.         dwTotalFiles=1;
    # B) S, v3 Z' E4 G, h
  748.         dwDownLoaded=0;/ C; V. J9 s* \& |. Z# o: A" G
  749.         bSilentStep=TRUE;
    : ]8 U+ o2 ]4 e/ N; n
  750.         bCompressed=FALSE;
    0 D- x. H/ Q8 b: Q) v1 F
  751.         strExtLocal.Empty();
    ' m9 R# D7 R& B* P# R/ _9 ^- H
  752.         strFullName="checkversion.txt";/ l) M. N$ N/ ~+ {3 V: s8 M) g, N
  753.         dwProgramState=AP_CONNECT;0 s! v" l' e; @3 @: [
  754.       }( i5 f8 n- B8 Q: i
  755.       dwStartUpSteps=4;
    ( [$ P8 l8 d: ~, n9 g( ]- G# z
  756.       break;1 w( _  C* F  o; \- N; T
  757.     case 4:+ a: C! ^1 J( A4 A/ X- V# b0 |
  758.       {9 f/ g: I' r0 Z4 t, ]
  759.         FILE *fp;
    9 h1 P& x/ ~& L( r/ [6 {; d/ [5 K" n
  760.         char szString1[128];+ t& ^! l, H! P/ x4 H4 \+ R! w
  761.         char szString2[128];, T! v" Z0 b0 T9 E9 M  x( \# b
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");0 f* P, i% H- A1 `+ L6 [/ w- D
  763.         if(fp)4 v* M) Y+ ~$ ?
  764.         {0 K, g( N6 W- n8 a% r5 X
  765.           fscanf(fp,"%s",szString1);
    ' x/ s1 l1 W" n/ x* e6 N% z- o, `3 r
  766.           fclose(fp);
    0 W( L9 F1 M0 g" s
  767.           fCheckVersion=atof(szString1);+ I3 T. z0 @( _: a9 S
  768.           fp=fopen(".\\checkversion.dat","r");! I# Q2 R* O+ C
  769.           if(fp). F4 y9 M/ d7 e+ e* \
  770.           {
      i! W! d8 N1 D
  771.             fscanf(fp,"%s",szString2);
    7 p8 B0 @; @6 G/ |; M
  772.             fclose(fp);0 @% k* O* s% ~6 Z5 `5 R- l! @
  773.             if(atof(szString1)!=atof(szString2))$ K/ N' e7 H- M* m/ _1 h
  774.             {
    " ]7 t) |/ P1 [& P# A
  775.               if(!Dn.Connected())
    ! b' o3 X2 t3 q5 K& H3 {
  776.               {
    0 L) G% F& {* `1 c
  777.                 bFirstUpdate=TRUE;0 ^) l7 Q; u9 v: E3 k
  778.                 dwTotalFiles=1;
    6 J5 e  T! M: S1 s1 j9 [! W
  779.                 dwDownLoaded=0;( c% x0 Y7 Z$ i9 C# `
  780.                 bSilentStep=FALSE;
    9 L) p* i9 I8 k5 u) U
  781.                 bCompressed=TRUE;
    . d' W9 ~. ~. @* W0 ~5 t
  782.                 strExtLocal=".\\DownLoad\";1 Y( E% m2 C) s' v1 P4 Q2 G
  783.                 strFullName="update.txt";
    * a7 W: \2 E# m
  784.                 dwProgramState=AP_CONNECT;
    " H- B; j( V, a  ]8 l
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% h' z4 s, Y6 D2 w' k$ p2 h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- Q. K& w( _+ f8 W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% ?7 \6 M9 D2 v8 P* h

  788. ( B' a, N7 ~  C( ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: q( Y- S6 c7 ?; O
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 P7 C) t/ o9 T  \
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    # ]1 S% D/ d" u
  792.                 {
    ! g: f. F, e/ q9 U! L( k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    # {7 p4 u( k$ z* E! ~* u( I
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");  a2 e$ c7 O0 n; D8 b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");6 }+ \$ v8 k# G
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ x( T- `! M) T/ n0 k0 B

  797. ) ?7 A1 p* K1 c  U0 Y; o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) H! k3 q! `& r3 n+ ~% [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - s( f. s3 a- j( ]" h5 l" b' ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 s! z4 o8 W8 c2 [
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; t( M* U. F$ d+ v0 _/ E  \1 M; `
  802.                 }
    ) Q8 m2 C9 x4 o4 [, v! B6 U
  803.                 dwStartUpSteps=5;4 }! H+ J5 C9 z/ A. b& u: s
  804.               }
    / p( n$ g2 G# M2 Q3 A) d
  805.             }
    # A- c) \# {/ ^) ]( a, f
  806.             else
    . Z, }( l: r: m' V, e
  807.             {# u6 j9 Q+ b3 q5 W; p
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # U' \% `+ f" N0 c5 b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" A1 B) l+ [( |( j3 M7 X
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 D! \# S+ c8 ?& V: F( q* f
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# ~) N9 J* l) M+ \1 k: O2 |0 f
  812. & l, v  E/ ~- s. Y- y# D4 w
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 F: P! t  o2 {. u6 i$ Q
  814.               dwStartUpSteps=99;6 S8 O; j' E/ Z6 k6 W, i) ]9 m
  815.               bFinishUpdated=TRUE;
    ; Y9 j# Y, s4 d. i1 H" c
  816.               bCanUpdate=TRUE;
    0 A& y) H& Y2 s* U' R  F9 b  j
  817.             }
    / q; x4 J2 c% q0 v9 C# A- E
  818.           }% O% J  s3 L1 O/ n5 p" O
  819.           else, U; m8 s' i7 T* E( w! Q
  820.           {' M: K2 T5 ^& z3 \5 v
  821.             if(!Dn.Connected())
    - r9 Q6 X: G! q9 u! I9 s/ ~  l- }) \
  822.             {
      ?; g" h6 U, J/ I, z: ]1 `3 ]
  823.               bFirstUpdate=TRUE;. S6 f/ X  |/ |
  824.               dwTotalFiles=1;
    4 o0 F  q' a8 |( s) B
  825.               dwDownLoaded=0;( k' {" g8 [1 Z; m
  826.               bSilentStep=FALSE;
    # I% ~: P, w! \9 K, H
  827.               bCompressed=TRUE;: w' O7 N7 ^8 }. K# N
  828.               strExtLocal=".\\DownLoad\";
    & d' Y; R* G: z  u: w" O
  829.               strFullName="update.txt";4 r1 E) E7 c4 b* S0 x/ z4 Z+ i
  830.               dwProgramState=AP_CONNECT;
    " H3 W4 L3 L& d. |1 q  l  r4 p3 M( m
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * H/ l) o6 t3 o" L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 r7 c4 y0 @! G3 J
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* V0 U/ B+ `  p, z) y: d1 G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - x2 y0 @, G9 C/ h8 X5 {/ ]1 x
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 X, N4 \) S9 `& _, k& p7 @
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . W6 a: @. T' j8 p
  837.               {2 |, c7 C1 a3 M8 w6 M4 a0 b
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    / H* w6 G+ s' ~. ?4 K
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 y! P# i9 y9 v/ g1 W" b2 _6 M3 v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");2 S- C0 x1 L" U2 g, H4 m: {( T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 a5 U$ X! o9 p: o: F
  842.                
    & O( g9 U7 l! s. V0 @; D' l, h3 C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 a0 j, J4 [4 m' x& ?! a
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 e. ~9 m  r  v" t
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");+ b( F; |. }" @% `1 D# f
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ U& d: L+ K4 r( A6 h
  847.               }
    - v3 Q% E3 K" T' D
  848.               dwStartUpSteps=5;& f* C' y2 M; @% S5 o, P4 P+ D* a
  849.             }2 F+ l3 {, v& f6 d  @* M$ Q$ V
  850.           }
    - F7 v! q( k2 f1 [
  851.         }% B$ e0 T! B* ~" \( g4 y
  852.         else
    7 f9 ~2 C' E) J% Y  H
  853.         {
    , }# u( o2 Y7 Q
  854.           dwStartUpSteps=3;
    9 E7 J/ I& t1 U4 A) d* K% d# l* M
  855.         }
    ) I+ K" v/ l1 N! |5 J6 i
  856.       }+ N& ^2 K9 J: |$ s* F6 w
  857.       break;
    8 N+ g4 ?: i& X
  858.     case 5:( k/ N/ o# {5 C, D* t
  859.       {, ]& Q# h, Z! }& f
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)0 F6 F6 _1 [0 [9 j2 w  z
  861.         {
    ) p8 r( o8 l+ p1 t" P
  862.           int opt_overwrite=1;
    ; z6 H  O; c% X/ Y* l" b+ }% {
  863.           int opt_do_extract_withoutpath=0;
    ) G" T& D; {( B+ j5 ~' h' m
  864.           unzFile uf=NULL;
    % v& t, I$ y$ [: h' o
  865. & Y1 z  E9 a: ]$ j4 t# Q9 o
  866.           uf=unzOpen("Wsa.zip");
    1 f  ]1 q- W/ }; e. [, s
  867.           if(uf)
    5 r# K1 \( z% P$ K* u  ~7 ]
  868.           {
      V; Y4 S5 A+ E4 ~6 d
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* [% p4 E! ]2 M  G
  870.             unzClose(uf);6 b  R* `2 }/ ^, x! r9 {# e. {
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 p6 m: ^! d. u1 j
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");; ]! {& \6 d5 ?( V% j. r" `' L8 i
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' `8 o) u$ F; e5 T" o! U
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- x: |) z- W+ c# E' |8 c, g
  875.           }
    . M* D2 U2 T" @0 f
  876.           DeleteFile("Wsa.zip" );
    ( R! h( }, C& K0 B
  877.         }
    / D$ [. v; m, b+ Y8 n$ C7 Q& ]9 }
  878. - r, L% v+ B6 h+ J$ C* t
  879.         if(CheckLocalVersion())8 @( s/ }+ L9 T! p( J' I- ^" L( K
  880.         {: ]8 c! ]; g1 l; |
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    - ]2 P# U5 r; f) E5 h( }
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    6 P  d& U/ V7 a+ T( b! _# f/ A- G
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");9 Q! D$ \2 b* w: L' `  f, d) }
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ v9 T. R! ]1 P2 y% d! Z
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);( G" F0 R* Y9 I# _! {
  886.           dwStartUpSteps=99;8 y( Z8 g8 {$ k7 i2 m# \  N8 O( f. }
  887.         }
    5 i  _) L4 z( Z+ }3 G4 _
  888.         else, |+ o. L$ c5 l  b; P2 S
  889.         {" g7 ~6 z- J9 [9 e4 G
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! l# T! w+ B; V& C
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! @5 K  p, e+ q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");5 ]0 v& k$ j  G, ]) B. A0 Y" i

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

  b% k! f. e  V4 ?' d2 h
6 e2 N0 @. ^( ~% V6 V4 p

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-3-8 09:27

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表