CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
2 ?/ @7 {7 w' o) Q9 y3 Z- m" |0 _
  1. / RevApp.cpp : Defines the class behaviors for the application.2 c" `" ~, z0 S+ Z- x4 A" d# ~; E
  2. //6 l+ a* o$ {1 P5 M! `( |
  3. 0 K# w0 B. U$ w1 j
  4. #include "stdafx.h"
    # W1 ~9 F- K# x

  5. + T9 T: ]. N6 h% E: Y3 b/ d
  6. //#define UNICODE. h7 A* v0 D3 k
  7. //#include <gdiplus.h>
    ) h  a+ e, o2 P' d  X/ I2 M$ m
  8. //using namespace Gdiplus;
    2 B2 b1 J( d/ E+ s6 I

  9. : c3 A  k5 d! R; \$ q
  10. #include "RevApp.h"8 _$ r+ y9 h9 q) K
  11. #include "RevAppDlg.h"
    ) }# G+ S# k6 f% T. E( t

  12. 9 V, w7 r6 [! \- ]9 p7 Q6 N9 Z
  13. #pragma warning(disable:4786)# T: g' [" e( Y: }
  14. #include <map>4 `3 o" J  S0 t7 t$ w
  15. #include <list>4 K( d- d* c' C. E  \2 L: k
  16. #include <direct.h>/ \4 Z, l: c6 g/ S

  17. . ^* Y3 u3 Z" g6 Y5 i
  18. #ifdef _DEBUG/ A3 D4 z- q  |
  19. #define new DEBUG_NEW5 I5 [% O; }7 T  T
  20. #undef THIS_FILE% J. {+ s, g3 F+ R# h( i+ b
  21. static char THIS_FILE[] = __FILE__;: L6 {$ \4 r, h, ]* z; c; I
  22. #endif" b' v$ @7 }# @2 O* b- w  n1 }
  23. #include "SkinResDef.h"; T/ V8 m; _' r5 R- T$ W0 J
  24. #include "ChangeBG.h"
    - T6 X' T9 M: G# B
  25. #include "AFXINET.H"1 X! B* \( a  R7 _% A

  26. - v' ]' L. }# l: v
  27. #define TRADITIONAL_CHINESE 0
    ' O& K8 g! b/ c- L/ ~* X! s9 d
  28. #define SIMPLIFY_CHINESE 1
    6 O1 J4 U, A& e- N& F2 {# z# K. w
  29. #define ENGLISH 2
    - D: J, D! P' w) j/ F2 l
  30. int m_iLanguage = ENGLISH;: x/ j" @; E& @+ @. p: G& W
  31. /////////////////////////////////////////////////////////////////////////////0 t9 w% r5 n: ]" L: V% e+ b; ]% X
  32. // CRevAppApp4 Y+ t- H. W2 r% [5 U0 a! r

  33. # i. w( h7 t  |$ E" C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & P& l% _7 O/ k1 ^& b
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / Q) _8 h: v$ `, o+ m9 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.: }2 U+ r* C5 ]# K/ J  {9 ~
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 `. \, S" b. k/ |; v
  38.         //}}AFX_MSG
      J8 x  M' f3 h1 E8 }4 \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' _) O- ^4 k: a2 T
  40. END_MESSAGE_MAP()3 j( b: J9 C# }& f1 D
  41. " z1 ~1 T1 ]: T' x
  42. /////////////////////////////////////////////////////////////////////////////, O% M# r$ m0 [+ H) ~; _# E' q( F
  43. // CRevAppApp construction$ t( C2 S$ W7 O- r* [% d& f
  44. * m' p& O* J3 ]" w; v
  45. CRevAppApp::CRevAppApp()
    . v: f2 x* F9 X8 E8 M2 a( [7 r
  46. {, ^6 j6 s5 [7 a, f- O* _
  47.         // TODO: add construction code here,
    0 F( \! A' C7 N6 i/ b; `, E, J. T
  48.         // Place all significant initialization in InitInstance
    ( y& g/ B8 q5 O5 `/ z& D% O
  49.   bDisplayIsBig5=FALSE;
    & z9 A: `$ T+ e' E/ w: \: h
  50.   bRestartUpdater=FALSE;
    & O- S+ Z) {5 I. |8 l* \
  51.   bFinishUpdated=FALSE;
    ' ~2 p7 s0 I( \5 j- G) ]8 F& H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . p, d9 C% Y$ E  O  ]/ Y
  53.   InitChangeDataBig52GBKS();% _# ~) B+ C5 d. e0 s$ ?2 [8 i
  54.   InitChangeDataGBKS2Big5();, ^! U0 w0 U' r# t
  55.         //
    . s7 r" y1 D, h+ ~! {, c/ B. D: M' `
  56.         bClickRunExe = FALSE;" ]/ H, J/ |8 K( T
  57.         //. f/ j  E" v( _; u. b7 Q0 t
  58. }& j- H, z+ D( q% x  p0 M& F
  59. 9 n; u, T1 m% `9 ]3 T0 g3 J
  60. CRevAppApp::~CRevAppApp()" ?5 o- \! K. h" r- Y1 I
  61. {
    . B2 k. R3 b' C
  62.         // TODO: add construction code here,5 q) H" J" P2 Q+ I; Q! ~
  63.         // Place all significant initialization in InitInstance8 Z6 ^% f# ?/ a1 ~6 Q# ?" `1 e
  64.   EndChangeData();
    8 o- h8 p9 g4 {$ ]2 X; H
  65. }+ h! ?; ?( p1 g4 z4 G- g
  66. 2 l0 H" a4 g& ?% k) {& e4 w& ?
  67. /////////////////////////////////////////////////////////////////////////////# }0 M  H) l# E0 t8 c- R) e
  68. // The one and only CRevAppApp object$ S; u# R  Q! K$ b) n
  69. $ p- u) F# t$ P5 g3 n) w4 c
  70. CRevAppApp theApp;
    : c( W% S; m  l8 F% ?# a9 |
  71. ) A3 f6 |, @/ W9 ]
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 S9 Q+ N2 d8 d2 P( s) O+ y
  73. {% [7 U: I  V$ |! r5 t& V
  74.   int iEOF=0;" T2 W* L: `9 ~: w6 h3 N' M: }
  75.   char szTempName[MAX_PATH];4 |& M, W# L! P4 w- ~
  76.   *szFileName=0;
    ' D( G0 ]" k1 _) l/ _2 p3 p& i
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( e4 @+ e( `: y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). J. }# \$ q; Z. ^# w! ~( p+ U6 S
  79.   {
    : Z0 t4 h; W. `( T( a5 Z  O
  80.     strcpy(szFileName,&szTempName[1]);
    ! }% ]% v* h! c8 L( \3 ^1 M% j
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 m2 G7 L8 n$ c% f$ X% D. e1 W
  82.     {
    ( g/ y8 b8 U# @5 b
  83.       iEOF=fscanf(fp,"%s",szTempName);# N! M* X- ?' R: U% O7 h4 l% e
  84.       strcat(szFileName," ");8 W1 m% u0 _9 r" R
  85.       strcat(szFileName,szTempName);  b  C! L2 K; ~
  86.     }' R& i% ]6 ]. t9 _
  87.     if(strlen(szFileName)>=1)
    # c8 R/ i  q- T6 G% |
  88.     {4 c- s/ s6 D3 I" D3 ]2 g
  89.       szFileName[strlen(szFileName)-1]=0;
    : K% T! W' S" p6 e$ K8 p- I
  90.     }
    7 ~. S9 C5 o: _& ?" v/ }$ W4 M
  91.   }
    , |, K+ Z$ [$ |$ o" J5 T. I
  92.   return szFileName;+ _2 D( ?2 W+ q  v2 R
  93. }
    9 W8 K" x$ f8 J3 |% r: f

  94. 1 k7 K+ K. u& v! G4 S; `3 y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) b5 x% b% g1 F* @
  96. {2 R8 L2 o% B6 @
  97.   FILE *fp;
    : j- x. ?& v; ^5 E; `/ q/ P/ d
  98.   char *key=NULL;
    0 T6 _- n0 P. l0 h# J
  99.   char version[MAX_PATH];
    8 F/ P$ W. N+ a  [8 N
  100.   LPUPDATEFILE file,olds;
    2 M. w5 j! q" s: w+ ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; C1 {: V# w1 t' h3 w) P

  102. ; g5 K6 W( o6 H2 j; \( ?
  103.   UpdateList.clear();/ y& f: P+ f" c! n7 ?& x
  104.   UpdateFile.clear();% K3 D. k* T8 L3 Q: }; }/ r
  105.   if(GetFileAttributes(filename)==-1) return false;
    ) S( x$ l, }, w6 ]+ E& u) h
  106.   if(!(fp=fopen(filename,"r"))) return false;
    # `: _2 L! j( Z, X: C+ Y8 \0 f/ k
  107.   fscanf(fp,"%s",version);
    ; n6 D/ N& P: Y6 c/ e, Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: e1 T7 ]; b& T& L" j5 h( p4 P
  109.   while(fscanf(fp,"%s",version)!=EOF)
      o1 q1 ~4 I. z) \' L  c( _
  110.   {
    ) v% Q) T4 y. h) K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  o6 |3 X# n$ |' A) H) C8 W* G
  112.     fscanf(fp,"%s",file->path);9 V1 ^. E1 ]: s9 J
  113.     ReadFileNames(fp,file->file);# j1 H8 ~& x# l. L
  114.     strcpy(file->full,".");
    1 \  e* N5 ?2 p+ X
  115.     strcat(file->full,file->path);
    - D- e: Q: K8 ]7 [
  116.     strcat(file->full,file->file);
      w0 f8 d: ^: ?' j, \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / S( {# Z' Z6 O- O) r7 b
  118.     {
    1 g8 Q. h' C: z
  119.       file->vers=(float)atof(version);
    7 t" j8 D" [1 Q1 Q& ^- Z) U
  120.       UpdateList.push_back(file->full);
    9 C9 o6 T. Z" f" S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # n$ u$ x; s: C
  122.     }! B. C  {, L9 e
  123.     else% G& d9 F& d: S+ E& h0 ~1 y
  124.     {: k8 Z; f8 C7 _; q# d' i+ O
  125.       olds=(*p).second;
    4 {2 s. A/ C) v, N; {7 m
  126.       if(olds->vers<(float)atof(version))
    : Z, H# q2 l! d  n3 ?% H
  127.       {$ ?: J5 F+ e) o& H* u% |
  128.         olds->vers=(float)atof(version);
    - L  ?( ~* ?) C4 {7 g# F
  129.       }. w  R# N& n7 c
  130.       free(file);
    6 }2 F1 F' M% B6 Q8 }6 h
  131.     }+ J6 g4 P) @- j5 m) e8 N
  132.   }
    - a2 q$ S1 U6 q, T% z! G
  133.   fclose(fp);
    0 n% w  p2 v7 o# q7 m' G* t
  134.   return true;
    8 F$ z( [% J! A" y* u# u- c
  135. }, N; h7 s3 U( p  Y9 ~: E0 W

  136. - S' @* r0 h+ d) L) i. o0 ?) a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)5 ]. ?' d2 f# f1 H
  138. {; U  I5 }& p! X7 j8 R& W  a% j
  139.   TCHAR  szFull[MAX_PATH];
    & R( H/ V3 g/ s' i
  140.   TCHAR *token,*inter;3 K( b; l4 @, l( D5 d
  141.   *szPath=0;# q1 q' D* }& ^( x- J
  142.   strcpy(szFull,szFullPath);
    / ~0 a- o4 s2 m* o  _
  143.   token=strtok(szFull,"\\/");, |: {; `. ^3 `: P
  144.   inter=token;8 w  M& ^( b% j* C0 P9 ?: A
  145.   while(token=strtok(NULL,"\\/"))
    ! V, x3 L" t3 K" f
  146.   {
    ( x/ G" i9 x' t: |9 E
  147.     strcat(szPath,inter);
    8 T, x  }/ a$ I( q
  148.     strcat(szPath,"\");* ?$ _  T6 {/ j2 X, S5 o3 O
  149.     inter=token;
    ! N4 F, u7 e9 J& a+ x
  150.   }" Q( F1 {" i7 [3 t0 c+ x3 Y+ k3 T
  151.   return strlen(szPath);+ h+ B2 o2 l2 g+ w* i3 k
  152. }
    & |" m2 {: b3 e  U& J  H

  153. ; [& W" Q. J, \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    - k) `) l2 m% ~' T% [6 B
  155. {6 v( ?5 s& x. l1 K6 j
  156.   DWORD attrib=GetFileAttributes(Target);
    , i  s8 Q" I4 b$ }  \9 z
  157.   if(attrib!=-1)/ N6 t9 K( H( n6 `; C6 C
  158.   {* n6 l& E# F. d+ G& @" G
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ K4 Q5 z9 G$ A8 M
  160.     {, N8 b9 P  @% V0 h+ v7 a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . ?' \- n* H. i: n  V  w
  162.       SetFileAttributes(Target,attrib);
    + ?0 F. F9 v$ {2 t
  163.     }
    ( V  p* c  x; u
  164.   }, h0 j# S8 R! P& U
  165.   CopyFile(Source,Target,Erase);
    8 K- G6 C. W  n4 I$ m
  166. }
    ; Q) g4 W! t$ V- ^5 Q# b# _

  167. : E. C  |: Y0 C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & d/ R5 q7 z( Z# ^  q
  169. {
    ) c/ H8 ]  S: s: F
  170.      FILE *fp;) Z% u8 w; w8 a9 v! z# w
  171.      char  szBuffer[8192];
    6 B; j) @  g8 C9 |+ g$ B( G( s
  172.   va_list  argptr;7 p+ ^! Q/ ?# U, V) Q% N
  173. % [) z' O" J; d& q* p  d/ Q) ^
  174.         va_start(argptr,message);; ^; F$ f: E- i& V) F
  175.         vsprintf(szBuffer,message,argptr);. A; F' P4 d# R7 D0 [* J
  176.         va_end(argptr);
    9 {0 G3 y1 u+ e( Z5 O$ M* ]
  177.   fp=fopen(FileName,"a");
    8 t. e  }: m. c: e
  178.   if(fp)2 _; i, z" [: X3 u1 M0 H/ G" v. f/ P
  179.   {
    3 F, v5 p0 R* h* E! X% m
  180.     fprintf(fp,szBuffer);
    3 P3 |; H) F  s. r( g* }5 F
  181.     fclose(fp);
    " n0 v7 d$ n# X2 \) k
  182.           _flushall();5 a  ], l3 X5 g5 K5 Y0 V. N6 K' L4 d
  183.   }
    2 S; c) t3 o! U$ A  A- D
  184. }
    # Y% ]3 G6 `' [. k: q' U; s
  185. & r# G& Y* S  a; v: |, i
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 |3 A7 }+ n2 m% ?! t
  187. {2 q0 P+ Y" J# j* F9 w+ `: j: E
  188.      FILE *fp;
    % a' C: }( B( C% P
  189.     DWORD  attrib;; H/ G$ A2 z2 h
  190.   attrib=GetFileAttributes(FileName);
    ! S9 C9 C7 l# `* T& N- @6 E
  191.   if(attrib!=-1)+ k+ `# q' K" e8 \% m5 R. O7 I7 ]
  192.   {( ]: |, F& E. N: [  o; o) \0 {  N
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);& L6 ~- n0 A! |  v0 r! g
  194.     if(!SetFileAttributes(FileName,attrib))
    9 i5 ]5 h" k4 \( s, l
  195.     {
    1 Y& r, ^9 @  k* u% P1 w
  196.       return FALSE;
    6 p& {% Z+ ?* R# b/ E5 l
  197.     }
    , [$ ?! H$ X" g& t
  198.   }& v1 E* `; |& I( p% f4 q3 \
  199.   fp=fopen(FileName,"wb");
    ) M8 ?; G, K1 \; {
  200.   if(fp), g% J8 E1 M+ ?: {% V3 T" L
  201.   {1 Z6 u6 {, A( F2 w. L) u& c
  202.     fclose(fp);9 T- k$ `) B- m2 K6 Y$ C  X
  203.   }
    ( C, d8 S/ \2 _7 t% N
  204.   return TRUE;
    " a5 T6 y$ O8 L6 r
  205. }! ?$ W2 f6 Z- b( Z
  206. ( E9 h( p/ ^) u- Z  i8 \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)6 w6 w' @" ]& g. [" w4 B
  208. {  s& R/ y7 p3 h/ E7 [
  209.   char filename[MAX_PATH];
    $ }1 F+ j, i/ ~; K
  210.   LPUPDATEFILE file,olds;
    3 H9 _  @: Q# F8 F5 m
  211.   std::map<int,CString>::iterator i;
      i) `) B* C7 a8 p+ K. U" |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# M7 K4 T& P' O, i: `% @8 S
  213.   std::list<CString>::iterator l;
    - m  m5 K; o  |5 v/ c

  214. + K; g1 R  R" N' b7 A- \+ j
  215.   if(bFirstUpdate), Y1 {/ w6 y+ T5 l
  216.   {
    - E0 l3 F  \6 u
  217.     dwCurrFile=0;
    $ u. \3 q% w' p! G
  218.     bFirstUpdate=FALSE;
    ) _; l! `# v0 I7 Z" ~- E5 ?/ C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 F2 I0 W# C# }/ Z# U" d. u
  220.     {; R' n5 z3 c: K! I
  221.       dwTotalFiles=UpdateLocal.size();7 p5 Z( t9 N, Y: P6 R. n$ [
  222.       dwDownLoaded=0;
    * Q' h- ~( n+ k2 J8 ]
  223.       bSilentStep=FALSE;9 E6 A4 n. @! L- s
  224.       bCompressed=TRUE;! u/ g  i" Q- a  B; h
  225.       strExtLocal.Empty();$ l8 a' ]# G! p$ j
  226.       strFullName=(*i).second;
    ( v- H# e8 \1 H0 X4 L$ E) v8 R. p
  227.       dwProgramState=AP_CONNECT;
    : d) [1 J  Q' S8 Z* r5 Y6 N  Y1 p
  228.       return TRUE;
    . r9 @1 r* e) c
  229.     }9 K1 ?  `8 g: A. |
  230.   }
    # J3 d( ?. N+ G. b, w, p" C
  231.   else if(bRestartUpdater==FALSE)
    1 e2 h# h8 Y! o: m, B7 F
  232.   {' i; E, s: Y% d- x
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ! y" |  c/ N8 O  U, ~% Q
  234.     {% t6 S3 q' s. Q- I2 Q" P! L
  235.       file=(*p).second;) G0 r9 y- B  R9 _+ b$ R# ~0 F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / R3 v, d  T: A1 p  O$ L
  237.       {" K2 n$ u3 j0 g2 x, N: {9 X
  238.         olds=(*p).second;6 A! b- V# F( W0 }& P
  239.         olds->vers=file->vers;+ q- |* @8 w7 M1 j
  240.       }4 f( x2 ?1 ^" @5 j) s
  241.       else
    7 c1 Q* `0 d8 q/ `
  242.       {9 Z3 ^' {- W5 z8 x6 s
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 s2 ~" X3 Y5 N1 A; {7 ~4 n/ j, k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 C( D9 {4 R- m4 e* p8 ~9 l
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% O) C9 g% ~2 L# l, J8 k9 ?* c! B
  246.       }
      {+ S7 H1 A$ ]& f( j. ?5 b
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 I/ Y3 Z; K1 F
  248.       sprintf(filename,"(%s)",file->file);8 I% d, Z% `/ O4 M* D, U7 i/ @
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " b' [& ~9 q/ J% Q0 h/ p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 Z( B' m6 b0 [: {  D4 L; m
  251.     }
    ) Y9 b3 |0 J1 d& d4 J2 }& u& s& f
  252.     dwCurrFile++;. P+ B& v# y: I" s* j, a! z: K
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 m: H% _- n; _1 z+ B1 Q$ T# A# j
  254.     {
    $ H" R0 |8 w; c9 k+ p* X3 Z
  255.       bSilentStep=FALSE;
    $ i5 t1 k9 }/ B% e4 G, F' ~  E
  256.       bCompressed=TRUE;+ ]7 p( a; P6 R
  257.       strExtLocal.Empty();
    # s. P$ N. v; C, Z1 R
  258.       strFullName=(*i).second;: p* [# z$ \- L5 N# V3 `' P) e
  259.       dwProgramState=AP_CONNECT;( L) H$ R4 k+ w! N
  260.       return TRUE;
    / i1 m& a) W  z. J4 p
  261.     }  x0 A0 ]2 f: E8 i7 D
  262.     if(!bRestartUpdater)
    : y5 ~+ T% g6 Q- ^: O9 ?* Q: J, f
  263.     {/ U0 e/ c- F1 Q1 h, l5 V6 _3 A
  264.       int iCurrSize,iFileSize;1 s: ^& \% J- H
  265.       iCurrSize=0;
    " D: `8 Z' x; q9 o1 e! h- v
  266.       iFileSize=UpdateList2.size();+ L: F" n- G" q) O% n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    8 p3 |) J4 M9 N6 r0 c3 p" Y; v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
      k- y6 [0 p( Q7 ^$ V) \% R- ?2 ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " {4 z! B# E- L6 p. T6 q# b
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 f) f* ^! Y- G9 w8 e
  271.       Fclearf(".\\update.dat");3 K) [" I& x, _4 V" Z! b
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . j  Z# V4 g- s) Q5 a' P* T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)# L8 E8 C6 {% V# j
  274.       {
    5 `* h, ]6 d' a* d! n) }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 |8 J# P" B' @) M; O7 B) S$ R
  276.         {
    + {' c: F4 T) W& A: W9 Y
  277.           file=(*p).second;
    / |; N7 O2 h4 y5 e( z8 `0 M
  278.           sprintf(filename,"(%s)",file->file);
      M7 e5 ]# ~: X4 ]1 T+ x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # U% H* L/ Q, u3 W# C2 F" p
  280.           iCurrSize++;
    * J8 m) L( o& l
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + F  P8 S0 A$ C! `4 O- h; ~, |6 O
  282.         }
    8 w7 [& ^" m: l! G
  283.       }
    ; s0 Z( ]2 l0 {# [0 _5 \
  284.       unlink(".\\update.txt");
    # L: b* J5 [/ \
  285.       unlink(".\\update.tmp");
    & s) ?4 o  @, }3 o
  286.       Fclearf(".\\checkversion.dat");+ b+ E' v( Z6 G7 T
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 g8 S6 x1 Q& `3 `+ b5 f
  288.       if(UpdateLocal.size())
    4 b5 l" p0 U: _) d" b
  289.       {$ D0 h6 p! }& }* r8 ^4 B2 U
  290.         UpdateLocal.clear();
    6 [5 J. S; K. Q2 v2 j
  291.       }$ t8 ?% `! }4 d' Z  `
  292.       if(UpdateFile3.size())
    9 q' H7 s9 _8 r: E
  293.       {: k8 r- X1 {* g2 {8 W+ Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 B. h1 b# ~& |) U# Y$ @4 s
  295.         {
    ; r# A4 p7 t, B- ~3 w; W0 a2 F
  296.           file=(*p).second;+ {) C% E% N4 i, u4 w8 v4 E9 D
  297.           free(file);3 K7 ^9 l  z2 c' W/ t) I2 {
  298.         }
    ' Y7 P3 {" z3 |/ n0 Q/ K& F
  299.         UpdateFile3.clear();  J9 p8 E" Z( d, `
  300.         UpdateList3.clear();
    6 t0 }1 F' U2 x2 X
  301.       }
    " J$ h. J' T$ L- K( o8 e$ o( F
  302.       if(UpdateFile2.size())
    % V) Y5 f; u" r, S! L- d" y" v4 Y
  303.       {
      Y" r' n0 e6 }/ Z$ O1 x# x: k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( g- R- |2 x" Q  Y0 j( W! b( G* j
  305.         {  O4 G5 q, i; O; _
  306.           file=(*p).second;5 k( R7 d& t+ |: E( h
  307.           free(file);$ ^0 |2 u3 x+ p/ g
  308.         }
      t4 I2 a% v! S: h  s0 r- B
  309.         UpdateFile2.clear();
    0 p( a. X# s+ D- T9 Q, ~
  310.         UpdateList2.clear();
      h% g" i  y: k, Q& H( a8 m2 W* |
  311.       }
    8 Y2 u/ f7 W* P
  312.       if(UpdateFile1.size())
    - f8 _6 [) |2 a8 k
  313.       {/ F. v, @. X5 X- ?: T9 ]: Q0 A: N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 Q2 ^! L6 o7 q
  315.         {
    3 _# [4 }& N+ c: N% _  a, m
  316.           file=(*p).second;- J' v- U, q+ w/ ]7 }0 ]4 F
  317.           free(file);# p( \8 u, |7 y6 {  }
  318.         }6 D4 E1 ]  a7 S) k' }! m* n* |
  319.         UpdateFile1.clear();
    1 c! T* C# `8 v6 G
  320.         UpdateList1.clear();
    6 S: T: N0 q/ o4 t; ?- e1 |
  321.       }# n* E" h2 }' a, Z2 n/ G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ) V/ ~; S7 m' b8 h1 j
  323.     }
    9 L6 x, X3 H( ]! h) c
  324.   }
    5 r, |7 [. M" ^# U
  325.   return FALSE;
    6 L, B8 C- R" o1 ~( ]
  326. }
    # W; D% a* D+ _6 D9 p. F

  327. 8 ?2 {% f$ Y  k
  328. void CRevAppApp::ClearAll(void)
    : K9 \" F1 a8 U+ R# o/ N  q
  329. {# Q- k4 G. m- v8 w) h! V
  330.   LPUPDATEFILE file;3 C! h5 j: X2 ~# R+ A& ?2 [( k3 f
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 k2 R0 y8 G( X  e. r4 Q% F
  332.   ?- m+ [+ O* o) X3 ~
  333.   if(UpdateLocal.size())3 n* i2 K' T+ P6 c
  334.   {
    4 T; Z- |" @, ]
  335.     UpdateLocal.clear();1 t. I$ d/ r- P5 o- D  @
  336.   }& a. \4 O6 R" v* Y! P4 r2 O
  337.   if(UpdateFile3.size())
    5 R$ r* w, U, z% C
  338.   {3 V. k; W' O& ~: ~
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! H! J! ]* H# d1 T) v
  340.     {7 K6 `* d( s' J8 o! \1 |$ P" C
  341.       file=(*p).second;! r% R- c; ^1 _% w6 r8 R
  342.       free(file);
    " H: G! v# N% W& w- F
  343.     }
    ( {/ k+ h) O+ V- h7 p
  344.     UpdateFile3.clear();  Z! m/ K/ Y* S# [3 r% [
  345.     UpdateList3.clear();
    / y7 s$ m; A" ]+ P
  346.   }
    ! E, D" ^* q2 t0 [
  347.   if(UpdateFile2.size())* C  V- M6 ?0 |  ~8 K( H
  348.   {) L3 I2 q. C7 ]& A; f2 y/ Y: x
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 ?: l. s% c) p/ O
  350.     {2 K6 H% g5 v9 q4 W! ?2 x
  351.       file=(*p).second;
    . w5 @! ^1 Z) C/ M3 j3 w
  352.       free(file);; Z1 d; N+ Q: |& ?8 [
  353.     }
    7 _$ x; M3 K2 \* |+ k
  354.     UpdateFile2.clear();+ T4 B5 Y, \6 |  M9 D0 Z; b
  355.     UpdateList2.clear();
    2 o9 u+ P% F1 G3 J- ?3 l) b
  356.   }, i, y" ?0 B/ I" O$ ?# r5 @. e' W& u
  357.   if(UpdateFile1.size())
    2 y* W/ N( V9 K* {5 I$ c5 F
  358.   {6 {4 @" d. i7 b5 Y2 m# I( z: A( H8 ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 t2 Q% H, t+ L( ]' L, Q3 z  b
  360.     {
    : ?! S4 z3 _3 M/ N, v' b8 j& X+ }2 O
  361.       file=(*p).second;: L( ~5 u! q* B
  362.       free(file);
    ) V5 q% h" ]0 r) U4 ?- E  T& A
  363.     }
    7 A# l5 a- t, d( {$ b+ s; S
  364.     UpdateFile1.clear();* x# R1 ~1 K6 D- {1 f2 D
  365.     UpdateList1.clear();) E1 z  c# P/ C" A8 Q6 Z
  366.   }
    ) H' g/ C3 f7 c: c9 `1 ^
  367. }  7 z. j4 p' j. m0 p, o3 S& Z1 w) t
  368.   
    7 A1 X1 l1 p- n. o+ p( r
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    5 b3 G2 h( K: R4 @' S) ^- q6 g4 q
  370. {
    ' a' J: m- l5 E( ~& d7 N$ _
  371.   int c;
    0 v5 m; n- s  W; P8 u
  372.   LPUPDATEFILE file1,file2;3 Q; Z" L5 ]$ E  d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, x! f) ^: l, ]& v, }
  374.   std::list<CString>::iterator l;) J. f- e8 n* g! h" I0 o! L5 F

  375. ; `% A9 m1 b3 r5 V; R% ^
  376.   UpdateLocal.clear();
    6 T1 p0 w; x9 P
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);% m7 ^5 ~4 `7 \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! }; S% l2 P* v+ \
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' ]: B9 v" X( j" h' y# y" h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);) Q: T( S- ^2 X! W7 R9 X
  381.   if(UpdateFile3.size())& u4 J1 a  J! C
  382.   {
    # C8 b' [5 X8 W, D/ j- f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , |* d# t8 x- S+ F, B9 ?5 ~- }( c
  384.     {
    $ b  p% m$ ^/ `( J, h
  385.       file2=(LPUPDATEFILE)(*i).second;
    - b6 ], `( l4 m2 q2 Z
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( t. X% H4 H4 M6 t4 I) P- T8 \& {
  387.       {
      F  [1 r2 U. ]
  388.         file1=(LPUPDATEFILE)(*p).second;
    " X9 ?) u8 k' D# {3 m& O6 ~/ b6 d5 b
  389.         file1->vers=file2->vers;+ B# F" f. B1 l; M+ t0 |2 P
  390.       }! ^  I9 E0 S& C3 l3 R, [6 y3 T6 ?
  391.       else. t$ y  P( w5 e
  392.       {
    9 A- L. Z$ U) [( y: d: ^/ l4 g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; a) R; m7 F" e4 V
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - Q$ U: a( y* @9 r4 f! r0 T
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    6 F2 q9 ?- }: P' C7 i
  396.       }
    " u3 G5 [2 G& M/ [: Z2 j0 c
  397.     }
    3 p. y( W" k* e
  398.   }
    & g5 H/ l6 ~" ^* F8 i
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ' L* {* k5 g  [6 G5 D  o3 j0 q. o
  400.   {
    6 |) \5 d: J; B& p# t( Q3 ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / D1 z/ Y. S5 u6 N) m# p8 X' y. {
  402.     {/ U# c' A7 t: _
  403.       file2=(LPUPDATEFILE)(*i).second;
    # T5 k8 j4 B% z5 g
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * M  q' X, g0 L* f+ W. l( a
  405.       {1 F6 d  `% F0 m; x6 J/ b
  406.         file1=(LPUPDATEFILE)(*p).second;) E2 A% s0 q' j8 `
  407.         if(file1->vers!=file2->vers)
    . K6 _9 d" e0 T! \$ R7 C
  408.         {
    5 P% y/ ?# A3 G* w  U) K0 d* _" _$ O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" |0 n; L, y8 j1 t- y, Y* Q
  410.           c++;
      l+ V9 M, g9 Q8 A' Z
  411.         }" f3 j+ D( b% X7 k) |
  412.       }, |; {2 `- N" s2 k/ |
  413.       else4 {* u: P4 c7 J. P; P& s" M
  414.       {; @5 u2 N3 V& z( Q6 x
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' u4 N; \8 X) H. P
  416.         c++;6 j2 i* K0 F$ h5 K* L3 _0 Q
  417.       }' L! C0 B( `4 k5 S* ^  C; f
  418.     }
    * g4 d% }, M' B9 ?6 Z) o/ ]
  419.   }2 }; N0 M  U" ?( E  y3 B) f
  420.   unlink(".\\DownLoad\\update.txt");  @. _2 K; V2 X+ ?$ b
  421.   if(UpdateLocal.size()) return TRUE;* p% s- D4 K# V* A  E* G6 l& `
  422.   else                   return FALSE;
    / l) u' B, i& W7 b/ a! G; U
  423. }
    . H6 U! \, H/ y3 T) J

  424. : t7 O: n# F2 A4 Q+ F9 g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ Z0 x! J) `9 A* {3 d8 |7 ]9 A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 k; A' L9 y. }& ^& h6 u

  427. ! O1 n$ K- U7 }- }% v; w8 \
  428. 4 M9 E  w, E8 i' o

  429. , L3 j% Q9 e% o0 }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)8 A; D  K5 F$ l% P/ O
  431. {# J4 i* M# J9 W, J! e5 T+ z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ j0 G. I( t/ L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 Y: b( Y; B4 u5 y; ?6 R* A/ l' I
  434.   {
    : b2 }( v2 T/ v1 V# m, |
  435.     char szLanguage[50];( T$ \8 H" N# [/ f# \5 G
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' M- s* w" x+ f0 w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 }1 D! M! y6 T8 B) I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) q, y! c2 t2 k/ _) [3 n# _: U
  439.     else                                   m_iLanguage=ENGLISH;; {& U6 A2 N  ~% M
  440.     char szRegister[100];& v9 R- p% o: d3 t1 v
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 X6 i& c9 [  ~
  442.     strRegsName=szRegister;
      n- T' m% ^; x5 v
  443.     char szPatchURL[100];
    9 I  f6 L% K" g/ T# D5 c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 P& a8 K  H, z$ V9 [1 w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 O3 S. P8 ?- }( F+ N
  446.   }0 z  k! x" H+ X% G
  447.   else  y0 D$ j9 V6 U* H8 ]9 \
  448.   {
    8 a9 P6 Q( E: ?2 Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 ?7 X: i. S/ x2 o" K2 n7 V
  450.     strRegsName=DEFAULT_REG_URL;
    % C9 C9 A% h( G" D# ^- u! c
  451.   }
    ; Y; J) v- }' V$ q8 g
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 R  e$ K& r% E4 n7 t' R4 V
  453.   {  a# T. o# b+ ?9 N9 z4 x
  454.     char szIP[50];
    $ e1 }- O' y# V& O( K5 y" p
  455.     char szDIR[300];1 _* S0 E) d& ^' h0 }
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : a0 b5 [9 [0 a3 |; H; Y
  457.     {1 o: j( b* E" a2 @- y# u
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ ?- [' r$ n, \/ H* @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 C! G  S; @+ s
  460.       strHostName=szIP;
    * W2 b7 [8 ?6 e# D3 O3 o
  461.       strHostPath.Format("/%s",szDIR);
    7 f  W& R' h) r  D
  462.     }0 j- A0 I6 {2 M1 W+ Q
  463.     else( C" d8 c2 i+ b7 q" O2 `# S0 u
  464.     {
    + [0 A) A, G0 P! _6 K+ e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& D6 u( ^2 a% V. _4 ]6 f) e8 u
  466.       {  }% I& s2 s4 _
  467.         char szLanguage[50];
    ( ?% v- ?' t0 t- t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: z  V8 H' d" U) |) R( E
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. J4 X4 `& q% b. F! A, I6 e% K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 l0 G, e9 n. M+ f2 v: n& ^
  471.         else                                   m_iLanguage=ENGLISH;% m  U& I7 L) K4 V
  472.         char szRegister[100];) \0 X4 c) {3 W7 L4 {- H  |) X( j# a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 n1 G2 f6 ]/ P. i% N$ t
  474.         strRegsName=szRegister;6 s( ~5 D4 V, U! v' N7 `& x
  475.         char szPatchURL[100];
    ; b$ s/ r* M! ^  O
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 B: z' n: X. y) r9 e8 Y$ W
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " ?& C9 @+ z& j
  478.       }
    . ~& T& }* e2 t3 B5 r
  479.       else
      y6 I$ G- k2 K$ c# K- i3 m. K
  480.       {1 G, c0 y9 C6 q- M  p0 |& ^9 b
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & j% W8 ^0 Q0 y. `
  482.         strRegsName=DEFAULT_REG_URL;
    $ t/ r6 k" t7 s; _
  483.       }$ {6 H# m# d; R( v% z# O5 F- I4 o
  484.     }
    ( f5 b. I9 j0 O3 A4 O: {% N- b4 |
  485.   }
    + c& m  B+ c( E3 c$ e) B
  486.   return true;: G1 y0 M# h1 k0 f' G; z
  487. }; ]& H0 j3 G7 H5 j! L# Z; H  H
  488. / C, ?* H+ o/ r( O& C/ b* M
  489. #include ".\ZLib\unzip.h"
    % W" _* H' a+ M1 P+ w% G: ]
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 |/ q2 t# y+ L6 V, T
  491. /////////////////////////////////////////////////////////////////////////////
    3 f' I# Z) S% H, O' W
  492. // CRevAppApp initialization
    ( j: c) U: `4 J; p! o# E, {* b( S4 ]4 |

  493. % n/ D1 u- s5 t# y- s: A- y' X
  494. BOOL CRevAppApp::InitInstance()$ W3 B9 Q  \0 V5 G8 y+ a- l; q
  495. {
    : v, |7 @" s, x  Z  t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. {& m( W' P3 Q; K& H7 ^2 Y/ Q) c

  497. 8 M6 k0 m( _8 s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 @' r, I0 ?7 E2 n; M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      d) Z7 u" i( z: g% B  ?0 G
  500.   {! T  F) P; |0 P- x6 |3 r  `
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * ~# i: `9 n; o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);7 L9 ]1 p8 _" a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( l8 v- Q* |6 v8 _. ?# e
  504.     {
    % t) r: d9 U! `% `
  505.       strcpy(szPath,szPathTarget);: P* w; p8 ^' M' ]. a" [$ I
  506.       SetCurrentDirectory(szPath);
    0 c/ q& A  h( i) M& P& e9 r
  507.     }
    4 o9 [) j" Q/ x4 n! {1 @; q" C2 T
  508.   }6 i/ @1 ?7 j5 b0 R$ a0 e, f
  509. #ifdef _DEBUG' y; {' W9 x$ \4 x; o! B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 a7 {8 V+ t4 [
  511. #else6 K0 @" u9 T' J! C
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 {  c* @6 e  @' S: n( s
  513. #endif: z& R8 J1 B$ f( j% f' O8 N
  514.   {
    ) t. S9 @7 N, ^4 O
  515.     char tempFileName[MAX_PATH];
    $ B* w; @" z2 f
  516.     strcpy(tempFileName,szPathSource);
    ! Q8 z+ q0 H3 C$ v
  517.     tempFileName[strlen(szPathSource)-12]=0;
    9 ~1 Q4 D0 s5 z: Y: w
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ r2 S$ }1 G+ F  ^1 T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 f5 S. y0 p5 F6 a2 b% ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , D5 d2 f1 V3 U9 ^) w) C; `
  521.     return TRUE;
    1 j, o' {7 L$ y0 @9 |
  522.   }" R. E5 i- N/ o1 ]
  523.   // Nuke 0118: Delete run.exe8 B0 F/ {% e7 Q) j! f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) Y# q" x" g2 e; A5 x; [
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / c/ y& X( f2 V( c$ S
  526.   if(!ReadCfgFile("Config.ini"))/ S' L- B$ h, [
  527.   {8 v4 V8 a% m/ k: I9 |
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    . q' b5 n8 ]% G9 u* ]7 R
  529.     return TRUE;
    ) F, p( g" l$ V' T) [* T- X4 H. L
  530.   }4 g1 ^& Z4 [3 W, J8 E) }' o/ C
  531.   HANDLE mutex;
    7 H4 }! Y/ `  F  |8 I8 D0 J/ j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 j+ b5 t3 L( a% s
  533.   {) {7 w& ?/ y8 T' [6 P
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)3 X  x: M8 {( j
  535.     {
    3 m) e, M: k( y2 M. Q  t/ A- h
  536.       CloseHandle(mutex);1 G) z" U  f' V; T; w$ Q5 Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
      X: T# K/ q3 r
  538.       return TRUE;
    3 J# d7 E7 R. R
  539.     }
    + g" s9 ?0 G1 ]0 d
  540.   }  
    % M5 d( a; k; R* @$ T4 B* ?* s
  541.   CloseHandle(mutex);" X" y8 Z$ J  v4 y( F

  542. ' X' A" `5 y. q8 B! G
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    % n6 K' D& Z: l8 _. V% Z

  544. 7 d$ _9 k1 @0 Z
  545.         AfxEnableControlContainer();* A7 I6 D4 L; A- H

  546. ' n, T. F! P2 ^0 h( X6 s: D
  547.   bCanUpdate=FALSE;
    9 t! L% z' ?& w3 _3 H, I
  548.   dwStartUpSteps=1;4 `' l1 e! n# I) P. O; e
  549.   dwProgramState=AP_NOTHING;
    4 j1 F  X/ d6 @
  550. 1 ?; ?2 e. ~; j& w
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 ]3 G9 @" {, l

  552. 0 ?1 H: Z1 R' }) Z4 K0 p( Y/ B
  553.         // Standard initialization
    ! R0 n) ^# E! k" k
  554.         // If you are not using these features and wish to reduce the size: Q1 m6 N+ T" f& S
  555.         //  of your final executable, you should remove from the following" M# t7 y# @1 W1 _
  556.         //  the specific initialization routines you do not need.) G* `. F3 j+ m& }
  557. 0 p( X5 }8 N* m! W
  558. #ifdef _AFXDLL0 K$ l! U3 I4 L  i5 c  r0 Q1 v1 N9 ?
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 P/ r: C8 L2 a/ P' {( S
  560. #else
    " b6 O& r9 B$ G7 i" ~" \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 Q" o  K" w2 z4 G5 _: f
  562. #endif+ c! P- H9 l9 i* o/ }
  563. - A5 f3 e! o. t8 ^, H, D
  564.   dlg=new CRevAppDlg;
    ( u6 R, O8 `7 H% ~$ o
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    : M4 s# D# B2 x& A& F( w
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 z! G# T* ~5 V6 R; v3 T
  567.   m_pMainWnd=dlg;: ?. [9 P$ Z3 n$ |% X% x5 w

  568. . W2 g2 y& y' q) h  ?. N# r
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# g2 I# a- M$ [! t  ]
  570. 4 A2 l$ i3 y' ]: n
  571. //  GdiplusStartupInput gdiplusStartupInput;
    1 t) `+ h) ^) u+ H; w& {8 V  N! |
  572. //  ULONG_PTR gdiplusToken;1 E! ]! y  ~. I" B) }2 e% j
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);+ [" T$ f3 W: y+ M$ g# k+ m) y  G! o
  574. % j! w9 r7 _4 S* n! `
  575. //        CRevAppDlg dlg;
    ! y7 s+ f/ C- h) g' h
  576. //        int nResponse = dlg.DoModal();1 T! [8 v: U% h
  577. //        if (nResponse == IDOK)
    8 M9 f; O# p3 m/ h9 Z" J4 a8 D' i$ H
  578. //        {& q1 j8 x& X/ f! w5 Z+ @! N; s
  579. //                // TODO: Place code here to handle when the dialog is* ?3 S+ L( K6 z0 ^/ {, `
  580. //                //  dismissed with OK% X5 ]; j; b% a, W
  581. //        }
    2 Z' S& w) s) Z" r/ e8 g
  582. //        else if (nResponse == IDCANCEL): H- A, k6 l3 t( K; j" M; v7 a
  583. //        {# Z( y$ s/ N' G- c9 o
  584. //                // TODO: Place code here to handle when the dialog is. n, w6 H8 ]) U! h3 s
  585. //                //  dismissed with Cancel) `" a, q5 Z! z
  586. //        }
    " r" ?" M  G9 R
  587. 7 b5 X4 b1 |" n( A% t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ) x5 b: ^8 @- a3 \) G  O3 A- ]* R  D& k
  589.         //  application, rather than start the application's message pump.' o( J- _7 }* \1 ~, o' S3 q
  590.         return TRUE;
    + y( b( w8 Y$ l5 b/ B
  591. }
    % [/ b$ o  p2 J
  592. 3 B; F1 V4 V# Z! S3 m8 q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 D( y: x& C% {) p/ `
  594. {. c+ i$ _$ N5 l: y
  595.   int i;
    6 E2 |- Y/ y) ~
  596.   char *szRet;
    9 |3 J3 {% b" ~* f, h7 n
  597. ( i' z; s9 s5 u3 r! O: H
  598.   if(pSource) { itoken=0; sztoken=pSource; }: |- z: y) r7 L: ]) e: |
  599.   if(sztoken): B& I% C; _  v7 ]7 a
  600.   {
    9 j/ s: o6 c& w4 |. y2 U9 n
  601.     szRet=&sztoken[itoken];! j4 q% Y/ c$ l7 n
  602.     while(sztoken[itoken])
    9 u2 {8 c5 \$ s- b! z9 d
  603.     {
    7 f- G: \" s0 n' e! N% O
  604.       for(i=0;i<(int)strlen(token);i++)2 H" t6 o' l/ n: i
  605.       {, Z! z8 V- m& d' R3 j7 _
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / h  ~4 v/ z3 K$ k& I
  607.         {! _- V* {% E) r. ?, d6 E
  608.           sztoken[itoken++]=0;
    & I7 I9 t3 Q8 ?$ e8 y' k
  609.           sztoken[itoken++]=0;
    $ r- w! O: F) z8 |5 c& J
  610.           return szRet;
    0 `) t' o, u- u3 H0 n  d
  611.         }
    ( o% O5 s2 T3 P
  612.       }- |1 J5 \  E8 M  b4 L" K2 C
  613.       itoken++;
    / w3 n3 D- [% @$ d$ `
  614.     }% E. O6 s  e0 h2 d
  615.   }* [2 s0 R7 P1 n9 N6 t' O8 x
  616.   return NULL;
    5 N2 ^' V4 y/ i8 y6 h7 e
  617. }
    # o6 G5 E( ^8 Y& _$ ?# ]
  618. 9 ~3 D. y2 n/ o) }8 F
  619. void ProcessProc(long Total,long Current)
    7 v0 ~# p0 j9 s# _" @9 [6 A
  620. {; o, }3 B. ]2 Z. w, U/ K& }, ^. F
  621.         MSG msg;7 M; L5 k1 Y9 H$ p+ n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( x# [5 b" M$ P. g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));& Y* n* _  \" H( W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 t: m) Y4 a6 `& S( s9 B( `
  625.         {' ^6 a- D, r# o/ Q$ u# j
  626.                 if(!GetMessage(&msg,NULL,0,0))
    , w* Z' m2 r! _( n
  627.                 {
    ( a; S7 i' l# g% b
  628.                         return;4 \. u1 a1 u( F  K" u3 T5 V
  629.                 }, H' k* t9 q+ D" T" g
  630.                 TranslateMessage(&msg);
    8 ~/ ~" ]: ?9 G& {; N
  631.                 DispatchMessage(&msg);; Z3 y, c9 A) ?; m
  632.         }        5 c6 Y  q. n8 H( {4 q$ y
  633. }
    / y$ _# x0 g8 _% x7 V! B

  634. 1 S9 x7 n4 }$ }! j
  635. BOOL bFirstChar=TRUE;
    $ c; Q1 t! R$ j/ k

  636. * T9 t3 L3 _+ m! ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ [7 o* L/ F0 _, a% S
  638. {
    % {+ T$ [5 P5 S; Q/ _
  639.         // TODO: Add your specialized code here and/or call the base class
    ! B1 Q. O; V: t- g0 H  Y. a9 y& H
  640.   switch(dwProgramState)1 G* T, W3 k  \' U* w( Y' m( q  _
  641.   {8 g5 h1 c0 O8 `6 H8 `/ M6 U' ~2 J. n
  642.   case AP_NOTHING:
    " V/ D% u; C1 P0 Z4 P7 O( M
  643.     switch(dwStartUpSteps), @' l8 v  C$ B5 z0 _/ g
  644.     {
    5 h( T1 T/ H8 P) V5 B- @3 q+ q
  645.     case 1:
    7 J1 e# Z8 m% [* Z& f
  646.       {+ Y6 [& r& V' V5 r: a
  647.         int i;4 d( Z$ q& y/ y' v4 ^0 X
  648.         CDC *pCDC=dlg->GetDC();
    ; ], p, p" ?( s' {& h0 F. r
  649.         HDC hdcwnd=pCDC->m_hDC;/ @8 N; Q* z3 R& ^6 T9 l4 n
  650. //        Graphics graphics(hdcwnd);4 x* n7 g$ L  ~/ V2 @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * D7 R- Q) U6 d* b( q6 o* x3 W
  652. //        INT iWidth=bitmap.GetWidth();
    " v. m3 x% u% a( j" R9 e
  653. //        INT iHeight=bitmap.GetHeight();6 L6 x5 u6 D( s$ W' i! W
  654. //        Color color,colorTemp;
    . F* j" h5 K) ]2 K4 [
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 n1 D3 c0 h; h2 ^. S
  656. //        {
    ) t4 S$ v$ e) h+ p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    6 }2 ^! @9 [& @4 h) y) i
  658. //          {
      i1 ]9 N8 t1 b7 G: j3 j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: y% a$ j" o: N9 j& A
  660. //            colorTemp.SetValue(color.MakeARGB(2 W6 e  t' U: T- ]* d9 v% a. w& a
  661. //              (BYTE)(255*iColumn/iWidth),
    - s& d1 c+ R5 c! _# G; y" ~3 _
  662. //              color.GetRed(),  u% c3 C0 `6 ?( e% ]. k/ R* i1 F: p
  663. //              color.GetGreen(),
    , L* ?# t, Q" ]; `
  664. //              color.GetBlue()));
    6 G6 t6 \* P) l; d( x
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" ]+ R/ {+ U' K6 Z/ r. \/ N
  666. //          }. e( w/ I% A- F3 N
  667. //        }
    : [. T+ {. |0 u* A0 J  K+ M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 Z. C+ c) H- |  x; C# i$ t
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) D# U. x" R9 M* D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ \& Y+ q; U+ a2 m5 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # w& B' Z5 t: C, Z
  672.         for(i=0;i<240;i+=8)
    1 E1 h" O+ q6 ^+ Y& W2 S" f
  673.         {
    7 ^+ y" b" V& f( i* D9 ^! W
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 T5 x5 O$ U( _- y% ?  Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 b) b, }* W% S) w& f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. B( u8 m, b' f8 k
  677.           Sleep(33);
    0 ~' U/ d! G( C6 ~
  678.         }$ @8 D- v  L* x$ _6 v
  679.         Sleep(1000);
    - ]5 Y1 J# ^/ d+ o
  680.         for(i=240;i>0;i-=8)
    # p  j6 v# d1 ^4 V  J( w
  681.         {
    " z, E# b# b6 J0 o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % x4 ]7 D$ d: Z6 B1 _9 f9 K: z( v; p% c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 U# s$ u, c/ C0 ]1 f1 v9 ]
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + B- L) u; w! ~
  685.           Sleep(33);
    6 h- t% A5 L& `9 o
  686.         }
    : M* [2 L0 N) C" {
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , M$ h2 X: F: Z3 @' u9 |: a
  688.         dlg->ReleaseDC(pCDC);( G& {, ?* o' V$ m+ q" |$ e0 g
  689.         DeleteDC(hdctar);
    # ?- h& ^# u7 X
  690.         DeleteDC(hdcsrc);
    / @0 N& g$ W1 }% V: t
  691.         DeleteDC(hdcorg);6 q' k% X* X6 W' n# Z6 }5 L; I' m& O2 l
  692.       }  N1 ~( F; M/ |6 C3 x+ }! f* Q  J8 b# |
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % [7 [9 A$ u0 h& F" b1 W
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' I. |( H2 C, m4 O& n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & H0 q# P7 I. f, J! F; o4 l
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! W5 f* o! d. f2 X- A+ g& {3 l
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 w# K( z1 W% M- H& z+ h
  698.       if(!Dn.Connected())1 f" I/ |1 P; B0 K+ t4 w
  699.       {  R1 D# ]6 K% ?: A
  700.         dwTotalFiles=1;
    ' D  h  q- `8 a, z' h/ n
  701.         dwDownLoaded=0;( }2 ]0 j8 F  ]7 J* U/ s
  702.         bSilentStep=TRUE;/ _# F3 Y6 A, n" q4 q
  703.         bCompressed=FALSE;! w- F' n) I- T( d2 ]* V
  704.         strExtLocal.Empty();$ v8 Q( ^$ Q' e1 U* b2 c7 o# h! ]
  705.         strFullName="readme.txt";$ g$ b( I" G7 T! X- y
  706.         dwProgramState=AP_CONNECT;2 w9 v9 u$ e, Y# {5 ^& Y
  707.       }
    9 u2 b# G% t% z7 }
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 d" t2 p* k% U5 a9 v6 o
  709.       dwStartUpSteps=2;
    4 Y& V$ e! T: Z2 e% X# S( y  G
  710.       break;
    ; H% K& S( [) z( a
  711.     case 2:
    + A* v, _; G8 ^
  712.       {
    - _( B) i, [8 B) s
  713.         int iEOF;( t5 E: `: m' Y1 S. ]' g2 y. I* o# L0 B
  714.         FILE *fp;
    : D5 z$ y; H$ ^
  715.         char szString[512];3 O, W0 D4 i% ?2 h$ G  l  c! ]
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");  L& ?: t! Z6 _' @
  717.         if(fp)
    , q9 |" j0 M9 {4 a. d: O" y- ?
  718.         {* I0 E$ P4 C5 E7 U, j
  719.           do
    0 Y( @: d" o# |2 b8 t: s: V
  720.           {
    ' ^0 l8 L- X  A4 j0 B
  721.             iEOF=fscanf(fp,"%s",szString);& h1 p% Z  n" O7 q0 u/ w
  722.             if(strlen(szString))
    % w/ |" M# K- s+ \* K5 R
  723.             {
    + D- q1 J7 s  `1 d$ L* q8 E3 M) P
  724.               if(bFirstChar)! j: Q+ `/ q5 K- k
  725.               {) ?5 L- C2 v$ o9 o
  726.                 bFirstChar=FALSE;/ @; J+ t1 M9 b0 q$ m7 j
  727.                 bConnectIsBig5=FALSE;+ ?2 @, o0 Y8 c9 v( @* t7 x. }
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;" E. ~' c, o$ s# M' L6 q
  729.               }
    6 F# i" D& T# p
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 z! S2 [, r/ {- e1 |# ^. n) Z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) V7 o2 q( I" Z9 c  O* y$ h( L
  732.               dlg->m_ListText.AddString(szString);
    " p) l9 w8 {1 L7 \; F, B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 y3 f2 z( ?/ U, s% R, R: C  ^  R
  734.               *szString=0;
    4 ~4 U" d0 O  q, v/ P( x" ^. k
  735.             }: |1 n1 H% s% q
  736.           } while(iEOF!=EOF);
    + I3 g0 {$ k+ p0 F+ }2 G8 X2 c, v
  737.           fclose(fp);
    / u4 K6 c* d; i( B. c; a
  738.           unlink(".\\DownLoad\\readme.txt");! b7 }5 E1 }" }% B8 }. l, c$ u" q
  739.           dwStartUpSteps=3;
    ( t% m: ~' V0 `6 {+ K6 J# o
  740.         }
    1 S$ o- `+ j% e, b/ T: [$ y/ w$ N2 }
  741.       }
    ) w$ ^0 @3 T& v+ i$ D* {6 j+ \
  742.       break;8 I! ]" P! t7 I* ]4 v- w
  743.     case 3:
    % e& j" c5 u, Q* @( n6 V
  744.       if(!Dn.Connected())
    , h% g) B  P" G; L& o; Y' D# n5 S
  745.       {
    - n# G% V0 O5 V8 ]' C
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);0 {& }$ ?/ h0 @0 w- Q# n7 R* I
  747.         dwTotalFiles=1;3 y; I& ~$ E4 w3 O. m5 V
  748.         dwDownLoaded=0;7 S& i! V6 O( A0 |$ q
  749.         bSilentStep=TRUE;6 Q3 r7 F4 P/ U: ?7 w
  750.         bCompressed=FALSE;; z/ \8 l8 I9 K  Y
  751.         strExtLocal.Empty();
    & s( R' B6 v0 |+ @9 Q' o; f
  752.         strFullName="checkversion.txt";
    / R" v( V. U# V4 ^1 f% \6 I
  753.         dwProgramState=AP_CONNECT;
    % b- ]" g% y" \) E* l" Y5 m
  754.       }+ e. q9 k# J, x
  755.       dwStartUpSteps=4;  |! w8 S: x6 q# P
  756.       break;  g$ P8 y% {, V' z
  757.     case 4:
    # t/ z" D) N  f9 A  J5 u: c, H
  758.       {( I+ a3 @& Y+ p0 W
  759.         FILE *fp;
    # Y3 k6 R5 [+ ]/ K5 z5 T# x5 h
  760.         char szString1[128];4 |: f# e, G, v" j* l7 T/ Z
  761.         char szString2[128];
    " [8 R- D$ ^# I/ f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ! W. b+ `0 E; f- n1 X
  763.         if(fp): P8 n' r0 a' R  R' V0 M$ h: _4 |/ x
  764.         {9 S; n0 O+ b) P. P! A! H
  765.           fscanf(fp,"%s",szString1);
    ) N4 e! `  j4 @, l+ G; Z
  766.           fclose(fp);, s# v) E+ R6 c3 K+ ~- l/ a
  767.           fCheckVersion=atof(szString1);
    ' Q% m% ^7 ]8 k4 o2 C2 B
  768.           fp=fopen(".\\checkversion.dat","r");; e9 o, z: T( S6 U. \$ T( {
  769.           if(fp): A4 m6 v! G" \1 a* Y4 i" [
  770.           {
      [0 a( K+ m2 H3 L; f
  771.             fscanf(fp,"%s",szString2);  N5 O, P# S4 |8 ^* p. W* N$ ~
  772.             fclose(fp);
    " N& M- s! L+ s4 K
  773.             if(atof(szString1)!=atof(szString2))9 |9 y( o& ^* E) T3 J! b" B5 R+ [* O
  774.             {1 o5 ~6 J0 }1 h% r
  775.               if(!Dn.Connected())
    8 t# ^6 }8 v# d* Q; C6 j# k
  776.               {
    * _4 [8 ]% ^  t% ~% f: u' U
  777.                 bFirstUpdate=TRUE;
    3 v% c) @, R8 F2 Y& r2 v
  778.                 dwTotalFiles=1;
    : N" H( \+ I. U7 C/ t
  779.                 dwDownLoaded=0;
    & f7 y( i8 ]% f' f8 K% v
  780.                 bSilentStep=FALSE;( G/ U3 a  s+ w$ q' ^
  781.                 bCompressed=TRUE;& @4 k( I9 ?2 ]- _9 ?
  782.                 strExtLocal=".\\DownLoad\";$ U9 K3 [+ K4 c4 N
  783.                 strFullName="update.txt";
    " _! T( L. X; O! S# A  @! E' g
  784.                 dwProgramState=AP_CONNECT;
    . e5 e- W( o1 L1 r, h/ m- L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    9 ]: S/ N3 {& o+ ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ p' f3 [3 [( n& \: Q$ H( I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 C9 H+ R) G0 W* ]. s- k7 r# o

  788. ) \! n0 c8 {0 _2 c- l/ L3 M
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; b' O8 c: I) n6 @/ }2 P0 a* r
  790.                 unlink(".\\DownLoad\\checkversion.txt");3 H0 o( u$ I' a5 c
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" C/ }! g* n4 w3 W8 D
  792.                 {$ W- k, P5 x/ `) ]. L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 y" B* ]% v$ X; H$ ~$ q9 j% ^
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    - D/ h& C6 a# [# Q  h  I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% m/ W5 }4 S+ C. J
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + m' O- F7 ~' m2 S1 e( M! h
  797. ' X7 m/ R7 Z! I. X7 R  `" r3 ~1 }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 @2 b/ b3 f+ O5 Y' y) \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. e0 X7 ]6 B$ P. K
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " K+ v1 P4 y, s) x* J& C
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 [8 z. L3 Q  R5 T2 ~
  802.                 }+ U, d* i4 u( k  W$ v. Z: [
  803.                 dwStartUpSteps=5;
    " R) q: i  z, R+ P5 V' [+ N
  804.               }
    ; j& x9 L! M7 l' z( ~  o, x; t
  805.             }7 W1 B/ d2 a" h- v) c1 i$ m+ W7 I  z. @
  806.             else7 a7 O. {* P: Y; W9 N4 m+ X* f
  807.             {, L4 h9 r! D2 X4 M: X/ e* z+ e. G
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & J( U' G  V* J' K% F, D+ V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 a' ^% F: Z1 p3 O3 Q4 U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: |8 y- b, k: D# ?
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ x& A4 W8 B5 c' O& v$ |

  812. 3 j, K4 }' `8 \! E: H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - G- Y, f1 x/ ^) A
  814.               dwStartUpSteps=99;
    4 [) B' F+ c# ^/ X$ i
  815.               bFinishUpdated=TRUE;
    - _8 l$ W# _. r- u4 g
  816.               bCanUpdate=TRUE;; n6 f3 Y; `# x5 p  b
  817.             }$ i6 d8 [6 }2 W
  818.           }
    8 }1 j# x) y+ H/ j, x% s' j
  819.           else
    : I+ ^; g8 @2 R
  820.           {& _! r) |5 |8 o3 G+ u
  821.             if(!Dn.Connected())
    . c2 L3 L  U1 }4 `+ h+ Q# D2 ?
  822.             {
    ' k4 E4 ]$ l. o; Z
  823.               bFirstUpdate=TRUE;
    ; \3 v5 `0 s2 z& T% m
  824.               dwTotalFiles=1;
    3 a# \' g7 z% C# F: l$ ^. W# N; @
  825.               dwDownLoaded=0;
    ! b. o" y6 N% f" p, Z
  826.               bSilentStep=FALSE;
    ) ~$ D' T$ R: n/ D0 u% C! D
  827.               bCompressed=TRUE;8 w0 M2 }1 f. M; ?
  828.               strExtLocal=".\\DownLoad\";# _7 ~& v5 ~0 b6 ~( e. g
  829.               strFullName="update.txt";
    - [( y6 T  Q& r4 n' r( q" w; [
  830.               dwProgramState=AP_CONNECT;
    0 H" [$ M$ |* j& c. N
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- t) c* M  ^& _3 f/ W2 B
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - U# m4 d  B4 Y3 G& p* \- p% D. _
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 `7 \5 |$ C0 |; S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , j6 }- }) B6 I4 c! c
  835.               unlink(".\\DownLoad\\checkversion.txt");: h5 K3 W1 \8 ?- A. o. e3 |: J& N" n
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    + Q7 s3 l# p9 ]+ J& F1 u4 z
  837.               {
    9 Z; B! N* ^( d; F
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");8 Y7 r) v" q9 j' c# a3 u
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; h- `2 ^' s* V! t3 K
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ) E# W+ x' S% h
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# O6 J& X2 B. h" \" Q
  842.                
    9 w2 f( X- q6 Z1 }  H/ N: o9 Y
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ M. c  N; x: M8 S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% Y- _* h# s# a. F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");/ D. _3 [7 U% }" D9 W, w- }) e! c8 ]
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # ]9 S8 A" v! I- W' B
  847.               }/ _& c' Z6 Q2 ~1 w1 h1 o
  848.               dwStartUpSteps=5;: y( B4 U3 R5 H, s- o. p% f- [
  849.             }
    1 Z- N; m2 w) f0 E) B6 n$ S/ r
  850.           }
    1 J# v$ }6 d7 l/ [. z  f( D+ R+ S
  851.         }
    * m6 I7 n3 p1 ^: z1 ]; A" B
  852.         else5 s& ?+ y) ^/ X6 i0 i- T- n6 q# v
  853.         {9 n% p* [' [9 i; U/ C
  854.           dwStartUpSteps=3;
    1 W. q* K1 S$ n
  855.         }" h1 Z& T9 T) G3 q) f
  856.       }# s1 v) ?  K0 _
  857.       break;/ T# h5 K  s4 F8 b5 g- J
  858.     case 5:7 T! F" A2 `" U& L$ Y" j# {$ k6 E' E
  859.       {" K6 h  O' i. a- n3 {* p) d
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)6 y+ h8 e% }: O3 F' q0 S8 X
  861.         {- s4 s2 k/ r" v- }
  862.           int opt_overwrite=1;: i  f9 G. M, A4 J% m5 d* M: d( v
  863.           int opt_do_extract_withoutpath=0;+ h/ V' p3 C9 E  K# s; y, J1 w6 Y% N
  864.           unzFile uf=NULL;
    / \1 T! A9 o8 w/ ]6 s4 @5 e

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

$ F- p# X% O4 y0 j3 H; t
9 H1 I  H, c1 E" n

評分

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