CSUpdate.exe源代码

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

4 ]  v$ H5 F5 }5 F
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # P  P) ^/ {9 v" E- I/ W7 `& r
  2. //$ d0 z" ]% h7 Q% \$ o( I6 g1 K

  3. 1 A1 X! I$ H( f) g
  4. #include "stdafx.h"( H7 f1 g" D2 R! ?- f2 p

  5. . B9 b6 H6 k  L- ^) v; A
  6. //#define UNICODE9 m* p. s+ [- `" s
  7. //#include <gdiplus.h>7 E: O( _# K4 [/ `; ~7 p
  8. //using namespace Gdiplus;
    7 O( D+ k0 g% R& u
  9. 3 w/ ^; E2 M# m
  10. #include "RevApp.h"! t/ z3 A7 b1 X4 ]
  11. #include "RevAppDlg.h"
    * B' H. t' O9 ?" H* e( Z3 t
  12.   J! X/ ^+ U+ k% j2 X, Z3 H# ]4 B
  13. #pragma warning(disable:4786)
    # i- n% m5 s# R, W& W- l9 a0 Z7 Q. H0 M
  14. #include <map>: p! `. z; U" ^' e0 ~
  15. #include <list>. K+ b5 v% s8 z% H* Z4 K# B
  16. #include <direct.h>
    6 n2 d+ R& N# L* q8 v
  17. ) G0 E6 f* l' T  {- \  A
  18. #ifdef _DEBUG
    $ p, o* ?+ Y" A( U6 _5 Z- Z
  19. #define new DEBUG_NEW
    . K  l* ~. b* l( b2 d
  20. #undef THIS_FILE7 t; h$ `: f+ t2 _* ?0 o# ^2 C
  21. static char THIS_FILE[] = __FILE__;
    1 c# Z) u( b: _
  22. #endif
    ) r, C2 w3 A( M+ V3 t. w( s
  23. #include "SkinResDef.h"6 }" Q4 m! v5 a5 _4 I: j. N! ?5 C* }
  24. #include "ChangeBG.h"
    $ w5 d% y8 s: C6 [( W
  25. #include "AFXINET.H"5 _4 ]3 `2 v6 T3 b3 K% [

  26. . b5 q  m3 O9 Y( K- u* ~
  27. #define TRADITIONAL_CHINESE 0& s1 C! ]0 O; O$ ], D) m9 \$ c
  28. #define SIMPLIFY_CHINESE 1( H) k( e! W; c; i2 Q
  29. #define ENGLISH 2
    7 i2 B! v- q' _% c: a! n; V+ D- `  R$ Y
  30. int m_iLanguage = ENGLISH;4 {+ Q0 Y# j4 x2 t( w/ Y7 q9 l
  31. /////////////////////////////////////////////////////////////////////////////8 z. a/ m# U! O
  32. // CRevAppApp
    $ E: P4 h7 m& I( x& C! F

  33. 3 V' p0 F# S! j) O8 f
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , d: ^$ a: d- v" ~; j% X& f
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 |  u2 U* u* B6 u
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 h3 O, p! T# g' C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!! O9 N4 X  x8 z1 u2 ?4 l# L
  38.         //}}AFX_MSG# U& D; \, }4 t+ @4 z/ A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 f5 D( @- ~( W! |3 c
  40. END_MESSAGE_MAP()- E. P% p! L( ]& U

  41. 5 u+ j+ l8 @/ o4 {' N" T0 `0 d
  42. /////////////////////////////////////////////////////////////////////////////
    , x: h0 H, H% X( z3 C) y: F: v6 u
  43. // CRevAppApp construction
    # [& M9 A' G" A5 m- h& d* r
  44. " S4 `) v/ l; e) @+ m) m* N) E
  45. CRevAppApp::CRevAppApp()
    0 l+ L: _2 _: {
  46. {+ H. U; B9 u. U! z- m1 H) q
  47.         // TODO: add construction code here,
    * R6 t$ s: ?4 w% P$ O" Z0 X
  48.         // Place all significant initialization in InitInstance
      V7 h9 z( K$ N1 |
  49.   bDisplayIsBig5=FALSE;, _% s; p- g4 w$ z/ e. k! v$ S, s
  50.   bRestartUpdater=FALSE;5 U. }' J' E- [3 T2 M: f3 f
  51.   bFinishUpdated=FALSE;4 N% X4 z# c9 A/ @( L3 A
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& J7 O8 s$ q; u% g9 ^3 `
  53.   InitChangeDataBig52GBKS();
    8 M' \. I, @. P6 V( ~' r
  54.   InitChangeDataGBKS2Big5();
    " q! t1 ^9 {, B( a3 X3 j, A) P
  55.         //9 M6 b6 L& J: U- O/ e9 b; s  e
  56.         bClickRunExe = FALSE;
    / r2 ^# I, m9 n3 x! j8 `
  57.         //
    ' N9 y  T8 K5 T4 N& R* {# \
  58. }- M0 l) Z, y; ^+ V
  59. 1 v& e4 U4 F7 j6 ?* r4 _6 q
  60. CRevAppApp::~CRevAppApp()) h, \2 D1 E# k, B3 z! g' m
  61. {3 H- {, o: k* c$ G# ?' r2 d
  62.         // TODO: add construction code here,
    ! _$ G; z2 G; V3 l' K% _$ r
  63.         // Place all significant initialization in InitInstance
    3 ^& y  L; L6 ], a
  64.   EndChangeData();
    5 ~7 N% u  ^8 y* L" b
  65. }* m. H! u$ I. n. P1 m( g

  66. : W- e' k7 S- x2 G% l4 x1 X
  67. /////////////////////////////////////////////////////////////////////////////! q9 f9 A4 {+ q. _' J: O* Z
  68. // The one and only CRevAppApp object+ r6 ?+ T3 C% J

  69. ! @  U- e& S' u
  70. CRevAppApp theApp;. N1 Z- c' I5 X+ @$ _2 N& H
  71. , ]. ^, V! Q3 [. `
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 e6 J- z3 L) y& w+ x
  73. {1 r! N8 p5 e" o! R) o
  74.   int iEOF=0;
    & g3 ^& Z. ]8 w
  75.   char szTempName[MAX_PATH];9 S5 p6 b5 H2 t) T4 H
  76.   *szFileName=0;" C! K/ e; x- @$ Y+ |6 ^/ a
  77.   iEOF=fscanf(fp,"%s",szTempName);1 ]" ~$ T1 w- ~9 o$ w8 |# k
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 _2 S% U8 e& e. q$ E; E; j* U
  79.   {  e9 `4 c- t/ n  T
  80.     strcpy(szFileName,&szTempName[1]);
    ; ^/ ~. R: ?' T. e. r! s9 W
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 h5 k1 Z$ C3 _( N; C; U9 `% K% G
  82.     {
    6 ]3 @8 e* G0 }' l7 e/ ?& J' l1 j+ X
  83.       iEOF=fscanf(fp,"%s",szTempName);% K3 ^7 Q6 ]( ]
  84.       strcat(szFileName," ");
    : u/ x. _: {& n+ c" {
  85.       strcat(szFileName,szTempName);$ V0 @; M% [) Z: \9 i% m; T7 G  C
  86.     }5 V  d% V" d" @! G0 R
  87.     if(strlen(szFileName)>=1)
    8 n- b6 o, u# i- o+ b+ v+ L
  88.     {$ M/ N3 M$ v; U! \3 |
  89.       szFileName[strlen(szFileName)-1]=0;# A# K' w2 v% M* J: w
  90.     }, ^9 Q+ F+ I' ^
  91.   }
    . N6 f" L9 R$ f( y5 z1 t: l
  92.   return szFileName;6 k9 n. n# f3 {8 r" h% C+ {3 q. e
  93. }
    7 S6 |) V$ [3 Y4 J" I
  94. 7 Y5 m" T5 Y0 I" @$ ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    - M/ ]4 ~0 L  @! r: ?
  96. {6 H- z8 ~' b# f1 r5 b: g
  97.   FILE *fp;
    . B1 }% {3 I3 h
  98.   char *key=NULL;$ |0 S* L: H) ~3 m
  99.   char version[MAX_PATH];+ n7 ^& e& C3 ]+ X2 _' x1 H
  100.   LPUPDATEFILE file,olds;
    9 ^' G, K3 k1 x' |. Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 Q8 m8 Y% g* B& u+ _2 e# I/ Y

  102. : |5 ?7 E  H" Y1 A6 Z7 m7 |1 R
  103.   UpdateList.clear();
    , T; [  T8 {+ P6 v
  104.   UpdateFile.clear();
    & c/ u$ M! R# \& z0 Z
  105.   if(GetFileAttributes(filename)==-1) return false;' y" K2 [. i7 z' O, R* F- m
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 O% Z8 k2 j: B9 a1 O
  107.   fscanf(fp,"%s",version);( n& k/ f# P- R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    6 D9 [0 l% A/ M3 M. c5 q  @4 I
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 H8 w8 L* E  {
  110.   {- X. V1 w6 w0 Z4 O- b
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( r, Z8 b' j2 p/ t
  112.     fscanf(fp,"%s",file->path);# I$ F9 @: y" V
  113.     ReadFileNames(fp,file->file);6 j6 g% F7 O: m, H# E, S  e
  114.     strcpy(file->full,".");+ k1 y0 `5 y$ I) m! B. V' R
  115.     strcat(file->full,file->path);
    & e- C$ ~$ a, q+ |7 i
  116.     strcat(file->full,file->file);
    2 B& w* k5 _% X2 R0 n. g
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    " ?  x! F5 w+ n
  118.     {. l4 z$ v* n4 I% L# d% p/ k
  119.       file->vers=(float)atof(version);
    ; L$ |! A7 K) p& v
  120.       UpdateList.push_back(file->full);& k  {( |( |- R9 n+ ~. C2 ]' X9 t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    6 o; E5 ?$ A! s) z
  122.     }
    + r. @: ]% |% ^, m' x
  123.     else
    . v" {2 d$ {3 W6 ?! f5 J
  124.     {' I, V' r, s# c" {/ {9 X7 W
  125.       olds=(*p).second;
    0 u8 k! j- _; M# `+ `
  126.       if(olds->vers<(float)atof(version))$ P( Z$ c2 f7 F" L) E/ h
  127.       {9 F0 o3 {: M/ V0 @, i6 X; H
  128.         olds->vers=(float)atof(version);
    $ T: M2 a( _8 u/ d7 Y
  129.       }3 Z2 J5 j. s8 ?6 [4 z+ B3 c0 n
  130.       free(file);0 ^7 r: R! L5 j7 q
  131.     }" J* T( z  D7 V2 i1 {4 e
  132.   }4 b( Z. ?2 p* u. ]: w, F1 E- p5 T
  133.   fclose(fp);% C' t, S2 |! {. }
  134.   return true;2 j3 N! G3 P9 N, g+ V" y; ]& t% V
  135. }
    - Z# p4 X& r% v

  136. 7 m2 ~$ u, n# G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 L7 ?, s0 I3 [6 l  i8 l" o0 t
  138. {
    ; O& H6 ?# W1 r& N
  139.   TCHAR  szFull[MAX_PATH];: a7 k" v# E: ]. y/ q8 b
  140.   TCHAR *token,*inter;$ T/ M0 m/ w# l3 w' R" F! `$ x
  141.   *szPath=0;( v3 `6 G# w8 W6 W
  142.   strcpy(szFull,szFullPath);3 @  z/ K, w  G8 n- Y
  143.   token=strtok(szFull,"\\/");
    0 F) ]7 j+ |" m: n
  144.   inter=token;
    + r+ X4 Z9 a( T3 f/ g) K  {
  145.   while(token=strtok(NULL,"\\/"))
    . Z* x! i! W/ ^" [, l' G3 p
  146.   {* E* o2 k6 e# S0 H. c- S/ {$ Q$ w- Y
  147.     strcat(szPath,inter);* \% B/ q# P# |4 r
  148.     strcat(szPath,"\");, _9 V7 _+ V. a0 A
  149.     inter=token;
    2 E. V0 R+ K2 N, D! {/ M) ?6 ]% O
  150.   }
    $ E, Z7 E6 a$ N' |" `
  151.   return strlen(szPath);( f- D9 {8 n& _: p0 J
  152. }
    " E2 {% d3 U2 E; t0 S7 E' b2 G

  153. 1 d9 h" n$ m) e  I
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    " h. {$ ]4 `+ I! d8 g9 X& v0 P
  155. {" K( s( a/ `/ K* }* ^3 @  s: n: X6 A
  156.   DWORD attrib=GetFileAttributes(Target);, k& @; o# Y& W; x4 z/ N3 H
  157.   if(attrib!=-1); [  r. A6 N- Y- P, S/ l' k
  158.   {9 u- u2 ?3 C" ?8 D  t
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  o3 T, F; o8 n
  160.     {
    # s' K3 }3 R3 i4 R
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    7 ?# P% S6 D4 ^3 L; p
  162.       SetFileAttributes(Target,attrib);
    ! z# G/ h. m$ b- }  b: n
  163.     }! k8 H7 t; n( \* J( k) U4 r3 W
  164.   }3 L5 F" J  g4 `1 I: J* g: `
  165.   CopyFile(Source,Target,Erase);4 W" y, ]5 {% T" d. Y( `
  166. }6 p8 a- w! a' ?( X- a

  167. 4 Y' S# d) w1 M
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    . z% H* o* ~" r9 J
  169. {
    2 T+ m/ o0 g4 P( h: v! E# K8 v
  170.      FILE *fp;
    4 |/ f+ x4 m* n
  171.      char  szBuffer[8192];; p& d% t) z9 O# B$ _
  172.   va_list  argptr;( {0 a% D6 R5 f, y- K
  173. " l6 Z$ z, k0 ^8 ^6 L7 E6 ~
  174.         va_start(argptr,message);- Z- i8 V( S6 e0 A$ x6 r
  175.         vsprintf(szBuffer,message,argptr);0 D. C+ a7 W, _( k
  176.         va_end(argptr);% M8 b1 x! _8 d* |  m8 P3 K
  177.   fp=fopen(FileName,"a");5 J, J6 J' L& ~5 r' \, e$ f& A
  178.   if(fp)
    # ]3 D# Z% j; z0 U
  179.   {  {4 t* s6 s- c) ?1 n1 m
  180.     fprintf(fp,szBuffer);( H/ r* F( Y7 g3 b! S8 p
  181.     fclose(fp);6 |2 d0 Y9 r# t
  182.           _flushall();4 K" |9 j$ p, @% k8 b) C
  183.   }
    ; m( N6 Y$ [. I, c' i
  184. }
    2 N+ r- d# U6 G3 W, r! E, Y
  185. % \- w2 c- J; u( H8 p% A
  186. BOOL CRevAppApp::Fclearf(char *FileName)" B3 f; M- V/ N1 N
  187. {1 p% |" M' Y& R+ R$ b" ]8 v  D
  188.      FILE *fp;, B) I6 a3 K, U% ?( r. i
  189.     DWORD  attrib;
    0 `2 f: n  {1 C9 m1 @; s
  190.   attrib=GetFileAttributes(FileName);9 W( U0 |3 g0 O) c% c; f+ P! J
  191.   if(attrib!=-1)
    4 I$ j7 S0 u9 }; k) z, R
  192.   {
    6 Y% k2 T' }3 b/ f
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    # c* |5 n. s% \/ U0 }' w5 k
  194.     if(!SetFileAttributes(FileName,attrib))3 e+ ~1 ^8 {3 o+ V+ _. U
  195.     {
    ; m- Q/ g! g( N  H) m1 E
  196.       return FALSE;0 M9 O  G( P" E) Q! ^1 i8 b; b8 _' a
  197.     }0 h1 k1 k5 `, u; |3 Z: S* m
  198.   }) L0 d6 b* u9 V' N* N* A$ f0 {: `
  199.   fp=fopen(FileName,"wb");
    & Y$ G& p5 k0 l/ _' x8 y3 P
  200.   if(fp)
    * `- o( D. n  R# Z/ l7 K: s
  201.   {
    & }7 c) t6 I& H4 M3 ?4 Q
  202.     fclose(fp);
    * v- A+ n, p% C6 I' a3 u
  203.   }
    # u- j& b5 X8 j# S! W% c
  204.   return TRUE;4 M2 w( U/ Z/ u! R1 |" Q8 b  J" l
  205. }4 f+ u% r3 q6 o$ e4 W
  206.   X. `# H+ H; u, R$ n1 q5 o0 {, Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 p  ^% [& l( u4 |4 x% \
  208. {
    ' {( J/ i; _1 R% L" C5 p: o
  209.   char filename[MAX_PATH];
    2 s  T7 |5 h! G* E7 c% z
  210.   LPUPDATEFILE file,olds;
    ; {7 ^! z" F* Q4 r) ~5 ^; y7 M
  211.   std::map<int,CString>::iterator i;
    / X# N( A/ e. z3 @& ?' }; f# Z# Y. y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;9 H0 I( o' u8 C& J* K# i
  213.   std::list<CString>::iterator l;
    " m. Z- E5 q- Y) c0 ?9 f
  214. ( j& f! |1 e1 z
  215.   if(bFirstUpdate)7 h- I8 x1 Z" o5 s; {
  216.   {7 b. ~5 Y" h2 o1 W1 _8 o1 {2 B- Z+ s( Q
  217.     dwCurrFile=0;
    1 P' r; e* g5 b! r% M5 r- }9 I
  218.     bFirstUpdate=FALSE;
    - @1 n2 @# ?5 A  r; ?  g5 d( [! ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 o# A! M* C% q
  220.     {
    2 ]0 Y# R3 F3 P7 R" `( O. n; t+ q
  221.       dwTotalFiles=UpdateLocal.size();2 F+ c, a3 H+ z+ w$ s
  222.       dwDownLoaded=0;4 G  K. o1 [) W
  223.       bSilentStep=FALSE;3 Q- N1 {  x0 a
  224.       bCompressed=TRUE;
    & L- W& O* d+ m/ c+ S  s
  225.       strExtLocal.Empty();  Y/ H' {2 s% C
  226.       strFullName=(*i).second;
      n8 w, @; l3 d$ Z+ g
  227.       dwProgramState=AP_CONNECT;( r5 A0 T' x9 m
  228.       return TRUE;
    2 ~% U# K" T6 r6 x$ g! E4 ~
  229.     }
    0 ~. |3 e+ B9 I+ W4 H
  230.   }
    ; K: {& x" ]9 p7 |4 h% L* Z
  231.   else if(bRestartUpdater==FALSE)+ c4 ?! V7 p) ?# q  D! j: ?
  232.   {
    & U# M3 @( a* w: M3 F; c
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 q7 \( u1 p& m3 K& B
  234.     {
    & }( p, M6 ~- V5 _. s$ h4 R8 L$ r
  235.       file=(*p).second;8 b. F( {9 d7 W* I" F+ S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())' _% j7 N" y/ G; l5 ]3 L. q
  237.       {
    . ^. T. y- W4 p, U
  238.         olds=(*p).second;& f: I7 U* R/ i/ k
  239.         olds->vers=file->vers;& B  i0 x% r: ?! P9 \  \1 H
  240.       }
    / z8 s1 G4 Y3 W0 W) q6 n, K- j
  241.       else
    9 {- }4 h' L- {0 ~; m7 R* o" t
  242.       {
    - c/ m7 Q4 q! @
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 P" w% D$ \. t! w4 h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 }: b& Y6 A# s6 Y; N) o9 |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) J3 F: T- Y1 u3 p( E5 _3 q/ i) P4 p
  246.       }+ Y) D  Z% @% n5 P' |5 }+ I
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : T4 w) K& M; s7 E6 e
  248.       sprintf(filename,"(%s)",file->file);
    ( y# y/ o. V. ~4 g
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' ~) h! D7 `& V3 o' F
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: u' y$ R5 d: w
  251.     }
    ; l4 ^  `0 E- P: K
  252.     dwCurrFile++;
    / D# y( P+ r+ M1 m- v3 P* D
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 l2 O; H; a4 B" X! h" |' J
  254.     {5 `' N/ c9 l' W: Q
  255.       bSilentStep=FALSE;
    ; U( D0 W8 C8 Y
  256.       bCompressed=TRUE;/ M* V( z% {0 y: e
  257.       strExtLocal.Empty();, x6 ?$ x* V/ N! H( h
  258.       strFullName=(*i).second;
    ' `8 b  t0 F7 F  k
  259.       dwProgramState=AP_CONNECT;
    9 _* M, W1 z- R
  260.       return TRUE;
    6 |5 Q2 E7 r- D5 A: w
  261.     }
    ; t! Z' \6 M9 d* u! I! t* g/ W
  262.     if(!bRestartUpdater)4 Q; X5 \; u+ Z2 o+ t
  263.     {1 \& C& a4 n0 `) f5 B1 [- Y0 I
  264.       int iCurrSize,iFileSize;0 B3 h5 w& V& _( s0 B! o
  265.       iCurrSize=0;
    , U& Q5 ^+ |6 R, k# C
  266.       iFileSize=UpdateList2.size();
    9 b$ ~" W1 D( |1 @! x  H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 z8 o1 B/ Y  f- d$ X; t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");1 K) _' s; @2 M6 F
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ; x. n4 @. }; e$ b; i6 A" Z* |3 x
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 |6 P# F% ^: y9 A, u
  271.       Fclearf(".\\update.dat");
    ) H( {( T. {- P" v/ j. [2 l
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 D: D5 n& U2 U6 _) p: @7 r4 r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . \3 t0 c- i- u5 B/ Y
  274.       {/ R$ I0 u4 I0 H4 R& y4 }6 X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 q% \" q% Y/ ^1 [
  276.         {9 R1 m2 {2 S, o, N
  277.           file=(*p).second;8 E7 r& K7 h& @+ h  S
  278.           sprintf(filename,"(%s)",file->file);
    & B: j! p( x2 a+ C' F# I4 j* l3 P1 }
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* ^" b, P1 ^4 z6 {: U* C8 ?- {
  280.           iCurrSize++;
    6 L9 H$ l6 [! B) x8 G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 w1 J1 B$ m* {0 p3 N: k0 n: n% D2 n
  282.         }- i7 s. C; [* \( S
  283.       }
    & }1 B7 C+ `/ q- S! \
  284.       unlink(".\\update.txt");
    # o' w- m8 K; V& E% P
  285.       unlink(".\\update.tmp");6 G& M0 _, Q" }
  286.       Fclearf(".\\checkversion.dat");8 y: B2 ]' n; M/ C* l/ W( Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - p9 t) X) H3 P& g/ f3 z
  288.       if(UpdateLocal.size())
    4 P. n8 V. v3 b
  289.       {% W: w$ d2 f% C. Y+ D% C( |: x* I( ^) W
  290.         UpdateLocal.clear();
    * h) g9 |7 f- w! J6 v/ n
  291.       }
    ) m/ {' D9 t4 S) c9 Q# D
  292.       if(UpdateFile3.size())1 E0 k9 F& b4 z
  293.       {
    0 ?( k( y& g  G5 `( F7 _) T+ q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " M4 ]9 @# v9 V+ J! b0 A- h
  295.         {% c1 z9 z0 [2 H. I, \
  296.           file=(*p).second;' T- L, y) |7 R, {& u) ~4 O& R! H
  297.           free(file);9 g! v2 f6 d: u: s6 T6 j. g
  298.         }! L& t; h8 u2 u7 z( Z6 V5 }" x
  299.         UpdateFile3.clear();
    6 g3 m' i3 x) q/ V
  300.         UpdateList3.clear();
    . v- B" q! Y9 U6 B4 r1 m
  301.       }) E! |( J5 x: w3 V( {: Y, R+ T
  302.       if(UpdateFile2.size())
    9 a, |( T% _# x" ]0 G
  303.       {. \- g- M4 A8 i4 I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 _1 G; S) E2 L. I
  305.         {
    ! H5 J' U! L6 U+ [4 r$ B7 J4 K
  306.           file=(*p).second;
    + k7 _2 f: U& n. o: ]3 Z
  307.           free(file);
    & f" i9 m7 K- u  g( ^1 s
  308.         }
    % {$ A, X5 O3 Y6 |. G
  309.         UpdateFile2.clear();; K# ~- }  Z, V/ s5 \2 |5 _
  310.         UpdateList2.clear();
    + K5 p- _  x) A- \
  311.       }
    / o' A/ V8 Q7 J+ |$ ]( H( T0 k
  312.       if(UpdateFile1.size())
    5 b# }: k; l) t. o
  313.       {0 c2 U3 ?, o8 \' N0 q7 {
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). v/ Z) h0 g4 K* k1 {/ K" ^: H, V& o
  315.         {
    & \  n0 V% ^7 S' N$ l  W7 w3 m
  316.           file=(*p).second;+ l; `! W' t8 @, Y* Z
  317.           free(file);' L* A) W1 v3 t% J3 d
  318.         }
    7 k$ L6 @2 M2 ~2 K! P& F
  319.         UpdateFile1.clear();7 m9 E# o& S, n' N' @* A
  320.         UpdateList1.clear();
    . m9 z- m( }- t1 D
  321.       }0 u; h* e! \% j& F; ]& }$ ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));# h" _) @+ f+ s) g% U) c" @
  323.     }: ^# R5 H4 ~( }' p2 J
  324.   }6 N2 T0 T* ?. w/ K% L& w2 t
  325.   return FALSE;+ F, X) w' f4 M6 _7 S6 a- e
  326. }
    & q& n1 g$ T4 x9 j& K+ z( ?
  327. 2 Y; C0 R7 S" L2 E' g$ V
  328. void CRevAppApp::ClearAll(void)+ A3 ]) j/ k% s8 M
  329. {' f( [: L; I1 m9 \9 C+ c. q
  330.   LPUPDATEFILE file;
    $ n( _1 d, [, r  t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# E. R: O9 K3 g7 I
  332. * x0 S  t) S( Z/ \4 O( u3 w9 M* A
  333.   if(UpdateLocal.size())% q# l! |6 r; @1 }; b
  334.   {7 F* l7 {4 k6 a( H, o4 S/ u$ W3 {
  335.     UpdateLocal.clear();
    3 m3 w0 _- P# _- M( U! X
  336.   }
    7 A2 |1 u& O( a8 S/ C, [
  337.   if(UpdateFile3.size())
    ) @4 t: J- m: ?( w- k6 O5 l* w! G
  338.   {0 e. u6 N9 J6 B# y6 |& q6 @7 e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + F4 M/ l7 R+ @) ]7 P
  340.     {
    + H  S4 s# m0 _% B+ u7 x
  341.       file=(*p).second;8 s2 n  S# L4 @5 p$ I' n$ u; e
  342.       free(file);$ m2 Q# w0 P: G/ g* O
  343.     }
    1 o8 R0 i' R* c3 d6 m( T, Q
  344.     UpdateFile3.clear();) [6 g% X3 g: N5 K$ v5 |
  345.     UpdateList3.clear();
    8 k  j6 b" z) Y" p# L3 P: M+ T
  346.   }0 E* |/ i0 [" a, @9 L
  347.   if(UpdateFile2.size())
    ' m! l2 m: q0 @0 i
  348.   {
    6 c7 r/ f# F1 H7 f& D- P+ }. }* f3 A
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) g. g6 W9 p: G. r9 j/ l
  350.     {
    ! s( m1 d8 H: A
  351.       file=(*p).second;) Y1 N- K6 v2 f5 m2 ^! X+ b
  352.       free(file);
      {& Y' D" {2 K' ^1 w& x
  353.     }& e0 _1 w' d* d3 z6 n
  354.     UpdateFile2.clear();
    - w: S! \- L7 @# M8 |
  355.     UpdateList2.clear();7 z# o' A, t& Q& f
  356.   }* X# \" Y( q% V  b8 Z# ^1 O* ]) G
  357.   if(UpdateFile1.size())
    ( n7 o1 n- [7 \( d% W" I
  358.   {! t% ^6 R. ]. T' a, j# B: y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) F! s$ A$ ]* G' v, ^6 O
  360.     {, @3 j/ E( B4 }' Y6 N
  361.       file=(*p).second;( n2 E- n" |# Y' N: a1 G
  362.       free(file);
    6 ~! {! L- \& ?  k1 h$ i9 ~
  363.     }
    % x0 g8 X7 w3 |) `* n
  364.     UpdateFile1.clear();
    ( p+ ^$ M( i7 T/ \
  365.     UpdateList1.clear();
    $ N' E2 J' p5 T3 `# y
  366.   }; m6 t7 {7 G# Z/ E+ x
  367. }  
    6 K& K# l; }: N! v! Y5 N
  368.   6 S# @7 q) Z# V& x5 \: X
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / N3 `2 K0 I6 o: {! V- v
  370. {8 Z2 t3 N' u1 ^, e5 r4 O& ]
  371.   int c;
    8 P$ n" m0 K1 W% o* k, o; A
  372.   LPUPDATEFILE file1,file2;3 q0 v* x* V# q: w- |" }$ ?1 Z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' s' V2 Y7 M1 ?' G2 ~4 R
  374.   std::list<CString>::iterator l;; N, p# }! M; b3 W; G. ~$ |
  375. / }) D+ u+ @% L# M# b
  376.   UpdateLocal.clear();
    + U$ h& r* N- M) N5 p
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ Z' {* a) x; |% b+ D2 w+ _0 c1 i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ _  [  {1 }& ?# y  B
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 ~9 ^8 L- S% N
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);1 z% k6 i; p; B0 a. o
  381.   if(UpdateFile3.size())
    0 R) E9 S4 o% c$ G
  382.   {  h; i+ t, z0 ]% O5 S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++). O1 |4 ^" q/ ?. m6 u3 _' x
  384.     {1 V1 u. Q$ Z2 f
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; v6 D3 I) `8 ~/ F: x& z$ U" h* \
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) \  w+ ?. [  t  o. v* ]
  387.       {1 e* w& L2 _9 L4 `  M
  388.         file1=(LPUPDATEFILE)(*p).second;
    # c1 t5 m% }7 D  u( ]
  389.         file1->vers=file2->vers;
    ( V9 f, H6 h8 j3 b" F1 m% x8 j
  390.       }
    ) P% z# ]# f; H+ U) O$ Q8 B
  391.       else
    7 ?: k9 G$ }1 u
  392.       {8 @( q1 G: l6 A' V. _+ P5 O  h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 M& S2 e9 c& j% t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));+ m0 g3 ]. \, K' W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ s* x5 d! Q; S9 U2 r5 a8 ~! o; h
  396.       }9 E- T7 F' q1 H. ]& I3 c, e
  397.     }
    + |7 ~0 ~4 J) l- f
  398.   }2 f) m' M, p, S0 e0 ~& a. G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  ]( m; }' l; C8 S
  400.   {' J. h, `+ w8 O+ w
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% O7 T( b1 h# V% W, x: P( r2 k, W
  402.     {; J8 c6 [6 Z1 L- t% B' M9 O9 i
  403.       file2=(LPUPDATEFILE)(*i).second;
    ! O3 V$ T. N& Y7 E* O: ]( K; v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): v( B( ^; S& d7 y+ {5 x6 W
  405.       {# j( P' [9 b+ Q. K: v
  406.         file1=(LPUPDATEFILE)(*p).second;
    + T( F& ?) v+ z+ a* L
  407.         if(file1->vers!=file2->vers)' T+ X/ l0 ^! c& c# G8 `$ _
  408.         {# N; b: V7 o. w$ \
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ s" Y4 N/ r8 O5 q& D
  410.           c++;! Z/ o% r. q  n  i
  411.         }
    6 V7 `- w  j; z5 S, J% Y( b
  412.       }
    / W  a, s2 h: o$ w  a) F- T
  413.       else2 Q' [( @6 `; `9 ^4 A
  414.       {
    / s4 p2 Z7 P1 t6 D1 C% @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) T5 |9 @; R* N6 ^$ r" a" W
  416.         c++;: V6 h; E$ ^: R4 G" @
  417.       }2 }& o; h1 D+ G0 k
  418.     }
    2 i. d) e9 s" G* K, u7 g* o
  419.   }& m! o0 s1 L# M9 [+ _/ j
  420.   unlink(".\\DownLoad\\update.txt");
    ( F5 ]* Z6 I* d
  421.   if(UpdateLocal.size()) return TRUE;2 J2 }3 `: a7 \/ U4 s
  422.   else                   return FALSE;
      H# K( |- o' I1 d' Q
  423. }( C; t: V$ @* q/ ~$ Q( p

  424. ( X. d+ y7 h3 }/ o- h
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      _& s: b0 r3 A% `5 y' N
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    5 x8 _/ a- N3 r: v  t  V

  427. 4 f: |8 o; v9 [" f4 _

  428. / c0 x5 U+ {3 T* T+ |5 k; q
  429. 9 s: Z3 G8 a  p
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( n$ Z( G1 B0 d' l8 f' h
  431. {( M) L( t2 q! ]6 g' F, {1 `5 T
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : |# H; h; g) z7 d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % I( u4 @, i- B5 O* d
  434.   {
      q3 c7 W; }* z8 V" y" J0 N, X
  435.     char szLanguage[50];
    ; n& t) ], T  m) {4 @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 H6 c8 x3 Y9 j. t$ M+ M1 |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ F1 J$ ~) o5 z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ B1 v( i: c6 |  I( }& b
  439.     else                                   m_iLanguage=ENGLISH;* l+ M0 w% m4 t+ Z5 e
  440.     char szRegister[100];
    # d0 [+ X' _! w) y7 Y0 V& D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ @( L) K" U- V
  442.     strRegsName=szRegister;  G( @' I- W" z+ D3 N
  443.     char szPatchURL[100];
    ) W& _* Q9 i' U9 Y9 V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 N! |! l2 ]& z+ ]7 n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) n; k' Z8 v( ?! f9 I
  446.   }9 P' K0 ?3 X0 `% ?3 z
  447.   else
    2 P  o  a0 z7 A: w, R0 H4 [
  448.   {
    ) q5 D. r2 \* I' b+ `
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: g: ~3 H  U. M+ w
  450.     strRegsName=DEFAULT_REG_URL;% |# [/ m' A% b8 n  P/ |8 K3 p
  451.   }
      [5 F5 [! @; r
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 N0 k# c3 P( E( c3 {
  453.   {
    , c4 P1 y) D5 J, w/ ^( z
  454.     char szIP[50];
    % y% I6 I! Y+ b3 g* Z
  455.     char szDIR[300];: K% {% l7 t) S# b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 G0 ]' o! z( r* A  n4 f' ~
  457.     {
    ! ~1 N/ Z9 A* ?' Q( Q+ \) `
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - w+ g( R; \% L: U/ ^; T/ S
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# I/ B8 J, p% @0 u5 ?6 p
  460.       strHostName=szIP;
    5 u- \2 z! R& e6 {; X& ~) \6 h
  461.       strHostPath.Format("/%s",szDIR);7 A7 w4 ~5 a$ ?& \4 O2 j( A
  462.     }. d+ [/ F5 w' R8 r
  463.     else
    5 i. n( [( O; |" p* a$ j
  464.     {
    ; i5 `/ I: G8 F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * @$ B1 G9 [) H5 L
  466.       {
    - }- D. {5 G+ i& l8 k
  467.         char szLanguage[50];
    + {6 Y! ^. H- g" I3 ?# a, y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      P- T0 X+ s. ?2 _2 _  ^  T% h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % R% v* W9 ~; u2 z. }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" i. a" T3 e+ R2 O5 N
  471.         else                                   m_iLanguage=ENGLISH;8 H9 {! n1 }5 M8 O; ^. O  z
  472.         char szRegister[100];2 J3 W' e: Y& X  t5 C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 x3 Z/ s/ M& N: ?4 e, Z
  474.         strRegsName=szRegister;
    " z) r# w7 t/ J3 D  Q6 f& d
  475.         char szPatchURL[100];
    6 X5 v5 |' H! y$ q' V9 q* l7 F
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 z" L& X! |; j5 u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 P2 n2 A5 h- G/ |
  478.       }
    : ?* c% L0 i/ D8 o$ i& ^
  479.       else
    : X# \% S: e- b7 r6 e- D, S) W2 K0 x
  480.       {
    4 z7 U6 e, D" D: N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 m$ H. }) l! A( V5 C) c+ Y
  482.         strRegsName=DEFAULT_REG_URL;5 a5 k0 w" X: r" t; V/ B9 D
  483.       }5 C& h# b" p* T8 X5 b
  484.     }+ D9 i2 y5 N8 F/ @. {6 c
  485.   }
    , S* C, i; M" R  h4 j: i  W
  486.   return true;$ P7 p+ T8 W0 z: D
  487. }
    4 |% i  {2 m5 C" o/ @4 I8 P: B9 L

  488. - ~- U# z* A% L4 g
  489. #include ".\ZLib\unzip.h") k% p% I% ~" y, L+ ?8 a8 r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( b5 ^# f  p  u. z
  491. /////////////////////////////////////////////////////////////////////////////
    5 a0 j+ r* g* U$ e4 p
  492. // CRevAppApp initialization
    , w: l4 Y8 r. K) G. h
  493. + j8 F; i; d; ]8 P! N% B1 I
  494. BOOL CRevAppApp::InitInstance()
    , V( J: F: ]$ W, H' y3 e" E
  495. {6 O" G1 [9 d* Y: W  @4 [% t1 w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 L3 n; A9 O  ?( j7 o4 k4 [

  497. / C5 g' K% s1 a$ G9 w- M. d( q+ f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 d8 G4 Y& h. e# ^% p
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    4 V! K" A9 t% `0 v! i, M# o
  500.   {
    * L$ Q5 x, V, O' _! |
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: s: f' u9 j/ ~' V8 h  e% S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    " Z" `  J& L1 [3 d+ I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 h4 Q  L7 ~$ m3 p- p$ F. q
  504.     {( U" V) T- v- h% l
  505.       strcpy(szPath,szPathTarget);' a* N1 Y, A' j; f/ l; |
  506.       SetCurrentDirectory(szPath);
    5 ]$ Y, g& b& l& S' \
  507.     }
    ) M  w) N" ~0 H. W( g/ e
  508.   }
    3 k. z8 N( ]- [; t, H5 u
  509. #ifdef _DEBUG
    6 @  p! }  ]2 U( D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; x0 i, R. `5 y% p% u; j; O
  511. #else
    + q$ h+ I* F% N% b2 x' I0 h
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 k, P% x' j" z! W
  513. #endif
    3 i* S0 _, r2 H  E3 V
  514.   {% H+ l* x+ ~( O. H& d$ m; p
  515.     char tempFileName[MAX_PATH];
    9 J4 f" L7 E) R  V
  516.     strcpy(tempFileName,szPathSource);3 N# U& _/ r9 u$ ~
  517.     tempFileName[strlen(szPathSource)-12]=0;3 |9 v& |& u1 o( C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, |1 v4 ~. ~' r+ G6 t$ C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);' V$ l! p1 d! L) I
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    6 S" n% V# J* H8 `6 a
  521.     return TRUE;
    3 O, r4 R5 X( u# e' g7 x/ {
  522.   }
    . |9 d) n) h7 r2 f
  523.   // Nuke 0118: Delete run.exe
    - N" g0 t6 G" |: H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( F) b1 K$ X1 z. v  @1 }: P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! S. z8 T  p& h: f
  526.   if(!ReadCfgFile("Config.ini"))
    8 k0 v6 M7 L( y; H
  527.   {
    0 T) i" l$ w8 h: l6 w2 k( U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    1 [1 _7 }* o. K' L
  529.     return TRUE;9 J& i0 u3 f( ^- P/ t
  530.   }, ?3 q& T) ?; L  O: Q
  531.   HANDLE mutex;
    6 O5 b' N$ @7 j4 \" @0 z8 z- R
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 m; j7 ]6 B2 p9 l
  533.   {& N: e2 g' _* ?) M# g0 z4 Q. r! t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): L2 Z6 t/ K. I8 w+ n  v
  535.     {% Q' z+ X! g/ _; _
  536.       CloseHandle(mutex);
    + N) j& J. ^; m/ f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);1 q4 z9 W( c0 B3 r
  538.       return TRUE;6 H  _+ {8 ~9 y. @& [
  539.     }
    4 s/ v3 G: G/ i7 Y
  540.   }  
    ( }/ p/ a/ ]) [' _1 c
  541.   CloseHandle(mutex);: T4 P, `' Q  ~! B+ J5 V
  542. 8 q7 ^/ B9 C( s! {. n3 T5 {6 Z; Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    0 Q2 _. @2 h7 e9 o$ r
  544. ( p3 `3 [$ P$ U; W; L) ^( f6 y
  545.         AfxEnableControlContainer();* }' C* X' T8 {/ [

  546. ( N* z2 v0 L9 S. [5 U% b" ^) r
  547.   bCanUpdate=FALSE;4 ~! e2 ]( W! h& G
  548.   dwStartUpSteps=1;
    ! l1 g! m4 o$ |  e4 I5 Q
  549.   dwProgramState=AP_NOTHING;
    7 U6 g3 V( M8 Y7 T4 Z4 n, e

  550. % U5 I* H$ L1 t! j
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 k# ~6 y+ ^9 x8 B9 h3 c

  552. + O* V( v) v$ J) x8 \' V) d: s
  553.         // Standard initialization! v# O* v! T( D7 E6 ^
  554.         // If you are not using these features and wish to reduce the size+ B( `2 ?% o( \! w: V8 }
  555.         //  of your final executable, you should remove from the following& h  a; e/ E3 S4 e( |
  556.         //  the specific initialization routines you do not need.$ S3 \  |' F5 q
  557. 4 `4 E- g; `. L4 v2 S1 c" U2 ?
  558. #ifdef _AFXDLL# ?" s' |) ^! n4 }- U6 W" m, l( {
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL" o  p3 W8 e( Y. {
  560. #else
    9 E. a% P0 t' H  P+ Q: e: @
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ d: p6 m7 B1 `) S# v# _
  562. #endif
    $ k# `7 m. b2 Q% ]- f
  563. : t" }' p) c7 u# n1 V
  564.   dlg=new CRevAppDlg;0 m. Z$ t( v% g* g+ @) P% h- ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);( G# ]' o) [- o" I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & E; }6 N$ F. S
  567.   m_pMainWnd=dlg;6 S$ M4 z5 e. }) `! Q7 r
  568. 9 D6 p6 R' C  @  B& |& x- b; w
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ [2 i% m! v0 y1 |5 l8 F/ f
  570. 8 z8 `9 d  g5 r& P8 B3 q
  571. //  GdiplusStartupInput gdiplusStartupInput;" Y5 |9 W% {# c: W
  572. //  ULONG_PTR gdiplusToken;
    % G$ K! K2 c6 e1 g1 o( a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* }7 F& C" f( F, _( O
  574. " e5 h/ J9 M( Z8 x( m  l
  575. //        CRevAppDlg dlg;
    ) w4 Y2 |8 P4 R( s% c# N
  576. //        int nResponse = dlg.DoModal();
    2 p, k  H, Y1 ~2 c
  577. //        if (nResponse == IDOK)* q0 d; X; z1 ~, c$ x  W9 M+ O: v1 ]
  578. //        {9 x: ]1 _  U: j9 d
  579. //                // TODO: Place code here to handle when the dialog is
    " {7 r' ?4 X* m* b- y
  580. //                //  dismissed with OK) @7 F7 J( e  l4 ^  z5 v- N8 A
  581. //        }
    7 Q/ [5 ^2 K6 q+ T
  582. //        else if (nResponse == IDCANCEL)2 _- R! s9 X9 `8 S9 f- p% C
  583. //        {( b+ {, I% k3 U3 k5 V2 X
  584. //                // TODO: Place code here to handle when the dialog is+ Q, N* d" x8 F: V9 C7 X
  585. //                //  dismissed with Cancel. Y* K; r) P% E5 _4 ~
  586. //        }5 c! U. C$ A* L! I
  587. 9 i6 i  _; Q) P/ k* ~+ j7 V& U( [
  588.         // Since the dialog has been closed, return FALSE so that we exit the" L7 y2 I* B* H$ h+ R! E- H3 W
  589.         //  application, rather than start the application's message pump.  N8 G* i4 d2 x& O0 q
  590.         return TRUE;  l$ C" {" y% G4 ~- _
  591. }
    9 K# c+ ], H6 `2 }+ }% [9 D9 Z

  592. 0 i: J! d8 p$ ?! k% Z
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & ^; U9 K/ z5 e9 p+ t: _0 K1 Q
  594. {4 g# V; x# J9 y& d0 F, b% {
  595.   int i;3 i8 q& B, b7 `7 F
  596.   char *szRet;
    & r+ j  V! ?" e

  597. ) M( l5 e7 K, ~% |
  598.   if(pSource) { itoken=0; sztoken=pSource; }. O. }' l& d: ]3 ^( b9 b# y2 F" w, Z
  599.   if(sztoken)! }6 ^/ B' S+ ^$ {3 C
  600.   {
    ' R/ ]1 C- z! K4 R' H
  601.     szRet=&sztoken[itoken];
    3 O8 E$ V5 S( B1 `
  602.     while(sztoken[itoken])
    ! Z( P% F- r- @6 P4 L2 F; r2 r% y
  603.     {. n2 v5 [. ]7 q/ A( G$ I! G
  604.       for(i=0;i<(int)strlen(token);i++)
    & C* @9 w% E$ l# {0 }# U: C. w( E
  605.       {2 @: x2 d  c  A, O
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  R% u* ~8 E5 p8 l& q$ Q  R$ X8 ]
  607.         {/ R1 h2 j: p* y7 h8 i. H% _
  608.           sztoken[itoken++]=0;
    ( K7 F! E9 N" L2 \/ v
  609.           sztoken[itoken++]=0;
    $ h3 g( j' s- _/ }& Z" Z8 g
  610.           return szRet;
    : K* C* M7 Z4 R7 }8 d4 A4 ]
  611.         }
    0 i2 V# {' O% k: s' u. D
  612.       }; u; n/ O, P1 c, D
  613.       itoken++;2 Z( s- O/ a( X. ]/ S- U
  614.     }# m" |% Z' U( A, h
  615.   }
    + o2 f% ~2 ?% ?2 c: U$ b9 m% K% G% A
  616.   return NULL;3 c0 {5 y& ^0 C) v0 w7 s$ J$ |: Z
  617. }
    2 r; {) E9 I' e% g* `# k! q

  618. 3 x7 Y2 i# X& v& b. F: H& y
  619. void ProcessProc(long Total,long Current)1 g, X/ e& Q3 `+ H( |
  620. {) m$ D0 [, n; o+ h# R1 w/ \% g7 t
  621.         MSG msg;9 _" [' \9 o$ [  o- `$ D
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
      g7 L$ @' p% b/ A: i* R+ n6 n
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 ?( L. i' R/ w! ^7 a
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))1 }2 \* @8 }3 X! W; e" A, n7 l5 g
  625.         {/ L- g9 I7 S& ?8 X& S$ d4 S. Z
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 A  L& I+ B2 y. Q' ?! A
  627.                 {8 \- w, t, _3 D. J
  628.                         return;, y! h# B0 d1 B& w
  629.                 }  D& @0 J  L7 ^: e7 f- x  {
  630.                 TranslateMessage(&msg);0 ^! b% ~! {$ x/ |
  631.                 DispatchMessage(&msg);
    % o1 G( f4 y$ t1 U6 }) V8 A! C
  632.         }        9 H- b" g( \. x! Z, W, `: [% O
  633. }( t, l' }4 [# L( y( M: w1 ]
  634. * q3 H; [- u1 o8 q, R! f" j  E8 \
  635. BOOL bFirstChar=TRUE;
      ~! D6 M- N$ M0 p3 V" M" L+ N
  636. . j0 I" R+ H* u. C2 J. ~* s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! @9 G" m" r1 r% G  ?7 z# P. e
  638. {
    & l* K* _0 I  n) @) z8 ^4 J0 Y
  639.         // TODO: Add your specialized code here and/or call the base class3 Q- O8 a- N- ~
  640.   switch(dwProgramState)5 r/ ~6 C: `% T' _6 D. H
  641.   {! ^4 w2 W% W8 U$ P% l. d7 o
  642.   case AP_NOTHING:
    2 x2 K8 b+ `# T, }. \9 W1 K
  643.     switch(dwStartUpSteps)
    1 L# s+ F7 a4 m/ B0 _
  644.     {6 b$ m  _0 R0 N( A, }) s- U
  645.     case 1:2 d6 y& {% s1 q" Z
  646.       {( D' L) D  L! L0 Q# e5 S4 m
  647.         int i;+ m" P: T% K3 @2 x) {1 m( d
  648.         CDC *pCDC=dlg->GetDC();) V% X* t! e7 p' X* t
  649.         HDC hdcwnd=pCDC->m_hDC;
    3 I# X8 r/ o* o* R' l  z! N: e. h
  650. //        Graphics graphics(hdcwnd);
    $ W9 G* T6 d) d
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ f) {7 Z1 y$ w4 ^1 A" j5 j
  652. //        INT iWidth=bitmap.GetWidth();
    5 ?/ u5 o7 }; A
  653. //        INT iHeight=bitmap.GetHeight();
    8 S8 u" x  z% Y5 z
  654. //        Color color,colorTemp;! {; ^+ ?! Z! W; ~) g$ y# O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 W- p  o% R5 p, l6 A% F
  656. //        {/ r. g4 o8 ^) v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 N4 b/ e3 r+ J" S, Q
  658. //          {+ G/ `; w) \' o' e! d6 R3 @& y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . |; i8 u8 E  |% c4 f, x
  660. //            colorTemp.SetValue(color.MakeARGB(
    ; Y7 k# z0 A' E5 q
  661. //              (BYTE)(255*iColumn/iWidth),) U; l/ R2 N) Z: A( s9 T/ s+ |
  662. //              color.GetRed(),. z+ q$ R' K/ [" r
  663. //              color.GetGreen(),
    5 r  T9 I6 R) j3 J; L% w" Q
  664. //              color.GetBlue()));; n; d8 q8 k% q% l; E% U
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);9 u. v1 `5 n  ]% z: n( G
  666. //          }$ n; P# Z: u7 B9 L/ Z" A
  667. //        }
    # d- W% y: r) J" [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    $ U9 G, D. t. @  N9 W6 h, _
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 ^# J* R& m, X* A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ p. v( a3 a. v( U1 J1 q. j; ?3 y* @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- o( S; Q1 M  F5 A- ?
  672.         for(i=0;i<240;i+=8)  J5 \& n9 V) C! W1 ]4 i# z+ x
  673.         {! k) s7 o: }3 n, f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 K8 ]8 H6 ]; q4 w3 [$ V$ [( Y0 ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 K; Y$ a- i# v% Q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% G+ x* @3 y9 W7 j$ j
  677.           Sleep(33);- p! {& ]. H- J+ V5 L' _
  678.         }" [7 t& R/ a3 u, h. u4 o" g
  679.         Sleep(1000);6 k1 o' d0 n) g3 u2 i- i
  680.         for(i=240;i>0;i-=8)
    & ~  O8 v( z1 F! |+ S/ l
  681.         {
    : K8 g) B, e& w9 G8 D5 Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ Y* C  P9 ^8 e' Q9 k8 k0 w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. z6 C& E: }% t" `: d1 A
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 D2 Z, ^/ o  [. u
  685.           Sleep(33);
    8 r0 d4 ~) D; m) `# V0 R
  686.         }
    ) o& O: }, Y: `5 k7 o; T
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% w7 c3 c! R0 J* P( u" Y
  688.         dlg->ReleaseDC(pCDC);# V) |* Q/ L0 B* V" O
  689.         DeleteDC(hdctar);
    8 _  s- v, k# j2 w! X) u! c
  690.         DeleteDC(hdcsrc);
    * t. h* W2 ]3 i  z2 w' }0 ^/ ^, K
  691.         DeleteDC(hdcorg);
    9 c0 |" s  S8 F  i: U% x
  692.       }
    $ P& ?0 F. q+ m* o  E5 ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & B$ d# I7 W# x' x
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" S: j$ f1 y" c0 m! R9 K7 y
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 c! P+ h: w7 z3 g' n1 b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- M, ^& Q5 r- L$ B1 ]) Q% ?, q9 ^
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 ]# L$ l. a; a+ Q2 U- f1 P4 ?, _
  698.       if(!Dn.Connected())
    - R: \2 c/ ?' }  n- q( ]7 {
  699.       {7 K, ?# C! _0 _: q- Q
  700.         dwTotalFiles=1;
    6 v) t3 w- N6 L4 y% k) A9 i
  701.         dwDownLoaded=0;- f+ w" Q2 U$ q7 v" t$ `* c
  702.         bSilentStep=TRUE;: E* E- m) G' J6 m
  703.         bCompressed=FALSE;6 q9 }, m8 _$ Y: c; N0 A1 T* F6 `
  704.         strExtLocal.Empty();1 M7 ?: ]( u9 W+ q0 t% |+ H' E
  705.         strFullName="readme.txt";
    ) s+ Q0 a" M+ v- U( [9 M) A# G" [
  706.         dwProgramState=AP_CONNECT;* D2 E4 n% c: G; h
  707.       }4 o, O. C2 w: G2 C, f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ Q) Q) K- s- U7 [, t
  709.       dwStartUpSteps=2;" W( U& B! R% ]
  710.       break;* d4 {+ B% l. x) x
  711.     case 2:
    - E# n" S- J2 a/ v9 r# y
  712.       {: D; a3 V, y. L- L
  713.         int iEOF;
    . k1 a) ~( j9 |$ {2 k. }
  714.         FILE *fp;% V0 J# }! x, b; r, {" Z+ w& N
  715.         char szString[512];
    7 X9 K  J+ U" X9 g: U
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / c% ~: \4 o) I1 L
  717.         if(fp)0 U/ t  x0 S3 I3 [* u. u" R
  718.         {
    " a( x- {) q4 ^/ r& t* W
  719.           do
    6 _/ {$ M% P% l7 {! o
  720.           {
    7 O' R2 ^# j) P7 g# X! W( f
  721.             iEOF=fscanf(fp,"%s",szString);6 q6 o" G+ N2 W9 b: A( z0 u
  722.             if(strlen(szString))
    ; W, f, n* _" A0 W% C9 b
  723.             {
    ( K+ y8 p5 [, w) y6 }# q/ ^! i' r
  724.               if(bFirstChar)
    + b" ^% Q2 u  ?1 ~+ A
  725.               {% g) {8 m) d/ R) n. p
  726.                 bFirstChar=FALSE;3 z6 q. Z$ P! Q4 E- e
  727.                 bConnectIsBig5=FALSE;7 C' P% i, H4 {5 r+ D' t/ R( a4 F: s
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ P. W+ p4 l6 i
  729.               }
    3 \% v; d; y. p( V# {
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));7 e5 L7 C3 g$ a) }7 b% x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # T$ M- x: \2 }
  732.               dlg->m_ListText.AddString(szString);
    " G$ x3 q4 |2 _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 R1 H1 F5 T" ]# \4 l* f$ q/ H8 h
  734.               *szString=0;4 n* {+ L6 ~2 C2 b7 {5 U( `" a
  735.             }! B3 J( n$ S7 B! R& |) O2 i& `
  736.           } while(iEOF!=EOF);
    5 o# Y0 G9 y. w/ }
  737.           fclose(fp);( m7 |2 v% `, h) f6 R
  738.           unlink(".\\DownLoad\\readme.txt");' M/ K6 `4 R- ~# I5 I: {- d4 `) W; O+ h$ H
  739.           dwStartUpSteps=3;2 P* p* \$ R9 ^+ R- [
  740.         }
    7 v4 ~0 U! O- K9 t
  741.       }
    5 \) N: V# j3 V" X
  742.       break;
    9 `  f3 z2 q5 T6 {3 x& j, [
  743.     case 3:
    0 B0 y5 g: P% @  t
  744.       if(!Dn.Connected())
    6 P6 d9 p( F6 \- ~! a
  745.       {, y& v# t/ W% e+ W6 a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / ~! o# S" V& ~: c
  747.         dwTotalFiles=1;2 X! W# _# n/ h: y+ }* _
  748.         dwDownLoaded=0;( f. A/ _9 Z/ {  b
  749.         bSilentStep=TRUE;0 e- D$ Y0 l: H, r3 y
  750.         bCompressed=FALSE;
    % k% s4 n# K% t1 E+ S) |: N3 Z8 r
  751.         strExtLocal.Empty();
    % k1 [- U+ D* y: l
  752.         strFullName="checkversion.txt";/ J% ^; H5 a' z2 n) F5 h+ ]
  753.         dwProgramState=AP_CONNECT;
    * L3 m+ M/ s. H% P& ?1 E
  754.       }
    ' |. c# k$ k( H: i
  755.       dwStartUpSteps=4;
    0 C! `" e5 G' G! z# E- ^9 O
  756.       break;
    ) i# x" w( N5 `* S5 v. n8 `" i
  757.     case 4:/ b6 O% D0 m" }! z+ _
  758.       {% j6 t& h+ _# R, l% |) Y3 X" X2 |
  759.         FILE *fp;- Q0 o; ]2 I# s& ?% w# V* m( Y4 t$ c
  760.         char szString1[128];
    # v/ H7 [6 B/ J- {
  761.         char szString2[128];( Z- p  U4 g+ ^( O( T* ~) e5 f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    8 F- f3 V% [  u8 T6 u
  763.         if(fp)4 V% h" X7 I1 E
  764.         {  m) w2 t% K( Z$ G, v
  765.           fscanf(fp,"%s",szString1);- i* w5 J- H( A2 K$ u
  766.           fclose(fp);0 v9 d* T3 y8 ]+ Q3 [/ L
  767.           fCheckVersion=atof(szString1);- W& O3 Q- G- O  c% W# y
  768.           fp=fopen(".\\checkversion.dat","r");
    7 `- W% B0 D$ Z4 B  S4 [
  769.           if(fp)
    6 p0 t2 `- T6 \& O7 t
  770.           {& T) J( m0 g- W. a' p2 ?
  771.             fscanf(fp,"%s",szString2);7 d' u! I. q* a
  772.             fclose(fp);
    3 R$ X1 I& P4 U% N, {
  773.             if(atof(szString1)!=atof(szString2))
    % L7 A) g% O1 L. O  r' E4 ?
  774.             {
    " c3 X6 @3 n3 L7 f; _
  775.               if(!Dn.Connected())3 `! v2 v' x% [2 G9 x
  776.               {- P+ c9 e/ p) R6 E1 H( c/ j7 {- \
  777.                 bFirstUpdate=TRUE;
      A4 e6 ]7 a' t
  778.                 dwTotalFiles=1;
    3 F5 o3 y' ]! s/ N- w( {
  779.                 dwDownLoaded=0;& ?3 n+ u! S- T3 X
  780.                 bSilentStep=FALSE;7 f) ^) s! [3 D5 h% O- J# ?
  781.                 bCompressed=TRUE;3 p6 D( X; G+ {. c. w4 f
  782.                 strExtLocal=".\\DownLoad\";
    ! ~, p) x9 x; g/ w
  783.                 strFullName="update.txt";
    8 D3 O( t8 S: g; M! h5 _
  784.                 dwProgramState=AP_CONNECT;
    3 d$ G9 w/ n0 P  H- p
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 w/ O- h" V& |) k( M, R5 w$ X
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / j, U0 J* |- H1 g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 n8 ]7 o- @; E5 Y6 x! P" g/ b1 z
  788. / \6 O0 _& d* L, G5 u8 S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      H) F) ]7 R8 M' A% s
  790.                 unlink(".\\DownLoad\\checkversion.txt");; s! h; O; V( f+ D1 K( A; z1 y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    0 W# ]/ a% c: q- A: ?
  792.                 {
    : {4 }- W3 T1 t  a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - J$ T3 q1 @* o6 U$ ]. k" O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! T# G) P! q% u8 Y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # I' r" C8 u! v$ m$ D7 V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- v' x( p3 |5 j. y/ {

  797. 4 M. p; B9 \/ f
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 x5 q0 w7 t& Q& [, i( B7 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! p/ w! \) A) Z! @: P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");5 `+ Q& A# B2 y: L% @7 \" j  C+ i# I; P; Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * q. K3 Z: e: O, t: o5 M
  802.                 }
    * |- `4 f# w7 A6 Q! ]* S3 x
  803.                 dwStartUpSteps=5;
    / f0 D- t: Z" J- H2 |3 Z
  804.               }  w) g' @6 R6 A. E  s( z, i9 I
  805.             }
    4 N5 F1 g( J! e/ _5 u& ?) }  q+ G
  806.             else4 {3 n7 f* w3 u2 X$ t7 D' A4 P3 |
  807.             {
    # V+ g; ?' v" T$ n
  808.               unlink(".\\DownLoad\\checkversion.txt");4 L& ?1 P+ E! R5 A& d
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");' M; T% V% n8 u, o0 e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ |( {3 N0 R+ C/ U/ A1 b* S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* h! m+ }" y* T
  812. 6 N0 T9 k% f2 z0 n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! W1 y4 N, u% F! u% Q0 T
  814.               dwStartUpSteps=99;
    2 E# t  o4 {6 z4 X  n
  815.               bFinishUpdated=TRUE;2 X! f/ Z8 N" Y6 z4 S
  816.               bCanUpdate=TRUE;
    1 T6 K* b2 V- o1 h6 V2 I2 W$ c1 f
  817.             }' o8 N  C: V1 J
  818.           }
    $ ^4 \* Z7 m: u! {+ _/ R6 B( b
  819.           else
    # y8 ?8 S* p* e9 W6 S
  820.           {# f, v+ g) ]6 }$ g4 @4 i# K* l. c
  821.             if(!Dn.Connected())
    / y5 x2 e; l  k. i8 r
  822.             {
    5 @' X0 Y% C* [' W( r
  823.               bFirstUpdate=TRUE;
    . x6 y; ?9 ]( _0 q0 m1 C# @
  824.               dwTotalFiles=1;. G! _6 B& Z, f" F& U# |$ c" G
  825.               dwDownLoaded=0;( d3 W3 |5 f! i8 q! {
  826.               bSilentStep=FALSE;5 L0 C: f1 v9 X& Z+ q3 r
  827.               bCompressed=TRUE;
    5 x, U6 [1 k" Y% l
  828.               strExtLocal=".\\DownLoad\";
    : K4 h: W/ o8 F, H' b( r
  829.               strFullName="update.txt";
    ' o4 X/ b6 f" q7 p  P# ~6 G
  830.               dwProgramState=AP_CONNECT;/ T- I6 v' t  h8 U. t4 X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 j( v: O7 t6 y  [" I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( G. S  |5 P4 F0 [' W* w" C  N
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");* M0 s  M0 s- ^: e5 [  p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. T& f1 q$ N1 d$ f
  835.               unlink(".\\DownLoad\\checkversion.txt");7 |& N8 c# B) \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): d& [; ?# h7 V( T0 o
  837.               {2 G5 a/ i- o: P5 X3 L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : m% \, d" C* H+ ]
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - v- j( F& w+ J" J6 T5 r
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # H; R. M7 |* I# s+ g7 B2 s- X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 H# N) P* ?7 k+ P  F
  842.                
    + }6 o) N( @% D- y1 u' S
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# I0 T' |" I& B. m/ m
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ }* H5 \( g' i% |: e. O( q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    & r) q$ |: b8 u+ y- g5 g9 H
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 f; N/ W5 H) U! Y; L
  847.               }' f/ U+ b1 s# b2 a
  848.               dwStartUpSteps=5;
    / a8 j4 x4 t+ }. Y! ?, ?: {6 H
  849.             }
    # X, {) ?$ B' T% J* f- }( @% o
  850.           }
    " Y1 ]$ w# z7 o. a4 C
  851.         }
    $ K0 ~; B5 t1 O6 V. T5 O3 Q1 Y% c4 h
  852.         else
    & |* h6 ?  I' J0 R
  853.         {
    9 O3 w" W! `7 o$ h- o1 G5 J
  854.           dwStartUpSteps=3;
    * d' }# I9 u, e. W' ^0 [
  855.         }
    - @" ^% o# H: d9 @' T! K# c& K
  856.       }6 c& ~. q" x0 X+ s* F1 O) @
  857.       break;, W% w; N, G1 p- R
  858.     case 5:' P& ^7 q1 t9 z1 |7 M+ k9 X, Q
  859.       {* \$ Q# ?; c/ p/ H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)8 K# b$ X3 n1 A  u% w  a
  861.         {
    ! v0 Y: P/ G' m2 I4 t% t
  862.           int opt_overwrite=1;
    ' _0 T8 t7 b2 @3 w. w0 z: O
  863.           int opt_do_extract_withoutpath=0;4 L1 L9 v% I7 Q' h* c5 r) M% Q
  864.           unzFile uf=NULL;3 u! f  Y: q1 j' I" k0 I- x

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

評分

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