找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
. w5 p4 C* b6 w" Z0 `
  1. / RevApp.cpp : Defines the class behaviors for the application.2 y" p. K4 l; Q2 `
  2. //$ _8 E$ P( @3 W

  3. ! w: L  R. }- D& h4 m; w1 q
  4. #include "stdafx.h") K1 x$ b+ K" _

  5. # G& l3 e: Y) N$ O
  6. //#define UNICODE1 z; m0 t# T& f
  7. //#include <gdiplus.h>
    6 U! a7 U9 A' w: L: V
  8. //using namespace Gdiplus;
    * M8 f& `7 l- P. b8 j9 h% Z) v, P' b
  9. : B; ]1 H% f8 ~& d* s- ?. g
  10. #include "RevApp.h"
    1 T' u0 Z7 R" h4 K+ F
  11. #include "RevAppDlg.h"
    , z# W( @8 i* M

  12. * t* C* f0 C& f. p' V7 S
  13. #pragma warning(disable:4786)
    + ~& g! X5 W8 Q7 V: ~$ }
  14. #include <map>" s! b1 ~2 L1 d2 f
  15. #include <list>
    7 T& a& c' l( O4 }7 ]
  16. #include <direct.h>8 F7 }+ L& d4 I

  17. ( ^$ k0 m- `. c+ z' h, j9 m9 @  `
  18. #ifdef _DEBUG
    % Y% `9 e0 Z, l0 S; V
  19. #define new DEBUG_NEW
    ' U2 c7 {) o  s$ c/ x& o
  20. #undef THIS_FILE
    5 ~" R& I) ?3 t* `  z7 k" c- y2 H1 c7 n+ S
  21. static char THIS_FILE[] = __FILE__;% ?6 z# y1 M3 L6 D
  22. #endif
    ' e/ x3 r3 f7 d2 V, w! J
  23. #include "SkinResDef.h". L1 _, U4 p6 \, y9 T
  24. #include "ChangeBG.h"" X$ Q1 w" N3 Q) B1 W8 a
  25. #include "AFXINET.H"' r. P5 H  v# R& e5 a/ i

  26. ! l3 p$ Q* a9 L, g
  27. #define TRADITIONAL_CHINESE 0- k1 F4 @* b6 k+ |5 o' I
  28. #define SIMPLIFY_CHINESE 1
    5 K# L0 Z# h$ P3 Y
  29. #define ENGLISH 2
    5 t+ c! j) e2 L1 b% m& j6 V/ w
  30. int m_iLanguage = ENGLISH;
    6 S; f( D3 N" e8 ^+ }
  31. /////////////////////////////////////////////////////////////////////////////) p& |5 f) @- D( X5 M5 v5 d
  32. // CRevAppApp
    1 @4 @0 B; o6 Z+ Y' @
  33. 3 l  f1 j' v: d0 l2 k# S/ @
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    0 o# ?0 X  k7 w9 I7 y% \
  35.         //{{AFX_MSG_MAP(CRevAppApp)' m# z; N7 x. \7 J
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 L3 d+ g( q, N8 U9 G) r
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 |, N* Y8 ~, f+ `
  38.         //}}AFX_MSG
    6 O) }+ b+ w& s4 |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 N  v7 [6 Q6 \
  40. END_MESSAGE_MAP()" u7 h4 K5 F# w' c1 V
  41. * F/ ~& ]; X# U
  42. /////////////////////////////////////////////////////////////////////////////! B; y! x' V! L- x
  43. // CRevAppApp construction1 e5 E0 t: ]+ X
  44. 4 h2 `. ?6 S+ a
  45. CRevAppApp::CRevAppApp()6 f4 C  b' }' H4 b% D
  46. {
    + w# L0 ~! `  q: T# g, `) P! F' |. M
  47.         // TODO: add construction code here,2 X* W1 O% {5 U. I, |
  48.         // Place all significant initialization in InitInstance
    4 F- a! C& F" Y8 Y
  49.   bDisplayIsBig5=FALSE;$ W+ |0 F0 ]+ J4 n$ G/ z
  50.   bRestartUpdater=FALSE;
    - m6 e1 F6 ~0 W# D* e
  51.   bFinishUpdated=FALSE;0 p  g+ P) C  C1 T) Z! P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    3 W; g* g4 e; t5 v% I) h
  53.   InitChangeDataBig52GBKS();! |. r5 L& E) L6 x9 q. e( ?
  54.   InitChangeDataGBKS2Big5();
    : f  X2 T3 [% I* \. s
  55.         //5 \/ Q2 z$ ~' L5 U- H- }: E( Q
  56.         bClickRunExe = FALSE;
    ( I/ b! c! \9 \' S+ x& \$ z6 x/ E) \% w. \
  57.         //
    6 \, K: ]0 C9 _' h# m! E& Z
  58. }/ [* U+ `: Z5 u2 C# a7 F
  59. 2 `4 i, v) ]9 g2 I, u
  60. CRevAppApp::~CRevAppApp()5 _) U: L9 {  O+ i) A5 }
  61. {$ m) x2 K, l; C! K* i
  62.         // TODO: add construction code here,
    # a  {$ f0 R) [: n! `3 W. p
  63.         // Place all significant initialization in InitInstance
    4 X' K  n9 B1 L# f+ \
  64.   EndChangeData();
    5 A3 E$ A) Y# J# ]
  65. }: E: m8 S, b* Q
  66. ; d, i( p( W2 o
  67. /////////////////////////////////////////////////////////////////////////////
    , ~0 O( i. {% \; X5 P2 \# R8 `- s( Y& C
  68. // The one and only CRevAppApp object; ^1 Z: i+ ~6 s- H: a  p! `7 x

  69. $ J& Y7 D( @# j+ k" q$ ]6 ?& h
  70. CRevAppApp theApp;
    5 v0 S6 D/ a+ ?' s: {; l
  71.   g  s7 Z6 b% f# L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / B5 c* i& l2 F7 }8 h8 v
  73. {
    ; A' R! j2 x. F( Y" ^' a6 U0 e
  74.   int iEOF=0;
    + z$ D0 w6 `+ ^) R, N
  75.   char szTempName[MAX_PATH];, ]3 s, J8 X  s# s
  76.   *szFileName=0;0 v( N- _( n7 C  R9 U
  77.   iEOF=fscanf(fp,"%s",szTempName);' \) u$ Z1 C# ^+ }4 S: {
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). [- D& |% K0 y8 Z1 |( k" s- y
  79.   {/ _2 q; Q$ X9 q0 }! z" R% P% Y; e
  80.     strcpy(szFileName,&szTempName[1]);
    : d6 p5 B" i/ _
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 o, E& l8 B, H$ l
  82.     {
    : w4 v8 r4 C( |9 `  M) d' E
  83.       iEOF=fscanf(fp,"%s",szTempName);
    2 F% i+ c% K6 J- o# I: a# B
  84.       strcat(szFileName," ");
    / C" n, x5 M, j, {( H& K, ~; ?
  85.       strcat(szFileName,szTempName);9 d! i( @0 n2 N  ]
  86.     }+ Y! K6 o5 a1 U  t0 n
  87.     if(strlen(szFileName)>=1)
    5 X8 A! }" }- G  L
  88.     {; A. |6 p1 t2 I& l; t# I* f/ Q
  89.       szFileName[strlen(szFileName)-1]=0;
    - ~- C% Y7 R# E" t2 C6 ]
  90.     }* V+ \- G( X( T! `% r0 l
  91.   }
    ( q4 }3 F, A3 d: M! A' k
  92.   return szFileName;- z( Y" X4 M# I3 o0 N0 U5 C
  93. }
    9 i- R% N8 q2 Z0 a, g* _) X
  94. ! v# \. [- m4 `1 k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ \% S2 M! p) u$ A* q
  96. {
      O) K7 H6 o' b, N
  97.   FILE *fp;) l& n" |0 e8 K
  98.   char *key=NULL;6 F, N4 y. _6 X4 R1 x  `
  99.   char version[MAX_PATH];
    * N5 G6 E" J2 p! T- v/ B6 F
  100.   LPUPDATEFILE file,olds;
    8 V) [, S. h3 g( K3 i  h* @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    / S4 F+ X# q9 b' C" y

  102. / i: R) I7 r. r! g7 a9 M$ C! w
  103.   UpdateList.clear();
    ! @9 x% _, r) \+ g1 _1 z
  104.   UpdateFile.clear();
    ; I- z$ @9 D8 D
  105.   if(GetFileAttributes(filename)==-1) return false;4 ^% S% w+ e, I" |6 r1 z/ {
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % G7 n& {/ P$ j- ]# r* V" V4 V7 g
  107.   fscanf(fp,"%s",version);4 q3 {$ L- ]% N/ H2 d% a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * b; A$ T; ~' N1 e
  109.   while(fscanf(fp,"%s",version)!=EOF)
    % ]" q) L# i- J4 @! }+ X
  110.   {' g( I2 l% F& Q: I
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' b' k) j7 }& i2 o# r' J) i+ R: `
  112.     fscanf(fp,"%s",file->path);
    0 g# z+ j/ B4 e. P( G  P$ @
  113.     ReadFileNames(fp,file->file);- n' X0 L7 t, m3 q# k7 v! S& \
  114.     strcpy(file->full,".");
    5 v: n, k4 o$ p/ g' L5 B
  115.     strcat(file->full,file->path);
    3 m- C1 X0 n  S
  116.     strcat(file->full,file->file);
    $ |9 ]" s, ^% d; T7 X4 \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    7 y0 ^& b+ R) v+ K3 o
  118.     {& c0 s! F; k- F3 m7 q. s
  119.       file->vers=(float)atof(version);7 ?* o/ D- L# e. k4 y
  120.       UpdateList.push_back(file->full);
    + q% p1 i2 q. R+ G: T+ r  C& l  `5 \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ' d8 d; t- J$ _
  122.     }
    0 V& e8 s7 U! I" D9 k' E4 U4 F
  123.     else
    7 D: D7 [; ^4 V  I2 t' N% I# f
  124.     {
    6 I# d/ _# m9 |7 e" c3 j! l
  125.       olds=(*p).second;
    2 W2 O2 k+ G! l) C3 l, y/ z
  126.       if(olds->vers<(float)atof(version))
    ' Y  o, z% M; k
  127.       {6 o/ ]) ]" c; H# }
  128.         olds->vers=(float)atof(version);
    * i- e" S2 E+ }! I
  129.       }
    ) |2 w0 Y; j' _' S5 G
  130.       free(file);  T4 O& w( E  d+ x, d$ a/ S
  131.     }2 v: k5 \- }2 n5 A# q
  132.   }
    ( f+ r$ {3 z. u/ V9 o
  133.   fclose(fp);
    - c/ _2 n1 Q, u0 u
  134.   return true;
    ( ^" i, V* [6 u$ X, z2 [! |5 X
  135. }
    % N) r4 }6 o& v6 U

  136. + n* b! F8 y2 A$ n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ b9 X/ G5 \1 L* z2 \$ L; O
  138. {' o. Q& o" L0 `! U2 r! h5 O
  139.   TCHAR  szFull[MAX_PATH];5 W% G1 @+ }- o. C1 E" H3 _' V
  140.   TCHAR *token,*inter;
    % p! F( W0 C0 t, F5 T; m
  141.   *szPath=0;( f5 l$ N8 }0 l! Z) D2 G0 @
  142.   strcpy(szFull,szFullPath);7 X0 @+ h8 `% w
  143.   token=strtok(szFull,"\\/");
    0 c' D" }2 {" h& r0 h3 \
  144.   inter=token;7 Z) [* g8 \- r3 C9 n' R
  145.   while(token=strtok(NULL,"\\/"))2 b2 J! z+ r2 b# p% a: N
  146.   {
    2 W2 t8 C, P/ N* e7 E
  147.     strcat(szPath,inter);0 P8 K8 c/ r. M3 y, L2 X4 [- r9 k
  148.     strcat(szPath,"\");( y7 g$ X3 L/ Z& u
  149.     inter=token;2 R  X  R/ e5 }- v
  150.   }
    ( H$ J% Y6 f7 k) q
  151.   return strlen(szPath);
    * s/ a5 x  r" N2 b, {$ a" w
  152. }) `7 G1 {$ k7 D" @' a
  153. 2 Q: b# E; X: }9 I' f4 t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : n. O% x2 ^3 ]& _; X
  155. {
    9 t4 i/ _2 U. [4 K6 y. }
  156.   DWORD attrib=GetFileAttributes(Target);
    $ S7 c# R: u; ^' I/ E% f1 {$ `
  157.   if(attrib!=-1)/ A' ^8 ?& W2 N( M" \- b: T! ?3 b
  158.   {
    ( F4 t! D6 S) j; ]( `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 d. O" c! g" B+ Y6 _
  160.     {" {. [3 @' A$ i5 ?' d! z
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; S- J8 ]) {+ O2 K$ J+ k
  162.       SetFileAttributes(Target,attrib);# O5 Z2 b+ w7 p; \+ f7 F
  163.     }
    * h/ o* t( W1 ~" n
  164.   }
    ; i+ i' B; b. D* t* O
  165.   CopyFile(Source,Target,Erase);6 l9 l4 O8 C4 |9 C6 N; o" R
  166. }
    + l& k* \6 w. @1 X! r0 q1 a' ?# B+ a

  167. % T6 ]0 B+ q4 ^$ ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    3 G+ j/ b# W1 g) |% Z" M, u
  169. {9 C) Y% m  \& _! l' g' {8 V
  170.      FILE *fp;* y4 O0 y( Z8 Y- ^, D' Y3 T* K
  171.      char  szBuffer[8192];
    * ~6 D0 r1 e' F' M
  172.   va_list  argptr;
    % h( U5 w& c2 q8 H0 A, C/ h( q3 t

  173. / \0 O. G7 P. q" C: ~* O
  174.         va_start(argptr,message);
    , \) e. d7 Q) q$ {% c# F  F
  175.         vsprintf(szBuffer,message,argptr);+ }7 B0 U9 m4 h
  176.         va_end(argptr);7 [& [0 T7 ]: F$ |1 w, u: |
  177.   fp=fopen(FileName,"a");
    ) g) Y, \* ^+ r5 X8 E/ {
  178.   if(fp)3 h3 g/ G5 Y, V% S! v
  179.   {: U/ `8 M! Z4 R( D+ n) V
  180.     fprintf(fp,szBuffer);/ y9 l, N# f, T+ ~
  181.     fclose(fp);% v" i4 x7 H9 Z# ]1 e
  182.           _flushall();
    . W0 B- R5 {8 \+ K
  183.   }
    # c. n& G# s8 i5 T8 x6 C  X
  184. }
    4 @9 [, k+ u  z) V0 p3 B! U5 D9 g
  185. + j. s1 p' z5 i2 M% p
  186. BOOL CRevAppApp::Fclearf(char *FileName)" @' C9 R0 ^* z9 o+ j# B
  187. {
    4 Q$ v- }; m: M+ H4 l; B
  188.      FILE *fp;: c0 z! Q. \0 E% A) V- Y# W, F# C& r8 h
  189.     DWORD  attrib;
    ' B# d" W& i' G5 K
  190.   attrib=GetFileAttributes(FileName);
    , j) l; H/ M$ |' s/ X- Z' H3 Z
  191.   if(attrib!=-1)+ X+ [  }  |$ a2 p! W6 z
  192.   {
    4 \  O+ }  T: f; B7 ], L4 o# a
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);! w3 m7 B$ b5 e4 |0 E( l
  194.     if(!SetFileAttributes(FileName,attrib))9 C+ _9 C$ b4 z' f
  195.     {; J7 @! |6 j' P% P6 u0 v& g0 ?
  196.       return FALSE;
      i. G' \$ z- i9 Q5 A3 W
  197.     }: R% a# `% u# u5 f1 o* m
  198.   }
    ! y7 S9 x8 T& T* e9 ?
  199.   fp=fopen(FileName,"wb");/ C- L, v9 S, G
  200.   if(fp)7 Q6 ]" n& `) B2 i$ U
  201.   {
    1 Y  t! c0 f+ t, M( p2 n3 o
  202.     fclose(fp);
    / X8 R' ?1 _, f/ r; @0 U7 ]
  203.   }
    . j& |% U5 o: b1 {
  204.   return TRUE;
    5 h8 |- R/ n" I+ Y: a9 U1 v  I
  205. }. R) `1 ~) Q, e
  206. 0 `% u$ r8 j* T+ k1 {+ d' ~0 J' u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    6 R! M6 n3 ?# I
  208. {
    $ U( v* k6 _" _1 W0 R; S
  209.   char filename[MAX_PATH];
    2 U' G# T  _4 K0 t* y; a+ M
  210.   LPUPDATEFILE file,olds;! m0 {' A; Q: J3 a
  211.   std::map<int,CString>::iterator i;: v8 T1 O$ }5 t- @% a" U) i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    * D9 t2 c% a  }4 X. L" F' P
  213.   std::list<CString>::iterator l;4 Z. n2 e: I+ V7 Q9 C

  214. $ @9 L- M$ N7 a; @- s5 _
  215.   if(bFirstUpdate)
    ! W  \0 r" |  s7 r0 T
  216.   {# i2 x5 [1 {5 @
  217.     dwCurrFile=0;$ k1 I  h  A& W  d  I# E
  218.     bFirstUpdate=FALSE;1 L" ^' t. T3 a, {
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# \% w) a3 Y( F" s2 `- X6 G, q/ t6 o
  220.     {
    ' w9 q% J% `# Z2 h: W
  221.       dwTotalFiles=UpdateLocal.size();: g, @0 t2 D2 U2 I; Q
  222.       dwDownLoaded=0;  ~$ W& T$ _3 H' G
  223.       bSilentStep=FALSE;
    1 g7 o3 M" c8 Q
  224.       bCompressed=TRUE;
    & U# L2 M4 R' Z' z$ U5 `
  225.       strExtLocal.Empty();
    " j7 p: K: I1 I0 ]
  226.       strFullName=(*i).second;
    ' X3 t: A# x' z( l
  227.       dwProgramState=AP_CONNECT;
    $ w* L3 [, b) f+ `; q7 T/ E9 U
  228.       return TRUE;
    ; A4 L" ?" Y- f1 ?+ }1 b& r
  229.     }% |. w/ w; v$ u# e3 ]. g; b
  230.   }
    3 |1 E  Q2 \% w! Y
  231.   else if(bRestartUpdater==FALSE)& N) C5 a/ H* ^' T
  232.   {
    " ]  G0 `! n7 X' g, Z: {( [# O" z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 v- |0 \) x2 E4 Z9 |4 k/ _9 o
  234.     {! J. c6 M+ ~. ?" x# M( d  r, a5 b
  235.       file=(*p).second;
    8 v& R/ q( n& Y0 R  j0 w
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) \8 j$ b/ W3 `9 i9 ~3 f
  237.       {
    ( \  u; e  v. S- _( G6 b' r$ E# k
  238.         olds=(*p).second;
    ; ^% A% O7 _* f  \: z. }3 A
  239.         olds->vers=file->vers;5 f' ~0 J4 Y( K0 g4 w$ D1 ?4 O
  240.       }2 k- u& H. m; J! S% z- @2 d% e; o
  241.       else
    % N& D- j- @9 m% s) _6 {
  242.       {
    + |2 u! a' Y1 a) c& q5 c
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 C# K; ^( o8 [. j$ F# |$ x  P
  244.         memcpy(olds,file,sizeof(UPDATEFILE));- A( C# y( q' J" c' q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 V/ k" }+ T- x: O
  246.       }
    % u8 I! @# g9 q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! `) t" ~6 }9 V* g4 a! h, c! V
  248.       sprintf(filename,"(%s)",file->file);1 j6 |+ q1 b* T9 n( L7 a/ A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ K( L! ]- F  q+ I9 P7 s
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 B, g" J8 J4 {- A
  251.     }
    ' r  @' j, {  C! d
  252.     dwCurrFile++;
    ) ?: D$ D: G: W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 p! o( A& _5 p! l' b
  254.     {
    5 [, b) B  u7 {' |, ^
  255.       bSilentStep=FALSE;
    . V( h5 V+ o' ^
  256.       bCompressed=TRUE;
    + C. J4 i0 d/ m* ?1 u9 F& v* a: ^
  257.       strExtLocal.Empty();4 ^; S/ v/ `' Q) a3 F" t
  258.       strFullName=(*i).second;0 Y5 c2 f' T* [% Z
  259.       dwProgramState=AP_CONNECT;
    ! u! c* H4 c( \% U6 b
  260.       return TRUE;6 L* m1 E/ D; J# o) a
  261.     }: `* _+ ~" A( f/ D6 ~
  262.     if(!bRestartUpdater)
    9 o) a0 J% L# g1 [1 k" l
  263.     {
    , g) K! D8 x% h) a! S5 T( S$ B
  264.       int iCurrSize,iFileSize;
    # f' r  Z7 m( @6 Y/ i
  265.       iCurrSize=0;
    ( u3 i0 D' |) v
  266.       iFileSize=UpdateList2.size();
    3 F5 B, j( E6 F0 }  W# P1 y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ U+ T% n/ x& N/ e0 d! c
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) D' r6 c/ A2 Q: h9 G* I5 D7 m4 Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( g; f7 @' v" k) E* J6 |) D6 v) A5 K
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! m$ ], |+ P! e, ~) \- y" k
  271.       Fclearf(".\\update.dat");2 F, Q9 b- N% e: v& W' P! ^
  272.       Fprintf(".\\update.dat","Bloodyf\n");& y/ W& B/ d' I" ?" b
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- c1 ^2 q, [1 ?  |2 z
  274.       {
    & c! q( v; g5 ]% e& Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())( e5 m/ D+ [4 Y% f1 M1 K( i- D8 m
  276.         {3 c$ S" f) h+ y* q; ]: b
  277.           file=(*p).second;/ M5 \, U& X6 B+ O8 K: t
  278.           sprintf(filename,"(%s)",file->file);
    " u& A; X2 D2 F) ^; n3 R6 X
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    3 L; a4 O) L9 |; T9 t+ K. {
  280.           iCurrSize++;# Z/ o: ^  [$ @$ E2 J0 f5 e: Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' R% |) t0 C! k8 Q: X
  282.         }
    + B1 y; r! u# U) |. N9 X/ \
  283.       }
    : r4 e  J% E; C# f  A
  284.       unlink(".\\update.txt");' j3 B& r- @  p" b4 L
  285.       unlink(".\\update.tmp");$ z  `7 S3 @) D8 W9 G, Z! m+ m
  286.       Fclearf(".\\checkversion.dat");# H6 j, M7 [2 G  `1 H
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " E, G7 d/ R9 W7 G
  288.       if(UpdateLocal.size())# q3 L) p/ q) E; p, W
  289.       {/ Y% |- h3 \* j, m4 B3 `' S1 G
  290.         UpdateLocal.clear();
      ~8 H! D6 S7 ~. ]9 M9 b2 P: I% [
  291.       }
    8 R2 m: y; x/ ~6 D5 c# W. ]8 x
  292.       if(UpdateFile3.size())
    ) g8 z! W# Y: g3 d/ r, Z0 l  j
  293.       {
    ) Y0 L6 }; G7 g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 W- d& C+ q" i
  295.         {
    5 v) S( n! ~& A$ l. b+ a
  296.           file=(*p).second;; P% D, {9 C0 Q; s
  297.           free(file);
    7 K2 s  ^" E5 u$ w
  298.         }
    3 C# e' O+ I9 q( q
  299.         UpdateFile3.clear();' F* G0 w5 ?2 r' g1 [' ?  ~
  300.         UpdateList3.clear();  Q: [: ^; v5 m, o
  301.       }
    ; o! u0 Q7 [  X) y9 b
  302.       if(UpdateFile2.size())3 _/ B' b) s: M" {
  303.       {3 z# L* R. G3 a3 L" q+ _# X5 i$ n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # L3 f* g4 y3 G( O1 K: f0 g% h0 ~
  305.         {# b3 P( ?* I6 j+ {* V2 K  R1 a
  306.           file=(*p).second;' F$ z* C7 [" k) i- L% X( r
  307.           free(file);
    - x0 G$ d# G( `( {
  308.         }6 h- D& |4 _1 C9 S
  309.         UpdateFile2.clear();
    , g& J5 P0 ?$ g1 B
  310.         UpdateList2.clear();
    $ F1 W) D; R& v. W
  311.       }# p' r! r+ Q# M5 u
  312.       if(UpdateFile1.size())
    5 R% V, g# K2 g' A# \7 V+ V4 K% {
  313.       {
    ! r7 {- q# V6 E6 ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 ^3 t" y8 W- f; D; h
  315.         {" ~8 R: Z; B( N$ W+ _& S: r
  316.           file=(*p).second;
    # B# L: Q  d, o2 p+ r% {
  317.           free(file);
    . N2 [/ U% o1 y; M" S7 R
  318.         }2 p* ^  ]1 n( a* n
  319.         UpdateFile1.clear();
    ' F9 \  H2 ]- d8 n0 l* k4 W  @$ }
  320.         UpdateList1.clear();
    7 R( W9 c+ H* H6 c: y
  321.       }
    % f' |$ X. `! m! X0 T& i" i1 Q5 W
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 G* C& i( X0 J2 r$ D
  323.     }: x5 t) C: y- R, h) P! e
  324.   }' |/ ^% _% v0 q9 Q( [3 U+ |
  325.   return FALSE;& a9 a2 ]% R% P8 [. g) W& [1 g
  326. }! V& B  \% X- ]1 ^
  327. , o8 _# y- W8 G2 A: W
  328. void CRevAppApp::ClearAll(void)
    2 O+ W# ?( G" M9 ~8 [
  329. {
    / K) ?1 L( N. @( e6 i
  330.   LPUPDATEFILE file;  A( @  c. C2 I2 j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % h- ?" }  R7 {* l

  332. * h  x% @; P( {" |0 g8 N
  333.   if(UpdateLocal.size())! q# x& n/ f- ?7 D' M( H- i
  334.   {
    , n6 T; k! q3 O" e
  335.     UpdateLocal.clear();
    & q: ?9 C9 q% r8 c4 H+ w
  336.   }
    4 E- \6 M5 ]& {+ I; G! Z
  337.   if(UpdateFile3.size())
    ( W4 r* x) Y' U$ j7 ]% F
  338.   {
    7 ~( S' F# K  Z& F) b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" q4 ^. Z  i; P5 j0 s& k! r8 _/ H. M$ B
  340.     {
    - G/ u% \4 o+ G3 G* P
  341.       file=(*p).second;
    * I) \, i. I% o; n  u7 y- L& Y+ T
  342.       free(file);0 G! _$ k5 R8 A" O
  343.     }
    # o- E! W1 q" |1 x5 N
  344.     UpdateFile3.clear();
    & Y4 I6 h. [" z
  345.     UpdateList3.clear();
    2 z# H% l9 t3 d" e
  346.   }
    ' ~& A. v7 I- g- @
  347.   if(UpdateFile2.size())0 U) C, n( r) d/ V
  348.   {
    2 b2 _( n" X2 C; g* w8 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 n, S  U* I( [
  350.     {
    1 U/ o+ H1 g! K+ \5 W3 N8 L! V8 o' F
  351.       file=(*p).second;
    / M' ]% C, g% Y/ Y" a- V9 w
  352.       free(file);/ t5 ?: T1 r9 x8 q
  353.     }) `# k2 _, p5 Y$ L( l, k: K
  354.     UpdateFile2.clear();
    . V1 {  X2 M" l1 N
  355.     UpdateList2.clear();$ Q  v! s4 h9 q0 H: @- v0 e
  356.   }
    9 z( f: G) C, x. ]* L% J/ P
  357.   if(UpdateFile1.size())5 c9 e8 T; U8 e+ [" z, u
  358.   {
    . p  ^) S! @# p' i3 E& w8 Y0 B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 j7 M5 F* I; s1 y+ N0 p/ C! q
  360.     {
    7 K: V" r" k" T; ?+ D: B8 J
  361.       file=(*p).second;
    4 Q, ^( H) m' O( M
  362.       free(file);
    : \: Y! B  d% a  i7 j7 o' A
  363.     }6 ]* r) W' x& [, W8 x% z% e9 F
  364.     UpdateFile1.clear();
    - x( w) \; _6 F1 B( @
  365.     UpdateList1.clear();
    ) U  L6 N( H# ?2 {$ y+ h% g
  366.   }, S4 ~) L0 u5 {
  367. }  
    9 Q* m7 J0 H$ i! J; A
  368.   ) k+ y- x# @. u1 T) X
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 y& @7 T: o% ~5 }) ^
  370. {
    4 Z; J1 S% v: b9 P. J7 f
  371.   int c;
    & P3 {. L( g& {8 A, h( r4 k9 n
  372.   LPUPDATEFILE file1,file2;
    7 s' @" t8 d! O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* s! o9 m: g$ I: N& W; H
  374.   std::list<CString>::iterator l;2 L/ e1 [, L5 F5 x* {! F4 ]' d

  375. * f, v. ~1 M! A; Y5 Z2 H) r1 \
  376.   UpdateLocal.clear();
    & E# B" n( s, ~% B2 V; E9 C2 J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);4 p# Z. a, i/ z: g5 h
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . f' B% n) C6 G  u
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ! Y4 k3 i. X% o) e) `' \& T" x0 J9 ?
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);8 o7 g2 ]* U2 X4 c2 q
  381.   if(UpdateFile3.size())
    $ I( m1 d# z0 o3 n7 q% |
  382.   {
    ; c* R( ?* t; \2 H% B" _- O2 |
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - C( D9 V& R) C* c% l
  384.     {
    2 z$ O5 f* I& [. b
  385.       file2=(LPUPDATEFILE)(*i).second;$ K7 D" O( ~2 z+ [' I# `+ ]2 S: N% a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( W+ x  ~$ S% v& N8 r
  387.       {
    # G6 m2 E' T4 u) w, a" c6 f
  388.         file1=(LPUPDATEFILE)(*p).second;% b7 {9 s* k& Y3 s2 ~; ]
  389.         file1->vers=file2->vers;
    ' L2 V# S- c3 u# g) n' |& S* `
  390.       }
    5 m* Y& U5 m( a
  391.       else
    8 y; A$ h0 X7 K( O& n" y4 d/ |) @
  392.       {
    ) ^8 \" D( S: X8 k  l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 R# I8 C: b% T/ D7 V' x
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% ?8 D! _+ i$ ^- |3 d7 O+ f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + O1 o+ A' r# G0 D) t  M0 A. O
  396.       }
      Y; k' S% n6 b% {! r9 t
  397.     }/ R& q6 m2 _# J# _9 V( o* N7 B
  398.   }7 v6 S0 D: s) L7 o. U
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 e+ _$ o2 G5 k$ Z' D  A
  400.   {! L  I* Z7 Z$ ]* r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); ?3 h& `' c& V% P$ a  z
  402.     {
    ) o& L$ E4 O. j" r5 a
  403.       file2=(LPUPDATEFILE)(*i).second;
    % s, b* w3 ~0 x+ Z, G7 w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / T7 L7 h/ A! ^- l+ D" N
  405.       {0 f' [; j" Q  J$ g2 H' u" a
  406.         file1=(LPUPDATEFILE)(*p).second;  A8 I2 Q% J+ X! Z4 p4 x5 M
  407.         if(file1->vers!=file2->vers)
    5 U& P* Z- E" X2 e' j4 m' v' m
  408.         {
    # _* d9 r! u* X- W6 S1 P
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( c! z3 |6 G' H2 P6 d
  410.           c++;- `+ D2 R) Y. H5 w$ R- ~# [; A
  411.         }7 ~# e5 y, b. f  ^! u4 \; T/ d
  412.       }/ {: u) O. h! m: J
  413.       else4 ~; D, T+ x0 M* |& C* ~; y
  414.       {0 q7 \+ |! }# ~: S# }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: }: K* e/ ~: c# r4 `
  416.         c++;0 s0 T. s1 D/ f, ~0 q4 |5 P5 O
  417.       }
    : Y( a1 e* T  F( y" V* n% _' t
  418.     }0 O9 c' i! f2 |. h$ s! }9 T$ q
  419.   }
    1 E& y; v: y4 [4 v
  420.   unlink(".\\DownLoad\\update.txt");9 P9 `, v( Z; ^6 R) Z
  421.   if(UpdateLocal.size()) return TRUE;
    - E9 _9 g1 I* G
  422.   else                   return FALSE;( l& y" D: C" W& }% E! ?  u. p) |
  423. }
    4 L3 Z9 U/ j3 Q. M

  424. 4 a$ v& b- K0 p( N9 _  O4 r
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ( |& S# v/ j% K; ]- V/ q5 r5 i4 l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  y2 g5 c4 m7 k/ z' G. P& z6 a$ R4 j

  427. , L$ O& A" ]& A8 `- r
  428. / p" L& g( E/ u7 H' x6 I) ^
  429. - [1 o- a' E6 h* W0 S  h) B; Q* @9 {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    4 D; E/ l& w' d9 u5 z0 ]
  431. {
    3 V/ n+ Y( I1 `+ J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    * a7 n% j6 i" v5 J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)3 u( L; N" ~) L6 o5 _
  434.   {, @2 t% [( |  N" l2 A: T# M1 x
  435.     char szLanguage[50];) L4 V# \5 B4 Q& a& Y" A. b
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 g) A2 F# b$ H( m7 [- S
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' \( `  `$ }0 P: j) q1 B
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * p3 @1 u5 y9 s. L- @$ F! K7 k
  439.     else                                   m_iLanguage=ENGLISH;. b" \6 F! ~3 R0 z$ R
  440.     char szRegister[100];
    - \7 K& G" T. M9 X8 N# L
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 A3 k; \. i8 ^! W5 S
  442.     strRegsName=szRegister;4 @% H# l5 U: P
  443.     char szPatchURL[100];. G( O/ y$ p/ H/ r' t  O. d* C
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 ~" C# j) h% F; x+ f; i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      R4 [' O% @) Z" I2 h$ w
  446.   }6 G# }7 T: D" A
  447.   else
    " F. _, [9 Q! f3 V
  448.   {
    ! P: x! q* p' u) j: z% c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, g# w) T3 o: W* q# m* B1 S
  450.     strRegsName=DEFAULT_REG_URL;
    ; W) p6 G6 k7 {1 i! n
  451.   }
    ; Y+ N* u: v- U5 w/ _, D  I0 w' l
  452.   if(GetFileAttributes("hosts.ini")!=-1); M8 v( r) g6 f9 H7 ]! t
  453.   {
    & B8 c  ^; T' T# C3 V
  454.     char szIP[50];
    ( E4 [! K+ ?0 f; m8 a( G
  455.     char szDIR[300];$ |# X3 C) T$ D) u9 b* s* x4 H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ G3 A* ^& Z0 q8 P% H
  457.     {
    % v2 r" Q, S0 D/ h, J& M# F4 m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");* J" j, W& G! A( y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");7 P+ Z( ^# G" P$ x+ [) U8 R* ~
  460.       strHostName=szIP;
    - r3 s+ M9 v% l# o) S9 r! X6 [
  461.       strHostPath.Format("/%s",szDIR);, W& Y. M! ~8 U  @/ N$ L4 H
  462.     }
    2 C; [" a( n% r3 f
  463.     else
    - u; S4 G4 c9 L- w+ [, F$ _
  464.     {9 z8 V. B3 Y" _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ ]8 T. b; N! n  A; s( L
  466.       {9 A/ j/ u1 }- d' ]% l, ]  R
  467.         char szLanguage[50];* `1 {2 P' k8 J2 A9 D# I) @, R/ Q. v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ F3 u: b( k  I/ i6 n
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 A6 E) G4 z' o1 t$ g  `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 c! T6 q, H4 v! M( ]! ^
  471.         else                                   m_iLanguage=ENGLISH;/ O! b8 J( G' ?- [0 g6 M
  472.         char szRegister[100];0 ]* e2 g6 L4 ?% N) w
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 a4 u* c% e; z7 j/ I6 Z- @( O
  474.         strRegsName=szRegister;
      x- M$ C7 p& B1 {) ]( F$ [3 I
  475.         char szPatchURL[100];+ g, z) D) |% e2 {; f8 e
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 }& ?+ X; R" N- |5 C1 U" Q9 w6 r
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      f1 B' U( N# U
  478.       }3 n6 ~* o  o& }% B- Q
  479.       else
    # z6 Z# f2 _' H( l+ m
  480.       {1 Y; C- r7 G- Q+ |$ W$ K' `6 a3 |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + U- I* {+ E2 Q5 C: b9 k
  482.         strRegsName=DEFAULT_REG_URL;
    : b1 C% |! d8 r" C1 o0 I# n! y
  483.       }
    & ]+ r; U0 g1 @  c7 h' W5 M
  484.     }
    3 c1 Y# }" {1 V0 G: q# ~
  485.   }
    : M% x3 @1 e) D9 }
  486.   return true;
    , Q  P# b2 W) O
  487. }
    - c+ P$ i0 F% N& ^9 N' Q

  488. & q" r% {  A' B; L
  489. #include ".\ZLib\unzip.h"
    / y, d$ v5 l4 ?& l9 W9 @+ ?3 t1 o0 A- V
  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; ~' k$ p% B" p: u2 Q
  491. /////////////////////////////////////////////////////////////////////////////
    ( S& D7 M, T! ~9 s: L% r* A% s9 X8 [
  492. // CRevAppApp initialization+ F, x6 |# U" ~- `) d; l; p
  493. $ W! u, p0 d% A# X
  494. BOOL CRevAppApp::InitInstance()
      N2 K, M9 C2 u/ X: E5 E7 q
  495. {
    0 X" N' E$ e. m
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) R# U8 B" W; l* ^9 y) a$ V
  497. / v: k1 [) f, E5 b
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' o  l7 @, q# t
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))$ g, D2 S& k, p% J/ Z" u
  500.   {
    8 A" l" b# i0 {, q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ M  x8 o' J" Q$ u, L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( V' E7 H/ ?* A6 ?* d% j! W
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))2 V. P& L$ }3 s4 P8 a- l
  504.     {
    1 c% }2 f8 c4 t! |2 f% @5 v
  505.       strcpy(szPath,szPathTarget);
    1 p* L# [: a9 u& ^; f
  506.       SetCurrentDirectory(szPath);
    2 K# l4 ^- u0 A, M$ R$ \2 b& T; D
  507.     }" s8 N. ?, l7 W- Y, N
  508.   }
    % i5 u* q1 K) G: j
  509. #ifdef _DEBUG& m, j# h5 }; z2 `+ R# T4 s: X4 c" g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 n+ e8 o* e, e
  511. #else0 V' _& x# w9 h# R9 F
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 |: V; _, v6 r/ K$ L3 y! N
  513. #endif( X; m* |' r0 ]- Y5 B4 s
  514.   {
    7 ?; J  j$ E1 w/ z5 a
  515.     char tempFileName[MAX_PATH];1 e) h' G2 I" g  ~5 i7 A
  516.     strcpy(tempFileName,szPathSource);3 I: g9 i! F* b. ^
  517.     tempFileName[strlen(szPathSource)-12]=0;+ T; n/ e, m, S% ^& S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 n2 y1 Q2 X- Q4 Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! a  E0 z4 @; B7 I3 N# Y/ B9 V
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 u7 o8 K! q* r/ i9 @* r! E1 G
  521.     return TRUE;& P" j7 l; q- O+ L, Z; F5 Z
  522.   }
    " M  A8 J$ c( K: ]$ W. ^( c- r6 Y
  523.   // Nuke 0118: Delete run.exe  h+ d! Q& B7 X2 i4 c- K9 D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' c6 D# |! y! o+ v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 ?8 \& w* l7 h
  526.   if(!ReadCfgFile("Config.ini"))
    ' I+ Q4 g3 s% z, E# r+ t4 _9 E- y, \
  527.   {
    ( B' t2 D: W( j& b7 D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 o! l  B4 K% `; e& v
  529.     return TRUE;
    + i: q( R5 ?: S+ A: [& R
  530.   }
    6 K% r+ O% r$ P5 i
  531.   HANDLE mutex;' w; G8 A- P" y/ }
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    + z4 P+ y: j" E7 M7 V
  533.   {
    9 q& c& e0 T& C$ G
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    * S( p9 V# ^0 P" K0 z# R$ E
  535.     {
    ) ?5 J2 c3 l* I7 T. `5 B
  536.       CloseHandle(mutex);: Q0 @& y7 [, T4 K* k; G6 e
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);0 O, p, |* l5 {: @
  538.       return TRUE;
    5 m" y1 Z: R2 P  D6 e
  539.     }
    ! _% I5 M8 M: D7 N: L' q- _+ |
  540.   }  - G6 O  e5 `  r1 s" N9 u6 m
  541.   CloseHandle(mutex);
    % d# p1 f; l4 f
  542. ! B2 O8 p* F4 u! W% p+ z1 G% H* @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 s+ H8 ~9 t! {$ W: m
  544. , G/ W! G* }1 C+ I& L: J; x3 @
  545.         AfxEnableControlContainer();" Q$ D2 M. B- |' t% s9 r$ w9 }, D
  546. . W/ c5 p$ v$ n2 P: S. f; ]; `0 i8 ~
  547.   bCanUpdate=FALSE;
    ( r, G+ ?5 h% Z1 n( U* w
  548.   dwStartUpSteps=1;
    / b& H# U0 n; W  @9 X
  549.   dwProgramState=AP_NOTHING;: T. O& X# T7 r! ~

  550. 7 ^# M/ L3 K, K: A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);0 K9 A/ z+ ^& E$ X% t/ w' M# ^3 c' W) D
  552. 0 s3 b$ @) o6 ~' S- E" J
  553.         // Standard initialization
    ! t$ @  e* H3 R9 b% b6 |
  554.         // If you are not using these features and wish to reduce the size
    # O0 s( ^- W/ @" h7 a2 H
  555.         //  of your final executable, you should remove from the following
    0 O$ R9 o# T, x8 h) D
  556.         //  the specific initialization routines you do not need.
    & Y' n& K; V& `" t" p
  557. 9 V. l9 q' u4 e" h) U% T
  558. #ifdef _AFXDLL
    2 G7 [% V/ U" }3 \: e( y  _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 l$ _0 Y2 e, X; h" b# B/ e8 s
  560. #else
    3 `) Z# x. ?# ]2 C# r% B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * y2 |" O$ m/ Z, F. D
  562. #endif
    " r* i- e; o5 r" e5 G2 d
  563. 4 g- v2 ]* z7 {$ B: h' U2 o$ |
  564.   dlg=new CRevAppDlg;
    / L2 o4 C4 M6 b; ~
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    : z+ _$ V# q; f3 i4 ]" b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ o' M" S& {# l" P; H0 m1 |1 H
  567.   m_pMainWnd=dlg;
    ( v9 T+ t& k. Z/ E! L; b" I
  568. - Z, ~6 ?* r4 o. ]. h" ^# X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    7 }+ R, f: ^2 r! o0 @4 o9 @

  570. ; p  Z5 ?  M6 b
  571. //  GdiplusStartupInput gdiplusStartupInput;
    * s- W3 P0 B3 V7 j& L5 S
  572. //  ULONG_PTR gdiplusToken;3 `9 {: O- [; k( x8 _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 l2 B# |( U# S6 r0 S5 ?8 l3 s; `5 }

  574. 6 [, J1 ]. g$ y9 l. V
  575. //        CRevAppDlg dlg;2 p6 [8 a4 D6 N* e, ^6 B
  576. //        int nResponse = dlg.DoModal();) d5 Z3 p# o5 Z0 t8 Y3 n
  577. //        if (nResponse == IDOK)# L- b# |# }( Z: |
  578. //        {
    $ R- `' g( a* x% L% U; I+ t
  579. //                // TODO: Place code here to handle when the dialog is6 l0 z+ b# J9 ~' D8 {, ^
  580. //                //  dismissed with OK) R$ z6 j7 P" h
  581. //        }4 ?# C3 r& S+ O6 S( `
  582. //        else if (nResponse == IDCANCEL)7 V/ o1 k" V- J, O6 K  C6 K
  583. //        {
    8 M6 [# _! b( w
  584. //                // TODO: Place code here to handle when the dialog is5 B; T1 {& a9 J
  585. //                //  dismissed with Cancel! J9 x3 t) {' j4 Q* H- `! I' ?
  586. //        }% r- H9 s; l) ~" Q4 l
  587. # H+ L: G( e* m: y3 k
  588.         // Since the dialog has been closed, return FALSE so that we exit the! k! _* x  }1 e9 g' F6 y
  589.         //  application, rather than start the application's message pump.
    $ h: w" n# J7 ~+ q# w: l
  590.         return TRUE;
    # G( o2 P& X& Q! G4 N" J* d
  591. }' J8 C: i& R2 d& ~8 i2 f1 z, @; D; `8 \
  592. 2 q, D3 @. X# F$ m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)# a7 U& D8 |; u- R" s$ L
  594. {% ?- {5 m& Q" D; \
  595.   int i;
    ( T% f1 r2 D$ S) a) j
  596.   char *szRet;9 p9 z3 E; ]7 Q

  597. ( x( D& {8 {, |+ x  Q- O1 G/ m+ F0 |6 R
  598.   if(pSource) { itoken=0; sztoken=pSource; }; a& t' ^8 K  h) G. N. V5 i
  599.   if(sztoken)
    8 s9 m" `6 o& }- b3 p
  600.   {
    ; |" }! P3 A: i# X6 |# V4 G
  601.     szRet=&sztoken[itoken];$ r2 c3 X: C! k* b4 `* R
  602.     while(sztoken[itoken])# i1 [$ S, k& D, Y& N( W( G0 @
  603.     {2 A- b# d. s+ e8 ~6 J! X
  604.       for(i=0;i<(int)strlen(token);i++)
    2 x3 H$ V  j: z  E6 w
  605.       {: L1 v$ v& ~+ x$ {8 @5 J2 {
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    $ t1 o( {, U1 }7 u
  607.         {9 r8 O0 @% V( h
  608.           sztoken[itoken++]=0;' F9 C7 C& o- y- n
  609.           sztoken[itoken++]=0;
    6 Q& X8 B( E' M7 D+ @- Q
  610.           return szRet;' P2 q. f! A& l
  611.         }
    6 H. b4 r) e  I7 E
  612.       }3 m; d; E2 T2 b( S1 Z
  613.       itoken++;
    # L8 ^9 Z: m) |6 W' |+ K! r
  614.     }4 i! q# m7 d' [, S6 F/ x
  615.   }
    # [& A& U% y. s( v3 I9 k
  616.   return NULL;$ m& J& A; t+ _0 g7 @
  617. }
    & |. x* S8 x6 X3 T1 E

  618. . W- N+ e' C6 q; x5 G/ a
  619. void ProcessProc(long Total,long Current)
    # Q2 R" F$ Z# f9 q
  620. {
    * o9 j7 N- P8 J* l% h
  621.         MSG msg;
    ! W8 g3 s% T0 z3 _" K2 M2 [: Y  f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ; W6 m; Z& i4 K" S3 K9 A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # Z; v. v! V5 Y! H. H# }
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 f: I: O% I7 P0 C" B: ]$ {
  625.         {
    / u1 F1 ]7 e& e: C' w' L/ \
  626.                 if(!GetMessage(&msg,NULL,0,0))1 H+ d  k" n" ?
  627.                 {
    1 t. W; f; I5 Y0 e& P' y4 w
  628.                         return;
    9 ?7 z4 ?0 }  {! J+ a& R# p
  629.                 }* M( e# l- q1 n  g4 R/ o+ e  |
  630.                 TranslateMessage(&msg);1 B5 r) |2 S5 K5 U, {) C
  631.                 DispatchMessage(&msg);
    1 u1 s  s: p$ H( \
  632.         }        $ p( t  [8 h; o2 T3 x7 p- K
  633. }
    & A' D2 O% I1 r+ B7 S, _; z
  634. " T. O/ V* }+ P  G
  635. BOOL bFirstChar=TRUE;) G! o  M' t. G# c: J
  636. - t- H" M7 s4 ]8 C( l; }$ A( p/ L
  637. BOOL CRevAppApp::OnIdle(LONG lCount); m6 R0 z* l8 l- S. C
  638. {
    2 f( V: H* J" u. S  V
  639.         // TODO: Add your specialized code here and/or call the base class2 q2 V9 Q# {+ x0 t6 h9 i, Z
  640.   switch(dwProgramState)
    $ M# H; i0 p) Y7 B
  641.   {
    9 [% n; f; [+ g3 i% x
  642.   case AP_NOTHING:
    3 F/ ]: A3 b# J( c( k; u8 F
  643.     switch(dwStartUpSteps); X% w# ]2 _9 B! J0 n- i
  644.     {
    ! e8 U# j: c7 B$ m0 P. Z+ a3 z  s2 r
  645.     case 1:
    $ _; t' j1 e/ {3 R
  646.       {% e8 Q" {5 e! E& f
  647.         int i;) K- ]9 o% q; l
  648.         CDC *pCDC=dlg->GetDC();7 X/ @" K: J( L6 @# ?( y. d
  649.         HDC hdcwnd=pCDC->m_hDC;6 v. [7 {* B" W
  650. //        Graphics graphics(hdcwnd);
      I8 }0 _1 K8 \- k4 Z+ Q+ ?, T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) S: G( w1 W7 ?/ @$ b. I& |% c) `" w
  652. //        INT iWidth=bitmap.GetWidth();
    ; n" e' u1 b9 U3 |/ T0 `0 P, J# L% [
  653. //        INT iHeight=bitmap.GetHeight();
    ; F1 a. k$ n! S
  654. //        Color color,colorTemp;  v5 Z8 z! p2 f, k$ Y# S; A
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)( H4 u/ J+ F5 c0 e
  656. //        {
    ! k4 e$ F( t" D5 i+ M( [! @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)* F! Q4 ~/ t3 ?8 j, |1 u# u
  658. //          {% L1 r' o/ A8 k: Y' h2 r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ J4 M$ v: v# P% F" J/ {# n6 [
  660. //            colorTemp.SetValue(color.MakeARGB(6 h4 s" V  T; u8 v4 J3 A; p9 U0 K$ z
  661. //              (BYTE)(255*iColumn/iWidth),9 u5 M% L2 S: k4 V& g9 C4 d% b# M
  662. //              color.GetRed(),8 h$ u( ~  v8 G- s
  663. //              color.GetGreen(),
    4 D- O' w1 C, O& l2 R. _5 x) D5 t
  664. //              color.GetBlue()));
    5 v+ ?0 o6 ]- h
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + b: J; k; E; u0 _; p! @6 [' [
  666. //          }
      c$ \4 M' Z: T# [" N3 n# P" @
  667. //        }, K0 j9 n1 y. F9 y( G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);! a9 M8 o. i. X2 l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 Q) S' q" S3 b/ L' |/ g! E- A
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# F6 ?2 R0 i6 R5 g  h: u
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 T" O# R9 r  z, p
  672.         for(i=0;i<240;i+=8)& {  K" u6 a9 X7 x9 T$ @8 T' n4 u$ a& w
  673.         {
    ( O* _  z, w+ c- N
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . s8 q2 C6 O3 x% m7 Q1 w# [. h+ Y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; g6 Z5 Z8 d. Z0 C2 L) d
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 j+ ~3 H- a& `: ?' s8 m! N3 y+ M
  677.           Sleep(33);5 U% C- X4 ^" N( W% i8 n
  678.         }- ~, O8 J+ M$ a6 g( q* G0 U
  679.         Sleep(1000);
    - q0 i8 \$ U2 I+ w5 ?& {) ]
  680.         for(i=240;i>0;i-=8)/ j+ {0 @* j$ ~( |* s
  681.         {
      n! u) K  m0 P# i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 t' Q0 H: C5 `& O8 [, D) n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; b0 {) m; n# ^( x( t# K% {- S
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);/ f2 w. p, o7 e6 b
  685.           Sleep(33);
    : c* h6 c  N  Q. O8 b( t
  686.         }$ Y- r5 D' @- Q6 Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);9 A0 c2 Y6 M/ ~2 X) t+ N
  688.         dlg->ReleaseDC(pCDC);8 K! \8 C* |' v- T7 Q
  689.         DeleteDC(hdctar);2 Y2 J0 a2 J8 }7 ]6 C0 E
  690.         DeleteDC(hdcsrc);* {- A4 F2 R3 u2 E7 h+ Q& O. n# q3 A8 y
  691.         DeleteDC(hdcorg);
    3 N5 F5 i8 Z, i' {& u
  692.       }
    5 M( u. H1 k( o
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & {4 r/ x% F1 x& D4 P# U6 Q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' W- E3 p; E! `( k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 Z" k3 e# ?" L0 L* W% R  G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    & _6 Y. L/ N  \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; G9 F# d2 I) @( x, D7 V" b
  698.       if(!Dn.Connected())
    0 A; ?; }$ {1 x, E. j+ s/ j) M
  699.       {: o8 z+ l' V' u! V" b! {. `9 T  b; h
  700.         dwTotalFiles=1;
    ; T; u& p! u, O+ R+ W8 a2 W
  701.         dwDownLoaded=0;* s- ^7 m* T7 w; |% v9 I
  702.         bSilentStep=TRUE;6 V/ J( C0 ~/ S5 P
  703.         bCompressed=FALSE;
    ' \7 B& v% u7 @5 w
  704.         strExtLocal.Empty();1 o, P1 w, ?1 o5 E5 z
  705.         strFullName="readme.txt";
    4 c0 z! q+ r: \; \( w% o* Q' N
  706.         dwProgramState=AP_CONNECT;
    + b) `9 j( x. k. C, E+ e4 O
  707.       }8 t& A* q! v! d+ x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();8 j( L, V9 K: {- z" O7 F
  709.       dwStartUpSteps=2;$ Z" U- Y/ Z& g# s1 U9 ^. Q
  710.       break;
    + @, S/ H! b% }
  711.     case 2:
    8 a$ _: E) W8 ^$ n8 n& q  O
  712.       {/ W4 C; J* k+ Y, S( a
  713.         int iEOF;
    . ]# s# a9 c3 t/ b$ R  N
  714.         FILE *fp;
    9 {( j( `& |! V5 d
  715.         char szString[512];
    6 k2 j6 I+ H6 t" V8 k+ o0 f1 E
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      ~% C0 F3 ~  |+ ^: Q% M
  717.         if(fp)
    * T3 M0 y! s# @2 t7 z
  718.         {
    ( _. P( |1 I* d2 L3 L9 Q3 t  f
  719.           do
    + c( k. T% P9 N, Q# v% Z5 U
  720.           {0 _3 l# o& i# L( t+ o& d* c0 X* c% u
  721.             iEOF=fscanf(fp,"%s",szString);9 v% y3 r- k) K$ W+ C0 j
  722.             if(strlen(szString))" w. p- t# h1 _4 R! D% q
  723.             {
    5 p9 I; e, i1 W5 h1 U. d
  724.               if(bFirstChar)2 l7 a! P/ L; ^2 s! l' K- M
  725.               {
    # M: m& p+ @2 ]( M7 m4 E$ k
  726.                 bFirstChar=FALSE;# h! n4 B' e* B' |  V9 Q+ T
  727.                 bConnectIsBig5=FALSE;" z* z* S0 D1 M! `+ C3 l  ?
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; p3 }% y( X2 ?0 H- j- y- g
  729.               }. F( ^7 Q" i4 P: q
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : B6 ], V- L3 h. D2 E
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 J# z* @. i2 ^' n
  732.               dlg->m_ListText.AddString(szString);. J: p5 [7 @+ q7 A. d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( S  T+ ]( M/ j/ [
  734.               *szString=0;
    . W0 ~& \; T0 L5 k3 r
  735.             }4 t( F' ~4 D$ m" q
  736.           } while(iEOF!=EOF);+ |: h, X, z- d% h
  737.           fclose(fp);- h4 `0 o+ B" b. |  V4 K
  738.           unlink(".\\DownLoad\\readme.txt");3 Z+ Q3 b( t7 [
  739.           dwStartUpSteps=3;
    8 F( ^! a# |$ t7 A4 Z8 A5 y
  740.         }- f7 u5 f7 e4 G. J3 S+ L
  741.       }' ?9 K9 y; ?4 S* z: o* J  G! z
  742.       break;
      y9 _7 |- v% z. r0 e
  743.     case 3:9 }( f/ B6 Y' ?# n. m- i: L
  744.       if(!Dn.Connected())
    % p7 X' T) W# P, C
  745.       {
    2 a& C. ^$ L3 R9 \. M; Z! a$ ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* D7 G7 r/ @  ]1 h; D0 H. u, |
  747.         dwTotalFiles=1;
    ( H; Q7 Y! j. f1 l+ s1 i. O6 l. c7 l( v
  748.         dwDownLoaded=0;2 W0 v' \$ B  N7 B
  749.         bSilentStep=TRUE;( A# ]2 J1 l9 u- e( `& Q* N
  750.         bCompressed=FALSE;7 R& M4 y) H7 p4 Q  z
  751.         strExtLocal.Empty();
    0 B, T" [( x, I" ]  T" @( U
  752.         strFullName="checkversion.txt";& f9 V6 }6 h, f5 j" Z( A" M2 l
  753.         dwProgramState=AP_CONNECT;
    & c0 u2 y; D& C* f/ O' u
  754.       }, E8 x- M( |6 u% L4 }
  755.       dwStartUpSteps=4;2 \; M) k% e8 S/ ^/ K5 n
  756.       break;
    3 A  F. B& N8 F$ T' E
  757.     case 4:5 E! V% z% C. B! l. R
  758.       {
    # l9 q$ |2 _: [
  759.         FILE *fp;
    7 N3 j0 H& N7 E4 n: Z
  760.         char szString1[128];& E/ w" u% d' \) X* V
  761.         char szString2[128];& H" _- A1 i. M. N6 I7 Z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    " \7 r4 L! F  G1 m6 g$ p- x' M
  763.         if(fp)
    - |# z5 N8 G/ p0 c
  764.         {& v, `. q6 p! g
  765.           fscanf(fp,"%s",szString1);
    . V- V6 p( W0 m$ o0 o8 s4 D
  766.           fclose(fp);9 M' `/ B3 N* b: g6 h( m- R
  767.           fCheckVersion=atof(szString1);
    ! F! u0 F$ K% F
  768.           fp=fopen(".\\checkversion.dat","r");! i. V! l! R  q: F) w
  769.           if(fp)
    + R7 m3 P1 [( F. z
  770.           {' }+ D1 ?+ ~; v
  771.             fscanf(fp,"%s",szString2);" f+ K& K2 m2 q- S3 U3 o
  772.             fclose(fp);' g* f. l+ s$ e
  773.             if(atof(szString1)!=atof(szString2))
    ) ^- `. ^; X  i# V6 E
  774.             {
    ) \: j/ `0 V$ W5 Q8 }% ]5 P) j% j
  775.               if(!Dn.Connected())* A# u9 E2 P0 I+ W
  776.               {
    . Z9 y& V* s! V8 A2 F
  777.                 bFirstUpdate=TRUE;( Q2 B: W/ p( M* v; Z
  778.                 dwTotalFiles=1;
    1 g" d! l% d' A" R2 W
  779.                 dwDownLoaded=0;
    / o3 v: I# q2 F* j8 J% ~  Y
  780.                 bSilentStep=FALSE;
    9 s/ |% \7 d% a
  781.                 bCompressed=TRUE;! D& u. S- r9 T, C$ F0 M# s2 \3 u
  782.                 strExtLocal=".\\DownLoad\";
    & y; M: q) y% w5 ~9 ]: J/ e9 a% G& c
  783.                 strFullName="update.txt";7 T+ N$ |# [- ^. g4 [' V/ A
  784.                 dwProgramState=AP_CONNECT;+ G* W# g) i# @7 q4 L
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! d- K$ e, t2 p4 ]$ ^* P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 ^0 V( m* \% }# P$ N
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" E  K/ A+ u# |+ m  [/ R' k* c

  788. - k% J$ ?& O! X( T2 `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & w" |, S6 N: P- ~
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , M; ?; g. `% r: @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 ?& H. ?* K- q6 s7 Z
  792.                 {* u0 x" I9 n( s
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! W9 u3 j; X8 q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( ?2 A( c  k4 |
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    % \8 p5 o" i/ M9 `: Y: Y, S* M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; z) l, P' h0 ^- a( M8 p, H8 a, o

  797. % a; T: U  m% K( [8 Y3 K
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / Y9 w% x4 _2 H
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / d' e! r: |/ j: @: K
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ g: a% Q" @6 M: ^! B
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 J9 N8 N% J" P
  802.                 }
      A+ o  i) E- b3 d; p0 O# }
  803.                 dwStartUpSteps=5;
    8 M* E1 r/ Z  N, A0 Y
  804.               }
    % |" w% f+ Y2 k( y/ B* u/ r& Z/ _
  805.             }
    1 j8 ^. m# W; H  Y
  806.             else
    + |& U2 e: E2 L
  807.             {/ h+ V$ w. V% Z/ L
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # X$ c7 n; `9 g) Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! a7 X7 B' \5 M/ S# A
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 W6 G" a- [  P8 q, S
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' ]. J2 S: o+ ]( s# e8 N
  812. 3 N0 i" w* j1 C2 B/ q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 E2 ?6 `# M0 C5 b4 M
  814.               dwStartUpSteps=99;+ j  t( V9 i7 r$ ~+ F
  815.               bFinishUpdated=TRUE;) x) V0 D8 X" G  s! h2 }: q. q% S# K
  816.               bCanUpdate=TRUE;
    1 L% S" T7 M" z
  817.             }
    4 J7 u4 k: Z9 r; S" ^# d
  818.           }" ]+ T. ?& d7 J  e6 B
  819.           else7 r1 l; j9 T5 ]4 A, h) y* I" V" C$ e
  820.           {
    ! w( k6 Q, F. O- ?* i7 P. @
  821.             if(!Dn.Connected())
    ! k, v* e& M% [, Q( n  F2 x5 U
  822.             {; Z7 H  C2 U/ O) U5 P) v
  823.               bFirstUpdate=TRUE;
    ' ]) w. g. V5 `8 E+ T% i
  824.               dwTotalFiles=1;. m4 z3 K  H  A# A  K1 w& J
  825.               dwDownLoaded=0;
    6 H" O2 j+ u- n; H% {/ j
  826.               bSilentStep=FALSE;0 j# `/ {% n8 ^( i
  827.               bCompressed=TRUE;0 c, I! A8 k* d: ?3 ?
  828.               strExtLocal=".\\DownLoad\";
    - V2 q  E, q: T& ]9 u( z
  829.               strFullName="update.txt";  D3 c. i* N$ R, P9 ~2 w" g
  830.               dwProgramState=AP_CONNECT;
    ) J# t' P! Q  F* `0 D: {9 e" p
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 D4 T3 T8 K1 L7 Y) p7 \
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) n, I# {& n' q# ?% k' a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 _, Y$ g. ~( Z3 y, z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: K# S* s/ ~( ~+ b
  835.               unlink(".\\DownLoad\\checkversion.txt");( s% Y" @+ k0 g5 w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)% q2 q/ ?6 g2 {$ y4 u# C
  837.               {
    8 G6 l, Y: c" o& I, t
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + G6 ~$ ~+ [5 y  f- s  ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    - x0 V' m4 l  B6 b! F' y: a& c/ j& B
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    , Y: }5 a' G2 B7 ?9 l2 B! W
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ?/ p+ t% s" V$ H2 t4 K
  842.                 * _6 `. W0 [* ]3 ^
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * m& w# ?. a# s, T9 F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 ]% P, e; |$ B- l' f* i
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");6 Y: @# s3 ~5 B# j
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, y" ]3 S- V: K- T& `9 X: s& J
  847.               }
    7 L9 q. \0 U- v. F- K0 j; r9 r
  848.               dwStartUpSteps=5;
    ) Z: C  V0 ]8 Q( Q) E5 j" E
  849.             }
    3 K4 ^( F; i" D3 W$ i
  850.           }. P& p" f! b5 n8 L% a- R* Q
  851.         }
    1 m: N2 F7 ?$ [1 }
  852.         else
    . p  S! a& U& o. H
  853.         {4 @3 k4 S6 |& m- _- @6 p
  854.           dwStartUpSteps=3;
    9 i" i9 {% y5 \5 ^
  855.         }% x2 y2 G9 ^. ?! C( H
  856.       }
    ' s6 F1 S! n( ]& q4 o3 y
  857.       break;& E# _3 N7 G/ {
  858.     case 5:
    1 k- V1 @& l& ^; q' A* T
  859.       {" R' C! L) _7 ^- d, p$ K
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    7 y+ M2 c1 R4 s
  861.         {" ]6 d& ?  y1 X
  862.           int opt_overwrite=1;5 g) Q: X1 R4 S& `$ a1 P2 B8 V+ C% f4 B
  863.           int opt_do_extract_withoutpath=0;
    6 B5 V. H. U( Q
  864.           unzFile uf=NULL;
    8 u/ w: }' X; t8 @# O! X

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

0 r! j' x0 a' Q' {: p# Y
$ Z2 T! b6 W- o; o* {

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-9 23:54

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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