CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
; q) ?; P. J5 g
  1. / RevApp.cpp : Defines the class behaviors for the application.
      Q% x3 {1 m' \- n0 x' ?
  2. //$ y+ g: E* g5 H
  3. ; s6 x' F1 o7 q& v' h
  4. #include "stdafx.h"' D' w: Z3 p; P) c$ k1 a  g
  5. 8 l8 ^0 @; E6 t8 H- F+ w' C
  6. //#define UNICODE' A3 D: o; e. n; N2 I- U
  7. //#include <gdiplus.h>: N2 ?6 m# [: r, K4 s; ~: @
  8. //using namespace Gdiplus;
    1 ^2 F" H1 C; J% R! |% }$ @

  9. 6 n$ V1 n4 Z% e0 ?' W6 M) ]' p
  10. #include "RevApp.h"
    * e1 m% z6 L& E( o
  11. #include "RevAppDlg.h"% V' l" f; K  `3 M: o
  12. " _- Y; i/ Q$ w% m
  13. #pragma warning(disable:4786)$ G' v0 R0 ]# ^2 w2 t0 D0 Q
  14. #include <map>: m( `% S7 K* Z: i: Z: n% |
  15. #include <list>1 R( j5 N$ p) G5 k; s8 u4 S9 j
  16. #include <direct.h>2 J9 n2 z/ `4 L7 P

  17. ! F$ a- Z! C* w' T3 j) _7 o
  18. #ifdef _DEBUG2 A% }) p( l9 \; ]  q1 t. ^: L
  19. #define new DEBUG_NEW' B: F# F- S' x! U. _. Z& a1 m; s
  20. #undef THIS_FILE
      V) |. N' T+ P  g% R
  21. static char THIS_FILE[] = __FILE__;$ c5 P/ }0 M. q% _/ x
  22. #endif/ B, M) {0 m8 G# ^
  23. #include "SkinResDef.h"! j# P: m3 W  d3 q
  24. #include "ChangeBG.h"
    9 i$ H0 l) Y7 S" D: Y5 f6 F
  25. #include "AFXINET.H"
    % E& Q! G+ N" o' m  I6 p6 l+ G3 E
  26. ) b) _- Y5 Z3 j1 U! F7 ]
  27. #define TRADITIONAL_CHINESE 0  s7 p9 l! o; o  z( S5 M; [
  28. #define SIMPLIFY_CHINESE 19 K0 U  m7 G$ r, o8 q" u' E
  29. #define ENGLISH 26 D# E0 K( l2 H6 F$ i" ~) g
  30. int m_iLanguage = ENGLISH;- ?$ y4 d( U, @' M. {
  31. /////////////////////////////////////////////////////////////////////////////
    + j/ V4 K3 n, B! n+ r  u. X
  32. // CRevAppApp1 H: O; o, R* @8 E7 A* S/ W! ?8 x
  33. $ K7 C# D; g5 [+ |& S$ Z7 U  a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 V# p6 a0 W9 c' Q# c
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 w/ I* B* P! w9 R/ @$ ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.1 I  v: q8 m2 K/ M% ~
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!. I6 ?, {7 l) V+ k6 y
  38.         //}}AFX_MSG0 p! D/ b, h9 L- ^! Z( d3 i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 R. z! @! ^, X7 y
  40. END_MESSAGE_MAP()! u( ]$ K* y  E: p

  41. / e5 v+ `+ }9 L& R9 x
  42. /////////////////////////////////////////////////////////////////////////////9 g1 A9 u7 `5 Z3 }; @' i- q* x, u
  43. // CRevAppApp construction
    $ f; k( }3 S  y0 U6 t; B5 o3 U

  44. - Z5 K! @! Z; {+ p; L, h
  45. CRevAppApp::CRevAppApp()4 Q$ s- J* D; }6 }) n3 a
  46. {: l0 T6 u, a6 ?( `: y# r
  47.         // TODO: add construction code here,0 D; a7 ^9 `8 ]8 {/ L# ?
  48.         // Place all significant initialization in InitInstance
    + c; G/ R5 I$ v2 y
  49.   bDisplayIsBig5=FALSE;
    3 c) q: Q# i4 [" D" j
  50.   bRestartUpdater=FALSE;
    - U" l( B; I+ c  `
  51.   bFinishUpdated=FALSE;
    5 E' X' y" a& m. K( s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' E4 {' N# f6 l" y+ W$ [+ y' s8 Y
  53.   InitChangeDataBig52GBKS();8 h" N8 q) C5 X! I+ r+ c" D
  54.   InitChangeDataGBKS2Big5();
    . J. Z- E$ E. O7 @' i% b, t) w
  55.         //6 n" X. J& \: z& {- L
  56.         bClickRunExe = FALSE;
    4 N+ E- x1 y# P1 T
  57.         //7 E4 |3 @9 P2 P$ k
  58. }% f+ W  V/ a+ `& z9 j8 v% i  K4 n# P# k

  59. : U, F/ E3 q3 C- ~1 C# J
  60. CRevAppApp::~CRevAppApp()
    ; `( Y7 n# C% q8 Z1 _* E' Y
  61. {& p8 b5 r. [1 Q/ w, x& i- M6 _
  62.         // TODO: add construction code here,
    ( P- M; p& l4 @, t
  63.         // Place all significant initialization in InitInstance8 v) k) k2 x6 X# n: M
  64.   EndChangeData();
    % a, z& W3 |) U3 [$ Z" t4 K
  65. }
    4 U. i2 N8 [. a: ]& v
  66. , n9 a! z+ F' _- n, d
  67. /////////////////////////////////////////////////////////////////////////////3 A, ?5 z. b0 ]7 z
  68. // The one and only CRevAppApp object4 q% k) [3 q' Y: F  t7 c* l

  69. 5 {+ r3 ~0 S9 v2 C9 b& J) l
  70. CRevAppApp theApp;
    5 F; d3 F& K9 c9 X& D3 \
  71. - k) E6 D6 n, ]& p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% g; O! @5 O7 ?  W6 u2 c
  73. {
    . a+ L8 x# X% D  v  w  o) i8 c
  74.   int iEOF=0;- l7 [8 M$ v( C' Z- k
  75.   char szTempName[MAX_PATH];
    # j3 w0 {3 c- ?# F- N
  76.   *szFileName=0;
    1 ^  q: A- i- u; Z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 _% L- z1 P! G* [4 E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# J: m# _$ h* {8 Y- O4 m5 v
  79.   {! U0 `) C- Z; h  j+ A  v8 j. f
  80.     strcpy(szFileName,&szTempName[1]);  }3 p/ h1 v/ b. @7 J( @+ h" Y( s
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 [3 _5 `( R* G8 y8 B
  82.     {
    / b; e5 G' S* y, e* D* H+ t
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' T! k1 F* }$ d$ ?2 O! z8 c
  84.       strcat(szFileName," ");7 v2 F$ W& L: G0 ?1 D
  85.       strcat(szFileName,szTempName);
    # O( F; ?0 G$ L* `* I, e+ B$ I* x% Y: c
  86.     }# E' A) m% j! _1 ^- r  ?3 Z7 m1 u
  87.     if(strlen(szFileName)>=1)
    8 N" f# v) F( F" ^, G+ {- @2 P; c
  88.     {4 _" h0 S5 R5 b5 n
  89.       szFileName[strlen(szFileName)-1]=0;6 V/ X* Y: \. _$ g% l( H
  90.     }
      @- r9 X5 h/ P/ L3 W
  91.   }
    . T$ l; e) Q) Q& r2 K7 D
  92.   return szFileName;% H$ ]& V0 l5 t6 C; t0 D9 x6 B9 t; g
  93. }
    * ~" c& R1 G, @

  94. 6 K/ Z8 I+ w: ~0 w2 z1 z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 |, E) Q. f5 P. N3 [; o
  96. {
    4 z/ D. i' q8 U% v/ p( y
  97.   FILE *fp;! _4 O" k$ |+ I" d
  98.   char *key=NULL;
    # B2 Z3 [+ z! N" w
  99.   char version[MAX_PATH];# w1 T3 i  R4 a8 ?; n
  100.   LPUPDATEFILE file,olds;
    # {( {0 U* U& u  S6 G2 V/ ?
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& ?7 r. V+ I+ F' m5 A! y7 s6 j

  102. 4 a3 _. u. c" y2 B0 ~
  103.   UpdateList.clear();7 I  k% d" ^+ ^5 g; L
  104.   UpdateFile.clear();
    ( f1 G2 `* h* h. }; w- j" X
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 U: I$ a+ I$ C7 R9 C
  106.   if(!(fp=fopen(filename,"r"))) return false;2 _/ L/ x" Y8 R; r$ \. w" g; v
  107.   fscanf(fp,"%s",version);* ^9 z8 F8 @3 p  y! o7 [
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 A4 l7 C) a) P+ `0 s
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ W$ `0 b7 h3 H+ x
  110.   {' N. E& G: `; C  e9 H' Y. {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : z8 L, @% O3 w; u
  112.     fscanf(fp,"%s",file->path);6 a+ t  [+ L% h4 `) `) o7 i6 u
  113.     ReadFileNames(fp,file->file);% U( Z) N- |) d9 f2 i3 f& |
  114.     strcpy(file->full,".");- S# X# y1 }5 m0 V% E6 F! y8 E5 R
  115.     strcat(file->full,file->path);
    : X7 _* d. k: Y1 K! @) Y# g0 ^! o
  116.     strcat(file->full,file->file);. N2 F6 M* j! d0 i' Z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& L1 W( K8 {# T! D
  118.     {
    6 I/ l1 H" R  K, X. n: {5 e4 g
  119.       file->vers=(float)atof(version);  J; F% X( K6 r$ l6 r! u
  120.       UpdateList.push_back(file->full);0 L0 w$ U2 x: J, Z! G9 h5 X
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ( V* v- t% M; n1 E6 ~- J- a8 `
  122.     }: t- X2 z2 u5 n; N( A! O) G
  123.     else
    & u6 J1 C( v2 s
  124.     {  ^0 b( d9 J6 m  ]8 ?: s
  125.       olds=(*p).second;
    " G+ I: b3 N2 Z7 z1 }
  126.       if(olds->vers<(float)atof(version))4 O4 y* B  }9 [0 i5 N' i
  127.       {  u4 ?" ?2 y+ z  A4 q, j
  128.         olds->vers=(float)atof(version);
    & H' J7 f# X6 g7 Z
  129.       }- ?; J2 z8 {' P8 a
  130.       free(file);
    + E- w" M+ F2 q# p9 D) X( _
  131.     }
    9 t' V7 W8 e# o: k5 H
  132.   }
    / X* C4 g4 g7 g7 s* b
  133.   fclose(fp);
    ) a# S# F, k  [% V% F$ r
  134.   return true;4 `, R- [# s& F
  135. }0 m3 Y! U' M" u$ _/ m8 ]
  136. 5 W' w- N* `# K: q: z/ w2 S1 S' I
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ) [7 g) u8 h; Y/ w# h8 q
  138. {
    ! C% p1 y/ T8 X# M5 a
  139.   TCHAR  szFull[MAX_PATH];- f" z0 P, x4 v) `  j0 b1 b  u
  140.   TCHAR *token,*inter;4 H2 u0 j4 A, z! [2 K4 r
  141.   *szPath=0;9 Y, q% a+ s( z2 s; y
  142.   strcpy(szFull,szFullPath);3 }, q% l: W1 m* m+ r' M7 q
  143.   token=strtok(szFull,"\\/");& G5 Q1 L3 X* {
  144.   inter=token;
    5 s3 P7 I9 j, o5 ?4 ]2 L7 H
  145.   while(token=strtok(NULL,"\\/"))
    " f4 E% h8 n1 }5 Z, f
  146.   {
    * {/ Z; J. B* ]5 }6 `
  147.     strcat(szPath,inter);
    % s. ]+ d, S( G1 t' I3 H+ G+ d
  148.     strcat(szPath,"\");
    ) D) g/ q6 [  {) f# b
  149.     inter=token;) Y) D5 f6 Y4 v8 a+ V/ z4 X# G0 v5 u$ [
  150.   }
    7 L: e# Q! k. G0 b% k9 [
  151.   return strlen(szPath);
    , I8 W! I7 u% k6 r' v; h2 T* |
  152. }
    ! M0 I$ E; Q. k: Z: a8 }, U

  153. & H* z  O- s! S4 C2 Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    . z  @4 T8 t0 U! @: T0 \
  155. {$ l0 q3 x) y; o% l+ h
  156.   DWORD attrib=GetFileAttributes(Target);* ]( R* ?! }4 d1 U7 L/ ~6 G
  157.   if(attrib!=-1)
    , @8 ]' e/ ^! d5 c
  158.   {& ?* C3 l7 V3 \, l  h2 ]
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ `2 v4 u) c2 r$ w: ^5 G1 O7 |
  160.     {
    % ?: x) E& O$ p( d7 y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 C  x* K- t, M, w, a3 ~) Y
  162.       SetFileAttributes(Target,attrib);
    0 M* I/ L9 y. p$ |! t5 M1 H
  163.     }
    5 s: I9 H8 N( a" T
  164.   }
    8 U2 ^: f; T# J& ~
  165.   CopyFile(Source,Target,Erase);5 B8 B8 G, D+ E: V+ v2 Q3 H
  166. }! L. m; i  h  z5 q: w. C

  167. . v1 x6 C: n+ X1 B' B- C% Q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 {  i* [9 p' V. o! G" Z
  169. {
    , ?% C7 t! j( H9 C4 d. O6 e- l3 V
  170.      FILE *fp;( C7 `" U, e/ @& \* X
  171.      char  szBuffer[8192];
    - ]( W' s. M1 I0 z" ~- s; Q; B
  172.   va_list  argptr;6 y" ~& u# `# I' u# O) s

  173. ) Q7 Z7 G2 r4 y6 T
  174.         va_start(argptr,message);
    ' _+ Z+ M7 h& }1 k0 u+ ?( M, v- s
  175.         vsprintf(szBuffer,message,argptr);
    , ?6 R9 E) E2 c
  176.         va_end(argptr);
      Q! |  w# j7 Q$ C7 p
  177.   fp=fopen(FileName,"a");' ^8 a+ M8 O: w$ X# J9 {
  178.   if(fp)" C; a) [) Y6 I* ]6 x5 c, W2 K
  179.   {
    5 f+ B7 I$ L0 V& a6 k9 U% Y
  180.     fprintf(fp,szBuffer);4 J' u1 |4 ~8 P2 l! m3 N% J/ c+ Z% q
  181.     fclose(fp);9 d  Y8 n" b. ^9 j1 `
  182.           _flushall();
    6 G* C( n; `9 S" t
  183.   }% W  }7 K0 u6 J& y/ w2 j* g
  184. }
    & f) K) D( Y, o. Q# r

  185. ( x! ]; b0 p1 f' ?
  186. BOOL CRevAppApp::Fclearf(char *FileName)& q$ T% ~0 ?& A2 Z2 b
  187. {& `6 u/ @9 Q/ O; ^
  188.      FILE *fp;
    " Y$ y% f6 D( j
  189.     DWORD  attrib;
    ! a) C: w9 e* G* B" |+ s3 z. v
  190.   attrib=GetFileAttributes(FileName);! I1 t8 [' f: e5 ~
  191.   if(attrib!=-1)
    # e4 Y. d- r% {& P' H
  192.   {. U0 d' D1 z& s: \/ g. D9 W2 J2 }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 ?' M5 [5 w8 W, x8 H1 h" b3 ?* g
  194.     if(!SetFileAttributes(FileName,attrib))$ Y5 R1 x1 ~% ~: n
  195.     {' G% b$ d5 S% g
  196.       return FALSE;
    % T; E0 m0 O1 G$ Q5 W1 H* P
  197.     }
    # S) t$ J  I5 _8 W7 y# C
  198.   }, d( j7 s1 ^6 G8 Q1 t
  199.   fp=fopen(FileName,"wb");; }: z! Z: M# Z/ A% j
  200.   if(fp)
    $ A2 a# w% \- y7 N3 m9 L9 W
  201.   {
    8 v6 `% e$ C8 l3 }5 {
  202.     fclose(fp);7 c* \' [7 s5 I
  203.   }
    * u' ]' o( {$ \. b) `7 q
  204.   return TRUE;
    0 j; P7 N( J+ U) y
  205. }! s: h/ {8 G) n& Z$ M
  206. ( r1 }9 B7 l& S; Y% Y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! ^" i: ?& a, F' J, ]. V, f
  208. {
    " ?' a; e& ^% T/ N
  209.   char filename[MAX_PATH];
    ' J$ w" q) w1 A% b/ z) T
  210.   LPUPDATEFILE file,olds;1 J7 c9 ]: P& ?9 `
  211.   std::map<int,CString>::iterator i;8 v9 _# O# H0 {$ O  Q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# `; H9 t: q* F+ n
  213.   std::list<CString>::iterator l;" y! k' Z- T, r
  214. 8 y3 u5 Z* n; C' p; T6 o
  215.   if(bFirstUpdate)' }  u0 k' i! S8 a9 ^; P
  216.   {7 W! @' y. q0 ^: Z3 I- s
  217.     dwCurrFile=0;; h/ D6 S9 T& k+ o; a4 W
  218.     bFirstUpdate=FALSE;
      E, q  Z! b) b! _% o5 W) d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). @( |9 o' U9 z
  220.     {
    $ T3 i2 w7 W, \: _
  221.       dwTotalFiles=UpdateLocal.size();
    - k  e# r0 a) t( w- N* W' f
  222.       dwDownLoaded=0;/ _. g* U0 S- K2 ?
  223.       bSilentStep=FALSE;5 \/ W8 u% ]$ }  g0 q* i
  224.       bCompressed=TRUE;
    4 H7 A' p! k, s
  225.       strExtLocal.Empty();- e1 z$ ~, m! d: V' Z
  226.       strFullName=(*i).second;
    6 n" e4 j' |) i, V8 @. f# i
  227.       dwProgramState=AP_CONNECT;' J) ^+ ?4 l$ S9 ~1 R
  228.       return TRUE;
    / G1 f( d* Z& H2 q5 p
  229.     }
      p! G/ a! d0 u& }: m
  230.   }/ a# G. d1 ?- p) V1 L' J
  231.   else if(bRestartUpdater==FALSE): ]7 b, J$ c2 a5 A" A0 ~
  232.   {4 O1 M" ~  g9 h6 i% z# g2 {
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())1 j% A# b/ {  q# Y
  234.     {& q! Q; b( j5 O
  235.       file=(*p).second;# u9 p7 ]7 C8 _  N
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 D+ N& w& `$ l
  237.       {. @% J; a9 J8 s( m/ a7 S- N, O
  238.         olds=(*p).second;; l& D# J7 Z0 g6 Q
  239.         olds->vers=file->vers;& i0 z) ?+ l/ Z
  240.       }; X9 s5 H- J* |: K+ D: a
  241.       else
    ( ~6 e* g2 _, R8 `" s# Z
  242.       {
    1 J- T) U* g* o3 T& k( Y- a
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & d, l; O3 l, p6 @3 h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) }1 k- K/ w: n1 C% W1 s& K0 z" L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 Y1 p, s) W/ ]$ M
  246.       }% t! e2 a( x* n' O. w) n4 K9 l0 P
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . `2 d! \" v) y+ ~" u
  248.       sprintf(filename,"(%s)",file->file);* @6 r5 j5 f. N6 W6 V/ P( J2 ^
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 O/ O3 p& G: a5 ?4 E
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 {/ t8 G0 [% p
  251.     }
    * Q$ A& t6 r+ r  x/ i, b/ }. N
  252.     dwCurrFile++;
    % ]; O" {4 ]! K9 k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 J) H3 H& R& h$ ?6 a
  254.     {
    3 W6 ]3 z' h5 r# e  b3 o
  255.       bSilentStep=FALSE;# ~0 C; B/ N$ W
  256.       bCompressed=TRUE;
    . q+ z' r4 }" s. I8 r
  257.       strExtLocal.Empty();4 C( j# F9 f, N8 T5 N& t9 J
  258.       strFullName=(*i).second;
    7 j" H" @) x* V! G- |0 |/ [5 a; k
  259.       dwProgramState=AP_CONNECT;3 Q0 d+ O8 I' O; W
  260.       return TRUE;9 v# c+ b$ C8 o1 q9 }
  261.     }2 t* t3 Y6 N) S) {* I3 b5 F8 V. r
  262.     if(!bRestartUpdater)
    9 U, H" z5 H3 A/ U
  263.     {
    : @$ p' k- E, B% q
  264.       int iCurrSize,iFileSize;
    * d- C# D9 w0 i& u8 W0 b7 n
  265.       iCurrSize=0;# k! o; t& D/ H' y' i: [" f
  266.       iFileSize=UpdateList2.size();
    0 V2 g4 a& _, ^# Y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & E" H, U: _# w; {9 L5 \9 o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");# G& \' E" \, a8 j! g
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + e3 o$ Z; }+ K' f6 `& m2 D. C
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ]) M' ^) |5 n  E! s
  271.       Fclearf(".\\update.dat");
    * ]7 Y6 G$ Z! o7 ]
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ! `; J, Z( t7 C1 V2 T- i7 @7 N
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : X2 q$ a/ L" @0 A0 f" \& f' x% J
  274.       {
    * {! D- n$ F  a+ r/ Z, x8 c, ~% a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) X9 o- u1 H. i
  276.         {
    6 |. \# }- N& a. E0 K( j
  277.           file=(*p).second;
    0 \& ~9 A8 r/ {: `) M; g3 h/ |4 d8 B
  278.           sprintf(filename,"(%s)",file->file);
    8 R4 u  r4 E; P; ~, t0 r! w0 C  S0 m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" y4 T$ l% h# H
  280.           iCurrSize++;8 E8 Z# V5 e# C2 V' u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 {7 x( V8 z  o) ~
  282.         }
    . @, Y4 M; Y5 L" I
  283.       }: N* B, X7 Q4 d: f5 S3 z
  284.       unlink(".\\update.txt");
    $ y) W0 t2 c; U" r0 K
  285.       unlink(".\\update.tmp");
    0 f9 R; q$ j. }& P8 L
  286.       Fclearf(".\\checkversion.dat");
    . U; F- I8 D1 j) Y" ?+ ~, h
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 F2 m) K# P  S+ U2 ^6 H
  288.       if(UpdateLocal.size())% L* r: X7 s: I0 a6 A( a
  289.       {
    0 O) h" X! S9 J/ P
  290.         UpdateLocal.clear();
    ; K/ u; L5 _3 t1 a5 B
  291.       }) @( J- k  C  N6 X9 \) o8 O1 N2 d
  292.       if(UpdateFile3.size())
    4 D- L* s0 T( L1 \$ J. U
  293.       {
    ) d+ U3 a  J- V( L( T
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 Q1 ?2 M4 T2 _$ y
  295.         {
    6 U2 T5 W+ H; K: I( j- P
  296.           file=(*p).second;
    0 r+ q$ _* f- }
  297.           free(file);
    1 }, B8 l5 g& z2 @% H$ R: J4 K
  298.         }3 f6 u$ Q4 |$ K# U
  299.         UpdateFile3.clear();
      X4 Y, L/ b( ?6 r
  300.         UpdateList3.clear();) ]0 D) r# F- i) i, L8 s+ a
  301.       }
    & S% q" C5 E5 ^3 h4 l
  302.       if(UpdateFile2.size())
    1 `8 G' ~+ A/ v. i& j$ c3 x) `4 ~
  303.       {
    4 K  N6 D/ p$ Q; X6 e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), x' A0 c4 G. m# R4 d8 N# t# l
  305.         {
    5 ~" @" L0 |( N* Z$ E" Z1 T
  306.           file=(*p).second;
    ( V5 Y4 k' w$ _
  307.           free(file);
    # ~3 A. Y+ S- M0 L. d5 u
  308.         }
    % Z$ I, P" s1 H
  309.         UpdateFile2.clear();
    * _3 @  v( a+ H" e( b4 b
  310.         UpdateList2.clear();% T) S. Y5 c) W% E3 R
  311.       }
    - ^" R! w8 H, N/ Q7 Y
  312.       if(UpdateFile1.size())
    3 b1 B; b  a- J. Y
  313.       {7 V& k) o4 A% B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). G* x" C5 q: k2 \( E
  315.         {( B$ ?2 n- \- ?$ A
  316.           file=(*p).second;' M0 J) `! {( S! Y: r
  317.           free(file);$ U0 X  B# a5 J6 h" m3 N
  318.         }
    # w0 i4 z3 h9 D3 V
  319.         UpdateFile1.clear();$ z7 z! D+ J) f
  320.         UpdateList1.clear();7 I8 ]$ r& s5 p% s
  321.       }6 @2 t0 @, @) u- y6 D5 k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 l# k0 o# y9 `. k/ N* s
  323.     }
    3 j# Y$ h* G) C
  324.   }
    8 ]3 A* l" ]* B: w
  325.   return FALSE;. D3 X# K" W- w$ x5 g- c2 e4 H1 {! u
  326. }7 H+ Q, H' J0 ?

  327. # y* ^/ u. a; a; l& Q: w
  328. void CRevAppApp::ClearAll(void)
    ' I# v! G8 g8 B! j) U0 @6 Y
  329. {6 x( ^' q6 U, \+ o! c
  330.   LPUPDATEFILE file;
    " x2 ?4 Q  a8 ~* ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / n/ ?& ^0 B& j: Q* q  j, K

  332. 0 s4 I$ g% O+ h# Z, t1 n# Q) v5 E
  333.   if(UpdateLocal.size())
    8 _; P, W# B2 M
  334.   {
    1 h; ~5 t  l0 {
  335.     UpdateLocal.clear();
    % C+ X$ r( S6 i
  336.   }
    1 L) ^" V4 I/ v( ]  A# U9 ^8 q+ G
  337.   if(UpdateFile3.size())
    5 ~# f5 m0 k+ n9 a/ l5 s! I- ^. j& x
  338.   {; ]1 z6 I* B- L# D) m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + E1 n' \( R" C2 F
  340.     {
    $ D0 T# F5 O9 O
  341.       file=(*p).second;6 p% }( F. J. z/ k% I) @0 X8 {, D
  342.       free(file);; O& H! z  c/ e
  343.     }
    " m# m! _$ a! y* O
  344.     UpdateFile3.clear();) A, M& |, n" R, L& l- }
  345.     UpdateList3.clear();
    ( g) k( t- A% P+ U0 n5 H
  346.   }
    4 [5 n# i2 F" X* Z: V3 l
  347.   if(UpdateFile2.size())
      [9 ~# A/ j. b: I
  348.   {% [# T2 W$ S, D7 g% W
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)( ^, l* h: Y0 H( ^0 X
  350.     {, Y' U4 P. ^9 F1 d) Q( E3 p
  351.       file=(*p).second;
    0 O- f4 f8 O; N$ }3 O
  352.       free(file);' j* v3 O/ M. ^9 z# Z+ T
  353.     }
    ( D' b+ U& Z7 @* \
  354.     UpdateFile2.clear();3 m5 j3 s  E( T; V' I+ Y& ]4 Y
  355.     UpdateList2.clear();
    , B5 O! @2 B2 M4 Q
  356.   }
    2 s6 U1 b$ W# Z8 J
  357.   if(UpdateFile1.size())
    8 n8 W1 W, \) A) r$ o( [
  358.   {5 ^/ o! x8 \+ K/ d$ z4 ]
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 P" ?. z( V" }' z# }3 J
  360.     {
    8 w4 w6 i2 O( ~9 c
  361.       file=(*p).second;
    ) W" h) J( i: ]
  362.       free(file);
    + X. g& x" _3 E9 l; k* S+ a4 p
  363.     }0 J7 c! N6 ?7 }! `1 |4 u
  364.     UpdateFile1.clear();$ m$ u  }4 }7 r4 D3 ~  I
  365.     UpdateList1.clear();
    5 a! Q, q' E& T, m
  366.   }8 b7 n# a* D# \( Z6 }& R# b
  367. }  7 q) ?, L9 |! D' n3 J/ T( l7 K# a
  368.   2 x/ @* ~" S  T$ P, g
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , y7 U8 M6 }3 _* m
  370. {
    " r0 A0 ]3 U1 d2 ^
  371.   int c;, z  b6 H# g( g1 R( w
  372.   LPUPDATEFILE file1,file2;
    ( C+ M8 b8 r8 r" F& O& G. N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # |4 L/ C, l: U5 [" W3 B
  374.   std::list<CString>::iterator l;
    7 x7 S* f4 X9 ?2 m9 q

  375. 2 v% D" K* {( V. U
  376.   UpdateLocal.clear();3 r! ]8 k0 q2 f3 u& x; s2 \
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 A8 y$ ?0 {" p; ?! d  t& y0 n# M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) h% j* {7 G- r0 @' X; Y7 n  {
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    , b2 B2 ?. e# W9 G% G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);! ]4 R& o% `% X" T, T  h
  381.   if(UpdateFile3.size())
    " ]1 o3 j" y# x5 q- r% N5 _
  382.   {% m3 W8 {3 n& r" {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - G2 u* z2 L) ?5 l0 C
  384.     {! y3 @8 Z0 W/ T1 f0 O5 b3 g5 D
  385.       file2=(LPUPDATEFILE)(*i).second;0 k( p9 B" e+ y. o& C% J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; H4 y, \- b. C) B
  387.       {
    1 C& X5 Y: k; c) E2 r- P
  388.         file1=(LPUPDATEFILE)(*p).second;
    ; {& i% X2 \$ _$ K+ L" H- Q
  389.         file1->vers=file2->vers;, Q, U  B/ Z( d7 b: S5 [9 s
  390.       }6 R) T$ k& `9 _1 J9 U# x5 C, I
  391.       else
    7 T- A( }) ]0 e6 r9 d
  392.       {0 K- J% l8 v8 K$ E; a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 c: T! z6 o3 c% p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));9 J1 F% ?% I; f  b
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));- i* Z. {( D, e5 G
  396.       }
    / I- \9 T0 d- |" `! f5 k3 F8 r* x
  397.     }
    9 n4 b9 B+ D( u- |3 X& v" ?  E' k
  398.   }. Z. X( l9 @. F: L9 d0 A1 @- G
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - Y2 o. {7 F2 M& Q& k" H
  400.   {. ]0 {8 K8 P6 \* o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( r5 w( e- Z  ?- q8 F& O
  402.     {9 d1 S' }" X; |" f; `
  403.       file2=(LPUPDATEFILE)(*i).second;
    / @0 |1 y/ N0 H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ X' Q, r6 l5 x. O5 k
  405.       {
    % ^. f, D* H  j+ |
  406.         file1=(LPUPDATEFILE)(*p).second;
    2 S& v9 z1 l( w/ z1 ?8 |
  407.         if(file1->vers!=file2->vers)" }/ [" Y3 J0 R+ s. U" [
  408.         {# O% b( u+ L% U% N1 d& \# S
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! }: S4 l& v& l! ]3 U4 r( O
  410.           c++;
    & a; n, {4 H& N
  411.         }# W  W, v) O1 _8 G1 _
  412.       }9 w* O+ t+ {' f
  413.       else6 ~5 x3 q+ r9 a: J$ z( {. D
  414.       {0 h$ L- j8 @$ G
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! }3 P0 u5 B0 |& T
  416.         c++;
    1 R, R3 |( D- Y7 g7 c
  417.       }7 E* f3 I/ N3 w# \% P2 l
  418.     }) w5 ~" P; [- ]% B0 R
  419.   }
    + R& x# f4 e4 V  a! P. W
  420.   unlink(".\\DownLoad\\update.txt");  U' W+ b+ V4 i
  421.   if(UpdateLocal.size()) return TRUE;
    7 n2 T( d* E  i$ _/ y
  422.   else                   return FALSE;# t1 X9 G" ]+ p9 r) P4 d' w
  423. }/ H# m% d; s( j$ ^0 ^2 Q
  424. " S/ J  z" P" _9 T
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"8 E# y; c0 K% b/ c3 X* b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) ^7 l! g$ B8 f5 x" b& g* |( Y& o# P: T

  427. , P4 e. C% L5 @$ u' {5 ?' `7 `4 B6 L
  428.   \# {; e( Q$ ]2 z6 e/ c3 k
  429. & |! [0 x9 Z' b& @4 R
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  x# E* Q$ F* T0 @( r; x. ^" J
  431. {5 E8 M. a( C) n3 y+ @% Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( ~" ]. r/ Z5 \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 ?- L. R5 U, u! J8 c# `' U& `
  434.   {4 R% m7 O- J! O' ], Y
  435.     char szLanguage[50];
    ' k5 X6 H5 K0 M7 z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 Y4 N0 x( E: [3 Q1 t: \: P7 L, c
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 Z! M$ V( Y' ^# Y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 \) _5 k& S+ ^$ G$ Y+ D+ R- n
  439.     else                                   m_iLanguage=ENGLISH;$ D1 G8 r' i) N3 j  |' P6 a
  440.     char szRegister[100];
    1 k7 U* E/ \& X& U8 w( F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 p& A5 B3 Z' l% l- O
  442.     strRegsName=szRegister;- |% ^8 C" v7 z( y7 t4 x$ o  J2 n
  443.     char szPatchURL[100];+ j4 \/ W4 x7 H" \( z* _/ s& [- x
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " M  l. o% v. D
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) x+ C. i9 [7 _. f8 K- T( @
  446.   }
    ( c7 g3 V) n+ a$ t  V9 j* G
  447.   else
    8 I1 u+ b5 O5 d
  448.   {
    ! g+ G$ h' Z' H
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # q& n, `7 M/ W5 e. \
  450.     strRegsName=DEFAULT_REG_URL;
    . a# F* A8 O! i  B
  451.   }9 Z) C( X4 j$ D1 a5 ]. R5 A
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 L; }" X5 g. B+ R- R
  453.   {
    * d. Y0 j8 `( \6 h. m+ D
  454.     char szIP[50];: A( d  |, }+ i3 o: t
  455.     char szDIR[300];0 ?- C6 O5 C6 q8 J+ l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): ?  z! N) t& W* o" k$ i# W
  457.     {- F/ n; z; j: ]/ K' e. f$ Q6 |7 N
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    1 R" l* `7 W. j4 d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / L$ V6 j" ?, }  F% I( b( {
  460.       strHostName=szIP;
    - y' v& b. V  |" [4 u. H- Q
  461.       strHostPath.Format("/%s",szDIR);
    + d3 R/ ~) r. l0 F# a  F
  462.     }
    ; D  _' e& X" B1 D, s4 x+ c2 b
  463.     else6 C/ \2 h0 `3 g7 H
  464.     {
    , ]( [$ ^! e, H2 S
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; M) |1 y) d) n7 g6 f, k
  466.       {" }  t/ r) q0 Y+ i
  467.         char szLanguage[50];
    8 J% V: d7 ?$ N: S; W% m4 R- r
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' |( ?% C  o! B4 O: F  ?7 W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 L/ J; [" g/ S7 w4 O2 M9 f* q/ \  C) o
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 F& O1 }( c* \
  471.         else                                   m_iLanguage=ENGLISH;/ h2 `0 ~6 a8 R) c) N/ x
  472.         char szRegister[100];; K' l4 ~! u; }" ?$ b
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, n# j9 V3 c- w) z4 r- a3 E( T9 }
  474.         strRegsName=szRegister;
    9 c# B2 M% b( r+ {6 N2 i7 |2 Z
  475.         char szPatchURL[100];1 D, }) a7 o9 }3 }: k% i6 C
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 w$ B+ [6 L1 f# s0 Q7 l
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 r/ F; P/ p1 R1 y( k; s
  478.       }, K8 I8 {% n4 f7 }& t2 i2 f
  479.       else8 a! O' u% |2 ]) p( e% x
  480.       {
    1 {: v  n( `! R. ?$ a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ R" X/ u) s* x. u+ @, e/ T
  482.         strRegsName=DEFAULT_REG_URL;
    0 Y3 U& ~. _4 Y/ k5 L) I. `
  483.       }
    ; O3 C8 i; }+ |' ~# J0 C
  484.     }
    8 E# n8 D2 b2 }$ n& O+ ^
  485.   }
    5 l3 ?1 h( P6 }6 H6 ~& H1 X  {
  486.   return true;" K9 H5 h0 P9 |6 t# i
  487. }6 u9 u( N1 @  e" w6 `( j+ {3 o
  488. % T; a$ p6 l% J8 d
  489. #include ".\ZLib\unzip.h"4 k. o& @' E2 q" S" m; K
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 S& _# o& e% K6 X
  491. /////////////////////////////////////////////////////////////////////////////
    5 v, ^3 R& Q) g/ z2 N: ?8 ]- c
  492. // CRevAppApp initialization- E5 g# u% |6 V

  493. ( a; K4 ?- d' a& x6 I' H( N
  494. BOOL CRevAppApp::InitInstance()
    ; }/ d+ g( d, Z5 c
  495. {
    ( M$ Z7 {: T" |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 _+ L' N( \% D- N
  497. 8 Z. T7 i3 b5 E
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; E+ @3 m8 t% R6 {$ _
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! A) i' f* a% Z. B5 ^0 ?
  500.   {
    % N0 p2 R  }' ]4 g; ^$ F4 C) I
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
      R8 r8 t! d% F0 p7 I) A; }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);- J2 j: N5 F4 k; d4 x4 o1 e  x
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    $ G+ `5 t# `3 h
  504.     {
    - O2 \( E+ o6 f0 \
  505.       strcpy(szPath,szPathTarget);( u2 C7 C# M* O3 s% U% f! C
  506.       SetCurrentDirectory(szPath);
    - B5 A7 u3 d- x" l* j. G1 \
  507.     }1 t+ J) C' t% ^. n' z
  508.   }
    2 j; R% Y, L" _$ s9 a4 P
  509. #ifdef _DEBUG
    7 q* i4 H! Y* M- L  s4 A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 W4 Z6 ~! j$ c1 c" P- X7 [% C
  511. #else6 U' v- b: S9 H. Q+ E( T
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' m1 u+ x8 [( t1 Z, D
  513. #endif3 `$ Q& s5 p1 d/ d. n0 a
  514.   {& G3 i9 ~) J: x' n' K* c
  515.     char tempFileName[MAX_PATH];
    4 ^7 O7 O$ B  t. b; u. v
  516.     strcpy(tempFileName,szPathSource);3 d- h1 ?1 E2 C: t" k" p) @4 u
  517.     tempFileName[strlen(szPathSource)-12]=0;' f& z7 R# c5 |: c' ^$ |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ x) N& p/ C7 F6 I# b
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);  p1 ~/ Q7 w5 m( \/ _$ F' L7 q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# I/ W7 a7 h4 J" e4 o# F
  521.     return TRUE;
    2 Y+ g4 H* R- Z, }" ]# B8 V4 I% R
  522.   }
    & `' \+ L0 G2 p* p. s4 I* J' `
  523.   // Nuke 0118: Delete run.exe  A1 I0 l( Y) \- H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );& C& i* `' L. g: z, x
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; I$ d3 A8 J9 B* v$ P
  526.   if(!ReadCfgFile("Config.ini")); ]) l, Y4 Y+ i7 g- w% m
  527.   {
    5 R: p" Z- p) _9 q& S, o/ `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ' ?3 J8 n0 \. h" C: \
  529.     return TRUE;
    " h# i  _) q3 _' O) M; {9 Z+ f! p- q3 q
  530.   }! L% i& O6 }4 ~
  531.   HANDLE mutex;8 _* j# S2 X1 W9 P' x
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  x/ S  K, v7 W* I
  533.   {% i; H3 {  B, N* J9 O5 E: A; Z! |
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 U& @! b! S- A0 J  A( V! {
  535.     {
    % K/ x8 d; L/ A+ h% ?$ o7 O
  536.       CloseHandle(mutex);" F5 |2 o/ Z! q( H+ H/ z& C
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 n5 \- ^+ b9 |" h( _
  538.       return TRUE;* W" |, |, \4 c" k( ?
  539.     }
    / o' }# U2 k* U. r* T5 o
  540.   }  # q1 K; E$ x) o) J
  541.   CloseHandle(mutex);
    $ Y' p' `7 _) k% J5 X9 L& ^; X5 F
  542. 6 z9 |9 B0 N" m" Y. d
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 P6 Q/ s+ r& c+ |2 o; G, }# r
  544. 8 l9 D& f; r+ ~4 a  k% f+ }
  545.         AfxEnableControlContainer();
    ( l9 P( t$ p: |: S. N9 j3 m
  546. 0 E1 o# h. d" s
  547.   bCanUpdate=FALSE;7 i1 ~5 V. `5 m, Y0 r6 H
  548.   dwStartUpSteps=1;
    9 B* B' ^$ C! n% p: T0 u
  549.   dwProgramState=AP_NOTHING;
    ( W$ _# L9 W$ S8 p- ]. o8 e$ d( `6 Y
  550. ( P5 w9 n7 f; h; Q& @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & j# D, ~8 g8 ?+ x2 |, t
  552. 4 w1 z" Z+ p; d. }
  553.         // Standard initialization, `% l5 z" J5 T4 H6 y+ d4 [' ]; J
  554.         // If you are not using these features and wish to reduce the size
    2 B! c( X" _  E9 N$ J
  555.         //  of your final executable, you should remove from the following6 Y' Z4 ~( z2 ~, }; W3 _0 Z
  556.         //  the specific initialization routines you do not need.( ^- b0 ^+ P1 f3 }9 @

  557. - V$ H* d+ I+ ^
  558. #ifdef _AFXDLL: r0 \4 }* _7 ?; {
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    1 e# o5 E- K/ \9 U. D- O( W" K
  560. #else
    9 H! _. t& K4 I- b
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    + V- K8 ?# G  }6 s, r9 s
  562. #endif- B+ P3 [5 q1 {0 F( a

  563. 3 _! {5 s8 K  N! ~, h; ?
  564.   dlg=new CRevAppDlg;
    0 y( a: w# H1 ~4 v% S
  565.   dlg->Create(IDD_REVAPP_DIALOG);' r1 R1 M, J9 L; X3 z+ t- s) `
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % z9 I" Z2 m' D8 S7 X6 \% y- P9 N
  567.   m_pMainWnd=dlg;' a+ Y8 v1 B. U! _+ U! j

  568. 4 u  a! p7 A; r# a: c9 p
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ M- z, ^% h( V. z7 V
  570. / v3 F0 z# F; C2 ^# q
  571. //  GdiplusStartupInput gdiplusStartupInput;
    , A( Q- U: C* b" |& @% v
  572. //  ULONG_PTR gdiplusToken;
    ' \' O9 {( p0 y1 S, B1 m, {
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);6 T9 L( }/ Q+ x2 g$ W$ f6 _( i
  574. ! `/ S8 S( n; u$ I+ g6 x
  575. //        CRevAppDlg dlg;% e" \8 N- t- j- l0 _& i8 b
  576. //        int nResponse = dlg.DoModal();* b+ Q( S) i$ |  O6 E) v# {
  577. //        if (nResponse == IDOK)* u! o& I/ {5 w$ R8 @5 t' W
  578. //        {, z1 @; p" g% I- J  c8 H" f% [* s
  579. //                // TODO: Place code here to handle when the dialog is2 G( p: f3 K( z$ A' L" a  E
  580. //                //  dismissed with OK1 W5 e% C# `, K7 v4 N- g
  581. //        }
    ' P+ @7 p6 H( a6 z6 P
  582. //        else if (nResponse == IDCANCEL)9 T# M" h% l+ X$ j1 l
  583. //        {
    + `: o& F. G. g* }1 R
  584. //                // TODO: Place code here to handle when the dialog is
    " u) b, c7 N( I; ?5 R; e, _
  585. //                //  dismissed with Cancel
    9 b3 b0 S# c$ L7 D6 f
  586. //        }% {" |% p6 k4 q) ^' x' Z
  587.   h. k  _, v6 W4 k: a/ g0 l+ K1 H
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : Z0 T8 a" O' r4 l" \3 i9 I1 j
  589.         //  application, rather than start the application's message pump.
    : \4 O$ ~5 a6 g3 o
  590.         return TRUE;
    - G5 c$ H" @3 a: J4 v2 \' |0 |( G
  591. }7 K& ~( [/ m3 b. i, q7 C1 Z5 Q

  592. $ L. \8 L- P+ z6 i0 @
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * z6 [1 U* N5 n: }9 w& K" Y
  594. {
    $ W+ w1 v" C* P* T0 Z9 k" s
  595.   int i;# K, m. d9 \& S% S. q) }( ?
  596.   char *szRet;9 B. d- e' i" C, c  s4 A3 E. ~
  597. ( C( M7 Z* g' P) r9 H* W! ?" A( q
  598.   if(pSource) { itoken=0; sztoken=pSource; }# j7 c* W" x$ d* E7 j
  599.   if(sztoken)
    / t: q/ Y, E* ?5 L* x; ]
  600.   {
    ' }* W) |5 G& v; r: o3 E( a. q
  601.     szRet=&sztoken[itoken];
    " ^, d( C6 O9 c0 O! t; N6 {- v% T
  602.     while(sztoken[itoken])
    & O' X8 \- H3 |1 r) V8 N' Y
  603.     {& K- l0 m  q# W+ E  \0 [8 Q& e' F
  604.       for(i=0;i<(int)strlen(token);i++)% m! }4 d8 t* R; F' n& O3 A1 t9 S
  605.       {& z. P" L$ Q/ g+ E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' _. {( o. t9 p, Q% w, r6 B
  607.         {
    6 e( ^7 C" Q) J/ b' y
  608.           sztoken[itoken++]=0;
    " d, ~$ O5 G7 }' D$ d# Z0 J
  609.           sztoken[itoken++]=0;
    3 `, g8 u: M2 P1 l2 H7 \. `
  610.           return szRet;
    & U+ M& o/ O  g( V8 O; \( l
  611.         }
    ! }6 {3 \5 ^5 `9 y' d7 J
  612.       }
    % R  \- g" f2 W) j8 C8 Z. b0 A  S( t
  613.       itoken++;% {* }% x1 q$ V
  614.     }% {- E- E6 ~2 j9 J
  615.   }
    . g. I* u1 x# T: F2 C' u9 u* p
  616.   return NULL;
    . d) e- \' Y! H
  617. }
    - e4 p6 Z) p) ]7 X+ h& A" x6 n

  618. 3 p7 i8 {4 _, f! Y; X. `3 F9 S3 {
  619. void ProcessProc(long Total,long Current)- s+ l+ z# T: I6 F, s6 K, O
  620. {
    7 q! t' {: Q4 e5 n2 z5 f
  621.         MSG msg;
    0 L) ?; b8 C$ x: z9 o, w  E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);  y+ L! A& ]0 {# j5 b+ m+ L
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      Q* K& r: L2 P( H7 d) {, s
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ F8 x' i/ b9 R
  625.         {
    5 a: A7 p5 b7 [6 S( p0 y# A- ^/ P
  626.                 if(!GetMessage(&msg,NULL,0,0))2 G) l9 M3 _) l  j# u# `8 b
  627.                 {8 g$ @& @! u3 p: N! C
  628.                         return;
    1 w- G9 I+ |4 o$ K7 W
  629.                 }/ b. o. W: Q  U/ Z5 B
  630.                 TranslateMessage(&msg);
    8 I5 O! n  r% q
  631.                 DispatchMessage(&msg);
    " \2 N* |, Q% Q5 b" E9 t
  632.         }       
    5 e2 P) T3 C. s" }( E2 S) o
  633. }
    6 q' \: t( F% |6 B. p8 O* |5 ~

  634. / G9 i! Y/ q; ]; y/ e! j# a
  635. BOOL bFirstChar=TRUE;
    - q! h* z9 x8 J
  636. $ @- M" z- v9 b, {- n+ X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - O' R" B, T# c! t
  638. {8 m& q5 U1 N' n- H* ^& k+ G
  639.         // TODO: Add your specialized code here and/or call the base class8 \' `6 e( H9 E! \
  640.   switch(dwProgramState)
    - k; J7 M1 z7 g( B8 n$ i& W
  641.   {
    ; d. E! T5 X- Y& x- S7 q
  642.   case AP_NOTHING:9 y/ \/ z1 S" y) C
  643.     switch(dwStartUpSteps)4 ?) `( ]& @2 v% z8 s' V
  644.     {
    ) ?2 A# B  j  D% X" h
  645.     case 1:
      w/ k9 ^4 v" T! o0 L; A- ]' l) V
  646.       {
    . z; _& C. d3 G1 g8 ?6 f
  647.         int i;  J/ g, B* b/ r# e5 K
  648.         CDC *pCDC=dlg->GetDC();$ h5 u6 [: j$ n/ J* o# \% ]; I
  649.         HDC hdcwnd=pCDC->m_hDC;
    " y+ u& r' R; x7 n" @; x" u$ _" ~
  650. //        Graphics graphics(hdcwnd);- n2 `3 r3 L8 B/ E
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( n# o. |) }; K; B" W
  652. //        INT iWidth=bitmap.GetWidth();' r( r9 v) f# N1 B
  653. //        INT iHeight=bitmap.GetHeight();! _9 n8 e: }* U( M
  654. //        Color color,colorTemp;
    4 o. m0 {; _/ ~1 ~$ |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    - n# Q: e: l8 A8 m9 D
  656. //        {
    ( t$ f( t9 s( M5 D  q' I
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# u3 V% T, q, P7 a  O7 ^7 f( l
  658. //          {
    % t' Q" E* y# U: r/ {4 X& u/ N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 L* S; Y0 n: R* c& ~; n# {/ o
  660. //            colorTemp.SetValue(color.MakeARGB(
    9 |: W3 Z& ^& C7 ~0 ~8 E! {8 W
  661. //              (BYTE)(255*iColumn/iWidth),
    ( K( J1 o0 L/ y" f
  662. //              color.GetRed(),: e0 j) U6 g3 k7 x0 R
  663. //              color.GetGreen(),
    5 ^1 n. m  s- ~$ F6 h# }2 n# Q
  664. //              color.GetBlue()));' O, ?! G2 t  r, N( a8 n* j
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # v) y$ Q' R& b
  666. //          }, }& l* K4 }7 u- }* V- _9 x
  667. //        }
    0 G  C  I, u" I7 L2 Z) ?6 v+ f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 i& C, \. [1 G- H  V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 g5 o' e' i3 ^8 ~
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( o( W/ D/ E! A. f) E2 A7 o5 Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 j1 J( Z9 y; H, j6 M: c/ U
  672.         for(i=0;i<240;i+=8)
    9 m& w; u% p( M; a: o, L/ `5 t
  673.         {0 N0 b9 _1 W" R/ x- b
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 {7 y4 S6 E! ]- p; i9 t
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);7 D2 i1 K) _, C% `3 b  Z9 y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) `" g/ y, U  g8 f" i) _) r
  677.           Sleep(33);% k; A: G% \- {6 H# O/ a. Y. }
  678.         }. j* G7 M8 E4 R" p- O6 T
  679.         Sleep(1000);) g+ }  g5 u5 a0 ~: [4 |; q
  680.         for(i=240;i>0;i-=8)3 u" L+ x# O  v! J/ ~1 V3 A! W! s
  681.         {) n  p/ W5 g# T
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 B) [; f  v* E& @/ V: J0 r! {
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    8 X# l" e& e, F: Y# J- o* ^; B/ m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 w+ j  u* W6 P* d; l
  685.           Sleep(33);
    $ \0 t: u, ?4 c. f& J& ?
  686.         }
    6 n& l. i, }; @" ]7 P
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    . ~% j) m- Z/ H6 H+ Z
  688.         dlg->ReleaseDC(pCDC);
    . k% z* `& |5 Q0 y
  689.         DeleteDC(hdctar);
    ; p7 S; c1 s; @, W7 K- t/ ~2 g
  690.         DeleteDC(hdcsrc);- b7 ]: g+ y( d# \- r
  691.         DeleteDC(hdcorg);+ y7 J: r4 }* G8 b0 ]
  692.       }
    ( @4 B* Y. M/ r
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) x; F/ ]- |' @4 D+ S) G2 e
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 c# A7 K1 x; R) F* t1 c! L
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
      V  }( M) A  O, b3 h5 ]
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 y# G' F+ H8 |2 w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% d: Y% Q9 u1 T4 O. d
  698.       if(!Dn.Connected())
    : Y' I' j# P0 B  O  [7 G7 C
  699.       {
    1 X" b, u: i; L) \( R- I
  700.         dwTotalFiles=1;
    & C6 N' F$ M2 D% T: R
  701.         dwDownLoaded=0;8 x) ~! }0 @# `; X0 Y
  702.         bSilentStep=TRUE;5 t) X; R7 a# N
  703.         bCompressed=FALSE;
    8 {1 [. e/ j, q2 K. E+ R; r; ~
  704.         strExtLocal.Empty();0 j, F3 }, t& F) o; n# g
  705.         strFullName="readme.txt";
    " }- a3 j- X4 q5 g! ~
  706.         dwProgramState=AP_CONNECT;
    7 A; v' k5 e: q( E
  707.       }
    ' g( i: q9 b& v: \* ^
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. l4 P; `4 W" ?" u, I6 V8 H1 D
  709.       dwStartUpSteps=2;
    , O9 X8 V) b7 t' v6 t
  710.       break;
    7 ^6 _; z6 r# n& V
  711.     case 2:
    - _% R5 h7 S, v$ c
  712.       {
    3 u7 }* W, {% q" H
  713.         int iEOF;
    : d6 \1 H4 R* ^0 a0 d
  714.         FILE *fp;
    5 E# u5 G$ b. E0 Y5 B8 m% ^
  715.         char szString[512];" D( B6 f" D# q9 v
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");$ [) ~8 U7 q: P) O5 m. R: m3 v8 v
  717.         if(fp)
    . Z7 ]+ Q( ?7 ?, n9 s
  718.         {
    9 C# U$ {+ `0 i1 I
  719.           do, ~' z, W- u' ^1 A; W- |
  720.           {6 M) c' k. U; \6 G8 M
  721.             iEOF=fscanf(fp,"%s",szString);
    * H" t* Y. [0 P. M  n& i
  722.             if(strlen(szString))* C/ }9 L  z8 m) `8 s; y% \7 O& r
  723.             {
    " T/ F% U4 G! ^. M
  724.               if(bFirstChar)
    ' J5 R" z- l7 X; @+ N: K
  725.               {
    9 n5 D# Z6 l4 k  r: R
  726.                 bFirstChar=FALSE;; w" \5 Q0 ?* [3 @
  727.                 bConnectIsBig5=FALSE;
    9 |+ {3 A1 c. V2 M' H. M1 e, ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  Z0 ]# c% a3 i) _; h) g9 q
  729.               }) `  a  j+ R3 Q1 M  _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 [" i% G; N5 u) G- d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( w- a8 F0 a' }4 c! p. }* m0 C
  732.               dlg->m_ListText.AddString(szString);: a3 [( L/ S/ _' o; }  a9 P9 M# m6 {" @
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! n, |  d. O7 ~! s- k
  734.               *szString=0;# h5 z- u5 {1 v6 {0 }! |
  735.             }
    , p$ i' a& T  C3 l* s# B! n! M
  736.           } while(iEOF!=EOF);7 T4 X( x/ t" ]
  737.           fclose(fp);
    7 w' T0 w  |3 C. V0 \9 o
  738.           unlink(".\\DownLoad\\readme.txt");
    8 k; B0 G$ O8 x6 _1 _2 D5 r- Z& K: `
  739.           dwStartUpSteps=3;
    ' ?( O2 G+ N4 e2 `
  740.         }8 V! [: _- U5 g: p0 d+ i
  741.       }
    : y  b6 g5 x- Q9 ?
  742.       break;5 C2 Q6 X: a. w) N
  743.     case 3:
    6 ^4 N9 `2 m; F! y" o- h! K2 e: i
  744.       if(!Dn.Connected())
    % `+ L1 ^( R( I( ]7 n
  745.       {
    3 v6 p* i( N5 Q, x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 A: z9 Y; }6 p) u: K  c0 ?
  747.         dwTotalFiles=1;6 E3 E. w" {' J
  748.         dwDownLoaded=0;
    2 i. u9 y9 S- G
  749.         bSilentStep=TRUE;1 H- F& R4 D" W+ r: j3 t
  750.         bCompressed=FALSE;/ G. R, O# G2 U% l$ t" Y; ]; l
  751.         strExtLocal.Empty();
    4 i* l( N' D9 i
  752.         strFullName="checkversion.txt";
    ' m- _, k$ \" D1 ?; R: H6 T
  753.         dwProgramState=AP_CONNECT;* h# O3 B; G$ @8 F+ `+ i9 ?9 z
  754.       }
    7 @1 f! n, F) n* c2 f, W
  755.       dwStartUpSteps=4;7 O2 W& s9 R: n& [3 x  |
  756.       break;
    : j+ w# r; |3 P
  757.     case 4:8 R/ U- J- C; V$ \
  758.       {
    # ^! ]0 O3 A1 y1 S  L
  759.         FILE *fp;9 i* c* h/ Q3 N. ]2 q
  760.         char szString1[128];
    ( W( _% B. Z( r/ h9 T
  761.         char szString2[128];5 r+ Y1 d% l; q' ^# }7 e
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , z, i! u0 q6 `( @. r; Z
  763.         if(fp)" Q/ [2 I: `. ~9 D! X
  764.         {; M! u# K6 S# F' ]4 t8 ?
  765.           fscanf(fp,"%s",szString1);9 m1 d3 `* `' S/ u* H! q- E' y( Q+ |
  766.           fclose(fp);* V; E& f- }5 v
  767.           fCheckVersion=atof(szString1);
    % Z# ?" w4 v8 ~0 D: F( S* d
  768.           fp=fopen(".\\checkversion.dat","r");0 _2 j4 V4 K- H+ J
  769.           if(fp)
    * J" d  }( n- O7 @" z0 C8 Z0 d
  770.           {
    % H4 {' g9 n( G) q
  771.             fscanf(fp,"%s",szString2);1 |" A7 }5 K! ~5 n  y( b
  772.             fclose(fp);" `% S7 U9 j* C# e9 I: @
  773.             if(atof(szString1)!=atof(szString2))
    & j! {+ ^& d6 g) z
  774.             {0 I% `' D& C. h9 F6 o* v3 W3 l" a9 B6 Y
  775.               if(!Dn.Connected())
    # l4 N, y( l% Y+ O6 U5 K1 r
  776.               {
    " o8 G: ?# ~* T
  777.                 bFirstUpdate=TRUE;
    3 a7 _: u! B8 C& t7 y& H  P! @' ]
  778.                 dwTotalFiles=1;( m5 w+ A! n  B. x; Y
  779.                 dwDownLoaded=0;: q4 ~# `7 K: F$ Y( ]
  780.                 bSilentStep=FALSE;; f" S7 u) X4 z# S$ X
  781.                 bCompressed=TRUE;1 v- i) ]: K. q( a( A/ v
  782.                 strExtLocal=".\\DownLoad\";: F* ^6 v5 l) p- g
  783.                 strFullName="update.txt";
    5 W, e* h; w9 U1 i
  784.                 dwProgramState=AP_CONNECT;
    & E) L+ Z* q! L! U4 E' K
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 e$ A  A! o8 v0 D# G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 u, O+ Q  J' l0 z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# O1 ]7 l) Q' Z" R4 H

  788. # ^2 d) F" y! K. W; ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + E# h( g% G8 L) N  `  H: y$ z
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 F1 {7 H1 C6 u2 ]9 r- c* o6 {$ O
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). G& u3 M/ R! ?+ O* b0 C: p
  792.                 {0 t( l4 p! C, J- M
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    + |6 n( ]& C! j6 }6 e
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. J  a- `% [0 i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");  O4 M1 }! T' ~7 p! |8 a9 S) A
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, M5 b% S4 _; O- Y
  797. 4 u( `  J3 b7 r; M) \4 G+ c3 |
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # g  p* B- P# C( i; m+ u7 l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - D# q: p% l6 u  y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! M/ R' Q& Y+ `& I
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' c/ V$ ^: y* |
  802.                 }
      x8 Z! y; J/ S7 S
  803.                 dwStartUpSteps=5;
    . T% _% U8 m) F# f& l# R0 C
  804.               }
    ' M0 k6 X3 O. [9 T
  805.             }
    : g' M" U6 a/ h2 d
  806.             else$ }- v% O7 m/ b6 l/ K$ s- u
  807.             {
    + [, V$ o7 P8 T4 P
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( n3 V& y" f4 W
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) p, c& |% ~  M, V. [* I3 z8 O' G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . X, h% U1 b' o2 h$ u
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , M: U7 }9 h4 R0 w* ]& L, x2 I# l
  812. , m& p. x- N6 l6 p, _' E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 ^. T0 h6 k% y) Q, t& \* v
  814.               dwStartUpSteps=99;  ^( p. T; I% z0 P+ h+ z
  815.               bFinishUpdated=TRUE;' w2 _* p- p8 K9 s
  816.               bCanUpdate=TRUE;
    $ |" |9 {, m) _9 O
  817.             }
    5 F2 x3 o  g5 l  V/ k$ o
  818.           }3 i0 U  y; _; D( F- I% q, {
  819.           else8 m0 g2 w8 q* a  ?- a
  820.           {
    ) X, a6 c- b4 z( c% f& Q
  821.             if(!Dn.Connected())5 ^& ^( v$ `. a9 [2 n5 H0 E4 }3 K3 p
  822.             {. f( _5 Y% H2 J' d7 ~5 P
  823.               bFirstUpdate=TRUE;- i2 n- _. Q" U8 t
  824.               dwTotalFiles=1;: t- r- w" u+ y5 E( i
  825.               dwDownLoaded=0;% [4 x- A+ n- m3 B6 O$ N
  826.               bSilentStep=FALSE;
    & J9 p7 X' N8 s9 t& K
  827.               bCompressed=TRUE;
    + @. O: r/ {/ c9 ?2 @
  828.               strExtLocal=".\\DownLoad\";7 D/ w& X5 ^+ z! R1 h
  829.               strFullName="update.txt";
    $ t5 r$ K. f6 l) [
  830.               dwProgramState=AP_CONNECT;
    ! t# v/ q; W2 w7 a
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " D" C- C" d# i! w: O) G" x
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " E1 W3 I/ x' ?5 e% e
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 n* ~5 N- O8 J3 Q2 `! p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 R* I( C1 O! c
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ P% W2 M" R- [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 ?* h$ ~& g3 B; }+ ?8 T) W& |
  837.               {
    5 y8 P+ m. @7 \4 p% j$ J; x% E
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");. {0 |# ?  l" Y8 {+ ^8 D9 C- H
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");: C4 q( S7 u8 Y, X3 }
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    " g$ i7 s. I* J% I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- I- P2 G  M* F6 J+ e* r$ [
  842.                 : J  Y, ]5 Y& ]7 o6 U( E8 m4 \" u6 o3 T
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 [  J. t) K6 x8 A; c: j  Y% z0 `
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, y! y7 l2 V- Z% X1 p1 D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 L6 ~, Q4 N3 i6 @* s2 M
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  y3 B& j* R8 Q( z
  847.               }
    0 \( m5 ~0 V; X4 [# M( n$ x
  848.               dwStartUpSteps=5;
    % b- }% t: a, h  _% r" y
  849.             }
    * n7 E/ J' K  M; T! k; ?! J9 F5 F; z; z
  850.           }7 _# D# z: V4 a" M: `
  851.         }. e$ m2 l" O% R  q2 ?9 S
  852.         else* O% a: @" @# E2 [. E, m. D
  853.         {
    0 u( ?& j- u# ]3 q: N% w2 E1 f8 Y
  854.           dwStartUpSteps=3;
      G3 H* h- X6 r: h+ P/ W7 e
  855.         }
    0 F* P3 @+ N, @8 j6 J# M+ B
  856.       }
    $ I4 B& j7 h( i' V
  857.       break;
    , n4 B* M/ l. D; \) n
  858.     case 5:
    # e, o0 ]3 Z* m5 n) J8 {% A* r. e
  859.       {. b! r6 Q$ e$ f% x% c
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    0 g! h, T: l9 M$ O& X7 T
  861.         {6 Q; q0 P1 q! d. i$ }
  862.           int opt_overwrite=1;
    - P6 P0 |! J8 [7 I
  863.           int opt_do_extract_withoutpath=0;
    " O2 ^$ B( g7 n% R
  864.           unzFile uf=NULL;
      q- b9 G1 ?# U) Z" a3 u

  865. 2 x$ y4 h6 ^3 u: x! q7 G" v
  866.           uf=unzOpen("Wsa.zip");
    + ?9 E8 B$ S4 n5 G
  867.           if(uf)7 A. ^3 c: g& u4 y% i: k
  868.           {
    & O+ m5 n% I- B$ W% L' T
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    $ t/ _2 y' x- o. q4 j8 e8 P, I
  870.             unzClose(uf);; O+ {0 k! I, O. ~( ]# |" g
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ' F5 |2 `' }( U: O7 Z6 I! }
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    5 {3 t# G% j7 a7 m
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    * b7 N+ q7 f" y2 |
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 l+ X4 C. e0 u. c
  875.           }
    # a7 V4 W" @8 v5 H1 \1 C' [
  876.           DeleteFile("Wsa.zip" );
    9 V3 G$ `7 J# @+ C' I4 x
  877.         }
    $ T' j) W8 t7 L8 ?1 P

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

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回覆

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回覆

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回覆

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部