CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
2 }; L6 Y  q0 g; p
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! ^( k- C, m5 I+ M- l5 w' C
  2. //
    4 m! e" N; Z$ M$ r% g& }

  3. 0 a; }8 q! p4 b: |
  4. #include "stdafx.h"4 H0 O. y9 Z; r3 }. D+ J
  5. + R8 q2 |6 R% z3 c+ \
  6. //#define UNICODE+ L7 W1 |$ Q8 {+ E) P
  7. //#include <gdiplus.h>
    ; P+ V1 h. L6 v* G4 B6 {1 v
  8. //using namespace Gdiplus;
    ! ?) ~% j( e" k6 J0 u' X* [
  9. , a: r$ w! I3 U" m9 \
  10. #include "RevApp.h"
      i# B8 D4 s0 @4 \: Y
  11. #include "RevAppDlg.h"0 T/ Y  {& E3 ?- H1 o8 K
  12. 9 e  x1 f5 K/ Y. y" l% m. }
  13. #pragma warning(disable:4786)7 Q' a) A6 a; ?
  14. #include <map>" u3 ~/ t1 ]" a: `: j8 d: w6 Y
  15. #include <list>
    ( C. B/ k6 {  L9 _  o. I  z( Q
  16. #include <direct.h>* ~, K6 f+ _; O( d/ X
  17. " s$ e  y3 I/ X0 x
  18. #ifdef _DEBUG
    7 {# l; T: @4 Q1 _
  19. #define new DEBUG_NEW2 M( y+ d+ s# S' ?* d
  20. #undef THIS_FILE
    3 k0 c2 I- |9 u( k; ?% ^
  21. static char THIS_FILE[] = __FILE__;7 j0 m3 G5 o8 \% u4 e4 B
  22. #endif+ @, r; m! w7 Q+ ~4 @1 Q" V
  23. #include "SkinResDef.h"+ a( E# H( W* k; X# _6 T
  24. #include "ChangeBG.h"
    / @; Z: |/ I0 c" d4 X
  25. #include "AFXINET.H"
    8 ]0 _' b0 b/ h, B

  26. 5 W/ A, g" j$ i
  27. #define TRADITIONAL_CHINESE 0
    $ e( J+ u7 `- v7 K
  28. #define SIMPLIFY_CHINESE 1: J# s# I" y! q& M' Z+ z1 y% j
  29. #define ENGLISH 24 {# G. J* {% k' q; E* M
  30. int m_iLanguage = ENGLISH;
    1 B& s& B, M. {0 `2 @* q& e
  31. /////////////////////////////////////////////////////////////////////////////
    % Y4 B3 m! F. f) M9 E
  32. // CRevAppApp6 F9 A6 ]& e$ d/ t; m
  33. % U& D4 p$ V& V# P; s" l
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# K. m7 S: t6 `
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & g# x7 v7 Y/ ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ' Q, i6 I. j+ r2 V3 ~3 I+ s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; G. s8 o$ o' @. Y: s
  38.         //}}AFX_MSG6 `! V2 [8 d2 Z: ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)2 L$ R! F) x" b* _8 m- a
  40. END_MESSAGE_MAP()4 T* m% ~, s) I8 ~4 `+ E
  41. 8 B3 W" L1 M8 b* v
  42. /////////////////////////////////////////////////////////////////////////////* a! t8 ]; h6 F/ {
  43. // CRevAppApp construction
    3 ?# S) R# J/ O$ M0 z- D8 h
  44. ( X; X2 [3 y8 y/ V1 s
  45. CRevAppApp::CRevAppApp()8 q! Z+ W# P' A% @$ V' g4 Z
  46. {
    1 Q& Z7 C2 e1 K6 \  i% u
  47.         // TODO: add construction code here,& i  C# k* l. P
  48.         // Place all significant initialization in InitInstance; a( `1 M8 m% h; u
  49.   bDisplayIsBig5=FALSE;) ?- `5 g7 S8 F+ @0 }4 J0 S
  50.   bRestartUpdater=FALSE;4 j/ v% r2 m, e* s& s, ?/ w
  51.   bFinishUpdated=FALSE;1 z: ]0 G0 O7 v$ ]0 |' o
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      m- A* x, E' T# e
  53.   InitChangeDataBig52GBKS();
    . W! }/ F, o- T& Q0 o0 ?
  54.   InitChangeDataGBKS2Big5();
    & W( Q# S8 I: w2 r6 u. u) ]
  55.         //
    - }6 D! o5 u, v' J- }
  56.         bClickRunExe = FALSE;) N+ W. f# l( m5 \8 D0 [
  57.         //6 y& j+ |( N( R( T% A9 r$ ]& z
  58. }/ e3 i: z$ L2 k9 U2 t2 h" w  ]

  59. / s# v& X4 Z2 s. J1 G$ t
  60. CRevAppApp::~CRevAppApp()9 B4 C. H6 j2 D
  61. {
    * N, C5 \7 l! j. {, C! ^
  62.         // TODO: add construction code here,
      r& s: b$ u& m& @# v
  63.         // Place all significant initialization in InitInstance
    , i" J: v; R$ ~3 M* o8 U3 d( Z
  64.   EndChangeData();
    . N$ k2 ]4 ?  |: d
  65. }0 _! Z& s5 }7 U8 f
  66. 4 h! }* T0 _- ~5 t5 Q/ x
  67. /////////////////////////////////////////////////////////////////////////////
    5 g) L; u; z. w% r/ g. B
  68. // The one and only CRevAppApp object; M/ o6 M1 D$ E5 y; ?

  69. 5 ^) b( E) R$ w
  70. CRevAppApp theApp;
    8 q2 N: O. d5 z( }
  71. ' t( f# c2 _6 w8 q1 _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)5 T- ^  b2 i# s# N+ ~+ @
  73. {
    7 ?; G& i  D: r+ ?' p' ?
  74.   int iEOF=0;/ D8 `4 E8 `! k1 {. U
  75.   char szTempName[MAX_PATH];
    + I/ K3 S* W% k: O- f6 W; v* g& ]' j
  76.   *szFileName=0;
    6 K: ]' }7 e5 Y! ~: k; Z* q9 b
  77.   iEOF=fscanf(fp,"%s",szTempName);- u  ]% j/ K% h7 L+ C2 N! W4 Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    " R) r2 P! J, _/ N% M! }
  79.   {5 j* n) L& {/ S; D  q& C- c
  80.     strcpy(szFileName,&szTempName[1]);
      J3 T& c, O: j0 K* _2 R: M
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)# n- s* M. O1 |: S
  82.     {" _; [& S9 X) Q  D
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " U  z( ^# u+ P5 w6 s+ n" ^
  84.       strcat(szFileName," ");+ b* z1 D* z+ g* S9 v6 U
  85.       strcat(szFileName,szTempName);* f2 T  T/ J% Q4 p7 @
  86.     }
    2 J2 A* S! z: Q" I, V
  87.     if(strlen(szFileName)>=1)# }8 A" j$ U$ o' s8 F2 F' f/ i
  88.     {
    # d( |1 N, t( a# J+ U/ g
  89.       szFileName[strlen(szFileName)-1]=0;  b# I  M' T: \9 b
  90.     }
    ; q9 M. P: S/ K7 C0 y
  91.   }" t) D' s. U* n- T" L* }
  92.   return szFileName;
    * k& L; g  b2 c+ A8 H( O
  93. }
    3 A$ g; O, k1 V8 E: ]( v

  94. 2 z/ G5 M; ~# i: A% a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    3 U; y  ]: f3 O; E, ~; x, C
  96. {3 t& D. Y) \3 B/ y; M
  97.   FILE *fp;2 y' e# m  S5 a3 E/ m
  98.   char *key=NULL;& W" l; a0 O* ^+ {% n
  99.   char version[MAX_PATH];# j# a; G1 G- M: @! _1 A
  100.   LPUPDATEFILE file,olds;! v! T. d, K. `  O5 O6 r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 Q4 B! y  g0 {" c2 }2 g" Q

  102. ! q% J* y- W5 w2 G
  103.   UpdateList.clear();
    . K& L/ \& h0 c3 ]% U- H
  104.   UpdateFile.clear();5 A1 q9 z( U( x7 Z' {! W$ e2 V5 g
  105.   if(GetFileAttributes(filename)==-1) return false;
    : y) K3 D& Z) m' b, @
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % Y! a3 M4 m! B! Y8 @
  107.   fscanf(fp,"%s",version);
    3 t) ~4 J& V# {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 y4 s- j$ [$ v7 f! ^
  109.   while(fscanf(fp,"%s",version)!=EOF)2 I  O/ U. @0 m0 U' u
  110.   {6 i' o! C) q4 V' K* b, E* @. O6 v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ u, W- b. i1 \, i
  112.     fscanf(fp,"%s",file->path);& ~+ I7 J) H2 z* ]1 R
  113.     ReadFileNames(fp,file->file);
    * Y) Z" T$ E/ @% @# I
  114.     strcpy(file->full,".");5 [) A' d% Z/ s8 @  J
  115.     strcat(file->full,file->path);3 m, t3 \% c7 k8 }+ U- i
  116.     strcat(file->full,file->file);
    & [0 E1 `  R4 h
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - `5 ^3 k0 A) E2 Q+ L: Z6 w
  118.     {6 p0 s7 \9 M9 U$ f, V
  119.       file->vers=(float)atof(version);
    % w$ g) k! [7 k: F. f9 _: M
  120.       UpdateList.push_back(file->full);
    8 N. f' v+ E: l% X( ^& D1 a1 T9 b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));8 T- c& R8 f5 Z
  122.     }: f5 A' s! V+ D6 Q  K0 T
  123.     else0 T6 x, Y% O2 A4 u4 L' Q# l7 A2 w
  124.     {' I4 E; B6 B( M+ D: ~
  125.       olds=(*p).second;; a( u; U* B4 O+ N
  126.       if(olds->vers<(float)atof(version))  a3 Z7 I' r! M+ @' @
  127.       {
    + i/ p' i$ R5 R* d. {2 h! j
  128.         olds->vers=(float)atof(version);9 o, g2 S7 ^2 ^* R
  129.       }
    1 h7 x0 t3 A3 c* X7 X) g( s" c
  130.       free(file);
    ) f( \' E1 \2 v5 e
  131.     }
    ( L0 l4 @8 W7 Z5 {! D$ x
  132.   }3 P8 Q. ~8 ?' J
  133.   fclose(fp);
    3 v9 y9 L: U' x
  134.   return true;( U3 H6 Q( _5 V
  135. }2 Q. U8 J: b5 g" t: G, f* ?  w7 R

  136. 0 }8 O: {% y' s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), _, f$ n" R+ o( f; a) j& ^) v
  138. {1 q1 Q% P; A7 z; j7 i( w
  139.   TCHAR  szFull[MAX_PATH];
    8 }' p) J/ w# n# L  d
  140.   TCHAR *token,*inter;
    ( l$ y8 \+ @8 o6 V
  141.   *szPath=0;
    , P; ~% w/ _, z8 M' x# j
  142.   strcpy(szFull,szFullPath);, a+ }5 U% X% j" g
  143.   token=strtok(szFull,"\\/");
    , E, `7 l8 e. k" ]7 L4 V4 s, \! b
  144.   inter=token;  G. A6 ?- d4 I) J9 \9 Z
  145.   while(token=strtok(NULL,"\\/"))& x& v" k0 @- C7 ~' h
  146.   {
    ) W7 F) C! j2 F8 s0 j
  147.     strcat(szPath,inter);
    / R) o% x2 Q! Z5 \
  148.     strcat(szPath,"\");7 O. z+ i9 Y( B9 n9 z! }
  149.     inter=token;
    7 n" L: O# b- L  w) U$ R) W+ u
  150.   }# ~& w7 z+ W' H
  151.   return strlen(szPath);
    6 h: M' F+ t. W( q9 u$ T
  152. }
    + g0 {0 J% \4 o. U

  153. 3 n7 m0 L1 V, K9 N8 w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 h+ e- b. n+ L! t. b
  155. {
    / t4 n2 Y. U' c8 o' ]
  156.   DWORD attrib=GetFileAttributes(Target);, V* F, ^; \% v
  157.   if(attrib!=-1)- N/ e% u& o$ F4 _1 D) C( L: f
  158.   {- M  t' L# Q: H, s5 D6 U0 s
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); ^" w  Z# U3 e. U- Z5 Q
  160.     {
    9 ?- @4 ^' F& l* G
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);- P0 f" Z; N  C) d; X4 Z% ~
  162.       SetFileAttributes(Target,attrib);! q' O& \  S& ?  u* F/ _0 E
  163.     }
    " e# j: O* l- N0 t
  164.   }+ @- {: y2 Q  H5 _0 R
  165.   CopyFile(Source,Target,Erase);/ U6 U  b4 i+ T
  166. }) Z2 g0 W! F# ^1 }5 h5 c: j$ o# n& R
  167. : D5 _! T! b# O/ s7 h& g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)( }. _: H  L. s; ^" [
  169. {
    4 ?3 _  T! B* x( @, ]
  170.      FILE *fp;) ]1 f$ `2 w- [# x
  171.      char  szBuffer[8192];
    # ?  t$ Z8 ?6 {! @1 R1 Q# }, f
  172.   va_list  argptr;
    ! Q1 {. [8 e! L: c

  173. 1 E9 k! J9 U" `" Y6 ?, v! d$ P" q% W
  174.         va_start(argptr,message);% p. a+ ]1 N+ k$ t' }
  175.         vsprintf(szBuffer,message,argptr);
    : {. y; Z/ _3 `  g6 I' k# U
  176.         va_end(argptr);
    + C! d' ~' \8 Z- A
  177.   fp=fopen(FileName,"a");
    4 @* u: Y, w: _( b
  178.   if(fp)
    " e9 ]) i8 R$ H$ L
  179.   {
    7 C1 f4 l# q" k- r  H4 K$ I2 \' n
  180.     fprintf(fp,szBuffer);
    , U5 c' H$ D6 v+ j4 N- u: o6 Y
  181.     fclose(fp);
    + P+ V9 t. s7 R$ i7 S
  182.           _flushall();( s) _! x5 ]7 F+ Z- I; g+ H
  183.   }
    9 j$ s5 I! ]" r) ^7 i. N
  184. }
    ( ]& V" n, ~* S' |

  185. ( |! `9 K' J$ D
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 W5 U! p0 g  s. o( _
  187. {
    & T, p  X) h; J& K+ L" H: ^) |
  188.      FILE *fp;8 s' G9 L8 O1 r0 f/ c
  189.     DWORD  attrib;! D0 T" X$ T) C) w
  190.   attrib=GetFileAttributes(FileName);
    3 ~. _8 E/ _. D& K/ c
  191.   if(attrib!=-1)- H- Z( T$ i0 F1 H; I" b
  192.   {
    6 [% }9 }& K) j7 }4 |6 `6 w
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    6 v) F1 C! ]1 d! Z! P
  194.     if(!SetFileAttributes(FileName,attrib))
    + l% p7 g- i/ O, E
  195.     {$ p6 M: {! K* a& q  p0 e+ c  n5 m
  196.       return FALSE;
    % z5 Z9 j' f3 q* w$ O, {! M1 ~3 e
  197.     }
    7 @; U& b: t+ @/ y6 \7 b
  198.   }6 y' |+ g, V" z7 B! I
  199.   fp=fopen(FileName,"wb");
    6 G# T) J# E) @: V, X7 n
  200.   if(fp)
    " R7 W) G! d; M& m6 I
  201.   {
    & k+ a5 S- ^& g: _& [
  202.     fclose(fp);4 L1 W& p: y" e+ n8 r
  203.   }/ c  @$ E+ ?; b4 m: ^, Z; |* b8 c8 _, g
  204.   return TRUE;
    6 I9 g4 v' r, A2 P& ~! D4 y/ a
  205. }# e- f9 W/ K: R8 N

  206. . b9 a0 ?% V5 O6 u( r
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# i, _: [1 o' s8 Y  n+ b2 K' u
  208. {
    5 _6 P  K% q: d
  209.   char filename[MAX_PATH];" T  H1 W- d  r0 J! Z+ R, s
  210.   LPUPDATEFILE file,olds;8 y5 V1 y+ R- s: }
  211.   std::map<int,CString>::iterator i;
    ' ~/ Z4 J$ ?2 {+ b1 @& J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! S% J! U4 D# W5 I+ T
  213.   std::list<CString>::iterator l;
    : F8 W  M+ S4 \6 D

  214. , Q  k# T# s! Z; {" G
  215.   if(bFirstUpdate)- ]$ N" }2 P! A& B  G) V$ N
  216.   {7 d* B- u: k4 }
  217.     dwCurrFile=0;
    # t% E) l1 Y# o* X
  218.     bFirstUpdate=FALSE;  O: v( E" H4 W3 d( D' k5 U
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 g+ [5 U& S5 r* D* Y
  220.     {, O/ i3 X6 ^( I5 r$ W3 j
  221.       dwTotalFiles=UpdateLocal.size();7 r) g( F4 Q$ y% e2 V
  222.       dwDownLoaded=0;
    # E4 I" g% J) o# k9 d. z) x
  223.       bSilentStep=FALSE;" T) H( I2 }% U5 n
  224.       bCompressed=TRUE;
    8 f, ]1 j& W$ G) V% z
  225.       strExtLocal.Empty();
    : k: t: N* O* |$ Q6 k) O
  226.       strFullName=(*i).second;
    8 d) K1 v$ O! p" A# Y
  227.       dwProgramState=AP_CONNECT;  @/ p8 Q6 g# {+ M% J# {
  228.       return TRUE;( E9 p2 \& |3 _! O: A
  229.     }9 J$ E! s9 }$ N1 f. p! @
  230.   }1 `, ^' N2 E/ p' l- x7 D6 q- W5 p
  231.   else if(bRestartUpdater==FALSE)7 _; a$ }9 C) Q9 P
  232.   {; }8 \% }5 F/ s* f- T
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 t  F2 y! G; F* d4 M9 p5 f7 a
  234.     {
    0 n! }- a7 v1 t$ b
  235.       file=(*p).second;5 d4 K$ d* }3 F' m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())% j8 g8 X9 X9 g% a
  237.       {5 y: z! o" m. S9 g9 l& b+ e0 q: p1 R
  238.         olds=(*p).second;* K* g- K) E. j5 y
  239.         olds->vers=file->vers;
    5 F+ v8 M2 l6 t3 S/ B
  240.       }. }1 z5 ~" `( A, D! Z1 o
  241.       else
    " w1 L" U7 V5 I6 T$ H
  242.       {, h& [! H5 @* V2 E. w: y7 w$ E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: C, ^5 N4 _, H- l) o9 }- z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 h! ^# h$ S: F! y0 @
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% I# X4 J: q# ~. d; i: c7 U% N
  246.       }+ G; Y; g" E8 r7 U4 e
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" H$ v; _0 g) F2 @* r4 n
  248.       sprintf(filename,"(%s)",file->file);
    9 D) T( m; Y: Q" B% _( r7 a
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : \8 K+ e% m! f( ~6 z6 c1 r
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & W7 m1 e2 t7 b8 b# ]7 t
  251.     }0 X1 A7 P: b: z9 [$ F% g$ v1 _
  252.     dwCurrFile++;6 |( B8 J9 S9 X3 q! _& l4 y+ e1 A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 T) l; u, k% K1 g8 M6 o: i% b) \
  254.     {
    5 F7 ]  K! t! F3 T9 l  f
  255.       bSilentStep=FALSE;' f7 M6 n) i7 }( z
  256.       bCompressed=TRUE;( _  l: B: n, ?, v7 ^5 P/ k
  257.       strExtLocal.Empty();
    : ]* q& h8 n- h# b+ r& q4 v8 i
  258.       strFullName=(*i).second;
    ' I& `4 k0 k% z
  259.       dwProgramState=AP_CONNECT;
    6 g5 |5 y' M' U! q2 y3 n  u2 g6 l6 `
  260.       return TRUE;
    # Z: @) o- Q+ g2 `% Q
  261.     }& F% r8 s8 H+ Q, G
  262.     if(!bRestartUpdater)( Q) `4 u0 r- T" Y2 g
  263.     {) N' e' E3 B6 L7 g* m$ W6 v
  264.       int iCurrSize,iFileSize;
    5 U, _: `8 w3 Z4 u8 E' l9 ?
  265.       iCurrSize=0;
    : G$ K& h5 z( j. h& u9 w
  266.       iFileSize=UpdateList2.size();  [1 k5 S& m, ?, f7 D/ c' b
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % w9 X, {% Q" m. C! l* Y% j9 T  _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , e+ U! P, Z! H) g! w: C% W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( t7 `6 }. K% }: I1 C
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 _; V8 N% Q  z; U. m
  271.       Fclearf(".\\update.dat");
    3 c6 V/ ]& y2 Q/ H2 ?  u: ^- O2 \, Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");0 Y8 ?$ k+ m! E' w  V& a
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * M. o, I/ o# Y: f7 g+ P
  274.       {
    % \; u0 v  l( Q5 s8 n! n2 _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ( K5 D6 }3 y: u& U
  276.         {
    % ]9 M. w% j# J& }
  277.           file=(*p).second;
    7 d5 |, _) J/ _/ H1 l- @
  278.           sprintf(filename,"(%s)",file->file);
    6 ?0 C: E2 n. F& |6 \
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " }; U$ u& I, j, y, M# C: n. w1 p
  280.           iCurrSize++;, i* A, X2 L! d
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    : [% r3 j) J+ J3 t" G' y
  282.         }7 O) i4 B/ e5 q& g) G2 v# u& y: T$ W
  283.       }) E; O3 x- }* l! n) x$ |+ F  D
  284.       unlink(".\\update.txt");; H. {6 O# |  |
  285.       unlink(".\\update.tmp");  z. n" i& F6 w5 c" r
  286.       Fclearf(".\\checkversion.dat");6 H3 @& E4 A; b7 P5 q, i5 U6 s* v% x$ }
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( Y" x# _+ j! M
  288.       if(UpdateLocal.size())+ Y: p  ^2 L/ X6 q6 n# y/ i% |, f
  289.       {
    / c, n" X8 N' }( w3 I6 p& w. T- U! f- N
  290.         UpdateLocal.clear();. l- r5 P& ~9 \0 Y5 M: Y
  291.       }
    # D. p- V8 ^4 b3 R7 E. B! M
  292.       if(UpdateFile3.size())2 w9 K# J. O; E, m. [
  293.       {' Y& E& b6 W2 `& a: J  S0 D
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( O8 N! @1 c3 C+ M; I6 S5 k
  295.         {1 \4 X7 _5 N* B% Q& D9 F
  296.           file=(*p).second;
    5 a# z# t4 ?6 W+ k/ t
  297.           free(file);
    8 q/ g5 ?( l8 U' `
  298.         }4 p! S: e6 w+ r! R. _0 w
  299.         UpdateFile3.clear();
    - v0 K  T9 r9 b; \. f* W. g) w
  300.         UpdateList3.clear();
    9 ~8 r6 P7 i* Q! a( j# c
  301.       }& I2 `8 F5 \0 w3 y8 D' o
  302.       if(UpdateFile2.size())6 P. `0 R- }. G1 v
  303.       {7 y* G, o9 ~6 G" q( O4 q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . B; o+ Y8 R% K6 j$ O1 ]7 a! K
  305.         {; R) e& G: d6 ]# Z( V
  306.           file=(*p).second;
    0 {( o: M* C0 y7 N0 t
  307.           free(file);
    ' O9 a8 L1 v- j4 [
  308.         }
    3 L6 ]: u. o  J2 o
  309.         UpdateFile2.clear();' a; F" K: j  }1 _' n8 ^
  310.         UpdateList2.clear();
    7 w5 H. D9 W  x4 J& A4 I
  311.       }
    - ?: n! _* N6 e9 u8 V# ~( k
  312.       if(UpdateFile1.size())3 h( a) K- I3 |; Y; O; o% t) q0 j
  313.       {3 {3 I' W  `! o6 J
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). m9 l% Z" C' |5 h2 {! q& H
  315.         {
    " d6 X* `/ A7 W9 H
  316.           file=(*p).second;
    / A$ F) v1 o$ ~+ a2 i4 d, \
  317.           free(file);$ x" e1 ^+ L7 e6 v
  318.         }
    # @  }. o1 B8 x7 Q2 Y
  319.         UpdateFile1.clear();- H# O+ o! ]- ^. |) `
  320.         UpdateList1.clear();0 H+ @# a, f  X) J$ F" H+ Q
  321.       }6 ]( t6 V  v6 ^1 X1 ?0 `! j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    5 f3 U, u; Q& c9 d9 F( M* w+ u
  323.     }
    ! Q) t  ~  b$ f
  324.   }+ U5 [; ~# L3 p9 h5 W2 y7 S9 _+ G
  325.   return FALSE;& f6 e/ J) Z% e& m: D& Z4 m* f
  326. }9 ~. U( f; z/ X; Z- f# k8 i

  327. ' ]( U9 x. _. ^/ g: ^, v
  328. void CRevAppApp::ClearAll(void)% t% j: _) y( y" U: e! A4 [
  329. {
    7 ]4 l4 w2 a' @1 l" G: j2 o
  330.   LPUPDATEFILE file;
    * z; H  h' H$ p" z! O
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / T/ G. Q4 t9 x, R8 T
  332. ' U' F! X  I' L, h. P
  333.   if(UpdateLocal.size())' C9 s/ g( J6 z" K6 @
  334.   {6 t' F- ?; E/ D: ?& H6 r
  335.     UpdateLocal.clear();) b& _7 `" O/ D
  336.   }# ~5 a9 e- E* X0 }/ d) E6 z3 `
  337.   if(UpdateFile3.size()), o) v( d! k9 G& ?/ p8 {! x7 p' _8 \
  338.   {2 S4 M1 |: _$ T0 N- ]
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " Y4 |* B3 `# U( i
  340.     {
    ) T' E1 a7 \) k: W5 |* [/ X
  341.       file=(*p).second;0 G( D4 k9 a3 G  Q$ I+ |! Y4 e
  342.       free(file);7 e2 [  K7 j6 z; N
  343.     }
    4 `' j/ W% U# ?  b( _. M
  344.     UpdateFile3.clear();) H( j. E; r5 _: I' M, k9 [
  345.     UpdateList3.clear();
    # y4 g# D+ i2 J6 \7 R
  346.   }2 S, F0 I' T! l
  347.   if(UpdateFile2.size())
    2 ~2 Z. w, S( J2 v1 D' w
  348.   {
    * W! \( e2 w: h  E* X
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 u9 U/ @! q! k! c$ ?$ |# s; ^' ]  i
  350.     {# C4 P! T/ P5 x) a1 [/ B7 U4 g0 `/ Z
  351.       file=(*p).second;
    1 |5 b3 o: @- t/ R  z7 D% R0 X
  352.       free(file);" E& W8 F. r# |9 W- h( B
  353.     }
    5 W7 j% W% x6 b2 J
  354.     UpdateFile2.clear();) z' W& j3 S, e. \0 t
  355.     UpdateList2.clear();
    - Z" @+ V4 z# U. C, m  t5 }& i
  356.   }+ l! a! C- L( Z
  357.   if(UpdateFile1.size())) L5 p, U$ a) L
  358.   {  d  i* E+ o4 N
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& _( o* M! B# D0 }& ^3 r2 i1 H
  360.     {
    * p4 T3 b/ B* ?1 w/ n
  361.       file=(*p).second;  M7 Y6 c& U) O( y
  362.       free(file);
    / E- Z; D4 s& _
  363.     }
    , G6 w) T( V1 N- `
  364.     UpdateFile1.clear();/ {3 D0 m! A0 C
  365.     UpdateList1.clear();
    / f9 ]! D2 F5 o2 }  m) g1 {' o) r
  366.   }
    9 h7 J& E6 u% _# f( \
  367. }  4 r% U2 I: H5 S
  368.   . N0 E& x( C9 r- i& W4 d
  369. BOOL CRevAppApp::CheckLocalVersion(void), L' P+ D2 u( D" _8 I
  370. {
    + D% t0 ]! I' w; D7 \
  371.   int c;) j0 D9 i2 z1 Q# Y5 ^
  372.   LPUPDATEFILE file1,file2;
    3 T- m8 \* u! Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;# e! R* D% @; m, t
  374.   std::list<CString>::iterator l;
    ; O2 j5 g( `9 Z9 f" W2 }

  375. ' n- c( C& ?) c5 K& r7 e
  376.   UpdateLocal.clear();& Z+ L# _( ?9 h2 m5 C; V- t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 Y+ P& M: ?+ V8 y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + n9 w) z5 `$ t' }& Y1 s3 g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);! _7 ]' G7 T7 e7 s
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( F! a( r* m; P% }: ?* u0 {
  381.   if(UpdateFile3.size())
    0 l! k) n* P; E9 L: k/ N5 I
  382.   {
    , G; [8 w: [! r( J
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 _3 T; [2 R/ \0 g! k' E* P
  384.     {
    ( e9 [2 \* E; h( _  ?7 D
  385.       file2=(LPUPDATEFILE)(*i).second;( X; m) v: d5 |7 D# S
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 w1 m& G; t1 [4 b: p/ @
  387.       {, F) J: [. n+ T" S+ x
  388.         file1=(LPUPDATEFILE)(*p).second;
    & p9 C& T+ Y" w& R% B# A8 V/ H5 U6 F
  389.         file1->vers=file2->vers;
    # d% B! O. A% Q/ o
  390.       }$ ?* o# d  P6 I; v
  391.       else  w0 M: r; l) K' [  C
  392.       {
    0 K3 v; ^; `) A  k) P
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" J9 I' s# z( I' ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! P' j) H  g7 }' J+ b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 v/ [* B' R; V2 h/ T. _
  396.       }
    . T9 ~* d* V! w" W* I8 v
  397.     }. T, y8 b! }4 H( X. g+ `2 m+ C
  398.   }
      Y2 E9 c7 t5 u, R% m
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% \: m4 n. {! n
  400.   {' {2 p* a! w/ o3 H
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())" m7 f" I! w2 e) w+ N* E1 {+ `
  402.     {
    * J+ x9 b5 M+ W' t( T& P; J! j6 a
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 S7 [* m' T8 c& t
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 d- m6 g4 y( ]7 Z1 w, y+ b8 B
  405.       {
    $ I3 e7 e+ o: w" d/ z7 j9 ^- |" _- _9 r
  406.         file1=(LPUPDATEFILE)(*p).second;
    - u0 M5 v& z, D7 D% o2 B: ~
  407.         if(file1->vers!=file2->vers)8 R  G6 S  ~. F- s3 \* {
  408.         {
    ; ~# y( w3 r- T2 }# O" J9 I" k3 }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 \+ D" r! \/ E1 @3 K4 b7 ^: E/ f
  410.           c++;) b2 ^& P! g  r; L2 k& f
  411.         }
    $ H3 D  ~0 [8 E  O+ p* {
  412.       }/ n( H3 H, R0 \7 Y
  413.       else
    * D! Q6 D5 D* }
  414.       {
    " y0 F, A& [; W& J  w0 h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 U* q: L4 J& u4 m4 a
  416.         c++;
    7 k5 N" V2 R5 F- R$ _
  417.       }# q1 ^' C. b9 T8 T: a, d: L. }  v0 B
  418.     }8 l. [( i7 P4 f. k
  419.   }
    ) p- D8 T/ X6 L- }, ?- g+ N$ g
  420.   unlink(".\\DownLoad\\update.txt");
    ; v$ j6 ?+ u; `! y- q0 U6 g- l1 Z9 Y
  421.   if(UpdateLocal.size()) return TRUE;3 T: D: C  A+ z/ z% D8 p0 {0 J# c
  422.   else                   return FALSE;# M3 f% n# e% c5 y* \  D; N
  423. }
    9 d. S: S5 ]( V% J  [  z

  424. 0 N. T3 _. j( e6 p) x0 G8 q+ y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; i  j0 e& T: K/ g. a+ N1 h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    1 `$ A' q; y6 k$ C, [+ k' G

  427. ) V  n; Y. M% f' A$ o
  428. 4 ?! K* Z+ K, _% V- n+ N- _

  429. + ^; @- B" p5 V* o8 |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 Q* |6 `1 J$ u+ x* A
  431. {
    2 `: z( z4 n* _0 Z/ y; B6 W, C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;& v) V4 C: P# l8 |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      [, R, a; b0 |: e/ x4 T. j
  434.   {
    + Q3 Z* r) y; T, u) G* e0 Y
  435.     char szLanguage[50];
    6 P$ x' J" x8 J- ^/ X/ S) s
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 r4 P9 B3 r3 U
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! \. z& A8 t& {( C6 L7 p: O
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ i- T' \& j+ z, y4 q2 \+ y3 Q! t0 O, N
  439.     else                                   m_iLanguage=ENGLISH;
    5 L$ f1 b2 M# {; w& H% w
  440.     char szRegister[100];
    " P2 G2 b2 J( ?( e# N/ o* G
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% Z2 R0 b7 z8 P+ ?! z- P. u
  442.     strRegsName=szRegister;7 ?! C9 s5 ?3 a; ~
  443.     char szPatchURL[100];
    6 Z3 h/ k# ^9 B, U& L8 ]5 g) l
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - i& y2 \3 j% W1 t6 T' ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ J1 w1 ^- q" P
  446.   }
    + Z8 p8 f2 S* `& i- Z1 X
  447.   else. K1 e9 [* u& g2 R% u, ^1 ~* E
  448.   {, Q# o% V" ?1 Y8 R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) b: F+ x. K- t
  450.     strRegsName=DEFAULT_REG_URL;
      M$ d8 {0 D% H+ _3 V1 I; h
  451.   }8 C( V" S& \/ n  i* s: P) L/ L9 T
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    - b/ d2 {' K# U6 i7 c
  453.   {5 _( u! j5 R, B" M' a) H3 w. r2 g: P
  454.     char szIP[50];5 U4 C6 E0 R. P( S
  455.     char szDIR[300];+ Q/ e3 I* I3 e+ P! {* f8 ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 x+ k. H3 K( D$ M6 m- m* g& V+ U
  457.     {
    " l1 \  K* q# C% L/ M- [
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");3 ~) A0 }' ^6 l8 E+ b7 O( ?
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 W1 h0 I" y4 D5 o7 o; n* K
  460.       strHostName=szIP;
    1 ]; F# D' D3 E! v% e
  461.       strHostPath.Format("/%s",szDIR);
    " X; C. P/ V% p0 g1 W* P
  462.     }
    % Y- ?! @+ R, _/ [
  463.     else
    ' F7 s) \% c5 h( z" i7 e2 I
  464.     {
    4 Z0 ^2 W" N) x5 {# a  A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" w" C6 {7 a+ W( x
  466.       {
    4 c, s0 X! c4 K6 ~- N+ ~" d
  467.         char szLanguage[50];
    3 b1 w, A4 r* ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 j9 j4 T/ v$ o/ a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 L4 L# }* v. k& ~. B; ]; d9 B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # ?6 |; A' P% b$ a( q3 D
  471.         else                                   m_iLanguage=ENGLISH;' J: n% j( m: H0 l- u
  472.         char szRegister[100];6 M+ J9 K+ U+ k8 \3 j, v1 K1 Z5 `8 b, ?
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 O3 V# X  f) D& z
  474.         strRegsName=szRegister;5 @$ ^2 B) T9 q/ `5 n; R- |. q$ G6 r3 B
  475.         char szPatchURL[100];
    4 e7 Y" e9 a5 O, z! X' f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' O3 v# |9 ]% {! S3 `, h
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + b/ A6 u8 w* J; x: e
  478.       }8 C8 G5 }; c- H, [
  479.       else
    ) A4 b7 q: T" u- [2 J
  480.       {9 l5 L! \8 \7 k
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - v1 f  |3 i, P) W; S4 x; t
  482.         strRegsName=DEFAULT_REG_URL;
    ! n6 E3 n# S9 Q* {9 V& o" i
  483.       }/ N0 C, `7 {0 c) d
  484.     }
    ) o* W6 g+ u0 X. o4 F+ x6 P: _+ _
  485.   }. q7 h! ]& L: ]1 B7 o# k
  486.   return true;
    . ]( P+ [8 r; ]( V, L
  487. }
    ' [! x! y/ o- R6 Z
  488. 2 \: E, |# A6 ^2 D3 J* T/ G+ n) Z
  489. #include ".\ZLib\unzip.h"% m+ j+ ]9 N; K0 n
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ! ~! r( t4 ~5 L* \1 N4 ]' y% q/ n
  491. /////////////////////////////////////////////////////////////////////////////
    . D6 X2 @( e% p! n3 z9 v
  492. // CRevAppApp initialization6 d4 K- D0 }5 ]

  493. ' B1 E; L+ `* r+ ]1 `2 Q! J% O  X
  494. BOOL CRevAppApp::InitInstance()
    - T6 v; u4 p+ f
  495. {. |7 |* ]' L. i% H
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 J! u  h6 I) O0 s+ Z# u6 l8 P2 }
  497. . q' e* L3 h0 {  l1 i2 c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' C; @0 R1 s$ T8 I& O- Z, I7 F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), w+ a: Y! d4 _6 u
  500.   {
    / N/ }3 e0 y" g7 c6 y/ _' n7 j
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");5 ^4 R$ G& [9 ]7 I" w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , T6 ]( g6 B* D. s( D
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  r- ~( l; s& t+ X  ~& B
  504.     {; t5 o0 X+ P; `* T
  505.       strcpy(szPath,szPathTarget);" ^: h2 ]4 X- O0 L) p) ^
  506.       SetCurrentDirectory(szPath);  c% O: ~$ C% d
  507.     }; u4 Z, U. i4 N% |" V/ e: Q0 m* P
  508.   }
    ' ~% G0 k1 V  J$ k
  509. #ifdef _DEBUG
    ' Y6 R# C1 [$ j( N
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): Y* h( F" }* i2 N( a0 I
  511. #else' X4 g3 d( X& i: T4 s: m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " v: b4 h8 I% d7 ~
  513. #endif
    3 J! A4 C  L9 t  d
  514.   {
    , i, w8 Y! Y7 r8 p- U! @
  515.     char tempFileName[MAX_PATH];
    / Z. h3 t$ }4 E! Y0 Q+ ^
  516.     strcpy(tempFileName,szPathSource);/ O4 {/ W7 Y* U1 t" ~) p9 B
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / j  l3 S1 K, {, |: u( c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 l( Q3 t0 H- x9 {( p* ]
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! b9 ?' `4 I. W& @% c7 R9 t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);7 @3 Y% H. _) h) z) Y
  521.     return TRUE;
    6 c/ k) g: J1 }3 o
  522.   }4 M: t, Z' W( c# }. l4 U. [
  523.   // Nuke 0118: Delete run.exe) u6 q9 A* \3 `! N* m, A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 X( A7 g, |; M1 m2 i( d+ A: }* J
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * ]( u% _6 X4 s5 _# J1 Q. S0 i
  526.   if(!ReadCfgFile("Config.ini")); k6 I% S; k8 L5 t' @% `
  527.   {* X3 u# d; \0 n6 u
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) t0 l4 }) J6 Y! A2 b
  529.     return TRUE;+ x0 t( L* M& e* }
  530.   }
    6 i- u4 Q% p) w# x! ?3 A
  531.   HANDLE mutex;
    % w4 u( ]8 `. [) `
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))( q# N4 z0 i! E* W+ s2 E# l
  533.   {
    ! }9 h$ M! ^8 X* j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 N6 f1 p' i, r7 e; L1 K) b3 U
  535.     {
    4 b" [$ @1 m" Z* t: P
  536.       CloseHandle(mutex);- I2 K  t" F2 a; J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    9 G1 E6 \6 _) p# ?0 Y
  538.       return TRUE;4 u4 d. M5 |/ Y' w6 Z1 u& \& r
  539.     }
    : e  ^# u- z& H1 j8 t
  540.   }  1 @: J) N5 t' b7 x7 z  h
  541.   CloseHandle(mutex);/ ]* Y. ^4 c5 H3 `6 K* Z
  542. * G: {* b- p" w, O: Y  E; e- G3 w
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 Y7 h6 H% T& N( n' I. {! @  J  g
  544. 3 L- t& _- J7 l! l
  545.         AfxEnableControlContainer();# `+ y# J. S# j" n  j
  546. $ Y; a  e  ]! ^& l- d) j
  547.   bCanUpdate=FALSE;
    5 k  S5 E7 G/ W; L; Z
  548.   dwStartUpSteps=1;
    ( x" U+ Y' ^2 n% x& w
  549.   dwProgramState=AP_NOTHING;$ U: ]. `( v  g/ f1 x! U

  550. , k/ t1 s1 G1 ]; N5 w
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & F; f, H( c5 n; r( k
  552. 2 @8 J" l3 T+ R( H- x$ V5 l
  553.         // Standard initialization
    % _4 C7 F# I: F5 A
  554.         // If you are not using these features and wish to reduce the size
    # x( @4 F$ U8 ?5 l6 m% L. n
  555.         //  of your final executable, you should remove from the following
      l; X. G2 `$ a& D* n
  556.         //  the specific initialization routines you do not need.! C. s; D3 l5 ]' [8 Y4 T' F
  557. % q1 Q  }# a+ [# d) L, L
  558. #ifdef _AFXDLL
    / C5 E" z! C" }" H
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 q& v1 ?+ g( S, W/ X8 ^* u5 Z
  560. #else
    4 b' d- O2 j9 t# x2 W! l4 n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! L' V# f9 s0 E5 l& H; N
  562. #endif9 M0 _" ?$ r& P3 ^- Y5 F
  563. ; p1 j* ^' C; }" o0 y  A
  564.   dlg=new CRevAppDlg;% z4 _. @6 q% x! c
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - X1 h4 j$ R2 |9 P7 _- R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* n- A: W/ G5 m0 l, W/ O+ y
  567.   m_pMainWnd=dlg;
    # h+ d9 f" s4 U
  568. 3 B9 c2 W0 F. f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    9 r- S. x( N3 K+ Z" q

  570. ! A1 _! @" [8 `1 E" U$ D. P
  571. //  GdiplusStartupInput gdiplusStartupInput;& A0 F6 G1 I# r
  572. //  ULONG_PTR gdiplusToken;
    , m( K9 a  D( Z: y3 h1 c3 L* j+ o
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 A. `# f$ J4 L8 c" ?& B: v
  574. 4 R) i1 t9 i' ~8 y1 T9 c) v
  575. //        CRevAppDlg dlg;
    & G$ R2 [! {% _# M
  576. //        int nResponse = dlg.DoModal();, K* }7 z' o) E8 U, J; `' W
  577. //        if (nResponse == IDOK)
    4 `& g0 j0 B* Q- X, F4 L) a. p
  578. //        {, Y1 |! W: z" r+ G# m/ z$ n  U+ Z
  579. //                // TODO: Place code here to handle when the dialog is
    5 f5 |1 _! W- E8 |) l( \) U
  580. //                //  dismissed with OK! k( U% N! @9 b4 C$ d
  581. //        }3 c8 g1 Y/ x# Z; d( ~/ J
  582. //        else if (nResponse == IDCANCEL)2 p% @" o! c1 c7 D8 b
  583. //        {
    0 i/ d, \) G' d, y$ m
  584. //                // TODO: Place code here to handle when the dialog is  u- g2 D# E' H! U2 J
  585. //                //  dismissed with Cancel
    8 p6 ~5 Z  P8 _8 r
  586. //        }
    5 _# Z6 I; O" |, a2 w7 \

  587. ( W9 r5 i6 w* J& a% ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 V9 k3 d/ m/ w
  589.         //  application, rather than start the application's message pump.
    7 R: a  F9 u5 E: P
  590.         return TRUE;# i/ ^  e0 `# n( a3 r: k
  591. }
    . S& A0 _1 ]9 P( ?' w/ Z9 M  V8 L

  592. & H3 c% m4 a; e
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" h' M3 j( l( z6 ?0 i1 o, ]9 v
  594. {
    7 @* \+ H. p. b  w9 u
  595.   int i;8 c8 P. E( g6 O' t$ x
  596.   char *szRet;: w$ L: D- Y! v
  597. & j6 A% V7 p* Y6 V( f
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & |( ^8 {& I& n8 d! r. N
  599.   if(sztoken)
    5 S; e! }8 L+ _0 q9 {/ j
  600.   {
    + |0 ]5 o+ S1 a. g
  601.     szRet=&sztoken[itoken];; P) M7 O; C/ T7 E* J8 J: W: Q1 G
  602.     while(sztoken[itoken])
      `1 {3 T; p$ o- a4 |7 ]- u: w. i# v! l3 A
  603.     {
    0 i, s1 c/ ~0 x# F+ v+ B! Y. P
  604.       for(i=0;i<(int)strlen(token);i++); ^# L! P# e. t% x" P9 l1 q
  605.       {
    ' E7 l1 s8 g* ?5 z! m+ t2 v8 O
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  w7 [4 {: \( e5 x. z
  607.         {  S% y5 y9 _9 k$ s( ]
  608.           sztoken[itoken++]=0;
    ' F9 I2 x% P( P1 j! ?1 ]7 F' K
  609.           sztoken[itoken++]=0;4 w% ~1 w. S% Z8 ]1 F
  610.           return szRet;+ M+ G  o) x- L7 _4 Z
  611.         }
    $ d# E5 w4 H) W4 G( `+ g% k
  612.       }; j2 l  L# ^0 v3 L9 N4 k' v& A
  613.       itoken++;. n3 |2 x$ O) u: H  Y' z( W# _
  614.     }
    9 p' Y5 ~$ ]1 \
  615.   }
    + t( U/ }3 o# V6 |1 U7 k. Y; K* I7 [
  616.   return NULL;4 p1 W& G3 T; u3 l
  617. }
    2 |/ {/ h2 D3 K. B

  618. & I" ~  Y1 m* w; c3 D' U% I  n
  619. void ProcessProc(long Total,long Current)
    : R) X7 E6 K" }
  620. {
    / f) u6 `" N' p9 \
  621.         MSG msg;0 E9 G0 P" w4 v3 `
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 a+ D5 N% T* E' j, }3 _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));! j2 w! V: A+ b% t6 I+ W! p. p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 [' o" }1 m! K) C' F; k: k3 e
  625.         {: W4 x4 k# w# B( w  C$ j& K& G
  626.                 if(!GetMessage(&msg,NULL,0,0))
    , d2 q$ L7 \4 K2 Q% F# M
  627.                 {
    ; U' s* u0 y" N8 V6 f7 I. m, S7 V
  628.                         return;
    6 K9 c& E$ t; s6 Y
  629.                 }
    6 Y9 W4 M  e1 r  c. n
  630.                 TranslateMessage(&msg);% A" J. `$ N+ |# ~
  631.                 DispatchMessage(&msg);
    3 }6 B* t! B- m/ G) [- ?6 ^
  632.         }       
    8 r% J3 a3 ?' F
  633. }
    ) Y8 [) z% ~0 w1 M

  634. 1 R! ^; X- ?$ `1 E
  635. BOOL bFirstChar=TRUE;
    8 W8 Q0 h+ N: c0 v/ I( e8 F' y- L

  636. 3 ~* b- h0 K9 B5 o. m
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( Q* S2 Q9 t3 _) Q+ j
  638. {6 l$ e- V. G. Z" p0 H1 ~4 ]5 }: k
  639.         // TODO: Add your specialized code here and/or call the base class
    9 K7 L  @, [9 _$ i3 [
  640.   switch(dwProgramState)7 C& `% V5 {* z  G/ t7 E3 A/ t
  641.   {; }  c8 ]4 h  D, ~4 V
  642.   case AP_NOTHING:/ w/ l3 Y+ S% R! m, h9 l
  643.     switch(dwStartUpSteps)
    0 |* W$ b6 ?, j" z# z: S
  644.     {3 c$ D6 T, @5 u) w
  645.     case 1:
    7 @' X+ A* p) j- d
  646.       {+ z% _# u6 r3 T1 ~+ C
  647.         int i;/ N& g' r' Q6 z4 W5 k
  648.         CDC *pCDC=dlg->GetDC();4 U% s5 [# q- s( h
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; ~( T, c  p. j' {% O" I! L
  650. //        Graphics graphics(hdcwnd);$ M& R5 W& R: d  y- _& f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( J/ R, Q5 R5 ?# T  N( G3 J
  652. //        INT iWidth=bitmap.GetWidth();5 E5 `# C' {9 X
  653. //        INT iHeight=bitmap.GetHeight();
    + B5 [3 K' T, I+ j! K
  654. //        Color color,colorTemp;. a1 M! Y( Z3 U  b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' p- p9 y8 T2 m$ S3 g, e* u
  656. //        {. Z" P0 R- S3 N4 N2 \. S# w
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * t6 u3 C- l6 v; M2 [* a
  658. //          {
    ! y1 b3 D+ g+ Y- [- U) Q8 B
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& ?  h( p0 C) Z# t: |
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 A* w# |, a. }5 z# O8 T5 G
  661. //              (BYTE)(255*iColumn/iWidth),2 `0 n/ g" v) b4 H3 p' Z
  662. //              color.GetRed(),
    6 W+ Z6 G+ G5 G( f- _
  663. //              color.GetGreen(),
    $ e* M- D! o: b& O( Y5 D  O; P4 e
  664. //              color.GetBlue()));9 z5 u) ?6 m  y% b. S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);/ D. V' t# B( V5 h  t2 Q
  666. //          }( A& j7 O* p7 L7 r9 m  ^: b5 ]
  667. //        }" R+ P5 p' f" B! I, F' B! q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 e! x! D! h( @; \6 i. n
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* b5 G8 o& \, z0 B$ {
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 v; a9 W3 c+ J: g- _9 M% R  q: k
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! `. V3 @4 E( n
  672.         for(i=0;i<240;i+=8)
    4 ~1 I9 x* F$ o/ B; Z3 d  R
  673.         {6 K0 f8 u0 d  ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 A) k# w0 K8 _
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 d: X  F0 j8 m. f# X. p' p2 X9 B
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( w7 \3 @, K% E0 L8 v$ O3 @
  677.           Sleep(33);
    * k2 w' Q3 f- h0 P: M
  678.         }
    7 s9 u9 B( E/ J
  679.         Sleep(1000);
    * Q& D* z: T8 q5 O
  680.         for(i=240;i>0;i-=8)" t% _& u4 r8 t: U
  681.         {
    0 P5 n- m& P/ c: g9 d& w
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& Z+ I$ f# ~% `( i! X
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' k0 j4 \3 X) \5 p
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & o9 J: c& [, i) i* c+ C
  685.           Sleep(33);9 X1 M, m6 f: V8 v0 E
  686.         }
    / u3 |; {- N. P% J9 @; Z! f+ v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " |3 ~8 X2 C8 v& O/ T
  688.         dlg->ReleaseDC(pCDC);
    / ?5 v! j- X) K, J
  689.         DeleteDC(hdctar);& R8 o8 D- g' O+ r  S
  690.         DeleteDC(hdcsrc);! t) @) T, X6 E- R# C% D6 Q. a
  691.         DeleteDC(hdcorg);, Q+ G$ P+ O. B3 h( Z
  692.       }
    5 y8 t, P5 Y. A; z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
      |3 y- Y  U$ [  q7 q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 a' E( J* W7 Y! p' `1 D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 O8 U2 k3 F3 N
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");) n, h: t6 P+ d0 c  u$ y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' B. e6 L8 K3 i  k' r* [& d' b
  698.       if(!Dn.Connected())
    , O" ~& Q3 u* B$ T& r
  699.       {; A3 U6 t% V' Z. h9 M* @
  700.         dwTotalFiles=1;8 d: I! U: B; s1 H, I* s
  701.         dwDownLoaded=0;& S* x! v0 t) j/ W" A1 O: l/ T
  702.         bSilentStep=TRUE;
    8 y( A& d% S% E, Z2 u
  703.         bCompressed=FALSE;/ m) @; q& W& \$ \7 T/ z
  704.         strExtLocal.Empty();2 \: ^7 I4 G$ W) f. Q
  705.         strFullName="readme.txt";4 A5 @* |6 v, `3 ]; L7 E. d+ c
  706.         dwProgramState=AP_CONNECT;
    ; v% n$ q8 {* Z7 |' Z9 k8 A+ \+ p
  707.       }
      D2 E) G% H6 P* _8 r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    # q( p2 i: {/ X9 A, R
  709.       dwStartUpSteps=2;
    7 P2 S& J. G- ~6 f( q" ?+ t, M
  710.       break;
    8 j7 H2 Q5 u7 F, U8 g
  711.     case 2:
    ' Y- q, v. L* L2 I' b0 W- f
  712.       {# q/ M1 q. l2 Q0 ~: m8 W' z
  713.         int iEOF;
    7 Q/ M. P. M# o
  714.         FILE *fp;
    # o3 l; P" j, `0 X) L
  715.         char szString[512];5 i! z! E/ a+ q* Y  ^5 x" C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 @9 v: k: Z3 {4 N6 i- H0 ^' v
  717.         if(fp)
    9 Z$ o  {' Q$ |0 L
  718.         {
    ' H- U( \' _( K1 b0 p
  719.           do
    / i: y3 f: X7 l( C. m- ?% x
  720.           {* y- b2 T8 h: x
  721.             iEOF=fscanf(fp,"%s",szString);. F$ R' L7 s2 ^6 j
  722.             if(strlen(szString))) z1 l5 ^2 K* O$ e; ?
  723.             {
    " F- O4 `5 r; Y
  724.               if(bFirstChar)6 G! H: e+ e9 j: [- a* K% j
  725.               {1 U1 l- C$ K5 e/ b4 m
  726.                 bFirstChar=FALSE;, |3 w; k+ k' j) H: U4 Y* Z
  727.                 bConnectIsBig5=FALSE;
    4 r! ~% @, B9 j9 v6 ^) ~
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + g/ |: D; ^9 F% p
  729.               }
    2 _* p- R, ^/ h  v) K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));' j9 H) Q$ G) l/ J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));$ U7 {; e/ N" n$ {
  732.               dlg->m_ListText.AddString(szString);) {, l8 u, R$ z& ~
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( f5 G1 h9 b. `
  734.               *szString=0;
    5 H6 I& x; F+ g! U( N8 [- K* a
  735.             }
      c- v; U" _- W8 ^2 q
  736.           } while(iEOF!=EOF);' g. Y5 ?/ K5 d; k
  737.           fclose(fp);  [& y8 V/ V: h' L' ?
  738.           unlink(".\\DownLoad\\readme.txt");! `: O) `/ ~$ Y
  739.           dwStartUpSteps=3;! a2 f  x" e( R- v( B" U
  740.         }
    2 K% y' }% M# k5 x: @# h- l4 n# j
  741.       }: U7 q( M) i3 |$ e1 K
  742.       break;
    ! K6 [1 w& h4 ^' B
  743.     case 3:! c3 S7 u6 x7 L! ^" N8 u4 B
  744.       if(!Dn.Connected())
    ' @5 h! k* y5 X1 l+ o, f. k3 Z
  745.       {! ~6 ]  D* m" ^8 A( V; c! A& ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" U6 v. ^! h% t' G, J+ k9 v
  747.         dwTotalFiles=1;( n* y0 d, z0 Z% `2 ^
  748.         dwDownLoaded=0;
    1 ~* y% Q! m" A. J
  749.         bSilentStep=TRUE;6 p2 f) @4 y# b% l2 }: k
  750.         bCompressed=FALSE;
    5 s( Q& t9 O' a- p9 u( h
  751.         strExtLocal.Empty();- W3 c1 s, ~3 E2 J8 Z8 S3 [4 s
  752.         strFullName="checkversion.txt";9 Q3 y* C( t* o4 S0 y
  753.         dwProgramState=AP_CONNECT;
    ; t: X  y5 ~7 G1 l" U$ i9 x' y" w
  754.       }
    1 G( d+ Q) r, Z5 k: ]
  755.       dwStartUpSteps=4;2 z6 x0 r$ w7 t8 o
  756.       break;
    ' Y! O/ P, L" |; j. n
  757.     case 4:
    * s' g: S+ t; E1 c5 u+ q
  758.       {+ ~/ g3 q; Y. f8 U
  759.         FILE *fp;
    0 n0 i/ e+ |6 L$ l- J4 e. |# w$ _
  760.         char szString1[128];
    ; I6 j% @. C3 l6 m) f
  761.         char szString2[128];
    2 I: `& V' R9 }. I" E+ a0 f, E
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ) S7 |7 W' ?1 @2 M$ h: C" _
  763.         if(fp)3 B7 i4 A6 B7 [" A7 z
  764.         {2 G5 A+ }. @; t: Q
  765.           fscanf(fp,"%s",szString1);( w+ P4 c: o; R6 k8 i& T) S
  766.           fclose(fp);+ N% I- b; B/ r; Q- e
  767.           fCheckVersion=atof(szString1);6 B* ?2 {+ b) h+ G% q+ S! `' G' e
  768.           fp=fopen(".\\checkversion.dat","r");$ ^" K! h/ o! J0 L# X; v# @
  769.           if(fp)
    3 G1 r; @0 e5 p
  770.           {
    9 R' _, w+ C9 q
  771.             fscanf(fp,"%s",szString2);
      e: a: _" w" w- F0 O/ W# I/ I8 |
  772.             fclose(fp);
    6 J% \- G2 j/ n# a, U
  773.             if(atof(szString1)!=atof(szString2))! L3 a0 l: |; y
  774.             {( H8 b% H' e7 A1 b
  775.               if(!Dn.Connected())& v% X% @+ ?& [" p& ^- s
  776.               {
    1 l8 M: c# ?2 K  U. p
  777.                 bFirstUpdate=TRUE;3 ~" \4 n, w( b1 b" e. Q
  778.                 dwTotalFiles=1;2 w& V) m& i9 l! J/ L! c( s1 B
  779.                 dwDownLoaded=0;1 K4 g9 W; O8 H
  780.                 bSilentStep=FALSE;4 F* H* `/ v3 [( x/ [# c
  781.                 bCompressed=TRUE;& P) ^/ z$ g, S! f9 y
  782.                 strExtLocal=".\\DownLoad\";, N5 D" T! A! ]7 C( r# D+ q$ c
  783.                 strFullName="update.txt";, ^9 w  O" A" @9 P' y
  784.                 dwProgramState=AP_CONNECT;: f3 x6 O9 b3 a" Q$ o+ ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - }7 c/ l! Q, ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 v" X% I# f2 l; n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! F2 t1 ~5 s& G/ V
  788. ) _6 Z  O3 a5 u. m* m: m8 E4 y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! G& T' @- x: _3 U, u7 J" Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");& q9 l: l, W9 J+ s0 K1 \' A
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    8 u  }5 f8 V- y$ X
  792.                 {8 A8 W8 \+ ^/ x) T& r, B' I+ K, a6 `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");0 {9 y8 W: c* ]# A4 i7 B4 Z8 K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 F$ D0 G: O$ L; N$ N- A
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    + C7 y2 f6 G' C$ k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 s9 j- O" O0 Y( x: y+ V
  797. 4 ?1 v! j  N) z1 H. y- ~! u4 T
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ k6 z8 k- Q+ s4 L' {" N
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 d2 K# Z& ^6 ^  R7 s. m( F% J
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 ^5 x5 b2 X5 r( P8 H/ X! o% {0 r
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 m2 P$ I6 z3 M! @& ^
  802.                 }
      H: ]( u5 T  t3 f8 m
  803.                 dwStartUpSteps=5;% @+ G" `* @* r; @, W+ u
  804.               }
    ! [5 p- c8 N3 p' s  R% i
  805.             }
    3 f( [- m2 N5 A& t! `9 i+ K( b
  806.             else& P, j& {4 {# I: L/ }
  807.             {4 E$ G! a. I6 D# A' ?9 E1 Y) i
  808.               unlink(".\\DownLoad\\checkversion.txt");
    0 C) x& l' [  m( i1 L2 z& \8 V3 G
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  L% W" ]( _6 x% R
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ a5 F& P6 B2 L) k6 \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 I0 q1 d4 U( M6 z, E
  812. 2 X  w0 b# z+ g( U" [; h) O
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 z' ]- N% K" R' M2 i* g! S- @/ N
  814.               dwStartUpSteps=99;
    ; L( i$ B0 Z5 n2 ?5 k
  815.               bFinishUpdated=TRUE;+ p3 S+ K& y( F: }5 A1 d: L6 \
  816.               bCanUpdate=TRUE;- P# m( [7 A$ _/ Q! u8 J
  817.             }
    ' T7 ?% Z( |% N, Z
  818.           }2 R7 U$ f+ n# C; S( a
  819.           else, Z  b5 \1 B, e+ w$ i. {
  820.           {
    * S/ S' K# ?1 T( R9 z5 C  t/ a- \' H
  821.             if(!Dn.Connected())
    . j' j. C  p; Z& S; S- y, _2 B
  822.             {
    5 {/ W; d* |1 u7 E( M  f2 t( W8 H5 O
  823.               bFirstUpdate=TRUE;4 h4 a, u) f; S7 v% {
  824.               dwTotalFiles=1;8 n! _0 q4 D7 k# b( ^
  825.               dwDownLoaded=0;* l8 U+ }8 x5 _$ F+ N1 U/ Z: U# n
  826.               bSilentStep=FALSE;
    ! E% u, Q! k1 {  L5 F
  827.               bCompressed=TRUE;
    ! L( c% x' c2 s# U! G, Z# x0 v' h% C2 j
  828.               strExtLocal=".\\DownLoad\";
    1 ?0 f7 P9 U( ]
  829.               strFullName="update.txt";' ~3 l; \* o+ r* S  a, P5 X
  830.               dwProgramState=AP_CONNECT;* p7 K$ n+ b( W: f# j/ L. Y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; C/ d. `* e8 u4 M8 x3 m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * V9 e6 H' |% _: T9 u6 z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" |7 s+ K9 R' i7 p4 m
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 _. ^( q- s# h5 V7 T  \; B
  835.               unlink(".\\DownLoad\\checkversion.txt");
    6 _1 t4 y+ R6 X: K% \. I+ p
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : A; t  {+ ], m  D: z
  837.               {
    % y. k( K. Q9 E2 k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    # v7 Q+ `7 e, Y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");6 t( H  V# q( J7 c
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * \, R8 Z  b. |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 m8 |2 V( S) k/ }0 D: r
  842.                
    9 U' C4 n/ t. y* g  Z  m- b& S
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. {/ E: s8 U6 h/ ~7 d  V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' b5 O; J) T8 A' Q+ a; I; D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    & _! s" r! }; V5 q
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ]  G! L8 r6 S
  847.               }
    , b- ]# T' v# @8 N* m
  848.               dwStartUpSteps=5;. y: |- S- P, _. K- m: u* }
  849.             }
    8 B8 {1 Z4 Y( X' }# ^# E3 f
  850.           }; m; `( Q. i' W) i# L' ?1 k* X1 D
  851.         }3 U3 a" G% @! h; r" @5 u: d
  852.         else$ }. W/ @) j. U& c: V1 t
  853.         {
    9 u: I( y: k3 r9 u3 ^
  854.           dwStartUpSteps=3;
    ) [, _' W. K) b0 K
  855.         }$ {; {$ p! y+ R0 y( Y' C
  856.       }
      D$ U9 z  Z6 s2 k: [# K$ m
  857.       break;9 l& c: |6 u( ~  S3 y1 _: z& ~: u
  858.     case 5:
    / T6 j7 H, L. i" @2 k
  859.       {/ p, H6 Q' Z, E6 k/ j1 j
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ! n$ U6 l6 R. F: Z
  861.         {
    " k& }* x+ B! ]4 E# k5 Z8 p
  862.           int opt_overwrite=1;
    $ F! k4 h, D! e, `) t
  863.           int opt_do_extract_withoutpath=0;
    0 b4 S' p8 ^! K8 x
  864.           unzFile uf=NULL;
    5 k  p( K2 j% U1 ?: X

  865. 0 }1 Y1 X6 n# N
  866.           uf=unzOpen("Wsa.zip");' J& p7 l& Z/ P  j+ g
  867.           if(uf)" q' N* I* z; `5 ]3 n9 q9 {
  868.           {/ ~4 t; G1 u# O8 q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);/ |: P) t0 _5 c" e4 Z+ C
  870.             unzClose(uf);
    0 k) B8 q( _% f) T
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 Q  t3 b: R, ?* q* h7 F8 e
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");" r8 H& U5 Y, B! N
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    7 E5 {' N# ^  i/ A
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 y0 V4 p8 o6 M$ B: ]3 O( K' k& Y
  875.           }% O- H# w8 K( Z" o- {! U
  876.           DeleteFile("Wsa.zip" );% P  p0 ^% @- b; a; o
  877.         }( @) \* T& p- j3 |! S

  878. ! V% B/ T) z% x  \& g/ G
  879.         if(CheckLocalVersion())
    & F4 X$ I2 @9 u! v. R- @) c5 a2 F- c0 E
  880.         {
    5 g  \/ w1 d+ r* U0 R# l9 L4 k* Z) @
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");+ ]% l: v- b1 P9 K
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");5 D" s2 u" `9 d* Z
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");# C# X3 N* S1 O3 a6 k, X8 j
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( e% e! ^: L9 Q$ M. a
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);; c6 ~! s6 a8 i
  886.           dwStartUpSteps=99;" W7 p4 }0 f9 B! D6 E5 ?3 p
  887.         }
    7 K* G$ q$ d* i
  888.         else
    ! ]( ^) Z: D- r, ^( m5 p' j6 j
  889.         {
    8 k$ @' g' E- E' f  ~
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! y/ L" |# O+ W( t4 `
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 U6 j& k' Q5 W6 ^. j+ }- k
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");: A- T+ ]0 r8 ?) f5 V3 I4 {

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

, V  P: f, d# F3 Z7 ~% l/ Z

評分

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