CSUpdate.exe源代码

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

( H4 ^1 f6 \, ^, s& N& H. T, o( d
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " n5 `$ _6 `7 }3 B: m$ U; s/ r2 m+ g2 b
  2. //% t+ b4 {$ C. X
  3. % D; n' H$ B& B9 G$ f1 }
  4. #include "stdafx.h", I3 L& T0 k. r- n
  5. 6 ]" `- p5 s  ~1 K. ?+ {. h8 ?
  6. //#define UNICODE0 E& ^( a* s2 i( b! M! Y
  7. //#include <gdiplus.h>% }$ }- R$ n* L" W" \# W- F# f
  8. //using namespace Gdiplus;  r, A) J; l4 v& U3 Y
  9. - L* v! U0 H" T4 J9 d& K, a5 w) m8 ]
  10. #include "RevApp.h"
    + [* E9 K9 b; |9 W
  11. #include "RevAppDlg.h"
    ' H, |4 g! N& U% x

  12. + l. ?7 u1 B" b! P
  13. #pragma warning(disable:4786)5 t1 T% ^! ~' A0 s" a4 k( E
  14. #include <map>$ l/ n- K" F. u2 N
  15. #include <list>
    . D( L% D6 M# I! @% B# p
  16. #include <direct.h>& w! x, z  ]; _' @. m. i/ [

  17. * N; s6 C4 ~/ |" j; n! y
  18. #ifdef _DEBUG) w3 b# T- ]' N! O" d. ?4 M
  19. #define new DEBUG_NEW
    ' i  F: f, v3 D1 g' @
  20. #undef THIS_FILE
    8 r0 i& Z/ q6 X- D% N
  21. static char THIS_FILE[] = __FILE__;
    . ^+ }4 c. D8 X( _: r4 e
  22. #endif
    ; }/ o, {. V1 m
  23. #include "SkinResDef.h"
    7 I! U9 d# `" l! K  l
  24. #include "ChangeBG.h"
    5 [. O# c* H; s
  25. #include "AFXINET.H"+ [. V- v) Z: U# t( w8 q& L; p
  26. , j6 a6 g$ c3 w8 s" Q. b
  27. #define TRADITIONAL_CHINESE 00 [. H) n9 G- w4 c; ?% R4 N
  28. #define SIMPLIFY_CHINESE 1
    7 p3 {# V, `' E3 F1 @, A
  29. #define ENGLISH 2' \2 B7 z7 G/ b! v5 a
  30. int m_iLanguage = ENGLISH;
    % j3 U  D- y' K/ I1 e9 h
  31. /////////////////////////////////////////////////////////////////////////////# ?, e# E) K/ D0 W3 O
  32. // CRevAppApp
    $ Z# O) h# x! F$ i5 g: U2 \
  33. * h. x% \% Q* V$ {
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 j, @; f( |' W5 H# |
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , o- p1 t! y9 I7 S5 n' r0 @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' t8 T% q$ f  Z) z3 R8 n
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 K; B, E- F7 w/ t( S; G9 p
  38.         //}}AFX_MSG
    . f4 G8 A1 y2 b6 G) ^1 D
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " {1 `/ P) }! h% w
  40. END_MESSAGE_MAP()3 l' w$ W# {, N3 C* q- l, v

  41. & N. n* h2 f. O  `% w& q7 Q
  42. /////////////////////////////////////////////////////////////////////////////) f2 v+ y+ V. ~0 b8 H2 N
  43. // CRevAppApp construction
    # k+ G( }3 n* L# @$ Q
  44. 7 |4 F; H# [2 M; w7 K
  45. CRevAppApp::CRevAppApp()) d( o8 Y% W9 ]" f# M# Q
  46. {
    ( r; X' K" R6 W5 f" b* G
  47.         // TODO: add construction code here,
    ' G# J& ]) [" W/ R5 K! r
  48.         // Place all significant initialization in InitInstance0 I- }1 D# t# e
  49.   bDisplayIsBig5=FALSE;
    ! v" @+ E  Y# x) E3 P
  50.   bRestartUpdater=FALSE;+ K  C1 l( }/ n
  51.   bFinishUpdated=FALSE;1 h5 `" [+ B" `; l7 b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; t7 }& p0 R9 q' a
  53.   InitChangeDataBig52GBKS();
    $ p, h1 T/ z  o8 L
  54.   InitChangeDataGBKS2Big5();
    + W  z; `- v% o1 D! S
  55.         //
    - M/ o2 H" D+ R5 l2 o
  56.         bClickRunExe = FALSE;0 e" I7 o- v3 M  J4 E
  57.         //4 D9 o1 A# ^+ r0 ]2 q' y8 i9 p
  58. }
    ; U" K( J' s, d6 k

  59. ( |, h" b* ?4 N- t% o0 k
  60. CRevAppApp::~CRevAppApp()7 Z8 p* R8 r# ~3 _: @# N& l
  61. {
    3 S" ?+ x0 W& \1 d/ x
  62.         // TODO: add construction code here,9 U; `2 \2 O. e$ P: [5 U( _1 H: {7 ~
  63.         // Place all significant initialization in InitInstance% U  q2 K6 S8 W" E0 J5 Y/ ^  ~
  64.   EndChangeData();
    % R: u: C( Q+ v  Q: M  g) o0 i( G
  65. }& |" z  b) u; k3 ^3 U# c
  66. ) v6 Q$ F  ]2 J# x& a4 t
  67. /////////////////////////////////////////////////////////////////////////////2 g! q# [- P3 l& |1 [
  68. // The one and only CRevAppApp object
    ; h2 V/ M3 q) B: [( E
  69.   U7 N# x$ i; d  V  c; a
  70. CRevAppApp theApp;
    : b8 E' k& \) u( q$ I

  71. - C& x: w+ _4 m3 V8 ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)! o; m* D8 p% H* v, I8 O. N4 a
  73. {5 N) Z" d+ E8 M; q4 }& t
  74.   int iEOF=0;1 r+ g6 p3 F  \. f8 v' G* M
  75.   char szTempName[MAX_PATH];
    + z0 D" z0 j# w7 p
  76.   *szFileName=0;
    + X* @! [/ K9 U, G7 ]
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 H5 |( u: L  t$ A  v. n$ H
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" d# X* A+ Y; i3 w' C
  79.   {1 n8 K, s7 Z, f8 y4 R- G5 b
  80.     strcpy(szFileName,&szTempName[1]);9 C7 o+ x7 _' L- L* b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)) X5 i2 ^7 }' R( ~; B" P1 j
  82.     {
    7 m+ Z1 A/ W; s  k8 T
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ( [. V; t7 A" z- `8 ^* Y) s
  84.       strcat(szFileName," ");
    4 x  I1 j" T4 v
  85.       strcat(szFileName,szTempName);
      ]' G! A" t$ A" ~5 C8 p' Z/ D2 s
  86.     }6 K4 N6 B9 {; \) s
  87.     if(strlen(szFileName)>=1)
    # z# |0 @# ]0 S9 J
  88.     {
    9 B/ a( z0 _. Y7 W1 W5 O3 h& r8 H
  89.       szFileName[strlen(szFileName)-1]=0;7 s: a* j. N7 t8 e; S
  90.     }9 d0 ^$ }1 i7 H! l9 u
  91.   }
    3 ?" Y% b$ ~# J
  92.   return szFileName;
      d  l5 L' ~0 J9 [, i
  93. }" u: z% C6 k% l7 Z
  94. - B4 d8 K  l# w6 H2 C% `
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)2 G. G4 b3 x8 ?# t$ P% \
  96. {2 m+ f: \! m5 ^- c" {
  97.   FILE *fp;
    ( I) s. @) L8 n  w. A
  98.   char *key=NULL;* R7 R' q: A0 i7 f# c
  99.   char version[MAX_PATH];6 d3 e, e0 @4 d- {+ O5 x
  100.   LPUPDATEFILE file,olds;2 l2 [  ^0 Z  `( |+ |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    " r" f3 A' N" R! u. X) g# a- |

  102. . e( o; q  f' d
  103.   UpdateList.clear();
    1 F1 u. C+ z3 r$ z
  104.   UpdateFile.clear();( z4 I( L  W2 J6 ~, j3 s7 f, y
  105.   if(GetFileAttributes(filename)==-1) return false;+ s; ^. V, y' j* a: d4 P9 w/ b, v
  106.   if(!(fp=fopen(filename,"r"))) return false;* m1 a& t7 S& _6 M$ Z; h
  107.   fscanf(fp,"%s",version);$ |; R" C- l' W% I  r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 b6 b3 A8 [8 M. v# r2 X
  109.   while(fscanf(fp,"%s",version)!=EOF)# }) m/ |5 B5 }4 R% C; T
  110.   {0 s3 L& `" }4 z7 m+ V; B, T3 w
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 l& R$ ]) T! c+ C8 m, `
  112.     fscanf(fp,"%s",file->path);
    ' M* R/ X& a& \' L4 P4 E. u+ A) b
  113.     ReadFileNames(fp,file->file);
    / M1 S( c/ C4 ]. F& S2 n: j
  114.     strcpy(file->full,".");5 a$ B, x9 c+ J5 u# n* N
  115.     strcat(file->full,file->path);* s; g( c) z9 T9 b  v% p
  116.     strcat(file->full,file->file);
    - A/ e& O. S/ o, k' t/ V( X
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); _% M, S' m4 L% B/ z3 |
  118.     {* M& W7 E# ^# M3 M# t& @. ]
  119.       file->vers=(float)atof(version);
    % p" ?0 b0 g- Q% X8 O+ f
  120.       UpdateList.push_back(file->full);  z* x. A! i) @; U7 u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));7 ]+ b+ P% y+ H0 n  a
  122.     }
    0 s2 ^  l! Z4 s3 g- G+ m; p) U; _
  123.     else% w! S; u% i! H* F& ~; S
  124.     {
    2 X. m5 }6 r- i) f
  125.       olds=(*p).second;
    % T$ C+ R0 |9 x. [/ b+ s  D
  126.       if(olds->vers<(float)atof(version))
    ; B; [- r+ T+ W6 G9 ~8 ~( P, Z7 ^
  127.       {/ J; |+ `/ H( k" I3 o! ?% r2 }
  128.         olds->vers=(float)atof(version);
    0 h4 I. z, c2 F' h) ^7 Z
  129.       }4 [2 [7 Q  `& b
  130.       free(file);
    1 D  c8 V# V3 x  D
  131.     }, N/ G! H, c' D$ l0 Y2 O6 [
  132.   }
    $ f' s2 a# U) P
  133.   fclose(fp);; J5 `/ z: q: g% s! D
  134.   return true;
    & Z+ L7 d, l4 Q* b. N. W$ q& z" S
  135. }9 X, k& S% o0 h* q$ l+ h
  136.   {9 }3 {& S; N4 v. V5 ?- F
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" x5 f/ g( H5 c# l7 L+ L& o' T- S5 l
  138. {
      j& H$ p& ^1 z" k- K
  139.   TCHAR  szFull[MAX_PATH];
    # P& e- F$ |( q" Y
  140.   TCHAR *token,*inter;) c+ w5 w! N% @/ i# \
  141.   *szPath=0;
    2 O' w) y' s0 ^& h7 T& u
  142.   strcpy(szFull,szFullPath);) m0 c' u1 I* g4 v
  143.   token=strtok(szFull,"\\/");
    # F# a' r5 k9 o) p) ]0 {
  144.   inter=token;
    2 V4 {" c3 M2 \3 u
  145.   while(token=strtok(NULL,"\\/"))
    0 g6 S* Z! W" }; m4 L1 K+ |
  146.   {
    7 B1 z. t* a! [; L5 E
  147.     strcat(szPath,inter);% s! v5 b# h$ T% {9 Q/ u0 H/ m
  148.     strcat(szPath,"\");" f4 u2 m) E# l  v1 E) I* f$ R3 O
  149.     inter=token;5 q! A& b/ y* e7 B9 G: g6 o2 H
  150.   }/ a- a8 c5 N& k; v6 t) D3 a
  151.   return strlen(szPath);
    1 j6 e6 I+ H7 w4 X* r6 l( r
  152. }
    + G" ?" E) i+ t6 Y
  153. 1 f6 e; B. |% W7 F/ j1 W* f4 M
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : ?! ?7 r0 [3 k
  155. {6 b  C) ~! d7 T( G8 ^% z7 ?8 K
  156.   DWORD attrib=GetFileAttributes(Target);
    # d6 @. K4 c3 d) N/ `
  157.   if(attrib!=-1)
    * b% G( N$ k; g5 m+ C
  158.   {
      e7 p3 a5 e3 Z. D6 p/ B& r
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 B6 ^4 f) w& D/ c5 e
  160.     {) Z; _: B$ ?7 w, h) I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    1 Z; O: U( K. a
  162.       SetFileAttributes(Target,attrib);
    6 k8 K4 _; s" t
  163.     }
    2 c, s) V8 ]' b, [1 ~# u7 W9 q, I
  164.   }
    4 l4 x! W# [& u6 `
  165.   CopyFile(Source,Target,Erase);1 y& n  T3 x% x- v
  166. }& z, ?" C" t4 j. O, x9 g6 G. ^. ~8 p4 `
  167. 0 b" ]  d4 y  }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); `8 o) J* W( y
  169. {
      \7 w6 r6 l& ]3 c) ~3 @+ J# a
  170.      FILE *fp;
    & O' D2 `' n' |+ b! c
  171.      char  szBuffer[8192];
    5 m# o6 s2 e' N
  172.   va_list  argptr;
    6 E" z+ @1 G& g/ ], f( F" {
  173. . u& A; y' U5 Z( q2 x1 t+ q
  174.         va_start(argptr,message);
    1 d( |; M/ Q6 u- M7 l$ _. N7 Y
  175.         vsprintf(szBuffer,message,argptr);; i8 I: ]/ L4 i0 ~
  176.         va_end(argptr);$ [6 R2 v4 q5 e) C8 {- s
  177.   fp=fopen(FileName,"a");6 m5 c6 c( Y9 h/ i( U$ u0 O2 c* S6 h
  178.   if(fp). V* |2 ~5 g8 q4 Y5 P0 U& U! @
  179.   {
    3 P  q+ d8 i0 b  c
  180.     fprintf(fp,szBuffer);
      \+ t  b+ Y* \# z
  181.     fclose(fp);
    4 Z/ w1 Z) V+ o7 x0 f/ K
  182.           _flushall();, o, X% ~6 z' S: l5 @6 S7 a
  183.   }
    % B" C- y% d7 ]3 u! T/ l
  184. }5 N. \0 `3 Y7 w# _' A2 ^

  185. ) H- u, h% P6 V: f: ~# F3 ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)$ b$ p' L: S0 E
  187. {
    ) E& t7 o2 |# J' i4 l8 F! c! _
  188.      FILE *fp;
    , F3 G# A- E* y  L
  189.     DWORD  attrib;$ L  h1 L& b4 w! t0 D
  190.   attrib=GetFileAttributes(FileName);
    0 P4 s1 a2 q: P" o1 [
  191.   if(attrib!=-1)
      g( J( U/ n. L6 i; O
  192.   {
    & l! q, A) v6 ^, f3 t
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    7 e; q' J7 C1 x4 F4 j: p( f
  194.     if(!SetFileAttributes(FileName,attrib))
    + H4 h2 i8 r7 b7 e% c
  195.     {
    + O) ]% \8 v4 Z
  196.       return FALSE;: u7 K3 A4 Y6 E% `- c2 r
  197.     }( G8 Q# B( z& R6 X, w2 K
  198.   }
    ; b! Y! r6 {+ E7 t  a
  199.   fp=fopen(FileName,"wb");
    1 O! h" b+ N+ A! A; j" U2 ]
  200.   if(fp). a! F2 @: p+ o4 w% I1 D% j$ H6 ^
  201.   {6 ~; }7 `! v( h- O5 K$ d
  202.     fclose(fp);' g1 v2 a9 U0 m
  203.   }, I0 h0 M) i' |6 q9 A' q
  204.   return TRUE;0 V% Y) ?. w  j
  205. }& L+ J* W- m" h4 d/ |

  206. : Z3 O4 E: O! g0 r% H
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ w3 P3 q7 G2 X" b' B! J
  208. {1 J4 |6 k( P2 m% @' u+ u( f
  209.   char filename[MAX_PATH];
    ( b+ o6 l# q, e/ m; p! S& Q. e8 d. H
  210.   LPUPDATEFILE file,olds;
    + ]; Z5 Q5 v4 }" J7 _* q
  211.   std::map<int,CString>::iterator i;( q2 P4 Q. n! c+ Q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( u6 x2 u" B# P/ Z1 {$ ]0 m( R
  213.   std::list<CString>::iterator l;2 D) n, {" [* s  J9 o
  214. ( D' c: B. k  A9 A6 K
  215.   if(bFirstUpdate)( w6 x- M" U- U; ]: ]
  216.   {/ b( j/ o  l5 `1 H1 [( p$ ]7 H
  217.     dwCurrFile=0;
    1 v1 N( ]" f; O8 E. _8 [+ W" X
  218.     bFirstUpdate=FALSE;
    ( `9 \4 Y: M7 B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 E% @( I& Z! Z# i% r! V
  220.     {) x. q1 v4 J; d9 d4 D9 j
  221.       dwTotalFiles=UpdateLocal.size();
    - A7 {0 _* b8 K% t$ d; D
  222.       dwDownLoaded=0;
    " ~4 s9 E$ w# D  L: \( @( i
  223.       bSilentStep=FALSE;
    # w% d9 E+ s& O- V( c8 k
  224.       bCompressed=TRUE;
    3 m9 T5 ?, b& V# g1 J: H5 b
  225.       strExtLocal.Empty();( ^/ \  |# L& J! P. T0 D9 k
  226.       strFullName=(*i).second;3 |0 b6 t/ S. o
  227.       dwProgramState=AP_CONNECT;/ r: B; D# d% O' d
  228.       return TRUE;6 L0 p6 n# y' o3 r2 S
  229.     }* ?3 z0 G) ~7 B- M
  230.   }  P) Z( y" {6 |# i- H
  231.   else if(bRestartUpdater==FALSE)
    ' H7 a; ], g/ M" g6 C/ h( T
  232.   {( g9 n+ m$ p/ b& h9 l+ z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), B- I8 }1 G  K( D" z6 S2 S* o3 {
  234.     {
    & ~5 J9 |1 N' V9 ^9 a% s9 U, \; x
  235.       file=(*p).second;6 s! |; m3 \% _5 y" `, i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . I0 n4 U& ~& ]: l
  237.       {, v7 P/ |) A  s+ Q
  238.         olds=(*p).second;& W8 d( z9 k, O2 M. x# T* ?0 }& w
  239.         olds->vers=file->vers;9 V8 }& C) m8 T' B! i
  240.       }, b$ y* s5 J& Y! q
  241.       else+ q) g& X5 O* n- V
  242.       {
    4 `% P1 N( D, z8 P: T. F  ], P: i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 J& f! q$ R' w5 p1 m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 k4 m" Z* D7 {  c
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 j4 Q) w6 d# V0 m
  246.       }8 x$ h" ]( U9 G- a) b. y0 u$ a7 f4 `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 N  H; x4 i" j
  248.       sprintf(filename,"(%s)",file->file);$ g1 J: J1 g* P2 e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 ?( `; N  @4 Y6 _% E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    + A% F0 t" o% |' D/ H! w) C: z
  251.     }
    6 t4 k* B9 m' h
  252.     dwCurrFile++;! C: S! i9 M3 Z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 k5 i: b( _' x3 a" U% {  ?
  254.     {' G  N! F& z2 l7 Z6 t
  255.       bSilentStep=FALSE;: {6 z; P3 E/ Z! ~; j* `
  256.       bCompressed=TRUE;- D' Z7 t+ A4 g& d* Y
  257.       strExtLocal.Empty();
    $ w$ Q; s( x8 {  `8 f' T
  258.       strFullName=(*i).second;0 N8 p+ a( g3 |7 i4 v. R
  259.       dwProgramState=AP_CONNECT;
    3 N  ^: Z  ?2 L6 P7 d  a
  260.       return TRUE;, C" N% I" |+ c1 n  k9 }0 t3 I
  261.     }1 ~, i% Z, T- H
  262.     if(!bRestartUpdater)& Z" g6 t# S9 Y5 _$ t* k" g
  263.     {  k0 V* f) e1 B4 F! q# K
  264.       int iCurrSize,iFileSize;
    9 ?# y3 e) |, ~% {( N( i8 z. a$ M3 X
  265.       iCurrSize=0;
    : @  N& ~: a! P: W' c6 Y
  266.       iFileSize=UpdateList2.size();3 v2 Y# H7 C. j/ ]+ I
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    9 t8 Z, T( z+ U  L+ D1 G+ O
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    1 H$ i6 T! B+ I7 h5 r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");' [$ f; m- e/ v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 H5 U; V6 @3 ~/ M, l
  271.       Fclearf(".\\update.dat");
    0 Q3 h. u; B  G$ @
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ' C4 \6 J) X( y: W% J
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& n1 c& o: p: l
  274.       {( Z7 J7 _: @8 e0 U
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & s9 \+ `: L: }( Y8 A  X2 O1 a
  276.         {
    + o) Q3 z9 Q9 B" E
  277.           file=(*p).second;
    " ^: ]# h) `( |- m
  278.           sprintf(filename,"(%s)",file->file);. K4 ]; a4 N7 M: B) p, f" O
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 E- {) a( a$ w1 d* j: n) [; Y" A
  280.           iCurrSize++;& f! c# Z' M' \! C- M# b
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 V: y( f7 [" `) p
  282.         }( `5 y; y, ]7 D4 G  j, ~; z
  283.       }
    & Q2 ^# G0 o) s6 a( A9 m
  284.       unlink(".\\update.txt");
    5 s: k! p0 y( e
  285.       unlink(".\\update.tmp");
    & s$ m9 f( E$ v1 \
  286.       Fclearf(".\\checkversion.dat");
    2 c; }) D# `7 U! X+ R# h8 U
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% ?  ?0 B2 f( ?; \' ]" I0 d
  288.       if(UpdateLocal.size())
    ( V9 T9 J$ f7 A8 j: L( r$ t
  289.       {3 P8 n% j- W' Z: A
  290.         UpdateLocal.clear();
    7 L; K% }- |3 n
  291.       }
    ) Z: V% a' N* S4 s+ S7 a% c
  292.       if(UpdateFile3.size())+ O0 Y' f' k( D9 t+ {% H5 e* ]' x
  293.       {! Z0 g& a# y0 i* R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' c9 p* C+ a, c% o
  295.         {
    ! W: g5 M7 ^0 h' j6 I; ~
  296.           file=(*p).second;
    ; ?! m$ y4 D$ n
  297.           free(file);2 ?! x+ c+ ^8 u- t
  298.         }/ h* H% H' p6 c! k$ d- X2 z
  299.         UpdateFile3.clear();6 G0 W$ B8 b4 Z" R" A
  300.         UpdateList3.clear();
    ( x$ w% L) z  \1 m3 ^
  301.       }
      Z, j7 I, X% _8 z
  302.       if(UpdateFile2.size())
    ; R+ M% ?% ?/ \
  303.       {
    1 V4 Z% v2 u. }$ R7 Y8 h/ R
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% w# l1 Z8 O4 f' e! j
  305.         {7 N3 p% R2 V5 Y- F- B  L8 Y
  306.           file=(*p).second;
    ( L/ \2 `: g9 M3 A
  307.           free(file);4 y0 V: x7 N6 \6 S5 `1 @
  308.         }7 X/ g6 ]7 I$ F5 H
  309.         UpdateFile2.clear();
    4 G$ a. N: U% W
  310.         UpdateList2.clear();
    3 g0 R; ?0 v; \: I/ Q- @
  311.       }
    : A' |; K) p# k+ D4 ]6 M$ t) K
  312.       if(UpdateFile1.size())
    & ]& F) G# v( x  S2 \
  313.       {1 D: q: ?7 Y! l; K. g" H- {
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 b' U# J+ j/ P$ c
  315.         {' Q1 l/ R* w) n; C
  316.           file=(*p).second;/ D0 n/ p! Y$ Y) _0 L
  317.           free(file);
    % D* L9 k! W7 p3 H9 E* n' b
  318.         }! k5 Q$ S( U. c  u6 V" L
  319.         UpdateFile1.clear();
    ; f1 Y9 v" q* U
  320.         UpdateList1.clear();5 ^& a+ a, B$ E' t, j
  321.       }) s$ A' B  T/ X, ?; y! Y7 R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));- B5 s/ g# b- A: I0 L! j
  323.     }; w5 j, I4 j" p" j$ p* @' u, k1 v
  324.   }" M/ ~* k2 s) t) p) S* O) c4 v" a
  325.   return FALSE;: {, I$ c" Y: s4 m6 {) i
  326. }
    5 |8 D! f! U. ]& [' H
  327. 2 Y2 r) Y- H' O0 j4 ~3 V
  328. void CRevAppApp::ClearAll(void)
    3 k0 H' P0 m5 y* h6 [' D) y8 ]3 X
  329. {
    & L6 n6 m0 N' [9 T& S" _
  330.   LPUPDATEFILE file;
    % W7 v  D1 b5 u8 C) p3 c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) S, w+ ~' F  p- J4 f, x

  332. * L; h9 Z2 e4 s
  333.   if(UpdateLocal.size())
    # n% u5 S. S! F! g; Y
  334.   {" y4 Z7 s+ g6 V/ j4 j
  335.     UpdateLocal.clear();. o' C8 m2 f8 Q$ Q: u
  336.   }
      v8 B. }3 m2 k, k/ \
  337.   if(UpdateFile3.size())! u( K( y9 n$ [6 Z( s  i" ^6 m
  338.   {. \3 G3 ^  J; k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 c, R3 k' r" E  [* V! Y  O+ }
  340.     {
    & w& b) Y) o; ]) l
  341.       file=(*p).second;
    ) b7 {7 h* }1 s0 h4 |6 x
  342.       free(file);! s5 w! J; t' A
  343.     }
    7 A5 w. a6 M+ ~3 Y+ X- A6 N6 s
  344.     UpdateFile3.clear();7 E) X# G& D( u% t* L  f
  345.     UpdateList3.clear();% d: N7 i+ V' a# U5 g
  346.   }
    3 V7 g5 }* o( c: P0 B& Q
  347.   if(UpdateFile2.size())
    5 S( U. U$ F" u( J, h$ r
  348.   {' n; K1 B$ K% z: M/ n$ ~- r$ o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 H& b$ }6 o4 \6 x7 l* A
  350.     {
    ) O! t  ]! u/ D
  351.       file=(*p).second;: u4 O% Q( |4 `4 T
  352.       free(file);+ c  a6 L4 e$ k: |. L9 z
  353.     }5 K* s: V, U, T  G
  354.     UpdateFile2.clear();
    . n# F$ }/ R  C4 s1 n" M5 }
  355.     UpdateList2.clear();2 y: ~* \* F; _. g3 P' x0 w
  356.   }
    + U4 |0 M. R/ O; g+ I7 t: q
  357.   if(UpdateFile1.size())! G& X1 ]! E* H1 d2 ^: B; W
  358.   {
    * p6 O9 M9 M) D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 {8 y1 E# Q# O7 x, }* {4 j
  360.     {
    8 O! j  Z$ G. i# c2 @* I
  361.       file=(*p).second;; \% d$ l' r" C  u" p) P7 {+ Z
  362.       free(file);
    7 ]. K6 e/ `" X3 }- K
  363.     }
      j; D  ~) X. e+ a+ H
  364.     UpdateFile1.clear();, c0 E- c0 s8 ^  Q6 d. d  M% T
  365.     UpdateList1.clear();
    & C; X8 W( B* Y/ S$ ], X# `
  366.   }
    $ i0 h7 f+ ]" ?( V% A5 X7 n
  367. }  
    # x: r7 j" [7 f. ?5 i$ @. z
  368.   
    . U7 a0 b* R2 y7 t1 U0 e3 h
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 [, n7 M! R1 M; c+ e0 G, ^
  370. {" d9 K$ c0 G  ~' B2 a: P4 H5 Q$ W8 g; D
  371.   int c;9 Z' o$ _6 g+ V! }1 [
  372.   LPUPDATEFILE file1,file2;  v6 h( f7 k5 h6 I' B1 R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 O/ h$ W. ~: ^3 x& h- E
  374.   std::list<CString>::iterator l;/ I0 g* {1 _) t  r
  375. - V# V. i1 M! B: ^  p' a3 a9 g7 j; ?
  376.   UpdateLocal.clear();% B, Y4 O, h; n
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);, e1 q  O2 X& p& x# G
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    7 T8 _4 V0 J- W3 u
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' M, R7 b3 S/ L0 O( C+ k8 S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' L: H9 t  B, v/ k) l* @" o7 Z8 r
  381.   if(UpdateFile3.size())9 i( [0 X: F9 T7 K
  382.   {- L% Z0 {) N' k( f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)! I5 E" X2 n; e; ]% P; t
  384.     {
    ! J. N  W, w2 D5 ^6 J# T
  385.       file2=(LPUPDATEFILE)(*i).second;' J& g* V: \7 T6 g; z& r
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + E- G# p. D4 i
  387.       {
    0 F3 s8 \! c9 @3 `
  388.         file1=(LPUPDATEFILE)(*p).second;! {+ l: k" B- L, y' g5 o( u
  389.         file1->vers=file2->vers;
      H- E+ k( p* ~' N7 C; J# _; g* t
  390.       }
    , k2 W" O. @; ], M, y9 c- w
  391.       else
    ! i: h3 ~3 W& e* [
  392.       {9 w2 C" `" w3 B# U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" q, V0 f1 C1 w6 p8 L1 d8 ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    0 B7 `0 v3 J3 j0 D" U( h! b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- i- o3 v: z. F* d2 o; N
  396.       }9 W0 M$ i' S9 t$ ]$ K
  397.     }2 l7 T) n& K/ s% k
  398.   }
    , j& f6 [* H, k) y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' h/ c0 ^' }5 d0 S$ F5 h  S  C
  400.   {
    0 e  O' ]: I& n$ i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . I0 A) X6 P2 s1 g
  402.     {
    % p" P" `( C. }" V" {  [
  403.       file2=(LPUPDATEFILE)(*i).second;
    - b- M$ l& g) H+ c$ T% F+ Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * s4 x% U* C! B' w4 B% M( N
  405.       {
    : u7 x( D% W  \; ~, e  I0 N0 |
  406.         file1=(LPUPDATEFILE)(*p).second;
    / t: b; I0 ]- @3 I
  407.         if(file1->vers!=file2->vers)1 t' ?+ e4 y. v: [& T) ^
  408.         {
    9 w: H% K8 V% h8 v" M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 Y6 s- `4 U3 G- v$ v( `$ K
  410.           c++;
    % g0 W9 P! o$ g
  411.         }
    5 f8 b( i. c. }
  412.       }% c( M/ W; T4 G4 p5 \& Q3 j
  413.       else
    ! _& k5 I/ w9 g2 @
  414.       {7 k+ u/ }. r, m- M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 V, J2 K6 X) X  L
  416.         c++;
    4 t$ a; S6 Z  r+ P4 j5 d
  417.       }+ U2 J! R6 [+ `; \0 |0 |' g3 L3 Q
  418.     }
    ) Y3 g, l2 b; T5 g
  419.   }
    ( Z9 ]5 W- s9 V& }' B$ g- F; d, L
  420.   unlink(".\\DownLoad\\update.txt");8 @" n2 k) q9 Q0 j9 B+ o# c/ F
  421.   if(UpdateLocal.size()) return TRUE;  u: m" ^" f, D- g1 i1 b
  422.   else                   return FALSE;
    " ^8 f, h7 c! Q
  423. }
    ) w, V  r& R  w4 O9 g5 u

  424. " [/ H( V. l1 q# x# m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; I5 R8 ?& }4 f+ Q. w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 T. j, c' u3 g5 n' @
  427. 8 j; p7 d* a9 j! {8 _' j  F+ D

  428. 2 @2 T( j( i& }, N8 ?( ]- `5 W

  429. ' l; X* Y6 @: T1 D/ i
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
      T" Y* I7 U: x; e7 L
  431. {: }. V% S+ K' y; {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, v' t1 F' L  V* }2 A# Y3 z7 G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 h9 c9 @* K% @
  434.   {2 u3 M& x% |5 _* x
  435.     char szLanguage[50];4 p+ \9 \4 c3 b4 e
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 O2 _6 z: N9 q0 w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# w7 y# i: R8 Z: t) N; `
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 n; h9 w8 q7 {% F7 S
  439.     else                                   m_iLanguage=ENGLISH;
    ; Z* E, b8 w* @: B
  440.     char szRegister[100];! y1 m4 \4 K( G. C8 G6 {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( Q: `+ N5 d" Z7 C! Z
  442.     strRegsName=szRegister;9 X: d+ [- K# m/ b) w  Z. t$ q/ g
  443.     char szPatchURL[100];
    2 M- |/ l' b9 |
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * y5 o5 E8 f: e9 F6 x" D
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) R# f/ H; A. x, W' H
  446.   }0 z1 Q/ S2 q& K5 E8 }
  447.   else
    + ?; V# L; V& G5 X; ~2 G3 d
  448.   {* s" {" C" t5 Y1 L9 x! M7 F1 y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      P% Q8 y! o3 C* G0 y2 z
  450.     strRegsName=DEFAULT_REG_URL;! Y6 P5 P6 ?2 A- F6 |
  451.   }2 M: e/ H& a* {7 ^7 t4 w
  452.   if(GetFileAttributes("hosts.ini")!=-1)" G2 U* r' l5 Y5 b0 f
  453.   {& H% S% j2 V  J# n( o3 ^
  454.     char szIP[50];
    6 m- _- P4 W7 L* P) l4 K
  455.     char szDIR[300];
    5 Q8 k+ K8 G3 w& ^* H# c: c$ N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 j/ Q: \; S/ T. a; B$ i4 k8 s! s; x
  457.     {
    : Z" X2 T; K$ \7 ~) Y, _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : E$ s8 p& s4 t& n' b. T& j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 X2 {& [: u, }4 q7 d& O1 B( H
  460.       strHostName=szIP;8 b0 h6 v. T# c! [* P, T( f
  461.       strHostPath.Format("/%s",szDIR);
    ) M. X6 H! s3 L
  462.     }
    8 `% o& t/ A3 O- d! [2 u! `- o
  463.     else
    " w! P4 W; L2 g# Y
  464.     {
    7 B6 F* l8 g4 i
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)6 P; V* w; W0 \7 v
  466.       {9 O/ l! z3 s" `+ i+ Y! s% N
  467.         char szLanguage[50];
    : \7 m% n7 n; h4 f3 P( F( S* I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: Z# L! ^2 P8 h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 B+ r0 v9 N: [  R+ Q. T8 @
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' l0 b9 A+ Y( x- A9 Z. l
  471.         else                                   m_iLanguage=ENGLISH;
    : X) G2 D6 e$ `5 U1 q+ I. m- B
  472.         char szRegister[100];
    9 a- M$ d9 \% ]. p+ n: p# {( C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& h0 Q2 v% E' I' c
  474.         strRegsName=szRegister;& L4 I8 n% ~  X" I
  475.         char szPatchURL[100];
    2 |$ x- u, k1 S/ o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 Y6 b8 }. _6 C4 B. s
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& w, o1 l; r8 F/ X
  478.       }
    ' p, G9 Q" @7 _4 R
  479.       else3 ^. S. T0 x  ~9 |6 k
  480.       {+ c1 K# u4 \  \: B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) n. c& p5 a8 X  {8 c3 E% a2 a6 e5 N
  482.         strRegsName=DEFAULT_REG_URL;+ u+ T" E  d# M2 K
  483.       }
    3 _) W: {! w- I7 }  h& O
  484.     }  h; ]4 v2 D1 h2 v0 f: r  P
  485.   }
    : V8 y7 Z8 @/ [# S
  486.   return true;
    % ~3 K( J/ W$ ^
  487. }
    ( c5 x$ y" Z/ n
  488.   Z! ?+ Q9 w5 C
  489. #include ".\ZLib\unzip.h"
    % y: \) j  l; q$ c, }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    + c6 D. z9 C$ s8 A( k
  491. /////////////////////////////////////////////////////////////////////////////
    , }& F/ R8 Z3 N6 X
  492. // CRevAppApp initialization( I- V# @  c. c2 A# [: N4 u; V' r

  493. 8 f! ^4 a# _6 b6 `
  494. BOOL CRevAppApp::InitInstance()
    9 _7 |0 T8 X  `& j
  495. {
    # D) t' {* x( j
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( J& ]+ ^5 N/ g% i' r
  497. % G' d8 l. e6 |& X+ b
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # W8 L6 o3 n3 S, U# L8 Z3 M, u
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) b0 G2 o) d$ K8 L* f% V: {5 o) m
  500.   {
    3 |  p; P0 }: x0 z3 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");. F% z6 B: F( S+ f. @0 _+ G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);2 [8 f8 Y' y5 R0 v; ^# V9 A
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 N. A  f& p: J2 _" W
  504.     {
    / s$ d; I' s* O# c5 S1 Z
  505.       strcpy(szPath,szPathTarget);5 I& l1 b  j3 r6 q* Q9 O
  506.       SetCurrentDirectory(szPath);
    # _9 ?8 }  r" N" |7 P% o
  507.     }
    ) i3 t. K4 g  B; M& c
  508.   }
    - s( r8 n( D# d2 i8 Z1 N; V& z
  509. #ifdef _DEBUG
    & r( |! x0 U. d+ T  }$ d" i3 W' W% K
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 t: ?4 y. _8 z
  511. #else- p6 T; h/ [* `! K( ~9 p# p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 q) r& L+ k- M& P4 F
  513. #endif: }( m: [& f' W; E5 c
  514.   {
      R$ ~3 m8 `1 v% D& n
  515.     char tempFileName[MAX_PATH];
    " g% }/ p1 d% D
  516.     strcpy(tempFileName,szPathSource);4 b; e: P5 ]/ `. @! o8 k2 ~
  517.     tempFileName[strlen(szPathSource)-12]=0;* ~( W/ Z; {2 O$ U1 T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 {1 ]1 [6 S$ F6 Y" W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 H8 z. _8 S' [9 u. J2 b
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);5 @. m& s! T, u# D0 ?
  521.     return TRUE;
    ) i" a* w0 R! E% t0 E
  522.   }
    . U1 ?1 N" p# D, ]6 D7 `) w
  523.   // Nuke 0118: Delete run.exe
    ' U) S- X0 X( Z+ B" L% A8 e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 I1 ^. H0 ?/ `# z' ]! |5 }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) t' V$ ^; k* |; p
  526.   if(!ReadCfgFile("Config.ini"))& c3 ]0 @( l8 R4 O2 |" [, _
  527.   {# R6 y/ _) ?& a, C" s7 p5 f! K# t. U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    / [, O- T7 [- y# o" x! W% s+ F
  529.     return TRUE;) Z" z" o6 @' f9 `( `
  530.   }
    2 S& S3 z4 t# \( _# ~3 G# x2 k& M
  531.   HANDLE mutex;
    % k- I8 u- R* v& R! Y+ ^  J0 J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    & C/ ]- |/ ]) [( V
  533.   {* g/ Q7 o3 X  L6 o+ z; a) f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ; u6 W2 N) ?( ]& y5 c
  535.     {* n* z0 n6 }2 W1 H+ x
  536.       CloseHandle(mutex);6 Z$ n% W* T: ~& A7 i2 H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! W& U% x% B* T6 W8 @1 S; Z7 \5 W- j
  538.       return TRUE;
    . t( V& ?0 ]+ x: w* t& |1 e* l
  539.     }
      _9 O' P8 d1 E9 \  @- H
  540.   }  
    3 |9 I8 R" Q' l9 b
  541.   CloseHandle(mutex);) k, S8 s6 e# p4 q  s+ v) q
  542. # G: k9 e# `, Q7 P1 S6 P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 J  Q! |& U" d$ D/ }; E

  544. 7 |" o, O* b- Y
  545.         AfxEnableControlContainer();
    ) ~2 L7 {* M# [( G; T% x
  546. 3 f  L: c) U/ _7 G+ e: H' K
  547.   bCanUpdate=FALSE;4 f' |: w, V. W
  548.   dwStartUpSteps=1;
    % `. d2 }2 M. _! A4 n
  549.   dwProgramState=AP_NOTHING;
    7 H- p0 H7 Y9 J
  550. $ S: U1 N5 [. d" v2 v
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    / s3 O% _# M' p$ i' G3 S3 Y
  552. ; I8 l8 j8 o  o
  553.         // Standard initialization  F; z7 O( r& Z. D. F
  554.         // If you are not using these features and wish to reduce the size
      E* g3 e* Q- w: O0 V' d5 c' t
  555.         //  of your final executable, you should remove from the following5 I% z+ p2 [' y1 `7 d) B
  556.         //  the specific initialization routines you do not need.
    9 o9 G. B3 \; A. `8 V; W9 n

  557. + d5 m: J2 [9 S& {) `
  558. #ifdef _AFXDLL$ |/ g: N9 i* ^8 n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 z2 s, G: d3 @5 U# L2 r" [: f
  560. #else
    " V* f9 M$ F% Z- \5 s8 Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 v7 c, R/ v; X( R* M; w1 H
  562. #endif2 C3 k: l' i. s0 l! \3 m7 H
  563. + ^( `0 D% j7 N
  564.   dlg=new CRevAppDlg;( z2 v) Q, |2 W, \
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 A( Z( _8 g' |; b- x8 A
  566.   dlg->ShowWindow(SW_SHOWNORMAL);$ j* r3 w; b. s8 ]9 p4 |$ ~4 ~* Q
  567.   m_pMainWnd=dlg;% X3 T( {+ A. c4 W* D: I3 T
  568. / m( y& M$ D9 d
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( n. x4 {: }, K+ w
  570. " t6 T" W! c3 X9 m: H+ ?9 A
  571. //  GdiplusStartupInput gdiplusStartupInput;5 F8 b7 {8 m( ^  r# A5 W: {
  572. //  ULONG_PTR gdiplusToken;$ [$ L+ r4 u5 c  c# E
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' `4 W$ b" o+ d# j& s

  574. 0 l$ q, K3 i! `  ]2 r% ?9 E! O* B
  575. //        CRevAppDlg dlg;$ }8 R0 j0 k2 X! \. R6 Q1 h
  576. //        int nResponse = dlg.DoModal();
    2 m% h/ V4 C1 w. M
  577. //        if (nResponse == IDOK)
    * l' H: Z0 n7 ~9 s4 |
  578. //        {$ ~$ ]! A( F+ X: l+ V- S
  579. //                // TODO: Place code here to handle when the dialog is
    ' M' B& x' D; c7 w7 z
  580. //                //  dismissed with OK: E( y" P" P& |  E  M
  581. //        }% L/ [# V. t$ ?( W2 F* ]
  582. //        else if (nResponse == IDCANCEL)
    . o; C2 d( Y; z: d3 |3 J9 ?' ?
  583. //        {' K4 u- R6 `/ V
  584. //                // TODO: Place code here to handle when the dialog is+ G& J+ `- m- {3 h
  585. //                //  dismissed with Cancel
    9 G* l, H& y' }
  586. //        }
      g' L! O, F$ ^+ ]
  587.   V8 B2 g- q& B! w2 x* k1 B7 X
  588.         // Since the dialog has been closed, return FALSE so that we exit the+ N* k) Z9 q8 I0 v4 f
  589.         //  application, rather than start the application's message pump.
    / i0 P0 t% n, G- ]: U' n- W
  590.         return TRUE;8 ^9 }" l5 \' c) O9 v3 Z6 ^; Q! y+ K
  591. }
    6 y/ A$ D% U  O. D2 i# H

  592. 9 d& T3 B  L6 H& Y  v( o$ x
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' u4 {0 X9 H* W
  594. {
    ; H+ S! i7 Z  d6 a, `
  595.   int i;
    1 S& X: N, L4 x2 Q) N& }" z
  596.   char *szRet;
    3 a- {+ [" t. q7 t6 M! O
  597. : Q9 r" T. D0 ]4 x9 W
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ; Z! ^  [/ k2 ^
  599.   if(sztoken)3 ?5 ?: ~" W/ l+ k: b8 \
  600.   {( k, X! T6 Z) l0 u) M
  601.     szRet=&sztoken[itoken];9 }( C6 c3 q( Z0 f4 s
  602.     while(sztoken[itoken]). P3 g: S, U& e0 j, i
  603.     {
    2 Z: e# a$ `5 {2 `8 E
  604.       for(i=0;i<(int)strlen(token);i++)
    3 Q) E/ E1 a4 N- r
  605.       {
    " E4 Y& U7 {/ ^0 r2 C/ M" s: F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 C+ l1 B4 x( _7 H$ z7 G
  607.         {
    7 F; K+ C; ~# F. q+ P) q
  608.           sztoken[itoken++]=0;5 ?3 p# s2 c/ H; F, z
  609.           sztoken[itoken++]=0;
    2 Z  K- E9 t$ o- x, ?. ^& m
  610.           return szRet;* X8 J8 N! I% W% w/ @+ d0 s8 @
  611.         }2 `& u& \9 c& A; C$ G2 V0 g) k" u
  612.       }3 H+ L9 T5 [" ^! U" @$ m; b# p+ c
  613.       itoken++;( X3 V* q. k, H
  614.     }
    " g. I1 d( X! X3 k7 p4 M, E% v
  615.   }
    6 ~+ c  A2 @, E$ D  m0 n
  616.   return NULL;
    / i- ?! R+ c- K3 g
  617. }
    4 {3 L* U2 ^  g" ?. p, p* g9 l

  618. : o& h- a+ v7 L
  619. void ProcessProc(long Total,long Current)! x) a- M( J4 a( o
  620. {& h' P9 D3 y. P- P; e
  621.         MSG msg;
    . P# G5 v, C  d( [
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 H- Z" e+ f' Y7 {3 m1 F7 J9 t- }
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # ?0 U* `/ G3 x/ i. [
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    5 `. e" D, J% o+ ~# m- d
  625.         {
    # @8 ]3 T3 Z- ?  p1 @
  626.                 if(!GetMessage(&msg,NULL,0,0))
    4 h$ Y/ [# C) O8 o: v
  627.                 {
    + Y: }- G: q- o6 _9 h$ p  G0 U, Y
  628.                         return;4 C/ S; B/ h# s( R1 m: [
  629.                 }8 o7 x$ @  ?4 f  i3 k  |9 z
  630.                 TranslateMessage(&msg);0 I  S* E$ K7 f/ e! B
  631.                 DispatchMessage(&msg);
    4 f+ I& y. _6 }# V+ N2 ]% P- q
  632.         }        ( i' R4 h/ J/ n
  633. }  K2 u" j! g7 H( Z- l
  634. ( _" T/ N9 n9 L# Q3 `! t
  635. BOOL bFirstChar=TRUE;
    % ^* L! J' i# W/ x

  636. ! ^. T, a! ]' x4 d3 U0 s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 r6 f% r; R' V3 p/ `% _
  638. {" C8 O5 p& B" y* ]
  639.         // TODO: Add your specialized code here and/or call the base class& j; V9 L* u) S3 U5 h: j- @
  640.   switch(dwProgramState)3 x. `0 F& P# `) m8 T
  641.   {! D" I3 H; z9 a# z
  642.   case AP_NOTHING:
    5 _; x! j- t8 D1 {- P7 N/ p( q
  643.     switch(dwStartUpSteps)
    " |8 @/ W; }; n. h3 E1 z# a
  644.     {. w& s, A8 A  L! Y  R
  645.     case 1:8 A  E% A. o* p# o7 J0 s
  646.       {! v" D+ N! d+ a
  647.         int i;
    + R7 h+ S' v2 D
  648.         CDC *pCDC=dlg->GetDC();
    ' _' ^9 s* ^+ f/ b' ~9 I3 F
  649.         HDC hdcwnd=pCDC->m_hDC;4 G4 d. X! A2 n  I: u% {6 C
  650. //        Graphics graphics(hdcwnd);6 E; M+ ~' z% x" b
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( M- l% B4 _8 r3 r" L  V- p: A
  652. //        INT iWidth=bitmap.GetWidth();
    9 `9 ^) u% A# g1 A9 y( x
  653. //        INT iHeight=bitmap.GetHeight();& y# L7 e) E3 Y" `( @
  654. //        Color color,colorTemp;
    6 n1 e4 G% X0 d& R
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 h: l1 j$ ]0 M
  656. //        {) [5 ^) B5 M, d
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 L0 @; w: F% P0 L( W' L
  658. //          {0 W, i! T+ w% v( R  p, w: N' y! }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 ?; w5 ^: {) p% k' _
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 V. C$ j: Z' L( H; I, Q# U9 @
  661. //              (BYTE)(255*iColumn/iWidth),
    2 e4 X# o, b$ k4 {
  662. //              color.GetRed(),8 |/ O; H4 {; s! o* Q
  663. //              color.GetGreen(),
    8 l  A; T7 \' D0 n- k! ~- s: M
  664. //              color.GetBlue()));
    ! Z5 b. H6 ^' M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; P  R' `' l- v. F& g( Z- ]5 s  N
  666. //          }
    + u, L- N, k5 t- G$ n7 b# R
  667. //        }
    3 z. f! `( y9 z+ i
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
      ^: }4 y) R5 R, S5 c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ [  e% O0 q1 U$ K
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ( n  d, U' S4 e0 N" t8 ]
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( p  b, D( y& r
  672.         for(i=0;i<240;i+=8)
    ; `7 d) q8 }1 h" E+ R1 Y
  673.         {
    ' t( @) h" H" r# n6 E# R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * j, G3 \0 K  ^8 o, D) W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / @) C  {, Y. h0 \3 e
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 Y7 {' Z+ X; [! t  n
  677.           Sleep(33);
    - ^, O. m% {. q* o  y8 S
  678.         }
    ) p8 r) a4 `/ w4 I2 [) }: g/ Y
  679.         Sleep(1000);5 K/ O- g/ `: h% h0 Y
  680.         for(i=240;i>0;i-=8)
    3 E: Y. \. [* D
  681.         {
    - `- r9 {9 i' }3 e" I# W* b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  m; b; N8 j+ |7 V2 e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; T3 I+ o, B3 O  V8 z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( `) a8 |% B. X' u4 h6 m1 v
  685.           Sleep(33);: P. w: ?3 F# [
  686.         }
    : _/ |! a2 |8 ~
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) p  T+ H% B1 K: A( L, v
  688.         dlg->ReleaseDC(pCDC);
    * [6 E4 W0 D$ m% o
  689.         DeleteDC(hdctar);. J/ C; s. T& Y" t. H# \, q
  690.         DeleteDC(hdcsrc);
    2 q9 t5 M7 G# V& U; U
  691.         DeleteDC(hdcorg);
    # Q' u+ j6 \2 a0 @7 x. |' ?9 e
  692.       }' p. F; ?$ W7 y; B* m3 P0 @+ ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) @2 z9 m& N4 [. _  ?0 i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    8 G, O& a5 ?! _- w# W+ ^$ c9 }& U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" r3 O- M. t" b! _( i; g" h- i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( |- V0 P8 {- P- m, L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( S" o  b1 K9 |0 g' e
  698.       if(!Dn.Connected())! J, a- h# A; p7 a- f1 I
  699.       {- E6 ~; n3 L# l5 Q
  700.         dwTotalFiles=1;! g3 U) v1 v& n9 o
  701.         dwDownLoaded=0;! D9 `6 X, h/ W' d5 g+ V3 v6 C
  702.         bSilentStep=TRUE;+ ~5 `1 D& z9 `. h
  703.         bCompressed=FALSE;
    2 W0 L" _' D& Z% Q+ S' s# S! O; b
  704.         strExtLocal.Empty();4 k! A+ V! J) I  x2 w  N4 b
  705.         strFullName="readme.txt";5 o5 C) _* A8 y! v/ H
  706.         dwProgramState=AP_CONNECT;
    8 g7 f8 J! A, q  f, [2 d" x7 e
  707.       }( n6 J2 s6 \. R* r$ F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    3 i6 G* Y( D- ?% p  C+ b' P
  709.       dwStartUpSteps=2;, |- z/ ~+ P; @3 C2 V
  710.       break;
    . e' f, @* u$ E- N- k7 j) {
  711.     case 2:
    : E, s5 i1 X) B- ^- m5 R0 s3 c+ i& k0 @
  712.       {1 C! q4 w( Q2 ~% J( C! R0 R% O5 c$ h
  713.         int iEOF;
    ; a* Q7 K% W+ M5 E
  714.         FILE *fp;
    & H+ p+ ?3 L1 `* Q
  715.         char szString[512];* t2 Z! l" @# U; F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 z$ x, }' A1 ?
  717.         if(fp)7 z; f9 G% g& ?% `7 w; \' u' k" C7 a" n
  718.         {
    + }2 B2 |5 g- I. ^8 k4 X5 [6 Y
  719.           do# g5 E2 ^& ^( w! ?* ~  m
  720.           {2 Z+ v( P* |4 U; T' W
  721.             iEOF=fscanf(fp,"%s",szString);
    $ z& U$ Q+ ~& K* e6 f: K
  722.             if(strlen(szString))( e( K' D) X6 O, T. s6 `
  723.             {/ i+ ~- P2 l6 t2 \# p, P
  724.               if(bFirstChar)
    . ]( ?! c  a, J5 g8 A# k; y" X( q4 }- }
  725.               {/ J  G* W  q* h4 i& w
  726.                 bFirstChar=FALSE;7 W: _- g6 H( h8 O( R4 A
  727.                 bConnectIsBig5=FALSE;
    1 w1 n- ^  ?4 Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;' ~$ m4 X% O+ Y' [# `# Y
  729.               }
    + V0 U  k# r3 q! i2 E8 L9 T: \5 F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));7 W0 i' \4 Y' a
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));5 G; O7 w+ N2 l# b' t) [
  732.               dlg->m_ListText.AddString(szString);
    6 e: m2 a& \0 W9 m* `
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / V& q/ d$ I' u2 [
  734.               *szString=0;1 B) P9 ]- ~% t1 P1 F3 e1 ^
  735.             }! q/ N+ C, H! g" K
  736.           } while(iEOF!=EOF);
      g1 Z; i0 e. r% z/ X4 ?. P  W/ w
  737.           fclose(fp);
    + ^1 q: C* _+ {$ u
  738.           unlink(".\\DownLoad\\readme.txt");' T. ]; W7 n9 R) w/ P' Y
  739.           dwStartUpSteps=3;
    3 Q. Z! H( L& i9 J: S
  740.         }
    2 A3 V  S! g( ]. U  Z+ F  A" ~
  741.       }
    $ d2 u' T8 [  o  E) x
  742.       break;
    % T% Y( S' C2 b2 S6 A
  743.     case 3:  {3 X& K6 f/ a5 ]/ B8 g1 F; [
  744.       if(!Dn.Connected())4 S' I3 K$ x1 [( \3 |
  745.       {" C3 g6 E$ x- B
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / Z0 q$ m. c" }/ D3 |$ {
  747.         dwTotalFiles=1;
    " W. F1 v/ p4 e# X1 _
  748.         dwDownLoaded=0;4 b2 \7 W, C9 G( W- y* K' X
  749.         bSilentStep=TRUE;- R+ o5 l! F$ j1 W
  750.         bCompressed=FALSE;. k# C9 |# C% J# \; ?1 I) G
  751.         strExtLocal.Empty();/ ~  }: X6 t+ T
  752.         strFullName="checkversion.txt";& e  M6 O; O8 ?# I
  753.         dwProgramState=AP_CONNECT;
    ' I/ k, `/ e& s+ x6 \$ \* A1 \
  754.       }
    5 G$ `* E. x# o; a) d
  755.       dwStartUpSteps=4;: H$ e+ V& a' m4 Y  Q7 N* W8 S! b. b
  756.       break;1 I3 h! u/ |# S6 }. B/ E
  757.     case 4:$ i# H* J2 z. ^: U6 ?
  758.       {; ^) W4 D3 y' l5 l# F
  759.         FILE *fp;
    . N( \: h9 h$ l6 o6 e8 W4 t7 M
  760.         char szString1[128];) I+ D, R% E" F* x/ H$ O# N) s
  761.         char szString2[128];3 D5 @# m9 x# q+ a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ N  x1 c8 Z+ c/ [" T
  763.         if(fp)
    1 O" R, e8 ]2 @4 j" p
  764.         {+ c0 I* L. T" p
  765.           fscanf(fp,"%s",szString1);. [+ x1 J( ?% D3 E
  766.           fclose(fp);
    5 ]5 D" D' U! j; b4 h: u% r+ F/ ]4 R
  767.           fCheckVersion=atof(szString1);
    5 D9 A1 N3 N4 Z; B/ H' L# N: y% Z
  768.           fp=fopen(".\\checkversion.dat","r");
    ) s# W* b+ h' b# u' ~- P3 V
  769.           if(fp)0 y# U# c3 ^) _6 j3 h& W# l
  770.           {
    , h4 q- y' }: }# @2 I
  771.             fscanf(fp,"%s",szString2);
    % h. d$ E/ F; w# v* o& j9 V0 t
  772.             fclose(fp);& `1 q9 g8 q: r  R
  773.             if(atof(szString1)!=atof(szString2))
    ! _  W% b, f; A. p; V
  774.             {
    $ {+ ?# m, |! b% u# E3 p8 z
  775.               if(!Dn.Connected())
    2 |& a3 C* _+ f* X+ W$ Z
  776.               {
    1 l; T* n  I) t4 Z
  777.                 bFirstUpdate=TRUE;* Z) g0 p+ u8 ^! J- S# s% M
  778.                 dwTotalFiles=1;0 B( ~5 L! ^9 q2 U
  779.                 dwDownLoaded=0;
    : K# P8 [5 e. R/ n0 n8 k! A
  780.                 bSilentStep=FALSE;  ?. W7 i+ b* \. V
  781.                 bCompressed=TRUE;
    * d  t+ F! k$ a& r9 F
  782.                 strExtLocal=".\\DownLoad\";
    6 c/ }! z$ j) p, A
  783.                 strFullName="update.txt";2 Z" t4 O' t9 @- K
  784.                 dwProgramState=AP_CONNECT;
    2 J- b  ?2 h5 j8 O5 T# [; Z7 [7 U
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) Z4 v& a" z6 j0 F- k" Y0 N3 z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 {$ O+ C% L7 H" e
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");* i" |; S2 t. w
  788. + a% m3 ?4 V8 Y/ w& y. l
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# ^0 a; M+ F4 r1 q1 ?( o
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 q: o, s8 \+ F- k2 Z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 n7 F3 g9 p2 ], w: j3 v
  792.                 {
    % `5 k! d6 _6 A8 c7 R7 S
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 @* O/ }2 N5 M$ u, {
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");# `* p4 l% V' z5 X2 m4 ^* {7 ~) f
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    2 y, u4 v& l; @" o6 @% m' j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ \$ B' R' ?9 i$ `' d# e# A

  797. : E" Z' {0 i( H; p/ l
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # h- ]2 [8 r4 [$ U. V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # E3 B$ K9 v0 j% ?# c
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; ~6 a! m* F" ^/ }: r1 u0 m
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 f2 N" Y: W2 x
  802.                 }" C4 Y" I* N3 M' b  b
  803.                 dwStartUpSteps=5;/ u8 V' n' p5 {# Y5 G, ^
  804.               }
    # t# U( f  d: M, @* H+ m- a
  805.             }+ K. ^" `% D2 W* G, B7 ?
  806.             else. ~/ s1 V( W1 a$ z$ P- B2 S
  807.             {
      W' {+ m$ _7 z0 C9 \& F' q, a( |
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 B: {4 {- c2 T8 D2 m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! I( c/ I8 a- K; q0 [/ A- R  |
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. O! \$ l& Q  H2 [. |5 Y, b
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");! z! p+ W3 n% {/ d" J* ~

  812. 8 O; i4 ^6 N2 e8 m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! I8 D1 U% E3 _+ h; Q2 h
  814.               dwStartUpSteps=99;
      Z' ^$ X% t) L
  815.               bFinishUpdated=TRUE;
    7 g4 l$ l% d: l3 I" n" ^  X
  816.               bCanUpdate=TRUE;- A6 n) c  b1 r& m. J* h9 |
  817.             }) F4 I* c- j% d% o$ }* D
  818.           }. M! @% f# _; B* d6 o
  819.           else
    * ~) l( S6 w0 b" g
  820.           {
    * v! l2 f, R% A+ r4 ^$ D
  821.             if(!Dn.Connected())5 i  q" a/ N  E, R
  822.             {  D: [! i% w4 [" f) V
  823.               bFirstUpdate=TRUE;6 n2 t) m; F7 P1 ~* o- S
  824.               dwTotalFiles=1;
    : @4 {+ u0 N" a) z% _* D
  825.               dwDownLoaded=0;# ?# o8 z0 i. p  C& O
  826.               bSilentStep=FALSE;0 h- _& b/ V1 ~. H/ I- {# w# l
  827.               bCompressed=TRUE;
    $ D. U- d* ^6 y  w2 A3 H5 v
  828.               strExtLocal=".\\DownLoad\";7 \* T; Z. ^: _9 _) D- |$ F; T
  829.               strFullName="update.txt";. l; E  V# r& K! [/ m( ^; N
  830.               dwProgramState=AP_CONNECT;
    & Z, E' N8 q# Z/ T
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) L' _! m. @# Q7 ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . o+ N# a9 n$ z6 p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 t: m- k' N+ r
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! z9 H7 x) U. d( y  c
  835.               unlink(".\\DownLoad\\checkversion.txt");# X+ q# h$ z4 [2 `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ; e: F; U& p" q; C
  837.               {( ]0 Y5 B+ A! E% o# K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ( Q& ?- W) k$ i1 O  b% k
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ C  Y" s4 D* |& o$ K, M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");8 Z& h+ }" ], t9 o, P/ `
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( r: K9 F% c$ C* H, z# z: V
  842.                 ( e* m5 A! u7 f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! _0 r& N  P  h7 \: e1 O
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % U) ^: G- t% P' _" U, e/ L) t
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");( m/ w; u, ?+ a# r# b+ L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " a9 g: U) a/ ~% s
  847.               }7 a; d5 o3 s7 [+ Q
  848.               dwStartUpSteps=5;9 C4 a2 Q! }4 S
  849.             }8 ]6 D  j; S* U3 X) V
  850.           }
    1 `9 V  S+ O3 C
  851.         }
    3 [3 J' W7 r8 ]; R# ]
  852.         else0 t8 q4 }1 H# `: ^7 J/ T
  853.         {
    + e  }# M8 t8 d- H. W
  854.           dwStartUpSteps=3;  K) V7 ^+ k8 |9 t: Z% ~7 `
  855.         }4 h. l: y1 @4 \- y  B" B; I5 c
  856.       }! U" i& Y0 F4 D  v5 p  a9 V; B
  857.       break;
    7 ^8 N3 c" Z( A" b
  858.     case 5:( |% x7 k8 ~* e0 U) I
  859.       {
    # b  I1 x) u2 P  l6 Y' Q  L3 b4 e
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ; p) A: Q$ D7 v9 I7 |3 E0 P3 @
  861.         {
    5 D4 o! s; _4 V- _+ D1 m( t" `
  862.           int opt_overwrite=1;
    ( X, e* M: y& A+ E6 v# Q8 T
  863.           int opt_do_extract_withoutpath=0;
    1 i" `9 V- c; F' A4 u) }
  864.           unzFile uf=NULL;
    * }, s, |0 |0 ?5 D; w* I  c- u

  865. ! a! f* i3 C+ j1 b  u, o0 [
  866.           uf=unzOpen("Wsa.zip");
    & r$ `) y# s9 M' C0 o
  867.           if(uf); o, O  @, m! v& f  ]
  868.           {9 X# s9 l$ @, r
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: e# b7 @' S9 w, B. w$ A
  870.             unzClose(uf);. C' Q6 I8 G' ?( [( }0 T. u- }
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    8 J" P& ~5 B5 d, V7 M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , P, ]+ H0 H( A
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 d. n4 F* I" m- U/ [6 |
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' @: J$ K2 w& V
  875.           }
    $ p  h* n% I( @6 H# D) h! K+ e; w
  876.           DeleteFile("Wsa.zip" );
    ; K1 b+ Z1 D: T$ }: ~
  877.         }
    ' \- ?; Q( \5 x3 s- V" O" f& Z
  878. % Z0 T, W- |$ ]" A
  879.         if(CheckLocalVersion())/ k) d  k! S  [
  880.         {
    " ]/ g( W6 L& H
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    2 o9 T- f: |: c. @: l
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    " D  j8 M: D7 y# [9 i
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");! x8 V. Z& |: k3 G& {
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- S: ]9 N4 Y5 D8 D4 Z: A" p1 x, _
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ) X  Y) X; |1 K" r
  886.           dwStartUpSteps=99;
    ( X6 c3 \3 n# {, [" V/ `
  887.         }
    6 k1 e: q# _- Y2 S
  888.         else: y. [2 Y+ w0 ]  A, k) t. g, m
  889.         {' }. v% P+ d5 X2 d' l! f1 R
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 l4 x4 J! @8 O6 y' h
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 Z0 N- a2 l4 e# K% Y& S0 S9 W
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    & W! g0 m+ z! c4 e, o6 S# c; g# n

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

- B3 ]4 {7 |; B3 W0 c/ _

評分

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