找回密碼
 立即注册

CSUpdate.exe源代码

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

1 d! ]& m2 {8 F
  1. / RevApp.cpp : Defines the class behaviors for the application.  O7 T$ Z) o7 ^0 ?' y: e9 e" I
  2. //# Y) z* ]$ l9 F

  3. ( b! K9 [: y$ K' d! W* K* H
  4. #include "stdafx.h"
    ( C% c8 J- ]4 y

  5. 0 C; G$ K1 @# I, H
  6. //#define UNICODE/ w5 F) j* l) k. \
  7. //#include <gdiplus.h>
    & L. s& k; ^2 m8 B
  8. //using namespace Gdiplus;2 Y6 [4 K# v& U% X/ e" r
  9. : o" B- Z+ s+ d& Q+ p; q' b
  10. #include "RevApp.h"# |1 T: p) E( Q+ i
  11. #include "RevAppDlg.h"
    2 k2 O! b, X7 R' P5 [8 y, N

  12. ) u( ^6 Z# R& ?5 c. x3 Z2 F
  13. #pragma warning(disable:4786)' F" c9 V. N3 V8 X
  14. #include <map>
    1 A( [7 G) o  y+ d7 S% S' y
  15. #include <list>
    % D# o% M: m7 c% e, e7 `
  16. #include <direct.h>
    / s( V" C$ _" v2 |( @: B) \: E$ `
  17. : D: ]  f: _/ ~1 M
  18. #ifdef _DEBUG
    0 M, L% s, l. v' z
  19. #define new DEBUG_NEW
    + B( E- b& O3 B( w, ?9 p
  20. #undef THIS_FILE
    9 c# k8 K2 O1 g
  21. static char THIS_FILE[] = __FILE__;/ x. U- }: ]; u8 ?1 J
  22. #endif
    # O: C% E! q3 q& m4 {
  23. #include "SkinResDef.h"
    ' A4 B5 p/ A$ _5 W; X% d4 }
  24. #include "ChangeBG.h"( H9 C3 N( ^8 J7 A" i/ l9 x
  25. #include "AFXINET.H"1 ?# [" q, K# O7 |
  26. 6 `; L0 w! i: D' X& K! ^7 y) I
  27. #define TRADITIONAL_CHINESE 00 V9 K2 O" ~7 ^7 l  Q
  28. #define SIMPLIFY_CHINESE 1
    7 Y" v+ K/ o6 z2 X8 m2 s$ `- T
  29. #define ENGLISH 2
    " k7 ]; \) w3 E: v7 D# [
  30. int m_iLanguage = ENGLISH;
    / X! g7 `& Q5 b; Q$ j# _
  31. /////////////////////////////////////////////////////////////////////////////: Y+ o9 r- H, g# q& ?, K
  32. // CRevAppApp
    . Z0 r' _3 F/ ^
  33. # E: P3 a/ J6 |: R% F4 y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)2 ~( w( l9 I; k; Y: @5 _1 j
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 ~- g( v) w3 d) g( G7 u0 _7 s
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.2 q$ X! \/ V0 c" m* F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % O1 l5 y$ {+ v/ w; N
  38.         //}}AFX_MSG
    + I- ?8 ~& Q. f0 [6 x/ `  q' V
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    & T2 u! T" ^  g- e
  40. END_MESSAGE_MAP()
    1 e; {. P4 E, P# C: f) D, Q6 H9 O

  41. . l4 ^; U( X; p! {, l4 q
  42. /////////////////////////////////////////////////////////////////////////////; Z, m8 w0 h0 k& p  i
  43. // CRevAppApp construction6 L1 w1 A& M$ K0 R8 i; b
  44. / w9 S! G3 O6 i# {3 H
  45. CRevAppApp::CRevAppApp()
    ; z& D' t7 u7 b
  46. {
    1 e: w. n; ?  |6 c
  47.         // TODO: add construction code here,
      k) \5 U5 o7 r) ^6 S0 }
  48.         // Place all significant initialization in InitInstance
    ! v) _" N' j7 x* ^
  49.   bDisplayIsBig5=FALSE;
    % k- _$ W6 r' G2 k* X
  50.   bRestartUpdater=FALSE;, Q/ B# n# N$ G+ K' m
  51.   bFinishUpdated=FALSE;1 W$ `& n3 A# G7 _% k3 P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 v2 ^, ^& ?& P, q. d: r4 A
  53.   InitChangeDataBig52GBKS();2 `& d! I" c# \  ~' k6 q3 v
  54.   InitChangeDataGBKS2Big5();
    & D5 z) l" b# y+ p$ J, X
  55.         //% Q( c% c  w9 a) S3 o9 h- m
  56.         bClickRunExe = FALSE;
    * |# m. F6 z' h: s2 b7 i5 x0 A0 n) N
  57.         //
    . x# S4 R3 M9 w/ H9 E+ [1 K1 {8 l
  58. }( k- _! X3 _: R- M  T. C! ]. _; R
  59. 1 b3 d7 {% w; _1 h* p, P
  60. CRevAppApp::~CRevAppApp()! T6 |: |0 y' Z9 l
  61. {+ Z: t  y) {  R" i: P
  62.         // TODO: add construction code here,3 m$ ]8 j9 V6 g% K' H! B
  63.         // Place all significant initialization in InitInstance$ D# \- z8 N2 o7 Z2 T
  64.   EndChangeData();8 S9 W* P4 [+ k9 N. Y) i6 L
  65. }; U2 w* v0 a9 H
  66. 7 z% I: b" W& o7 I1 j$ n8 f
  67. /////////////////////////////////////////////////////////////////////////////& O# ]  Q0 r* f
  68. // The one and only CRevAppApp object
    ; a# l1 j; R5 R5 n

  69. . G; V& e0 G. R  \9 ~, a' R" r0 v
  70. CRevAppApp theApp;7 w. x' v: d! O  u/ Z
  71. * u+ @/ Z* q! ]
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    7 q$ U8 [0 z, _; }6 B9 B0 D5 }
  73. {
    ; z$ G1 T" x) A" K* J0 @
  74.   int iEOF=0;5 y# ]0 l" @0 B- w2 H0 r
  75.   char szTempName[MAX_PATH];$ \! y9 F) w+ |+ S4 [# B/ w! M
  76.   *szFileName=0;
    % J/ D2 Y; w. L5 I4 r! D" W
  77.   iEOF=fscanf(fp,"%s",szTempName);8 N/ ^3 t* E% n/ _5 z. e8 W: i
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')( C2 Z2 I3 i1 A9 G2 q8 q+ m5 l
  79.   {
    4 W" w+ A7 r+ d7 Q# F
  80.     strcpy(szFileName,&szTempName[1]);. `4 H/ }3 V* h0 i+ z. z/ Z& B( S
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)+ G. `1 r4 [2 n/ c- x" i
  82.     {! C# t: H0 T2 G) x
  83.       iEOF=fscanf(fp,"%s",szTempName);. x7 n" Y( k' F9 ?2 `7 Z: k
  84.       strcat(szFileName," ");
    , [: }. X( O4 c; B
  85.       strcat(szFileName,szTempName);
    ( k. q2 R- K7 }1 k- U
  86.     }# V( v1 q' T" f: Y1 V/ }
  87.     if(strlen(szFileName)>=1)
    9 F  Y. F- Y+ D1 _9 n' m( J. w
  88.     {
    ! j% E- }! A! n. c
  89.       szFileName[strlen(szFileName)-1]=0;. D8 L9 I9 T% j! c1 t& o
  90.     }
    0 B) ^. U: p" C* ?7 c# ^# S
  91.   }
    ! C) R7 R9 q7 F5 @
  92.   return szFileName;; w$ o7 }- f7 [6 R7 F
  93. }
    3 m( D7 V( Y( f0 G, V

  94. " C3 D; T: X2 w
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ T( R$ O* c5 f' L& s" G
  96. {3 l- p' f- T2 ?9 O/ D1 Q$ D
  97.   FILE *fp;" ~9 Z6 @/ ~* u9 v, I
  98.   char *key=NULL;
    , Z8 D/ C" v. V  y0 F. d
  99.   char version[MAX_PATH];2 n# k7 u! q8 J3 Z
  100.   LPUPDATEFILE file,olds;
    % r) ]. b1 m% \2 c7 q* u
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! x% Q4 U7 a& C2 L
  102. 4 }; A7 a, V; ]$ i4 B
  103.   UpdateList.clear();; n( d4 s& E! l
  104.   UpdateFile.clear();  c- t" h+ Q  R* n) E8 k, Q
  105.   if(GetFileAttributes(filename)==-1) return false;7 Z8 ?- ?  E& k
  106.   if(!(fp=fopen(filename,"r"))) return false;  F5 O$ @1 Q* ?/ a/ K
  107.   fscanf(fp,"%s",version);
    $ P6 q) i0 R( L. x+ i8 O, ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 @) Z. W* O; [+ w6 m
  109.   while(fscanf(fp,"%s",version)!=EOF)2 m! C$ ^- U- [8 L$ w# @/ \% L7 c
  110.   {
    6 m# {- j' x8 q4 O1 ?0 a
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  Z0 u- c) z. T$ {
  112.     fscanf(fp,"%s",file->path);# p5 d9 S& o3 l$ w  \
  113.     ReadFileNames(fp,file->file);
    - a: a& Z1 u7 b  {
  114.     strcpy(file->full,".");
    + ?! ?  D5 @2 w  m0 ^  ?. u
  115.     strcat(file->full,file->path);
    ; J2 Z, y: p( \  F* ^! M+ g) J$ K
  116.     strcat(file->full,file->file);1 i' C7 i% l# u! p$ h
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# ^. ]! y1 M- C3 m
  118.     {" g) ?* r, `* N& |
  119.       file->vers=(float)atof(version);
    : v, p; u+ b# U& W+ D7 Y0 t& ^
  120.       UpdateList.push_back(file->full);
    2 I& Z  L: y' l4 }. p+ S
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    5 N: v4 E) m0 }% V" z  l6 L
  122.     }
    / ^% }! C7 R0 |0 p; M1 C* Q2 L
  123.     else
    : ]( E$ y0 L( G% l" C
  124.     {
    ; a6 e3 e0 o& s- o( x+ y; f+ N
  125.       olds=(*p).second;. ~6 L" T% J1 ^3 W( y
  126.       if(olds->vers<(float)atof(version))
    8 J& |1 O! J" v' b1 m+ _
  127.       {
    4 V9 i/ g0 _- K9 o# t, p
  128.         olds->vers=(float)atof(version);$ m2 g& F( t: A$ K
  129.       }, D! H6 I3 G7 j$ q2 s! f! f% x
  130.       free(file);2 U1 |' }! ^5 c8 i
  131.     }0 Y- h4 x" a0 }( K6 W& T% ~
  132.   }
    0 S* J! D( P/ W% U3 [/ I* W
  133.   fclose(fp);
    % n$ L% k! F7 B  i& D3 p
  134.   return true;
    ; t& T+ B5 T# S, T4 V( R+ I3 t% ]
  135. }* ~0 ?1 x  c5 U8 @, Q0 I: T
  136. ( `  [9 C# o+ L0 o) Q& g9 G) Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , C- R- \+ o0 s- H
  138. {
    ; p4 [& w  H/ X1 H, Z0 ~0 T: h
  139.   TCHAR  szFull[MAX_PATH];
    : @! m. u& H) o) [
  140.   TCHAR *token,*inter;1 g0 Q1 K& O; C& O' a
  141.   *szPath=0;8 \% r( p0 Z# L1 A9 M. p& q
  142.   strcpy(szFull,szFullPath);
    . h9 X0 _+ [0 p& A
  143.   token=strtok(szFull,"\\/");6 R( X* T' G% @
  144.   inter=token;, B5 |, R; t. B9 w
  145.   while(token=strtok(NULL,"\\/"))
    6 Z8 `6 O. t, O. l. M7 z
  146.   {0 X8 d# W2 ]( Y& I. n: O6 s2 Q
  147.     strcat(szPath,inter);
    ' g1 c3 Y* E3 {9 x
  148.     strcat(szPath,"\");
    + y# Q; v7 Y) m- ^' I+ Q# n3 X
  149.     inter=token;
    $ W- D; e, r& G! B
  150.   }6 z( R: j9 U# f, W2 \
  151.   return strlen(szPath);' E$ }# U* t- E
  152. }
    4 ?( a) d! V2 u. u2 @1 A
  153. ; X, z( j3 R+ d2 g& d8 E, j0 }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)/ A/ Z, v+ d) n7 I
  155. {$ U  ~8 o3 p5 m( w: L4 `3 X$ I9 f
  156.   DWORD attrib=GetFileAttributes(Target);
    8 B8 r, l  D3 b# w7 z2 [2 ^5 n7 `9 m
  157.   if(attrib!=-1)" ]. w" ~9 N- X
  158.   {* H" E) M+ a+ I, r4 n1 r! ]$ t7 a% c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 o9 E9 C7 X- t: S9 G5 X/ |1 x
  160.     {
    ; z0 a) x! z6 R/ w) i9 D, L3 ^' T* l; j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 o" R/ v9 w* l, @
  162.       SetFileAttributes(Target,attrib);$ ?$ o9 u. `  C2 ?0 c0 C' ~3 z3 W
  163.     }+ _( n9 F( D' i( P, c
  164.   }
    6 E  m# v" [; B4 o( Q+ p  S
  165.   CopyFile(Source,Target,Erase);* d0 f+ O% Q; W. x6 D) M
  166. }( Z( e1 I* M& h
  167. & ]/ C( Y4 x4 g( U1 [. J( N
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ [  _7 s- z! B  v4 V4 z6 |4 J
  169. {9 ]7 M3 U' ~" X/ T: s7 @' I
  170.      FILE *fp;+ f) o8 F6 c4 ~6 l- q0 H- |
  171.      char  szBuffer[8192];* V' [: d# ?- p+ n
  172.   va_list  argptr;
    ; q. L4 L  s; Q! F* I
  173. " M5 _, B& k0 R4 C% R, P% E! l
  174.         va_start(argptr,message);1 }( V! {3 u/ Y$ Z
  175.         vsprintf(szBuffer,message,argptr);
    / _" q* F) a6 p! [$ m
  176.         va_end(argptr);, r+ q' Y6 y( \# C( o
  177.   fp=fopen(FileName,"a");
    ! h* [+ T& F& d: m9 T" c0 o. P; o0 Z7 g
  178.   if(fp)
    3 s  c2 S6 P, P* X& c- t
  179.   {
    8 Q; |9 r$ w9 V7 q* Y$ _5 d
  180.     fprintf(fp,szBuffer);
    ) Y# ^9 v3 n4 t- f8 X1 I& a
  181.     fclose(fp);
    : @. n  f$ X* K6 C/ J) e5 T
  182.           _flushall();" Y" M3 T% f1 T
  183.   }
    4 t4 c1 D2 ~3 U" r, n. y& D- s
  184. }3 k  I* P6 N4 g1 O! _# S
  185. ! G. O" I0 n7 _4 h
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ c8 I  O3 F- _9 [. s! E* f' D
  187. {
    8 E$ h  B; @. l7 t% f* r
  188.      FILE *fp;
    1 K1 c, V7 z4 h& H; P
  189.     DWORD  attrib;
    + I8 i# O6 e! F$ Z
  190.   attrib=GetFileAttributes(FileName);, j% _2 p. F, L
  191.   if(attrib!=-1)
    2 S# ?5 N/ R! j# I- C2 C- T! f
  192.   {
    0 n( b. T, O5 i6 b2 Q9 v4 N1 q' ^
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ K5 Z/ P+ ]7 m  F/ Y
  194.     if(!SetFileAttributes(FileName,attrib))
    7 Q3 b5 J9 O1 K$ |( N& P6 Y
  195.     {; N' ^+ a9 @3 O) W7 v
  196.       return FALSE;
    ( u9 d' [. `) F  U
  197.     }2 i# p0 L+ w) i+ h' C1 c
  198.   }
    : ?9 ?5 c! G9 H1 A8 M
  199.   fp=fopen(FileName,"wb");
    4 M. U+ o5 O2 c: c! s' b
  200.   if(fp)$ n1 c) U8 g2 Q7 L' Y7 S6 F8 d! E  i
  201.   {
    0 f% `2 ?- ]1 ?& g( I" E& ~- \
  202.     fclose(fp);+ x8 i' t, ^" [. H' t
  203.   }
    & Y- K% F0 W6 C
  204.   return TRUE;+ C, _8 n5 B& Y2 |0 o. {( r" H* T
  205. }' J" j0 t9 ~* Y% Y* N& e5 b
  206.   r4 T" Q8 b, K( Z8 I2 A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    / Y6 S  G) U1 X* z9 m* Y/ k
  208. {
    0 T' z! c7 x: J  k. h
  209.   char filename[MAX_PATH];! \7 k  Y+ o/ M+ @
  210.   LPUPDATEFILE file,olds;
    ; U# L, Z2 M8 T' y5 [
  211.   std::map<int,CString>::iterator i;5 t- [5 s9 w5 e% {6 Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' S; a3 E7 G9 r$ |' ?
  213.   std::list<CString>::iterator l;1 a" Y, L: v% }' P  X
  214. # X$ R* O& D( x' U
  215.   if(bFirstUpdate)
    * W2 G. ~  g1 F4 Z3 u5 C/ E9 K
  216.   {  t) K/ f" G& ?- G# _- U* p  x
  217.     dwCurrFile=0;3 i  V& L( X  H3 _$ _
  218.     bFirstUpdate=FALSE;
    ' g- n/ H% b7 \3 x& ~9 V3 T/ u0 O
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( h; v: r4 p7 E' D. p9 n8 T
  220.     {$ J2 d) f) b0 _* q) |1 T
  221.       dwTotalFiles=UpdateLocal.size();3 U. l3 U" H6 n
  222.       dwDownLoaded=0;
    7 {+ B1 J. n8 O
  223.       bSilentStep=FALSE;5 }" S  j* A9 |% N' [6 \! M5 i
  224.       bCompressed=TRUE;, _, w% y/ i& a4 p/ f
  225.       strExtLocal.Empty();  ?, w9 j/ m: M& {$ [; q9 W
  226.       strFullName=(*i).second;6 M8 ^% I2 ^- j) t( S+ O* ?
  227.       dwProgramState=AP_CONNECT;# j8 X' C% ~! u- g% @
  228.       return TRUE;8 t+ _( f, ?% B; o* P$ l
  229.     }7 A' Y  L& U% T2 t, E- u( G
  230.   }
    4 ~3 R7 {8 A' a; U
  231.   else if(bRestartUpdater==FALSE)/ b) \2 q- T8 {9 d; J
  232.   {9 o$ W/ n; F) u; F, p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % y4 _; b0 p% f* L
  234.     {
    % z* y8 a5 ]8 B$ d% h6 G5 [
  235.       file=(*p).second;0 F: |2 R* U7 i+ J- R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& f4 Y0 {2 o* e
  237.       {
    0 H; E, |5 T. R% B$ K
  238.         olds=(*p).second;, e1 {& _9 _1 y+ O; n1 A
  239.         olds->vers=file->vers;6 Y8 E" T# R1 V: M; _: b4 A1 ?5 ]
  240.       }+ [; D6 W. A0 b3 e9 L
  241.       else
    ; r- _) s* T2 h* G( s  w& W) q
  242.       {
    1 z5 ^# j. m. T4 z" d! U1 g* ^
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 o+ q0 h6 i  x. H: S  j2 y; {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    5 B  I' [3 y% ?, i
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    - S3 Y" W, T- M: n+ L+ j
  246.       }+ g, r( P1 A: f! {& `
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & s6 h, l/ W" Y( _8 ?# \" z
  248.       sprintf(filename,"(%s)",file->file);2 m, f( V. ?% _' @! L4 y1 ?
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& y  r3 U/ y6 Z  x' n1 D
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: v, E- W% d+ K  X8 p
  251.     }
    0 p+ [) z# q( K3 [6 X# D4 L1 Z
  252.     dwCurrFile++;
    # ~( K6 e1 H. _8 m5 S0 K
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' q; [6 M% P- E$ _* Q8 n% u
  254.     {
    % c) J2 r$ j; }$ A0 `+ c
  255.       bSilentStep=FALSE;  |* `& l- L) n/ X7 G
  256.       bCompressed=TRUE;
    0 }7 N7 D9 w$ r) [. F: l
  257.       strExtLocal.Empty();% g4 ^" @% \0 L$ R3 `- o( }3 ]
  258.       strFullName=(*i).second;' {+ h% ^) h: o) h5 d5 E8 P  c: d
  259.       dwProgramState=AP_CONNECT;* g5 g8 n3 T2 _+ S$ Z% j4 x
  260.       return TRUE;& f* H' ?- t' m$ H, j' Y1 |; z. p
  261.     }2 _# l# o' F8 n, T
  262.     if(!bRestartUpdater)+ s: C& i+ j; w- F
  263.     {$ U; P3 y) ]; C  y2 s  P
  264.       int iCurrSize,iFileSize;
    # c6 x6 t& c) c) D/ p" X
  265.       iCurrSize=0;- C/ \, B: c6 B0 k4 \
  266.       iFileSize=UpdateList2.size();( U. {% |7 O* N# y4 n; s
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / |3 J8 X/ u3 }  B. K- ~
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  F! T6 m  w& G; v( I! D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ T! k3 Q8 O: l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 c0 r* ]% o2 i, d8 f6 `+ F
  271.       Fclearf(".\\update.dat");
    - `1 H5 I' D' s9 X9 @. I$ {
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; @! K& B+ b; v5 Z( D& E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)  c) u5 U& O  G" Q  z  R, G
  274.       {1 s$ M1 q" ?5 s4 B& g/ P6 {; {8 A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& ]/ M- W4 _  F) m. s
  276.         {$ v$ _& i" ^) j. {# }2 `
  277.           file=(*p).second;
    8 S+ b# v& C  N9 N% v/ y, M
  278.           sprintf(filename,"(%s)",file->file);7 q  l3 w. k  A  j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! `- O; v- {& p8 q, E! M
  280.           iCurrSize++;  w+ U" `( N- r2 {9 y' L4 O( Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; d; a, S: J) q1 M& G( o
  282.         }
    6 g6 M7 Q0 Y  Z) i; S( \
  283.       }
    0 C2 {( Y  K, t, D
  284.       unlink(".\\update.txt");4 `4 @, V% i5 f7 Q$ L" ?" N  D
  285.       unlink(".\\update.tmp");
    ( O3 p6 B! s1 _6 P4 V" A% H! X
  286.       Fclearf(".\\checkversion.dat");1 L. q2 a" V% d- |0 Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    , o9 H2 K3 e3 ^
  288.       if(UpdateLocal.size()). ^0 L+ t% U1 F
  289.       {
    " ]9 F+ k' h: @0 m$ ?
  290.         UpdateLocal.clear();
    : Z+ z/ I7 d" b6 Q
  291.       }
    5 I* D! W0 R. f& e$ r7 J
  292.       if(UpdateFile3.size())6 H9 I( E/ _3 T$ T: r
  293.       {) V: m- m+ m0 \# l+ P' z# x: s
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; B1 [; V5 d6 K* e5 q3 R& V
  295.         {% B' N8 L& I* y! o" c! Q
  296.           file=(*p).second;4 N) W( O6 o* {6 l& h. o1 p8 K* H  c
  297.           free(file);; s& e  \, x" l% f0 `6 `) j) [9 _
  298.         }
    ) h9 j5 T" Z, g
  299.         UpdateFile3.clear();
    ( m: b! L1 w$ ?6 N6 {! s
  300.         UpdateList3.clear();6 D$ b4 }+ E3 @
  301.       }
    " O8 _# k' u. I8 v
  302.       if(UpdateFile2.size())
    $ d9 P2 l0 s- f) ?4 Y/ ~5 g4 h
  303.       {
    & d* R1 O6 W* l% B& h/ a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 O, L" a2 ]( v1 [. @8 l9 L; X4 R
  305.         {& W5 i- \* I4 s+ t
  306.           file=(*p).second;' F+ G3 \) Z4 s& z' n
  307.           free(file);4 U1 O: H1 [* B4 D' ?* T
  308.         }
    & R4 u) ]( h! F3 _% j1 i+ P6 ]* h
  309.         UpdateFile2.clear();) J8 _1 t, [# b( R; B. u( O
  310.         UpdateList2.clear();
    1 C& W. C9 e. ?5 G/ l$ ?5 g
  311.       }
    4 o4 G* ?/ B; C; T( z
  312.       if(UpdateFile1.size())
    1 I, `, h6 u$ }2 P0 U# B* ~5 r
  313.       {/ z* E+ [, b9 x$ z0 i9 {# T% o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( w' x( o. I/ \: |* V/ o
  315.         {
    % i0 M! k0 q) r9 o, C
  316.           file=(*p).second;
    9 l% [* a; }. z% I1 B) X1 I9 D) x
  317.           free(file);( S# ]' x: h' e& T) s0 z5 @
  318.         }9 y( z- C8 T2 S+ ?
  319.         UpdateFile1.clear();
    ! n& q$ y: `9 m1 [- l4 a1 J4 t
  320.         UpdateList1.clear();
    ' b5 k& e/ k8 d8 g! [# Y
  321.       }. Q% P; B9 S! A) S1 M6 a; I1 n
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" W8 m; p: e; S0 j- ^3 x
  323.     }
    0 N! O6 j0 H5 Z
  324.   }
    + H# |+ W. G3 `( b# [9 d
  325.   return FALSE;
    * I0 C7 q) s. J7 }( \( j/ N
  326. }
    6 f. }6 y( k! \# k( n7 o( [) Z
  327. ) n$ E- r, _7 j1 d; L, G0 p
  328. void CRevAppApp::ClearAll(void)
    5 L1 }% n% S5 |2 k( n8 {' u
  329. {
    0 S. s0 `0 ?% p5 E: m& r* |  O
  330.   LPUPDATEFILE file;
    5 C7 S1 r5 Z- |8 `( e
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 `: g6 Q2 @2 B. W7 I

  332.   \& K# }. W, r) N# o/ u
  333.   if(UpdateLocal.size())( q( X9 E% q* E8 W5 v+ [* w; i
  334.   {
    ' m+ t7 F# j# j
  335.     UpdateLocal.clear();8 a' ?( d1 {1 Q* T) ]+ [* h& g
  336.   }
    6 O2 q; [$ c4 X3 H. o# A& h( X/ m3 x
  337.   if(UpdateFile3.size())
      m8 V3 d+ Z) A$ E- X- ?) J6 C
  338.   {
    0 l2 Z+ V6 R/ e4 @
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % n$ C& Q; G$ w& g
  340.     {
    5 S/ ^- m, L: z1 L0 e7 `
  341.       file=(*p).second;$ f* [$ ?7 h) [" f8 T3 A0 K8 L
  342.       free(file);% h( O, f3 i& C
  343.     }" v" a/ C, \- T5 x1 F, T
  344.     UpdateFile3.clear();
    ; u8 [9 P- X+ M# Z( S% Q
  345.     UpdateList3.clear();
    1 z: |2 g1 m+ |
  346.   }
    ) q/ z7 T+ Y" q4 ]' i  t
  347.   if(UpdateFile2.size())6 Y4 n9 e$ B2 X# h/ f
  348.   {
    , b9 A& X) P4 b1 T3 I8 U
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' A& C" n9 R% o
  350.     {
    ! l9 d' h5 D; g) b- Q2 P
  351.       file=(*p).second;
    ' C! p0 G5 Z& V# m4 [
  352.       free(file);7 x* Q. R$ S' h/ @
  353.     }
    & E# e; r7 r8 w: {
  354.     UpdateFile2.clear();
    ( h+ S5 y4 s7 I$ D6 {
  355.     UpdateList2.clear();
    / z0 E( j, x* W$ v& X! p
  356.   }
    - w- Q3 }) T+ U& h
  357.   if(UpdateFile1.size())
    & [7 i# g+ D9 s, v
  358.   {
      B3 V" K1 p' h6 d0 Y$ n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% n) m' H- ~- G* o1 \' u, i( v
  360.     {4 h* |& T5 S1 Q  v( Q( P
  361.       file=(*p).second;; J/ G  w# X: q- u0 s  p( C
  362.       free(file);
    % j0 y5 R4 ~0 Q& h* v" d
  363.     }- \' i  S: G- g8 d
  364.     UpdateFile1.clear();
    2 I+ _9 m8 i  {' @7 d2 G( j
  365.     UpdateList1.clear();
    . z" w, _$ B% ^6 t+ k6 p$ G
  366.   }3 ~+ A8 ]% A3 F# v3 n4 C( }- g# w
  367. }  ' K; V( l% w  o$ v0 E( \9 N8 |
  368.   6 C- t. G- R7 ]' A, g1 P, J
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 ~* W  v8 b/ ^1 K3 g) P3 V
  370. {5 T9 L9 x7 {/ h9 v6 a% L5 w' L$ j3 x) I
  371.   int c;
    $ a/ f$ R) Z7 G7 U9 u
  372.   LPUPDATEFILE file1,file2;) C% R8 V  L" d) X& v1 h* ]
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : |2 h9 {; I  k/ Z  O4 i
  374.   std::list<CString>::iterator l;5 B) u. G1 I. _- p5 ^
  375. 6 W% T) B, q1 g
  376.   UpdateLocal.clear();
    : a" L( ]$ o2 @" E0 r
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);- t6 Y2 ?" q; O6 a9 J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);5 _( c3 n3 w5 T
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' I4 s- m& z, O, p6 _; F  C) |; I3 _
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. q- q8 ~/ G4 ^. h; w" u; ?
  381.   if(UpdateFile3.size())
    ) K2 m' k, ]" a4 n# G; ~
  382.   {/ v8 k, ]7 p& G% V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    0 V/ k' k8 k' r0 Q$ x8 ]& v
  384.     {) C7 P& ^5 n( G6 \4 [. v6 c" C. z* t7 F
  385.       file2=(LPUPDATEFILE)(*i).second;
    . A" `: e, e% j8 y* s+ s& m
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), N$ j  _/ }* ^9 ?" W& _  k
  387.       {
    $ X' l( E/ n# k4 S* X4 J8 V, N
  388.         file1=(LPUPDATEFILE)(*p).second;
    5 \* z+ E3 Q" K" y( @
  389.         file1->vers=file2->vers;
    ; a8 w, W+ @  s5 B- {! y
  390.       }
    $ l  _# a" W! J, U- l2 X+ V+ n4 R8 f
  391.       else
    " P7 x+ B) h7 L7 e* u3 B9 h
  392.       {1 ^% t7 G9 i' Y$ A! q& z+ d" i
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( z( z: o2 P) B* a
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" N2 g- X" t  O4 F' i6 A! K' C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));1 J% a* q* K  X7 `! L& D% \: L
  396.       }$ R1 z$ D' u" S" T9 e* F. S% u6 R
  397.     }
    - G% R$ t3 e$ _! ~
  398.   }+ W& w/ w* x5 X3 }% k3 v
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 T( }6 X$ h; l% J' R) P5 n% L# ?  r$ u6 D
  400.   {
    . z* C+ U  R2 h4 |6 w2 G) t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 Q( Z0 g! A: R! u: ?' c
  402.     {
    " E$ g  X# i% P, m' m0 P
  403.       file2=(LPUPDATEFILE)(*i).second;
    2 r" Y6 ^, q7 K1 O9 N7 {
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . j% W* F( F) T! ^
  405.       {
    # W6 z5 {+ X. h/ ~0 N: H
  406.         file1=(LPUPDATEFILE)(*p).second;4 \6 n& d8 u# N% [/ B7 L
  407.         if(file1->vers!=file2->vers)
    , B# z' \( }6 \  f! T
  408.         {/ N  C& f9 l( m: x7 ?# I
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) n1 O7 K. }9 K# C# y
  410.           c++;9 _& N. E! E% B( u$ P
  411.         }
    + W. H6 u' e; i+ I! m, Z: Q2 m
  412.       }
    $ b# y4 P* B+ l6 W$ _5 o, g
  413.       else# j1 b" _5 y2 M% y& z+ u& [9 z/ f
  414.       {# R4 C4 d4 k" T0 K) F
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / ?- n* ~6 {2 Q# c! L7 i
  416.         c++;
    $ _. r' Z/ e$ W
  417.       }/ i8 d7 T, q/ p3 H* t- H' t
  418.     }
    ( _  L( Z% L9 P/ y/ L- M
  419.   }
    5 v. J. J4 v+ W
  420.   unlink(".\\DownLoad\\update.txt");* Y" m2 t; O% t! \
  421.   if(UpdateLocal.size()) return TRUE;% {" }1 T9 p" ^, w, P: n" z( `
  422.   else                   return FALSE;
    " @& s) J* r3 g( @1 }1 k/ S
  423. }
    : |% Y4 P4 E. H& h; e( N

  424. + L( d' ~  n$ A6 m
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    - D8 v. O5 R1 e: G# f* ]0 a
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ A. M' K4 b5 n4 X

  427. ) P3 L6 ~$ e" {# c* r  `/ s
  428. - ?4 U- G2 i" S; T- ]) E
  429. ) B; r& s( M# P2 h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  `: Z4 }) E* G, ]/ s* ]9 c
  431. {( V9 e( d( m; U; f0 q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 J! L" V3 P& i( ^/ ~& Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( ]5 t* Z8 B' q  {3 m" S# x
  434.   {
    ) k% j, ^0 c0 H5 E/ m; C6 \
  435.     char szLanguage[50];, o/ A: B3 z9 F5 a8 G, R0 o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 y: h8 J: o) j" k: M
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; \* H8 E# g# n4 S' e% U
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # k3 Z- y% R6 D
  439.     else                                   m_iLanguage=ENGLISH;) r! F% j' Z6 i5 m
  440.     char szRegister[100];+ Q  c& J3 R0 f9 J- d) o2 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 q8 x9 _% {7 q+ U+ g8 {8 x
  442.     strRegsName=szRegister;
    0 U: _( H7 _2 I/ f/ w
  443.     char szPatchURL[100];
    8 ^$ I. Q; O7 \4 k8 {2 a3 L
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" m0 d# |$ y0 M; t
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# x) ]% w+ w! @+ U, \8 B
  446.   }9 R: ^6 f* |+ c
  447.   else
    1 B' w! t0 F2 T; K. x  S2 U6 G  D% F
  448.   {
    ( |3 A, R/ _0 n' z/ S% Z' [. b
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 A6 K/ R* U! i0 Y7 F
  450.     strRegsName=DEFAULT_REG_URL;3 i4 V) q7 X1 |6 I8 `
  451.   }- e* Q" F6 K  ?
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 s% [7 `% Q# h  q
  453.   {
    ) O6 |6 v  T# L$ s! S; X5 b
  454.     char szIP[50];, K  |9 ^  X* p
  455.     char szDIR[300];
    ' r3 H  Z* |% C4 O7 X
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : O7 Q" y% v( G4 @9 m) y
  457.     {
    6 q* q' G5 u& j; J
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    . q8 R% o" A1 e; ]+ Z: w+ k) b
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - m) F) f& b) R7 Y* f
  460.       strHostName=szIP;
    5 O) z1 h+ T" @  x
  461.       strHostPath.Format("/%s",szDIR);
    6 A5 R$ g* o! l3 S, i
  462.     }& m$ Z2 u7 E5 f# v3 m
  463.     else- p9 ?6 z/ \$ h; O6 G' Y/ Q6 c' X
  464.     {% a' q  y5 C2 Q* R* L9 f% ~
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / n* x# U) J7 z8 ^7 z9 C' D# Q0 a" Y
  466.       {
    0 o, ]+ L: T9 \  n* R
  467.         char szLanguage[50];
    ) Z& L4 O7 x9 a$ _) _) w" W
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) ^) A% d/ x: D( q- E; f& E
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' w2 `- u: l' ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 i. J* ^8 h2 L/ T1 |( t
  471.         else                                   m_iLanguage=ENGLISH;* Z- k% a# c6 T. n) J
  472.         char szRegister[100];/ p& t) m) V6 U
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + L0 Y* s1 c3 X. H" U
  474.         strRegsName=szRegister;. C4 c- j& B2 _4 y6 _, J8 Q& u& w, g
  475.         char szPatchURL[100];! X6 f3 g; d* O: k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! H$ A3 `- U7 X. j* K8 c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 ~2 U* e5 f* F
  478.       }
    / e& @% `% K5 \+ d. w
  479.       else
    7 Q5 r8 |! Q* s; @( A" X
  480.       {
    : }0 ^" C8 d. u2 N& h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ r% u3 b, O0 ?3 H' p1 V
  482.         strRegsName=DEFAULT_REG_URL;
    & b+ `' X; ?( b: ^+ r
  483.       }
    : Q9 F2 a0 J) X6 B0 g1 [+ R
  484.     }
    . u5 _# R) W$ A, }, V9 j
  485.   }  z# X; o9 ~; F6 R
  486.   return true;" \: p) X, Q) M2 i9 _/ h
  487. }
    % Y2 f( d. s' o# |% f

  488. : y' R/ v8 d1 I$ v* P: W2 i. |) N
  489. #include ".\ZLib\unzip.h"
    & T; U9 I  T+ w+ V( w, o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);6 z9 U! K6 ?' L* U8 E" Y
  491. /////////////////////////////////////////////////////////////////////////////
    , Y& O" s4 G& j7 L$ [" t
  492. // CRevAppApp initialization$ z9 b- f% K' S- Q# N. A% z

  493. ) z; ]' e9 e0 z# Q" y3 _
  494. BOOL CRevAppApp::InitInstance()
    4 C9 D4 a  O& S  X! Z+ B+ C8 l6 I
  495. {
    ! e' o$ m0 |) K( I( R* X
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 o% f/ i0 A* T3 s; |: h

  497. / o; Q; v) Q" L
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( |$ c( c* ^5 I, I6 x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ J$ M& y+ {: t; E, Z2 V
  500.   {
    4 t0 {( f& K9 n
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    1 _# W. i( |9 y& Q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    . c0 ?/ i" V0 k( Z: {- x! ~0 K
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " U: @( C' E# P2 D. x, E0 J
  504.     {
    & \( i$ W% q+ _& S& ]  Y& F
  505.       strcpy(szPath,szPathTarget);
    " i( S) n  h, A5 ?
  506.       SetCurrentDirectory(szPath);* v" F; }% w: S
  507.     }
    4 i' Q$ x. b- r7 g1 S& }/ q
  508.   }
    - |" k! Z1 f1 s/ f5 O2 p5 l
  509. #ifdef _DEBUG( B- m; l) c4 G% o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( |$ x- o( f8 D6 {3 g! F- W
  511. #else
    4 r7 _$ n! E) ]/ [1 Q3 n1 O$ p; d
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" U$ Q/ o" P7 z1 D: e' f
  513. #endif
    2 U! S* m* G1 Z/ R# T
  514.   {: R3 _# I9 _8 _. w
  515.     char tempFileName[MAX_PATH];
    ! m6 f& u8 v0 d
  516.     strcpy(tempFileName,szPathSource);  W# v6 U0 B4 @' I$ d& B
  517.     tempFileName[strlen(szPathSource)-12]=0;# j5 `! e" m5 ^2 X6 R/ O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 h# p) T' s" m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);+ R9 p* V& P7 K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    % W% p5 `( S! @  h
  521.     return TRUE;5 W1 Q- |1 L3 j: }
  522.   }" p1 b3 B5 B/ S0 \: ?0 U1 R7 W
  523.   // Nuke 0118: Delete run.exe5 w: K0 I, Z1 C3 @, w$ M' [6 G% V
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 ]$ C/ q, L- H3 M9 U- `3 ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - H+ d- `& g' R+ {) H
  526.   if(!ReadCfgFile("Config.ini"))# w6 L" R6 ~) \& R  e
  527.   {% I% A2 N, G2 b4 r8 ?
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);# B, h: _& U* ]' C, a
  529.     return TRUE;
    , [% o4 t/ p9 d; }) y( t0 v( o( f3 O
  530.   }
    ' E) Y4 j7 p. s7 l
  531.   HANDLE mutex;% b* H! v6 Q% ]+ W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")), M- X' t/ P- e. q, i" g2 E8 v
  533.   {: q4 p* w* w6 _5 E6 C3 \
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 y9 b0 f; o0 p  Q  O$ n
  535.     {
    - G! D6 j, n, t2 {8 [* U
  536.       CloseHandle(mutex);( v4 \; e2 |" l, i; L! @! ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);% M5 n9 ~9 E/ B# y% G/ E' ?
  538.       return TRUE;
    - _2 m( T  t$ d0 q6 U4 s
  539.     }
    ! K& }, Q$ o1 t; J( a4 Y
  540.   }  % f: q: ^& l9 M9 t( L4 L2 a
  541.   CloseHandle(mutex);7 s4 I; Z+ S! a' |! e  G/ \
  542. ( }) P& @6 G( ]1 A. l3 `8 T
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 V8 s* g- w) d5 S$ b8 g. m
  544. $ K3 [1 d) l1 K6 [) E
  545.         AfxEnableControlContainer();4 r. t% O  [6 N7 `

  546. & w9 N% w6 y0 a+ b7 v
  547.   bCanUpdate=FALSE;, V0 |5 _, Y( y2 f4 F- q
  548.   dwStartUpSteps=1;
    ' f) S; R4 F3 i  F3 W0 y. E
  549.   dwProgramState=AP_NOTHING;: |: o5 ^7 X4 _' k  k

  550. # e$ W* F$ j+ \3 h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    * @  u  b' q: \! s* F6 T. a8 e
  552. * i! R1 q! g7 o! u3 m. L3 o
  553.         // Standard initialization
    - L( b! M5 K' H
  554.         // If you are not using these features and wish to reduce the size8 A1 I0 n: B9 _9 Q
  555.         //  of your final executable, you should remove from the following
    : U  d% d- K* c) K9 o
  556.         //  the specific initialization routines you do not need.
    0 Y4 I0 U  f4 @0 I) w
  557. 7 N2 A& B. A0 D! G" i: N* _
  558. #ifdef _AFXDLL0 c2 [. Q( e& N" J! q) K/ h* R
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 O# Z. G) x  K
  560. #else3 G! F" o, h# w7 ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- |$ u! s/ M! |( f4 E
  562. #endif
    0 O$ x) s2 ?, n6 V% v4 }4 }4 s
  563. 4 V; ~5 L  f( t7 L5 t
  564.   dlg=new CRevAppDlg;
    * N% R" O- W. O, {
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ) P- l- j5 W' U( H, h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % O/ |+ j0 V8 f6 R- K2 ?, [
  567.   m_pMainWnd=dlg;9 w$ S* ]$ i2 h% E
  568. * Q6 G9 g. d4 H1 X) e
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - p; N4 P2 V4 K5 u
  570. . e4 t2 w/ H/ |: \9 o" ~7 R$ F
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + y. C2 K* `3 C) b
  572. //  ULONG_PTR gdiplusToken;
    $ n% L# x. h$ C& a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 o4 W, ~$ G* _1 }8 Z% z
  574. " L/ J* m. r3 g, X
  575. //        CRevAppDlg dlg;* R0 y' o7 C. {  z4 v/ y+ c4 K0 A" x. n
  576. //        int nResponse = dlg.DoModal();0 z3 l3 g6 L6 ]( h# q2 N* P
  577. //        if (nResponse == IDOK): t( ?5 V  T5 m2 |7 d3 n5 E
  578. //        {3 P: L7 L* I  W9 D1 r2 f
  579. //                // TODO: Place code here to handle when the dialog is
    8 U& N4 |! k& V( h4 h8 f% q
  580. //                //  dismissed with OK
    8 k$ W8 {3 ~% X
  581. //        }
    4 o& K; N" A4 Y5 {: s& H* N
  582. //        else if (nResponse == IDCANCEL); i2 h. K5 W% Q# K( m, l/ d
  583. //        {
    1 R( b, r4 p; F" O0 p# t
  584. //                // TODO: Place code here to handle when the dialog is& B, T2 q; b3 u" k7 b" j8 S% U
  585. //                //  dismissed with Cancel+ I$ P2 @" C- c- h5 g
  586. //        }
    ( c8 A, c, R  m& |, Y0 B

  587. / y" Z& z+ H+ M5 x/ |
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 m8 t* Y9 @  ]0 S! J
  589.         //  application, rather than start the application's message pump.6 }3 s1 a" t5 l& ~* t- _
  590.         return TRUE;& g8 U1 a8 A# y2 F
  591. }' P- j$ Z9 A8 r- A% I
  592. " a9 I6 X" C' e. k0 X  V
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & _+ a- [( B4 g8 U0 @
  594. {0 M$ {% ?; E% ~# E- o
  595.   int i;1 [# |/ O# i+ `' H# e
  596.   char *szRet;
    8 }2 A, \6 b) Z3 S
  597. % \$ c7 i2 L, k  A- ^, A3 ~. Y: Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }% g/ k: M9 e6 B! A/ e0 D# W0 F
  599.   if(sztoken)- b  b7 p4 r) z4 h( d
  600.   {4 Q' l: `9 p) r
  601.     szRet=&sztoken[itoken];8 ^! D" W& F5 i# Y
  602.     while(sztoken[itoken])& F* s; \" j- T& K* g- W2 Z
  603.     {, {' [5 Y9 {& `- V9 I
  604.       for(i=0;i<(int)strlen(token);i++)% |/ p. y  }. z- `3 N* O
  605.       {2 y4 Z% O( ?9 h5 }0 o! B
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 I" `# ~0 c0 h4 v  i
  607.         {3 {4 k) J+ u0 a/ D* ~' g
  608.           sztoken[itoken++]=0;
    ( x  o; y, B; K
  609.           sztoken[itoken++]=0;
    # i) K7 J7 D* i& g' [0 L
  610.           return szRet;2 [) K7 B% Q9 R/ e; q3 T7 _
  611.         }
    2 @: {* x/ b9 _+ R$ |- G
  612.       }
    ; u+ W& I  D0 i+ a
  613.       itoken++;6 e/ I4 }' g! u. x
  614.     }+ s, B% W0 t$ _
  615.   }% y9 |8 x! m  I3 p$ T, a
  616.   return NULL;
    * p' ?* |% j, w$ g  \
  617. }
    7 g- n1 p  ^3 y1 i
  618. 9 v. {) T7 J% p, F+ r! q/ U
  619. void ProcessProc(long Total,long Current)
    . e2 D' k' g; d3 C( S
  620. {
    9 I& r% J! l% k2 x; a+ ?5 B4 `
  621.         MSG msg;9 C8 |- K7 D& p: [
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 h, t$ H: n- A7 _% q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . R/ t) o- k5 q9 G  h4 B
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* ~& m( p* p7 L9 [
  625.         {
    # `9 q* M3 Z+ {7 C( ^8 q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! h/ a$ J: n- Q4 L7 L7 f
  627.                 {
    . I; s0 H' Z, s) T" j: g
  628.                         return;% s9 G- }4 z  Q+ J0 M# }! J
  629.                 }
    4 R& r- m/ ?3 ]' ?7 }; e! j1 h
  630.                 TranslateMessage(&msg);4 D4 O8 R7 o7 ~
  631.                 DispatchMessage(&msg);% p3 w% }2 \; r7 p( d% }4 c
  632.         }       
      f8 g& ?! |% c6 c1 v8 {+ R: _
  633. }
    % f, u- o2 z2 ?$ R4 {# ]
  634. 6 V! q9 i' u- s5 o) B$ ~
  635. BOOL bFirstChar=TRUE;$ i, C) I% N; l2 `: n* B

  636. 2 Z( p3 H4 D3 W& R1 q+ ~
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / a; @. I/ a* P9 L- T) `4 V+ P
  638. {
    ; M* N& k/ ^7 R  U' l
  639.         // TODO: Add your specialized code here and/or call the base class9 Q9 C1 B1 h- \
  640.   switch(dwProgramState)
    5 L4 v6 }& b/ d, W% w) S
  641.   {' H1 N9 g4 z8 p! m
  642.   case AP_NOTHING:
    2 \) E1 L9 i1 ^) a
  643.     switch(dwStartUpSteps)& t: u  S' x0 I0 u" H+ i8 b$ Q
  644.     {
    ) i2 I) ?4 g/ {! w
  645.     case 1:" v7 ]! R, C* H& f. _
  646.       {- J- S+ [% p6 a5 f2 _
  647.         int i;
    5 t! l+ T/ V# s$ M! Q5 g
  648.         CDC *pCDC=dlg->GetDC();& ^% H  {* K" |6 O" ]
  649.         HDC hdcwnd=pCDC->m_hDC;$ d, Q  F- e; p) }  T
  650. //        Graphics graphics(hdcwnd);) `2 o; x4 l% d# W6 P+ q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ N) l  a# _! b) w6 @
  652. //        INT iWidth=bitmap.GetWidth();! ^  s( w, z; M0 d
  653. //        INT iHeight=bitmap.GetHeight();
    1 Q  s+ t  Z1 V; y  n( C7 y
  654. //        Color color,colorTemp;4 ]$ H# n5 r% T9 s' ~
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + R6 T6 u& w0 g( p
  656. //        {
    & |9 e2 ]9 ~) C6 J( F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 M( m! [7 q. h. ?
  658. //          {
    % k; d( `1 o1 f8 U$ b3 X* _7 }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);% l& V' w& U/ }# e; u# n
  660. //            colorTemp.SetValue(color.MakeARGB(
    5 U' {! s  \/ h# G5 w. m2 q# P
  661. //              (BYTE)(255*iColumn/iWidth),) a* D( v2 b7 f% u% G
  662. //              color.GetRed(),, G$ c1 m* _0 a
  663. //              color.GetGreen(),$ n" ^1 ~# q# E# w
  664. //              color.GetBlue()));
    5 l  b) @1 u( B) g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);1 c! f2 R0 A. a5 v8 h
  666. //          }
    + l. G, u. U" x0 ?5 v; _# F
  667. //        }
    3 K/ w' f; N6 V* q, l& w" k
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);5 A/ X: p9 @! G- [! m* p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 |7 s6 }  j: W4 z7 `$ o
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ x. `/ l2 d& R8 i( T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; V4 Y* n. |  G3 c/ i
  672.         for(i=0;i<240;i+=8)6 x% o# @0 J+ L, j' w
  673.         {
    0 ]: a5 f- _' Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; @; j' s0 G! ~: S( y1 S* ~
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . t' O1 m4 J# F: l
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ [/ {0 F) I, r, L4 X
  677.           Sleep(33);
    7 p" _! e+ Q1 U# J
  678.         }) b9 r* Z- V8 Q" O0 z
  679.         Sleep(1000);. T  ^; u% [: G: y: D9 |
  680.         for(i=240;i>0;i-=8): d4 s: {& r; A4 c/ J3 F: l- f
  681.         {
    * b7 Q# b7 w2 H. |* K$ m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 c; V2 E2 {; D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& f6 J+ z" y0 i+ W  K9 x0 N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 r, B( a1 ]" J$ A" y: A/ q
  685.           Sleep(33);
    2 \5 M9 p! y/ n! g, ^' W7 Z
  686.         }
    - D( }. \. ~9 K5 O$ G6 `+ G3 U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 V( z- O& ^2 X6 W" x* ^% J" E
  688.         dlg->ReleaseDC(pCDC);) T, I9 X" B) x2 V" B2 t1 C2 L, K
  689.         DeleteDC(hdctar);! A5 q" c- J& l9 p6 d1 M) Y* n2 I
  690.         DeleteDC(hdcsrc);4 U. a. ~, m; `
  691.         DeleteDC(hdcorg);
    # c- y7 P( ?' x% c
  692.       }! b0 B# a6 a9 D
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ Y3 {, K) \3 {' M" X# J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");, h& u2 u$ J% P$ ]1 n: D
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");0 E+ x& Y( T- S! r0 Q( q: W
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ W+ V; H  m" M2 E
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, D1 g  h, d/ Q0 y5 y
  698.       if(!Dn.Connected())" `0 L% j4 W* I- r" Z
  699.       {
    # G7 h& e' W5 B0 z( |
  700.         dwTotalFiles=1;! c; D4 F$ v, T/ e$ B3 K0 j
  701.         dwDownLoaded=0;
      t6 d) P) S7 T4 ?' ]
  702.         bSilentStep=TRUE;
    ' _; E" d2 C& h: {
  703.         bCompressed=FALSE;% c0 L+ G5 v9 K% U$ V
  704.         strExtLocal.Empty();4 q% t3 Y9 `+ y4 o5 K
  705.         strFullName="readme.txt";, r1 Q( D1 K8 O6 `2 [7 R
  706.         dwProgramState=AP_CONNECT;/ {2 D  f1 x/ i5 T
  707.       }
    : \) r7 L0 v* ^+ Y+ f# n
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( ^" V$ |+ S4 t. \( k$ [
  709.       dwStartUpSteps=2;
    + N" K2 |: C& Z9 g% K) [* \; @
  710.       break;9 x! p3 k; r5 k+ ^; E- k2 i
  711.     case 2:* y) M. `8 }$ E% c: e# r
  712.       {6 I9 m8 Z' x" m2 F2 m! |
  713.         int iEOF;1 s* E9 r, {( a. M
  714.         FILE *fp;
    * l% U( H- v, j8 d/ \4 O: y
  715.         char szString[512];! j- Z5 D' _# d# Y) U; A# V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* }' l2 V8 x1 _1 Z: x" M6 e0 C
  717.         if(fp)6 s2 k! ?/ K. l" q& c# o0 {- U6 r
  718.         {
    6 S* p9 C% V: g
  719.           do
      e  J* B0 X9 Q; ^$ s
  720.           {! s/ \7 A2 U( J0 N' d9 m1 \: P7 K
  721.             iEOF=fscanf(fp,"%s",szString);- e, b( o4 l8 A5 \
  722.             if(strlen(szString))
    9 S7 [& n6 [$ j5 i8 s% L
  723.             {1 M0 V; [( C% ]; {+ R3 `
  724.               if(bFirstChar)0 l. d  [4 X* P% \! ^$ K8 \$ u2 F* U' M
  725.               {% |( Q4 u/ s( L, h
  726.                 bFirstChar=FALSE;
    7 S! x+ p7 [' b+ T; ^4 F8 V
  727.                 bConnectIsBig5=FALSE;
    ) }  @4 E$ |. e) b8 @7 W% n
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& u7 _! X7 \: P; y- i* G
  729.               }# M$ Q- ^+ a1 D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / U& F. ]4 D) L. }4 ]
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 V: C5 w% J$ F# _5 z
  732.               dlg->m_ListText.AddString(szString);
    7 }6 X" i1 x& M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 e0 _8 G( k% n6 M( o- O# r
  734.               *szString=0;
    " u, W' C# y4 y% `' f
  735.             }
    1 o  y# x: \; [8 M' F
  736.           } while(iEOF!=EOF);
    * f) U7 r# }1 o/ \
  737.           fclose(fp);
    ) u+ O8 D; ~; \- w: E/ a
  738.           unlink(".\\DownLoad\\readme.txt");, _9 E" O  @( f9 Q
  739.           dwStartUpSteps=3;
    + _4 a1 S, e# T8 }( e
  740.         }
    8 Q# n- o) _0 P6 o
  741.       }; C8 @0 _2 A- s* \, Q4 g; ^
  742.       break;1 N, t6 @" \4 l2 [; r/ F
  743.     case 3:
      ~1 |! ^' r! y: H8 G" }* b
  744.       if(!Dn.Connected())
    6 o. K, b/ R3 k0 v9 Z( u% p
  745.       {
    ) z* H% O# a( Z  m& }
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);& J) K1 b+ c( N* _5 I
  747.         dwTotalFiles=1;% u, s, Q' @' k4 M9 S
  748.         dwDownLoaded=0;3 N) ^# f% C+ Y% F& S. B1 n2 i
  749.         bSilentStep=TRUE;1 K3 [, R) X) J. i2 p& C0 s5 c) H
  750.         bCompressed=FALSE;
    * w( @9 k+ F( [
  751.         strExtLocal.Empty();
    - ]& O# N" ^7 y2 w, X! c3 ^
  752.         strFullName="checkversion.txt";2 I  N% ^  ~$ @
  753.         dwProgramState=AP_CONNECT;& S: }( u, s' t. O# U, O) H
  754.       }7 v9 ~' u: b2 r  O' ~
  755.       dwStartUpSteps=4;' ]6 d! C/ ?9 o8 b6 }3 f
  756.       break;
      d! a! D. Q# O' k+ d
  757.     case 4:& x7 ]7 j1 ]2 z- G# Q, N
  758.       {, e. q5 k8 B7 P- C; m
  759.         FILE *fp;4 Y; }) }+ x) k7 D/ I- i* x
  760.         char szString1[128];! w$ r* G; x' }. Q0 r% j2 E
  761.         char szString2[128];
    1 R. p2 d9 n/ n1 W# \) k. [# z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' }6 t2 t( x/ [; Z% B  D; k$ U
  763.         if(fp)
    1 I: n4 ^- N5 l0 {) U
  764.         {$ V. Y4 i7 O/ A
  765.           fscanf(fp,"%s",szString1);
    + b: N* ]* J, l- H6 m& o( I
  766.           fclose(fp);- b+ o4 {+ f- j( h9 q* d) m, v2 W
  767.           fCheckVersion=atof(szString1);
    6 K/ Y9 G7 A5 U! a* a1 x- T9 P
  768.           fp=fopen(".\\checkversion.dat","r");
    # O9 k: }$ H  i) Z* w. N
  769.           if(fp)0 m1 N+ _: F; `7 z6 d! V
  770.           {; C$ h7 D$ k7 v/ A5 {" L4 j
  771.             fscanf(fp,"%s",szString2);
    4 d( G. W+ D7 t) d! _6 U9 R
  772.             fclose(fp);) g+ l1 Q% {# G& W
  773.             if(atof(szString1)!=atof(szString2))8 Y2 |7 {% e" e3 @/ K) }
  774.             {
    ! p0 e0 \% C; s! c( s
  775.               if(!Dn.Connected())
      [3 }* v* ^/ r6 X6 Y6 O% C6 E
  776.               {
    6 h- u" N; \4 q; N
  777.                 bFirstUpdate=TRUE;
    & E. o4 N1 i- }1 R( ^7 G0 ?9 \
  778.                 dwTotalFiles=1;
    9 @, X5 @3 z) C2 ]% w7 f, @4 ?
  779.                 dwDownLoaded=0;
    9 G6 s/ `6 r5 {
  780.                 bSilentStep=FALSE;: g; g5 w2 ~8 Q5 u3 i# Z! P: ?/ I5 f
  781.                 bCompressed=TRUE;  C7 L  |" T7 b) N# |
  782.                 strExtLocal=".\\DownLoad\";
    " Y) e( d, b# r  o* U* ~5 x
  783.                 strFullName="update.txt";
    , G& ^" a1 Y! K! I; z" ]0 m- [6 p
  784.                 dwProgramState=AP_CONNECT;  E  Q$ [$ [; }( A8 M8 X! I" s
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: P8 y1 h% l8 ]/ R
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . h4 u7 Q- U3 H# I/ v) x9 N8 P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% p9 z$ }/ O9 ?

  788. 0 S3 g, E6 _* q0 K
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 o! h7 M8 D( J% V
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ _" w# g! Z0 H9 R) C1 P
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 H0 m& p! _8 @# ~4 n# [% P
  792.                 {
    ; g8 l5 e! f" k, R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 b: C3 a& u$ B4 {
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");# K) x* _) u' a5 y; m4 S3 `$ x: n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# p# |; i% ?6 @% f
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ Z, O9 p0 M# A/ z; }/ O
  797. ) T0 |2 Y+ L; |* ~( m# O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 M+ ]8 v2 T  v4 X3 U1 V* |6 ~) I
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: ^( [- l. i, V  E7 ]" _( z7 j
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) |+ U! L9 h3 I# M' m: l/ a7 ]* z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 y. h2 `6 u0 O% A: D
  802.                 }6 c3 |0 F# P6 Z' x8 a6 g: ]! E; x
  803.                 dwStartUpSteps=5;6 V2 n$ v9 ~/ K
  804.               }
      d4 A3 G7 h1 ^
  805.             }  m( `* ~! _- G6 Q9 l: L
  806.             else
    : A- J& A* e5 z- [, s2 D* u
  807.             {
    / v7 e6 L2 z( Z
  808.               unlink(".\\DownLoad\\checkversion.txt");  k, n1 d! b( v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      F+ e0 q( Y& J) A8 P) Z) u9 E" n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 T1 H  Z7 ?! ~" t: V. {  I
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! l" D6 Z' l2 O# r' N  T

  812. ) r' f- ], X! `: O
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 L6 n' i7 G5 A7 F* i- S  D; i
  814.               dwStartUpSteps=99;( P1 p( M9 g- V! x( o! x
  815.               bFinishUpdated=TRUE;
    # s6 n  L9 V3 m: u/ {6 Q
  816.               bCanUpdate=TRUE;
    ; O8 R' G8 A. P+ O
  817.             }; W, l' o6 H# y3 Y
  818.           }
    6 ]& @% d3 B/ I: n" H4 d
  819.           else; F( O. z) n; c
  820.           {8 x1 i: o( v1 Y/ i
  821.             if(!Dn.Connected()): H) m: M" m! D; X  l. f
  822.             {
      G' }) ^% L& V1 c% P4 g8 V
  823.               bFirstUpdate=TRUE;; j/ p. \/ g3 D  o# t5 |- g
  824.               dwTotalFiles=1;4 Z$ O& w4 Q2 I+ {6 D  s. z
  825.               dwDownLoaded=0;/ Q1 p4 _& x1 \  B0 T
  826.               bSilentStep=FALSE;
    + g1 y; c) J- _$ k$ W" W
  827.               bCompressed=TRUE;
    : d5 K) w" L7 [! D
  828.               strExtLocal=".\\DownLoad\";4 ~8 ?3 K; R+ s: N( H+ H
  829.               strFullName="update.txt";  W( {1 s* r- u+ H6 B
  830.               dwProgramState=AP_CONNECT;: |, n/ o3 o+ j$ e% x$ J; O
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 _6 k( e- \- r4 k! F$ G3 H5 ~
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    $ Z! e8 F/ V; E
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( a* w+ U: M: B8 H- x/ Z! ]
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + p3 \: C  Q8 j0 u
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 T) u3 K: o$ y1 p
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)( ?. C1 }+ \- c( L+ w2 K$ F& p
  837.               {: P( k, z. O  B( ~( m* X1 w
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");* ]4 U/ B; q! a" c( o1 N9 D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ B3 a3 t( R4 g' C2 {% V, _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    1 V8 Q1 J' \! U# A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% \+ ?  O! F6 s* D! L
  842.                 ! y/ r) O; C9 K! O
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) N% {9 N+ M! n0 F7 d- P. P6 e+ y0 A
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , H" S# |$ n! W9 h3 e4 z) ?
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");, e5 A/ C0 E9 j  E# T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 P5 K$ O9 E; M
  847.               }8 P' d6 b7 Y+ C0 z4 a, a# W
  848.               dwStartUpSteps=5;/ I) [- d% y! d" R/ V6 O) W
  849.             }3 T; M7 P, b- w& k- x& z  U2 \
  850.           }
    9 P. V, `0 }% v! b9 Z* v0 A! |
  851.         }+ c# n  \7 c! T0 ^4 M
  852.         else  m' X. z( R- H' K
  853.         {
    $ k0 W' l* b/ x! T! e9 Y7 R
  854.           dwStartUpSteps=3;
    . z) K3 P' C$ u" Y
  855.         }
    + ?& g6 o2 k& q/ {7 y& C) f* O
  856.       }
    4 B1 z+ l2 K$ b# b( r7 G
  857.       break;
    $ r+ O. H$ u5 \9 ^! k
  858.     case 5:/ Y- }. w$ w2 o. c7 }4 ^
  859.       {" d( n% u' s. p8 F9 \1 [$ s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). }" u# P: p1 v, [  L* m" J" X
  861.         {
    ) z' W! F, j  M5 k
  862.           int opt_overwrite=1;% j! \1 j; C, k0 Y5 Y
  863.           int opt_do_extract_withoutpath=0;
    * N' I) B5 A2 h
  864.           unzFile uf=NULL;5 E/ C$ Y; u% C5 g- W6 Z/ e) I
  865. 6 w4 [- ^$ T; b$ I# l0 v6 H
  866.           uf=unzOpen("Wsa.zip");
    7 l! J! z: S6 F  d4 }. i
  867.           if(uf)3 v' \2 c4 w* C" ?# M" n
  868.           {/ O5 b9 h; e; J. V7 j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    2 e% K6 N: o+ c/ t, x: E# T0 i" @
  870.             unzClose(uf);8 ?% o6 }" ]- {" J8 L( a
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & p7 J+ j6 h; t8 c+ _0 B
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; X0 q9 F2 `9 l+ I( F
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");  R% k" w/ w7 Q5 R$ T7 u( w) ]
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 q. S3 h* W0 R* ^1 w' Y. \+ ^. s
  875.           }
    2 a, J7 w- c7 r, E5 V) f
  876.           DeleteFile("Wsa.zip" );
    : L8 W" x. C. V4 @& h# E) s, N! c* p
  877.         }
    9 @1 Z5 Z$ I% m

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

  D, |, L: q! Q% T' a+ N7 @# K2 m1 y2 _5 u+ N/ m  r

評分

參與人數 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, 2025-12-5 05:48

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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