找回密碼
 立即注册

CSUpdate.exe源代码

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

9 o8 M' l: n. D# T; @" @
  1. / RevApp.cpp : Defines the class behaviors for the application.1 m0 X  F6 B- e. W& U8 e* \/ m
  2. //
    6 {+ s1 U9 ]8 R+ L( l$ h: q! j  z5 L6 y
  3. # t9 H8 r# Q( d3 V8 Z
  4. #include "stdafx.h"( |; M% u  ~+ o% q

  5. / \# r( J. H" {( H0 G
  6. //#define UNICODE
    6 L& P8 {( b) j3 H3 [
  7. //#include <gdiplus.h>0 A4 m) p. ]  [' ~
  8. //using namespace Gdiplus;% j( i6 w( Y$ L7 f
  9. 0 p- x$ [. F! i8 \
  10. #include "RevApp.h"* m0 {7 C% r! w9 \
  11. #include "RevAppDlg.h"; R: k- f' \2 u$ O3 U7 C0 y) a; q
  12. ( {4 ?$ A6 s! |: j
  13. #pragma warning(disable:4786)
    # \4 }  X1 {, z7 x4 V8 s, u
  14. #include <map>
    4 I! P2 o/ n, E+ q: F
  15. #include <list>3 X/ J' V6 ?2 }, X( L2 w# a
  16. #include <direct.h>' a+ W  g- H, J6 c8 j
  17. / F" a4 V$ ?7 z& M, ?
  18. #ifdef _DEBUG2 t- I* Z( w5 O& E2 z$ O
  19. #define new DEBUG_NEW. m/ b6 N6 E; T+ r& ?" x7 Y: q
  20. #undef THIS_FILE
    0 `5 ?' M4 k, ], r2 W
  21. static char THIS_FILE[] = __FILE__;
    ) N7 W/ K  v: [  S% |
  22. #endif
    0 q: D) T7 ?- q, f5 T( [
  23. #include "SkinResDef.h"
    9 o  L+ `  h' x7 Y! f8 K2 N
  24. #include "ChangeBG.h", j; t4 D$ @: [% I4 f( q0 B
  25. #include "AFXINET.H". F9 @. t* i3 V1 l
  26. 2 M: i& m6 g' _. [
  27. #define TRADITIONAL_CHINESE 0
    * P, v8 Q6 n- Y' {; f  a
  28. #define SIMPLIFY_CHINESE 1
    6 j$ t1 g! x% h9 e
  29. #define ENGLISH 2- t( g' q; |. r! r2 J1 |8 N
  30. int m_iLanguage = ENGLISH;! l( A4 n% n7 v% G% y, U
  31. /////////////////////////////////////////////////////////////////////////////
    ; m) ^5 {4 T/ l3 D* e0 v/ Y
  32. // CRevAppApp# U+ B  n+ w# c+ I
  33. 5 H$ U. F% ]0 h* Z' a# F' Q9 }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 b8 Z" F3 F9 W2 w
  35.         //{{AFX_MSG_MAP(CRevAppApp)# ?4 }' H2 t  H0 w
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.. j( h. H' {9 N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!# `1 A% s2 v) D6 `& X
  38.         //}}AFX_MSG
    ) C& W; W: b! `8 v9 D; @- W
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 C7 `- C/ W/ e! X1 U/ [3 U# b+ y8 J
  40. END_MESSAGE_MAP()+ ]. E/ w+ M; W$ p3 Z+ s

  41. $ T7 E, J5 X. I( F
  42. /////////////////////////////////////////////////////////////////////////////, ]! R$ ?" Y& E* t1 l4 D' q
  43. // CRevAppApp construction6 R* a6 z1 d0 U

  44. 5 W" X7 y# \& p! ~# y7 x' l: w- K
  45. CRevAppApp::CRevAppApp()% @# K4 G6 s7 B: ~. U* @8 i
  46. {! Q' y; }' w7 ~/ L4 Y. c% O
  47.         // TODO: add construction code here,
    * e# J- v4 _% ~/ @! @
  48.         // Place all significant initialization in InitInstance1 u) R$ d& r+ c$ b
  49.   bDisplayIsBig5=FALSE;
    ; r8 c, B0 x9 Y5 a
  50.   bRestartUpdater=FALSE;
    & L5 ~! |" ^# h  R: O: D
  51.   bFinishUpdated=FALSE;& W6 _7 ~2 Z0 W0 M
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    2 f  B& u' i- a; R* ]0 c9 n
  53.   InitChangeDataBig52GBKS();
    - \0 D$ M; |' f( G5 @* L
  54.   InitChangeDataGBKS2Big5();
    # [5 g7 H$ u7 `4 N' J/ z0 Z
  55.         //( |' a0 H; j6 s3 E. o
  56.         bClickRunExe = FALSE;: _/ v5 ^9 d# Y. {! I. ]# `
  57.         //
    9 V, I' A* j: }6 q  t
  58. }
    . h+ G5 N' ?: Q1 n
  59. " A* N- M- e3 B; X
  60. CRevAppApp::~CRevAppApp()
      @8 j* E9 P! F) J3 s
  61. {4 `! D5 [# T- E7 I3 ~
  62.         // TODO: add construction code here,+ k6 J  r9 k; P: v
  63.         // Place all significant initialization in InitInstance6 `  `3 d, ^, o# c$ k
  64.   EndChangeData();
    ; j$ f: I7 `5 G1 }0 D
  65. }+ ]  |" D7 K/ R4 E9 Y

  66. 5 W% E- H% b: o- o( z9 g
  67. ////////////////////////////////////////////////////////////////////////////// R1 a3 @2 r( `- v: y
  68. // The one and only CRevAppApp object
    7 T" \7 E+ m2 q
  69. - q# W" i* N. V2 h2 H: m$ i
  70. CRevAppApp theApp;
    ! h. F* h/ z1 \; N% l

  71. - x+ V9 Q1 N3 S0 ?: X
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), p1 e* W9 G' G2 M0 s- ~
  73. {* y0 V8 ?) c; i
  74.   int iEOF=0;. w7 @0 p( g) y4 [' A! G
  75.   char szTempName[MAX_PATH];3 u2 J4 f' e1 @% b
  76.   *szFileName=0;
    * y7 W% w, A0 w& Z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    0 o8 W8 b; ~. ^+ V
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' ^! V6 m3 V! G4 X
  79.   {0 v( R' B1 t8 P, q- v$ g6 y9 V
  80.     strcpy(szFileName,&szTempName[1]);- f! F! \3 m* I, C
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; p1 g9 |: s( [; P) V6 ]- k& K
  82.     {
    ( h/ d( i- a5 `( v; X, }5 H
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , O9 ^2 @! _5 t! [8 ]3 k
  84.       strcat(szFileName," ");) {* K( H$ ^4 q9 v( H! w
  85.       strcat(szFileName,szTempName);
    6 G9 H* H6 n  v9 U
  86.     }3 R9 W! q" j# C' ?6 M, s
  87.     if(strlen(szFileName)>=1). ?+ [. ?6 n; W- _7 O: B) T/ ]
  88.     {/ J8 f$ s" o2 i) R4 X$ Q6 f
  89.       szFileName[strlen(szFileName)-1]=0;
    # \4 G3 |1 G+ `2 p& ?
  90.     }' V' \$ @7 m2 x- d0 _8 P1 r
  91.   }8 }8 [8 j$ D5 K2 e7 C
  92.   return szFileName;, v2 ]( r4 N4 c7 M
  93. }
    & \0 }! m% y8 _. m

  94. % ]; c* @! d+ A. d7 w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 ^9 Q# z) \% f5 {& x, z
  96. {
    ) `! c  f1 K8 I+ L* Z1 P# b! n
  97.   FILE *fp;2 z0 p& K! Q% V$ ]/ N+ `; Z
  98.   char *key=NULL;1 |- X! t) Y* ?
  99.   char version[MAX_PATH];" B4 t; d; ]3 e( a* V5 E/ X4 U
  100.   LPUPDATEFILE file,olds;2 I: k) }) b7 H/ [# T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 q. z8 t) i) U) b1 W. x( S2 j
  102. ! p5 q% B# h2 y7 s4 G
  103.   UpdateList.clear();
    6 f7 e. s, p4 H" _2 X
  104.   UpdateFile.clear();: C+ Y7 C; N. w6 g4 M& u
  105.   if(GetFileAttributes(filename)==-1) return false;
    - }& ]9 b7 N* `, n$ Y
  106.   if(!(fp=fopen(filename,"r"))) return false;! }! I9 I2 U4 f0 n- K  m! k
  107.   fscanf(fp,"%s",version);
    . i( [9 S$ A/ b* ?$ ?, a9 R/ u- Z* D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 m; S/ t( M7 ~4 r/ R( {' Z, h
  109.   while(fscanf(fp,"%s",version)!=EOF)7 m% ]1 H. k; B
  110.   {, O) @) k6 T* G& k& f6 H; v3 E: V8 z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; c6 w# D& D) a+ L& r% \1 k" C
  112.     fscanf(fp,"%s",file->path);
    5 ^5 n  {7 L8 j
  113.     ReadFileNames(fp,file->file);9 X( w8 {7 E9 w
  114.     strcpy(file->full,".");0 `2 J, }/ w% U" M* \3 F9 e7 }3 F
  115.     strcat(file->full,file->path);! z" k. [9 X, j
  116.     strcat(file->full,file->file);
    3 ~* O7 d1 z' c+ f8 N, L1 f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()). ?  A- r' k7 p0 Y' D* F' f
  118.     {
    2 I$ J) Q7 V( k$ f" k7 K! ]
  119.       file->vers=(float)atof(version);: ]$ z4 R. t5 a5 \1 p
  120.       UpdateList.push_back(file->full);
    4 _  {% G4 \; B) r5 g+ T- q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& W/ }/ R0 E, |- n3 o( \* e
  122.     }8 Z/ S0 X! d5 k7 b
  123.     else* t# _2 s( O1 a3 a
  124.     {& H, ]/ p3 M0 c+ Y+ [+ K# [% |, |" b
  125.       olds=(*p).second;5 V' \" h- x2 m7 _( Z5 B
  126.       if(olds->vers<(float)atof(version))! k' y3 C, R8 n( ?& {! Y6 _; w
  127.       {# U$ [, e" M- T5 i
  128.         olds->vers=(float)atof(version);) D& K% H/ G$ ?
  129.       }/ `& I; ~& m# S/ v7 E. ?( j$ {
  130.       free(file);* X% F$ Y2 |/ a8 F" p
  131.     }. N3 K* C) M) A4 I0 j1 }
  132.   }0 O! x( ^6 c9 ]9 ], ^0 l6 d, u
  133.   fclose(fp);
    7 O  y$ Z2 Z. }
  134.   return true;
    5 O0 h' {% x+ b1 F5 a/ Z! c9 D* K; w
  135. }
    ' M7 S$ U: f2 K9 `1 s3 n

  136. 5 x! f3 ^# s1 m+ `8 M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 W9 W. w; V6 w4 W
  138. {
    : l! V% }( m( l& t
  139.   TCHAR  szFull[MAX_PATH];
    9 D9 Y# z. @; P
  140.   TCHAR *token,*inter;* G7 ~5 o6 z* |6 F/ w
  141.   *szPath=0;
    % i! E8 W. a( b: l6 l& H/ b( O
  142.   strcpy(szFull,szFullPath);
    3 w) j. b1 G+ p) C
  143.   token=strtok(szFull,"\\/");
    2 A+ O/ P- v6 I2 \
  144.   inter=token;
    + b8 }7 R1 N7 }  g( F3 _0 Q. ~0 l+ l
  145.   while(token=strtok(NULL,"\\/"))
    7 Q  g) W3 C; [2 h
  146.   {
    $ n& R8 n2 ^1 k* i; p
  147.     strcat(szPath,inter);: h# Y5 K. p( Z8 L. Y1 s
  148.     strcat(szPath,"\");
    ( \1 n* E: g4 ^% t0 U. K: j4 i
  149.     inter=token;
    ! Y5 w: v9 ^7 [- Q# f* e& H" v7 Z7 e
  150.   }+ {8 X7 Q3 l5 K
  151.   return strlen(szPath);( ?7 _4 [  ]: J/ k2 q0 v: e
  152. }
    - h* }3 ?+ H2 w7 a& r( ~

  153. , ]4 X8 h7 l, w; Y  N- U3 y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; I& I; ]0 F7 w) K! a/ |
  155. {
    * J9 u, `8 t# {6 a' J
  156.   DWORD attrib=GetFileAttributes(Target);
    % _# J; p6 z4 ?
  157.   if(attrib!=-1), f4 _( @+ Z! m! u: b
  158.   {  w( ^% C# A4 c2 g0 Z$ d1 S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( E7 r  P( i0 H# h
  160.     {
    % ?! n0 D2 s  [9 \0 f! s
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    0 [; U# K4 e) ~+ F5 @
  162.       SetFileAttributes(Target,attrib);# m, d6 e' N( H3 a/ _
  163.     }7 r6 H- ^  d/ G$ m. v$ a3 W7 S! w
  164.   }
    9 d6 d# h: a- V6 \$ {2 |
  165.   CopyFile(Source,Target,Erase);3 ~' S3 s8 [8 J. w( r4 V
  166. }3 R3 h6 m" T* e9 _; s( Q0 h$ s

  167. ! c% F# ~3 b# {+ U# `
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* b! S, s: X: a9 x$ ]/ I& o+ Z
  169. {
    1 D9 [: P6 |7 {. y6 l& d6 [2 R2 T
  170.      FILE *fp;
    6 Y7 k4 i4 |4 C
  171.      char  szBuffer[8192];
    % s1 G' s6 P; v
  172.   va_list  argptr;
    3 k- k$ E& `3 j& v: S

  173.   f" B$ x3 x( v9 v
  174.         va_start(argptr,message);
    7 A( s0 k* |/ Z
  175.         vsprintf(szBuffer,message,argptr);) y8 q$ X3 V& N' ?
  176.         va_end(argptr);0 S; u  J6 b5 n* j
  177.   fp=fopen(FileName,"a");( ~+ p& u8 \, G) O( t; p% p/ W& M
  178.   if(fp)* [2 G! ~/ ]: V+ x( Y+ L4 V  D# ~( _
  179.   {: X+ }# F, E; `% T/ T! S
  180.     fprintf(fp,szBuffer);' z6 z. g1 P0 U. ?1 s! s
  181.     fclose(fp);
    1 ]! \4 @6 i2 g- T) H
  182.           _flushall();
    4 [0 x+ B" c% m
  183.   }' n- r/ ^6 |/ e/ [: F
  184. }0 W6 o5 a5 D2 {/ K

  185. 3 z) E3 A" |% Q# \3 i2 {
  186. BOOL CRevAppApp::Fclearf(char *FileName): e( b6 s# [1 ^% X
  187. {
    0 ?3 u1 E. x' s  O- ~4 C
  188.      FILE *fp;, P8 J( W- q: O0 ~3 C( v
  189.     DWORD  attrib;
    & Z0 X# H# M' U/ g* Y' [( G* W+ U
  190.   attrib=GetFileAttributes(FileName);5 W0 L/ }: I* e, y! x
  191.   if(attrib!=-1)
    * H6 ^' v4 L: x. A8 c, y( h4 J* u2 d
  192.   {
    * q4 N+ I; ]9 @2 l9 ?6 m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 ]0 o" ?1 @, |! m
  194.     if(!SetFileAttributes(FileName,attrib))
    3 C3 [: C+ [2 E+ B# k- K* F
  195.     {
    3 ]+ M% j" G9 O' i  m& L7 a/ b
  196.       return FALSE;2 `6 O0 u; e3 p2 V3 W4 e
  197.     }
    # h$ ^* h% \) l$ [
  198.   }$ X+ |* _2 Z! i" Q# K- v
  199.   fp=fopen(FileName,"wb");
    ' ]* D! W( e2 u+ J
  200.   if(fp)
    9 G: L1 h3 r% b
  201.   {
    ) `& k$ O, Q7 H' n( z1 {! b6 H
  202.     fclose(fp);$ X# @% E9 U. m9 i+ r1 z
  203.   }2 M/ u% T# u7 g* e
  204.   return TRUE;
    ; f+ u" q% S2 Y% N
  205. }: _* Z* K0 G9 M$ a1 w3 `# M) E
  206. ) K1 V6 @$ J0 i0 }
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' t+ a# v2 d$ q1 x
  208. {
    2 w/ O: r- K7 ^0 A# k) J8 n
  209.   char filename[MAX_PATH];
    7 t0 N: Q) J+ S- {9 t. x5 i
  210.   LPUPDATEFILE file,olds;; G/ p3 i/ Y) ]; a8 u/ L
  211.   std::map<int,CString>::iterator i;* m& E" I/ A" E5 F9 D$ W6 R7 E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! d% w! J% F4 P  R% U6 ]
  213.   std::list<CString>::iterator l;' [3 x% |# K" M! P

  214. 9 X: t1 R# ?9 X! E7 a
  215.   if(bFirstUpdate)
    ' m' U! M6 h* G  Z
  216.   {
    8 `' \5 |  B1 C
  217.     dwCurrFile=0;  E9 w8 r3 F- Z" }! B1 p' v, f
  218.     bFirstUpdate=FALSE;
    " v8 u. K, `' z( U; {
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! F4 z& S8 j) K
  220.     {
    & v' w) }) ]4 N  y) c8 U& k$ x, u
  221.       dwTotalFiles=UpdateLocal.size();
    ( ~6 t$ c! p9 {) r4 k/ ~
  222.       dwDownLoaded=0;* d7 c' ]8 k1 S* B  X' @) \
  223.       bSilentStep=FALSE;' d0 B! e9 K( A' I% n; F
  224.       bCompressed=TRUE;. ]0 L0 d* r3 o1 T6 l
  225.       strExtLocal.Empty();& U( u& B0 Z! _/ B6 i% e2 P
  226.       strFullName=(*i).second;: d3 j6 F& t  M, ?
  227.       dwProgramState=AP_CONNECT;
    ; A- |3 g& u+ y3 ], S. R% s# H, ~
  228.       return TRUE;
    $ _: W3 d- }! b% g& }; h
  229.     }) C+ `/ K3 n& y6 I2 j& G/ ?
  230.   }* f$ x" \% |6 y0 R* s$ a
  231.   else if(bRestartUpdater==FALSE)
    - O' `3 N% `( N6 l
  232.   {
    8 ^0 L# C- k0 G9 x
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 o( r3 d; f9 C1 @/ I$ a; g
  234.     {
    " x" V. o6 `' n& Z! T9 C# Y
  235.       file=(*p).second;
    7 k( n2 [4 l& E% c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  ?: ?+ k; ?8 T1 u4 P
  237.       {! g# A6 j  j: V8 r0 \0 S5 q7 \. X5 w
  238.         olds=(*p).second;- I! L: A0 h0 P) W, I
  239.         olds->vers=file->vers;
    2 e9 G4 T' Z: b' b6 [& n
  240.       }
    % D: n1 _( j3 }. L
  241.       else6 h6 b8 n4 _9 X/ W
  242.       {
    " e# D: x1 E$ R
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , z, \; P& [, X5 S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( F0 `7 X' x% J# e' f& v4 C( B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " [/ o0 p5 _! q/ }0 h
  246.       }
    0 z" A. h" m1 ?8 T0 o) F1 M+ ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    5 e$ m  E6 y5 ^& q6 r8 d9 j' E) f' _
  248.       sprintf(filename,"(%s)",file->file);
    5 M4 j, c2 p# p+ T) C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);9 I, X# [# q1 [( x
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }( D8 K: b2 g& q* P4 B* H( L
  251.     }6 y& N1 {: h- P5 Y! R
  252.     dwCurrFile++;& s; Z. T9 R- h, L+ S* R! D- H6 L
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " V" X( a& E5 ?
  254.     {
    6 I$ [  g- G! D, @1 j: h
  255.       bSilentStep=FALSE;
    ! X0 o0 _( v; ]! x; x
  256.       bCompressed=TRUE;4 o3 \. B/ y" O+ P! s# P5 e
  257.       strExtLocal.Empty();% x/ V0 i+ v0 q; F, H6 W
  258.       strFullName=(*i).second;8 e5 t/ |9 L( e; w/ E( T+ F
  259.       dwProgramState=AP_CONNECT;
    $ o+ g. I/ g9 |
  260.       return TRUE;6 l# z9 P' O; H/ k- `
  261.     }
    9 E; v0 J1 _6 V% ?& ~1 d
  262.     if(!bRestartUpdater)
    & y+ ~2 d2 d/ \9 K# O
  263.     {
    9 F8 \8 W$ g1 n2 ]& [7 ]' I
  264.       int iCurrSize,iFileSize;
    , F, i, f: K; s  A- p9 G" n
  265.       iCurrSize=0;1 i/ v1 Z9 M( d5 `$ V6 g/ M$ d8 L
  266.       iFileSize=UpdateList2.size();
    $ ]. P, [7 S$ x3 u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  Y) p& V( `2 `# M1 Y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 j) k' W& v4 i6 ?* ~9 V8 a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  C% `# d/ Y4 s* ^: [- w0 z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & Z. S! j0 t) ~6 K/ `! L
  271.       Fclearf(".\\update.dat");
    4 A* y4 v0 N' f& |. Q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    1 T+ M3 H2 F: f* ~0 _! O4 E% x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++): Z1 V: W, ~  z+ ?8 @
  274.       {
    ) }1 W. o; N% F3 `  ~$ ]2 |# E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 P% j( X; _- K- f: ]% O
  276.         {2 _/ T4 B1 w" f
  277.           file=(*p).second;
    ; b" `3 J& t0 W6 y+ w% w, f
  278.           sprintf(filename,"(%s)",file->file);
    , I9 j  D. u1 V6 H) u" [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ K: |. b, v" ^' R/ X
  280.           iCurrSize++;
    $ |- I. O! n- k) L0 y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: G" ?' [2 n6 X) ]% W. q. J
  282.         }
    2 T0 k2 \* l! G2 \6 X) p
  283.       }1 `# ~, s+ c% \- K/ \3 o  R( a/ Z
  284.       unlink(".\\update.txt");2 Z. E3 [3 V, x' G4 e. P& ~
  285.       unlink(".\\update.tmp");; j& L$ C( N4 g& J+ ~6 u4 k5 ?
  286.       Fclearf(".\\checkversion.dat");8 P* m- D6 J' V- j& B
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - i! Q% d9 R, @# Z
  288.       if(UpdateLocal.size()), R" m  ^6 R& @$ c
  289.       {% K+ ^8 _. [  E* L( |  ?
  290.         UpdateLocal.clear();
    ; t8 z  Q1 v, ?4 A1 A
  291.       }' g4 _0 c% u6 E- g" t3 C
  292.       if(UpdateFile3.size())
    3 M1 P0 ]' F" }4 f; \: q: Z
  293.       {
    3 K$ |. G6 H1 O- p6 {, p% V' w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & O( u+ f8 Z5 h# \- v
  295.         {
    % J* Z! }% y2 b2 B6 H: s
  296.           file=(*p).second;7 d7 E+ {+ l7 y, h
  297.           free(file);: @. o8 x4 O% y6 r% c; x7 j) n8 Z
  298.         }
    # g5 b% R, |0 {! j, B
  299.         UpdateFile3.clear();( r( r- {6 g0 ?+ v9 F
  300.         UpdateList3.clear();
    ! F. Y+ E4 p3 d! i1 ~  h
  301.       }) e; p8 q# T8 G; T: ^5 N" }" {1 v
  302.       if(UpdateFile2.size())3 U5 i* G2 j/ Y4 M6 p2 f: R
  303.       {
    ) ?8 x6 X8 O9 T5 |5 X8 d
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ f% T5 J% V; h5 Z; ~9 j
  305.         {% [5 T& {: `4 @8 a4 i. M# f  ]4 l
  306.           file=(*p).second;/ ^. I6 p4 V/ U2 K1 r
  307.           free(file);8 n/ g2 }; c+ X% i$ ?! [8 I
  308.         }
    2 F  J; @' X' v0 p3 |
  309.         UpdateFile2.clear();
    , H# R  F! c1 @5 s4 E  @  r
  310.         UpdateList2.clear();2 r0 Q* S4 o. I8 {, l
  311.       }
    ) V$ c. w9 d5 o4 C, M
  312.       if(UpdateFile1.size())5 D: [' A9 ?  ?2 m. `- `. y8 |
  313.       {6 D* E6 x, A8 l# {8 Z& T
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# v. S% q( p( A* a% e7 I
  315.         {2 }6 v' B, o7 Y2 L1 f3 o9 H
  316.           file=(*p).second;
    2 n5 d% l3 l$ |4 s0 q
  317.           free(file);
    # k  Q/ r1 d% t* ~3 y! n
  318.         }% r5 C  p0 A( ]3 w8 R
  319.         UpdateFile1.clear();
    0 v: s3 ~( Q* j8 {: M: B& z! F
  320.         UpdateList1.clear();5 R6 Y. M) ~; Y2 V; T
  321.       }) j1 A% K3 P* j& `  `3 E( B8 W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) W! A4 h7 ~3 T6 K
  323.     }
    : z+ e7 R- z/ z. U1 m9 H9 \
  324.   }
    / d* Q5 a* ?' M, x! Y% o1 g
  325.   return FALSE;' m- T" r4 e8 a: R/ Q5 F
  326. }
    " z, g3 E! n4 x/ D2 c7 g
  327.   A, e+ i* d: J, c" X* i# D
  328. void CRevAppApp::ClearAll(void)% o6 S! C- |! j* M, Y$ m9 n: m1 S! C- P1 X
  329. {6 f8 P# {8 [* s, \3 v! U$ J" _7 @
  330.   LPUPDATEFILE file;2 `; e2 @' a7 Z* h0 Y8 {
  331.   std::map<CString,LPUPDATEFILE>::iterator p;* X+ H+ ^4 w/ @% C2 ~
  332. ( u% Y$ t. f2 V/ I! d6 s
  333.   if(UpdateLocal.size())7 O, ]+ W' Z* \
  334.   {
    # T& i$ m) N. K
  335.     UpdateLocal.clear();
    4 {+ f7 d: {1 v4 C
  336.   }
    6 {5 ^, T! W4 o
  337.   if(UpdateFile3.size())
    ) e) u% W: j  l& k, h+ K
  338.   {+ l- \( F9 ?- X9 w6 _8 p* A
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . W" ]! V: o; C8 V
  340.     {9 B1 B& a4 b6 s& ?' Q! E9 P! d; n
  341.       file=(*p).second;6 `6 e0 d( ^; w. K# Y
  342.       free(file);
    9 k- d& Z. C$ ]/ i# p/ C, X" W$ C
  343.     }7 R, V& r1 B# N: J8 d( D$ Y0 X+ V) d) I
  344.     UpdateFile3.clear();& b; G2 B, }2 `7 A, [: _8 ]# k
  345.     UpdateList3.clear();
    ( f0 Q1 X  C5 L% w
  346.   }/ M2 f% q/ S: E, {& h. A
  347.   if(UpdateFile2.size())
    4 k2 B9 w2 ?7 b* R- d' k, \
  348.   {# ~- F- o* m* ~$ w0 C( y) T
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- y: T& c7 p' {3 |& F
  350.     {
    4 e) g3 @; g# E0 W+ T% L
  351.       file=(*p).second;
    # z) D5 M: n4 M) d: m
  352.       free(file);
    4 s2 X. Y: E9 \! ]! \& x4 `( h
  353.     }- j+ K- j/ z. E, D/ f
  354.     UpdateFile2.clear();8 l$ z! Y9 z0 d( k; X$ u% S
  355.     UpdateList2.clear();5 k) [( m0 w! g
  356.   }
      Q" c1 D9 Y! X$ Z# m5 N: f
  357.   if(UpdateFile1.size())# M. ~! W2 N/ |4 p8 b
  358.   {# ~2 R' }5 D$ A- ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); n6 ?8 f0 _( [: ?3 Q- i/ q& Y1 ^
  360.     {
    8 \! m  S# ?, `1 }+ c
  361.       file=(*p).second;9 }7 A8 |7 N6 E$ @
  362.       free(file);5 Q; x' d3 x7 x$ m/ X3 w
  363.     }8 ^- {) f. j5 S% t* \# H
  364.     UpdateFile1.clear();
    4 H( C9 s8 ~3 R; ?2 }+ V: S' i
  365.     UpdateList1.clear();1 q# m  S# J) C$ p5 ^
  366.   }* T1 O0 P4 a9 g- T
  367. }  
    ) A$ {2 {' }' X# i3 n; n" S
  368.   
    5 ~2 a. ]$ Z! c
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; U# M5 c+ ?1 \7 d( F
  370. {$ Z" |3 \* I) D# E. T
  371.   int c;
    # P! {2 z& D6 E  U$ b* E
  372.   LPUPDATEFILE file1,file2;3 j- ~$ Y& }8 n; s8 T, z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;! b2 w* L4 r( q# `$ d) G
  374.   std::list<CString>::iterator l;
    4 J, A, q7 {( G' z- g7 R8 @0 V
  375. - w+ I( y& r/ p- F8 r
  376.   UpdateLocal.clear();
    4 L* x* }# B! A$ a) D3 }
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & G5 I1 F1 O) c. Y+ i! W% n0 L  C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);3 r/ a8 F$ c* C: P: |2 x' {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    7 i' V% U/ q) h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. g# p+ b  {1 \$ O3 S# v3 c
  381.   if(UpdateFile3.size())
    . \, H( f# I3 W) R7 A! J0 Y8 K. M
  382.   {8 T! e! i% D3 @, e$ A- Z/ }
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! F" G  |& Z' d( t% a3 Q
  384.     {5 D6 X4 y9 y# b1 i' s4 ?# U. A
  385.       file2=(LPUPDATEFILE)(*i).second;0 r, P4 t$ ~6 @2 n' U& q& L4 c
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' X! ]* t8 [6 W+ Y4 r% m/ _* o
  387.       {* T& v3 K  U6 o) T, @% f7 r
  388.         file1=(LPUPDATEFILE)(*p).second;) N" \: S$ n9 d" ^" F
  389.         file1->vers=file2->vers;( `3 A: @; z. s3 I+ q
  390.       }
    6 l0 c* l0 c8 u( k3 d8 j9 @
  391.       else
    % D, }# T" x5 q3 Y) {
  392.       {
    ; r0 o3 l' x& a! A) s" W: @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ D& @1 P* ]6 v9 ?& m2 n1 p) _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));' l5 H) Y  Q8 e% r' h4 ~
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & J2 T6 C7 C# k( W$ Q, B# [
  396.       }
      f1 Z. G; }3 E5 |
  397.     }
    ( k& C1 ~- Z2 c' S7 E+ B2 L
  398.   }" j2 ^- \) W) I, Z9 v7 l& F9 o
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % {+ s- V. d* [. k
  400.   {" H2 g1 f, s; W) R8 t( w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 J/ E: H7 H# X' W- B, l& f
  402.     {( b, }0 F; d1 A6 u
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 S3 F- I6 Z2 A5 O
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' T* O6 l8 [6 m4 x$ ~0 u& u
  405.       {* g3 Q! F$ f+ s" q
  406.         file1=(LPUPDATEFILE)(*p).second;- B; u0 r, O) S( H! R& Q
  407.         if(file1->vers!=file2->vers)
    3 L$ k( R  j' J7 Y3 s
  408.         {% B0 O$ I3 @; r2 x9 j* W
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 B' n; b: k# p  i9 U- q& a3 ~
  410.           c++;" D' E" \+ r' ~- W4 p" L
  411.         }/ ~& B/ W& ]& x8 ^; N; P
  412.       }  f4 {. Q" O) }! z
  413.       else
    " P0 D$ {$ W6 x8 a( e5 @" I
  414.       {
    4 o. ~/ s$ p! ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 B9 {* ]$ l2 U" D* Z& U: G* d
  416.         c++;! s, ]* m/ q1 E; h; w8 K. h9 z( c0 H
  417.       }8 Z! A0 R: M/ B/ O
  418.     }$ l# @' C* z9 l0 F* Z: u  L  f
  419.   }
    8 e4 u. `( \1 [1 L
  420.   unlink(".\\DownLoad\\update.txt");
    + `% |! z/ W( _9 _- n6 V- }, u' ?
  421.   if(UpdateLocal.size()) return TRUE;
    ; f% u9 A, G  [) w2 B8 N
  422.   else                   return FALSE;
    - m+ H* M8 C7 Z$ @
  423. }4 F% j# N4 Z6 {2 I& q% t" b5 _* I. J7 _/ Y
  424. 0 v$ K7 _7 d" r% i/ y! b: \
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      n2 P$ Z1 X5 ^
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) N" {4 i- T) e/ I
  427. ( h+ e0 z! [* I% {/ a

  428. ' N( m2 J/ J1 C/ i

  429. % M: ~" E) Z4 L# u
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# y' D" B) B1 ~" f
  431. {4 g; ]7 Q" c  n7 R
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 E- c' w* H4 K' \& D5 I" `
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! `& F/ F( }& N4 ?) r& g( N
  434.   {
    ! m+ O) P3 o( H% ?% h
  435.     char szLanguage[50];# Z- @8 m" ]8 ?9 \6 H9 N4 d& d
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( C2 h/ t, z/ a& a" p% v1 m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# K+ S2 ~' a; h: I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 \( P, B7 \' Q# W  f
  439.     else                                   m_iLanguage=ENGLISH;% z% W6 \3 f% s
  440.     char szRegister[100];. z7 k- [' m3 d0 n1 b7 {: e* |; A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 V0 S1 F! N. U+ m7 [
  442.     strRegsName=szRegister;
    3 i2 ?# ~3 D. F/ S4 ^  e/ x" y; Y% ~
  443.     char szPatchURL[100];8 i9 _6 }( C! K! v, t, A
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* H8 m7 L0 v  O2 q8 i& y! I  Y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 o5 V/ H  y9 n: l0 r2 Y; I
  446.   }
    ( x3 V; j3 M' y5 k! v0 J2 e
  447.   else
    / d) {3 |* o, q8 t
  448.   {, N8 l7 B* I6 M. \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : g$ X2 n5 \( g3 x# q: L
  450.     strRegsName=DEFAULT_REG_URL;# r; o% N% f8 L1 P* M. B" M  U8 P7 M
  451.   }
    ; J- v3 A8 I# z7 d6 I2 ]) [
  452.   if(GetFileAttributes("hosts.ini")!=-1)% _4 _+ }6 D% W. o/ z( g/ D
  453.   {
    4 z4 M5 v6 l2 ^8 B
  454.     char szIP[50];
    4 ~2 H- G0 P3 f2 ^& }$ i; y
  455.     char szDIR[300];% Q: N6 e! F( r  z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))- f1 m# v8 j7 ]; l- D8 v* ]8 r
  457.     {
    " s. w7 {. ]6 o2 h9 F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 ?4 Q& q9 }* b8 j: i+ z5 E5 U
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) ]% ?' d. L% }$ u9 s
  460.       strHostName=szIP;
    7 f9 w* H9 S! m2 f. p' \4 c- @4 \
  461.       strHostPath.Format("/%s",szDIR);
    5 F* g; c2 R9 K- S: {8 S' T
  462.     }3 Y3 u- f8 h/ R4 R  M+ I
  463.     else* Y$ A2 s; z# J. v) S% q
  464.     {
    4 j- O$ o% H6 @$ h3 ?  a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 o! I9 p, J+ e( Y1 u( `7 h6 K
  466.       {2 S  {/ i7 N  z6 S
  467.         char szLanguage[50];6 b2 v4 ?. \4 z4 T7 G$ y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' }5 S5 u6 f5 V8 V, Y6 m- |# I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: ?% L' |4 l( @' J" S. h* l
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " a  _* _) s* _8 l* W
  471.         else                                   m_iLanguage=ENGLISH;9 q$ C4 }1 }. }' y/ e( \. @- l/ D
  472.         char szRegister[100];
    - W( O/ q- o4 s# b% n
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % y9 P4 S8 C& N. S& Q* Q" \
  474.         strRegsName=szRegister;& o  k) B5 s, n: k7 U2 U3 [, z
  475.         char szPatchURL[100];
    1 f* G7 D* t/ }& z  E
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" `& M6 _- T( W9 V0 L0 ]5 C8 V
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , w# o" t# W0 e. ~' e) o
  478.       }
    ( p- Y4 `$ I0 j  v5 `: M5 d
  479.       else
    % T" Z2 U3 p$ ~7 D& ~: l8 k
  480.       {
      |& W+ \- k& e( R) u5 [3 D0 D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # K* v2 G, f' `" ]
  482.         strRegsName=DEFAULT_REG_URL;
    ) ]) X: u1 D7 n" r/ O3 g
  483.       }
    $ o6 R$ R$ O% x' W; q0 X
  484.     }; H; J7 I% Y1 T) W. l: h: |
  485.   }
      `( x) U0 H7 q' l' u% S6 F+ o' B* Y
  486.   return true;- g+ M9 m& H0 o+ i, j
  487. }5 r- V! l0 A: M1 P, @7 d/ Q5 V
  488. : ]4 K* X9 e% m
  489. #include ".\ZLib\unzip.h"  L* O/ J8 V! Y- }# x6 B" s# S, F9 `: M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# n: D5 n  t% y( J1 H( f
  491. /////////////////////////////////////////////////////////////////////////////9 `# W& H4 o7 L# g% k$ M
  492. // CRevAppApp initialization
    / X! n6 h. v, f- V

  493. % o: T# y* N  U+ x
  494. BOOL CRevAppApp::InitInstance()- c1 U4 t! C( o9 J/ e) T* ~
  495. {; G% w& S0 Y+ _+ J( w! C1 Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 K5 I6 C9 I0 e- f3 |9 Q

  497. ( T4 g5 I/ u2 ?, s3 H$ ~; Y( n
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# ?! j" f" p2 W0 b. B+ g
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + l- |- H, V0 R  ~
  500.   {
    % t! L, @- H6 t" Q& }" ]" i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 S* n" E* B. U- @- r& v- B$ x
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    0 q- N& z. s% m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    . T/ ], ]+ O& C9 p
  504.     {3 F! |0 a: V! E8 O
  505.       strcpy(szPath,szPathTarget);5 h0 e+ b4 A1 o9 f" x) ?7 _
  506.       SetCurrentDirectory(szPath);
    # B8 f/ b$ V5 h; {5 n+ h
  507.     }& X: Y5 u/ ]  {2 Z4 Q% I
  508.   }
    3 c7 I& q$ e: b
  509. #ifdef _DEBUG& @# F. Z  g* D$ n" g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 r# j- ~. z* q
  511. #else
    # R, ]! I3 I* H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / Q6 R+ S3 ^, n" w3 H" F* }" R9 f
  513. #endif& w4 y  j. |6 [
  514.   {
    . E* ^4 }. z3 a- d6 J- x5 x
  515.     char tempFileName[MAX_PATH];
    / b/ t) |. z+ M4 T: e
  516.     strcpy(tempFileName,szPathSource);
    ! t4 U: q! Z, P: S& S. H; r
  517.     tempFileName[strlen(szPathSource)-12]=0;. `6 J% r* W& {, B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
      d; C' U" W( z0 c# A
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 u* W; f3 e- n0 V7 U3 b/ L6 a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  I! Z+ B! [9 r# }. J
  521.     return TRUE;
    / R3 A+ K1 C9 d/ S/ F' c
  522.   }) j5 y; P+ y+ T9 G& L- z
  523.   // Nuke 0118: Delete run.exe
    8 |9 e$ t+ Y$ J" W. w- W* b% K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    0 G; Q6 [9 n, ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + {9 ]4 ~1 {& G8 R8 |9 h3 n& ~5 Z
  526.   if(!ReadCfgFile("Config.ini"))
    9 n# Z: u8 X2 z; `+ F( c9 q2 H
  527.   {
    $ |8 P: i) _# v5 P  L6 h1 U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);  q0 d) a8 b! _( B
  529.     return TRUE;2 F/ y$ V* U; P+ t. f% S  {+ r
  530.   }
    " H1 @4 E/ Y, p- v& K% D
  531.   HANDLE mutex;
    9 k/ g' k& V1 I
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    % n" }. @( `6 {2 m# M
  533.   {4 M4 l% e8 n& H9 G) C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): `( k: t* i$ ~. |# X
  535.     {
    - w' Y1 O4 ~, O0 u5 f8 ~
  536.       CloseHandle(mutex);
    2 \2 i$ Y3 ~9 E+ Q7 k
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ ^5 ~- c1 |" P. q8 h3 \3 _
  538.       return TRUE;5 J$ [, b/ l  M& ^
  539.     }
    $ v6 R: M! v, |
  540.   }  * l% Y9 V# P& n" \+ p
  541.   CloseHandle(mutex);
    # h/ ~9 e4 h* ]9 ^! w: [: R
  542. % c! [0 O& m* w: o, m4 D+ ]1 D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 s1 \5 I2 ~7 A

  544. 8 @' z/ q1 K5 k  r
  545.         AfxEnableControlContainer();  ?) o" Y+ L' Y
  546. 6 J8 V4 T  N; g3 p. m
  547.   bCanUpdate=FALSE;8 F/ t  U) H8 E
  548.   dwStartUpSteps=1;
    ' ?1 G, \0 W6 K
  549.   dwProgramState=AP_NOTHING;
    " h+ k7 A; C5 j3 W1 o2 K

  550. 8 X6 s2 d3 P* D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);# H- k! d6 ]* W/ `8 A

  552. 2 z3 u. }! t. U" P
  553.         // Standard initialization# ~. F  [. B+ e1 A
  554.         // If you are not using these features and wish to reduce the size/ R7 n3 }4 J' w* z# s
  555.         //  of your final executable, you should remove from the following
    / l6 }' f# M, S$ U
  556.         //  the specific initialization routines you do not need.
    0 ?. n/ w4 t5 Z) [; ^- D, H

  557. * Y0 g+ b- A9 ?+ Z
  558. #ifdef _AFXDLL
    6 g0 v2 B" ]( p! T+ e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " m& c2 V$ _# C3 a5 u4 Y& Q6 U
  560. #else% S2 w* s* F4 @
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 C6 g/ v* Y! B# }7 N. g2 ?/ F& F
  562. #endif* _: @, G' @- B; K  G; H7 H

  563. ( g0 g/ {9 `. o5 ^
  564.   dlg=new CRevAppDlg;
    : t+ J: ?" S+ c  Y$ A+ l7 o
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 n; [4 c( @% o5 I6 `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 v7 @1 f4 a/ `$ D0 k# f. C
  567.   m_pMainWnd=dlg;
    " f$ T9 y9 s0 i0 l7 l
  568. 0 ]1 Y9 p9 o5 ?( @$ d# v* a" G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, ]& Y9 a! d& r% Q8 l: `# x

  570. " l( ~8 z# r; f( ^/ C
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) u+ Q& r* r# v6 X) E7 _( A# u, h
  572. //  ULONG_PTR gdiplusToken;6 j1 |9 q! o* A: V7 h' q; n5 {* J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);$ c& Q4 I! E0 ?
  574. " S1 R9 K2 a% r: C7 @) \
  575. //        CRevAppDlg dlg;
    ; O4 z9 S2 q! l/ j
  576. //        int nResponse = dlg.DoModal();! ]; |6 j8 o, ^
  577. //        if (nResponse == IDOK)
    + k5 N$ r" D$ J+ t& I7 N! s
  578. //        {
    & a2 ?/ L' C; {$ j
  579. //                // TODO: Place code here to handle when the dialog is! C1 ]! r9 j, r, }
  580. //                //  dismissed with OK! W; Q' |# d- e' Z6 \# P
  581. //        }& T6 o% B, [  J' Q: Q
  582. //        else if (nResponse == IDCANCEL)
    5 M/ p' u: X% q7 s& M3 A
  583. //        {4 o7 q; j& e. D4 X, o
  584. //                // TODO: Place code here to handle when the dialog is5 N" W) S$ e7 X. h5 \
  585. //                //  dismissed with Cancel9 C9 l+ P* F& A0 G
  586. //        }
    , \$ b' S  @" z- _, R- J
  587. / I& U! G5 X4 m4 I2 x$ N2 c
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    0 J  D$ O& ~0 Q$ M  R1 m$ I
  589.         //  application, rather than start the application's message pump.
    2 z6 q8 y$ g* ?% {; x
  590.         return TRUE;% H/ D1 ]8 j( A/ p; u. r8 t
  591. }: t4 f+ ?4 C: c& X& W1 r

  592. 9 R( r, E, m0 ^' k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ( ^$ e* E7 g2 c: i2 ?/ ]$ l
  594. {
    : Q' t' z2 [- G2 _+ H
  595.   int i;: Y( G2 s4 g7 X+ }( I7 c
  596.   char *szRet;3 z: b. A" Z  q) t9 V

  597. % L0 E  ?8 i# @  H% _
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    8 X. }7 E# Y+ b5 O) A  K( n& X8 l
  599.   if(sztoken)
    4 A" T8 v6 z5 p9 T1 Q
  600.   {2 f' C  r. c7 L" I7 _2 r4 A( E
  601.     szRet=&sztoken[itoken];
    ' j7 `4 z1 m1 U# m/ A4 T
  602.     while(sztoken[itoken])4 E2 b  x* `0 w8 ~! q
  603.     {
    - r- L4 X% s6 I7 Q2 D$ l# R9 W
  604.       for(i=0;i<(int)strlen(token);i++)
    ; z  L! m+ O/ I* u) b4 o
  605.       {
    ; N0 ]3 F8 {7 u, J
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 p( p+ f. i1 ]& A. c
  607.         {7 }2 r. h# P  @( N
  608.           sztoken[itoken++]=0;
    & S+ z; N% h* b* }. w; e6 r
  609.           sztoken[itoken++]=0;
    1 f2 T4 F. r+ C1 S, P+ c3 E
  610.           return szRet;1 Q) Z, c' E/ {( ]$ ~
  611.         }
    & e( f' A( Y/ L: N( E
  612.       }7 H5 X( b$ p' @& s0 |2 k0 ]
  613.       itoken++;
    3 ~3 r" U) A4 [/ r! y
  614.     }: `3 b- N1 @  R- p4 S" z5 ?) M
  615.   }
    & O2 r) v3 V# u$ o
  616.   return NULL;
    * ^  z/ f& O. y) L6 o$ K" A! D
  617. }
    ! _! J5 c8 ~# N2 |
  618. 8 E( H. c. P3 e0 f. J
  619. void ProcessProc(long Total,long Current)
    " U/ Y, o5 |. W
  620. {3 M( J2 A( X  x7 w+ M; r
  621.         MSG msg;
    4 O# t! J" w( U8 y% U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);# c, V; E7 w3 n% q% ~' B
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 F3 n. _/ i8 q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 \, |3 e, c6 J% U( k/ l$ i1 i$ c9 n
  625.         {
    2 _0 ]- V7 F# [7 v2 F) w9 D
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . i; c+ }! `) F
  627.                 {
    4 K5 q! k* W, r! @0 H
  628.                         return;
    ( X  j3 v! Q, P( P
  629.                 }$ `9 L. I$ e* H
  630.                 TranslateMessage(&msg);8 D# k  t0 L0 J; w
  631.                 DispatchMessage(&msg);
    % G, S; R+ b* Z- e  I+ w
  632.         }       
    ( q; A+ d& D) ^- d" w
  633. }0 z: O! u3 b' K, d" X

  634. * ~* n. i  c1 X! w) M
  635. BOOL bFirstChar=TRUE;
    7 f! m3 p$ S7 D  I
  636. + {* v3 b3 }8 k
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 `. e, `" X! L/ e( Y$ Q  g
  638. {
    ! n3 c# t) y+ t6 Z. u8 {) X5 G
  639.         // TODO: Add your specialized code here and/or call the base class
    5 L# ^2 O6 [6 Q# Z. ~, g
  640.   switch(dwProgramState)
    + I% C2 }. U! W  C/ n  u
  641.   {
    / [# N# {4 Q  e# D% K. f# [1 o+ G
  642.   case AP_NOTHING:
    " L: O6 J& Q' x: {& c' w4 _
  643.     switch(dwStartUpSteps)
    ! O" E: m3 i5 d: q" f6 X
  644.     {
    . z6 ?6 _; c& ]
  645.     case 1:
    6 F# v$ Q/ o* ?$ s
  646.       {5 @- J, H3 x+ \/ g8 z
  647.         int i;
    % [) G8 G' g" }4 W2 x7 I
  648.         CDC *pCDC=dlg->GetDC();! z' Z1 ^1 i' R9 U; s+ q/ N' d7 h3 U4 q
  649.         HDC hdcwnd=pCDC->m_hDC;
    4 L- z+ F% Y' {' C! q/ p' M
  650. //        Graphics graphics(hdcwnd);
    * K6 l. u3 R6 C* k" T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    # B: f$ [  s3 N  B/ W
  652. //        INT iWidth=bitmap.GetWidth();
    / A) Z9 h; x4 z7 P- Y8 {
  653. //        INT iHeight=bitmap.GetHeight();
    7 x$ t$ [( C' t
  654. //        Color color,colorTemp;
    4 y9 c8 p0 Q* ~4 Z; P
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ i) H$ t& r; B- b; @% U8 v8 [( L
  656. //        {
    / T9 k. e  N5 w* @6 s" J( {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ t2 l7 x9 {, ]" u+ i3 |
  658. //          {9 h  E; C; Y# a  p* A7 }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# U8 f4 c4 F. r3 F4 U5 }
  660. //            colorTemp.SetValue(color.MakeARGB(1 S! O. h- u  r7 S2 I, W' E
  661. //              (BYTE)(255*iColumn/iWidth),) N0 Q4 t& k  B* o
  662. //              color.GetRed(),
    ; y9 M0 l# f  i0 D; F6 C# e+ f
  663. //              color.GetGreen(),
    + O- J& `. w( G' Q
  664. //              color.GetBlue()));( E! Q- D/ w, ^7 m- s. H
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' e! v# H. l" B' _8 X1 o
  666. //          }+ `$ [* k# K- ]  K, E
  667. //        }
    9 p  m" s: k, Z/ f! P) N
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ G* @# s5 c: W0 p/ @
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 U% y' a6 e0 M/ Y9 k+ T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 x, F+ K/ J! h
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 p: X1 \! t9 O& l+ |5 `
  672.         for(i=0;i<240;i+=8)! N+ h7 a; ~( l& \" z- L' s
  673.         {
      \9 k  ~* m5 ]# Z- T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- t0 F+ q+ h4 a- S3 j
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " V0 ^% m* L3 k4 L! O
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' P4 Q6 t9 O- D3 U/ j+ Z
  677.           Sleep(33);
      u, A+ ]/ [2 c; r, I
  678.         }
    2 T$ ?$ s8 m4 J; b. h! I% B/ F6 ^
  679.         Sleep(1000);1 h* Q. f/ G8 {; I8 _! }
  680.         for(i=240;i>0;i-=8)
    / `* X' c4 J( C9 b. V8 q5 l
  681.         {! w& n# I* `! |& f
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" _' K& y) L' g# s1 Y# H% N+ L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / T% [1 o5 H6 d$ j
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! _3 Y, y7 t- @, s2 x, T2 C6 o
  685.           Sleep(33);5 V, G5 k9 G# H1 x6 Y/ O* O- n
  686.         }
    $ z) H/ I& h! z6 C$ m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( q5 p/ A6 R7 j2 B& |& S
  688.         dlg->ReleaseDC(pCDC);
    + p* ~# m; R( F
  689.         DeleteDC(hdctar);
    ( \0 s5 M" k2 f0 Z2 ?" G7 R
  690.         DeleteDC(hdcsrc);9 U/ p9 _0 I1 ^
  691.         DeleteDC(hdcorg);# T' x- ^" G( V9 i( u# a' b
  692.       }
    7 P  O! u1 e& W' i( _3 f# f0 ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);% H  s# o) v4 H- F/ [% o
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 G( \; l$ A" I0 c% u4 [0 A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 r: Y- |" g* I4 {2 p# D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ; i% `: x. a, m) Q. E: t1 w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 u# U* V: X' |
  698.       if(!Dn.Connected())
    9 X1 ^8 l2 ^8 t/ X! L, p
  699.       {8 f% H' ?+ h8 K/ {
  700.         dwTotalFiles=1;1 L, o1 S' ]$ ~# y- }# q
  701.         dwDownLoaded=0;+ |& ?' i8 S0 t* E, V* v+ u. j+ i
  702.         bSilentStep=TRUE;" C1 ?, u. \% g+ w
  703.         bCompressed=FALSE;6 H4 q; J: E4 X7 l6 x
  704.         strExtLocal.Empty();% h  E  o2 P: }9 |( O$ |' t5 Q
  705.         strFullName="readme.txt";
    ' X0 W& c4 g" w
  706.         dwProgramState=AP_CONNECT;
    - ?7 ?5 {! C5 R9 X8 @  x5 J! ]; [
  707.       }- V" W& N2 l$ _) v! I+ a
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();6 V* v6 `* L1 F/ h
  709.       dwStartUpSteps=2;
    ) B1 ~$ z: k0 Y' P
  710.       break;
    6 G8 J: B! ^3 o  s+ G
  711.     case 2:5 p' ]) G6 P; |& r! T5 u
  712.       {
    ) W# C, i8 A0 f" y# K7 \
  713.         int iEOF;/ E4 Z% m1 u% i2 ~5 D- P9 k
  714.         FILE *fp;4 q  g; h7 z6 _( H$ @; Q: p7 Z
  715.         char szString[512];# Q+ L8 ]8 S3 K5 N& j5 x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) W; N+ Z. l# Z: ~
  717.         if(fp)! m& e7 ^% s1 r- t0 `/ C
  718.         {
    . e1 b9 S9 {8 F2 I# I
  719.           do2 u; T' R2 l( p" [8 i0 Y
  720.           {$ \* V, y6 ]9 m. m" J
  721.             iEOF=fscanf(fp,"%s",szString);
    7 b# M, ]9 u; m# c7 z% a5 P. Z% j
  722.             if(strlen(szString))
    " \, M3 _' J) b5 L
  723.             {2 S  M' u- ?0 x5 I
  724.               if(bFirstChar)
      c/ J; T# \7 u3 y
  725.               {1 T; f  i6 @. s0 E3 h7 \
  726.                 bFirstChar=FALSE;! M- d* I, Q9 G) `" u/ S7 z% H/ s
  727.                 bConnectIsBig5=FALSE;7 A4 f% r2 i/ o3 P9 |7 z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    * {6 m+ ?  x. z+ j2 C
  729.               }
    ' B) ?4 P3 l0 p
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));+ }$ w4 k, \( O( s* }. G* v7 m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( Z4 C1 V7 W% J5 O
  732.               dlg->m_ListText.AddString(szString);
    8 G6 W- [" |, s, N" q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! G# v- r' C1 X* [9 T* A
  734.               *szString=0;
    5 B' |) b; i  n, h& m5 x$ S# ~
  735.             }: ~& i6 M. N3 S! z$ Q
  736.           } while(iEOF!=EOF);
    ! d3 y$ F$ ~8 ]& u7 g# p
  737.           fclose(fp);
    ; t: n7 L* \" R2 D2 c/ k
  738.           unlink(".\\DownLoad\\readme.txt");* \5 f8 y/ p* l( z
  739.           dwStartUpSteps=3;- L# c7 u/ K2 H2 ~4 M# S* R/ Q% K
  740.         }! W- E& F6 Q7 u! r1 N) m5 M
  741.       }
    + H" N! v- c+ o- c
  742.       break;% f! j5 J; P" ]3 [3 R3 P
  743.     case 3:% ?. X5 ]) t% [. I
  744.       if(!Dn.Connected())
    4 w) h, A2 o) |
  745.       {
    $ m$ ?5 |! S+ e0 S! C0 D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);6 H+ G* c9 g, |" ?2 J. \
  747.         dwTotalFiles=1;  I, t( c  }2 C' L$ N# Z! a; U/ h
  748.         dwDownLoaded=0;, W: Z( \& Q' N+ r
  749.         bSilentStep=TRUE;: O6 f: {4 U/ y' X
  750.         bCompressed=FALSE;7 h  [3 u5 R3 [. `- V9 @  A
  751.         strExtLocal.Empty();
    # o. j; M3 ?" A5 J; U: j7 t
  752.         strFullName="checkversion.txt";; z; d# h, I0 d  \' T+ r
  753.         dwProgramState=AP_CONNECT;/ r, X  }, Y0 C9 N
  754.       }6 T9 `/ @- s. Z) w8 c$ I  J
  755.       dwStartUpSteps=4;
    3 K8 t' a( v, M2 Q+ w3 x# w/ v2 r8 P
  756.       break;
    1 v. Q+ a2 x" o9 t* \. [
  757.     case 4:+ ^- ?% K. @& U4 g1 i1 q
  758.       {3 L. Q% Z" L7 K0 ]
  759.         FILE *fp;
    ; o; W8 P- l; h& i( T- x* F
  760.         char szString1[128];' J; r8 j! r5 l. [
  761.         char szString2[128];
    # C6 I) }- n5 h2 U* n# L
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' b" P& W, g- ?5 o: H3 t& O! s
  763.         if(fp)
    1 ?) O  {; a& d0 _* ]7 T
  764.         {
    ' o/ G; p, ~) }
  765.           fscanf(fp,"%s",szString1);- y# q& A, h1 A* f3 f2 W4 k, ^& E. q
  766.           fclose(fp);2 E$ D3 z( U$ A  f0 [# y5 j
  767.           fCheckVersion=atof(szString1);
    7 V. p# D2 E( y9 |3 V) M
  768.           fp=fopen(".\\checkversion.dat","r");
    / j0 ^( y& w. ]) [: x2 w
  769.           if(fp)
    ( f* B0 v& v% N+ R
  770.           {
    8 ^+ R1 ]. \+ Z
  771.             fscanf(fp,"%s",szString2);
    * Z1 O! U, L+ o- L
  772.             fclose(fp);
    8 @4 j% l; x4 y7 H' A% U
  773.             if(atof(szString1)!=atof(szString2))
    9 H! ~) O: X7 r! E0 R4 n  V
  774.             {
    # c5 W/ g1 y, V( Q; o: T& V  `
  775.               if(!Dn.Connected())
    ' E5 }" L* P& r) c
  776.               {
    , B# _# L# r, P6 K9 M
  777.                 bFirstUpdate=TRUE;' y" K; ]+ X: i, ?5 s& k
  778.                 dwTotalFiles=1;
    + D$ x& d# x9 a: W1 \
  779.                 dwDownLoaded=0;0 W" y3 p1 u1 r
  780.                 bSilentStep=FALSE;' o% Y" a, K4 p
  781.                 bCompressed=TRUE;& `8 p! m5 Q& z& R$ C* j
  782.                 strExtLocal=".\\DownLoad\";
    5 Y# k+ i. z$ ?' `  H2 d
  783.                 strFullName="update.txt";. N8 I/ e* ~* S1 h7 Z3 ?; g7 Q9 ]' n
  784.                 dwProgramState=AP_CONNECT;+ w9 o9 U3 T& t- H6 H6 F5 p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " ]; G- x* k* {$ K: g5 X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * m( A/ J' j8 P% b4 f0 r( s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ t1 {; M; u7 R" m* \! @8 G7 J7 ~
  788. 5 _$ I' M4 i; E. ^) s4 Q- f+ ]# A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) |+ N8 b$ |- E* z$ L- C) c4 y
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 T! A( Y0 O2 W/ r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
      ?( Q  N& C* Q: C) Y0 P1 d
  792.                 {1 i2 B+ h! e; `  U6 j! s9 w& G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");0 K5 e* v9 P- Y" P. q% p
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    9 Z6 h- D, d: V+ v0 k% r
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' D# A. z4 ~' D0 ]/ T9 K4 E: D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 k+ V/ a, c& l+ a& D+ v& [1 `

  797.   v# H5 W$ E' n# k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* w0 @, O4 F, T) n7 \& O4 d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");+ b) I( S8 l& n9 V' |
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");$ P  }9 L$ V: \7 x% E
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Q+ @$ M' |3 r1 I: s+ Z
  802.                 }$ u6 O$ t& u4 N
  803.                 dwStartUpSteps=5;: I/ v0 t5 |( e3 k
  804.               }
    9 k/ J* p8 {7 }1 g) R, w
  805.             }$ g% d) m* ?! v  P0 O5 f
  806.             else/ k7 S; y! I* L5 L/ v2 ]
  807.             {+ x' h& C, l6 r; `
  808.               unlink(".\\DownLoad\\checkversion.txt");5 k6 w# j! h$ }% h4 n; \( i/ ~
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 L  v7 b/ |2 a/ r+ v0 |; p+ ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 K3 k- q% e& W
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ ^/ t0 j, v, [: m

  812. % t4 x* ^8 c3 h$ ]9 n! Z
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      d; W$ q; d" v( ~) |6 S2 U
  814.               dwStartUpSteps=99;
    ' H! T3 a8 @2 G' j7 s* C6 D) @
  815.               bFinishUpdated=TRUE;
    7 }6 z9 A& u5 j* S& M
  816.               bCanUpdate=TRUE;/ I; L( n# i/ V* \( S& G, A& }2 I# f
  817.             }
    : s4 y7 t7 F0 U, E, s. ^6 g
  818.           }. V1 C; e7 ^2 n- t) L  C( G
  819.           else
    ) W! ]/ F& _. U: K4 g9 F
  820.           {
    0 p" n1 K! C  i5 v. E! p
  821.             if(!Dn.Connected())8 s6 S9 L1 }* W, o3 c4 i
  822.             {
    ' q0 {  S5 O" \
  823.               bFirstUpdate=TRUE;9 I! q, j5 |( A' w9 w5 H$ t- a
  824.               dwTotalFiles=1;
    0 u+ C5 ]! P2 j
  825.               dwDownLoaded=0;
    5 k$ D7 B4 X6 @' z1 G
  826.               bSilentStep=FALSE;4 L4 H+ J- N- D2 w
  827.               bCompressed=TRUE;
    ' J) p! K) k- e/ q3 V
  828.               strExtLocal=".\\DownLoad\";1 a: f, [& _2 U: F/ @" u7 O! F+ J
  829.               strFullName="update.txt";
    4 \; y  b, M: z" i6 C% ~" L6 J
  830.               dwProgramState=AP_CONNECT;' L: p+ Y0 {. f1 b5 @0 \
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % ]8 [4 d0 P+ [1 I0 u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 S2 t- h5 b  ^% l
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 K. o) e" H7 U1 A8 _4 F
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 N/ i" H6 k; k7 E( W2 X% ?1 z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 ]% V6 I8 x( u5 h% f; G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 \1 `5 g0 E3 [0 x8 i
  837.               {
    0 D% m( Z1 O  g; ~) {# _
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    . z! i2 Y& }1 d) ^$ f2 A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; }' e" S9 @* m3 |) }
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");# \5 E  @" U0 K) N
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # e1 S0 B) i- X4 T9 a8 w/ U* l
  842.                
      }2 I; |4 y' ?! E8 Z4 b
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) C* K0 W* E! s! D# b( t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 ^& l; W6 p' H. l3 B0 @) A
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 [+ F* s5 }, j+ }) a. v# J0 {
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 \/ c9 y" s! b* B9 M
  847.               }; j. M3 }7 t5 n  V! ]* D* u
  848.               dwStartUpSteps=5;. i4 d3 f# T) {0 v; O/ P
  849.             }
    $ o2 X6 {9 p6 v" C' [
  850.           }4 P% a! _8 X0 Y- Y' b; e8 @
  851.         }
      g; `6 c; z- Y' u: `' Q+ c
  852.         else
    " Y" q+ _8 Q5 ?- D1 ~' m; n+ {
  853.         {
    2 B- ~5 G/ G  F) C& x" O- C0 I0 v
  854.           dwStartUpSteps=3;
    3 ]/ ^3 K: i! R! [6 G. Q
  855.         }% m. P( ~9 _; M
  856.       }, l1 w! d( h5 f2 X6 U
  857.       break;
    + }) O5 @& z9 z
  858.     case 5:
    4 m# {) F- ^1 p) F4 x4 F
  859.       {1 Y2 M! v1 v. Y& q! @% Z$ X, q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)7 J( W8 _1 s6 P
  861.         {
    . V7 s3 E: C) i% X
  862.           int opt_overwrite=1;1 ?3 v0 N. p! W) i7 K
  863.           int opt_do_extract_withoutpath=0;
    3 h+ e0 W  D7 t5 w
  864.           unzFile uf=NULL;
    ' b, D* e7 g0 i; B% q
  865. ; v& r" E3 Z* }3 q2 A$ [% k( w- d
  866.           uf=unzOpen("Wsa.zip");' a, t" y* r. [+ M$ K' O: P
  867.           if(uf)8 R0 S$ u* G+ V0 m! ~$ a+ G) }
  868.           {
    , B, n. p; b& C8 R1 {  }
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" D4 E( U5 |; O& W
  870.             unzClose(uf);
    ! L1 g' d/ [" L% ~
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , l+ ]' ?9 e( u5 I5 X
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    * `- I6 f: }3 J) [6 D. _$ J
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % h# u' N8 @) ^0 c* U
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 F# r$ w1 k2 d( V' l7 B
  875.           }3 t5 N5 j+ p) p( n5 l/ O4 a
  876.           DeleteFile("Wsa.zip" );
    , U6 a/ X8 k& R. }
  877.         }9 F( R% C9 n: x
  878. - N5 A# ?+ n' m
  879.         if(CheckLocalVersion())
    ) z! \# J1 h7 k0 o( ^0 z
  880.         {
    0 M3 n. E( ^" a/ Q
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    , z8 s* u' M/ x! v- F* e
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");# s4 w$ E9 t7 L9 T) y$ ?" B
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");* n9 A) a3 v9 H+ ^. L7 {8 f$ z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Y' \, J/ X" `  G- |
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);  p( s3 y$ d* v( X( o: `
  886.           dwStartUpSteps=99;% [5 H9 \  r; }# N
  887.         }  d% J6 l9 V5 W' ~
  888.         else
    1 j( D0 p- d8 u
  889.         {, h" Z" Y( U, K2 z& n
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & [& g2 z: d2 c2 \6 L1 T
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ t8 G  D- ~0 f7 I5 v9 J7 T3 q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 Y- g- X! z; ?4 h0 h

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

) ]% U! f' w& ?

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-2 13:01

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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