CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
  v/ l) @  F  f) |6 X( m
  1. / RevApp.cpp : Defines the class behaviors for the application.2 d+ \6 E2 p) Q
  2. //
    " I% I$ e' [5 D4 S6 s0 X) S! w: y

  3. 4 B- i- F4 ~  Z3 Z8 I
  4. #include "stdafx.h"
    , J$ F/ U* f- {  r1 h

  5. * @; {  K$ E4 O
  6. //#define UNICODE
    ( t5 k* a, U* n+ w6 O3 \
  7. //#include <gdiplus.h>
    7 S0 w& y) {  ~/ @+ b9 A7 I
  8. //using namespace Gdiplus;
    5 o8 n, ^; s; _9 _% k( \* k
  9. * {( N$ g0 g# I8 H: r9 h( b1 {& ?
  10. #include "RevApp.h"
    8 C% s7 O3 n8 c3 A* M
  11. #include "RevAppDlg.h": Q" A7 {$ h% k# p

  12. 6 ?; {% W( |: Q2 Z7 w: T
  13. #pragma warning(disable:4786)  C2 k) T6 p( ^: p  F! o
  14. #include <map>
    $ [! |8 O. \7 w/ F1 Q
  15. #include <list>: P! J) }) T! n$ I( U
  16. #include <direct.h>
    * X8 r2 l# n* N  j% K5 ^$ t

  17. ( K9 \4 J) j+ X& X
  18. #ifdef _DEBUG
    8 p% T8 W) u4 s+ x( {" E% o
  19. #define new DEBUG_NEW
    ; A" A& N( U5 G! `7 I3 F
  20. #undef THIS_FILE! k+ D, z8 l: c" p/ k& h7 y
  21. static char THIS_FILE[] = __FILE__;
    * G% h! G! |1 t6 L
  22. #endif
    * a* Z( q9 V- ^, o  n0 B7 `! S& b+ J
  23. #include "SkinResDef.h"
    ' t: f) p1 Q; L; W+ d8 T6 f9 L
  24. #include "ChangeBG.h"
      I- o& o: P0 [8 P, U% r1 Q; t1 i
  25. #include "AFXINET.H"( G, I1 \. w4 ?* `9 k* H8 h$ Y

  26. * I) W- w! M) U) c( @  E1 f; |
  27. #define TRADITIONAL_CHINESE 0
    ! p+ u& p. a1 J+ k+ S
  28. #define SIMPLIFY_CHINESE 1' l% c/ S- j1 A2 E( s+ x
  29. #define ENGLISH 2
    # }( a9 x) V* B+ |; Y8 D
  30. int m_iLanguage = ENGLISH;
    ' \4 v6 ~" O+ Y+ o& e
  31. /////////////////////////////////////////////////////////////////////////////
    ! j; R& w" V. v" F2 L% @8 `
  32. // CRevAppApp
    # g% X* d$ A' H. F( Z, Z! I& O. [
  33. , C: e  i, K$ N8 X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    # M* b' j& t- t7 A3 l) g
  35.         //{{AFX_MSG_MAP(CRevAppApp); Z4 t5 [. c) [3 ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 r: M4 X- z2 F! |
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 j/ `( y" j( G5 F  \
  38.         //}}AFX_MSG
    1 D' n) A8 e, w2 V3 M% g
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& L1 l! v6 i2 f
  40. END_MESSAGE_MAP()
    8 C6 ?1 }" `& k8 Q
  41. 6 M5 z* V% Q; L- Q
  42. /////////////////////////////////////////////////////////////////////////////
    % Y5 N; R( w) u* h
  43. // CRevAppApp construction+ ]! ~* c. _4 z4 v
  44. ' l  K* R$ \. T8 ~1 i
  45. CRevAppApp::CRevAppApp()
    " U9 |: i9 E! n' o4 @
  46. {
    - E8 ~/ ^3 V" b- F7 M
  47.         // TODO: add construction code here,) S: d1 L) b  A! m
  48.         // Place all significant initialization in InitInstance
    % q5 f' a' ^- ^7 x" ^& o$ y6 S
  49.   bDisplayIsBig5=FALSE;+ N  o' n6 g5 X( H* m& c
  50.   bRestartUpdater=FALSE;5 U3 B8 e& B; H  L& Z
  51.   bFinishUpdated=FALSE;& N$ y7 n' q" c2 @! P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;6 G) F3 j4 @( x4 V3 ?# a* T+ z6 g
  53.   InitChangeDataBig52GBKS();
    9 q% P1 k; M2 [+ u) w
  54.   InitChangeDataGBKS2Big5();" o! y2 b- U1 M
  55.         //$ {: t# \# ]9 W
  56.         bClickRunExe = FALSE;
    7 z. H8 L+ i2 }1 {6 g
  57.         //+ R) E. v9 e: u' |
  58. }: C3 ^5 L! \2 c  \& ^' w

  59. 7 a7 K7 A8 j+ p" S2 x
  60. CRevAppApp::~CRevAppApp()4 Q( L% `; J" z1 \0 o9 r
  61. {2 u) W% L0 m& U5 e# r( o! W' ?
  62.         // TODO: add construction code here,
    ) s# R3 J2 h+ B$ m4 P& I' ~. B
  63.         // Place all significant initialization in InitInstance
    2 }: G0 O& K$ G4 w) P% ?3 |- c
  64.   EndChangeData();
    4 I' f# m4 ~! ]( E0 ^* X4 L
  65. }: E) |" Z5 S# j- q% o* L

  66. : |+ |! k# _4 A3 |" a" u3 f
  67. /////////////////////////////////////////////////////////////////////////////
    2 c* |3 e& S  g
  68. // The one and only CRevAppApp object
    ( Q6 ~# v0 \; \7 x
  69. 9 {% n8 U% X% V3 x  M' c- C
  70. CRevAppApp theApp;
    " M$ }0 b+ h9 X2 |+ K0 k9 j6 Q3 b

  71. ' \# o0 Q+ |8 C3 c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 L! L4 W; D$ `; {5 Q) r5 `8 F
  73. {) J- P( L/ K& A$ S+ _
  74.   int iEOF=0;
    & t0 M6 V3 \7 g6 o& T' }9 y: g
  75.   char szTempName[MAX_PATH];
    9 }% p3 y% ~0 a( w- H
  76.   *szFileName=0;7 \3 G! S/ l2 O; F$ x8 l) b
  77.   iEOF=fscanf(fp,"%s",szTempName);
    . T0 Y7 F0 p- D& {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' _2 s5 o; V  _! H; N( h3 s
  79.   {) w8 g: j0 L, L3 D/ l" i
  80.     strcpy(szFileName,&szTempName[1]);
    9 l) [5 N  O2 E) t- U2 q& a3 U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # i; @: ^% U4 i6 D/ j
  82.     {
    ; o- T( u. O: m) X
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . [" i% V8 Z8 K" C$ ?4 f
  84.       strcat(szFileName," ");
    & M, g% P3 _/ m9 q* i( W# j2 v
  85.       strcat(szFileName,szTempName);
    8 v' q+ g3 t% ~; g
  86.     }
    : a2 A* W* e( k& Z( Y& B
  87.     if(strlen(szFileName)>=1)/ J  c* y) v4 z3 Z  v# D5 D& A3 J1 @4 ^
  88.     {
    , B: c& Z( i, n. u  j! R
  89.       szFileName[strlen(szFileName)-1]=0;
    ) y# v( N( p* V9 K# w* K! F$ v
  90.     }6 {1 |$ R7 t& v3 V
  91.   }
    2 w& V* J. b8 r: w9 r
  92.   return szFileName;- b) W; {5 h0 V; @- u$ \4 b) z
  93. }7 @/ n" _2 K' w) V  E" }
  94. 1 H) B+ N+ H3 U1 T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    * H& a6 S/ T# }" S$ s' A# J! O
  96. {. E9 L- A7 v  ]; @0 {
  97.   FILE *fp;7 e0 w4 R8 e) Z) _8 `) ^$ l% n
  98.   char *key=NULL;& O! x( y3 t  k
  99.   char version[MAX_PATH];
    ! Z. p1 P8 D: v1 y
  100.   LPUPDATEFILE file,olds;
    / N* ^: o2 j5 `% X' m' U# X* t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. p: [- H/ u0 Q8 M% @. r$ W
  102. # E9 ]; X9 H" E* Q" ~4 h7 s
  103.   UpdateList.clear();8 L' F/ H" T7 [7 Z2 j; h  V
  104.   UpdateFile.clear();6 l4 L/ W1 N' S( F6 p
  105.   if(GetFileAttributes(filename)==-1) return false;: g! L6 R" j: {, }2 p4 O0 B7 O$ T/ d
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : J3 }3 V( s) P; ~9 @6 }! U
  107.   fscanf(fp,"%s",version);" _( m6 Y; F9 X( b2 x
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. R+ I" w$ P( ^, u2 O
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ; S2 A7 R" g/ c4 J
  110.   {( B( R% u5 X5 b2 ]/ Z# y; p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' G; L: t2 q) {
  112.     fscanf(fp,"%s",file->path);
    - |" `: T. p' M  ~9 D# `
  113.     ReadFileNames(fp,file->file);
    : }  W/ p, f; S- W; X7 d$ ?. [
  114.     strcpy(file->full,".");
    ; U1 `- _, U7 n+ |
  115.     strcat(file->full,file->path);+ r/ x' s4 m: ?0 B6 n# v/ N
  116.     strcat(file->full,file->file);
    7 ?3 N  ]# }, p% W+ v5 z& k- W
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . @5 [. x7 y3 E+ e# |5 t
  118.     {
    ! l; k2 S6 M* E$ F* L; w6 s
  119.       file->vers=(float)atof(version);  I' c# H9 P4 x$ w
  120.       UpdateList.push_back(file->full);7 g4 o( o0 y' h/ v+ H0 e/ B' ~* I4 A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));! d' K0 f4 q' ?: `+ Z% r7 ^
  122.     }
    & z1 b% f' K9 H" s+ g
  123.     else& U  Y) T7 z9 V% i- D) v
  124.     {
    & W8 t- i- g4 E: j; n+ R3 F+ S; {
  125.       olds=(*p).second;
    ' f$ x0 _" P- c; {6 }# D, C5 k
  126.       if(olds->vers<(float)atof(version))) l* Y5 ^$ ^! ]6 A( v: U' E
  127.       {
    - m! b: }1 S1 v& U! r2 C! k
  128.         olds->vers=(float)atof(version);' Q' {2 f* Q( H4 g$ r6 \
  129.       }
    - X' y5 |3 ]$ y# j
  130.       free(file);
    : ^. h. h4 s/ o2 A% P  R0 M
  131.     }. w( ]6 @, ~  C& N
  132.   }
      d9 U0 J: N* Y) I
  133.   fclose(fp);/ R% Y' M# B$ b! f4 ]7 e6 E) m
  134.   return true;1 H& ?/ \" N- u* M
  135. }
    $ p6 u- ~# k) B- \/ ^% h' R
  136. 4 y6 Y( r% I  ^, U0 ~3 v) [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 l5 Z7 [3 a( `3 K' E9 P$ O
  138. {
    ' `, j: r( H: k4 e
  139.   TCHAR  szFull[MAX_PATH];# c. S- e6 D5 u$ y; U
  140.   TCHAR *token,*inter;2 ?% d, F* |  k1 P8 R8 ~
  141.   *szPath=0;
    ; q3 }; W- U$ ]# ?
  142.   strcpy(szFull,szFullPath);
    7 K- }$ s: [% w
  143.   token=strtok(szFull,"\\/");! V' E  ]3 P& @* l( j
  144.   inter=token;3 Y6 p9 W4 ]) ~
  145.   while(token=strtok(NULL,"\\/"))' }& B3 M: Z: Y) f: ]
  146.   {0 z4 O: R9 ?6 ^  U/ \
  147.     strcat(szPath,inter);, S+ Y, T6 f0 I2 w6 L3 }
  148.     strcat(szPath,"\");8 q- \. r6 Y* L9 i8 d; a
  149.     inter=token;/ d9 F( r4 R: a. b( `
  150.   }
    & r1 A8 f$ k: c. m# `& c6 f+ D9 O
  151.   return strlen(szPath);+ v1 f7 x6 n0 u; _' ~1 \4 ^9 W5 [
  152. }
    + X. j" [- B: C, K9 E) W0 X
  153. + I6 O) D# ~' l
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + {* ?* f% A2 u' @
  155. {  j* T" a( [! V# P
  156.   DWORD attrib=GetFileAttributes(Target);6 c( b, J- Q. ^" B$ C
  157.   if(attrib!=-1)
    0 ]9 }4 j8 P: y1 |
  158.   {
    8 m% W5 V; i7 o8 o& d" H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    . e: E% p7 g. J# I. e
  160.     {
    ' p+ H8 n. [# x0 t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);: m# G" _8 |) o4 H& Z( h
  162.       SetFileAttributes(Target,attrib);
    * s! n3 A" s3 Y) d' S/ Z
  163.     }: H. l) d$ F& Y. i9 J
  164.   }9 l5 D+ c7 Y5 t9 E7 o2 h
  165.   CopyFile(Source,Target,Erase);- [: C) Y- r5 `- C3 _) V9 Y; w
  166. }0 y( m6 B+ s( t/ J5 B) p

  167. ) J; o% A6 y+ ?2 E+ x6 n6 D
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . e9 ^) ?7 T; Z6 n% W) K
  169. {
    1 s* o! P8 D5 p7 l: X! G% ]
  170.      FILE *fp;7 c* u# x8 I& T- e: D! M
  171.      char  szBuffer[8192];8 j, R6 k9 d( j( @+ Z+ o
  172.   va_list  argptr;
      O0 p) a! Q" ]- O+ o6 L

  173. 7 A+ W9 M  i, x! R+ z
  174.         va_start(argptr,message);
    - Y1 p9 m: r( z) G, A: \3 c# r
  175.         vsprintf(szBuffer,message,argptr);
    : }. ~1 g0 N2 ^" c  q+ x
  176.         va_end(argptr);
    % e: O& _" N4 I% K7 Y8 T* a
  177.   fp=fopen(FileName,"a");2 O" l! E2 `$ c+ G; Y
  178.   if(fp); h* ^$ }3 x0 i4 U+ @. r! s2 E
  179.   {
    6 [8 r# K9 q& Q
  180.     fprintf(fp,szBuffer);% T# [0 p0 h" A; D  F4 F
  181.     fclose(fp);# V7 Q" n6 k5 Y. r2 O. C* X- S+ H6 x
  182.           _flushall();
    ) O5 K; K0 I, W0 \
  183.   }7 R0 J. ?7 V! x- w& \& ^% @
  184. }6 s& L5 ]- s" e; L
  185. " g8 s* ^1 y  Q( \
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 N$ e5 a5 p4 f+ i, L
  187. {
    6 u- s/ n: U2 \: t) S
  188.      FILE *fp;6 I- ^; B1 u! L6 L$ j( R
  189.     DWORD  attrib;+ L- h2 S( ^" p" A4 w2 V3 l. ]3 O
  190.   attrib=GetFileAttributes(FileName);
    9 Z: E7 L/ M% ^( C5 X- |
  191.   if(attrib!=-1)  p( _$ `, W+ ^. [1 r$ l. f
  192.   {+ e) B% c$ \8 O' Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 A8 x+ g- M6 g' J! E% ~
  194.     if(!SetFileAttributes(FileName,attrib))
    8 [  c4 `7 I5 H
  195.     {7 G' r0 U' h, d9 ~; \- [
  196.       return FALSE;
    . d$ r6 d2 z6 @/ I+ g" ^
  197.     }
    8 v0 v$ P. g0 `" D/ y& o( h
  198.   }$ [5 {8 V4 B, v4 r" F- @4 ~" b
  199.   fp=fopen(FileName,"wb");
    3 X% k( G* E$ h- r) z; V. y. Y
  200.   if(fp)
    + g  V5 d/ H' Y
  201.   {
    / Z. N* M- ~: {" k7 d8 l0 W
  202.     fclose(fp);
    & j) I# S! I5 [. k  i/ v% c
  203.   }7 L% e3 R/ u# d' f, v* U- I- `. f
  204.   return TRUE;
    6 l3 K, e* [6 @1 O$ m
  205. }
    ; E) H# _0 c0 D# N

  206. 5 s% n& R& v; H6 J
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 T: K7 `6 ?* R" d& C* D
  208. {1 H5 B: Y& n" q; ~! v
  209.   char filename[MAX_PATH];$ |2 ]- h) [% W8 w+ q
  210.   LPUPDATEFILE file,olds;* [& Z# W( b7 a" K7 O$ P( E/ T% _
  211.   std::map<int,CString>::iterator i;$ q; M* ]7 v6 P' ?4 c
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 k3 S/ L: O/ A9 J" u
  213.   std::list<CString>::iterator l;( |" |. c2 M; s3 V9 a# @  Y
  214. 8 Z9 T6 H* j6 Y4 r
  215.   if(bFirstUpdate)
    ! j$ D! k1 y- q$ r
  216.   {
    ; A9 ?5 Z8 u! K1 \
  217.     dwCurrFile=0;
    4 O$ k* W+ P. e7 X
  218.     bFirstUpdate=FALSE;
    / T3 w" \" G$ L
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 r6 N( r; I8 k5 k; }* H# D
  220.     {
    " D( v# P* p* u: P: X  Y% D
  221.       dwTotalFiles=UpdateLocal.size();
    1 g& K& T+ u2 }( t% D  D
  222.       dwDownLoaded=0;
    8 R7 Z5 n/ Z& [! \* l
  223.       bSilentStep=FALSE;0 J: H3 p3 G0 R7 Z# A! d# M' D& O  q+ O
  224.       bCompressed=TRUE;
    " z+ Q1 Q0 m3 G
  225.       strExtLocal.Empty();/ i8 W  o* D. P; g' T3 l! e" R( q
  226.       strFullName=(*i).second;9 t7 t& x8 I4 k& y
  227.       dwProgramState=AP_CONNECT;
    + ~% ?# z* s  W! j3 m" E
  228.       return TRUE;
    8 v( e# h$ B0 [1 y$ W# P  T
  229.     }
    : R% o: d9 w. b% J7 z
  230.   }
    / @( L6 a+ }* V( [
  231.   else if(bRestartUpdater==FALSE)
    $ F. n% b9 u% x
  232.   {
    2 A) T: j9 s( Z6 T- Z- y4 H
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())% n9 B; I9 g; c% K+ a" M
  234.     {" E- a: i& A* r! Z+ M* [8 ^6 L
  235.       file=(*p).second;  G( C& `: N# e9 E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- @" I9 T' n' v0 H
  237.       {2 D; c# j- e; U6 y2 V% Y
  238.         olds=(*p).second;/ u+ a: Q* {7 x+ Z* w
  239.         olds->vers=file->vers;: I: J& T) k- y
  240.       }
    # W( N0 G# j6 z4 G; F3 v6 G
  241.       else+ }* [2 v$ L' d7 ~$ B$ x' |
  242.       {
    % @: c" v; ^( B& c; n: y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & C2 H: \0 P# h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 i- Y0 X: X* M6 k( Y7 u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " Y' i  V( A1 }
  246.       }
    8 z: c( ]$ }" r  _+ s: B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % {/ N' h* e- O/ n' x
  248.       sprintf(filename,"(%s)",file->file);. `. W9 w; Q; _' l5 m
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: X, h0 n) f  n& K7 o
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    7 f. \* s  p. F2 P$ i: j' D( |$ J! }% b
  251.     }
    , i1 R% `% k6 B
  252.     dwCurrFile++;+ F9 }. i  m. y/ L1 @
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    * j& k) s  b/ q
  254.     {5 x' [" a, I6 y
  255.       bSilentStep=FALSE;
    ' }5 W* t, C( w( r
  256.       bCompressed=TRUE;
    # C5 a! u, `% F5 b4 \
  257.       strExtLocal.Empty();
    " {' k& {4 q: m" D, Z3 F2 J1 A" a5 O
  258.       strFullName=(*i).second;
    % K# ]- m0 S: o# \% |
  259.       dwProgramState=AP_CONNECT;, t5 i6 F# R+ J5 X' ]8 K/ Z
  260.       return TRUE;% W3 _0 P0 ]9 j
  261.     }3 k* R2 }+ z$ O; `; Y% [) z& L
  262.     if(!bRestartUpdater)
    1 T, m9 I, c9 `( G' V+ B4 G6 m
  263.     {8 c; I: y  \2 N) f, F5 h0 [9 ~* V) a% D
  264.       int iCurrSize,iFileSize;1 b0 C  w/ m( E, u  e2 i
  265.       iCurrSize=0;; \/ v4 Y* m/ q$ j
  266.       iFileSize=UpdateList2.size();' H/ u. X; C$ [( r
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");9 X: C% N5 O% ~" O8 T" \
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");& E& j& _6 [7 G7 \) }$ U5 w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( }/ b. }: V; l3 B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + M, L" N/ _6 b% h2 x2 u. R' o! H
  271.       Fclearf(".\\update.dat");
    + b$ j6 d9 A! G* r2 ?, _  j/ j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
      n- H9 n2 X" t7 j( v5 {) j
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! C' k, h/ m2 W$ W! W$ t% [; M2 A
  274.       {
    $ V' v. K% z1 U8 d4 Y: l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    , }: R! e- x- [
  276.         {
    & T0 b6 p0 I3 Y* f( C( H
  277.           file=(*p).second;
    8 T* V, q& }( D* t: w7 s6 ^* q, P! P
  278.           sprintf(filename,"(%s)",file->file);
    ; v0 ~& W! w7 H+ \, X4 {
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ A/ d. y6 G8 a3 b
  280.           iCurrSize++;
    # F: q! N( a1 T# z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ! ^; t$ }+ q* I) J8 z
  282.         }
    : X$ z) H) V9 U7 ]0 P- A% Z, A3 |
  283.       }6 k! |/ g+ N1 G
  284.       unlink(".\\update.txt");' C) n2 X! p) {" T' y3 P+ x, l  ^
  285.       unlink(".\\update.tmp");
    : t" Z; G! j- ~8 e# B
  286.       Fclearf(".\\checkversion.dat");6 v( R5 y2 Q7 _& \/ Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( B& C3 p1 [- B; e( J
  288.       if(UpdateLocal.size())8 H9 z6 W- B2 N4 Y
  289.       {
    ! a. r% n1 [# @/ M
  290.         UpdateLocal.clear();, X" Z1 [2 F0 S# X. x9 }1 e4 t. k
  291.       }
    3 y  T% H7 G( Y/ N9 ^# p7 e4 u  c) @
  292.       if(UpdateFile3.size())
    3 |0 Z, y* o& e4 N# Z
  293.       {# _* s( \4 N5 s. @6 q7 ^6 u6 T
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( s* k, y* N& U( P' ^8 X( N7 Z( P, k& X; ]
  295.         {
    , j- x2 V* N4 z$ D5 l0 z
  296.           file=(*p).second;' Z% f4 f4 V9 Q" }& b& l# s
  297.           free(file);6 d/ s1 ~/ v' {9 D( \
  298.         }
    3 ?' E" y7 q% y; L
  299.         UpdateFile3.clear();' M; e- k4 I0 _3 D+ k3 q5 }6 e2 A
  300.         UpdateList3.clear();. N7 c# e+ D( o0 a
  301.       }  E! h! `  h9 K& e5 v) E
  302.       if(UpdateFile2.size())
    ' [7 z& v; S1 W
  303.       {
    ( s" I9 X1 \/ r5 e0 Y' P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& a7 i  ]+ S. l( v( Q
  305.         {
    4 F8 S5 [- f4 e
  306.           file=(*p).second;6 B5 L9 R: b3 l2 D& g" s
  307.           free(file);1 P1 o) l" X8 E! \. }9 f9 {: ~& s
  308.         }
    . }! H. L3 O- y9 g& D% K% R' N
  309.         UpdateFile2.clear();
    % T6 I8 S9 _7 v* M" h3 k& [* N& S8 K
  310.         UpdateList2.clear();
    ' h" Z) d6 b; v3 Q: E8 F' {2 `  B
  311.       }
    % x# _2 k$ C% ~" x0 W
  312.       if(UpdateFile1.size())7 K* g) ^8 |2 [3 q, c8 {2 M# G
  313.       {( ~+ ~0 o2 X" I0 y3 v7 B2 T/ f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 ^* M( n2 l# t' x; g
  315.         {
    " r4 L/ B1 }1 J; u* }* E, a. q6 b
  316.           file=(*p).second;
    8 L5 O7 e2 U" k' P
  317.           free(file);' Z! D( W# G- |/ W3 l# j/ C4 q, w
  318.         }2 h- W* h+ K) \5 u! z3 {% [
  319.         UpdateFile1.clear();
    - v2 R  O; \8 C' i
  320.         UpdateList1.clear();
    * o6 k* ]8 \, e6 F# n
  321.       }
    ) s  G' a- v1 Q+ C7 |% x2 B) H
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) C* D7 [2 W* v: G- n6 U
  323.     }
    3 C& ~0 J% e- s9 n$ j
  324.   }. |/ T$ O: P5 [! z' T: k& M
  325.   return FALSE;' c. Y$ Y: c- x7 K- u9 H: ~
  326. }: z2 s3 H7 }$ z- T
  327. 7 w* e" P: C; {  k. |$ j
  328. void CRevAppApp::ClearAll(void)  [+ c5 r; @$ W4 e1 ~; k
  329. {/ H+ a# @% g$ y6 U  H! _
  330.   LPUPDATEFILE file;$ |  v5 f- L% I9 N; [; b# {6 v* \& T* Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 Y! t+ `( e$ e, H& J0 }& l- U, h

  332. 5 m! o" B3 j# o# x4 p8 U
  333.   if(UpdateLocal.size())$ K; O* |* \7 K9 c4 \7 u6 R
  334.   {) d, K/ \+ E8 z
  335.     UpdateLocal.clear();- v; s' D. Z7 t/ e
  336.   }" z: A# v! S2 R$ L* t2 l9 H& d
  337.   if(UpdateFile3.size())
    0 ^! i  d% R5 q
  338.   {
    5 V" n6 {8 Q1 g' S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% Y* a) c. T" \$ t  s7 N2 P
  340.     {; l0 G* A! ^/ ~6 J+ l$ G
  341.       file=(*p).second;: R; [2 a* F$ s0 M+ n- t
  342.       free(file);
    7 G' Y" |: `9 ?+ o4 i
  343.     }
    ! y  n# i& I& ^# _2 g1 C
  344.     UpdateFile3.clear();
    " D1 R# M/ ~4 ~
  345.     UpdateList3.clear();7 M7 V% ^% E. m& `9 t5 j
  346.   }6 I8 m# g, W$ B0 p! q- k9 D' s9 |- ^
  347.   if(UpdateFile2.size())5 L% @% A6 L6 {) g1 N/ x/ {4 l
  348.   {& j4 y( x% l+ g% t' M$ T. e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - |( N5 P6 d* O4 D  |0 q0 E
  350.     {: B) _4 D4 X' K8 ?- N( B
  351.       file=(*p).second;: }8 Z; A4 e$ F" s5 Q" |* g
  352.       free(file);
    % U0 d" C) `& t) C' ~* s
  353.     }8 `* T# I: {8 {/ A% l
  354.     UpdateFile2.clear();/ x0 ^2 |3 K4 ~$ ~. d
  355.     UpdateList2.clear();+ ]3 n' q& W. W' M( Q/ t
  356.   }
    & E) C* ]% P7 t# ?' x
  357.   if(UpdateFile1.size())1 R: Y, x( v2 E
  358.   {
    $ N0 G2 o6 S7 D" g8 M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) e; o5 Z  t$ o4 o9 x3 Z
  360.     {
    # z4 h6 N$ L' B  I* h% {
  361.       file=(*p).second;7 |# T. ?0 B4 P
  362.       free(file);* o' Z# z0 Z$ P# W5 b1 U5 C6 ~
  363.     }
    4 v. }% \9 T2 X0 s1 p. g; Y& T% D
  364.     UpdateFile1.clear();
    & T- k+ m) G7 S4 m  \
  365.     UpdateList1.clear();! b+ _8 L1 g& d! @0 u" L+ v- g! ?4 b
  366.   }
    6 G: Y, e  c9 K  S! w
  367. }  ) D6 A' W! W; n) _9 A& a' V0 J5 ?
  368.   
    " m; l! ^; p3 R! w$ W' y
  369. BOOL CRevAppApp::CheckLocalVersion(void). f/ T9 x7 s( e8 F, c3 v, |+ }
  370. {
    4 |  |; g% F) h4 ~! i) G: h# v( u* A
  371.   int c;
    1 q+ Y2 E6 y& G2 A- }$ I' K
  372.   LPUPDATEFILE file1,file2;
      \% o8 A; G  W% D0 U" m3 h
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    - C2 D  O; f  T! o# J" L% J8 o& L
  374.   std::list<CString>::iterator l;3 ~  J6 c7 l- e( Y, s8 U; Z. q

  375. & x. J/ M0 y9 ]2 F
  376.   UpdateLocal.clear();
    : s+ }! G3 V; u" C3 @9 ~5 k
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ ?8 d) m  P% @' K
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    , y  b0 |; Z" F, C. `( {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' f( l; J; {* G7 X! M" Q0 q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - q' _5 }5 m* v7 U+ H! G1 r  C. B3 ~
  381.   if(UpdateFile3.size())  E% R; ^# c3 Y" w; t  V0 N! C
  382.   {
    3 W( |. Z* Q2 w4 f5 F
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 E; f9 h6 E$ [# {) {) V; c2 Z& D
  384.     {% |2 L( W+ v+ C# O. K* q2 o0 X
  385.       file2=(LPUPDATEFILE)(*i).second;1 [! \3 ]' d6 X2 Y2 O+ C* U2 u$ h, f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % {( B3 J; T+ n1 D8 w, l9 B' r' `
  387.       {2 l5 D4 x2 _2 R1 v
  388.         file1=(LPUPDATEFILE)(*p).second;
    " ~) D& i% V/ Z, r+ `. p
  389.         file1->vers=file2->vers;
    ' I" c. s5 H9 x& ]
  390.       }
    ( ~2 r8 |8 I+ f: N& o
  391.       else
    8 m# M+ C& q2 y% }1 a4 f. w, O: R* e' y
  392.       {+ J) c6 N* ], ]3 {: i0 Q* j4 F4 M4 _5 E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* y1 [, k/ V: v. r9 @- i- Y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " n& O+ ]" S% \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));" |. i0 r7 E) @7 G& u5 |
  396.       }# a0 P, [& J7 R  d# p+ r
  397.     }4 V9 {/ b2 p/ G# C, t) v
  398.   }, n; x$ r/ A2 ^9 _3 J4 I9 M4 h
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 J  k3 T" @5 h7 n
  400.   {
    ! W3 F' l+ q0 o2 `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ; q- |: v. \3 I9 x$ v* @! a6 X
  402.     {
    # o- _4 T  @) o: I+ k- C
  403.       file2=(LPUPDATEFILE)(*i).second;
    - v) H; x/ T! g1 k' K% \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& u# K; R" U. {- t) X
  405.       {$ d: c% I/ k" ]2 F0 u2 c3 Y& D
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 K* l1 P% Q. @0 L  k
  407.         if(file1->vers!=file2->vers)
    ' F) _5 x6 X+ h
  408.         {4 g. O4 ]% g( g( o) [3 z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / r* j& Z  c5 e8 N2 X6 y: F
  410.           c++;
      N2 j/ b$ n- \1 e" K  D' P
  411.         }
    6 u) B  [, W5 L) n* N2 `2 Y
  412.       }
    . n7 x7 h: T: t) b
  413.       else. u1 Q# h( X  p0 ?% g
  414.       {9 @6 v5 e& ~3 G( \( V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 y9 j1 m) _  Z! k2 S- `- |
  416.         c++;7 h6 f4 N4 K5 I" H
  417.       }* ?( u! }) Y  O: }4 X& S# I
  418.     }
    9 I3 t9 c/ }& J/ d0 O
  419.   }5 d0 g5 I) M+ b; a% c+ V
  420.   unlink(".\\DownLoad\\update.txt");/ {8 {# Q% S: M. R9 T- k5 H6 W
  421.   if(UpdateLocal.size()) return TRUE;
    0 _& w2 F: o5 F
  422.   else                   return FALSE;
    + g4 E1 P! k# E: C
  423. }
    ) |3 {; X/ E: i
  424. " g  t7 n5 _, @( H( ]% w5 a
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ Q2 r( M% |1 E7 |( ]- Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * e9 D) |! q2 n! R

  427. 4 V# F( L, X  o* F+ d4 O. m/ u

  428. 6 q; B5 l% ~# V# Q- R
  429. ( W. e/ M8 w% P9 C$ b
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# T% b8 r8 f0 P! ]& B
  431. {
    1 n- k9 q+ X/ A/ l6 U+ w
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ A4 `7 o1 }0 k( F5 L8 f6 S4 H! M( ~
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 U' E4 v' T: Z3 y
  434.   {
    + }$ j" d, Q& ~6 P7 t- `# `
  435.     char szLanguage[50];
    2 y6 [4 Q: j1 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : b" F% M0 _% S( {, m
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . I3 b/ L" d3 ?" r
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    $ f' Y0 d0 x% h# b. K/ {7 i9 }
  439.     else                                   m_iLanguage=ENGLISH;
    ! x! R& `. m8 }: ?) |
  440.     char szRegister[100];
      ?! h' }7 h# l; n6 K( m+ A
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : D! q$ i0 y( Y7 o) M
  442.     strRegsName=szRegister;& f: q5 B( P, o" E" g1 M
  443.     char szPatchURL[100];
    & F( F  z/ M0 e2 Q$ W/ P' I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; v& y$ z' b  M9 j* x
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( g) G* Y% z* J, `; F9 y" M4 f
  446.   }% S7 A2 C% I9 R$ ~. r
  447.   else2 l. K9 M8 m. D* Y
  448.   {2 t3 N8 D" y/ s; w! k( |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * \1 z7 p. W; s2 B5 d8 H2 t8 G
  450.     strRegsName=DEFAULT_REG_URL;
    / ~( p  g/ |% X
  451.   }. j* B- b' W' T' R& A$ _7 g; Z
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ; c7 t" y* I" v9 S" a- Y( r! x3 l% w
  453.   {
    ' S  j; D, T8 D. i5 ^7 I7 p) l
  454.     char szIP[50];$ u3 d0 m# N+ {% v+ [/ F2 U
  455.     char szDIR[300];
    # x# u+ F3 V) n
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 Y) J" _' {7 B6 }
  457.     {; Y. V' H4 ?0 s0 j3 _  w3 O7 `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");3 G5 p. z. m# [  ^
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * {2 Z9 @7 J1 a& M$ m+ x3 B
  460.       strHostName=szIP;3 a" s: ]; s/ F
  461.       strHostPath.Format("/%s",szDIR);7 C: C  P" @5 b+ E8 n1 O8 w* Z# }
  462.     }5 D0 V0 E9 y7 g/ g" P
  463.     else
    0 A4 t* g% j4 ~+ z
  464.     {
    . x# i8 z# y$ A. y5 V2 [; R* U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 L" p/ x8 B3 q
  466.       {
    + [; T6 E6 [4 e- K0 h5 T) n
  467.         char szLanguage[50];
    ( _2 \& a: v& D  Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- x& @' X( T1 ^, z/ a6 f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( ~9 X, J5 w6 @& {  D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / F) _6 g- @  m6 Q  p$ D! g
  471.         else                                   m_iLanguage=ENGLISH;
    2 x& N7 j$ t" Q6 j5 [  X3 s1 n
  472.         char szRegister[100];6 C7 E  f5 M+ A" t5 U; N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' ~- h3 B: R3 k+ R% T; a
  474.         strRegsName=szRegister;
      D% D8 ]9 p. \9 C
  475.         char szPatchURL[100];
    / z* M1 U7 ~4 N5 M
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 v4 b6 u2 u; R) ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . e+ b1 o6 \. Z# Z: D
  478.       }
    8 d8 q; z5 V4 I4 c) g7 U
  479.       else
    % \  U5 @4 {3 K! Y) A. ~9 k
  480.       {
    , ~1 r$ o2 S! U. j& q' N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' \: y# B) r, P) }! I3 W# T" c
  482.         strRegsName=DEFAULT_REG_URL;
    # E  v$ A+ p, u
  483.       }( m) Y# U( M9 v9 p& ~3 o" m
  484.     }" Q" s' D6 x! u* \: n" d- F  L
  485.   }  Z! w- ^( r- K3 [8 Y: l' r
  486.   return true;6 h$ I+ U* j  q3 H3 n& q
  487. }+ b, G# Y6 x" d) a' P  I+ Z: J
  488. " h1 r& g9 k" k" S5 s+ Z/ c
  489. #include ".\ZLib\unzip.h"
    ! Q, O4 y' u/ m1 ~4 v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( A. m% Z% K9 W6 i: A2 G
  491. /////////////////////////////////////////////////////////////////////////////
    ! M( ^# }* {! ?* e: @% n5 }7 s
  492. // CRevAppApp initialization
    & B: Q- S7 A7 s2 S" n7 V; I: ~; }

  493. 7 j1 }* o6 Y2 @2 G4 R% J2 X
  494. BOOL CRevAppApp::InitInstance()
    8 _3 A4 L$ I3 @. X' I' L& i- I+ c
  495. {* B8 Z2 W4 f. `
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    - O3 p% ~; X, ]0 W

  497. , O* h! V; j6 J2 b! _" p2 G4 L! H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);/ f, {" f0 u0 ~7 Z" i8 r: \2 Z, {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 T! k0 E5 p1 O0 F& E9 R
  500.   {
    0 y9 O- {; T1 q& `1 i5 q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! c1 i0 v9 Y% T7 O+ d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; ?  y9 W$ R) z8 r5 U2 M4 ?* U  y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    - ]5 |( S- T8 Z5 [+ z3 w, Q, d
  504.     {
    : h( C0 F: O3 a" y
  505.       strcpy(szPath,szPathTarget);: T8 P1 s; H! Q8 q/ [* Z5 |1 \9 e
  506.       SetCurrentDirectory(szPath);
    % q' H* F7 o( W& Q% J
  507.     }" a+ R5 ]: p+ \2 N& M% l
  508.   }
    - Y: Z4 N& _0 _6 J8 @. i* X9 x4 p
  509. #ifdef _DEBUG
    + s4 C) h" t: y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , Q, q' D5 O" Z* f/ q9 V0 M
  511. #else
    % Y+ G& D& X6 L* L+ f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , \' p, [, a4 V7 p( C0 |1 y; g
  513. #endif, O& r. b6 F1 q' B8 t& v
  514.   {
    * M8 k8 h. F3 ^- J. Q
  515.     char tempFileName[MAX_PATH];
    4 W) o# v2 N" V7 [
  516.     strcpy(tempFileName,szPathSource);/ O  |2 P- Y& t7 \0 U
  517.     tempFileName[strlen(szPathSource)-12]=0;* q$ C/ O1 W8 Z6 ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    / W% j5 }( O8 H8 ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    1 A5 Y" H6 Z: H
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ c) I3 g" J: L
  521.     return TRUE;
    # L. o! [, d' U1 l3 Y# C% F2 ^
  522.   }
    9 C" `6 c; f. l3 X+ A* _
  523.   // Nuke 0118: Delete run.exe8 m" r$ t$ t7 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );! k) R2 k8 ], t: a0 N! p# _  V, E
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - c5 Z7 w2 L7 w% V$ y9 A( {
  526.   if(!ReadCfgFile("Config.ini"))" N1 r1 z- U; C3 l9 m: i/ y" n
  527.   {
    % v* v/ L! D- \8 [( s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    % y& U& N+ q3 n; w6 _- E' R7 b
  529.     return TRUE;
    & o3 c7 q- p" v5 X/ u
  530.   }/ ]/ \3 C+ D6 a" }. V
  531.   HANDLE mutex;
    % P6 @9 P& A0 u$ T/ A
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    5 d4 W' n  G' p/ r7 a9 `& e
  533.   {
    + n: F8 d% f- L& N' `
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# t$ h4 |( T6 a/ A) l, W3 T
  535.     {! q9 D" b3 G  N( w6 K
  536.       CloseHandle(mutex);2 h" u" Y. Y. f( c! R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * F4 K  R( x* n* T- G; _
  538.       return TRUE;
    ( ~, W2 W/ r% ^3 o; F9 u, y
  539.     }. v4 r8 r6 q: ?+ P( [  H
  540.   }  
    ( G( m1 L2 ?5 [& D% {
  541.   CloseHandle(mutex);
    ; X9 t; @& e( F3 W) u* {( S, u2 q" x+ r

  542. 1 {. f/ n& {' B9 R1 B4 ?/ D! d" p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);8 V) H/ F9 I# p& F) @4 j
  544. 2 T. t' {5 O2 {$ Y  c. |
  545.         AfxEnableControlContainer();3 j8 |6 {7 h# G3 m1 J: J+ ?4 c  u$ G

  546. / @% Z" A; r+ H$ u" b' y7 \
  547.   bCanUpdate=FALSE;
    ; a+ D  u5 v9 Q
  548.   dwStartUpSteps=1;! Y; u  n" @: |% _) _- R
  549.   dwProgramState=AP_NOTHING;! r' a% O8 q9 g9 E2 F* }5 t
  550. 7 L3 a4 m* Z2 H) j  C; M: @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " {9 v1 K' W! n# I+ ?) t5 Y7 |+ c9 B
  552. ) G" Z/ }. C$ d0 z: `/ R" ]& N. k
  553.         // Standard initialization: c8 G* _* c" y) N2 a2 ^
  554.         // If you are not using these features and wish to reduce the size
    # d) M6 h( ^/ s
  555.         //  of your final executable, you should remove from the following
    ) N8 T1 ~& X$ R) [
  556.         //  the specific initialization routines you do not need.
    % T# v  _, L, c* K0 Z6 n
  557. - d& T# A3 U; L) y+ m0 U, t
  558. #ifdef _AFXDLL& ?( @% o: [) D* d8 p% V
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL9 _3 }7 E; J7 j, l
  560. #else8 V0 i6 T( k" L! Q/ g9 T
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " A) c, g: C& y7 Q* [
  562. #endif
    + k  ]( C' k, f$ T

  563. 8 C! X5 l$ a  z% a, d9 k% k# O. D
  564.   dlg=new CRevAppDlg;$ f1 T# J* v- ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 e+ ^+ u  n+ M: z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);. w( ?  P: {$ S2 Y6 }$ ?
  567.   m_pMainWnd=dlg;
    5 E8 M! b) i% B9 `: |

  568. 0 |6 Q' q: u' |1 h' A, D/ e" o/ d& e
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);. Q+ h- {3 b% U$ J% d  [3 q

  570. ( C; x5 b6 d  E( p* u5 K
  571. //  GdiplusStartupInput gdiplusStartupInput;4 O/ ^0 p7 \3 f3 A- }
  572. //  ULONG_PTR gdiplusToken;4 i' Z6 w% \' ^8 T
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' b9 k/ _& `/ q' I2 T8 h8 w" L2 ~9 W
  574. : K. _) \- {2 v  `7 C" ?& E4 g* w
  575. //        CRevAppDlg dlg;
    5 @5 N% d5 s. z$ M
  576. //        int nResponse = dlg.DoModal();
    7 _, Z: a6 T7 @0 J5 R
  577. //        if (nResponse == IDOK)
    3 o6 _0 ^! s& s9 c
  578. //        {
    , F% `0 j9 l# c$ s
  579. //                // TODO: Place code here to handle when the dialog is% U1 L2 Q. F0 u1 C5 _8 ^3 k2 L: U
  580. //                //  dismissed with OK7 \* N8 y% D! n' f# ~+ e2 v4 g0 I
  581. //        }8 C# R( I7 d/ b2 X" k
  582. //        else if (nResponse == IDCANCEL)) N+ B* m+ n4 k; l
  583. //        {0 q4 a! t/ r3 y
  584. //                // TODO: Place code here to handle when the dialog is
    ; F7 ^& J# R/ z. R
  585. //                //  dismissed with Cancel8 Y9 t' q8 B. H7 `) p& G
  586. //        }9 l* X. d' L1 U- y7 K9 e

  587. 8 b) R1 o( V$ I# c
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * H$ n/ h( F4 E  I
  589.         //  application, rather than start the application's message pump.( B# h9 m) n1 F
  590.         return TRUE;
    ( R2 U8 a- Z: Y6 R; `3 S! j7 T+ z
  591. }
    ( h/ W. k, n& x1 X7 d3 p& V' P
  592. 7 ]: A) q$ V* u2 w9 m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)% q6 P7 `7 t& Z: z$ ]' o
  594. {
    # C! h: ]4 F5 Z% m. ^- P6 i
  595.   int i;( K% j: v1 ^6 |
  596.   char *szRet;
    ! B+ E* T6 x/ E) m: D  \7 t

  597. - f3 ?: z2 g6 N4 d# ^
  598.   if(pSource) { itoken=0; sztoken=pSource; }0 }2 v* E$ x% U8 _7 A
  599.   if(sztoken)
    6 a. m  B) w& _
  600.   {6 S' `& ~  e3 e  Y" G. L9 Z
  601.     szRet=&sztoken[itoken];
    : b1 z5 n0 L2 Q% f0 t
  602.     while(sztoken[itoken])2 i, M. L) o5 t5 k$ l, T
  603.     {7 u. K# H6 Q0 `- p9 E7 G4 |
  604.       for(i=0;i<(int)strlen(token);i++)
    ; b+ w& w7 X, a
  605.       {' J  s9 V: }0 V+ ~
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * v$ l! M# F% l% Y: J4 x" _
  607.         {
    2 ?2 h% j9 h( X3 p  L+ ]
  608.           sztoken[itoken++]=0;: L) R' M9 i8 l8 m. F, m$ }; w* R' s
  609.           sztoken[itoken++]=0;0 Q& W1 Y) V$ }
  610.           return szRet;
    , g2 K0 \) l* u+ Y6 V
  611.         }- z8 d, t: [4 V; x3 ~- v
  612.       }
      `( U" p' a4 w; M
  613.       itoken++;5 h, b' g# f. f  T& ?- a- _) s
  614.     }  N) N$ j' B+ e8 x6 m; T7 G4 b9 k
  615.   }. k+ Z1 ^  B% ?; @/ Y
  616.   return NULL;$ q1 k; n3 b8 p
  617. }
    * _% ?' G/ `$ c6 ]/ C9 m
  618. ! x) |8 X5 A3 D2 `
  619. void ProcessProc(long Total,long Current)
    ( `, V( S  d4 k# x3 X1 c
  620. {0 ?' O, R& v7 i. e  `6 T
  621.         MSG msg;( Y0 T; m9 {4 j  X1 c" O0 T
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);' D" a: Z3 }# b7 k, s$ ^& x! v; g8 S5 S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 s: \( F/ q9 X+ a, u# R# j3 s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) C6 ~" I  g4 ?/ q4 A" y4 t
  625.         {8 T# u/ F) l( g8 j
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! V& \8 r! m0 Y6 M  x
  627.                 {* b8 Y7 }; f1 P  ]
  628.                         return;6 ~5 |  ]! z. O* m
  629.                 }
    9 y# K3 z3 ^5 Z$ Z
  630.                 TranslateMessage(&msg);
    ' \9 g& |; ^9 v$ {6 W
  631.                 DispatchMessage(&msg);
    : D! r/ }/ F' d; k
  632.         }        " O7 a9 _$ ]% \+ }! R5 \
  633. }5 y5 {& o! T1 {4 S3 f- t+ G4 N8 v

  634. 3 p9 ^- y0 ^& y9 ^; l* {) E; C
  635. BOOL bFirstChar=TRUE;4 W. M7 V  U2 F
  636. 1 W2 U8 Y# u& Y+ a" T0 Y( ]
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 N# d  n! @$ _* g+ x& D* g
  638. {' v7 \1 J: \! Q. h* A2 M
  639.         // TODO: Add your specialized code here and/or call the base class
    ( ?& s+ g8 ?  l  E3 S7 h1 a$ D" X
  640.   switch(dwProgramState), m1 u1 e" F+ Q* L) q3 x
  641.   {/ @. F4 a1 d0 Q+ o* ]  h
  642.   case AP_NOTHING:
    / V3 q0 ^$ V, N3 o  h6 O
  643.     switch(dwStartUpSteps)
    ! G  p: z* L, ?/ u6 G; H) w
  644.     {1 n& l5 e2 Y# W0 Y
  645.     case 1:& [6 M2 @5 ^- A! N
  646.       {
    9 @% B0 b( {: \, s% k8 A
  647.         int i;/ s( V* t% F* o8 i
  648.         CDC *pCDC=dlg->GetDC();+ s# D- X5 n2 w
  649.         HDC hdcwnd=pCDC->m_hDC;0 ]) s( c* c, B$ {
  650. //        Graphics graphics(hdcwnd);. k$ B# d0 c( v& r/ n/ T: {
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    " C& v% Z2 x  D) D4 O6 O! J" \5 i
  652. //        INT iWidth=bitmap.GetWidth();0 T+ B! i2 }/ d6 j+ q8 n
  653. //        INT iHeight=bitmap.GetHeight();. |3 c: z% ^1 [, m: e! d
  654. //        Color color,colorTemp;
    6 ^' j. j, j6 A7 I) i0 b- g( H
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& n8 y: Q* o9 u7 `
  656. //        {
    . t0 t6 M; V, r. p8 Y4 z. }
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 E6 F8 B1 d4 `0 w5 ~" O
  658. //          {! Y  O+ [- Z- [3 |$ x$ I- y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    / _! K) b2 J3 }+ {, f
  660. //            colorTemp.SetValue(color.MakeARGB(+ p$ Z1 C. R+ ^" k
  661. //              (BYTE)(255*iColumn/iWidth),
    " q; x" D; s! Q* y1 V5 R3 I
  662. //              color.GetRed(),
    % Q1 X# z, m' I3 _  }$ B
  663. //              color.GetGreen(),
    , B/ D4 e3 j. b% n$ z" j
  664. //              color.GetBlue()));
    0 w; E0 v4 w7 \4 t
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # S- B( y* `" m$ A  x, p2 U
  666. //          }! F! W/ l1 {# F% Y( ?4 p
  667. //        }- j: x% g$ m9 X2 H0 w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
      j& B, a* |5 i2 G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 Q! G5 G! ~# |, f" C7 s1 Z. J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
      `& F: z/ i6 U8 e, ]& |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ @7 d: \+ X6 l2 v. V' K
  672.         for(i=0;i<240;i+=8): e/ |2 T0 O, W* k, p
  673.         {" i$ P+ i7 Z) J$ I3 e7 n
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 v  a  a; o+ X
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 Q5 H5 h% U$ ~8 ~8 u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 O+ Y# C3 Y$ i- O
  677.           Sleep(33);
    " c! @9 L' w# Z9 x
  678.         }6 n4 t# v* J/ _& v$ l! c
  679.         Sleep(1000);
    7 `: L- m% T5 e; V% f& I* S. |
  680.         for(i=240;i>0;i-=8)
    + L: e# D+ r- z  r
  681.         {( ^. F" @0 u- \. i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 _  ?9 f/ g- L# v
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" @5 U# ?5 e" M8 }# r/ n! n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 p2 B% k# h' o5 n! a  o) }3 s
  685.           Sleep(33);& N3 Q1 ?  s( j5 ^
  686.         }
      A; C* s+ B. v6 v$ C' w3 N. H
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 I* ]4 X9 \; Z+ p
  688.         dlg->ReleaseDC(pCDC);
    , j4 x  q- f; J, m2 W7 A8 a
  689.         DeleteDC(hdctar);0 s& T! c7 K/ i( s" a  l1 H
  690.         DeleteDC(hdcsrc);4 V3 S. _' Q: o
  691.         DeleteDC(hdcorg);9 [& a6 W2 {2 p5 c- ]
  692.       }5 x1 Q% J  Y6 j% [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 h: C0 S, y/ R3 x9 [- g' h! S
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    4 P$ ^  a: {$ `! M" h( A  k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");6 b5 y2 ~8 \. y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 a; _# n& f1 H" t1 H
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 u: Q8 Q! Q) l$ ]- @! y
  698.       if(!Dn.Connected())# Q( O6 |+ W9 ?3 P
  699.       {9 B" a, n- ~* ~; f  ]6 z
  700.         dwTotalFiles=1;* Y) ]) V# `) P
  701.         dwDownLoaded=0;) |! z4 u# N- y) O4 Q) d
  702.         bSilentStep=TRUE;
    & }3 D0 f1 u+ s, s& q0 L& c
  703.         bCompressed=FALSE;
      _) i! r) ^( [0 K: ]- _
  704.         strExtLocal.Empty();6 m* Z) K; P4 \* f, h& u
  705.         strFullName="readme.txt";  v: D# L6 b# C4 K1 H
  706.         dwProgramState=AP_CONNECT;) w; e& H$ l7 V# p0 n! D& Z* C
  707.       }6 f! w: @% Q8 w
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , l4 b& A# z2 F: A: c9 P. K
  709.       dwStartUpSteps=2;
    0 [* [% H9 n) C1 i6 U/ \0 ]# C
  710.       break;
    + g4 V& S. u+ @( n; C) c2 y8 `
  711.     case 2:
    ' E/ j; K. k6 j
  712.       {( {0 B% v6 j$ ~8 R
  713.         int iEOF;
    ! V) a0 i- K& ?$ ^& d4 W2 G
  714.         FILE *fp;
      m* a+ T6 k7 d  l# m
  715.         char szString[512];: A% F( d* f( |6 O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: [: m) z. _% \& T9 r- e  `. |3 c
  717.         if(fp)  V* v$ F% b/ {* \) w, ^/ n
  718.         {
    3 Q* ~, ~9 P1 c! ^0 T% @% @$ U. t
  719.           do
    ; s8 F/ A  S9 d* g$ ~6 ]
  720.           {' o, Y( i3 J! Y( Z+ b
  721.             iEOF=fscanf(fp,"%s",szString);
      H& _7 V! x% z4 r
  722.             if(strlen(szString))
    + V- A6 x1 j) B
  723.             {
    ; p7 w. v8 L4 z4 |
  724.               if(bFirstChar)2 O% p! C* N) k' F
  725.               {  P) F2 j2 F2 b; E. b9 ?, |$ ]
  726.                 bFirstChar=FALSE;6 d- w% i  \6 J1 n3 }
  727.                 bConnectIsBig5=FALSE;5 z% f' K5 A0 S0 i9 i" z2 m
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. p0 w( b' _- K
  729.               }
    6 ~. A& o% b: l; P5 d
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      ]# E% C' u$ ~. Y2 \$ o6 H& K& \- }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% W8 O( @6 m/ |3 G/ l6 f7 n( g
  732.               dlg->m_ListText.AddString(szString);
    * O8 {  F) @9 V: Q: N
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 l5 m7 a: v9 u2 {
  734.               *szString=0;
    * f, Z6 R, E3 N! s) g* D% T- [
  735.             }6 B0 G% g, H& I) @) ]/ [4 d
  736.           } while(iEOF!=EOF);' J, l7 G5 }: P% X1 C3 O7 x
  737.           fclose(fp);
    5 v: w7 V- ~( C- O/ _& F8 J3 e. T. w. H6 z
  738.           unlink(".\\DownLoad\\readme.txt");" T  u! P2 z8 A9 F' [6 W
  739.           dwStartUpSteps=3;
    : ?+ v& u" R) h3 c2 h; O
  740.         }
    / k( S1 T/ d; _, P. J3 x2 t
  741.       }# M, N! A8 {) @
  742.       break;
    4 f! m1 P0 l. V, I) c; h2 R3 F
  743.     case 3:& a; ]* ?7 }" I# G6 s; U
  744.       if(!Dn.Connected())
    & I! c$ ~, g/ |( r! z+ j
  745.       {
    3 b8 q( T( P- {
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ {; K7 K; N- N$ Q
  747.         dwTotalFiles=1;
    - Y4 h/ `; J: D6 D) e
  748.         dwDownLoaded=0;/ ^* S9 @, R) u
  749.         bSilentStep=TRUE;8 t" G* \/ t0 O  J, O
  750.         bCompressed=FALSE;
    9 n! a; y8 i9 P" z" }' j
  751.         strExtLocal.Empty();% j: X/ h  b. R( D: D* i( u
  752.         strFullName="checkversion.txt";
    1 y; H* L6 U* P3 M. i
  753.         dwProgramState=AP_CONNECT;
    + |, a5 f8 x* L6 H' L3 C7 t
  754.       }
    " E9 f: w8 b# l9 z
  755.       dwStartUpSteps=4;* `5 k8 ~, U( x8 K. a; @
  756.       break;
    5 }4 |: v) a/ K" e7 {7 Y
  757.     case 4:% m+ ?9 P. d. p
  758.       {
    * \6 q9 }+ t* G/ d8 f. i
  759.         FILE *fp;
      e! [& p  F" {# s/ C
  760.         char szString1[128];  |9 C" s, n+ T# _
  761.         char szString2[128];% A, d8 w1 E1 ^% b# T3 V: e
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' e" J2 C3 R: e, D, A
  763.         if(fp)$ ?- M2 Q* Q" W! W
  764.         {
    - L+ g7 J1 e7 l/ G  f5 `7 Q% k: a: d( S
  765.           fscanf(fp,"%s",szString1);
      ~, H, ], O5 @
  766.           fclose(fp);: l+ |8 Q; _0 |0 d" d6 ]) L
  767.           fCheckVersion=atof(szString1);
    , h7 b1 x5 h* i  J) v
  768.           fp=fopen(".\\checkversion.dat","r");* C/ G9 `, R2 i6 E: P
  769.           if(fp)/ |! @5 a/ I* m, D& M- z/ {5 {
  770.           {2 @) Y0 i: V+ }) C- P4 [6 R+ [& i& V
  771.             fscanf(fp,"%s",szString2);: ~( W" J* a% q4 Q
  772.             fclose(fp);
    - m/ q: B) [3 ~
  773.             if(atof(szString1)!=atof(szString2))5 b0 B5 @1 _& V- l* C7 O1 j4 w2 V
  774.             {
    ( a' a5 A# k9 g$ s8 ~2 d
  775.               if(!Dn.Connected())- p7 D5 N# H8 N8 B
  776.               {
    + p; {% P5 o6 h4 E3 B
  777.                 bFirstUpdate=TRUE;5 A+ E- P2 J5 c1 N4 D
  778.                 dwTotalFiles=1;
    ) t4 s- [8 ^; o( R
  779.                 dwDownLoaded=0;6 o: p" T3 I; ?2 N2 L( K# D( ~
  780.                 bSilentStep=FALSE;- z& `. T4 ]: E* _
  781.                 bCompressed=TRUE;
    3 S6 T7 S. \: |  d
  782.                 strExtLocal=".\\DownLoad\";5 G% d. F) F8 K$ O5 n
  783.                 strFullName="update.txt";
      ^* s" ^4 y& M2 l
  784.                 dwProgramState=AP_CONNECT;
    7 N# S( l& r' e6 t* J
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 u- X! a1 H7 j" q+ V6 L4 ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 F0 J/ c5 I# ^7 f1 J
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 O! p' x- r/ ?+ U: M0 L

  788. , ]0 Q: B7 U" w; @4 \0 t" p
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 S1 N1 B& u) `- f% t
  790.                 unlink(".\\DownLoad\\checkversion.txt");. H6 ?8 r6 K/ D. b( u, X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 ?0 H  R. u; x6 N! a3 }, J. r
  792.                 {
    : l4 j! O' {8 Y" [1 {; l3 ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ a1 P9 A& D; x! T3 C
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # [7 D) [+ O7 t; w6 u
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    / h& s5 d7 e+ k) `* h5 t( r
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ^: I6 j4 `% S
  797. * R: }7 I3 W: ^6 l( R' K! l# n
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , Q, C( E+ k+ @( H' n! C& X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");5 _- w! s$ l& S) W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 @. p: b* `5 U1 j2 O& O& Y
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' L# w+ O/ T, {) P6 d
  802.                 }
    5 v0 T" _: v6 `& ^. b( y- f
  803.                 dwStartUpSteps=5;
    6 M" U( M1 R+ V7 n  _
  804.               }, _$ c  ~/ W# b( a+ c2 G$ @5 k
  805.             }* P) {# x# E5 j8 L8 f& d; Q
  806.             else
    0 j4 L" I0 o. \7 j" F: W, r
  807.             {  X: R+ k* @8 Z; Z* Q0 o
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % y  w3 C0 `$ |4 N& i
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 J/ I6 c/ l2 e6 C" D1 L2 L1 i' b
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " r/ {8 C# D7 o" G$ a8 Y9 e- G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    0 Q$ p' k$ h: P* u. O4 J

  812. ! F; z0 X  }6 D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 i/ b: x& F3 o7 l8 u1 j- i
  814.               dwStartUpSteps=99;
    $ Z5 _) o. x& R5 Z1 b5 Q3 t5 Q& X# w3 d
  815.               bFinishUpdated=TRUE;4 n3 [5 v$ e* c; s. _) c/ t
  816.               bCanUpdate=TRUE;
    - A: t. Y# g) h' c4 v' C, h2 C  p) [  P
  817.             }
    ( p) W  r1 T) j7 O
  818.           }
    8 B  \# i. e, Z& J, c
  819.           else4 o5 M% p# N6 j* Q; J: M, f
  820.           {
    7 X7 J5 E7 w, q0 n$ ]
  821.             if(!Dn.Connected()); o) }& E& N: `
  822.             {9 |; {" M2 {; f6 I4 X
  823.               bFirstUpdate=TRUE;
    ) Y" V3 d' G$ z+ r
  824.               dwTotalFiles=1;6 M$ w/ W, V6 i" C! w! u# w
  825.               dwDownLoaded=0;
    ( i0 l' d% @+ A$ ]7 m9 g: W* a3 D
  826.               bSilentStep=FALSE;
    2 W5 A& @$ M- z; J( @, [( R
  827.               bCompressed=TRUE;
    / z0 b* j; M7 n3 w7 y: d5 q. u
  828.               strExtLocal=".\\DownLoad\";# }0 O1 c  l- {% u
  829.               strFullName="update.txt";+ D5 U  [) g0 C' l
  830.               dwProgramState=AP_CONNECT;) m$ P+ v2 \  p' A3 V6 C
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 s4 U2 e0 B7 @2 l4 |9 T& m4 t; {& l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 x# k4 T6 z$ H" E- Q( C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");! q" Q3 R+ q; \2 w8 m
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 Y2 v: d1 R. R4 _. w& O  _
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 D1 M( w$ F& f# g, M7 N7 U8 E* G) u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- F) a8 \. ^- I  e6 d5 V) F1 F
  837.               {- }& Y, S& t4 N+ \" @, K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ( [4 H1 |6 k) j4 e- _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 u1 |8 f' _$ j/ _/ S. b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");9 \) h$ b, U" L  u& V) d2 ]" Q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + V1 P7 q8 f9 F& O: I$ }4 X) `
  842.                
    - R4 W) u; S& o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 i* ]8 z6 u9 O( b7 k
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 q# i6 b: s& ]! Y, {! R% j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    " l& C0 Q& U) j- g+ h. ?
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' C( W) d2 J8 y
  847.               }8 r9 L; W6 p/ z9 @3 z; P2 y; x
  848.               dwStartUpSteps=5;
    8 E# A4 s" Z. ~; V7 n
  849.             }& S1 |/ s! y- @* H
  850.           }
    ) Z! Z6 O/ o2 U. N1 {
  851.         }
    6 t9 V8 w& ^6 x8 B; [
  852.         else  D$ v! ?5 Z4 e1 B. h
  853.         {1 \3 z  W7 y$ B7 }
  854.           dwStartUpSteps=3;
    3 j: e& |/ [5 s" z4 U" N6 }
  855.         }
    " s* [! B4 J1 g8 V: j: ~! a
  856.       }
    ) t& V. Y: w! x/ g: e# h( M
  857.       break;. q, \7 J5 t* X( l6 d5 ?& e
  858.     case 5:; X8 O, h, ~- g! X6 r9 }. T$ k
  859.       {
    6 ~6 w+ r( X9 \1 Q3 {
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    + m8 S' ?  u' ^3 [. g
  861.         {
    8 P( Y  @, d( N4 o. M$ E% [7 F9 ^
  862.           int opt_overwrite=1;5 t6 K6 h: f/ W) f* P
  863.           int opt_do_extract_withoutpath=0;$ J; i& w. @8 u2 L) t7 ?  O
  864.           unzFile uf=NULL;
    ) F+ n0 z0 k% t/ C; W, m1 I9 N- m

  865. 5 ?, x- s4 |& n# ^8 Z7 K0 W. D
  866.           uf=unzOpen("Wsa.zip");
    6 K: B- ^% i7 q+ Z* y
  867.           if(uf)
    . m  D/ R/ O5 V* S4 H4 U
  868.           {9 {/ i& Q2 r6 q" u) T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 a8 F* F$ h( V8 L
  870.             unzClose(uf);
    7 p# \3 B3 b# Z5 f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ g9 K- x+ B( @9 P# V* X: p
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");# N8 j( a  O: V, i
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ D, z9 M) d6 d- U1 R0 u' p; h
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % f1 A6 E1 s! ]9 r) F: N
  875.           }/ h; M. t# M8 j. D( T& b. c
  876.           DeleteFile("Wsa.zip" );
    * L- |5 `. D/ w* x. j! ?, R
  877.         }
    # _- M, Y6 B; K, _; O6 R
  878. 3 p8 H; J8 ^: u8 [6 e
  879.         if(CheckLocalVersion())
    8 p5 T5 l/ f9 o; }/ }/ k0 l
  880.         {
      O* f+ k  h7 K& B
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    8 J" b9 m# G9 \; \- h( r/ C! @
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");& j* ^' p/ F% m# c6 E* ]5 N/ ^+ q
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    . U% c& v: Y# r0 \/ g1 Z! \& Y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' T+ D) T2 |1 u. x; @
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    4 o& p8 L6 ~- X  Y8 m" X
  886.           dwStartUpSteps=99;$ o6 ^9 B) G/ Z. v1 v0 Q  i
  887.         }) p' q) s% n/ l/ @, G
  888.         else
    ; S5 L1 d% K$ c
  889.         {$ K( g0 n. \2 E9 }; i$ r; e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + B8 m! H. C4 a
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) ?7 V9 D% u8 c) A7 g1 Y+ T
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");0 l" }! N. h- a9 _' R7 j  g, J

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

# H7 l( [) f4 I

評分

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