CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
  P3 s# M1 q  {. T$ q& [$ l! N
  1. / RevApp.cpp : Defines the class behaviors for the application./ B0 W* C* W- z
  2. //9 G% y' R6 \( V: |" |: v7 r
  3. * x+ ]8 ^* {( y( k; Y0 c% `
  4. #include "stdafx.h"- z1 S3 o! `& D
  5. % [5 Z' l  c7 G5 z" i
  6. //#define UNICODE0 j. q2 w! u* h
  7. //#include <gdiplus.h>7 g. \" O! O: k
  8. //using namespace Gdiplus;( l( R. j* {$ P8 g0 `( G
  9. 4 c: d' b& m+ t8 ]( X& [, B" E
  10. #include "RevApp.h"
    % m  ?3 A/ s, @" K" L& A$ s
  11. #include "RevAppDlg.h"
    - I2 t, r) G: q& M( w+ m( I

  12. 8 M6 O8 h2 b- e
  13. #pragma warning(disable:4786)- n7 _2 H9 K" M3 s) w
  14. #include <map>  g. x( l6 n$ P' |6 n
  15. #include <list>' M8 a; b, q+ [$ ?# t# V" d
  16. #include <direct.h># Z& O% g5 H, b  t  v$ L* ~
  17. + ^+ @& V* b3 O) j! w7 T0 `
  18. #ifdef _DEBUG& C) \+ j( O' R! k
  19. #define new DEBUG_NEW1 @" _  F" U8 k; e0 P9 E
  20. #undef THIS_FILE/ F# ^+ j, F5 F/ R) d
  21. static char THIS_FILE[] = __FILE__;
    - h( g9 H7 x) p5 c. I
  22. #endif
    . [& `( V- o. K& r! I: H" }5 E9 d
  23. #include "SkinResDef.h"* q8 \8 Y5 k& V6 Z& m1 O5 m" V
  24. #include "ChangeBG.h"% a5 b: H4 a6 [/ u* N$ m
  25. #include "AFXINET.H"
    % `) I, p. d: H( b6 P% U$ T! f: h
  26. 3 j& l6 c( x! F8 t6 ^2 ?
  27. #define TRADITIONAL_CHINESE 0* |4 ]7 d5 H8 W8 I; a& l
  28. #define SIMPLIFY_CHINESE 1% ?8 s1 P- S( a6 A1 n/ s5 U. L
  29. #define ENGLISH 2
    & M/ ?% T% J1 D! I2 [) _
  30. int m_iLanguage = ENGLISH;
    + c5 I/ J& J; c) ^8 p
  31. /////////////////////////////////////////////////////////////////////////////  J$ g1 f8 t  q. L- N4 @" H8 i
  32. // CRevAppApp+ y3 ]2 W: D  Y

  33. 6 c2 d, @) E  ?! r7 Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    % p8 a: d3 S* i& U# E  @
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / M3 g8 F7 M: T0 X9 |
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      O! B& H% z8 U, _% n4 g- `9 H
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 Z- o' S1 _: K2 k5 o: U, m' R  X
  38.         //}}AFX_MSG& Q% O, a- e, T& K1 R2 X
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 }7 A9 K  `' [5 h
  40. END_MESSAGE_MAP()+ ?3 o3 P4 R+ _3 D8 M2 Q8 s# f
  41. , B: H3 n; X1 c6 t: e& Z2 o
  42. /////////////////////////////////////////////////////////////////////////////6 j/ S: x% z  }
  43. // CRevAppApp construction9 H) n1 s2 ~! @5 }

  44. / h: S( B* u& B" w; v6 x6 Z! O- y+ p
  45. CRevAppApp::CRevAppApp()
    % p- Q( b% `; O: k8 c: M2 b6 ~
  46. {
    4 Z; X5 I6 g: o! C2 K" u
  47.         // TODO: add construction code here,
    ' j) v9 `0 o  V1 m  v
  48.         // Place all significant initialization in InitInstance0 D  {" J# o* G4 _1 F$ B' j" [
  49.   bDisplayIsBig5=FALSE;
    7 R& G1 @7 e. B# _; @2 T" p, \( c; F& u
  50.   bRestartUpdater=FALSE;
    : f# {* v5 g2 B( s' @" y
  51.   bFinishUpdated=FALSE;
    & A& E* m* r5 K- g1 k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ \- T* g( O4 I/ S" Y
  53.   InitChangeDataBig52GBKS();
    ) f0 I: [- O! V$ ?
  54.   InitChangeDataGBKS2Big5();* Z5 l& r% Y: D' I  u$ ]( m
  55.         //- m7 `% h" p- I9 s3 i
  56.         bClickRunExe = FALSE;9 \8 S/ V1 ?: L/ k7 H8 m4 c- g
  57.         //" p( ?& [- H# g% v# @
  58. }
    # N4 I1 y/ A0 X) ~
  59. 0 Q$ ~6 K1 L* B/ v% \$ s
  60. CRevAppApp::~CRevAppApp()
    * K6 r4 i" q/ D0 _
  61. {5 e+ Y5 o2 a; a3 R
  62.         // TODO: add construction code here,
    - g7 ^2 n* v* `% K; q
  63.         // Place all significant initialization in InitInstance
    * h! e" x- r. m9 j
  64.   EndChangeData();
    + K6 r" M( m1 s- B# l& N
  65. }
    - y: k) T) O; K4 e. q- U  `
  66. + g( N2 H0 _9 x) b
  67. /////////////////////////////////////////////////////////////////////////////
    ( B: o3 O( t9 Y5 ]4 @
  68. // The one and only CRevAppApp object7 R1 N7 k# B( y4 ~
  69. . K' [* y4 K0 T+ [- X. ^" w
  70. CRevAppApp theApp;
    8 h" e  r! c1 U! g' d9 j3 l
  71. . Q. E( i% J# T& A% m; J% X
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)* p2 \+ \8 f" @! E$ E  q: u: Y( a
  73. {& l" s7 w9 `( [4 H* Q/ J7 {
  74.   int iEOF=0;
    . q, \( M7 g( {$ ]7 N$ [
  75.   char szTempName[MAX_PATH];( [% J' x2 `+ \
  76.   *szFileName=0;
    2 b) t& e( B/ v- U- ?8 j: N
  77.   iEOF=fscanf(fp,"%s",szTempName);
    / N3 ^& N' x$ Q! Z! P. u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')$ ^. C1 b" Q+ r. ]: D
  79.   {: [4 c0 _( k9 v+ b9 i% U
  80.     strcpy(szFileName,&szTempName[1]);
    ! x8 W6 h, a9 C  q* p0 X. B9 d9 M
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 W7 k. G. w" r# R
  82.     {
    $ m$ A  G5 d5 C& C& i
  83.       iEOF=fscanf(fp,"%s",szTempName);0 q' m+ a4 T0 N
  84.       strcat(szFileName," ");
    & D2 Q6 c6 P5 k, p# p2 z3 o
  85.       strcat(szFileName,szTempName);: ^, D5 c5 ~' x7 L1 `
  86.     }
    # c. m8 {" X3 V& e* I, t: m
  87.     if(strlen(szFileName)>=1)
    2 B7 ~% b) w; c. O; M
  88.     {  q* v1 g6 N* ~
  89.       szFileName[strlen(szFileName)-1]=0;( y, j9 D) n$ N/ M7 d
  90.     }
    9 p. i2 w8 Y2 V- ^- P1 l
  91.   }
    ; x* V& C8 C- m: K( s5 u
  92.   return szFileName;
    ( D% `: l8 b& B1 ]
  93. }
    8 O5 Q8 a" J" m

  94. 6 B  e7 t6 @. X; t2 N, P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" s) I' ^* ^: C1 L6 q. s5 S3 z3 c
  96. {
    0 }( c( \; q! u! T7 Z
  97.   FILE *fp;
    9 G4 N  \8 l  ~
  98.   char *key=NULL;3 b* r2 Z# T, S7 ]2 C. j
  99.   char version[MAX_PATH];
    ; x% S5 ^- ^8 a9 v$ R; x* D9 O
  100.   LPUPDATEFILE file,olds;
    9 A: y3 }. a2 k/ S2 a8 o! A
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 b1 r3 J# r% L2 e4 L3 }
  102. ) M7 E( [: D0 ~1 V4 U( I- K
  103.   UpdateList.clear();
    : c9 z4 }- T2 H) U  H
  104.   UpdateFile.clear();9 n' f9 \! J5 k
  105.   if(GetFileAttributes(filename)==-1) return false;2 I& f2 m: Q  ?9 y! Q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 e( f* ^7 i# t( g9 \0 X
  107.   fscanf(fp,"%s",version);5 G( @7 C! h/ ^9 |' C" w2 V9 I
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 L5 W6 [2 w$ J1 T8 ~& N* |
  109.   while(fscanf(fp,"%s",version)!=EOF)+ W$ S$ p* |8 x# b  ]3 m% ?
  110.   {( ^3 D3 d  D0 P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, X4 t9 K6 |2 n
  112.     fscanf(fp,"%s",file->path);' o! k/ @1 P; d4 K
  113.     ReadFileNames(fp,file->file);
    , y$ d* i$ i$ c" W
  114.     strcpy(file->full,".");' z$ }9 ?, _- {1 a, j, k5 q4 I
  115.     strcat(file->full,file->path);
      R) W9 e( {" U$ G* I; V
  116.     strcat(file->full,file->file);2 c# n* S$ b1 x# @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) @5 U+ v. f1 U% T
  118.     {
    7 l0 n8 b4 c5 c6 V; E# }
  119.       file->vers=(float)atof(version);
    / u* {0 c; ^( H3 U' y- ]( ?; g
  120.       UpdateList.push_back(file->full);
    1 V$ d1 k' f2 N, l1 A7 g
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ G6 d! K/ c  r  h  C
  122.     }& U. _3 u$ M/ I4 r0 B% H2 X
  123.     else, ]8 @" {. Q# |9 @* G
  124.     {
    % j* `- @+ R% f1 f( T9 v1 \
  125.       olds=(*p).second;
    4 J6 f3 D1 e+ k
  126.       if(olds->vers<(float)atof(version))- ]' K3 u* ~3 [+ w
  127.       {
    - S( J6 V4 `% ^* t, V/ M$ A: K4 I
  128.         olds->vers=(float)atof(version);
    9 ^9 W' _2 w) q0 Q
  129.       }! i* k- _- @' X# m8 f, O9 h
  130.       free(file);
    7 g( p  q/ ?, @5 w! u; [* Q
  131.     }3 U! A, K; T' b4 d& W+ |% F! }
  132.   }
    ) P6 M0 y/ T( M" x
  133.   fclose(fp);$ |6 a3 A0 j8 n1 X: l' k) W
  134.   return true;5 j8 F1 I% l4 p; {
  135. }1 A& D7 ]4 p6 D* T, h2 E

  136. 6 I2 A- b% y3 i0 d3 b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' {: s" X0 N* \) ?! O3 ~
  138. {8 J# z/ s, Y) f
  139.   TCHAR  szFull[MAX_PATH];% @: r9 r, Y0 B  Y; N; t# w# l
  140.   TCHAR *token,*inter;/ [, t- l/ j4 r' q, P# D* }
  141.   *szPath=0;
    4 X% H7 Y# c3 m
  142.   strcpy(szFull,szFullPath);# Z4 N) v% }: J2 l2 J
  143.   token=strtok(szFull,"\\/");. W, a. P6 \5 [
  144.   inter=token;: D- d0 z' U5 }& s! ^8 g! H
  145.   while(token=strtok(NULL,"\\/"))3 P# c7 A; S% ?1 ~
  146.   {$ e$ V  o5 L* X+ F% b7 j1 S
  147.     strcat(szPath,inter);
    . c+ V+ j2 V& M. m+ o3 d9 A/ X
  148.     strcat(szPath,"\");
    9 D2 _, j. ]# t9 Y& F' h, W- p8 d% [) V
  149.     inter=token;
    8 y- K+ e/ B: G+ ]
  150.   }5 b, w9 f' i$ Y6 ?
  151.   return strlen(szPath);4 E' j+ _0 ]: h8 \& p( X/ n& ~
  152. }& U$ n. P! Y" E
  153. " e: T- \( J2 Z# ~( P' E6 Y3 k
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ H  V% }8 w6 ]# m3 j/ n
  155. {6 T/ i+ T+ {3 C9 f' W+ i
  156.   DWORD attrib=GetFileAttributes(Target);. d! K) p: q6 i2 m# t' |8 b( R
  157.   if(attrib!=-1)
    ( C! l; ~& r6 B6 ^* B' C5 Y+ V7 X
  158.   {
    3 z& r% u7 m& o7 K- ^6 j  P  P: }% ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) D2 k; x( r8 m' i
  160.     {
    ; l: v% T0 z+ e. Y$ }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) ^0 q+ d8 j! u/ j1 n3 s- J
  162.       SetFileAttributes(Target,attrib);8 _1 y. O  t6 N' V: K1 x! @
  163.     }* r* ~# u( X. k5 ?  w( |
  164.   }
    2 V  ~# Z# X5 W% t
  165.   CopyFile(Source,Target,Erase);
    ; }! w! v4 |4 k  `
  166. }5 b9 y; n% E2 l: y# y, A' r0 g
  167. 3 K* W. h* G3 s+ f0 X1 o+ |+ x
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)2 T9 _" [3 L# l7 J* w4 }
  169. {/ g) N# V5 i2 K% k, D' H* Q3 c" B
  170.      FILE *fp;5 R" w3 _7 y5 B
  171.      char  szBuffer[8192];6 n, F3 H4 f- n. A5 S2 G& w( I
  172.   va_list  argptr;
    * O! q8 f7 O( J' ]' P2 `

  173. ; W8 V$ j+ [/ N9 s5 L
  174.         va_start(argptr,message);" P) P7 i$ t9 o. B) _
  175.         vsprintf(szBuffer,message,argptr);% G" J$ {6 U$ ~- {! ^% I! k6 \
  176.         va_end(argptr);, A9 N  g9 I# \& E' C" t( Z  h8 t6 k
  177.   fp=fopen(FileName,"a");
    ! D1 C: d8 T1 \+ P: ]2 P, A
  178.   if(fp)2 d8 p  l% @6 K% A2 @- R2 H! p
  179.   {
    / R3 G/ k" X: Y. k* X+ E
  180.     fprintf(fp,szBuffer);
    # b( B! B7 l! |* X, {/ O$ \
  181.     fclose(fp);
    " G( z+ ~7 d. Q9 L6 |* A9 ?
  182.           _flushall();
    3 a" m+ Z# e! ^  I6 e! G
  183.   }
    & z- t$ F5 s+ o8 O8 P
  184. }( j0 n( f. o+ l3 Y1 U9 t
  185. ! p, l( q! R6 ~
  186. BOOL CRevAppApp::Fclearf(char *FileName)5 h% {# v/ g6 E" m
  187. {- s9 W) w1 [$ t9 }; n8 m8 R( J
  188.      FILE *fp;8 E! s: F+ s8 H7 W/ b: Z
  189.     DWORD  attrib;
      q/ r5 t1 E% p. k5 T7 b1 M" y! `4 M
  190.   attrib=GetFileAttributes(FileName);, V3 N, |' D5 d
  191.   if(attrib!=-1)( P! ~% b# u+ t- ]! g
  192.   {
    5 }, z1 n( R2 V, a7 \! Y6 j. s' b
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 _- R. o5 n: P' Y0 A& S
  194.     if(!SetFileAttributes(FileName,attrib))# m$ }" l1 _% \% [. v/ a
  195.     {
      G3 ~, |+ q  m2 B
  196.       return FALSE;
    4 S& c2 b+ Z0 g& d5 b5 I8 U. y0 J1 w
  197.     }
    ) U. f# X9 F$ |  {" l
  198.   }( r; D8 N; o1 M$ P
  199.   fp=fopen(FileName,"wb");4 Q. X1 V4 a5 b# n2 `# d5 [
  200.   if(fp)
    # f: s' z+ K" p( N
  201.   {
    7 E, T% d) s8 h+ r
  202.     fclose(fp);
    ' i  A0 i/ d, i) Y" r* K
  203.   }% U4 B. e! B- S, s4 g" f* U- }
  204.   return TRUE;
    6 `2 N1 u  V! \- G. s: C/ \% d+ C
  205. }8 V1 D1 T. O. Y6 e$ M

  206. : G  p) b0 j: p; S/ H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)! i4 S' i( @# u2 r$ W5 u
  208. {" p  I1 E. Q! W+ i8 c9 ]* U
  209.   char filename[MAX_PATH];
    ! k6 a, X- a* ~- Y4 w5 c- T
  210.   LPUPDATEFILE file,olds;
    4 U0 h6 c. ]2 C$ r( S
  211.   std::map<int,CString>::iterator i;
    1 u$ R9 {0 [0 o, \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 B; z. X2 x- d. b3 ^7 T
  213.   std::list<CString>::iterator l;
    % y7 m8 q% `* i
  214. 0 J' C: y0 ^2 l0 y0 g5 f: J) E
  215.   if(bFirstUpdate)
    3 ^7 g8 W# \& M2 u! q4 r! L
  216.   {) R0 X, s* a5 Q4 V. u8 C  ]4 P7 ?, I
  217.     dwCurrFile=0;
    6 M" k  _, f0 u6 F
  218.     bFirstUpdate=FALSE;
    3 y$ Y; R9 l. E5 W( d3 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 c; @  w3 c( V6 G
  220.     {9 P3 `* I+ [& g- |6 y" L' ]3 P5 K5 S& A
  221.       dwTotalFiles=UpdateLocal.size();
    ( X, U, h# N' f
  222.       dwDownLoaded=0;$ M. @1 K% ^( A! s* s
  223.       bSilentStep=FALSE;/ D: f7 s' U& N! z% c
  224.       bCompressed=TRUE;
    . g! x2 O1 h2 x  A5 _3 t/ S
  225.       strExtLocal.Empty();' t+ |1 D( V) G& K1 Q6 h
  226.       strFullName=(*i).second;- Z& X/ a; q& |7 ^% |
  227.       dwProgramState=AP_CONNECT;
    , ]/ q1 B7 q1 w' v+ S% R
  228.       return TRUE;! T  e1 g! h# R* ^; A
  229.     }" {- e" [, d4 n- Y  Z7 b+ [1 \
  230.   }
    ) V, x& A; I- }. A. @# s1 X
  231.   else if(bRestartUpdater==FALSE)
    : M4 X7 K9 d1 _; h- ~
  232.   {
    * c9 c$ k0 B8 p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' s/ z5 W9 @8 r$ s; @4 w
  234.     {- E9 [. w+ l. e8 t4 [$ X
  235.       file=(*p).second;5 F2 s+ K1 H! Z: C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ! f  |! k! ]6 K$ O% Q
  237.       {  C1 x; u8 G9 y* p
  238.         olds=(*p).second;+ Y# W1 ~" q9 Z5 L. u$ v4 e/ h
  239.         olds->vers=file->vers;
    . q# m0 f. M$ j+ S- r# U
  240.       }
    : _+ |; h0 i* l% o- {' ^
  241.       else
    7 [7 f8 s0 ~) a) B7 E4 H
  242.       {. x7 I2 m. g3 n, M& v
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  X* u- o- b5 `, A8 G, @& f8 s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* ]6 H8 i" R, Z. X) E# C1 a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 Y' T$ H( w% v7 P4 R- s
  246.       }  @2 B. ]1 q' y4 k: R4 M+ \6 l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! g/ t! Z2 V8 b. s5 z5 E
  248.       sprintf(filename,"(%s)",file->file);5 N) P; b% C$ |  Z9 b$ l
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - Y) Z  c( H. a% c9 Z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( _* {0 b9 F5 Y
  251.     }5 q$ e9 N2 h. K4 A+ Z
  252.     dwCurrFile++;, C0 \/ h+ \2 U- U3 D
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 y. w( z  D# W/ a4 w/ g
  254.     {9 `7 O5 ?5 \! P4 M8 C4 Y( s
  255.       bSilentStep=FALSE;8 B2 b  ~2 N9 m0 P8 g
  256.       bCompressed=TRUE;
    0 m8 l/ f. p% E5 K
  257.       strExtLocal.Empty();
    5 v( ]2 R' |2 c; p
  258.       strFullName=(*i).second;
    * f6 w# S( }/ y4 t7 G! {" x% g0 k# n
  259.       dwProgramState=AP_CONNECT;
    / W7 G% O' J& Z) |7 l# Q- H& Q
  260.       return TRUE;8 O& J# H$ K4 A& K/ G4 o
  261.     }
    6 t( d: k" c+ z8 n* u% z# C
  262.     if(!bRestartUpdater)' e5 B( |3 U+ Q4 p& V+ I
  263.     {8 L% O. \7 i2 x) U% z/ W
  264.       int iCurrSize,iFileSize;
    # F7 B' i/ ?$ z! T4 g4 N  U
  265.       iCurrSize=0;4 d) n& V& R+ s5 T6 [, [" ~; S
  266.       iFileSize=UpdateList2.size();
    ' }/ D$ b7 [7 b. O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ ]! W0 i5 K6 {8 I9 \2 E7 C
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . p2 h. F+ U8 m) ~! b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    # D' g: w8 G" p" g% z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 }% v2 m, E( o9 b/ {
  271.       Fclearf(".\\update.dat");' _1 Z$ a+ @1 L9 e% I5 }
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    8 O) x* x+ C/ `7 x% D
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( }+ k& M. d& D* I8 _
  274.       {2 F% z: H5 d8 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* y+ p( I; }. n1 n8 t! a. h; e
  276.         {/ Z- @# @! _' _) k
  277.           file=(*p).second;, n1 g, Y* _, [" ~
  278.           sprintf(filename,"(%s)",file->file);
    , x5 C1 q. w# u
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " a0 N$ H! C  u, |% P. m' \5 \
  280.           iCurrSize++;: {. {. K) J2 q, v8 a/ M: [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . I6 _1 e3 w6 T, f0 c. L% ]
  282.         }
    , A) [/ p* E3 m4 G
  283.       }7 |' [) `5 n2 Z1 F( d( v
  284.       unlink(".\\update.txt");
    * `3 W- ~3 b9 ~8 h
  285.       unlink(".\\update.tmp");
    7 E( E0 k' q5 Y* \4 s) [
  286.       Fclearf(".\\checkversion.dat");9 }+ A& ^5 t' f6 H- j6 b1 ~3 i& o" s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% `: _4 {% Q+ ?& Z7 v+ t
  288.       if(UpdateLocal.size())
    5 w: G% m$ T  `7 a, e
  289.       {
    2 h0 K0 P3 q% |, L" s) @' s$ D
  290.         UpdateLocal.clear();, a3 I0 W2 v& ^- k- Z
  291.       }
    5 d! B! Y* o- c8 _
  292.       if(UpdateFile3.size())) |4 U# m& D% W) U# f
  293.       {
    9 p/ t0 C: t1 T: l, \
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ t" n0 I6 |$ ~- f; B* l1 f2 j
  295.         {7 j/ j' ~, q2 }- E3 O& E" {# r
  296.           file=(*p).second;$ y! m' b6 Y1 S0 w/ d
  297.           free(file);
    , L8 y0 Y0 d' K5 u( M: T# L6 v
  298.         }$ n/ c& F  v: A! C
  299.         UpdateFile3.clear();9 x6 R. J* C( C  m( {
  300.         UpdateList3.clear();
    + B! q9 X9 D1 N) E! A
  301.       }9 h! h: Z0 B1 v5 n/ P- u
  302.       if(UpdateFile2.size())4 [/ a' B" t9 O4 s
  303.       {
    - j  ^7 L  ], Z' ^* [
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - W- D/ j# V) U. l! E2 w
  305.         {
    $ ~+ X6 {- Q# `$ L7 k! l
  306.           file=(*p).second;: ~, Y4 k, R  s% r
  307.           free(file);
    , O9 \) Q) j8 k$ r' |
  308.         }  [& x: b% h0 E" R7 r* J; g
  309.         UpdateFile2.clear();
    9 f! C' F% z* M6 ?" S+ c3 U: z
  310.         UpdateList2.clear();# o0 B; x2 H: T0 G9 Y& W
  311.       }
      R8 \& W$ z! `) T
  312.       if(UpdateFile1.size())& ]; z! I- u5 e( W3 W
  313.       {
    ) E9 y2 B" ~$ l" z/ `* ~' x, Y! r
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 v% g5 h# d0 M5 `+ k0 w
  315.         {3 Z& N. |) r' ?0 ~3 L
  316.           file=(*p).second;
    , s0 S4 ?5 _) }9 f' z+ u
  317.           free(file);: [! i, r* j' y( V; [9 |5 r
  318.         }
    9 n  J, M" Y4 {5 i" G' _/ e! Z/ b1 n
  319.         UpdateFile1.clear();
    * J- ^7 A6 v+ x8 Y  E
  320.         UpdateList1.clear();
    4 O9 d4 K6 T3 ?8 C  C7 {
  321.       }
    . |$ ~0 Q* [% r, b$ Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 X$ n) Q3 \! J, Q
  323.     }6 G% X1 [& \; D" \# T9 q& i6 G  S
  324.   }2 K7 [$ t1 [: S, v& ?
  325.   return FALSE;$ T, D$ \7 B7 q6 w( o
  326. }: o7 U# |8 ?& }% [

  327. 4 G; B% |. ~! J! [
  328. void CRevAppApp::ClearAll(void)
    & g" t  y- F; M6 H& B% S* D
  329. {
    # k4 x) E7 X; W! u
  330.   LPUPDATEFILE file;! c- Q) ~6 o9 }) P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 X" g8 X. o, I5 f0 }3 i7 M

  332. 1 P: y/ R* H, E4 b5 V" P1 l
  333.   if(UpdateLocal.size())% G6 H  T1 u* P
  334.   {7 i2 V' y$ G) N5 U  k7 D; `. ^! n/ ^8 l
  335.     UpdateLocal.clear();
    - ~0 [- u/ L! o2 [8 t3 u
  336.   }
    0 c$ e  q# T) }$ [& \9 D% P
  337.   if(UpdateFile3.size())
    . m$ u8 t" ]6 Q) m/ h
  338.   {
    0 f7 s) v, _: B/ K' w! w) B
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 I# K% u5 m7 r4 E' \. x: i7 ^
  340.     {
    3 i$ P6 c: `9 |' B+ a
  341.       file=(*p).second;2 C5 W" [4 B- I% }' W4 n" U
  342.       free(file);
    % V3 [8 c' }, ~% i! M) \
  343.     }! ~" a, I, T5 p5 w
  344.     UpdateFile3.clear();$ w) _- ]  M$ N& U9 E
  345.     UpdateList3.clear();
    1 }; S7 I" v, C0 Q% t
  346.   }( e- c$ C( Z( ?: z. r) P
  347.   if(UpdateFile2.size())
    0 O' [* N9 I& z; g3 v
  348.   {2 v8 n( r3 d; U* j% G0 u- y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' Q2 O8 d1 Q1 L: _! n
  350.     {
    4 l/ A3 k" E1 c
  351.       file=(*p).second;
    2 O. u. d, j0 ~( A4 R) v7 v
  352.       free(file);) Y7 u3 t& n) u# e8 I% F
  353.     }
    : U( o+ d# j& h% x: U
  354.     UpdateFile2.clear();/ B4 h$ h0 F, [% `( C: c& s8 p
  355.     UpdateList2.clear();
    " ]4 O$ h8 z1 n* p1 ?4 X9 ~
  356.   }# E) X  `# m3 S7 p, |4 C) W  u1 M
  357.   if(UpdateFile1.size())
    4 W2 b( u/ J+ y* b
  358.   {0 Z9 d; }: a& m# |) l
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ L9 E6 Z1 ^# g7 K; W, ~; S: F
  360.     {) W$ Z, X$ l3 w4 I! e1 ?
  361.       file=(*p).second;
    ! ^7 X8 K0 `4 `1 q. Q! j
  362.       free(file);
    & c/ _" _" `" x$ P% T; i
  363.     }
    5 t5 A' l1 m( s& l
  364.     UpdateFile1.clear();% X5 U( B6 ?1 _
  365.     UpdateList1.clear();+ \% l( d- S3 J) k% g2 C
  366.   }% f" w1 [: g, L$ I& s' v6 ~
  367. }  
    # v0 y  P. x. ^. k
  368.   
    ( ?0 k* F9 B4 ]+ i3 V" m1 z/ M& t
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 r# V1 `- Y& c$ s+ }* M% S) U
  370. {0 s. v" C# a5 d3 ~6 |5 _# D$ r" O, w6 E
  371.   int c;) I1 Z2 }& ?5 v" c; U2 E
  372.   LPUPDATEFILE file1,file2;& G0 z& J: K/ f, P9 }
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    / \% y  @# g' z
  374.   std::list<CString>::iterator l;
    * j  @' p: [5 J3 B0 \% K7 V9 a2 j
  375. 1 b. T9 l$ F4 c% S
  376.   UpdateLocal.clear();
    9 f' N. V" i7 Q$ z; c* V7 R
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! w& x* n0 _; D' ~; b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* Y$ R, ?; a2 _
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : M& O' ^8 i4 y, \& n9 r9 [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 ~6 x+ S* h, l  V- X
  381.   if(UpdateFile3.size())
    3 m7 k3 \* \0 ]$ U' ^, [- O! x( k
  382.   {
    ) Y, ?. U$ r- ~
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    # t& S) @2 L- q3 v
  384.     {# G. Z; |  H5 l8 l
  385.       file2=(LPUPDATEFILE)(*i).second;- v2 b7 J, a! A$ ^  Z; O
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 y; T" L/ n" e; J
  387.       {; z2 ]1 [& v1 h( |) m( L2 M( ]
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 f6 M9 D- m0 j
  389.         file1->vers=file2->vers;
    ( z- U6 c. r2 z7 F3 ]; S
  390.       }
    0 o' l8 u8 b+ i( T/ J9 x
  391.       else
    ; W+ y8 G1 R6 Q4 `- e( J
  392.       {; A( b" f+ r6 Y+ R3 `4 R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 q; M6 }- A5 k
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));4 g* x1 V6 W& G% T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));# d* `/ I+ e( c% l, z- J- K
  396.       }; [0 G2 O) ~8 P0 e7 |
  397.     }
    ! u/ \6 P9 _9 e& K& l+ {
  398.   }- J6 n! e7 T$ K! |  M- J
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 H3 {' A& S% Y+ P. J9 _
  400.   {
    ) f+ i4 q( U5 S2 k/ v1 O. W
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- z' L( F' ^: Q- w) n! |" I
  402.     {% h: d% D7 Z; R5 M
  403.       file2=(LPUPDATEFILE)(*i).second;& Y/ v# E- C. A# W& S8 I1 m: s1 l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % W: O! I% v8 ?; Q0 U% g4 Z2 Z
  405.       {
    4 Z% r4 M2 d, H+ m% }
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; q0 d7 ?! u8 Q+ Y% |' t% Q
  407.         if(file1->vers!=file2->vers)
    5 W; y( c- @: g+ J, b, C/ i
  408.         {% T- t0 `* N" a1 x; K9 i9 }1 J  W
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
      v8 X% R) m% w9 X) q/ l
  410.           c++;, A5 E4 v. m7 Z  ?
  411.         }
    0 e) E5 ~8 b* y5 a$ Q: R$ J& D2 y
  412.       }
    " a! f5 {1 x5 h$ D% A$ v# c0 T8 a
  413.       else" a) _8 R! Y0 r9 u! \$ D& _
  414.       {
    / H* {; A5 X6 `' O
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 {2 F7 N, z8 n) ]; K
  416.         c++;1 ^. N7 q( W( W: {7 ?2 {8 y% d
  417.       }1 j/ U6 I, g0 H- }- W
  418.     }
    9 `% Z$ m. T2 Z
  419.   }
    ) q; G, R: |8 Y' b1 X
  420.   unlink(".\\DownLoad\\update.txt");
    " U" G, i. W  S) V0 a& ~' r
  421.   if(UpdateLocal.size()) return TRUE;1 ~+ C3 _3 q% R( f5 O
  422.   else                   return FALSE;
    8 H4 Q% e& E  q6 f
  423. }* _& z* X7 ?. {4 o3 K# D- R1 e6 T' K

  424.   X2 I. Z1 E1 P5 X0 i
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 [2 N' h- Z8 ~. I! ?( F1 G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 E5 h% \1 ^: a4 ~: c
  427. % f. x% S( K$ V9 h! }* u) Q# h' u2 g
  428. 5 b2 I( I: o$ t

  429. ) w3 d- ?& m+ Z% ^& B, |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    - J: F0 p& ?+ R9 _
  431. {# N0 P  c' A4 P5 [' e# X
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' n* W" h; n6 {# y+ ^2 z2 ^  O
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 {9 c3 d/ I0 o" m9 D
  434.   {" z  t0 A* g# p5 G  Q* m
  435.     char szLanguage[50];
    8 q$ x  E  E2 }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' V+ n5 ?0 v) f4 @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" t$ {: _9 c$ u
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" G' M3 c: @, p( D
  439.     else                                   m_iLanguage=ENGLISH;4 d4 _4 V8 r  x7 P8 `! g, I* |
  440.     char szRegister[100];
    . i: _0 K$ d+ d7 v7 z0 D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ; G+ ^7 H- i/ ^2 L5 }
  442.     strRegsName=szRegister;) j4 Q3 [& f' Q4 Q# m# v
  443.     char szPatchURL[100];
    $ {5 ^  {7 ?/ m
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 t5 X! h% l5 E$ e( @2 X4 V; l
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ W, `/ q) g! o8 w  A' v
  446.   }- d! ]  O8 z( x
  447.   else  w. `+ P; w; r
  448.   {: F" F& o6 m2 H, G' z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) k( H" r$ F6 y. R
  450.     strRegsName=DEFAULT_REG_URL;
    ( `: s( Z$ h: P- m6 b4 n
  451.   }
    / I8 U3 a3 i0 ]" [
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! @! d5 f* ?* w6 E+ I
  453.   {
    * X1 h! l' ]+ M7 P: ^" Q  N
  454.     char szIP[50];
    ( V& }* [4 z# Y* w4 Z' J. k
  455.     char szDIR[300];4 e( g- O8 E7 b* ?) ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ' S7 P8 o9 _6 b8 |2 G; d" x
  457.     {" O4 T( F4 f$ D; |
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 e# L3 H4 E/ d1 k- b+ i$ C$ ~
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");  C! y6 \& A: C
  460.       strHostName=szIP;
    0 J3 g& s! A: y. \: e
  461.       strHostPath.Format("/%s",szDIR);
    5 [. G: D; V7 C1 H7 M
  462.     }
    9 U* v- M2 J( e9 r# B0 c: q  Y0 ?/ e1 B
  463.     else6 A, c: h. G! l! A
  464.     {; `) D6 v3 Q% X$ x" q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . H  ]; f  A: @: p
  466.       {; B- J3 C1 ]1 B, |# _6 A' r
  467.         char szLanguage[50];: I! s& [7 p  w& {8 ]8 H; P1 z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 k% {; k+ q" g4 {. b# k3 y! S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 p& @1 @. Z; v& J8 L, C2 y* b5 _
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ y- M" C, Y; M* n. w2 j/ @
  471.         else                                   m_iLanguage=ENGLISH;/ w& g& D+ r* D( }% E4 r. o
  472.         char szRegister[100];
    ; t) b2 J" @! W
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 z, g. _% d+ d* x1 t0 Y, g4 R
  474.         strRegsName=szRegister;+ K+ l7 B/ Q2 B& D. @$ L
  475.         char szPatchURL[100];; m# w; k$ D. f6 f. q+ v; `
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: \0 x8 D# {% u/ o  C5 w% X
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : U+ u7 Z/ D8 t4 B' }) }
  478.       }( ?5 C# E9 H" U; m6 c
  479.       else% ~* P& j0 P2 q( T
  480.       {# B  U  ^- D* W; G2 q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ v2 Q5 O2 m7 Y
  482.         strRegsName=DEFAULT_REG_URL;
    4 |5 {! V; v( ^& p/ c/ [  D
  483.       }: R( V, P: o; ]7 g1 P# A1 N
  484.     }$ |- o) a  `. R, W. G/ o; q  P
  485.   }
    ) {% [* L  P, z& }' L
  486.   return true;( D0 v3 p. |% G" d% _8 E
  487. }
    ! E) t( \2 T$ @
  488. 7 C; b) y. ^2 |& x, o' ~
  489. #include ".\ZLib\unzip.h"% L* }! c: Q( x: N  `7 }. L# r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);6 `0 m& |+ w* s$ v% Y2 a0 P2 g! e
  491. /////////////////////////////////////////////////////////////////////////////
    4 j% d* P* y2 _  y2 d! O3 Z
  492. // CRevAppApp initialization) I) L1 ~, E* f
  493. 9 G8 V+ _2 @5 n7 D. u9 X
  494. BOOL CRevAppApp::InitInstance()
    5 v4 e1 ?) s) F1 H
  495. {, L( ~; R* F( B0 v0 W
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    / ?8 @8 ]4 a: [  i$ O- R
  497.   I9 y' Y0 g/ t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);$ `. f$ l& b8 Z) {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 N9 N9 q# S7 _9 f* U
  500.   {
    & E& V0 j& N4 `7 W$ w' ~, f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 q8 y) T  v0 N& l" ^4 g) b% N3 B
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! o" d( n0 P! C' P
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 O1 _, T% ]9 _8 e8 N
  504.     {+ _- S1 Y% ]; I
  505.       strcpy(szPath,szPathTarget);
    ) A* m' k" k9 o" ?+ L& s! J
  506.       SetCurrentDirectory(szPath);6 Z4 r' A6 {$ k& r9 I; }
  507.     }+ Q8 G1 H# s( [3 z4 z. f
  508.   }# P- e! v4 K4 y; }, q8 @
  509. #ifdef _DEBUG  B& q' y2 |2 A% J  B4 u% w- H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 S  c1 K( A/ y# I, T3 H
  511. #else0 \& j4 j4 O& [8 j
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 a! o/ k/ k- R- h+ S
  513. #endif
    ) W. L% f6 m; J+ a, v4 z
  514.   {
    9 {! T. ?9 p/ i1 N
  515.     char tempFileName[MAX_PATH];* J$ J) y# o' O, G! J9 }
  516.     strcpy(tempFileName,szPathSource);, P& c2 {3 X' r; e0 X  L
  517.     tempFileName[strlen(szPathSource)-12]=0;
    - f' A: ^. o: X
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; n9 s2 U- f8 t& ?/ n- }" d2 T- }/ K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    9 s) W% k; Z, ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 J" u: w; j8 r
  521.     return TRUE;8 o. r) E. S) h
  522.   }: ]7 M1 H  D+ K1 u
  523.   // Nuke 0118: Delete run.exe
    + S+ U5 P4 y! p5 o) R0 F. ]: p
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 g8 ]: r$ O6 @  ^& d" s
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. X9 r5 |$ T9 E5 Y; y
  526.   if(!ReadCfgFile("Config.ini"))) w1 E9 _% H  Y5 [
  527.   {& v( k& o2 L- m1 B
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ ?4 [2 C; j. X- X
  529.     return TRUE;
    6 L# V2 J8 U1 Y: g
  530.   }: _0 o( a; {) [* M7 a  Q" _
  531.   HANDLE mutex;
    ( t3 |: _0 A# g& H3 \; }9 B( s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' W4 }: z% o5 Y5 V( j; y# H
  533.   {
    ' {% a" @  r" i& w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : `( m0 s/ t: \5 h. E
  535.     {2 `) T4 u$ K6 I* T( C
  536.       CloseHandle(mutex);) v9 s7 I  Y) ?( O4 k4 d: e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    : A( j5 B) J& {/ S2 c
  538.       return TRUE;
    8 v1 o6 r9 M7 [* O. ?! N5 k4 |
  539.     }& z( M' }6 l* D  I' p3 [
  540.   }  4 v, }% d4 r& `" |$ `2 U
  541.   CloseHandle(mutex);( q+ U# [- P# x9 O  V

  542. * j) ~$ p! p+ w
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - F- D1 o" r0 w- C. g0 ~& r
  544. 0 R8 _% n- ~2 V
  545.         AfxEnableControlContainer();0 `, ]8 L' j/ Y6 J9 O

  546.   t# Q- M/ C2 A- A! d: [3 @1 L
  547.   bCanUpdate=FALSE;
    2 B! {5 j' }  G; A9 j. \* H
  548.   dwStartUpSteps=1;2 z3 f7 m/ E+ O7 e8 ]
  549.   dwProgramState=AP_NOTHING;/ b9 z/ U" r4 g4 h  v5 p

  550. . o+ U$ _" [4 z7 _! E1 t+ Y( u
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) T, F, o" Z5 _1 d  ~

  552. 8 o2 X) p$ W' u3 B; q$ ^
  553.         // Standard initialization. Z/ j+ v% O. c/ D3 |  B4 Z: f: _
  554.         // If you are not using these features and wish to reduce the size+ v, m* B/ b# J4 ]
  555.         //  of your final executable, you should remove from the following
      g* E% @1 j! j; H% N& }: [
  556.         //  the specific initialization routines you do not need.' W) A1 q9 Z9 v& ]% z: A6 j8 r

  557. 3 y6 a6 t  w3 F0 I# z) h# L0 ~  n
  558. #ifdef _AFXDLL6 ?( H3 Y3 L: X( E1 U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL, d1 l, U; @* ~3 ]
  560. #else8 G. r/ T  l! a  S  u+ `% z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' {3 T2 z& O+ v5 `
  562. #endif% x3 A. F8 B8 F
  563. ( g! i* r# I; r) p* p9 |
  564.   dlg=new CRevAppDlg;
    4 C/ r! U, v7 P" d8 @6 y. Z( W
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    # k/ \: _9 \$ c; Y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 I1 Q6 D5 D3 O. i1 t! `
  567.   m_pMainWnd=dlg;# M# @: b" h' @6 s/ m
  568. ) F  `3 Z- v2 D/ H, u
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);$ P1 V; _& K% [+ }' B
  570. ) v; Q. [) ^9 k7 p
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) @& A' X+ c( e, b3 C$ q
  572. //  ULONG_PTR gdiplusToken;
    8 u4 n$ S, d3 c! H( C4 _/ p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    , u& V- ^% n) p6 I9 F3 F

  574. - X, P. a( ~9 j
  575. //        CRevAppDlg dlg;
    ; G) k! q- [/ p1 I$ f
  576. //        int nResponse = dlg.DoModal();
    2 h5 a8 z9 B' m+ Q2 U1 }/ Q) L' X
  577. //        if (nResponse == IDOK)
    * o2 Q3 q4 x0 f; ?& r3 ?0 b9 V
  578. //        {! w" m; q2 ~$ S. Z7 P6 O6 o
  579. //                // TODO: Place code here to handle when the dialog is1 _1 ]$ ]) X; d0 c; q6 J5 {1 p$ N' z
  580. //                //  dismissed with OK
    ! Z' d# g" k& z. u' F
  581. //        }: \4 V- k/ j, i3 t! S6 l. x/ s5 a
  582. //        else if (nResponse == IDCANCEL)* }% G( B+ t. e
  583. //        {
    " _& [, ^) I3 J  `
  584. //                // TODO: Place code here to handle when the dialog is
    + z( b4 u/ P2 a: f) {5 D9 V7 u/ T
  585. //                //  dismissed with Cancel/ S5 f% l0 s6 }0 A# L5 Y" Q$ p
  586. //        }
    - N5 {! F5 g0 {1 e* @4 {

  587. ( C3 f9 f9 E$ E4 d$ d9 I( B
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 ]9 ?% {& S, b4 v5 R+ }
  589.         //  application, rather than start the application's message pump.) [- G3 {! ^" K) T' C
  590.         return TRUE;0 N/ T' Z: o2 ]- i7 i# @6 v4 O
  591. }. i; l8 ?$ L  c5 e

  592. 8 Q1 v. r! q2 w6 H+ ^' B9 _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    2 E3 E$ p8 j/ c% p- ?: W' ?
  594. {
    % Z$ q+ S5 Y3 _: H# U  H
  595.   int i;
    + F; o9 Z7 e! \, F* N
  596.   char *szRet;
    . e. p) \4 W% z$ }+ {

  597. ) Y: X0 \; K# m+ Z) q, S
  598.   if(pSource) { itoken=0; sztoken=pSource; }3 X5 \! B8 N$ v) I2 H, V9 a3 N9 c
  599.   if(sztoken)6 ~/ {9 p+ F% u. a9 u, k# B3 p" m# C! B
  600.   {2 ~7 c* _( d, m  d7 q( D$ f" {
  601.     szRet=&sztoken[itoken];5 m  j, \2 s! `+ r. B6 o! U3 o
  602.     while(sztoken[itoken])+ n( l3 t' A  I8 ]* _) d# a0 [# F- _  B
  603.     {* C0 Z1 f! C5 r
  604.       for(i=0;i<(int)strlen(token);i++)* Q1 @6 p( ^( A% c5 j
  605.       {3 J! s6 P/ z( z' L# {
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): Y( h  n) A' K+ _: S5 l; ^0 U0 J( _5 ?/ f
  607.         {+ r1 S; R) x. B/ C- x* h6 d
  608.           sztoken[itoken++]=0;! e6 w. M6 ]) j& i) J1 \4 L
  609.           sztoken[itoken++]=0;1 Q  l: o* I1 j$ b: t. `
  610.           return szRet;
    ! h/ X5 [% k* Z; b9 }2 b3 @
  611.         }
    ; w+ R8 A9 n; }6 ?  C8 K6 z. ]
  612.       }
    . A0 o$ X6 u2 a
  613.       itoken++;
    4 F" o& w% z. I3 r% f6 r0 F  v
  614.     }' x6 C1 X. M; m' I
  615.   }
    ' Q1 z4 k: X( u5 Q" j; M: o$ ?% y
  616.   return NULL;! L3 W4 i+ m3 g4 v; c: F/ \
  617. }
    4 E& c6 \- \0 H3 e3 d/ V# [
  618. * o# Y: f# e9 c& K) s' ^- f
  619. void ProcessProc(long Total,long Current)
    + C9 w( l- C  Q5 f- _3 a
  620. {" M9 @7 N3 @4 G) V
  621.         MSG msg;+ ^  ?# k; u# a& ~; v2 e4 u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- G6 m/ {$ t! ~" R2 J* c4 M* y8 V
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    9 d4 C3 V9 H& R  n! t4 }
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " w, D0 |+ X6 W- w4 g
  625.         {
    & ]4 j3 C+ h( L1 i3 N
  626.                 if(!GetMessage(&msg,NULL,0,0))
    : Z0 p# V! w$ f# o+ v
  627.                 {( ]$ d* B% T' _, @! e  h
  628.                         return;6 s+ \& k# ~+ H2 c3 t4 \
  629.                 }8 _9 E1 t8 D- w: b$ i
  630.                 TranslateMessage(&msg);
    2 h, {3 [, ]; g4 m* }
  631.                 DispatchMessage(&msg);9 V0 U2 H; r1 B. o% l( S
  632.         }        ; Q6 K- x: ~' I5 {
  633. }& K% \2 C4 h6 R' h

  634. 6 P- H5 }0 O2 H  l4 D" B( l( w
  635. BOOL bFirstChar=TRUE;& Y/ A9 X' t" q/ R2 @

  636. 6 M( i  Z5 x- G9 v
  637. BOOL CRevAppApp::OnIdle(LONG lCount): P% b) v6 C+ a' O
  638. {6 o( m1 g: P) T4 b# R6 M; b1 {
  639.         // TODO: Add your specialized code here and/or call the base class
    * ?4 [! C% M7 h  |5 \
  640.   switch(dwProgramState)5 [& w! M" F7 `7 p, P" o. n" g# u/ |
  641.   {: D, O+ r- ?+ P: T; e
  642.   case AP_NOTHING:2 d: V- }% Z0 o! a" V
  643.     switch(dwStartUpSteps)
    ! l, ?$ K, s9 k" {" {% ?, @! Q
  644.     {
    " g- H' Y* q3 t  w# i
  645.     case 1:1 A0 }) h# o: \
  646.       {5 q9 {) M6 X$ @+ o1 V
  647.         int i;
    1 x# D# u! G8 J/ k2 v; P
  648.         CDC *pCDC=dlg->GetDC();
    , |7 ?# n- Q1 u$ y8 f" B% i4 D$ q4 U
  649.         HDC hdcwnd=pCDC->m_hDC;  a- S0 ^- I7 ^( ~
  650. //        Graphics graphics(hdcwnd);8 X1 D# E; d# _7 E) h& J% b- w
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    % U- R: O+ b% G
  652. //        INT iWidth=bitmap.GetWidth();# B! f2 L( ~+ L6 l6 h; Y. h  {
  653. //        INT iHeight=bitmap.GetHeight();$ f! x$ g6 j8 D; D2 |/ E
  654. //        Color color,colorTemp;
    2 W' U1 B9 ]( Y/ V; D  \/ l
  655. //        for(INT iRow=0;iRow<iHeight;iRow++). o$ E+ I$ `! X/ b
  656. //        {
    & ?2 e" x5 m4 T  h& W0 X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' H; f+ p0 e0 b; ~
  658. //          {* z6 {" e, _5 Q' h* u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);5 _6 }. a! y, N# l, E) p
  660. //            colorTemp.SetValue(color.MakeARGB(1 @2 ^/ I* l' s5 @2 L$ u5 W7 x. `
  661. //              (BYTE)(255*iColumn/iWidth),* G" k! }4 p+ h# f0 f
  662. //              color.GetRed(),4 ]- y* h, S" h6 Q" }4 U8 w4 k: t* P  x
  663. //              color.GetGreen(),
    9 U% G$ X: P) ^: E! J- `" G$ M& |
  664. //              color.GetBlue()));
    4 P9 ]2 |# x+ `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    1 t' \/ k5 U& [( q; x
  666. //          }- L3 Q' y* V( W! L0 C8 {* y5 U
  667. //        }& Q0 G1 `" g$ P  ?& |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 h. w8 J8 e3 }
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");; o; n" x( v( o" f+ n- V* ^0 v
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");; y' A: O! _* W3 a+ N5 p) }# N
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / l; Z' E3 K! r0 c
  672.         for(i=0;i<240;i+=8)
    4 z: ~  G* A. e, B1 B
  673.         {
    ! u9 N. _* U) S" a) P& W
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ `5 o* e! P7 _1 d+ F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& ]! h& y7 [  ?+ o/ ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 u( s! v$ p; J$ y$ F  q
  677.           Sleep(33);& ?6 f7 O! t4 O
  678.         }, U/ M5 s1 ~* v
  679.         Sleep(1000);" k5 A, O9 V. C  L$ t" {7 p% H
  680.         for(i=240;i>0;i-=8)5 s9 H; e3 G  n/ B
  681.         {4 U5 A7 k# g% p
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 u4 U+ _/ u* W1 @' J
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " U5 F! y/ O% Q/ }' F' F
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / P6 p: m, Z4 E6 r
  685.           Sleep(33);
    ( C, S: f% v( o  s  n
  686.         }* J7 b4 G- [1 k% W( Y1 ~; p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # W& m% n& P7 e" m$ N3 u5 d
  688.         dlg->ReleaseDC(pCDC);
    : W9 ?5 s+ D8 @1 V2 e: w8 I
  689.         DeleteDC(hdctar);/ g2 W' A6 V% E5 l
  690.         DeleteDC(hdcsrc);
      @0 n# Q7 Z3 k) v# T
  691.         DeleteDC(hdcorg);0 T; a7 S/ }7 s/ i8 M1 H* K, k4 ~9 W
  692.       }
    : I4 J% ]* M! \4 A5 X2 S/ o* c: U
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);' h  N% r0 I9 Q0 l( o) g1 q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    5 u$ M" I2 \  s& O& j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 A9 W6 X  T) A- P& q$ B% z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");4 Y" s4 u7 w; O- I. c& \4 [! c
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. \  z! j& r; i( X
  698.       if(!Dn.Connected())( C; d3 d& r9 u0 d/ x. w
  699.       {
    , o' _" d% O+ I9 N3 w
  700.         dwTotalFiles=1;
    7 ^8 o' q' A) ]2 ~% [
  701.         dwDownLoaded=0;( F: v9 F, Z' l8 X
  702.         bSilentStep=TRUE;% ^. ?8 v5 R0 V# v- y( _
  703.         bCompressed=FALSE;; i- B" Q; _0 T) a- _$ Y3 T! K
  704.         strExtLocal.Empty();
    : h8 F( v3 G* @: C7 Z
  705.         strFullName="readme.txt";
    $ T3 L; r) P9 l: T# c
  706.         dwProgramState=AP_CONNECT;# {: o; a0 j. B5 H  X/ V
  707.       }8 F4 D* Q# D( x# w: H. z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( r# }/ |. Z8 J% n
  709.       dwStartUpSteps=2;
    6 N4 P5 I. f* {' d6 f; d3 T7 R/ k$ L
  710.       break;
    $ b! V8 e2 M9 W
  711.     case 2:( n8 ?! J+ s+ E$ k1 N" f
  712.       {. l" k: @6 A$ r* @( M  ?& {, s
  713.         int iEOF;+ R: H( g6 P% I6 C8 ^
  714.         FILE *fp;
    ) ^; j1 v; h0 Z( t. ~) ~
  715.         char szString[512];4 W6 j- O0 Q6 u0 T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");) A/ {9 I  ~% u- T* Z2 g& x# h' f
  717.         if(fp)4 l$ T  s: Q# B, Z! k3 ^
  718.         {3 Y% V) Z2 K/ H# s. y5 q
  719.           do3 d+ A6 X' s8 K& D+ n( h. V( Z% ^
  720.           {' R2 v1 c$ y- E5 r, q# y. Z
  721.             iEOF=fscanf(fp,"%s",szString);, T0 d+ l5 J: O) |$ d) B
  722.             if(strlen(szString))
    8 A5 K" T9 D2 M( L
  723.             {
    / ]' T8 b6 H$ \1 j6 c- R8 V
  724.               if(bFirstChar)
    / j0 V( X; G7 D8 k) e! T, `0 h
  725.               {3 k, ^' m% y, x- ^0 x
  726.                 bFirstChar=FALSE;
    $ t% z& R, x" A4 p2 b4 U+ p# K, P
  727.                 bConnectIsBig5=FALSE;. P  c1 U, _9 A/ }
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 v5 Q) o9 S+ ]3 e# v, w
  729.               }
    ( ], |( E. [0 n# g
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- }0 l/ U4 t. P0 Y4 E# ?5 m
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. q5 t! Z, I( e4 S
  732.               dlg->m_ListText.AddString(szString);0 B+ h3 G1 n! k& Y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 Q$ o- j6 }3 W
  734.               *szString=0;0 E6 o2 A- R8 `2 O. k+ L
  735.             }
    / r, c+ }/ X; ~4 j+ y$ }* f! ?+ |
  736.           } while(iEOF!=EOF);! s& W" d5 s  }- J7 V
  737.           fclose(fp);% [; I7 |% r' Z" c; v3 x! ?- w
  738.           unlink(".\\DownLoad\\readme.txt");4 ?5 w+ T0 }( ~. b
  739.           dwStartUpSteps=3;
    5 V7 Z3 Z, g) h& x( k
  740.         }! V% C) ~5 U  C$ E: Y: c) m0 F
  741.       }( ^# z$ S; ^/ O
  742.       break;
    5 m4 r( U* Q7 M5 K) \. _5 t$ M
  743.     case 3:9 ^" f, |6 m" B: X
  744.       if(!Dn.Connected())
    . |7 L2 y4 H+ ~
  745.       {: d% a" z: O; l$ m* o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , C" l4 R1 L, [2 L9 V
  747.         dwTotalFiles=1;
    " U* _9 O8 E7 H$ V- m+ `) V$ q
  748.         dwDownLoaded=0;0 `0 `! |% Q0 L  q# y1 z# m
  749.         bSilentStep=TRUE;
    ' x/ f- r# ]! n7 O' ~; y- W
  750.         bCompressed=FALSE;* [1 c5 y# p. s1 o2 A4 U. v& _
  751.         strExtLocal.Empty();: a8 {0 N3 Q" @0 Q  r# O& J
  752.         strFullName="checkversion.txt";
      y' m* J/ K* _& w9 g2 R- c* r
  753.         dwProgramState=AP_CONNECT;
    " t3 A! J* O5 M9 r  j
  754.       }
    . y: k0 C. }* a. X! B/ c
  755.       dwStartUpSteps=4;
    ' Q+ U2 w. c# {; R% K+ a
  756.       break;
    % O* }: ]  D! ^, S9 T8 t6 v
  757.     case 4:! [. Q1 }( T! B& u
  758.       {( L7 W# K# T& ?2 b
  759.         FILE *fp;
    4 ~- s4 X' O6 q
  760.         char szString1[128];4 C( |2 F6 p/ }
  761.         char szString2[128];3 b. ]" L+ L; n1 W% ~: [% j) a+ B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; ]' l: j. S  r8 _) V. V9 g$ @
  763.         if(fp)$ v4 N, M  m# e/ [
  764.         {
    8 s) E! d4 ~' V  ^3 }
  765.           fscanf(fp,"%s",szString1);
    2 }2 z2 O6 d0 I8 {9 x& B$ Q
  766.           fclose(fp);
    9 v4 r% \( F- ?2 b3 h  Z4 B
  767.           fCheckVersion=atof(szString1);
    $ |0 k& E! R- }0 H% S' T
  768.           fp=fopen(".\\checkversion.dat","r");
      K% c5 u/ u# Q
  769.           if(fp)  S+ c- P: Q3 z- r
  770.           {
    - Y% ]0 l* _% [
  771.             fscanf(fp,"%s",szString2);2 M- M2 e! m6 F  a* u+ G9 N
  772.             fclose(fp);
    * L( }/ R. j+ {. u) ~8 n  R+ l( I
  773.             if(atof(szString1)!=atof(szString2))! r. X" I2 T4 E( o2 b7 T- @# u
  774.             {! q- A& G  t5 ~. u( r
  775.               if(!Dn.Connected())
    / B3 `& ?  u% V. G& M3 o/ n, {
  776.               {
    " ^; \8 ?# ]6 N, S3 l
  777.                 bFirstUpdate=TRUE;1 M! w$ t* V, p9 P- F
  778.                 dwTotalFiles=1;" m& H0 j# }  F
  779.                 dwDownLoaded=0;
    , [8 C; c/ o& ~0 p
  780.                 bSilentStep=FALSE;
    + e  ^, ^- a4 e  G3 D" G( c
  781.                 bCompressed=TRUE;( y+ h" \: P( }% M. T% f
  782.                 strExtLocal=".\\DownLoad\";9 \$ z+ B1 Z. p$ p3 n
  783.                 strFullName="update.txt";* _: I, S2 @* T( K
  784.                 dwProgramState=AP_CONNECT;1 C  Z7 K$ @; ^; @" z8 a) t5 k  l; v2 r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 s8 z# l. h; _, P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: C0 H" j7 L2 ~* |$ c
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 l4 A4 U7 {  _" t

  788. / H) o0 u3 m: U1 X4 o+ k( m$ R
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ E% m8 I! q4 h" w$ j( X
  790.                 unlink(".\\DownLoad\\checkversion.txt");. w5 O' T, ?5 ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    : K0 k) }& |! J  E- @0 B
  792.                 {* s+ t. Q6 v& R' |; ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - Q' [8 J9 r; X. l% v% l
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");$ }! }. Q* x6 F. s+ x2 ^+ I, b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : A6 k! h8 O" a0 J3 C) t
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + T& M6 O: K+ b+ V
  797. * e0 j& _' k  Q8 E2 a0 z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      o4 @" C2 ^4 O9 {0 G9 E0 i% d/ P, s3 t2 ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ Z2 w, s3 E  x
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    * B8 k. P% ^9 e/ a
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 v4 Y9 N- c# h! P) u0 a
  802.                 }
    , m4 c9 _) K: T! I" B/ Y3 U
  803.                 dwStartUpSteps=5;
    " ?8 V/ |0 e% G) Y8 l/ u: A
  804.               }7 x5 n! ]( U7 R0 G! Z4 i& p
  805.             }8 t; E9 a  z/ u% k2 {; s
  806.             else
    3 ~' b/ b" T, K- v
  807.             {" ?/ {& \1 t: s: @1 ?) c0 U4 v
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " r: Q( w- D: q! `* z5 q$ e
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 z+ L% F4 V8 E" W7 o2 t/ y7 F
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 t9 Y5 d6 O7 I+ j
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* r" L- i* D5 r) C

  812.   W; }) n. P% Y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 a4 f" a! d  R& ]- |# Y* I4 i
  814.               dwStartUpSteps=99;& |9 p) i8 @1 U  ~1 N. K7 u6 U5 Y
  815.               bFinishUpdated=TRUE;/ e  A1 j6 f- h; t
  816.               bCanUpdate=TRUE;
    7 h: B+ A& K& _6 r$ k( L. \
  817.             }9 w( I/ ~8 p9 p/ h! n1 {% d
  818.           }
    * n* x9 V5 S. h! t
  819.           else' g! F$ V- K. G
  820.           {$ S) L1 y9 v5 h$ Y: h% m  O4 S
  821.             if(!Dn.Connected())
    4 e' B& C4 P& }+ E9 e$ z1 T
  822.             {
    # y0 S$ U. H0 [& L$ ^
  823.               bFirstUpdate=TRUE;
    ; B8 v$ C. i. k0 J6 ~1 [# g
  824.               dwTotalFiles=1;8 n+ B6 S# L) a3 O- s: ^9 \/ a
  825.               dwDownLoaded=0;0 h- Q' K; Z  m- x: ?3 }" V
  826.               bSilentStep=FALSE;& o% r9 w, P0 @
  827.               bCompressed=TRUE;
    0 m- q  b+ R7 k: {* M
  828.               strExtLocal=".\\DownLoad\";
    3 _. L! e2 z! ~9 k/ B5 s# s" r
  829.               strFullName="update.txt";
    ! Z5 Y( i: o& M5 U
  830.               dwProgramState=AP_CONNECT;; _0 T5 v, ]4 z, m
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    % E0 A6 p# e6 m$ u8 N4 l
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / j) V9 N+ t+ V/ F" h/ D' t- }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- P* [  D% d' A3 X0 P' H
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 v" e# a8 }6 K% g* I: r
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 [$ I: p; @. g% ~" x. a  e; I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' f( Q4 ?; h" L, ]
  837.               {2 T# G; B9 h, e* ]6 r
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");) v, c- r- N+ \
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");( g/ }' B* M4 }& |, Y* ~  t
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    4 U6 o5 o) y* b: A) r3 T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) @5 |+ T" q  J3 W4 }7 y8 s% N8 x$ T7 m
  842.                 5 B  @: i7 T! d$ N. l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ \6 T  {8 O7 t+ j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / }4 y3 Q$ q' u) X7 k0 k# _
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    / h5 ~( H$ H: g1 D2 B) @1 o
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 i% G: X0 X& E% t
  847.               }8 D, f; Y0 G( t
  848.               dwStartUpSteps=5;
    8 Z/ G4 d% B) r5 p' N1 P8 \
  849.             }8 O1 O7 X3 s1 H8 h9 S/ q
  850.           }
    8 i& R/ [8 F# C, Q
  851.         }
    ' m6 o* s" z& G4 D- b1 `! Z3 S
  852.         else
    - b$ c" ?/ d5 _  z  [
  853.         {
    9 }8 S: a) c' i; X. {
  854.           dwStartUpSteps=3;
    5 \! J, A/ d& w% @' \
  855.         }/ P/ _1 T1 e6 K7 V
  856.       }
    ( O5 b3 N% z! F1 B4 y
  857.       break;
    - f$ E3 Y" i! p* q: o2 [
  858.     case 5:+ B. b3 H6 T9 X0 G# m
  859.       {
    9 R- t' X; H" T* x. A+ }
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ! y$ k% U- T9 p) o+ B" v& c
  861.         {
    4 o4 d$ |* V& _/ A6 J! t) S" D, o
  862.           int opt_overwrite=1;
    / m% J" A) h) L  n+ j% {, }6 R
  863.           int opt_do_extract_withoutpath=0;
    / o6 k" R4 z' r! i6 T. m2 c7 L- ]4 G
  864.           unzFile uf=NULL;' S0 ]$ A- I" x8 y) X3 Z+ s5 P7 U

  865. 4 H5 g9 e) a, y% Y( ]" J
  866.           uf=unzOpen("Wsa.zip");% o& s2 l' e# _, j
  867.           if(uf)
    ! L. J. b4 v# A1 q4 c5 X
  868.           {
    & a# v& A# B9 y: X
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);$ p2 `" m3 F# p- `
  870.             unzClose(uf);
    ; ^: y& L4 x# _' V7 u
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    : Z; j& H- h& f$ o. R; L
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) A7 ?+ Q3 S' U
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    7 O  S/ P  a. s( b# P! }" f2 _. E
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  P2 \/ F0 a- L* M# U1 @
  875.           }
    ( k. e8 S% s! {( E9 k  X" O
  876.           DeleteFile("Wsa.zip" );4 T& F, j1 v: f, a: k: g
  877.         }* b& y# o& i+ n8 ^9 o- ~/ B

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

& b6 ~1 k) w3 f  X  E0 _$ ?2 d) {5 q$ G3 P% z4 C# n

評分

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