找回密碼
 立即注册

CSUpdate.exe源代码

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

% Z+ ?$ U2 a2 b8 n8 r  }# o6 J! n
  1. / RevApp.cpp : Defines the class behaviors for the application.
    + u; D7 x) ?; s. b
  2. //
    % m: E$ E( E7 W6 _( p! m
  3. . i$ p7 Y2 A1 [
  4. #include "stdafx.h"
    8 s6 X! X9 q" W0 h$ O, K' m
  5. 8 v  S3 e9 o. l) }- I2 s0 F2 m
  6. //#define UNICODE
    ' V9 ?& E. e3 _! _
  7. //#include <gdiplus.h>
    4 U+ N2 x  a$ q4 C
  8. //using namespace Gdiplus;- \" v7 o! z; \

  9. 6 y$ b5 Z- x' U& F( p4 W
  10. #include "RevApp.h"8 F5 `  K& I/ H7 f1 r
  11. #include "RevAppDlg.h"0 }5 ~3 F) e- f" `/ l6 k& @
  12. 1 X: q7 g: V& w$ s/ U; E" r/ H3 l
  13. #pragma warning(disable:4786)
      m+ ~/ |3 U8 C- x5 s
  14. #include <map>
    : [: O& D  Z* \: ]- ?8 F( e
  15. #include <list>
    4 n( }  A/ q* c& I7 E4 b
  16. #include <direct.h>
    * _! z4 E  k4 A* h/ C3 t- s7 X

  17. . _; ?6 U' h0 M( N* |, h
  18. #ifdef _DEBUG  s' e0 R/ v+ x4 {* ?8 k' y; x
  19. #define new DEBUG_NEW9 W' U3 R3 s; ^& U; J1 U- X
  20. #undef THIS_FILE
    5 X7 ]! H4 G1 @5 G
  21. static char THIS_FILE[] = __FILE__;! u; r1 g: \9 w5 {7 L4 J: q
  22. #endif$ {) b# h5 }! z: H
  23. #include "SkinResDef.h"
    ! J3 ]% H( V- D" n
  24. #include "ChangeBG.h"& _" G9 i& g7 \5 g
  25. #include "AFXINET.H") e& p; F7 _  V  q" N, p* T
  26. 0 x) ^& U+ a% Q& V! d9 ~
  27. #define TRADITIONAL_CHINESE 0; I6 d' @9 H# A) M0 \& |$ @
  28. #define SIMPLIFY_CHINESE 1* d" x# O5 e# ]) O. j, r# ?! z
  29. #define ENGLISH 2+ F2 H3 p) s# n
  30. int m_iLanguage = ENGLISH;
    , j8 \2 P# e( U. U! N* }4 V
  31. /////////////////////////////////////////////////////////////////////////////; J7 ]& b% E( \/ g8 }9 `
  32. // CRevAppApp
      A8 b8 g+ ^4 @: R1 w
  33. 1 C- Q- w% T! k: q' ], H9 V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / X( i1 ^3 s$ c) _, n8 u# z
  35.         //{{AFX_MSG_MAP(CRevAppApp)) ]; U* A/ x  S( R% z4 o- h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " i. E( |# h! b! U4 r
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: s+ Y8 O" T  H1 p# P# U3 C
  38.         //}}AFX_MSG8 O/ m) u2 {3 x2 a  {7 R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' w5 \3 [2 g7 Z+ w( f; K
  40. END_MESSAGE_MAP()$ K: q, C2 u: p' P; o

  41. 3 I+ n# S; X+ V" p
  42. /////////////////////////////////////////////////////////////////////////////* t; h( _$ Y1 [2 ^& ~
  43. // CRevAppApp construction
    2 t/ ^8 m0 J% ^- W" G

  44. & K3 L9 t2 j5 d5 ]) v% \+ |
  45. CRevAppApp::CRevAppApp()
    / J: y7 |9 B1 B- M! h
  46. {" `0 L3 \4 O& ]3 O
  47.         // TODO: add construction code here,
      [# O, b7 q" A6 q
  48.         // Place all significant initialization in InitInstance1 n# J6 g3 n: ^0 W; V+ w) f
  49.   bDisplayIsBig5=FALSE;
    : A+ s, h+ ^; y' U
  50.   bRestartUpdater=FALSE;1 n# K1 H7 m! A% w5 _9 h# n5 G! B
  51.   bFinishUpdated=FALSE;0 s/ O8 Y" O% k+ y/ J/ r; U: u
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;1 j8 n9 u! a7 E' r1 U
  53.   InitChangeDataBig52GBKS();
    ' a+ M4 {6 q* A4 c3 {8 ]1 F
  54.   InitChangeDataGBKS2Big5();7 S2 X* Z3 E2 J
  55.         //
    9 w3 _' \. V" W  ^$ W
  56.         bClickRunExe = FALSE;
    3 i/ @+ u: ~/ F; X+ d& V3 W
  57.         //; ?) @- z5 _; S
  58. }% @& N: Z$ \, J5 u2 r6 ^& Z

  59. - f0 i1 u" Q; R% K
  60. CRevAppApp::~CRevAppApp()
    1 i- ~1 B' F( I
  61. {
    + o# U1 v" t( N  }* N* r; I) L: ^
  62.         // TODO: add construction code here,
    ' o8 y7 u/ s& R6 f8 O& Z4 q' H8 ?
  63.         // Place all significant initialization in InitInstance" r" z# B) S: C2 I
  64.   EndChangeData();
    5 w# Y; p% Q2 o, o9 X" b  @
  65. }7 x2 s; a6 F- D

  66. & J8 @8 }5 K# d' K& k7 r7 h
  67. /////////////////////////////////////////////////////////////////////////////
    0 N2 k1 h- ?- P, g
  68. // The one and only CRevAppApp object: Y) w6 K8 d8 _! R
  69. . H! S1 T% Q! f/ H; M
  70. CRevAppApp theApp;
    7 a: X/ g( w& ^* d/ g7 ?1 B  ~

  71. ' Z" w* O, H; _8 w' ?" V2 x1 k, t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ) h! M0 X, _( {- O: Z1 t
  73. {, {7 J/ X5 U+ s2 G( v
  74.   int iEOF=0;5 Z! D0 p; V4 C, U1 S7 n
  75.   char szTempName[MAX_PATH];1 c" \* @8 r7 {6 o; p
  76.   *szFileName=0;
      k/ p5 H! O1 |3 B; v+ _+ E+ I5 i% Q
  77.   iEOF=fscanf(fp,"%s",szTempName);7 x  f6 B9 c# U& z; L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 i) z8 k7 i% g/ W
  79.   {
    / h- B1 }8 L* s( E/ \3 I
  80.     strcpy(szFileName,&szTempName[1]);3 _# ^0 T$ h6 g8 [- }/ y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 ]1 @5 b7 e7 w. b& n1 B, a
  82.     {( K# t" |# d! u8 n2 s/ ]. D
  83.       iEOF=fscanf(fp,"%s",szTempName);
    2 X; C$ G7 {* g; d. u: ^
  84.       strcat(szFileName," ");. b7 C0 a- I1 O
  85.       strcat(szFileName,szTempName);2 Y$ b9 w, m5 d, _7 W. i
  86.     }; O1 f4 B  C, g" {- P/ g. \
  87.     if(strlen(szFileName)>=1)  Y+ ^; t9 C4 a3 s4 K
  88.     {
    , B* J1 ^2 o! [8 I
  89.       szFileName[strlen(szFileName)-1]=0;
    - _. [* _# q: M/ X; I! N
  90.     }1 {' v' _% }' Z
  91.   }! _+ ]0 W9 f" N" w; G" \
  92.   return szFileName;
    3 x. Z7 T, E* F) \
  93. }
    . G( D7 X8 N% a7 P+ I

  94. 1 D& a0 M- J  h/ a: ^* z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! x/ T! Z9 h: A+ ?8 N' R0 J
  96. {
    / d& b& y" M& ^
  97.   FILE *fp;  B1 W6 `8 T, G1 H, R$ ^- ?1 M2 t; v
  98.   char *key=NULL;
    + `* f0 Q7 J$ R+ f
  99.   char version[MAX_PATH];" N6 n5 G! h# J, @6 r4 G
  100.   LPUPDATEFILE file,olds;5 s& O! D5 [& [, I& N: l
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ C+ {3 `8 g1 V" g9 A: ~
  102. 9 f' J7 Y, h: D' n
  103.   UpdateList.clear();* |& g+ L- R) Z4 M$ x  T
  104.   UpdateFile.clear();0 s/ r) F1 h$ S9 y0 t( _2 F) S! ^
  105.   if(GetFileAttributes(filename)==-1) return false;+ r+ \* O% Y4 F
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % z6 o3 @/ Y! ^- g) B5 I+ w! ~
  107.   fscanf(fp,"%s",version);/ c1 t3 \! H  s5 e5 Z! J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 Z5 ^; N0 \% z0 t! U* y
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 O' f! m' ^3 n; N9 R9 f
  110.   {; s) ~: F7 Q  _5 ?4 c2 s% Y/ f3 e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . ]2 U0 [( m3 G
  112.     fscanf(fp,"%s",file->path);1 v* C8 I" k# y: v  x
  113.     ReadFileNames(fp,file->file);" H8 P6 y0 _8 W. C, N8 U4 k& d
  114.     strcpy(file->full,".");
    $ B' `; H, G- e( x" f* w9 M5 |
  115.     strcat(file->full,file->path);
    & X# ^* b5 b8 L5 Q# ^
  116.     strcat(file->full,file->file);
    2 d- C. D' C. o( d: L1 s4 e7 B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- _# c, a; l' K
  118.     {
    " d% _1 i9 q4 ]( J+ ~. G/ W
  119.       file->vers=(float)atof(version);
    & P# i- F+ k+ O# o& A
  120.       UpdateList.push_back(file->full);
    ( v" n' I; L0 c, d: b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' x3 [. i; U2 \$ h
  122.     }
    : R( }2 M# h( S
  123.     else
    6 a5 J3 F# C! Y! Y( x% d* J
  124.     {( G$ p. q; m, e; T& J3 \+ P
  125.       olds=(*p).second;9 ?& W( H3 G3 X( ~( e# z: L
  126.       if(olds->vers<(float)atof(version))! ~, T- c5 r3 v) N2 n* A
  127.       {$ i* p  A" [1 x3 y) A. ~# ^- v) p
  128.         olds->vers=(float)atof(version);7 s: p( [4 x/ ~9 N9 J9 V
  129.       }7 Y! P9 G, g- n
  130.       free(file);
    " _  P8 M* y, P! ]. Y) w" X
  131.     }
    4 ?7 p! N. I4 o  x! P3 U
  132.   }' o+ g) A. m6 c1 [4 b
  133.   fclose(fp);
    # x3 w# F0 X) _* N4 P" Q* X
  134.   return true;& z5 x( q: z: M  w- W. m0 s
  135. }
    7 J, K4 {* |/ }/ P/ E

  136. / n4 O2 g9 z- g4 C: z" o! W7 r' x
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
      _: R# ?1 {' m! N- y/ F6 Y/ s
  138. {
    * C2 n$ c: R+ R4 Q6 K# x6 d
  139.   TCHAR  szFull[MAX_PATH];
    ' J* J# o& ?7 T: j' e# H
  140.   TCHAR *token,*inter;
    8 G( D) g% c: O
  141.   *szPath=0;% w' Z+ G2 l. E+ g' J
  142.   strcpy(szFull,szFullPath);# j) K# i; z5 m2 a; B- A7 @! T* _+ ~
  143.   token=strtok(szFull,"\\/");0 A1 B0 n. b" N5 L! e
  144.   inter=token;: [0 V9 b9 C4 k2 h! E$ S
  145.   while(token=strtok(NULL,"\\/"))
    4 t3 }3 |0 ]" G. e, J6 h
  146.   {
    9 G9 g" V- R' I0 o/ ~& y
  147.     strcat(szPath,inter);
    0 o- z6 x' v% m7 o( X1 `
  148.     strcat(szPath,"\");
    % L3 G' ?; R0 O% E" Y
  149.     inter=token;
    $ z' J. R1 n0 G. m* z* B
  150.   }
    * t( ]9 M, Y: F7 z( I9 C
  151.   return strlen(szPath);
      R) p1 [4 E% G
  152. }
    ' i" T, s2 t! W4 k

  153. 5 R. ^! f/ S. x) n1 p7 m- A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) v: }; R8 F4 Z
  155. {* e! `7 D8 A1 h7 h& o, O. p
  156.   DWORD attrib=GetFileAttributes(Target);# i2 y5 E- f3 V, |
  157.   if(attrib!=-1)
    6 |. J7 t1 T1 }# B' U+ n( X
  158.   {/ K+ @- Z& n$ Y; r* o3 C
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% ^; s, S( C6 m
  160.     {- D/ o- f, I8 E/ n# S: H9 `" }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & Z5 n( c: v8 x8 \- u- E0 B
  162.       SetFileAttributes(Target,attrib);
    $ j* O( @# i1 d
  163.     }. ^7 ]( w, h3 I( N. _, A
  164.   }; t, O6 N  _6 h' s3 H+ f
  165.   CopyFile(Source,Target,Erase);
    9 P& _2 L8 }$ d7 ?* |/ n
  166. }1 w1 Q3 l$ K$ H
  167. 7 n/ L# f$ a* ]) Q" |5 }: o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 Y* N% x# D! N
  169. {
    ; B8 S% N0 Z5 Z: Y& U: q
  170.      FILE *fp;
    * d# x: ~& e2 O* z/ ]) h
  171.      char  szBuffer[8192];
    4 B1 w% _" T: H' X' a2 R+ m. k
  172.   va_list  argptr;+ Z' \; j* u. j! ~6 k" I! q
  173. 7 D4 J/ b. G2 J' @
  174.         va_start(argptr,message);
    8 G; V1 d+ I! R1 I7 l# a1 P
  175.         vsprintf(szBuffer,message,argptr);) U# r0 f7 A$ N
  176.         va_end(argptr);* I. M, b# w5 |, u0 t
  177.   fp=fopen(FileName,"a");$ d0 L, ?6 n7 u: |6 I! T
  178.   if(fp)
    8 [% z7 o- q" i
  179.   {2 s" `. _/ E/ w
  180.     fprintf(fp,szBuffer);; ^; Y+ o( d: G, H
  181.     fclose(fp);* k- L& ], _% M5 |! M) K7 \1 Y
  182.           _flushall();
    * C% ?# q- H" Y( G' E% y+ C
  183.   }
    ) `3 R) k0 L. @( w- N/ d5 F( z$ T
  184. }, ?; u5 i/ c4 [0 Y# s5 }

  185. 3 g* }0 B1 X! f1 w4 v) v$ l4 g2 p
  186. BOOL CRevAppApp::Fclearf(char *FileName)$ V6 |: m& P. O/ o" g# M1 A; j8 R! A
  187. {
    # S. J9 g( O- J
  188.      FILE *fp;
    , e' a% L: l' t
  189.     DWORD  attrib;
    ' i6 E7 C* I# q5 ]
  190.   attrib=GetFileAttributes(FileName);
    ) F+ o- F9 g' d7 v- V6 Q
  191.   if(attrib!=-1)8 ]- G8 P$ ~- Z# j2 f4 ~  W$ ?
  192.   {
    9 o! C6 b8 P- j, B6 Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( F9 F7 P7 V2 H# d: x3 F
  194.     if(!SetFileAttributes(FileName,attrib))1 X7 K9 i& b+ n9 e( G1 S
  195.     {
    & J8 R7 `: _- e- n8 `* Y( S& R4 s8 E
  196.       return FALSE;
    6 n( i% |$ G1 j: Z
  197.     }
    : j0 a/ N; T8 t' x1 i
  198.   }
    , D0 D) E, E+ m/ J" @1 I* V6 ]8 q
  199.   fp=fopen(FileName,"wb");
    0 o" y& A' D+ ?/ F6 L9 j0 [9 m  Z
  200.   if(fp)
    5 J9 N7 l( R8 ]7 v' ?1 _4 J
  201.   {
    9 V) {# G! x. F( J2 C
  202.     fclose(fp);* i1 J8 M2 Q4 j5 [- e6 X/ _
  203.   }
    7 X- v8 _. g: t
  204.   return TRUE;7 l: [0 j) _/ ^6 P
  205. }: c5 [0 R9 Y  \' j
  206. 6 \$ Y/ i/ _+ P
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 K; h% G$ W" I, _: P
  208. {) A2 q, r  I! V' ]; h& e$ A
  209.   char filename[MAX_PATH];
    5 y6 b( ~0 K9 p3 O! [8 d8 Z. z
  210.   LPUPDATEFILE file,olds;
    8 t% J' T( R1 \0 ?
  211.   std::map<int,CString>::iterator i;, A  E, j. R* ?4 [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! H* |* T0 y8 R! `5 \! U7 p% ]/ J
  213.   std::list<CString>::iterator l;0 l  S* y  C; T3 ~7 W

  214. ) x8 Q) i. d% l, u% {& ^
  215.   if(bFirstUpdate)
    3 I" x# D6 _# W5 b+ R$ ?% {
  216.   {
    ) u+ m. v2 p, Z1 d; r. n# J- j
  217.     dwCurrFile=0;0 Y& Y' \7 @! J
  218.     bFirstUpdate=FALSE;% u6 n% }: E( b" a+ U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 l3 ^, s1 U1 q& u  B* G: t
  220.     {, i( G9 x8 ?! `; |7 Q) P
  221.       dwTotalFiles=UpdateLocal.size();
    , _7 `6 o- k1 B* {+ s: p& n
  222.       dwDownLoaded=0;& }' E7 i$ Y, R
  223.       bSilentStep=FALSE;
    # C; S" v3 h0 P5 L7 D7 Q, D' j
  224.       bCompressed=TRUE;
    9 A0 K0 F3 ]* C8 P8 Y
  225.       strExtLocal.Empty();% n  G2 T! r$ G& Y/ H6 _
  226.       strFullName=(*i).second;; X% h$ a2 A$ Z0 l
  227.       dwProgramState=AP_CONNECT;
    & w. u% Y7 {6 N) C! r
  228.       return TRUE;! F0 I! H5 K" l
  229.     }+ V5 w; x( \3 S7 Y
  230.   }+ C* ?; ]  {6 u7 c" g* `6 L
  231.   else if(bRestartUpdater==FALSE)
    6 ^3 ^; h; Y4 D) I4 o
  232.   {! u4 p3 p8 D8 b6 a2 _
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' }5 J" w+ A) L/ v+ l
  234.     {- `# ~/ r# b  V% O1 y% ^: h/ [* g
  235.       file=(*p).second;( e% J& w1 D, s/ [7 `
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): J) P- U) O5 b8 E( @, Z
  237.       {
    5 W1 R  o, E; e" c2 O; n8 p
  238.         olds=(*p).second;8 W1 v9 ~9 T6 ?0 H" H6 ?# I/ `; P8 V
  239.         olds->vers=file->vers;8 w1 d1 Z- V( R
  240.       }  u9 G# v( u; F  L7 C+ o
  241.       else
    , F1 C# a! u9 H$ H
  242.       {
    - G# E. r+ b% U. v! D7 l  |6 G( O
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 P3 @( J6 k2 b2 ?; M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 X" b6 _/ C3 M6 u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ R+ B! l6 Q4 j$ i. H' ?
  246.       }7 z" O! m8 i6 Y! R9 z3 N+ l' r8 B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) V: a6 @/ [0 A$ j  F) P, Q
  248.       sprintf(filename,"(%s)",file->file);( t  i: B6 B  W" x' x, Y# N1 G
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      ^2 ~! z# I5 L; {7 c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    , R' q5 }3 b; ?. b" \0 ]
  251.     }
    7 U2 A. c% }( Y9 `4 e. D, S
  252.     dwCurrFile++;
    ; c/ V) F3 l6 P# V3 x$ b
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 _: z3 y0 h! Z" N
  254.     {
    - T: r' j, Y8 t
  255.       bSilentStep=FALSE;
    * T8 l; Z$ p9 j7 Z7 {7 o* n
  256.       bCompressed=TRUE;- B2 j7 y. m, D8 e7 J+ f8 c
  257.       strExtLocal.Empty();
    ! M; E( ^6 Q# P/ A
  258.       strFullName=(*i).second;
    7 M3 k# ~8 E/ n1 i9 R
  259.       dwProgramState=AP_CONNECT;
    & g- P$ U( j! x/ N8 @
  260.       return TRUE;* H" c- b; ]' U  U: p0 y, _
  261.     }3 {. _6 Y& X! m' H( F
  262.     if(!bRestartUpdater)" W+ d3 K6 t! k
  263.     {
    1 X& x; G0 [4 T
  264.       int iCurrSize,iFileSize;" a% Q: P9 r& {5 z, r
  265.       iCurrSize=0;
    : O$ p3 V* T% |% H' @, P! ^8 ^; K
  266.       iFileSize=UpdateList2.size();
    . z! h. b5 i0 T. _8 ?  _. N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& x  D9 g0 i; e1 G2 L
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 v: u1 T7 }6 N3 }) e, k; v
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * o* G( ^7 \! j+ L2 V4 p8 M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / i0 R. r0 \2 Y7 s* a  E2 R
  271.       Fclearf(".\\update.dat");
    # e/ Q2 v7 I2 y" [
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 o/ H: L$ y- u, K4 a* q+ R, s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / `/ A" `2 i2 d) E3 G3 K
  274.       {9 c9 n: P5 @4 m9 q- g8 w  s9 M! d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* r3 J$ L1 h) [4 Q: z5 G1 y
  276.         {
    % l# N1 }! u0 K) f! t
  277.           file=(*p).second;
    : X0 @# i) i( \4 d/ d3 ~
  278.           sprintf(filename,"(%s)",file->file);
    * y5 {* Y2 h  X# I& p
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% Z% f- y8 j0 G1 G) s. |
  280.           iCurrSize++;
    8 }" l6 @. x+ ~; i3 V
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; p( E2 w1 r1 f; d
  282.         }# |: T' b4 t) e+ n. E4 V/ r
  283.       }
    + v# q8 @3 `" S
  284.       unlink(".\\update.txt");
    # C2 l4 R5 j! @# h9 n* E0 D
  285.       unlink(".\\update.tmp");
    $ R) `9 m; w" I: m9 F0 b" c- X5 g
  286.       Fclearf(".\\checkversion.dat");
    / @( H3 Z. K4 j! f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 w4 O& n/ q* X! Q4 R3 o8 e/ h
  288.       if(UpdateLocal.size()). j& j) U. P3 J# m, r1 [8 Y
  289.       {
    2 b7 R6 u* G% b/ k6 G. _* O: U
  290.         UpdateLocal.clear();# K( s' E5 d0 x4 l/ y5 H+ E/ y" S
  291.       }. h: v* X1 q. x: U( H0 N0 P0 k
  292.       if(UpdateFile3.size())
    ' n% O$ U. a2 c; p9 T' v
  293.       {
      y! p: x( L) Y" ]% T% e# m0 z/ A' G
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 Y, ^! z6 m; e1 ]# d1 F7 U
  295.         {( I/ q6 x' y9 r
  296.           file=(*p).second;5 [/ U' l- T9 W8 b9 K; N
  297.           free(file);
    $ V, T8 l/ K( r' M" O, Q+ F
  298.         }7 W; W* W: [7 A
  299.         UpdateFile3.clear();$ J0 c0 ]9 S- \  t6 `
  300.         UpdateList3.clear();
    5 `3 A# Q0 l2 n$ c3 O
  301.       }
    3 c' ~' s% N4 R  r6 E
  302.       if(UpdateFile2.size())
    7 U/ z" j9 E% x
  303.       {
    5 \) d. }, s# h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! [) O& E/ u, w2 }) E
  305.         {
    4 c5 A! V5 C. c. j
  306.           file=(*p).second;( z+ V9 l0 P. n
  307.           free(file);
    8 z9 i5 d' M' m$ |% d$ w
  308.         }+ E/ F5 I6 K/ I0 }) J: ~
  309.         UpdateFile2.clear();
    1 `  k8 c5 ~1 V3 L' ]
  310.         UpdateList2.clear();
    5 J+ x! ~5 v) Y8 N+ }0 }* L5 ]
  311.       }  F4 y$ Y( B: a2 T+ `
  312.       if(UpdateFile1.size())
    / }4 g/ _, R; q
  313.       {
    3 w8 y+ b0 b5 h) Y( a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 |9 t$ _- S( Q7 x" p7 k
  315.         {6 F4 o; a6 ], }% o
  316.           file=(*p).second;( Y/ M) k/ L0 S( b: I0 L+ Y0 ]
  317.           free(file);9 ^8 {. R+ E% F# D; J0 Z0 W8 `3 S
  318.         }
    2 Q+ ?" t' L5 c
  319.         UpdateFile1.clear();$ k4 p3 g' b1 o: y1 R; |- I8 F
  320.         UpdateList1.clear();2 e: ?* j6 J7 N$ H9 q
  321.       }! M' F+ I/ V2 H7 L1 p) O- T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));/ _, Y1 t1 G- ?& S; C
  323.     }" b- \1 `6 n' k8 u8 R" e+ b# a
  324.   }/ K# v# X6 k+ W/ Q" d/ _7 B2 L
  325.   return FALSE;
    - A5 A$ A9 V. M0 ?1 N  C
  326. }
    / u1 d) T7 Q# N! r

  327. 2 e# L7 V4 ^- `( A/ l" l
  328. void CRevAppApp::ClearAll(void)! R6 x3 e, a" t( z
  329. {& c' ?/ u5 T6 R4 f4 N
  330.   LPUPDATEFILE file;& b+ v# k! z. F/ d0 B) }1 f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;, e" V0 a+ f6 F) u/ n" X6 I3 ~
  332. 8 s' S- q1 h4 X" i/ g) F8 c5 X4 @/ V
  333.   if(UpdateLocal.size())
    . |7 j/ |8 h% H( G8 ^: g' i
  334.   {
    8 d& C) \: {' k8 S4 U' i9 R
  335.     UpdateLocal.clear();
    7 U4 v: R' n/ C+ A! [9 Z1 L
  336.   }
    3 V; {( Q) B- G  w. U; j3 I
  337.   if(UpdateFile3.size())* i4 E" n4 b% y6 c9 h
  338.   {
    " z2 u9 B0 K+ o4 k9 r' ~; ~
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 h; X5 B1 w- z
  340.     {
    ) ^; O; [1 U( U1 ~) d2 k6 {
  341.       file=(*p).second;0 a7 I  r% X/ _) d" h
  342.       free(file);
    4 G, j1 q5 k6 Y7 w4 f+ T( Y
  343.     }
    ' ?  B0 }6 C* {* t2 j
  344.     UpdateFile3.clear();9 h! X5 q& Z2 }, Q3 j) F: W
  345.     UpdateList3.clear();
    & y6 Y: }' y7 @( V2 r
  346.   }
    , i* c* q  f3 I) o  J8 w" M
  347.   if(UpdateFile2.size())) W) q0 Z# O2 j, e
  348.   {
    7 v, O7 A; G+ n
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - Z) Z, t+ J. M9 C
  350.     {6 C, I- M9 ]# J" ~
  351.       file=(*p).second;
      _8 L' i8 i% K" g* L9 ]
  352.       free(file);# u4 ~. P% P" K8 r0 n# o# A
  353.     }) [2 o8 G' h# w' |3 \* @
  354.     UpdateFile2.clear();; R, C4 T$ P! h% u3 u- j! |
  355.     UpdateList2.clear();
    2 B  {# u* \5 Z5 W
  356.   }
    1 A; _- j! y8 m( C) o3 @2 ~  m9 B
  357.   if(UpdateFile1.size())0 J2 A( q5 ?! d9 [& p* A: }' ^* @" D
  358.   {
    & X4 G/ r2 U: _& O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' n, m, y4 _% H) |
  360.     {- @$ s; r6 O( o% i8 C% j
  361.       file=(*p).second;7 O' q/ F0 w4 l. \1 `5 A. F8 E+ ~3 p4 k
  362.       free(file);, B1 X  @/ ?' E0 x" w
  363.     }
    - Z/ K5 |2 `) w, c
  364.     UpdateFile1.clear();; O% Z' k3 s/ j
  365.     UpdateList1.clear();
    ' ?0 q$ t/ n7 z0 d, Z
  366.   }1 Q" K& N6 L# @/ M8 P3 I9 t
  367. }  5 O. o( H2 P( G8 ?& x! a% S, s
  368.   + b5 i8 G0 a( I3 K
  369. BOOL CRevAppApp::CheckLocalVersion(void)$ f: S$ ~3 B8 m) c6 o) e' ?
  370. {
    4 i3 _( F, L  L* `/ J/ N7 f& l
  371.   int c;
    ' U  u7 }; R, Z1 S, x
  372.   LPUPDATEFILE file1,file2;5 F* n- K  N3 m2 i4 m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    5 y* P$ Z" P3 G. K! d/ g
  374.   std::list<CString>::iterator l;5 j5 P. p; ?& L) i% Z

  375. - p5 g: z' ]8 J) |2 @* K8 a9 s
  376.   UpdateLocal.clear();
    6 H: Y/ X9 a1 |4 m2 E8 s: j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);% V9 G0 n* V( W# F2 c
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 B9 W' W" u5 r- l; H) c7 [
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 s9 i( ]( d0 B  d; S. O
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) A2 f' s# ?+ W8 g3 ^. O# e
  381.   if(UpdateFile3.size())0 x- ?8 J( u/ R( T! [
  382.   {
    $ @" @" v) }4 o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)) L% a/ m4 i/ @- {0 T/ z! A; ?* I! s* V
  384.     {
    . I( G8 {* [/ N3 `7 K
  385.       file2=(LPUPDATEFILE)(*i).second;' n) d# c2 Y# q+ o% `$ P( N$ S( R* e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! b; M' r9 ^- ]# }
  387.       {
    ) t# A! u" U8 T
  388.         file1=(LPUPDATEFILE)(*p).second;# k2 T: A$ _; H
  389.         file1->vers=file2->vers;
    # n- W& |9 B* i. @
  390.       }
    ! y& a, e# Y: `" {) ^
  391.       else
    - i0 e- S8 Q7 E* X; y
  392.       {  T/ F* F9 Q0 ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) C+ X( I% N% Q9 t) `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    & q, k( q% o8 S$ v3 S9 q- k
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& m% k: d; t: s& M3 F
  396.       }
    5 ~. _- z0 Y0 i3 c  O
  397.     }
    8 A  z/ u' K, R' ^
  398.   }
    ) w1 j% Z. \2 @: A, a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : N" h- I  S. r/ A  S) i
  400.   {6 k4 E$ y7 U' e; g( |% `: ?
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# q" L) T) Q& q9 U6 m$ x0 H& p
  402.     {8 Z' R0 w. z) X) @5 n
  403.       file2=(LPUPDATEFILE)(*i).second;
    ( A" m8 \5 q6 ^/ C4 s
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ H& b5 c4 ^0 |) a1 w1 F( f) Q
  405.       {/ i( L" K6 d1 t. p
  406.         file1=(LPUPDATEFILE)(*p).second;
    # n) {; r  Y! c1 q+ ]
  407.         if(file1->vers!=file2->vers). \5 \4 g5 I; v0 C! x: K
  408.         {
    5 E1 U" x% E& x" x1 c' x% |) I
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 y& U! a2 t8 o( t% e
  410.           c++;
    / H+ n0 V, y3 F( ^* e* B
  411.         }
    : _& q% N0 X* N& h) g: M$ \+ @" G
  412.       }% N" f/ }! }: W. u% u; b8 r
  413.       else
    $ O! d" c8 ]1 J! E, d: J# e9 q
  414.       {
    3 c+ z7 j  F2 ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % B$ P$ G) d3 N9 N% m) o! k, D0 G
  416.         c++;- q4 B7 M$ o% M; h: E/ N
  417.       }: F' ?  V9 G) S8 l; G
  418.     }, L' q. O, a' ]
  419.   }$ I% K. P6 V, L( d
  420.   unlink(".\\DownLoad\\update.txt");3 v/ y& j$ ]. A/ W
  421.   if(UpdateLocal.size()) return TRUE;$ J6 u' p5 B4 E1 g
  422.   else                   return FALSE;& k. t9 _. m- z8 K& _
  423. }
    ) @. g0 R' d2 {: E+ ]# i
  424.   W: {, n+ Z9 _1 P; H( ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 T$ q0 J* t6 p( D0 z( U9 B" |  F/ z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' y8 h& y" q  h, s; B4 B" s; @' p

  427. - J0 x, [% d: \+ l; X0 F

  428. $ C- `5 W% J+ S
  429. 5 D: f2 ^- N( j2 R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)% \) p: A" Y# @" ~+ Z$ G
  431. {4 m) g' R- t$ y) T2 Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 P! o2 f/ H0 m3 V( j
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! Y) c( O: ]) O5 s1 o. I
  434.   {, |; {% V* \2 K1 O2 I8 H4 W
  435.     char szLanguage[50];
    ' R) g/ P" S3 u  W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 O" C8 {; w- T6 _+ j
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # d: T/ ^% d" b/ `) n5 v% ]
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! A& v2 ?5 u, K8 M" T1 y% D
  439.     else                                   m_iLanguage=ENGLISH;
    " D3 N7 z$ _2 F. T- z
  440.     char szRegister[100];1 w- \( O1 m) J# [
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# e9 M5 y# z% I7 i! z1 l6 y
  442.     strRegsName=szRegister;) ~" ^1 y# v0 B
  443.     char szPatchURL[100];+ p5 g8 h7 F0 [2 e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 ~$ U$ A* w- E1 z0 i! f
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 i' `: J4 \# W& h2 f1 |$ s8 o
  446.   }8 d0 \1 p) K7 A7 S# H
  447.   else2 C$ ?, [1 \1 `) k
  448.   {, F$ x- C- Y  t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" D  u, t1 {3 O/ I0 B
  450.     strRegsName=DEFAULT_REG_URL;  c/ w4 m4 `) Q8 g/ _- B
  451.   }
      W! m2 E9 E, u, ?( b
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 J5 {, M$ |# m* E* V
  453.   {
    * f" M* A% i3 s2 D2 U
  454.     char szIP[50];. @4 q  ?2 F* V" n9 j8 H
  455.     char szDIR[300];1 T# n3 [0 u" o
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))' O) j$ v, P- f* d. R
  457.     {* ~/ T1 a) m* L1 u' @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . m& _; w- i( H  Z4 `; O
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 O  ]0 b% C" L( k" |
  460.       strHostName=szIP;
    : O( o, j) A% r# _3 n" [+ [0 s
  461.       strHostPath.Format("/%s",szDIR);, m! V: G6 W! s3 T& w  O8 i0 N
  462.     }
    " p' Z+ V1 C& U8 h) H% ~3 O
  463.     else
    7 l8 n: j  x' J* l" S, S& x
  464.     {
    , \3 a7 y: Q/ p, F  o& D
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 h- f$ a: F; `8 d! P' z: F
  466.       {7 k' L& S6 _& e  s
  467.         char szLanguage[50];% ^. u7 O- @% |. N) L
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ ]* I& w9 m, ~9 w# e
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # D. Y" O: k  O. h  N6 y
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      z3 R6 T# T  V* _3 y; U" |
  471.         else                                   m_iLanguage=ENGLISH;
    ) l/ b- |* M4 [5 P+ K" a1 K
  472.         char szRegister[100];) U# y/ v6 K8 v6 p% f- F; r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 i: D7 E6 }9 p( f, V. q
  474.         strRegsName=szRegister;- R6 G. h+ e. s/ p, u
  475.         char szPatchURL[100];& x& z! o9 h/ C' K/ t& G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; b* y: i4 E  m6 O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) b! C: C9 L. a6 Y. `2 F; g
  478.       }# I2 @1 A+ w, u1 _
  479.       else
    0 f7 e* |. Q% ?$ D2 f2 {' \
  480.       {
    4 l- A+ L+ [$ G0 e0 C% \" Q5 {+ r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- v' v5 c# D' L* c5 Y0 n
  482.         strRegsName=DEFAULT_REG_URL;
    / I: C& f3 D6 h5 z
  483.       }0 }  t8 Y2 G( A" c8 w& z
  484.     }; C  n* V: _4 B; }! G: U
  485.   }
    / s; v5 N7 v/ Z, |% I  p) G
  486.   return true;0 i2 w+ p( y+ a6 Y/ y
  487. }# W) K  B: Z1 I! v) N+ ]* n
  488. ) G4 h* e! _4 ~0 g- G
  489. #include ".\ZLib\unzip.h"
    ! q; k  a7 ?" R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);! C- @! Z& O" ?. X% w" c6 z
  491. /////////////////////////////////////////////////////////////////////////////: |) K& f$ r4 l: Z8 Y
  492. // CRevAppApp initialization
    7 p* z3 S) |% w# v2 p6 D/ E

  493. 1 V% R0 \, T: Q
  494. BOOL CRevAppApp::InitInstance()
    4 C9 K2 X; u" A4 c3 }8 ?! Z
  495. {% Z: _! }: A  E) Y' m
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' A- y  L$ m/ j) C9 ]  S/ }9 Z& s0 o1 H

  497. ) P1 ^0 Z  Z: k2 R+ s8 M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 d8 ^9 Q/ S: `8 @" F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " S( j( ]- G0 h. P# [% b; p. \- I; D( l
  500.   {1 W+ l* e' C5 m9 M% M5 ^
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 r& c+ T" Z6 {  {9 K% V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      @. v, Y8 h3 z+ M1 a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 Y& \" i5 Y" p( d+ g9 V
  504.     {
    4 W1 C+ [2 H# V+ z: \
  505.       strcpy(szPath,szPathTarget);
    ( L- A  M: F4 i5 C' G+ @% B: _" F
  506.       SetCurrentDirectory(szPath);' k9 X* z! }% ~5 t5 ]+ ~" x: c
  507.     }
    # O( l# [. r4 `+ K: J1 |
  508.   }# N, Q! L( ^2 d. m7 E* X5 x
  509. #ifdef _DEBUG
    0 O! x: Y9 D* X, G3 {. J
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - @; @) c! ]$ t1 B3 a/ T; Y2 f
  511. #else& r4 K6 B$ k( r- _8 r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))+ v0 Q6 h) t0 R( Y
  513. #endif
    ' L2 O* b5 ]1 u
  514.   {
    % ?2 N7 \; c0 V+ B& P2 ]8 J6 X
  515.     char tempFileName[MAX_PATH];# m' Y, x- _; k8 _1 H& o: E
  516.     strcpy(tempFileName,szPathSource);
    8 R" Q* X* a5 \$ p
  517.     tempFileName[strlen(szPathSource)-12]=0;2 p3 X, t) }3 B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ J0 }1 W% I* P! c$ C5 N) K( X
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; O+ m9 T+ Z  g4 [2 u
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # X4 g$ h+ y2 ]: n0 l4 d, C& U
  521.     return TRUE;. O7 H! z; K* r5 [* {8 R
  522.   }' d' A; ?0 B4 F0 L) Z* e
  523.   // Nuke 0118: Delete run.exe" l, }, t& w4 U" x8 [8 X; b2 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    : Q+ z& _  T/ ]% G
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ( K0 N2 s. s: d8 B1 @: L
  526.   if(!ReadCfgFile("Config.ini"))& m7 i6 v) _& c3 m9 u4 }8 `2 v( t, f6 T
  527.   {
    8 D; }+ P- d8 ?2 ?
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 [% U- e) Z2 z9 G
  529.     return TRUE;
    $ W/ m+ I6 J; r. _
  530.   }
    * S6 X- F% ]! ?+ _% t- j
  531.   HANDLE mutex;
    7 n. _2 Y# A3 e% r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % w6 y4 q$ u/ h% G
  533.   {
    : q7 {/ o: c- V* ~4 z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)$ q+ b7 N+ y8 K" q7 C- R1 W
  535.     {5 F! @/ z3 h9 q
  536.       CloseHandle(mutex);/ ~  z6 z" t% {8 g2 x9 ^
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ) X# N& O/ H( m  D. g& J
  538.       return TRUE;) t: V' W4 _% b; p+ r9 T
  539.     }
    3 g7 A" v9 ?4 K5 l8 H* p
  540.   }  
    2 k. a' N! i. @" r
  541.   CloseHandle(mutex);8 I* F' m, s% w" r1 o
  542. 8 _9 ^4 k9 [9 K- L& x& O
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# M' F/ u* y; b2 X, a# l  Y2 Q

  544. * e* w& R5 w2 U9 }. x" `. Y! B
  545.         AfxEnableControlContainer();
    + g; ]- U. y; A: M) [
  546. ; W7 J& B1 l. y$ F
  547.   bCanUpdate=FALSE;
    9 u  _3 y# T5 q: e1 X2 |9 f
  548.   dwStartUpSteps=1;: e* [' n3 [/ j+ _# {/ B# U
  549.   dwProgramState=AP_NOTHING;' e, @& S5 c6 P7 P' L

  550. 9 [6 h, p, E5 x6 j# C# y: A, Q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 }# K( [+ @3 o0 T+ d! C  p
  552. % C2 S2 P$ L2 W$ |& I; z6 c' v& C/ W, d
  553.         // Standard initialization; b9 L: l$ f9 R8 h0 t1 N# w8 H
  554.         // If you are not using these features and wish to reduce the size
    1 u  h& g, a& G; X* `: B
  555.         //  of your final executable, you should remove from the following# x" B3 |" w' u) t) }/ ~
  556.         //  the specific initialization routines you do not need.
    ) n$ e- Y8 y! H+ \
  557. 9 H( ^  N& b! I* |
  558. #ifdef _AFXDLL
    ) `: R, ^1 Z/ y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL9 |. U5 d+ x0 |) D7 m. o
  560. #else
    / y9 i( J% K; m& J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& r! g1 P* ]; D' T- o: A" b
  562. #endif
    5 w0 h' k7 X6 {6 p) ?( f* I
  563. 0 }8 C. C0 f; o' E9 x2 Q
  564.   dlg=new CRevAppDlg;- p' X" G% L& h5 V$ m( u0 ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);! D* Y4 x3 u3 [) R. K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 M9 H- J. n9 L$ x/ a* E  }/ J1 k
  567.   m_pMainWnd=dlg;9 j, C9 A9 W8 N2 A! U! P
  568. - \2 a/ x, h6 }. D0 T% B9 H
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 s6 E3 g0 K4 Z  v) p9 i

  570. # \1 }  O. @( t9 |9 |& a
  571. //  GdiplusStartupInput gdiplusStartupInput;8 z+ F; ?& l8 ?& L" L0 X
  572. //  ULONG_PTR gdiplusToken;! Z/ B- f* W: q+ J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! u/ C2 z4 ^) {# Z. j

  574. 0 T/ A& N. Z9 O; L/ H4 n5 @2 @
  575. //        CRevAppDlg dlg;
    6 f6 L$ p6 b3 M! J
  576. //        int nResponse = dlg.DoModal();: t9 F% Z7 \8 ~) i$ s
  577. //        if (nResponse == IDOK)
    + @9 A5 b. S4 a0 Q6 V
  578. //        {7 F2 J$ H7 A; D0 @3 v3 s% j% a4 {
  579. //                // TODO: Place code here to handle when the dialog is
    5 q$ h& M+ j, M) R* M" W9 n
  580. //                //  dismissed with OK' _6 p% T. r' P8 e0 ~
  581. //        }
    + V( O& I/ E! U2 V0 ]1 C5 e
  582. //        else if (nResponse == IDCANCEL)
    8 Y) h: D+ Y. u5 L2 n
  583. //        {9 J; ?6 `) V) p+ }" C4 P
  584. //                // TODO: Place code here to handle when the dialog is, [. \: F. @0 e( P  |( c: I/ G
  585. //                //  dismissed with Cancel: C. S! V# V$ {  {
  586. //        }
    0 l. c& E, ^& d1 m1 s* R( b% c) Q
  587. % R: G! m2 g  r9 f/ ^7 v
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) \. v" p5 U; T1 d4 H4 n. i
  589.         //  application, rather than start the application's message pump.
    4 g; p6 ?5 D; p7 C; i
  590.         return TRUE;
    ' G+ W! U" A/ U5 S8 `
  591. }2 S9 \: N# a% n, p. `
  592. / x' P: k- u6 r
  593. char *CRevAppApp::strtok3(char *pSource,char *token)4 r( D! ?0 R+ ^) e# ?& A
  594. {) R" e# E0 ?  V
  595.   int i;
    * s6 a; A# U7 G
  596.   char *szRet;
    4 i1 i, j( o' t! k( |
  597. ! J+ B1 K% d* t$ x! k3 N) }
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + r, T: p7 Y- c1 ?' n8 M
  599.   if(sztoken)1 x+ u+ O, p5 ^" [  f$ ]. M, h
  600.   {) M  |& e  X2 v
  601.     szRet=&sztoken[itoken];
    $ E& D. w+ Z1 M' `- V
  602.     while(sztoken[itoken])
    4 c, T- B- I$ \' n) V% r
  603.     {
    ; G3 C- [  w# I
  604.       for(i=0;i<(int)strlen(token);i++)+ @( W. f* a& B. s  A8 P
  605.       {
    7 f2 T. [3 g( Y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 Y6 D* v  U* ?4 E" Z, t: L( I: |. `
  607.         {
    & s7 \; g) ?. W7 [
  608.           sztoken[itoken++]=0;9 S& T$ C; j2 x& I/ U  z5 P; v& `
  609.           sztoken[itoken++]=0;* z4 a4 P, e7 G- Q5 G3 L1 v
  610.           return szRet;' _; I7 X  R) ^1 }7 H; A9 r
  611.         }+ Y! ~7 E" H9 z! R5 Q9 a$ ~1 l0 A' K
  612.       }
    ! k3 A/ s! }1 f: |9 W
  613.       itoken++;. T& k; l& S; ?( }
  614.     }
    5 S: b3 A/ L6 w+ W" C
  615.   }
    + p3 v8 y8 i1 ~  y3 E2 C
  616.   return NULL;
    - H, v' m7 J( J, q, R+ f
  617. }$ N5 v5 f1 Q  H/ g  g- m* r

  618.   T4 s6 s5 @8 o3 ]8 W  h" ?- c4 x
  619. void ProcessProc(long Total,long Current)
    : @0 V3 @( n( [9 t# i9 |! K% k
  620. {
    ' ~7 l" A( I7 S
  621.         MSG msg;
    8 {" I+ D+ f3 z# q; X* ~; [
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . H4 S5 T9 p* i/ Q) T* }" G6 P2 O
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    / i3 K+ S% k2 a5 O2 F7 ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 f! O4 b, l; k
  625.         {" ~& u2 |2 J- s( m+ M  n6 O
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 ^# i( U, l* p1 y! {3 E/ e0 a' J
  627.                 {
    ' e4 @* P# ?9 ^' ~4 j5 w: @# G2 g
  628.                         return;& Y$ k. F# }1 r# M+ M
  629.                 }  i" v- a* ]+ b1 r5 v4 U# P/ Z
  630.                 TranslateMessage(&msg);
    9 D/ M  t1 _! v5 n
  631.                 DispatchMessage(&msg);+ n" p. x% r: P5 j! B4 D% D
  632.         }       
    * W: \1 Y+ {1 R- u
  633. }# r8 f# @% c+ R/ Q# B0 {

  634. 4 Z/ N' n. H+ \- N& I
  635. BOOL bFirstChar=TRUE;$ i* S3 [0 G1 @& \6 q+ b3 t: X
  636. 8 k3 z& \9 r0 u3 y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ) z$ f9 `, M0 @
  638. {3 T9 N4 b! x- b8 Y  I# S' {
  639.         // TODO: Add your specialized code here and/or call the base class
    4 O$ E4 @8 U7 c' P
  640.   switch(dwProgramState)  o( v) X2 D  N8 r% S# S: }
  641.   {: G' w, a2 A6 z& @$ ^& E
  642.   case AP_NOTHING:
    7 r- Z9 @# y5 S* u1 r
  643.     switch(dwStartUpSteps)- y0 \* B2 f2 @' X+ i- j$ X' Y6 P
  644.     {+ Z7 `( N6 w$ A' b1 p9 v
  645.     case 1:
    $ G' q$ {- O* t! w" Q
  646.       {
    / @5 S/ r( p  ?$ e/ a$ v
  647.         int i;2 P4 n$ }6 V5 l6 w) ~- h8 M  b
  648.         CDC *pCDC=dlg->GetDC();6 U4 M5 q) O4 ?2 H, @$ Q
  649.         HDC hdcwnd=pCDC->m_hDC;
    5 K) g# ?; t2 x3 _$ B
  650. //        Graphics graphics(hdcwnd);
    - U+ s' q# K  S* O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 c0 b5 @. G1 a7 X& h: L( o) F* v# j' t
  652. //        INT iWidth=bitmap.GetWidth();
    : B: [7 C: i- @  j" f
  653. //        INT iHeight=bitmap.GetHeight();7 m9 h3 p& G  B8 c7 G
  654. //        Color color,colorTemp;
    5 s1 u% z  _5 P+ F/ _6 w
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 f8 j) D3 S3 J1 X- m5 g
  656. //        {
    ) O6 q$ v8 c* e# X. G' o- U& z) K" s
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 o! k1 X* W0 q
  658. //          {. Z# o; t7 a/ a/ g8 C" k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ ?2 `' ?* J: E4 b1 p/ Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! F' k2 |: L: D8 e, Q; T( p7 i5 V
  661. //              (BYTE)(255*iColumn/iWidth),* W% J4 N% a: Y! c
  662. //              color.GetRed(),6 ~7 G; D- ~) v0 J4 j
  663. //              color.GetGreen(),) q; Y; H9 r% P0 }4 A9 M3 m9 N
  664. //              color.GetBlue()));) }0 H$ F/ A5 l, F/ E7 ~6 L2 I- b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);0 q2 k2 s5 F" |( b
  666. //          }5 c2 \) u3 M9 S! i( U( H% c
  667. //        }" s- u9 ^2 I1 J* n0 w" t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 k( e( R7 F0 e6 ]$ m3 E0 V8 T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + r, w4 z8 n. A1 w; g' r
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    . z5 s/ R3 s$ _( X4 C! G
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( K2 Y9 {# X( T' b/ k' |: p; \
  672.         for(i=0;i<240;i+=8)
    . N6 V7 r8 Z- _* Q' p& e
  673.         {7 B6 J& |2 q, w3 D
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 F! h  X) U# O
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, l. E0 G( N3 A2 }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 \" v1 C4 V+ Y
  677.           Sleep(33);
    1 j1 [& M0 k( g" N
  678.         }' C3 e6 D4 h; q& H: s
  679.         Sleep(1000);2 c9 f" m4 p. i5 Z& u- N
  680.         for(i=240;i>0;i-=8)
    ) e2 L9 x; U+ I+ s
  681.         {5 `0 s6 f1 W# D; f) R
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' z. t% h3 C7 F1 l  y$ `  w8 c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * v5 z; A' p0 x+ q+ u
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; ~6 \' T: P, r
  685.           Sleep(33);
    6 ?& y$ t, E6 q0 J( b1 G. j" {
  686.         }
    % G" a: J2 Z0 q+ p0 x# z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 ?) j4 ~, l$ s
  688.         dlg->ReleaseDC(pCDC);
    ! j! |6 b. m6 U# a0 q+ c* O
  689.         DeleteDC(hdctar);
    8 g# k6 v/ F& l* r4 m
  690.         DeleteDC(hdcsrc);5 }- v- s% F5 ?5 ~. U
  691.         DeleteDC(hdcorg);3 R: i0 G( P8 a9 i
  692.       }% y$ u: e+ O) w
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ s/ s4 E3 H! m  y5 p5 q; C
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & c, W, D: Y' m# l  F7 B
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");0 ]- x4 x( |2 U* u) I
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 c" {6 j7 K6 v7 E* y2 q" H' I
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 S" M2 W0 O3 Z( S6 a7 q
  698.       if(!Dn.Connected())7 C6 l" A: w1 X: y9 }/ ]! z7 z
  699.       {
    5 g& H" Q- v" x( D, {/ s3 M
  700.         dwTotalFiles=1;
    / d5 S! C5 \# f- ^; b: p
  701.         dwDownLoaded=0;
    4 a8 v2 K; w, P
  702.         bSilentStep=TRUE;
    / |( }; c) W" ~$ i* Q
  703.         bCompressed=FALSE;
    . m, ^. g7 `. Z5 c& f4 ]
  704.         strExtLocal.Empty();% |- I, L9 e+ ?2 ~+ m7 z4 ?
  705.         strFullName="readme.txt";
    ' ?/ _4 T8 M" U4 @7 Y+ _
  706.         dwProgramState=AP_CONNECT;
    : s0 [" j/ \, i& g
  707.       }3 g2 Z2 q" O5 @6 e# r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 h# M! J  ~; L  u' o5 v& n: r% _( l
  709.       dwStartUpSteps=2;
    6 C- B* W+ [, ~: ^4 |. f
  710.       break;
    ) O1 _. b! b# Q$ }# {; O
  711.     case 2:
    ( Y, v* ?1 t2 N' O
  712.       {, ?6 H; l" ?/ G, t
  713.         int iEOF;( i7 {/ \. ~9 e
  714.         FILE *fp;# r: l5 M% p# u; k
  715.         char szString[512];
    & a, L0 _% z3 M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 v; ^, ]' V& s; l- C% C/ X
  717.         if(fp)
    $ L+ b' V3 n9 v0 B
  718.         {
    - z. {6 G6 e7 C8 r+ |
  719.           do
    ( J( o5 E5 n. Z$ j
  720.           {3 ]# T, L( u2 Y- u8 \
  721.             iEOF=fscanf(fp,"%s",szString);
    1 c/ H; ^0 J  i( w
  722.             if(strlen(szString))
    , \6 l1 h: u% `
  723.             {  D" _" }! b2 X! u7 t
  724.               if(bFirstChar)
    2 A  \- J  R5 z; g1 K) h" s! [; s
  725.               {
    8 J/ K* r1 z5 p+ p) C
  726.                 bFirstChar=FALSE;
    / a8 X: \5 E1 p1 k" P
  727.                 bConnectIsBig5=FALSE;
    $ X9 w: H% ^9 N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;* }7 A" |& K0 v; l( o
  729.               }) n5 F# g- J% q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    * X2 ?/ T2 n3 u$ g+ l- Q* h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    6 \% ~: `3 M4 C& d: G
  732.               dlg->m_ListText.AddString(szString);" {/ U4 C/ M5 O4 H
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; J4 a, S: V0 z1 |
  734.               *szString=0;
    4 K$ }. s) T! E; Z) m* u$ i
  735.             }( G9 h4 k" S9 F9 b
  736.           } while(iEOF!=EOF);
    : s4 h* K, ]. a2 E5 u
  737.           fclose(fp);7 W' S0 Z7 I  _% [; j4 I
  738.           unlink(".\\DownLoad\\readme.txt");- P: t" X8 L/ @5 v
  739.           dwStartUpSteps=3;& `' }" B: d7 c4 Z5 k5 H, G& V
  740.         }
    2 t* N3 N+ Q" y7 C
  741.       }
    $ {& I: Q& c6 Z* f3 Y2 P' m
  742.       break;
    4 s8 _  `% O+ j3 r4 m3 t( h9 e$ q
  743.     case 3:9 ]0 O# t* _+ n/ O6 r1 ]% w& j
  744.       if(!Dn.Connected())
    # s- u: I- c" `  X2 `
  745.       {) P6 i0 ~6 U7 w9 T2 M9 W4 }# f3 }0 [( p
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  c9 Y& p% z& e* ]* G' f7 `, l3 W6 V/ v
  747.         dwTotalFiles=1;
    1 w5 b8 e7 H+ {" c8 I$ f4 K7 ?
  748.         dwDownLoaded=0;0 q  B, K! N& {+ ~
  749.         bSilentStep=TRUE;
      b" \  H, c2 F7 c+ {4 V
  750.         bCompressed=FALSE;
      z% [  x! C  ^% i' y9 F4 P6 L) C6 o
  751.         strExtLocal.Empty();
    & b' D  U4 J6 f- n5 s7 f
  752.         strFullName="checkversion.txt";9 @, M/ e/ {8 o: `
  753.         dwProgramState=AP_CONNECT;- Y5 n4 h9 m! E: D) R3 ]
  754.       }1 i. S: Z1 T6 }$ p3 r! I+ }: V9 S
  755.       dwStartUpSteps=4;
    + Z( q$ O3 y4 T4 }3 i1 e# Y
  756.       break;; K& p* T! x1 m
  757.     case 4:$ B) z+ V+ f) a. S4 y
  758.       {% _' b% A# p# I$ |) `" ^0 W
  759.         FILE *fp;
    % W- S/ q& k, ]2 c! ?+ i
  760.         char szString1[128];
      R- w# G) z" k2 [
  761.         char szString2[128];
    7 ~% A, w1 g7 B: X. }
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # ?- D- c9 ?6 n& m6 ^9 N! K: u" ]
  763.         if(fp)7 |/ ^$ N# Z$ q
  764.         {
    ! E! [5 _& j' Z8 S4 y. X
  765.           fscanf(fp,"%s",szString1);; n8 D% _/ P' k$ ~! I
  766.           fclose(fp);
    ( _: m3 d7 }1 E! t
  767.           fCheckVersion=atof(szString1);
    % _- x3 \5 ~( p9 A3 l
  768.           fp=fopen(".\\checkversion.dat","r");$ N; z1 I. l6 u7 n$ y( x1 K
  769.           if(fp)- @# S. Y! M5 O6 _1 w
  770.           {- S, X4 }0 N9 X
  771.             fscanf(fp,"%s",szString2);: n( Q# `3 r. |4 L1 o/ B7 e
  772.             fclose(fp);
    + {6 i& P) V" ?+ I3 X7 q
  773.             if(atof(szString1)!=atof(szString2))
    # x# l, f1 J' v0 j3 C: f$ b* m
  774.             {/ L& C0 L$ B9 k
  775.               if(!Dn.Connected()), W7 d2 n# j& v' s& Z, _, l/ j+ P" a
  776.               {
    2 n- O( k4 j1 f& s, W
  777.                 bFirstUpdate=TRUE;
    ) `% J' l# d" o6 g' s  E% q" Y8 P  ?+ N
  778.                 dwTotalFiles=1;6 [5 `1 u* m6 h1 ^
  779.                 dwDownLoaded=0;
    ) H9 s, p1 N% x. ^* }
  780.                 bSilentStep=FALSE;/ B2 F6 C' ^/ T+ I
  781.                 bCompressed=TRUE;! P8 |8 `: ~: v. g7 @* Y$ s
  782.                 strExtLocal=".\\DownLoad\";+ C  v; V3 a' v) A7 L
  783.                 strFullName="update.txt";& L) x: X' e& C, M
  784.                 dwProgramState=AP_CONNECT;
    1 d* `% ?0 Z1 f4 Z. M9 z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 q5 s. S, z7 j6 v, ~1 C1 ?. H) T
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ! c* G) T% A# U& ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; `7 @% j! ?& _% H$ ?

  788. 6 P" v5 n7 H: Q( P
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 p: y, x& @% ^$ _
  790.                 unlink(".\\DownLoad\\checkversion.txt");" s( B+ D; D+ ?, [1 X1 o  H" ^; h
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)/ z: r8 [" O% ^  Y8 {
  792.                 {
    " ]+ D( m$ u6 H5 z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& w" `& q* a% j9 U3 Y; B; W9 ]
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( |+ b. [" E  I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ h. r7 I& O( c/ O4 u
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ N3 j4 V3 [+ `  l9 m

  797. 4 W% N7 u  c# `; t
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " P$ I' A" z! Q; r8 I
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : G4 n- ^$ b' P7 E6 p
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ H+ ]( B4 J- _- a. }& a) B7 A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 o. s; J5 V& }2 _. }
  802.                 }' Z/ l0 C- Y. U& {( J
  803.                 dwStartUpSteps=5;
      [* q# p' R  z' _8 b7 B
  804.               }
    9 H# y& t8 C; k: S3 a' S  a' G# ~
  805.             }
    . z- C2 J9 x3 }$ H
  806.             else5 ^0 b; C, @9 t$ P& G/ i
  807.             {0 X! \# b* r, o' G  I! q4 C
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , }$ ~4 c# E3 @& g# d$ \
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 I: a/ @9 N. j; \' e! R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / \8 n( e0 B% p& d; U
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , ]) `6 t; o4 Y' \! Q
  812. % k8 f2 ]* G5 J, H* m: R
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 A* @1 ?/ l+ h" e" D
  814.               dwStartUpSteps=99;- Y. e* `, n+ n: e( v
  815.               bFinishUpdated=TRUE;4 Z6 f. }% F! X& m5 ?  j
  816.               bCanUpdate=TRUE;' H! i, b$ L3 }! s. y
  817.             }
    ( _4 D' q6 d5 M. G  I% T. Y
  818.           }3 h1 G6 e+ s. _" w' h7 m3 F: [: i
  819.           else
    # X* {6 E. \- t, A3 |$ w
  820.           {
    & @9 V0 \; L2 j- s) J" |
  821.             if(!Dn.Connected()); c- _  f. r' @7 p
  822.             {
    1 J) }2 R( f* N% G# O% v+ Q( P
  823.               bFirstUpdate=TRUE;1 p: b6 @. {1 I1 o" v0 l. f6 p
  824.               dwTotalFiles=1;
    + i0 K9 \+ y' X6 Q
  825.               dwDownLoaded=0;
    " V* [5 S' V, g7 S: I7 S7 j
  826.               bSilentStep=FALSE;6 m8 k- Y, R7 V5 F" H/ @
  827.               bCompressed=TRUE;
    + E. z% t$ B# q; O5 M
  828.               strExtLocal=".\\DownLoad\";
    1 G7 a6 c, }8 {6 }  g- d. N
  829.               strFullName="update.txt";2 d3 ?$ X& h/ y6 B. ]" l5 y1 J. j; F
  830.               dwProgramState=AP_CONNECT;5 U( E; d% C' [% W
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- X+ B2 s; J* y+ t) S6 l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ R5 }' G4 t7 Q, C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 r4 S' t! ^) ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* N( m7 x4 e6 C9 y/ b+ e0 C& }
  835.               unlink(".\\DownLoad\\checkversion.txt");5 W7 t0 A$ a* `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ' h  g# U* s5 z- @& Y
  837.               {
    ! @- R# D  M) W0 c
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
      ]" i: _5 Y+ Q  l/ E/ n
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , F" z8 h" Z$ N. Z; {! D" |6 j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");2 ?) I' n# a4 u, a/ i$ Q: D- k' |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & ^' D& f! l1 Z" _
  842.                 - l. w+ ~% A  Q: R. t5 U  a- z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% Z" a+ ^2 O# l2 h7 z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");3 n8 a( ?7 |9 V/ m  f) h+ l" j5 T
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    & r7 o3 {1 u5 O- J, @0 _9 o
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, j( w+ F1 W2 c/ ]) X  P% T8 [0 t
  847.               }
    / J8 r  Y- [" x1 T/ X
  848.               dwStartUpSteps=5;$ w, X- c+ |, }/ P
  849.             }
    ' E% ^6 ~* ^) r6 b/ n7 c& N- y
  850.           }
    & R. y# Q& {5 I% k/ w
  851.         }
    2 F1 z1 Q- ^- m( P
  852.         else
    * @8 _7 P, m8 {5 P
  853.         {
    $ ]* F" m+ v" K  p, C3 `
  854.           dwStartUpSteps=3;
    9 Y3 j& x; V8 P8 T
  855.         }' X0 i* I* Q- ]6 t9 F$ D
  856.       }. G+ Z: P0 {/ F. a
  857.       break;
    0 g, o5 ~1 E  B( j  B
  858.     case 5:
    8 `9 W3 L" p: c3 B4 `
  859.       {1 i$ i& c( g* t8 A. k9 m
  860.         if(GetFileAttributes("Wsa.zip" )!=-1); i5 `4 _. A3 Y
  861.         {( {4 o. \& v: C$ j% Q' @1 B! L7 e6 y
  862.           int opt_overwrite=1;9 ]; g) i- z, x( W% L; \
  863.           int opt_do_extract_withoutpath=0;
    % Q  J7 y' I. H6 \
  864.           unzFile uf=NULL;  k- ]9 |) ]: L: @* L8 r, @
  865. 8 w6 V3 P! N( \6 k) h4 t
  866.           uf=unzOpen("Wsa.zip");' U1 t# Q3 {, H8 M
  867.           if(uf); v, p0 T' V% r9 M" h' K$ C2 Y
  868.           {4 K- |& x5 @2 Y! W" L$ n
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 |$ n( x9 [* P
  870.             unzClose(uf);
    " q: o  W1 }9 }0 g, }
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ( `0 I" s, W9 k4 S% V
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* D4 d+ [5 i/ y& c0 Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    / b: Z% n2 ]5 W% B* ]
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ d. `9 i3 H* Z8 C- I* D. c' D
  875.           }  N$ }" i* p1 w6 i
  876.           DeleteFile("Wsa.zip" );
    1 b) E9 C& [. Q" {3 _
  877.         }+ E/ b7 S) J6 @3 [. m5 b

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

" {+ {9 a1 B* p# K

評分

參與人數 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, 2025-12-12 13:40

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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