CSUpdate.exe源代码

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

$ u+ S  V* {, |& f5 ]6 ]0 S
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 y( G: _  [0 V9 ]0 d
  2. //9 H1 L- F  _& I8 }$ a1 l

  3. 5 ^" j7 ?- E+ f- d. p$ A
  4. #include "stdafx.h"  Q, `) U4 u: z, W5 s$ ~

  5. ( Q; A$ \! w8 {4 ]9 ^1 ]2 b
  6. //#define UNICODE
    . ~- v+ ?- L. B* i5 v
  7. //#include <gdiplus.h>5 ~/ h: N9 C2 J
  8. //using namespace Gdiplus;: b& I  \3 N0 m4 c- V, T3 n: H
  9. # T7 H2 h, }" Q( v
  10. #include "RevApp.h"
    ) w% ~# Y( w3 c6 W
  11. #include "RevAppDlg.h"
    1 U6 C  X$ @' G$ V& U

  12. - _4 W, @6 f% X% i. a' ^4 W6 P1 d
  13. #pragma warning(disable:4786)
      ?$ Y; D* v9 p
  14. #include <map>
    8 P6 ]" C) G3 o9 B( M' v7 P) n
  15. #include <list>
    " k6 H2 H: y" m: V! k' i' {% m
  16. #include <direct.h>
    , F8 q- O  a( D. k3 c! W

  17. 4 Z6 [0 ?2 V) q9 X1 y$ h9 C
  18. #ifdef _DEBUG/ d1 [8 u: d& ^( S( {
  19. #define new DEBUG_NEW
    : N5 w3 n2 I* A# O
  20. #undef THIS_FILE! g6 p# q% o, A: U" U# ^
  21. static char THIS_FILE[] = __FILE__;+ P9 c$ ^7 `- j# X9 l( _) v# ?$ q( `* N# H
  22. #endif
    ' T$ }& q  A* E. k# J
  23. #include "SkinResDef.h"' z# O3 p. n# B7 l
  24. #include "ChangeBG.h"
    , |* K1 w9 e8 D; c
  25. #include "AFXINET.H"/ b; v( g( n% w" s
  26. " `+ O. I  n' u5 Q) ^# a2 J  X
  27. #define TRADITIONAL_CHINESE 0
    ) O# h5 O3 K% x0 V' C  |0 B; T
  28. #define SIMPLIFY_CHINESE 1$ i# l% F6 D  n+ W" m
  29. #define ENGLISH 2" e7 m3 o# z" ^9 E. O4 q1 Z
  30. int m_iLanguage = ENGLISH;9 f5 e! v+ B; S" f( g% W
  31. /////////////////////////////////////////////////////////////////////////////
    ( ^7 c& j; R# e& m0 r, ]9 U9 x' b
  32. // CRevAppApp  S2 S  h1 C, Q: v

  33. ) b( h, O4 u+ s# `' t8 T9 I2 t' |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& m) A1 d" E4 W8 W0 j
  35.         //{{AFX_MSG_MAP(CRevAppApp)5 w. f& F# l- e( t! A* \
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " x' |- W, W" n, U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 x  w/ G' a% n& D5 v$ i
  38.         //}}AFX_MSG4 ]0 b) k/ m, l- `! U) s3 I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)$ T8 ?3 ]6 ?/ B) s  b5 K7 C' w
  40. END_MESSAGE_MAP()
    - F  t8 x# U8 M! I. f8 e: a

  41. % X  X* \0 V6 s( ~, r' R
  42. /////////////////////////////////////////////////////////////////////////////( R' H  q  _9 a7 }% J9 J: {
  43. // CRevAppApp construction
    2 H# v3 _  {0 }" r/ n
  44. 4 G. p7 C: E2 M' h3 |# R! i
  45. CRevAppApp::CRevAppApp()
    . _7 [/ q* J6 b+ N( R2 K
  46. {6 }# T! ]9 {1 c1 x& G, _
  47.         // TODO: add construction code here,5 @- d' f. J% @# [/ u* R9 b0 J( Y
  48.         // Place all significant initialization in InitInstance
    , W! v0 x: Q% p; _; Q4 c3 s  u
  49.   bDisplayIsBig5=FALSE;7 z2 h2 s! E) S2 w! n
  50.   bRestartUpdater=FALSE;6 w/ R( R0 q- m+ }
  51.   bFinishUpdated=FALSE;) }! K8 @& ?7 J$ S, x( F, Q6 ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 L2 w6 J0 ~8 B( L8 C% l
  53.   InitChangeDataBig52GBKS();) X* R( D5 {) `9 y. F0 H
  54.   InitChangeDataGBKS2Big5();6 ?4 U4 w$ x/ G9 t4 M0 v
  55.         //5 H: D7 }! r5 F5 q3 I/ G3 u  u
  56.         bClickRunExe = FALSE;. Q! {0 S; M7 X" f2 k( @% a+ Z% D
  57.         //# U5 Y# ^, v, R  C" ~
  58. }
    , M# I- T( Y8 D) @; ]/ p5 U
  59. ' G# @4 m, o9 D
  60. CRevAppApp::~CRevAppApp()9 y& T8 G5 i( f  \  h
  61. {
    # U; t% y( m( x
  62.         // TODO: add construction code here,
    9 W$ l8 T8 J2 o2 j0 S, B8 R
  63.         // Place all significant initialization in InitInstance9 W1 q4 g( ?- s/ ^0 o6 E
  64.   EndChangeData();5 Q% k& ?0 x: f1 z  X0 A. A  ~
  65. }) v: l) X8 t  r4 h( r6 @

  66. 0 X4 p. h! h& c+ a, z
  67. /////////////////////////////////////////////////////////////////////////////
    2 G% W# [% c% i, [( A* I
  68. // The one and only CRevAppApp object
    + |3 y! M- Z% p# |0 E$ Y1 {

  69. : n' P* {! \* V, A
  70. CRevAppApp theApp;, P8 L0 ]4 {$ X# V. q3 g
  71. " [% B6 A9 H& l8 b3 O' o6 [
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    + Q$ ~/ y6 N( D5 A  `
  73. {
    2 V% r! `9 a. M0 e' P, J
  74.   int iEOF=0;3 H/ A; B( Z  O* l" D1 n
  75.   char szTempName[MAX_PATH];
    2 d. o5 h/ `- Z" H# j+ s5 z
  76.   *szFileName=0;. z2 D  D* q3 T# b- z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    / }7 }5 b7 c! p  a! k0 j, T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 Q% \9 t6 Y4 y: O: B2 a
  79.   {" E4 u, `' @, Z( s; a
  80.     strcpy(szFileName,&szTempName[1]);
    2 X* H6 a1 h! J  V  ]6 ~. l1 V
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)( r$ N; g* Z2 C
  82.     {
    / k7 W/ D! a. R) R% a  g
  83.       iEOF=fscanf(fp,"%s",szTempName);
    / N# o* X0 C0 ]8 W/ @( A' E. _
  84.       strcat(szFileName," ");
    & t5 X, j8 q7 Y3 c: F
  85.       strcat(szFileName,szTempName);
    ) L2 \8 h+ I; E# G+ B) J
  86.     }
    % ^+ z/ C" E; d! R# A" L
  87.     if(strlen(szFileName)>=1)
    % ~+ y4 E. u% W8 P7 R
  88.     {0 }/ W/ o' T8 G) @! n. j& G* w
  89.       szFileName[strlen(szFileName)-1]=0;
    ( z; P/ |- C9 n$ |
  90.     }* U+ I5 O+ z2 G
  91.   }
    " o% Y7 f, k( v, v9 s
  92.   return szFileName;
    ! E2 f" f1 M" R& c# H
  93. }
    ( |+ _- z. E! \7 [$ c- F, K; h4 t
  94. 4 C. S$ T8 `0 Y- y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% u, e/ _; d$ {5 v5 r7 ~
  96. {5 ?1 W, I4 A- B; U1 _' K/ U$ o
  97.   FILE *fp;
    6 o# ~* s. j1 |. c) y% H
  98.   char *key=NULL;3 E% T) n. K) m9 [+ V
  99.   char version[MAX_PATH];
    0 E9 N2 b4 E/ @2 s. r
  100.   LPUPDATEFILE file,olds;& L1 f' B. C$ x
  101.   std::map<CString,LPUPDATEFILE>::iterator p;0 j% ?+ Q' S5 f/ q, [
  102. 0 W) s4 s) j/ c! E4 Y- O
  103.   UpdateList.clear();; V! ]) x( o. ?, w* i
  104.   UpdateFile.clear();
    ! ^9 J* y2 B6 H1 q) P; W  e
  105.   if(GetFileAttributes(filename)==-1) return false;
    $ ^4 M* g/ P# v
  106.   if(!(fp=fopen(filename,"r"))) return false;9 v8 s9 X- k2 m7 e2 v; a. X! h1 L
  107.   fscanf(fp,"%s",version);
    5 E( y0 g! K5 O! _1 t
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }$ A- U5 \/ q- }. s, i
  109.   while(fscanf(fp,"%s",version)!=EOF)' {7 d. p" J7 P
  110.   {% m& U" E- A9 ~; }, ]" B, i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 d' i7 a( ^' T6 M( G
  112.     fscanf(fp,"%s",file->path);& z% E) a3 q+ T( c6 g
  113.     ReadFileNames(fp,file->file);/ M- L1 X. }" d+ r7 e) @; G
  114.     strcpy(file->full,".");# r" v0 H, E$ H: Y
  115.     strcat(file->full,file->path);
    : R$ h: C! J. J; B6 H
  116.     strcat(file->full,file->file);( U* k& s9 a+ p* c: a# f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; G' S; b4 ]4 ?  K" O2 V
  118.     {4 i0 ^" w1 p- v. b+ Z
  119.       file->vers=(float)atof(version);
    ' s5 B* g! U4 {: b3 W2 v& u
  120.       UpdateList.push_back(file->full);
    - o# `( U8 O$ ?/ S8 t" R8 N( K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ F; m3 t# h$ d  e/ J
  122.     }
    / r( @, n0 X1 O7 ]- `% ?; s
  123.     else
    ( S- Q2 U. }0 u8 z* k2 v- _! ?
  124.     {
    9 C( ?3 s8 o. ^5 q7 W
  125.       olds=(*p).second;
    : Z4 J+ I! x$ u1 l8 W* S
  126.       if(olds->vers<(float)atof(version))
    * b" Z! \5 K" c6 @# {) p! J
  127.       {1 z1 B; t* m9 _) H+ Q: `& S1 _
  128.         olds->vers=(float)atof(version);* J4 ~" x0 J8 u7 _
  129.       }) t* a9 ?+ m) ~( k
  130.       free(file);
    : {. ^8 W7 C. r7 i$ y. }
  131.     }
    # Z- S0 i: e/ h8 {6 s1 r- s/ R
  132.   }
    ! u. y- q0 T; p% Q; e/ A8 u
  133.   fclose(fp);
    % O0 r( ]$ b! }, }5 i' y, g
  134.   return true;
    4 \4 p/ Q6 a: B3 d
  135. }( G9 e6 o+ F3 u2 I. v1 m6 x2 _! [

  136. ! ?9 a8 U: e6 l/ x* G* P
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    1 Z* ?; h; N0 u1 Z6 U
  138. {
    ! \& c  s9 K) R$ b; C5 k& z0 F
  139.   TCHAR  szFull[MAX_PATH];
    2 Y" W$ y( ?( G$ @
  140.   TCHAR *token,*inter;! @$ O. P- X9 Q# m% I, N; C0 g$ [
  141.   *szPath=0;' g, `# [% H& C; Y2 o0 k8 h7 c) q
  142.   strcpy(szFull,szFullPath);4 M; H& g7 T+ A8 V! x
  143.   token=strtok(szFull,"\\/");
    : [7 R; B: Q4 v( h" m2 t
  144.   inter=token;# T/ X6 r+ X6 ~7 M6 h) c
  145.   while(token=strtok(NULL,"\\/"))
    9 D/ I. p! g( c3 S& V% F3 B
  146.   {
    : F% e+ {' O/ e( b) q3 a
  147.     strcat(szPath,inter);, ]) M+ P; N0 D% H7 S9 n* s
  148.     strcat(szPath,"\");
    7 T$ @  z2 W3 U1 A7 c1 H8 h
  149.     inter=token;, t1 e) I, z+ d4 W
  150.   }
    : i8 g1 F  Z' @7 i
  151.   return strlen(szPath);* [) ^! J! v! d5 ?8 c
  152. }
    8 p$ E+ H2 J- v, Q5 }, ]+ h
  153. ; g6 g0 g9 W- x  d, g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)5 D" l5 c0 P& A6 X6 N9 E/ `1 f" n
  155. {" e+ o" |2 J  j0 K: O1 n
  156.   DWORD attrib=GetFileAttributes(Target);  f# p( ^7 }8 g6 o
  157.   if(attrib!=-1)* }& j# E8 v" d% E
  158.   {
    2 I1 _. y7 a: G5 x
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ! [9 |& D& |6 C# V4 U; M
  160.     {
    / c3 D) K# P7 k; `! `/ W6 N8 o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    8 X4 G' Z- x; i# O7 O: Q
  162.       SetFileAttributes(Target,attrib);
    8 S1 D8 a; G! a3 B* n
  163.     }
    & `0 `7 t( ?9 m( w( J- ?7 g2 T
  164.   }; _1 c( P1 u- K4 a+ o6 ^3 E& d
  165.   CopyFile(Source,Target,Erase);3 l8 W9 V) [7 ~0 H( E) q+ Z+ S
  166. }6 h$ r: g. [, H" J' K( ^/ q
  167. + U! x9 J6 U0 a) I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 q# t/ t3 L. S" ~) e' W/ [
  169. {- b* h; V- L5 G
  170.      FILE *fp;
    1 `& u8 L/ c- h; E$ x
  171.      char  szBuffer[8192];
    2 D3 r$ Y5 _( b; i; J
  172.   va_list  argptr;
    % g. j2 k" N! d) {- B6 D

  173. 2 ?- W& m* a9 P# v/ j9 T
  174.         va_start(argptr,message);( d- w, d" A* D$ k* D$ B8 C
  175.         vsprintf(szBuffer,message,argptr);
    * h! h% D7 a, r/ j% m6 r
  176.         va_end(argptr);1 W6 Q9 M# |, |' L1 ]% B+ k. U( |2 J
  177.   fp=fopen(FileName,"a");
    + J# ]& r2 E* _( l0 ~, v
  178.   if(fp)" e3 _( x2 w! G6 M3 o1 m
  179.   {
    3 D0 R% S* S7 a: M+ _& w, U- \
  180.     fprintf(fp,szBuffer);. N* M  i# n9 z/ N; K& m. n
  181.     fclose(fp);
    ' w4 }6 P$ Z* Z* c' a$ R/ @
  182.           _flushall();) b: ]4 S4 Q( k# m: G$ h
  183.   }
    ' T5 `( {- E8 I# I& q
  184. }
    4 C6 w1 i' V3 H$ _

  185. 4 k# D' D, s: N1 N5 W
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , q4 r/ k6 K4 _% E9 C
  187. {
    & J& L/ i1 p* M9 O' M
  188.      FILE *fp;
    $ ~0 g% |! G4 Y7 H2 M) C9 j
  189.     DWORD  attrib;
    0 ?. T% V# O2 r' i" ]+ k
  190.   attrib=GetFileAttributes(FileName);2 M, ?4 |1 i" H+ q
  191.   if(attrib!=-1)1 {( O( r: c( }& u/ f6 G/ A
  192.   {
    . k2 x9 V3 J9 o% ^2 V6 L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 c; `1 u/ G! u2 w. P" ^9 j+ X
  194.     if(!SetFileAttributes(FileName,attrib))
    & \, P) Q9 p2 B7 z
  195.     {6 ]0 }, P% n) {/ R
  196.       return FALSE;
    7 M& H! A5 b( t
  197.     }
    , z; E  g6 i% c9 R7 s
  198.   }6 ]6 {% W1 ?6 N+ @, ~" H1 b/ [) H$ Q
  199.   fp=fopen(FileName,"wb");
    4 K0 \, T2 V' Z! h2 x( {8 c
  200.   if(fp)
    2 k: p% G5 x+ t7 w# b
  201.   {
    " K2 e3 N& p/ ?* I
  202.     fclose(fp);
    + L, D0 h% `1 \' {# a+ H* {! K0 C
  203.   }
    # _1 q1 T! D  H1 t7 i5 f0 [
  204.   return TRUE;% z1 n8 ~+ B9 K8 X
  205. }
    4 R+ i" c3 v: `6 L% N
  206. ) |9 R- a% T: G$ s
  207. BOOL CRevAppApp::UpdateLocalVersion(void): i! y8 {" ^1 p4 f
  208. {
    4 N- x( K# j1 d& u" L8 ?" [
  209.   char filename[MAX_PATH];
      g3 z! n7 D: n3 D# T; E; H
  210.   LPUPDATEFILE file,olds;
    4 |! g* F; S8 e* r* g& K3 U! Q* o
  211.   std::map<int,CString>::iterator i;. S. `$ f' v! g+ [
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 N6 |' n2 c) _* G; M% j
  213.   std::list<CString>::iterator l;
    / D0 w1 G. y' b: `! ?. V
  214. * h/ y, l/ \: z5 H, l
  215.   if(bFirstUpdate), t; P" Z" a4 O4 p2 d
  216.   {
    % h% l! ]% b! \* _
  217.     dwCurrFile=0;+ t% Q3 e. ]/ M5 n
  218.     bFirstUpdate=FALSE;- f. w& a. {) a- o( Q: A' d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; w; s1 _; m2 p7 }
  220.     {% I) J- }7 Z+ b- z& L- s- ~
  221.       dwTotalFiles=UpdateLocal.size();
    % ]) `& n. ?! T
  222.       dwDownLoaded=0;
    7 W7 X  Z; z: q: K
  223.       bSilentStep=FALSE;
    , d8 U3 Y! L3 c( Q3 K  P$ |7 b
  224.       bCompressed=TRUE;
    * o/ Y1 E" c* C+ F3 F6 T+ I% u
  225.       strExtLocal.Empty();* V0 g# n+ T6 v
  226.       strFullName=(*i).second;
    7 k. J- O7 \' {" N1 D2 W
  227.       dwProgramState=AP_CONNECT;& R" D5 V8 q( H: H5 A+ d7 L0 H/ ^
  228.       return TRUE;) c: F1 n8 l  I+ w, m( J
  229.     }+ h" Y5 l! t! V( v
  230.   }
      O6 B3 O! `' H& l: W6 _7 f
  231.   else if(bRestartUpdater==FALSE)
    8 O% b7 W- A; e7 V, t& [+ a8 b
  232.   {
    % x/ \2 p+ \- D' r6 Y' B( A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 u# b% f3 I% z* B
  234.     {2 y/ F2 Q( P: g4 F3 h- w/ V
  235.       file=(*p).second;4 `0 L* U0 I) J7 l$ F/ }+ @
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* k" U- h8 [5 R5 P7 L
  237.       {
    ; q. _4 W: B9 ]8 b$ l
  238.         olds=(*p).second;
    0 C* X3 P! m) u1 G' `# u: B
  239.         olds->vers=file->vers;# t5 m( e4 ]" ^( f& o3 }
  240.       }
    # x% x% t% {& j0 h1 S% C/ S! Y
  241.       else
    2 V) i& t' y; e. i4 b
  242.       {
    # a+ r2 \4 S: W8 _( o) U% Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + l* _" _2 O0 m3 G, V
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' V& ^. s: @4 h* }" X5 g# }" |
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));1 I' n) e7 p4 V$ j  q
  246.       }
    - f4 z% g& Z8 ~( _2 [( J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");; ]. r. X0 X9 [9 g
  248.       sprintf(filename,"(%s)",file->file);
    ; v3 ^2 c, b# ]! ^/ V! \7 n7 d2 b
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : e; \) Z1 V; W& W; ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ! [5 V% {# i, E" K: v& h' t" M( w
  251.     }7 e6 d3 P5 ~! V2 b
  252.     dwCurrFile++;
    9 D6 w* n0 Q, h
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 o( W2 E* j! o7 [
  254.     {# `2 c! r, e% H: R
  255.       bSilentStep=FALSE;
    : ]  ]9 k2 s. M( @0 K# _1 D
  256.       bCompressed=TRUE;3 Z% g7 {/ I; |4 b) Y$ a
  257.       strExtLocal.Empty();
    6 k0 z: g1 n9 ^
  258.       strFullName=(*i).second;
    & u! s% `! ^+ l
  259.       dwProgramState=AP_CONNECT;# a' e% I1 v1 Q) {) p3 a8 X: j( K. O
  260.       return TRUE;
    ( n& R. M6 T8 S# m: e; G3 i! q' [
  261.     }
    . c- A- F# `* O) W
  262.     if(!bRestartUpdater)
    : u8 U! U# ?' g, u7 j1 ~
  263.     {, u# X/ u! r" \. e. _) W1 N* C
  264.       int iCurrSize,iFileSize;
    ' C, U$ Q; F% m% D" Z  N0 Z
  265.       iCurrSize=0;
    . C7 R" p+ I. H1 f: d
  266.       iFileSize=UpdateList2.size();
    : ], E1 I6 e0 l6 A. T& _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");( S* ^# {3 I0 _8 {& j
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % \% f- p) d/ f7 x1 ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    * f! s7 _  V% `  b. l9 t
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 {; m/ Z$ v2 {' n  }+ p, y
  271.       Fclearf(".\\update.dat");  n. d: O1 q! }) Z- \0 D
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; r, B3 P/ B- x+ |* e7 I7 I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- K4 X3 E0 e) [0 n
  274.       {7 K4 m2 L  a. ^0 w$ h
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    % w* S4 x6 p) {* g
  276.         {
    * [* R  K. b& l) ]$ c
  277.           file=(*p).second;
      {, _1 ?( i2 u8 h; C8 E
  278.           sprintf(filename,"(%s)",file->file);
    4 f( W5 F/ u! F
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # P* b1 q6 u7 H. G, P; o
  280.           iCurrSize++;
    & p* _) X/ B* K7 u9 L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));5 y- t! C% x5 ?- j" f& Y# [
  282.         }1 L( ^/ }- \- [- R# P# g# u) ^( f
  283.       }
    & k" g  `* C# n1 Q" t4 d: z
  284.       unlink(".\\update.txt");
    - Y# C0 C: _, x; R
  285.       unlink(".\\update.tmp");
    9 j( o+ d+ i" n, o% u5 a
  286.       Fclearf(".\\checkversion.dat");
    0 A- i, c4 `6 a: U
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);/ j8 G6 [. C! \, o6 T
  288.       if(UpdateLocal.size())
    ( Z' l; u/ }4 E& V' `* A* T4 l
  289.       {/ Q6 b% R8 z; Q$ \$ J2 l& k
  290.         UpdateLocal.clear();, u; C% j- Q+ g! N# O% i: y
  291.       }; @* B" r2 c3 L, K5 H2 F( z1 e
  292.       if(UpdateFile3.size())
    & I( f3 e% Q) u3 U7 z
  293.       {
    6 X9 ?1 Y- Z' C4 n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * v4 H" N3 h6 t1 R
  295.         {6 |. N" Q1 k  F, V' ]+ @) r0 w
  296.           file=(*p).second;# v& k7 k3 R# x; _" _
  297.           free(file);$ N) _& L8 O: T; g
  298.         }0 _/ _' s" ?' k! j0 D6 o
  299.         UpdateFile3.clear();
    3 _& i$ m7 z( }6 G3 P$ p  |
  300.         UpdateList3.clear();
    - G/ s2 s, ?5 O* F. y2 z$ z1 o8 [
  301.       }+ [8 B, |! q+ H+ u2 K# V8 H3 J
  302.       if(UpdateFile2.size())
    : q1 ~$ e1 H" l% A; E
  303.       {
    ; X0 i2 s) k+ y7 Z+ c3 W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 M8 T1 ~, N8 A) B& F/ g/ V6 k/ p
  305.         {# _2 K; _# C7 u8 P- u
  306.           file=(*p).second;6 p8 _" X8 n3 C9 g
  307.           free(file);  Y2 m+ P# R& o: E* c8 s; C4 r
  308.         }: A- u7 C& C- {, m+ j
  309.         UpdateFile2.clear();) F- R( {) j7 d9 @
  310.         UpdateList2.clear();2 d  O& G" [7 r5 }, [- p6 [
  311.       }
    % b! j+ g- b2 M  u$ _+ d- U0 H
  312.       if(UpdateFile1.size())" G& A6 K  }. x# P& W4 M8 P
  313.       {
    , Z; i+ b& ^* k2 {$ ?2 \  N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- W3 ^, v8 C6 ]  I! ?
  315.         {
    3 e$ ?3 X& L/ U5 l+ i% O
  316.           file=(*p).second;
    4 U( m  C. S& B) r
  317.           free(file);( L1 I" q' T* p4 M% e9 T; u, R, ?
  318.         }6 C. E1 H9 h0 E- C
  319.         UpdateFile1.clear();
    ) Y5 y# K; u9 n( |* ^
  320.         UpdateList1.clear();0 O$ c* t2 @: D* m- v0 u
  321.       }# {) t5 b5 L! N. Y- G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
      e, ?6 w3 d) y! }* V
  323.     }8 S  A' o, J- `( r
  324.   }
    0 ]2 O& G7 W/ n
  325.   return FALSE;5 ^$ E; v8 e, P. E; z1 h& B4 a5 }3 [
  326. }
    , t2 N9 D8 {4 V) y% Q
  327. ' V, T( _9 }# D9 G+ y9 L0 @3 p+ K7 p
  328. void CRevAppApp::ClearAll(void)
    8 [! m' s3 P" P$ ^8 _
  329. {
    ( @: S" M6 v/ M: x1 b/ Z* `2 O
  330.   LPUPDATEFILE file;, T) b& h7 T) q7 h; `" G
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) y2 o1 u) Y, r

  332.   O$ e1 r, `  ^) z+ x
  333.   if(UpdateLocal.size())
    0 s, V* W8 q. g& O' m
  334.   {9 @& o3 ^* C. a; ]4 h0 U
  335.     UpdateLocal.clear();
    + J  q& n, U8 y0 S4 S
  336.   }- V- x9 e: @/ M" K& u/ q; S/ E( u
  337.   if(UpdateFile3.size()), c2 s3 h' W/ u; l
  338.   {- C: T6 C& D5 w5 i7 [
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      U; X1 w6 x1 @5 A
  340.     {
    $ v! Y% P+ J7 F$ P
  341.       file=(*p).second;
    2 R2 l; G7 |4 H' T
  342.       free(file);+ a3 ]+ ?1 Y, F' M' u
  343.     }8 @: s4 p& Y0 k$ W; b
  344.     UpdateFile3.clear();
    8 g: M7 Q/ v% Q
  345.     UpdateList3.clear();
    , E* }* d0 Y$ K# |. E+ Z. j7 a
  346.   }
    9 u) r& h- q! ^6 G/ h. Q9 O
  347.   if(UpdateFile2.size())7 Y. p! j5 A$ M- w+ l2 G8 G
  348.   {! v  T! n  U7 j9 ]7 G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , W) o* E8 J9 h/ g9 w% i# @
  350.     {
      ]6 E/ L2 B8 U  B; F, G, U
  351.       file=(*p).second;; Z, z0 v2 h; n# n5 T7 r* i* X
  352.       free(file);1 f0 S$ n6 C  z6 P
  353.     }
    ! U3 x, p8 |& A8 A- ^" C+ j
  354.     UpdateFile2.clear();# a: N) x( o$ E
  355.     UpdateList2.clear();  n' J% R2 u: _' f- i% P
  356.   }6 c2 W2 U/ w* Z3 c/ n
  357.   if(UpdateFile1.size())" v) g5 N, b1 x7 `/ W
  358.   {
    # n$ W. {- U& ?" \* q0 t2 o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( S3 E* o" i9 o- t
  360.     {
    6 l1 t7 d0 ^* }$ ?
  361.       file=(*p).second;# K; O/ M( |- A1 s, y* I
  362.       free(file);- _3 K: i* w# [, t6 V
  363.     }
    ! B2 ^1 Y( _( V; @# M
  364.     UpdateFile1.clear();
    $ M( g/ i) w+ L, g& u8 s' Z" K
  365.     UpdateList1.clear();
    9 j$ [  s  {1 g% y
  366.   }
    ! F* |, U3 S; K" v
  367. }  " s- w& m4 `- k- U$ j
  368.   
    ; m" }& Q& A. X( b$ p4 d( z
  369. BOOL CRevAppApp::CheckLocalVersion(void)% e# p/ k" I4 ~' o9 X) n& s
  370. {1 j# ~, \4 B, V7 y
  371.   int c;; ?0 I0 N! i) C; O
  372.   LPUPDATEFILE file1,file2;
    9 V' S% ?! @8 a5 o; z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( W4 f4 t7 I' r3 G
  374.   std::list<CString>::iterator l;
    6 J1 o+ b5 L" `/ L5 i

  375. + S  a- {  F8 y9 k- Q% T  k* k
  376.   UpdateLocal.clear();
    0 w. m. I! d* ^# j0 Y# H) q! B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);, C3 r( h' m* L5 I4 J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " P0 Z- [/ g6 i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - \% s5 Q' t; G" W  {$ v: R- m5 [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ b+ H, c) [$ s) c5 I4 o9 U2 b
  381.   if(UpdateFile3.size())
    2 i% R) L! n! |3 Q6 ?
  382.   {& ^' `. D4 r. T9 L, p
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    4 P' {0 Z4 c6 P- {) x
  384.     {. P! v" S# f" T& q
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' N5 Q7 @! e" v) G8 k% H& r, j
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( T5 L9 E# o+ x3 r& N1 Q) x
  387.       {( ^7 v) V3 S: i" m# K/ W
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 q, Y6 u6 a% ]% Q* Q: [. u! E
  389.         file1->vers=file2->vers;
    # h' `* N$ G% T0 {, l0 S
  390.       }
    1 M3 W1 l: p. o; W0 |
  391.       else
    3 c7 p, w- ~. R4 I# e5 z
  392.       {6 f# M2 \! z$ X: [
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 N: A+ [# J8 d4 j, t9 q$ k8 ]9 e
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  B2 I5 o4 v& f/ k1 c* u
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. R; l2 r8 [' [" V
  396.       }. W; C5 C0 |/ ]
  397.     }# c  E6 m. D0 U! P' e: Q  C
  398.   }; e) [' I4 `8 I1 `* A7 D8 s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / }2 p/ ?9 {% t( ]8 r% N7 {+ `
  400.   {" l' S, F( h" d' F
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# ?2 L) P1 l6 k/ Y# c+ ~
  402.     {9 E& K% L$ o7 O0 x7 l/ q, x- a
  403.       file2=(LPUPDATEFILE)(*i).second;; k$ i3 g4 D4 b  t
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())1 P' [$ @( P' \
  405.       {2 N4 ]+ X1 }2 X) m5 D
  406.         file1=(LPUPDATEFILE)(*p).second;3 J/ J+ p5 m. [
  407.         if(file1->vers!=file2->vers)6 a6 f  {. u: j# f. n1 q# F- y8 i
  408.         {. @- x0 w2 Q6 P# _5 Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % o5 s( x5 O* Z; X- I
  410.           c++;3 Z' ~# O* q9 R. x# v1 ~' y
  411.         }
    1 A4 V0 ?) L& s% e- Z
  412.       }
    0 o# ~0 l' z/ W5 _" A- w" k
  413.       else
    6 z7 A) e8 J! t7 B' y  X  p
  414.       {
    " d# s, l( o) n2 G  Y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 |) Z0 U5 h# q! v
  416.         c++;1 E8 V+ f- a% E/ A* F, e5 m
  417.       }' q4 t8 e3 J; p, u; {9 ~
  418.     }8 ]' j0 ]% m4 G3 E  F. V- ]; O6 |
  419.   }
    $ w, u) x3 ^: Y7 _
  420.   unlink(".\\DownLoad\\update.txt");
    9 |" H8 i4 l* B! O
  421.   if(UpdateLocal.size()) return TRUE;& ]( M1 {! Y9 ]3 c5 A, u$ c
  422.   else                   return FALSE;! w! N& h9 C' S" m7 q, \# C
  423. }
    $ z% i0 O6 i$ }: \2 ~# G6 p
  424. . ~9 [0 A9 m5 q5 C+ C, V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # l3 ~$ o5 b" [5 `( e
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( T( b) i% q, g
  427. : C' w9 `. H% X" D& E: `/ Q! U6 W5 n0 c
  428. / _# J1 I0 \! W, O, S) m; Y0 }

  429. 6 d7 K5 d! Y* k; ]7 d9 _, G. V
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    . X7 w7 X/ V+ H* b, H
  431. {
    6 R. r( K! Y! n. Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' B. I8 D  i/ ?) ]4 p* a. f* N
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ K& t  }1 ], v9 }" L. u5 o
  434.   {& g# \2 @5 m& o4 ?
  435.     char szLanguage[50];. G7 h: u/ K  ~+ R* S/ w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 u: F& t# {! j' x+ D
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( l7 H& D4 F$ n; |& l
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) Y8 V/ C) w- A2 i) [1 k
  439.     else                                   m_iLanguage=ENGLISH;
    # F/ t) ~  g# z- p
  440.     char szRegister[100];% ?% c1 Y: F- S
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* e9 E, R7 q' C* U
  442.     strRegsName=szRegister;2 R: e, d" }; B' I+ E, j
  443.     char szPatchURL[100];
    & Y' U5 J$ z# T+ c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - K8 r2 ~& i0 Q' g0 }5 n
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' Y4 Q- O9 ^" V9 X1 ^
  446.   }
    - [% G6 K: @; }
  447.   else
      f$ x. ^3 p; F4 h- S
  448.   {" ~" t9 g4 z8 n, Y' J" \( B* a
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 C9 L6 v4 o! L. X# s
  450.     strRegsName=DEFAULT_REG_URL;
    , B- \1 d- A" `2 N  v
  451.   }
    4 u9 F7 {/ b* g+ n
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ N; @& n/ i5 |# C) @2 S
  453.   {
    ) B  U! M. ~' e" e  j
  454.     char szIP[50];$ W+ A& |* j6 x  Y4 ~4 g0 a( b
  455.     char szDIR[300];
    9 D4 T, N( S( e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 D8 F  a0 D$ g8 J! P& o
  457.     {
    0 I0 ~  l! ]; \3 L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & o1 V# w4 ]' ~# j
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    " x6 X: A6 t' c7 @7 k/ @3 Y( X
  460.       strHostName=szIP;- `' ^0 I) |6 B% w
  461.       strHostPath.Format("/%s",szDIR);& h' U; h* u2 H2 m- }: ?. G( U  ]
  462.     }9 M6 J. @- b4 c6 y
  463.     else
    ) f2 N8 Z# P: ?" l6 Z" X& Q
  464.     {
    0 h/ `: X' }9 n
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! c3 I/ |3 L/ D* J
  466.       {
    . r, h+ y. S# x, Z6 j7 L! {' O
  467.         char szLanguage[50];3 U; S2 |$ h7 `# }5 R
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");6 a. a: k" R& z( q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ Z6 V, G* F0 }7 S# Y
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;: s/ j. g! ~; }2 ^- o/ H# D
  471.         else                                   m_iLanguage=ENGLISH;
    3 k" q. {8 L! a2 V- W; \4 A5 q
  472.         char szRegister[100];$ E2 P4 ]0 O6 j6 d$ _* D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 v" e8 ^5 }5 X% q; S$ ]; S
  474.         strRegsName=szRegister;
    7 L" B& d; K7 T) E0 |) ?: P
  475.         char szPatchURL[100];
    0 S5 V2 ~' [) b& e# p: {+ `: z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( ^1 B. Z! j" _+ a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( M9 x2 q8 p0 j$ r. l+ F- E
  478.       }% ~3 s0 P) h; g. }
  479.       else8 \) ^3 q& F/ S) t
  480.       {
    % v8 s8 \, H" }( u, k; Q% U
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + j' t4 u$ Y1 Q( X' S8 t6 N# G* `
  482.         strRegsName=DEFAULT_REG_URL;
      [: A& q" b: Q2 T* P6 R
  483.       }
    * Q) R3 B1 K' G
  484.     }" Q/ l' `% j' Q0 d. |7 D
  485.   }
    4 ~$ i/ S+ B$ o* V
  486.   return true;2 D& z; k! C5 {3 z3 J
  487. }
    8 B- r* c& a4 L7 Z; ^, u8 u5 Y
  488. . R) D) a; ^( ?5 @) {+ W9 \
  489. #include ".\ZLib\unzip.h". r/ P& q7 ~: d, s1 d! Y2 A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ i: e3 I& `6 Y- |0 z# u
  491. /////////////////////////////////////////////////////////////////////////////
    . B- f( p: [, L7 `8 w8 @4 C
  492. // CRevAppApp initialization
    & b' W6 m% l( b2 [, O

  493. 8 V/ J* v% H+ O
  494. BOOL CRevAppApp::InitInstance()
    " @+ B7 S! Q& [, l; P( N" G
  495. {, ?) A+ h3 s. P  W4 |+ }3 A( V. P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( r# q8 z! [4 T2 R$ V
  497. 5 q: S, H3 T) V5 O. r4 k
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    % U9 w: a1 P" u9 {8 F0 [+ @3 Z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " a: J' m' Z$ w8 U3 G# g
  500.   {/ n5 }! e7 b* ]  _4 z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    + N* N& P2 t  |- O: t( F
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 A0 \9 O& E( v4 ^" o" ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 [" ], h9 n" A  N3 Y- B4 A+ Z
  504.     {
    ! x! t0 |( P9 a4 H1 s, v" p% P
  505.       strcpy(szPath,szPathTarget);
      V4 u$ w5 {3 z- C
  506.       SetCurrentDirectory(szPath);5 G+ ~3 ]! y( l0 F6 X1 n
  507.     }
    " S& B3 ~  B5 F, O, G
  508.   }
    , a" B; @/ l! o5 D' y
  509. #ifdef _DEBUG+ k4 i% I; Q  r6 i7 c* F0 q8 W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 C7 t& N1 ^0 ]- h( E
  511. #else) I4 X8 J: M# c2 o6 j/ a) `
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / _0 M' Q* _: J# c# r) _! c
  513. #endif  ?( D$ x/ ]+ m
  514.   {
    2 ~. ?0 c: {0 {
  515.     char tempFileName[MAX_PATH];; j6 X4 c! d" N3 U9 T  H
  516.     strcpy(tempFileName,szPathSource);% S) H# c7 K- i; j: m0 Q7 A
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 [3 }/ h% o2 F$ m* j
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    7 f4 ]5 u- f8 }
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * y! N; S& Q. _& n) A, S5 W  [: H# n
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # u0 s4 i6 V- w3 c. _( p
  521.     return TRUE;* H! m. J; D: |" v8 f, N0 e
  522.   }
    5 d! t+ v% [# ^$ ^9 }- m( l% @6 S. x
  523.   // Nuke 0118: Delete run.exe5 R) P7 `" C( S2 @6 S
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );& B2 A( E( Z0 m- V5 [8 J
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    8 S, X2 X8 ]3 l4 @
  526.   if(!ReadCfgFile("Config.ini"))
    # A1 f3 t8 L5 ~+ p( g
  527.   {
    ! g2 n, R# g5 i( x$ l, x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);+ X! C6 W3 p) S& ~
  529.     return TRUE;( c: G7 L1 V4 D# @8 m0 d+ m
  530.   }6 \) ^) Z9 k! m0 d& Z
  531.   HANDLE mutex;. S! O  K  X! `- z; ^
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    + {8 C6 p/ d% i. Z
  533.   {
    - b1 n5 f5 Q3 B; f. R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 q6 E9 v0 P2 k' D% e
  535.     {  \" V% m! L2 }. T1 i
  536.       CloseHandle(mutex);+ w* F% I2 g# k! x' L2 B
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. a  E+ P1 m0 R' k3 e
  538.       return TRUE;
    / |5 x! x2 B9 o- K( F
  539.     }
    / V7 e$ ^9 C' p3 B6 [" n+ _
  540.   }  : F! L: {# B$ q4 h, _9 B
  541.   CloseHandle(mutex);9 D; A  d7 Y7 u5 `6 B8 S9 ?
  542.   ^/ m, E4 V* r8 H: s( v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    * I, x7 Y( J8 n5 r
  544. / c: i* F4 x% f% E6 k+ D! D
  545.         AfxEnableControlContainer();
    - `: K1 P& o" m6 z2 _  F& p
  546. 6 F! N/ @  V: J7 R. `
  547.   bCanUpdate=FALSE;
    + D& O: ]" B) ?" ]" O. ]" a
  548.   dwStartUpSteps=1;
    & J# i2 g% N( I. c
  549.   dwProgramState=AP_NOTHING;9 t: V6 Q+ ?9 \9 I0 E

  550. 9 J4 h' h8 X% C( {, E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 }0 t( o" t. o% |3 @
  552. " o$ b5 m3 Y4 r
  553.         // Standard initialization
    5 a5 j, m) K' d$ f9 _- P6 e
  554.         // If you are not using these features and wish to reduce the size' O" x( c7 ^9 @  Z4 D4 Z
  555.         //  of your final executable, you should remove from the following3 O, O7 a0 L- m, p, s. J6 [
  556.         //  the specific initialization routines you do not need.; ~! a# n& p( v; Z9 n( y

  557. ( m( d+ K, U4 y  ~" ]; Z* n) Y1 g
  558. #ifdef _AFXDLL( ?! b0 e/ b! i9 k/ w
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) p3 ~2 I! t( z3 @
  560. #else4 j5 j( ^7 R8 v. _; E2 i4 [$ }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , p2 k! t2 ~& p% Q9 {) g
  562. #endif
    8 x3 w6 [% i/ y$ B  ~4 R
  563. 1 m  k2 f& \  y* s& @4 {
  564.   dlg=new CRevAppDlg;
      {4 I# `) U/ y7 T2 m
  565.   dlg->Create(IDD_REVAPP_DIALOG);& ^6 a4 E- Y0 g) L
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % S' a5 v, `! z* \
  567.   m_pMainWnd=dlg;
      g  \& F; ^4 d, I2 b* S; L% [
  568. 8 r; ?9 l+ l1 @0 U
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);3 k, P2 L, s* w4 a1 X/ c
  570. ; Q/ T' u" W; r) L/ J% z3 I
  571. //  GdiplusStartupInput gdiplusStartupInput;
    % f  }( p# @: H) F
  572. //  ULONG_PTR gdiplusToken;
    4 u( Q7 k# c: n; f" l" _8 a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. H0 l" R" ?6 z' v
  574. ; Y5 \7 g! }7 t1 @  j) W% l4 h
  575. //        CRevAppDlg dlg;
    5 D! a" q- W9 L3 V
  576. //        int nResponse = dlg.DoModal();$ Q) z% h- O4 m9 ?1 C1 I
  577. //        if (nResponse == IDOK)
    7 B9 i+ V, P' K$ R
  578. //        {
    3 h/ \2 n' M$ S* O) L+ Q
  579. //                // TODO: Place code here to handle when the dialog is1 s" X3 j# u( k
  580. //                //  dismissed with OK
    9 Z4 d$ G, I' n& k; @; O, n5 x
  581. //        }
    * W/ x+ R/ x8 E" A! k* e; i
  582. //        else if (nResponse == IDCANCEL)
    7 I+ F; r, x6 f$ o! G
  583. //        {
    ) {* x: h& [8 j5 x& g3 R7 C
  584. //                // TODO: Place code here to handle when the dialog is
    " J5 Z$ v) c( q# [3 m, p
  585. //                //  dismissed with Cancel7 ^: w* g, n0 m1 y! E- R
  586. //        }
      h! x4 F/ n" l

  587. ' i9 {& ]2 `" N6 `& o* Z) J
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    " }# I3 Y$ b8 {  N( R, q1 o3 v& S
  589.         //  application, rather than start the application's message pump.4 I. C8 g# B7 m5 K8 U4 s3 _
  590.         return TRUE;4 k/ N2 V! I0 K  t# `" s
  591. }
    5 L' S8 ]- {9 g6 C
  592. & }5 Z4 W0 o3 E+ Z( \3 k- d
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    - M4 B" m. _# E* Z4 _
  594. {* q$ C" k: Z3 ]+ i, r
  595.   int i;
    , Z  F$ j; P$ H4 N( Q9 ?
  596.   char *szRet;9 e$ j1 m/ [2 e# Q# T
  597. ) K" I- q8 T( z/ R4 Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    4 k4 U7 B8 ~3 _3 R* c: f; I4 ^
  599.   if(sztoken)4 }! [9 F/ x" u! M2 B
  600.   {
    - W* m. E) o" _# g
  601.     szRet=&sztoken[itoken];
    ' y* i: h  g0 \7 Q+ N6 |
  602.     while(sztoken[itoken])
    1 W0 n, n2 Q6 Q9 D
  603.     {, L& t8 r$ H3 `3 p! n0 U: y
  604.       for(i=0;i<(int)strlen(token);i++)
      A5 }. J: B" F$ B
  605.       {
    - ~9 ?6 a: Y: V- P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 E* e* Q6 X  L+ J5 y. V6 Q
  607.         {
    1 l& f: F4 a3 C6 w7 W: b
  608.           sztoken[itoken++]=0;
    # |1 [: Y7 L: {1 Z" T! v6 A
  609.           sztoken[itoken++]=0;
    * u4 c  S0 F6 z1 H9 J# {: u' q9 ?
  610.           return szRet;
    . m" n4 D' T8 y- _0 F: Q
  611.         }3 J8 z; Q5 V/ q
  612.       }- {, ?+ {) X$ D' S8 c, q' A  ?
  613.       itoken++;1 g- K) D9 y0 f
  614.     }
    ! q  a9 `, x0 x$ {
  615.   }
    - o+ B) h6 Q- x
  616.   return NULL;
    * r( {0 _, [$ I6 r, A( `
  617. }4 t8 B  u3 ~6 M6 i

  618. 1 Q) F- A" y/ ?1 P
  619. void ProcessProc(long Total,long Current)( B9 K. q1 {! x/ F7 F3 }
  620. {7 j  m9 R% K' \  s" U8 I: \
  621.         MSG msg;
    + {" H- d! s6 a+ p7 Z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ; D+ q9 Y4 Q# K5 N; h
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    * v7 T9 ]8 K9 P# h' Z9 c7 b
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      ^) G" e9 C, }4 N
  625.         {
    , U. ~/ }" h6 ]6 W
  626.                 if(!GetMessage(&msg,NULL,0,0))$ H! r5 w0 l( ?% h& e7 u  ~
  627.                 {) E2 z: s1 |; g  X# N
  628.                         return;
    " F5 a6 z1 [! Z. q$ L5 G
  629.                 }: Z) E* O! L" m4 `  K+ A
  630.                 TranslateMessage(&msg);, E9 f# r# ~5 ~9 k: D/ t( A, F
  631.                 DispatchMessage(&msg);0 P5 S: F$ z8 R- R6 f- ^- y
  632.         }        $ L& u" L% B/ y; l
  633. }
    7 @" }, k) E8 O1 t  G: a% H
  634. 4 W$ _9 X8 H, i6 {
  635. BOOL bFirstChar=TRUE;  B1 s: l( @# p6 t- p6 O; y

  636. ; z, H: j+ v9 E# b0 |# j
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 S; S! R  C3 W4 n
  638. {
    9 R0 w, k3 h5 _
  639.         // TODO: Add your specialized code here and/or call the base class2 o) O' |# d4 r5 @. \" b
  640.   switch(dwProgramState)
    & p' q+ b! V& E* R. j
  641.   {' Q1 F! c9 x' I* i% ?$ K! y! t% {
  642.   case AP_NOTHING:1 d- q6 a0 |+ d- J1 {8 X# C0 x0 u
  643.     switch(dwStartUpSteps)
    % {' l: C; m/ P% R
  644.     {
    ; O- F/ p+ a6 \! }5 J" u* {# ]
  645.     case 1:. L* R4 `( x% o% o
  646.       {& S. S6 i; K' ~7 _$ z& p
  647.         int i;4 ?4 H& d1 I2 G4 d' l3 A: A+ I
  648.         CDC *pCDC=dlg->GetDC();- R7 c9 y& M4 p' p7 {
  649.         HDC hdcwnd=pCDC->m_hDC;
    % B, i% x, n* [8 o1 D* k# _
  650. //        Graphics graphics(hdcwnd);
    $ u0 b! U3 p% v; s! ^; F8 s
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    : o6 `/ [+ p! ]+ @! I  ~
  652. //        INT iWidth=bitmap.GetWidth();
      U; |% e" v# O: P
  653. //        INT iHeight=bitmap.GetHeight();- V$ ?$ {1 t  t
  654. //        Color color,colorTemp;5 p" L+ n6 T7 P2 V
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    : n  _3 X; Q7 l2 ?  d" }( u
  656. //        {
    ' T8 `) L- h. x3 p- f. t$ z* {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % z+ F" a4 H$ a, T  W( ?$ U
  658. //          {+ ~2 i% W2 x7 C2 K& ]# n6 j4 H/ x: S
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) O( Z3 `1 }' d
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 @* O8 g" \8 e/ n7 C# Z+ A: g
  661. //              (BYTE)(255*iColumn/iWidth),
    ' E) b2 m9 I: r' L' R' x
  662. //              color.GetRed(),
    * p, q7 Z7 y( V, I
  663. //              color.GetGreen(),
    9 Z' u+ O% c. O
  664. //              color.GetBlue()));- b& _9 g6 s" I$ ~
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 u( M) x5 m; h) s; l# }" g
  666. //          }
    & c( e) I* D' O4 r# `9 e" k  K6 c
  667. //        }' e  [4 |0 w6 H6 C* ~% R
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);# @" [, E8 V& S, B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& U& J* ~+ r/ ?& e" ~
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: v, ]  [- \2 i6 Y- O& V
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! k7 n' Y6 J- s+ q4 b( q# D0 _  B
  672.         for(i=0;i<240;i+=8)! Z: G$ F3 s4 j& v! s6 D! Y  b$ K! f
  673.         {
    " k: Y" _" y" A9 m; ~. f/ L9 V
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 H8 I9 R$ a; V' _
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ [) n* B. N( x! m: d4 }1 n  ~
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);' n7 I5 ~2 f' v5 Y4 |
  677.           Sleep(33);1 d! a* P& c1 W# L; w, X9 e( I
  678.         }: L! z9 Y3 d! |3 G3 `- X( ]
  679.         Sleep(1000);
    5 c' ~1 F# Z% v+ y: q! [) k; L
  680.         for(i=240;i>0;i-=8)
    ; Q3 l6 ^+ w* w4 @
  681.         {) ?  d+ M2 N9 ^7 |; `1 [& U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 W3 A2 N; ]5 p; G; ~) c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 O6 S" L0 l* S) T% l* N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: K) _% [: n' L2 Y- ?
  685.           Sleep(33);
    , \  j# b7 p* [9 v* Y
  686.         }1 M  s! N, M/ \) Z& U4 A3 v7 m9 N
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 R' Y: U6 Q- J
  688.         dlg->ReleaseDC(pCDC);" }2 J. J& n0 i: k. H! e
  689.         DeleteDC(hdctar);
    8 a6 [- p( N+ K' f' m) E9 z. X
  690.         DeleteDC(hdcsrc);
    5 x/ y" z; A& [0 t" I7 n+ v
  691.         DeleteDC(hdcorg);
    # V' B2 r. E: S8 _
  692.       }
    6 L4 V: P+ S  C- i* A  \$ x/ _. N) V
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    * S5 S; k& V8 p; R7 v- ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 |+ ^' f0 ~2 E5 R5 S( }7 m  i
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");1 `7 G" ~0 s0 J2 {& b1 N
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 [' A4 M7 k! Z- t5 U  e
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 o& w8 e3 u2 w' c' J" q" H6 l
  698.       if(!Dn.Connected())/ [) K( O* D+ w+ k2 ^" x
  699.       {! \1 r. f( b$ W& ]4 i8 l- D! m1 o
  700.         dwTotalFiles=1;
    ! G# O3 c& H3 w4 z& h  j
  701.         dwDownLoaded=0;
    . o& h% c! q& L' V/ c+ V# i5 i
  702.         bSilentStep=TRUE;
    2 ^* u% C* T9 ]: e9 I1 m( D4 ~# q) t
  703.         bCompressed=FALSE;' x8 r# t/ V1 Z: Y
  704.         strExtLocal.Empty();
    ) Q1 i1 b# C0 X! _8 |
  705.         strFullName="readme.txt";
    9 b5 }% |8 J& u: R9 J
  706.         dwProgramState=AP_CONNECT;
    9 }% F1 W$ w( q0 Z0 n- f/ |
  707.       }
    ( g7 O% ^7 D1 \- n8 Y7 r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. F' g2 m2 k; A9 Y; B& T
  709.       dwStartUpSteps=2;0 v. I# H; x% r
  710.       break;
    7 V4 B7 S$ a5 e: X8 Z* Y/ r
  711.     case 2:
    " n5 }( |8 F  N0 _
  712.       {
    6 P$ p) K% |: `
  713.         int iEOF;" {3 [- a7 f/ A( Z5 u- ^
  714.         FILE *fp;
    6 K& F! e' Y2 j/ ?3 |" L7 g
  715.         char szString[512];
    / L; W. |/ B( r' ~4 ?3 n9 w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 r3 K- ]0 d. `6 r6 _7 t
  717.         if(fp)
    / s# ?$ k. n1 Z
  718.         {
    " ~  T, \$ r; p" i* C
  719.           do( g8 u$ \$ l  O
  720.           {
    0 ^; e5 l$ X* b9 a4 ?2 Y
  721.             iEOF=fscanf(fp,"%s",szString);# \6 p* j) I: p
  722.             if(strlen(szString))) y# N) G3 h6 w0 o! h
  723.             {( }/ \5 N) V( \3 t% @# f0 s6 g# f
  724.               if(bFirstChar)
    2 o/ m" D/ O# n  w: ^
  725.               {3 i4 _1 D" \; t, h; p' U
  726.                 bFirstChar=FALSE;) q8 @  Q4 G: h* g2 I2 w) p
  727.                 bConnectIsBig5=FALSE;0 g/ ^0 e- E: r( S! {) m; `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ i% j; n/ o, H6 m5 I$ a" k
  729.               }
      v9 {# `* V( ]
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 `/ X3 [$ p/ B9 Q/ t
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    $ g# l7 \8 T+ c9 e: o
  732.               dlg->m_ListText.AddString(szString);
    " O& b- A# B) q3 u$ {2 _5 s: u6 V1 G/ D9 J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / w# j! `. r# @
  734.               *szString=0;6 i6 `1 d# E0 ~0 [2 ]1 S1 v( r8 ]
  735.             }7 |2 i( S6 Z+ n1 \# @
  736.           } while(iEOF!=EOF);
    , e0 j' d6 |  n% s1 ]; z# w6 Z
  737.           fclose(fp);4 }% a$ q6 s& a
  738.           unlink(".\\DownLoad\\readme.txt");
    / O8 [! @2 K; j" I
  739.           dwStartUpSteps=3;
      v' t  O* ^( W) Q8 B1 _
  740.         }
    , Q/ X5 R2 Y8 A8 w: d) C
  741.       }, l3 m3 K1 j( E0 T! a4 D
  742.       break;0 j  a% E& M/ v* g* }8 y) u( {
  743.     case 3:
    * k9 v% n3 L, n6 s0 N) F
  744.       if(!Dn.Connected())/ A! U: D; N% ]
  745.       {
    1 h6 L% Z: @* m" m6 D+ B
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);% |7 L6 C9 {/ s- N! y+ Y5 e) V
  747.         dwTotalFiles=1;0 o) l5 o% Z% Q- V+ K4 `) a
  748.         dwDownLoaded=0;- M( ^* y- j* f# l1 d+ k6 p! k/ K
  749.         bSilentStep=TRUE;
    ! A1 z- ?1 M# h1 {
  750.         bCompressed=FALSE;
    1 |& w+ }& c& c6 y- q
  751.         strExtLocal.Empty();# F! [2 @/ G4 w
  752.         strFullName="checkversion.txt";
    ( h+ L' L- _/ k2 i+ c
  753.         dwProgramState=AP_CONNECT;
    1 i; M) e: P% Q
  754.       }' A$ x1 g. ?, y. `; \4 [
  755.       dwStartUpSteps=4;
    $ g$ Q( g. e3 n8 m
  756.       break;+ K5 F. f+ q0 g) t5 d: Q$ U6 I
  757.     case 4:4 ]3 J5 K9 V1 j0 J, r; \
  758.       {
    . I/ c! v) v. z1 I3 m
  759.         FILE *fp;) T8 t, ?- @. h+ P7 F
  760.         char szString1[128];
    7 v; Z5 P9 j1 v2 P6 i
  761.         char szString2[128];3 A5 r& Z+ W/ j3 Z6 g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    $ S9 R* u! C/ R. H
  763.         if(fp)# d  ~! s( E$ Q( s
  764.         {2 S: ]3 R, P& m8 Y! d: G
  765.           fscanf(fp,"%s",szString1);- ?, m8 s7 K* z6 O
  766.           fclose(fp);
    $ a8 _8 G- n' Y
  767.           fCheckVersion=atof(szString1);3 q( a3 e9 ]$ z  f& t
  768.           fp=fopen(".\\checkversion.dat","r");# r( Y' T. H4 X: w
  769.           if(fp)
    + T9 v7 _4 Q. Y& \
  770.           {3 R; ?, o& h2 H5 z6 u! f: |
  771.             fscanf(fp,"%s",szString2);0 J' F4 k/ c: A. O$ |4 _* [1 y
  772.             fclose(fp);
    / g, y4 }% ]* c3 d8 \! b& E
  773.             if(atof(szString1)!=atof(szString2)). }3 b/ j! w" c, e3 E2 I
  774.             {
    ! i& u% y" \/ A; l1 S) O) R' }
  775.               if(!Dn.Connected())
    0 n* k$ |. N2 |- b7 s0 [; S( }
  776.               {* ~$ _& u# C4 Z& G4 L/ _/ o6 m
  777.                 bFirstUpdate=TRUE;, h0 K# M+ A$ w6 V$ N2 s1 P* a
  778.                 dwTotalFiles=1;! _* Y2 `, K, u1 l
  779.                 dwDownLoaded=0;0 F2 H- B1 X; u+ B. k  W
  780.                 bSilentStep=FALSE;4 N$ G" N! P; W% k
  781.                 bCompressed=TRUE;/ Y, B) C) j7 W
  782.                 strExtLocal=".\\DownLoad\";0 ?/ W( d. Q4 ^) k
  783.                 strFullName="update.txt";
    # m% [7 U! k# N! B& o0 ?% u
  784.                 dwProgramState=AP_CONNECT;
    8 _! T6 `7 L/ ^( n8 T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! P! t* K  Q, q- k0 G1 K
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) K7 y. C1 p% i8 t
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    0 d( z" e# ]6 ~) ]; ^7 D; T
  788. * p( c) @( i/ o% `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; N) F- b: h  G/ I
  790.                 unlink(".\\DownLoad\\checkversion.txt");% ~3 V! O' M* o' M/ g8 P. [: d
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 k- Q' [+ N7 z8 T& ^5 s, m7 l+ N
  792.                 {
    2 S2 U: r/ R% X/ }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");; M, J; V- K. z3 L7 Z$ g- N3 S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    . R/ n  K8 M/ \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 e4 i# E. B8 j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & ]# l# m" K6 W! G1 Y

  797. + E# Z" H' y: V( f% u9 G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 w0 x8 S; s0 C* r- V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    8 m1 k  j6 B) ~+ ]$ n% S
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    * _; t/ C; n% F0 T$ k" j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 K7 R. \# Y. z$ a6 s
  802.                 }# Y3 \8 v* Y9 G4 ^* E
  803.                 dwStartUpSteps=5;* o. y8 Q  Q8 T" I) y$ o
  804.               }4 C% h2 F7 J9 z9 Q( I, O( o; u# j
  805.             }
    / [. ~( _. h9 u4 T& a
  806.             else
    1 S/ J  H* K& `& w0 z4 J
  807.             {( e! R, B0 D# Z# F0 Q
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 D, y- E% @* Z/ w, Z; D
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 q2 A9 A8 U9 \' {  S5 h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " d. {9 f% n: ~" |0 G4 s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( S) f7 @0 k% x

  812. : q( s5 s* b: v9 J/ K5 u* H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# A! v0 l5 ~5 s# F1 t, V
  814.               dwStartUpSteps=99;# D5 O! \& U/ K6 s% E" D- t
  815.               bFinishUpdated=TRUE;
    ; p8 j! }2 M$ R7 ?
  816.               bCanUpdate=TRUE;
    . p- i% X/ ]% ]/ W. m
  817.             }
    2 w8 P! R3 n/ l6 M! _0 r
  818.           }4 m7 L* O1 I9 J
  819.           else
    & O! k# E* d2 }' l; d* C
  820.           {
    / ?9 ?6 E% q, W- t3 _- I! T( q
  821.             if(!Dn.Connected())
    3 P; @7 f0 u' b
  822.             {8 t, R# i, ]; U$ Z
  823.               bFirstUpdate=TRUE;
    & r! ~" v3 G! v$ @" k* I: b# v( K6 X% L
  824.               dwTotalFiles=1;- B& u( W+ O) i6 C( ~6 q" f. k
  825.               dwDownLoaded=0;" }: E, H/ Z3 U6 G2 ^( I% V; k
  826.               bSilentStep=FALSE;
    ( X: x9 I$ b1 E, a! f# f
  827.               bCompressed=TRUE;3 f. b; E  m1 t" @1 R9 X" Y5 T
  828.               strExtLocal=".\\DownLoad\";
    0 ?- a. ]5 l* S& M& y, J2 d& \( u
  829.               strFullName="update.txt";) m; b, V+ ?) f+ _, f& R0 e# p
  830.               dwProgramState=AP_CONNECT;
    : `, T* s" O+ N2 g9 d
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . V* m* ^8 P9 K! ]8 ~+ e% I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% b9 z$ g- G4 R( @( M1 F
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");) u( d) q5 q0 M  W" O  x, Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + s* {9 u) T/ Z3 V1 {
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ x) ]/ p- Z9 b" \# d
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)2 d  C! y; F6 B$ \7 n8 ?3 f+ `* N
  837.               {& r1 r  j  l, ?- k+ N
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");4 p" o) Y( ?( @/ Q! }. U/ e$ s
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- b7 L+ y) L/ {8 J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    - G" C5 ^8 G: u6 i
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 g) [9 x8 x9 U
  842.                 2 ^7 d- i6 x* m! a2 L2 U- C
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( R% j, o5 u; e4 L
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 _; a9 |: n8 \6 I* L0 m5 U' D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 n9 O; a- Y" @; K+ Y! d( A
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ _9 ?: G/ G" V0 S& ~) r
  847.               }
    * A; P3 c* p4 }( B# f6 e2 {
  848.               dwStartUpSteps=5;- y4 t5 q/ V5 t+ B' k" A- k
  849.             }/ c/ m3 H' C: T+ k
  850.           }8 ], P. c: Q; d3 G9 Q8 |
  851.         }, X+ n: G3 }1 F# Y& C. _
  852.         else8 c% N; x! B$ W
  853.         {# T3 L3 v& ?- `: @4 ^' S( Q8 A' `$ _
  854.           dwStartUpSteps=3;# f& ?$ {( G# j
  855.         }2 S2 O3 y) M2 f  C" c) R, g
  856.       }
    8 N" I6 J1 s' l) m
  857.       break;5 `- E/ [1 k& q0 l% F$ A8 ]
  858.     case 5:. g) {2 @3 C: Z3 h, W2 U
  859.       {! y  u$ n5 s: ?( l. \
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
      f1 I# x2 o! ?# \
  861.         {
    7 l# X1 E+ Q; _# Y) L: h
  862.           int opt_overwrite=1;+ E& ~3 t/ A8 L' j/ L& x  [
  863.           int opt_do_extract_withoutpath=0;
    6 F& e% ~! @1 i1 {6 V
  864.           unzFile uf=NULL;
    9 a5 I. _" |1 k7 v

  865. 1 f7 O% a8 d8 z
  866.           uf=unzOpen("Wsa.zip");
    * N4 ]7 Q% D$ _" Z
  867.           if(uf)/ x/ q( h; m0 |7 ^7 G
  868.           {! ]5 ?+ W' Q3 ]  P
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);7 y0 i+ l0 P6 ^
  870.             unzClose(uf);
      b5 A+ `. b  C1 \
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");1 K  m; H$ ^/ Q7 `2 {, }
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");( J0 M9 y+ R" Y' @5 P
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");' T3 H1 K- R# ^; F
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 [- E4 _9 Q$ b+ I5 m$ {
  875.           }
    & ?; E1 E& m/ ?* i. l* V% T$ M
  876.           DeleteFile("Wsa.zip" );8 \; t) w: {) F
  877.         }
    7 [5 m" `* g9 p8 N5 ~$ R
  878. ) c; X3 J; L) \1 E6 z0 w* n
  879.         if(CheckLocalVersion())
    7 y2 P" b9 N4 e- x
  880.         {4 {9 ]" I# L0 N2 t' K) ]9 }/ F" @
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");" B, P. l7 `' q3 Q" b/ P$ {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    $ b- y7 P( N4 |
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");/ {) i. N( I0 m2 L. u
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  M9 A; {0 q3 s( l, L# g5 T
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ) U2 ~" e7 b  k; L) o
  886.           dwStartUpSteps=99;
    9 A) e6 E0 m0 V7 I) t
  887.         }
    8 n( b. _! ~& f8 H0 |
  888.         else
    ( V6 \# N! p  E# n) x0 g
  889.         {
    " z; X9 T% ?6 p: z
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    3 ^5 t' |1 E* v+ {4 d) U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' f+ L! B& s* O/ A6 _2 v3 @
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( W0 E8 s% [$ `0 q7 g, r

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

- g8 [4 n* l- W0 q* a; D$ C# X; x% G

評分

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