CSUpdate.exe源代码

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

1 R4 c' B. z  g3 G! ]" J7 Z
  1. / RevApp.cpp : Defines the class behaviors for the application.' [) ?$ Y" s5 Y% }
  2. //
    1 k5 p0 L' I: s* ]' G2 R
  3. 1 E) s6 s& h& M4 B1 g2 I/ E+ {
  4. #include "stdafx.h"
    8 g8 b9 F2 L, G& h' o
  5. ( C6 w0 r: S  j4 W. B: T- U% A
  6. //#define UNICODE
    0 E5 F; I: F; }/ I4 R
  7. //#include <gdiplus.h>, {! q7 ]: Z; }( {
  8. //using namespace Gdiplus;9 k) k2 }1 }: H% i6 j

  9. 3 k1 R) P; H$ M
  10. #include "RevApp.h"
    2 U# z) @. x1 ?: ]
  11. #include "RevAppDlg.h"9 x9 b& j- K: m& n' T" n
  12. 7 p) v9 j$ L5 W9 [
  13. #pragma warning(disable:4786)% Q0 F5 D3 d+ f
  14. #include <map>( u$ J  T; h! F
  15. #include <list>
    ! b! x" D9 n0 j/ d# H! x/ @
  16. #include <direct.h>' f8 y* s* u; P4 C/ C

  17. + x: j/ ?8 r, d9 i+ G+ v( `8 N- C
  18. #ifdef _DEBUG; u$ T2 k' k+ @( k& k* M
  19. #define new DEBUG_NEW+ g* |5 D1 y4 s
  20. #undef THIS_FILE# A( v1 `# n# y6 E' `' d
  21. static char THIS_FILE[] = __FILE__;) r1 x+ O) C4 L/ H7 T
  22. #endif
    , z5 z! b6 ~  V: {2 m/ s2 L
  23. #include "SkinResDef.h"
    4 {0 X* c4 Q: T9 J9 b, ^& r
  24. #include "ChangeBG.h"" o! B, ?' B6 o& Y* I
  25. #include "AFXINET.H"$ F) k. X6 _  l+ }
  26. + X% q* B* Q" G8 v' D7 E
  27. #define TRADITIONAL_CHINESE 0
    ' G4 w7 v0 o, A# s9 M$ x, `8 X
  28. #define SIMPLIFY_CHINESE 1
    + v$ h0 @! i/ N) f
  29. #define ENGLISH 2$ r3 [" p( B4 y& P0 V- |
  30. int m_iLanguage = ENGLISH;" o& ^  F) w; L" |  s: P, a
  31. /////////////////////////////////////////////////////////////////////////////
    ( k$ W( n% K  }) d
  32. // CRevAppApp% `, J, x% f0 ~. y6 w) R9 V! C8 d. [/ E

  33. 8 V+ }4 |) }. @  d, {: \7 {( q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & d. w  W) B% `+ u1 Z
  35.         //{{AFX_MSG_MAP(CRevAppApp)  R# _3 g% T/ X/ B. [9 ?! t% ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.# D4 D4 A" z" T2 k1 U9 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    6 C% n( @/ Z% @1 K2 t
  38.         //}}AFX_MSG4 @% T" n0 d3 M$ [) ^3 S) g! z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)9 Q& f9 s$ @, B; G: ?, M7 s  r
  40. END_MESSAGE_MAP(): @$ `. m+ o6 n9 }

  41. " ~% Z6 I! t, p; M! f
  42. /////////////////////////////////////////////////////////////////////////////
    ) R) o( g' H. T0 k: @+ a/ J
  43. // CRevAppApp construction0 j5 K- H7 m7 R+ a4 Q% J  j

  44. , O0 y2 m! a+ }7 l; e
  45. CRevAppApp::CRevAppApp(); D. i: x6 V# S# @
  46. {
    5 O5 V6 c6 ?5 e7 L! F% B
  47.         // TODO: add construction code here,
    6 J4 C: Z* ~! D( w, F' ~
  48.         // Place all significant initialization in InitInstance
    / w2 b; N1 c( h5 G, F1 O7 W: o9 Y
  49.   bDisplayIsBig5=FALSE;0 Z- h" l5 R% _
  50.   bRestartUpdater=FALSE;% v# L3 |. v9 m3 L3 t4 C& z
  51.   bFinishUpdated=FALSE;8 c, j6 E6 B$ y4 {( `/ U9 s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;/ ?# L& }) {6 F* k+ `
  53.   InitChangeDataBig52GBKS();
    8 n+ d$ O+ H3 o( [
  54.   InitChangeDataGBKS2Big5();3 e+ \' _1 f* [( f6 p" q" S1 y: \
  55.         //- k# Z; n; d; e3 N+ R' o/ J3 r  T/ E
  56.         bClickRunExe = FALSE;% u* O5 l/ w& V9 C# a
  57.         //
    $ ^' n. B/ `/ Q$ \+ Z" A
  58. }
    3 q4 M6 I; x; D1 v# J
  59. & D1 K7 }3 I9 K1 D* D
  60. CRevAppApp::~CRevAppApp()
    8 E% x  c) v" B- @5 q8 @+ H( ]$ h
  61. {
    1 `+ u- e+ e& ]) v, h4 K, o7 j
  62.         // TODO: add construction code here,7 \4 ]4 }) U- O! ]  g: H3 r; G
  63.         // Place all significant initialization in InitInstance# @4 j* Y/ k- N
  64.   EndChangeData();
    - Z3 H  [) [9 ~7 B6 c0 N; i
  65. }$ P& d( z) ^8 i
  66. ; e7 R( o+ D, D' U* K" @) [% `; @
  67. /////////////////////////////////////////////////////////////////////////////
    0 o& Z- [+ z! S/ s& Z$ l
  68. // The one and only CRevAppApp object
    ' m# K! }3 d8 \% n' s& T5 r
  69. ( I! }, X+ C$ s; p1 D
  70. CRevAppApp theApp;
    3 b: g2 E" M3 b% P
  71. 5 ~6 H4 e1 b/ b2 F( H. R1 r; X
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); b; D% \' L1 {  Z
  73. {
    ( @# S1 b& h, {
  74.   int iEOF=0;4 G: P$ m! h" l7 v
  75.   char szTempName[MAX_PATH];
    1 {% Q6 \( x. h5 J( D- C, Q
  76.   *szFileName=0;
    & ]% L9 f: v! z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( ]) \0 B* T" w5 `9 ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 L' ^* y% P% }( O8 i
  79.   {
    ' G6 r& E0 Q, }( |
  80.     strcpy(szFileName,&szTempName[1]);$ N+ Z9 Z' H3 K5 ~+ k& U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): U' Z8 U6 K$ ]" B& C% O, q& g2 I
  82.     {5 M' y( {: Q5 B6 p! ]
  83.       iEOF=fscanf(fp,"%s",szTempName);% T  `  R+ ?# f9 \5 u! c% N0 G
  84.       strcat(szFileName," ");# n8 w; F/ E) V
  85.       strcat(szFileName,szTempName);0 y: L! Z0 q6 e% B* u
  86.     }
    ; N. R7 ], x( S) B
  87.     if(strlen(szFileName)>=1)) y+ ?* n: I6 X+ _% ]( F
  88.     {
    3 W% v4 a  R  e% d  _. s
  89.       szFileName[strlen(szFileName)-1]=0;
    % E% C( C, y. W+ C9 B" I
  90.     }+ a( R5 P7 f8 v2 Y9 J( D0 g
  91.   }- i8 @( a; a. g# c/ M
  92.   return szFileName;' T9 ?+ q8 ~; F: j% ?
  93. }
    * f  g  X$ n1 Q2 H* X, U

  94. $ [6 z5 P' L3 A4 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
      }: O3 ~( [" i
  96. {
    / j6 O( i% m' u; j
  97.   FILE *fp;
    7 z" [/ x  e3 Z) l
  98.   char *key=NULL;1 r. ?: N9 @- L" |
  99.   char version[MAX_PATH];
    9 x- m( I7 b+ S9 f: a
  100.   LPUPDATEFILE file,olds;
    ' k% Y' Q2 F) F* u* W
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 f6 X& Z: P2 ~* t( Z3 e+ P& U
  102. & A# R1 h% Q! l! T* J, i
  103.   UpdateList.clear();
    + F6 k' B$ c; J8 s7 i
  104.   UpdateFile.clear();
    " `2 P( r: f* u6 B& n% e9 Y* r7 a/ R
  105.   if(GetFileAttributes(filename)==-1) return false;6 g* u  Y* Q2 a4 `
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! e0 G, l1 i3 v+ O& h
  107.   fscanf(fp,"%s",version);
    3 I$ a1 J0 b5 F0 E- U9 t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: s1 d, k+ J3 ^3 ]- z5 w
  109.   while(fscanf(fp,"%s",version)!=EOF), x% ~4 i5 ^# N& w( I/ |3 D  x
  110.   {9 P8 F. P  t$ M: {; Q" s+ {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 u0 W5 u3 t9 W
  112.     fscanf(fp,"%s",file->path);
    3 A. H( E  b+ w2 z5 ]; W
  113.     ReadFileNames(fp,file->file);' Y" c9 R  q7 n" s" x% f
  114.     strcpy(file->full,".");
    # Y$ D1 e5 d. k2 x# _% P
  115.     strcat(file->full,file->path);
    1 J# C* \' |4 P3 g
  116.     strcat(file->full,file->file);# R7 j- `( H4 G$ O: W6 z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- P7 m* i5 T$ k
  118.     {
    ( Z% C! y/ V$ h. ]6 k
  119.       file->vers=(float)atof(version);
    0 H% U: b+ L8 G0 o
  120.       UpdateList.push_back(file->full);
    9 z# ]5 G. d7 F% z. h- j5 D7 l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));# P  l( o! h8 v$ a# f6 {3 d" m1 s, k
  122.     }  L) B0 Z; }5 d, X: n6 P  D
  123.     else) b* X+ M+ M4 ^4 H4 g" ]
  124.     {
    8 M/ Z% X% k% c+ B2 n
  125.       olds=(*p).second;
    ! V) z: d0 `3 \  X
  126.       if(olds->vers<(float)atof(version))
    % J' v- g# A9 h3 i+ b5 i1 G
  127.       {9 @3 u' b: K( X
  128.         olds->vers=(float)atof(version);, d9 s" Q3 q7 v4 X  ?# b
  129.       }
    5 @, ~8 F) v4 A- V
  130.       free(file);/ @7 _2 k; X6 k# U+ P) W
  131.     }
    2 l, x' C/ [& Q1 c+ A# [" |3 ]
  132.   }6 n; o/ a% B7 j! f3 K
  133.   fclose(fp);
    - i$ w) N; R; Z! ~
  134.   return true;
    - V) O5 G1 w, O) |8 V. L; v
  135. }% S% n* l9 P" L2 ~  `# W/ Y+ ]
  136. ) h6 j4 {, w. k* u" o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), ]9 e& V( u, j! w6 O
  138. {
    3 Z# A$ r) i- Q% V+ ]( G
  139.   TCHAR  szFull[MAX_PATH];" g9 N6 P( K0 n$ v$ |
  140.   TCHAR *token,*inter;; U" r& _, I0 p' {; `( m
  141.   *szPath=0;5 Z* h" T6 @% ^
  142.   strcpy(szFull,szFullPath);
    ) H/ y0 t7 w& _% O
  143.   token=strtok(szFull,"\\/");
    + y! u) f! Q3 j8 s0 \
  144.   inter=token;
    9 ]( l* X  c# J0 o
  145.   while(token=strtok(NULL,"\\/"))& q+ m* d7 c- m8 v" f; J
  146.   {
    3 L7 P& K" Z& f  e3 ~* F* Z
  147.     strcat(szPath,inter);
    ( z$ G0 L' P0 s8 u, J1 i1 z6 _1 B3 |
  148.     strcat(szPath,"\");
    3 n5 B* e4 T1 Y( h) C7 y5 h# i) ?
  149.     inter=token;' W$ y; V1 X( b& G
  150.   }0 j5 P& `4 x0 r$ G+ p) v) g( r4 B
  151.   return strlen(szPath);
    # x* \, |" |% G$ n- Q% W
  152. }: T" p1 C/ b& {" w& v+ e8 P1 N

  153. 0 G) Y& V1 l$ `9 G1 |$ _. A7 [
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- b* O6 s7 `  a5 M% J' r( ^6 F
  155. {4 j" _& d: V- h2 D, @) ~  w2 q1 }
  156.   DWORD attrib=GetFileAttributes(Target);" w7 v2 ]% {4 v" o4 S  H, Z
  157.   if(attrib!=-1)2 h0 c) h+ x4 t0 u' v
  158.   {6 A& f% C# p8 a) J/ V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). U1 }6 e3 E/ o, h2 z9 D
  160.     {
    " r& H/ c  A. B2 g; C& ^1 l2 k
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    - o/ w  W! [5 d0 B3 }2 r& b: q
  162.       SetFileAttributes(Target,attrib);0 B0 M# B5 i. g+ q
  163.     }4 ?% |' ]# z9 ~/ O/ m
  164.   }$ s7 v" g! u) g: ^1 ]5 M, n
  165.   CopyFile(Source,Target,Erase);
    : @) p) O: Q* N! V/ `8 }# {
  166. }
    " E0 V* G2 S: @3 ^6 Q3 r8 E

  167.   p- \* ^9 c0 B5 ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    3 n- F& t: R  V
  169. {
    0 z& t; }+ X& I
  170.      FILE *fp;
    + |$ k7 t$ i) g9 u
  171.      char  szBuffer[8192];
    . e8 r, n5 G& S: v( S
  172.   va_list  argptr;
    0 c- t' p" m$ B2 q

  173. & Z( U. J0 n; _* Q' C
  174.         va_start(argptr,message);( ]) }$ l$ _3 C
  175.         vsprintf(szBuffer,message,argptr);/ u4 a6 t0 `, `9 ?9 D0 |
  176.         va_end(argptr);
    % j. D1 e( W6 I. Q
  177.   fp=fopen(FileName,"a");3 ^, W1 a: K/ E5 y0 k2 c( |+ i+ @
  178.   if(fp)
    & m( ~4 ~0 ~9 t: U+ D
  179.   {' g9 f0 n" _2 l8 h& B/ k7 D
  180.     fprintf(fp,szBuffer);$ P& U" o# V& e  Y7 V
  181.     fclose(fp);
    1 m- b: a+ J+ d6 W; O4 u" c/ X
  182.           _flushall();
    $ A$ h, C2 @6 H( ?: }: U
  183.   }
      D3 {* ?+ u$ x0 k9 Q% b3 u" @
  184. }
    / A( I3 W* ]! q+ w$ ]* X2 f; Q

  185. 5 P. D7 }6 ?3 E' T7 K
  186. BOOL CRevAppApp::Fclearf(char *FileName). z# o5 T% Z" r. h0 O, v
  187. {
    0 e/ w( L# `( |( G! A& p
  188.      FILE *fp;
    6 z" q& j3 G- x+ C8 C4 d% M8 h
  189.     DWORD  attrib;7 X, u9 x7 }2 g. Y) ^7 r" {
  190.   attrib=GetFileAttributes(FileName);
    . n1 R$ X# j8 @1 Z7 p  Z4 M
  191.   if(attrib!=-1)+ A  h7 |. L; d, i( Z
  192.   {% w# L, G: |3 V" g4 n1 M) q2 a
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 Q: M7 J$ @: i
  194.     if(!SetFileAttributes(FileName,attrib))' y- B& ?7 q0 K& w$ J
  195.     {1 D; w& ?) h8 C& L" d1 ]5 M; k
  196.       return FALSE;, M2 ~# b8 m1 N4 Q! N
  197.     }
    - m2 \2 B5 A5 H  b/ ?/ @
  198.   }
    ! a! v! ^/ e( M* N6 J
  199.   fp=fopen(FileName,"wb");
      O( o- A  R1 [) l. l( L. @
  200.   if(fp)8 w7 ~7 G/ l. S6 S% ~7 l
  201.   {
    ) j9 N6 ?1 X/ ?! ~+ E
  202.     fclose(fp);, u5 u5 [  Y+ l" P3 A& E# o
  203.   }( d0 z* e, u$ [( b+ ]. ~3 [( D
  204.   return TRUE;
    ! z6 e. ?* e. D3 `
  205. }
    ' A) M# |- Y+ r0 N( B: V1 ^7 v& p
  206.   w4 P9 G# y/ K" ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 w! S" Z( y9 Z  a
  208. {
    ) X9 f1 }8 s6 t) `
  209.   char filename[MAX_PATH];, |1 \5 K) p. }# a7 \# p) U) j
  210.   LPUPDATEFILE file,olds;. o' N( I& J' U, u9 \9 l: P4 ?- g
  211.   std::map<int,CString>::iterator i;
    7 C; H/ x9 K6 [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 O" B( k& e8 h  M6 o8 J/ Z$ J, W
  213.   std::list<CString>::iterator l;
    8 D2 ?) ^+ h, G$ _3 ~
  214. & v' G8 A+ D) b
  215.   if(bFirstUpdate)4 L+ y: K1 D3 O( h2 P
  216.   {( B4 F) w0 B& i  ?. s+ y
  217.     dwCurrFile=0;
    1 U6 A3 S$ Y" ?+ s2 ]3 l
  218.     bFirstUpdate=FALSE;
    4 Z: v- X& I4 ~. w, U" ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - S; M; Q+ M# f! ~' V6 B4 k
  220.     {
    ' b" M1 w* I3 T! a; }8 P1 V, b
  221.       dwTotalFiles=UpdateLocal.size();
    2 B( j. d  G: |
  222.       dwDownLoaded=0;
    : M3 a8 i2 V  n/ c: D; n1 j
  223.       bSilentStep=FALSE;
    ( |: g3 S  X; l  Q5 i
  224.       bCompressed=TRUE;  U: n$ U2 e1 K/ y* U
  225.       strExtLocal.Empty();
    " h8 j0 y0 k( D4 N+ k
  226.       strFullName=(*i).second;& r# ~1 O5 x3 E) d
  227.       dwProgramState=AP_CONNECT;
    / V1 _1 d  K: l# M6 W
  228.       return TRUE;
    ( b) U; S; W4 V% V
  229.     }, E  @% n  |/ h" m$ u) _
  230.   }
    8 o& P: p. N  ?4 Q+ K1 Z% r! ?6 x
  231.   else if(bRestartUpdater==FALSE)
    . u" r" @+ B8 n% S: y
  232.   {
    / H6 X5 O& m! w- ~! N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    * S. K8 u$ q0 l/ N: f
  234.     {
    2 x) q/ E6 [/ c& N- B5 T2 t" Q
  235.       file=(*p).second;3 o, _: ]# h6 }3 G3 R# I6 j& ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): s2 c; C5 |5 m3 K7 k  j* r3 _
  237.       {4 R% L4 R! f( Y4 Q
  238.         olds=(*p).second;9 V/ l! D2 t6 K  E- v. N
  239.         olds->vers=file->vers;8 C1 i* G0 Y# f" x" c" J" d
  240.       }
    . u0 F! ~. t8 A+ Y  l
  241.       else, e$ m/ {6 k! q# `/ {3 l0 e  I5 f
  242.       {7 W% I( a$ ?, t; \% O. T+ f3 ?6 u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 K" r) M6 q! N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( L' j, k0 `6 @( H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));1 r6 S% x7 e6 R& x8 X- m7 m0 z
  246.       }3 L" g  e4 C; k7 w
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & t8 o  R/ `# B! P1 G. G' ^! k4 Q+ ?  M
  248.       sprintf(filename,"(%s)",file->file);2 _& }7 {' H3 c- J1 S* t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) ^$ s; V0 s9 P. B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& ?5 P6 W4 _; |8 x
  251.     }
    - l: Q9 v/ t+ F7 H3 S% D
  252.     dwCurrFile++;8 E% u5 A5 C: U5 J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 R" \3 q/ P. \: V4 \
  254.     {6 |+ \/ m9 l5 R+ B; c
  255.       bSilentStep=FALSE;( Y6 w8 c& [) K) Z! o  g& ?+ F
  256.       bCompressed=TRUE;
    & w' Q% p" K8 G% y. e$ z: j
  257.       strExtLocal.Empty();- W+ `+ c  Z  Z! h8 n. i4 Q
  258.       strFullName=(*i).second;6 u( Q- R/ h8 X) B) m8 E0 s7 i
  259.       dwProgramState=AP_CONNECT;
    , o  D5 \2 x& n4 ~, \+ I
  260.       return TRUE;1 \. Z! N4 ], _: v+ S- M0 v
  261.     }
    ( L7 h8 _' ~- K% S, l, s
  262.     if(!bRestartUpdater): o0 |. K1 j) H
  263.     {' F1 i8 @+ }9 _3 w8 J" {) U# S1 l
  264.       int iCurrSize,iFileSize;
    9 ?' o; }5 T8 V! z
  265.       iCurrSize=0;
    4 c( X2 l- Q# o% s# [& M
  266.       iFileSize=UpdateList2.size();/ Z& w0 D$ q7 \. d# }
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ ^0 y# L3 X0 {8 J; c
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");. x/ J; L+ E( o' V- J! |
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 f6 W# c/ s7 y' N/ J  M" m
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 B9 v8 |, {0 Z7 B( R6 ^" }
  271.       Fclearf(".\\update.dat");/ n8 `; y9 |2 J* X, R4 Q
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : L( @5 N( |% w6 B$ [  I! `
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# [4 b, c; O+ B
  274.       {
    , @7 K. @& T/ l' V" R
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())! @9 Y5 V3 B& i! l4 c
  276.         {. T9 w0 X! c. L. D4 \
  277.           file=(*p).second;
    2 Z; v# {# d1 W, q) m; H, d4 u' o
  278.           sprintf(filename,"(%s)",file->file);
    ( b% b# w$ O8 d7 Z. ~7 j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 R1 i  x: g/ v9 c
  280.           iCurrSize++;
    8 S% Z8 w7 |  o+ C5 R9 W5 B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    # ]0 z# w. H7 I4 r
  282.         }! [: n4 B/ ]% f
  283.       }1 z1 y% W7 {3 i! a" L9 J
  284.       unlink(".\\update.txt");$ O2 y" w  _8 }  t! V  A
  285.       unlink(".\\update.tmp");! R" W4 W, Y( D( P
  286.       Fclearf(".\\checkversion.dat");
    ! y3 @3 |) k% i2 z& \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( T$ k: l8 q" Y+ i
  288.       if(UpdateLocal.size())
    , S/ G% l, b0 n) B! M
  289.       {
    ! o' {$ _# Q! v% \8 E1 N
  290.         UpdateLocal.clear();' y9 K- P8 B' e1 C  \) U
  291.       }( ?! _  O" ^/ R' Y. H# A
  292.       if(UpdateFile3.size()), ~: ~: ]! s, U# f
  293.       {4 i4 T0 {3 L9 }; |7 j
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # F; H& \4 y) g( Y! ^
  295.         {  E# _* W! x1 J! a
  296.           file=(*p).second;1 L- K1 T' O! P2 O/ k/ P
  297.           free(file);
    $ Q6 I7 P+ B$ A* M, K$ b
  298.         }8 `: F9 S0 L( R% R/ v, o% e
  299.         UpdateFile3.clear();' e+ k6 k% j" W: U, R2 `* b' |
  300.         UpdateList3.clear();
    : c. W" B1 k/ O( i# f: ~
  301.       }
    1 N5 p9 i, {3 l. \, h
  302.       if(UpdateFile2.size())
    " E! I1 ~% \' x9 D( M4 ?
  303.       {
    ) H' U. ^3 E7 n% L2 P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 h9 C# M( X4 b' D3 z# ^5 w
  305.         {* p+ i6 n4 y) {, K. f* n" O2 e2 G; W
  306.           file=(*p).second;
    5 K1 Y, E4 f& D1 V- I$ x) V
  307.           free(file);% K, t7 V; q5 U  s3 i
  308.         }  V. I7 ~! m3 A/ I; E4 ]
  309.         UpdateFile2.clear();
    9 q4 ~; p3 V& A1 [2 ?( }+ V& R
  310.         UpdateList2.clear();0 E7 D% o; i9 F
  311.       }
    ; Y3 ]( I8 I5 r) b/ R$ n* ]
  312.       if(UpdateFile1.size())
    / |0 e4 X7 h9 H4 X) H5 `
  313.       {
    ' r+ ?) E, v/ C. Z* h1 d2 n) J
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# x- n4 D& ?* T  J0 @& h
  315.         {" k( G4 b. ]- ?+ {
  316.           file=(*p).second;
    % ]. A$ J7 C8 s0 v2 i
  317.           free(file);5 [5 p! n* C+ D# s: e8 E
  318.         }
    ! R1 l  ]$ ]; N% Z" W6 m
  319.         UpdateFile1.clear();
    ' [$ e; L5 a. {4 Z7 c
  320.         UpdateList1.clear();; y# C8 S2 e& Y+ {2 ?) C1 |3 V
  321.       }
    2 e: J* G; b) p1 F; o
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ @( _9 L$ |8 }4 T5 E$ [, Q3 C- I
  323.     }
    6 U# s( w6 O8 \0 E& U
  324.   }
    7 ]& E& k1 X3 o3 i
  325.   return FALSE;
    % Q. m, R: p# {* _6 O
  326. }
    ) ?$ u+ @2 y# @3 e  M$ D

  327. + `7 D3 `/ f  [' H% V; e8 w) R( Y
  328. void CRevAppApp::ClearAll(void); H/ K- `* H9 b. @6 l
  329. {5 B; O$ ^+ N) S  D, A: W+ J
  330.   LPUPDATEFILE file;
    $ ~5 ?$ a& s) B* P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    - F. ?' A# y9 |5 i' |% w

  332. . K, M" ^; W* n6 K( v
  333.   if(UpdateLocal.size())
    3 m6 r) o" {1 ?! I7 D
  334.   {
    # S) B5 O. P: y) j
  335.     UpdateLocal.clear();
    % ~# ~" O2 L/ I6 \
  336.   }$ d9 S9 k3 x0 F8 Y# Y# J" S
  337.   if(UpdateFile3.size())) Y: m; p. O9 ^6 H! R- R; ?+ c1 M
  338.   {; f# B: K$ H/ v' ?- g. Y' L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): l. J# K7 v! `) E& H+ \$ G
  340.     {' m' B/ ~" c" @# c; B( P/ i
  341.       file=(*p).second;7 L+ q4 i' A& N8 i2 ]
  342.       free(file);8 O2 Y0 ~3 u5 t! f. w/ L4 A% F
  343.     }
    7 D; \' h2 i: x% T  i! A; q
  344.     UpdateFile3.clear();/ m$ y' k0 Q. t: C  V' Q" o
  345.     UpdateList3.clear();
    5 `! n7 d: W' Y
  346.   }
    ! k: }& o! o  b7 q5 K; W
  347.   if(UpdateFile2.size())
    7 h3 \9 S6 H2 ?3 @4 z+ w7 ]- T) e
  348.   {  C+ S: b* H# ~5 ~, b, ?
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + g% ?0 u! _% B1 q$ m7 i
  350.     {
    6 y0 m+ i( K% F
  351.       file=(*p).second;
    ; ~4 ~* v  C! K$ l
  352.       free(file);
    1 r/ D% w  S+ i& ^! ]
  353.     }1 C( G$ ?6 @% I. B3 z
  354.     UpdateFile2.clear();
    % i% O. x! c' v6 Z( o( j  ~
  355.     UpdateList2.clear();
    # ]# }2 _9 N* |$ v+ r1 F- k
  356.   }
    6 o5 {- m# u! ?# {( [% z2 j. m3 D
  357.   if(UpdateFile1.size())3 D. t% T8 ]$ ?$ \) _
  358.   {) y1 k/ Z, M; q/ `
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 D3 n7 P, [  ]/ D
  360.     {
    4 s1 i# D# l- J( R7 |5 W# j2 c
  361.       file=(*p).second;6 H/ y: A' @. m
  362.       free(file);
    ; t8 V# ]5 j8 Y: Q* k
  363.     }
    * y' n7 ]$ }% Q3 n+ u
  364.     UpdateFile1.clear();# V$ e. C8 ~$ r4 C
  365.     UpdateList1.clear();
    ; W" a; I# E& H0 m$ u9 l9 `) Q
  366.   }
    + a6 T: F& H$ y5 r0 a
  367. }    P  S* L5 L  ~3 `" z' p
  368.   
    3 s8 X3 U; t  G8 o! O
  369. BOOL CRevAppApp::CheckLocalVersion(void)( j4 p, z5 _5 U! b! c0 b
  370. {2 z5 c/ {) {  o+ d0 M2 I% `4 ^
  371.   int c;' b1 V2 Q8 F: s
  372.   LPUPDATEFILE file1,file2;
    / N+ ~5 [- o/ L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;6 Z" v; v/ G* Y9 v9 H
  374.   std::list<CString>::iterator l;8 e& D  Y0 i7 p( F# q, x
  375. + S2 j9 r; c- o( w1 K
  376.   UpdateLocal.clear();
    $ {' I4 b* H  t8 u3 ~: F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. \' g/ y: i0 }$ b$ p- n: d* B: Q
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ W% Z. q; A0 T+ u+ R) Y. _
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 f9 U- T# k1 w3 [2 \7 F1 J
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* r- H! S+ m4 d. V0 [+ N: u* Q. J
  381.   if(UpdateFile3.size())+ C( [5 O  p* d
  382.   {
    ( I; R( l6 W* O8 s0 ?
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 P7 A6 u7 m, v4 v. u
  384.     {
    9 p9 y& `6 O, S
  385.       file2=(LPUPDATEFILE)(*i).second;1 {2 O' e/ {' n* I( w. R% v
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! r+ g3 x6 ^( w7 y8 E
  387.       {
    6 X) S- u/ y5 G' P: g" m" Z
  388.         file1=(LPUPDATEFILE)(*p).second;. T; S, {% D) ?. b" Y6 I( {
  389.         file1->vers=file2->vers;4 ?* i/ D7 ~2 m
  390.       }
    * b, H9 q% f6 [0 X  K  N
  391.       else
    1 {" l) u3 W$ m) j
  392.       {& E- e9 B: x1 n& [1 W$ @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 t7 U; X% G, i
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    * S. _4 y1 Q& `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));4 z/ }6 [- R) T
  396.       }
    ) D  G/ K# j% D! Z8 K1 j
  397.     }: S# u; Q  o4 s6 Y" O
  398.   }2 a1 ?0 R) K4 k
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" `: _5 T: B# t( O7 D' P! C
  400.   {0 q" T* t$ F" r# M, g3 x
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())* {  T2 b& m; R
  402.     {
    1 e- s: c) S# b% r0 \
  403.       file2=(LPUPDATEFILE)(*i).second;% G6 a5 [& L4 E5 m: c
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())% I  V8 g& ~% U  u8 S; I! I
  405.       {
    ; s3 e3 B' x5 [8 b- U
  406.         file1=(LPUPDATEFILE)(*p).second;' t8 t' t: e7 M* N6 i( V
  407.         if(file1->vers!=file2->vers)
    5 Q, ~/ ^# W5 N& W
  408.         {
    & z; p, p- H& O" w( z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. h; C& U+ E; l* @) \
  410.           c++;- R% \2 l9 L8 ^+ m) P, W
  411.         }3 m1 H, r# \+ e- P1 @" `8 g
  412.       }
    . i7 Z, o- z4 n- s. I% C7 y
  413.       else' R& f$ H8 [0 n4 P$ c
  414.       {
    , f, I  p  [* U& H- P
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' W8 }! i% J$ s5 x. h# N6 L
  416.         c++;3 p; r9 G2 h+ y1 P& A; b( ^
  417.       }1 M8 Z3 o* ?; H) s: d/ D" R, [
  418.     }2 j/ }9 b  T4 J& B: L
  419.   }
    4 R. V1 d5 o: d9 F
  420.   unlink(".\\DownLoad\\update.txt");
    2 v( Q( j/ g  P( v+ ~
  421.   if(UpdateLocal.size()) return TRUE;
    * `: K2 x, e! S% m
  422.   else                   return FALSE;
    3 Q1 s2 S2 a  N' {
  423. }
    # |9 W9 P7 t" [) }. u/ a7 O
  424. $ e3 N) [! v) Q. e( l; S6 U8 r! E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      S: i. H* t+ G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / p8 b. `4 `& _1 H! o5 h& g

  427. 6 Z* a4 g5 ?3 M6 {8 O. Z7 c7 N
  428. 5 i$ }1 F- u/ t5 d
  429. " k4 X9 m' S) r% l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile). d* W! v6 O' P7 Q
  431. {3 E$ `* L$ ~: t9 T0 {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;7 |+ ^( p) y4 h4 }0 \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) a( o! B3 G, v) K8 |
  434.   {+ P8 M& ~+ l" ?' |$ H! I6 d
  435.     char szLanguage[50];
    9 w" K- n, M. l9 W" y3 ~1 i
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " x# i9 b2 [6 z7 L+ o" C5 V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ( }, N7 y( ?$ p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 ^( D5 L: b. Y+ [! T
  439.     else                                   m_iLanguage=ENGLISH;
    7 C: ?+ F& s6 H" ?
  440.     char szRegister[100];$ J& k. f& k: W* {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 T; ?5 l# s/ s; A3 r8 U/ y) c
  442.     strRegsName=szRegister;! L# Q  E! C+ v* n4 W* l5 p5 B: n
  443.     char szPatchURL[100];
    : K- f7 i; O" O! u1 l- H
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 l! {0 Q1 [( G, P
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);6 Z; P+ Y% ?' R& \& B
  446.   }
    5 I: i& H% n5 |. Z7 p
  447.   else
    / l7 t% G% A0 w
  448.   {
    " Z/ k& n8 r0 v0 x; R* g+ c! S
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 x: _/ R1 u8 Q; x" S
  450.     strRegsName=DEFAULT_REG_URL;* j" X+ V7 Y# s6 [( v6 `1 Z
  451.   }
    * B( F: k/ `$ W9 b0 A: _/ Y
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & \$ P2 T0 G) a, V- M0 j: Z
  453.   {
    3 Y2 i0 {4 x! y0 d
  454.     char szIP[50];2 Q9 H) W: E8 G
  455.     char szDIR[300];1 [8 `$ g; D0 ]( I7 d. F
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))) u2 l: K) s; H; D/ w4 ^6 t5 {
  457.     {
    $ M8 e- {' l$ K+ `8 j
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - o3 s2 ]$ P$ }4 }1 }* ~8 R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 M# `1 N( C; ?6 l) z7 U8 F
  460.       strHostName=szIP;, L# D! n# {, A- b* W
  461.       strHostPath.Format("/%s",szDIR);
    7 z5 G3 `8 j5 d1 D+ _+ [
  462.     }
    8 w& Y/ r2 ~  Q/ m& V8 @2 @
  463.     else0 ~. Z7 B8 e- r, ]% Q
  464.     {
    ) O( w- d) k/ X6 u
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 ]- d. F2 [, Q9 S# \) ^& D) T1 O
  466.       {
    ) V% O. R, J: f& B  Q
  467.         char szLanguage[50];% Z2 \8 D! h/ g" A* ?, L! Q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 p* @; M  E% I) j' l
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- P3 W8 O6 Q& n9 Z3 _" C
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . ~4 W9 W$ d/ c1 R
  471.         else                                   m_iLanguage=ENGLISH;
    ( H2 [, H0 x) ^
  472.         char szRegister[100];# W. P& i( |) g2 B  A/ J, j
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . z3 A2 f; `# \, n. V. z
  474.         strRegsName=szRegister;
    # m' F8 G" \0 V' V3 w+ ]1 d/ q
  475.         char szPatchURL[100];
    7 Z8 D; w/ S+ o' e
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% y: N% K+ r% U' Q: W4 E! a+ T0 w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & j- P0 O$ Z3 W2 _2 z# D
  478.       }
    # y8 W! Z; U9 X* `; O
  479.       else
    - D0 d' s3 [7 V9 W% Y$ c- u5 F/ B7 {
  480.       {2 g, |$ D' x+ d, \1 ]$ S
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: f( f! M- u# |, W9 c/ r7 p
  482.         strRegsName=DEFAULT_REG_URL;
    # [" Z* _/ h0 ^( R
  483.       }! C9 \% F* z7 c" |  Z
  484.     }
    / B) T$ a$ @& W
  485.   }. }8 j8 s) b! W2 K
  486.   return true;
    3 J* N$ U! l0 X/ P# W4 q  }; `
  487. }
    . C  }4 @4 ^: i5 B  }

  488. ( h( {  S! S: O3 Y* R( M8 n+ l6 A
  489. #include ".\ZLib\unzip.h"- u9 R! M7 Q# P4 T9 Z3 x* g* {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 t7 M8 r: E9 ?9 e. j2 X
  491. /////////////////////////////////////////////////////////////////////////////
    - w& A( x3 V: h3 l/ g$ N; j
  492. // CRevAppApp initialization1 e1 ~& }# v* o4 k6 ~  I  O1 x9 |; o  T

  493. 4 D4 a; b- f: L! _* R
  494. BOOL CRevAppApp::InitInstance(). Z& `0 X+ M* e* H# M2 Q0 ]
  495. {
    $ L0 h. k' e; w. V9 B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    + W1 W" U9 N; S3 ~* Q+ G- ^# x

  497. 4 i, T3 x# n4 A8 Q5 j5 U& X
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    : c2 f* v4 R/ U
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    7 ~  |! J' k) S+ A
  500.   {& s& X2 X: W* k4 W7 H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 b3 p" g* \  o( ?* S
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 M  l' w) [* w3 U2 q# \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 I1 e& F# V, ?) s% H; h
  504.     {
    ! Y' s! M8 Y4 p) ^7 A% |
  505.       strcpy(szPath,szPathTarget);' c7 n1 t* \3 H9 Z
  506.       SetCurrentDirectory(szPath);
    ) J9 m& K( O5 d+ p+ v& l
  507.     }
    , ^* l% `  m2 I' X5 }& B+ }; E
  508.   }
    4 x) j; ^: e$ |, p/ T
  509. #ifdef _DEBUG! v$ Q% @# G: ?5 C& z7 w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))0 W# r4 j+ Z) ~) w
  511. #else! {$ R9 x4 |* K0 d7 L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 d( p' s" G5 \$ k3 W( m
  513. #endif! P: H8 r5 [. W; B% E: u$ U* {0 ~# [
  514.   {
    " h1 u& V' L+ v, F5 X
  515.     char tempFileName[MAX_PATH];
    , @( W5 L4 k3 {. D
  516.     strcpy(tempFileName,szPathSource);
    9 \. N7 U1 g3 v1 r
  517.     tempFileName[strlen(szPathSource)-12]=0;0 s6 r- E; f1 S* K
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* L7 {" k: D" c6 X+ G3 b1 l% d
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    , o# O) @3 \  ]% l  g/ u! w8 W/ G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ H2 t: Y# ?2 |+ t* Z7 w1 X" R
  521.     return TRUE;
    9 c- K4 T$ k6 y) K5 g
  522.   }
    & u, |$ G( w) Z1 Y; V& W
  523.   // Nuke 0118: Delete run.exe
    , w$ l0 V+ g9 K3 U' O
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , w! O2 l/ Q4 P& G/ }$ G- `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");/ f$ u6 Z; {8 o! l
  526.   if(!ReadCfgFile("Config.ini"))
    3 k! o+ W; e+ a& a; h
  527.   {
    $ m3 p* q0 W/ @. \5 v! R3 n' C% @
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 x' S4 T3 A' C5 `1 Z/ I
  529.     return TRUE;
    & h9 ~# T/ R6 Y9 h, P
  530.   }2 U2 }9 @4 E: p
  531.   HANDLE mutex;& J- U% V1 O5 q; y* A: y9 _
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    # [, o4 y* t7 W  C1 P: X
  533.   {
    4 A) q2 ^1 n, p8 E+ S7 u" M4 l
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 L6 G6 d8 m) b
  535.     {
    7 L% t& N& M: N) x
  536.       CloseHandle(mutex);, P, T( k1 c% V& N7 x. {' R% [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - D) c3 w# X* N$ M* ]+ a4 n) b
  538.       return TRUE;* g  n8 U+ l# P3 e; a+ p8 K* ^
  539.     }
    . s! L9 B$ y. n* P  v' t
  540.   }  0 F/ Z! l9 @; l- |9 D, v* J, X# [
  541.   CloseHandle(mutex);( b  r0 L6 B& d  U
  542. - s1 ?9 f4 b+ K7 P7 N7 F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 r5 c( F# n) Y8 x
  544. ( c% A. w# |9 x6 H+ x% E& y
  545.         AfxEnableControlContainer();/ f1 u: Q9 I  j6 u

  546. 0 G0 T$ ~" c1 `5 b
  547.   bCanUpdate=FALSE;6 s1 e7 r; n. f6 j
  548.   dwStartUpSteps=1;1 W3 z, }8 F3 ]( B: J( @
  549.   dwProgramState=AP_NOTHING;" |# Z/ r' S9 r* P; I( o0 c

  550. ' j. C, c2 k, p6 `5 M" j* H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * _. k: L9 z( R, F. W, e" Q5 A4 @
  552. 0 O( ?3 ~. }. Y! d
  553.         // Standard initialization9 b, m' E0 T: ~
  554.         // If you are not using these features and wish to reduce the size
    - J  X) o6 z9 |
  555.         //  of your final executable, you should remove from the following
    : M7 i0 O% @5 H' y6 V8 w
  556.         //  the specific initialization routines you do not need.3 C! V$ O+ I- g

  557. 4 o) k( p# Y9 T# H! K
  558. #ifdef _AFXDLL% {6 o1 y8 K5 F; R' j4 x
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL$ E' ]$ ]2 x+ {) {$ O2 F/ ?5 Q
  560. #else
    ; T: W6 j+ |( ]5 p" z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 N- s9 P( C8 {6 ^. I5 I5 f" a& n
  562. #endif" q8 Q) j; s7 Y* q8 q4 ~

  563. & C; H# d- n7 J) n# ]
  564.   dlg=new CRevAppDlg;
    , \& R5 O; g: G
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , e: N' R0 x& B1 U* J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" X; z+ j$ `1 \
  567.   m_pMainWnd=dlg;
    & B+ `% L& m2 I

  568. 2 a  u; j, A) N4 v
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ \; n- `+ W: O0 @% m! T  A# P
  570. ' T8 N2 t$ V2 c1 r6 Q. q
  571. //  GdiplusStartupInput gdiplusStartupInput;: ?$ R! o: E8 i
  572. //  ULONG_PTR gdiplusToken;
    * L4 {, S: h+ D! ?0 e& y, y
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);( `1 a5 z" ~0 \# R/ b( m
  574. . ^' X5 a+ P* Z7 a
  575. //        CRevAppDlg dlg;
    / z5 Y$ O9 A* H( n: P6 l) H
  576. //        int nResponse = dlg.DoModal();1 d% Q# Y3 k. k% e9 P8 d
  577. //        if (nResponse == IDOK)
    " O1 U! _3 c2 J
  578. //        {
    4 U; w2 h/ R. L* W0 z) L: v0 ?
  579. //                // TODO: Place code here to handle when the dialog is6 T1 @/ X+ g7 z$ c2 w
  580. //                //  dismissed with OK
    ! t- R) W4 K  P" A; i
  581. //        }
    / g2 F! Q* S2 S$ Q2 _
  582. //        else if (nResponse == IDCANCEL)! g2 @3 X9 }. n( O& Z+ n8 W6 Q
  583. //        {
    $ v* R2 r% {/ ]' s7 @2 R
  584. //                // TODO: Place code here to handle when the dialog is
    - D2 @" ~3 y) d1 {
  585. //                //  dismissed with Cancel
    " P$ Z; k# M0 ?; z3 R2 ^8 C1 S* g
  586. //        }
    / I1 L# z+ I* q" e% @
  587. # i$ N3 F$ K" r1 M4 i
  588.         // Since the dialog has been closed, return FALSE so that we exit the& X+ F# M; l( X$ N; X
  589.         //  application, rather than start the application's message pump.. V, p0 B7 C, |+ f; {3 g8 M! o4 Q" B
  590.         return TRUE;
      x0 o* j7 P) Z& a5 p/ j
  591. }
    , d( }5 K( Q" r3 F, v5 m8 h
  592. ; a7 U. }+ z" I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' [6 r0 g: s  M
  594. {% j2 q6 ^+ h% k8 l1 b
  595.   int i;0 v) H- l5 c. d. V$ b; m' n
  596.   char *szRet;- `% A1 L: U- b& [- o+ Q' p
  597. & j9 ~3 E: N! f$ r
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    . S" b0 u$ a# D; p2 t0 D+ I
  599.   if(sztoken): ]5 M/ q9 t* ?! T' ]3 b2 @
  600.   {  r* F+ n7 R. a. D4 i
  601.     szRet=&sztoken[itoken];% J2 u+ m/ w4 w4 ?. X+ _
  602.     while(sztoken[itoken])
    0 u8 Z( Z7 V: ]  i. n1 d* q
  603.     {
    ) p/ y9 x- Y; M7 f; u8 }, `" Z# s# B
  604.       for(i=0;i<(int)strlen(token);i++)
    ! h/ d5 e( a6 ?4 b8 d
  605.       {
    5 l, U% f4 c# v* h; Q& n
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])  G! r2 B- b: R- U& a, b
  607.         {: I3 q& b1 V+ D8 ?% m9 i
  608.           sztoken[itoken++]=0;% q6 @. Z4 s3 E  _, x# C5 x2 ]
  609.           sztoken[itoken++]=0;& e! J  Q2 M0 Q( @( B9 d! G8 m3 R
  610.           return szRet;
    6 R  L- V) g9 q  u: O0 X
  611.         }+ r# E( Z( j: ?+ x( ~% c
  612.       }7 n3 @1 E3 z. N1 I
  613.       itoken++;8 n# f+ F6 K$ p0 Z5 V7 w% z  _
  614.     }* z# M3 T; S2 Q# }
  615.   }  d5 \4 M0 d1 p) A" s' u1 K4 U
  616.   return NULL;
    3 h/ X3 l! P5 p/ ?# x
  617. }
    ( }7 |% }: |: g/ t% v; J

  618. : x0 t7 ^, }& o2 z. E+ f6 k- {
  619. void ProcessProc(long Total,long Current)
    8 k; c, p' E* z# t- i
  620. {7 G3 E  ?7 b2 g2 u
  621.         MSG msg;$ K) c( p/ s6 J4 [1 M$ \
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( q4 m+ w6 F$ _/ _0 j) e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 f6 T, G* g7 u" k2 ]2 p
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 u# k" P7 k: b" D% a: G* t8 E- }+ T5 Z
  625.         {
    # g+ Q+ H  R5 q8 ^, Z! {2 Z9 Q& a( B
  626.                 if(!GetMessage(&msg,NULL,0,0))
    4 Q' c1 A# v, v8 t+ B
  627.                 {) L# t3 `) y4 [% q/ A
  628.                         return;
    / l% y  m6 A4 R
  629.                 }
    9 e0 H  j; ^) d
  630.                 TranslateMessage(&msg);& f3 a7 t; D& v; z- u1 v2 n2 G2 C
  631.                 DispatchMessage(&msg);
    % [; x( }; ?) K. d, g8 S8 r+ k: H
  632.         }        ) ]6 o% I) u5 t9 Q
  633. }
    7 f' j+ V4 V8 m4 @5 o. K

  634. ! {1 H; q. T# F! N& l$ H
  635. BOOL bFirstChar=TRUE;
    1 f3 v! Y* y* G
  636. - v, M' B( E& H# B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    7 s. M9 M" w* ]' `/ o
  638. {0 y$ f; X3 I+ t$ U" K
  639.         // TODO: Add your specialized code here and/or call the base class1 e3 |3 y+ c' c/ t& e0 y- _! p/ v
  640.   switch(dwProgramState)
    3 p7 b( @9 M' M1 `, z) V
  641.   {5 J) O$ q% p) H7 k" a6 y
  642.   case AP_NOTHING:
    6 ]5 _7 B4 w/ }: f
  643.     switch(dwStartUpSteps)
    ) D5 N) D  B' \8 c( F* |4 [' q
  644.     {
    $ m$ ~/ A2 {7 M4 x: H
  645.     case 1:* y6 P6 k. l: c; U  C5 @
  646.       {% ^: C! c4 K1 T0 n' v
  647.         int i;  c2 s7 V8 J6 E1 S8 }, M6 e; X, G
  648.         CDC *pCDC=dlg->GetDC();
    2 Y5 U* c$ \. m: Z6 D+ K
  649.         HDC hdcwnd=pCDC->m_hDC;& T/ r- W9 t4 G2 `- G4 k" C
  650. //        Graphics graphics(hdcwnd);
    1 h: `% r( A, z2 W% W) ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; s  u- M9 b" m7 }! _- c) \( g
  652. //        INT iWidth=bitmap.GetWidth();8 U' _1 A0 e3 s( d9 f6 ^, v0 A
  653. //        INT iHeight=bitmap.GetHeight();
    4 P3 k- D4 m2 f! q" g4 M6 C( j
  654. //        Color color,colorTemp;
    : T& |8 Q9 d- ]0 q. L+ i% o! I. J
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); ?2 r! X8 V% E+ L
  656. //        {
    4 @. j# O* X. I4 g. F% x% P0 ?
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& O) b8 S& C$ j* t0 ?  m" A8 `
  658. //          {
    , N9 _+ O9 F; Y8 S7 c
  659. //            bitmap.GetPixel(iColumn,iRow,&color);) ?& a1 J9 u& j# h
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 S5 a$ a$ H) e
  661. //              (BYTE)(255*iColumn/iWidth),5 I+ S& M) ~4 Q6 u
  662. //              color.GetRed(),: d3 K* A) p, O* T( e
  663. //              color.GetGreen(),; A0 R  j; Y: B) H1 l* m
  664. //              color.GetBlue()));8 {: N2 K. e; K" Y4 X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ u3 D% m+ [$ `
  666. //          }; g2 X% F/ k1 A3 T$ J. K
  667. //        }) c" n: f8 P, Z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    4 y, G4 @& ?* T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : X- y- H4 D" K0 q# r6 l$ R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    8 e* Y  Q0 C4 ?0 C; x- L+ K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- ^% h* s- }7 }0 M/ x$ k
  672.         for(i=0;i<240;i+=8)
    / h: |' d7 q  f+ L0 D/ C$ H
  673.         {& G$ X# q+ U- b/ V) w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( a1 f- U3 O  f9 u+ c1 n
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & I; p  T8 J- }" w  h8 |% X4 s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ U0 I8 G& c0 }+ R" P
  677.           Sleep(33);" H( V: l* H  o! r: {+ J9 X
  678.         }
    0 C5 \$ E, @& y  `
  679.         Sleep(1000);
    + N) [, I: q; z
  680.         for(i=240;i>0;i-=8)4 B3 a! C! x' T: ?) r4 b
  681.         {+ Q( ^) P  z3 t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);% p3 l( k' k/ ]- D& e8 N% Z: j
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 X1 j/ u) V& ^, Q" i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) h5 ^; N6 S$ d2 q& P
  685.           Sleep(33);5 ?7 {7 A& v& ^  E
  686.         }/ i4 Y" v$ y6 Y3 H8 [+ K5 Z% c
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);* K/ s: u8 l/ u2 D4 o
  688.         dlg->ReleaseDC(pCDC);8 t( a9 ?- `+ J' |( H
  689.         DeleteDC(hdctar);
    $ O. T' Q0 X# E) M3 e
  690.         DeleteDC(hdcsrc);
    ( G* H( g. f: L+ z) q
  691.         DeleteDC(hdcorg);9 f0 e. w4 C# Z% ~( T
  692.       }
    3 T" T& I6 t2 p1 U; Z/ B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) Q+ i- k6 c( u- l# Q* _6 ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");( {# ?( }7 U* F6 I1 g% M5 s
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ! M; W7 d- R# c0 P* X3 T2 m
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , t) X+ a* r) R- h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( R( H% T1 A% @/ U, `7 P" ?0 |
  698.       if(!Dn.Connected())
    & E! E- i2 J. J; x3 h* c6 O
  699.       {
    0 F5 \' a/ Y/ Z3 l) x1 O
  700.         dwTotalFiles=1;; f. a$ E3 z+ n- ^1 E& O$ |8 e% t4 j
  701.         dwDownLoaded=0;/ B1 @5 _  R3 |0 t
  702.         bSilentStep=TRUE;+ @8 G9 `1 W) q1 m" k/ z
  703.         bCompressed=FALSE;
    5 v' @9 ]/ g/ x" x. u3 ?1 c
  704.         strExtLocal.Empty();
    3 l: a( a7 j$ h' b' l6 }7 ]" s
  705.         strFullName="readme.txt";
    * Q' H; s% S3 k1 ]$ P
  706.         dwProgramState=AP_CONNECT;
    % @' ]4 v. M5 D- m
  707.       }
    5 E% t$ m7 F% x# l; _7 f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    * i( E% g* j6 h0 F# F) y5 Z* s
  709.       dwStartUpSteps=2;1 t9 z+ K+ O2 b; O0 m' n* F" p2 m8 m
  710.       break;
    $ j$ J: j! L: k9 U3 q
  711.     case 2:
    # s. r, Q: v) `# @/ C* q/ H
  712.       {
    : ^; a% N/ c8 h: ?( _: C
  713.         int iEOF;
    7 B; [8 o  Q1 b- f5 B6 V3 I
  714.         FILE *fp;
    ) V& i3 g8 {0 b
  715.         char szString[512];
    ( x* h+ \1 z0 w9 _+ i- A) ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% g4 o- j5 |1 {& J1 G
  717.         if(fp)
    % I5 Q3 x9 C7 ?4 {, E
  718.         {: j+ h: Y. s9 K3 C
  719.           do
    : R  y6 A, w' M8 x) Q9 E
  720.           {
    / _3 d0 k- P3 c5 o& n
  721.             iEOF=fscanf(fp,"%s",szString);+ O9 E& a6 E/ K5 `7 o& q
  722.             if(strlen(szString)). L/ a2 ?% F9 ~" b; i$ h' j3 c  g; a
  723.             {
    ; Y' I6 I/ z( U. ]' o
  724.               if(bFirstChar)+ c. n$ ?9 }! L( G
  725.               {2 v) M3 Y/ y- M# [  b  k( d/ F
  726.                 bFirstChar=FALSE;$ B) Q4 |" T% k) a+ k# E
  727.                 bConnectIsBig5=FALSE;
    " O( b% N" |: F6 J, [+ c
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " }1 m7 l, x4 d& d+ d* y
  729.               }
    . d* d, [  y0 B: P* M5 U
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));' k) C# S' I2 @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 \/ `. M  n  L
  732.               dlg->m_ListText.AddString(szString);. X4 n0 V! N6 {3 A% P
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & L2 i! T6 d6 R" o$ h  C# L& c8 K
  734.               *szString=0;: T( P) x% {# J2 q, }8 f# [2 v
  735.             }
    ! o: Q9 W% i! ~3 j% ~! f  O
  736.           } while(iEOF!=EOF);
    $ k3 E& @1 n  O( {* b
  737.           fclose(fp);
    ' F) R( ~3 f0 }/ F1 f
  738.           unlink(".\\DownLoad\\readme.txt");
    5 z4 W, C( e1 p: k* K- y
  739.           dwStartUpSteps=3;/ J5 H% Q" j9 Y0 G( e$ ?
  740.         }
    , D. U: i' `1 S/ T9 h* J! r7 Q
  741.       }: e( k) L% g/ M: Z8 A! {/ D& X
  742.       break;% T( }8 @2 ^$ K% H
  743.     case 3:
    ) y4 i* q4 E3 }, E! L
  744.       if(!Dn.Connected())
    . F2 _7 W; D5 y$ G4 y4 o4 U: ]
  745.       {5 u; M; a' o0 p" i+ T
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ B5 t: J9 k2 s5 ~7 v5 b
  747.         dwTotalFiles=1;6 j" p# c0 v! D( O. Z
  748.         dwDownLoaded=0;  d; a: h1 O+ v6 `+ q% p
  749.         bSilentStep=TRUE;& u1 L& D% a% R6 S
  750.         bCompressed=FALSE;1 E0 |' k) O- h' `  M% I! j9 x
  751.         strExtLocal.Empty();
    + |! u/ T6 k* [$ g3 R- b: ^2 Q
  752.         strFullName="checkversion.txt";
    ) r. S- r( S) t" a; ]
  753.         dwProgramState=AP_CONNECT;
    " p. @( K- O0 _9 c  w+ a9 f
  754.       }
    " {  O0 O% p1 c; t0 i# @6 n4 Z+ w
  755.       dwStartUpSteps=4;
    ; ~$ a3 a" E: D* Q+ C8 T
  756.       break;$ \- T& c- C6 }( w0 c8 x. s
  757.     case 4:3 d- L) V$ ]0 M+ ^9 q
  758.       {
    ) ]+ Q* H! o+ L* P, a  Y! P0 O9 B
  759.         FILE *fp;/ Q0 e2 I4 J7 G" R, L) P
  760.         char szString1[128];' N+ u* I9 Q3 h1 b4 R" }
  761.         char szString2[128];
    5 _3 C% v6 M) w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ! o. t' P/ I$ w2 s8 G
  763.         if(fp)
    $ P- m, z/ N1 o
  764.         {
    3 |4 z: q# _$ y8 {) F, u) y
  765.           fscanf(fp,"%s",szString1);. M2 j; q' I. x8 L8 O) d# R
  766.           fclose(fp);( B' z- k4 r" z5 L3 Y  U
  767.           fCheckVersion=atof(szString1);) C! D) B* y! T$ T* I2 n
  768.           fp=fopen(".\\checkversion.dat","r");" X+ D( Q' S/ r# N
  769.           if(fp)
    : @0 L0 S$ h% |' I
  770.           {
    . T5 V4 C% z( z( P% `% W  }& |
  771.             fscanf(fp,"%s",szString2);& i; u& k$ E3 ]/ y! R0 C8 K) j
  772.             fclose(fp);
    3 f! X: V4 r( G. r
  773.             if(atof(szString1)!=atof(szString2))
    ( X8 G# l. @$ c& h" D
  774.             {+ L; l* q. L& H" o2 M
  775.               if(!Dn.Connected()); b+ Y7 `7 ?, ?7 C. N$ z
  776.               {
    3 _6 {) J2 }% ?3 N! v* u$ Y0 N
  777.                 bFirstUpdate=TRUE;
    5 y9 I: f4 \8 W4 X- G
  778.                 dwTotalFiles=1;
    % R. R* k( D. n% h% D
  779.                 dwDownLoaded=0;+ j" s2 m2 ~- v# J( F( ?# h& L
  780.                 bSilentStep=FALSE;9 G! @" o8 k0 `! i, k' u
  781.                 bCompressed=TRUE;
    * S4 i: K6 ^* I+ G- w. I& |
  782.                 strExtLocal=".\\DownLoad\";% G* U/ R6 O1 x/ G  @  q- W" K' q
  783.                 strFullName="update.txt";7 x; _% l& k& G# n1 c' D/ J( m
  784.                 dwProgramState=AP_CONNECT;
    / @! O! i3 i: S& E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) L. k8 }. ^" q1 r
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");6 w5 V4 i  h1 L4 F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - J* d7 ]0 I7 @
  788. 2 P: r; P1 H6 p2 ]9 u! E7 O
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 A8 C  h$ a; ]& O( p: u
  790.                 unlink(".\\DownLoad\\checkversion.txt");- G. n' f9 e8 v% x
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( U7 k7 ~& K  M1 F8 J" M6 ?
  792.                 {0 ~/ {% t  Q7 }* M( Y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( t* V8 v- f, ~6 [# n# A* v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 G3 a! T9 ]& F. C+ ], V3 ~9 I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ W# }) r8 o1 Z. d& r  m# a6 k) L) t) K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + M9 r9 T" O  V% Y

  797. - b- p' ?# J' w) Q+ X4 V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");9 e% n/ m. G% o2 f8 U, {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 f6 v! P( v" O5 T% i) Z0 h
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    9 J# a: F/ j* W  }9 F
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 B- z& f: w7 ^1 W- {7 J
  802.                 }8 v9 m: b" a' b+ m8 Z4 g  p* _
  803.                 dwStartUpSteps=5;6 Z* k% i$ d9 U7 [/ K6 D) G7 J' g
  804.               }
    7 R5 h1 D/ E4 J. g
  805.             }
    , }- S4 N: s8 x- ^
  806.             else
    : O  L5 d' G" \
  807.             {
    ) t: K* P: g2 \: Q1 M% H* [1 ?
  808.               unlink(".\\DownLoad\\checkversion.txt");2 `. O, ]( b! d! ~3 H9 Q1 O, A  f/ G
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& k" o- C3 S6 U/ v1 G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 K5 W' U$ a3 b6 M$ q* P# ]2 P$ s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 N- N1 V' k9 p3 E2 H; s  s

  812. 8 p! G  e  b8 r
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 c2 l7 A; y6 K0 c, `
  814.               dwStartUpSteps=99;
    5 {) N" P2 C' Y6 z
  815.               bFinishUpdated=TRUE;
    , I% |4 v% R7 n( s
  816.               bCanUpdate=TRUE;
    , P* w% s; a! |- \- p
  817.             }
    ) f$ A# h4 @- v
  818.           }
      D* b# _7 }5 w; D. \7 |+ Y
  819.           else
    ) P6 \9 n+ S/ d* ]; Y
  820.           {% Q! I7 m* n4 ]5 {! z' f
  821.             if(!Dn.Connected())$ p* \# ?% j1 e: L& O5 X( R1 S( p
  822.             {
    ) K' ?( _/ B8 W4 f1 H
  823.               bFirstUpdate=TRUE;+ ?4 k0 y6 N% U+ [/ j9 I
  824.               dwTotalFiles=1;8 z3 B7 v7 M4 F. ?2 a3 ?
  825.               dwDownLoaded=0;
    + m! M$ K9 m) v+ @$ t
  826.               bSilentStep=FALSE;6 |( ^  K4 Y" x  V. c- n
  827.               bCompressed=TRUE;
    ! v+ ?3 P3 [' k6 {
  828.               strExtLocal=".\\DownLoad\";3 e3 j. e1 A4 y
  829.               strFullName="update.txt";8 ?+ V# y7 d, v6 c
  830.               dwProgramState=AP_CONNECT;# W/ _3 r( E/ ~: H/ t, _
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  L/ c- Y' U! L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# C' Z. B  @- n9 O
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 b" C. y2 y' H5 ~% H* X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + e: A% Y8 a1 x0 Y; u. r
  835.               unlink(".\\DownLoad\\checkversion.txt");
    + P5 t0 ~' Q' g$ ?% I" C
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); R* z/ y  t7 }2 i4 s& P) s
  837.               {
    ) \& B9 @' @5 d7 N% m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ! i/ p% E( b0 x
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , T5 {7 d( v; l' y9 ~
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    / q3 x+ `9 w. B+ v3 [( H0 K( T, D
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) [7 [, [2 L8 D7 A! T- N5 H
  842.                
    7 q5 S# D6 |, K5 L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( b6 j" N8 J) h9 x$ O. G
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* {- L/ t5 w2 Q$ y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    : Y0 c  P+ ^8 ^. R; J/ i! G6 t. {& A0 R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 @- v, w7 u& {- x& f" A: S
  847.               }& L6 a' ?7 b/ ?8 A" ]: F5 f
  848.               dwStartUpSteps=5;6 ]7 N/ _& y3 [4 H# Q. a( Y
  849.             }
    2 X6 e8 ?2 Y, u/ X! B" C
  850.           }
    ) [- y% _6 }* ?$ a. ^
  851.         }8 ]1 d( D, r5 B& I( s" ]8 q
  852.         else
    $ A- L' s( i4 [
  853.         {
    5 ^: G: J+ ^3 d
  854.           dwStartUpSteps=3;
    ) A0 C0 k# l: [' P: F
  855.         }! d- d0 Z9 b4 p" D- K4 L
  856.       }
    % X3 M& p8 m8 u+ S  F
  857.       break;
    $ i" T( a. Q. D/ d3 D
  858.     case 5:
    & Y0 |! K# R; U# n
  859.       {
    ; m% ?+ D7 p' k3 M. s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- \- z: H$ F9 }4 n
  861.         {' W( t* J" s' u- f
  862.           int opt_overwrite=1;
    , W' S$ P$ r# C6 H/ a; s3 ~* e( P
  863.           int opt_do_extract_withoutpath=0;/ h6 t: R# u3 g* G2 H
  864.           unzFile uf=NULL;
    ; ^* c: M7 N6 g

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

3 s5 j. ]' b# z4 T$ g. b% Y

評分

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