CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
6 H. O* e( g/ Y+ j- o, L
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 w, ~# V* ^  s* P1 j4 t4 A
  2. //
    # q+ L' s" r3 f0 o1 I
  3. # m) w1 w. M1 T0 q7 g& D
  4. #include "stdafx.h"
    : @( n; M/ M0 I- z6 A; m  F

  5. 2 @6 ?, I: V8 L  ]9 I
  6. //#define UNICODE
    3 _" D5 g2 i* n. g
  7. //#include <gdiplus.h>
    2 H3 I+ z1 U# j0 j
  8. //using namespace Gdiplus;. ?( x6 V/ o4 Y- k9 T* B2 ]
  9. * |( t' T0 r: K. S3 w4 |
  10. #include "RevApp.h"/ f0 k6 T8 H6 ^8 ~/ ^+ s+ S
  11. #include "RevAppDlg.h"
    " o" {2 a7 H) z
  12. # X* ?( m- I; w) ?" K( s
  13. #pragma warning(disable:4786)* m5 Z: _7 Y8 n& f7 x/ y: w" B1 I
  14. #include <map>' t) {3 X% ~8 g: u
  15. #include <list>
    & k& S$ c1 C2 j, A
  16. #include <direct.h>& j1 N* x4 i* C- g

  17. - H0 l% `  W* E$ |2 Y; u. |% c' n( t
  18. #ifdef _DEBUG+ p0 N5 G! E0 |
  19. #define new DEBUG_NEW! t. X2 L) M/ U' A$ P1 \' O: _
  20. #undef THIS_FILE) r1 e# D) B! m) [
  21. static char THIS_FILE[] = __FILE__;
    2 P0 d% B4 l* |( o) F1 S" K
  22. #endif
    , L9 G8 _& d, x& k# a
  23. #include "SkinResDef.h"
    % \. l( N; Z( _/ z* ^2 m
  24. #include "ChangeBG.h"2 [' @* z. Y( _! N, m, n4 c, j
  25. #include "AFXINET.H"
    6 |& r; i$ }6 p

  26. $ r4 c# U# [& z  t
  27. #define TRADITIONAL_CHINESE 01 ^3 p* k% |+ w% E
  28. #define SIMPLIFY_CHINESE 1
    " l7 g, Z' x! N/ e8 Q! M- F& i# i
  29. #define ENGLISH 2
    : \* Z, C) c3 Y
  30. int m_iLanguage = ENGLISH;4 K! ^' m6 W2 H/ J% ~4 C9 d2 k
  31. /////////////////////////////////////////////////////////////////////////////# x3 A- G2 j+ Y
  32. // CRevAppApp% M$ X, A# |- [& j+ f
  33. & M  z; v9 s4 M7 m- i# {! Z* K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " c7 C7 p& c+ x* h
  35.         //{{AFX_MSG_MAP(CRevAppApp)- m" M7 i* h  f% Q0 {
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 d/ P/ [5 z9 a- ~8 B  J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( g: D' r5 A' l2 n. J4 s- Z
  38.         //}}AFX_MSG
    * ^! {2 w: F8 S
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    7 _& d% D. N( p0 K
  40. END_MESSAGE_MAP()3 ]& h2 C$ G- y

  41. $ K  D, F* o6 Y# k/ c
  42. /////////////////////////////////////////////////////////////////////////////
    " m8 T' M' ~* o1 c; M% K5 }1 O
  43. // CRevAppApp construction
    ) m) L) K: w4 a, n$ i! V
  44. % d8 c) f/ t# S0 U! H. b
  45. CRevAppApp::CRevAppApp()- }) E$ b% \+ S% X4 f8 m
  46. {  T& t  K1 r* }+ |
  47.         // TODO: add construction code here,
    ; R# `6 [$ V' X. t4 X7 [& W3 w
  48.         // Place all significant initialization in InitInstance
    0 W) @8 {2 y: }
  49.   bDisplayIsBig5=FALSE;
    8 r3 S$ [) q0 y4 _) O* S
  50.   bRestartUpdater=FALSE;
    + ]# g! V. d. K8 H# G* B0 b- L4 N
  51.   bFinishUpdated=FALSE;: I5 |! d, {0 M  `, i
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; V$ U& ^' X/ o4 U3 j! \
  53.   InitChangeDataBig52GBKS();
    + m! o; U+ D! t6 U" h  n
  54.   InitChangeDataGBKS2Big5();% H5 b/ d  V3 A
  55.         //
    % S) C8 K0 g7 C* U# \  k! z- o* _, Z
  56.         bClickRunExe = FALSE;& o/ t7 r, C9 e/ a+ g- j! M+ }8 z' |
  57.         //
    3 m  l! o9 R# E/ `0 ^
  58. }, @# `6 F) F. w' j) ~7 L3 e0 ^7 D" m

  59. , h. O  x$ Q9 n
  60. CRevAppApp::~CRevAppApp()* t/ [" n+ |3 b+ r! q/ m3 R
  61. {
    8 m. V/ s1 x- J& Z
  62.         // TODO: add construction code here,$ b8 A- E7 [) r  m9 f5 {% r3 P0 B
  63.         // Place all significant initialization in InitInstance
    5 |: ]$ j' \/ u  L
  64.   EndChangeData();
    ; a2 ~2 Y7 D+ p( j
  65. }
    ) S4 ?7 `8 Q5 @) S

  66. 1 s& P- O1 J% T3 {
  67. /////////////////////////////////////////////////////////////////////////////5 z; r. o' F: J  n. S4 ?
  68. // The one and only CRevAppApp object: C% o$ A+ \4 [& L' U& _! c( T
  69. ( P; k- g$ c% a# @' ?" |
  70. CRevAppApp theApp;0 f5 U  E: p! P$ ?$ E- p' c

  71. 4 j2 n. p1 P! e$ v4 I
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 Y  L2 \" }8 [' `3 D5 C
  73. {* X8 r) ~! }5 x7 |0 X) ^8 E
  74.   int iEOF=0;3 D: l0 B: f$ F% J# l( f
  75.   char szTempName[MAX_PATH];8 j  X/ N3 l. S
  76.   *szFileName=0;
    . G- ]7 _2 _8 \. N, J; T
  77.   iEOF=fscanf(fp,"%s",szTempName);
    . \) G9 k4 r* l" ~9 k9 s, X! q
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')7 t  Q9 E) W/ l1 w. i7 K
  79.   {
    ; U. h/ \2 n0 ?: k% O4 P# }
  80.     strcpy(szFileName,&szTempName[1]);4 U8 u5 e0 ~+ W: L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    3 b: t) `1 {! t# f! w
  82.     {3 h  f% {- F: i. }; R
  83.       iEOF=fscanf(fp,"%s",szTempName);! w: M) \$ k+ g" p  ]; ]# y
  84.       strcat(szFileName," ");
    * j$ o* j& K/ l
  85.       strcat(szFileName,szTempName);
    0 s+ R* M, z' y
  86.     }+ D) U6 f% ], a$ B) C% G
  87.     if(strlen(szFileName)>=1)
    : b+ y$ ~( M  ?) @+ |& t0 `+ ?1 I
  88.     {
    " B. D/ i" C& B5 j
  89.       szFileName[strlen(szFileName)-1]=0;
    , b5 E: D: R! X) ?* P6 h
  90.     }# T" ?+ T2 q+ b
  91.   }: g% D, l) }# ?% b" z2 j- k; ~& v& L
  92.   return szFileName;8 x$ y+ ^7 J1 O- @3 Q
  93. }& O  M0 W/ a; Q5 ]9 m

  94. , k, v* V) y5 o0 B3 k  H
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 O# p/ W% u  U% x& e6 Y1 V6 N) P- Y9 `3 K
  96. {/ m  E. U* G0 H. i4 H
  97.   FILE *fp;
    * M" V: H# k" I0 E) l4 F1 p/ Y$ v
  98.   char *key=NULL;; y  t4 ^8 _6 R8 W0 ^: A
  99.   char version[MAX_PATH];
    & n/ D1 c  u9 }4 t3 |  F
  100.   LPUPDATEFILE file,olds;  f* J7 @5 t6 w& i* l! [
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 ~3 v( M2 ^3 c( E1 E: _

  102. $ [7 S+ }, N( W3 f& Q
  103.   UpdateList.clear();
    3 V' ?! H$ f/ v& r
  104.   UpdateFile.clear();
    4 F- w# T- }( W$ s# `7 C% e+ O
  105.   if(GetFileAttributes(filename)==-1) return false;
    3 V9 R  [) |$ h1 Z9 Y% O
  106.   if(!(fp=fopen(filename,"r"))) return false;: ?0 y# q" e& ^9 |! r
  107.   fscanf(fp,"%s",version);
    " \! s3 x& P8 V
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# b1 d  q$ j" v- R1 ^5 m) h4 C
  109.   while(fscanf(fp,"%s",version)!=EOF)5 M8 y$ K6 J/ @$ Q4 s( a
  110.   {3 \5 V% q& x0 Y* d
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ ^( G9 R- f. ^- _8 P0 t
  112.     fscanf(fp,"%s",file->path);
    0 v; H+ N- b6 q* v$ E% I* H! X
  113.     ReadFileNames(fp,file->file);0 U6 Y9 g( i# `5 T  J, }+ T* y% {4 p0 Z
  114.     strcpy(file->full,".");: R# u. A* ?& Q
  115.     strcat(file->full,file->path);
    7 b0 Y  w% ^! n7 R$ |& s
  116.     strcat(file->full,file->file);! }' E  ~7 J$ N- R. n
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / n; y7 g, w# H* Y( f, A
  118.     {
    # h2 T7 @' S. [
  119.       file->vers=(float)atof(version);
    . y- X8 l5 T' z% {% L7 s+ }! [; A
  120.       UpdateList.push_back(file->full);+ }5 Q3 L- @7 L1 C; F, l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! |, X! j" ]% E' ^
  122.     }
    % i3 w7 N# b) P, v
  123.     else+ H7 T% y$ Z8 j2 K
  124.     {
    % R" W9 g/ D) o/ s
  125.       olds=(*p).second;) ~! e  w8 U: S9 R8 K
  126.       if(olds->vers<(float)atof(version)), h( w# n' R/ `: Y4 p& G! `3 F
  127.       {5 V' z. R. G* \8 g
  128.         olds->vers=(float)atof(version);
    ! h; O. J4 ~( a
  129.       }0 L) ?" R, I7 H' g" F% A) ~
  130.       free(file);
    + X6 D* u, H+ X( M
  131.     }
    ! @8 E! f) ?+ a+ K0 v5 N6 ~
  132.   }1 t# T; S& Q" A/ D( v! ?. e
  133.   fclose(fp);
    : T; P8 v, b0 K/ t; O) j# y
  134.   return true;% a6 G% D2 O5 @. S/ t7 f
  135. }
    # s. g3 V% r6 B/ A0 j! L

  136. # [# \2 `$ t+ N) ~
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 u- `% Q, C; E
  138. {8 l% M- @5 M. d9 X& `
  139.   TCHAR  szFull[MAX_PATH];
      }' m! z; w4 M  n
  140.   TCHAR *token,*inter;
    2 t  V- y( t( V! |1 q" _2 [
  141.   *szPath=0;2 P! n5 D( `8 x: d
  142.   strcpy(szFull,szFullPath);
    ) J  r3 z- O" h, {* t# K
  143.   token=strtok(szFull,"\\/");7 U9 ?; _# h4 v$ k
  144.   inter=token;
    % x% x% E6 |! ^( p
  145.   while(token=strtok(NULL,"\\/"))9 ]# z2 N2 R  n/ Q" l; X0 [
  146.   {7 R$ U8 H) L( G. j7 ^
  147.     strcat(szPath,inter);
    . |, L6 p4 s) E# k, U0 f
  148.     strcat(szPath,"\");# V6 y5 F+ m6 k0 z
  149.     inter=token;" e1 n0 B+ N% @7 X7 ^
  150.   }
    # p9 m5 J; j; z
  151.   return strlen(szPath);
    8 V( l2 @7 D5 V) M9 b
  152. }
    ( z# P8 i( ^# H$ n' r# l3 ^

  153. * h# j' v# R3 ~) `1 \. u8 z3 b) E" N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 u" l; ~; I2 }$ P
  155. {
    : O" t0 V/ t& u5 p) ], [
  156.   DWORD attrib=GetFileAttributes(Target);
    . `) L' @9 @, G+ Y9 ?# y
  157.   if(attrib!=-1)
    + z7 U6 w; s- J; |/ g- m
  158.   {
    ' k1 J$ ~7 h* r& [* y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); S0 ?" I8 s. @/ y# k; ]
  160.     {) r, h3 L4 j. \5 e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 u" t0 D4 V/ O% z' o) V) o6 r- ^
  162.       SetFileAttributes(Target,attrib);
    9 N6 B6 l/ n/ i1 V% d: M' B
  163.     }
    5 w& f8 S7 U1 M' B3 q
  164.   }
    1 k- B- u3 q* o" ?0 O/ G+ [
  165.   CopyFile(Source,Target,Erase);
    : K  [* |/ C0 O
  166. }1 G- C7 i8 z' v5 D+ }3 L

  167. ' M& ~, m$ ^, S: V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 Q1 N- {$ K$ x
  169. {
    ( C; r8 ^0 J" g  x
  170.      FILE *fp;1 q, u8 X# K6 C8 t
  171.      char  szBuffer[8192];# }( Y7 l+ l# f
  172.   va_list  argptr;
    5 Z9 t% K+ ^6 P2 L( b

  173. / i7 H$ T, O% _
  174.         va_start(argptr,message);
    ) S4 h) [4 T  c0 M4 a9 p
  175.         vsprintf(szBuffer,message,argptr);
    ! o8 O  ]$ k1 q  P* P
  176.         va_end(argptr);
    & V; F' {; M/ ^- t; G
  177.   fp=fopen(FileName,"a");8 ]: w) p1 w6 |
  178.   if(fp)
    3 ?1 O$ R8 x, B% N& L6 I' @, N8 P, R6 W
  179.   {2 d% ^6 n# L! H+ n8 B/ z9 [0 F
  180.     fprintf(fp,szBuffer);" r4 k  V2 Y; r! _. z7 u
  181.     fclose(fp);
    3 x  d1 N- k/ X3 ]
  182.           _flushall();
    & P" M* m, j3 B6 E6 B
  183.   }
    ( k3 F! c3 g$ ^5 b2 q' H- e3 `3 T
  184. }* A$ T% l2 s2 i: |, K& ?

  185. , Z7 }& V; u1 b/ T: W; \- x! |4 e
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 }$ k4 L' L( V% u! [) w, n  P, o
  187. {
    / v# Q! H$ D+ x6 o* h+ `% A6 b/ b
  188.      FILE *fp;
    & A5 f( L+ }" `) o- S0 G: R! a
  189.     DWORD  attrib;
    6 e$ f' h  z4 l  E! A
  190.   attrib=GetFileAttributes(FileName);
    ) l, G7 _0 Q, e5 ?( M
  191.   if(attrib!=-1)
    - T; k5 f. E2 `
  192.   {
    8 f( K/ ~' J: }* s$ D' b; d5 M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    " Q( {( d( `7 Z% M, O- ]4 j
  194.     if(!SetFileAttributes(FileName,attrib))
    . R4 x) p* ~  I) I/ }
  195.     {
    ! l; t& Z2 R( \1 O5 x# V
  196.       return FALSE;9 O% U6 j% h$ B. q! c
  197.     }
    1 c9 [  R" S  i; `; F3 F* ~( }
  198.   }7 }- n0 t' ~. B1 k- p1 }1 ^4 n
  199.   fp=fopen(FileName,"wb");4 ?& S) L, l: \$ O4 _
  200.   if(fp)/ }: I, L3 u, j
  201.   {- K4 k% ]: Z; d* L* ]" }
  202.     fclose(fp);/ N" g1 P5 t& N  {8 `" I$ ]
  203.   }0 h  h' ~3 f2 S
  204.   return TRUE;
    6 y% R+ N" X- s
  205. }
    $ Q! |' _# D" {  L6 d% T
  206. % H! R& _. d! g9 }4 C) W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 }; `9 @( {+ D1 {8 r
  208. {
    ) d( k7 g- U, r( N: d: n9 K* R
  209.   char filename[MAX_PATH];4 _$ M$ f; ]4 e5 U' X) s4 F
  210.   LPUPDATEFILE file,olds;
      h$ E, h1 }3 q  g  b8 f9 D  L- J
  211.   std::map<int,CString>::iterator i;. S2 U9 P0 E; O% y: O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 U: p( q2 V% I: c: ~9 t6 P$ J
  213.   std::list<CString>::iterator l;; k( Y* G( o! p

  214. $ |% L) g2 R, M" ~: x7 V0 L  f
  215.   if(bFirstUpdate)
    . j" \: ]. n/ y( ?
  216.   {
    . C8 E7 m5 L" K5 _- _8 L9 }8 p( V" V; v
  217.     dwCurrFile=0;# p! H; U# _8 _: Z* @0 V
  218.     bFirstUpdate=FALSE;/ ~8 G, u5 d( G; `8 b. t3 O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 b' |- Q/ {' D5 p0 ]5 x# t
  220.     {3 ~' n( E4 w2 G2 J" z1 n
  221.       dwTotalFiles=UpdateLocal.size();
    ) D7 H& Q. V. w5 [1 n; `
  222.       dwDownLoaded=0;1 L( j% N/ ]" I4 F* c; j
  223.       bSilentStep=FALSE;
    0 Q: X( H9 l' }) |* B3 z$ ^
  224.       bCompressed=TRUE;
    * H, e9 i: t. m6 H* d
  225.       strExtLocal.Empty();2 N' R! W, [( ^$ }7 E
  226.       strFullName=(*i).second;
    % M( c2 v+ w. p! M; C
  227.       dwProgramState=AP_CONNECT;
    3 e. O8 H2 C! `* r& J3 ^" `
  228.       return TRUE;
    4 v; t* j; @2 u- ~
  229.     }
    : q+ ^& q+ s& p
  230.   }; |7 T; j; i: P" G
  231.   else if(bRestartUpdater==FALSE)5 h' h; J  w# L& j
  232.   {
    , |7 P$ r+ p8 u; G% y9 d8 {6 ?1 L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())1 m/ E+ H* ]9 n! _
  234.     {
    # y7 X; o& K$ l5 Y' B! P. ^
  235.       file=(*p).second;" o, ?1 f" w4 x  V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! I1 G5 @" a+ G
  237.       {
    + _% L6 m( o4 [0 z  L
  238.         olds=(*p).second;8 G$ x, j3 U6 |$ \$ ?' T
  239.         olds->vers=file->vers;- H0 F5 `# M. X$ [# b7 R
  240.       }9 I2 \! `5 L7 ?) P
  241.       else
    / H% }" X0 f2 L  F
  242.       {9 c) p4 L+ J/ P& T" K+ C! u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 z; l  J3 C9 N, L  n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* L  B8 k- a% }" ?7 o, y& ]# A& D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));6 n" j* t" s8 h. i4 |
  246.       }5 P6 D; A( u' u5 R
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : S- i2 f/ |& l( S; W" _5 X
  248.       sprintf(filename,"(%s)",file->file);6 A9 v/ g2 X% U- `# k: [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ I3 h2 ~& n* F
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# j7 u% \/ ^: [/ I
  251.     }
    : g3 a6 Z4 f3 v( m% X2 U& _
  252.     dwCurrFile++;$ R$ i' @6 _7 N1 ?$ ?7 H$ X
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ t3 B* V4 k: q
  254.     {3 |  G; i% N7 B) u0 V3 _0 o/ l8 j: R
  255.       bSilentStep=FALSE;
    3 e5 t' x0 U; u1 _; T! n$ C! n
  256.       bCompressed=TRUE;
    # n; w8 \! |4 s8 ]7 L
  257.       strExtLocal.Empty();" z# P6 o; s/ y7 h2 g
  258.       strFullName=(*i).second;
    + S% U9 M( k. m
  259.       dwProgramState=AP_CONNECT;4 e) K9 }; }, A* I
  260.       return TRUE;
    % q3 V. Z; h. f2 `7 l. B# `
  261.     }- O; k& ^. L2 |: _8 l. v
  262.     if(!bRestartUpdater)
    3 I# Z# \. t& i# d/ b# B
  263.     {
      K: N/ O5 Y0 V4 V  ^  ?
  264.       int iCurrSize,iFileSize;
    : M4 a5 y  t. l
  265.       iCurrSize=0;2 r3 ]" y0 _5 b8 h% }) E: t
  266.       iFileSize=UpdateList2.size();
    ' ?: B# r2 {# T$ }5 y5 ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; M" }2 j# Y9 i# }, g! j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / M( t  u$ n- _
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% _3 v4 z1 K+ n9 T5 U* k% }, f2 A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! b! O* n% U4 U  J. R! |* T
  271.       Fclearf(".\\update.dat");
    2 W4 ]: `7 t4 I% n
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . {% v$ X) ^" S& \7 c
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- Q$ G: E4 l) M$ g- D9 p  L& n. y
  274.       {3 K' r# P) R' k
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())2 n. @' Z: n! P8 A& g  `$ I7 m& ]
  276.         {$ {% S) ~. G8 s3 p, H8 `
  277.           file=(*p).second;( O7 t7 W! [5 u1 ]
  278.           sprintf(filename,"(%s)",file->file);
    6 A9 [6 }3 J1 U
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      x# i+ L+ T5 u/ S1 U* w
  280.           iCurrSize++;
    0 v( [3 [2 n6 O4 E' P
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    6 }% K8 a$ ~( S0 Z1 R
  282.         }
    # w& @( M" c; `' i; C( K7 \: Q
  283.       }
    * N% u7 X7 R; Q  I( b4 n
  284.       unlink(".\\update.txt");
    " ]- E; }) k$ T4 T4 L  }1 O
  285.       unlink(".\\update.tmp");
    " F' w- x: u! o% c2 J- |! p
  286.       Fclearf(".\\checkversion.dat");" x3 ?" W; h! [/ B! f" {
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! l: _; ^$ C# K$ L# P+ K" e. v0 g
  288.       if(UpdateLocal.size())
    - E+ k5 l; @1 P6 V% [* y/ y
  289.       {) ~" f: M% c0 [9 t. v3 E8 @" v
  290.         UpdateLocal.clear();+ |) N6 F6 o+ P0 i( @! ~, z
  291.       }
    / a. u( q9 |% G' o9 A
  292.       if(UpdateFile3.size())( t4 P( t+ y% ]9 `* i& }( p" h
  293.       {% t( u& O$ k3 R+ }$ `+ k8 C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); Z% J( d" ^7 `$ ?# }: b! w# ?
  295.         {/ t) P& E' C! a5 p8 c' q) C
  296.           file=(*p).second;
    * N$ \" B; {& p4 ]2 ?- k
  297.           free(file);
    2 k7 k3 _4 O2 S& v, G* F# d9 Y3 S
  298.         }' l( k! N* Z% |0 n6 \" e2 ~
  299.         UpdateFile3.clear();
    4 o3 X, m6 C/ D  Z% l
  300.         UpdateList3.clear();
    1 }; j0 j' `& A5 u9 P
  301.       }
    : o2 G; d, r' W/ s* b0 B  W# P
  302.       if(UpdateFile2.size())
    5 M  H. _& m+ q& m
  303.       {
    " I4 @* k9 |8 l) A
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! ]& N/ E$ ]3 C% g
  305.         {, b, ?$ J7 J! q3 I. m' a# |
  306.           file=(*p).second;
      g  k$ `# {- K7 _" A- b% x. ?# ~7 A
  307.           free(file);0 t0 b9 I/ E3 {+ |5 ^  i# L
  308.         }6 E+ ^: I& U& l! l
  309.         UpdateFile2.clear();
    9 X& r! R$ v( w. t4 ~
  310.         UpdateList2.clear();
      E' ?0 t" K4 w2 \! R4 i
  311.       }2 t5 @. g" \3 N! D7 Z2 `
  312.       if(UpdateFile1.size()), N7 P' m4 C7 F9 C
  313.       {# a- p7 W% C0 t$ X: \: l' f; ]3 g( P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - N; G$ ~! \0 g0 K# l. {; e
  315.         {8 G4 W% H6 E% P3 M; Z( S( q
  316.           file=(*p).second;6 p. t) J+ {! ?
  317.           free(file);
    . m- L' U' z1 S+ N4 i
  318.         }
    5 B; X& B7 z1 t8 g. o' v0 ]2 E
  319.         UpdateFile1.clear();( ]! }: \' ^  \* R
  320.         UpdateList1.clear();5 k, g4 b+ W$ O
  321.       }& P, t3 ^! q% u% U+ p6 `6 Z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    8 S+ ?; m& }/ O- H. \
  323.     }; X- }9 d7 G! c+ B
  324.   }, \1 X5 X. h( B& ?$ x, {4 ]0 |
  325.   return FALSE;" C4 I' F' @$ z  p8 N7 `6 j9 ^" P1 j
  326. }
    ! l3 X6 e4 _/ h! g3 Q) a
  327. ! \7 k( X' ]/ v% e/ Z( e
  328. void CRevAppApp::ClearAll(void)9 [; v2 P0 F" a3 V! L- W' j9 T8 L
  329. {- m1 `. L% `9 V- `9 N
  330.   LPUPDATEFILE file;
    + U! G6 s$ U9 w% z# |0 Z( X  p
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 G, O' O4 c) J

  332. 3 u4 R% R3 j& g
  333.   if(UpdateLocal.size())
    6 k& q, C- r9 T/ \+ u: W
  334.   {# \" l, U) |" d# n5 V8 B+ @4 x! O
  335.     UpdateLocal.clear();
    ) W! o9 }- J# x2 c' n0 x
  336.   }
    ! r8 A1 P" K* k
  337.   if(UpdateFile3.size())
    7 F9 O  V2 ?& T  i7 _, {' F+ y. a
  338.   {
    2 E7 L( b, A0 O: ^$ {& a$ @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    9 ?# P1 Q$ r) I
  340.     {
    & `3 a6 r9 W  i, Y$ \3 R5 c
  341.       file=(*p).second;
    : @& R8 b' V/ s9 y
  342.       free(file);# ~! G+ w/ r9 v% g, F6 }
  343.     }" ?! e$ }. B' E' h
  344.     UpdateFile3.clear();: F% [7 a6 \9 o4 n* K
  345.     UpdateList3.clear();! f1 Y/ [" }: y/ f/ {5 `4 Y
  346.   }
    " {1 i. m  P9 `) e8 k% s
  347.   if(UpdateFile2.size()): t$ I) q" C) b
  348.   {
    ( |6 D( [1 y* L; t( [) t+ I5 r
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 w7 j) O3 K" K" e6 G6 y
  350.     {! O8 G$ z: \( f6 `
  351.       file=(*p).second;
    ! Q% Z& I- G6 l5 v- W7 {! X  j! `% k
  352.       free(file);' `  E* X! N- ?5 l! M. v( j% D
  353.     }1 O% g. X: Y; R( A
  354.     UpdateFile2.clear();, y) W/ G' o4 c4 [5 u& a$ W: J: r- A
  355.     UpdateList2.clear();! \* R: f8 q/ u5 b7 V/ }
  356.   }
    ) N: W; \, u0 v9 S% x+ P) e
  357.   if(UpdateFile1.size())
    9 R, g& h6 E  C4 x* L0 w
  358.   {" J2 h/ a, Q# H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 i% s" ?/ b% Y2 t
  360.     {' S' `! Q' ~7 c( O" x4 b
  361.       file=(*p).second;
    . _& [+ e7 @% @$ s; ]5 ?% H. X
  362.       free(file);
    5 M8 u; t3 s0 q$ V4 d, G( P
  363.     }
    / _) C, y* E* _
  364.     UpdateFile1.clear();
    , H6 ]- `$ _2 p  F1 j
  365.     UpdateList1.clear();
    ; w& F+ `# r3 f1 H
  366.   }
    & O; j5 n8 R6 M0 }# V, V$ q
  367. }  
    * p: _8 }1 ~5 y( C
  368.   
    & T* T7 @$ m0 Z
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ \# l& T5 M6 M& V) g! ~1 |9 S
  370. {
    # X& {0 R  D- F6 u0 _! `
  371.   int c;) _$ ^2 P2 i' e# h3 s. M9 k
  372.   LPUPDATEFILE file1,file2;6 w& v& D  q- B( H
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + ?/ G! B* C3 v4 g
  374.   std::list<CString>::iterator l;) X" u% z1 G1 b3 f. G
  375. # N) i$ U: ?, P
  376.   UpdateLocal.clear();
    * t6 L7 v9 @5 J% E2 u+ ?2 p$ m, {
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : t/ ]! @1 d5 x8 b3 i: Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . O1 h0 l' [: I% y! V7 n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 b+ @) l2 u( e) ]3 U/ F" y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);' e8 J: O  s' ?/ T- P! D
  381.   if(UpdateFile3.size()), f. Y8 s4 B" Q2 _$ S$ o$ A
  382.   {
    - Y+ H7 u" u/ \
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  V4 o5 p' x0 T# c" s
  384.     {
    ; _# A+ x( i5 _
  385.       file2=(LPUPDATEFILE)(*i).second;* }( s6 O6 `, {/ _7 u1 B  `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    , g; m. ?0 o+ ?6 N5 D* |* o
  387.       {
    ) O+ d8 M' G. |: A- X0 [
  388.         file1=(LPUPDATEFILE)(*p).second;. E; S* m! h$ n
  389.         file1->vers=file2->vers;: E) u" b/ I, M2 q# E5 v
  390.       }" F# S' y4 S1 w8 ?3 F: _
  391.       else& v6 c4 ^$ K& V( R
  392.       {
    1 l( F* W( d. V
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 K6 k: x5 U- x$ p$ F* K* i
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - L# {$ J* o1 b, _# Q3 _( ?7 \
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - {9 G' s$ h- {! {' m" z+ y" d; h3 D
  396.       }
    ( D; w" [- N, r) \+ p
  397.     }4 @* Q" n' R* k' K
  398.   }
    # L3 m& ^! V/ x, [& g  P
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 c2 s% ?  p* N4 R. A( b$ e6 q
  400.   {
    # D3 u' N4 i4 A( v6 h
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())4 j5 u: `# h5 F& H+ h
  402.     {
    # Z/ P- q9 J% x$ t, p! Q
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 O% ~; n: K9 A
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    - x$ B+ G  m  I
  405.       {
    : X) l" _* m4 n8 u  [) J+ }
  406.         file1=(LPUPDATEFILE)(*p).second;
    - Z' T5 n0 x) X7 _9 I, W
  407.         if(file1->vers!=file2->vers)9 t) {* `: l$ P. c
  408.         {( c6 r( f; a: l; I. s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' A5 F6 v! b* M0 y* R: t% z' s
  410.           c++;3 a. ~3 t, b0 ?4 e" O
  411.         }
    1 b' t, L& N" e) z
  412.       }# p+ b$ I! X5 Y5 P  y* e8 ^
  413.       else
    / N; r5 z) B2 o
  414.       {6 v) B( j" Q( }7 ?( d5 A# Y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 y: j, X/ O; W" n. k' U4 n- g
  416.         c++;
    8 `9 P  F) F+ W3 S
  417.       }
    ; h# g/ @, s  U4 j4 u
  418.     }9 p8 M2 p+ T- ?1 x' y. z! R
  419.   }, a3 Q$ b+ `  R
  420.   unlink(".\\DownLoad\\update.txt");
    # u) u9 ~& R  C
  421.   if(UpdateLocal.size()) return TRUE;7 y3 k! E: x( r  V/ W
  422.   else                   return FALSE;
    : N# p* M, S6 _) z5 P7 E
  423. }2 S7 q0 D) ?5 n, s/ {

  424. $ s$ E7 f  o; R8 ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 H& s1 Q- i! G# I$ ^# S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"; n9 `9 G4 w, h' {
  427. ( D5 Z1 V5 [% I' R9 G
  428. - N  n4 |' {# Y" u' i3 A" n2 s

  429. , n8 V/ r4 ^8 E0 x0 K4 }, N( w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' _/ f4 x' `5 h5 l9 Y
  431. {* U# K; g. f* ~& I0 [0 G9 g
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 j: u& g: z3 G8 _1 s* ^, l8 q7 e- m
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ' t7 s0 F6 L# r& S9 \
  434.   {
    8 r  a- v7 \0 N# u( q
  435.     char szLanguage[50];
    0 D& M# d1 ~0 P$ x0 P- f3 S! j& A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 _9 _3 X8 G+ \) Q! D( m$ s
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # N2 z9 Y: y9 E# A$ f! \
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! J( A$ N; L8 o; w
  439.     else                                   m_iLanguage=ENGLISH;
    . r- b# D* t4 s4 c( p4 X$ |: m
  440.     char szRegister[100];
    4 a, r  m/ ~3 {* D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 H4 K5 W7 @* d9 M" [. b2 z
  442.     strRegsName=szRegister;
    1 U. n- b8 R/ q1 P3 v: d
  443.     char szPatchURL[100];
    ! v( j& P8 G9 |+ V
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 P3 J% M$ E5 k6 d6 V( n- M
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 Q7 N  {4 I. L& N
  446.   }
    8 E6 O( y) i7 [2 I% Z' L9 D1 R* l
  447.   else
    5 X$ o, `! u. J2 Z) T3 F
  448.   {+ ^6 \! o. B2 |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);8 N( [2 O, t8 ?3 s. k9 B: p3 _6 v# J
  450.     strRegsName=DEFAULT_REG_URL;
    3 z, Y% S  Q9 I( I; Z
  451.   }1 V4 M+ r5 z5 U, l6 n+ e, [
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & g1 O! G) S+ C- G& R/ M# c$ c- S! Y
  453.   {' n7 F) b' Y& G  }
  454.     char szIP[50];0 t5 b3 ~+ u, w8 B2 T3 M8 s
  455.     char szDIR[300];3 I+ D0 n7 I8 b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    / f* N" g) Q& h% h
  457.     {
    6 h( l* V# L9 q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : k; [# E* A$ M5 x8 \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , P7 @  o% H3 A; I
  460.       strHostName=szIP;
    0 ~3 p4 ^( _6 l6 q9 c5 N3 y, f
  461.       strHostPath.Format("/%s",szDIR);) o# ^) Q$ D2 s( A- ?! A
  462.     }7 v  F9 ]9 W, p
  463.     else+ p2 J5 x9 u- G, D4 r. s
  464.     {& S8 p4 i& y; q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)/ V/ \( Q+ d9 ^2 J5 }; s: N. {% ^4 d
  466.       {$ Q8 a3 e9 V5 N: ^
  467.         char szLanguage[50];
    9 L; O& O* \) h5 v8 a
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 R' j& z( L0 L) t  U1 u" T
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 u+ Z4 f# J) T
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 U  }% L( E7 P- y
  471.         else                                   m_iLanguage=ENGLISH;3 r& G) Y6 P. x( F. }. {
  472.         char szRegister[100];
    2 _3 Z9 H4 Q/ S) _. c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! g7 F% `( }' R/ t4 ~/ E8 b
  474.         strRegsName=szRegister;
    % @1 v  Z* x+ e& ]7 Y  n
  475.         char szPatchURL[100];
    . p4 l& o; s1 ^4 L. `
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! C4 F! `6 i8 R
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. i6 f6 ~6 z' l2 H: v
  478.       }) Q2 [& Y/ j2 I! i- f7 V" p
  479.       else
    / b: r8 q. I9 o5 n. q; j
  480.       {. r5 E! y7 \8 e6 k/ m  Y" t* b5 Q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) O2 {- N( W% ?. D4 h
  482.         strRegsName=DEFAULT_REG_URL;
    # v+ P; u# ]3 x( w. M! h
  483.       }$ e: A1 L/ D' ^( L# C: ]6 S4 o
  484.     }
    % ^8 N& Q$ a" B' N, J' W# b
  485.   }9 L. u) m* q  x6 P* p+ G7 @
  486.   return true;
    " h/ D+ e5 b- M7 s. T
  487. }
    $ \8 o7 r$ Y8 h) E6 E
  488. 5 r/ |1 K- p  @, S
  489. #include ".\ZLib\unzip.h"/ n1 }/ N4 G; u+ S( R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 r, C9 E3 {  A9 R) |, x9 I
  491. /////////////////////////////////////////////////////////////////////////////* n( w+ C. J" Z: C3 P0 ]
  492. // CRevAppApp initialization" v% T0 p9 q7 s7 b- Y1 ~4 `1 R
  493. - s$ q- K1 h% G  y* l$ V
  494. BOOL CRevAppApp::InitInstance()
    . Q" K+ i6 s, C6 }" j
  495. {, B; ?, \9 _8 B/ `7 A- ]6 B/ G/ R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . |( J7 ]# o5 K! |) x

  497. 6 |  w- V! h; M+ ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, R" L: q' i- M4 f/ h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& _4 e( Q. S7 Y. z
  500.   {* k7 G  l6 X2 u' @* J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% k. d& i& d# h$ ^& U
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, |# `* U/ y0 E8 c+ H! h  y. H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))$ E2 c1 f" n/ L% C  g2 ^- o
  504.     {9 C" ~+ ?' e' }" j$ D
  505.       strcpy(szPath,szPathTarget);- v3 j4 p7 J+ r1 @2 r" ?
  506.       SetCurrentDirectory(szPath);1 N  p! j. u  o% ]5 s: P: I% C
  507.     }# G1 l) y! `* M$ t6 ^1 O$ L$ |
  508.   }8 Z0 h' ~# P9 y) P9 r
  509. #ifdef _DEBUG7 D' L+ Q: Z3 r( q% {1 a
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 X* ?2 m7 W2 E* J$ b
  511. #else- \' x1 ?4 u8 r) e* m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& \$ X8 b! f" U
  513. #endif9 B* _6 p0 t& o$ ]; [3 w
  514.   {
    2 f3 J( `( O/ m1 {+ Y
  515.     char tempFileName[MAX_PATH];3 n) s/ X4 D% J, T
  516.     strcpy(tempFileName,szPathSource);
    / ~1 r& D+ m9 X5 ~# E4 d+ D
  517.     tempFileName[strlen(szPathSource)-12]=0;% w% ?, |5 {! L) N
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* B9 M. d6 t  \0 ~3 q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 c; r9 v' ]) r0 |0 }, |
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 v+ C$ K7 `$ v0 \
  521.     return TRUE;
    : K# S; R0 x" O" U& I
  522.   }
    . X5 f$ i+ p2 D# e1 D
  523.   // Nuke 0118: Delete run.exe' E( M9 ], r2 q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    & \+ j4 k; ?7 Q  G+ `' V; h( v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    5 Q! F5 u2 y) w& |8 P2 G3 z* Q
  526.   if(!ReadCfgFile("Config.ini"))
    ! f1 h, O1 x" t+ }3 r' G
  527.   {
    / J0 c/ _& V- l, P  M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      I" p- p9 o$ @/ R' G
  529.     return TRUE;
    3 }3 I' y( ~+ r, t: E
  530.   }
    % n5 q; _& g) R. E$ N$ v4 A
  531.   HANDLE mutex;8 G5 z/ o' u/ \
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")); N( H5 F1 S7 g5 J
  533.   {' f" {5 @# i0 S/ w
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    0 a! l% U- V( n! n3 X7 K4 T2 M( w
  535.     {
    , m8 k4 T: ^* t7 p; @( S4 D* K. w4 ]9 {
  536.       CloseHandle(mutex);
      z) J/ ?; N) w# H  A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);7 \& r1 n+ R# c
  538.       return TRUE;
    , q6 a, j) Z* v. P
  539.     }
    9 D- q* p2 g! K9 `+ |9 e# [
  540.   }  
    $ A, k6 V% M) n6 d' A6 [/ N1 D
  541.   CloseHandle(mutex);, ]2 e( ^, I- o$ g' F4 b

  542. 2 e' R) v* ~2 q, Z- L. z6 L4 x/ H
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; Z, F: H, G- `6 j8 `! W/ v2 P. W

  544. : Y: B$ Q! B# U5 M* Z0 C
  545.         AfxEnableControlContainer();
    / ?: H# I; H* _. N
  546. / r+ e$ Y0 @$ M
  547.   bCanUpdate=FALSE;, L. C0 X% f: }3 \
  548.   dwStartUpSteps=1;
    ) C+ B7 a- P( ^0 W9 g$ a
  549.   dwProgramState=AP_NOTHING;$ Z# y2 e! K: Z" W5 o5 g* n. D

  550. $ k& V8 s* i+ t$ ]& _. F# n% g  k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    8 ~$ B, y" O" X" @/ ~( h
  552. . }$ ^8 x4 F+ n, \: w! V7 l
  553.         // Standard initialization* k, Y7 X2 o3 `: c6 {' H' I5 i3 A
  554.         // If you are not using these features and wish to reduce the size) t+ Q! |' Z9 ]% ^) ?/ B0 B
  555.         //  of your final executable, you should remove from the following
    , f1 X, D' G1 o( E7 ]4 V5 _+ g
  556.         //  the specific initialization routines you do not need.& O- M( [. H. I" `! ^2 Z3 [& e

  557. : M3 \2 u- L0 p( m+ J
  558. #ifdef _AFXDLL
    ! o0 q8 p4 S' N% P4 R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    . L) u7 F0 F9 M5 H9 j* Z1 W
  560. #else
    5 w) D1 `4 C! ?0 E
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 w2 j6 M% C+ z% e) e0 S( {
  562. #endif7 l& Z# i, |7 g3 ?: z  E& A

  563. " A+ T; D( V2 p$ W" S
  564.   dlg=new CRevAppDlg;
    4 O& q+ ~1 d" C( e( n1 w$ \
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 l. i; N8 E9 M& Z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    # e( [! L2 q, p9 T
  567.   m_pMainWnd=dlg;* @  G0 M6 }7 x
  568. ; ]. G0 }+ `7 Z3 z' q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    # ?$ F7 s/ P3 a$ j6 L  N' V+ {7 T
  570. 8 c6 G/ u, L% s/ \/ E1 m
  571. //  GdiplusStartupInput gdiplusStartupInput;# x* L9 Y) W! U" \3 n
  572. //  ULONG_PTR gdiplusToken;
    * w9 H3 ]6 A7 {
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 ]# j! X. A$ u& ^2 @

  574. ( z1 S( f& {2 b  z( W+ q
  575. //        CRevAppDlg dlg;
    * t! g* f" ^* Z4 l
  576. //        int nResponse = dlg.DoModal();
    3 P8 t5 u+ ^5 L3 V4 O$ w
  577. //        if (nResponse == IDOK)
    / P! g6 X" T- F3 _) P. Z5 v
  578. //        {# U/ k& `: P0 Z9 e, h
  579. //                // TODO: Place code here to handle when the dialog is
    & p8 X! g% m" L0 n( c* a
  580. //                //  dismissed with OK
    1 y' V0 `2 m! D9 H, E$ a
  581. //        }
    ! O* a4 C! C! [
  582. //        else if (nResponse == IDCANCEL)
    6 X; w: t. f$ K/ @' [$ B9 c
  583. //        {
    5 r7 f  J, B( F  Z0 F; t. r/ h+ w
  584. //                // TODO: Place code here to handle when the dialog is& s; Z: m! W4 P( [1 \" X5 X/ T
  585. //                //  dismissed with Cancel
    : t  M4 j/ U0 v* B4 t0 o8 i
  586. //        }8 ^7 C# P) }2 B- s* V6 E  r2 s

  587.   R$ G" p+ e/ r; x1 F& k
  588.         // Since the dialog has been closed, return FALSE so that we exit the! |/ z" r; U6 B9 o0 U( I9 w
  589.         //  application, rather than start the application's message pump.
    6 t6 X; A, v3 ^6 D
  590.         return TRUE;
      `0 ?3 X  A3 h& h8 C5 n
  591. }/ m, y2 _' O9 f4 Z1 c  F5 b5 n

  592. + J- q- e& w4 [- O+ ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    6 i0 b# ]* |( R2 y7 U
  594. {
    1 X5 b& B7 @* E
  595.   int i;
    1 C- Z$ Y7 p* }9 j9 r( F
  596.   char *szRet;4 e& I) s" K/ g
  597. : E9 b2 I% o7 P" R, ~6 h
  598.   if(pSource) { itoken=0; sztoken=pSource; }
      B" w/ W: p( c- J: o% W; I
  599.   if(sztoken)# V8 A6 c4 S+ z. W; m$ h- P/ w
  600.   {
    : J" T/ b8 x5 G3 V/ q1 N4 c4 d, y
  601.     szRet=&sztoken[itoken];, h1 z6 A1 }3 c& z& ]* D
  602.     while(sztoken[itoken])
    * F) \4 S+ o8 X. i- Q# i7 n
  603.     {; X5 p; _1 t3 N' e
  604.       for(i=0;i<(int)strlen(token);i++)
    6 G3 T2 W2 I' \3 l
  605.       {5 y1 t# k# j  l3 G9 q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . U8 P7 }8 ]7 i# e
  607.         {
      Z+ L) {6 |! R* m$ Q6 _8 a1 h
  608.           sztoken[itoken++]=0;; R% L1 v& y2 u/ N
  609.           sztoken[itoken++]=0;
    1 j/ `/ i; {+ i6 H6 J1 n
  610.           return szRet;
    # q) @2 B! v( I4 f1 l% a$ e- |5 j
  611.         }6 G( q) w+ C5 j) `& g
  612.       }" t% r: p% c: @& `
  613.       itoken++;# S" z- Q2 ?3 z# c8 F
  614.     }
    ' Q! I/ c1 `% o# P
  615.   }
    2 s$ V; x3 S2 M) G
  616.   return NULL;% a) j0 H* `( v0 N" c5 `* K6 R; a) z
  617. }
    " S# i6 T- d- h+ \3 B

  618. 1 a0 C8 p: d% o. H5 B5 h. `
  619. void ProcessProc(long Total,long Current)
    ( j$ A" l! g1 o5 d" V8 m+ h" o, F
  620. {- v, I3 `" ]( k# w% y% f6 Y
  621.         MSG msg;' K% Y2 [  r" P
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" o2 Q& y9 Z+ I* B8 c4 V$ ^
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + N) A1 `( ?4 ^0 E  i/ z5 E7 e
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))  e! c$ R5 z& @
  625.         {
    ! V( M$ J1 u" u0 M2 ~2 ]
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! i7 C% q9 i. h7 L1 q0 u1 u
  627.                 {/ A0 E! |% \3 d4 U
  628.                         return;
    9 H1 v( ~' m/ k3 j: I
  629.                 }
      C1 \) U( U2 Q1 k: M
  630.                 TranslateMessage(&msg);) t9 u5 G2 E( g
  631.                 DispatchMessage(&msg);0 [% b. [; q. J
  632.         }        ! M& S8 w. t# [, o
  633. }
    8 r; s0 x1 w9 _/ A* b  N  U3 [. F
  634. + L3 b: `  T, H# I
  635. BOOL bFirstChar=TRUE;: W' h7 ]& H5 B) x; e' d% M1 \

  636. 1 v  z5 k' c% Y" v! l6 y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 `6 b, V! {* A& o1 R
  638. {
    ( H! B# ^" }. k2 i2 e. B/ L+ h/ Q
  639.         // TODO: Add your specialized code here and/or call the base class
    , p" t" m, ^! T5 |
  640.   switch(dwProgramState)
    0 B+ Y# v" Z1 {0 p0 H+ \
  641.   {
    , l; S/ R% t. m2 Z5 k
  642.   case AP_NOTHING:
    . e: d- B1 f7 e7 d  y6 n( P  K
  643.     switch(dwStartUpSteps)5 h7 g* [, b4 a5 P
  644.     {
    ; y/ X7 R; K+ j, j9 [" |, a
  645.     case 1:
    0 w- x1 z2 r, N, k' X
  646.       {
    8 W$ I7 n; U4 F+ J) L
  647.         int i;# J$ I( u+ p' W# ]$ c; e
  648.         CDC *pCDC=dlg->GetDC();
    5 n) q# s( l% T% \" C1 S( s5 _8 \
  649.         HDC hdcwnd=pCDC->m_hDC;) y* [" X+ F7 y% D
  650. //        Graphics graphics(hdcwnd);
    5 a. Q5 k/ @1 z2 G! Z& n. x/ f
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + @2 i# `6 b! E2 k" `2 C/ R5 y
  652. //        INT iWidth=bitmap.GetWidth();
    6 h7 c7 A1 _, ?& H% K
  653. //        INT iHeight=bitmap.GetHeight();
    . |* ~' l5 R0 A: b; u- `
  654. //        Color color,colorTemp;
    ; C( V: ^# Y+ N- F
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)7 t, Y  g3 |* |$ f
  656. //        {
    - e- g. g  F5 z2 C8 o, B% [5 W
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    " u; q0 q# L4 T% z8 {$ ^4 W6 a
  658. //          {8 v' m9 c2 t. b' ^1 {. h
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 S* y4 G7 G, C/ B8 b0 e* a3 U4 D
  660. //            colorTemp.SetValue(color.MakeARGB() C0 i0 b8 r: O. j. y. [6 m! U7 _
  661. //              (BYTE)(255*iColumn/iWidth),8 m: y5 U' Z! E3 w& K
  662. //              color.GetRed(),
      k3 Z. |5 s8 }7 u
  663. //              color.GetGreen(),
    $ |) D2 ^. o$ E& R( {6 x) [3 f
  664. //              color.GetBlue()));9 x* e" m4 y9 k/ C- s' L: L
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ' {" m9 N" X$ x+ m1 X) z4 \
  666. //          }
    $ B) {5 T# w; G0 q0 H
  667. //        }
    " n7 n9 ^7 c* k! H" t% Z; q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    # n$ k8 d$ {2 I" |+ p- `
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# M  @1 {& _' _  ]* ~) k  R
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");, M4 X4 x/ Y2 Z7 m: ~3 E: Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 }7 z  u* @7 ^3 l- x
  672.         for(i=0;i<240;i+=8): K" @# S7 [& Y' M( ]$ J3 U% r$ [3 a7 ]: o
  673.         {% F4 h2 J% E( U1 S) r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & u8 j- x  A, F! U8 M) @
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ q9 F: q& C0 i# M5 {8 p
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * v+ w! v. m: G  E9 M* [
  677.           Sleep(33);
    : k4 q* ^$ l& g, J" W; P. u% @9 V) P6 N+ D
  678.         }. F  q1 B3 K. y5 o8 s
  679.         Sleep(1000);) v7 a) |  [  Y3 @; m) X
  680.         for(i=240;i>0;i-=8)! }1 Q% U! \' l9 L
  681.         {
    ! c6 g; [2 M9 g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, ^3 M/ O. E7 ?: o  g5 |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. D" P: D" L8 I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + Z9 Z8 A5 h4 A- s4 W
  685.           Sleep(33);2 k( j3 ?3 S) _
  686.         }
      b( ~  ~" r  ?' N9 a. R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 v6 W. p4 t7 V
  688.         dlg->ReleaseDC(pCDC);! I. W" ^# [) M& W" Y! L! x" f
  689.         DeleteDC(hdctar);0 v$ a8 G6 q6 c  J
  690.         DeleteDC(hdcsrc);& Z" z# A& Z* D. x5 P! ]5 \
  691.         DeleteDC(hdcorg);) ^$ [- E3 F4 h8 Y1 W" o
  692.       }- b0 o, @; T# ]0 N& M% B
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);0 s9 e1 I; q8 q& G! d1 W2 F, u& R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    2 ~, @1 ?6 I- X0 s% t) Q6 [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");$ ?0 M/ n7 K$ W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& Y7 `0 b+ O# `. U* `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# N4 J; [6 D) l! u7 E, z
  698.       if(!Dn.Connected())
    2 i$ i/ x4 q: ]' _. g# Y
  699.       {3 L3 @+ p& O& m; K. y  c
  700.         dwTotalFiles=1;3 e8 n9 ?% F0 Z9 c
  701.         dwDownLoaded=0;
      R8 {  H( e* o" t+ @
  702.         bSilentStep=TRUE;
      H! O8 Q8 m+ n' s9 F! n, Q4 i9 F
  703.         bCompressed=FALSE;
    / A( {. [+ S0 D  C' _7 ?5 B0 W
  704.         strExtLocal.Empty();
    : u! C6 s8 X3 k! K# a
  705.         strFullName="readme.txt";$ `. ^( J% N$ o# x) G
  706.         dwProgramState=AP_CONNECT;
    . t3 Y" A* ?# v5 b: ]# V1 O' c
  707.       }" `5 Z& X* |2 C: O) [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();# d) n  f- C1 |' ?# B
  709.       dwStartUpSteps=2;. ^- D" ?+ S1 V; t% o( p; ?3 e
  710.       break;7 E# c' p9 R6 \, \+ U
  711.     case 2:
    , y( t7 l3 G/ |. E+ U' D3 ]: y
  712.       {& s; s0 q+ W# P/ ?0 ^' w
  713.         int iEOF;
    8 g6 J/ [4 x8 T2 w0 ?
  714.         FILE *fp;4 s" l8 y5 J6 U) U2 v
  715.         char szString[512];8 X2 W7 g% u, x$ h* F7 x' j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 F& {" A8 H6 e3 r# o
  717.         if(fp)* Q5 S9 @* S: M6 k5 O6 |
  718.         {" s" |& G3 L4 b0 U' u
  719.           do
    ( Z; _( y& F3 i6 f: y% [1 ^9 c) F
  720.           {
    2 |2 Q1 @6 Y6 k1 U/ w) z
  721.             iEOF=fscanf(fp,"%s",szString);7 S( L* P1 _' M
  722.             if(strlen(szString))
    ; W- n5 D& o' O2 j: |" L
  723.             {9 P! l, q- I4 k# T, O# L
  724.               if(bFirstChar)- y, M+ ~8 y3 k
  725.               {# M5 f' E  W4 u" k; V. g. w
  726.                 bFirstChar=FALSE;
    & W5 W9 O" Z! k
  727.                 bConnectIsBig5=FALSE;
    ; I* c* p1 R+ o* M; o) L' p; ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& w! t/ W, v1 c
  729.               }5 m, y, b; ?8 B& h9 h
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' \0 v' K' \9 v3 _) P" B/ Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    1 R/ w5 W0 h. C! \% q( P; @7 i
  732.               dlg->m_ListText.AddString(szString);' P; C, `! b# M5 ~. w5 R% B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- G" w! Q* _: N0 t. s  `( y; |2 y
  734.               *szString=0;
    8 Y1 u5 [# P# P7 r. r5 N, F5 i) ~7 X
  735.             }
    2 {0 k' y- N1 t% O; [6 m# X4 [. l6 E: I
  736.           } while(iEOF!=EOF);  \; @! f; Z: U8 _# @, @; E$ e4 k4 |
  737.           fclose(fp);' H1 s8 r7 S" h
  738.           unlink(".\\DownLoad\\readme.txt");
    / o" S! T& x! c
  739.           dwStartUpSteps=3;( d, a: a* f! z+ {
  740.         }
    3 D2 f# e4 `4 i; }- G
  741.       }
    4 C( R2 }6 m2 Z9 \2 S8 Z% U  P! {
  742.       break;$ k7 x: D5 F! {% R( E7 [1 y
  743.     case 3:: p) c# w3 ^& L$ B2 V) ?+ Q
  744.       if(!Dn.Connected()), G& t# j# J8 Y3 \# l
  745.       {- W; Q5 e0 P& z  T8 j+ Q7 c
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& c0 z) Q7 B" Y9 V, `3 M
  747.         dwTotalFiles=1;
    . G' @4 N; D, m, l. e1 _6 _4 e+ U
  748.         dwDownLoaded=0;
    2 B2 t: o7 m& q  a
  749.         bSilentStep=TRUE;
    / W: e8 ~( U' _/ l+ G* ]: z! ^# x
  750.         bCompressed=FALSE;
    : P2 M  `7 b1 c
  751.         strExtLocal.Empty();
    3 l& Z" o9 Q$ t+ H: S, E" _% k3 M
  752.         strFullName="checkversion.txt";# R# W# T2 [- x# P
  753.         dwProgramState=AP_CONNECT;
    ' _: ]2 C( x6 `6 V4 g* x/ B
  754.       }, w7 i$ X; t% H% D+ d  \1 z
  755.       dwStartUpSteps=4;% ~! N  ], A' Q  U9 H5 ~" h
  756.       break;. L8 l" Q0 F  [) M/ @* L0 i  j; K
  757.     case 4:! G, a- U+ A, E2 ]4 z
  758.       {
    , A- ], L& H$ u, n: A
  759.         FILE *fp;% |+ |: C1 x& C. C( x) e
  760.         char szString1[128];6 [! b+ R+ L, B: D2 x2 E6 R  N
  761.         char szString2[128];7 `; D- k  ]  ~/ b% j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");  L3 E) M4 o7 u) M0 a% {* s
  763.         if(fp)
    . M4 p' i# @6 J
  764.         {
      c8 [. `3 ?0 h* |7 h0 C5 h
  765.           fscanf(fp,"%s",szString1);
    % X% J2 @' P* S1 x8 m
  766.           fclose(fp);4 a8 j+ X8 W& F
  767.           fCheckVersion=atof(szString1);
    ; L" Y) i$ Z6 {
  768.           fp=fopen(".\\checkversion.dat","r");
    9 K  N: o% C! F& O0 b
  769.           if(fp)
    : V5 Y7 u# H- V5 B
  770.           {
    4 m' ~5 @3 `1 t' P; y
  771.             fscanf(fp,"%s",szString2);" s- F' G+ h/ p& V- \2 |
  772.             fclose(fp);* z- i+ @% w2 E( Q* P! R& v
  773.             if(atof(szString1)!=atof(szString2)): N, S6 h( y0 L- H. |
  774.             {  {5 y+ i* a, H1 v
  775.               if(!Dn.Connected())
    5 h& k9 O$ \4 b
  776.               {  \) h# P' c0 I6 Y
  777.                 bFirstUpdate=TRUE;
    ; S( H( G- E, J- }8 a& {5 |2 m
  778.                 dwTotalFiles=1;
    0 ^4 G2 M9 X' @, M( g) F
  779.                 dwDownLoaded=0;
    5 ^2 h$ n4 B* U8 W: Q7 ?
  780.                 bSilentStep=FALSE;
    4 h( i- [! Q* L+ q9 [5 t" K% e
  781.                 bCompressed=TRUE;0 w& o( R, a. V1 r  Z& S/ r
  782.                 strExtLocal=".\\DownLoad\";
    , x; H- |, ?( T
  783.                 strFullName="update.txt";: H* a  c9 A+ Z4 E) R8 d
  784.                 dwProgramState=AP_CONNECT;+ P2 E! x+ q0 b9 J, h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. ~# _, G6 h1 @# y  j6 h8 r( G1 e. ?
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");8 q9 W0 a3 s" H: k) p3 T  Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " H" Z. U/ h# j8 a
  788. $ c) J0 B% ?8 B: J) h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 Y9 B8 K$ q4 J& g7 r  Y$ c
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 K( ?% }7 t0 }; |4 i# C$ }2 C
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " I. g. d; @) B# P5 t+ U
  792.                 {$ i% R9 }: J/ e, A5 d$ P% B5 k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 G! P6 t( q. z* Z2 y+ H1 F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
      l+ N, X  K: J6 X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ! F$ C( x/ Q9 V
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 Z# k  _& A. m+ ~

  797.   [" h* e* Z8 u9 p, G3 B8 q7 _5 D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " J" Q: {9 a; F  l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' n) C4 R. w5 q. s: A! O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    1 v* e* `, y1 _1 P( J8 L+ e
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 E, U  b) F( n. S' D- s
  802.                 }
    1 G! t: `9 K+ g2 Y
  803.                 dwStartUpSteps=5;6 x/ c# G7 g, O- [9 Q  a
  804.               }
    & B( {, r& x8 V3 J6 m2 {
  805.             }
    2 |, N+ [* b0 y# {8 `
  806.             else
    5 T, W9 c' H9 `: N- N; `
  807.             {
    # v, J0 o/ T5 v0 v& [! @, M
  808.               unlink(".\\DownLoad\\checkversion.txt");/ ]/ q' T$ C% n* Z. [4 G  F( d6 M9 j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - e7 c$ s# v4 f8 f2 ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 U9 x1 g, ]0 [8 [" x; Y  s9 b! i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");* ^2 S$ g8 T3 @
  812. 5 N- Y+ O! c7 f+ w$ ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 B8 u8 {8 q7 C% x3 }4 v
  814.               dwStartUpSteps=99;5 A2 {2 Z  X5 @2 m. G6 d
  815.               bFinishUpdated=TRUE;
    $ F+ J0 [$ {% O8 @+ ^$ C9 I) W
  816.               bCanUpdate=TRUE;& D6 C7 w) N- t9 d
  817.             }
    # K( ?- B! D4 E0 Y6 q2 Q0 o
  818.           }4 B, I' e& g6 O; [8 E" }
  819.           else: `3 \1 r4 x; E
  820.           {0 _$ p* T! p$ h' `9 X- v
  821.             if(!Dn.Connected())
    + p/ p* o2 Y" l5 U: X9 a6 _7 e; r
  822.             {
    3 q& ]  w3 q8 c
  823.               bFirstUpdate=TRUE;
    : Y4 E' F7 {8 U) i* R) h
  824.               dwTotalFiles=1;
    % R0 ~! x4 F9 j' b
  825.               dwDownLoaded=0;+ m5 o3 H$ J& w& g+ K
  826.               bSilentStep=FALSE;
    % c. E; _( c3 q- S
  827.               bCompressed=TRUE;
    ! H" p6 V5 W; }
  828.               strExtLocal=".\\DownLoad\";3 W3 ^2 o5 n- u- a5 j6 g7 g& ^
  829.               strFullName="update.txt";
    0 v  u: w( r: D" Y
  830.               dwProgramState=AP_CONNECT;. [# Q/ f" e; s- h; S; {
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 c8 k; W$ g7 s; d" _  y  {0 e4 ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " E. n" A& n1 [- e5 G
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' i) g! G# L- @2 v
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 n2 s+ N: b% v6 y3 v# _# N# Q; a
  835.               unlink(".\\DownLoad\\checkversion.txt");
    * C1 [; y/ a( Y) Y- {, w; B, ~9 L
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ' H3 x6 i; F9 l- k0 f
  837.               {+ ^9 N8 d9 M: Z+ f: ]! J/ x8 |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    - p# ]8 y+ c5 Q2 |+ y6 p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");# _& n" P- ^6 N2 M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 u* u" T. W8 T  ?1 w  u# c
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 _5 f: R$ H7 o4 f  R; k
  842.                
    . d) e# y& I5 j+ v/ C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! N! j( R/ L2 t  W, O
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; n2 y9 |% d: @8 b$ v1 e
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");$ X+ w/ @* v; k( b
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& S. E8 g; s% B7 P) d
  847.               }: C. R2 ?+ v: [3 d6 v
  848.               dwStartUpSteps=5;
    # K& c" A! I, L+ [6 o& v6 v; S
  849.             }
      a. h2 U4 G7 y$ k& h! c  w+ v, i
  850.           }( j+ N2 K- X* x! L
  851.         }
    / D% {! F4 g0 A6 M! l
  852.         else$ P% W6 z5 m" B. k" g
  853.         {. J( W6 g" b* }1 }* d$ Z; i3 w9 @& [
  854.           dwStartUpSteps=3;/ z' t: d  D' j+ e
  855.         }9 F4 b1 V+ [% E8 V0 m' I: w3 j
  856.       }! C3 {+ M' j/ H
  857.       break;# P' `) e$ j0 ?. Y
  858.     case 5:
    ! t  B: O) ]6 F
  859.       {
    ' h8 E$ ]' n( r1 V: I, w' |3 R3 N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)1 m0 y0 `: ]7 [0 |9 X
  861.         {
    5 d% t% p( A# ]  F! F; [7 B. f
  862.           int opt_overwrite=1;* w1 z2 l% \: [0 j) C+ ^5 s
  863.           int opt_do_extract_withoutpath=0;- P6 |: F$ L6 Y! l' H8 @4 V6 I; I* F
  864.           unzFile uf=NULL;) m* ?9 K  [/ G2 t

  865. & h$ a- s' d+ K0 t/ R$ e
  866.           uf=unzOpen("Wsa.zip");
    ) _$ L- B4 e( z0 c8 v* N
  867.           if(uf)0 k, W# u' R' f& J: p- ]/ x; L
  868.           {9 j4 N: ?. ~! g: M# ~
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* @1 o3 Z6 r% A" E# t. ?* g4 y
  870.             unzClose(uf);; s5 z. }) s6 L7 S6 S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");% f  P5 ^  Q5 j4 K7 Y* E0 O0 x
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* p( f# {8 H( h4 }
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* `( B5 X9 y  m& q2 O
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 \  W4 S, O* Z1 l! R  E
  875.           }
    0 J( b) g- Q' |5 z' x$ {
  876.           DeleteFile("Wsa.zip" );
    6 n: U/ q2 r1 ~: }- c1 S
  877.         }1 _$ W8 ?. I# f5 y- x
  878.   \9 ~8 i& ~* P' b2 H
  879.         if(CheckLocalVersion())
    " [" }1 i# v3 i
  880.         {
    ( K; O/ g$ F7 N" e2 I2 y4 I4 i  a0 P
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");5 p5 A. F. y6 Q& Y' p0 T  V5 \
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");0 N6 P  u5 [" L$ w
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% R# r& m" P# `! H
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " i) k: y; O3 ?- ?; Q. h
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    5 N$ P. s; l9 g4 h. Q2 x
  886.           dwStartUpSteps=99;
    5 [1 Q" t2 w# O$ u/ Y- `* S
  887.         }
    % c2 M/ {8 Z  }" ~; }8 j
  888.         else3 K# e3 z1 ]( f4 K3 r8 H
  889.         {
    8 F5 O) h+ ?/ _5 g9 I  b0 B! x
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 C) u5 H' O( A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 l$ Y: Y9 c6 k% d) t0 J; j' Z
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 E  a3 y; q9 ]2 }

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

- K# h: Q, {3 `' l. l3 g$ i! E) C2 O

評分

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