找回密碼
 立即注册

CSUpdate.exe源代码

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

; o; L* C- `5 s4 e1 U' ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
      e9 q' f. P/ U1 u
  2. //
    ' j: Z9 y, H8 f; \: N
  3.   A) n0 ^  k% T$ `; m$ W
  4. #include "stdafx.h"
    ' l# Y- `1 n) D, n2 x6 F

  5. & q  _! O1 l  J7 k  F; s  d
  6. //#define UNICODE
    " ~! \. u1 Z0 M* U$ ]7 {
  7. //#include <gdiplus.h>/ ~7 j: `& A, \. l, j
  8. //using namespace Gdiplus;- ~: W6 o* O0 g9 v3 M, R% _' O

  9. 1 I2 }8 X5 u; K  Y
  10. #include "RevApp.h"7 H* @9 q* Z5 V
  11. #include "RevAppDlg.h"
    0 f; x$ f0 B2 k0 k/ ?# j
  12. 7 c) ^( O9 R2 {* ]
  13. #pragma warning(disable:4786)3 S1 u4 b4 d% S, K8 n
  14. #include <map>
    8 E1 R4 c+ V! D1 {: q5 z
  15. #include <list>
    : b( M. O; ~+ I7 H' P- t
  16. #include <direct.h>" }8 ^& C2 _# W" O3 Q  G! q

  17. ( t5 j% k6 F7 N. L$ u! z- C
  18. #ifdef _DEBUG
    ) W6 Y- W. E, Q: J5 @" @
  19. #define new DEBUG_NEW
    3 q6 \0 t2 z% L2 h+ H  d+ w
  20. #undef THIS_FILE
    $ b4 ]% C) _+ Z+ ^# M
  21. static char THIS_FILE[] = __FILE__;
    ) R% `' n* ~$ r' V# N. j
  22. #endif$ k. q4 i+ V8 \5 b
  23. #include "SkinResDef.h"
    7 f! Q  c9 ?( P% ~2 n5 B
  24. #include "ChangeBG.h"& n/ R4 A( M# ?8 c1 U/ v: N& ~
  25. #include "AFXINET.H"" C: I4 C9 C( v) N6 Z) C5 Q, ^
  26. 2 ]. L3 x& a: N+ w( P% `: T5 `
  27. #define TRADITIONAL_CHINESE 0
    ) o: P/ ^/ y$ c- e
  28. #define SIMPLIFY_CHINESE 1" o) a* w2 N. p1 b4 d
  29. #define ENGLISH 2
    4 L: |6 _! n3 R& [: f
  30. int m_iLanguage = ENGLISH;3 Z$ R* K. `( q* ]$ ?
  31. /////////////////////////////////////////////////////////////////////////////( o8 _* D/ h. x5 R) |9 B' P! m  `9 D
  32. // CRevAppApp
    # q9 Z! P& V( Y5 g7 ^$ T

  33. ; N# v; D6 C* C' L* x1 M5 t7 o
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 ?) t. }. V0 r
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , A* u5 M7 M4 \: O: y. ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 H% ?9 Y+ ]& G8 S) n; ~4 m& r
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 q; v. M& Q2 Q# R8 r$ y" H
  38.         //}}AFX_MSG$ `- R- d  n: I$ Y% e5 @
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)- J4 Z( J. r/ \( H9 M0 K, h5 Q
  40. END_MESSAGE_MAP()& W0 `: _& }/ A% W+ H: c  K) n" b& D

  41. , V- ~" w/ w7 d$ Y! h# U: I# P
  42. /////////////////////////////////////////////////////////////////////////////
    5 _9 K- C0 X6 N1 D
  43. // CRevAppApp construction+ }3 V' l% @: N7 b1 T/ G
  44. . j1 k! s! O4 h! Y
  45. CRevAppApp::CRevAppApp()2 f4 @0 b, W- q4 W0 z- m" Q$ `
  46. {7 Y, {4 c5 o2 |5 X9 d$ x
  47.         // TODO: add construction code here,
    " Q- C& S* Q1 R8 O2 T. H' [/ B5 @; w
  48.         // Place all significant initialization in InitInstance
    & ~7 v" R1 P/ k0 w$ Y5 B' S) k
  49.   bDisplayIsBig5=FALSE;1 @  v& Q2 j$ l; H
  50.   bRestartUpdater=FALSE;4 e! J7 v4 p) \+ Q* D" T9 ?" W
  51.   bFinishUpdated=FALSE;
    2 D6 h7 i6 n3 x$ m) n3 j
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      V+ G8 G3 M. C4 _. X- v; B
  53.   InitChangeDataBig52GBKS();) K+ A( Z* e. ]7 `/ ?. Z* N  r
  54.   InitChangeDataGBKS2Big5();
    7 F; H2 l% u( R' ?% {
  55.         //9 Z& U& i0 J( W3 \2 k3 L
  56.         bClickRunExe = FALSE;
    7 y% M9 \9 A3 F( [7 b
  57.         //1 \5 y8 K; c% L% h$ G8 n7 O4 C- ]
  58. }2 g) t. [$ h! X/ N' P* e. Q% w0 x
  59. 9 W9 ]" v+ K2 {. Z  w" r
  60. CRevAppApp::~CRevAppApp(), C8 k6 S3 |0 u  N
  61. {1 e( {& ~3 o' x7 M6 V
  62.         // TODO: add construction code here,4 [  I  ?" D9 h
  63.         // Place all significant initialization in InitInstance
    4 J; L. \/ r- `# p7 p
  64.   EndChangeData();9 P9 u. N; ?4 ~
  65. }* N# @" O8 X. k, u

  66. / c* k2 m: G" u  L) w6 w$ U% }
  67. /////////////////////////////////////////////////////////////////////////////
    & h+ V4 {8 U5 y) h6 i3 C; V4 Y
  68. // The one and only CRevAppApp object/ @* ~* j1 m: J. W6 z, b3 z

  69. " F+ _  e+ [- u$ S+ k
  70. CRevAppApp theApp;
    7 z- H2 @" \! j! b
  71. 5 _" K) D  ~, W& \& [1 _, j& N% e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      |, i* Y9 |4 q
  73. {
    + p  T5 Q4 t) m: [% m
  74.   int iEOF=0;
    $ N) |2 Z& z. [+ Q- w$ g! B
  75.   char szTempName[MAX_PATH];
    ; T' j$ |: m6 @' ]! d7 j, ^
  76.   *szFileName=0;
    ! Z" q/ Q  i2 ~  Q- @) A
  77.   iEOF=fscanf(fp,"%s",szTempName);% |. o( ?$ ^$ J$ p" _
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    : K1 o/ _: X5 f& n1 _
  79.   {  z& W+ r0 U& m  I! ^* }$ R
  80.     strcpy(szFileName,&szTempName[1]);
    ' Q4 B, j  ]8 ^0 g$ Q( z3 T
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)# z6 d) q% O! a- S3 n  R( |
  82.     {% x( l: z8 |# a# H  `
  83.       iEOF=fscanf(fp,"%s",szTempName);/ v7 N) ?" t, Q& U! K
  84.       strcat(szFileName," ");6 y/ H" }  ?* H) Z
  85.       strcat(szFileName,szTempName);
    ; L" L9 A6 y; T5 i" N
  86.     }
    5 N" _- H* L" Z, W
  87.     if(strlen(szFileName)>=1)
    * b3 z* m# [7 y6 s8 E; b
  88.     {9 a$ x+ o$ n: z5 E$ N4 h: M& g0 C
  89.       szFileName[strlen(szFileName)-1]=0;
    6 T4 c8 x; g$ Q
  90.     }
    3 T/ p% T4 o/ o7 I4 T. g% Q: s( Q
  91.   }
    * t6 u+ m$ X, l! `3 l4 C0 Q
  92.   return szFileName;
    5 |' j: _# c2 Y0 Y2 o' k( k; Z# k
  93. }/ F: I! H8 P) {1 k1 r

  94. ) Q6 F! Y6 ~0 a/ s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    " C: d& d3 s4 d0 i
  96. {
    ! b' `4 B" p* x* T
  97.   FILE *fp;
    : q7 K% {$ l+ _. M6 g( X
  98.   char *key=NULL;
    $ `( m3 O7 n" y  T
  99.   char version[MAX_PATH];8 M& n) F+ y7 {- O# m7 q" x; q
  100.   LPUPDATEFILE file,olds;
    % j3 a% F: m" E/ k' T5 e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 Z+ G8 y7 z1 o0 e$ {  d

  102. / p+ N6 G# J, p% a- V# E4 D
  103.   UpdateList.clear();
    ; J: e5 I4 i7 Y2 G
  104.   UpdateFile.clear();
    : J+ }9 D7 P7 B. Z2 k& w$ W! v
  105.   if(GetFileAttributes(filename)==-1) return false;$ W4 f) L( Z7 \; \1 U  y
  106.   if(!(fp=fopen(filename,"r"))) return false;; ]0 L* \: d% x( U: U# F* w
  107.   fscanf(fp,"%s",version);
    - P; Z* w' {# R: }* y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' Q0 P+ v: o+ r4 _' U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! [, H7 x  G5 b  Z/ \% M
  110.   {: I5 H3 R2 f, x+ }# f5 v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  |1 @1 y. u0 M- G. i, l- m) O
  112.     fscanf(fp,"%s",file->path);" p( K9 w, F, z; k; G3 k. p; ^
  113.     ReadFileNames(fp,file->file);9 I' g! E# y. A
  114.     strcpy(file->full,".");2 L! A& U! I. o/ W0 M8 _$ P4 @
  115.     strcat(file->full,file->path);7 M! g& d1 f7 k8 w
  116.     strcat(file->full,file->file);& D9 z# X0 Q( P' O0 p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* M5 b0 T! ^/ X
  118.     {% Z& Z; z5 d6 g7 {8 E! o, U
  119.       file->vers=(float)atof(version);8 D) w9 |2 P6 j8 y9 k- h
  120.       UpdateList.push_back(file->full);) Y7 y5 K5 N8 s5 E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; g* X! v* {! r
  122.     }
    , H3 i' E& g7 {* d4 V- U
  123.     else
    % s; v, Y  }# L7 s7 T( `7 E0 @
  124.     {0 {" a/ f5 G( r! E6 N1 E5 P
  125.       olds=(*p).second;; l0 k* m9 Y. J* P; c* P4 `
  126.       if(olds->vers<(float)atof(version))
    ! a+ {  T+ c1 A) [0 ^- v) \
  127.       {  f( Z. N* H& Q  _$ ]" n: ^/ r
  128.         olds->vers=(float)atof(version);5 m: U9 r6 q2 t0 Z) W
  129.       }
    * H" r# y$ N- {/ D9 s
  130.       free(file);
    4 J4 V" m( D5 t1 h
  131.     }5 ~6 P& S2 Y  b
  132.   }6 F/ _! F3 |+ ^2 z/ A
  133.   fclose(fp);
    # ?$ |/ q9 ~: M4 C# @) i7 i7 b* t1 {
  134.   return true;
    / N, G* y3 Y5 }. i0 k# V* m4 g
  135. }6 Q+ ?5 y5 i# `+ Z7 |5 X  ^3 O! w) Y

  136. 1 i# k# q0 K$ k3 @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 i: J7 b9 a: v. u: q
  138. {
    " [6 i0 E- }1 Z5 |0 p
  139.   TCHAR  szFull[MAX_PATH];3 T, N: v* D* M8 L# H( w2 w! }
  140.   TCHAR *token,*inter;  m1 t& a3 [- M! p* e
  141.   *szPath=0;$ t# ]: I2 `) L+ e/ s
  142.   strcpy(szFull,szFullPath);
    8 @9 s8 C4 E/ O" ^) O, x7 \
  143.   token=strtok(szFull,"\\/");
    4 o, M- H* D0 S4 \$ M( z; D5 }8 O2 e
  144.   inter=token;* v- X) p9 u7 n) m
  145.   while(token=strtok(NULL,"\\/"))2 B+ x0 r' T3 g
  146.   {4 ]9 {  d. v6 X
  147.     strcat(szPath,inter);  I( D4 _; R3 ^5 z6 ^
  148.     strcat(szPath,"\");
    , \; [7 v- b  @9 F, L$ |7 t
  149.     inter=token;/ C& H5 f5 F8 K/ C% D
  150.   }
    ! u2 X" }3 n4 v0 K
  151.   return strlen(szPath);
    / y6 s. z7 D, g9 `% q
  152. }
    7 W7 k, }. s) n* n( I
  153. ( c1 C7 c8 W- o# A% o/ L' T3 G# Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + z+ d& |% c) L: C2 o' h2 \
  155. {8 ]& K3 v8 [. F6 G9 W0 @
  156.   DWORD attrib=GetFileAttributes(Target);. J. ]4 H9 H% D' T* f- _
  157.   if(attrib!=-1)
    # i8 K) L$ k9 b! O
  158.   {9 A2 S+ V% a$ s; J2 n! o0 O. S" J
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). n; W; w. Z4 [9 _: n) d( p) ~
  160.     {9 Q& V9 S- P/ Q  `2 \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ' t$ }) t4 ~2 I5 U
  162.       SetFileAttributes(Target,attrib);1 V4 }$ H8 }5 s% s3 L
  163.     }
    * P. V& p' g! l6 ]! ?: w
  164.   }
    7 `7 z$ V9 @2 e9 w
  165.   CopyFile(Source,Target,Erase);) b7 V. w# P7 z! W) p" f  G
  166. }* v/ ^3 @  F/ G+ g1 X
  167. + S/ l% D; z9 }3 W; b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    , n7 n- e/ u- H. t6 Y# {6 W( p+ r
  169. {$ b. E' A0 h* |, c6 b* ]; e( @. S
  170.      FILE *fp;: G: u( M1 M7 t; a
  171.      char  szBuffer[8192];8 M4 f3 Y8 y" t4 w4 @; s% _: i  n' c
  172.   va_list  argptr;( t+ x7 t! S8 P+ }" I

  173. ' G- d7 R; A' y$ p; I2 ^
  174.         va_start(argptr,message);
    . y1 c. h6 Y) K+ J" L
  175.         vsprintf(szBuffer,message,argptr);2 B3 h# @. O6 |, u3 `" _2 F. F' {
  176.         va_end(argptr);
    6 g7 W; f5 Q9 ]' m* T* [
  177.   fp=fopen(FileName,"a");' r4 V- m4 z4 x. N' v% ?# @+ g" b, ?
  178.   if(fp)
    # q2 E* U& O. z. Q7 v* O3 q7 Z' y3 E
  179.   {3 C. O: R7 L/ d1 Y
  180.     fprintf(fp,szBuffer);
    " q/ x4 x$ ?' k* \6 |
  181.     fclose(fp);
    0 ?  {, M( `* T9 f  ~! i' r
  182.           _flushall();
    . ~# {" M- W+ i" h
  183.   }
    ) C$ X# E, T. W
  184. }
    8 ]0 q* i3 ~+ Q9 v

  185. . i) u9 W$ S4 X% X% Q
  186. BOOL CRevAppApp::Fclearf(char *FileName)  U2 u$ M7 k* S6 k3 Z. {9 p
  187. {" n  Y3 ~5 R/ U' h4 r" D) {
  188.      FILE *fp;0 R6 z4 \9 W7 r& a  T* D5 U) b1 K
  189.     DWORD  attrib;
    + O2 |, e# _$ ~) u" T
  190.   attrib=GetFileAttributes(FileName);
    4 ]) e2 y+ O" z5 C6 f
  191.   if(attrib!=-1)" x# T7 {5 w) H) `
  192.   {5 L% g: H! G$ y1 G' o5 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % h) l6 M( e+ d' J1 x" n. e4 V
  194.     if(!SetFileAttributes(FileName,attrib))( r3 i6 d0 f2 n+ J. a
  195.     {$ r! r0 L' r' l
  196.       return FALSE;
    " N' a1 h# V( R2 ~3 f
  197.     }% v* H4 e6 |( e. A' b
  198.   }
    # Z( t7 U" N6 u5 z! c4 [
  199.   fp=fopen(FileName,"wb");! A- ], o1 @" m2 d& a+ v
  200.   if(fp)
    4 d8 h6 A( {3 k
  201.   {, D. S# M# T( T% q
  202.     fclose(fp);: R; p* L  N# M9 q; j5 M$ A3 y
  203.   }0 l0 N- j3 X* v6 U1 K, P+ U
  204.   return TRUE;! u  K" i% r4 ~3 a, z$ h& j
  205. }
    6 b# d& S  d$ g; W" _3 n, k

  206. 5 ?" W  d8 W4 x  x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 c0 o  p- u! q0 ~; p
  208. {7 F4 t# U3 e+ N$ |
  209.   char filename[MAX_PATH];1 X) s6 q; L1 h; ~6 ?1 W! Q; r
  210.   LPUPDATEFILE file,olds;
    ! a' w5 F; g4 v0 s! ?5 c: w. c- j
  211.   std::map<int,CString>::iterator i;% B% [3 h8 j) |2 [2 `4 O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; F7 g7 S! `# h- f: ~3 Q& F' a, K
  213.   std::list<CString>::iterator l;  R6 i- E5 ?# t+ b- g( Q% c

  214. ( x8 q2 l$ C; D+ e
  215.   if(bFirstUpdate)
    , n. ^/ g, H6 I6 f+ ^. q) f7 o
  216.   {
    1 z9 u& x3 b4 q# d& S
  217.     dwCurrFile=0;
    2 p. d7 _1 c7 s
  218.     bFirstUpdate=FALSE;, w+ H6 X" l2 N0 `8 n5 w
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  l5 s# _" U6 b* t; ]1 `+ I
  220.     {8 S% w8 }6 X6 ~0 W: s0 g, w, o/ W
  221.       dwTotalFiles=UpdateLocal.size();
    . Y' \% n  @" ~8 ?& u7 `# n
  222.       dwDownLoaded=0;; g$ P( e; C, S& a0 n/ ]- l# O6 _
  223.       bSilentStep=FALSE;" g/ m& W7 c8 i! {* P( s2 e
  224.       bCompressed=TRUE;
    1 C, G$ g* P. w0 W) R# y
  225.       strExtLocal.Empty();
    4 m+ Y, L2 P- Y, t
  226.       strFullName=(*i).second;8 C( X) t+ }( c! ~
  227.       dwProgramState=AP_CONNECT;
    # j; Q$ r* C# \; D' {
  228.       return TRUE;
    8 t* P( Y1 i" [! O& h  {; t9 O
  229.     }
    " ~/ _, U- p, k
  230.   }% J- h5 K: p( X& i1 i; I
  231.   else if(bRestartUpdater==FALSE)( D6 m, H# ]% E$ ~
  232.   {9 ?# j3 J, Y  N8 Y7 v5 ~
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 J8 F$ L9 B- `5 ^5 A/ }9 }4 K
  234.     {- U9 e8 o8 l4 b. n& s
  235.       file=(*p).second;
    . T$ c( J) ^8 Z3 j8 V" M9 Z' ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 g; F' I1 c  s/ Z
  237.       {
    ' }. {; a( z& b" s2 K1 X6 b. x) B
  238.         olds=(*p).second;
    1 a$ T8 ]) Z( [6 g7 m* Z7 h/ t
  239.         olds->vers=file->vers;  @2 B1 N; x* V) ^0 N
  240.       }
    4 O/ P; @$ g2 A3 c: J+ i
  241.       else
    , P0 ]  u" _- K4 X$ H
  242.       {) {0 V# u4 r, ?; p( @
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 I( [! w  _" Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 H: o; r+ b- ?* X7 {; `
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 K1 Q9 ~" O. I9 M, o
  246.       }
    9 @1 T( `8 i# z' x  s- }9 g- k* K% V
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * y4 b' Y- p5 e8 O  F1 r3 {
  248.       sprintf(filename,"(%s)",file->file);
    # b8 N# P; D+ ~. i" g) z8 w& F
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
      n" X  n' W* M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ O% Q$ y' B: I, k
  251.     }
    . U9 H" F+ u' {8 X
  252.     dwCurrFile++;
    7 B* o) G" q# D, G$ {+ _6 n  U. X
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) v9 B+ V3 z) Z
  254.     {
    0 E; u$ ~/ ^+ W# u+ n* P! B
  255.       bSilentStep=FALSE;4 G# K, N$ X& a0 F& w# g; N' F
  256.       bCompressed=TRUE;, ]8 t3 G/ |4 Z, d: m6 Z
  257.       strExtLocal.Empty();  S8 h8 G9 `# u0 g
  258.       strFullName=(*i).second;7 e/ M$ \& M7 ~8 i
  259.       dwProgramState=AP_CONNECT;0 o2 Y+ Z) e+ T* C- M- q
  260.       return TRUE;+ t, G  i. O% ^7 d0 _
  261.     }7 T5 B- R1 e8 v
  262.     if(!bRestartUpdater)
    ( w' u: f4 I5 M* s: X; z, a2 p& Q8 V
  263.     {
    $ y% e; }/ O9 |  j7 ~/ g6 |" x
  264.       int iCurrSize,iFileSize;/ a. Z1 m7 p3 g3 \
  265.       iCurrSize=0;
    2 y& @; t/ V1 F* C
  266.       iFileSize=UpdateList2.size();/ G  Z! N4 m4 B6 X# @: N" M
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / H7 A2 X, b  e3 d, O
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . w3 e! Z& s0 c/ W7 {
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    3 o- y6 u; F; M4 T2 I
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 P1 A& \3 m  C; |( j, h9 G
  271.       Fclearf(".\\update.dat");0 y! H: W9 p, w( c0 h
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 Y! X' ^; p) T. Y
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)0 n5 j( V$ v+ _8 {: @
  274.       {
    + `' b' a# j& k5 h8 b$ p  A& s- L
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), D! W  b. l* Z2 m
  276.         {% e) ^- d# w* o- q8 m$ }/ e& Z
  277.           file=(*p).second;
    8 i( s0 N9 G" S0 y& f# Y$ N
  278.           sprintf(filename,"(%s)",file->file);$ W0 ]& _8 T; X, X0 f) M9 T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- u  i' t# m4 `% Q9 E
  280.           iCurrSize++;& @& V/ K/ S0 n2 D+ e" B
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 T9 M& a4 p8 Q- e, i- [3 O5 j
  282.         }7 U, G: a2 _1 l& n, l. {# G) U
  283.       }
    + w* j: X! O* r0 p% y
  284.       unlink(".\\update.txt");
    " K" t; M6 c$ y0 U
  285.       unlink(".\\update.tmp");! A( D2 o4 V, u, j
  286.       Fclearf(".\\checkversion.dat");' o6 n4 i+ b5 N1 J
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    3 ^4 G- `; X* S
  288.       if(UpdateLocal.size())
    3 D- B( x$ M: Z3 ?- j
  289.       {# b) L$ t. X9 Y0 s
  290.         UpdateLocal.clear();- h8 K7 {- q+ a, s1 C% `
  291.       }
    ' @' |5 k4 `, s
  292.       if(UpdateFile3.size()): g, e, e2 g- F. z
  293.       {
    1 O; q( H1 l8 S% p/ c& q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 }) f7 J/ R1 [/ p& F' ^6 \  t
  295.         {
    , ~* h; W* }9 J$ Q$ D5 ?4 b0 o
  296.           file=(*p).second;( F- v$ p, B/ K+ u- b. }  D+ ~
  297.           free(file);/ E/ q9 N, @4 ]" G. i/ d& v  P
  298.         }
    4 m  |- {6 b- @2 L8 `$ A7 [
  299.         UpdateFile3.clear();! w  u2 H7 w/ m7 |1 J
  300.         UpdateList3.clear();/ f6 v1 Z$ P- A# i5 T
  301.       }3 m. q: S: L! F8 a' I& }
  302.       if(UpdateFile2.size())7 X2 O( T6 s: X0 N% T2 m8 x! h
  303.       {* c: ~5 L4 P+ A+ P0 ?0 R' L8 f2 w3 `/ u" Q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - x( a/ |- M5 B: o$ a- C! m
  305.         {
    8 W& J$ y; N! {/ C* V
  306.           file=(*p).second;+ E+ {! v6 y& }+ R8 F  Q
  307.           free(file);0 C9 M( d: P' [% i1 e
  308.         }
    9 t5 y% e$ ^( O) y3 Q4 W
  309.         UpdateFile2.clear();
    7 F5 W. |: V0 @$ B, ~, D; y/ l) w9 b
  310.         UpdateList2.clear();
    ' [9 f4 I' x) l# a4 K" m* Z
  311.       }- r# t/ N# a6 Y$ T2 @
  312.       if(UpdateFile1.size())& v! p, g2 s- @- m! N
  313.       {
    3 [: w$ j0 Y' K; r. s+ Y/ m: u4 S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    " H0 A& @' `6 A9 ]& {  M) n
  315.         {, l6 {2 {; `6 m6 [/ `
  316.           file=(*p).second;* z  w8 _, d) G
  317.           free(file);
    8 l9 {& L4 k! {8 |9 X# x- s. O
  318.         }$ k0 u8 ^: X2 y( y5 E
  319.         UpdateFile1.clear();* M6 `8 ~. ]$ I4 t9 G
  320.         UpdateList1.clear();
    ' p; D6 \  B( R$ A8 S
  321.       }
    2 T% R8 ?  l7 W' ?7 l6 u7 Z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - q: U( [- z. X) T& f0 F, q$ L
  323.     }
    ! R( q0 n" a7 h5 @7 ]
  324.   }
    * S+ i2 E. R/ @/ m; u0 z7 }. Z) H
  325.   return FALSE;
    # z. [3 T& a( Z5 e
  326. }( I7 }- S. D3 W3 |4 Z& h' e

  327. ; i" ~3 a; m/ ?  _
  328. void CRevAppApp::ClearAll(void)
    - ^( D3 @5 e' {) ?: L7 H
  329. {
    7 W1 V7 {$ ~5 ~. R& q) \
  330.   LPUPDATEFILE file;$ L' s! _9 ?5 n0 W7 S+ u3 b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% e8 ~' M  w% D  g

  332. 5 y; ]: `+ C1 o# \0 [* i
  333.   if(UpdateLocal.size())$ `" R* A# D0 X1 ^& I3 s
  334.   {( X# a2 l: A$ [$ `- W4 @, D
  335.     UpdateLocal.clear();
    : W# J) h" _# ]1 a! |# {4 {0 Q
  336.   }7 `! T! H! G! f( x" v3 G
  337.   if(UpdateFile3.size())
    . z1 S- J2 J( _. R7 w+ D. H
  338.   {$ k$ Y( ~  |1 j& U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " E. k9 }# e# r$ L  ]% x; x
  340.     {$ c5 I: a9 S/ N: w$ k! S
  341.       file=(*p).second;
    4 V$ e4 S1 F! Q2 p( d5 J  V, D
  342.       free(file);
    9 ~& R: p) m9 I8 d) N) d
  343.     }* b7 A9 }& T6 O- ?+ C+ Q
  344.     UpdateFile3.clear();; Q! i+ Z4 E7 g1 V4 k4 N
  345.     UpdateList3.clear();% [" ~; P# b; A5 {' n% O
  346.   }
    4 A( g2 W3 h% b+ p/ ^" J
  347.   if(UpdateFile2.size()). a7 a5 o! j2 {% [% f
  348.   {
      Y7 H  a7 m% [: V
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)/ e9 X% {" o% B8 G
  350.     {. a. g1 s: P- m, }# |3 M. h
  351.       file=(*p).second;
    ! M3 T  J2 Y; p3 @5 m
  352.       free(file);
    ; B5 Q# B+ j4 Z3 v1 D; h
  353.     }
    ( n6 o" h# c# t5 ^
  354.     UpdateFile2.clear();/ C/ Q  R, J" y  `, `+ l+ T
  355.     UpdateList2.clear();
    0 }1 ]- k% ^! A- ]- A$ U, w
  356.   }
    ! A2 k5 g; d" M9 R7 r  X3 ?5 o. U; L
  357.   if(UpdateFile1.size())% q5 U! c4 w+ M  b+ d
  358.   {( e' z6 u9 D+ c) {% i/ V
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! Q8 ~% \, t) H
  360.     {
    7 p* \9 v) D+ i4 p" G
  361.       file=(*p).second;+ a# ]# h  G. J; D
  362.       free(file);
    % B. B0 n0 B0 P% e6 R, F. @4 D
  363.     }" C( V- X) @8 @' _6 B
  364.     UpdateFile1.clear();
    2 F" u% u' I. N! _
  365.     UpdateList1.clear();) h4 W5 E& e; E" ]
  366.   }' x, r' [7 m( f( t  D$ j% O
  367. }  $ l) S0 l! Q5 }% H6 \
  368.   
    / m4 m7 f# h% c! Z/ i. [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    2 Q0 c: p: S) i/ B0 ^4 r
  370. {
    . A+ I; n8 N' Y1 z
  371.   int c;
    1 Q( g% A4 t; |
  372.   LPUPDATEFILE file1,file2;6 K; V6 |2 ^; P5 _8 ?/ K9 c: s" d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ' N9 L( U# u. l8 n( q) T0 s
  374.   std::list<CString>::iterator l;
    8 {* h% f' k  g) b5 ?# Y

  375. ! Q/ j1 t8 ~6 s* P
  376.   UpdateLocal.clear();; |3 k" s! \$ J" [, c! q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    , L1 E7 T( i' K6 p+ G5 ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& ]7 V) {$ W. M6 Z% `, X, w5 `
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # V# L' Z) Y2 R0 @; M$ Q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 [6 E. a# @9 \( t
  381.   if(UpdateFile3.size())
    * L- f) t; l6 c& a
  382.   {
    $ d+ x0 \; P. {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    $ e6 A0 [) [; `6 Y1 Y( |- F
  384.     {$ R/ z) }1 I$ Q+ }' m5 L: @' x7 J
  385.       file2=(LPUPDATEFILE)(*i).second;
    . ^3 \7 B; Z! i! G1 H# F$ F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* _- G5 _2 e$ W6 b- \
  387.       {
    + Y$ S, x: q; }8 K$ u
  388.         file1=(LPUPDATEFILE)(*p).second;) R% u- `6 X; v& b/ @
  389.         file1->vers=file2->vers;: @! L: I6 v: N6 o6 p2 ^
  390.       }
      n' O# D0 I9 G8 v7 o
  391.       else
    4 {+ `$ [. ]! r. N& N
  392.       {
    0 |6 ^! U+ t6 x5 ^# q9 ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 O4 w( o* d# C, ~3 d  D, e( p3 o
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));7 s0 e2 n9 V: A7 V
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    8 g% n. \5 i; _5 Q+ f5 q
  396.       }- F2 k7 O1 |  H3 e0 p
  397.     }
    1 F( y+ Q, ~. W3 b, N- k5 `" O" ?
  398.   }: R- [5 L% A# ~% O/ v
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)) Z' F+ T; ^. H5 s$ O6 Q( K
  400.   {
    ! y' C/ M7 j4 T* m1 Z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& r# X3 I1 m8 k8 p, ?! _
  402.     {
    9 Y, Q9 Y$ E6 N4 G/ X& p2 P! g
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; t! a+ q  \) |; X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # y# n/ r, o7 e, T& E* F1 l
  405.       {
    " j( `$ T$ T, ?. W( c' g
  406.         file1=(LPUPDATEFILE)(*p).second;' B1 Y0 _5 l, b( _2 U
  407.         if(file1->vers!=file2->vers)
    ! n$ d' F  h8 x) A4 \/ m
  408.         {
    1 J' H, Q" M% P7 d
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( b- p( V. O4 q
  410.           c++;
    4 Q# d/ Y! c! E* z) r3 S
  411.         }/ E: B! t* H# Q* x5 M
  412.       }( |/ N& y( [& H% \3 `" m
  413.       else
    0 N: i  i4 t7 c5 q! ]3 Y. m
  414.       {
      f( ?- h" E$ V% S- m- @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % S$ \( {& T* W2 g5 d6 z" P9 m
  416.         c++;" @- f: @4 J  C# {% L2 F6 b
  417.       }
    ( ^. P3 W  b. \" L9 P% A  {% U1 `
  418.     }4 n; C$ X! i( y/ e: e5 ]) r
  419.   }
    ' E# m2 s" Y1 k- |: Z9 d+ J6 e
  420.   unlink(".\\DownLoad\\update.txt");2 [0 u% ^0 u' u
  421.   if(UpdateLocal.size()) return TRUE;
    . r3 @1 N, Y. u* X& |
  422.   else                   return FALSE;
    * X- i# ?! h& `
  423. }2 W$ f' Q$ r8 R. ~0 O

  424. / c1 U, c1 G, N9 w* R
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' K; b- }- o: c  B7 d/ a
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"# k9 N; u( \% a' ?
  427. - K4 ^5 E' ]$ d' n& l/ P8 k
  428. 6 o$ T7 t7 T1 G6 H% q

  429. 0 V* a* @, V: n, R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; E; m" [8 @# m0 W" {( d
  431. {
    ) p, ^- [* x0 z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    : K7 I3 f$ b; |0 r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : d. l1 S4 R+ o* Q: O
  434.   {
    ; [1 c+ t7 g7 d% ]2 M7 Y$ D% X
  435.     char szLanguage[50];
    4 h" F' \4 M6 ]( A2 p
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ \4 W9 W: D1 w7 D/ K: f; }: I0 X, Q7 A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . @& p, E6 l" E; E" H4 e) d3 Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 W9 K5 c% |1 W) {  I5 ^% A8 N$ X
  439.     else                                   m_iLanguage=ENGLISH;, S$ z  c3 @: W9 I
  440.     char szRegister[100];! X5 |* ~. x0 K* y: i. ?' n
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 z$ d5 \6 ~* R" a
  442.     strRegsName=szRegister;/ y7 \& r1 a3 A0 h6 o! a- q) Z
  443.     char szPatchURL[100];! p' c/ S6 V' q2 B
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' C' V2 N5 ?5 R. Q- S5 l& Z
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; ]5 ]5 ?4 p2 [( @8 v, y: X
  446.   }
    - g! w+ K8 {& v
  447.   else
    7 E% n/ Z+ j' @/ }% ~
  448.   {
    8 I; L8 T' m: t) @! M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  u4 F  A0 j& J" d" {
  450.     strRegsName=DEFAULT_REG_URL;
    * P) a2 x- n1 D. @& o! f5 I' c
  451.   }5 d( S0 r/ q% M
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ) v# F: i# e3 M9 \1 q5 b" X# s; k
  453.   {
    " V' J$ D7 S9 z( g3 f! H8 U
  454.     char szIP[50];
    0 x& Y/ A$ ^% ?4 C! c
  455.     char szDIR[300];' ?4 V# e+ c$ w8 j8 c- |- n. d4 x/ w9 P
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))9 @& r! Z: R: m+ q5 j* c* s
  457.     {% \( r9 T4 n2 G" V2 m8 {- W, g8 B
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 t2 t: K* ?6 X, Q$ m
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / |% r# y# b  Y! V
  460.       strHostName=szIP;: T( v3 d7 i0 t; B. B# s6 |
  461.       strHostPath.Format("/%s",szDIR);
    - t9 ~* q; f! \, `
  462.     }7 V* v4 ?& i5 d2 y1 A
  463.     else
    / L* M5 |' z  |* e, [
  464.     {" d  f5 g$ P0 H4 B5 C* g4 {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; ]& Y# @( g; p0 O/ k/ d
  466.       {
    " F# T& g0 v* T9 n. r0 a/ Q
  467.         char szLanguage[50];
    9 n5 I8 Z9 ]9 x+ Q! X( {# S6 [5 s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ T; B2 b$ C7 @, T# z/ G
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 D4 w. _& V  U/ v2 W& |2 }1 p
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ L) j5 u0 B+ }) _* j/ d4 A: e
  471.         else                                   m_iLanguage=ENGLISH;" }  R- J* H3 B  b' r9 h" V
  472.         char szRegister[100];
    ; `/ h! @/ I6 s0 u4 I( x! M
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 Z) d# G( v9 b7 M. b8 u, R2 G) }; C
  474.         strRegsName=szRegister;& `  Y: k- A- H# h2 S( `# q0 K
  475.         char szPatchURL[100];! q' P4 T: d/ [$ y" l: m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    4 Z( \. I9 y' |' z  Z3 O/ R5 _
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: Z4 [" K' {' {
  478.       }
    3 A5 W% S5 C5 i  f$ _  k
  479.       else
    3 b' x, \$ R+ P1 D
  480.       {
      i1 z4 [1 ?2 L/ a9 U+ \. B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      d8 n1 a) a' Y5 `8 s/ ~
  482.         strRegsName=DEFAULT_REG_URL;
    0 B, p% U+ V% @) ?$ q
  483.       }, ?' J+ `* C  L  K5 M9 X& t! u, ~
  484.     }& Z: B+ j' v9 y
  485.   }
    ; C. z3 J! ~$ c% l) a2 |
  486.   return true;: H/ w! A0 E% C9 u
  487. }2 h& {8 }& p* [% @5 S4 G! P

  488. # N% [* z; }7 F* D! ~
  489. #include ".\ZLib\unzip.h"5 X- k& b7 q, B4 y9 B
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ a' R3 C4 k3 F4 L& Z) }/ H  I
  491. /////////////////////////////////////////////////////////////////////////////
    ) ~2 S% j, P, h! k. h- J0 H3 N1 N
  492. // CRevAppApp initialization/ L; R9 `* b3 L9 D" d
  493. 2 G( S2 p5 h  t
  494. BOOL CRevAppApp::InitInstance()! Y, l: }! I, a( O3 ^0 {2 o, ?3 |
  495. {
    8 f5 y/ b+ ~* T# g3 L, f" U6 {
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    5 E4 u/ n7 a. P0 P
  497. 6 N1 k3 q7 t. k  L6 v( ^' _
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / g3 D" \2 S3 Q4 F! y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ' T  i6 O- i( ^) d( k# E3 S
  500.   {
    & w% i; g( b, H9 v& I' K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# @  h: L: V* u- \4 Q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    & Y% R$ u) c- u5 l) I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    7 H, C9 O% ^7 n9 Q( C+ Y/ F
  504.     {
    2 J# [: ~4 ]4 s8 m8 ]" i& |  a; {
  505.       strcpy(szPath,szPathTarget);6 `2 R6 e2 J) Z0 [$ F4 k
  506.       SetCurrentDirectory(szPath);
    ; j7 e1 }# O! _5 U, p
  507.     }
    : z5 ^. B) ?( ], W7 H
  508.   }
    - Q# M1 A& C" ?3 i4 R2 p9 y
  509. #ifdef _DEBUG6 I6 U( E7 o0 N# d+ ^/ s: N
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 {" C$ z* ~" E7 {) V5 Y
  511. #else& F& `$ c% l2 x) C  y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 c& q, U% S; l0 M! h* W
  513. #endif
    ; X0 @' A+ J# Y5 k) n
  514.   {& z+ g7 x6 v+ \8 v. i
  515.     char tempFileName[MAX_PATH];) B9 q5 Q5 A' G' g
  516.     strcpy(tempFileName,szPathSource);
    - s7 n5 {, ~1 K8 W! M. U8 s0 r
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ) U* M" L) C- W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");9 k" y& J1 i! B% C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ) Q  B8 B$ s; w8 S; }5 [# S
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / ]+ p; L! y( D+ U. T
  521.     return TRUE;
    $ U5 s' K9 a0 L: D4 U. }
  522.   }& M% U4 c% u/ V+ {- o0 a
  523.   // Nuke 0118: Delete run.exe
    0 Y8 @* n. r# W+ q8 f$ T% }
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    " a" ]3 n3 b* n) h4 j% g. V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ' H5 y1 r  K4 O% X, i. ]
  526.   if(!ReadCfgFile("Config.ini"))
    1 x9 Y. A- l! b% [, f
  527.   {
    4 d2 a0 z0 n' F' n
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : n' q5 p! Z/ v
  529.     return TRUE;1 g% b+ a; n  v
  530.   }! s" U, P: G: x' O3 k' W% I3 F6 O- K+ j
  531.   HANDLE mutex;3 f7 y; \; D0 D( V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    : S7 G% [6 o9 W& v4 l) c
  533.   {7 a6 a) r' ~0 O  y" K% `2 \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( [4 K9 J) T2 g8 w7 i; k1 h# o
  535.     {. o2 j" E5 ?  L8 o
  536.       CloseHandle(mutex);
    , P: p3 C9 m4 c0 x. c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. m- l9 J* \5 o' W
  538.       return TRUE;
    % b1 v9 p/ U5 T
  539.     }
    7 B9 {$ w: |7 H3 D; F4 d6 z
  540.   }  
    * H  H4 Q4 n/ Z" L4 J" D; Q. L
  541.   CloseHandle(mutex);
      m. w& E1 S  l- ]3 e
  542. 1 G" t7 `, c! o2 J* Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    + i1 H  q) S& e; |! _2 o& ?* p

  544. " T# Q6 E! B. ]: u
  545.         AfxEnableControlContainer();
    4 \, J4 V0 G8 Y4 Z6 O- n
  546. ! b& A, M  h% c% R( n8 I& n  M
  547.   bCanUpdate=FALSE;+ }' Y4 N- ?1 i  u
  548.   dwStartUpSteps=1;; V. b( c9 S6 |" F3 D' A  X' [
  549.   dwProgramState=AP_NOTHING;" R$ _  u+ M: x  n
  550. ! I. V% S- P& b8 i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  b/ `: d* x. T" e& B" _* a
  552. 7 D- S) J# i5 i& v. ~
  553.         // Standard initialization: L+ G0 `- }* T% D
  554.         // If you are not using these features and wish to reduce the size
    ' [7 S* r5 v& Z. D
  555.         //  of your final executable, you should remove from the following# v5 c- x4 ?9 S) Q+ I8 M& O/ p1 o& S
  556.         //  the specific initialization routines you do not need.
    ! j, M" r) D+ r0 m& e( R; J) l: h: l

  557. 5 F* P7 ]. S& B5 Q+ ^( j! X
  558. #ifdef _AFXDLL
    & p7 P4 C3 n! L: @+ l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    5 f) r9 Q9 \0 P6 j* |: f
  560. #else! y$ N$ u  B' k% t# q; S
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically' I1 W" B3 l; B, O
  562. #endif0 m, |8 w* N6 K, [5 d- c# m
  563. 3 c0 u* ]; l. w2 r- B& z+ M  \8 @6 r
  564.   dlg=new CRevAppDlg;3 O0 q/ D* w' ~2 A( V
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 H0 `" m+ i1 v, ~+ R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 z6 a( c; n' R7 m: U
  567.   m_pMainWnd=dlg;2 o' e% y, r, r* v8 \( u
  568. 9 i* z' r' g% D) F0 X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) Y" \* y( k0 M$ O* {2 d

  570.   n. w% V0 J- D9 W1 ]% j2 ]: ^
  571. //  GdiplusStartupInput gdiplusStartupInput;* H5 q% f6 U+ l% w! m  [
  572. //  ULONG_PTR gdiplusToken;+ ?) I. u8 |, c4 M0 D
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    + i  U% N% y6 D5 S! B

  574. 7 K- a: v, ?5 S% q/ ?1 A! q
  575. //        CRevAppDlg dlg;$ `3 N( G* I" p/ M, B
  576. //        int nResponse = dlg.DoModal();9 r+ }$ e+ e& F% {9 d7 M7 w0 v
  577. //        if (nResponse == IDOK)
      Q* z' q+ N/ O
  578. //        {
    3 r5 c; Z  T. d/ R
  579. //                // TODO: Place code here to handle when the dialog is' J: b: T, R* i' r8 @
  580. //                //  dismissed with OK  `/ l2 K/ O/ A
  581. //        }; s5 G3 h* I9 \
  582. //        else if (nResponse == IDCANCEL); M0 d6 x; c# G
  583. //        {
    ( C* [; y  J* j( H4 u
  584. //                // TODO: Place code here to handle when the dialog is
    4 N' ]6 ~1 y$ E& _; O+ s0 f
  585. //                //  dismissed with Cancel
    ; l$ G' e' e6 E
  586. //        }9 t# P; x7 a; [$ C+ O' m

  587. 4 h9 ?; g  M0 T$ C) l, e/ }/ g1 C
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 s) i" ?: b7 Z
  589.         //  application, rather than start the application's message pump.) D+ @2 _( \" w- ~5 f, P
  590.         return TRUE;# [" H) Z+ R( t
  591. }
    - i+ K. d) O2 G! t! C8 }. s  v
  592. % {; c: m: l1 F0 K, a
  593. char *CRevAppApp::strtok3(char *pSource,char *token)% R$ v; X4 |3 Y
  594. {) F0 d3 l& B; n# D* R6 m8 l
  595.   int i;' G. _2 l: X, f+ c7 t7 S* p
  596.   char *szRet;# j9 I% t# i" |8 J9 k' O: [
  597. 3 `: l' M" F  [) w. `
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 j$ i' S: [% s9 \( j
  599.   if(sztoken)
    , C/ y0 T" E& x. t
  600.   {
    ' R! ~' |' `; X* c& X: Q& G* R
  601.     szRet=&sztoken[itoken];
      S% }4 U- A. @/ H* F
  602.     while(sztoken[itoken]): j" R; N  F* |, O
  603.     {0 O- D/ ~! L, _8 A' V
  604.       for(i=0;i<(int)strlen(token);i++)
    7 R! t+ d8 ~* h# A: l5 l) V
  605.       {( A4 [( o! A2 S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . H- P3 \& G7 P3 q
  607.         {
    + k: d- S6 z2 O1 h' k7 A
  608.           sztoken[itoken++]=0;% _+ m' u5 F& R7 _
  609.           sztoken[itoken++]=0;
    2 }4 r) j* }! D7 X! s
  610.           return szRet;
    - i7 }. e  V6 A  M: B8 A! S
  611.         }
    7 _- S8 X. f& J; ^7 |% E
  612.       }
    1 k, }! d. e8 J! r; I5 }  Q7 h) t
  613.       itoken++;
    2 k2 b: j# a: z' G9 z+ ^, |
  614.     }
    5 l0 h$ X/ e+ K' t
  615.   }5 X) i! e5 y3 T: q0 e! ^
  616.   return NULL;
    . ]( U) S( S! }+ R
  617. }
    0 J5 |$ D% i9 B2 Z

  618. ' O/ E/ |' d( j
  619. void ProcessProc(long Total,long Current)
    , @$ p2 v/ h$ W: ?
  620. {& A  d% h! M9 ^* d- Q4 u$ Z/ `! T
  621.         MSG msg;
    % U  r2 R: H) ^, B7 S
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 a! s- x; _& r+ [
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    * J9 T7 v' e; e3 Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 g4 h: N; F0 w# B$ i. a9 D/ X. B' p
  625.         {7 p% `: G! _7 P& K
  626.                 if(!GetMessage(&msg,NULL,0,0))" Z- m; i7 t/ L  H5 c  C2 t
  627.                 {8 Z( e; Q' t% t8 H- Z6 F
  628.                         return;, F9 {# w8 _# P( t
  629.                 }1 B$ C( o  @2 z  b( h
  630.                 TranslateMessage(&msg);
    5 e: A5 `% n0 Q  O/ p
  631.                 DispatchMessage(&msg);) F, h! }0 E* L4 c4 x
  632.         }        9 T2 [. J+ Y$ w! F8 `- V% A" s% `
  633. }6 I' w8 ]' c" w3 V, s, `
  634. ( p! m6 V( y4 z0 j& U2 N/ |$ D7 Q! w
  635. BOOL bFirstChar=TRUE;
    " K' @$ K( ^4 i4 w8 A& j* ]9 Q
  636. 5 Z  f4 T+ s$ ~  t6 d# Z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)* X; P( h3 h# w7 d) A6 ]
  638. {' m. U& N+ v3 ?/ y
  639.         // TODO: Add your specialized code here and/or call the base class
    6 ?% s% k, @/ y7 ]  h: K
  640.   switch(dwProgramState)) d6 b% I+ x+ o- B7 H& w' [8 w3 V
  641.   {& q5 D6 o9 q0 m- @. e
  642.   case AP_NOTHING:5 R" b0 N, H, J2 ?7 E4 x, P% @
  643.     switch(dwStartUpSteps)6 x) ?# e# g1 a8 B
  644.     {6 M. n* Q& x6 q0 D) Z# R
  645.     case 1:
    # ?4 }: |: m6 g" s0 _  `
  646.       {  x! |$ f8 M2 f& L
  647.         int i;4 L) S/ a9 l  a
  648.         CDC *pCDC=dlg->GetDC();( X! {; c* b# l! t$ x
  649.         HDC hdcwnd=pCDC->m_hDC;
    * V, ~; f/ K! q$ j8 {6 ?* _( L( Y
  650. //        Graphics graphics(hdcwnd);1 `0 R$ b5 N% V! J# \" y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 d0 ^9 K: B! m! V5 h% [/ l
  652. //        INT iWidth=bitmap.GetWidth();+ {; h. f6 Z" R' v# N* Y5 L# Y
  653. //        INT iHeight=bitmap.GetHeight();
    2 ]- {5 e$ J3 M0 b
  654. //        Color color,colorTemp;
    / @5 d0 L7 ~1 h
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)* ]( N9 z: F; X2 m0 ~$ F
  656. //        {
    - S+ w. {% s8 K
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( }+ k3 P# p! t+ j6 W* s
  658. //          {
    ) l: k* M1 b; I* z+ Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    8 g  G) n6 P$ c0 G. k
  660. //            colorTemp.SetValue(color.MakeARGB(( z) y1 @/ `& u5 m% r5 h0 C
  661. //              (BYTE)(255*iColumn/iWidth),
    : d1 Q0 P7 P5 @2 d9 u/ q7 Q1 X/ ]
  662. //              color.GetRed(),/ X: T/ V8 ^6 u+ K! W
  663. //              color.GetGreen(),
    $ E/ R8 `2 ?0 O! i* `
  664. //              color.GetBlue()));# i$ a4 ^5 b7 ^6 k$ z5 S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  ^  u5 q/ r1 @
  666. //          }
    8 |" v1 F) b( c! I; U# _% K
  667. //        }+ U0 J3 R8 Z8 }3 _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- e7 f" Q$ j3 n; F
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) u. Z; z5 V" {* f3 M4 b8 ~
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    & V2 Y* E7 v* T0 n. o& O# E4 j$ X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 o- |# N9 O6 A) n8 h- }( D3 l) r; |
  672.         for(i=0;i<240;i+=8)
    , k9 |9 |2 A% O! C
  673.         {9 B' q8 J$ B9 q6 F7 @# I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) n' h$ S7 ?0 ^1 c% Z% i
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 J" G/ l. Y. P5 ^2 h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: H$ i! c2 [' h8 m' p1 a* @# j
  677.           Sleep(33);
    : c  Y6 \0 U8 V! Q- v
  678.         }3 R+ F# F# {+ N
  679.         Sleep(1000);1 d8 M+ d& r# P! V7 q- S7 E; d
  680.         for(i=240;i>0;i-=8)
    + m" e0 L' v( S( N3 I( v
  681.         {
    ; Q( W! l# }4 z# W8 u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # O" [: c$ X9 H' \: d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! K4 _; J; b8 Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ q* _- a5 Z# s* u0 j
  685.           Sleep(33);
    ) y( b) y: x  s% V" {2 ^% _  ?# F
  686.         }- z" J3 j% f3 k4 }& L9 a) o
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    8 w8 [* B, t5 E9 z
  688.         dlg->ReleaseDC(pCDC);  k/ S; t7 v- b' }  K
  689.         DeleteDC(hdctar);
    # N6 p- M1 r% h+ A. f
  690.         DeleteDC(hdcsrc);
    ' F5 D: c8 r  p" M
  691.         DeleteDC(hdcorg);) w4 v$ x: W: ?9 o' m: }
  692.       }) S$ ^1 C3 I3 n0 B# x5 G2 F
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; W( j* a2 a3 S" Q% M1 m0 X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");/ P$ c) N% c& G3 U+ N6 o0 d
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - y8 z# ^3 T: b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");# Y) Z( i6 r: @2 `1 ]! B
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : r5 q' {5 \8 W3 \, ?1 g; S
  698.       if(!Dn.Connected())
    2 K$ x( C' v. n+ p
  699.       {
    3 b, o/ _! y" s' U1 j4 N3 A$ D
  700.         dwTotalFiles=1;/ B/ \8 V$ x6 ]3 k& x. o) ]" E
  701.         dwDownLoaded=0;
    4 e( y& Z' E# D/ s
  702.         bSilentStep=TRUE;
    1 d5 H) x0 D$ C0 L& r. k
  703.         bCompressed=FALSE;
    6 |% }5 q+ b' N6 @6 z
  704.         strExtLocal.Empty();
    % x) T0 O5 {4 _3 R, \' ^
  705.         strFullName="readme.txt";1 I4 X5 T" Z, @3 x2 d9 v
  706.         dwProgramState=AP_CONNECT;8 G: B; f* s' v+ `& T6 D
  707.       }
    ) ^  l% O2 |8 ?' p; u& p9 j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ; L4 ]( e  R- S2 z9 s  E) f+ e. ~# ?
  709.       dwStartUpSteps=2;
    / H( z( v: ~# Y! U" O6 z
  710.       break;3 }3 l. l/ I; ]+ O5 o: c
  711.     case 2:9 {6 Q& d5 A; J3 L$ q3 s0 S
  712.       {
    : V! o  i) m! x/ K
  713.         int iEOF;
    2 V8 M/ N# A7 h
  714.         FILE *fp;
    - p7 P5 Y, [& b8 T. E- e
  715.         char szString[512];; q$ g0 d# i! C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");# I8 H4 d& y. s3 n$ J
  717.         if(fp)
    ' ^: b. R0 H2 }9 h0 S
  718.         {- u. {6 u. v6 p
  719.           do
      ]/ w1 |( [4 @" }! M8 `0 O
  720.           {
    ) J2 R8 d8 ]% R# f; ?) ]
  721.             iEOF=fscanf(fp,"%s",szString);
    & \7 a8 P: L: [& i
  722.             if(strlen(szString))9 n& F  {8 ^5 Z5 r5 x; f
  723.             {0 \" a. b" t0 R& I6 H  y3 g
  724.               if(bFirstChar)0 s( D9 i4 L% s4 @
  725.               {
    ! M) M* K' x: ]" G) v2 G. J
  726.                 bFirstChar=FALSE;
    / ]! i- a' k+ e% ~8 C7 K9 C! |
  727.                 bConnectIsBig5=FALSE;
    ; V# y# S- e' `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    5 U  Z' Q' E0 e' ^3 g. i
  729.               }
    ( ~" w$ J/ L' _% P( L, f
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& g/ L2 j2 E) d+ O. I6 P) F
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . b- L- p. j# ]+ t% `' _! G; R; I
  732.               dlg->m_ListText.AddString(szString);4 [! m4 R* I, _/ d- X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ^+ I% @4 g1 J
  734.               *szString=0;' J/ v6 h4 ]  Y7 l) n. w
  735.             }
    + T& w& W4 z6 l" i
  736.           } while(iEOF!=EOF);
    $ z+ W; h8 y. Z  I
  737.           fclose(fp);
    8 x" H/ V+ w% S! ]( g
  738.           unlink(".\\DownLoad\\readme.txt");5 c$ q6 ?7 p  Q# v9 B% U
  739.           dwStartUpSteps=3;( ^/ M( Z9 `5 L# B+ t# c
  740.         }( h& [: o8 w# j
  741.       }
    " ^4 M- y- }0 z3 g: n0 C  g' H
  742.       break;9 D6 K+ H4 L5 d: z% v! ]
  743.     case 3:
    + g9 p( `9 m) N, n3 @7 q
  744.       if(!Dn.Connected()): V0 M4 S+ T8 I! G0 a( S) g* c
  745.       {0 {& _+ h7 Z8 N$ H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);( k$ H7 W* ]2 G3 ~( ^) s
  747.         dwTotalFiles=1;  P1 b7 t# N. S
  748.         dwDownLoaded=0;
    $ j9 M' K1 n7 {0 x$ e
  749.         bSilentStep=TRUE;
    - |$ l8 }* M8 x' I  E! Q
  750.         bCompressed=FALSE;5 b. U( i. L4 y6 {) R/ k
  751.         strExtLocal.Empty();, I& P* C- q, \' C
  752.         strFullName="checkversion.txt";
    " F* r! H2 y2 p  C" ?* x" P
  753.         dwProgramState=AP_CONNECT;+ g/ `2 Y: W. d! ]# Q
  754.       }7 ~! k/ b( {+ X2 O# O7 m
  755.       dwStartUpSteps=4;
    : }# ?( d5 a* ?6 u; }+ l5 G
  756.       break;
    5 ]/ s0 i1 z+ V: U0 ~
  757.     case 4:
    6 I1 @# {( ~1 O. T) Q
  758.       {5 ^8 d$ |. @8 F+ Y# U2 |" F
  759.         FILE *fp;
    , J; W% b- U: [& G, G
  760.         char szString1[128];! n' B8 C1 K8 Y% W& i2 z' L# l& D
  761.         char szString2[128];8 R' A% P  S$ C8 o4 {- t  K
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 `2 X7 |7 G0 t$ U3 _! a7 h4 n
  763.         if(fp)4 _' U- N  v  ]
  764.         {* Z8 j; K. w. C& \
  765.           fscanf(fp,"%s",szString1);! x; I2 Y5 I9 E: ?0 P) ]4 Q
  766.           fclose(fp);/ d: A  G7 H* n/ F
  767.           fCheckVersion=atof(szString1);
    4 ^1 N; |7 K( ]2 e' |2 K! G  l
  768.           fp=fopen(".\\checkversion.dat","r");
    . j3 ?3 o. ^( w3 b; {' F
  769.           if(fp)
    * D4 w9 [4 a% _8 w$ F0 y3 H
  770.           {, T4 M9 e; D5 p3 B. m
  771.             fscanf(fp,"%s",szString2);+ i4 ~0 ^5 ^7 a3 Y! A9 Q; p0 P5 m8 J. `
  772.             fclose(fp);
    ' p; K6 K: T5 V
  773.             if(atof(szString1)!=atof(szString2))
    ! @% J+ @* O2 O
  774.             {6 n: B3 S6 c5 U* i
  775.               if(!Dn.Connected())- n6 t% [& B( b' c
  776.               {
    5 P# `9 X4 [7 M" G
  777.                 bFirstUpdate=TRUE;  G/ U# t, K$ P% K
  778.                 dwTotalFiles=1;6 I( }- d/ U( t! s- l8 B
  779.                 dwDownLoaded=0;' ]0 E: O5 q" L
  780.                 bSilentStep=FALSE;6 a7 P$ Z* O) D
  781.                 bCompressed=TRUE;
    / d1 M/ p5 {, H- i2 a) j
  782.                 strExtLocal=".\\DownLoad\";
    ( G4 ?) d$ _( C9 W9 D9 `  G8 @
  783.                 strFullName="update.txt";
    * f; i: ]4 F3 V& {
  784.                 dwProgramState=AP_CONNECT;( Q1 q0 A7 H% {
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");8 j" z. T/ N1 X) y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 G" `: r8 ?8 X$ O) b* z" l/ N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 I  M9 ]4 ?( d& D/ {

  788. 3 l& u' B6 N2 J3 d' p& c* R4 B; _
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 I1 F) ?( K1 w1 l+ R
  790.                 unlink(".\\DownLoad\\checkversion.txt");) M" D3 y: R0 z
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 |) Q$ q/ I& U' p
  792.                 {
    3 B7 O* ~/ c; r/ v$ b' F
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");6 \' W1 D  N5 {3 O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * K( I2 O$ L) R1 q# }' Y) q5 q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 E1 ^8 v' _+ j! k$ R. l* ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. m9 N1 G: L" v5 }& b5 E

  797. - x# [; P: E3 Y& k
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + x: c9 n- E3 |
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");% J/ R3 d; Y7 F. G- H' Y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + e: [$ R* C& u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & y5 |  Q; w. a: x( l& E
  802.                 }& U' C# |/ x+ e: `; J# a5 W
  803.                 dwStartUpSteps=5;
    4 Y# }, \  T3 I! ?6 O
  804.               }
    $ P  B! S. x+ N1 g
  805.             }- f2 O$ m5 b0 o: x: i7 g
  806.             else
    - a$ f8 n4 y/ E% L( @* i
  807.             {
    1 q% u+ D1 W+ p+ b- M
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % u; @3 ]6 Z- N
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ ~$ Y+ t% y, q, k
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + U% D. ^, e* b5 T$ a4 H! X- G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    5 t6 d% v7 `9 k  p
  812. 2 Y+ h' e6 C3 u. y. h, q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Y! q3 l/ l  C' d/ e. Z
  814.               dwStartUpSteps=99;
    0 d9 F3 M3 V* L) w4 x
  815.               bFinishUpdated=TRUE;) z1 k$ N* a. b4 s' l/ w, b) ]
  816.               bCanUpdate=TRUE;
    - J  F  g0 A" a
  817.             }
    3 S5 ^* u, p2 R0 Y6 C+ `! p7 m
  818.           }5 H* U1 m$ d7 M) R9 g
  819.           else  F$ q# I0 r5 l1 M) f0 c- R
  820.           {" L$ n  D8 g: p- U1 g- x  i3 C
  821.             if(!Dn.Connected())
    * m# H6 _, t4 H
  822.             {
    " `+ ]: |$ I0 m6 K  _3 X' i% n1 X
  823.               bFirstUpdate=TRUE;1 t$ G( O6 x' h5 ~! c6 [1 q0 g
  824.               dwTotalFiles=1;, `, X; i/ k+ I5 m
  825.               dwDownLoaded=0;
    / v1 e% r* A6 J0 u
  826.               bSilentStep=FALSE;
    7 E8 ~7 V( u. _+ o4 p! Q
  827.               bCompressed=TRUE;
    * E1 ^& e1 p9 W  E% ]
  828.               strExtLocal=".\\DownLoad\";( l2 F, E2 Z% e' H2 U
  829.               strFullName="update.txt";
    7 K& R; m" Z1 a0 M. U$ W
  830.               dwProgramState=AP_CONNECT;: N* s+ Y2 b8 ?- O: C8 f! h! s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 S" b  Z, r; E% `" F. ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, n  n5 y6 A7 I) f( \
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ F8 I4 X# G: i
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' g+ H( F3 k$ i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 X8 S  Z1 J3 s4 Z$ f3 F, D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- W0 ]  j5 m' W2 Y; t
  837.               {  b7 D* \& G+ [. e2 o
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 B# X  F2 V, R- B0 C
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 t( R( E: s9 C- z! A% w
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% ~2 R5 r( [( ^/ \2 l
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' H2 z7 F  z- m8 L" q$ E
  842.                
    0 R, i8 o2 f- Y# ]4 L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  g9 T' B! ?, g$ w6 Z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      @& Y6 P( @3 D* I* Y1 `1 u9 [: }
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - f  z* N$ m  z; p
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% c4 d! x! ^' X+ D/ `! }& c3 Q
  847.               }) @; N( k$ y+ I5 \. G: h8 a
  848.               dwStartUpSteps=5;' r! _  S/ e6 C2 J2 s) J. h
  849.             }1 g- U, @+ `; l- P' ~
  850.           }6 O# v' k4 f" X+ w# C
  851.         }* o0 V% ^9 N2 p; i" H. ?0 l
  852.         else
    ' Z# R% C8 }9 v1 W$ n3 h0 X
  853.         {
    : `  A4 H( C; C3 j3 S+ b: @- t# d6 x
  854.           dwStartUpSteps=3;
    , _: y6 A4 j" H* P- `
  855.         }
    . O% a% _1 s) W" P# Z1 E% f" _5 J% W
  856.       }
    4 W, F$ n9 e2 N
  857.       break;; e# G+ [6 @5 q# O
  858.     case 5:& m8 J8 [$ c  ?  x
  859.       {
    ; y4 m/ L5 _4 t) t7 k
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) K  Y, a, C+ O( x/ }  h: |
  861.         {
    0 B- L( i1 O6 i: e: }( R+ f
  862.           int opt_overwrite=1;
    : ]- `& }1 }- t- L2 y6 d: J
  863.           int opt_do_extract_withoutpath=0;
    5 A7 ?' C* j6 h6 M3 B
  864.           unzFile uf=NULL;- ?/ D7 b$ C! {  k. V

  865. & ^& [4 ?! y0 }
  866.           uf=unzOpen("Wsa.zip");
    . E5 d4 J! C8 B: C3 B
  867.           if(uf)( c  C) s0 `" m
  868.           {. I0 _6 g4 U1 h" Y  S8 D' U8 P
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);7 D' {+ G9 _: e- n
  870.             unzClose(uf);
    : I: y! \/ h& m3 D5 w- N
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    2 y% {; b5 ]' O; N' f  f9 Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 V: n9 z. d' ?5 {/ E: Y
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    : T8 A2 r' g& a  \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 b0 w! i+ n) x/ i0 O
  875.           }
    2 d& [% N% G  _/ V% }
  876.           DeleteFile("Wsa.zip" );
    # O2 ~* @6 ]/ b( g9 T6 P
  877.         }# p2 O- ?5 `' G# L

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

! I  Q1 o7 y$ T" m! q; x# t1 x

評分

參與人數 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-3 02:39

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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