CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
( |& R5 _  W+ a5 |! x
  1. / RevApp.cpp : Defines the class behaviors for the application.0 {  g6 F* Y2 ~' t. @* ^# G
  2. //
    , K3 y% ?' i  X- x0 x/ e3 O

  3. , O* a/ @& G! n: ?5 V$ t
  4. #include "stdafx.h"
    ' `1 R, |% H) x0 N6 w) Z

  5. ) m9 M$ m6 H. X& P/ k- ^/ F
  6. //#define UNICODE* v7 H6 Z% w# p! c! W, m0 C
  7. //#include <gdiplus.h>* H  a, g- C1 x
  8. //using namespace Gdiplus;/ _  S5 w) i/ Y* b; J% U

  9. - M: h& S1 y- C+ J2 y
  10. #include "RevApp.h". S9 Z* g1 o4 t$ Z( f* Q" R  ^  _
  11. #include "RevAppDlg.h"$ V; y8 D& V! e. S2 p
  12. " Y4 b) W; z8 c! A9 \7 c6 u7 ]7 N+ @
  13. #pragma warning(disable:4786)' |8 J1 q& F0 b& P# K4 u
  14. #include <map>) k# X  s' T/ K
  15. #include <list>
    ) P; p5 T3 {) z+ v6 z
  16. #include <direct.h>1 H( d6 |7 y/ N; z: u
  17.   ?+ e3 m+ W, t' g8 v) M" a/ ^. f5 M7 W
  18. #ifdef _DEBUG
      w# o' l5 W6 K/ m9 T2 Q
  19. #define new DEBUG_NEW
      _* @) V2 `% e# B* F* S
  20. #undef THIS_FILE4 y# c: \9 C& u$ B: {
  21. static char THIS_FILE[] = __FILE__;
    ! \1 F$ g4 A* k* {5 w& }
  22. #endif
    - m: {( H% z+ l5 r
  23. #include "SkinResDef.h"
    8 g. z  m$ R6 K. G
  24. #include "ChangeBG.h"
    3 r' w& b+ Z. }/ _7 M+ ^' O% ?4 M
  25. #include "AFXINET.H"" U" F( ]9 C; S* B3 V" H
  26. & u2 J' \1 n7 ~) i) v" I! L
  27. #define TRADITIONAL_CHINESE 0
    0 I1 Q; F6 Z# e
  28. #define SIMPLIFY_CHINESE 1/ N; {; y) h' u, e0 r' l: T
  29. #define ENGLISH 2
    3 I0 G9 n$ G8 B9 A0 ]/ }* F
  30. int m_iLanguage = ENGLISH;  D8 ^+ C7 a: R1 U& u8 e) @
  31. /////////////////////////////////////////////////////////////////////////////, j9 F, W( i8 r( \; I
  32. // CRevAppApp
    6 I' h8 Q$ N1 b0 V* X

  33. 4 k/ v- ]* P) ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)) f0 Y( t8 |: l& S9 g' i8 k
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    2 S; K" ~. C, x" c) x/ `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.! L% y4 C/ y  j* P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' `- T7 o7 k+ z( D
  38.         //}}AFX_MSG# h0 w  C. q* {; z* t  _- l- q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), E' U) D. N6 i, Z
  40. END_MESSAGE_MAP(), [8 b8 z9 P$ r3 ?
  41. 2 p' R8 A0 D6 u0 t: M' u! a; Q* U
  42. /////////////////////////////////////////////////////////////////////////////
    6 K6 P$ D' [6 U4 ?
  43. // CRevAppApp construction5 y6 W, N3 F# }0 {3 W5 @) w
  44. 0 Z1 G0 V. z4 M$ ^1 W
  45. CRevAppApp::CRevAppApp()5 V) s0 B  _) R( h5 T% c3 H# Y
  46. {
    - o5 c6 [2 ?! J% t& d1 l# a8 Q
  47.         // TODO: add construction code here,
    : i: [+ q8 Y) ]( g. x6 \1 H. p) }. n" j
  48.         // Place all significant initialization in InitInstance8 R/ O% B; y! r
  49.   bDisplayIsBig5=FALSE;
    ) b  H! v4 m5 v" i8 {, p: n
  50.   bRestartUpdater=FALSE;
    7 }5 X% s# \4 }. p- s7 l
  51.   bFinishUpdated=FALSE;4 g1 O9 O3 m& Y2 ^0 g6 O
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 j, o. a4 j4 h2 T  Q+ Y& W6 d/ @4 I
  53.   InitChangeDataBig52GBKS();
    . w; y* K. n) m7 t6 u
  54.   InitChangeDataGBKS2Big5();+ b: T" I' o& a, q" b# U( r2 |
  55.         //! b! [- ~) t% k' `/ P
  56.         bClickRunExe = FALSE;
    + i9 H" o+ F7 ~. y6 R" X+ [
  57.         //
    ) Q- Z6 {, Y: l) E
  58. }) A- n* ?% E' P) ~! E, ^
  59. ; {' }+ W# T! R4 y0 C  A
  60. CRevAppApp::~CRevAppApp()8 e2 \' l, j/ G  Y1 x9 Q; K. E
  61. {
    ; K1 }+ V* f0 S8 V
  62.         // TODO: add construction code here,! L7 u3 _7 h  `- a& ]" z
  63.         // Place all significant initialization in InitInstance
    ( \6 ]  A# i& q$ s( `
  64.   EndChangeData();
    0 o) k3 c. O+ E; ^& i; s6 f
  65. }% p6 e' U' H- |7 x4 J/ T
  66. $ y  ]2 j1 N3 _- d% @2 v% L
  67. /////////////////////////////////////////////////////////////////////////////' S' Q0 E' d1 X; [- b  z( g4 {( H. G
  68. // The one and only CRevAppApp object
    " J" b7 Q7 o. F! Q3 b+ h
  69. ) j3 ?* f# i4 N! t3 q
  70. CRevAppApp theApp;
    9 J" _) r3 g# k1 U
  71. 4 q9 I, M) H$ L6 d5 g7 J+ |4 Z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)& w# p+ i+ H1 z% t% c
  73. {; `: I. m  l- h. s0 m
  74.   int iEOF=0;( l/ a% Q" F2 k) r
  75.   char szTempName[MAX_PATH];* V1 {2 @1 |. V% \$ f( V
  76.   *szFileName=0;
    0 ?5 b  R% |$ r
  77.   iEOF=fscanf(fp,"%s",szTempName);; T0 ~. N' h* c6 ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')2 F  ?- h" r8 ?
  79.   {" I2 D; g/ k2 s* _) w) x, E
  80.     strcpy(szFileName,&szTempName[1]);9 Q) F  ]' m& H" s$ {, M
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    $ x) ]2 w* Y- H# p8 t( H7 F) z; L
  82.     {$ d) m+ k0 x3 M. R' N
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ; |. t! C; r0 n& M
  84.       strcat(szFileName," ");- L! I9 X" A& d9 P
  85.       strcat(szFileName,szTempName);
    . {' z! T/ P& w+ }; I# \, z
  86.     }
    $ ^3 \& Z% x2 |; f( K( d& _
  87.     if(strlen(szFileName)>=1)+ R6 O, F* h+ a9 S! ^' _- S0 @
  88.     {
    6 ?& I% I* G9 J4 V# F4 l: Y
  89.       szFileName[strlen(szFileName)-1]=0;/ ]; f1 A4 m9 g9 G0 @% J! R
  90.     }
    # q$ F9 }3 i8 l$ h% O% Q3 [( I
  91.   }5 E) l& j6 r- a( ^3 P8 _
  92.   return szFileName;: N4 P- t- F1 P
  93. }% z3 M! K( X0 R5 m) v

  94. 6 W' O. C6 x3 C* {2 ^' G
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 p9 |+ u& h% g. c" p& y9 C  }5 o
  96. {
    ; {8 p% @7 x) R' N
  97.   FILE *fp;
    * P$ Q5 Y8 t- Z$ ?  X
  98.   char *key=NULL;
    : n9 J6 r5 y5 R/ _+ `6 i
  99.   char version[MAX_PATH];; {' M: ?4 f9 y1 S5 f# M, T! U
  100.   LPUPDATEFILE file,olds;/ i& x( \% F) M, J$ [
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" B: @" B' U0 M
  102. 8 _; b8 b0 o% t8 N( [2 |6 G
  103.   UpdateList.clear();9 |* n: H2 Q" K- O6 F8 o
  104.   UpdateFile.clear();
      p) `8 O0 O; z3 t5 |
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 i& J, W* ~  x. r
  106.   if(!(fp=fopen(filename,"r"))) return false;
    $ |. \- o" k; m
  107.   fscanf(fp,"%s",version);1 D( N$ T/ f& P- I0 r; \8 O
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }+ U& u/ U5 X! ?
  109.   while(fscanf(fp,"%s",version)!=EOF)7 ~; h* J* Y( r5 Y
  110.   {
    9 E# P1 q  o4 @( {; ]# \1 Y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# c/ r# V9 S+ e* R
  112.     fscanf(fp,"%s",file->path);
    . m3 q7 y, f6 _
  113.     ReadFileNames(fp,file->file);/ @% P  b& m6 M% J/ E- H: @
  114.     strcpy(file->full,".");
    $ S* W4 J/ M0 ]- h5 p6 e3 J  M9 e3 s
  115.     strcat(file->full,file->path);
    ( P  h  ?2 o+ d+ z" ~: K- b( A/ ~  f
  116.     strcat(file->full,file->file);  W9 A* ^  f1 Z6 t; L% D, g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    8 l: k; Z; a) C3 c* t6 M
  118.     {
    - n$ d, @. l  l9 v* H& I8 r* C# z. q
  119.       file->vers=(float)atof(version);1 m- f5 ?( i- I1 B
  120.       UpdateList.push_back(file->full);! V, }" H# O% v$ b* Y9 I" d
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 ?% J+ L/ X4 T3 T, f
  122.     }
    9 Z, \9 d; l1 ]& K# U/ x& |; r
  123.     else
    / A* \& S& C% g, G" D
  124.     {
    & e2 u9 U1 ]7 D8 s& R
  125.       olds=(*p).second;
    4 u; j0 }% Z7 W4 c( O& B
  126.       if(olds->vers<(float)atof(version))
    8 E, o* ]1 ~) x" D# }- f
  127.       {
    . m  Y( N2 H  N/ h$ ~) |. }! |
  128.         olds->vers=(float)atof(version);5 N5 T+ t  d5 r5 P; Z
  129.       }
    ' y4 t8 \$ {2 U' F# L+ t
  130.       free(file);
    - \3 @% P9 a- f) U8 n6 _  m
  131.     }
    / X' b. S1 H+ F3 O% @+ z
  132.   }9 j- y0 `! _2 `# j' y
  133.   fclose(fp);$ O6 n/ c* D4 O0 }  e
  134.   return true;
    - r% ?! ?( K  i4 q+ }
  135. }( v! @9 B8 [: R+ T/ I3 _

  136. * x* U" L, I; e1 E  \& [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ; i2 y! S* V$ p/ D7 s
  138. {4 r4 K* Z1 y, z( E6 i# z9 ^( Z
  139.   TCHAR  szFull[MAX_PATH];
    " ^4 f# ~; g& R$ {
  140.   TCHAR *token,*inter;' Y7 Q  R- w0 o* M! T& q
  141.   *szPath=0;
    ) W# y/ W& L# ~" j  S
  142.   strcpy(szFull,szFullPath);5 E% B9 A5 K- N- N2 l, a- P4 [" K
  143.   token=strtok(szFull,"\\/");" G; M! E$ t) N6 @+ }0 j+ f
  144.   inter=token;  W9 P+ O3 Q; G
  145.   while(token=strtok(NULL,"\\/"))1 _8 p3 Y3 c8 @
  146.   {7 J) V* |' m. j" {0 T1 U2 G
  147.     strcat(szPath,inter);
    , `% z% h% I. V
  148.     strcat(szPath,"\");
    ; Q, K! I9 T. f, \
  149.     inter=token;5 J7 n, O- ^* {* [; _8 s4 E
  150.   }
    " T% |" V2 b- E; C; n
  151.   return strlen(szPath);
    ) t0 w! f8 d- n, Q
  152. }
    ! i# x& s" K5 J" H1 w! j6 @
  153. ' ]+ F  T/ m  t/ t4 S
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " ]. i6 S0 Z, N9 ?: i
  155. {
    " N" N' E% j* ]( ^0 p5 c3 B
  156.   DWORD attrib=GetFileAttributes(Target);
    ! E& G& s5 N6 y
  157.   if(attrib!=-1)
    ! b8 D) d6 O% g9 v8 j
  158.   {
    " @4 @  I3 [: r0 V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 K* Q, A3 |, Y. X
  160.     {
    ! k) }7 l1 m: p8 k5 W
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 p' H& j/ {- g1 j* u9 t8 N- ]
  162.       SetFileAttributes(Target,attrib);$ Z8 l3 Q5 y# p- ?( {: Y' G& E) ^
  163.     }
    " p4 E4 X! e8 ]5 f5 v: S+ E
  164.   }1 k3 R1 \% k7 z0 f7 x
  165.   CopyFile(Source,Target,Erase);
    * L0 k/ B& g+ s. ^" `
  166. }
    7 a) f6 @( Q& ~0 e9 V

  167. * z- Z- N5 R/ |- |; H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# ^1 W. C$ ]8 \( u( }! m/ ^) F
  169. {
    ; n* |9 V& k1 [! S& r0 T/ \
  170.      FILE *fp;
    ) Q% }, u' a% b6 z* s* m9 Z" v
  171.      char  szBuffer[8192];
      l# E) p) K% \8 T
  172.   va_list  argptr;6 ~4 ]. p9 M5 x7 m

  173. . y- a2 H* A7 _: X9 Y6 y0 _$ l
  174.         va_start(argptr,message);. n) j  B8 [5 E! j
  175.         vsprintf(szBuffer,message,argptr);2 p/ C% Q+ |; p
  176.         va_end(argptr);
    # a+ ]) T. ~9 K: v9 O- N
  177.   fp=fopen(FileName,"a");
    ) G  A3 u  \) g4 d3 d! Z+ L
  178.   if(fp)
    8 e! Q8 J& d$ b
  179.   {) B- i% c% \0 b7 P
  180.     fprintf(fp,szBuffer);' T/ ?4 `- v9 |# X+ W
  181.     fclose(fp);, M; t1 S# h2 C
  182.           _flushall();: R- z3 m7 ]) S* Y! K! j( y; o
  183.   }
    . u  q% u. D2 }0 H
  184. }
    - V( d7 Z' Q0 r
  185. 0 @3 R+ ~6 e  T0 {4 s. Y& f
  186. BOOL CRevAppApp::Fclearf(char *FileName)* `$ B3 g1 R# ]9 o
  187. {4 B- h1 r) A* K* e( ^
  188.      FILE *fp;
    6 N, ~$ X2 k( s) K0 ~' s/ b
  189.     DWORD  attrib;
    / B6 a* @; B# x  \. k+ h
  190.   attrib=GetFileAttributes(FileName);
    5 [% H; w6 i, t) l
  191.   if(attrib!=-1)
    + _7 Y" W9 S5 l/ Y
  192.   {
    + Y- Z7 |; k* `. s( A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, s7 l2 |+ ?$ w1 o7 ]
  194.     if(!SetFileAttributes(FileName,attrib))
    4 k* @& T  b6 Y4 A( i
  195.     {; M- i" _+ [- W5 i9 i5 V  U& ?
  196.       return FALSE;
    5 H* s- @/ x2 b9 P8 J
  197.     }8 O1 e  D& Z' I9 {2 s0 A
  198.   }
    & B2 R4 e1 I5 |1 X( x, `3 w+ a! @
  199.   fp=fopen(FileName,"wb");$ A9 F7 [( x# j$ e2 F
  200.   if(fp)9 B8 L9 ]1 t$ E5 H! @& {- [& ^1 |; ?
  201.   {
    8 R2 q8 E) a, f' R% R. Q
  202.     fclose(fp);9 j8 y, x7 E2 h" j+ T0 D
  203.   }7 H$ I/ m* u5 H# o9 [) ~. ^
  204.   return TRUE;6 ^- j9 q! m+ Q' b( _
  205. }# s% K; |3 B5 R/ v
  206. 0 L# w( y& I: T7 J' G/ [9 O3 v, h) E$ X
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      k' m4 f4 b* n7 y
  208. {, i8 ~3 z" l& m) U$ S( S/ J4 t. ]7 P
  209.   char filename[MAX_PATH];) x! v' ~' s6 l9 b8 P8 s' M7 j
  210.   LPUPDATEFILE file,olds;
    5 s! M1 m- K2 p3 B1 X- C
  211.   std::map<int,CString>::iterator i;2 M9 ?8 G* B6 Z" S7 }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;8 @+ z1 N8 ^* }5 A: h
  213.   std::list<CString>::iterator l;
      P: V, H" u) u$ P

  214. - @. L, a4 H" H: z8 V, F" m
  215.   if(bFirstUpdate)
    & ]  i3 r0 }- W& |" A5 @5 u* b+ ^! R
  216.   {
    % q9 }% ]) o9 }5 q" d0 o
  217.     dwCurrFile=0;6 s+ L* X: v8 H% e$ v. V  \
  218.     bFirstUpdate=FALSE;- A: w2 a+ X& M, T* g5 v3 V0 R" {3 ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) C2 T& r9 E* ?" |
  220.     {
    2 j  B) ?5 x; ^, m3 X+ A6 ?
  221.       dwTotalFiles=UpdateLocal.size();) U; e* s7 V8 X# i: c1 e0 \% \# _
  222.       dwDownLoaded=0;0 O2 h* R, N( y6 s# `7 P, \
  223.       bSilentStep=FALSE;6 k4 S& i/ X. j  G8 s% T
  224.       bCompressed=TRUE;
    . s0 ~# d5 ?- P( J9 j$ q3 H
  225.       strExtLocal.Empty();2 ]$ @" }# ^4 X& o7 H0 G- z
  226.       strFullName=(*i).second;
    . J5 \% ], e+ R$ b. d; K; E
  227.       dwProgramState=AP_CONNECT;! n1 q+ V+ U- C, \
  228.       return TRUE;
    $ M: i/ B9 k" X8 {1 ~2 i) r' _
  229.     }& F- h0 K9 t  F9 `$ ?: g. Y
  230.   }
    ) M+ f/ |5 S. \; \  c: G% n
  231.   else if(bRestartUpdater==FALSE)
    1 i8 d8 [6 ]% O( I9 R* Q
  232.   {* ^% }/ @6 q  Z" W; H; j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ) J+ c! j3 r2 F6 H9 c
  234.     {
    , I) [+ g" X2 K6 |' ]: N
  235.       file=(*p).second;" r* {8 E7 _4 v: Q+ m2 B: R$ _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())4 @1 n, g( R9 b; p, h. j
  237.       {
    ' s" Z4 Y) e) H, S
  238.         olds=(*p).second;
    6 i- t4 |* T. ^. }; [% Z" z! g
  239.         olds->vers=file->vers;
    2 }# V' p/ p( P3 O7 s) [: H6 r
  240.       }* Z- K* ?- l4 p0 d7 v* T
  241.       else* R8 f( w& P* a0 C" n- j
  242.       {2 H7 Y( ~- W9 c* l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      k, ]& L1 j3 v% g. M
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    5 d3 V: X( l% N: ?
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " e' S7 g+ _9 M# z7 `# `
  246.       }
    $ N" e& c/ |1 k3 X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" I& W9 k/ h3 w2 Y7 f1 y2 `, L
  248.       sprintf(filename,"(%s)",file->file);
    $ n/ p. V- n) ~' R+ }( P( X  Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* r/ R0 O5 w/ p: S. c* R5 h0 v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! y, e1 ]' M4 r7 {1 s4 z0 ~$ W
  251.     }
    9 k* |2 B5 g: o, V
  252.     dwCurrFile++;
    1 f6 a; Y: P9 B3 R: u: K( E3 g/ _
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); c/ E( k: W8 B; j
  254.     {
    4 R5 i! {! f" j5 \
  255.       bSilentStep=FALSE;( F! [5 J) w& O4 j0 ^1 P; f
  256.       bCompressed=TRUE;+ @) ?6 D; c+ z* S
  257.       strExtLocal.Empty();" m  _4 J* b+ T5 c8 Q' H' F
  258.       strFullName=(*i).second;9 o  H! S* w: @" F. f) q
  259.       dwProgramState=AP_CONNECT;+ @7 i7 |& f8 O
  260.       return TRUE;# b* O2 V! Z% v$ r' _2 [) N
  261.     }, T9 k# C7 G0 ~4 L& t
  262.     if(!bRestartUpdater)
    , b; t/ ~9 X: O4 A2 W
  263.     {
    / q. K" X* W1 x8 N: P+ n* l( c
  264.       int iCurrSize,iFileSize;+ L* H* b) Z+ d# G9 ~+ A
  265.       iCurrSize=0;
    7 {/ V' V# ~4 z) B
  266.       iFileSize=UpdateList2.size();
    : r/ a* ?+ k7 e4 Q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* [3 b8 l0 ?" f5 e4 ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    + z8 w" R4 ]* e  h. {, z
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' t. k$ Q/ o* g* ]! J3 I
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# P. g- @" @/ c
  271.       Fclearf(".\\update.dat");
    ' x+ `9 N/ y% H+ @' x  ]6 L
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 k. ^1 p% ^% b: d: Q- i4 o2 s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 n. h9 p2 F  o9 p/ S7 d4 T
  274.       {+ B' }% g" c+ e8 a. \
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  n9 g4 P5 W& J9 G! ~7 T3 ]% z
  276.         {$ C, g7 S% r) X. F8 q
  277.           file=(*p).second;
    ' Z: u  u5 r- D! {
  278.           sprintf(filename,"(%s)",file->file);9 n4 r# P9 O# i% f8 U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) T9 I: M( \# k& |
  280.           iCurrSize++;' J/ `) B, ^  `' A( M5 _( n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" L* F* y% k6 b. ?4 ^, f7 e& d& v5 R
  282.         }  u7 @  p3 G! D/ f- l' r4 U8 o/ K
  283.       }7 g/ |( [5 U! b/ V6 i9 S
  284.       unlink(".\\update.txt");
    ! d0 f9 t1 h* |- Y
  285.       unlink(".\\update.tmp");  V3 L. F: J. k; q- o, w; K
  286.       Fclearf(".\\checkversion.dat");% V' l+ N  Z; ?
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* }5 r1 h2 p6 [; s
  288.       if(UpdateLocal.size())
    3 x+ M7 v) D2 ^7 s9 D# ?1 W0 t
  289.       {/ w: `$ {, K' }; R& R$ _
  290.         UpdateLocal.clear();$ a8 z) G$ H5 T) p' d
  291.       }' y; r5 s: @! Y4 S4 I
  292.       if(UpdateFile3.size())7 B7 H: M# N  t  J% w: ?
  293.       {3 ^. D0 U! o! v) T/ V
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! k$ d! c' ]1 d: B
  295.         {
    " x) R1 k) H$ N: _) P
  296.           file=(*p).second;9 C! s  e* P3 ?. x% W3 m& L  C
  297.           free(file);* {( G, Z$ Q8 c2 W; X- o
  298.         }
    3 Y+ y3 Z! \- U! V
  299.         UpdateFile3.clear();) U$ b; Y% x4 n2 F" Z+ d
  300.         UpdateList3.clear();3 l9 ?; V% c9 ~' y5 r
  301.       }
    9 H& k; ^) u8 N) P) C
  302.       if(UpdateFile2.size())
    3 U3 N* ?5 K4 X; b" ?6 l2 q
  303.       {
    ; t: Z* ~1 K4 u* O
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 E7 r4 Y, u7 ]  r! s* L
  305.         {
    4 a6 A; T2 J% F# p
  306.           file=(*p).second;  c- H- O6 m7 o) {
  307.           free(file);4 Q& T8 u/ K9 S% J9 [, _9 p
  308.         }
    + l" n5 Q' k: W: K
  309.         UpdateFile2.clear();: @+ P9 c5 w  W* R0 c" u6 v  x
  310.         UpdateList2.clear();
    + V. S' d8 l2 X7 t' V$ X
  311.       }
    ' P5 l% e) H) m5 |4 h% }
  312.       if(UpdateFile1.size())
      \( M: a6 W  \- T
  313.       {6 j- K+ `* S' }$ z0 f  `+ v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # X9 f$ u6 W: u( Q& ^9 A) C
  315.         {1 d# h$ G& j, T+ {( V& q( `% t  O
  316.           file=(*p).second;
    2 D! ?# Q/ H0 s1 u0 U+ c: F+ _$ S
  317.           free(file);. n1 r  ?  Z# O: d' P/ k  H
  318.         }
    ( P/ |2 U" [+ ], j; U& H9 }
  319.         UpdateFile1.clear();
    1 X% S/ f) q' x1 w0 P
  320.         UpdateList1.clear();
    3 ?* i4 c2 O5 L' u9 x9 U  m, `
  321.       }" w- a, |4 l/ q# [. |1 [
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% i4 b1 @$ h# }$ ]5 ^0 a
  323.     }
    ! Y4 [) u: U- i
  324.   }
    5 t0 y, D7 D! U- s: n3 \
  325.   return FALSE;
    # I6 O8 b5 k: q) M# r" |- l. K2 U
  326. }! Y% N* m. H" _+ ~, }* U2 L% E

  327. & v% L% v5 d6 F: m& ~- [9 r
  328. void CRevAppApp::ClearAll(void)
    ! F9 a1 x5 ~6 E- V8 M
  329. {  {$ W, o5 C6 i0 W  i- ?
  330.   LPUPDATEFILE file;
    3 n0 ^( ^# w* O# V' e* a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ d4 G- N7 f: Y! }7 r6 N
  332. : G( a, F- H. f- E+ m% J
  333.   if(UpdateLocal.size())+ E. G8 e. k6 T/ X0 g+ L
  334.   {
    ; d, L" I* X0 E5 a, n0 k* N. T
  335.     UpdateLocal.clear();( e  k1 h2 L9 r% e3 D9 \
  336.   }
    1 v5 B( R* J. N- a. Q
  337.   if(UpdateFile3.size())( R% P; b3 d  ]! S% Q% w- y
  338.   {
    0 l& B- o  _/ P. M" e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ Z6 l5 `% S. e4 M( D6 c) ?
  340.     {% O: Q: r8 {$ d3 w5 V) N
  341.       file=(*p).second;
    , y# z4 n+ Q! A. C1 `  m
  342.       free(file);% Z6 y# m9 D) q$ u5 B1 W( h
  343.     }
    4 O' B2 u4 @  t/ r
  344.     UpdateFile3.clear();
    ; Z( x6 k6 Q) b& B! }6 x# U' w
  345.     UpdateList3.clear();2 {9 G- [9 c* p& R* A" h, g
  346.   }% ]" j% r6 |- H! h( H) c- I
  347.   if(UpdateFile2.size())
    9 T! n* u) ~1 L3 i' i
  348.   {
    6 Z. t. U7 Y& A0 a# z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ G! W2 ~( M  a* W, r
  350.     {
    * s/ i2 U6 y. \# f/ s5 E
  351.       file=(*p).second;
    / Q; @5 x+ M. L
  352.       free(file);
    ( W! h0 _$ p$ ^" r/ h3 a8 T
  353.     }+ K! A' P+ ~9 l  _/ e* W! b' q8 z
  354.     UpdateFile2.clear();4 F3 l" t1 K. H$ R
  355.     UpdateList2.clear();8 I3 l" q0 N7 |$ z  V# H
  356.   }; z: b" S! Y& U: ^# t% i: n+ g
  357.   if(UpdateFile1.size())
    1 O0 u) ^# W) J3 |4 T9 N
  358.   {
    / O. Y- V# i: v! Y# v; `! G
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( y4 q8 v9 u9 j7 u; ^
  360.     {
    2 N: L  o- P' B; o
  361.       file=(*p).second;! w3 i6 h. ], K. e2 ]7 i! k3 w" L
  362.       free(file);
    8 i* l' w7 O. V0 |& ~5 g+ ~# j
  363.     }
    8 u3 I0 }$ J  b4 d
  364.     UpdateFile1.clear();/ v  i' C5 o5 h9 L! K
  365.     UpdateList1.clear();5 q( ^& l! H5 u
  366.   }. F' t5 s' d) a, y/ |2 j$ _
  367. }  
    ) r% @+ m" \  z* _* b* ~/ ?; G
  368.   $ y. x2 d9 n) x  @/ y+ e+ B
  369. BOOL CRevAppApp::CheckLocalVersion(void)+ t9 z9 G& o! O& b8 D; G( n; A# D6 `
  370. {
    + w: T' e3 e% g0 x. c
  371.   int c;
    / t0 S: ^3 h  G" D
  372.   LPUPDATEFILE file1,file2;" o. U7 ^: v" G. V8 _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 Q6 q% }, v. B* z+ F8 y  ?
  374.   std::list<CString>::iterator l;5 Z" N% h5 u. N; s% ^6 l. k: }' ~. \/ P

  375. 7 g* J4 S7 ?- k+ j+ P8 ^3 R+ M8 |
  376.   UpdateLocal.clear();
    6 _. z5 Z6 r* x* s0 ]. n+ v
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      s: W: {# B5 o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ! V# b7 j9 [, t7 N% r, W, V7 a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % x2 C2 f/ M6 V2 s" A' z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - `* _3 v( f' q: e9 R
  381.   if(UpdateFile3.size())4 m" c  P7 K3 v9 n7 u2 [
  382.   {
    8 Z9 c. j) `9 h9 w8 f$ H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 l3 e* s* j$ ?0 g
  384.     {
    # s) B" |6 s$ C& j/ O9 c
  385.       file2=(LPUPDATEFILE)(*i).second;
    1 @0 W% B" v$ E2 W0 S, `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) A, J& {% |7 J- I. a( m
  387.       {  F1 d* E8 {& w( Q  m4 V
  388.         file1=(LPUPDATEFILE)(*p).second;! D( }2 \4 k, Y3 R
  389.         file1->vers=file2->vers;" [% @' O; f! ]
  390.       }( v3 g3 n) x3 |0 t, w$ i$ q
  391.       else- s" T2 s- E) A( V
  392.       {+ p- k; U$ [5 p$ x
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* A. D4 @/ U. W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));) _0 B6 Z% m0 F0 W8 f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 o; s5 m2 r4 K" a% U. V4 L( A
  396.       }
    2 u( U8 P5 Y, [) r9 e* j& N3 u$ p
  397.     }2 s3 J) w; v& z# r& b
  398.   }' @4 q0 l% K4 R- H/ K" h0 w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * c7 B( l. }  @* i
  400.   {
    5 N0 u2 O, {6 {: ^( G+ U2 K
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& c$ t+ v+ U& [, N9 ]6 h& I- r' _' M  p
  402.     {
    9 q& l$ }" l% k2 L+ G# w+ J
  403.       file2=(LPUPDATEFILE)(*i).second;
    ' D2 r0 I, ~: l4 u2 v# w6 w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / A% R4 Q  w. T# f2 i9 p
  405.       {
    / P' d0 V+ w0 x# u4 `" S
  406.         file1=(LPUPDATEFILE)(*p).second;5 W  b! \9 c; @
  407.         if(file1->vers!=file2->vers)' _% I9 [5 E: Z: \
  408.         {& G* O" L5 a3 I" o0 e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' S/ r5 e0 C1 x. M5 b
  410.           c++;
    6 R2 W2 V1 b# m* P& ]8 F4 u
  411.         }
    " X0 w" A3 R2 u/ \+ x( Q! x' M5 J
  412.       }4 O4 }/ ?2 R# B5 O/ C8 k
  413.       else1 R# y5 _2 r: Q0 w1 B
  414.       {
    - N8 c* m; _; q- `1 ^
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' m& E- ^2 x; Z- ?! _' |4 O
  416.         c++;
    : \4 [* }+ b' ^, W& w
  417.       }
    6 L, F( w; m% i- v
  418.     }: ~9 [$ h  w& n$ ~) q5 g( }
  419.   }) O  [# `6 j, L9 l' y7 ^  e# F4 Z) a
  420.   unlink(".\\DownLoad\\update.txt");$ d* ~; D; `0 N8 |  v+ _
  421.   if(UpdateLocal.size()) return TRUE;( K3 K) W5 j  g2 z) C! N' j7 ~$ O
  422.   else                   return FALSE;
    $ l: \  M. k( W! p" Z9 ^
  423. }
    * N9 \  K1 {% u8 K. K3 ?

  424. 5 W0 F8 v+ c2 v8 l+ u5 L. p
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / [, A0 A- U; F$ Z2 I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! c4 _$ \. T( Q/ b
  427. 2 m) s' n7 H. @& U6 d
  428. & r* f; m# V0 d+ U& q) Z2 ^

  429. 3 G: r( L: Z0 `, `6 q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    1 [9 k% N6 P$ S5 U4 p
  431. {/ p( Y3 w6 u  _) J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 a+ [$ Y. P2 i( N8 Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % Q3 v8 e7 O$ u0 S. V. y
  434.   {+ L% |! x5 k. C% _# D$ y
  435.     char szLanguage[50];
    ; ^- y, k0 _" ?% x% A" K3 b7 ~/ }7 e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- J& B" y0 W6 z+ m$ f0 t6 Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 g6 ^: K4 y* `1 Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & ]" ^/ [, a3 A5 ^/ F! l
  439.     else                                   m_iLanguage=ENGLISH;
    $ L: N$ A3 z1 _+ A3 f
  440.     char szRegister[100];
      D$ d! J, c. n3 J- T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ _: ]+ p4 A% b4 T$ }
  442.     strRegsName=szRegister;8 g3 L0 B; v" V6 r1 x9 e9 n
  443.     char szPatchURL[100];8 M" B1 S4 f/ E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 G8 [0 C# L7 V1 S! p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 ^8 O3 |6 R& W; v( j
  446.   }# t+ [7 x, A- `: X- V  x
  447.   else/ ^6 k9 u; W' w9 |
  448.   {
    4 q" _4 H1 H( ?# l! w
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 N3 W# U/ R2 _) w7 M
  450.     strRegsName=DEFAULT_REG_URL;( z+ R- U; K# q6 G1 @
  451.   }
    + b, j4 D; g% M8 Y
  452.   if(GetFileAttributes("hosts.ini")!=-1)" h* f! j& [/ w
  453.   {, Z* G& v; H' ^3 G2 x1 I) w3 ?
  454.     char szIP[50];
    & `+ C; Z4 F, ^8 x& B
  455.     char szDIR[300];$ e* B( {. J& w: @; v: S! x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))0 u( `9 l2 w- W& `0 H* s/ _& e
  457.     {
    ' B$ p. @5 r2 B  H
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) D+ K( Z9 a$ W( G; Z* f: D( V
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");. F' P5 i, l, x
  460.       strHostName=szIP;
    9 O+ _5 ~& e9 p4 Q. O+ {7 z  E
  461.       strHostPath.Format("/%s",szDIR);3 Q6 A: I1 M1 E- O& T
  462.     }, V) V) ^- _! q. Z1 X- T
  463.     else0 i- g! V3 x( U. f$ d. f# m( a* Y
  464.     {; U0 s; c4 l9 m% h7 q0 D
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 r  i: A3 t/ z( C5 x
  466.       {! w- x8 S. f$ u4 b  t, }
  467.         char szLanguage[50];' k, |% z: X  p9 Q/ |5 n) Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : h7 j) X3 [# S# o. l2 a5 }
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- X' H$ V5 M- i. Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; W' R( W' S& ~# m! T) N
  471.         else                                   m_iLanguage=ENGLISH;
    ; Y" M8 E3 b  O. ?( ~. E/ P9 k
  472.         char szRegister[100];
    $ b: S5 {& c5 o# k4 V: i- U
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; i0 q5 p/ n8 G) u* T2 i
  474.         strRegsName=szRegister;
    / e/ |+ W2 v+ q) }. ]
  475.         char szPatchURL[100];8 q1 A! C2 x8 C( }; ?, A, x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 W7 f8 U1 F% w; e$ Z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' k& L1 @7 @- k( w( a# S8 p- U- f) K
  478.       }
    , d3 Y( e) ^2 P" @* e/ |4 _  N
  479.       else
    : C* o$ v" s5 ?2 ^4 N) S
  480.       {
    : p' |2 j! |" D" l) e; X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # {8 o: X8 Y& A8 }# e- X* o
  482.         strRegsName=DEFAULT_REG_URL;
    " h- z8 H$ L: U/ p4 [
  483.       }  |* w( ?0 C7 `9 o& W. e
  484.     }
    1 }. ?8 [* L$ ]: Y+ ~3 v
  485.   }. \8 P; l( x6 x# ~: U3 Z
  486.   return true;2 I9 p3 e0 X! Q6 B) B
  487. }
    ) N& g6 x+ A& F
  488. " i) `" d$ I) O) z$ S+ w1 R
  489. #include ".\ZLib\unzip.h"- y7 p$ |" {; C: k/ Z
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # r$ w( k- j7 [8 u3 j+ L, U/ |( X4 M
  491. /////////////////////////////////////////////////////////////////////////////) K8 y- I1 R: y9 Y1 r# g) _) j
  492. // CRevAppApp initialization6 c( V  l) J, j

  493. ) R7 O! L" E2 @6 O3 g; \
  494. BOOL CRevAppApp::InitInstance()' [1 F% F1 m: l3 d# g( a2 @; ^# J
  495. {
    6 }( V4 d" V/ F* v8 c: Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / i( H& y8 E+ i8 _0 u. E) E' _" C
  497. 3 q0 ^+ J4 A* q' i% W8 @4 e
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    7 b7 T8 b) f. M. J, ?5 x* }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))$ h/ F+ N9 H3 r7 M
  500.   {1 \+ q8 q8 x+ f4 I" B% U
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");$ n9 r0 x; h6 }+ M9 s# P3 `
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) ]* M+ x) Q( t, H6 }) M8 o
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # G; T% E" L, X0 d: A: a$ ^
  504.     {- w6 q7 P, [: [1 t5 C
  505.       strcpy(szPath,szPathTarget);5 z/ y: Q/ A5 y+ @: z( B
  506.       SetCurrentDirectory(szPath);  M$ v5 v4 m5 W* s' @
  507.     }/ |. o. [2 E) F% @
  508.   }
    + q6 E- w/ s$ U& T9 X
  509. #ifdef _DEBUG; K  ~9 X7 {2 [9 @2 C: B/ K
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 Z* O6 t* \4 D+ U6 a9 m+ k
  511. #else
    0 h$ E. R' R1 b9 l' V. u. D8 P- D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 d5 e/ a% B. r& h% @
  513. #endif' m5 |8 |) c8 Y1 Y$ ~' Y  Y
  514.   {
    ( u  m" y1 ~% C  f
  515.     char tempFileName[MAX_PATH];
    ' [! O# d9 H6 C% K3 D
  516.     strcpy(tempFileName,szPathSource);
    3 j5 t- H. _* `4 @3 i
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : j: k& h2 _5 u2 F5 i
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 V; M$ ~7 y# Z( M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; E8 z* V9 B3 X7 ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);. g5 u' M' C8 k! o; H0 ^8 Y$ [
  521.     return TRUE;5 W: h. s2 R7 D9 ^9 {. B+ R
  522.   }8 v! ?0 [& `8 U  w6 V! ~) R
  523.   // Nuke 0118: Delete run.exe
    + {1 {: b7 U% B1 O  j1 N) w0 ], }
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# e3 {, b, J) Q& P# ?, M" s* t
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    & g' e" h* k* {$ M" c
  526.   if(!ReadCfgFile("Config.ini"))! d1 ?6 W+ c7 {- b" L) g1 U' y
  527.   {
    : ]3 ]; \! h  Q7 l4 M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    & Y) f- x. b. J# g$ ?; S
  529.     return TRUE;
    8 ]% j. q( c& G4 [$ \* U, u9 E
  530.   }; t3 L6 ]6 F: ?$ _/ Z1 u  c
  531.   HANDLE mutex;; V7 l! T5 c6 Z6 ~6 _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " J/ p. R9 c- ?. E2 W* |3 d' S  G
  533.   {
    6 s3 {( x; c5 H: `
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS); H) K' {/ A9 ^' s5 ?. H
  535.     {: s* C! d' A* d1 k' _# ?( c3 l# b
  536.       CloseHandle(mutex);
    ! k- h: z' V% z/ U5 \) }+ U; a; E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % Z# Y" @/ O0 t1 o1 Z' z
  538.       return TRUE;
    - {) Z2 m! w4 E  T
  539.     }- p& U* n- c& ?" x) S+ c, w* M
  540.   }  $ t2 y) N5 J& K1 R4 f7 f. [- H1 Z
  541.   CloseHandle(mutex);! l5 S- {% G# ], s/ Z6 f
  542. / c& L2 P5 s  f0 I- h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 t2 s# `! F" O
  544. 0 @- L# I" |, J' [3 l8 w. \
  545.         AfxEnableControlContainer();
    ! G  D$ M" e7 ]3 \
  546. + d' r- [, c; j6 D1 {- K
  547.   bCanUpdate=FALSE;% X4 F9 `$ M3 H
  548.   dwStartUpSteps=1;
    0 {* r$ B7 y3 ^( _6 z, l: ^4 w8 W
  549.   dwProgramState=AP_NOTHING;
    2 K6 M. m$ S" W3 |4 h* C
  550. 3 [0 U) R8 [' k8 I
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) H9 Z$ V' {( _# k
  552. 6 w1 C, X2 T, u# P$ u" s
  553.         // Standard initialization! G/ j+ r( \" m, l* `  g8 i" y
  554.         // If you are not using these features and wish to reduce the size; z# S' B1 }8 w
  555.         //  of your final executable, you should remove from the following
    ' p) j% G( H: ]) {8 g  G9 j7 d
  556.         //  the specific initialization routines you do not need.5 ~; v/ A+ I# K+ w1 |
  557. & l2 z, t, h* [5 y& ^1 R6 @, Y
  558. #ifdef _AFXDLL
    8 Q, @" ?3 y9 `& g+ ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! J+ Y  T2 c9 F6 c- \$ _0 f
  560. #else# V* I4 [4 I' z4 q: B2 o. w/ Z& k
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * n) ?$ }, B; }1 }
  562. #endif
    / N$ K. {: R: d, U8 A
  563. 0 S  [- E8 A* b- d  c
  564.   dlg=new CRevAppDlg;* b' ?+ @" g" J0 ^, H# b) o
  565.   dlg->Create(IDD_REVAPP_DIALOG);+ Q& [" ?; d, K% J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);0 L3 o1 m9 h, g4 f. c. v
  567.   m_pMainWnd=dlg;6 g, _8 y2 I* x) N! _- ?9 `3 I: _- _

  568. " T5 f" y5 s: h9 E, h& Y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' M4 W* r. @8 r" m- v/ i
  570. : |: w1 a& n, s) C
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 V* S- @7 @8 Z: }
  572. //  ULONG_PTR gdiplusToken;7 `9 _8 [. q# I8 ]3 T4 c- b& _$ r. y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. Y! V7 H+ j( U2 M4 l* |6 _

  574. # H7 J) g" G/ S! B5 e7 J# O1 l
  575. //        CRevAppDlg dlg;2 S; F. a# |8 i0 `* f9 P( Z$ v0 Z. i
  576. //        int nResponse = dlg.DoModal();
    ) A6 V$ Z9 c3 t- l: ?
  577. //        if (nResponse == IDOK)
    ! [* d8 c1 S3 s  J
  578. //        {
    : l, P5 d$ J2 V5 O" n- E% w
  579. //                // TODO: Place code here to handle when the dialog is, ^  C5 z& n# c5 D
  580. //                //  dismissed with OK
    ; `4 C% C+ V4 S; h' f' B
  581. //        }
    8 m* k0 w$ a0 G* l( b
  582. //        else if (nResponse == IDCANCEL)
    " I. e/ b, G4 ]0 |( t! L
  583. //        {" r# P4 O/ G) q& J( Y) t2 m
  584. //                // TODO: Place code here to handle when the dialog is
    ( @5 v: N: g; L% J7 C. C
  585. //                //  dismissed with Cancel( I4 l: c; _- n4 r
  586. //        }
    2 p, X' q9 ]' D

  587. / T# }+ j. d- l
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! O  z& D9 i/ R; q, t
  589.         //  application, rather than start the application's message pump.
    : ]3 b1 v0 C* Y. S+ a9 [
  590.         return TRUE;/ F' t+ A. F9 U- X
  591. }
    5 ~/ G' V7 t& z5 t

  592. 7 a: Q1 ^/ L6 X& }* k0 g9 K. b
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 o% ~2 {" @7 l
  594. {; @6 c" {/ q' [" n! C; I
  595.   int i;8 {; B8 [2 C7 D3 I4 S+ c6 C3 F: Y
  596.   char *szRet;3 a( r' i' J6 I8 A. U+ k
  597. 0 |: K1 \7 u' f/ ~6 p, l
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    7 {4 x, ?: X2 `, h3 \
  599.   if(sztoken)
    . W  d/ [! Z, o4 A7 [+ L. F
  600.   {3 W- A5 V3 w* F" l
  601.     szRet=&sztoken[itoken];
    / |! i( a7 [- Y4 W/ r' s% o
  602.     while(sztoken[itoken])9 P* j. S- e7 {1 v$ K
  603.     {
    ) `, y! I1 R- R# T+ s" t, p
  604.       for(i=0;i<(int)strlen(token);i++)0 k' {$ ?& l. L; @/ d2 T1 {2 x
  605.       {4 ]9 w; Y3 ~& m4 z% Y' ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ; o1 _8 D9 w0 d- v/ b1 a& H
  607.         {& c+ }" m; {% M9 ], I
  608.           sztoken[itoken++]=0;
    3 w  L6 c- B7 x' Z5 c
  609.           sztoken[itoken++]=0;. t, f; \) y! L% y. ?5 J1 F
  610.           return szRet;
    : X/ x" p$ K+ N' t
  611.         }+ C1 E$ ?! K* X7 x' W% V' s/ \/ L/ I
  612.       }
    * c' Y/ @3 Y. |. p
  613.       itoken++;
    + R' k. I- ?9 k0 q; \% h" f
  614.     }9 @! s7 R# j/ x
  615.   }# Z; _$ Q5 v9 M0 B) |; T$ q
  616.   return NULL;
    * b$ ^$ C0 \: R1 e
  617. }
    + y* Y+ d4 d; M0 g

  618. 3 P7 J# V+ G9 ^: |- t, Q. q
  619. void ProcessProc(long Total,long Current)5 R& Y  ]% R4 B9 s- T: ?) O
  620. {0 [3 K7 V* t# n+ h6 {  p' G, Y1 i
  621.         MSG msg;" C* w7 W6 {2 m0 d/ J1 G, U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    / s6 v% {5 d3 w  n
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) }- h& S+ g: D. c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): b; @" C) [3 b/ x7 y2 w
  625.         {5 T0 _5 c) A! V9 o. {
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 i% o7 v) b. W/ \3 |
  627.                 {
      B6 m3 Z& P: j/ _& B
  628.                         return;
    , e. p1 g( h# Q
  629.                 }# s$ O& ]4 m# [$ E$ S. a9 c, u
  630.                 TranslateMessage(&msg);
    ; n5 G1 a2 Q" J% Z* c
  631.                 DispatchMessage(&msg);
    # S; I/ h' }- G0 ^# X
  632.         }       
    " G' Y8 C( [# n% ~
  633. }" m  h* Q( A! y* p8 E

  634. * p0 a! l  K3 l) \# c5 b% E
  635. BOOL bFirstChar=TRUE;+ W% a1 v4 i* G7 C( n5 O% N' L: r

  636. . n8 T3 g9 D4 J0 V# m, J
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 t6 t  j! C* y$ k, r
  638. {
    9 l- l. Z; v2 K0 @2 H
  639.         // TODO: Add your specialized code here and/or call the base class
    ( `/ `( B+ a2 _; a8 z
  640.   switch(dwProgramState)& H7 G: E( V, s0 M. ^: ^* \* D! D* i
  641.   {5 F  P" `. H* D' F# c
  642.   case AP_NOTHING:
    ! h. D' U$ h5 u+ p7 K8 n2 ]5 i- }" U
  643.     switch(dwStartUpSteps); f! b, i0 p* x5 w4 r
  644.     {
    . g( w# B3 }$ X0 F
  645.     case 1:+ B  h& Y" u8 D. `/ u
  646.       {
    % w8 u+ K6 ^3 Z5 F
  647.         int i;* r/ U& X& G+ S2 j. t
  648.         CDC *pCDC=dlg->GetDC();4 j; @6 A/ G3 U$ U7 \
  649.         HDC hdcwnd=pCDC->m_hDC;
    # |) W$ [7 N4 b/ n# ?
  650. //        Graphics graphics(hdcwnd);
    2 u* c# q+ e) \. b+ @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. H+ m2 O) ~/ _
  652. //        INT iWidth=bitmap.GetWidth();+ V6 b( u$ W. i- O$ W* ]) b( j
  653. //        INT iHeight=bitmap.GetHeight();' R8 \7 z" y. _9 D
  654. //        Color color,colorTemp;
    . g- X0 u, k7 P$ `8 r( g2 m( l. @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    " j) i6 P) n' U6 `2 v% W
  656. //        {7 ~/ s, V& j$ T+ ]0 y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 _& w" H/ C' `  Y  m; A& l, }
  658. //          {
    : a' ]4 ~3 q0 [" p6 x; u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 @7 ^0 K  n5 S7 n8 Z  e1 g
  660. //            colorTemp.SetValue(color.MakeARGB(
    " g- T) ~8 e+ R5 ^) Q7 T
  661. //              (BYTE)(255*iColumn/iWidth),- X" v. C" h! \- P
  662. //              color.GetRed(),
    6 D# S, x9 h" g
  663. //              color.GetGreen(),
    * I  F1 R& e2 V# e
  664. //              color.GetBlue()));4 Q3 f' W* q9 T8 {3 u
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);2 f! X* l5 s/ X5 c/ Z
  666. //          }* k! d- L7 }0 v( [
  667. //        }
    ( K  O; O7 R0 ^0 e& b( Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    % i& x  A5 N& _; H4 j$ M  ^8 x
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' ^9 g. u4 e8 F  h! w0 m
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ a' w, q( d8 i. {9 U+ H
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + o% s9 ]. g4 u2 j
  672.         for(i=0;i<240;i+=8)
    5 t' r2 g9 |2 t6 S9 T7 W
  673.         {
    7 R, E/ z" }) i# M6 _- x, f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % ~! S3 P$ Z* }5 a# [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);1 `6 ~+ X. \7 }' H, D2 _3 P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 V0 H& p" W  n* }+ ~
  677.           Sleep(33);5 O/ V$ |, k$ C) S, ?5 G
  678.         }
    ( u: U0 y( C6 p
  679.         Sleep(1000);9 x7 N+ U6 t4 W' N  t. Y& a! l, T
  680.         for(i=240;i>0;i-=8)  W, E, V- o0 @; W  N( ?( H
  681.         {$ i( w+ T- C+ h1 l7 k  C7 W2 t. b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / A) \2 ?/ E0 k/ o6 x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% o$ \" ?7 }7 u2 ]* o* C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : L! _5 _. I6 S2 y1 M2 o( t8 B2 V
  685.           Sleep(33);
    7 f$ t( R3 j4 ]# i
  686.         }5 R% ^$ s# M' g( ]8 m( v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# q/ y7 d# f/ i* m% b
  688.         dlg->ReleaseDC(pCDC);! B2 H: m1 e  m( L/ f6 `
  689.         DeleteDC(hdctar);2 I. {; g9 m5 M! u1 D
  690.         DeleteDC(hdcsrc);
    8 v7 N' b# c" n8 v- y
  691.         DeleteDC(hdcorg);
    9 |- n+ q, s' {5 {
  692.       }3 ^. @% y3 H, _8 Y  f3 E
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " N' A8 i0 y, S5 r& k. U; Y0 Y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ; R/ }/ @9 s8 Q4 y9 `# W
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! \8 Q; i. M8 e) x5 o( \2 K
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");8 k: l! p/ }" p: A) P) T
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. _3 |# c( {+ c& r! a8 i
  698.       if(!Dn.Connected())
    6 g8 E. A+ S- M9 f  z% x) b. W, P
  699.       {: u& A- H) Z7 Z; }- a- }/ k( j
  700.         dwTotalFiles=1;
    1 z9 O) d  l( M6 e
  701.         dwDownLoaded=0;
    4 o7 G+ R* N( J4 V# m6 x, F- E9 I
  702.         bSilentStep=TRUE;. g  H) {) q$ O7 b9 I( ]% J
  703.         bCompressed=FALSE;
    & P7 u$ S; H% O9 v5 q
  704.         strExtLocal.Empty();
    8 a" n/ D7 C3 n) k2 A5 c
  705.         strFullName="readme.txt";2 K* I) c% H  t# u. V
  706.         dwProgramState=AP_CONNECT;
    + B) l" P5 Z* I4 U: J% D
  707.       }
    " {( p4 V! b( }5 u) I2 o& ^
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + h: ]% B& M4 ], _8 O; R
  709.       dwStartUpSteps=2;
    6 i1 |1 }5 L- P) z
  710.       break;
    0 O  {7 {) _4 k% t4 N1 }9 R4 `
  711.     case 2:: W8 W. @5 Z) h, ~/ |
  712.       {
    " w; N' D' e7 e8 o2 g' \
  713.         int iEOF;
    5 W5 o5 r( m7 ?$ y( x0 |8 h/ ?
  714.         FILE *fp;) N- u- C: u+ K
  715.         char szString[512];9 }% Y& p9 `- I
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");9 e  @; a, o4 ^4 j) @! T
  717.         if(fp)
    2 T% U  j/ ~4 D3 R2 n0 a( G
  718.         {
    : e. H3 S% T' m# b( J
  719.           do
    / s( A1 a& D5 z3 b+ v% F/ G
  720.           {" f  [% ]4 D8 G2 s* F; k& E" z( U
  721.             iEOF=fscanf(fp,"%s",szString);
    % m" J7 d: x$ G0 x! f
  722.             if(strlen(szString))1 z$ m& a& I" e8 E3 o) B
  723.             {4 l2 v0 S1 z* d1 `6 O4 e2 c
  724.               if(bFirstChar)2 W* B, f6 j' j( r
  725.               {; @1 N+ B& i8 y2 ^, N1 u
  726.                 bFirstChar=FALSE;
    * }  C" L' P5 ~$ q
  727.                 bConnectIsBig5=FALSE;4 A0 r6 Z6 g7 j+ v* [  Q$ M" {
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 [/ a. k2 ~- X
  729.               }2 S3 N4 B" h: h" k* h
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 p9 R9 t3 |: n% q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; q& W, R" B8 R  B0 j7 l5 W! I4 {
  732.               dlg->m_ListText.AddString(szString);7 c+ g- }/ d# y8 m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 `2 i- ~' l- p0 {* j' W8 F
  734.               *szString=0;9 \$ [( ~$ X/ d* D, c7 E
  735.             }
    . k% c% [; f& _
  736.           } while(iEOF!=EOF);' O/ Y$ I9 E! R/ p
  737.           fclose(fp);# P3 `3 d4 z, u! H9 Y3 x  U
  738.           unlink(".\\DownLoad\\readme.txt");
    ' ~6 j( @' ^, d) K( p) s: @
  739.           dwStartUpSteps=3;
    + k' p5 ~( @1 R! ^& L! ^
  740.         }7 E8 ]) U! e) w  ^* ]: s8 ~
  741.       }3 V# I; U% H2 z  ^1 I, T
  742.       break;9 a  K% x6 H7 o
  743.     case 3:
    ( G) d5 H$ x3 b/ B
  744.       if(!Dn.Connected())
    2 d! M6 |  h1 f8 H; p& G7 T. H9 h
  745.       {
    : E+ N/ u: N9 r4 M8 ]1 @) v
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 J- v% ]: g6 Z; S. T3 j4 ~
  747.         dwTotalFiles=1;  S$ h  J8 F7 X% M: p  g- s. S
  748.         dwDownLoaded=0;
    & t) z* v9 G! e/ y; A1 _1 P
  749.         bSilentStep=TRUE;
      l- T& ~$ j) m& D& q. R; j
  750.         bCompressed=FALSE;: w4 y! E% I  j( ]0 G
  751.         strExtLocal.Empty();: r( o, v" ~2 K# }0 Z% x% J+ T  t( V
  752.         strFullName="checkversion.txt";
    : E8 _( o* `0 `4 ]' I3 z
  753.         dwProgramState=AP_CONNECT;: ]  @/ P' Z; a4 @3 c
  754.       }+ ~: ]7 Y! m! l* K, p3 e# s( S6 W0 Y7 F
  755.       dwStartUpSteps=4;
    & [  ]3 |! P/ ^1 h+ X  M
  756.       break;
    0 L& \5 d( b2 u0 q4 m3 ~  \4 k
  757.     case 4:. w, [# X9 d3 g3 \& r" Z
  758.       {
    9 g1 z0 V2 m  z4 q; z
  759.         FILE *fp;3 B' f0 G2 n0 P( {' O' n  U! O
  760.         char szString1[128];
    * }+ s5 Z1 R2 l6 o6 g1 V: z
  761.         char szString2[128];
    2 h; J1 Q  g1 a6 a4 o) o! y3 a' t
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");4 j6 e$ z( `1 o1 p  y: d
  763.         if(fp)( f1 F" `2 ?+ i6 ]" \/ M' E/ ^: P
  764.         {4 j; e9 y1 ~% N4 L
  765.           fscanf(fp,"%s",szString1);
    " c# m, G! F9 @  ?. d/ a9 K
  766.           fclose(fp);- A4 ^6 a( l* `; ]; n7 c, \
  767.           fCheckVersion=atof(szString1);  f" T9 w. d; B
  768.           fp=fopen(".\\checkversion.dat","r");9 \6 V5 w+ K& Z- S6 e/ j% s* R
  769.           if(fp)* u4 M+ J0 e- d; b- |
  770.           {
    & b4 \0 M$ V) L
  771.             fscanf(fp,"%s",szString2);& `' ]8 z7 i* ]1 s4 B5 M8 T
  772.             fclose(fp);
    % q" ^  A- E! S) l
  773.             if(atof(szString1)!=atof(szString2))
    $ H/ k0 U/ D3 s. S) W6 y
  774.             {  c5 q: ?. ~9 E( Z+ y
  775.               if(!Dn.Connected())
    0 l9 o2 g' c" _8 r
  776.               {( _1 K; i5 Z; _$ |
  777.                 bFirstUpdate=TRUE;! i' s9 j4 J; J+ B/ E  I" F
  778.                 dwTotalFiles=1;5 M4 r$ B9 H# k
  779.                 dwDownLoaded=0;
    + M! f8 l- ~' [/ a7 H0 u
  780.                 bSilentStep=FALSE;# b9 E2 E- i% h& [* _: I6 g0 Q
  781.                 bCompressed=TRUE;& t4 s6 b- Q/ N( _5 a; G! F. x
  782.                 strExtLocal=".\\DownLoad\";
    - _1 n  [: A6 O; t3 z; m& H2 k
  783.                 strFullName="update.txt";, L2 ?% u0 _3 }5 g! D" q
  784.                 dwProgramState=AP_CONNECT;" }3 y' t" |# |6 {: ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 C, c/ S, u& e- L; H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " v& {8 t2 F. V6 k: C7 k$ L7 F  S# S
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' S: [; b- _4 O7 j" n
  788. % t2 S$ i1 E( }  q+ l" k
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * O- j: k5 z/ Z* f, o" h3 g  _
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 z4 [0 q+ d7 f. n
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" }6 |4 p9 t! S" s: G. `- B
  792.                 {# i% v6 Z/ U% J2 A. x6 H1 l; U* s6 z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! j& O" ^0 i, S& k$ ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 N5 C7 H2 Q4 I$ h4 }; m6 y) @6 H
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * y- {) Q2 i9 X& `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 w& r- H  [2 q7 n" Z8 D; {

  797. . o9 F' Y# K- W& P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. B0 J5 m0 u4 P/ w) X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) a( ~+ [  l/ c% J/ f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" P) j) f: ^# S# m/ ~
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 h! P; f. n  [" d+ x
  802.                 }
    * h  d: W  w) d& P
  803.                 dwStartUpSteps=5;
    * f6 c0 @8 }: B% V
  804.               }
    " r. M9 o0 @& s4 g& _& Y
  805.             }
    % E- u: M. d) f0 e$ s$ o
  806.             else
    " N" x! Y0 C/ J
  807.             {" r8 X* b' g, w
  808.               unlink(".\\DownLoad\\checkversion.txt");$ B' X2 s" k4 G  ~% T
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ( A) R0 D" @, i% n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 ?! ^6 m( b! y8 u9 q! u# `
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + v/ i0 F1 e& V  ^

  812. - {( S+ A- u4 Q! }2 n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; z$ l; r+ ~. Q- b( j+ }5 f6 g0 x0 `( D
  814.               dwStartUpSteps=99;7 Q: k5 v% r3 S. k: a5 I
  815.               bFinishUpdated=TRUE;9 w+ X' `3 ~- ?1 g! M# d
  816.               bCanUpdate=TRUE;- I' ^# u! t; f- m) q' ?) i
  817.             }: s  N/ R6 W" Y8 U% x8 v0 {
  818.           }2 ~0 a* B2 q& \( j2 T* ~3 ~* d
  819.           else
    0 ~7 d2 K3 L% E6 a5 z& H0 F
  820.           {( v) r% W+ O+ N2 B
  821.             if(!Dn.Connected())
    2 B% {  r- G. X2 E0 a8 }
  822.             {
    6 l6 ]$ v: k7 c- q" W6 _6 J' p
  823.               bFirstUpdate=TRUE;8 F6 c( A& x, b1 N2 i
  824.               dwTotalFiles=1;
    ; h" F& a% i9 c- w0 l/ X( U3 u
  825.               dwDownLoaded=0;% n& M+ p7 t# c! Q) H  P1 T+ N3 ?
  826.               bSilentStep=FALSE;
    + w9 z) T, Q% c8 j* a; R) M0 d4 k
  827.               bCompressed=TRUE;
    * m  c" B$ V- e5 n$ c( y) M
  828.               strExtLocal=".\\DownLoad\";
    # V9 l: @8 x( r, O2 `- c
  829.               strFullName="update.txt";
    ' h1 H+ D: z% `
  830.               dwProgramState=AP_CONNECT;
    # I6 n+ o% q! ~1 V
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. R+ `* S: [' G0 L( A6 |' ]
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, `( u+ q% {; o, R+ i, K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");1 z, N& K+ O. E7 e- ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: a: U7 B/ Z: O' `
  835.               unlink(".\\DownLoad\\checkversion.txt");2 Q: V( l& R8 f# T% q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)  e7 F3 s  Y4 S
  837.               {1 j3 V) F5 o0 u0 S+ {0 o' b1 |2 f) e
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    # J( h4 `1 H; L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");3 @# U# c% ^: ?3 m3 C5 z- O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");- R7 y4 \& N$ C  R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. @" I# |# d, o' }$ o
  842.                 # m8 |2 s$ r$ G' J
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , ?. r: }- G! x
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; ~  S) c5 R5 j- {% A+ j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");8 {' o4 s$ h! s, F% ?
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' d7 }; l( \7 `/ w, c) d
  847.               }
    - L8 x0 g4 u2 h% t9 i! K- i( D7 c
  848.               dwStartUpSteps=5;
    9 D, D$ Z+ q- V" o* J& s. g+ ~
  849.             }  C* n+ ~9 B! ?7 p6 u4 X- w' b
  850.           }, |. K9 y+ v2 m! D" D9 i- i+ V
  851.         }6 s; O; D/ v) I# R
  852.         else
    ' a7 B* C* G( q) }/ m
  853.         {" ?2 W8 E# S1 i3 p  e8 @5 o
  854.           dwStartUpSteps=3;* Q. q$ Y5 s) [: n% r1 I! L
  855.         }3 D( b3 Y! \0 b( k5 f! k$ I
  856.       }3 W' S  V) B: e1 p2 x. \
  857.       break;( V) Y+ n) O7 Y) j& L
  858.     case 5:2 i& ^7 y* {( ^% r8 |  r( Q7 F
  859.       {
    $ }. t; T7 N1 u5 _2 m7 `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . q: a: W' O- n% }- x6 Y% U
  861.         {! h8 u9 Q9 a$ b( B4 U: N/ g
  862.           int opt_overwrite=1;
    6 w3 ~4 H: ?3 F
  863.           int opt_do_extract_withoutpath=0;
    - e& d7 T; F6 ?0 y! F/ f
  864.           unzFile uf=NULL;
    - Q# I7 H' ~$ N0 X5 k0 Q
  865. 9 d! W. d- Z! u4 u- |
  866.           uf=unzOpen("Wsa.zip");
    0 l  ~5 u: q& f( p1 Y4 _
  867.           if(uf)
    $ m& ]2 X- K( G0 j
  868.           {
    ) e5 D+ M8 G4 I8 E; q7 y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* m8 L0 Q* w4 w/ J' S; @
  870.             unzClose(uf);" ~! c0 {- G5 \* u/ Y* m
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");5 d1 ]: b" \; M0 u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    & Q0 H' A6 w& W6 g: |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");/ C- k9 [: u  K6 \. T# {+ ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& D6 f0 K4 |6 G0 e. r+ E0 _
  875.           }/ l; J$ d1 X. r8 I: H- J2 S0 ?  n
  876.           DeleteFile("Wsa.zip" );5 h& W- @3 {: d$ v* p2 S2 }  j
  877.         }
    - B& }1 [4 Z; ^, j) A

  878. - y$ {* F, V+ S+ x& t
  879.         if(CheckLocalVersion())
    / H4 P% O8 E% g, Y& ^- c7 c
  880.         {2 i) B+ ^  i! ]
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    # J# |! K5 y  a) g+ [$ P
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    8 U: _0 T$ D2 N
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    % Q9 H7 i; f2 w8 n! i& o8 G
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 U- v/ O# v% M/ H
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    1 e( @6 M, H) x* y8 ~3 O7 z. P
  886.           dwStartUpSteps=99;
    : T0 r; c6 C4 [
  887.         }
    ) d8 ?+ ]. z' u( P( |6 q
  888.         else6 O6 R0 g/ u; J, g: n# W" j7 _$ s
  889.         {
    / S3 j1 T; i7 q3 w! R2 @" F7 c$ a
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& }6 w" M! B3 n1 L' [5 d
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 ^0 o( o6 H: O
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% \/ g5 E, r5 M& `! M

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

評分

參與人數 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客服返回頂部