CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
8 X4 M: {) \2 i* |. o- o) m
  1. / RevApp.cpp : Defines the class behaviors for the application.9 F- B7 N/ b. _+ }  h. [
  2. //, J- X+ x- L7 i) n! i0 w  ]; k, I

  3. / R# ^# J5 q9 u! P/ u4 C
  4. #include "stdafx.h"# @' X! }2 ~8 J3 y5 f; @
  5. & a) G; e8 Q$ I' q1 ^
  6. //#define UNICODE. l4 W: Z) Z7 D0 `
  7. //#include <gdiplus.h>
    . a. G+ h/ Q4 D6 F; G
  8. //using namespace Gdiplus;
    % H. s  N2 F, n- }% i& g

  9. & L, M+ ^( ^5 i4 A+ e/ ~* Y1 S
  10. #include "RevApp.h") s- o% x. N8 k2 U) K
  11. #include "RevAppDlg.h"3 I5 k  d9 V% }; y+ C  o

  12. " z# \$ P+ Y: a. P7 ^! z* u8 O
  13. #pragma warning(disable:4786)
      A: `8 `6 P' j2 Y- [) M" C
  14. #include <map>
    . T+ f6 i( H% R9 D! N) c4 U$ t
  15. #include <list>; h" ]2 J. v% g1 D- y
  16. #include <direct.h>7 |9 d( [; t6 |7 p) z  d! l

  17. ; B& l+ A3 [0 ]# x1 f2 A) P
  18. #ifdef _DEBUG) p2 W) U6 C; @! u2 j
  19. #define new DEBUG_NEW2 E' C; Y2 J! W  [5 C2 _5 J
  20. #undef THIS_FILE5 c$ u( q' z+ D, t
  21. static char THIS_FILE[] = __FILE__;; r- F; r1 o1 n. o! P8 ]+ L+ N5 a+ ?1 u
  22. #endif
    - i+ @8 e  p' v
  23. #include "SkinResDef.h"$ r. n8 h+ Z" y" U
  24. #include "ChangeBG.h"
    3 W3 I% Z( v7 k( y: M9 d
  25. #include "AFXINET.H"
    / K3 |/ a6 a% P; W

  26. 4 J/ J- Z: W$ Y7 x2 |% M1 B  X. |
  27. #define TRADITIONAL_CHINESE 0
    5 ^. S" h4 A; b! G
  28. #define SIMPLIFY_CHINESE 1& e5 @* S- b- g0 S; U
  29. #define ENGLISH 2, e- H3 ?9 a9 i9 k. S
  30. int m_iLanguage = ENGLISH;
    + e% \+ J# Q2 c5 T4 \# I7 W1 ?
  31. /////////////////////////////////////////////////////////////////////////////' R. p, O7 {5 Q7 u
  32. // CRevAppApp, k7 q' V  A4 H* s- {2 B

  33. 1 G# {, E. c% ~( \5 r+ x
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 Q! i0 ^3 G1 `' Y. w
  35.         //{{AFX_MSG_MAP(CRevAppApp), R3 s) K3 d0 H9 O1 X) m* W
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 l  t1 k2 l: ?: c  r( F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    / d1 j; _7 f. V2 f
  38.         //}}AFX_MSG+ f  D8 R" S3 [0 _) Y/ N
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 ?" t) M" S( Z7 X* b
  40. END_MESSAGE_MAP()* l0 S7 ~  Y5 v% x+ F

  41. ) |0 \2 V" _- I& o' N& R/ `3 f5 ~
  42. /////////////////////////////////////////////////////////////////////////////, w1 L" h9 ~6 M0 }& `9 `
  43. // CRevAppApp construction
    ; s: ~5 k5 D# r9 [
  44. + ]; K# N; D) e: G. ?
  45. CRevAppApp::CRevAppApp(). S1 O5 ]# J3 R5 D5 a
  46. {
    ( v! f6 S  S* p7 x% [0 l
  47.         // TODO: add construction code here,
    - X" `! {3 m4 M' V9 j! }  x
  48.         // Place all significant initialization in InitInstance
    / x' d/ O! ]6 Y, N
  49.   bDisplayIsBig5=FALSE;: o* w! d+ z* o* K% m+ |0 R
  50.   bRestartUpdater=FALSE;
    + A9 l: w, G2 ~+ y7 S- x
  51.   bFinishUpdated=FALSE;; j% M+ I$ Q# |1 m4 n) k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " Q: {8 R2 }, I! _, C
  53.   InitChangeDataBig52GBKS();
    ' r5 F* K/ C& n3 r
  54.   InitChangeDataGBKS2Big5();2 b/ h( C$ J0 ?3 D2 w
  55.         //
    3 m0 a  m4 H5 A+ G
  56.         bClickRunExe = FALSE;2 O3 n6 Z8 M$ G8 @/ ^: r
  57.         //
    : {- G# v8 O+ J; k, N6 \7 I: D7 l
  58. }) s5 t2 @: u# x; o$ j) y4 F; P2 {

  59. . t' {8 \) b4 v
  60. CRevAppApp::~CRevAppApp()
    & }" ?4 F7 g% m5 G" u' P! n
  61. {6 N. \/ s- w6 v7 F% n
  62.         // TODO: add construction code here,  `& K! n& w. Y- r7 r: ]7 _
  63.         // Place all significant initialization in InitInstance
    % X( _7 ]  f( W5 J; T- ^* [
  64.   EndChangeData();
    6 C* `' y2 V" h/ h6 F
  65. }5 ?- P) D4 T; \  G
  66. ! e- C) ]' v9 ~0 R7 q
  67. /////////////////////////////////////////////////////////////////////////////6 S9 |) a6 \2 h
  68. // The one and only CRevAppApp object. D2 h, ~6 K# s8 ~

  69. 4 a" R6 L. z2 g
  70. CRevAppApp theApp;) W- p1 i6 L2 P5 S

  71. 9 V7 z8 {+ u& e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 f7 v$ R4 C3 F6 v
  73. {
    - H2 z5 ?  @" `. A
  74.   int iEOF=0;
    ) p+ }: i8 n% V' @! R1 G% s
  75.   char szTempName[MAX_PATH];1 i+ z3 A1 v- r
  76.   *szFileName=0;
    ; g4 D' k2 H. a9 L
  77.   iEOF=fscanf(fp,"%s",szTempName);
    9 \8 b9 J; k4 }
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# B5 L  G8 E  D- q/ E9 f! T
  79.   {
    $ ]) |$ w$ A: L  c1 D, ?8 |8 ~$ A
  80.     strcpy(szFileName,&szTempName[1]);9 Q  f7 \& ^9 |9 }
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    . M8 e5 V4 }+ y" v7 E) b" d
  82.     {
    6 e$ o9 m' ]3 T' f/ T. a$ k
  83.       iEOF=fscanf(fp,"%s",szTempName);' j& N+ R& Q/ E0 J5 g4 S0 T- |
  84.       strcat(szFileName," ");
    * C/ t5 f* k& I
  85.       strcat(szFileName,szTempName);
    / p. @& Z* P7 q9 t( b" y1 X3 h
  86.     }
    4 Q3 p8 F# V9 \  [  `
  87.     if(strlen(szFileName)>=1): E( ?4 Z" j% q: v+ R+ D7 ?) n
  88.     {
    & G( C0 C' z- N5 U9 [
  89.       szFileName[strlen(szFileName)-1]=0;
    ( Y7 t% a! X* H* T
  90.     }
      |+ K4 O% @8 I* Q: o& t; T+ o
  91.   }
    " W/ q, J5 I1 U
  92.   return szFileName;
    % j" z8 W0 H8 m6 K+ M! U2 b& r
  93. }
    . J) }. u, t/ m+ B! Y! Z, [

  94. # L$ Z) p, P) Z+ Z. u: T. w6 ~2 M
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- ]( @% Y! ~7 O
  96. {2 h0 \( h* A4 ^4 L$ O
  97.   FILE *fp;
    $ k  Y% x4 A) N) \- O( {
  98.   char *key=NULL;
    * F7 {% o3 c9 g
  99.   char version[MAX_PATH];
    ) _. s; f+ l8 t, d8 |, n( }& C" _
  100.   LPUPDATEFILE file,olds;
    9 F. C. O7 e1 J+ L7 m# U- K
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : J6 a) M2 i3 k1 s0 N& w

  102. 8 K! X) |5 r7 k0 W& ^
  103.   UpdateList.clear();
    ) ]) G% o5 R/ m$ u/ f
  104.   UpdateFile.clear();2 J3 D" ?$ T9 ~  @! H
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( L0 K+ _9 h2 ^& c# ~" k. c
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + m/ P; F! R6 \' ~, S, ]. y
  107.   fscanf(fp,"%s",version);
    & {/ O0 Y8 [- \' K0 g! u
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 ]; s1 G4 Y4 J
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 j) f( ?9 ?: l; M
  110.   {
    7 P: G) E2 t( ?9 Q( K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 K' F0 f% p: F' O7 C
  112.     fscanf(fp,"%s",file->path);4 q3 k! }7 J3 s5 x
  113.     ReadFileNames(fp,file->file);" O' J/ Z4 M% M! O" ^- j! ]
  114.     strcpy(file->full,".");9 N* h/ a2 N$ W. ?+ J
  115.     strcat(file->full,file->path);
    5 d+ w. R9 R8 f; T* [5 u  \4 ^
  116.     strcat(file->full,file->file);1 Y! P% i! a2 ?" e5 P0 f: e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& j6 w! Q& o6 O# p
  118.     {) J. M9 S4 r. O  W% G1 J  B0 f
  119.       file->vers=(float)atof(version);# \, {6 w. u) a% b' a9 {7 M0 m3 m0 B
  120.       UpdateList.push_back(file->full);: T. d1 w" |" z& E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; t" h3 V2 V8 z" ]& S. S
  122.     }+ p1 o  Q  o2 W2 r% C& y& m
  123.     else
    ( m% |' D3 k" S$ X& Q0 F; \
  124.     {5 H/ v( O7 u8 }
  125.       olds=(*p).second;- R, p2 G  u  S' m
  126.       if(olds->vers<(float)atof(version))4 s5 a" L" B& `6 U" O! l, ]
  127.       {8 m( b& A& Z' ]! ^( u% Y0 D* E# M
  128.         olds->vers=(float)atof(version);
    . G) d# H" l' i6 p  l% u
  129.       }- C# @7 o6 A2 B/ ~4 C- U/ k' a
  130.       free(file);
    , a" |* R9 R5 O4 Z! N+ O% E
  131.     }
    # E0 |( }; s) V8 m+ b+ Y, I
  132.   }4 [& a9 ?( g& E6 T
  133.   fclose(fp);6 `7 Z5 j; O- B! x
  134.   return true;0 ]( {7 }$ s4 N9 d# u  y9 j! K* j
  135. }
    ' j- r; e1 n  i, \
  136. & V' m2 h$ h: V2 @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  A: \) ]3 {. H% ?. J/ e6 P2 t
  138. {8 _0 p  E6 _: x( ]6 a' R
  139.   TCHAR  szFull[MAX_PATH];
      Y7 a3 S3 |- v4 B0 h' a5 ]- q
  140.   TCHAR *token,*inter;2 Z% `9 Y+ _# b: u7 _
  141.   *szPath=0;+ ?6 p% Y" R3 |
  142.   strcpy(szFull,szFullPath);* I+ ~$ C5 D( |' Z- g* E( i- o) _
  143.   token=strtok(szFull,"\\/");) k* b: b! C" K6 P% z
  144.   inter=token;
    ) n9 d* V8 @/ ?# e
  145.   while(token=strtok(NULL,"\\/")); Z2 \1 y. W$ I( ~  g- N# ?
  146.   {0 h( s- D9 H( m$ b+ S
  147.     strcat(szPath,inter);
    ) |1 c0 L" [+ W* ~1 n
  148.     strcat(szPath,"\");
    / K' I% k- @% e
  149.     inter=token;& t- q5 X: J& q8 c: {$ X
  150.   }5 n0 |4 m$ ?: ?6 a* A
  151.   return strlen(szPath);8 Z7 `7 D0 J8 c. A2 @
  152. }& m& D9 |4 m8 E4 d+ H; U
  153. # Z9 y/ [! _, \5 o' B, i
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( _+ p& f9 `; y
  155. {
    3 H$ `$ G2 V5 |2 u
  156.   DWORD attrib=GetFileAttributes(Target);
    ) v+ d( Y8 _1 m/ D
  157.   if(attrib!=-1)
    ; v& M' U  V2 h* u6 _1 Z, \; X
  158.   {
    7 b3 A/ X) h! d& k9 G7 l) S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))! B* N" j7 I) y7 X9 d
  160.     {" ]  B( F4 r% R, V4 [2 B
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 Y7 d. [7 O$ D
  162.       SetFileAttributes(Target,attrib);
    2 e+ X- q4 l0 R% j0 g
  163.     }1 @' N8 t; p& ?1 ~/ A
  164.   }
    & ^& P( z1 x, d; f# x# G
  165.   CopyFile(Source,Target,Erase);) N* z+ T; {1 S( |" ~
  166. }
    . C9 }# _. r% I9 z/ R/ _) s% ?

  167. $ o4 [! D" X1 K2 g6 j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; Q  C1 x5 i1 z
  169. {! N0 V$ p. }8 `: T9 [
  170.      FILE *fp;
    & Y. A( {* F4 U  L
  171.      char  szBuffer[8192];3 F: w+ C# y  v, V" D0 V( [
  172.   va_list  argptr;
    ) ]8 m' o0 A$ Y8 B
  173. 4 {2 N/ ?3 R5 V/ T
  174.         va_start(argptr,message);1 h' ]) _8 v0 K
  175.         vsprintf(szBuffer,message,argptr);
    0 A' ?( P: D; E2 x
  176.         va_end(argptr);9 Y% y+ y* N& |& S' M9 ?
  177.   fp=fopen(FileName,"a");' G: _" X; x1 M) b$ L
  178.   if(fp)& W9 `  Y8 r5 W" V
  179.   {/ M7 S. [7 B4 v
  180.     fprintf(fp,szBuffer);8 j; f1 h9 B+ w9 U
  181.     fclose(fp);2 q# M$ o; a! X8 a- t+ L
  182.           _flushall();
    * @; Q, n3 `  S  g( n+ `
  183.   }
    ) z( W8 f5 m! b& i0 Q
  184. }# ^0 I3 I. T% k( W, r

  185. , W: N/ e3 v4 U! z. |+ b
  186. BOOL CRevAppApp::Fclearf(char *FileName)# m/ \- U5 o( E6 F7 p5 {' w/ W
  187. {( s) l' X# o. `
  188.      FILE *fp;
    ' q: G6 B& V4 g  {( c9 |' @% h
  189.     DWORD  attrib;
    # B" D' |2 c$ M1 v' C: S
  190.   attrib=GetFileAttributes(FileName);# j1 D# W+ G+ {- n
  191.   if(attrib!=-1). n+ D/ D  ^0 j( S2 P
  192.   {
    : l) C9 M2 u- x5 _/ A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ M6 F0 B# s' o2 i- p
  194.     if(!SetFileAttributes(FileName,attrib))
    + D7 G' s# P- \2 J2 C
  195.     {
    : H& t7 e) u1 \* L' Q- X
  196.       return FALSE;
    / v/ t5 x( m; V& l
  197.     }8 p1 W! d( {6 d5 n- d. \2 h
  198.   }
    ; M. U+ F1 D8 ?, z! e% l
  199.   fp=fopen(FileName,"wb");* A/ H$ p2 e8 b) \
  200.   if(fp): X% n8 ]9 E' f+ U$ a7 ]) x( ~
  201.   {
    ! N' {' J2 X- |
  202.     fclose(fp);
    ) X, u8 t1 ]2 ^' F* l
  203.   }
    ; y& N( ~3 H7 X2 s* d* s2 X3 x
  204.   return TRUE;9 c. q3 D5 R$ f0 H( ~
  205. }
    * a4 f' k9 {# L7 o& i5 N) _
  206. - f3 [( I& K' L- q7 x* |
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ F- i) G) k6 t/ I" K, L
  208. {# a7 r0 d7 x. J" j2 b8 `
  209.   char filename[MAX_PATH];
    # C5 ^+ R! W* N! Q, ~% ^8 r
  210.   LPUPDATEFILE file,olds;
    0 D& M1 T0 Q- w% ~; k, P$ S" k
  211.   std::map<int,CString>::iterator i;/ D! q) e" f3 v% ^( E" k
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; q2 E4 l% ]' [% j1 k6 d* t. |6 H
  213.   std::list<CString>::iterator l;
    : S7 B( |' _. a) c& ?
  214. $ x$ b* Y* T& X. n/ `
  215.   if(bFirstUpdate)1 Y( X/ r7 W' Z5 C0 `
  216.   {
      D: ?3 I5 @2 \2 }' G
  217.     dwCurrFile=0;; W" t' Z1 C$ l$ [  f! B
  218.     bFirstUpdate=FALSE;0 |0 D# a) Y9 k  k* H9 p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; x+ H  s0 q  X# S
  220.     {
      m5 V, ]) K- I! W+ F
  221.       dwTotalFiles=UpdateLocal.size();' s7 b2 m3 Y1 _0 Z% @6 W' P  b
  222.       dwDownLoaded=0;
    9 C2 T8 I' V  Q1 @+ I
  223.       bSilentStep=FALSE;* f3 b4 p7 w9 a3 T1 m4 {
  224.       bCompressed=TRUE;
    7 p+ i+ e. ~. g% L5 K
  225.       strExtLocal.Empty();
    # N8 b: f% C1 c& b3 Q
  226.       strFullName=(*i).second;$ H' z" n# p& L0 C6 H+ c% Q
  227.       dwProgramState=AP_CONNECT;* A* i; D) M5 W# A7 r' d
  228.       return TRUE;0 q( j8 _. B0 t, w3 f
  229.     }
    4 S: l7 |1 u( C1 W
  230.   }
    ; g' H& |& u7 V3 w' G& m& f7 e* [
  231.   else if(bRestartUpdater==FALSE)
    1 @/ D" I' h& D& Q' b+ M% {
  232.   {
    6 A5 g7 {3 W/ `- C/ O5 Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 T- m3 e7 E' ?9 \. L" f
  234.     {
      {4 i* @8 i+ I: x7 ^
  235.       file=(*p).second;$ ~' C& U; L  ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 D' P  @& y; _
  237.       {: `' z8 [) j( |" G7 w6 S! }# G
  238.         olds=(*p).second;
    3 m2 |) }% o0 _. ~% x1 T  c
  239.         olds->vers=file->vers;! w# u. W' S) h* O
  240.       }) P( R2 C1 D8 O6 n" l
  241.       else5 ^8 f( x; L2 S4 e! _; [( k( S
  242.       {+ s% K# }. g/ @$ m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, q3 ?2 A- U4 y) L; u  Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) Q5 v' [+ [) @
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! Z& h0 C7 A# f- M2 X
  246.       }
    8 F) M/ L, @9 b9 g2 o: \4 j0 L% |' W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % ?/ C, {- |$ |. F! I4 x6 s. v
  248.       sprintf(filename,"(%s)",file->file);) c  _6 K( D0 {" w/ H7 g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / w8 Q/ w" C8 p5 \7 K5 I" I
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 [' |! {' g: `% w/ `1 Y! Y( m
  251.     }6 q" F" l( V% K5 o# e0 w
  252.     dwCurrFile++;
    ) Z3 G; ]- j: O7 s; h6 x* X
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 u! ~1 s+ }, [5 W$ U2 W
  254.     {
    " P1 Q( M9 ?5 c7 R$ R# b
  255.       bSilentStep=FALSE;/ G- B& q' n: K
  256.       bCompressed=TRUE;% j$ h# h. R2 \
  257.       strExtLocal.Empty();
    4 O  m, B7 N) n0 `/ S4 K* j
  258.       strFullName=(*i).second;
    ) O: F2 Z. V% e' j( ?7 P0 I5 _
  259.       dwProgramState=AP_CONNECT;7 J) q4 n$ h- B# b" D
  260.       return TRUE;8 F6 K4 g; q& _! C% y
  261.     }
    ' [% _2 c: D# Q# }
  262.     if(!bRestartUpdater)$ N5 L& t" ?- ^) j$ A4 m
  263.     {5 L1 a" D/ J( \$ Z1 C- W  }
  264.       int iCurrSize,iFileSize;
    1 @* @9 X2 Y) J+ C9 }& ~
  265.       iCurrSize=0;
    & M1 r2 r5 U" n4 t, B- Z
  266.       iFileSize=UpdateList2.size();
    8 l2 _% x' y3 w6 L- e" {
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : L! _4 |+ |2 q4 `( ~* Z; E5 y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    $ B: q" p" B' w& v+ v
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % [- W1 L) v2 C3 r, ~/ Z0 J
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      w" N4 G  U+ y- ^) ~+ b$ v  A" d
  271.       Fclearf(".\\update.dat");
    ) E6 ]" Z4 [, v$ ^4 g8 y
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    5 X! b( g7 h- _* v8 O2 ?! Y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    & A# ~1 M" y1 @* K1 c* [
  274.       {
    - J5 x, r- L& p! H' g  H
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ t. m  N0 h5 e5 K$ j( l# Z
  276.         {
    # z  u8 p4 `4 D
  277.           file=(*p).second;
    ( U% ?$ L( a3 i3 B2 O: [) O
  278.           sprintf(filename,"(%s)",file->file);
      {2 n7 _! g1 |6 `
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & A, f6 C/ D) c
  280.           iCurrSize++;
    # K5 h! p, e* W1 @! ~; v
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / R/ F5 J2 X2 j) G
  282.         }
    & Z& [6 v, H8 X1 I( i
  283.       }
    3 s7 ^3 d7 h, t
  284.       unlink(".\\update.txt");
    " n4 F" \. E: Q  x  w* J
  285.       unlink(".\\update.tmp");5 ?  T' t1 p% N# E6 g% N
  286.       Fclearf(".\\checkversion.dat");
      y$ o3 l! }. _& A7 D
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 L" J7 P3 q) A
  288.       if(UpdateLocal.size())
    8 J: `( q2 k: t2 Y: v
  289.       {% y9 g+ q5 H! n
  290.         UpdateLocal.clear();% H! r' a: Z" i4 U6 o4 ~
  291.       }
    ' M/ N" [; e! k2 K9 U# t& f0 [
  292.       if(UpdateFile3.size())
    , ?1 B( x5 }* H6 F- a' j
  293.       {' H6 j5 z: j& J( @. x, m+ C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    $ G+ B* s& j, b# x2 @' ^- r9 A
  295.         {
    / u$ [4 Z$ I( [, s% L( H
  296.           file=(*p).second;
    ; w" m) v, k+ k+ w8 x) W# l
  297.           free(file);
    ' _7 H6 g/ m; V( H! l1 F
  298.         }5 s- H7 h2 ?. M, X6 O; y7 `
  299.         UpdateFile3.clear();
    ! q, C0 ]3 @9 D* m+ q6 c0 j' w
  300.         UpdateList3.clear();, R' j6 h+ d" e  j4 \4 u
  301.       }/ N7 U) K1 e- w* `8 o- s
  302.       if(UpdateFile2.size())
    + x, Z" T, o' n" J5 L0 k1 {5 Z
  303.       {$ w7 ]) T# e! [5 M3 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). ^. W3 U+ I0 N0 |
  305.         {
    % M- l. ?# J$ k: ~, ~. X7 W
  306.           file=(*p).second;
    & y. r- X8 B1 [  B1 A% g7 I) }0 L
  307.           free(file);) h# w7 T$ a' d4 r
  308.         }
    $ t& E0 R/ G# P) ?: s/ o
  309.         UpdateFile2.clear();. \2 u$ t( T1 O# J, b# [
  310.         UpdateList2.clear();/ W; L6 f8 J- H& A- K
  311.       }& h) d/ P: o- I- b4 G* z5 f0 g8 I
  312.       if(UpdateFile1.size())
    ' a) J2 C- i7 \1 m; x' U$ z
  313.       {  x( f/ m8 W/ C" c  y& l6 X
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; b6 r' [3 E5 ?/ Y. o
  315.         {
    # d+ a7 t3 V+ T4 I
  316.           file=(*p).second;
    9 H2 O3 y5 w" i9 O1 f
  317.           free(file);8 @( C: c" w/ i! J/ r; P
  318.         }
    4 k" W* E  i* z; _+ |+ g; y$ o1 r
  319.         UpdateFile1.clear();
    " z% U% S& d- L3 Y# B" e+ E; k( a
  320.         UpdateList1.clear();; j" U3 z4 t  i* x. |
  321.       }
    9 k, f$ _$ M8 f$ F
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    1 s9 R/ x  J% r- l* D0 g2 J5 z
  323.     }) Z' h4 }: ?$ q
  324.   }( H* i; x% F+ v/ H5 |# }
  325.   return FALSE;+ Y$ k( w8 H  `- ~
  326. }8 p; M) x; m( S, v/ E, m
  327. 6 O( G6 t# A* Y
  328. void CRevAppApp::ClearAll(void)! g$ T# j& p, D- _( i; c6 y  {
  329. {# R! h' v5 \9 G/ E: B0 T% U4 e
  330.   LPUPDATEFILE file;: M2 i4 J: y  T" z5 o; p
  331.   std::map<CString,LPUPDATEFILE>::iterator p;7 z* R: T1 R" {7 ]3 `! z7 v

  332. 8 f7 |3 t3 g( _3 u# b0 |6 p; D
  333.   if(UpdateLocal.size())
    * g# @( ^9 L) l0 b2 \7 I
  334.   {0 D8 y% n2 w5 g, e  e/ ^
  335.     UpdateLocal.clear();/ `; o* ~2 }2 X/ I* i
  336.   }9 p  U) S8 h& S5 ~; G7 W, @
  337.   if(UpdateFile3.size())
    / @: d" Y, \6 C
  338.   {" i( ^: H2 o" u) Y: a0 J# I5 E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % i" z" T- [0 S2 z6 T0 I
  340.     {3 _0 _) ]/ a1 D/ M3 L' f. z
  341.       file=(*p).second;
    ! r+ {7 ~* d: P  z/ f3 R
  342.       free(file);
    7 j7 ~/ b6 z$ a
  343.     }
    0 m& P5 J+ M" q$ Y1 K
  344.     UpdateFile3.clear();9 c+ u$ y2 I' U0 `! e
  345.     UpdateList3.clear();9 r9 L. F  A5 z5 m  y$ o1 D
  346.   }
    9 [" {5 h& d5 q6 }- O
  347.   if(UpdateFile2.size())
    6 f4 ~+ ]6 f( t( _7 A# ?: O- }
  348.   {4 E- Z+ T' P- n
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  J3 l- W; {% _: o7 C+ [
  350.     {
    / {, w! g( K7 a7 q7 d' i0 P' o& s
  351.       file=(*p).second;
    . x  m" S$ t. K; A4 k# ?
  352.       free(file);, P: F& Z$ `' j8 E, _- w0 d
  353.     }
    0 e, c% u* h) E; R
  354.     UpdateFile2.clear();
    2 O' z9 x' m. J0 |  p1 i
  355.     UpdateList2.clear();
    * T* ~2 Q. @3 G5 E/ Y; M
  356.   }" A9 _3 i, O0 o' W; w1 U
  357.   if(UpdateFile1.size())2 W7 f$ M' r& \+ T1 Q2 T
  358.   {1 [: t. P8 q0 h; ?3 Y  h( l+ [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 _: _" ]8 Z9 e3 Q# N. A$ @
  360.     {; Q) ~# R8 s5 j7 q5 E9 p& ?9 j
  361.       file=(*p).second;
    9 B; L1 V, {1 M5 K
  362.       free(file);
    ! y+ u9 N$ L. s+ U4 @9 y; O& T
  363.     }
    % d8 o" ]* M9 V2 z& S$ u
  364.     UpdateFile1.clear();
    ; A0 N/ A; G/ @( }0 |# F
  365.     UpdateList1.clear();5 A7 n/ i# [; X7 i
  366.   }
    9 P6 z7 v6 ~# A1 v' @
  367. }  
    + `1 B9 [: H: Q
  368.   ' {  Y; J5 w  b' v/ F' D2 L; b. q
  369. BOOL CRevAppApp::CheckLocalVersion(void)! j! h" R+ p$ s- ?. T9 x/ `0 {, d
  370. {
    & m! f1 B: f+ \* J# \8 L& z; b
  371.   int c;
    + z5 p( w# i3 G. E3 Z( [
  372.   LPUPDATEFILE file1,file2;( s' r/ O) E% g6 P8 T  g
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      b7 k8 C) D. v5 D
  374.   std::list<CString>::iterator l;7 Q" A3 w0 z: @* k9 l: {1 H9 x
  375. 1 M: F, H! w5 v0 {
  376.   UpdateLocal.clear();
    8 W, F2 Q  o# l, m% k' r: ]4 \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);: h9 @6 m# W5 }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * ^) k) q! e* b% z% t) a9 o! W/ f
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) i0 q  Q( h( o. _5 w, S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' I' N. w( j# u
  381.   if(UpdateFile3.size())! P8 o# j* I2 X/ l& _
  382.   {7 z, W: `7 R& n- }  J- S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " k! y1 R' v! b  P+ t
  384.     {; S& _/ ]( k; ^7 t! Y- Q4 f- d
  385.       file2=(LPUPDATEFILE)(*i).second;8 r+ x) F. D7 N8 w* e8 i, e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! J( l0 S, X6 H. T. W" g
  387.       {
    7 e: j; s: c: D% y" |1 _% m
  388.         file1=(LPUPDATEFILE)(*p).second;- C% M. v3 @( w- u8 n2 t) D
  389.         file1->vers=file2->vers;# n5 W% q* V7 j. @; F. I( b) k
  390.       }
    6 G) [; a7 ]2 [- M
  391.       else
    # D/ x# B7 P( v) r
  392.       {
    ( E& w" K: x# G% Z  w$ O5 V& t
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 W  U0 h+ S8 t! H1 E. M5 {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 ]* D7 k& s; H8 {8 b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    : J6 Y. m! H: @) z/ \9 G! Z3 A' q
  396.       }% G, A( ~! @9 c7 E% C8 v0 k
  397.     }
    * `( I0 E8 k) `6 w. x
  398.   }) E" ^; K' T, h. f% n2 Q& c5 X
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): o5 o/ `; p* a- S9 i3 u# |, @
  400.   {
    / j# o, g; \+ t5 b, P* e( B
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()). r5 D* _9 O# r) p6 B
  402.     {+ ^0 g5 I; v( Q# f# m2 J
  403.       file2=(LPUPDATEFILE)(*i).second;
    ( b9 W1 ~5 G3 l. T+ k; H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 A) ^# e! `( k
  405.       {. V# ], q. N- O2 J
  406.         file1=(LPUPDATEFILE)(*p).second;
      S2 X) b8 k, Q2 d- L( u- |
  407.         if(file1->vers!=file2->vers)0 H& [8 z& v3 Y7 P
  408.         {
    & z: s& i' ^$ E
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * N  g; x) f0 c9 f) G
  410.           c++;8 H# B+ H; N* _8 z" b" z3 R
  411.         }  O! C9 y$ b6 Q% Z
  412.       }
    $ C/ B6 q, U4 B" Q
  413.       else' z4 A( \/ E+ W9 _) `  h& B
  414.       {
    , P- ?4 A" m0 s
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 T  M0 M/ M$ k) `' D4 Q" O
  416.         c++;( c: v# Q: E! ^
  417.       }+ l: i$ o9 G5 u; \" o
  418.     }& `1 k0 c5 r. o* U" b6 m
  419.   }
    4 N9 ~! u: K) W" C1 i( _
  420.   unlink(".\\DownLoad\\update.txt");( d4 I3 B  S# F
  421.   if(UpdateLocal.size()) return TRUE;
    9 n5 Z7 k& \$ a4 e! l8 t' Q
  422.   else                   return FALSE;: @8 _) P0 C( L3 M6 a4 w6 ^3 F( F
  423. }! }( e; Y, Y' U8 N! C
  424. # `7 Z7 a5 U" M7 e$ z6 i- `
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    3 o; C2 e$ {  T9 F3 y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    : w+ @4 F: n: u6 J( S
  427. & a' j6 s; H3 H  \) d) x9 q4 i

  428. , r5 }: k8 y0 u+ X

  429. . G/ t8 [( i! z: D/ P5 M
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)% M- H. g$ _( ]1 j5 x
  431. {+ l/ C- a2 m5 s. Q. ~' ]" c( R. }
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    + H; C1 `6 `1 o. _! w7 {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- o  Q: |! R7 m: v& g6 ^
  434.   {
    ) H8 e( V* E/ F6 ?
  435.     char szLanguage[50];0 w1 W) h- n& A8 w  G
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 p5 ~- D# F( Z2 K' A$ ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. i3 q' F& U# [- k; o
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" i& N( |+ f, p8 K
  439.     else                                   m_iLanguage=ENGLISH;$ q3 `; B  |; d& Z6 r9 G% f" o1 P( q5 w5 m
  440.     char szRegister[100];" P2 Y9 _" s) `. a, G4 n% T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 L% {5 X0 |; m
  442.     strRegsName=szRegister;8 l, U0 _/ J/ K( v) R# j/ c
  443.     char szPatchURL[100];/ m- H3 m) P, C( T3 V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 k( j. A0 I) [% A4 `
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( G) d' g) Y, R* j$ B# E
  446.   }
    0 Y4 `1 }7 V  D# k1 F
  447.   else
    1 s% I7 `. q/ T8 v
  448.   {! K, @8 b4 P% O1 h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      A2 c. H$ S' a4 w6 A
  450.     strRegsName=DEFAULT_REG_URL;* I& V4 k" n0 v. s  y- A5 g* h
  451.   }
    9 i  t. z1 o! q& [, H3 v3 g$ Y# v" ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)7 @3 a1 ~: O" f  c4 T
  453.   {
    - U1 c4 `. }# K/ D( o
  454.     char szIP[50];
    " _, [  a! w$ U1 w
  455.     char szDIR[300];
    . J. f9 H5 @/ G5 V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; }# U7 z: E* H
  457.     {
    + c- `2 u- g/ h1 q' I( X
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    $ R( n4 y- K+ N7 l/ c
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    6 ], t0 B; z, `% b, K! T
  460.       strHostName=szIP;
    7 v  {' n) q. S1 k3 x, p, N8 D
  461.       strHostPath.Format("/%s",szDIR);
    ( b, S* i( M+ s/ z1 B% u) Z. C
  462.     }
    0 [, X' m2 }% A4 C
  463.     else% F. O/ ?- J2 g* g1 W1 B& D
  464.     {3 X2 x* [# U( N& X, X9 a; u" ]' O2 ]
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 K& m) \# k1 `: H" e4 d# }2 K9 x3 I8 k0 `
  466.       {* g  S4 \/ C" T7 K% b
  467.         char szLanguage[50];
    4 j6 x2 Q& A$ m" `) p
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 w, f. S2 n6 w4 X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( }2 I+ P+ _6 l% }* U- G; N
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' S4 c' {# {& B% C
  471.         else                                   m_iLanguage=ENGLISH;* U/ g$ \& V3 e6 ?5 i$ B
  472.         char szRegister[100];
    + [% t0 g7 I6 D: ^! z; R6 K: g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 q. V4 I# P% V: r
  474.         strRegsName=szRegister;
    8 @* @) h* g3 L
  475.         char szPatchURL[100];+ z  E# O$ A6 m) ^/ e2 N& ]
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / R- e; n2 {' \+ Y/ y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);5 `# U. U  O& ~% I) p
  478.       }/ e6 X0 t) S( h  L* H9 a% n
  479.       else
    ; ?2 S9 @5 ?2 `1 d
  480.       {
    $ m! ?9 r  K7 J% @5 X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' N+ \3 S, P& i4 p8 e- g1 s
  482.         strRegsName=DEFAULT_REG_URL;. ]+ k1 D5 U& `. i: W8 b
  483.       }* j8 a2 o. @0 F6 l# h  m  C: d
  484.     }
    4 `/ r( O" `. |7 I9 _$ T' `9 s
  485.   }
    ! k1 I* J0 N0 q' T0 d! p
  486.   return true;9 Y& b7 F: k2 l  x. A9 x- E3 U
  487. }
    & B. M  n( _7 ~- P* Y7 x  c' j
  488. + l7 q* Z5 N/ b
  489. #include ".\ZLib\unzip.h"
    , _  X, k5 ?- k7 e5 x( P
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , g0 N+ e5 U6 F& F- V! [' F
  491. /////////////////////////////////////////////////////////////////////////////& S2 ?6 d2 ~" z6 B' a) ?! x, a
  492. // CRevAppApp initialization
    9 E/ e/ N: F2 M* O" f
  493. - y: b% M/ {8 p* M% y. o/ P3 |
  494. BOOL CRevAppApp::InitInstance()2 c+ b- }7 l+ q- Q. Z5 M) r4 ~
  495. {1 \' o% ^) @" M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    " O9 r' B+ e+ M4 G1 L
  497. # a1 w) o$ J' q+ X# E1 m
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    + M- Z3 p5 }2 w! z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)): Q9 s$ ^) @  D
  500.   {
    % i2 k# G( ?/ f3 A2 n! O" k! [% o
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");6 k9 D  `5 d! ~) I1 D  N' x: D* F
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 d+ b( N% j$ y" o  _) [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))! L! u( [5 S% `; h
  504.     {) G3 c4 ?: i# V2 y: j
  505.       strcpy(szPath,szPathTarget);4 t4 o) I# ?# A9 }- q) _, x
  506.       SetCurrentDirectory(szPath);
    1 @: R/ `1 c: N" P
  507.     }
    - t' Z8 _, c) C# [9 i! f9 \8 U
  508.   }; C0 [- D; O8 m0 L, J
  509. #ifdef _DEBUG! B; a! G1 G" }0 g: ?% _4 i2 @
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! W3 g% i( Z8 D4 ~2 [1 M0 x- A& Y8 k
  511. #else  ~' ]3 ?$ \3 V% ~& P7 k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))7 X1 p& l, g) o# f& ?
  513. #endif
    , N' K* b/ {2 P4 D
  514.   {/ I: b5 v6 K- `# E8 x. T
  515.     char tempFileName[MAX_PATH];
    ; q( x) Y. W/ [+ y
  516.     strcpy(tempFileName,szPathSource);
    7 D  g9 L8 Q5 @+ Y- w& X! z/ [
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 @  ?! q5 Z8 {- D0 l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 I' b- e" s8 ^4 F9 T* J5 G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);" d( o: n: w# ^- y# R
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 N, V  @5 x2 h
  521.     return TRUE;
    0 y! M7 Q0 I$ k
  522.   }
    * H+ q, s* }! P- f7 t4 S* H
  523.   // Nuke 0118: Delete run.exe
    ; U5 L) Y- f9 Z* W3 f% n" _
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ t3 y4 J- c: z( [% Z3 Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    7 G7 G5 O7 D. m/ `# s: [
  526.   if(!ReadCfgFile("Config.ini"))2 G4 R1 T# f. g: y* `0 \
  527.   {$ }* F7 s& r6 ?/ e8 S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 I1 Z9 F$ ?6 S1 ~
  529.     return TRUE;
    ! @( j- E% H/ L4 v' r- m- ]( Z# o) L
  530.   }" x" \  [2 p! [& h* I# ]7 }6 ]4 N/ M
  531.   HANDLE mutex;
    " R4 r9 T& Z! Y- o" M' J! [
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ z6 s3 |7 k" S9 t3 h# D
  533.   {
    5 u% \6 d& ^* l% H& t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): k; u$ y" n" O. h( a
  535.     {
    # {6 U2 D0 {$ d/ n6 q. D- S5 D
  536.       CloseHandle(mutex);, P! e6 D# R8 O8 P  Q; T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % A, _/ S9 Q- ^# f( P7 q% l) i* k9 u
  538.       return TRUE;2 T6 Q) {+ q* U( \$ A, |* |( M
  539.     }! P; |" y1 L* y# w1 y5 r
  540.   }  
    , m# L  i( k" r2 a5 A0 k2 d
  541.   CloseHandle(mutex);, i1 z+ H  N. E
  542. ( R$ v- J* M  {) q- `& a5 U2 C& n
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      l2 A3 g! A: X1 c
  544. ( Z5 @3 r; P6 U4 C* J, z$ J& y
  545.         AfxEnableControlContainer();5 k9 J" [, w7 R+ F. \( v3 _0 n

  546. 7 {% ~8 _8 J. a2 G$ V
  547.   bCanUpdate=FALSE;: X7 [! g3 K* m6 C, I: z1 `( v
  548.   dwStartUpSteps=1;
    5 u+ `% }: N  C, }: S' y. i; v( {
  549.   dwProgramState=AP_NOTHING;) S/ j% D$ ~% i. y  D

  550. ( J% K. X  J7 k1 }7 j! d( y' t: _
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    + t. A5 X3 ^# N8 I  t

  552. 5 T+ z; A% u$ x6 c3 h: K% @
  553.         // Standard initialization, W, E; q- ~, B3 ^6 g
  554.         // If you are not using these features and wish to reduce the size9 m9 `: g# K- c9 v
  555.         //  of your final executable, you should remove from the following
    & N* K* |3 o0 `% Y% E7 d4 P, v; B
  556.         //  the specific initialization routines you do not need.
    / a# f# t0 f, M- m( J
  557. ) Q' s- O+ ~6 L- ^; s" w  G, n
  558. #ifdef _AFXDLL1 r2 T6 ?: J' _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 L# I: p7 M4 u) |, f. U% @' ~
  560. #else
    ! z' W9 r2 n" T& e
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , ]5 r7 Z5 Q: K. L9 k
  562. #endif
    7 e) i& D1 K9 E" q" _# S' B
  563.   a! h9 |7 S" I; f' T7 `
  564.   dlg=new CRevAppDlg;/ g% W) z$ B) w" x
  565.   dlg->Create(IDD_REVAPP_DIALOG);% l6 I0 M7 X6 g. V
  566.   dlg->ShowWindow(SW_SHOWNORMAL);6 @( p  k+ M/ l) H
  567.   m_pMainWnd=dlg;
    & t2 f1 x  I8 g: K6 a" o

  568. 2 C4 m" X" `0 x! B& W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : {( Z& q2 U# l# P

  570. ( l, F3 m# ?; {) G; D. Z" }
  571. //  GdiplusStartupInput gdiplusStartupInput;
    2 t# l( w9 w% R0 I6 G. V
  572. //  ULONG_PTR gdiplusToken;
    . G- F0 v; z% f* s. D
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 m9 E; R- E! h

  574. 8 a$ |% {8 B1 }: A# q/ s
  575. //        CRevAppDlg dlg;
    7 q" J2 H& Q1 O+ t- C3 n6 u/ k
  576. //        int nResponse = dlg.DoModal();
    & y3 ^0 i; [; u. i4 O9 Q2 F
  577. //        if (nResponse == IDOK)
    # _4 S1 Q! a! [. z1 a; |  U- A
  578. //        {
    * d% F. B0 n* a+ q8 R; B
  579. //                // TODO: Place code here to handle when the dialog is
    3 T4 V) p1 j( {! n( c! R
  580. //                //  dismissed with OK2 Y. |3 K& ]6 q) a6 b
  581. //        }; [$ Q% {' X7 }; q1 U
  582. //        else if (nResponse == IDCANCEL)
    , d' F" J  l7 T6 g0 a2 j. Z
  583. //        {
    5 M% `3 D( z) w# P3 ~2 l0 J
  584. //                // TODO: Place code here to handle when the dialog is# j& @- u7 m' n* p
  585. //                //  dismissed with Cancel3 D4 f4 [3 e! f' I( e" @! q, z
  586. //        }/ U' [" x+ C& m2 w8 f
  587. 9 e$ e; C; b2 U7 ^5 |5 [" q: E
  588.         // Since the dialog has been closed, return FALSE so that we exit the# f+ I/ `6 v1 w9 Q
  589.         //  application, rather than start the application's message pump.3 T& H4 G. F( z' R7 ^2 ~) j2 V
  590.         return TRUE;
    ! L9 k, S" U% k% V' f3 D% ~( k5 L
  591. }. d5 \( s8 i2 y
  592. 8 s+ k: V; V5 H- S4 H$ g: i# F
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    % R2 [  R8 }2 C
  594. {" h6 [) A2 I" S
  595.   int i;* y  E$ y$ B6 W' R+ o4 E
  596.   char *szRet;- ^# s8 h7 Q0 c' g( }3 m; s
  597. : e% F+ Z6 c+ Z* z* x! Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 C! t0 n* s! K0 R; B3 l
  599.   if(sztoken)7 \$ @- u; i# n
  600.   {
    9 E( p" a0 U& }) g- A* u
  601.     szRet=&sztoken[itoken];9 R" @1 s1 j) j0 z
  602.     while(sztoken[itoken])
    ! b& Q% Y. F. Z3 n+ o
  603.     {! L( n1 }# z* a* L& `% S
  604.       for(i=0;i<(int)strlen(token);i++)
    * _. [: @& y1 H( ]8 q
  605.       {
    7 Y4 A2 Q0 t. a$ w2 P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])( D, j. t9 N. E0 z; v
  607.         {
    6 J1 c% e4 a# D
  608.           sztoken[itoken++]=0;+ F7 s3 f: X  _+ `
  609.           sztoken[itoken++]=0;
    " z" Y3 W% x: D
  610.           return szRet;7 V. W4 Z2 F( P! o
  611.         }* R5 U. q( k# D6 a. @
  612.       }
    ! b; v/ g( ~5 b
  613.       itoken++;4 V4 d4 o+ z; ~. ~
  614.     }; s' {+ ]: c$ u  Q# w
  615.   }
    - J/ _# ~% ?( A0 B9 _
  616.   return NULL;5 ^( ?1 _" e/ J
  617. }
    ( R6 K+ F" V6 K2 ?0 j5 d. w' J
  618. $ Z/ T& n0 m' `* Q2 K7 e
  619. void ProcessProc(long Total,long Current)
      Q; T5 X! v* f
  620. {9 k, S4 K" {& g
  621.         MSG msg;% l# @5 e- a' J+ u5 U& n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' D) p2 @" d+ E8 e) w
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- v$ D. r  A; {3 @: |
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). |2 Y2 X% q0 |2 r( u! @' a- i
  625.         {1 |# t& {  X. Y8 K
  626.                 if(!GetMessage(&msg,NULL,0,0))4 _9 O$ |* r& K9 b
  627.                 {3 Q# M* ?- u' }: z, t, q
  628.                         return;8 ^4 J% a" L5 r9 m$ X
  629.                 }
    ) A9 b4 S) r! M/ t4 h$ Q
  630.                 TranslateMessage(&msg);
    1 a0 I# D+ R& Z- Z
  631.                 DispatchMessage(&msg);
    " Y5 b# V8 A: _
  632.         }       
    # t# a" F4 M" [1 c- {1 k
  633. }
    3 n- O3 P0 O9 i, t3 a+ S* k+ n: x; R4 t6 {
  634. # x- T* n. U; y; q- m, F4 q
  635. BOOL bFirstChar=TRUE;
    $ \% d" x+ x, {: ?- j6 L

  636. # l; X- K# }" @8 q+ e
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    $ S  I( n; c. F7 x$ l
  638. {, U, ~* P/ E! Q: y3 I0 W
  639.         // TODO: Add your specialized code here and/or call the base class
    # i, @( ?" o/ L  I5 K' Q7 Y9 \4 V
  640.   switch(dwProgramState)# T6 ]% ~* i1 _
  641.   {6 ?/ R- ?% T0 I+ l( N
  642.   case AP_NOTHING:- k" ]0 R0 D- z/ K9 n8 r
  643.     switch(dwStartUpSteps)4 ^. x9 V4 R8 A4 U4 K" W
  644.     {
    . j) h1 {% Y* ~8 a7 U9 x
  645.     case 1:* w8 [/ J% @' o- B( I
  646.       {
    $ \& n( {5 I4 Y% p& ?3 d/ ^
  647.         int i;* C9 g0 V2 z# y% w5 R
  648.         CDC *pCDC=dlg->GetDC();
    ! k4 o: `8 S) d
  649.         HDC hdcwnd=pCDC->m_hDC;
    ) \% k5 m7 _4 l! H
  650. //        Graphics graphics(hdcwnd);
    ( }. p8 B7 X( G/ n
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 ~# y$ K+ d& u6 L0 ]3 r
  652. //        INT iWidth=bitmap.GetWidth();
    5 }; f; K' ?, [# B* ?* v+ I) _
  653. //        INT iHeight=bitmap.GetHeight();3 w; Y6 c+ f) M  B1 w
  654. //        Color color,colorTemp;
    / E) n* h" M0 K3 w- `. B) o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & ?9 h3 v3 u; p0 r
  656. //        {# J* a1 r/ c# p4 n
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)+ u6 K- g( O* {! H, M9 D
  658. //          {
    % R( ?" D; T! T1 B. z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ `# S: T3 b0 o( L" f  ~  c, U, v4 G8 C
  660. //            colorTemp.SetValue(color.MakeARGB(2 L- r: j& h8 o4 V6 d2 J
  661. //              (BYTE)(255*iColumn/iWidth),
    ( L* l: T# C  G2 q, S
  662. //              color.GetRed(),  L3 j$ z/ A# \$ ]
  663. //              color.GetGreen(),
    4 r8 E, R/ G6 A& k
  664. //              color.GetBlue()));
    & g8 M, {8 o3 q0 P
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + U  f% l! L. \, o
  666. //          }2 I) b3 r6 h# F' i* s' ^( m! u# Z7 e( j
  667. //        }; }# H* [& ?9 r  H- _& f! f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    4 P- b5 i) M7 v1 T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* t. ?& D$ d4 l& k+ r1 p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");" E+ ]; j4 \( r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( k" i2 j* g, W4 ?+ c- ~2 K
  672.         for(i=0;i<240;i+=8)
    4 E4 x! j( P, [* u+ G
  673.         {
    * y* x# n* T/ ^7 W, x0 |+ A9 U
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 [( m$ t7 a4 R' ]) {! V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 A0 n% a: U+ m) a( T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) F$ Q1 }) d- f4 O& z* {# ~
  677.           Sleep(33);$ m" ?5 U! l6 z1 G7 v
  678.         }# S4 p: n9 t2 |9 X1 r, O
  679.         Sleep(1000);
      B, h: v: D0 f( z! N
  680.         for(i=240;i>0;i-=8)& I) {# C* H1 q0 D/ t, P
  681.         {
    % x' \1 i) \, e7 y+ F5 J* X
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- v, T$ [$ O& W- Z9 w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  N4 L3 B0 a' P% c6 r# S
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * o) `: a1 K5 R$ h8 |
  685.           Sleep(33);0 J, p& k! i! l2 {( d$ k: V: n( R" V& A
  686.         }/ P. L) L% _' [0 Q6 F0 h
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    + a/ G, H) {. B& P9 g# D, D
  688.         dlg->ReleaseDC(pCDC);9 f7 u+ t3 }6 h
  689.         DeleteDC(hdctar);% b: Z5 M! ^4 B# @$ W! V
  690.         DeleteDC(hdcsrc);! m& |. C1 G: \+ l+ x/ Q3 h2 S
  691.         DeleteDC(hdcorg);
    + @1 \. q6 m2 B
  692.       }
    # M$ k* d5 e/ _+ e
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % a' l. U) }1 {) {# d3 R9 m
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * `8 Q/ O: W9 z# @" v
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");5 ~) j) ]. `3 ^8 k  J, u8 @8 C
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
      _9 m8 X# z3 n: c  u5 j) {+ ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 g+ Y  ~; Q& H# j9 z" q3 t# @  i; u
  698.       if(!Dn.Connected())
    + o. {; x1 h- q+ U, l2 s) [$ D
  699.       {
      M1 Y& t0 U7 X, w4 K& _
  700.         dwTotalFiles=1;0 p! @) i' o" ~0 [& \' Z7 m$ t
  701.         dwDownLoaded=0;- P0 }) w! W1 V6 R
  702.         bSilentStep=TRUE;
    ( T4 x; L2 J; F" \, J
  703.         bCompressed=FALSE;1 L; f  |3 k  y9 l. b$ J5 m
  704.         strExtLocal.Empty();
    & \7 z  u/ t) h. q- ]7 U# c# s
  705.         strFullName="readme.txt";# Z8 O6 C6 N2 @8 h5 K# A
  706.         dwProgramState=AP_CONNECT;& D- q8 J7 y" x0 _# Y. V( c+ f$ A& T
  707.       }
    / C/ ]' }/ c. K0 r  F9 I5 d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. u# y6 S9 ?, @6 d. D  v
  709.       dwStartUpSteps=2;
      q0 E' {6 R0 P+ E
  710.       break;# t8 _- D4 h- ]
  711.     case 2:
    1 B  Z/ }. O- ?7 Y. Y
  712.       {) X) g. _/ H! f( D1 V7 b
  713.         int iEOF;9 A; R3 P5 T+ v1 _
  714.         FILE *fp;5 |5 Q8 p  W1 K: J0 z
  715.         char szString[512];
    ) }- b9 U* I* `& S* q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + H+ _" M8 m" E+ k  t
  717.         if(fp)4 a2 \$ f0 v  N, o; a! c! n6 Z9 I
  718.         {& q3 F( A$ a0 }( i+ F) j
  719.           do9 r* E/ Q3 Q- j$ P
  720.           {: @* ^* P6 h1 W9 \$ ~1 G" q: D+ |
  721.             iEOF=fscanf(fp,"%s",szString);7 N. b. U- _( N/ ^
  722.             if(strlen(szString))9 c7 t$ ]. |0 v3 Q
  723.             {
    ) _/ m5 f9 K1 x" i' ?
  724.               if(bFirstChar)
    ) W. r$ j1 c+ I  b7 s( F. H. K" c; @
  725.               {5 ^% `, V6 H6 n2 W
  726.                 bFirstChar=FALSE;* l4 j4 c$ k2 z. W: H  j" d
  727.                 bConnectIsBig5=FALSE;
    ( R$ M8 c( H7 C+ _) ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; W2 J3 z% s  E  K7 e: u
  729.               }
    " N, e# R- K* c% H! E
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));  f. D+ T; ^( v1 X+ b/ d: `! q$ b+ X
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! ~+ N0 O( r: f- S
  732.               dlg->m_ListText.AddString(szString);
    + H6 H, D- e# D+ D: d% m& c6 r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' C& f: U% u( ]: G/ }
  734.               *szString=0;, p& B* k% B+ R
  735.             }
    3 H  q4 N7 S* b2 l4 M+ x
  736.           } while(iEOF!=EOF);
    1 ~+ S; U& e9 O( g9 u
  737.           fclose(fp);
    ' ]1 h5 k7 I0 [5 A0 s
  738.           unlink(".\\DownLoad\\readme.txt");' U. e4 V  [* B5 v# P0 E( Q
  739.           dwStartUpSteps=3;9 I( ]) F2 O+ n0 k; v9 g( M
  740.         }0 j1 ]6 @; V/ p0 E
  741.       }
    1 x8 _7 ?- q3 v/ ?4 [3 {1 v
  742.       break;) R! |' I$ K& [$ V
  743.     case 3:
    # ^% ~7 U( P& Q! K  `9 f
  744.       if(!Dn.Connected())4 |4 F9 N5 u+ q& \
  745.       {
    ; |  F* M+ g! `4 S
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);/ q- R8 H. A" f( Y- D: R
  747.         dwTotalFiles=1;
    * h' u6 V! K; k" w9 G, s! s8 a! v  h
  748.         dwDownLoaded=0;' A( m% C; f% q/ Y; p: O
  749.         bSilentStep=TRUE;
    + O! a% k% P. n- d& V& g
  750.         bCompressed=FALSE;
      ]5 U& R( Q9 Z4 I6 E0 Q" @
  751.         strExtLocal.Empty();4 v& ^) v6 V: T  \0 l
  752.         strFullName="checkversion.txt";
    - W/ n9 r* K5 ^  }8 u
  753.         dwProgramState=AP_CONNECT;
    ) \7 d$ I4 {9 f% H  M9 ~$ l
  754.       }
    9 @' V7 @3 X8 H- p' c+ l! B
  755.       dwStartUpSteps=4;
    2 Y( u7 P3 x; I& |; y* P3 _
  756.       break;
    * r) q4 e# W" Z* C: f
  757.     case 4:! Z  c; {  |: H0 b+ `9 D' n! y
  758.       {
    9 E) J# p: Q% g& u
  759.         FILE *fp;6 Y8 A8 L, t' H1 Q1 N1 _0 j% s% l* l
  760.         char szString1[128];
    : q. G* S( y8 M8 H( r5 w. b
  761.         char szString2[128];: j; d1 N" P$ J# K0 b8 R; r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " E- E4 _! L3 G% S+ W4 c
  763.         if(fp)
    1 V7 v  c# B; S8 s2 m5 t% h
  764.         {4 p% y( O3 k. _/ m! p
  765.           fscanf(fp,"%s",szString1);1 g( h$ w* f' g# r
  766.           fclose(fp);  v2 b6 p8 g) U7 C$ l1 ~+ Y
  767.           fCheckVersion=atof(szString1);
    8 f6 t, t; C: i7 U# a: A
  768.           fp=fopen(".\\checkversion.dat","r");
    : p5 }% X0 ~, I' k0 `
  769.           if(fp)
    $ j' n1 A0 y- [" k6 L9 L) L5 W1 _
  770.           {
    0 F4 _9 ~6 h1 N- d: v
  771.             fscanf(fp,"%s",szString2);6 \* A9 K& L6 ~2 N; ~
  772.             fclose(fp);: g; ?' S- z& G7 A, a5 B4 [
  773.             if(atof(szString1)!=atof(szString2)): C, B- ]7 R( v; v; ^% z9 q5 |
  774.             {) ~- H8 \  D9 l3 o8 T" o
  775.               if(!Dn.Connected())( h' Q' ]# |+ Z& T% E
  776.               {
    : N. H; l7 y( ?8 u9 [/ e" L5 h+ H) I
  777.                 bFirstUpdate=TRUE;% {" x; O, T0 K
  778.                 dwTotalFiles=1;" P2 t: G, g8 _  i0 T0 t
  779.                 dwDownLoaded=0;
    " N2 I$ u5 h9 Z/ f% r3 d
  780.                 bSilentStep=FALSE;
    - Q# \; X; H1 V4 x7 p
  781.                 bCompressed=TRUE;
    5 }7 {9 P; \* ?1 s" C/ F& f. I& |
  782.                 strExtLocal=".\\DownLoad\";# l6 z& L* o3 Y" a
  783.                 strFullName="update.txt";! D: ?) g$ K( t2 g* T1 i8 {! i- d# k
  784.                 dwProgramState=AP_CONNECT;
    ! q! F5 Q. h' ~9 ]) z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " ?" ?3 {3 Z% l) E- D
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & _+ M* U! a4 `$ _- V
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 Q0 g; X& J% ^9 H! A! T4 [. P

  788. - C7 B) q7 I% b- P& t
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" ~- L7 e  Y0 X. s8 {
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    5 I* G( r- y8 A! ^, @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 c4 L9 Q) |# F7 |3 G7 Q
  792.                 {7 h0 w  y& _# p: f) a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' D& [5 l4 _* Y* M' G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + S. j: w, w0 I3 o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ! M+ }$ V  ]/ g9 N1 {/ A; K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! n- _; C+ E0 d/ S/ b
  797. : t# M# x$ |9 i3 d6 ]3 D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 w2 R: S% K! }  i
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 [" @6 G6 C: }8 a7 h
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : ?+ c+ f8 F  l! o4 {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ n; P0 I3 R. K: {
  802.                 }4 p% ^6 G# J, u6 u* x& d, e9 u
  803.                 dwStartUpSteps=5;& }+ [- h7 A7 y0 U$ y
  804.               }
    & |1 ~  v- ^6 u$ x, y7 k; @2 J
  805.             }
    3 T9 I3 u8 S) c- B# W4 i, w. {3 Y' O
  806.             else
    # o/ A! m$ r" Y8 p: q- ~
  807.             {8 P& l/ I* h8 ?0 \% F
  808.               unlink(".\\DownLoad\\checkversion.txt");4 E& B; j5 h( K& `- y( k3 b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: C5 M0 h4 v% k: W1 \1 ^$ W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# i3 o9 I4 k1 A' K
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ C# t7 S  @& s8 U3 V

  812. : D$ s! x3 Z, R2 w1 w' Z
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 N5 G5 E0 @$ |& @% N3 q
  814.               dwStartUpSteps=99;, M$ P' ~9 S: P0 E* n& a9 n* w
  815.               bFinishUpdated=TRUE;
    2 O0 _0 ?& I. i. ~
  816.               bCanUpdate=TRUE;$ \( m8 q! {, J
  817.             }$ @  g# J/ P$ B" W$ K9 Y$ d
  818.           }3 J4 J4 `. Z  U6 _8 ?0 ^
  819.           else
    5 s! g' e. V4 o
  820.           {  M: n2 w1 ]" S2 z) ~5 i" m2 t
  821.             if(!Dn.Connected())0 k  w2 ^' K" n: [
  822.             {" M2 e7 m' j  D0 V9 _: A' z
  823.               bFirstUpdate=TRUE;
    ! v* k. }8 @" D& p- z$ Q, _
  824.               dwTotalFiles=1;" a, u$ R( ~! D4 s! ?# D( y
  825.               dwDownLoaded=0;
    " i3 Z: S; ~$ r( }7 B: T; e
  826.               bSilentStep=FALSE;
    * R' ]5 Q  u8 y& B; l8 C5 Q$ Z! _, f. o
  827.               bCompressed=TRUE;
    / r) L7 R4 {' e
  828.               strExtLocal=".\\DownLoad\";. p1 z# G6 H1 O
  829.               strFullName="update.txt";
    6 ?' f) }2 b2 T: ]
  830.               dwProgramState=AP_CONNECT;, S7 z: J7 r" |/ Z. q; z% j
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 _6 V7 \1 u) I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ o/ |. k' _) E  o" F3 o2 ?* z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 e+ H0 a8 m! m! q' j+ K  u
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. V: X4 \; f) l
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ( H+ |1 o& ~( I& {# }
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 Q' V- z% k  M4 J
  837.               {
    , s0 c0 {. I3 r# c7 Z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; F3 H$ j. p4 Q9 c$ o+ Y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ }- G+ J5 J* r* T/ A5 j
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 z% D% Z  \% k- R4 e7 G/ |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 B9 t: Y; T& l& w. p* j" O
  842.                 ; |# F2 z3 g/ C5 s: t3 A  v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; o9 P# M, G* S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: _7 K1 Z6 B1 u" ~) ?+ F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' j1 N, }) @3 F  n
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' D  W6 a. ?( x  N  ^
  847.               }
    + h( v! K* b4 F$ {" p) B
  848.               dwStartUpSteps=5;
    ; F5 E: B, S6 H( ]* p
  849.             }: Q) e$ z" d9 m' ]5 ~) ?  |; F- e; [
  850.           }3 b& M7 k2 x, s% n7 c4 _& ^- ]( O
  851.         }
    5 U; J. |" T, p5 T
  852.         else
    5 H3 S4 |' X- Y+ |0 L% J: d
  853.         {; \4 U  U+ ~; W! p
  854.           dwStartUpSteps=3;
    0 D: m, f2 ~6 E5 B
  855.         }
    , a6 i, P4 L6 r+ t% }3 {
  856.       }
    9 ~) a/ n- ?* }5 h
  857.       break;
    3 O4 C, B, Y) c- R3 ?
  858.     case 5:
    4 \( T6 i$ k7 y2 W5 P7 F2 @+ d
  859.       {
    & n# {8 A( U0 p! o# o
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ; q0 y  _6 c5 H% v' a7 O/ y
  861.         {
    # G: k0 ~, N: X4 q8 p# p
  862.           int opt_overwrite=1;
    , g- }, H; V4 e' v% T( i
  863.           int opt_do_extract_withoutpath=0;
    1 N8 B, q! j' W3 s
  864.           unzFile uf=NULL;5 G9 U# V; [0 R. |3 _+ P* T3 f

  865. $ e% O# X& `3 b
  866.           uf=unzOpen("Wsa.zip");
    : u7 }0 A$ y# G4 x' g
  867.           if(uf)6 N- E9 J) m) g% e1 s. a) F
  868.           {
    & ~/ c4 l5 L! V6 ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ' G6 N; v" o3 Q, \9 K
  870.             unzClose(uf);2 y, G: l1 |. ~  r* g+ u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    8 l) _  F/ _- Z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - r- `, F( T4 Y  P) g1 y! }0 o4 D
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 ~; d$ C5 ~# H( `7 u
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , H$ M6 s9 K4 w6 x; C. M& b
  875.           }
    ; i) C, d! X& D' k% y' A1 s' e& e6 F
  876.           DeleteFile("Wsa.zip" );' _) z* J" X/ f4 J2 T4 m! Z
  877.         }: N' a% @' r/ s* @+ |9 E, J( p8 [

  878. . Z: d  _- c3 Q8 M! q& g
  879.         if(CheckLocalVersion())$ s' f, o( Y: m# K4 T
  880.         {
    - h. r/ R0 H( e# ?
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");. n( ]4 V6 d" I3 v6 B
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    0 N) t* T/ G# d! D! p
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");$ C% s" w& b' g, r
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # E$ z  E3 u2 z2 p. k2 o- y
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    & O) L9 Y: u! i7 t
  886.           dwStartUpSteps=99;
    7 `$ P7 ]5 Z$ C& B' }5 Q4 {
  887.         }$ M: Z3 g6 ]* g+ }
  888.         else+ V7 t3 N7 V  }3 ^$ I
  889.         {
      V- J4 J- \2 D) b
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " h4 O. O5 g  B. m2 R$ x+ n- X" z5 R
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    0 Q- j3 S- p4 O$ V# W
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; m. }) L: T* w

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

) l9 A9 C9 N9 `) [

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部