CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
* N. @" P5 E2 m2 ?- ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    & A. I4 c  G& ^# U! ^2 r
  2. //0 q9 g( H. {3 L6 _
  3. - N' B, G8 w9 E* g2 |) |
  4. #include "stdafx.h"
    3 p1 t7 ?; P, Q0 f! R" h

  5. 1 O2 ^# I- f4 L& t* F
  6. //#define UNICODE, J" V! p. H+ Z) k6 ]/ Z
  7. //#include <gdiplus.h>
    ; @; E  L7 Z8 ^7 n
  8. //using namespace Gdiplus;
    / A4 B& ^0 t! M; g' D  J

  9. & ?- b! Y4 }1 c+ s2 Q! o
  10. #include "RevApp.h"; m5 o3 ~8 H, }' o
  11. #include "RevAppDlg.h"7 Z8 X5 c: p, S& g

  12. , p8 m* G9 r" S4 U7 y- I% n4 r
  13. #pragma warning(disable:4786)
    ( ~' j2 ~0 w* ~4 V0 {9 s
  14. #include <map>$ X. |, `$ U6 z& J; Q$ \0 G
  15. #include <list>
    0 w! _1 E& t, k# b
  16. #include <direct.h>) e) T- K8 |3 U, H, k7 j1 O

  17. + p3 s) j3 Z/ Z5 G) e" ?. Q5 I
  18. #ifdef _DEBUG. n* ?6 J6 V7 O& Y+ w% ^' r
  19. #define new DEBUG_NEW. z$ N( c/ l' p3 J3 G; J* x8 Z
  20. #undef THIS_FILE
    % H& q9 {9 n9 F. ^# L: ^8 S
  21. static char THIS_FILE[] = __FILE__;
    2 M' e2 h) B0 B. V8 E& w4 I
  22. #endif5 H9 P- `( e: r$ x4 I" x
  23. #include "SkinResDef.h"
    . g. V% W$ J4 G- e
  24. #include "ChangeBG.h"
    " ]" C% B# _$ }% L2 }
  25. #include "AFXINET.H"
    6 P  t  }/ v. o% I% N# A

  26. 1 p% W7 y: d6 A) C
  27. #define TRADITIONAL_CHINESE 0
    1 O% Y' H0 M4 t& a+ R
  28. #define SIMPLIFY_CHINESE 12 Q  q' X1 h' P' C  @+ G  e
  29. #define ENGLISH 2
    ( c( i" L6 s: [! q' k$ g
  30. int m_iLanguage = ENGLISH;
    ' \& _' Q( J, ]+ S) i
  31. /////////////////////////////////////////////////////////////////////////////3 m% W% v) [. H/ [) B: J
  32. // CRevAppApp
    9 m' j2 I- M& G; ?, U& M* R7 k
  33. : e- b5 @" }9 \" P& s( A5 f9 p9 ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ' _/ }" @! y6 O8 _: x# b" B
  35.         //{{AFX_MSG_MAP(CRevAppApp): L- w# C4 R6 P) i: G: Y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 K1 v" E) i+ K# Z( W+ k( s2 J' ]
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    $ V$ s5 E4 b2 `* F
  38.         //}}AFX_MSG
    - f4 w) G, Q$ {, D  J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , e- e, I" Y7 p; m" |
  40. END_MESSAGE_MAP(); W* ~7 j& L( Q3 ?* E5 ]3 c& L

  41. 0 t# j. |9 \- t+ Q
  42. /////////////////////////////////////////////////////////////////////////////
    9 U7 y& B+ l2 l5 d1 m) t
  43. // CRevAppApp construction3 m! j9 b' G$ l
  44. ! O! m% b* u  S5 _6 u
  45. CRevAppApp::CRevAppApp()
    & `8 i7 @2 \/ Z0 m- t# `! z8 ?
  46. {, H; X  W/ d5 y* Z1 \1 o  }
  47.         // TODO: add construction code here,
    , J, J9 w* h9 Z' O7 N  s) n
  48.         // Place all significant initialization in InitInstance+ T0 Q) B9 {0 u9 L* [+ p' c
  49.   bDisplayIsBig5=FALSE;
    + ?+ E! y& \/ ^3 ]. \, V$ c$ j
  50.   bRestartUpdater=FALSE;
    + ]2 t+ }' w/ F" ]. ]
  51.   bFinishUpdated=FALSE;1 X! {2 h( ?& l6 Z2 c/ [5 r; d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;2 ?% h- E; F2 U- K% v3 L
  53.   InitChangeDataBig52GBKS();
    . ^) H" o5 [3 _3 Z* D, Y8 F: B
  54.   InitChangeDataGBKS2Big5();
    ( b% S( v3 a+ E: u' p
  55.         //
    * u7 Q7 a" x+ @$ z4 \5 M5 V- n# S
  56.         bClickRunExe = FALSE;
    2 h0 [+ b9 d3 f0 E
  57.         //
    2 x; C" @% u' z1 m9 y& B4 i) i" ]) ^
  58. }
    6 N" _* z: E4 ?' K4 P# F# a. v8 j

  59. ) }( V- f$ n# o
  60. CRevAppApp::~CRevAppApp()0 e) j, O6 W( W9 l
  61. {+ h0 e. ?, e. x! G! r) Y2 n1 s
  62.         // TODO: add construction code here,- H  W: B8 J. }9 @6 N
  63.         // Place all significant initialization in InitInstance
    6 R0 P: ]) J$ y% r: x8 X
  64.   EndChangeData();
    + ^( s0 J6 @: l# y
  65. }
    & c2 {- z0 T- m4 V) f
  66. ) B2 n2 Z1 b, \+ L
  67. /////////////////////////////////////////////////////////////////////////////( c, s% \# Y4 ~8 N- S' Y
  68. // The one and only CRevAppApp object
    / @9 q- F$ m7 L, I: l; v) n) k) Y0 s
  69.   ?. {% ?1 J( l7 [4 ?* i
  70. CRevAppApp theApp;
    ; t/ u6 M) A8 R! ^# o5 J# z
  71. 7 U$ t- ~# G# t$ t  L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)9 v% r$ q3 i0 `' u/ _6 t  h7 H; L
  73. {
    4 y+ E, F  m/ ~/ s
  74.   int iEOF=0;% \0 T$ Q" M2 o7 Y* I  \- `" l7 [
  75.   char szTempName[MAX_PATH];
    ' {+ ~  f4 C5 m, W/ J4 ?, M/ P
  76.   *szFileName=0;9 u2 q* ^2 x, v9 q# g
  77.   iEOF=fscanf(fp,"%s",szTempName);1 f' ~0 u7 a4 Y7 x9 M
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')  Y, [) J8 `- C, j7 W
  79.   {0 E9 ?' a1 c* i( F' o/ y
  80.     strcpy(szFileName,&szTempName[1]);" y8 a, w/ K( @! l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF). {4 s. M- ]1 E1 {% r; r
  82.     {
    % R1 S% V5 g7 n. P! P
  83.       iEOF=fscanf(fp,"%s",szTempName);% r6 {' n$ I# |! [
  84.       strcat(szFileName," ");
    9 P* L) D: |" c& w% ~% X1 ^
  85.       strcat(szFileName,szTempName);
    7 P# j/ ~. j) j1 w
  86.     }
    . d" a/ U$ g+ B, P- H+ J
  87.     if(strlen(szFileName)>=1)
    6 L: J, j( w0 G% c4 e) f& f- ~) J
  88.     {
    ! T7 f3 }4 k" Y7 e& v$ E
  89.       szFileName[strlen(szFileName)-1]=0;
    ( n5 B! E1 w2 I9 u1 l& R- Q$ p$ W
  90.     }
    9 b* P) [! R+ r: p; \; A
  91.   }; z3 S0 n1 j; a1 c/ ~
  92.   return szFileName;6 X# v) V+ q3 R; w, |& Z/ r
  93. }; C7 ]6 l5 s( S
  94. $ R* H1 B# r5 U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)* d" }4 V3 G' ?
  96. {' C) ~' k# p% O: A6 ^( _
  97.   FILE *fp;, X1 s% d+ k! D3 V- l
  98.   char *key=NULL;: l$ @3 G) h. u" `; w$ X& m
  99.   char version[MAX_PATH];9 L1 B; V1 g+ |5 d
  100.   LPUPDATEFILE file,olds;
    # J$ ^7 q0 r5 b/ w3 L) B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + P( @3 r1 I  _. ?; I
  102. % \7 {9 O5 W8 H9 }& d" U4 d5 @
  103.   UpdateList.clear();4 s5 j/ Z9 `' H# O& p9 s3 t$ G
  104.   UpdateFile.clear();7 u& y  p1 t  L4 C2 _
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! O8 j- T1 O9 y
  106.   if(!(fp=fopen(filename,"r"))) return false;. E8 Z, V  g: b$ I/ Z- k
  107.   fscanf(fp,"%s",version);: ?% m3 ~# a  A" q" ~7 N+ D" B6 N
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & N$ w7 e3 D; U. p8 u+ V+ W% j" v
  109.   while(fscanf(fp,"%s",version)!=EOF)' P  y* C4 s2 _# D
  110.   {
    + S; n6 ~% X& U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 w; h: c. Z. T" z% a( g  v! H
  112.     fscanf(fp,"%s",file->path);
    1 v7 v- N% J  v! P" ~+ Y6 x
  113.     ReadFileNames(fp,file->file);$ M7 e- H0 [+ b+ M, A+ X
  114.     strcpy(file->full,".");6 _) R" O" W8 h$ O6 ]+ H# C% Y
  115.     strcat(file->full,file->path);7 O- l, j% X. V0 N) Y+ a
  116.     strcat(file->full,file->file);
    9 |; d) r' r7 i, U6 ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    + Z. C$ w4 Z/ r1 d5 J2 {1 k
  118.     {6 ~& z4 }. }9 Z$ y/ W2 I: i% D* `
  119.       file->vers=(float)atof(version);1 {- R' A) e0 f! i& I7 m3 ]' O. ]4 Z) _" n& D
  120.       UpdateList.push_back(file->full);
      C, S* R7 I! X4 u( P6 f3 F
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));9 ~" s( {+ r. n
  122.     }
    8 A: d/ @$ I2 r3 ~, E
  123.     else
    7 M4 Y" F  m$ o, A
  124.     {; Q2 q9 V# n$ t! B/ X
  125.       olds=(*p).second;
    * z+ b* T0 b7 p; h/ R0 ?% ?2 X
  126.       if(olds->vers<(float)atof(version))
    4 Z) h9 M2 Y& ~4 [3 z& e8 d
  127.       {9 F2 q4 C0 Y5 O5 `, Y
  128.         olds->vers=(float)atof(version);
    8 }# C6 {# {0 s9 T1 ?
  129.       }5 J; d% x. p- ?& E; x
  130.       free(file);5 X: C/ X, f# h( m0 Y
  131.     }% x! X8 Y/ H* B0 f
  132.   }  X, m; C  z0 w6 L' F9 u" y, `
  133.   fclose(fp);
    . l) z, Y% H" V$ C' j
  134.   return true;
    ! f: e+ f2 X* y
  135. }
    - x6 l9 d4 h/ L" N' w& R

  136.   ^. M9 P, ~) B4 u& X! N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 t) s2 ?5 i) U  p* g
  138. {: B" Y6 Q0 A0 s, a8 g7 S9 Q
  139.   TCHAR  szFull[MAX_PATH];
    $ b6 C- F- \4 s
  140.   TCHAR *token,*inter;
    2 M) g4 K$ w" Z8 g7 U. M$ j
  141.   *szPath=0;6 b2 k* v  [* \  Q, U
  142.   strcpy(szFull,szFullPath);# o+ w0 R- ^5 ?. L% _7 Z: d
  143.   token=strtok(szFull,"\\/");
    # |& ]8 D) \1 R3 f+ u. y
  144.   inter=token;2 }3 T8 \# g& T1 m- ~; d
  145.   while(token=strtok(NULL,"\\/"))' a$ B* t/ Z3 ?3 t0 x9 m% C
  146.   {* Z/ q' }3 ], }; d
  147.     strcat(szPath,inter);- f! z2 u) g: W- t* `+ e2 S+ u0 C2 j* l
  148.     strcat(szPath,"\");: ]% b9 y( p# r) ?6 R
  149.     inter=token;
    . s1 V( O$ \1 a) v9 m
  150.   }
    - d. t) o1 Q. g. K5 ^  h4 D( M
  151.   return strlen(szPath);
    ; B1 S( x: u; r! D6 Q1 k
  152. }
    / l$ F$ j* e1 Q

  153. & J: |) c" C& W: W; G/ ~  X# C0 v
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! s; b$ O7 j' C( `
  155. {
    + n. N0 ]/ t8 M$ j8 N$ d) i
  156.   DWORD attrib=GetFileAttributes(Target);# y& ^) {$ V- m. P4 ~  E  j
  157.   if(attrib!=-1)
      I2 ]0 \& @. t" ~5 R! Z
  158.   {
    ' r0 `" X; }9 a! E# L$ t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    / \7 `( y. Y! b1 \
  160.     {: [/ c  Y- k0 \4 X4 P% ~2 y3 g8 Z6 w# K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# |" V: w* h% [, l: \& g: {! f
  162.       SetFileAttributes(Target,attrib);
    * u" e! s" C7 _  j$ j9 H+ c
  163.     }
    4 s. U* L" N& `% f- d. N% n8 l3 k) m
  164.   }. X' f3 v5 v  f8 i" T* a0 L7 g
  165.   CopyFile(Source,Target,Erase);
    % ~% o& J4 M  _* e. B
  166. }( u; y* l4 j. W# y8 t$ H

  167. 6 R- c7 r; u7 X  r1 R+ k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); U" ^4 H: @( O' c1 U) d+ a7 i
  169. {) U, l. T4 Q* b. ^5 i% m
  170.      FILE *fp;8 j  R; B& e! B* v; e8 v; h8 j
  171.      char  szBuffer[8192];& n( |7 w  b2 R4 T. N/ v7 N# [
  172.   va_list  argptr;5 }, G2 q) w8 c
  173. ( o+ O+ D/ R; u
  174.         va_start(argptr,message);
    * {: `! B  K) g/ x! B" H
  175.         vsprintf(szBuffer,message,argptr);+ p' L7 A& E. @, F7 G
  176.         va_end(argptr);9 r9 ]' k0 {% }# T, Q8 s
  177.   fp=fopen(FileName,"a");8 i% f2 A5 }: a7 h& n
  178.   if(fp)
    3 w/ X; W+ j4 e3 Z- {  ~8 T3 n0 \
  179.   {8 A1 G( x9 B9 [8 q4 t
  180.     fprintf(fp,szBuffer);- J7 ]( B  P, W7 }: ~
  181.     fclose(fp);) Q: R  h0 \, [( l0 d, r4 M
  182.           _flushall();
    ! |& j$ f; r7 I3 m) Y. W6 t
  183.   }
    9 r/ j' c" I7 a$ r2 U
  184. }: X" ~4 v0 T( R6 x* y: _) ]

  185. $ a+ r2 a* _, k8 j1 R- p
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    $ z6 X1 \% n! ^3 \+ t& Y* i( Y
  187. {
    ( F! w- G2 ?) y, N5 S% R9 ^) F
  188.      FILE *fp;( R, W; E$ f% e3 I
  189.     DWORD  attrib;
    ' _2 B. o: p: f6 n: K6 U, E
  190.   attrib=GetFileAttributes(FileName);
    , f1 |6 n9 d1 v
  191.   if(attrib!=-1)
    6 g# U& d. z0 B3 Q
  192.   {5 V$ Y! _: ?3 R. _* ^7 T+ Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: R( k& G2 _$ A' J
  194.     if(!SetFileAttributes(FileName,attrib))
    ) P% S+ P' {! `/ k" Q7 V# S( j" n
  195.     {
    " b9 m% |6 W" _$ `. v3 q% W
  196.       return FALSE;. K( X% E4 d+ I) l- {
  197.     }: k" z5 A5 G! c8 E8 N: X- j
  198.   }, e8 c) {$ b4 m" k0 R
  199.   fp=fopen(FileName,"wb");
    2 L& S7 d* X$ n5 l3 Y9 _
  200.   if(fp)
    : h7 J8 s8 s# h
  201.   {& b0 Q/ v! v- J& |, O2 @
  202.     fclose(fp);
    6 v& z0 P+ S: y! u8 ]$ ?/ H% _" C$ T! ?
  203.   }
    5 N6 u7 ]3 g" R0 g% \$ I, _
  204.   return TRUE;2 a  j* x0 p/ n4 r1 X  n5 c2 D
  205. }! ?: O2 {' l5 S+ [% S' m

  206. # D0 g% ?7 ~. N0 j6 i
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" N* F& d* V: r1 R
  208. {
    ) \' J0 {3 V& s" X* E
  209.   char filename[MAX_PATH];: F1 s9 A6 [/ F, }. |
  210.   LPUPDATEFILE file,olds;
    ( a% N$ r+ ~/ o! e
  211.   std::map<int,CString>::iterator i;) k7 O3 r7 N6 f+ j( d
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 v: `7 b$ p4 ^) {$ q
  213.   std::list<CString>::iterator l;
    2 u  \! {- [7 q  k3 h1 d: G$ m
  214. " W* }! l7 L' I% G, G4 y  U. U
  215.   if(bFirstUpdate)9 q' ]1 b2 \' S7 _
  216.   {
    / d* k- U5 ~, t! T$ V* V! S! @/ a! j
  217.     dwCurrFile=0;
    # v% }" j& q# ?2 U  k) `
  218.     bFirstUpdate=FALSE;
    ! j( @4 m: E' P9 T* h! O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : S) [- g; C3 T
  220.     {2 p: o5 h, }: J" Z$ M6 Q
  221.       dwTotalFiles=UpdateLocal.size();
    ! |1 g, z5 c7 u' L
  222.       dwDownLoaded=0;. D3 U- f" p3 \9 G/ S0 k1 P
  223.       bSilentStep=FALSE;( L* ~- Q& j' R8 o1 `/ {
  224.       bCompressed=TRUE;# C6 N6 {/ s0 c" k: L
  225.       strExtLocal.Empty();
    ( d" f) l. }% h) g# Q
  226.       strFullName=(*i).second;( Y3 T7 [2 Q0 W) @6 S5 H
  227.       dwProgramState=AP_CONNECT;
    6 b9 r( ?* S" {+ l6 C. s# S
  228.       return TRUE;: G* ?1 b+ L- b) h$ P) D; G0 z
  229.     }
    ) v9 }1 \3 U- w* p* E
  230.   }
    & G; ]0 q* j& d# t8 t' ?( {$ ]
  231.   else if(bRestartUpdater==FALSE)" N6 A# D: J. k7 @- g* Y: H
  232.   {
    ! w$ y  P! p7 l% H; q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): S, Z& F0 s# s
  234.     {4 F+ }( q, }8 P
  235.       file=(*p).second;
    . u. r8 \  ^: `2 I1 Z0 [7 g' G; H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * l! I( j5 E  P) ]5 ^
  237.       {
    6 t! ~( a" O3 g/ _
  238.         olds=(*p).second;
    0 [- Q- C/ t" ^" @
  239.         olds->vers=file->vers;
    " W( g9 E0 I' n- d( U: f* ?
  240.       }0 [4 b$ G+ p; ?' O! n3 x
  241.       else) ?- x' S) E! M6 H
  242.       {) z9 a. M  b3 b' \0 r7 v3 {+ e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ C3 M; o: k" e$ X' V+ y* M. g  ]
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    & K" q( [2 N3 e, h# H: J. ]) M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));/ h. J! _. Z8 K) F
  246.       }) V( H! M, Q! C* w/ N
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");$ ]: j0 Z! [, ?+ N( R
  248.       sprintf(filename,"(%s)",file->file);
    ; a. N# U# T4 j+ N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 V% N  K3 ]) P" B: B, d" o% p5 g5 g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    . E7 i+ E  t, v7 B" l6 t1 D7 j3 n
  251.     }' H4 x, N7 n+ v; D
  252.     dwCurrFile++;9 R9 d% M/ q# ~7 Q6 a! X" j' p
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 w& Y5 w' K+ i' J; U2 \) c' w5 x3 y
  254.     {
    3 v% x# K. `0 ^* i' E5 K# R
  255.       bSilentStep=FALSE;" m/ [# e) {( [1 x/ R
  256.       bCompressed=TRUE;
    7 x( j' B( d( S( M' F% _" q) N6 q" y
  257.       strExtLocal.Empty();
    $ M' ]2 w2 L$ ^$ J' I( H4 C
  258.       strFullName=(*i).second;
    ( D  w; ]4 A" d& m; Q' @
  259.       dwProgramState=AP_CONNECT;4 H6 r# W* }( r/ ]* i. J6 F
  260.       return TRUE;
    1 h4 E6 G0 W, D; W" s
  261.     }
    2 u: W% L+ f) X/ ]! H$ h0 J8 c
  262.     if(!bRestartUpdater)
    % g% C0 L+ m! l8 V- B' J
  263.     {
    $ u% V8 m% e- T% k
  264.       int iCurrSize,iFileSize;, d# f0 Y. }. b1 s2 n2 p
  265.       iCurrSize=0;% [/ _& }/ y! F. T
  266.       iFileSize=UpdateList2.size();
    8 k5 {# H+ E! w/ n/ z. O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");5 B. Q/ O8 A1 K+ Q4 \/ R# d4 ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " u4 q+ R$ d7 b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; Q9 b& A7 D4 K  [* N3 ?8 K6 B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 i5 |7 N4 r" T! J. B4 \: U, b
  271.       Fclearf(".\\update.dat");
    ; D! T* ]2 V: r) t
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ) f. p: H5 S( m* V+ [5 x
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * Q6 A; H7 x6 I  J1 C* p
  274.       {
    ' C  G  N$ V! F1 x' E& a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 e! f# L- q1 t5 e+ e9 P$ S
  276.         {
    % J2 n" P- O% o: q8 N
  277.           file=(*p).second;( T% {. q/ X( p/ O# ]- Y$ A) a4 q- A
  278.           sprintf(filename,"(%s)",file->file);
    : r. L. [8 K) W/ m  t- V  C4 g3 H+ P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - E9 I( Z3 r  W9 f% L
  280.           iCurrSize++;
    : t, ^* Y2 M+ l7 {7 I7 d3 b, `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 q1 _6 Z5 L7 x& t
  282.         }
    * C4 P  V$ k. Q3 R5 w. [" C; Y
  283.       }* W* k1 e1 s; n6 Z, ~6 d: t1 e
  284.       unlink(".\\update.txt");
    2 N' E# ]' Q& c% I
  285.       unlink(".\\update.tmp");
    - D$ J) L4 {. C' Q$ F2 c7 V
  286.       Fclearf(".\\checkversion.dat");
    1 Z7 K3 G7 o$ w. U$ k+ d( y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 j9 I# S6 w; {# I  V. s5 u6 x
  288.       if(UpdateLocal.size())
    ' N; h; F$ L% f8 y* U% Z% t
  289.       {# }. Z. E3 P& F; ^
  290.         UpdateLocal.clear();; C/ B; g# f: H0 z( h
  291.       }
    . ~; F$ a: V" K0 X
  292.       if(UpdateFile3.size())
    * ]5 E0 C2 i" L, [3 p$ H' Y
  293.       {
    * I5 R. I" M$ N$ n( j& ~( Y/ h9 p7 @
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% u3 N0 a6 N/ }7 K; n. N- ~0 a
  295.         {7 \9 ^2 j( V( m
  296.           file=(*p).second;
    9 U9 k  B  z& l7 Z2 l! d0 L( r
  297.           free(file);
    # j3 ~( U1 A0 v. z
  298.         }- z) r* T. g. |5 G. H
  299.         UpdateFile3.clear();
    4 B/ t, `  @& X  W2 e; q
  300.         UpdateList3.clear();
    3 F; f3 A% M, F3 \4 w* l
  301.       }4 m6 x$ G- L4 K
  302.       if(UpdateFile2.size())1 Z- H1 _$ R* P: D4 ]+ v
  303.       {
    7 D2 Z6 R0 w+ B' X4 b
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' y6 S: E4 L. C# d6 D# n& d! F- W  W
  305.         {
    " F+ o8 d( y' A* q6 J; T
  306.           file=(*p).second;
    : g. L: L/ u2 S
  307.           free(file);
    3 j, _' W: W  Z! ~
  308.         }7 W! }' w$ d% m+ f* H/ q; x8 z
  309.         UpdateFile2.clear();+ N0 g' t' Y8 K% M7 J0 z
  310.         UpdateList2.clear();$ b3 @% \7 z! x1 I  T) ~
  311.       }
    6 }& p6 B# R+ w. G( H# `
  312.       if(UpdateFile1.size())0 o! a8 z( M# Y9 L6 m( i& o! r& Q
  313.       {# t' @7 d2 R7 }; k) u/ b: f$ T! E' i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / ?; Q8 ]" b3 W3 ]' E) x
  315.         {
    , ~) G9 L; Q1 \' X# q0 g/ C$ x3 [  C7 j
  316.           file=(*p).second;
    , Q6 v; L+ l1 i4 N' r9 Z0 h8 P
  317.           free(file);
    ' s1 A. A0 |. p
  318.         }
    , G' R* z8 L& T. ?; Y' J5 W4 O
  319.         UpdateFile1.clear();
    $ B1 J3 F  h$ W1 W! x' O/ O
  320.         UpdateList1.clear();. R7 D: H$ f( h2 ^: d
  321.       }' ?' w. r! B. i, D" w& \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
      _( H( f6 Z' w
  323.     }0 H/ ~6 ], h, f, Z2 i
  324.   }7 K! J" l) U# ^. x) x- s
  325.   return FALSE;4 i. o7 b( F' h. H
  326. }7 b( B! x' r! d

  327. ( p9 Y/ Z/ z* m9 S1 G
  328. void CRevAppApp::ClearAll(void)# o4 ?8 V7 Q9 N+ M/ _7 u& s
  329. {
    0 }0 i8 i% U+ p$ J' ?) X' f8 ]* d
  330.   LPUPDATEFILE file;# w: B. [9 Q& Q% ^7 g
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: p/ u( p/ J$ `- [6 B

  332. 4 W( |/ H% ?" Y; ~9 A
  333.   if(UpdateLocal.size())
    3 B& p5 {  o. X+ G) C
  334.   {- b8 B( i* h3 O; P0 s
  335.     UpdateLocal.clear();6 N* S* g) p- \
  336.   }
    0 y; K5 |4 Z3 b
  337.   if(UpdateFile3.size()), P4 Z' W% d; j0 h, T, h$ g# C
  338.   {  x1 K( i' R: J7 m. ^2 x
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 d8 c8 z1 `- ?. V5 S$ Y$ h8 G5 k
  340.     {5 o. n. a! V- a" h9 g( Y" I' ~
  341.       file=(*p).second;
    ; `( c4 J) e0 a4 x
  342.       free(file);* V* W7 C0 Z* D+ f& o6 s
  343.     }% V' z, x4 |: u% P1 k0 _& I" d3 m
  344.     UpdateFile3.clear();5 ]* @: A. Q% t$ @) ^7 e
  345.     UpdateList3.clear();
    3 {' w) @; o4 N& L9 N6 Q
  346.   }
    ; E4 p6 m# N7 {( u6 x
  347.   if(UpdateFile2.size())
    0 Z% H6 t" [  S9 s) e( R$ H& m# k. C$ e
  348.   {
    : T/ b  a$ L+ X5 U
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 i. g$ Z9 c8 ~
  350.     {
    ( T. e+ D3 v! Q" f  b) l7 t; G
  351.       file=(*p).second;  }1 |% D5 Y/ R. e# j* O+ L8 @- H
  352.       free(file);
    6 x% d5 |; p' h9 V0 M6 x
  353.     }
    5 R( y$ ?, Y) P. e/ D$ \8 W7 c- D
  354.     UpdateFile2.clear();8 Z) _' e4 {; J! A# k0 ]
  355.     UpdateList2.clear();; C- c# s1 d* y% ?7 P
  356.   }- F0 |* w0 d. S) D8 ~
  357.   if(UpdateFile1.size())
    - D' V8 v1 V- e, j0 u, N
  358.   {" J6 k: g* ^/ O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' ?% v! [- K* b) y- u  y
  360.     {" m: d  K" U$ p% @. H/ s
  361.       file=(*p).second;6 W9 H( _  }3 F7 {& {- R; t
  362.       free(file);
    8 E7 a6 a. r( {& p) V1 y3 N7 z
  363.     }
    # a" ?* F: J' M: n& u* V  j: Y" t
  364.     UpdateFile1.clear();
    + U3 W* F8 Z; _* ^# R) g
  365.     UpdateList1.clear();
    3 C! N" p4 B  j7 `
  366.   }! q' c  Y, T2 |2 Q
  367. }  * n  i5 p# z6 g- G' `" H/ u
  368.   & H/ z: `' E9 L- @% ]+ ^: C* |5 E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # C0 e1 v* h/ u
  370. {
    9 l+ C# W9 A( |1 [- U- [; g0 v+ F
  371.   int c;) N$ Z9 r$ j( e
  372.   LPUPDATEFILE file1,file2;
    - ]4 J9 U. _0 r8 n' b
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + z. L( Z7 X% N) n3 D* A
  374.   std::list<CString>::iterator l;
    3 ~% f! U" [# s! u& c6 v: P
  375. , u6 x* _' x6 h: B# s5 l
  376.   UpdateLocal.clear();
    - j  G) f! D" T: J: q  X+ U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & M" ?4 F. X: w* v+ f  ?) f+ V
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  j* S( B0 w8 P6 K& o: ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + {' D$ p, N; h! B6 ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% m0 k- ^+ T- ?( z8 @% J$ ~/ Y
  381.   if(UpdateFile3.size())
    " l- ]- i& C) w: Z3 f
  382.   {2 p9 P, \; Q5 E: q2 f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 z4 ]9 w3 X  x
  384.     {
    3 [9 G$ U3 t/ P- `
  385.       file2=(LPUPDATEFILE)(*i).second;3 P  \! M/ {1 {+ K/ j5 F* d1 a; O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! a3 o0 L& B6 ~& d) U: x
  387.       {
    ( ?5 g/ ^1 L& ?/ v
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! G4 E0 \& {( q0 W: `
  389.         file1->vers=file2->vers;
    ; Y4 u# m1 u% }' h- B
  390.       }
    : e  D' P; |: I3 K
  391.       else
    ' S! @+ ~( _! c1 ?; r
  392.       {8 E3 q7 Q/ `6 b& f0 Q/ N
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 |$ Y6 @+ d+ b
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 s' }5 @7 V6 k9 B8 M
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! m0 n& G8 V9 k0 z; V7 t
  396.       }
    8 v$ ?- g8 E. o5 d. C" {
  397.     }6 H; s( u0 u" M6 w, o) X. w  K
  398.   }
    6 Z# Y$ \5 Q( @- C
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! a+ S5 i# n8 X1 e6 w8 E: P; ?
  400.   {! p% ^( ?, i8 ]* e5 M
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( O9 P6 Y6 o( k
  402.     {
    " B" }* a) |" ?4 I7 }3 T1 h
  403.       file2=(LPUPDATEFILE)(*i).second;
    / t  m* \* y' g7 j
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* u+ b5 a. w6 J, t- A! o
  405.       {6 o. s) l! P/ J3 S8 {6 H  [" n
  406.         file1=(LPUPDATEFILE)(*p).second;& ^8 L0 R0 t4 i% E7 ~
  407.         if(file1->vers!=file2->vers)
    * s# y6 A" K3 d9 e1 P7 j7 i
  408.         {1 |8 _" l; C, f1 G* ~, ^: b
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 L# k( d/ K3 w
  410.           c++;# i4 w5 k! E& H: h
  411.         }& u7 I8 [5 p% s8 l; {
  412.       }2 `# M# t8 n) z: E
  413.       else+ E( ~9 |; F$ S( V* P
  414.       {
    ! S9 ^0 S9 ?" q: N8 P) `  A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , ?" U0 U' k- g% u7 S* {. ]
  416.         c++;
    % p% D2 m. c% G+ Y
  417.       }  ~! e) Q* }; o1 O! ?, o
  418.     }
    % o% _7 B9 S* ]1 s
  419.   }
    3 j' ?, E! f3 n
  420.   unlink(".\\DownLoad\\update.txt");
    " W# x- @8 b1 W, U% @* X
  421.   if(UpdateLocal.size()) return TRUE;
    / ?% P0 k" o" c9 S$ H" u
  422.   else                   return FALSE;
    . `; s" ]1 [) h3 r$ X" C( X
  423. }" ?; ~( z  j& u
  424. : e/ ~9 S; U3 v% g9 |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    - |& m9 R7 F! v& f
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 B3 ?% c2 B9 B/ J
  427. & [% x- i' J1 v! A$ r
  428. * |, @% @( u& i6 ?
  429. $ h/ X$ e5 Y! B4 [; b  x
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 U* ?: l8 B9 @" e- x2 X: r
  431. {+ m* L+ y: ?( \# t6 k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( m0 ~$ r4 u9 ]
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& Y/ b6 G" t2 M/ S+ `# c
  434.   {
    . f) |6 l3 ^8 \: U6 t
  435.     char szLanguage[50];
    ; O6 M" ~* F7 \
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 G& t/ f/ K3 Q# h8 i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 W+ M) r2 x6 T7 H7 ^5 m5 M
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 U( m- y# J: J% g; L7 a
  439.     else                                   m_iLanguage=ENGLISH;; W$ p; ~, b5 b8 D' p2 x
  440.     char szRegister[100];' k# f1 x; a- i8 r6 K3 U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 N# f4 N6 B! V4 Y" F1 N; T0 C  d. [' v
  442.     strRegsName=szRegister;1 a+ i. S1 n/ _) ?; f
  443.     char szPatchURL[100];/ K( J+ J/ p# ]/ U: N& r! H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) ?- B1 G  Z; R) r
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 c3 G! w5 U/ t8 T
  446.   }! o# p" i& @3 s4 M, m+ W
  447.   else
    2 P1 K. g$ e4 o) N* a
  448.   {
    0 d% z6 j! p; z' D7 l
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . |6 W$ f, J! U: ^) a. ]% `) d2 J" @
  450.     strRegsName=DEFAULT_REG_URL;: {3 F6 q5 _* x5 L% G6 c* d3 ]
  451.   }
    5 I- F% w8 p# u- d' I8 [$ a
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , H. m1 C9 J9 T. w9 T( c
  453.   {
    8 d) L9 C4 k  R
  454.     char szIP[50];
    ; v, O) K0 _' o- Y- ^8 ?
  455.     char szDIR[300];. \. K8 ~6 _4 v
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    . G. A7 n% o2 F, N: D* C
  457.     {# R  O0 Z+ i! r( i+ C0 V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, `* ^3 g# \1 m- g8 ?5 I. \, p6 X
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ) y8 y, b# W0 u
  460.       strHostName=szIP;5 J2 d' p( P: O, P* R) d0 N: R
  461.       strHostPath.Format("/%s",szDIR);
    ) t* I7 ?' g9 E7 w, g# S4 [3 E
  462.     }
    ; Z# a, a: g* K. Y/ C
  463.     else9 C1 U8 F+ k( J" m6 j6 {: F
  464.     {! M1 E4 i0 V2 X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    7 S% v9 ^) q1 Y
  466.       {- }( Z4 V3 k$ c: w
  467.         char szLanguage[50];
    9 t% Q9 f9 [$ {7 I# O+ Z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 D# T) x- _. b! H* W- @( `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 c& |  v! j* `( M: [# T+ P: ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 y; R% g6 x4 L0 X
  471.         else                                   m_iLanguage=ENGLISH;2 ^/ K, _" E  q, L. \
  472.         char szRegister[100];' L1 j. ?; W; R$ J& \
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 `7 W; M  N' W& X! ]
  474.         strRegsName=szRegister;: j$ J8 T, ]6 q
  475.         char szPatchURL[100];
    9 ?: r( d  b7 h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      X& M- {  X' g' a4 O$ M. c8 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " I( |1 y6 W! t# w' E6 ~: H
  478.       }* N; I& y& w4 z4 u! z0 D
  479.       else: ]/ A0 v# n+ S% b' a+ P# |( o8 B
  480.       {
    # s9 P  [$ A% X/ T# r+ X" j( {# m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + ~7 C9 p  ]! e. q$ p6 P
  482.         strRegsName=DEFAULT_REG_URL;& P- Y" R) _* F$ f4 H& w( j
  483.       }
    6 L, b* D7 G! j% t4 Z9 H
  484.     }; Q" h8 c3 B$ g7 B
  485.   }
    1 K( ]; D: `, C( `" y- x* K
  486.   return true;
    % W& \% H: i' k, }7 N& O7 P3 W+ |
  487. }
    $ S. Q! \* c: z- A6 b
  488. + X& u! }2 m9 x+ @
  489. #include ".\ZLib\unzip.h"
    $ i% W  l/ H) o2 l" g  H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # R" ?9 [; I: n: o. m% U  t
  491. /////////////////////////////////////////////////////////////////////////////
    - x8 _! Q  {4 F: x5 ^- q& f+ B" ^) o
  492. // CRevAppApp initialization
    6 R, b5 }- W& D6 p8 Z# u

  493. " ]7 r3 |6 t# s9 C
  494. BOOL CRevAppApp::InitInstance()
    , i  c5 x- @% B) C
  495. {
    3 S' c( s7 A9 T! ]! M: ^5 x
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + t6 P2 G9 l* e1 O& ]% z
  497. ) u0 O1 v/ Z. H9 P+ `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);. w$ ]. A: _& ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    , j3 l$ X9 ^7 T' \6 m
  500.   {. K9 G( b- ?7 t, P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % S! ^4 N: u  v4 I" S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* N9 T& ]& v5 G- q6 J( Q. ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + m/ W0 x. @0 d4 Y  J' h
  504.     {
    4 q: g- s" F9 D# R
  505.       strcpy(szPath,szPathTarget);0 @' D" m, D# T6 M: t7 O% K& v: f
  506.       SetCurrentDirectory(szPath);
    2 C# q# ~! e. o2 `8 w
  507.     }
    : E9 E% u! u1 E. U) J
  508.   }/ v) O- `* K, j4 o; k: Z6 O1 o
  509. #ifdef _DEBUG  \: k8 H5 ^$ `: f2 W7 U
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ K: Z% m7 r7 J" j
  511. #else+ H. B0 S' T+ Q/ n! k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 n3 B! L, {/ p' w# h- E
  513. #endif0 o! L6 B' J/ H0 Q! R6 ^
  514.   {- j$ N* z; `9 _, x  Y; s
  515.     char tempFileName[MAX_PATH];
    4 t( Q: M0 V9 @  Z
  516.     strcpy(tempFileName,szPathSource);
    9 k8 ]2 M& P# Y. \2 C
  517.     tempFileName[strlen(szPathSource)-12]=0;2 ?7 @" h% t" v& a, H' S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    2 j2 P0 [; D3 z+ `
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    & f) ^- d& {/ z- U$ ^* X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 ], E4 O$ R% h9 F7 v
  521.     return TRUE;
    0 m* a/ N8 b  [: W; A
  522.   }
    ! S* N3 h; q( \& m3 O+ t! c
  523.   // Nuke 0118: Delete run.exe% x" r, Z# G* F' N) r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* e7 [" [6 p/ ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) q" L& e' `. h2 k' v1 b" D6 T
  526.   if(!ReadCfgFile("Config.ini"))
    & q9 n! W& {( w' S) p
  527.   {
    6 c, L; P: Q2 V5 @0 F2 f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : M, d9 P4 F/ ^, u3 t5 M& v0 S
  529.     return TRUE;4 A8 K$ d8 a4 d% g2 I! i
  530.   }
      Q" s7 D) g2 `1 K# X$ |/ P
  531.   HANDLE mutex;
    8 W/ B  n. O7 ?/ l, [
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))2 [) h7 I3 i8 @7 g9 k4 `+ h2 z
  533.   {# m+ c7 \7 `5 p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    1 v0 {; C0 X! v8 E' N( b( A
  535.     {& J  j0 \# J; u8 u' \0 P
  536.       CloseHandle(mutex);
    1 B9 ?' \2 j6 x& M+ D5 g$ I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 t* Q* O. l; Z9 [
  538.       return TRUE;. G7 l" H1 x) e
  539.     }
    , C& R5 }! j. ~/ Q! g' Y
  540.   }  
    " g- ?% R7 B; T* y
  541.   CloseHandle(mutex);
    9 I+ I3 Z$ v* O* f3 p: ], n

  542. 3 {$ x1 G9 |- b$ Q- R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& ^* D8 b' n' {; ]
  544. 8 {- H3 h' V! ?  K6 X5 j7 u8 Q
  545.         AfxEnableControlContainer();$ Z) h+ h$ m7 _4 r& Y' p$ h0 u& w! F
  546. 9 ^$ @, K! j2 s! ~2 M; @
  547.   bCanUpdate=FALSE;
    1 t1 Y  y& J9 X: R* E( L) \  n
  548.   dwStartUpSteps=1;
    : S; ]0 x' q4 P
  549.   dwProgramState=AP_NOTHING;
    & L4 H! X' z8 \% g1 p/ @
  550. 0 @' c. Q5 ]/ A5 u
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 i' e8 q! Z1 l9 x' h

  552. 1 Q( D" ^4 n* f5 ~$ q
  553.         // Standard initialization- l+ ~! f7 w0 t$ @& Z$ Q2 K
  554.         // If you are not using these features and wish to reduce the size' o. S) B5 ?+ F* [- J9 N8 S
  555.         //  of your final executable, you should remove from the following! b9 b0 k: W. }* M: x
  556.         //  the specific initialization routines you do not need.
    , ~6 d. A0 u, Z) k2 X7 D

  557. 2 \' Y5 {. n: w7 |
  558. #ifdef _AFXDLL' T5 Y/ U6 ?6 F1 o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 f/ l+ d; t+ ?  E) q5 P/ Q4 W
  560. #else8 F4 _$ ]/ ^- O6 G. G" m
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' K* F1 ]/ q+ Y
  562. #endif/ m" z6 H/ D' ?- o, D2 T& a
  563. 8 m8 |5 c4 T# s2 q( I
  564.   dlg=new CRevAppDlg;! i& ]6 X0 {. c
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ; B3 K1 d3 e3 l! _/ D7 f1 D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / W' \5 o2 x1 O9 Y5 u% R" ?
  567.   m_pMainWnd=dlg;
    8 G6 ^" d: {' s

  568. : o$ P& O0 [# u. p  H' A3 c2 b
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * @; e& R9 \% P& j' m5 y4 X
  570. & D4 k5 q7 k2 O3 s  m2 Q
  571. //  GdiplusStartupInput gdiplusStartupInput;: q. k. k" _; o" f% t
  572. //  ULONG_PTR gdiplusToken;/ m  v6 x* r+ g; `4 K6 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ G1 _) S8 n8 k( f  J* c# z/ l
  574. 7 E5 H- G) u6 w* D
  575. //        CRevAppDlg dlg;
    $ D; b( g$ N* E) G
  576. //        int nResponse = dlg.DoModal();% d% j, V( X8 @0 \  S% q  G
  577. //        if (nResponse == IDOK)
    6 H7 T- I1 S% v
  578. //        {
    ) B. q/ e3 P0 ]
  579. //                // TODO: Place code here to handle when the dialog is; d% z  y* y  ]
  580. //                //  dismissed with OK
    4 ^, x! x" ]# I, f8 ?
  581. //        }
    4 Z. T9 l, o- b  K7 R
  582. //        else if (nResponse == IDCANCEL)
    . t6 Q6 l2 T; f% I3 {
  583. //        {
    . ]7 B& O/ a5 [5 g: F+ w
  584. //                // TODO: Place code here to handle when the dialog is5 @  y( Z! q- q, d. |! N. N: Q: |8 A' J
  585. //                //  dismissed with Cancel* {+ b0 w+ x; l+ z& }" T
  586. //        }5 n, \$ Q3 _6 K  X* X# H1 c; \
  587. 9 k5 t; Q! J  Y% e. j3 h
  588.         // Since the dialog has been closed, return FALSE so that we exit the9 h9 f( z( z  h2 T
  589.         //  application, rather than start the application's message pump.
    " O7 m# _5 S7 p) |! v4 M# W
  590.         return TRUE;. u; K% v3 O% q/ B+ P
  591. }' N  t+ Q# C$ g7 G
  592. 9 L. Y) n2 m- Y1 n* L/ e; d3 g
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  `  |9 L6 `0 n% @  A- \7 k- Q
  594. {' B8 ?5 ?) ~/ ^8 f
  595.   int i;
    ; |6 c4 o( w2 a, v
  596.   char *szRet;) g% |- L6 M9 B. `
  597.   i' a3 ?2 Y* v& m  \0 C
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + \, |2 f- m; t, S: H
  599.   if(sztoken)
    2 J" H' b& b8 B( F. x- P
  600.   {
    4 e+ u5 F$ S6 \' q6 R% I5 Z
  601.     szRet=&sztoken[itoken];  ]% c& ?+ t4 _' w4 B: A
  602.     while(sztoken[itoken])
    / N& f  E0 c/ g# g0 p
  603.     {
    , C7 h  ~$ z+ c6 `9 ]( e
  604.       for(i=0;i<(int)strlen(token);i++)
    + Q- @3 \* y2 ^- u! J& E) k$ L
  605.       {
    4 V4 M) e3 ]/ w% |. K( N1 J
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ! ^% ~3 S! [5 ~
  607.         {1 k( X' ~' P- y2 t! c
  608.           sztoken[itoken++]=0;
    / S7 y' q; g( ^* p; s" [
  609.           sztoken[itoken++]=0;3 ]1 [  ^& }6 ]6 C* ?" P
  610.           return szRet;2 ~9 E' q+ j7 i0 a# b) B+ M3 N) [
  611.         }
    6 z$ r5 i0 `9 c% d; g6 n
  612.       }  T, w, ]+ `1 q4 t7 {& P
  613.       itoken++;  Y& z& |) a, l% ?# ?; ~
  614.     }
    * b1 x0 ]& @2 X% E+ ^: Q( k2 t
  615.   }
    7 h1 a! \. u( [6 H3 }3 V
  616.   return NULL;
    9 N. ~) }6 I  j( t$ E# {
  617. }
    3 g. M! U0 F% L+ |( G
  618. $ W8 r( }/ `. v9 P+ _0 t
  619. void ProcessProc(long Total,long Current)
    5 h, \# O& |6 ]( U1 E' \
  620. {
    - I! ]  d  k3 y) @, H
  621.         MSG msg;
    % }# M& B6 }) D
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . C: w( C* P( x4 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  x1 a+ s8 h% P; I+ H" c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , Q( ~/ o0 j6 ?: e2 q1 J# H) ^) ~
  625.         {! Z, c* U  q5 `: H" O
  626.                 if(!GetMessage(&msg,NULL,0,0))# Q' E' Q$ O5 ?/ w& Z( X, b
  627.                 {
    9 a+ ?5 v- \0 @8 Z. {0 S
  628.                         return;3 [) ^: d' Z. Y- L% o
  629.                 }0 |9 p1 J- Y3 f+ ]0 Q* J6 R: }
  630.                 TranslateMessage(&msg);" F8 K- C( G9 {2 O5 Q
  631.                 DispatchMessage(&msg);8 J+ Z9 @: y4 E
  632.         }       
    6 E6 r6 T) z5 I8 B) I
  633. }
    - b/ X7 U6 d- i

  634. , z# Z3 _  Y% j- X  v/ G
  635. BOOL bFirstChar=TRUE;
    / L+ x* r4 J& d8 k

  636. # ?: G; j. u9 k- g( A$ S8 V+ m
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 q5 `" s! E# w; k, z4 _5 {- N9 A
  638. {
    ( J0 A! K$ |& w: D: t* _: g
  639.         // TODO: Add your specialized code here and/or call the base class
    4 c* |) B! Q' Q- u
  640.   switch(dwProgramState)
    , k4 i* g& K& h* a) T% {
  641.   {
    3 P; t+ ?7 ]# |& \4 I
  642.   case AP_NOTHING:
    ; ]- v: C) f- s
  643.     switch(dwStartUpSteps), S0 S/ D0 e, u  s8 h
  644.     {6 j3 q$ b, @: ~. P
  645.     case 1:
    ( B) j1 a* I" Q7 d' i
  646.       {
    + \. e; m) w& y  p+ w
  647.         int i;( ]9 T/ T% I1 E/ a6 r
  648.         CDC *pCDC=dlg->GetDC();# @- l6 m& S* t5 s+ q* [
  649.         HDC hdcwnd=pCDC->m_hDC;
    # m& D% L( k3 k: \. S8 S
  650. //        Graphics graphics(hdcwnd);. z3 H( K1 |: U% t5 T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 y. w/ U+ Z* V' r6 A& @
  652. //        INT iWidth=bitmap.GetWidth();
    , V! ~7 n' j4 ?2 w
  653. //        INT iHeight=bitmap.GetHeight();5 \7 j3 @9 x6 t7 g& C( J) y# a
  654. //        Color color,colorTemp;, u' v; C. ~/ M8 y- y: B) L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 f  y3 Z; A9 m
  656. //        {
    # N7 d; s  w% f: g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% d% ~0 n5 c4 S& Z2 o
  658. //          {  T/ w0 M- w" P, O$ i" ]# u( X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);4 y# N' }# h" X8 h1 Y9 R
  660. //            colorTemp.SetValue(color.MakeARGB(. }6 v" c% v9 E6 S2 s* y
  661. //              (BYTE)(255*iColumn/iWidth),
    : e* J5 Q7 [+ p$ D5 Z! Y. ~) a
  662. //              color.GetRed(),4 \) ^9 Q# B5 ~* H7 ^4 a/ n/ V! p
  663. //              color.GetGreen(),5 W) A8 Z* M8 l* y
  664. //              color.GetBlue()));
    # v% G" [$ j' G2 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ R% h& f( d2 b9 |
  666. //          }; A" k: A' [4 W  _) p
  667. //        }
    ' ?2 T" s$ _  ~/ x+ g
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 G& a+ y/ O& n6 a: x% A9 h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- o* O' \7 ~' R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");  N) \5 K$ W4 |/ j8 A2 g, _
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 `& ^& J3 k* R. z' h, d
  672.         for(i=0;i<240;i+=8)
    1 Y6 T" ^5 f+ z3 u9 K7 H7 G
  673.         {
    7 ?0 t& w9 F# R3 i/ y2 L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; V2 f' Y; D# r7 e; K! U
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. o0 P+ c6 e8 W" \$ |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. _1 G7 f, T1 t/ I
  677.           Sleep(33);4 Q' m* n5 R# z$ t4 E3 b" f
  678.         }# Q' S% _" O! \9 j+ }- H
  679.         Sleep(1000);
    8 X5 a7 }6 W) _7 O3 J
  680.         for(i=240;i>0;i-=8)
    3 ]( s% N3 f8 R
  681.         {# s$ F2 c: l3 I" e7 T% [1 ~
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# b% x2 z4 `3 {+ O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 E& s1 b+ D+ N- O3 @& ^# x) Y: Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + [% ]+ K, Y: v
  685.           Sleep(33);
    4 |2 \9 j: H- ]
  686.         }, e3 I0 \  R$ X
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);' @, f2 w% t, R/ ?
  688.         dlg->ReleaseDC(pCDC);
    1 A. z  F1 K, p: @5 B
  689.         DeleteDC(hdctar);. y) }* |* D. n' C. o
  690.         DeleteDC(hdcsrc);
    ( |1 ]* f) o  m7 v
  691.         DeleteDC(hdcorg);1 M( z! }3 H/ R& b: Y' e+ T
  692.       }
    + X( e  [: v! L" d3 L! O0 V1 m
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 P; J( }) `% q) D) T$ ~4 n6 L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # Z  E, ~  ^" x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, Y2 w! S2 a, X
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 \4 i! a; O! Y8 }
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 G5 i9 l' _  e
  698.       if(!Dn.Connected())
    - @9 V, y* G) v
  699.       {
    # C* j. f4 o: F3 Q# v$ M! U
  700.         dwTotalFiles=1;
    , I6 S7 s. |7 K$ s8 Y
  701.         dwDownLoaded=0;% X% e# s9 t- [
  702.         bSilentStep=TRUE;
    ; B. g' X- @) ]; ?
  703.         bCompressed=FALSE;
    # B, e- w. n" H4 F8 `4 _3 h1 j" S
  704.         strExtLocal.Empty();- K7 N# V$ q  q
  705.         strFullName="readme.txt";9 |( a- N6 }2 |+ O7 g
  706.         dwProgramState=AP_CONNECT;% j& q# z! U7 P& u' r1 R7 E
  707.       }) Z, T0 I" L4 a1 ]/ o. }% L3 e$ U5 ^
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 L- o) f+ Y$ [
  709.       dwStartUpSteps=2;* D7 Z$ M5 ]5 y: D' N' x* O
  710.       break;
    6 ]. ?! G# P4 ]5 F. P
  711.     case 2:
    5 U) g0 {: l! f
  712.       {5 _7 q& Q7 j/ X0 z) R; x
  713.         int iEOF;0 R3 p; i& [  N  H% K: w: G  j1 j: M# P
  714.         FILE *fp;% q( @: e# k7 E
  715.         char szString[512];: H. q0 h- d0 P* y! F$ X& v6 ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    . [- v& l! K, m( U  h9 }9 S# Z
  717.         if(fp)
    $ }( K1 o1 y/ z4 f2 e+ ?
  718.         {' y2 [% X9 `- `
  719.           do
    + h4 X' ?, c; x) s. L$ ~
  720.           {
    7 o! B, \) A& u2 m
  721.             iEOF=fscanf(fp,"%s",szString);( V3 }$ M4 ~2 Q1 O( p. c
  722.             if(strlen(szString))
    ( w0 D$ i6 p7 \
  723.             {3 |( y( b/ g3 ~
  724.               if(bFirstChar)4 R1 ^& Z3 J' x9 P. q6 V) L
  725.               {+ x" A8 f+ C4 g. G
  726.                 bFirstChar=FALSE;
    1 K% R* a  R9 d+ i
  727.                 bConnectIsBig5=FALSE;
    & y6 Q& }) `( x& H5 T% c5 W8 [- Z9 G/ @
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;! w" O$ l  Q1 f& {
  729.               }
    : N# x0 c: `# L7 K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / d/ x9 n( S! Y( f5 x- x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    $ t1 h+ O& Q3 f
  732.               dlg->m_ListText.AddString(szString);# W* |9 l/ a: w% k1 v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( V+ q6 ?" {# x3 |
  734.               *szString=0;, F/ s; n5 f, T1 _2 d
  735.             }5 S' ^9 I3 b8 j# G" w
  736.           } while(iEOF!=EOF);- t9 D1 T9 Z: u+ }6 Q
  737.           fclose(fp);3 ^$ \  y9 Q! g' v/ ^+ O' t9 x. V
  738.           unlink(".\\DownLoad\\readme.txt");
    # g4 C" x3 H& I$ _- e  Q- f
  739.           dwStartUpSteps=3;
    6 A, Z% f3 w# B6 M% h
  740.         }5 o  R4 U; Q5 S. P5 S5 W) Q
  741.       }1 a  W# B. e/ s' N) ^- [1 U
  742.       break;+ ?) G1 Z* T8 C2 w
  743.     case 3:
    + [5 y! M4 {7 Q
  744.       if(!Dn.Connected())- @& S/ P9 G5 s2 d) z; k4 K
  745.       {* ]# s1 O- I& g& K" Q1 _% R" k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 s% P* w1 ?2 {1 H/ I) {
  747.         dwTotalFiles=1;
    + s. |3 f+ X  z1 r  r) {
  748.         dwDownLoaded=0;
    0 t4 i0 x2 [  s  a9 j) N
  749.         bSilentStep=TRUE;
    ' l! K+ ?% c0 a  ^" U5 b5 |9 b
  750.         bCompressed=FALSE;. x) Z6 x6 g# ?
  751.         strExtLocal.Empty();
    : f3 {0 R  o6 {/ O( C; Q; v; v* l
  752.         strFullName="checkversion.txt";5 u+ }$ R3 Y3 _) x" I
  753.         dwProgramState=AP_CONNECT;
    - Q7 \. M9 z% W( z& S# [$ j5 g/ r
  754.       }
    0 ^* L# y* k+ j, L5 t
  755.       dwStartUpSteps=4;8 E+ z6 r; X# g) n
  756.       break;8 j4 `$ {5 W; y" r; [4 v
  757.     case 4:
    , g) ?7 c) @3 w
  758.       {0 J! @/ ^0 H; ^# O5 D
  759.         FILE *fp;
    , h( E: R, u; b$ G( m3 u
  760.         char szString1[128];# p. w# p* S* Z. ]% `7 g2 O4 T
  761.         char szString2[128];
    , b7 ~% k% L, _1 b% n& B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 S# N2 u2 q) |' v
  763.         if(fp)
    7 h' d9 g+ a6 @" M; \
  764.         {
    4 h4 P1 A# h# n
  765.           fscanf(fp,"%s",szString1);* M8 ]+ I. O7 k& K; ?
  766.           fclose(fp);: t% j! ]  f( E* `
  767.           fCheckVersion=atof(szString1);
    ; z4 z5 T( Y! d/ H# l
  768.           fp=fopen(".\\checkversion.dat","r");
    ) j: {( w% V' M4 z2 `: A
  769.           if(fp); w5 }" m7 }: Z4 M3 L
  770.           {9 w- V, `- }+ B
  771.             fscanf(fp,"%s",szString2);
    ( }5 b& p) y6 K; I. ~0 H9 H
  772.             fclose(fp);' \; e  d: E9 s8 b
  773.             if(atof(szString1)!=atof(szString2)): v( m( @- j( `# Q4 w
  774.             {
    % J- C# m2 S3 n: g; Q, ~8 }/ i4 v
  775.               if(!Dn.Connected())9 |# i* |; u5 K; s* a. R; i
  776.               {
    : A  i5 R9 H% h$ ?8 s! J
  777.                 bFirstUpdate=TRUE;- C& h! p) T- w& |$ I; E4 ?
  778.                 dwTotalFiles=1;
    # ]( J9 T. w+ R
  779.                 dwDownLoaded=0;5 Q6 _) q! S' A% o
  780.                 bSilentStep=FALSE;
    & U/ N- B8 t! ~- P" z
  781.                 bCompressed=TRUE;
    " A. H. [5 c! L
  782.                 strExtLocal=".\\DownLoad\";
    , @4 p& e4 I0 H* z: Q! ]
  783.                 strFullName="update.txt";5 t% x) E# I0 A8 v) y8 e7 v
  784.                 dwProgramState=AP_CONNECT;6 |9 q# [% ~. j8 P
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& f% L- ]* M0 \* q+ F
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , u% I( |, ~! O* N) l8 J5 g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");. W$ W1 I0 Y% H# W6 V; u3 L' N% D: F

  788. 7 C% O6 E$ Q, n! A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 i% S+ y' M1 o
  790.                 unlink(".\\DownLoad\\checkversion.txt");  _7 A0 B' A0 K5 c3 [5 H
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ W( D( c  v8 D- g- ?0 n
  792.                 {7 Z& o  Z" I1 B$ D6 [  F) l1 ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ' w& k$ l' [  X  @2 O+ ]: f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    3 _! U4 K; Y) |# M' Y- @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' n. d% W) }2 W: m  k  M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, p' Z3 p, R5 D% k# o+ J) U
  797. . R4 A- y9 Y7 }- j" F2 f3 p; N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 y9 R- e3 E4 t5 b' |
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / _0 c- V# s& J# \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 w, m: Z+ L; E
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; a0 V6 r  A2 k
  802.                 }9 d) d. o8 ]0 s- c1 Z# v
  803.                 dwStartUpSteps=5;+ N! Z: b3 Z; a2 [& S+ Y' F' Q6 `
  804.               }
    # |4 \5 q$ T4 r% R; \
  805.             }3 ]$ f3 P# i4 N5 r
  806.             else" Y5 g% }- [  R
  807.             {
    8 R+ ?6 h" R" `2 L: [& }; {
  808.               unlink(".\\DownLoad\\checkversion.txt");: F# o4 g' `: `$ G
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " i9 m) A- Y- W3 z# t% O
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / H- G2 @" [7 ^1 c
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ v- w$ n0 u8 s; b

  812. + U! c/ R/ F8 @1 Q2 O6 k/ P. L* u- E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' n  t5 G. f: O  t$ `1 |/ v; ~
  814.               dwStartUpSteps=99;8 I2 ?- @& e0 K6 ?4 o' f* `
  815.               bFinishUpdated=TRUE;
    ! }( n8 w+ V3 C& B5 W& |
  816.               bCanUpdate=TRUE;
    ; w) ]/ `1 k& m
  817.             }4 K% C; b. G+ Z, }" \2 l0 m
  818.           }
    # ]& I, M0 |0 O3 Z# R# M8 R: F
  819.           else
    $ `4 X( k, o7 z$ [( h! x
  820.           {: s+ t! X5 I& x7 F
  821.             if(!Dn.Connected())
    3 U- `+ {7 U0 i# u5 }1 M
  822.             {
    # H& o% g5 F3 Q
  823.               bFirstUpdate=TRUE;6 @* D* z; W6 l- v
  824.               dwTotalFiles=1;
    : A) u$ o2 Y' k; d$ k& @( i
  825.               dwDownLoaded=0;1 R9 c" [" F( C5 s
  826.               bSilentStep=FALSE;" X# f$ |! P7 J5 @" v& u! c
  827.               bCompressed=TRUE;
    1 x# |" {6 F8 y* L9 ~
  828.               strExtLocal=".\\DownLoad\";+ l4 j) |9 ^; \" F
  829.               strFullName="update.txt";
    3 u+ r3 `- X. I/ Q, D
  830.               dwProgramState=AP_CONNECT;
    : @& j# X  \0 r/ _
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 d, C# z- ]. S
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 D6 L) U7 j- K8 ^! O& m8 G
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : P+ n$ J6 ^" Y+ a% D1 B6 T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% G$ H! k/ t) _9 f5 |- U# Y
  835.               unlink(".\\DownLoad\\checkversion.txt");
    8 [7 |/ G. Q0 N8 N. C% L0 e% P1 e
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# _; N( i* ?3 D& B( O- M
  837.               {
    % J! G( g$ p9 D5 Z( s
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");! ^+ o3 N9 b/ i, c! Z6 R/ s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ T, q% L9 U+ L% V
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, p$ a: G% o) U1 V  q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 B% j' H+ k( J+ v# \
  842.                
    4 ]$ Y' z3 j" |0 v  ]5 V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " ?$ D5 s3 \* _0 e3 B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ h; Q6 l4 X9 J/ {1 J0 n, X
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");. l* F# |+ f% v
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 S3 j9 @  o' t
  847.               }: A% ^8 d- Y; X
  848.               dwStartUpSteps=5;
    : ]  c" q$ N$ d: b& ~
  849.             }
    $ |) D. a: C1 K
  850.           }
    & I$ C4 |$ t+ _
  851.         }8 U- t& Z) K3 o) m6 m
  852.         else, J, b; v& W+ ~2 p: t
  853.         {. J, s0 [' g6 K; `1 T6 f+ ~9 X
  854.           dwStartUpSteps=3;
    * H$ Y3 W5 x( K$ V
  855.         }
    7 ?: [! t/ a3 g" D$ O+ Y, ~* ~
  856.       }) K, k7 b0 X, ^+ y$ n% u. }
  857.       break;% G! U5 e8 ]$ \3 \$ _/ W
  858.     case 5:
    , f) d" {% s2 ^5 G& Q- _
  859.       {
    & k: m6 j4 L2 c3 B; h# M
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    " u) H. h& W9 Z; K. b% }* q
  861.         {$ i  n" G" |0 F
  862.           int opt_overwrite=1;& m6 w( s! Z% V( Q( V& K+ j
  863.           int opt_do_extract_withoutpath=0;; ^. m3 Z/ `" {; a5 M& J2 @) s+ N
  864.           unzFile uf=NULL;, n0 C1 t! R7 r6 r# I6 f4 L9 q

  865. ( z3 }" _+ v* N
  866.           uf=unzOpen("Wsa.zip");* t/ X) s: `! M) I) g& Q: o* K; Q/ P
  867.           if(uf)
    5 a9 X9 T, k8 M$ B; A( h) |' k' ^
  868.           {  y# k  K5 ~* P
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);4 |" m% T( m. \0 A% T
  870.             unzClose(uf);) D9 P$ K/ c5 U; p7 L* i3 W% e: R
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");8 a0 M( U# e) D, v& v& K- L
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    8 l/ K0 i4 f0 h9 x. y1 u8 @
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    9 y  C1 Z- b$ n
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 G$ B+ a. b1 E! [5 h9 c) \
  875.           }
    6 D* E1 i/ R- Q. K) o0 E6 v' t
  876.           DeleteFile("Wsa.zip" );. @( ]# R. X$ a$ h
  877.         }- G- e0 ?9 k+ u$ _- q% S% ^
  878. ( Q+ Y$ T( `8 j8 }9 T( w# q, u
  879.         if(CheckLocalVersion())
    2 a7 [! z4 a# k( Q" }3 F8 c
  880.         {
    : ~6 O8 f2 L8 g7 |5 b
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");; C( i  K' [5 b) u$ N
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");# ^4 J8 S: [$ V3 d1 ]7 d* i; e
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");9 `0 V. r4 z: }( Z0 Q$ \  x
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ^. k. B  U0 P( ~
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    & }. U( O( L& M9 _; D" t! k, |
  886.           dwStartUpSteps=99;* i$ |; C6 Q1 Q4 \0 I1 e* K: t& L
  887.         }# |, U; Y' Y! }% R3 ?
  888.         else3 h5 @$ e5 l* `6 e- t: G
  889.         {
      K! K) D7 w* u& `8 ]3 B
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 s+ Y' P6 a$ W: B& Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 y0 u' t! ?8 m9 ?
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 H0 [. O. }: ?/ A

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

8 e3 i9 o3 u  S

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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