找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
' a- ~& p. g) I4 v
  1. / RevApp.cpp : Defines the class behaviors for the application.; Q) z9 L: i" v8 R+ s" Z6 }7 Q1 z* s
  2. //6 l% b) d: m0 M0 Z$ P7 j
  3. 5 V* `2 s. `% x) b0 v) k6 g6 [
  4. #include "stdafx.h"& l4 O  |8 W2 B% p! L  j1 T. r" p! E

  5. + M3 P$ @- ?4 y- ^, V$ w9 J, l7 a
  6. //#define UNICODE
    1 Z1 O7 Y( W( M6 E% D/ [3 @
  7. //#include <gdiplus.h>2 t- D$ d0 g* \
  8. //using namespace Gdiplus;
    & q5 W' l- n  ~5 S! f
  9. ( f& t" V: Q: o& ]8 _# h, r3 s" V
  10. #include "RevApp.h"8 J7 ^' H  r& t* Z3 V
  11. #include "RevAppDlg.h"
    ; B& E5 |. ?) Z3 F
  12. 9 r% B( C! j7 H7 \7 Q# r
  13. #pragma warning(disable:4786)
    8 r! z- h5 \8 l
  14. #include <map>
    6 O# q6 `  m# M# w) [* ^
  15. #include <list>
    $ x' n% I) }9 v: F, m. o9 a& S' u
  16. #include <direct.h>6 v" g) J% ?8 M1 n6 z
  17. 4 i$ c. S+ p7 [
  18. #ifdef _DEBUG
    1 Z9 @  D; x8 p9 ?# }9 j
  19. #define new DEBUG_NEW2 y! C  ~2 g1 Y: G) V( f
  20. #undef THIS_FILE6 q( u6 ?, Y7 q/ }% Y1 Z+ \: X) v* Z1 d
  21. static char THIS_FILE[] = __FILE__;. X* }1 c/ W& z1 x7 Q5 O
  22. #endif6 I! y/ O( G7 L$ p! i+ S: E" h
  23. #include "SkinResDef.h"7 V# b$ P* N$ h- q6 g
  24. #include "ChangeBG.h"
    : @/ G5 b* |0 U( M) Z$ e* S
  25. #include "AFXINET.H"4 I- J2 v. i; N6 j7 o
  26. / \8 z& g* \8 \" S2 h
  27. #define TRADITIONAL_CHINESE 0  I# Z) A+ \7 W8 U! n  X5 K# T5 {) f
  28. #define SIMPLIFY_CHINESE 1, k5 N* J. V2 @2 e( l
  29. #define ENGLISH 21 t1 g/ c  b+ I% U0 H3 f: S
  30. int m_iLanguage = ENGLISH;: m2 q. {( L0 B" l6 m
  31. /////////////////////////////////////////////////////////////////////////////
      ?, H8 c! g5 @
  32. // CRevAppApp0 w: i& h1 x# b! B
  33. 5 M8 a! K8 \* X% A: ?8 ?4 ~
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& Q1 `5 S9 [- @) ~# c
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 z, E- a8 y9 Q$ g& X3 P. z" E
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 J: Q7 I6 o. ]. x8 P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    $ v8 \6 g" [- H. i6 i2 j
  38.         //}}AFX_MSG
    ) Y, w% A/ A- M& q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! E8 l) B/ h& f! r0 x
  40. END_MESSAGE_MAP()5 Q# E" [+ G! {! x

  41. - y" V6 b1 p3 |0 ?
  42. /////////////////////////////////////////////////////////////////////////////
    : K/ s0 ^' o- d* Z
  43. // CRevAppApp construction
    $ T5 R" q7 Q1 {7 g. Y+ k3 p+ }

  44. ' {1 n4 w. ~: n5 [) D
  45. CRevAppApp::CRevAppApp()
    $ M. b2 D5 \: v5 X2 j, c
  46. {2 h  p  w* b' Q: f+ v6 ^
  47.         // TODO: add construction code here,
    " J/ J& u* W  n% \, I" u, U& M
  48.         // Place all significant initialization in InitInstance
    8 f: d. v5 d( E- I" b
  49.   bDisplayIsBig5=FALSE;
    ' f4 c/ g9 E0 V3 G. R  R
  50.   bRestartUpdater=FALSE;
    $ C1 S+ ^9 ?/ E; f
  51.   bFinishUpdated=FALSE;' x) ?: g# E8 u" J/ s  N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " W: n7 U+ ^; p6 o+ i. S- q8 C
  53.   InitChangeDataBig52GBKS();
    3 V5 x4 ]& _7 A! ]6 D
  54.   InitChangeDataGBKS2Big5();9 p+ X$ Z$ ?2 |) E8 Q6 e* m2 Y
  55.         //
    1 @3 E% J) L; ^/ b( ^
  56.         bClickRunExe = FALSE;
    9 v7 N- c7 o1 Y
  57.         //
    ( G, G  B+ b5 s5 Y6 O6 z) |: J
  58. }( W8 a1 ]; S* B4 p3 F0 [+ o* v7 m

  59. + J; `* Y7 v0 r$ [' ^
  60. CRevAppApp::~CRevAppApp()  g$ [0 o" w9 M
  61. {& A1 }: s+ x5 W  O  I
  62.         // TODO: add construction code here,1 n7 A; @" I# z2 M% j+ o$ \0 p
  63.         // Place all significant initialization in InitInstance
    7 Y4 `( {" d5 Y$ S# l
  64.   EndChangeData();. E9 Q3 P7 T- o1 A) y7 Z  A
  65. }3 H: z2 b! C* n& P$ p6 @* Z9 g

  66. ! c/ X& d6 R" O% R7 r# c# ]5 y
  67. /////////////////////////////////////////////////////////////////////////////
    # G5 H2 _# w/ q" O2 J# Y* F
  68. // The one and only CRevAppApp object3 U; L/ U2 s* u) W7 V
  69. - ^8 q  O# j  E; l
  70. CRevAppApp theApp;
    2 X7 G2 T; |- ~, x" D9 X

  71. 8 V2 k4 |4 x( X* u' O- c7 U/ `% Y  I
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% e" a+ x: T2 l0 U
  73. {  h  _' ], u4 ^4 @- x9 [2 H- ?3 p
  74.   int iEOF=0;
    / k- k- I% X1 k( T) M) m3 I
  75.   char szTempName[MAX_PATH];& Y' ?# g8 T" A* B) P
  76.   *szFileName=0;
    - g. u0 P) |. {  e; B
  77.   iEOF=fscanf(fp,"%s",szTempName);& ^# n% e5 d: Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 q5 ?2 G5 z' W( k9 f' h
  79.   {2 u8 N* d1 ?  `/ O4 M
  80.     strcpy(szFileName,&szTempName[1]);
    / ]- W1 S7 A3 \- D1 Y1 \8 O
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 l7 o7 ]8 O& W/ T+ D
  82.     {$ K- _3 m$ i: l3 w' _! Z
  83.       iEOF=fscanf(fp,"%s",szTempName);9 q& K0 `3 |) Z4 W- A* }( T
  84.       strcat(szFileName," ");1 B0 c7 k6 ?& `; H6 f
  85.       strcat(szFileName,szTempName);% j; ]" S" n, E. Y3 P7 x$ ~
  86.     }
    1 w9 Z( B! x; Y* ?
  87.     if(strlen(szFileName)>=1)
    2 G2 j1 ^$ x2 [
  88.     {+ f- X. R2 F8 i# e) B6 i7 m0 U( a
  89.       szFileName[strlen(szFileName)-1]=0;
    3 P4 j, o9 W& l, M: G; @3 Q
  90.     }' t  n) p2 `5 i5 u$ V4 z6 k
  91.   }3 \. o/ @  [( F! u
  92.   return szFileName;
    8 f! N4 O8 G2 a9 c
  93. }' z  Q* S8 |  J+ g( F

  94. 0 s5 A5 P! b' f; q- G- d
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # x0 \2 O2 Q2 \. S$ U& r
  96. {
    4 x" N9 j0 U4 I# z) l
  97.   FILE *fp;2 E. A% p8 V- U8 Y- x2 ^3 V
  98.   char *key=NULL;
    , g  n) R- ?4 I2 z( T0 z
  99.   char version[MAX_PATH];8 J8 o; X* n5 S* V: S4 s* x% o
  100.   LPUPDATEFILE file,olds;
    ( g1 }6 g1 R$ ^" X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: B% ~* w5 C) q& V7 }5 }; j) z

  102. . X/ o  {7 j5 F5 I
  103.   UpdateList.clear();
    6 q2 V% T3 s" x0 J5 p, o& Z
  104.   UpdateFile.clear();8 n& r5 j  Z5 Z& j3 `7 a
  105.   if(GetFileAttributes(filename)==-1) return false;& d$ a1 r( g1 }
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 y* V" F% y3 |* c9 e
  107.   fscanf(fp,"%s",version);& x+ c$ \" {) v+ ]6 Q# C
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }. `; U* H0 N+ e, G0 x
  109.   while(fscanf(fp,"%s",version)!=EOF)4 m7 f1 Q3 u! m9 Y6 ?" ?
  110.   {# l( \4 i+ M. p/ {& y3 W
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 v7 C- o4 E* x: F( w" N
  112.     fscanf(fp,"%s",file->path);% t. f1 i+ f# n
  113.     ReadFileNames(fp,file->file);% d( l5 A) p' f' l
  114.     strcpy(file->full,".");7 n9 e( z) m( a# g
  115.     strcat(file->full,file->path);
    1 P: j$ P" j, {$ E2 v
  116.     strcat(file->full,file->file);
    ) z' ~0 A3 G- T& d4 s
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    " P' T. G8 Y& o: y1 U8 {' e* T! L
  118.     {- k2 B2 T9 `# Z) p! r& k8 x
  119.       file->vers=(float)atof(version);
    . t4 A1 S& k# K
  120.       UpdateList.push_back(file->full);
    / o- ]- t$ o* q6 r( s9 ~/ ~* N  L. g% i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " ]" y, ?5 r+ C! u
  122.     }
    ' |5 d, z6 z" O
  123.     else  t6 u0 g6 d/ Q/ K
  124.     {
    ) n! `1 X1 l1 i) F- c
  125.       olds=(*p).second;$ N9 `% }5 ?! ]( _
  126.       if(olds->vers<(float)atof(version))
    5 K- v) D) x3 V
  127.       {4 O# t# m& y# D8 V
  128.         olds->vers=(float)atof(version);6 M9 u  z/ e3 b8 i0 Z8 L
  129.       }
    0 B( q2 h9 t! p9 c
  130.       free(file);' Q2 [! v. h& I' p; ?* m
  131.     }& C) ]: Q+ q: m0 z; ^8 a
  132.   }
    . g( x( n/ y- q% K
  133.   fclose(fp);
    ; [; ~# {; b! a- v
  134.   return true;
    + j# G9 P" K* T- L" y8 n
  135. }3 v! K6 t+ x& O9 p! g
  136. " C$ D! N5 R$ o: B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" m3 d2 R# g* y2 Z8 r0 y( `
  138. {: ]3 q( O" Y) H, _- ]- O2 i! F
  139.   TCHAR  szFull[MAX_PATH];
    6 p( i/ X$ O* H  l& d
  140.   TCHAR *token,*inter;
    5 T2 }4 N! B7 |$ g! M% @
  141.   *szPath=0;* S+ B" _4 r* j
  142.   strcpy(szFull,szFullPath);0 t9 r# N6 o' i7 |7 j) D
  143.   token=strtok(szFull,"\\/");
    $ G$ {6 \7 E/ A. D, \
  144.   inter=token;
    . `8 I! G4 X' \# E
  145.   while(token=strtok(NULL,"\\/"))
    - ^; E4 s; k. `, a
  146.   {
    $ q) s& B; F+ O+ y" Q
  147.     strcat(szPath,inter);
    ; |6 o% S  h1 N8 e- ]+ y
  148.     strcat(szPath,"\");
    ) @8 b8 ?. @7 O: h8 f* ^
  149.     inter=token;% E1 A6 I9 w2 U# {' J8 y' E
  150.   }
    ! H; @9 p4 ~1 w6 H4 u) I
  151.   return strlen(szPath);
    0 ^2 ^5 r# |* o4 w, q3 e
  152. }
    8 C7 X& W& R+ A( k

  153. 8 C4 H2 w2 L$ M4 P3 P! C& r
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* u$ }8 D6 `6 g) t+ I2 q
  155. {
    9 \9 _& C! N7 D: a2 {& m8 F! H/ ^0 z1 t
  156.   DWORD attrib=GetFileAttributes(Target);
    3 }2 u# u' q6 {- x, G; I9 K
  157.   if(attrib!=-1)
    % N: H4 q4 X8 A* f
  158.   {
    4 L$ y/ X" M) ^5 ?) B! y" B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    8 z8 G; b) m" K+ l- @! a; K% d
  160.     {) t% w% L( Z% Y6 J5 L$ ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 X' K" C2 \1 k# a
  162.       SetFileAttributes(Target,attrib);
    ) q% @' H8 r5 z0 N5 R- S. {
  163.     }' n. l; {5 L% ?" \1 z( b: J
  164.   }8 Y$ q2 W+ B' B* u+ }1 k8 K
  165.   CopyFile(Source,Target,Erase);
    # \+ m+ J) [& Y
  166. }5 K9 k+ n. X( j0 ]
  167. 2 b/ n: _4 W9 O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); g, F/ P% W3 H% r2 ?" a6 }
  169. {
    1 |7 d7 A$ N1 k0 U
  170.      FILE *fp;3 E# X+ H' @# G8 h
  171.      char  szBuffer[8192];8 h  D/ @1 M: W$ A3 V) ?: ?% {( }
  172.   va_list  argptr;+ r' a$ |- m# }$ m5 O4 C& H0 V
  173. 5 g) P/ [5 N1 J! w
  174.         va_start(argptr,message);
    3 c# R  U" t; @
  175.         vsprintf(szBuffer,message,argptr);
    % K7 d" x4 w( c$ t" t9 h3 u
  176.         va_end(argptr);( Z) f) B' ^: S; Q5 G
  177.   fp=fopen(FileName,"a");0 v- E% N4 b* ^
  178.   if(fp)7 u3 I% _3 a9 y
  179.   {. D6 H! s1 s8 j- k
  180.     fprintf(fp,szBuffer);
    ) X0 O: _$ ~5 e1 K5 P" B- ~
  181.     fclose(fp);) e# |7 @! U% g0 g1 r: S
  182.           _flushall();
    ( M4 b: v' J" z; i* x+ G6 Z; U
  183.   }
    2 l; d; m, a' x' h5 M6 n/ `
  184. }& A- C5 p# O9 F% p+ s* f9 t0 ?/ z
  185. " b! U* h7 Z' s* z$ B% |
  186. BOOL CRevAppApp::Fclearf(char *FileName): X1 a& b' }$ h5 i6 A& Q
  187. {
    2 S1 y( f$ i' [. z
  188.      FILE *fp;
    ' r8 _- S8 Y+ g0 |& _$ P
  189.     DWORD  attrib;
    , }" H. Y/ p- _9 L% a
  190.   attrib=GetFileAttributes(FileName);/ _" N* }* U; Q& `9 B+ Q
  191.   if(attrib!=-1)
    1 Q( Q, G& U# w+ ?) _2 Q
  192.   {! [5 V# b# {1 v" y2 |) R9 z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 Z; s& I. E( B8 t" j! U
  194.     if(!SetFileAttributes(FileName,attrib))
    ! P6 T) o" y+ y9 w; k
  195.     {* O) p4 I+ g" g& G
  196.       return FALSE;
    8 k2 @$ p& _5 Z* C; I. X# V3 s" E
  197.     }
    - B. i2 j+ o. t/ x0 F
  198.   }
    0 [. N$ s: `0 r( T0 ~+ h
  199.   fp=fopen(FileName,"wb");
    ' H5 @8 P- j2 V: p
  200.   if(fp)4 U/ f4 {# A& i
  201.   {* F# d) w. M! c) Y/ ~0 c
  202.     fclose(fp);& X) G: g8 p) d* r' N9 p: ~" C
  203.   }. t6 K2 T& o4 z+ Q. S2 d9 _
  204.   return TRUE;
    " B9 p; W3 C4 J0 c9 e4 q
  205. }5 D7 O; u% B- A+ S6 e
  206. 4 y' R  d  J! @' N( v" G. N
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . N' A5 Z9 O" n& p3 G
  208. {
    ) y  O  P8 x3 |9 U. q2 ]/ P
  209.   char filename[MAX_PATH];$ O# D! K+ s9 u2 T
  210.   LPUPDATEFILE file,olds;
    $ ~' t8 T0 w0 C3 p; q$ T! z
  211.   std::map<int,CString>::iterator i;
    6 u, J. h, z3 N5 d# T" J0 s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: M0 o( `$ d. Z  p1 K9 k: H* o
  213.   std::list<CString>::iterator l;
    ) @8 y' r( p9 E
  214. " Y$ j( N. p6 ^6 c/ o$ e
  215.   if(bFirstUpdate)
    ( `/ O- [& L% Q( w* Z
  216.   {) b7 y( {7 N2 a5 z* s
  217.     dwCurrFile=0;
    ! U0 i% h8 a) w9 @0 C9 u/ ~3 D
  218.     bFirstUpdate=FALSE;2 ^: \/ }. }) t/ @
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 ?0 s: o8 ^7 n. W2 V/ d% T
  220.     {8 e7 N2 C) @4 O$ S2 j; e
  221.       dwTotalFiles=UpdateLocal.size();7 \! I8 `. L( U- [  M; j
  222.       dwDownLoaded=0;( ~6 k! A8 X; s" K
  223.       bSilentStep=FALSE;2 S2 ]6 n# V/ \' B  s2 l
  224.       bCompressed=TRUE;! y) z  T) @9 y, R0 D8 a) P; j
  225.       strExtLocal.Empty();6 z  O( W. Z) U' w$ v2 O
  226.       strFullName=(*i).second;2 g. h6 `' h1 o. d9 I% T
  227.       dwProgramState=AP_CONNECT;
    0 M8 U4 `2 f% f3 s$ s0 S
  228.       return TRUE;" u% a  m, |. B; B
  229.     }1 x# {/ y- S( g0 [5 v) s1 v+ F
  230.   }
    3 m3 O" j3 s) o7 Z7 s0 S3 [& [
  231.   else if(bRestartUpdater==FALSE), W( i) j0 z. T+ l2 f& q- ^
  232.   {
    1 y0 `0 S7 j) q% G7 [7 ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 w+ r* [- I5 M+ R
  234.     {  d" s, ]9 Y- \- k* }3 D
  235.       file=(*p).second;
    ; t& y' }. B- F2 f1 L2 q  d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! e1 {* ~$ o* M  n1 q: x
  237.       {3 L% v$ N% G- p8 ?' C7 H2 T
  238.         olds=(*p).second;
    " m* K5 N* c' N! d2 m2 X. M5 w1 I; p
  239.         olds->vers=file->vers;) K/ ?$ @- q$ i. E
  240.       }
    - m5 ~/ G: U' o7 }: {8 b5 Z
  241.       else
    2 V1 u% i# Y9 X
  242.       {
    4 B6 D7 J5 W$ d- A+ T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . w. F3 C& ]/ ^5 k" B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) y# C3 P5 p  [5 x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! A7 k8 q* e7 R% P/ T$ ~& ~$ l
  246.       }9 T9 v: }6 K" k8 r6 V" M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ; U  T- e3 O# {5 k% t
  248.       sprintf(filename,"(%s)",file->file);: c9 g) C7 h  Y9 d: n
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 M' v. o! i0 e$ a" x" e& u# f9 K
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: l9 \7 }* K) O$ Q
  251.     }8 n) F# g+ m$ U& }
  252.     dwCurrFile++;
    , j* g# w+ a% x/ i' z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 K. T7 ]( Y) X2 J
  254.     {
      I. Q9 R& f+ Y
  255.       bSilentStep=FALSE;, ]  R1 c+ O9 o& T
  256.       bCompressed=TRUE;
    2 x$ O/ g9 t. N1 T9 E
  257.       strExtLocal.Empty();
    $ r) h) B1 j. C0 r. a8 a
  258.       strFullName=(*i).second;
      U# N8 O4 r6 P# d
  259.       dwProgramState=AP_CONNECT;. W; D% m7 q. F. ^
  260.       return TRUE;) y$ L0 I) C/ J/ w2 j3 W/ P
  261.     }
    ) z6 O9 A+ {+ o! g) l
  262.     if(!bRestartUpdater)# y6 S/ w3 b- [3 w
  263.     {/ H0 p! P) @# K# e: T8 e
  264.       int iCurrSize,iFileSize;
      O: ~) A% m: D
  265.       iCurrSize=0;
    1 q5 x+ O7 u6 K& Z. ]
  266.       iFileSize=UpdateList2.size();
    ( C# U  X# [- t! C: x! E" t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ T+ T9 \$ o+ r- E2 c& v9 w( u+ d
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 g2 v+ Z4 I- k7 v- {" o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 n& l! }% Q2 m9 k- C
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 R) `/ ~& D( I; I% @# m& T
  271.       Fclearf(".\\update.dat");7 n7 ~, X$ _2 K: H' M" v( P- r
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - |. ?+ e  B/ W% ^/ o: T5 W) X
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)7 f& U! {! ?9 w9 u" _# E, {
  274.       {' d( j7 k3 w9 J( C, J
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())6 O  k' Q% G  B+ R0 v# k% c+ C& g
  276.         {
    ! q" A- C' h# r% P; i6 K( h
  277.           file=(*p).second;
    9 l+ C5 o6 d: Z" G( ]' _
  278.           sprintf(filename,"(%s)",file->file);$ u7 R8 i' C$ L) B
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* t; n# l: n, x8 W8 H. ^- e! }
  280.           iCurrSize++;
    4 Q) d$ m$ p! R. j! Z% I' B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));$ I0 Z9 b- P' ^7 k
  282.         }
    - \4 K- R. Z3 J3 P4 z$ r3 w
  283.       }
    % G8 I4 T/ s" R* l. o, Q
  284.       unlink(".\\update.txt");
    - z5 V" S  {8 Z, R
  285.       unlink(".\\update.tmp");
    ) L; E5 o9 c1 H/ _: r  x1 ]# B6 Z- n
  286.       Fclearf(".\\checkversion.dat");' E+ H% W6 z- _4 [
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! ]- X1 C! ^6 n% L' @9 q/ e6 O
  288.       if(UpdateLocal.size())+ G9 c4 A# _8 U5 ^
  289.       {
    ; H1 k# H# A$ U# p
  290.         UpdateLocal.clear();; p9 l# M6 L+ e2 w. y5 x' F
  291.       }9 ^4 @6 E% Y# g2 m+ Q- s
  292.       if(UpdateFile3.size())
    $ K& M+ V, R0 W/ d
  293.       {
    + m5 m2 L8 @& r+ h( u3 u7 x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      x" I+ Y0 n# N3 t7 a1 I( S
  295.         {
    7 k4 Z+ C# H. c7 V/ Z! F+ H+ L, c1 u
  296.           file=(*p).second;
    4 \& Q6 e0 |$ s( e- {
  297.           free(file);. N; c+ \' G' K4 y" s, N" h* s( d$ h6 ?
  298.         }( M. K" _' u- k( t6 S7 q- U6 M
  299.         UpdateFile3.clear();
    2 s! E. `2 m% P
  300.         UpdateList3.clear();' H$ Q, n8 p: }( v+ m: J
  301.       }
    ! ?7 ?& Z, Z& m. V7 V
  302.       if(UpdateFile2.size())
    - f8 y4 {7 @. [) T
  303.       {4 c- ?0 e# y# W2 u% h; p* O3 g
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & {5 L" I. L5 z6 I3 A' O# D
  305.         {* q8 t3 R2 `' A$ w3 v: p
  306.           file=(*p).second;
    0 }+ D* u6 ?8 \; I1 e
  307.           free(file);& u7 F: E  W: [4 |0 Z
  308.         }
    9 V* V6 S; _! ]2 c
  309.         UpdateFile2.clear();
    & r* V& u- E, U9 \2 \9 t; \
  310.         UpdateList2.clear();
    ; O3 Z4 v$ B4 _# a8 o& r. l: Y
  311.       }
    " L, M. P* m4 U
  312.       if(UpdateFile1.size())
    ! \6 L3 W; P3 L) y6 `) ~
  313.       {
    5 D! i4 s! `1 f7 h1 q; B2 s
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" A) `5 k( G# N4 k+ Q
  315.         {2 W# k  ^' R  T" ]0 x
  316.           file=(*p).second;
    8 z$ a9 Y$ L# P5 `% E
  317.           free(file);
    ( Q0 o4 x; ^) P. o: N) _
  318.         }
    : K# f! R9 _; m" P# Y1 R  a
  319.         UpdateFile1.clear();* [1 n& C% E, s" {0 F
  320.         UpdateList1.clear();2 K4 j! G! z/ b
  321.       }( ?: ^6 X! X. B% a& d
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));9 g. R, J2 G. w, k: b
  323.     }+ c' {! H- y) Q& a
  324.   }9 O$ f# [; Y" p) b' z& M5 t# W
  325.   return FALSE;- _6 g7 h# H5 g3 X+ m0 k- M& X
  326. }
    % y1 I7 \4 V' o/ h- _7 e" {, {

  327. 5 ^8 ?6 ^  u- V2 p5 y% J
  328. void CRevAppApp::ClearAll(void)7 U4 s& y6 o% e$ W9 V1 z5 C
  329. {
    6 }( H" y/ k+ H( O7 Q
  330.   LPUPDATEFILE file;. }5 e. R( m, D1 r; x$ H0 R' E0 `2 S
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 _1 a( E3 O& m) \+ q7 a- S6 n5 K
  332. 8 R! I6 i# q5 U3 T
  333.   if(UpdateLocal.size())% {+ J* ?) b6 G8 K( {" g4 O! a
  334.   {. m, f  }; n/ O7 ~3 f
  335.     UpdateLocal.clear();
    5 }' x" _" |$ D: l
  336.   }
    ; i: E% [8 O" s, G5 g3 }
  337.   if(UpdateFile3.size())# Z6 t9 r: U0 j. v
  338.   {% b3 E3 e0 M) L8 O# l6 A! r- M+ u+ E4 |" b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ b# i7 C9 c$ A# k. A# i) U% R
  340.     {
    " I$ h7 U7 u& J' k
  341.       file=(*p).second;
    4 B6 ?" T4 L5 C: n! K0 k1 N) X: N4 |
  342.       free(file);9 C( z6 x- J5 r7 ?
  343.     }5 n! r: ~) A. r, W& O) D. B
  344.     UpdateFile3.clear();! l+ L8 W. C8 L7 F( j6 [
  345.     UpdateList3.clear();
    / j% Q4 W4 \. W4 R( p" t% E' g
  346.   }$ z) K2 v! \% B/ k! Z7 z
  347.   if(UpdateFile2.size())/ }, Y6 e9 T' B; r
  348.   {' T+ r$ i6 Z$ r+ O- _1 J6 P
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# U- u( m! T3 J2 u
  350.     {+ g3 h/ F1 I% }9 i' A
  351.       file=(*p).second;5 c0 o) Z5 u  Y2 X6 S, A
  352.       free(file);
    . @& U& u6 [0 ~" r; D
  353.     }7 n3 N; ^; j# y9 v) \
  354.     UpdateFile2.clear();
    ) A% ~9 [( L, ]  [5 ^2 X. H1 S
  355.     UpdateList2.clear();
    , b2 Z8 l2 v/ {/ t- n
  356.   }
    & K, @( i; U. T5 S: W7 B" ^: j
  357.   if(UpdateFile1.size())
    3 J! {$ ^5 w( ^/ L
  358.   {8 A1 B/ R/ d, S" E5 L6 d" ]+ z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 T( C6 z4 k; Z: Z# k
  360.     {3 Q- @" J9 Z+ I+ q2 Y
  361.       file=(*p).second;
    / Z' @) x5 |, |- i4 U0 i0 {7 Q
  362.       free(file);
    # A3 j7 J% m0 O2 `
  363.     }
    5 D* u1 U8 x9 F; A, W- }
  364.     UpdateFile1.clear();5 w  ]! q, Q6 c# E' L+ Q
  365.     UpdateList1.clear();. X0 q0 K/ @8 H" Z3 d3 S# m
  366.   }
    / h- w) b- X; O
  367. }  ' a, D+ a0 ?9 `9 ?0 K5 p
  368.   
      o9 e/ |: }" a/ }. j
  369. BOOL CRevAppApp::CheckLocalVersion(void)9 W! i$ e6 @2 u  O3 G0 n, g
  370. {+ p, l1 C- O9 U) B9 t3 r" I
  371.   int c;9 g, Z& C6 L2 L" F/ R& p( W
  372.   LPUPDATEFILE file1,file2;
    ( B9 h# I) }1 Y$ W; J0 ]- L& b3 v0 @
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " B/ {- Q3 j- _  Y2 w, b
  374.   std::list<CString>::iterator l;9 X3 S4 a3 o, `( d' h2 e' v
  375. ; U, e. W6 _9 Y* p1 p1 P! P; q
  376.   UpdateLocal.clear();
    & ]- t- Q1 \; m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 Q2 s5 U( e( d9 T* ?! M! n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. s% n5 i( W2 l- @0 {* \" S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : R' r4 @' l# O# S1 \( S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    & D0 x, Y( y- P' Q9 Y* X0 G9 |
  381.   if(UpdateFile3.size())
    ! k, s2 V' K" H
  382.   {# C% L1 ^1 o3 u- c- P& ]! I& s9 a. [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  r( X+ @' ?  C# g  K: N3 _# X4 V
  384.     {% ^# B' s) j- j# v4 Q- d. G
  385.       file2=(LPUPDATEFILE)(*i).second;" X% U; G' R( t% n% ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# F0 d4 s( J: x3 z
  387.       {
    ; b7 S& Z& ~5 o' A/ V2 m
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 h& J% ?' C7 S4 V! U
  389.         file1->vers=file2->vers;
    * O# Q; c3 o. w! H9 P  v$ ]
  390.       }
      H6 s4 T/ {' k7 |# P
  391.       else
    0 x/ j: w9 p- Q9 i0 o  |
  392.       {5 }; V" i. P2 f% X- ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 |1 c8 o0 T$ Z1 Q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, X! Y) y5 z7 j2 _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 |7 ?' p' s3 b
  396.       }/ r5 E' f  H0 d/ Q+ d$ N
  397.     }4 D" g5 c2 V4 B; F3 n
  398.   }
    ' t" N6 j5 ]. J& E/ z" @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 ^. I" U( k, [( b1 B2 R) S2 B1 G
  400.   {
    # \. x& W5 V( u7 R; e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# _$ U1 M( p- g9 v
  402.     {
    , [! z8 q" L% h
  403.       file2=(LPUPDATEFILE)(*i).second;- T) b9 F1 s3 B. j5 @) S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 Y# t$ u8 g& H! d6 `( E
  405.       {
    ! E- T- S) i) K. O* ]! H% ^1 U
  406.         file1=(LPUPDATEFILE)(*p).second;8 O) K4 a% Y+ L: p1 g* o
  407.         if(file1->vers!=file2->vers)
    & c  ^: }- J" k% `
  408.         {
    1 b2 S  ]! E6 N) h. ?* Q; s, l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 c9 S" m% c+ M: |
  410.           c++;
    3 P8 H" R  E. ^9 U; k1 ~
  411.         }2 j: \/ i) u3 N# C
  412.       }
    . P: r! `8 p! Q2 C2 b& {6 `
  413.       else
    $ F1 M* Y% [! {
  414.       {1 b& k9 z/ c, o
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 V# A  {" U' y1 j3 c
  416.         c++;
    " H/ U; S" z; e" _1 G  k4 z/ E# j. M
  417.       }- s1 U! I' ]0 N* B- K) F4 `9 b
  418.     }* S5 r9 M9 w+ g7 X
  419.   }
    " I, a( ?- y, ]" @' Q) g* [
  420.   unlink(".\\DownLoad\\update.txt");- m/ }0 \$ Q2 s$ ]
  421.   if(UpdateLocal.size()) return TRUE;
    9 T3 O3 ?9 q8 u$ t2 G; S
  422.   else                   return FALSE;
    + N# v# l" ]2 I0 ^6 m( H
  423. }7 z2 V+ Y, K  k9 H  R* X
  424. * `  p& m0 W( Y! X: c% T
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ' _/ |- V) T6 i# i, V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 [; K) |" _/ b7 [! v. k! W, u
  427. ) o. ^$ d0 }" o% C9 L4 [6 @
  428. # C6 K3 |* B: T8 e# {# p4 I2 Y
  429. # k/ A5 b+ i5 z5 [  ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    5 A* {/ [' b' x" V, o$ }7 [& Z3 c/ [
  431. {% \) X: U( G1 {9 n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 t( c3 b! L% V1 W
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* L( s5 K+ K+ r, V) v2 A" Q6 m7 M
  434.   {, Y' ?" `9 B, e0 `- y9 N
  435.     char szLanguage[50];
    4 R) x3 ]2 L  }; Y8 c
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + ?  _, {4 k5 K- E
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : z* {6 r/ E* _6 {
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 Y" H; j* S7 v% O. s- ^# e
  439.     else                                   m_iLanguage=ENGLISH;' l0 c( l6 b2 T: ~
  440.     char szRegister[100];
    $ l, ?. J$ D/ S1 Y4 k$ j
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) L% U5 p: M8 U. a
  442.     strRegsName=szRegister;  L5 x: |) x" f% E# X( r
  443.     char szPatchURL[100];+ A" Y+ w' v% a, p  \) a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: l% U3 p: S/ |$ c) `# Y! V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # _' }* I" X& Z+ j( f. O# C+ c
  446.   }( }7 w% ]. P" u  ]3 [: v1 B
  447.   else) A: q; v. p* s: y/ ^
  448.   {3 N9 C& A( Z; N: o4 D5 k3 r6 A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);4 \/ k% d; }. a1 n* B' r& z( R5 m
  450.     strRegsName=DEFAULT_REG_URL;
    ) R) \2 c' ~8 t6 U7 `
  451.   }
    - {4 }- b7 Y" W3 J6 @, [
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 [$ M  K( C( [  `
  453.   {
    8 D2 I" @/ F' T  Q8 K. `
  454.     char szIP[50];4 o; @* ~( F7 a2 `( u' x6 x$ N
  455.     char szDIR[300];5 x1 L+ f, Y2 |6 F; J0 `
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 B( Y7 z+ }" @/ u
  457.     {3 F" d/ L/ ^: {( i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 M2 d3 H$ G% D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) O1 S. W& p- `3 Z& G
  460.       strHostName=szIP;; C$ c6 ^2 P, |- b% \( R. I
  461.       strHostPath.Format("/%s",szDIR);1 }" j) [& R7 n, R3 D/ G' A$ i! m0 V' W
  462.     }
    / O( C4 p' [9 h, p) }# @
  463.     else7 h# e. Z3 d$ w3 D
  464.     {
    + l; E/ O; K. V! w& z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- Z, E' ]* o* A9 {
  466.       {- x8 y8 K1 i1 k8 \) @) l
  467.         char szLanguage[50];' a5 ?: z4 z7 f, |5 ^7 t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    , w) Y/ o/ s* E) a# u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      S  p, [) |  K- k4 s
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! _- D3 N/ k9 _& P! X" k% p
  471.         else                                   m_iLanguage=ENGLISH;
    # b$ \$ a: L! x. Z
  472.         char szRegister[100];
    2 ^4 R* e( r6 |4 }( A* T! m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 d! m9 P6 a6 k" ~$ V
  474.         strRegsName=szRegister;
    5 n8 t$ B" M9 X. A
  475.         char szPatchURL[100];; \* W! M9 Y; ?/ R" {3 }$ R! O
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    & T. k6 N' z4 W% I% y8 G- C: k$ M; M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      O( d4 E- m7 s: O5 `
  478.       }
    + U/ G& W" ^. `  v) S% w
  479.       else2 w# R7 R6 L9 l& ]& q# n! \4 b
  480.       {
    & [5 z: k4 F4 |3 V( z* w9 N' q
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. x6 S, \0 a' V" y2 |* M, N
  482.         strRegsName=DEFAULT_REG_URL;" _- _2 c, r  O
  483.       }% U" l3 K4 s  A) d
  484.     }- u# E2 g: |  g: F8 F3 Z, v8 a
  485.   }' W0 b) g5 G. E' u+ }
  486.   return true;) I, d3 t1 ^  B8 ?) J/ @9 y0 b
  487. }
    8 r( k! H7 C9 ~/ ]4 R9 o, k9 l

  488. 2 R, \3 p3 M; G/ B
  489. #include ".\ZLib\unzip.h"
    4 G/ M  ^# O1 k) |$ Y
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 \+ Y0 F/ {7 t
  491. /////////////////////////////////////////////////////////////////////////////! G1 n/ ~. S$ V0 o
  492. // CRevAppApp initialization7 J: V3 d- i! K# w5 `2 s
  493. 0 r1 V8 J3 W- r. x5 W5 u
  494. BOOL CRevAppApp::InitInstance()% }1 g1 x6 T) I
  495. {
    5 Y( q( @% `/ [) L2 \- n, s8 m/ A: h
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . b. a* d3 `+ g* w% _

  497. . P& Y0 H7 O# v) r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);' j% K$ y' R2 s; P0 ?: L; N
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))9 \$ d0 F7 g; f" S
  500.   {7 y; ]7 ^* v, N- v  ], V. E% J+ A- H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 J6 \: E# i; J8 S& Z" W- Z' l! ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);7 D6 B; G  p  g5 u4 G, T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 a6 r1 T3 i. D" p) ~3 {7 [
  504.     {! K7 h" a6 j8 B
  505.       strcpy(szPath,szPathTarget);, g6 s9 p8 f/ W, G5 Z& ]$ C4 P
  506.       SetCurrentDirectory(szPath);, d0 [6 a  L8 J/ \0 t
  507.     }: s- X+ g0 M5 e* b
  508.   }
    ; T4 L1 r. w) ?, G
  509. #ifdef _DEBUG
    " @; V; G: P* ?3 o7 c+ x" H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 J& X: J) i& D7 J
  511. #else, z* a8 Y- |0 o, C, k0 k; A3 Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      ^8 d  X5 M( A) v( H3 U
  513. #endif% H! \% t; D. R8 R( R
  514.   {( G+ J: g8 i2 C5 T3 p/ O' m8 Z
  515.     char tempFileName[MAX_PATH];
    8 e! G- C- v) i  P; o  M0 {
  516.     strcpy(tempFileName,szPathSource);
    - X$ s, u* M2 s& B: y/ i. o7 Z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    7 j4 \5 Q8 ]- s0 [  F2 ?' R3 j! O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) L$ T$ h% R) i) N' F3 ]/ ~
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% v# Z4 B0 C9 v* l2 {, @* M
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 t3 ^( B; [% N
  521.     return TRUE;
    - _5 E1 e  s3 B+ C
  522.   }% I; L3 ?- Z9 W# x( a
  523.   // Nuke 0118: Delete run.exe
    / Z: N& ^2 e) O7 ]
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. B" F9 f' _5 k4 h  b- G9 t" r
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( Z* }3 i4 N5 f+ Q3 @5 T
  526.   if(!ReadCfgFile("Config.ini")). M! _" v3 @( ]* Q8 X
  527.   {
    / ?3 |( ?% j" g& L' k# D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);6 [/ s0 u4 \& h9 R, ]! |4 [; G
  529.     return TRUE;
    ) K# _0 v% x5 p1 O6 C
  530.   }
    + r- |2 B4 l5 b+ Z" e; T  }
  531.   HANDLE mutex;
    ' H  R) R, U* O3 _0 h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / D) H% d" f8 j3 a' @
  533.   {
    % M7 g4 _) G2 ^. \% f& }
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* X4 t- w6 l4 q- ?0 J1 V
  535.     {! n) K0 k* K" g9 a+ G: Q
  536.       CloseHandle(mutex);! r3 @+ G1 [2 f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" [# }( A2 C* _1 Z
  538.       return TRUE;6 Z1 [: C; U+ Q+ k; V8 Y
  539.     }# x. O# O  Y* z- Y/ G! L& t
  540.   }  
    7 G; V( Y' H' y3 m- e6 M
  541.   CloseHandle(mutex);4 [3 @. Y% x' `4 m* M
  542. - Z# \4 o- ^: T" ?/ U
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    * @4 Y4 `" P( u0 D  Y
  544. 8 {- a$ r! u# l9 l' F2 I  Z/ K+ U  t
  545.         AfxEnableControlContainer();3 ~% L1 t' ?$ a
  546. % \! L, {2 I6 |& N% @
  547.   bCanUpdate=FALSE;
    ; o) L9 k$ {" R8 g+ C( @! b
  548.   dwStartUpSteps=1;
    + s! n) ?- r3 v8 @8 c
  549.   dwProgramState=AP_NOTHING;: I2 G7 [2 n' Y5 ~$ p' f
  550. 0 c+ |; p- o% @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    4 X% D$ X' t3 Y: N3 v# _, l' C1 W
  552. $ E9 ?. f  }. ]  [
  553.         // Standard initialization
    : W: w, w8 u/ N% Y0 w* f
  554.         // If you are not using these features and wish to reduce the size4 n1 a7 A. {& f0 ^/ Z
  555.         //  of your final executable, you should remove from the following0 L5 G+ I  z$ W% U  O
  556.         //  the specific initialization routines you do not need.: K/ D% w$ {. Q" Z

  557. . n; D  }+ B& u" |* |
  558. #ifdef _AFXDLL
    . E6 O( t6 H7 o# P4 a# s  c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 \; s; ?8 w" s
  560. #else
    ; q- Q) a) b& W: c# P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically: c. s) F) b; H# T
  562. #endif+ |5 a3 r2 a- C5 R

  563. 6 o$ G0 P# h) Y3 L3 {/ ~0 {; K
  564.   dlg=new CRevAppDlg;2 C1 W# H# x1 T( _3 T
  565.   dlg->Create(IDD_REVAPP_DIALOG);( J" G$ i6 F/ V: ?
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % j- ]+ v! `# \. y6 Q
  567.   m_pMainWnd=dlg;8 J& ^7 D. L! D; _, v9 r7 N+ H

  568. - I% k4 U* h* B2 j  d
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      _) }" }0 |9 E9 K
  570. * W; q) U1 c: M
  571. //  GdiplusStartupInput gdiplusStartupInput;; R  s/ W, c+ k& x! q" m
  572. //  ULONG_PTR gdiplusToken;
    : f  T1 O1 ^; |4 f" n% Q7 z4 B8 `& I
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " W# e' y. {3 u

  574. 0 R; v# e9 b4 ]
  575. //        CRevAppDlg dlg;2 V  R- ~# A! h5 `( W9 y. D7 z4 f
  576. //        int nResponse = dlg.DoModal();
    ( C1 ~9 i+ J- |! k
  577. //        if (nResponse == IDOK)- B8 Q" W7 A9 V, g1 p
  578. //        {
    $ Q' U: q; X  k7 e3 _2 j2 [0 U/ F
  579. //                // TODO: Place code here to handle when the dialog is
    7 G# X4 k7 u; ]4 Z
  580. //                //  dismissed with OK+ U. {$ K7 C* A, }% @
  581. //        }  n( y- w' p, e6 j1 r
  582. //        else if (nResponse == IDCANCEL)
    ' d7 D" y( J1 o+ l* J
  583. //        {! G+ g% P! ^5 w; N% f" M
  584. //                // TODO: Place code here to handle when the dialog is
    2 z8 D# ~1 m, h
  585. //                //  dismissed with Cancel
    3 ?  L; V' L8 v7 p" L
  586. //        }
    2 [0 ^/ L1 w6 l$ D# r
  587. " N; I- Q# j5 Q* O" a8 P  @
  588.         // Since the dialog has been closed, return FALSE so that we exit the  G, N. S, c' |1 s* f* v
  589.         //  application, rather than start the application's message pump.4 d9 ]8 v1 p6 ]5 ~: W! `
  590.         return TRUE;
    " ~8 F* j4 Y- [5 d! i
  591. }, u: `$ |( {+ Q& }
  592. 6 M6 m! L- ]* r3 P8 h, H
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    8 k5 o3 Q( n, Q0 `3 {3 H
  594. {
    2 H7 I3 ]7 p3 y- _* o
  595.   int i;" j% L0 a+ |' p' `8 z# i$ O
  596.   char *szRet;) T9 M  K6 k' S, s- G  s- z
  597. 5 {" F3 i- |( }9 e& Q# y! Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }' C9 S1 d- {1 o6 I( r% l
  599.   if(sztoken)4 _/ W( H2 Y: n* m9 b
  600.   {
    - o$ G9 g: ?4 U* r
  601.     szRet=&sztoken[itoken];3 w  k% ^+ }; }# q
  602.     while(sztoken[itoken])5 {" m/ x4 D+ {# i- {% e
  603.     {+ L, Y+ {6 R% y* Y1 m
  604.       for(i=0;i<(int)strlen(token);i++)
    $ G0 U: P5 ]7 {9 w6 t
  605.       {
    + H* |" s. i0 p  Y* k- L4 ]5 W
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    , B+ Z5 M7 Q# m3 S$ H" i$ J5 J
  607.         {
    + K: x1 V* T, |: m4 H9 ]$ k
  608.           sztoken[itoken++]=0;
    * R0 [, p4 h  D: O! \  Z, G6 O
  609.           sztoken[itoken++]=0;
    0 R" J+ ?; B! h( ?- @
  610.           return szRet;
    1 w+ I. Y, i# g' e) A0 ^/ \) }8 d
  611.         }
    9 ?, z5 w# o) c' `9 k
  612.       }
    1 {" W1 k! d7 g- F1 H: l% v2 p
  613.       itoken++;
    + j$ E' {6 _" k$ W# R, k
  614.     }. i* f$ v  _& k5 i  _- V5 m
  615.   }
    " ]5 b% B/ w, W" f2 i4 O5 }4 I
  616.   return NULL;
    - G- S- w) q/ E* Z/ P- i9 _6 T
  617. }
    - w0 H& D% R# p# |! |& A) j

  618. 7 Z( F% \* l7 R2 t- i/ o
  619. void ProcessProc(long Total,long Current)7 f7 v; |) s0 M2 I* o9 y
  620. {
    0 n& w* n& L3 u" p" Z9 L
  621.         MSG msg;
    + ^( \( P" }  k# e% X/ k/ Z( e+ O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    % p4 s4 m& ~6 Q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! b9 ?1 L% d. P3 Z0 h
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 k' g0 W/ w2 G, ~& V% O
  625.         {
    " A, y/ h' F" s) o/ J& x6 o. i6 d
  626.                 if(!GetMessage(&msg,NULL,0,0))2 r# C  V  O" K7 X$ I+ ~. R
  627.                 {
    * a% j& w0 ?+ Y3 s1 V
  628.                         return;
      [0 o" c" G+ X. \, b2 G1 a0 A
  629.                 }9 J7 r" k+ s1 v% ~) \" d5 G
  630.                 TranslateMessage(&msg);
    3 ?$ z' B# b+ R( H
  631.                 DispatchMessage(&msg);5 T8 o8 h; ?* L/ q3 [
  632.         }       
    # h& Y9 y" }6 \- Q6 ]) A+ w/ f
  633. }0 D1 V5 f9 w0 A1 u- G7 h5 g
  634. , p7 v  @4 j- D# `6 C: A8 ?9 b
  635. BOOL bFirstChar=TRUE;
    5 s% c1 ]+ G3 d1 F- i# h4 w
  636. ( z) }+ a% t: V
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . p7 F/ A6 @" n7 f! |2 s
  638. {
    0 @7 l: b: ^6 t
  639.         // TODO: Add your specialized code here and/or call the base class- ]# P1 H- O0 z6 M# s1 X
  640.   switch(dwProgramState)
      T8 \: m: r5 f; {1 w4 i
  641.   {/ D9 Z0 V; [4 F9 I$ j! r
  642.   case AP_NOTHING:
    ( e" u' m/ E7 W1 F' B$ [; {
  643.     switch(dwStartUpSteps)
    7 F. S0 |  J& F& q4 W6 y4 K1 i# m
  644.     {7 q* ~* v5 u& @0 d
  645.     case 1:
    * w' ]2 z6 ]9 ?! x
  646.       {0 I" J. z. ?! ~% r4 q7 b" Z( K
  647.         int i;
    ! ]- r0 t; p2 f
  648.         CDC *pCDC=dlg->GetDC();
    : h* {; [- h% [6 m" M9 c5 G
  649.         HDC hdcwnd=pCDC->m_hDC;+ c7 T' L/ }# p& R
  650. //        Graphics graphics(hdcwnd);
    3 x: W& y' X* f' X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");3 B7 c+ |( b( ^9 l- ^
  652. //        INT iWidth=bitmap.GetWidth();
    2 z8 Q5 ?) _2 O$ d0 i
  653. //        INT iHeight=bitmap.GetHeight();2 u, F# ^9 c3 g4 R
  654. //        Color color,colorTemp;
    , ]8 W* A* j! c, f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)# U7 C! B& V! S  |" J/ [
  656. //        {
    3 E, T* c4 j1 a. x* g
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)' k( z( p2 a) }" v5 d
  658. //          {
    . N& K7 j/ S1 \. {0 B1 j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 \+ s; Z* [6 M% v/ E1 }& E
  660. //            colorTemp.SetValue(color.MakeARGB(
    ! r7 Z: c; \8 Q: t8 z
  661. //              (BYTE)(255*iColumn/iWidth),
    8 v$ ^0 T# z7 R$ z+ N
  662. //              color.GetRed(),& {  C: W/ G. G7 C6 U, o
  663. //              color.GetGreen(),3 t- S+ H6 s5 ^$ c: s+ x. N' Z
  664. //              color.GetBlue()));
    7 g- k+ m1 v2 n' @6 t& a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);, P0 ]7 {- s8 o! p
  666. //          }
    % _+ k1 I9 }  @4 e* d
  667. //        }. f7 W9 L4 m" c( K. r$ R& ~# @" q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + o: A/ `/ Q. g; r+ k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ _" M  ~" M, O4 E/ Q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 e5 z) q5 J7 E5 @) s9 Z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ y$ K& H6 j/ M5 \0 A0 r. c/ C
  672.         for(i=0;i<240;i+=8)
    ! S. Q1 E) d, k5 p  v
  673.         {' ?! J8 H# S6 ]1 m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; @3 x5 x6 n1 C) m$ {& n" c
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & f. Z7 G! @/ P9 C4 t5 o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 H& b" Z4 C- B; k) Y- @( y
  677.           Sleep(33);
    2 N& m% S+ V3 c% N6 i8 N  ?
  678.         }
    " I2 L) n  |; D1 ~8 \- R, N6 I
  679.         Sleep(1000);! X  C% ]3 m; {1 I
  680.         for(i=240;i>0;i-=8)- @' T: Z( F7 e
  681.         {
    % J' G+ x# @( s+ }( ]; d% Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 O# b3 Y8 F1 |
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  w- _+ v+ q% B6 _$ _/ T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);* J  ?( Y: F- i  _, r" L0 d
  685.           Sleep(33);
    ; ]7 Q6 G; C/ t  A5 \* P
  686.         }$ Y% X5 F  f! u# F5 O8 L  a
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- T7 ^0 u# X$ q# {6 _
  688.         dlg->ReleaseDC(pCDC);
    5 c9 o! T  u, F4 w
  689.         DeleteDC(hdctar);
    & n6 @( I/ q0 t" ]% Q
  690.         DeleteDC(hdcsrc);  G* t' B$ A6 l# ]. z
  691.         DeleteDC(hdcorg);
    6 u5 \9 C- C: r: n
  692.       }
      r; o, m/ j5 w- `  [4 N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);5 n. k# W7 r7 i: ?5 F6 Z: f& z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    : a( V5 u+ j! d- A  e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 X7 _, ]7 y9 {" b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");1 e8 u! n3 A7 ?/ t) v+ E, ]
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) B+ Q. u; t- w
  698.       if(!Dn.Connected())# _: W) x8 d8 c% c5 e8 j. [
  699.       {
      I7 p- A$ B% o' ]" U
  700.         dwTotalFiles=1;
    5 z, D# M3 m% x/ y5 ^- B
  701.         dwDownLoaded=0;
    / e$ a5 J. J* P% G6 N. Y
  702.         bSilentStep=TRUE;7 M" h' S& {; r- P: ]+ Y
  703.         bCompressed=FALSE;4 Q3 o; u. ^. C; l! v5 M
  704.         strExtLocal.Empty();$ y' \# l& n2 c- ~* J' R$ x
  705.         strFullName="readme.txt";: [' V8 {5 H! n( `% {- e* T
  706.         dwProgramState=AP_CONNECT;
    # l, H0 `/ V3 q8 n# ~
  707.       }
    7 w  a& Q/ O' l* g+ r8 {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    - f% Y3 \, j& X& x/ c+ A
  709.       dwStartUpSteps=2;! A, R/ {& O; L. ^
  710.       break;
    & m& T; l  X% _; @8 j1 @
  711.     case 2:
    7 r2 f, W2 C& c7 m; A4 V( _2 U5 m
  712.       {
    + a- k. W' A* i) H5 m$ |
  713.         int iEOF;* y) D  P  ?$ I: H  W/ }( p
  714.         FILE *fp;. f+ {& m- E+ [# c
  715.         char szString[512];8 @5 x3 N% O) J9 M( l! r2 @9 B
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & H0 f: o3 t8 W/ m. w# A8 o
  717.         if(fp)
    , y, l/ P1 k1 D9 }" N3 y
  718.         {6 u" m* i1 Z: Y
  719.           do+ g8 U& @! b2 T  H* c
  720.           {
    ; T4 ?7 S4 G( l4 w' g4 x
  721.             iEOF=fscanf(fp,"%s",szString);
      I3 ]" r8 U* y7 ]
  722.             if(strlen(szString))' o7 `# D: C$ |! d
  723.             {; E/ H; m8 T1 N$ o/ U9 E
  724.               if(bFirstChar)
      [: n" }4 G' H' i# c
  725.               {
    , q0 ?3 C( ^6 S& Q( v
  726.                 bFirstChar=FALSE;# T5 @" S5 k: _- r8 d
  727.                 bConnectIsBig5=FALSE;/ b0 K2 H8 z, s: O4 k, c1 y9 U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 T! k2 j$ q/ }
  729.               }1 t5 B8 v7 g; ^
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 B3 B, ]8 V/ w9 [3 |  B! S* O" s
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    " J. `3 D& N5 N
  732.               dlg->m_ListText.AddString(szString);
    7 Q/ E$ g# g3 m. m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / ]: V- v6 N% ^4 f8 ?
  734.               *szString=0;1 j0 n" v. ^9 J! y! C# {
  735.             }
    0 u& g' L& \( c# @) ?
  736.           } while(iEOF!=EOF);, a: j4 I+ F8 K+ L
  737.           fclose(fp);6 M. c6 R& X4 ]  [) J
  738.           unlink(".\\DownLoad\\readme.txt");% q- @: p" I* p. m1 m) @
  739.           dwStartUpSteps=3;2 U7 G. i' @; Z0 X+ T
  740.         }& s% Q" A# N9 ^& d' Z
  741.       }
    , l; H4 ?, p; t4 y( w( V3 \6 L, I3 }
  742.       break;
    ' P* U; w  o4 Y
  743.     case 3:" N! J* w0 G7 k* J) g! _
  744.       if(!Dn.Connected())1 o1 `: C0 ^2 B: s" x% X! j
  745.       {* j5 m* e* u0 ^( ^4 p7 f* C8 m
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# g) N$ {  P% }7 \4 e& d
  747.         dwTotalFiles=1;
    5 e$ ?4 {. O( A/ N  _$ K
  748.         dwDownLoaded=0;8 S1 B7 S, T. }" }
  749.         bSilentStep=TRUE;8 s8 q/ d1 _& e/ w& L8 ~! v
  750.         bCompressed=FALSE;
      t! \' W  ]! G5 u
  751.         strExtLocal.Empty();
    . q" [! F1 C$ r( H- G6 S
  752.         strFullName="checkversion.txt";1 s2 Q% p  J+ r" `2 z! h3 h
  753.         dwProgramState=AP_CONNECT;
    0 m# Z/ @/ _# G. g3 {, s3 W$ D
  754.       }; M1 t7 `2 v: f& Z: T8 R
  755.       dwStartUpSteps=4;
    ! Q7 U- \$ C, E! O% q8 I6 ^2 Q8 T
  756.       break;7 s. b4 h6 d: b2 N* c; C' T
  757.     case 4:
    ) c3 m4 q  R' i$ m
  758.       {
    ( o  r! M* d+ y, Y% m1 D& D% H; Y+ h
  759.         FILE *fp;, V. K& p- n  {& K- X2 I0 L9 Q
  760.         char szString1[128];
    ( j+ y, o) }: t9 ]; I
  761.         char szString2[128];
    $ H: z0 U/ B: X( n' A4 X) ~- ~; l
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # V6 i  P1 r, A/ G8 F
  763.         if(fp)
    9 V) j6 D) S. c  ]9 k
  764.         {! P' Y. u- w9 D1 w6 ]+ |
  765.           fscanf(fp,"%s",szString1);
    ' h0 x) w9 U4 ~/ k) k+ X
  766.           fclose(fp);
    7 S4 K. e0 t. V4 x, l
  767.           fCheckVersion=atof(szString1);. m# c' Z( n3 R- V
  768.           fp=fopen(".\\checkversion.dat","r");. S0 J- S+ ?" e
  769.           if(fp)9 k' y  y+ y' q" ~  Y
  770.           {
    : t3 T$ u( K# ?
  771.             fscanf(fp,"%s",szString2);
    + Y+ |: u5 C0 z* i6 z9 U4 L8 z- ^
  772.             fclose(fp);
    % ~3 B! C! _8 J, Z; C/ S6 k
  773.             if(atof(szString1)!=atof(szString2))
    / B) B+ @+ t3 g) V4 ]" r2 k* f
  774.             {
    ' ?" P; A+ @: Z$ \: A' a
  775.               if(!Dn.Connected())# W" e6 k. W( F5 {
  776.               {* ^  |7 p' _* _: C( ]
  777.                 bFirstUpdate=TRUE;3 S+ H+ J6 X9 c, ?  ^* L, J
  778.                 dwTotalFiles=1;7 I& X: }$ t4 Z
  779.                 dwDownLoaded=0;! g" t! _: z5 n: Y: Y
  780.                 bSilentStep=FALSE;
    5 I0 T& s1 D+ x  m
  781.                 bCompressed=TRUE;4 f4 k0 i% r8 c- {( t9 q! Z5 t
  782.                 strExtLocal=".\\DownLoad\";  S& w9 O- @9 l- ?5 h' p( \# v
  783.                 strFullName="update.txt";
    3 [, v" t5 b3 U3 h6 t
  784.                 dwProgramState=AP_CONNECT;' O1 T$ t. a! y" c7 \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 H- |1 X/ Q) f! f  n# M2 e2 M- N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ \9 q/ L& m7 W6 {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 _! n  c) T) z" _! ~/ Q2 k

  788. 2 T. z5 [. x3 V: m, A$ s( }
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; k; e5 j7 a! b/ ^0 H4 w# `+ m
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 C6 I- \/ ]; ^( Q* e
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ' w4 @- p- |. k( z
  792.                 {' ^# x6 A8 T6 R0 ^1 U5 C
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' M$ k3 U. b3 s5 s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 D8 k! c0 `; _/ p3 g3 S' c7 A, e
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");' C5 @; e4 _# O( I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 [) N; |) {+ [! |( f4 a
  797. 1 |/ Y! m: v2 [$ b
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( z" c  s% D+ X# j
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 \2 L, T+ [1 J: P! z* t  M
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 k- N% f8 U8 A
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 l: y) x0 ]5 K" L/ A
  802.                 }
    . v& Z/ Z. A$ ^3 J
  803.                 dwStartUpSteps=5;
    0 W( _2 H$ m2 A7 f4 A0 C* u
  804.               }
    9 t/ O. g% K; D" j' @
  805.             }
    " a( m- {9 \- Q7 ?1 `, i& C/ v
  806.             else  W; P0 @4 s2 J
  807.             {
    * s# R) @; V3 k# a  t/ Z
  808.               unlink(".\\DownLoad\\checkversion.txt");7 E. r" a5 P3 b! V* z: W3 u
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) C6 i$ C' A' }) j5 h5 Z1 y; V3 m# f
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 ~* b7 s) B3 a! B' P
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");& D% Q( U! x! g
  812. 4 ]1 m& {! Z! T7 d+ D" r
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' r- a( _- ]: @6 i9 {2 V$ f7 H
  814.               dwStartUpSteps=99;
    & q1 f$ T/ R, Z0 L# ]
  815.               bFinishUpdated=TRUE;: @% F' m& P: s
  816.               bCanUpdate=TRUE;
    1 ~: g2 y+ V' \- T* T$ b: c2 x
  817.             }2 G8 D! j5 c1 ~1 G5 E$ |: E) @
  818.           }
    6 K5 K* n9 I! {, b9 b
  819.           else
    9 U* M$ |2 c9 D' [& ?! s" ~" [+ H6 W
  820.           {
    8 ?8 [+ I. i4 r4 m
  821.             if(!Dn.Connected())
    9 C: x0 R6 @8 v6 Q6 |) I$ G4 G# U; \
  822.             {0 g8 q4 d+ K: T+ z# s% \8 t
  823.               bFirstUpdate=TRUE;
    7 U! p% t1 s9 d( z, W) @, A
  824.               dwTotalFiles=1;+ t$ T, M: p) t' O  @' R) H1 r
  825.               dwDownLoaded=0;
    / t7 z8 c/ F1 F: u  U' [' B
  826.               bSilentStep=FALSE;
    - m* ]0 K% q  e  x
  827.               bCompressed=TRUE;
    - ?# [1 f8 k% @3 r/ r2 K. I0 [. P
  828.               strExtLocal=".\\DownLoad\";5 z+ a( n* e: Z. ^# m  B7 r1 g
  829.               strFullName="update.txt";; P  W( s2 r' K4 a9 v8 X: e6 M# |
  830.               dwProgramState=AP_CONNECT;2 y: H! Y+ T" k! v) c( G2 O
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 T) E4 K1 D! k$ P$ E9 k
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* i# u4 {+ N* z! ]3 s5 }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : V2 u7 R1 C/ w
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! `  Z5 P. \+ d5 l. n8 W/ h- t
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 @# c, K- Y- A3 G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). {( }8 [7 t8 f6 x5 j2 b
  837.               {, u' l, d. e" A; v
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");0 l5 E% g- O1 d5 E- s+ U+ }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");7 Q2 I5 i: S# \: ]. Y6 s! }. x
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 ~5 d7 W' T: R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 F; S7 r9 s" I. {# |" r
  842.                 ' H* S9 X! V5 H. r7 n8 f: Y7 B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! ^' v0 `' n' D8 |8 i# |) X, c% w; F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 z7 l& ~/ v4 A7 r8 x( o- H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 @4 R0 K. Q4 I0 H
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . c1 S# T' \. s% O8 G
  847.               }
    ( X  x1 i% r9 \/ l: ?
  848.               dwStartUpSteps=5;$ Z: p, {) z0 h( C7 x5 v" I5 H
  849.             }
    4 {( Y! k" B, O: G( s0 X
  850.           }, j$ i* m! k- z0 A! v
  851.         }% N6 x+ U9 a# m+ D
  852.         else
    8 C" v' ]+ }, R* l1 R5 d
  853.         {; `3 i: q2 g" v
  854.           dwStartUpSteps=3;1 |3 z, ]3 R1 O) r/ i
  855.         }
    9 b, H1 V3 e2 I% E: E8 z5 n6 M9 [
  856.       }  z/ p4 M0 T* \$ r- @2 e/ ]
  857.       break;' j8 m7 o& k' v9 Z8 L
  858.     case 5:
    5 R+ S: p# k" V1 g# J/ F  g
  859.       {. ~: `3 x! ?1 f
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 E# m% b! q8 D/ h
  861.         {
    ! W8 b( K- q$ m- y, I5 R
  862.           int opt_overwrite=1;
    3 b7 X- l& t  f  ^  \) F
  863.           int opt_do_extract_withoutpath=0;1 w5 P) F2 Z# m+ S7 C
  864.           unzFile uf=NULL;- v( R* K4 \! a- f9 Z+ ~
  865. : }5 v/ i, {6 r) }/ m
  866.           uf=unzOpen("Wsa.zip");
    3 S+ I0 @8 T7 @0 \
  867.           if(uf)
    5 y" f1 I" W; `1 u5 t
  868.           {8 }0 q; V- v! a; c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    2 K2 Z8 W. ~) O+ C! {
  870.             unzClose(uf);
    - |: X) [# A, A9 z6 x- r
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");3 D1 b- s; @# H  P7 ^* Y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    - v' l1 l2 g5 r! }
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    : Q% p8 H: U1 _
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ B1 Y4 `/ P& j# C( ~6 _3 |, u* f; Z
  875.           }9 A3 D: t% J: |6 q# I7 q5 i- H
  876.           DeleteFile("Wsa.zip" );9 Y  R: C- Z3 J: C! Q
  877.         }, x5 Z- g: M6 ^' f

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

8 X( @* O5 Y7 }, F7 ^$ `

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-1-14 10:06

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表