找回密碼
 立即注册

CSUpdate.exe源代码

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

: {! t  W& T( B: X' B" y
  1. / RevApp.cpp : Defines the class behaviors for the application.- R. ]+ v2 `! l% `) {7 C7 U
  2. /// u2 i% p- E. m5 p- w) J
  3. % h1 a1 F; ]9 ?4 U# l& D0 S
  4. #include "stdafx.h"
    : l5 L# }) R- h
  5. % A9 B7 T  {" x: s
  6. //#define UNICODE
    / r$ l, \( e$ G2 @/ W* I& K7 Z
  7. //#include <gdiplus.h>
    " \+ m- ~2 ~( F( |9 j1 N& I4 I
  8. //using namespace Gdiplus;
    + i6 Z7 |' M) h. f7 b# J' k
  9. 4 ]3 o  j. t4 A4 |4 w
  10. #include "RevApp.h"
    ; m$ b" A4 j0 N: n
  11. #include "RevAppDlg.h": C" w9 Q, T8 k) C" L$ I! ]

  12. : ~3 {5 E7 c$ R4 P4 u( I
  13. #pragma warning(disable:4786)
    ; a' Q! q# \* d% ?
  14. #include <map>
    3 o# j. H! Z/ H" G
  15. #include <list>* n8 B* |/ f8 {2 X
  16. #include <direct.h>: z, r% f4 t1 p2 b2 e% _$ b
  17.   n& c7 g/ u) c- \2 x
  18. #ifdef _DEBUG
    9 ]/ m$ _1 E! G9 ~
  19. #define new DEBUG_NEW
    $ R- b  q8 n: L7 @2 p; u: J
  20. #undef THIS_FILE
    % K8 T; R8 w% V2 ^) _5 y1 N# C- I8 M
  21. static char THIS_FILE[] = __FILE__;
    ! G3 g. G5 a" [/ Z$ H
  22. #endif
    5 e9 s7 \9 r# y' s# j9 d
  23. #include "SkinResDef.h"
    ' w: U1 \8 I5 L( H
  24. #include "ChangeBG.h"
    * ~& _# x5 T' L1 v9 s- U) V
  25. #include "AFXINET.H"* C: ?  `- w! T0 m6 M

  26. 1 i" b5 H2 L, I0 x% V
  27. #define TRADITIONAL_CHINESE 0
    . Z& L& r/ Q3 k8 W0 i3 J2 n
  28. #define SIMPLIFY_CHINESE 10 }4 s, g! q+ Z5 r* _6 f6 ~
  29. #define ENGLISH 2
      ?5 g4 m3 d0 m% g
  30. int m_iLanguage = ENGLISH;
    2 Y) C0 h$ Y% r- }& K- q) \
  31. /////////////////////////////////////////////////////////////////////////////
    # }7 h. S5 c# l# n
  32. // CRevAppApp
    $ c& t" _; p. C
  33. # ?( e8 z3 M1 d+ |, s2 o: K9 `
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / c( r2 ?8 `/ h
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      f( n2 }5 I6 i3 P! S% y; d& Y' l& ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  J( e, b2 I! |8 d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 p9 i  r' T* m! V$ \  ?2 }  |
  38.         //}}AFX_MSG% d& E* @& z3 Y% w3 n. G& l6 ?
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; T& F  [% {& r1 e
  40. END_MESSAGE_MAP()
    + v0 h5 S) E( t) E& [
  41. ) Z4 h% y( v9 A! L# W
  42. /////////////////////////////////////////////////////////////////////////////" V5 k! N0 w/ N0 S4 K5 j
  43. // CRevAppApp construction7 X7 C! v$ N0 u& X4 n: |
  44. 4 H$ g+ g3 T6 k, E; A
  45. CRevAppApp::CRevAppApp()) G. I8 |/ a- \# B9 M" R$ k
  46. {  }( c8 L! J% D! a
  47.         // TODO: add construction code here,
    2 A: w7 Z0 I4 |; ^. A
  48.         // Place all significant initialization in InitInstance% q( a$ J/ y# V
  49.   bDisplayIsBig5=FALSE;. P- h5 G  d& e; V& l1 d5 [
  50.   bRestartUpdater=FALSE;
    ' g. y6 J+ d4 R5 y$ J6 ?) t
  51.   bFinishUpdated=FALSE;
    0 D  `* I, ^, s- m0 H& y# I& ?% o0 s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 G% {5 U) j0 {
  53.   InitChangeDataBig52GBKS();8 C& \3 m0 j, G: ?, E2 I
  54.   InitChangeDataGBKS2Big5();
    & b! h  h+ t# f% W  s, p& d
  55.         //
      G& t2 O4 k; W
  56.         bClickRunExe = FALSE;" Z; @( k, J6 [* Z7 U) u
  57.         //
    0 b7 F- e, L' b2 B! }8 I8 Z) S7 h
  58. }
    2 ]+ H9 c& W" t( o. N
  59. # V. Q6 D% N8 b: g
  60. CRevAppApp::~CRevAppApp()
    " V- g+ `: N2 h' w: N
  61. {/ V& e6 J+ {/ z4 b1 l; w
  62.         // TODO: add construction code here,% P( q' j: ?9 }+ l; }
  63.         // Place all significant initialization in InitInstance
    / m6 I' S0 V. {
  64.   EndChangeData();
    ; F: N; B. I& X) d- \
  65. }
    : E5 i6 y( b: J  K8 D

  66. ) Y' a- c" N1 V( o$ {1 \9 j- t: G: d
  67. /////////////////////////////////////////////////////////////////////////////) M+ I1 @5 m! O2 X* d
  68. // The one and only CRevAppApp object
    9 ^' D+ p' L* Q" ?' e

  69. " D( g; c, J  B4 Z% d
  70. CRevAppApp theApp;
    ' k( b0 r# K# z- I' r# o% z

  71. 9 l  g" B+ o4 w7 \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 `# E( x3 d/ K. g$ H  N
  73. {. B7 a$ x" j  t
  74.   int iEOF=0;9 m) K  v. j' s% G" m/ D* L7 _- H
  75.   char szTempName[MAX_PATH];
    & i! {- f- }8 e1 j( [; V; h
  76.   *szFileName=0;; ~9 ~  i# D% w& F
  77.   iEOF=fscanf(fp,"%s",szTempName);0 c0 H, C* [$ ~$ M2 s6 Y, r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')5 {9 |; C7 o8 V, c6 H
  79.   {, |( g# y+ B8 m" c% z9 b3 J& X
  80.     strcpy(szFileName,&szTempName[1]);) E6 c$ q# w8 ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & e: h1 M2 J6 @2 r0 A! ]
  82.     {
    % }! o" ]% @. P( v5 a
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , V" w- T5 b" P# p
  84.       strcat(szFileName," ");
    1 c; j/ I3 G- y6 a! J+ k9 W
  85.       strcat(szFileName,szTempName);
    / b. s, c9 P: }4 U7 Z! j
  86.     }
    * B/ D: v# a) M0 @  f8 E7 d
  87.     if(strlen(szFileName)>=1)
    * w. u4 e; i1 U2 r
  88.     {) }0 p% u  W6 h# y! ]4 @
  89.       szFileName[strlen(szFileName)-1]=0;4 p0 B7 x; A* `& T
  90.     }
    ! S# b* T; R7 M# k/ D; L
  91.   }
    1 V6 }! d% ~4 a7 z/ g' D, r0 P  z
  92.   return szFileName;" j3 b4 K, u% Y" U0 s  o6 q
  93. }& c3 Y% _! C5 K" \- p
  94. 3 y, P2 I. d  A- P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    " h, Z( F0 w& Y" a! j. z/ O
  96. {
    ( W0 X0 C  C( N& T$ _
  97.   FILE *fp;: V2 ^7 h% a1 P3 f' [( T
  98.   char *key=NULL;
    $ z9 m8 H3 C- J1 p; y
  99.   char version[MAX_PATH];) w( u# i% W% h, o+ C
  100.   LPUPDATEFILE file,olds;
    2 W. ?( {8 V8 y$ B$ K7 X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ ?7 C# W; l2 K3 v

  102. + g. r- K4 D9 t+ L$ x- t
  103.   UpdateList.clear();
    & v/ U- r( O0 V
  104.   UpdateFile.clear();" r  q: }: v: x1 Y4 g) p
  105.   if(GetFileAttributes(filename)==-1) return false;
    " Y/ T' v7 c, U+ `
  106.   if(!(fp=fopen(filename,"r"))) return false;, q; J. F/ I7 p! m  R
  107.   fscanf(fp,"%s",version);
    ' k! r& z- D0 v8 w) K* p
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & p. ~9 Y2 u; X- G+ m. @+ U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 k" ?- m7 ~3 |
  110.   {
    - q1 v4 \3 s1 @" i; e& R
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# ~: {' v, ?6 Z. @* }+ m) x6 q4 B6 h
  112.     fscanf(fp,"%s",file->path);
    % g& l/ R: a$ V1 V! b# @0 D; B2 e
  113.     ReadFileNames(fp,file->file);+ }/ _* a/ V) |' `. Y) u
  114.     strcpy(file->full,".");& m# m, [) N1 k
  115.     strcat(file->full,file->path);& D1 g9 e& y. C' H/ l% B
  116.     strcat(file->full,file->file);
    & L1 S. K+ T1 e" z+ r  d" {, R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ j/ S* h! F7 t/ h) d& v+ ^- E2 j
  118.     {( R$ H  v7 d8 ^0 U1 l$ N
  119.       file->vers=(float)atof(version);) G) A0 ?# X: x7 _$ o- h2 E
  120.       UpdateList.push_back(file->full);# a* n  O5 Q* q' F$ Y+ h7 N* M5 H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 w8 M4 F! Z0 |( O. q0 y% V
  122.     }
    " f$ ]1 H* ]$ Y& ^8 O& h
  123.     else
    - s9 _) x; E2 _5 n: G/ ^
  124.     {
    5 z+ \+ P* k8 R! N9 M7 t
  125.       olds=(*p).second;
    ; U4 ]1 [" [' T& @! x+ x
  126.       if(olds->vers<(float)atof(version))
    3 T! x# F; I7 q2 r
  127.       {1 w: }1 Q) i$ T7 ~) t5 y
  128.         olds->vers=(float)atof(version);
    5 l, r3 F0 }& ~
  129.       }
    0 `# _9 O" `  r- V( [" Q" r. k
  130.       free(file);
    ' W% ]( ^) Q' d; ^9 @  C7 W! f' p
  131.     }
    7 H% T  e: B. |) O
  132.   }! |7 }+ S& G! l/ H4 m2 S+ n4 @
  133.   fclose(fp);
    & O: d$ r" J0 ?( Q; ~" Q$ ^
  134.   return true;
    ) L  ~+ F6 @  S) K0 e$ F4 M
  135. }0 D5 {1 ]9 d; _+ {3 V2 h: w+ g& l8 p

  136.   K2 c1 G. [' G; F& H  n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    - Y- M, W! `  a# F
  138. {" \1 w/ k3 V" U6 [
  139.   TCHAR  szFull[MAX_PATH];
    - H% C0 f5 j  E. y8 e
  140.   TCHAR *token,*inter;6 S4 h# {3 ?2 u- Z
  141.   *szPath=0;3 E- @. _1 x4 Y1 g' m
  142.   strcpy(szFull,szFullPath);
    0 x- T1 u  @, C  D. b
  143.   token=strtok(szFull,"\\/");
    8 `7 [! \/ M& H$ x$ M5 i
  144.   inter=token;
    9 R0 J5 c6 C' n4 P% |
  145.   while(token=strtok(NULL,"\\/"))2 z8 V0 P- j9 r( b. Q- }% C
  146.   {$ j4 k. a. A" x1 X
  147.     strcat(szPath,inter);7 I/ I1 L" ^! d2 g3 T  ~
  148.     strcat(szPath,"\");2 P# O; I3 ]/ M- P# c
  149.     inter=token;
    2 V3 ~3 ^+ G3 \* _, A% R  r
  150.   }1 M* R# [* S5 T; F+ o5 p
  151.   return strlen(szPath);
    $ v. Z. F: K9 {: s, \
  152. }# r; Q6 [# v9 C8 A1 \

  153. - B' f7 j/ c& r* \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( O1 S- {! N: x9 a2 Q
  155. {- c. h  M) r. j3 E  E
  156.   DWORD attrib=GetFileAttributes(Target);
    ) |. Y% q5 S" N3 l! R, n
  157.   if(attrib!=-1)
    4 a% `, v, F7 P1 Y/ D3 p
  158.   {6 B" l) v. ?' V# @# X  z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 V% V) a4 `1 u1 L* a3 L
  160.     {
    ' l8 I# E3 k+ \' z, m6 }8 o/ N$ {% |
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 c, {2 V" O4 k3 I
  162.       SetFileAttributes(Target,attrib);
    7 }3 J9 C2 j: ?
  163.     }
    ) o/ v3 n+ Q9 Q9 ]: T' a2 z
  164.   }1 T; Q* x* _+ }$ N4 K- q
  165.   CopyFile(Source,Target,Erase);7 w1 }; y- A' p1 ?1 m
  166. }; o5 d; Y, O  [5 F

  167. & ~5 Y% Q5 W4 b1 L8 x
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' ]# p  C/ h& K) U
  169. {& h: u7 @; a; {* d
  170.      FILE *fp;
    4 }) r+ o! m( o  v
  171.      char  szBuffer[8192];) m* D3 f* d* a0 d6 p+ w0 B  {8 b; g+ W
  172.   va_list  argptr;: D; U- h. F: \+ @- X/ j( J

  173. 2 ~  g1 G. S4 L* I; w, z& H
  174.         va_start(argptr,message);' Y! o2 V5 i3 O3 R9 v, {, m" ^0 V
  175.         vsprintf(szBuffer,message,argptr);, P% S# r$ z  D  ]+ f7 s
  176.         va_end(argptr);( @1 U' V" ~8 C9 }. d+ Y. I
  177.   fp=fopen(FileName,"a");
    0 h: A) ~1 k7 a1 w
  178.   if(fp)
    - `/ G  e' N9 E2 G1 e3 b9 L
  179.   {8 r# |6 V4 [& _5 t. B  {/ h
  180.     fprintf(fp,szBuffer);
    0 W. S0 ~5 w! ?& v& R$ |
  181.     fclose(fp);
    5 G0 m( j1 Z# l! B1 q+ ?
  182.           _flushall();
    2 [% F; Y4 X6 s/ T4 |. r
  183.   }
    $ n( }0 h. J$ u# ~
  184. }  r, x. Z. l; b+ t/ E
  185. 3 k9 q6 F; E4 K
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    : d) w1 {8 ?* m
  187. {
    % G9 y6 f' _8 y) u7 h) P
  188.      FILE *fp;
    " x, @, b% x# Y1 c7 u
  189.     DWORD  attrib;4 i9 y! ?$ _2 u0 w
  190.   attrib=GetFileAttributes(FileName);
    * ^9 j. a( ^1 ~2 l1 E
  191.   if(attrib!=-1)
      O  @1 h$ w$ o. R) D$ I
  192.   {
      h. Y  c9 J6 F
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 N1 X$ P3 r3 V$ r1 p" T
  194.     if(!SetFileAttributes(FileName,attrib))2 Z0 ~( ]0 E8 ]* [, h3 t
  195.     {0 ]( Y( H+ ?5 [& q
  196.       return FALSE;& D/ o5 p/ M/ n/ u  K- T& Z7 O
  197.     }
    : b( E" Q4 I) a& u9 s9 D. }
  198.   }3 x6 n! l3 w- S- l5 V
  199.   fp=fopen(FileName,"wb");
    ) o% R5 ?4 C1 `4 C# |
  200.   if(fp)
    9 d: u2 K: P# m! @! a! C
  201.   {+ a" L0 P& ?! \6 V) B0 g1 y2 i
  202.     fclose(fp);, K7 K: J" T8 y1 J" t$ k# E: F
  203.   }
    - A3 d1 g4 q/ v" s
  204.   return TRUE;
    ) |5 S$ h* e( S# @! }7 j1 s
  205. }  ]! S. G. L- ?% K6 {6 x* e
  206. ' g5 N& c: ?1 |  Z5 I8 E' n0 H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)* N: i5 J/ R! R! ]  k- F
  208. {
    + J) t# d# Z- v, G4 K5 O, F2 V4 Y# ~
  209.   char filename[MAX_PATH];
    ) u& S) ?( Q: _  F- u( _) L) r2 B
  210.   LPUPDATEFILE file,olds;
    & q, T) _- I$ Q! W3 x" R
  211.   std::map<int,CString>::iterator i;
    - W, _3 N' o8 u9 F) ~0 p- G
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( v) K+ @+ ?) j: p4 x
  213.   std::list<CString>::iterator l;
    " E7 n; R: L5 A. B1 w2 G  H
  214. , G0 ?( A4 d: ^% `5 v. c2 v
  215.   if(bFirstUpdate)
    . P/ R2 q: x0 P" C- m+ J
  216.   {
    * g( q0 t/ T' y; k2 Z3 J
  217.     dwCurrFile=0;
      }) I  r* T1 W+ w" \% W
  218.     bFirstUpdate=FALSE;
    : N8 j* |% h$ k! o+ c" j! a
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 a& L+ V8 r# O) G: F3 n
  220.     {: `" k) S) X% A4 _. U8 {
  221.       dwTotalFiles=UpdateLocal.size();
    3 U7 c. N, C# w& l; s0 E4 U5 b
  222.       dwDownLoaded=0;7 {+ \: C" c9 f, c9 X' r) r
  223.       bSilentStep=FALSE;" [6 ~: L1 m  w7 Y8 }
  224.       bCompressed=TRUE;
    $ f: z) _" z6 J$ E: ]+ {2 f1 W
  225.       strExtLocal.Empty();9 n- O& z7 _  n2 f- i
  226.       strFullName=(*i).second;9 |8 v- D2 A6 q# \% M
  227.       dwProgramState=AP_CONNECT;
    / M2 W7 C( K5 }/ Q1 t# k0 ~! K6 f
  228.       return TRUE;
    $ |* X, }* o$ t/ c8 w9 ?6 B
  229.     }
    9 C' B! h; H$ W+ a1 i1 u- P
  230.   }% c0 O% ^7 T3 D7 o$ Q
  231.   else if(bRestartUpdater==FALSE)" K7 A, G8 m0 p
  232.   {
    1 u- o% ]& Y, V7 Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  q( a' y; o0 O2 s
  234.     {9 z( @: [) l% }2 z5 W
  235.       file=(*p).second;4 f2 d% S1 w( ^3 c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - f1 l8 B" O9 }& D9 W
  237.       {
    : t( F: ]. P2 S  b# n8 i4 @
  238.         olds=(*p).second;6 T8 ?* x: D. ?6 Q# ~
  239.         olds->vers=file->vers;
    # k# P) d8 D& ~9 @
  240.       }
    : P* `" x+ J4 y; E% G( F
  241.       else/ f- d- ?& G6 @0 D! o
  242.       {
    * f' }, p8 b9 a. v8 A0 [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! h. ?% H  s1 W0 R" L5 a3 A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 V3 K6 T  U1 v% c: D. P* K: B! t
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));6 A" Y" t+ M( R; {% a) r
  246.       }
    4 C! n% x0 G( d! A5 R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # ]/ }; Y" E4 ~0 y$ c* S  ?# c! }+ x: h
  248.       sprintf(filename,"(%s)",file->file);
    * x% Y2 H+ C1 K; _3 S. w
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! O, }, o! C5 F9 l! v& a5 W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ; C5 }* D0 k2 [6 \8 h  H4 G
  251.     }
    . P2 j! B' O/ ?1 m7 N
  252.     dwCurrFile++;
    ; ~  t4 y) c4 X# H0 u8 t
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): D0 {, s7 m  {4 r5 }0 d0 _4 r
  254.     {$ @4 U$ n' d9 V! E
  255.       bSilentStep=FALSE;: E2 i& _% k9 P6 A" T, X
  256.       bCompressed=TRUE;4 b$ r& K: T8 k7 O, H8 ~
  257.       strExtLocal.Empty();2 B+ P/ p5 L) f8 }% f) l5 `+ B0 Y
  258.       strFullName=(*i).second;
    7 f8 [2 i' z# ^* @
  259.       dwProgramState=AP_CONNECT;
    ! t( g- A' o' q( O, C$ x( n
  260.       return TRUE;
    8 x* Q4 q/ L  W0 Z
  261.     }+ L, f3 Q; N7 Q9 s7 K3 J5 D/ ~
  262.     if(!bRestartUpdater)- g" I, l* ?4 [- q5 h
  263.     {
    ) L" m" t8 j: Y0 {# e6 |( t* k
  264.       int iCurrSize,iFileSize;! O( [7 E, B6 ?
  265.       iCurrSize=0;7 H' _/ J: d9 @# O) W7 O# J
  266.       iFileSize=UpdateList2.size();7 p' t+ L/ L$ \+ o( Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 p7 u9 U6 {+ n, k5 L+ o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    + q9 R' i. K' W+ ]/ ^
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 \  h$ C# }3 \5 e4 p2 [6 j/ y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 h$ }5 y: s! O0 t& ^0 c
  271.       Fclearf(".\\update.dat");, X1 ?# J( }$ a  F& e% @7 b
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 j. [% }; P3 i/ M9 y+ g+ ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 u2 k+ z# r2 V( l) F, _
  274.       {
    0 l  p$ o7 j' {; t7 j
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    * T: {/ g3 q; Z2 G4 C& z: q9 R0 _
  276.         {
    # Q3 J" x' i: i5 Z
  277.           file=(*p).second;- O1 R: d8 @# z$ V
  278.           sprintf(filename,"(%s)",file->file);4 O( P/ y: W: J' [! p) a5 l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- b; k5 G9 i# N+ R7 E. I; V' E2 V$ |
  280.           iCurrSize++;) E! @  Z- e; n# b$ a! I2 X6 V4 a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / e( F, A  M" _) C
  282.         }
    & Z& d# C* K/ F( q
  283.       }
      z; S$ g2 @3 x7 Z, I2 g( s0 [
  284.       unlink(".\\update.txt");: r4 P* m; I% v% R
  285.       unlink(".\\update.tmp");
    # `7 b8 {/ i- I- y* z5 u
  286.       Fclearf(".\\checkversion.dat");
    1 T% z6 b5 l+ ^3 j( Q' ^1 q, O9 m% g( f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 m6 X  Z) l9 X- y$ ]
  288.       if(UpdateLocal.size())
    0 Y- E- L/ S- U, y; I! _
  289.       {
    ! J: [# R3 D- J1 h
  290.         UpdateLocal.clear();
    5 K/ i. Y' @% `# W$ _9 u! A1 q. J
  291.       }( \( o' L6 \- p; q+ @0 o# I/ h* B! e
  292.       if(UpdateFile3.size())
    ; o" y2 X: X  K9 F
  293.       {
    ' q9 W( s  }: w2 l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) ]0 g7 ^) q3 U; f6 u
  295.         {* K- I; L& ~+ s3 B1 R( P
  296.           file=(*p).second;) J  P% w- J& P2 p
  297.           free(file);5 _1 W* y' J7 U. M+ U
  298.         }; u+ j' Z2 B( s0 s/ Y1 h2 g3 h
  299.         UpdateFile3.clear();
    5 ~9 T# O0 Q/ K8 x5 ?
  300.         UpdateList3.clear();9 N* ?( [. B6 l% s
  301.       }7 C! }$ j. K# s: e7 V
  302.       if(UpdateFile2.size())/ f6 N9 M6 O1 g9 c4 E2 P$ M
  303.       {: Z% q( X2 m- I: u  f+ k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ @5 b$ v4 J( x7 W) F8 w' W5 g
  305.         {6 _3 j& j/ j' J3 m9 N7 x4 H* n4 H
  306.           file=(*p).second;6 p* n4 i6 X9 q' m; b- Y
  307.           free(file);3 S7 o& f, _5 \* i2 V
  308.         }# p- j; |+ E6 N* E1 r4 c
  309.         UpdateFile2.clear();( G' p  f' J% g% H& t7 c
  310.         UpdateList2.clear();
    2 Y9 Q- r! `3 f  j
  311.       }
    ) j. B; i' o( t$ M
  312.       if(UpdateFile1.size())
    . |2 `, H9 k4 `6 @, k* o3 D' j
  313.       {  n$ ?7 Y; w2 S$ k; d/ d+ t
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # l; D9 ^! b& ]4 S9 v; ?
  315.         {5 d9 N9 ~7 ]  Y; K4 \
  316.           file=(*p).second;5 L3 p2 M% k/ U. T0 m- ]- X
  317.           free(file);, w* x4 f. g. ~4 N
  318.         }
    5 Y3 [, \+ i5 f/ O. E& N* W
  319.         UpdateFile1.clear();: P8 z) h$ i9 k- D# D8 {' T) p. [
  320.         UpdateList1.clear();
    ) z0 f  H2 Z. S/ E2 [+ m
  321.       }" B# x9 P, k) u. e- e* }, `5 @8 M
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 ^: u% @5 q/ E
  323.     }1 K1 G5 _9 t/ i# b3 E0 `. E7 Y1 ]
  324.   }
    $ J2 Z$ v4 c8 Q* |" K9 ?
  325.   return FALSE;
    7 T5 B2 L: c, Q2 P3 _
  326. }: g9 z+ s$ A& ]7 {) c" X1 o7 ?

  327. 1 P# ]7 `$ i7 C1 H# ]4 j7 F. J
  328. void CRevAppApp::ClearAll(void)' y* Y% B, ^) L+ Y: l$ J: ]# D4 W) t. G
  329. {1 H5 {& X; v" h7 J; j2 X! G
  330.   LPUPDATEFILE file;
    ! M  t, y* n% U1 [  e: N' ?, b1 l
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 ]6 z5 [2 T& Z* u& c4 ~1 j1 ?/ r
  332. $ a! c3 t; A8 Z; g/ X
  333.   if(UpdateLocal.size())6 X: L9 \8 W7 e3 R0 c7 Y
  334.   {9 D- x2 b3 I! V& r% ]& V
  335.     UpdateLocal.clear();7 ^5 C7 e5 a. S6 p
  336.   }! M( _+ [4 p% k2 S
  337.   if(UpdateFile3.size())
    + c  J; C1 J3 I- w7 q9 y' H  r
  338.   {! X9 c( O+ c1 G5 v3 ]  [" C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & F7 I4 M. [( Q$ P& ~
  340.     {
    + ]) q$ }' O$ |3 T9 R  n) L: W
  341.       file=(*p).second;
    $ l2 V" _( o0 c  X* j& p
  342.       free(file);9 b5 O9 _  w7 F8 ~, a
  343.     }9 V- I6 x+ i# d1 I: v, U6 q
  344.     UpdateFile3.clear();8 @9 E1 I* i) {0 J3 ~. Y9 v
  345.     UpdateList3.clear();) s; R! H% O- w9 e# ?$ w
  346.   }
    2 P7 S3 p' Y; _* S* z* E) d0 N2 J
  347.   if(UpdateFile2.size())- ]# S7 h, v: S( K
  348.   {' u7 L4 D* z+ P" i: y0 `5 [; u
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : [  J* k/ i( Q8 h/ `/ `
  350.     {
    5 t# B( D: i; O( W5 T
  351.       file=(*p).second;
    1 d( W: z( D* P* a. C& y5 U1 H5 a
  352.       free(file);0 g$ w! y+ f0 ?# K" a, z
  353.     }6 L5 [) s: j, z% D. H- d
  354.     UpdateFile2.clear();
    : K5 _0 h9 {+ k. z' M* ~( f
  355.     UpdateList2.clear();5 \1 Y+ b7 Q: a& o, L
  356.   }1 K$ Z, Y* N9 Y+ Q
  357.   if(UpdateFile1.size())7 S- k  S$ Y* G6 w: V( f3 y1 @
  358.   {
    % ]. O( B; D2 {6 p! Y/ `4 R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( X% F8 h* q2 A5 S. W7 O" r" @
  360.     {
    ) s% c5 B5 K' V
  361.       file=(*p).second;
    & A1 Z3 ]9 S" b; z3 K: U3 Y
  362.       free(file);- n$ Y' x0 F5 w/ P. G$ ?
  363.     }
    ' G, z  q5 n, w- L* r
  364.     UpdateFile1.clear();
    . r" }2 e. e( r6 ^1 e. K
  365.     UpdateList1.clear();2 w; y9 ~+ [0 l' s
  366.   }
    1 T: z1 l- c' m1 E6 ?
  367. }  6 m- Y; M1 g' }/ x. g
  368.   , E, n- |+ w6 S. |
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 I2 R+ G/ e3 Y8 p
  370. {) `% ~8 ^/ V, `3 r: `
  371.   int c;" @1 I1 Y- r& {
  372.   LPUPDATEFILE file1,file2;
    % o: m" p5 w0 ^) R3 i) C* ?0 N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 z7 J( u& Q, }6 {* t* C
  374.   std::list<CString>::iterator l;
    # m$ a% M" H5 D
  375.   [1 R; }# H- Y" V- A# x8 ^! `9 L
  376.   UpdateLocal.clear();
    ' u# V2 W. `' V- H0 U. L" X
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);* {- I# x( r& q" f- l7 }+ B
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 K: E  B$ K* F: A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);" O+ Z  i5 f# `" J1 @% S( h' j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 R! `- n  B( V6 X+ ~
  381.   if(UpdateFile3.size())1 J- J9 d5 E4 z- C' q2 M
  382.   {% g$ |1 Q0 S0 j8 I, m$ [7 D
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    & B& ~: e" g) w. Q" m- [
  384.     {
    # |6 ^) \$ W8 }
  385.       file2=(LPUPDATEFILE)(*i).second;3 x+ V2 L& s$ j& a$ @
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 _1 ]% {0 _0 t( V2 m* O! R
  387.       {
    , d. ], T) f1 H8 B
  388.         file1=(LPUPDATEFILE)(*p).second;5 d/ j* L7 H! t1 C
  389.         file1->vers=file2->vers;, I& ~0 J/ A1 }% L' U
  390.       }
    # O) B9 F: Y& W
  391.       else
    6 X/ x0 y* K9 c) U( g! m
  392.       {7 J3 @' S0 b. ?" {+ Y4 Q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. X2 Q/ h% H0 l: ~9 Z! O! S# F  K1 u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));9 Z! S$ f1 k  z+ r' E% f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 ]2 ^+ |& c1 X9 a1 B- ?
  396.       }# W$ f3 f; Y; C4 B* [- `
  397.     }( R  X9 d: F1 R' t3 d  U/ |* ~& [
  398.   }' h8 P4 b7 ^/ Z, `; c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 y+ G  |& q- b
  400.   {; N! W  S. ~+ `5 T2 D9 m- B
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' {1 `6 E! A1 A3 j9 d; [* g
  402.     {
    ; F) F- b9 O! L9 s0 H
  403.       file2=(LPUPDATEFILE)(*i).second;
    % N- @  `7 O& b6 [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): s/ ~  T0 |8 W
  405.       {
    8 c7 k0 u# k) E6 [; o
  406.         file1=(LPUPDATEFILE)(*p).second;# X! D: x  p, \! y- F# i
  407.         if(file1->vers!=file2->vers)
    / z5 [6 E! |0 Y9 [! o9 _& `
  408.         {1 N$ G' A& T$ d& k
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 A+ @& W& i6 b$ E) F# Y  F+ D
  410.           c++;
    * v" M7 R& M' V+ y; A8 O+ i- v
  411.         }
    ) w0 `, [& p; {$ B% y* w- a
  412.       }% L7 p) R9 b! n; |' k- o
  413.       else6 z. n+ h2 k1 ?  u) P7 A4 f
  414.       {
    * Z% \5 c; u' m: j
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; c- V: Z7 H5 d" J( g. p1 L$ q
  416.         c++;0 }8 ^% _/ a8 }
  417.       }+ s% j. z7 y- [/ y: h
  418.     }
    ' |% x1 E! h- t5 K/ P9 ]. l
  419.   }9 Y6 U" x4 h6 _; J' K' a
  420.   unlink(".\\DownLoad\\update.txt");0 X; V% b; @  P* w& i7 M
  421.   if(UpdateLocal.size()) return TRUE;; M* m! z% W% s) I! Q- @& E2 h
  422.   else                   return FALSE;7 _; u0 K* U  R% a
  423. }6 G/ o* i) K; F6 Z" }( O
  424. 2 ^+ ]# G/ I( E' i
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! H, J$ s! q' O  d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% `! u( y; @' Z3 p8 b
  427. & s* g6 u* `1 S4 o/ g. B2 T
  428. + N9 ^: N0 S% a( s) a. {! `

  429. 0 L- g. [* U" E6 R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    7 F5 |5 n9 v. ?9 _0 m% H
  431. {
    0 n8 |7 \2 T5 z- b( i4 n! W/ C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( c9 ~1 t, S  C. f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# B2 e, ~! T( E' R
  434.   {1 s! A: _- [6 p9 ]" r% ?5 Y) S% [
  435.     char szLanguage[50];8 F# O, G- D# I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");4 z: _. N- I& ?: j
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 ~1 i3 @4 C5 u8 E8 {! t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / j1 t% n" m0 [8 j# d  }
  439.     else                                   m_iLanguage=ENGLISH;
    $ F$ Q7 s7 |. r3 S! \3 h$ M
  440.     char szRegister[100];
    ; F* }0 \- g2 z6 L/ I9 f& a: Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! M; }/ s: n! i+ b0 w
  442.     strRegsName=szRegister;
    % ~4 V  w* Q, B7 `
  443.     char szPatchURL[100];
    8 ?; v2 W' G1 E* ~  v" [' n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . C; t5 o3 u  `- A3 x8 v4 f" K/ B9 u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 N4 d: A* H" Z. D7 d
  446.   }
    ( y6 C0 m9 r. ?9 p$ ?
  447.   else! T4 B. N' {' [: s
  448.   {0 |8 X: g6 m- }3 l! f: S
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 C' V2 `6 @$ E% P( s. z  ]' i! N
  450.     strRegsName=DEFAULT_REG_URL;
    : i% @  M% x9 _9 V2 N
  451.   }& S4 ^; [: B* [1 @0 D" a
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 |7 b. r0 \3 f) j
  453.   {! i# t& G2 W, U/ [7 w1 y+ w( c
  454.     char szIP[50];8 v  f$ n+ X2 s+ z
  455.     char szDIR[300];
    ) Q9 D7 i. h+ J0 ~) e1 S3 v
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))# f2 ?6 k! c$ i$ m3 U) e" Q$ e7 w
  457.     {4 j; ?# u( D- ^3 V( r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* q- X, X/ z) I! p7 r0 Z
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 G# b3 }3 g, U
  460.       strHostName=szIP;
    " u) l# J: m3 O! A
  461.       strHostPath.Format("/%s",szDIR);2 I8 U# V$ {5 r5 O, Y
  462.     }
    % X6 {# d% N7 [
  463.     else# K2 Z7 F3 V. t5 K( J
  464.     {
    ; F1 [% |+ ~7 v: j' k4 o
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)! z# L! J. k/ J
  466.       {. q" {( y" r* a2 l  U
  467.         char szLanguage[50];
    + s- D6 J4 k4 W5 A+ L
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ N6 `$ L9 }5 |' y$ N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; O7 }  I. o5 X0 F0 X6 j4 a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 r+ F5 m+ Z( c
  471.         else                                   m_iLanguage=ENGLISH;
    1 K4 i; I( v7 g" F6 a
  472.         char szRegister[100];
    & z0 v! @$ K( f7 A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& {& G  Z1 j( R3 V1 J' @
  474.         strRegsName=szRegister;
      C/ R5 `# [5 t# H$ p! C
  475.         char szPatchURL[100];
    + d# k, ~$ r9 ^2 a$ Z2 n! ~
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# O! q3 R' B5 H7 _& C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: o3 C5 v! d: @5 F7 u
  478.       }' b9 o1 U: X2 M+ a/ i" u
  479.       else
    0 X! Q: J5 p0 A+ [' f& N$ Z2 H
  480.       {
    6 w( j$ X* J( }2 z; V
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 m. W7 f: `) F, B3 E- P  J  z
  482.         strRegsName=DEFAULT_REG_URL;- L" n# W, Q. L; T! V. ?% q
  483.       }
    , b1 o8 V9 [0 `/ i; A
  484.     }! _4 p+ e5 I& q1 m  a
  485.   }: \6 S4 {) u) G4 \/ N6 m; A4 y
  486.   return true;0 G4 N8 ]# x4 U7 E, x
  487. }
    4 c: K$ h7 C/ U" b9 t. t1 v9 z& N4 L+ U

  488. , ~: p3 k( T- x8 O9 s
  489. #include ".\ZLib\unzip.h"
    " N/ f: w) z6 V& k# a) x4 A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " }" R  f- {2 L9 R* G# v3 S
  491. /////////////////////////////////////////////////////////////////////////////
    , w( Q# j* p0 G0 R
  492. // CRevAppApp initialization8 y/ E9 F. F; ]( f8 I  F# w' x' s
  493. $ E% U5 ?9 h) m& i2 H
  494. BOOL CRevAppApp::InitInstance()
    ; I5 X2 Z. b0 c6 C, f
  495. {/ m+ N9 A% G) ~6 W' V& x
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # |; J/ n+ G% D) [2 V4 k

  497. / B- i0 W1 M4 ]5 |* q- G; L# l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 z7 |; `" S2 `3 i
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    : A. r3 M2 X& e. P
  500.   {
    + \9 e3 [1 Q& q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* j7 F' X, e, n/ I6 F( `0 i
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + E" B4 W; F, ]+ a3 e+ |" Y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 Z) {" M. c0 l
  504.     {2 Y- y$ e# Y" }7 L( C) J9 c
  505.       strcpy(szPath,szPathTarget);
    8 H- [8 M7 Y$ e
  506.       SetCurrentDirectory(szPath);
    2 n& ?8 z9 o' O  W6 b' H& Q5 e
  507.     }
    # h5 [" Q) ^3 f. M2 ~
  508.   }
    $ N5 p$ J) I/ \% R/ ^  h! t
  509. #ifdef _DEBUG  H' ?9 ]' c, E7 I3 o, _! o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# K/ `) Y( _3 w! y' P" q
  511. #else1 J+ V3 S5 @: d; E4 N% c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 X, C. A6 m: c9 b
  513. #endif2 Y: x; Q# ]; w7 s; ]. C
  514.   {
    2 O0 d( E' M: T" G, }+ `
  515.     char tempFileName[MAX_PATH];( H0 x  L% u2 I7 P8 Q& \' A
  516.     strcpy(tempFileName,szPathSource);
    - V( U3 l& Z0 P6 ^$ Y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    . e7 j% \2 Y0 a
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; D, p9 J0 w8 y  `8 `- V
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ y/ @! K- T- J- U  Y, u* Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 @2 {6 c9 x! N% e3 [# K! B
  521.     return TRUE;0 W: b) J- s3 l& \9 v: Q
  522.   }8 w6 I& F1 z& X& k* I6 ?
  523.   // Nuke 0118: Delete run.exe9 D* i7 j) j5 [+ |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' X/ J4 M2 ]+ m/ k1 w5 E
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 V! i1 v* W  P5 D, q" l" A
  526.   if(!ReadCfgFile("Config.ini"))9 h2 r3 P# P8 D% u7 s
  527.   {  \4 X' D) L; V! `0 j/ j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 I1 y8 }7 D5 t' l6 c
  529.     return TRUE;! I. e' `$ O: K8 }$ {
  530.   }
      @. N% ]2 _# {' |/ ?
  531.   HANDLE mutex;% e: e- o1 e% t; @/ D+ w: i: W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). A3 K2 {. K3 S+ @( Y
  533.   {
    + s) b6 ~9 ]: H% D
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - F0 C& T8 ^3 K0 J
  535.     {
    ( Y3 i3 {3 o$ m# y5 M! s/ f% K; s
  536.       CloseHandle(mutex);
    # e  Q6 q4 k3 K
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 t5 N# }+ t: e0 W
  538.       return TRUE;
    0 R# C  o7 C; a; P# _
  539.     }
    . Y, e$ X- P5 A$ X7 e- W
  540.   }  $ i" M- O" G% F, z; C' q* ^
  541.   CloseHandle(mutex);
    # q, L$ w' s+ h+ Q% c

  542. ; j8 i; V% y0 C, E6 g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);' z( D. ?  z) g- h- E
  544. 9 T4 {" H/ p2 r) }) q. j1 t1 A
  545.         AfxEnableControlContainer();
    ) I1 G( |; I( Z  P' b

  546. : U* g% N2 [5 a- n8 L
  547.   bCanUpdate=FALSE;% b) ]6 e2 f4 \& E1 \6 |; m
  548.   dwStartUpSteps=1;' k: @, b; f. x; ~
  549.   dwProgramState=AP_NOTHING;  B: H: P4 Q0 l% d- n/ c, J/ z0 X
  550. 2 `- [# u" k. P- @& N9 X! Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);- e* j* f2 x, m; S
  552. & t1 |! Q, ^! l  M7 {
  553.         // Standard initialization' W: T, Z+ m2 J/ b  A! D1 Y
  554.         // If you are not using these features and wish to reduce the size3 N+ d0 d4 {8 T6 I8 U3 c) [( A9 b
  555.         //  of your final executable, you should remove from the following
    0 H6 w' B2 u- {: A1 H% a
  556.         //  the specific initialization routines you do not need.+ B8 O- _7 Y# C% |& i! A

  557. 8 x( A) [4 P6 E- }7 K2 N
  558. #ifdef _AFXDLL
    / O* V9 n7 n3 f. G( ]8 A( f
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL- Z$ B5 y* n. b
  560. #else2 p' f: Q/ I8 [& e2 T
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ f9 `! r5 ]/ L. h; q5 z
  562. #endif
      T1 A: {4 p: \9 h: {9 l- L; W# u: Y

  563. 2 ~2 p  {7 |- z4 Z
  564.   dlg=new CRevAppDlg;/ x& o  |& d# ]! V* G! H
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 ?) s% l  n/ U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 j  ]& p# J; a( I. y5 u
  567.   m_pMainWnd=dlg;
    - K8 T9 g( @" k  A  ]* Z  N
  568. " y( p% z. L7 \$ e( ?
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 p. `* `6 m3 {& T7 C
  570. : b) o- i3 K/ _0 c: V
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) }( `3 z3 k: F. T( b
  572. //  ULONG_PTR gdiplusToken;( K. p* F2 H/ B+ E+ R, B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    / T: Q. K! `) E0 e
  574. 7 G+ [8 s# Q$ N: V+ K
  575. //        CRevAppDlg dlg;4 Z2 L4 m9 E* r
  576. //        int nResponse = dlg.DoModal();+ p$ Z. c! l$ S! R3 J
  577. //        if (nResponse == IDOK)
    3 U$ P) n0 J$ o( E% N2 j  x
  578. //        {
    + d1 i% j- Z* g
  579. //                // TODO: Place code here to handle when the dialog is
    6 k3 ~- f( y  Q4 \. g3 L6 A
  580. //                //  dismissed with OK
    ! c) J/ f8 i& I" T
  581. //        }
    # c* S+ E+ q/ ^* w) n8 L* I# F
  582. //        else if (nResponse == IDCANCEL)
    4 U7 Q7 P! R( c. A0 k  v
  583. //        {
    " }0 w, S! m% y) p* v
  584. //                // TODO: Place code here to handle when the dialog is' E. V. p3 X4 h# F7 u; \
  585. //                //  dismissed with Cancel
    / Z* k7 _1 a* ~! W
  586. //        }9 H- i/ N4 L8 M! P5 d$ {+ {" `+ O

  587. 9 d9 _4 q3 y% z( \$ N2 J0 L* i
  588.         // Since the dialog has been closed, return FALSE so that we exit the  j4 q3 T0 a' [2 V2 y. C' K/ A
  589.         //  application, rather than start the application's message pump.
    ; N/ ^7 t  _: O- k
  590.         return TRUE;
    7 J) G0 X* R! f# c# C0 a
  591. }# x2 M' L- U1 m2 ?% q$ D) O2 w( U# C) \

  592. ' ?* ]9 i& Y6 f6 X8 L  ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 K, F# e" s  d( x
  594. {5 ~: ~  w3 u' N3 }
  595.   int i;+ g" s' V( |9 I3 z9 i  k
  596.   char *szRet;
    + k  m1 R" o: f: _1 X7 A

  597. 5 p0 A# f6 [) z2 E' {
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    # G" X5 [$ `4 l
  599.   if(sztoken)! F; s" e. d9 r# @. S& A% C0 @
  600.   {
    $ j$ A2 W& ~( T; Y9 B( b
  601.     szRet=&sztoken[itoken];
    3 W- k- Q( m! c3 m' f8 S. S1 M
  602.     while(sztoken[itoken])
    & A" Z. Y& m/ q' k8 D( T
  603.     {
    ' O  a4 B# F3 m
  604.       for(i=0;i<(int)strlen(token);i++)6 g# i; P$ D/ n% D# A  G+ L$ H$ S
  605.       {% ?) e! ^5 ]: q+ o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * k/ S  w- Y4 L. e: \
  607.         {
    , p1 I; n4 n8 j3 k8 Q  d2 w/ l
  608.           sztoken[itoken++]=0;
    " o- V" y2 v# l
  609.           sztoken[itoken++]=0;
    9 I6 r1 \- A* \2 t8 }! g( M
  610.           return szRet;6 y1 t- s! H& y  c6 ^, m7 e6 i2 ]
  611.         }
    4 x6 j. e& m- e' J  a
  612.       }' A6 j, ~$ n: G1 n# T
  613.       itoken++;
    ( ?8 Z7 y1 z* R) x$ w; i
  614.     }
    0 K" [4 ]' U) {% D+ l% G
  615.   }! L2 {1 T# L) w' Y
  616.   return NULL;
    7 V! z: Q$ q  `
  617. }
    # H' _  _0 V2 @. ?

  618. 6 W7 ^! P# w) l) f9 W0 `! p
  619. void ProcessProc(long Total,long Current); M/ }* V# b1 t. X; x7 X
  620. {
    5 |8 n- g2 N6 U( G+ ?
  621.         MSG msg;
      m& ?, P  I, e& q- ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& v" b9 [0 g* D/ \1 j! u6 h: x
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 f+ G( R4 T$ m* }: h; d) h
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" A# {) b5 Y$ r0 g4 ^
  625.         {7 R1 q0 Z3 C. [0 V: y& F, O% P9 P8 i
  626.                 if(!GetMessage(&msg,NULL,0,0))& Z( q& V# }" _% `  u; y
  627.                 {( |. }9 S, Q% J! Y/ ~( j8 n! ]
  628.                         return;
    8 S1 [7 e- k: v- b. w& E/ [
  629.                 }
    , [' f+ c5 a+ o6 n
  630.                 TranslateMessage(&msg);
    9 f  s3 U  g" U. p- {3 Y/ P" d
  631.                 DispatchMessage(&msg);' I+ Q1 ~- |( F9 Z
  632.         }        " t* Y! I8 Q7 R" n  |6 A$ P; _
  633. }
    ( i5 \5 J; k( M/ |6 d

  634. 0 w  C$ e' |' y+ j2 c
  635. BOOL bFirstChar=TRUE;
    1 e( b1 a! ^: S  A, f& ?: d' t( K7 |
  636. % O' ?: Z. k  N9 I$ X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " E* p& ~- `' i1 A
  638. {
    + Q4 a$ |& o  F7 I/ ]
  639.         // TODO: Add your specialized code here and/or call the base class% E, V: |- ~$ o6 Q/ W  r
  640.   switch(dwProgramState)
    / M# X, c, ]7 u2 W
  641.   {
    ! `7 L9 S6 ~: s+ y( q; N3 c
  642.   case AP_NOTHING:
    9 Z& K. f9 @% c# A- m- X* T5 h4 Q
  643.     switch(dwStartUpSteps)
    - M; S* _( j& C- w/ B
  644.     {' o; u/ t8 S' k% R9 l
  645.     case 1:
    * Y1 S8 D3 U& z% M1 ?! p; G( C
  646.       {4 L' @1 _/ v/ x! e6 `5 d% T: A
  647.         int i;" {+ j* A* X: J( x# O( h' I" U8 n4 c
  648.         CDC *pCDC=dlg->GetDC();
    - I; H! d( j# H" E
  649.         HDC hdcwnd=pCDC->m_hDC;1 H1 z! n5 E  s: B) o: I1 m, N
  650. //        Graphics graphics(hdcwnd);. n: z& ?0 _- x/ Q' m, ]  S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");7 [; z1 F2 y. V5 ~2 \, {5 x
  652. //        INT iWidth=bitmap.GetWidth();
    2 J% C3 e( r4 b
  653. //        INT iHeight=bitmap.GetHeight();+ C9 L) L8 R: j' l1 `
  654. //        Color color,colorTemp;
    $ Q0 b+ k3 e7 N+ n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 O) b1 j! [' ~! J) L# \) v/ q' M
  656. //        {
    : q. Z9 j+ z2 D% N7 i! Z) b& W
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) `5 `# i3 I; }: D' J
  658. //          {
    . ~/ u6 @- g9 D8 V# Y" |
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 A  ^+ Q7 N* I* q6 x/ S6 p
  660. //            colorTemp.SetValue(color.MakeARGB(& Q2 o& q7 x% k# ~& }1 L
  661. //              (BYTE)(255*iColumn/iWidth),
    $ N9 }8 Z0 O6 ~3 f6 M2 A: t( f3 V
  662. //              color.GetRed(),
    / k, B; ^. x6 V1 w$ G! J. o
  663. //              color.GetGreen(),: X. Z* l( |: e1 P
  664. //              color.GetBlue()));: [% @; O& e2 k5 V2 x6 W  a4 W
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 H3 g1 U1 @' U  R- w2 y" e+ Y4 f
  666. //          }4 E, e! a0 ?, }* `+ S- ]
  667. //        }+ e- x5 @- z$ h( T0 G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 F4 i* ]7 [% E
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 n! c+ I0 q$ i; W1 X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    $ n4 u. g7 c: f5 |2 h5 s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 e) J# ?& T4 P2 ?4 n
  672.         for(i=0;i<240;i+=8)+ p% a4 z. r& }
  673.         {
    ' m; v- M; s  Q7 ~
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 K( j1 x; f3 D/ f3 Q! R
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! o5 N; g0 Z/ E! |: [5 R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, s) d( L7 F* D5 r% G0 V' {3 _
  677.           Sleep(33);
    ! Q, D3 t) w( s2 m& r
  678.         }3 @# g) [# B5 H, _. d, p
  679.         Sleep(1000);
    ' g; T. U: y' m  `8 {- u8 r  p
  680.         for(i=240;i>0;i-=8)
    3 Y4 K, c5 _4 f9 d
  681.         {2 Z; J" F' d; E/ M
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& P& I+ I) S7 |" e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' H$ L' v3 ^7 h
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. I0 d+ q& W, R# o  m& g
  685.           Sleep(33);
    0 z0 |7 J, H) D, Z2 K4 C& z
  686.         }
    , X- B8 ~3 Y- I( M
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# V1 t. u( G& G+ s7 q5 q
  688.         dlg->ReleaseDC(pCDC);# R$ U. I' r% c: Z& b0 l) H
  689.         DeleteDC(hdctar);
    9 [6 Z  ?; n4 a# E7 j% _  R: p
  690.         DeleteDC(hdcsrc);
    0 p) A; }3 v* a- y7 d
  691.         DeleteDC(hdcorg);- h5 }/ y% ?1 A8 `
  692.       }
    5 p7 ~/ p% N: R4 U7 b, H
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);: i# D1 d3 l+ i* K
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; h: g* K4 |) d$ i: N
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + @8 d; t' k: ?( u8 [+ ]$ i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* Z4 `8 o% P9 O% z+ k
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. B* o5 N) K% Q2 D! \4 @- O- `, h
  698.       if(!Dn.Connected())
    # o2 N7 Y! X9 B( ?+ W6 W1 Y
  699.       {0 x) x  j/ c5 y" h2 L- Q6 ~
  700.         dwTotalFiles=1;
    / H0 r0 x3 y4 [9 T
  701.         dwDownLoaded=0;) `4 i. z0 Y# j
  702.         bSilentStep=TRUE;1 c7 }7 |5 m. m/ I. T, l7 _1 U
  703.         bCompressed=FALSE;, f( x5 |8 S; n9 e' ?* v# @
  704.         strExtLocal.Empty();  S, M% H* E) ^, s. ^# ~
  705.         strFullName="readme.txt";+ }# z( g& ]  Q& W
  706.         dwProgramState=AP_CONNECT;
    5 _1 Q4 c/ C* Z
  707.       }" N7 s, u" }1 j" o' Z; p
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + c' c! F; e8 d$ U$ k" ?6 O$ s: Z# [
  709.       dwStartUpSteps=2;# X. @/ I, \6 @' h
  710.       break;) P# u. P- m+ g, g* B
  711.     case 2:" |& i! U9 H8 H3 p+ ^( k0 b
  712.       {
    5 N' E6 c( y& N: k7 m
  713.         int iEOF;
    ( k: B$ f9 R0 H) d& N  e( G+ W( Z
  714.         FILE *fp;( X" c  }1 h+ B' u
  715.         char szString[512];$ R+ y( G$ F' L# a; D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" h, ]$ E7 R5 G0 j5 d
  717.         if(fp)7 [/ y* v1 I7 x7 G, d. k
  718.         {7 R5 Z5 {: _4 d0 J2 I: i! e
  719.           do
    5 v% E( F% P, @' T
  720.           {4 u' u: V4 k* I1 Z
  721.             iEOF=fscanf(fp,"%s",szString);+ H. a$ r0 `+ o& t6 L
  722.             if(strlen(szString))# U/ }2 w" [8 w9 \' E& l
  723.             {
    0 T. Q/ {: Q$ N/ r) T3 @: B
  724.               if(bFirstChar)
    , k* O3 Y& x7 B$ ^, a2 E# U
  725.               {
    2 n9 {- C7 W% q7 {4 t' H
  726.                 bFirstChar=FALSE;+ a2 b$ f) v: E2 _* s
  727.                 bConnectIsBig5=FALSE;
    , b, g  _3 ~) Z( n/ S3 t
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;2 e  S+ P$ C0 \
  729.               }
    # R% v- e% I: H; l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % m7 U9 a+ n; K) `% }' ?: f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 S6 p: `0 Q5 d
  732.               dlg->m_ListText.AddString(szString);& j* j7 [0 H2 v$ O$ a* O4 d/ F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: S$ C& w% I6 z- M: T
  734.               *szString=0;
    * d8 F  G6 {$ D- I
  735.             }
    / Q" P5 g" k5 I5 C9 ~) N2 s1 I
  736.           } while(iEOF!=EOF);
    & q0 `4 w* j* ?* ~
  737.           fclose(fp);0 G6 v6 Q- y0 _0 T; j# ]1 m  f
  738.           unlink(".\\DownLoad\\readme.txt");
    + h2 A8 W; ]' u% K  K
  739.           dwStartUpSteps=3;4 G, _. F# U' H# S3 I( d4 A0 @
  740.         }
    6 O2 x. I! z3 L: B/ h& s  @* }
  741.       }) d* T8 C. B! R' p% s
  742.       break;
    * g( ]3 c( y- O4 o4 S
  743.     case 3:
    ; [5 I0 D/ x  k* q
  744.       if(!Dn.Connected())% L" e! F2 m. O& \, Z
  745.       {
    + Q, h' r0 [* F/ f& A! H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);! v' i2 ?& b0 K2 e4 A+ b
  747.         dwTotalFiles=1;
    2 q# o7 p2 K( D
  748.         dwDownLoaded=0;
    / ]+ ~- F$ m* O" e) G# D) f
  749.         bSilentStep=TRUE;# g! f) ?# |" Q: Y
  750.         bCompressed=FALSE;! V0 }7 Q  W( `
  751.         strExtLocal.Empty();$ W9 h3 s& P; S4 w: o
  752.         strFullName="checkversion.txt";3 h2 @* C0 b6 E' F9 N
  753.         dwProgramState=AP_CONNECT;
    - m( j; G- v. h9 X) \$ U
  754.       }) o* `6 z% q6 U! Q5 z
  755.       dwStartUpSteps=4;3 I4 {6 @5 u  h8 V" T, v  z
  756.       break;
      ?. ~( C4 E9 B+ d/ f2 O  O
  757.     case 4:; R$ c) ~& I9 X0 A
  758.       {
    + G' q: Q! Y! d6 r
  759.         FILE *fp;, o7 _; p- v3 P: z5 U. T
  760.         char szString1[128];6 q* a0 m8 g2 I7 _+ `6 Y
  761.         char szString2[128];5 ?2 C" [/ m9 v5 ?& v
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ q4 u* V) \2 C6 n& v9 g) N: p9 e
  763.         if(fp)0 ?1 g( M! y- E7 b' I
  764.         {$ ~' s3 q4 _5 B( L
  765.           fscanf(fp,"%s",szString1);
    5 g3 ]3 Y  P1 ~, H; B
  766.           fclose(fp);
    4 F* d; x# [" U  v- Q0 L
  767.           fCheckVersion=atof(szString1);
    4 N9 ?9 n0 {* m+ ~& b
  768.           fp=fopen(".\\checkversion.dat","r");1 z7 L1 `  U; f# G) v
  769.           if(fp): S  j( f6 S8 b, H& I3 w2 M
  770.           {
    ! O2 s8 e3 B4 v* `
  771.             fscanf(fp,"%s",szString2);
    9 u) B# ^9 W1 u; q  E
  772.             fclose(fp);8 P' s) x) K& [. |
  773.             if(atof(szString1)!=atof(szString2))3 j" ?2 ^* j) V: p$ S
  774.             {
    # [/ Q2 p4 R% {
  775.               if(!Dn.Connected())
    0 Z% ~" F0 h2 U
  776.               {
    6 i% B' A" {8 z- D9 A
  777.                 bFirstUpdate=TRUE;3 y6 m! \: W5 u! j& Q* c
  778.                 dwTotalFiles=1;; v2 T. p9 i4 q! z8 d$ o) d- V* \, ?
  779.                 dwDownLoaded=0;
    : I3 m$ x5 }( ~6 o0 T
  780.                 bSilentStep=FALSE;$ l( p8 G0 `1 K
  781.                 bCompressed=TRUE;! w, n5 }$ @! C% }+ g- i
  782.                 strExtLocal=".\\DownLoad\";+ f! @' Y0 r! z
  783.                 strFullName="update.txt";
    : B" i+ l5 p4 j
  784.                 dwProgramState=AP_CONNECT;
    2 C  x- f9 A6 d1 {7 W- ~' i9 A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - L9 U# F" S3 i0 P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" l8 @1 _6 ?7 K8 W2 q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 F" I& Z! C; b, r6 ~
  788. & `! u9 J' n$ ~9 U/ ?! t0 s% M% y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * y1 R) L( W& [9 U1 {9 u2 `
  790.                 unlink(".\\DownLoad\\checkversion.txt");; f5 H3 i$ t, F/ G5 R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" ?$ ^1 \  N# I
  792.                 {* @; Z/ j# w2 g/ M$ r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 e& ?- {! A$ D! B
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% a7 M9 V" d! S- t5 X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 c0 D' E, M. x: J, t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) U9 A* N) t3 B% M$ F7 d6 c

  797. & \- V7 x2 p9 V# E2 ?/ P$ A6 Y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' _; U( `) s- B- l3 `: H; d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 b& E$ P+ x5 N# z( a* A; M) O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");9 _. S( N% P+ s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' c; R- ~( U4 ?; {) n- d
  802.                 }- W+ C9 v3 Z" s- V
  803.                 dwStartUpSteps=5;+ B3 H. O1 ?. E* y2 {3 u
  804.               }- M; i0 }# J8 P8 Y0 v
  805.             }
    % K# G3 \0 N# O
  806.             else: f6 z2 y  Q. d5 R! t6 s
  807.             {
    ; E) P+ M: u" A; `  @% ?: r/ E4 c
  808.               unlink(".\\DownLoad\\checkversion.txt");( _1 B; q- g/ ]7 ]+ Q+ m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 }# i  y6 @1 f% r9 w8 g
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / X4 d5 r* ^$ a2 ^8 M0 N2 E5 j
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ ?8 l+ I% o) d0 N4 r2 z5 ^

  812. - R# x8 b2 b& s: R' C7 s; A2 e
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 G$ `! {& [" C0 v) F* k* M
  814.               dwStartUpSteps=99;# w7 K* e% W3 K% h5 `! t
  815.               bFinishUpdated=TRUE;
    ' z( S- u$ R1 z* d
  816.               bCanUpdate=TRUE;2 }' y9 {7 L% J0 b
  817.             }3 a* N" v+ a' e7 \. S
  818.           }- u8 s) N& e" W; w
  819.           else
    6 e) a8 A6 R' S# ?# o" D
  820.           {
    : r" u7 s$ @7 O
  821.             if(!Dn.Connected())' i8 O% P* N  s& I/ W# T
  822.             {
    + o( h5 {  B, ^. ?1 S
  823.               bFirstUpdate=TRUE;1 S9 k+ l+ k1 p6 L: l/ F
  824.               dwTotalFiles=1;6 \& E) h9 u' w+ j
  825.               dwDownLoaded=0;" `+ G, K; z3 e# j3 @4 K9 p
  826.               bSilentStep=FALSE;
    9 V- J0 ^( f2 ^& W8 {) \4 Q
  827.               bCompressed=TRUE;. s6 a; \& D- W8 e1 O* s$ E
  828.               strExtLocal=".\\DownLoad\";
    8 O# H" c. l2 b1 |) W0 o
  829.               strFullName="update.txt";. M6 F: u7 M% C8 d8 H. k% [
  830.               dwProgramState=AP_CONNECT;
    8 h0 O% f% v4 U' \
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! A" a0 G' U, H8 Q! ]: H- O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 D# Q+ E6 i4 @
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% G" z* V) k, p6 c2 ^: q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 z2 h( m3 u7 h1 B3 d4 ^
  835.               unlink(".\\DownLoad\\checkversion.txt");( j4 V# F. Z  n% L" G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : [, Z* o/ Y% N: X7 j( A
  837.               {7 {: B/ W- O( O' X6 P
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");: [  j+ I# n) C( E: F0 }; Q7 w) b
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ R4 P8 x) ]7 ]
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 d! N  {6 p5 G% X4 i) E
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ]- X' l7 J0 N
  842.                
    4 v1 @; O$ }4 H! c+ O% I7 v6 S
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  L" `  ^. Z1 q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 g. D3 z: K0 a- C& r  n1 y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");' n5 c/ ~7 c# p" Y6 Z2 G  [, v. }0 O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! H) }, \  I( h4 J9 k/ `  n
  847.               }  E) E/ @; O3 G: v
  848.               dwStartUpSteps=5;) z6 _* r! ?; B% X& K/ N
  849.             }
    : f" z, O& f0 Q6 A
  850.           }
    2 E, G  E, a- m
  851.         }
    & _! \1 g6 O4 x) ~4 a2 ?! J3 T
  852.         else
    9 Z' J! q9 g5 j4 [+ X7 Y
  853.         {
    7 N$ `$ q' }/ U( a5 d
  854.           dwStartUpSteps=3;
    # t4 Y6 }! v: d0 u% P
  855.         }
    1 E) T! o8 f9 e, @- C1 D
  856.       }5 D/ E/ P& Z8 e( d4 F
  857.       break;
    ; ]% q( c1 N! I7 _$ {+ _
  858.     case 5:  E; t7 y* `, m; L6 N9 H- I# c
  859.       {& P/ K8 I. z+ K
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' f" X2 A$ Q' ^: N& m
  861.         {
    5 B$ O" b, a* m4 [4 B. t9 G* V# m
  862.           int opt_overwrite=1;' c! {6 ~  m' ]. U7 T
  863.           int opt_do_extract_withoutpath=0;
    % g- U( {" W& m: ^, Y. b
  864.           unzFile uf=NULL;6 C, X7 J+ C% X3 t. e
  865. " J0 M/ h/ T3 j6 F
  866.           uf=unzOpen("Wsa.zip");
    1 t# b+ E$ N9 s$ C
  867.           if(uf)' k, _& L+ |: |( E& ]
  868.           {
    5 i+ P! G" x  X6 q2 W
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);, |* C0 A) Q; m3 B" ]0 t
  870.             unzClose(uf);! R9 q1 s# U* L% P: S( K& {
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");+ {7 H3 e. l) [1 E, _
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    # t0 I. S8 z# X! j" \
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    7 e) j  O* u# l) e0 f1 I
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 A% k5 @: c' u0 b, m2 e
  875.           }
    8 e4 \0 g' C2 u: v' V( Q; j
  876.           DeleteFile("Wsa.zip" );
    1 m( Q9 x& ]) y& W
  877.         }: |( b/ Y" O% Q+ f. L8 Z, ~
  878. 3 k; ?: J3 X- ~! O- u+ ^
  879.         if(CheckLocalVersion())) L0 `3 J! `4 [, D5 @# j8 S- X" K
  880.         {! @3 g6 x5 h% h0 J/ E' k8 Z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 P: C- d. g5 {$ H  N
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    1 B- I* _0 t+ C
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");  v: k: X7 U  l7 n! b
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 f3 X0 c0 U9 U- o, v$ V
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) q! s; c, O6 O# g: @
  886.           dwStartUpSteps=99;
    - [+ j; P+ C+ v  }" y2 ^/ D
  887.         }
      S% Q% a3 K) q4 r- Z
  888.         else2 w. }; A- T. D  F
  889.         {
    ) C7 \6 M  @' M! R5 b! L, _5 e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + G2 ~* q& ~. v1 q; |
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 n. @# b4 |  t! v- M" f+ }) h
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");2 ?  X* I% r% }

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

( k5 B6 h- e& D6 \2 r

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-2 09:13

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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