CSUpdate.exe源代码

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

) ?: z( p" F. }0 ], T% P! i
  1. / RevApp.cpp : Defines the class behaviors for the application.4 n7 r+ A1 i; {; ~& B- V, j
  2. //
    $ q+ j# q& J* b9 H/ S/ Z% T. n
  3. 5 L2 P) E) v* A( S* Q  x: ^  T
  4. #include "stdafx.h"% m& }: b$ S; k% }
  5. / h! Z0 G( O& y% c+ J  d
  6. //#define UNICODE
    4 u% `0 [$ c- S' n% s! e
  7. //#include <gdiplus.h>& j# B- u& ~/ f7 J' @; ^
  8. //using namespace Gdiplus;
    3 k7 r! S9 s9 x4 T  H3 Z$ H

  9. ; |! w$ Q# u" ?$ r: F% P
  10. #include "RevApp.h"
    ( H  f% v3 A% S2 H4 }$ |
  11. #include "RevAppDlg.h"
    ' r+ y% d2 L# w# A9 G

  12. 7 ~# w3 a" Z% J/ M3 k. I0 T. R
  13. #pragma warning(disable:4786)
    $ K1 n! N- }4 H8 |4 @# G
  14. #include <map>4 T% b# ~- Q7 U2 n
  15. #include <list>- U; Y% [) E: k
  16. #include <direct.h>) d) |: M$ |3 E8 E* S+ ^
  17. 8 K) u/ X- X* e: x2 o% q
  18. #ifdef _DEBUG
    ; C8 u) v4 t! U7 n& y. v
  19. #define new DEBUG_NEW
    0 l8 u  Q9 t+ U3 L5 J
  20. #undef THIS_FILE6 _" M$ X0 N, e$ _, d+ P
  21. static char THIS_FILE[] = __FILE__;
    . V: Z1 ~( B- n: h, r
  22. #endif8 R/ @: a5 M+ [
  23. #include "SkinResDef.h"3 Q% _* ^% A4 B; M! f' T# I$ e
  24. #include "ChangeBG.h"
    5 A$ n4 Q  }7 B  |# i
  25. #include "AFXINET.H"3 S+ \! G; L( q2 M

  26. 9 p: ?1 ]9 B  M9 |1 H  \8 T
  27. #define TRADITIONAL_CHINESE 0
    8 U2 p. h! f0 x* K
  28. #define SIMPLIFY_CHINESE 1
    2 w1 B* F* c8 L" H8 N9 N. W  L* H
  29. #define ENGLISH 2
    - z" K. e9 a7 G! L: Q8 J8 R" |
  30. int m_iLanguage = ENGLISH;
    4 Z) [* F0 a$ [
  31. /////////////////////////////////////////////////////////////////////////////
    : ]. c3 U( D: B# {  H/ Q
  32. // CRevAppApp
      C- p' D5 ~# I$ m  g

  33.   d6 u4 Q% n3 u$ f6 D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)8 _4 d$ d- w5 ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)  Y0 s7 J% v" g( n( e* t' Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    5 ^' j9 ~+ g7 m* ]& l4 s; B! t
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: j: Y2 q' b: e+ T  ?- Z" @9 C
  38.         //}}AFX_MSG  M. q: x6 ^/ y- H. V  k
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)7 Q0 e) \8 _. `
  40. END_MESSAGE_MAP(), j2 N/ I: ^& N! o

  41. 0 u2 k; W: d$ \1 _4 G6 k
  42. /////////////////////////////////////////////////////////////////////////////
    * \: _/ ]) C8 f7 `- R0 V
  43. // CRevAppApp construction4 d! q# Y2 V; b! ^" B
  44. & L* v9 w4 b0 M- V* A+ J
  45. CRevAppApp::CRevAppApp(), l/ A. r: ~! Q( c/ p
  46. {
    ; R% h+ M! [/ U  a2 G% M& n
  47.         // TODO: add construction code here,1 W7 d2 n' v" y' [
  48.         // Place all significant initialization in InitInstance
    . x2 D: O8 n8 W: Y" |
  49.   bDisplayIsBig5=FALSE;
    ) j$ w& S% G5 }" l* [
  50.   bRestartUpdater=FALSE;; x, Z/ \& n( y  p* v! S
  51.   bFinishUpdated=FALSE;7 S  S$ f8 t4 E; x
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; }  J& j, X! x7 c2 q
  53.   InitChangeDataBig52GBKS();1 H9 v7 Q6 O! E  k
  54.   InitChangeDataGBKS2Big5();6 n2 L/ g  r0 {! l
  55.         //
    # b6 Q6 X2 L/ K" F
  56.         bClickRunExe = FALSE;
    & ^9 {7 n0 i& m1 z; N% M/ j
  57.         //' g) S6 a. V8 s1 h& \% Q8 W8 Z
  58. }
    - E4 I( ~$ \0 J, x
  59. % R3 v( Q, K2 H) H: S) r
  60. CRevAppApp::~CRevAppApp()& z# w; w" H% o
  61. {) n% ?5 o; _3 e, Q' A
  62.         // TODO: add construction code here,
    - k. y5 f4 c# `$ W* X- ~0 u0 W& O
  63.         // Place all significant initialization in InitInstance( |4 t$ d' t7 z: @
  64.   EndChangeData();) {6 {! h  [7 n' {# x9 R' ~
  65. }
    ( p& c2 K+ p" q' P' Z8 |4 ^

  66. 7 \: K9 Q' R3 a0 k
  67. /////////////////////////////////////////////////////////////////////////////* ?1 X' X' C' |5 J" L7 h% w
  68. // The one and only CRevAppApp object
    + [3 q' ]' W5 a# b2 b2 G9 N) a
  69. 4 D6 z" y2 O$ h
  70. CRevAppApp theApp;
    ' V: \) g9 E' b4 v! V

  71. & C9 y' K$ \, R
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 e  R; I$ r+ S0 _
  73. {$ ~' ?3 E8 J: h$ L
  74.   int iEOF=0;5 u$ z( X8 f9 [2 ~1 L9 A6 `
  75.   char szTempName[MAX_PATH];
    ' ?( _9 Z. Q" X3 @
  76.   *szFileName=0;
    ) S. M: [. u) m  q- Y
  77.   iEOF=fscanf(fp,"%s",szTempName);: J. J+ H" x& s7 w! I
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & C  E1 @/ q; j. u
  79.   {* K% B+ B1 J. z( y  [& }' j- ?: x
  80.     strcpy(szFileName,&szTempName[1]);) v0 b& ^; R( \* {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % N+ B, @* Q6 C: z3 R
  82.     {, J; G" Q8 E9 X- |3 W3 X7 C) q
  83.       iEOF=fscanf(fp,"%s",szTempName);4 @+ N* W2 B  @" s. @
  84.       strcat(szFileName," ");
    * W' _" M1 C, R& ], `
  85.       strcat(szFileName,szTempName);
    8 t7 B' w- F2 p. c9 {3 J- f2 k) F
  86.     }
    3 R# m+ i* u$ y; G4 [$ O
  87.     if(strlen(szFileName)>=1)
    " i  w- s3 m# E
  88.     {9 h! W, f) v1 }4 j* x- ]
  89.       szFileName[strlen(szFileName)-1]=0;
    . G* P2 j8 O1 d( T/ {5 @
  90.     }) S. [: v. _( S, r0 F2 E
  91.   }
    % s; g) h' C2 z( f* l
  92.   return szFileName;' S6 ?! v+ M9 I) K: X1 h4 A3 R
  93. }( h1 h6 m# `! e4 f5 D
  94. " Z6 F9 B  M- Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' ~! {: d; L; r, V, @' g
  96. {  p* @9 y2 z+ Q
  97.   FILE *fp;# k7 A5 p2 r8 r- S) U8 \* n
  98.   char *key=NULL;1 w4 u0 [7 P- n# s: t  M* H
  99.   char version[MAX_PATH];% s8 j9 `- B# T5 H9 j
  100.   LPUPDATEFILE file,olds;
    + l5 u% G; Y: y" r  q& y( {6 z4 [
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : I* G4 |/ S3 S2 H) S& a  o4 l2 y
  102. 5 b& W+ }$ y; H3 z
  103.   UpdateList.clear();  n3 L7 c& X4 G+ X" r- q
  104.   UpdateFile.clear();
    ) F. f& Q. \+ L" I
  105.   if(GetFileAttributes(filename)==-1) return false;
    , N* F4 x% H5 ?" r4 n
  106.   if(!(fp=fopen(filename,"r"))) return false;1 _% P( b: x2 t0 F- U1 y
  107.   fscanf(fp,"%s",version);
    1 T" ]& l$ h+ i. P/ A6 c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ j" `  H% y3 Q
  109.   while(fscanf(fp,"%s",version)!=EOF), g3 c5 V- Z0 G0 Y9 c
  110.   {3 ^4 h  Z% i; [8 X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # Z1 T* G' L5 \8 n* m; _
  112.     fscanf(fp,"%s",file->path);5 I7 P5 z0 \! W! j  r- P
  113.     ReadFileNames(fp,file->file);
    , K% M; E2 o2 N3 o# i
  114.     strcpy(file->full,".");
    3 O9 T4 t; C' P% C5 k& |& ^
  115.     strcat(file->full,file->path);
    - i$ T  E, c" a* H: D
  116.     strcat(file->full,file->file);
    ! d! o9 C# ~9 o2 D% e, q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 [8 D: H+ u  }% N9 z
  118.     {
    % a/ L% J) f& U( B4 ^
  119.       file->vers=(float)atof(version);. F( e$ j6 b& t1 x9 J
  120.       UpdateList.push_back(file->full);4 m( p1 T; ]  R8 N3 ^
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & }( z' m0 C' T* b6 g
  122.     }$ k' X$ A8 F! U
  123.     else$ p' ]+ [4 j6 {% z1 S  w, f
  124.     {& R5 g2 c) q2 Q8 Q! {
  125.       olds=(*p).second;) v' c/ ^% @9 W' v" `6 D
  126.       if(olds->vers<(float)atof(version))& ?/ X2 c8 p2 {$ x, }
  127.       {$ W* T7 ?  W. W. R: Y6 `
  128.         olds->vers=(float)atof(version);) U7 M( R; `; A. r
  129.       }
    7 Y" U2 V5 g: d( r2 B7 A
  130.       free(file);
    . Q! l2 l0 t, y$ D
  131.     }
    6 V7 ?, l6 N+ F/ `% z' j) {
  132.   }
    2 [+ k. L. {& b
  133.   fclose(fp);" F& O$ [( X2 ^: g5 }6 V5 G9 t
  134.   return true;
    : ?$ O& l; s- h& s
  135. }# b' {( v9 w. Y& B7 q

  136. 8 J! ^" l% L7 N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    9 Y. E% Z1 L  C* I, n) ]: [
  138. {1 ^0 q3 o/ }! Q( k! D+ C
  139.   TCHAR  szFull[MAX_PATH];' f, ^, a# b. Y9 R* R
  140.   TCHAR *token,*inter;$ f+ a  S$ q0 b8 a" i1 c
  141.   *szPath=0;
    ! x, {. S; l5 R
  142.   strcpy(szFull,szFullPath);* Z6 G5 O, }, O
  143.   token=strtok(szFull,"\\/");3 ]* |% a6 Y' v( Y, O/ x+ H+ _( _
  144.   inter=token;
    $ r( z. Y9 @/ ?* w
  145.   while(token=strtok(NULL,"\\/"))
    * Z: i+ O  ]% K& B4 A* J9 ^% |
  146.   {
      w& D: q' f' Z$ {% G  Z
  147.     strcat(szPath,inter);- q3 W% D3 @% X
  148.     strcat(szPath,"\");
    ! a, W6 `& s" T( l' D) f0 a
  149.     inter=token;( s: T3 [% I; ]( ]
  150.   }
    4 d; E7 v/ o0 V* I. R4 T( a% ~
  151.   return strlen(szPath);
    $ \5 x) U* z. l. l+ _
  152. }
    - b+ {3 T8 }- b1 D" h' Z

  153. " m5 f5 `. A4 g3 B# l( c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - x. \* p+ T7 f1 t" `& j; P
  155. {5 L6 g7 O' B5 B
  156.   DWORD attrib=GetFileAttributes(Target);! _+ T/ t% U' D6 B* [8 m- [
  157.   if(attrib!=-1)' \! h% q" C( P3 F$ c* ]) R: d) v
  158.   {
    ( i% w% A, }( }5 ~2 _) y7 h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# k' R6 ?" S) i" O3 W" S1 z" F  M! l
  160.     {" I% l- O& W! x) o- l+ o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( h; n: }0 g2 x7 }' `, H* L
  162.       SetFileAttributes(Target,attrib);$ {! [, ~2 f+ B% D3 U
  163.     }
    % x/ r+ u$ x& C$ E* i1 b' y8 A: F
  164.   }
    / ^  @( X1 X+ ^+ w; Y
  165.   CopyFile(Source,Target,Erase);4 y2 L. e/ K3 M! \) _& N7 y) t! s/ x3 }
  166. }9 Z6 b  G4 H$ k+ t

  167. 6 n2 R1 x+ ~$ ]2 Y* t
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : C, p- |- D6 n* U
  169. {
    5 A6 D: W$ W' G* Q
  170.      FILE *fp;
    - P6 h: `+ W2 Z/ v& J' y* d
  171.      char  szBuffer[8192];
    - B" y- A) O' V: q5 l  }9 e
  172.   va_list  argptr;' Z4 _, m* f# ]; z/ ?: ~
  173. 4 W$ |, y4 m- n, y* D# x
  174.         va_start(argptr,message);
    : g7 u, x) s: k) J2 @
  175.         vsprintf(szBuffer,message,argptr);
    3 Z/ J# o0 C+ a7 y% H7 C4 i% a
  176.         va_end(argptr);+ T: q; N7 N  \. s6 j  s
  177.   fp=fopen(FileName,"a");; L2 |' F) d  B" y) _  A
  178.   if(fp)& w5 O. D+ ^! h9 y0 J) |
  179.   {
    , ?+ b  f) f7 s: m* Z& i- G- j
  180.     fprintf(fp,szBuffer);
    , n% n3 Y5 h6 }: _$ A
  181.     fclose(fp);
    7 i, e6 q! J+ ^
  182.           _flushall();
    9 Q3 F8 r5 O# O  d2 w
  183.   }, }! ^$ b1 d; V6 Z% l# Q) P
  184. }
    # Z  B# {. r4 {$ A

  185. ) Z0 Q* e2 Z' r9 P. @
  186. BOOL CRevAppApp::Fclearf(char *FileName)( {- W: O- s# j5 [/ {! `
  187. {
    1 |/ ~/ _# Z5 Z4 ?
  188.      FILE *fp;# m1 A. O' g- L2 \3 z% I
  189.     DWORD  attrib;% I1 g7 I% w6 |' P
  190.   attrib=GetFileAttributes(FileName);$ Q+ d6 v: p3 Z/ k: V0 e" z
  191.   if(attrib!=-1)6 N$ e8 q9 d1 s
  192.   {8 Q7 R2 y9 i6 J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    6 A' Z* z: ]4 x" J) w
  194.     if(!SetFileAttributes(FileName,attrib))
    9 \. v. X1 G# {0 ~1 |# }
  195.     {
    - c+ G. i2 n" M8 n7 M8 E. N4 g
  196.       return FALSE;" P2 E4 A2 R( h  g; M9 `
  197.     }: N. Y! y6 q! u) ^% }* Y+ a
  198.   }
    & x* p; l0 C& L) v
  199.   fp=fopen(FileName,"wb");
    8 [4 s7 U- t% G7 T$ V
  200.   if(fp)
    ( W' J9 V! L2 C
  201.   {
    / d' W/ A, w/ c5 G. [) j
  202.     fclose(fp);
    : |5 _9 P2 W2 o0 {; e( z3 {% G6 X: D
  203.   }9 O+ n- ~; c. {1 _$ }# L- f& a
  204.   return TRUE;
    # X7 P6 N3 O3 k4 C* i- _: _
  205. }
    : G- R: M4 a0 P9 j' F# M; P" `' L

  206. 8 }% u1 O. I( ~5 _& u9 K+ R* j" N
  207. BOOL CRevAppApp::UpdateLocalVersion(void), x7 X# B$ r8 D. {# W; n4 X
  208. {
    ! e2 u( X" N) v2 _, J2 ~
  209.   char filename[MAX_PATH];6 [* J1 Z2 \# q! s. V- ^
  210.   LPUPDATEFILE file,olds;& U) |$ S1 F- P, ?3 f% Q( m) X
  211.   std::map<int,CString>::iterator i;
    ! f0 p& e% ^$ P* D$ w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;( v* x% {  z0 o) u6 O+ P$ M; J
  213.   std::list<CString>::iterator l;
    ! Y. ^. L" x; m7 q! d$ q+ m: V

  214.   `1 c! q' y& B* E) I
  215.   if(bFirstUpdate)
    $ S# N: l  f! R
  216.   {
    / Q( N4 W3 P5 V7 z: S. A3 e  v
  217.     dwCurrFile=0;
    3 B: ^! c4 U4 @2 X9 }
  218.     bFirstUpdate=FALSE;
    ; ]7 p5 L0 i: g, M, }7 k, N+ n0 e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " S, H( E0 O0 `* z. K
  220.     {; _; ]8 ?3 n+ N9 v4 F6 m- F  h
  221.       dwTotalFiles=UpdateLocal.size();6 i; q( x. ^5 B- r. m: F; F' r
  222.       dwDownLoaded=0;
    8 Q4 e1 q6 q! {  Y
  223.       bSilentStep=FALSE;
    2 i3 A# x' N! k2 H1 ~, u
  224.       bCompressed=TRUE;4 s; A- O& |. ]1 e# _6 y8 m/ A
  225.       strExtLocal.Empty();* K3 j: w4 b' u5 c% t% }+ n
  226.       strFullName=(*i).second;+ J. j" ]( I# H+ f0 \8 A& P) x$ ]& b
  227.       dwProgramState=AP_CONNECT;: [( b6 s! Z4 D+ P: F
  228.       return TRUE;
    ) G- H8 S6 H. T! ?5 w: t% n
  229.     }% s% Q$ g; ]. \% W
  230.   }
    ) O: r9 [3 R% o5 r+ H
  231.   else if(bRestartUpdater==FALSE)
    : {% }) s% ]. P2 V& o
  232.   {
    . u) t9 P% t" J+ G4 f' r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())) Q4 L3 m# \9 j% T6 m. M! e% ^
  234.     {0 F! h$ A( O8 C
  235.       file=(*p).second;
    ; \* t/ P' D1 ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % J5 @6 e3 Q% C* {# z5 n
  237.       {
    8 Z. D, r, [9 F" `- y$ q$ e" b
  238.         olds=(*p).second;
    1 V2 D5 n! Z0 c: N, K
  239.         olds->vers=file->vers;. ]0 I& z/ |% g
  240.       }
    & g- B# L. ], c3 n" u
  241.       else
    ) O9 T; H) j3 y( M) M' }
  242.       {
    ( ]0 o) G/ s/ U+ p7 d4 G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ P- F$ o" a: R. ^( {) V, O2 O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));; D8 B! c4 D! |- O+ B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 R5 I' h. I9 @( X4 r& r
  246.       }
    , `- B' o& h2 ~" a7 a
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");2 Z$ Z* ]( i' M. f
  248.       sprintf(filename,"(%s)",file->file);
    2 O2 a" }) Q9 J) f
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 s$ N4 V5 F2 S" D+ d
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    " @3 s5 H  n; K8 [
  251.     }
    3 ?* {1 Y+ O* ^( A
  252.     dwCurrFile++;
    , [, {4 V9 @) D0 L
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " T4 j2 i+ `% q/ {) n5 X1 W
  254.     {
    - l1 w* r* ]7 Y, d5 w
  255.       bSilentStep=FALSE;
    2 a, ^# t" T4 l5 S" q4 B
  256.       bCompressed=TRUE;# s+ I/ v: @  c& s: _/ P
  257.       strExtLocal.Empty();" I+ ]; _8 k4 ?- \3 X; |! M  A# {: r
  258.       strFullName=(*i).second;1 p* w& P; S( g9 I! f2 g* R
  259.       dwProgramState=AP_CONNECT;: W# ]6 f# o  X9 w
  260.       return TRUE;
    2 v# a; g- n1 w! F: b8 S6 x1 V
  261.     }$ K3 L* h5 c5 s/ ^/ x$ T/ {
  262.     if(!bRestartUpdater)
    3 y0 q1 c) j5 t2 o( M% K$ {
  263.     {
    , H# g' T$ ~( Q: t* J  g' ]+ C* ?
  264.       int iCurrSize,iFileSize;
    , E/ z$ U; r6 o' W7 \
  265.       iCurrSize=0;
    8 a2 R7 J( S: j* ~# b
  266.       iFileSize=UpdateList2.size();5 y# d2 g" i- z" I- C
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 u! r& i! ^, o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # [4 D; O# R" E9 F+ A
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    8 ^: R  }- w( l8 q$ G' ]8 v, F
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* t  S6 A6 J  L! D
  271.       Fclearf(".\\update.dat");" d$ S. E. w% B4 f2 }
  272.       Fprintf(".\\update.dat","Bloodyf\n");+ u$ y# O( S2 h
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , g+ ?1 h9 g. Q- H% P" |
  274.       {
    2 \; m. R, W+ v* A9 ]2 X( H
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 H% p) G7 L2 e+ _6 E6 C' I2 Q- d
  276.         {* Q; A$ M4 h: a! L9 s( a
  277.           file=(*p).second;- x  J; q4 p& y4 Y0 A: j: }
  278.           sprintf(filename,"(%s)",file->file);
    $ ]& n& \2 Z$ v8 [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% I  M2 }- @  P" `) P( x6 B
  280.           iCurrSize++;
    $ {+ B# r9 d* y, k
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 l$ U6 ]7 ]* V" R0 j
  282.         }
    ( l' D/ @3 @  H
  283.       }+ Y: O; O3 `. V+ C" u+ d
  284.       unlink(".\\update.txt");- x1 |3 q8 c$ Q6 w# ?3 ~9 S
  285.       unlink(".\\update.tmp");* P6 N. s- H: B0 I4 H  Y) y
  286.       Fclearf(".\\checkversion.dat");
    4 Z5 C4 q% j; x
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! J5 s) W# }% A' W) o# K6 Y
  288.       if(UpdateLocal.size())
    4 V4 ^6 Z: n) u1 ^9 \$ `
  289.       {+ @# E& a3 F6 i* ^, V
  290.         UpdateLocal.clear();
    ; L+ S# r  J9 `' Z; h
  291.       }: J4 Z2 x- X- o
  292.       if(UpdateFile3.size())/ s" h1 U4 }9 t! N" n/ M% k& i
  293.       {
    ) u4 \$ h3 r/ S$ D9 n, y. j
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 N4 I' K5 s% D; H# V! l
  295.         {$ W: `; ?0 }* t/ F$ X
  296.           file=(*p).second;/ m: q: y- Y) n3 n0 J: P8 h& }
  297.           free(file);' @( P- e4 x9 p+ r
  298.         }0 G( ~( c! l. e/ K# e
  299.         UpdateFile3.clear();
    * ^! g8 P: h! t' H8 z
  300.         UpdateList3.clear();
    ) y2 w9 b8 V- W9 R( q
  301.       }
    : F+ p+ \( I9 a8 H
  302.       if(UpdateFile2.size())5 m! ^$ K) ~9 N8 ]
  303.       {
    2 H. Z8 }; R  h1 N" O( E" U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % c$ V# r- H1 z# V! A$ o
  305.         {# e! n) s8 T, {
  306.           file=(*p).second;0 j( @$ K' D, b$ @, U$ O7 c
  307.           free(file);2 {7 H3 j7 P" ?# k% |& u2 K
  308.         }5 Z4 `" R' b! n: b+ D; B& d
  309.         UpdateFile2.clear();
    % o  Q6 @3 J& m
  310.         UpdateList2.clear();( r4 Q8 j! R+ j+ n- D& u( p
  311.       }
    % V( G. V+ H# Q7 ?% f# Z' ?
  312.       if(UpdateFile1.size())
    6 i! v: T1 x% I9 L
  313.       {: E# z4 E; `, k; N) {0 |7 \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & h. A" Q$ y  n. n1 ?) P+ }
  315.         {
    / E. v! h( ?' }  d( q# t
  316.           file=(*p).second;& |& H3 W4 X9 P7 `6 q
  317.           free(file);
    0 H3 n) A* A9 r+ B
  318.         }
    & Q7 a8 w. `8 G
  319.         UpdateFile1.clear();; E& h& ]: \: ], K. `' W1 y5 }7 [
  320.         UpdateList1.clear();
    ) v# o- X, e- U
  321.       }2 c% a( y5 {% z) P: ~& ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    6 `4 p  }- _  j. p
  323.     }3 n2 h6 @- K# C; m0 d$ j
  324.   }
    1 A# K: Q$ `* G- `4 F8 Q' w
  325.   return FALSE;
    # ~! _: I: L6 ~
  326. }
      I9 K* |! J( M: u2 x( _$ A7 J

  327. ) i' n" {2 @. R) I: I
  328. void CRevAppApp::ClearAll(void)
    + m+ H7 f3 O+ I2 }, v, B1 q
  329. {
    % g* k/ P! \$ M
  330.   LPUPDATEFILE file;
    # v/ m& }* S% p6 G, \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% V/ t6 V5 S# ~+ P5 |7 Q; K
  332. ) t3 K2 v* U3 C% m
  333.   if(UpdateLocal.size())  ~# J# p5 Z" P3 P, S; K
  334.   {! Z. T) T. t/ b. F1 N$ @" |. T; `
  335.     UpdateLocal.clear();2 _2 d) h5 F6 f. L- g4 ?
  336.   }
    2 V0 \6 d' u5 c( n% H% k! A& y
  337.   if(UpdateFile3.size())
    + [' n  f) E; L( P& t, H& c' u$ s8 d
  338.   {1 G, o: A1 r" S2 s
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : O; v4 [! q" K9 v$ R
  340.     {
    7 [7 e2 |+ ~3 }) k) l+ \
  341.       file=(*p).second;
    8 P: R4 c' s5 g
  342.       free(file);! n9 C* X: z' m
  343.     }
    4 ~& d- F" J, C1 ^/ e2 @( c1 o3 [
  344.     UpdateFile3.clear();
    3 y+ x- t% ^; h
  345.     UpdateList3.clear();6 N0 j( a9 A7 T- g9 E% K, i
  346.   }
    8 X' i; [! i' v7 X
  347.   if(UpdateFile2.size())/ I/ X5 o) Z# n
  348.   {8 H9 R' C, o( |6 _
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 ?& i" s$ k* B1 @5 {* \, w
  350.     {0 [: }4 }; ^3 h
  351.       file=(*p).second;. X9 y* C5 ^/ `
  352.       free(file);  ]5 F6 E, ?/ s3 M; M, V# G
  353.     }' Y, ^/ U5 [! I) T: `# C! L3 L
  354.     UpdateFile2.clear();
    9 I  {; y+ D3 X* ^. W5 \) A
  355.     UpdateList2.clear();
    % ]' e* H, y# Z, x5 [& [; J
  356.   }
    ! R/ I/ A$ u2 A
  357.   if(UpdateFile1.size())+ Y6 S6 K+ X; o' z0 U- K( V
  358.   {: F# Y' f7 e1 N# [: j8 S' B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ @. M' O8 c, h
  360.     {' u! D; y8 b6 e
  361.       file=(*p).second;
    : _- ]8 H9 d1 O
  362.       free(file);
    $ W, L3 `- ?3 R; S" a
  363.     }; z& L- V$ n( M4 P4 U, y
  364.     UpdateFile1.clear();
    : I3 i- ?" ~" E0 G" X
  365.     UpdateList1.clear();5 g4 n5 Y) t. P5 p1 O- K: a
  366.   }
    $ E, M$ g4 A5 E2 w
  367. }  3 F0 P3 h( K! U% r+ V+ O; p
  368.   
    ( u; [+ S1 S$ D5 d" d
  369. BOOL CRevAppApp::CheckLocalVersion(void): Q; q# l/ V; L$ B7 Y' H- p$ _
  370. {; h5 I! \$ E4 c; R7 ~6 l) d
  371.   int c;$ E9 P2 I" L1 C% M% v
  372.   LPUPDATEFILE file1,file2;: L  n* J$ S" e1 \" \9 ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 Y+ m% T8 O+ `0 S4 w
  374.   std::list<CString>::iterator l;. @* _6 S) T! Y3 g$ M- r! s  D6 X5 Z5 M

  375. 3 O3 z, {) R& J* ^! w2 Z6 z
  376.   UpdateLocal.clear();
    % s6 Q. o9 l, R& W. Z( A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);* ]  I7 D1 a2 m# X  C( @: N, v) X
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);0 d# Z5 B8 `7 D
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ! f, k8 G: I, y2 N& a  [) `5 H
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
      f! ~+ n3 |2 z( j* T( N" |
  381.   if(UpdateFile3.size())' U, w; f# C, C, E; c9 Z, T2 }
  382.   {
    ! O: m+ ]2 l7 Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' B/ _* h8 p9 m; s# C- e
  384.     {
    % W# M6 G/ p7 K3 d! w* L  b9 k
  385.       file2=(LPUPDATEFILE)(*i).second;3 i0 r2 L: P: _. E1 a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 c5 p, n2 W6 G/ i
  387.       {
    ( B% O- A3 f: K8 ~1 W2 l. L; ^; G
  388.         file1=(LPUPDATEFILE)(*p).second;. b2 s; g" R6 H
  389.         file1->vers=file2->vers;6 q8 S0 R, @; l2 q5 x: Q# @% Z8 x* J$ c
  390.       }
    7 V6 z, h% a" p* I8 Y" E
  391.       else, T2 I, {1 K# J) @9 q
  392.       {4 P* F9 s) b& {. }0 w' ~. w
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : D% L; O6 @% k) O! @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    8 @0 Q4 j! d  z' J/ O  }/ F2 \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ! Q1 s9 A' A3 [% S3 c& B. P- s) u
  396.       }
    2 j- v' E3 C, b$ Q4 V$ z  R
  397.     }3 l4 B7 B8 Z, q
  398.   }7 B- q4 j3 P  m9 \3 H
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * R6 ^; S$ B' M" H
  400.   {8 ^! T5 I8 V) p3 r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()): I7 D( R4 @8 r5 F# t: q
  402.     {* [8 y8 E' b6 C+ M
  403.       file2=(LPUPDATEFILE)(*i).second;! P* d, [& T2 K! l
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  N) O/ N; L/ q2 ~9 ^. u
  405.       {
    $ r  @6 t, S+ c5 _+ q; `
  406.         file1=(LPUPDATEFILE)(*p).second;
    4 n, b3 J$ {7 E; L
  407.         if(file1->vers!=file2->vers)) f" u. P* g9 D( Q- v
  408.         {
    ; s6 s9 E: m8 t% C
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 Q$ T3 q! p; \5 ?0 b
  410.           c++;' M( K) M& R& e: Y
  411.         }5 J6 ~2 S* [- }1 B5 e2 a
  412.       }: v( z  X, v1 P  c* X
  413.       else
    + D6 ^+ C8 i, A
  414.       {
    . H2 f# h+ \6 O0 G/ @: H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 M# {. @, F9 `6 `" r6 X% V
  416.         c++;
    / U( u2 k' q4 }* ]( ?5 h, S
  417.       }8 i& @: X% {& w" Z0 L2 u- ^! c8 P
  418.     }6 P/ Q8 H" i- f1 ?$ U- o$ P
  419.   }$ v! R8 V  p$ i1 G: h5 Q8 t$ t
  420.   unlink(".\\DownLoad\\update.txt");
    5 Y! r9 @9 _7 q2 n$ ?  ~9 h
  421.   if(UpdateLocal.size()) return TRUE;& u/ |: b) s* w
  422.   else                   return FALSE;
    1 p; }4 ?( C+ e/ s) R5 P. k
  423. }
    0 Z, ~( N& B$ _" ?" E+ O4 Z( q

  424. ! i' q. f8 d0 T
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 e/ T$ c# G' ?7 M; D2 N# U
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 Y, k8 b8 q1 w+ a: ]8 {) K. l
  427. # u. ?; ^% Z& }, y
  428. " F0 o: \: J% n1 j5 o; O5 R

  429. 2 j) U: f8 Z0 w$ [+ N$ Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ S5 i( B* N% t9 q! ]8 K. m4 N" K
  431. {8 z7 n' |* M; d% w# k7 A, v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    & p, O1 A$ X2 R; S$ H2 t, ?( |
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 N3 H3 ?, c# m
  434.   {. l# x9 l2 c7 ^& C
  435.     char szLanguage[50];4 m; i! c+ u" e7 q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 _$ p1 p6 B; Z# e
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 T, x* o7 l0 N+ g4 b+ X: o% w) l
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 r* m7 Y) j7 _
  439.     else                                   m_iLanguage=ENGLISH;
    6 s' Q1 @- O4 M: t/ Z  I1 E8 X
  440.     char szRegister[100];& W# b8 j- _5 z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 p8 z4 }* V! e+ W
  442.     strRegsName=szRegister;9 j% O, j: f$ ^; Y  H% j: W# a0 }# ?
  443.     char szPatchURL[100];
    % w/ t  O. L0 G( D% \) {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( m% N9 y3 {) C( m
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 [$ n# O/ a5 y1 v1 A0 E* U0 F! m
  446.   }* I) _+ a. N- W( f
  447.   else$ E# W) u3 U3 ?
  448.   {+ H4 N; b0 o- k
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % T( ?4 F9 a  o* y. z% K
  450.     strRegsName=DEFAULT_REG_URL;; X+ S$ r- |' v+ B8 [: A2 i
  451.   }; G  w1 S" p( l: r
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    + K. X& d  D& w9 a! F  V- m" {0 g! M/ w
  453.   {
    . }& M; P8 U8 a4 B5 u. q! F
  454.     char szIP[50];7 @5 t+ u! @6 r7 H9 M
  455.     char szDIR[300];
    , h* C) Z  f' N: q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % N( O# T9 @) V5 }% M4 I9 F
  457.     {
    0 x( r/ D8 o+ k1 \- K. n. a8 @% I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' q, ?& |# p( S) P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) G8 e$ K* Q# y' {
  460.       strHostName=szIP;5 l" G8 f- Y/ l: m6 F
  461.       strHostPath.Format("/%s",szDIR);3 A) n- ]8 Z0 U% _
  462.     }( L8 s# z, T, w
  463.     else2 A6 Y1 F3 i- S  U) D2 o
  464.     {
    ! J$ o0 ~5 _" K0 Y2 ]' |
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)  l0 _$ l* J9 E/ H: H  H3 L8 {
  466.       {  u# v% ?$ z/ G1 t/ |% T
  467.         char szLanguage[50];/ T; K, y6 k7 |- l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ }& w* w. d/ ^% `# d; z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ t6 D' L2 G" ?, S9 o; r1 K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 w8 X9 S0 G, S, C# i
  471.         else                                   m_iLanguage=ENGLISH;
    * Z$ {6 K( G  r: M9 r4 e1 i8 v
  472.         char szRegister[100];9 ^: y$ O# g1 q  L2 K+ f) Y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 R9 Y. b: X% F3 j5 N0 g- v
  474.         strRegsName=szRegister;
    6 L& N) `- X: D1 v; u$ y
  475.         char szPatchURL[100];2 G8 i# n" {2 ?, V1 C/ G2 _2 i3 T
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 u% c) k) x: V- \1 I) z. q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( a) A9 d' E! E7 v7 V0 E% f! B
  478.       }/ C# U6 C6 {) e* M5 j6 g
  479.       else
    + y  I4 s9 z& Q: b
  480.       {
    8 y' k2 e  A& f4 T
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);2 G' A- ^$ A3 T
  482.         strRegsName=DEFAULT_REG_URL;
    " P" M) B1 A( F9 j
  483.       }
    / a$ X) O2 V  b: ]# ]- H6 ]
  484.     }1 l( {4 b4 g! ]( F
  485.   }
    # z6 `+ I; ~) u! z
  486.   return true;8 @  K/ @' `, s& A9 ]" ^
  487. }
    / O5 P" s+ f4 c5 x$ r. M- _! t

  488. ( y7 s) i8 {9 u. w
  489. #include ".\ZLib\unzip.h"
    5 Q0 e: P5 }$ Q1 X8 H8 s1 {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& K8 X  Q1 y' }  P2 h. b: s' M1 d
  491. /////////////////////////////////////////////////////////////////////////////' R- x, [& y1 {5 O6 E5 R
  492. // CRevAppApp initialization- P6 ~- g! k! o' ?+ d

  493. " l8 V) W5 s8 t0 v' l$ v
  494. BOOL CRevAppApp::InitInstance()
    " R, h- z$ v6 H
  495. {
    8 J9 h, b3 D, i$ F  Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, e1 h3 ]7 r. b1 {6 s" f  {' ?
  497. " [5 ?/ m0 f. ^1 {' M8 R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);8 q% Q: I6 n4 o  C7 z2 y$ B
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ! O+ \9 p" p8 U9 b% o6 `
  500.   {. ~6 c5 `$ c2 W6 \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 o( g( C" n. A6 E
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + {9 a% q4 k0 Z( x- N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) |) F/ v2 J( i  B& l; R; x
  504.     {2 b2 }. V! r# S/ [6 D2 d; T
  505.       strcpy(szPath,szPathTarget);
    6 E: {; j. b, o
  506.       SetCurrentDirectory(szPath);5 F. ?) P9 K4 x# v- R
  507.     }
    % @, `  V4 N+ E* S* V2 p
  508.   }$ i7 a" r; k# M5 a; ]
  509. #ifdef _DEBUG8 W6 x) G# e7 r; v- t
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; M: ~9 S/ b: J7 {, \
  511. #else
    5 l5 b6 C" ?9 Q( p, f2 @2 p; g4 K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 I; i5 Q% ]4 U5 h
  513. #endif
    " e$ ~% }+ h! U; k
  514.   {
    ; W- J" B- L' ]
  515.     char tempFileName[MAX_PATH];
    : r6 l' g% T; V
  516.     strcpy(tempFileName,szPathSource);
    % @! Q7 z) b2 s, j5 S' ]7 I. q
  517.     tempFileName[strlen(szPathSource)-12]=0;8 W% r+ J. s0 p; k# `% O+ q, M
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 n' Y. F" J9 q( @6 f0 U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 _' B) ^4 J3 d, j' p# D# [* }
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  k! [3 x- a% C; K6 P5 n
  521.     return TRUE;
    ) e- A6 H; l" W- C2 y8 o9 m" I
  522.   }: f0 K2 `$ i5 e% S( k
  523.   // Nuke 0118: Delete run.exe
    8 }' D  A- ^! u" L" @! [
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  t8 R" M+ T0 M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% ]" t# l  }0 @' K
  526.   if(!ReadCfgFile("Config.ini")); D: j/ b) f9 J9 |) m  g
  527.   {
    7 |* A: }# H/ Z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    / ]% [% h" t4 |2 R& Z1 f
  529.     return TRUE;
    ; `* u6 Z. T; v7 a% `4 g  V
  530.   }
    ; L+ P  o: K. k& c* f% p
  531.   HANDLE mutex;
    " G. q0 P$ F/ M" W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) `3 R1 o, I& p# Z
  533.   {
    9 g, F# L0 U- o& H: W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    1 x1 B" A& g6 _( R# @
  535.     {' G2 Y! Z4 s* f0 O5 e
  536.       CloseHandle(mutex);, O) V/ I; ?& q9 a% ~8 ?' R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' C9 F# N! l% e4 B
  538.       return TRUE;4 A$ C1 l0 W* D4 l6 F4 ?
  539.     }; n2 c8 W& c; q" W" ~
  540.   }  ) B/ R/ E* T5 ^# z& O% T& m7 h; B
  541.   CloseHandle(mutex);9 k2 D$ t. G5 c: p& K, O. T. ~* x

  542. 2 U$ Q/ F8 C* p* n, T, D
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' @  K4 r0 i! n2 p# B8 h5 l
  544. ! K0 G, F% j# G" S$ P& I3 \/ C
  545.         AfxEnableControlContainer();
    $ X: @. f4 w( [+ E8 A
  546. + R6 {2 L+ Z) i& |
  547.   bCanUpdate=FALSE;( ^( ~- |+ |! c
  548.   dwStartUpSteps=1;8 C  C1 ?; e! N: k3 d2 F
  549.   dwProgramState=AP_NOTHING;
    / ~0 G+ `+ q* J# v7 Q2 `3 \

  550. - w+ U! ~7 P  l% R& b6 E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( n$ C. H" C+ A; S8 [) d
  552. , D) w; p% p. h- }
  553.         // Standard initialization' E1 y5 ?- K2 Y7 ~' u
  554.         // If you are not using these features and wish to reduce the size& \* K* [9 a1 O3 T: n
  555.         //  of your final executable, you should remove from the following7 ?# P: K3 o: ^- {! y; p
  556.         //  the specific initialization routines you do not need.# E4 \6 X* b( g) \
  557. + \- s0 W! Z; T% a5 {' z; {
  558. #ifdef _AFXDLL" P% ]( E3 {4 O( [! a3 f1 E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " w' u+ t- c: o6 t3 b" q
  560. #else7 L# \3 D) z8 K* z8 b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : c4 i4 x8 b6 K! \+ N
  562. #endif0 c: e! s$ m4 }7 P

  563. $ f6 u/ ^  b& `: x6 f2 s
  564.   dlg=new CRevAppDlg;% _+ M: N+ S4 i8 b; ~7 v: S
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ) n2 K, X6 \" C6 R. N  }
  566.   dlg->ShowWindow(SW_SHOWNORMAL);# b# z( Y% a" }0 O- U) z$ d
  567.   m_pMainWnd=dlg;, ]; a! p. C1 N' G6 z8 c% p) i
  568. - n! h" S$ @* f) r% O+ v
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . o! m$ }* \1 z. i; B7 [1 G: F4 e

  570. % i! W1 D+ c1 c5 y( U" F% u1 x$ I5 u
  571. //  GdiplusStartupInput gdiplusStartupInput;
    0 N1 u1 n" g/ `" }
  572. //  ULONG_PTR gdiplusToken;. V7 D' L5 U8 L; c- U$ J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);* O1 n, y$ x, a! C- M; C

  574.   f) {+ U) m- W7 m3 |
  575. //        CRevAppDlg dlg;
    $ ~2 N0 c) N  Y% b
  576. //        int nResponse = dlg.DoModal();7 V# z3 F* O4 j8 t/ {$ G$ l
  577. //        if (nResponse == IDOK)
    ! Q, b4 L! z6 @) X
  578. //        {/ v0 h. |8 I0 Y; P- c6 Y
  579. //                // TODO: Place code here to handle when the dialog is
      y- a( Q4 Q& m9 U. C6 G3 r
  580. //                //  dismissed with OK6 x  |/ O6 m, F3 Q
  581. //        }; o6 l7 w5 Y8 q  ]+ i
  582. //        else if (nResponse == IDCANCEL)! [8 z" T, `, C0 p# p
  583. //        {1 ]8 Z* I, Q* D7 p# {
  584. //                // TODO: Place code here to handle when the dialog is# R! c% {5 P- J# j3 F, Z3 ~
  585. //                //  dismissed with Cancel/ h% ~( [$ i% z; X4 K
  586. //        }
      z, b& n8 v# }) C1 |5 O
  587. # S0 ]1 a8 Z* J) v- T
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % A1 i3 |/ L& T, g0 ?; k
  589.         //  application, rather than start the application's message pump.' b  c) U- R0 x
  590.         return TRUE;+ m- n  _6 Y# S5 J, }* D: }0 @
  591. }9 {% B1 U/ i$ [) A. S: g* J
  592. 6 G( e( c7 l" v+ j$ L  I2 `9 B, M  C- s: L
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + C9 J: s5 e0 i4 d5 D
  594. {
    & J, l- O7 U* f# E+ d
  595.   int i;
    , M% d$ U; I& k6 h" z, L
  596.   char *szRet;7 I5 {0 p6 |1 ~

  597. ; {" X4 c- ~: e& b6 E: _
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    7 ]- z/ a1 o$ ~; }
  599.   if(sztoken)" O. e& {+ V. Y: Z  G& ^9 l
  600.   {
    ) u. U+ S5 O6 X0 Z% I
  601.     szRet=&sztoken[itoken];- `2 f" g6 s: r6 `, M
  602.     while(sztoken[itoken])6 y% C- F% C7 e3 l  B
  603.     {2 M. q9 @: m# m0 K
  604.       for(i=0;i<(int)strlen(token);i++): z4 D) Y7 a1 [( ^- N
  605.       {
    6 h+ g7 g6 B3 ]: L! o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])5 Y5 ^3 d" ^# f! G
  607.         {
    & d1 G* W$ N( |3 F) d1 ~
  608.           sztoken[itoken++]=0;
    " i  w2 w$ p3 S" J
  609.           sztoken[itoken++]=0;
    3 _) Y! }" h8 E; b% _% X
  610.           return szRet;1 e0 @, P5 V# _8 Z' A
  611.         }/ w8 M8 v; [- h4 C
  612.       }
    * p( M% F4 }% l
  613.       itoken++;
    & D0 S. m- d  F. N; p" v
  614.     }7 F& T3 M- S0 h: P
  615.   }
    " F' w2 ?) c0 _- d2 c" n
  616.   return NULL;* a; B/ O6 R+ {6 @  x
  617. }
    9 W: w& O1 ~5 ~  R* [

  618. . X4 z; Y3 b# F( q# ^
  619. void ProcessProc(long Total,long Current). c& n1 S9 [) A) X# V2 }
  620. {
    7 D; j) s7 p: ?* [  }$ [
  621.         MSG msg;
    # O5 R8 b# W( ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    + P- Y, u2 E4 x' h2 [+ h( R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    5 z- b) u$ t5 M0 \5 H
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    & i, S3 N0 C$ [- P- g* A+ H, y0 ]
  625.         {
    " a2 ~% l+ a& N- K/ @: O  ~
  626.                 if(!GetMessage(&msg,NULL,0,0))9 W2 A0 O6 B" t
  627.                 {* h3 E( n& g7 S5 E3 G
  628.                         return;) V5 h1 h3 P$ [. v' _
  629.                 }- z# k" Z( G- u
  630.                 TranslateMessage(&msg);9 o5 u2 H; Q; L5 N* D8 n
  631.                 DispatchMessage(&msg);
    * S* K( W; X& p
  632.         }        ! ?0 M% v4 W3 G% g5 ?% i
  633. }
    3 p# [: W7 G. v3 k% D3 C# ^
  634. 9 f' V3 K& ]2 ?6 |; N
  635. BOOL bFirstChar=TRUE;5 K8 H% ~: S8 |& w; ]( \. p2 c
  636. 1 y$ n1 Q# d) f  i& g) a) B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ B* [+ @8 V  d5 B
  638. {
    ! U/ ^3 r6 C& z- E" S
  639.         // TODO: Add your specialized code here and/or call the base class$ U; H1 F$ Q4 {# d
  640.   switch(dwProgramState)  Q+ O/ I9 g# m( _  c7 T/ l
  641.   {, M% a, _2 |0 m0 W9 h1 K: w" r
  642.   case AP_NOTHING:+ y5 ~8 T( f" D0 J9 G. [1 \
  643.     switch(dwStartUpSteps)) ]: m9 u7 x& @) `( G8 d& K; d
  644.     {4 M$ }% v% b) f2 P; G$ t' u
  645.     case 1:
    - b9 o+ S8 n- Q; _0 @6 }! L
  646.       {' U; C- p7 c* b( H& R
  647.         int i;
    3 F6 y  D5 `6 U# y$ V3 N0 o, s
  648.         CDC *pCDC=dlg->GetDC();8 E- i* e- O6 H
  649.         HDC hdcwnd=pCDC->m_hDC;
    : }( a: K& b8 T
  650. //        Graphics graphics(hdcwnd);
    ! w1 r% e& `8 k. c- v- b
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! ^5 n1 B' G. J' R, W/ t
  652. //        INT iWidth=bitmap.GetWidth();
    5 W3 i) z2 Z+ H" h  Z
  653. //        INT iHeight=bitmap.GetHeight();' L# l. k( s4 e& H' ?
  654. //        Color color,colorTemp;  Q5 s3 r- s1 k6 Q3 V4 I9 `
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); e9 `$ b5 W% B5 ]% u5 {
  656. //        {
    + M" {/ r9 l- D2 b+ m9 q4 M
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& G( j1 ^+ Y) N2 B* s# Q. J
  658. //          {
    7 h7 K/ p1 P( J: I1 ]$ |, B, g2 e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , ]7 o" m# J) M
  660. //            colorTemp.SetValue(color.MakeARGB(
    / P# r% D1 B/ n0 M8 r
  661. //              (BYTE)(255*iColumn/iWidth),
    4 {6 `. D( a1 P+ F: f$ Y* L# W7 T
  662. //              color.GetRed(),
    7 l* G8 Y0 U1 b% c% F! Q$ H6 b/ x( L
  663. //              color.GetGreen(),) |; z# O# r: _' h: d
  664. //              color.GetBlue()));& J& e1 @9 ^* N3 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ n0 I4 Z8 |: t* i5 g8 }9 D9 M
  666. //          }9 |/ M" n& @" m- V
  667. //        }
    ) R' a4 t/ d; B! n  s: F) C
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    - B! J8 p" ]4 `5 z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 Z- G6 v8 F# x* H& x* J' T* z8 g
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 T" ?$ ^9 p9 G% u2 h' s- k
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 S, j+ }$ b, s
  672.         for(i=0;i<240;i+=8)% F! \% K  t2 z( s1 P0 y9 Z
  673.         {/ J  ~$ d/ r0 P" n( t  X. e
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# Z3 I; ~& [: N4 r$ u# R/ E
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. a- F" v4 o4 _' s; T
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' q1 [! d+ X# I( I. a) o
  677.           Sleep(33);/ A* \& R7 I( F9 W- D
  678.         }8 g6 N& u9 M, V4 m5 n: d
  679.         Sleep(1000);
    5 D2 u3 X! s" C; l
  680.         for(i=240;i>0;i-=8)
    3 @: g6 i/ z6 G! r" f4 ]
  681.         {0 y) B- x# l4 z5 w; V
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! d' R* D% p' R; D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - K2 [# v+ U$ ]) z2 ?% \6 o& x
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  I; m9 u) X2 j7 ?
  685.           Sleep(33);8 w9 \0 B: y3 E! ]
  686.         }) v" G) c  P! s- N# D7 F
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);# g) b" |% x& H( d; F
  688.         dlg->ReleaseDC(pCDC);
    5 a) \% W4 h7 K9 I0 M, z3 t
  689.         DeleteDC(hdctar);
    2 I* V$ [, U4 {& J4 z
  690.         DeleteDC(hdcsrc);1 f- i7 C; K$ Z% t# T" i; W& R
  691.         DeleteDC(hdcorg);$ N" P, [( F4 h: y# e. f
  692.       }
    ! C2 P! e8 d6 k( Z( I$ o8 ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & x5 m, t6 I# T8 Q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      ~* K3 F! z" v7 R4 N- D- @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    / ?# W: H1 y; P8 E2 h: `$ t# S
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 z% w9 e, b- d8 Z5 R( j5 V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! C, t  I+ h$ e- T. a* Y
  698.       if(!Dn.Connected())  L7 R+ I  Z/ V( v5 ^0 T
  699.       {1 @4 l; V& ]/ P+ ?
  700.         dwTotalFiles=1;
    & U" r3 q/ `) S3 E& L$ |
  701.         dwDownLoaded=0;
    ! [5 y; Y1 Q9 c$ |
  702.         bSilentStep=TRUE;
    4 }7 t) W7 O- d1 }4 N) h
  703.         bCompressed=FALSE;
    - r; D. \2 R6 X1 O
  704.         strExtLocal.Empty();0 i- S/ I/ ^6 L9 W  d* l
  705.         strFullName="readme.txt";
    . N( B% Y+ g$ ?- q5 I
  706.         dwProgramState=AP_CONNECT;
    0 _: D7 X- s% M. _6 _6 c
  707.       }
    ) D' x( A- a; M7 o# ^' A
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. P7 B' H5 h& D5 Q9 \& m
  709.       dwStartUpSteps=2;& _' Q/ u' G* ~7 ?
  710.       break;
    0 [% W' r5 ]+ t4 H+ r6 O
  711.     case 2:; c: N4 k, d8 |
  712.       {+ l! H/ c9 I6 a5 z( Q
  713.         int iEOF;
    0 y2 B# V$ w; `2 k& N- s
  714.         FILE *fp;
    $ k7 p. l. p  E
  715.         char szString[512];
    ! s3 A- A2 R6 s6 Z6 o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / x- h  |2 G! E5 n0 q3 p
  717.         if(fp)
    * h/ k4 M  J3 l0 b; {
  718.         {& a' u$ e$ B; f; m( C8 A
  719.           do) s% K$ T) T1 M7 A  ^8 p
  720.           {3 g4 B. S9 L' }& |
  721.             iEOF=fscanf(fp,"%s",szString);
    , z" T6 G0 m* C" a9 I
  722.             if(strlen(szString))
    - b) y, w# J$ G5 Q6 n
  723.             {% u6 F4 s* w- j: F
  724.               if(bFirstChar)
    : H8 }/ d5 T3 P1 u* ^' i% Y
  725.               {& m/ }: ^% Y; U2 \4 l6 j  F( e
  726.                 bFirstChar=FALSE;
      s$ r+ s/ s* h& t2 k& w7 m
  727.                 bConnectIsBig5=FALSE;
    7 S) T1 v* o& J( ?6 L
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ h+ ]) t' [5 c9 Y! s0 T7 _# y& @0 c# r% T( M
  729.               }; H7 O  X) k6 g  n, T! M$ G3 V
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));4 N0 W" a3 v2 N7 ^% z) N
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));/ `8 W) v% u! b$ c( D6 y- w
  732.               dlg->m_ListText.AddString(szString);
    / g# g4 P5 T( ~' {9 B4 Q# r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " s, w- _8 W* u+ ?5 m, V: x
  734.               *szString=0;
    " ?$ Q) h5 o& m' y7 b0 U) V4 l# a
  735.             }
    % D1 N" b* ~7 t, j5 _4 q( k
  736.           } while(iEOF!=EOF);& y) z: d# p4 ]: j$ w8 V  q$ K6 N7 K
  737.           fclose(fp);+ p/ O, Q: j8 g. m! B. I
  738.           unlink(".\\DownLoad\\readme.txt");
    6 ?" D/ j! g$ l. b- o
  739.           dwStartUpSteps=3;5 G9 s# z. r& K8 H( l0 B
  740.         }7 @; ~" U1 g+ m) M; t) y
  741.       }
    ' u+ {) t# l7 u( e, J
  742.       break;
    6 l0 k- y* R  l/ R/ K3 Z
  743.     case 3:
    $ x0 {: R3 Q+ F9 P# V
  744.       if(!Dn.Connected())
    0 c2 a! O8 E- H0 n: W# S. u
  745.       {0 @3 ~7 Z5 }3 u' F, ?; j
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ L7 z; e3 P; y5 z6 O+ C7 q; X
  747.         dwTotalFiles=1;
    2 C6 v3 g5 s& F0 }4 p
  748.         dwDownLoaded=0;( }- h, W: n% s; K3 j
  749.         bSilentStep=TRUE;
    ' t. I! h4 l: w* X
  750.         bCompressed=FALSE;7 H0 ~* t" F  W  J) w
  751.         strExtLocal.Empty();
    ' P1 P$ C4 ?% n: e
  752.         strFullName="checkversion.txt";+ V7 E7 i+ `+ \; I4 ]; _
  753.         dwProgramState=AP_CONNECT;
    / X4 W/ s8 U; O/ C) b' x
  754.       }3 ]% I- [! t6 |- p: x3 j% }9 N: A
  755.       dwStartUpSteps=4;
    , _1 i  O5 S( n+ C- ~, C
  756.       break;
    * `( q2 l: Z% ^) S: z1 K
  757.     case 4:
    4 d% x( r- E( T! P: D
  758.       {6 E2 V8 \$ l* e7 n, Z
  759.         FILE *fp;
    4 `* ~6 R: M; k- q# c& P
  760.         char szString1[128];, Q: O/ P; ]9 l5 |8 r
  761.         char szString2[128];
    , X! ]: a+ h6 f3 e% ?6 V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & o8 g& ^  v8 e  {
  763.         if(fp): k. Z5 [8 \6 Q+ N1 I  B
  764.         {
      e) \2 x# F* g$ a- K$ K9 P
  765.           fscanf(fp,"%s",szString1);1 u  u) _7 u4 d- L  R) D$ l
  766.           fclose(fp);
    ) p- h3 _+ W1 b
  767.           fCheckVersion=atof(szString1);
    ) K: Z# c* V0 P- P6 A, n
  768.           fp=fopen(".\\checkversion.dat","r");
    + ?$ U: C0 e6 j- k, f# H
  769.           if(fp). v. l6 M9 W' H3 V* w6 i
  770.           {
    2 S! y' ^- x9 e+ f% ~5 P- I1 |
  771.             fscanf(fp,"%s",szString2);
    & }, n( B) A- F+ Z
  772.             fclose(fp);# R0 G) v; ^  h/ g/ F" F. F
  773.             if(atof(szString1)!=atof(szString2))4 c6 q4 ^' b( J' n+ S  J
  774.             {
    8 z) z& y/ O! T5 i- d
  775.               if(!Dn.Connected())6 T- K2 S1 c. T0 ~1 Q  @
  776.               {  r" @' _2 \9 l0 p+ `9 x4 M
  777.                 bFirstUpdate=TRUE;$ R: f0 r! y, ?. A
  778.                 dwTotalFiles=1;: s, {( I' H0 `/ u7 F/ o& o
  779.                 dwDownLoaded=0;
    * v8 F* D& Y. P: O5 v
  780.                 bSilentStep=FALSE;
    8 [; d3 f  N! D& D5 U1 I
  781.                 bCompressed=TRUE;1 a2 \4 ~, D: d  P& V# u9 y
  782.                 strExtLocal=".\\DownLoad\";7 o9 T6 j; a1 t# k* {. A2 _
  783.                 strFullName="update.txt";
    - Z; `$ Q/ c4 [
  784.                 dwProgramState=AP_CONNECT;
    , m) b+ M% h2 k7 ?) g- Z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 M, _6 M- _: l9 N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 e$ B$ c) j9 N  K
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");1 }3 j& y* Y5 }! ?' n" R$ N/ T

  788. , _  J2 k2 w4 C6 ~
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , b5 @$ \7 k$ @, r0 U
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : R1 Y% X; Z# Z7 e' v0 A
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 r! ]) _/ g3 Z9 J( `! y1 Q0 {, {
  792.                 {. N  X: ?, w4 k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 `# B6 Q) h! H# \2 G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 j* B2 v6 Z$ B: b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% V/ E7 S. h# e( H1 C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! K+ Z; H$ R7 I/ k/ n8 J! f
  797. 4 Q0 x6 I& p( {# V. ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' e" U0 ^: n+ B
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 X9 |; N* K$ n6 l5 A' t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      ]1 u2 Y' O: ^  k) M7 f6 F9 C
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 s6 S# m# w6 Q& Y8 J. A1 n
  802.                 }' [& n; X' x9 U% t; l$ K( d  A6 v4 G
  803.                 dwStartUpSteps=5;6 }% x* _: @8 o, N6 C) i/ c
  804.               }* z$ m) O  v5 r# c* G$ I
  805.             }! s, ]0 Z8 |( p4 [0 g% T! _* K% ]
  806.             else
    6 Z! B/ Y/ |& |5 H$ M
  807.             {' q3 O7 r: C+ m& n
  808.               unlink(".\\DownLoad\\checkversion.txt");" t3 Z; s' t9 V, C1 ]
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. z. S- d& ~7 G$ E- p2 {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    * x2 O% |- Z% Z' D7 l9 @
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 ]. i9 Q8 R, D* K4 O! q) `

  812. 6 c, z) N# z; r- j! \; v" E5 Y( h+ h
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 U6 U# }2 m' T; }7 V  Y
  814.               dwStartUpSteps=99;
    & ]3 [7 G5 I% x2 W7 G
  815.               bFinishUpdated=TRUE;
    # N% r" `$ J, O( Q* h& X
  816.               bCanUpdate=TRUE;6 K; D/ @# ^3 I; r7 H0 i
  817.             }
    / ?  j5 V8 B' X" i% r: [" J
  818.           }
    . ~( l; c, ^+ `8 p; w; H, ^# e
  819.           else
    ) E$ z) p+ W% A: b/ [- b
  820.           {+ W5 r( S1 V: H' e0 b3 U
  821.             if(!Dn.Connected())
    ! R# e, V- Y" I9 A- h
  822.             {
      i) Z- e" L% _+ K  G1 J
  823.               bFirstUpdate=TRUE;  K8 s1 h1 c+ J
  824.               dwTotalFiles=1;2 h: }! V( n6 o, {5 p$ f% r3 N& ?
  825.               dwDownLoaded=0;  ?8 W0 o$ t% U7 G
  826.               bSilentStep=FALSE;1 a0 f. `" n/ |( l7 u9 h, v
  827.               bCompressed=TRUE;  g0 f, `( ^7 f- q. ?
  828.               strExtLocal=".\\DownLoad\";
    3 [0 J* D- p' h9 P% b, O  U
  829.               strFullName="update.txt";
    4 M! G) f9 P0 x' m  R; d
  830.               dwProgramState=AP_CONNECT;
    ' d+ v5 u) O$ a9 }6 p
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");1 y# d8 ^( \* J2 a8 c
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # d( f" d1 g* U/ T. K/ M' }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");. ~6 P; k: N6 m% S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. t- c( ^+ i6 C, t, M$ A
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 M' Y5 u; f0 M# s5 B
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)4 b* f/ E2 t* |: E/ y
  837.               {
    , Q% w8 u, D  i9 Y( G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 }" l' y. V; F/ [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 Q1 Y0 G2 K. ~4 M" {# A, A# h5 H9 ^
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    . t" x! y' q5 U, s# O- a
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' |" u4 {1 j& c
  842.                
    : \3 x  }; C* a" V# v$ }
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    , I2 _3 O' E, Y) Q8 M7 ]
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 j3 f- ~2 j: i9 N2 S# @
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 D/ |# I: G+ z6 \, |/ k+ b5 s2 Y$ p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ~9 f: W  c) _  M7 w
  847.               }
    ) [& U8 P7 [: j1 C2 `
  848.               dwStartUpSteps=5;
    ' E5 J# t+ y, J' @
  849.             }
    ( Y$ V2 p9 x' y% J2 }
  850.           }  p4 A/ u* k/ Z1 G
  851.         }6 T% G$ h2 {9 ]
  852.         else
      N* l, ]! }" B+ j8 A2 u. G- D
  853.         {
    - }, f6 A3 t% I
  854.           dwStartUpSteps=3;
    ' J% Q. D$ ]- I: \$ y" d+ W: e
  855.         }, X& m* U' j7 f: U
  856.       }
    & C4 s3 f8 w! r! q' t
  857.       break;- u$ @# c0 ?% d% t" C" n
  858.     case 5:
    ( w6 G) L8 V& I
  859.       {
    & G, t; }$ R1 a! [5 ^/ R# u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& K8 ?' V( k, ]
  861.         {9 r$ |# O$ m9 P# V/ R  w# b
  862.           int opt_overwrite=1;) c- j- t& z( {1 |
  863.           int opt_do_extract_withoutpath=0;
    7 V& W8 ]0 l! _# Y! G5 \
  864.           unzFile uf=NULL;
    0 h; N; K/ a. O3 P6 k

  865. 6 E. Y7 X7 b( \; a! T6 w/ {
  866.           uf=unzOpen("Wsa.zip");
    ' n# I8 p  d8 U( V4 _- G
  867.           if(uf)5 k2 x5 f0 r+ p( J9 k" B
  868.           {  E) A! J( I* i$ Q
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " Q- Y( `; e- e6 w9 @
  870.             unzClose(uf);% s% b6 t1 n2 G
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");$ x* A1 {; U' y# e1 o' \9 Y! K
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; E+ X: ]1 e3 P$ U
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");# e6 v: p6 a& z$ t
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 e1 i6 o; g( v; d4 i2 u. `
  875.           }1 [& j2 |7 |+ U: Q) j
  876.           DeleteFile("Wsa.zip" );( a- I& y" M% I
  877.         }
    6 ]5 F8 V& R  _0 ?3 T
  878. 1 N1 c  c4 ^2 }1 u1 w7 J# j5 U" F
  879.         if(CheckLocalVersion())
    ) }# N3 K5 x4 I  x" |7 \: l1 J; x
  880.         {
    3 C! w- ~; Q) I( Z/ O
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");0 q+ O6 {/ }% l1 A2 N+ q  s
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
      p5 ]" j2 e) \  g, s# U
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");# q- }& X& Z' k! U$ r0 ^8 |/ D
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . E/ s& K% A: m5 V+ r# k0 c
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);" q& Y6 m7 a. e
  886.           dwStartUpSteps=99;- n! i: x" H& R& W; M
  887.         }
    + K  R( _1 M- [
  888.         else
    * W( }3 y, w# _5 y* q' S6 {
  889.         {! X& U: Q, a5 i' C% o$ N
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 v' ^: O7 f1 n: Z0 o: O  d
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 I( }6 E8 \! U  {7 m& O0 b
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) E$ ?  N3 J& I/ J% P

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

# ~8 @" D/ d" A* t
. j( V- F) {' A/ u% j0 a! k  F

評分

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