找回密碼
 立即注册

CSUpdate.exe源代码

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

: W2 n# \0 ], F* j4 I
  1. / RevApp.cpp : Defines the class behaviors for the application.; w$ b( R* \2 {
  2. //
    + |( I2 T0 d2 H2 n3 K  ~) D1 J

  3. % ?- |" K8 b: l5 D9 B
  4. #include "stdafx.h"$ R% M4 G" l* P- N

  5. + I# C1 Z* O" b* Z% O. t
  6. //#define UNICODE
    6 g) m3 u7 B- N4 p2 ~
  7. //#include <gdiplus.h># [2 O8 I9 x: W) ?- d. Q
  8. //using namespace Gdiplus;; u  `- `6 r' B* E0 C8 S/ o. {) b

  9. 2 G! H  A& |; M5 `2 h4 }
  10. #include "RevApp.h"4 @* [5 v  L6 }5 _) m
  11. #include "RevAppDlg.h"- Z2 _+ l6 i6 T, Y
  12. 8 C, `" i* @0 T& E+ A
  13. #pragma warning(disable:4786)- M6 O6 Q9 W; J1 U
  14. #include <map>1 w6 C" V9 G! U8 Q; \
  15. #include <list>
    ; K; c5 ]4 X+ t. f8 q
  16. #include <direct.h># N& @* E$ g/ N* W4 H8 N
  17. ! e7 n" c/ E+ l! L  j2 T  N) x9 S$ Q
  18. #ifdef _DEBUG
    # [! D1 e' X* P' ~0 G' ?5 {
  19. #define new DEBUG_NEW
    # x! E: \. x2 W, l0 o3 A
  20. #undef THIS_FILE+ {4 \9 K. z) V$ y
  21. static char THIS_FILE[] = __FILE__;$ c& p  Y6 }% q6 L
  22. #endif
    , l' |$ K' W* _8 Y
  23. #include "SkinResDef.h"% F( L8 {' |1 V7 K7 R
  24. #include "ChangeBG.h"
    ) q1 s; [3 l: g
  25. #include "AFXINET.H"$ ], x  [1 E6 @* k7 T# `
  26. ; i9 p' c# g' T
  27. #define TRADITIONAL_CHINESE 0
    $ g; A3 G; N8 Y0 `' G/ _8 z1 L
  28. #define SIMPLIFY_CHINESE 19 P$ ~0 d( e$ e% h# f
  29. #define ENGLISH 26 x) |. f7 F6 k8 Y/ W
  30. int m_iLanguage = ENGLISH;3 C+ q$ a7 Y5 e& ]4 ?
  31. /////////////////////////////////////////////////////////////////////////////
    & g4 @8 l1 `' \$ N7 X" ]
  32. // CRevAppApp& g* k: x0 c* O) |" q3 k
  33. # p9 q, I. m: `$ Z2 Q% [6 c" o0 V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    * f( ?, d( N% D8 M; i4 F
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 h$ C" C5 g8 j0 b- c- p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here./ p7 N; T- q9 p! G* ?4 d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!/ |8 Y% x* L4 a6 m+ @( {
  38.         //}}AFX_MSG
    * X- f% h4 i; S( s/ R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    2 |, [# ^% @9 J) ~! s. W
  40. END_MESSAGE_MAP()
    2 U. O- v  A* t- N( E

  41. ) P+ K  m/ c0 ]) ~
  42. /////////////////////////////////////////////////////////////////////////////+ a# H, d9 F( M  v
  43. // CRevAppApp construction
    . N0 V* d; H  m

  44. 3 y# W+ V9 l, z) h2 m+ f2 ]
  45. CRevAppApp::CRevAppApp(); w- ]+ z+ {* V
  46. {* L" B1 Q3 g) D5 F/ k; E: T
  47.         // TODO: add construction code here,
    ! q, k7 g2 U7 p5 g5 I- H; V( ~
  48.         // Place all significant initialization in InitInstance
    8 `3 |! \! Y! ^6 ~3 U& G% {+ w8 A
  49.   bDisplayIsBig5=FALSE;7 R* s$ Z" i2 ~' M) n% L8 h0 {
  50.   bRestartUpdater=FALSE;1 z: _3 B0 G  f
  51.   bFinishUpdated=FALSE;$ D5 \  d! {+ |- m! v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * }: b/ m! E, u7 ?  E  `5 @
  53.   InitChangeDataBig52GBKS();
    ; R" f, \+ f7 q) \
  54.   InitChangeDataGBKS2Big5();
      S8 r; Y: {) r
  55.         //8 a7 B3 }4 a7 K! ?7 Q3 c3 B
  56.         bClickRunExe = FALSE;) }& k1 l" W) h% h; K6 }. w7 Q
  57.         //
    1 g  ?' m  q# k0 c: ^. x6 C
  58. }6 R4 t: E; Y) e/ _

  59.   Q! I- t1 e5 u6 A8 L1 c* Q
  60. CRevAppApp::~CRevAppApp()* I+ }' ?4 ^; ]8 S, B
  61. {
    3 e9 m0 r6 Z5 v( {6 {% Y) U/ l
  62.         // TODO: add construction code here,
    / I; m& u& N5 _
  63.         // Place all significant initialization in InitInstance
    2 {, T# ?9 J1 H  z! Z# G
  64.   EndChangeData();$ |+ }* t  p6 u7 a6 b0 |
  65. }
    : D3 a2 _; g8 E

  66. 5 V8 ?2 [& _4 A/ O: [9 I/ M
  67. /////////////////////////////////////////////////////////////////////////////3 I9 k* q; y* |- d" d, u/ K8 E
  68. // The one and only CRevAppApp object
    3 D8 W8 w9 q" Y7 p

  69. ) h2 k9 p8 l7 F* Z0 X. M% ^; H
  70. CRevAppApp theApp;& w0 c, F1 Z& H2 w2 m
  71. 4 ?+ z- W; d7 y; A$ W8 A
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) I6 ^+ l3 R2 D# h$ M$ M8 y9 N* J* k
  73. {& }+ ?  p2 S) a9 j8 v8 d5 `
  74.   int iEOF=0;6 v6 Z2 Y. M* O# @0 |: i
  75.   char szTempName[MAX_PATH];
    2 ~- o/ u# |1 [, c
  76.   *szFileName=0;
    0 d+ F5 C1 G+ E/ s: ^  ~, P4 W
  77.   iEOF=fscanf(fp,"%s",szTempName);( h* q* Z- O  g- L, I9 s  \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # d6 ~0 b5 g) z' q0 H: z3 H" u3 R
  79.   {1 P) x, m7 {( q4 i. I
  80.     strcpy(szFileName,&szTempName[1]);" `% V7 y" ?0 ?
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)3 ~3 w7 {  U# {: F' n% q+ O
  82.     {" e2 K' C/ Q0 d2 F$ \. n
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % P5 m1 @) l* N
  84.       strcat(szFileName," ");1 p2 d# D/ x6 D$ Y, V& Z
  85.       strcat(szFileName,szTempName);
    ; _3 T; F' {; |4 _! m# e
  86.     }2 |# s% q/ H# b: A
  87.     if(strlen(szFileName)>=1)
    # `, z. o! n, E! y) p( d$ P6 P
  88.     {
    ) Z" ]9 g5 i( x9 s
  89.       szFileName[strlen(szFileName)-1]=0;
    8 }7 W$ r  J# s( T5 Y9 P
  90.     }
    6 z: _7 t1 p9 @, B* Q( B, @
  91.   }% I# t& G# S. v: y) F
  92.   return szFileName;
    1 z- g4 A0 y' L0 L
  93. }
    ' m1 d' M1 }' [9 y. I8 E
  94. : q8 m) s, k6 n* }4 R
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 ~& O1 j6 i2 L  d2 y' A, g) I: o
  96. {
    $ u: a; [: J0 {) g! e" V5 o# v
  97.   FILE *fp;
      m: R/ {2 W- N1 w  Y. S3 X  H
  98.   char *key=NULL;
    ) ^( f$ ?4 h5 e2 m% N' R9 T
  99.   char version[MAX_PATH];& u! |' D- e8 _$ k/ W
  100.   LPUPDATEFILE file,olds;
    % y5 W5 F4 f* j9 y- a$ e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;5 W; J( f0 v/ W% u

  102. + Y" G7 e9 L' R1 M  U
  103.   UpdateList.clear();
    6 Y5 e; _: r; u* m+ T+ S
  104.   UpdateFile.clear();
    : b% K- Y2 H/ P% D! N8 g% ^: s/ G
  105.   if(GetFileAttributes(filename)==-1) return false;- o" s2 D- w4 g& ]) Z
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( O4 u9 B. ^* C1 m6 b5 A! t2 N
  107.   fscanf(fp,"%s",version);/ g4 t2 s6 A% X2 j8 e% a" b4 l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 y& S/ Y7 L* }, z, f3 n9 v  H
  109.   while(fscanf(fp,"%s",version)!=EOF)' _% }, S( m( R/ U: o0 M& g
  110.   {
    8 r" U" m/ P3 m& w% L
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 x/ p# n- N& ?* n
  112.     fscanf(fp,"%s",file->path);* M: x& [; a. g
  113.     ReadFileNames(fp,file->file);$ j, z7 C) C6 N5 Z" C* s, \9 R0 L3 Z
  114.     strcpy(file->full,".");9 {* n2 k" c. X  Z/ e
  115.     strcat(file->full,file->path);
    8 J9 [- `, n4 I
  116.     strcat(file->full,file->file);3 p$ M. N+ L- {- p. i. K
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). o: D7 z, d2 ~& i: @
  118.     {  g& B- N% V$ B- K, `/ F
  119.       file->vers=(float)atof(version);
    5 ]6 V2 Q" t/ j  _8 v: _( q3 G! i( D
  120.       UpdateList.push_back(file->full);
    + v0 r+ m0 N; a1 h8 x9 T& L0 w
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% `: E& g6 V& H# P
  122.     }
    1 C0 ~; B3 K# X) j  N, \) i
  123.     else  A' R$ h9 f2 |2 O# H4 b
  124.     {, ~1 H, g+ a& F2 o- @* Z9 T+ j
  125.       olds=(*p).second;& y$ u- E& y; `
  126.       if(olds->vers<(float)atof(version)): a; a6 {2 Q5 P. f$ Y% b+ b$ _- F
  127.       {$ ?% p& Q' T; j& d9 q) O3 L( H
  128.         olds->vers=(float)atof(version);
    ! D5 ]; S6 G/ k; f
  129.       }
    & a& W0 K8 T" Q8 H
  130.       free(file);
    - A7 ~+ \+ Y0 n0 S
  131.     }
    & `) }9 w: s5 s. C
  132.   }
    % }0 Y5 u! ~4 R* Z/ X+ l# p  h
  133.   fclose(fp);3 p6 d1 x6 q% a$ L! Y
  134.   return true;
    + U7 Z; m8 U, ^: h+ k/ S. _9 ?
  135. }5 M$ i* J% W, Y

  136. ) \& C9 K: D7 ^, n! E# R! ~9 n( u  W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)4 p- L- @& o5 A; F
  138. {
    5 W( z0 l3 h- d9 o: d! l
  139.   TCHAR  szFull[MAX_PATH];
    . ~8 `8 n, E' P; K7 L# E
  140.   TCHAR *token,*inter;/ K* u/ E1 m1 }2 {% R
  141.   *szPath=0;
    6 U+ v- G9 I! t0 t& h* h
  142.   strcpy(szFull,szFullPath);4 w4 V2 A, V( N6 f
  143.   token=strtok(szFull,"\\/");1 _7 H+ q) Q8 n/ G
  144.   inter=token;7 m" e8 G+ N# }% Z
  145.   while(token=strtok(NULL,"\\/"))
    0 B2 V7 p) ^  h% N4 b" O& c
  146.   {
    - ]) ]8 Q4 l" c6 I5 h. M+ K
  147.     strcat(szPath,inter);( e6 l9 I: F; M, A
  148.     strcat(szPath,"\");
    % b9 H6 y4 P; P1 M2 X- C
  149.     inter=token;" q; l0 b8 d7 \+ R7 M8 d
  150.   }
    * t: D1 B0 [9 @" h: ?, g7 ~
  151.   return strlen(szPath);9 u9 @& w0 S. C% V/ X
  152. }
    / p5 S9 ~6 q/ b  H$ o$ K* m3 X1 Q

  153. 0 k8 @0 y9 |6 W- ~9 R) Y* t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% X8 n& n4 _2 X- V& N/ q. m* V  ?
  155. {( M6 b) x( l/ U5 C8 t
  156.   DWORD attrib=GetFileAttributes(Target);
    4 p6 N% [8 S8 V8 r5 P
  157.   if(attrib!=-1)9 I/ A5 ]! T0 U! L. c* E
  158.   {7 R' z4 `6 B  o
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    " D1 X- f! @# G* t
  160.     {
    0 m8 S" ?# e4 N6 {
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);& T3 e1 h4 d1 l( {& y+ g
  162.       SetFileAttributes(Target,attrib);" d1 ]1 [) I5 M. e
  163.     }
    + D- D7 @9 z  W' r( F
  164.   }" u2 m2 r, m3 [
  165.   CopyFile(Source,Target,Erase);
    4 N+ W- H6 `: S5 O, v
  166. }
    3 A5 n" C5 o+ F/ I

  167. " L. \5 e7 T, G; Z' W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 b+ X7 r+ W8 k& K$ Q
  169. {
    : }- }8 _; K0 A: \$ M
  170.      FILE *fp;# ~- ]# H; {8 j8 u8 C
  171.      char  szBuffer[8192];
    8 w  P5 H, @! P" i) ~# {; e* r( h
  172.   va_list  argptr;# ^0 M  a$ m+ l

  173. $ q% e5 {" z4 [2 G) }5 M
  174.         va_start(argptr,message);9 s/ _# T" a: z0 K
  175.         vsprintf(szBuffer,message,argptr);/ d. k! T* ?0 l+ E
  176.         va_end(argptr);3 N7 N0 _. z1 D# m
  177.   fp=fopen(FileName,"a");
    7 a) O0 j& o# c
  178.   if(fp)
    , m- m9 U$ q5 |5 y& t
  179.   {. e$ p2 Q# h' f+ y! I
  180.     fprintf(fp,szBuffer);& R$ ~$ C" V8 }
  181.     fclose(fp);
    , m: e, H5 h& K- u
  182.           _flushall();
      W( ~4 W: ?1 G
  183.   }
    , X+ h: I' \7 c2 c" Y, r& n
  184. }
    3 ]8 v( K& ?/ [# P& `+ O8 E
  185. % ~" }7 e& J  Y. f% ?. s* b
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . t6 P3 M5 Y+ l3 M: [
  187. {
    2 I& Q+ k. Q% V
  188.      FILE *fp;$ l4 M) |5 ^3 c$ w5 D
  189.     DWORD  attrib;" p/ L4 }  \1 j# _% {/ [2 p
  190.   attrib=GetFileAttributes(FileName);! T0 F) v. ~' r4 Y. ^' s! X, y
  191.   if(attrib!=-1)
    / X6 c. Z7 w1 ~& `" Y
  192.   {8 B1 l; n4 N" p, ?
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    , A2 [7 E7 d7 t- @) |* g, C7 N- I
  194.     if(!SetFileAttributes(FileName,attrib))
    . @! k) y/ g4 T! \" L' e) D
  195.     {) S* [6 l" v  B  H8 d
  196.       return FALSE;- l8 w2 I% ~8 R; G# o; w. R( v
  197.     }, f1 T& B1 @5 x( F+ X
  198.   }+ ~" e4 ?% M+ N
  199.   fp=fopen(FileName,"wb");
    # B- G$ X% U) ^3 i8 H+ n% n
  200.   if(fp)
    , w1 r: H3 s, r% I- v
  201.   {$ A1 I. O: p" K9 z
  202.     fclose(fp);
    3 [! q( _6 r. b8 {( T
  203.   }: S1 }4 z# S$ p) O/ @+ \9 L
  204.   return TRUE;
    $ c. s/ X. Y! W# p5 R% p: H; Y
  205. }9 U  T6 `" @  t. }6 c8 m" e* h# {

  206. - O7 j6 J- T4 `. m6 k+ ]- \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 J7 a) J# s& Z. a( e9 t- W
  208. {( R1 g+ B) s/ \% r9 S. u3 q
  209.   char filename[MAX_PATH];: V2 e1 B1 v3 [6 q2 M
  210.   LPUPDATEFILE file,olds;
      u4 R4 z- O0 y8 ]: Q
  211.   std::map<int,CString>::iterator i;8 m0 n9 Q$ r, w# d* n3 T; y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;- N7 M  T- D' Y
  213.   std::list<CString>::iterator l;
    9 L1 T& |8 ?- W. E# S/ I- U( l% t/ ~

  214. ; B5 o3 [- G# f+ `2 I& ~# ^
  215.   if(bFirstUpdate)/ b$ l9 V: p- `
  216.   {
    2 X2 u/ i% i( @
  217.     dwCurrFile=0;
    . h/ _8 `% V" I6 L& q
  218.     bFirstUpdate=FALSE;- N1 p& }/ }5 v( u5 q8 n+ w, [
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ K0 U8 P  G, z1 C2 H, I7 i: t5 [
  220.     {+ t; E* X/ O* {  T4 P' R
  221.       dwTotalFiles=UpdateLocal.size();2 D5 A& g! M1 s: M1 R. B5 J
  222.       dwDownLoaded=0;4 r9 }# a2 a* ~, k0 t
  223.       bSilentStep=FALSE;5 n5 I  d( E  X9 ^9 a- Z3 _9 S
  224.       bCompressed=TRUE;  x6 ?$ K1 e, z1 k/ C
  225.       strExtLocal.Empty();
    * [' P$ ~+ m- E7 B" @
  226.       strFullName=(*i).second;
    % v  D/ b+ s: N. ^5 a
  227.       dwProgramState=AP_CONNECT;: t, b  c1 S1 S4 v/ [5 k
  228.       return TRUE;* F5 b  q5 ~. |) m( n
  229.     }
    3 C- D9 j/ a" n! W* N: K/ S
  230.   }5 ^" z, }, F; ^3 m; h8 m! f2 ?* }
  231.   else if(bRestartUpdater==FALSE): |6 x4 p) s: i& m
  232.   {7 v0 `# D% x' S" b7 p( R1 t3 x
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " \  \8 s& F/ u0 D
  234.     {
    $ s2 q" o1 N* A) X! X5 [  M. P
  235.       file=(*p).second;1 l: w: H$ k" H) M4 x" \0 [: H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# y. T: X2 h4 W2 M
  237.       {
    : Z4 M: `2 J& V6 {- R7 \3 s
  238.         olds=(*p).second;# e4 `+ Y5 P( ^6 ]
  239.         olds->vers=file->vers;  _, |! n! x1 p6 U5 o
  240.       }5 f6 g) f9 J/ S8 S
  241.       else; \6 w; j' P' R" a: A) q4 [
  242.       {
    - v) B1 e& o9 ~! w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! A; n  o: N3 n: t4 h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    2 h0 v8 x* x5 w# q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : g( |1 I& W/ ?  l0 }2 |2 q+ \3 [
  246.       }! |* q4 L, G# `  D
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" G! a5 Z( J" p: i2 M
  248.       sprintf(filename,"(%s)",file->file);" ^/ O3 h4 q% x4 ?" ^0 r* s
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 |1 ?, u. ^5 @$ J2 W5 M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ i3 F5 ]6 Z# p
  251.     }4 D2 X8 U& _, x0 W3 |  m; d; H
  252.     dwCurrFile++;) d. D; D$ g: a( @( i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 ?* G* v- Z) X) \0 z
  254.     {
    / g  E6 D) n: `# _$ R4 V  M
  255.       bSilentStep=FALSE;
    , B0 D) W" T5 u% v$ m" j4 i
  256.       bCompressed=TRUE;
    9 j& J6 j! q3 ]8 _% r) j
  257.       strExtLocal.Empty();6 G/ a  G& x" w2 O. b
  258.       strFullName=(*i).second;5 T: \1 \. S: W& B
  259.       dwProgramState=AP_CONNECT;6 x) x6 M- M& t
  260.       return TRUE;, E9 W9 W7 Z, g9 @. ^
  261.     }5 o, Z/ c9 k( Q
  262.     if(!bRestartUpdater)# H. v* F' c* V" @; w. r/ _, {" G
  263.     {! [8 R5 \& R' I( s4 c
  264.       int iCurrSize,iFileSize;
    & ?3 j% E3 L3 |- n) U8 X
  265.       iCurrSize=0;4 k9 V0 ?' z- x1 s8 l# e0 D( V
  266.       iFileSize=UpdateList2.size();* n+ {: W. r2 X. ?8 I% ]: u2 E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");7 k) E; C: G- [3 K: `# F3 h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . |* m( C% G( U! z% J
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% c) O! C) g: O, N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      V+ X, B6 |3 m: F1 R
  271.       Fclearf(".\\update.dat");9 O. w# {. B; k1 u4 f# N
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 ^9 Z2 R' H8 W2 a7 {5 Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / l. a% @$ z) d2 o
  274.       {
    + e( @; k5 c2 A1 _% j8 A. N
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      C( ]0 i- U8 i) @1 y6 T
  276.         {
    : K. M- f5 h6 c5 i( ^2 S- Y
  277.           file=(*p).second;
    4 V, }7 a$ r0 q% h3 q
  278.           sprintf(filename,"(%s)",file->file);
    ( [' `0 d' J; R# B; c/ @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 R8 S7 ~0 w) n( r* k
  280.           iCurrSize++;+ z$ B: [" @* p3 t
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 m: b# a% }% n+ s/ O6 |
  282.         }& Z8 }, y0 u) @" R! }
  283.       }  ]! ^( m5 B$ F
  284.       unlink(".\\update.txt");
    ; Q" H7 e6 G2 Q% {' \, u
  285.       unlink(".\\update.tmp");
    ( ~9 d% h! @9 M* R) I( o
  286.       Fclearf(".\\checkversion.dat");
    + [! R+ s' ]6 N3 @
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 E4 K6 ]* o8 R: j1 H: ^
  288.       if(UpdateLocal.size())6 |) d; Y' c% M& h9 G* l0 B
  289.       {
    + O$ s4 B0 p4 N8 f7 m
  290.         UpdateLocal.clear();
    ' o, h: P# Y& q
  291.       }- s2 i0 x' a1 ^  L/ ^
  292.       if(UpdateFile3.size())( O* k; v. W- N2 x
  293.       {
    2 O. W- _' _; m: m7 A" X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 C2 I* o' l1 H- x* \6 b" V/ Y
  295.         {7 P) x1 y) P# B7 y& C& `/ i0 m
  296.           file=(*p).second;0 G" D0 H& @0 v' @% W
  297.           free(file);
    ; }' V: Y/ t/ O/ `1 q4 I
  298.         }. Z" b( H  m1 _2 V
  299.         UpdateFile3.clear();
    & E7 |( s/ S, L" H6 K
  300.         UpdateList3.clear();! q/ W9 ?9 D# f( k/ l$ i" {7 x0 [
  301.       }4 M, b' g- s% H' a1 R- c
  302.       if(UpdateFile2.size())* z; e2 C/ r+ V. U% h  [
  303.       {. S3 s  k2 e- T' d/ _7 Q; }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( ^9 Q0 ^& R' C
  305.         {
    " Z2 M& |) V0 W. E( w% s# W
  306.           file=(*p).second;) r$ y/ ?4 k2 k9 Y# d  U/ P1 f
  307.           free(file);  |. v2 n) v- E0 e, T9 X+ H% y( Y, B
  308.         }
    % ]" a* Z2 z* P. M$ i+ B2 k) w
  309.         UpdateFile2.clear();
    : H9 d/ Y1 `( {+ `/ [0 \$ P
  310.         UpdateList2.clear();
    , m- k# c  `- J1 t7 L/ R) K
  311.       }, C! b$ U. m& Y) t- _, P
  312.       if(UpdateFile1.size())1 z8 n3 I* w6 c' p9 L% X
  313.       {
    1 O( i/ j6 N. G, A* ]* O9 j, M) @3 `
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # n8 U2 Z- M; q8 n
  315.         {  R& u* ^8 q% t9 n$ \3 G
  316.           file=(*p).second;0 {4 Q( y& i( m% n. E9 \9 M1 m
  317.           free(file);1 s: y0 b- o. w9 z
  318.         }
    : N+ H8 W* ]6 a: L
  319.         UpdateFile1.clear();
    4 f' a' L4 L/ J. ^
  320.         UpdateList1.clear();
    2 |# s7 j) `  d8 S) O2 |
  321.       }$ x; i1 y: ^1 x6 j! Q6 g
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! F! G2 t# L' o! E* J& V9 _* T
  323.     }5 u, R" @- s+ X2 R- s
  324.   }
    7 {4 e" V! d& H; S6 H3 R' s
  325.   return FALSE;  [) e% I, o1 \. k
  326. }
    2 q' O8 @3 n- [- S  o! f3 t9 e/ ?
  327. & M$ }/ a1 k# @
  328. void CRevAppApp::ClearAll(void)# t  i  t% E( [0 P0 L5 p* D0 K
  329. {" q' S% D# t$ n! H
  330.   LPUPDATEFILE file;
    $ h9 ]( H( h2 Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 ~  X) G. z) J  o

  332. . T5 J1 {, {' p. j# ]* i. M/ m8 U3 b
  333.   if(UpdateLocal.size())- n' J8 a4 p- {. Z+ c  @; S
  334.   {- e' {( @( A9 ~9 _1 h& z5 l. L
  335.     UpdateLocal.clear();
    5 ^& _) H# q& K0 q
  336.   }* D- W* E: b& F& R
  337.   if(UpdateFile3.size())
    4 m% H* G0 N, u& ~4 K* W3 N  u; Y
  338.   {7 R' m5 e6 x+ K8 ]9 K) z8 ?
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 f0 u0 P( p8 k8 D$ e
  340.     {
    ) ~; ^$ Z+ V* }9 Z( k  O
  341.       file=(*p).second;# b/ H' _. c- ^" x- P- F
  342.       free(file);
      }/ z1 f4 P' j3 x
  343.     }
    ' [* o7 T0 G. ^1 j1 p! q% X* s
  344.     UpdateFile3.clear();
    ' [! e1 T  K+ G* t
  345.     UpdateList3.clear();- `6 m- e7 O2 r. d* P" I- ?, X
  346.   }0 O2 G3 j9 T( j4 ~9 F0 }* {  r( o
  347.   if(UpdateFile2.size())
    9 l* q" W+ l- F- t
  348.   {
    - u% l0 }- F8 G; A4 u
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 R* w: Q7 W3 k5 C2 N9 V) x
  350.     {
    4 g3 m6 ^0 z  O' N' ~
  351.       file=(*p).second;, }) _) K" l' g( N0 o7 \( X
  352.       free(file);6 I  `- ~+ n7 l. ~
  353.     }, |9 _5 q8 q) d2 N
  354.     UpdateFile2.clear();
    1 G# ~; Y( m& L7 G
  355.     UpdateList2.clear();
    * z5 c$ I1 J3 P4 ^& ]5 I
  356.   }3 a2 C2 E6 s( M9 o- u  d0 g
  357.   if(UpdateFile1.size())
    2 T0 y- j/ t$ J; H" c) s
  358.   {  `* D( k# L3 b( b* j$ j9 f
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). w0 S% _3 k4 @- \% {
  360.     {
    / _9 B) d: q# h
  361.       file=(*p).second;# ]( O3 E3 b8 s  B) m8 v- Y" }+ }
  362.       free(file);$ d" V4 y* _% }3 x8 X  G1 @" p2 ~
  363.     }
    ! F4 I  A) {: g8 B% _) l: h) H
  364.     UpdateFile1.clear();
    $ n7 y1 H1 D- i
  365.     UpdateList1.clear();/ N' c6 I) n$ T. b
  366.   }/ N, w: E1 c4 e( R
  367. }  4 y) ]7 S( R+ n; y% k/ c7 ?
  368.   ! R. C# j) N, A7 ]! k4 J
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 X$ F, t1 W6 u3 D. w7 I1 L  S7 y
  370. {
    & i$ t& @' a* X( \. `! A
  371.   int c;7 I, L3 M: ?1 M1 `
  372.   LPUPDATEFILE file1,file2;, ^3 c; v2 b3 c. b7 i/ X2 ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;/ B8 g3 c# e7 W5 \
  374.   std::list<CString>::iterator l;0 |$ q+ x# L0 Y' d% k$ F& A
  375. 0 t0 `* \# u: b" A, f" Q" {) R
  376.   UpdateLocal.clear();3 A/ D' f  k* r* ^- x: G. p
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    9 _5 {3 h. k/ C  f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) @0 `' {3 C# p; W+ y) \$ Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);3 L8 i5 g( ]1 {! ]' b2 V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( W$ R' C: I8 Q* M! Q% p+ Z2 j
  381.   if(UpdateFile3.size()), E7 H" |+ h+ x& }8 X/ P9 @
  382.   {( ], @/ ~  u3 x! S6 Q% ~. |# [9 d# X
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / N* \- p1 e5 I( `
  384.     {, \3 D" ^  ^3 _. [  k* [
  385.       file2=(LPUPDATEFILE)(*i).second;; K. d; U$ g: p# h. Q/ y" p' c6 x
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 j. l: e9 M* S, _
  387.       {9 P4 b6 {3 ~  X6 Q9 k
  388.         file1=(LPUPDATEFILE)(*p).second;
    # q: k6 X$ ^+ C9 |2 `: U, c, C( a
  389.         file1->vers=file2->vers;
    5 l$ \% _$ s$ m- d$ B2 T
  390.       }
    . i0 V9 h8 ]' l# B+ |
  391.       else
    ' ]# }- l+ s: x% y- }! [/ `, w
  392.       {
    " R3 I) x7 |/ F" k; I5 i! A/ u
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 z5 F) h  y6 O% i1 b# r7 R, _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 G; k+ d0 m$ n6 ?5 y8 U
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 a  ~: P8 `- j2 }
  396.       }5 X# a, p9 U! z9 S* V: u* Z* f
  397.     }+ S4 M+ o- U5 ?0 T" I+ {% D" L
  398.   }
    0 U8 r$ G* r/ P5 j2 p6 Z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 P* _3 H) |  y
  400.   {
    3 _( n. b: L& `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 D2 x; P! l$ E$ m
  402.     {
    " g% J4 [0 q/ k
  403.       file2=(LPUPDATEFILE)(*i).second;; ~) Y5 G6 f: ?9 a$ [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) M% n1 T. H+ U- o9 i# U
  405.       {, |$ X( w8 S9 }- c8 A
  406.         file1=(LPUPDATEFILE)(*p).second;) M* K' v: L0 a
  407.         if(file1->vers!=file2->vers)$ P% f* K6 N* {+ J* h' U! _
  408.         {
      m  n$ b% b$ R% Y! g
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! V  ]1 y% Q/ e5 Y& U
  410.           c++;: B/ {( @6 s' E/ ^2 s3 |( n: q- O
  411.         }
    & e# a2 H0 K$ @2 c7 k& m+ y! }
  412.       }
    5 j4 Q5 q! z6 _1 z
  413.       else  b& U9 r- k5 e4 {
  414.       {. s( K/ k$ D- Y% P# J- E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, a: S; V& K4 K9 d% A
  416.         c++;( h4 J+ \2 V$ U+ g; G) l
  417.       }( k# ~6 x7 q- k* l" t6 V
  418.     }1 D  @5 f' A" s2 N
  419.   }
    3 {& L( s0 x5 E. D+ G, w7 _
  420.   unlink(".\\DownLoad\\update.txt");/ m7 D4 b6 B) @& N7 `
  421.   if(UpdateLocal.size()) return TRUE;
    " S4 T: f" H, i' B
  422.   else                   return FALSE;( X: f! U6 d4 ^, T
  423. }
    % k/ @1 X* w, Q3 \

  424. ) t7 a) A- R. Y- l6 [) }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    6 C( s2 w8 w' m( Q, ]& O
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( ?2 I  w. }: l
  427. 1 x- f; l! G" Z- Y% `

  428. & z8 g: f# p9 z, Y
  429. 0 X" y' C5 A) Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 i8 e) ^& H3 V) f1 j
  431. {8 _7 m, t: E1 P
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 D! N* j7 \6 `' P( ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 A4 E' U* R3 v2 m  S7 a
  434.   {9 i7 R+ B. K4 a/ m* [6 J4 a
  435.     char szLanguage[50];! k4 n5 z5 \7 @% J! w$ N
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, K2 O% M4 Q; R) F/ _* d0 D
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . [# j( ~% ]: `& `; I- y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & R6 o$ t3 T4 j3 X) N8 Y9 O; j
  439.     else                                   m_iLanguage=ENGLISH;) A, A  Q1 E' [) G. T
  440.     char szRegister[100];
    ; ]6 \: G) u$ f1 G9 n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 a  d9 ~) O6 s3 R" r! |6 \! {
  442.     strRegsName=szRegister;* b+ a+ x" M: T. [
  443.     char szPatchURL[100];
    . T8 h2 _8 S3 r3 O* ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");- f9 H3 d* g& M( m8 Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 ]; O8 I% Y4 O, m. H4 b% n
  446.   }
    2 p- [# u+ Y" g
  447.   else  y3 L5 w/ M: P
  448.   {
    ' n' i' T. e) t) w, F4 m
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 R0 O* C; b: C# k+ c* b
  450.     strRegsName=DEFAULT_REG_URL;# y4 e0 B2 B5 U9 Q3 b4 I  u( O$ G- s
  451.   }
    4 I- [% z& v/ H# D5 K
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * H% Y4 a! f7 r2 a
  453.   {
    % E% A# [7 b* [5 x( x
  454.     char szIP[50];1 S, p$ K8 F- K/ h0 B+ R6 J
  455.     char szDIR[300];. {' K9 _& p: z0 C4 G1 s+ u: I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    0 L" d: X- i, u
  457.     {
    ) G. q+ N' _5 t7 s5 E% T
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; [+ J( B2 j) L- Y7 @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: N  u' y8 D0 w3 P6 r! x2 O1 N, T6 b
  460.       strHostName=szIP;
    ; \4 ^+ Z# W/ b4 E' R: N; |! l) B
  461.       strHostPath.Format("/%s",szDIR);
    ; w- i4 U7 S" ]+ s
  462.     }' H8 P; O* t8 _4 D  L* ]' b
  463.     else3 S- s7 C7 W6 A8 O* V
  464.     {4 P% [, |$ W/ @4 p* U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 T) q6 N* e! n* m; H# _
  466.       {5 a" P5 s3 J9 K) x2 ?. @
  467.         char szLanguage[50];& l( P# y7 W( g  \# Y6 V
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % S1 T% x9 b7 p/ }; H
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% g& O5 S$ p, w2 l3 Z2 e  p
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- z1 g) Q9 V) [2 R& v+ N5 N
  471.         else                                   m_iLanguage=ENGLISH;) o" f, M2 `2 c  O1 O! Q3 ^
  472.         char szRegister[100];1 g3 I) M4 o* h& A# D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 b7 [* `# v# o. w" b
  474.         strRegsName=szRegister;
    / H2 {% R# v/ s, }# [& J
  475.         char szPatchURL[100];
    5 J% d* X. Z$ L
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( s1 l& T/ f3 u4 d1 m/ v5 h, j( D- q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 a: m) U0 l; [
  478.       }
    ( T6 _  {; M* }$ g* m
  479.       else
    + ]3 ?6 P2 y' H" [, X
  480.       {
    . }) p8 a  r% T( b$ b& A5 `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 i3 m) r& z/ z  k1 }
  482.         strRegsName=DEFAULT_REG_URL;3 {7 @8 u# r9 j; l/ W& v4 c' z
  483.       }
    - A8 Y& q+ W# G# }1 E6 w* Q1 f' Z$ w
  484.     }6 O, `, W$ T& d* o+ v# Q' N! }
  485.   }1 F' C. z) G7 [  C6 t9 U: j  t
  486.   return true;4 s; j# o3 @" M1 r& I: q+ e
  487. }
    5 R7 c- V9 [; X7 c
  488. ( q3 r. E1 S; W9 b; X6 c
  489. #include ".\ZLib\unzip.h"& r/ H: Z; P7 O' {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 ~6 q6 k( _$ Y/ I$ Z& }# E
  491. /////////////////////////////////////////////////////////////////////////////3 }$ B; v: u& _% }' c! s, j+ _
  492. // CRevAppApp initialization( O# C$ M( \! r
  493. . i+ k1 X  t/ ?6 P, @1 `$ C
  494. BOOL CRevAppApp::InitInstance()
    7 D% J, F$ K! n3 j7 o1 |
  495. {
    / }5 e$ b4 P& F6 L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( N: _, V1 Z( s: I: _

  497. : d4 g/ ^' Y! j6 R% }8 V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ V8 }; Z$ B1 |( V2 F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ x  o" D9 b! a4 ~
  500.   {
    4 {9 F* r6 i* Z) `9 G* l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * p/ l1 B3 _% s4 J' B
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    9 Q$ @, l& D3 H) U: U3 a1 n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))0 E! r+ S$ c% y% @2 C
  504.     {
    , K- e3 l1 g/ p
  505.       strcpy(szPath,szPathTarget);" d2 E9 t8 Y& ?' K
  506.       SetCurrentDirectory(szPath);/ k. |# p" `( r* ~9 P' \. S
  507.     }
    0 p2 U- Q* c0 I) Z  R4 V. o2 R
  508.   }
    7 ~! @& q* p! }6 |& d
  509. #ifdef _DEBUG; p5 e3 Y. b- o% A; X2 e
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " h! s4 B$ I. L5 t
  511. #else
    ) K& ]* E# T3 X' O1 u  y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , R7 i% b( ~2 G' i8 o* }1 z
  513. #endif
    3 K/ b1 B% n; z: @% k
  514.   {
    7 p6 B3 E+ \- y/ o
  515.     char tempFileName[MAX_PATH];" \8 b& _( C( C7 o
  516.     strcpy(tempFileName,szPathSource);9 V- a6 r! a2 {: R& w
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 l" S  \9 E  G8 c. r+ W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 O, K& p* ]! G- d/ r: w/ j
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    $ K7 O; {) \* f2 B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 I- c" d) F* G, t2 L$ Y: J
  521.     return TRUE;
    3 z2 y0 c, ]5 }3 ]/ y" p- G
  522.   }
      l8 |. h3 L9 t9 b& o7 T
  523.   // Nuke 0118: Delete run.exe; J" `8 L7 `$ W3 L- A2 P3 @
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; E: d; V2 y5 m# R
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 g( M1 c, L& P, B* u
  526.   if(!ReadCfgFile("Config.ini"))
    ) i6 M3 H# ^( y5 v% ?/ ]
  527.   {
    6 `, K. v$ V+ i/ z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 R& N8 s: N6 |& `0 G9 r- }
  529.     return TRUE;, M& Q& k. S( W. g1 N( q/ P
  530.   }- ~3 U% G* o1 P2 S
  531.   HANDLE mutex;. H: v1 k% O- p, p, V9 }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ V' d0 {2 {) _. O) k
  533.   {
    . K# S, N3 x- o7 h' c
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 j" t) L$ _5 k0 m+ I
  535.     {! ~' W8 J, \2 `/ J6 G' b  p
  536.       CloseHandle(mutex);% w( ~% f! x9 o$ i! Q
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " F' B) X" x" |. s2 z+ q: u
  538.       return TRUE;
    $ ]" T3 z2 c6 s9 v/ {8 N
  539.     }, B6 o( s) o( ]! Q+ H9 F
  540.   }  1 y* H7 Z9 ]/ A; a# w5 ]( T
  541.   CloseHandle(mutex);
    & w# [5 \. q; d2 p# @

  542.   t( m. D4 Z8 w0 a7 I& R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% f* D& ]7 l& i+ r

  544. 2 `+ O# f. H6 @
  545.         AfxEnableControlContainer();
      ]% x( [' K. \( b4 c6 c& d
  546. 5 Q# |0 o* M& j
  547.   bCanUpdate=FALSE;
    # I: Y0 v8 Q: V2 m
  548.   dwStartUpSteps=1;
    5 y! K7 p+ d0 G' b+ x
  549.   dwProgramState=AP_NOTHING;1 G5 X6 r2 z% {3 K: Y( H. h7 R

  550. 8 A# @/ j' s# X5 H! M, n% p
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    0 }; `+ {, L3 t; P9 ?3 l) A6 g

  552. " Z! I. P5 x/ _5 R* x$ D9 T
  553.         // Standard initialization8 [( \  r* b+ U) ?
  554.         // If you are not using these features and wish to reduce the size  ]- x( N  z* C5 A
  555.         //  of your final executable, you should remove from the following: ?  ]4 o" T+ g6 v% l0 v( M
  556.         //  the specific initialization routines you do not need.  K! k6 E- m' v- |/ p

  557. ( r5 f/ t0 N) {5 m4 f
  558. #ifdef _AFXDLL- O/ i2 U$ k2 ?" M. c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % Y2 T3 m- Y1 i  R- ?# K  N
  560. #else
    7 K  \" R/ b' D& q+ o( ]
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically1 V) I7 x7 r- Y8 O$ w; f
  562. #endif
    ) f0 n% t! W) u$ m. C  H
  563. * L3 S) t& l: m3 N7 c9 p& s' v- T* R! `
  564.   dlg=new CRevAppDlg;
    3 ?0 c* x/ d2 |3 ]6 c+ c; c$ S" Y9 x- Z
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 `8 E( M+ F( e9 F# M) ?) t$ q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);! N: z3 {/ r' L. V9 A
  567.   m_pMainWnd=dlg;
    : t0 F2 E7 M; n. Q2 e9 \
  568. 3 i  h  o* X# {) }% t- ]$ J: N
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( i+ O5 r" {8 W' @7 w9 n4 v
  570. 4 d3 C! x2 c# N7 r8 I
  571. //  GdiplusStartupInput gdiplusStartupInput;
    $ e7 c3 e# E( u4 r/ N
  572. //  ULONG_PTR gdiplusToken;$ \4 i: p2 H4 k  F
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 A! a3 A$ J& p" y- I0 @5 Y# U0 p
  574. 8 h8 P! n5 h4 v- R! \" a+ r
  575. //        CRevAppDlg dlg;
    ) I% z  I2 U7 r
  576. //        int nResponse = dlg.DoModal();; Q: E! @% B3 f0 \2 P6 d5 I
  577. //        if (nResponse == IDOK)
    ; G( ^. F( o7 O  Q2 Q" T
  578. //        {. i$ I6 x! k9 h- Q& c" j. b0 k
  579. //                // TODO: Place code here to handle when the dialog is7 P$ a% P) ?7 d# r3 p
  580. //                //  dismissed with OK
    $ B  ~% j6 n- m( [9 G3 I" y3 e
  581. //        }
    ; V  h2 f. d- e
  582. //        else if (nResponse == IDCANCEL)
    4 `# O4 N: `. A9 X5 U" f  M
  583. //        {
    2 \- X) c* G' m' b3 R7 Y3 k. f
  584. //                // TODO: Place code here to handle when the dialog is6 l! x. q3 j4 I6 b$ `/ v* s& x
  585. //                //  dismissed with Cancel
    5 u. l' g8 N( `( U% [
  586. //        }  Z  t( m9 H5 A; ?6 P6 N) c
  587. 0 B- R0 d1 L4 J2 t8 P! u' ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; |1 v$ Y4 l: W& D2 O/ x
  589.         //  application, rather than start the application's message pump.# x7 o( a* i: n% x( b% }; ^
  590.         return TRUE;
    * Z) ]4 L* @4 c9 D6 J+ Y, |
  591. }, o3 {5 ?7 y8 B1 `9 N& P
  592. - B: v+ _# e+ w% @. |! Q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  ?4 b$ h* i  n4 h3 P& g+ l) S
  594. {, j# }3 R# T7 n- x! G( A5 `* j$ W. l
  595.   int i;
    - S8 R& Y4 q+ z' M7 c( O
  596.   char *szRet;
    ! ^* M& M  e) f6 E8 G( d3 j

  597. ! g( `8 r; j% e
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ! I& ~. O) U! o: ]
  599.   if(sztoken)* V2 C2 h- D+ n5 t, ?
  600.   {
    3 [$ K6 ~7 h, Y$ Z+ O8 e; Y* P  |4 v
  601.     szRet=&sztoken[itoken];
    4 A7 ?- t8 L5 p
  602.     while(sztoken[itoken])
      Y. c' G; k. ~. I: T
  603.     {: u+ g2 X8 I: ?; d6 u
  604.       for(i=0;i<(int)strlen(token);i++). F# n# L: Y  {2 o" ]5 F+ _
  605.       {( N& o' n4 n' t, u0 x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ z% Z. P6 u" B3 t. S2 l
  607.         {: v* `* T9 Q6 l! s
  608.           sztoken[itoken++]=0;# ^. x2 L2 d" r. l8 t6 O
  609.           sztoken[itoken++]=0;
    ) H1 d  d- w# {  m1 q
  610.           return szRet;
    6 s) K6 F6 J8 Z
  611.         }
    & L. R" [9 e4 }+ `7 d' f
  612.       }2 x. V3 R% O) U/ `9 j2 N8 L+ k8 @, h
  613.       itoken++;
    1 s0 u# D3 ^0 f+ n  F
  614.     }
    6 Y4 t9 V  V+ j
  615.   }
    8 x7 v. N! p( @3 V5 o9 I2 \# I
  616.   return NULL;; k1 `) N; G, L  p9 r8 [4 N
  617. }- ~1 r( z- F4 W! A' Z" c+ c
  618. $ L/ X: [8 v4 A4 p: w6 r  v, h: X" a
  619. void ProcessProc(long Total,long Current)) D8 ]. O" @8 o2 I* S2 G
  620. {
    3 S0 a& o" @* [5 D) C  G
  621.         MSG msg;
    / P7 F- v% e# Q1 z; q* {8 Q
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    7 v5 T; b9 g. ^( ~5 i9 s; v4 B6 c; K
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    1 j8 U" n: h1 f
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ T" a& h: ]* Z, W; _
  625.         {
    . w$ X+ }7 Y6 c* H' q0 T+ V
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 ]$ F: X. Z. K
  627.                 {
    7 ]- ~7 L" I' u6 B1 d
  628.                         return;
    $ G6 `. s8 q7 H7 n
  629.                 }
    5 t% L1 s( h! _% C/ I( e
  630.                 TranslateMessage(&msg);
    7 l# N- {6 T( Y1 j
  631.                 DispatchMessage(&msg);
    : R) F5 K0 w, Y: F# h/ U
  632.         }       
    ( ^4 }) C+ m! C" B# b9 _3 i
  633. }
    " U- D# b/ i( n. B. \

  634. / C6 h& ^( J! g% O# F
  635. BOOL bFirstChar=TRUE;7 E/ u7 g' {3 ~) _

  636. ; R. l% Y2 `% |5 |, `, S4 A. B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # E! S& K7 Y, s: Q$ V# R
  638. {$ Z# d' A- y# |) _0 M1 Q- p
  639.         // TODO: Add your specialized code here and/or call the base class
    3 z6 z1 s$ @+ g$ W
  640.   switch(dwProgramState)* a/ v9 w* B6 B
  641.   {
    1 k- |, r8 u' u; M) Y* Y% h
  642.   case AP_NOTHING:
    & N. }1 ~* m6 y5 O: p+ \
  643.     switch(dwStartUpSteps)3 T$ y2 q( O0 {9 ]) y; D0 ?
  644.     {
    # k+ F0 l6 a4 s: |1 f  z, d
  645.     case 1:# j. k- z* P0 P9 o, U) O' A
  646.       {! K! h" e. j& d
  647.         int i;: ^  s; W% G4 ?; S( l- [
  648.         CDC *pCDC=dlg->GetDC();0 i9 \1 I% L5 M" y
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! w& q" e0 C$ |3 C
  650. //        Graphics graphics(hdcwnd);
    3 Z0 Z2 F+ X+ O: G  i
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    5 Y6 u: `9 X/ \1 P3 k& ?# Y% I; m
  652. //        INT iWidth=bitmap.GetWidth();3 t) L( a' {. f
  653. //        INT iHeight=bitmap.GetHeight();
    - S5 i( F9 e& t" O  G' p! x) n
  654. //        Color color,colorTemp;. [* y6 N8 O3 Y% A" n( x. J
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): i! {- x$ E  d0 R
  656. //        {" G: p) `& y) F: ]$ A5 B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - ~" z$ W( v* R" K
  658. //          {
    - s+ D; H: L/ J0 m, J  u! P
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " G/ q3 `( E' ~; o1 E2 V+ J) `
  660. //            colorTemp.SetValue(color.MakeARGB() Y- v! T( z* W* \* Z  }
  661. //              (BYTE)(255*iColumn/iWidth),
    - T, @9 D+ O3 l# h" i$ X
  662. //              color.GetRed(),
    # w6 A4 I" t- w. o! O  T; r8 k! t3 o
  663. //              color.GetGreen(),6 j* T6 y9 p1 V' }- V( F$ E
  664. //              color.GetBlue()));  y" f3 X, w" k  e( m/ U( j9 E
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);% \; R4 Y- q/ O" X& `5 Q
  666. //          }
    0 o& k# Y( e+ G! [  k
  667. //        }
    * G" w9 d% K5 L* O* E2 j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% P+ X0 Y" w$ V) s. H
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 ]* k+ @# C4 c/ i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % R) {& c$ w0 b) W8 H4 a. C3 L
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 J# r2 |8 ?' k: N& i9 }* u8 K
  672.         for(i=0;i<240;i+=8). P+ ]. `% G# V- w
  673.         {- u- `' O( A, ^5 ]+ {, F1 R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: I8 [4 M6 n) T% a3 s( ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 k& z) L+ b! `. K4 U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( j% p$ Y2 @5 Z. E5 o8 {, `& c
  677.           Sleep(33);6 n1 o0 `4 ]. q3 c. ~) r& t
  678.         }
    + p5 v/ t2 }0 ~" I7 e
  679.         Sleep(1000);
    ( ?8 j6 x8 j5 R  f$ L- s) t/ k
  680.         for(i=240;i>0;i-=8)
    * K5 e# B1 H, c6 y. v
  681.         {
    / |. X8 b- K; q, ~4 e
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 v+ _& ]7 ^0 U: D1 [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 i$ T/ V7 C- Z; y1 F
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! k& h# q/ I: F  }4 \9 I) M2 A
  685.           Sleep(33);! Y7 y& }, M$ Y# {$ \
  686.         }9 o; @1 g0 D! r# N+ u% `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 q3 v: @4 y7 N% a  d! E
  688.         dlg->ReleaseDC(pCDC);( O" p4 b: a- e
  689.         DeleteDC(hdctar);
    # q/ f5 Q0 M1 }5 H% o' i0 Y
  690.         DeleteDC(hdcsrc);
    / c# Y6 P0 B: j$ f" X" ^
  691.         DeleteDC(hdcorg);5 m: b4 p8 q4 x7 X: {5 d
  692.       }
    , l% O* G  B' H% {% v
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 w/ z2 u. X# s% q: `6 n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; r6 g& C- y8 }: U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    9 [+ Q( Y8 K% L) J4 x
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      l8 S" _; f" n& N* S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' C& a, M3 v, ~& u
  698.       if(!Dn.Connected())
    1 E2 x; Q1 E, S9 J8 W2 r
  699.       {
    : E% s5 Z. b& B7 N
  700.         dwTotalFiles=1;
    " f/ `& ~4 l9 n6 ?0 p
  701.         dwDownLoaded=0;
    9 D1 e. c; [, q& B7 Z/ j7 @% W
  702.         bSilentStep=TRUE;. T) ]: G# B, T
  703.         bCompressed=FALSE;
    ) ?) ?6 g2 k; }# ?# K
  704.         strExtLocal.Empty();
    2 a0 f0 E9 D' D$ f
  705.         strFullName="readme.txt";
    - L3 N! Y! K9 v$ e* c5 R- X& f9 B; Z
  706.         dwProgramState=AP_CONNECT;
    ! ~4 L% h0 C" E  z
  707.       }
    0 F; h2 E: `5 y6 P9 R! a' F) L4 I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 O+ j- z9 [1 Y% x4 D% K
  709.       dwStartUpSteps=2;
    0 v' W3 g7 w! t: _/ m
  710.       break;* o( z  c* J# l, O' e7 R/ W
  711.     case 2:
    % U' i! P! F1 a+ z
  712.       {
    % _/ ~/ B4 L3 m- R- K1 J- H
  713.         int iEOF;
    ) I1 N6 Z0 G0 i* z" `* R+ U
  714.         FILE *fp;
    / M4 F; N1 G$ I* u7 d1 A/ E
  715.         char szString[512];) x1 z' f' }- l( n3 ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 m# k' g2 _: l6 H9 i7 {; e
  717.         if(fp)
    ; |7 J5 _0 R9 X2 h) ]2 a
  718.         {
    : m9 w7 z& X' @4 f7 v
  719.           do/ o; ]" k# j" x3 b. ~* K$ ~! \
  720.           {& C9 L' e0 ^& ?* U
  721.             iEOF=fscanf(fp,"%s",szString);. D' {) g* |( B
  722.             if(strlen(szString)), D( }4 H5 ?3 f: M, |2 R
  723.             {1 a4 Y, ]7 ~* P1 \- o+ ~
  724.               if(bFirstChar)
    : l6 m0 q( Q/ |: @. r( |# _
  725.               {/ J6 ^5 F" c! Y- t
  726.                 bFirstChar=FALSE;; q& m6 l3 E5 H7 D: Y
  727.                 bConnectIsBig5=FALSE;; B4 e3 ?. J+ H  c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; `2 ~% r5 r( a
  729.               }! a6 r1 R7 C- L0 ~3 S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 p2 j! m! c- B( ]6 F' l6 X
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    9 x+ W  q4 B; D- b" W
  732.               dlg->m_ListText.AddString(szString);0 v$ k8 l  X/ w4 W  ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 N0 e+ t1 [% Y& ]
  734.               *szString=0;5 S4 h4 i! p/ A% O' g! S2 z
  735.             }
    9 i0 b, L- f7 u, ^+ K  h, q
  736.           } while(iEOF!=EOF);6 l6 h0 y+ j% I, e
  737.           fclose(fp);
    " G3 \9 R0 x" s4 e' O
  738.           unlink(".\\DownLoad\\readme.txt");
    ; m/ ^( ^: j7 V; u9 l  _+ a0 F7 v
  739.           dwStartUpSteps=3;
    : j& s0 M. q& A% X
  740.         }; j; N/ K! r  g* ^2 j/ m! ~( a3 m
  741.       }
    : ~8 K5 u/ N& v
  742.       break;9 [0 I( z. \! ]+ P. R
  743.     case 3:
    8 j/ C. g5 q; \2 W  h1 r* K
  744.       if(!Dn.Connected())
    0 H/ |6 e2 W$ y4 m8 |1 l# B
  745.       {
    * D9 U2 V% v8 ~! K& B+ ~; V
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) \+ A3 _, j. B4 N7 a/ w4 X: n
  747.         dwTotalFiles=1;
    * P5 l, F& E- P+ q8 g9 y  G
  748.         dwDownLoaded=0;
    2 W, _" |4 x2 u& C
  749.         bSilentStep=TRUE;& Z3 t2 {" i1 X$ d: z+ d
  750.         bCompressed=FALSE;2 n) z* P$ h8 k$ E  k% R
  751.         strExtLocal.Empty();5 }5 l5 B! V. Y: Z
  752.         strFullName="checkversion.txt";( g6 }- S6 k7 M; t0 a4 k
  753.         dwProgramState=AP_CONNECT;
    ; v  m, b5 S# S/ Z+ h
  754.       }# d0 k+ r1 l: z" j
  755.       dwStartUpSteps=4;2 G: {+ u0 |0 Y& n0 w
  756.       break;
    / o3 [3 b. f5 a" ]% d6 t$ q
  757.     case 4:
    0 r+ V2 {7 t% S. C' }& y
  758.       {  M; G7 I2 j" T5 `: ^5 K
  759.         FILE *fp;
    % L8 r; u# ~* @  e6 m1 R' p  G/ Y
  760.         char szString1[128];
    + M9 B9 O8 G7 W! T7 ?
  761.         char szString2[128];7 B4 j- Y4 ^2 z2 n2 y% C8 k
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. x; X/ a& E# H/ v
  763.         if(fp)6 A9 i5 g' T  h* l" P
  764.         {
    ( k# h* g' @) R6 J
  765.           fscanf(fp,"%s",szString1);2 ?2 x! x% W5 N+ e/ E- v
  766.           fclose(fp);" H6 d6 R9 `( @
  767.           fCheckVersion=atof(szString1);6 J. V7 `2 q/ l+ n
  768.           fp=fopen(".\\checkversion.dat","r");, l) z7 z# h! N+ e7 P+ }$ F
  769.           if(fp)/ i/ K% E1 R% z! @/ ]% Y
  770.           {" [% Z" V2 |- P  F
  771.             fscanf(fp,"%s",szString2);9 o/ n/ a! B6 a" Y6 o
  772.             fclose(fp);) j2 \; l& z; ]) Y! R
  773.             if(atof(szString1)!=atof(szString2))
    2 u$ n+ @  Y* A$ A
  774.             {3 N' a# v6 l' q0 F3 _
  775.               if(!Dn.Connected())* g4 A1 a2 ]. E& H6 `
  776.               {
    ) `! |5 M: j$ H* [7 ~+ c
  777.                 bFirstUpdate=TRUE;
    % d% O" |% e+ ^
  778.                 dwTotalFiles=1;" z* ]9 _- u' J
  779.                 dwDownLoaded=0;% S# k, s% b( B% e
  780.                 bSilentStep=FALSE;' t4 I: Y, X% u) K* ^# v& Z' O$ m
  781.                 bCompressed=TRUE;
    # a* W4 ]8 X' d- g1 ^
  782.                 strExtLocal=".\\DownLoad\";0 b1 ?! U# [% r
  783.                 strFullName="update.txt";1 m/ ?' `- ~8 v( `8 [9 G, ]; h
  784.                 dwProgramState=AP_CONNECT;2 y( a0 u! Z* o/ e, I
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' p$ K& Y/ s: T: r, R- K. @
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% v  `0 R5 B, ^& c* \/ s  c
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
      Q+ ~) D4 n* c5 ]8 n

  788. / P- P! N" \7 N* Z& e8 ?* t1 w3 b9 @) N
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! m- J! @% S8 R* f: c) Y( U( ^; J# K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 Q  S" n# r1 `/ d
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    - ~& c$ o7 |+ A
  792.                 {
    ( ~& F( ~1 K& i* [, c. l9 v( r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( x$ o9 C1 B! y) m4 i7 o/ \1 h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
      ~) C! G8 Y9 L7 q6 N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ p% K' W( h" S7 u
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) g) X6 \" Y: l
  797. 7 {$ S- A' x- P$ ^7 K8 Z" l
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 q6 [0 d& Q# z( o' z/ r9 c
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( ]" P6 d2 K7 C5 p* m4 c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& q! O8 V) R6 F' m3 @
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * H$ H8 @. ~' y. C6 k
  802.                 }2 M5 y! W5 m: i! @; g0 }
  803.                 dwStartUpSteps=5;: N2 ]" ?, t9 o/ I; a1 j
  804.               }
    ) U: m$ R5 R) Q! D
  805.             }1 K2 O- N3 c. Y- S( f! B# i! [6 L
  806.             else1 s5 h( {3 ]' p- \  [4 y
  807.             {9 Y% [; \# r9 q+ |' ^
  808.               unlink(".\\DownLoad\\checkversion.txt");
    , ^- q% y' \( E; Y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 _! e( w& e& C) I2 L* W8 }0 Q
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' n  Q% l: x/ F+ S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ ]' ^( i6 W" z2 U) F

  812. 5 x5 b. z0 I0 L3 P
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; ]+ ~9 m* s7 x& H' i0 l& q5 {4 w
  814.               dwStartUpSteps=99;
    * v; {3 L+ Q% U( r& y2 u; T
  815.               bFinishUpdated=TRUE;+ @# t, W4 p& C
  816.               bCanUpdate=TRUE;& u& T# z0 M' t5 {7 n
  817.             }
    & w3 f/ z7 A6 ~6 }, A, ~
  818.           }8 R# P9 E' f6 u2 T% {
  819.           else
    4 p" @% s$ l% K7 _
  820.           {- Q/ o1 D& X) C. H
  821.             if(!Dn.Connected())
    ) b/ L5 B& _0 m# `" H0 }5 V5 R
  822.             {
    4 }3 O/ y7 l1 H# m5 z" h
  823.               bFirstUpdate=TRUE;
    . U0 ?6 S$ L* S) o6 T
  824.               dwTotalFiles=1;8 t- N( T3 v" ^% a# @3 x1 ]
  825.               dwDownLoaded=0;- z# L9 L' r8 ^# u" N
  826.               bSilentStep=FALSE;
    # W# o( F$ C0 c3 P: O9 w! W( D& G
  827.               bCompressed=TRUE;/ B" }5 Z- u, `/ F* G" M* K- U
  828.               strExtLocal=".\\DownLoad\";
    " b& a7 Q9 P! m+ }5 t4 L0 J
  829.               strFullName="update.txt";
    & c1 x/ k$ e7 \+ W
  830.               dwProgramState=AP_CONNECT;
    7 ~7 Q  O2 U4 z3 i0 z. `$ D
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . s/ a3 j4 p( O( Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % w2 f: B! C, B1 ]
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 K) [" B' ]+ H: z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* z! A) P. y& b2 q3 f9 t/ I' ~
  835.               unlink(".\\DownLoad\\checkversion.txt");% f+ Q! Z: M* d- T4 W1 Z  V4 g* Y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 w% _' Q! f, g- ?
  837.               {) I/ Z$ F/ T- \; i( v# H5 r
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");& f( x* M) {9 a% C* x# _' L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' q0 W) |% k2 I6 u9 R& |. _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ! E+ n: Q# |: G+ n# h9 m" q) W5 J
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * i  y! y# m# h" q2 Z: |
  842.                 ' g; `+ ], t# {. V+ w- y! C1 a# k; {
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    % s; [* r1 O- X1 Q7 J* {& i
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 ~$ K/ `/ K- g% F% X
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # O0 e& E4 Z! b3 c; y3 E- ?8 T0 t6 u
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 [: F+ V0 _: |$ d
  847.               }
    4 S( e) R. @8 v/ A- x0 p  c
  848.               dwStartUpSteps=5;
    9 X6 K& M7 Y) ~0 ?2 ~
  849.             }$ F$ A, m" ~* b& N- n1 j5 ?
  850.           }
    2 P+ I7 _* d3 @. q! i/ J
  851.         }4 ^4 F9 N3 j" i0 T( l) U+ W
  852.         else. v2 D* U, p, q. m7 j; l& Y
  853.         {- Z2 z& @0 W2 H6 ^: u7 F, n
  854.           dwStartUpSteps=3;1 A) F9 I/ b$ d" d
  855.         }7 T! L; C% x! A5 _
  856.       }% W8 n7 g6 [' y5 l! m
  857.       break;
    . L9 _% c/ x# K6 V4 C. e
  858.     case 5:
    $ P$ J/ F, B& d/ B. n
  859.       {
    5 x* M* U" R# R7 D8 J6 R
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / l6 w, v( U* ]# P- L
  861.         {! N4 s, A" K  f
  862.           int opt_overwrite=1;
    6 U% Q) d: j0 p. }" z2 x3 c
  863.           int opt_do_extract_withoutpath=0;0 a6 ?0 b9 [* e% l" v' v' s
  864.           unzFile uf=NULL;: e  O* |( R% F* R9 ^& ^
  865. / A; P4 B$ j3 A7 r% H
  866.           uf=unzOpen("Wsa.zip");. R# J% v/ V" C2 o4 N
  867.           if(uf)1 |7 K/ E2 A" X: Q! E& k
  868.           {9 K! S* o- z/ F+ n8 J
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - S3 ~2 R: q( ]2 ^" t" {
  870.             unzClose(uf);
    ' [+ \( F1 D5 q* S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , j% M, J9 g+ G6 n; u: x2 f
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) h& n9 t$ V3 h7 j9 Y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    5 ?6 a/ [0 I) M, I
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 A& x2 \$ s3 a9 R# M+ {( N! j$ ^
  875.           }
    . {# Q  m" p; j3 ^/ [) k$ z1 a1 d
  876.           DeleteFile("Wsa.zip" );4 ^: w$ v  q0 J
  877.         }4 a1 t( B- H, F  l# z1 D8 Q* a" O

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

評分

參與人數 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-11-28 00:02

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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