找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
7 L9 k& Z8 A5 Y4 Y1 F
  1. / RevApp.cpp : Defines the class behaviors for the application.; T# `- h5 O5 u. J
  2. //
    4 t( B1 V+ S- w& k, G6 a1 p

  3. 2 y7 N  Z( W" f2 a( l9 r
  4. #include "stdafx.h"
    6 W" d; f9 z; @2 x# z

  5. 1 S: R/ A7 n) ~' @3 D5 _* b, p4 G  z
  6. //#define UNICODE
    8 K3 [& u- Z' \! I$ V
  7. //#include <gdiplus.h>5 f6 O7 v% ^# r" g0 U: x
  8. //using namespace Gdiplus;
    & x, [! y( Y0 K

  9. ' t# D% m  I/ I# r
  10. #include "RevApp.h"6 r' \8 Z2 q1 c" v5 X5 h
  11. #include "RevAppDlg.h"
    # C. T3 |! d0 Z8 j* `3 t
  12. / j) B+ l; j9 V* X
  13. #pragma warning(disable:4786)3 Y) E) U4 J1 K2 h( q9 o( S
  14. #include <map>0 [* W2 k# T' _, w: ?
  15. #include <list>4 |( H$ K# j. i* S3 \' b
  16. #include <direct.h>
    5 R! x: O; Z' N4 m7 K# l& y& ~
  17. ' }9 K; _5 d( m& j
  18. #ifdef _DEBUG8 S. V; X! E- p8 o7 t5 i, }; c
  19. #define new DEBUG_NEW
    ; e/ l  {" d$ Y
  20. #undef THIS_FILE" I& p0 W  V# J/ S# v
  21. static char THIS_FILE[] = __FILE__;6 t: e& `* K( N( L4 J
  22. #endif
    * g3 ]5 M7 k1 f& ^: H
  23. #include "SkinResDef.h"( K2 h: c; p+ W
  24. #include "ChangeBG.h"
    6 B- t6 O  y+ K* G% A% E4 F
  25. #include "AFXINET.H"
    3 L  z% z8 N* L' X

  26. ; N0 C7 |  Z7 [% o
  27. #define TRADITIONAL_CHINESE 0
    1 ]6 U; M+ C; t% A  A
  28. #define SIMPLIFY_CHINESE 15 p( D3 S9 P# F, t6 O9 Y1 ~
  29. #define ENGLISH 2
    " j- w1 Q5 e3 I4 T* \  y
  30. int m_iLanguage = ENGLISH;! x4 [  ^9 K" I3 G% a$ g
  31. /////////////////////////////////////////////////////////////////////////////
    : z: O, n/ `3 p0 z- D( }
  32. // CRevAppApp" n3 j- k7 l& O# x' _6 Q. z
  33.   O% f( X3 C" A6 M0 K! C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    3 \9 K  E3 S" ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    8 b; x, S% c+ D* d+ y% a
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.  H4 `  Q* k8 P' P. b5 N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  `* C9 w! C! ?
  38.         //}}AFX_MSG
    3 T- s- l( p* M0 x3 P
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)( u7 k4 k1 _0 ^0 e+ t, v, m
  40. END_MESSAGE_MAP()
    7 |$ y* w, v8 @! E1 v4 K. V

  41. " i, T% ?4 ?. P! I1 U8 B1 l8 S
  42. /////////////////////////////////////////////////////////////////////////////% t% p. c! j* D8 g
  43. // CRevAppApp construction
    # K' V4 w$ D5 ~4 ]" e  \, j

  44. 9 g  I0 l, q* i* M4 I# V; V2 V
  45. CRevAppApp::CRevAppApp()
    9 F* c3 {9 [* ^; I4 t; z7 @
  46. {
      {' {3 z" w8 U! G0 k
  47.         // TODO: add construction code here,% C2 P5 j3 G. h. P" x
  48.         // Place all significant initialization in InitInstance
    2 u; g2 z0 q, m
  49.   bDisplayIsBig5=FALSE;9 E4 O. O6 }1 }( E2 j3 f- m& I  I" v
  50.   bRestartUpdater=FALSE;
    , G# g! [) ]- w
  51.   bFinishUpdated=FALSE;, w/ m3 t5 e- k4 N- ^7 {! @# A! R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 [8 p) ^, D' F( A! L) O* `5 F# j
  53.   InitChangeDataBig52GBKS();
    - |  F" Z5 m, {- }5 t
  54.   InitChangeDataGBKS2Big5();
    , c8 L0 P% x! @, S, n- |; ~
  55.         //+ `" }. c" d# K, S
  56.         bClickRunExe = FALSE;
      ?  `9 @& e4 p3 o" w! f3 A
  57.         //( H  o' X. J4 S2 r* V
  58. }
    % J4 g4 t: b) N

  59. , u/ b& y' f- W/ {2 Q3 b9 x
  60. CRevAppApp::~CRevAppApp()
    3 g. m, ?$ ~) s
  61. {
    ! q  S8 j# B. ^2 i* R8 y- H+ z
  62.         // TODO: add construction code here,2 C4 l1 X( ]" {  C8 X( b
  63.         // Place all significant initialization in InitInstance
    : c8 b6 U2 z. n  N+ }+ ]: T
  64.   EndChangeData();
    6 {2 ]- O9 k8 W9 O* G
  65. }
    & m  H. Q' Y: V3 D
  66. 0 n) I2 S% o' L0 e$ ]. ?
  67. /////////////////////////////////////////////////////////////////////////////
    ( {* B3 O! n$ ~3 Q) Q" n
  68. // The one and only CRevAppApp object
    $ n0 b  `8 F" b% ^( K+ f

  69. 6 H" T: a! f# a
  70. CRevAppApp theApp;
    1 \2 M5 L7 z; ?  q4 m0 Q/ a7 z

  71. 3 _  J0 L* f3 \
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 t: Y- S3 k6 k
  73. {
    5 X1 y5 w+ f3 c
  74.   int iEOF=0;" w$ }0 ?, w# D/ s
  75.   char szTempName[MAX_PATH];
    3 k9 R* c! E0 Z' I
  76.   *szFileName=0;
    8 g! c# w" ?. }& X
  77.   iEOF=fscanf(fp,"%s",szTempName);$ \! M0 e% T) t( _
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # Q* b5 Z% ]! p  L. u0 k7 o
  79.   {. r* u. @, V' ^
  80.     strcpy(szFileName,&szTempName[1]);9 i8 I% m/ \5 V
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 X0 Q. c0 m) {1 i, P  l" U
  82.     {. z9 v9 R+ z8 {1 k/ T2 P
  83.       iEOF=fscanf(fp,"%s",szTempName);( k' K9 f, F6 a5 {/ V; M
  84.       strcat(szFileName," ");
    ! l0 W, L0 y8 T) O, [! C
  85.       strcat(szFileName,szTempName);
    / L: i/ a; y, i$ Z' S
  86.     }; s, z# ?) p- P4 b9 T
  87.     if(strlen(szFileName)>=1)
    & e: {/ {4 s3 V* {" Z
  88.     {
    * m) U' n3 h4 S8 m7 v
  89.       szFileName[strlen(szFileName)-1]=0;
    / \; i( K( |) _$ a7 N) H
  90.     }/ n' @9 A; f6 M& S0 a9 ^! T
  91.   }8 ?+ x9 k$ D" d7 O  B3 D) c/ a. i
  92.   return szFileName;; {! k0 x; g$ s
  93. }
    " B1 T5 S8 g' b- ?
  94. " p1 t( K$ I+ `' e/ S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% \, C9 c* `( `& \  t; n
  96. {$ B/ B& f( ~% _% P) k7 z+ o
  97.   FILE *fp;# \( N" }; [( T! o9 v
  98.   char *key=NULL;
    * `: _* B$ G6 I3 S/ u$ A$ B7 M% F
  99.   char version[MAX_PATH];, O4 w) H- p5 x# ?  c8 J
  100.   LPUPDATEFILE file,olds;
    9 [6 R! N% H, _- e( f$ E
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 y  l& l" v( |# s

  102. ) s0 s& W" m' d
  103.   UpdateList.clear();0 F% n# K) v  y  V
  104.   UpdateFile.clear();+ [7 O1 F, F) q. ]1 i' X
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' q# x: s5 j2 L9 ~' D! n/ g( a
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 }& }. l- U& S* N8 ?
  107.   fscanf(fp,"%s",version);9 f0 E! K1 C/ I+ f$ ~% R- Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 {! r! Z# Y, c. r$ r. @2 U* l
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / [6 b2 L6 Q- c- E
  110.   {. i/ m( f5 r# m3 T  Y+ L
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + f, z* d' P" g* z7 e% P5 x$ N
  112.     fscanf(fp,"%s",file->path);
    1 i) W* ?( v& h9 ~5 l% p
  113.     ReadFileNames(fp,file->file);$ [. d0 Q5 D% z* C  P+ b
  114.     strcpy(file->full,".");
    2 O' t2 @5 C2 N0 T( U1 j
  115.     strcat(file->full,file->path);$ A3 n( u% ^) q1 I+ P
  116.     strcat(file->full,file->file);% F% z* A( W/ J/ X  z+ e7 S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 F3 G: C& X; v) ?. H  t6 a
  118.     {8 i' P0 ]7 S& W3 R5 T
  119.       file->vers=(float)atof(version);" N( B, W( y9 a' B
  120.       UpdateList.push_back(file->full);( F( q/ e& R, U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - ^) K0 Z2 u0 B" W
  122.     }# D) q9 v9 {& f3 v  I
  123.     else5 c+ S3 v2 \2 ?4 `; I7 a
  124.     {. X( P+ g) b- Y% ]7 P! a
  125.       olds=(*p).second;- z2 K5 C2 F% Y3 L
  126.       if(olds->vers<(float)atof(version)); p3 [# B; I# w6 C
  127.       {
    * t! d% t& |" Y  M2 X
  128.         olds->vers=(float)atof(version);8 M- B) \2 V5 W& ^6 {% f- w$ q1 v
  129.       }
    " v: S+ l+ H2 l
  130.       free(file);7 g  e0 G5 g6 ?( R; \4 V8 b
  131.     }
    8 H+ q- o/ s, i2 f* J6 `. s! ^7 n
  132.   }
    ; Z# U. P4 f2 w
  133.   fclose(fp);8 P: X2 f. \0 {( J5 ~7 h: P
  134.   return true;; j- C5 G# k0 [
  135. }/ J1 z% T3 h" P! C+ ^

  136. / _2 U+ u% b- J) A5 ^: D
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " |/ ^: K. Q* A  z4 Z0 ^
  138. {
    & A$ h  W  a3 K( z$ j7 F) Z  C
  139.   TCHAR  szFull[MAX_PATH];9 N$ x; f+ g$ c. L6 V6 j
  140.   TCHAR *token,*inter;! [4 B! m5 X  x$ ?# w. T
  141.   *szPath=0;- Y. ~1 G! |" z8 ]
  142.   strcpy(szFull,szFullPath);  A. g2 G) L" I& W$ l6 S# h
  143.   token=strtok(szFull,"\\/");
    / s/ M; g% i# o/ q9 ]" c( |. B; l
  144.   inter=token;- Y5 @  Y/ B( @" H3 B
  145.   while(token=strtok(NULL,"\\/"))
    3 `" u7 }* W0 [2 o+ l
  146.   {
    ( o6 B( F! n) s7 b  g& `' P" A
  147.     strcat(szPath,inter);
    5 r: B- M" V* r$ [6 q
  148.     strcat(szPath,"\");
    * i* f2 R2 m; P6 @$ y
  149.     inter=token;
    " p7 q8 q( N: k7 K1 r/ T7 h2 P
  150.   }0 W( d' K$ u1 J
  151.   return strlen(szPath);
    + K0 q' ]2 H* ?& B: I: @# C8 s
  152. }
    7 s8 Q9 ^. q: Y0 Y; ]

  153. / e) l8 o/ {& E0 c- J8 T+ S3 J
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)  k. @6 F4 U: f+ Y# p1 \
  155. {
    ( O- D3 h& l  S# O1 T7 Q6 U7 n
  156.   DWORD attrib=GetFileAttributes(Target);/ K8 R# h2 l& Y! p( m8 n6 I
  157.   if(attrib!=-1)% K9 {8 A% P0 \' s# o# y
  158.   {5 q' x1 h5 s; o* @2 Y( P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    4 y; @  q, v7 o
  160.     {) Y( ~7 ^) M& e& m- }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 M7 O! Z3 q0 r, K* ~# `
  162.       SetFileAttributes(Target,attrib);
    $ n" h. w& ]- I7 i' O
  163.     }- R5 Q" ?8 x9 C! V8 Y
  164.   }0 a& b) m* J7 ~/ _2 u% r
  165.   CopyFile(Source,Target,Erase);
    5 r4 X8 l2 f- ^7 W2 X7 X
  166. }) `' S5 P  c8 E: @

  167. 7 @. v% f+ j6 B) w8 o$ p  q% L# W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      b# H' \6 l- Q. x8 I9 n
  169. {
    4 X& f7 R1 M7 C6 o& u' v* \; ~+ |
  170.      FILE *fp;. i! W0 \4 Q# G. @, X
  171.      char  szBuffer[8192];0 G! Q5 C: |# t- Y; H7 u  r
  172.   va_list  argptr;  r: {. V4 c- |  d) m4 Y5 Y. S  Q) J# G
  173. ' ~' Q' r1 x. p: }5 ~7 T! J
  174.         va_start(argptr,message);) I" @! D9 c6 {+ q( r! e
  175.         vsprintf(szBuffer,message,argptr);
    & k- m" b" ~* [/ W
  176.         va_end(argptr);
    7 t& S' v- {! K7 a; |; S& r9 o$ Z+ V
  177.   fp=fopen(FileName,"a");
    / K) a* ?' l+ E2 w/ q1 r9 U
  178.   if(fp)! Y% e( ]3 |1 ]9 u
  179.   {
    - g4 ^6 ]0 J' q3 H, `. s( C
  180.     fprintf(fp,szBuffer);
    & r& U/ S! l8 V6 E
  181.     fclose(fp);
    9 w* e# b, y, R9 c/ c2 E& j7 M! V6 F
  182.           _flushall();7 g# K. e3 ^" q. h7 z
  183.   }0 y5 g+ [) _3 r4 G1 S5 ~/ ^
  184. }
    ) o* b& W' o7 r3 b. y" z( m

  185. 4 M2 t, O# g# s# U2 B7 f& }( @
  186. BOOL CRevAppApp::Fclearf(char *FileName)% d, k  ^' k: W, i4 S) J
  187. {
    ( u# P. Z0 N8 q! T0 ]5 D! B
  188.      FILE *fp;
    ! C+ R; t  y# r$ }% J: _, a
  189.     DWORD  attrib;2 p1 H( A8 N9 B% F7 ?
  190.   attrib=GetFileAttributes(FileName);% V( T# V: d# S% ?  x
  191.   if(attrib!=-1)- F; G4 |0 j; m* c' N8 @9 u, |
  192.   {
    0 R2 j* @( e% D* }& Q3 ~' }0 V
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 B' @* z3 R& \, e
  194.     if(!SetFileAttributes(FileName,attrib))1 Z/ A8 e8 D) p
  195.     {6 Q0 w% Z  r7 j7 q' S# U
  196.       return FALSE;7 e  c" q9 }4 M/ X  Y" C
  197.     }
    # t5 h' w/ K- _0 S
  198.   }- c! B2 W6 J) |5 @- T
  199.   fp=fopen(FileName,"wb");/ m3 {" [( i+ r1 N- H
  200.   if(fp)  O5 Q' x$ z6 H8 b! g9 \
  201.   {
    ) g' m0 V4 a2 \. a4 _$ |
  202.     fclose(fp);
    5 n! v- H( W% C+ H) @# q% d, W
  203.   }
    ' B) n7 w0 S  L! ^- I* G0 V
  204.   return TRUE;7 e9 B' z! m6 R: p
  205. }
    ) r! q5 K/ ?# L" L& {' b8 A
  206. , u& \6 e9 F$ P- z0 w/ \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' _& Z; L% i' S* p& ?% }( x+ }
  208. {
    9 n7 c4 `* A* `# \. U
  209.   char filename[MAX_PATH];9 s4 o4 p- O/ E% W) ^
  210.   LPUPDATEFILE file,olds;
    , W0 }5 i6 S  _4 q
  211.   std::map<int,CString>::iterator i;
    , _% d# p- T; r2 L- W6 n
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: J# Q) H. S' n& `3 S2 @4 a* C
  213.   std::list<CString>::iterator l;* B( [8 u& R5 C
  214. # y9 q7 v" T6 B$ s& H% m: u
  215.   if(bFirstUpdate)
    , n) t0 ]5 Q+ M& N- A& ~1 N! ]
  216.   {
    & k7 G* J9 ]/ b% y& m# Q# N& v* U
  217.     dwCurrFile=0;
    & s9 I6 ?* T  @% m  {8 z
  218.     bFirstUpdate=FALSE;* `/ }  J: j/ C0 L. T% C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) G+ Q% ^2 b* x9 J- j7 \
  220.     {! I6 ~# U% S$ ?! W! g. o
  221.       dwTotalFiles=UpdateLocal.size();. ~; d. }- d1 e
  222.       dwDownLoaded=0;
    * Q8 c4 R" P1 \; J) ^0 M  F
  223.       bSilentStep=FALSE;
    4 Z0 p5 H/ b4 m2 R; Y1 N- O8 P( |0 t
  224.       bCompressed=TRUE;
    4 U! A6 ~8 J, z* i  C
  225.       strExtLocal.Empty();
    # r! q& ~" n+ m+ ^& R
  226.       strFullName=(*i).second;- n/ C' I3 a8 X6 [! J- q0 @
  227.       dwProgramState=AP_CONNECT;+ u. B0 g$ g) N& k1 l! ]* i+ y  {
  228.       return TRUE;* B1 F. M; k$ N5 T4 H8 i4 q3 i
  229.     }
    9 ?! c  m( r3 N* _
  230.   }: W" M8 G# U; G& T; ~
  231.   else if(bRestartUpdater==FALSE)7 C5 U2 n4 p7 b7 |1 I* X' i# |) C
  232.   {) Y4 t! O/ K) ~1 r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), S( Q' p' Q* ]* L, X" l
  234.     {
      B* u: w6 T0 t7 g; U9 _
  235.       file=(*p).second;
    - ~* [$ N# P6 ^0 `% d- m0 _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 O4 r3 V4 r1 W1 B6 n4 [, g6 q5 \
  237.       {7 F9 a/ x- [. W$ T4 P1 U- w
  238.         olds=(*p).second;
      U3 c' r0 T% e9 n; U! m, a# ]
  239.         olds->vers=file->vers;* _$ i& n7 t+ m+ g* M
  240.       }6 X' o3 m7 O( J$ o
  241.       else
    ' {8 o% ~( u% }$ ^
  242.       {
    4 x7 }5 \" ~6 ?+ m$ Z4 W" u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - O2 {+ k+ G: t. ~2 V
  244.         memcpy(olds,file,sizeof(UPDATEFILE));( @1 J% b0 Q5 |" F
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    - k3 A% E( }& f' H
  246.       }
    : p7 w& v+ z* s! q; u8 Q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    - L7 m! @! M. X$ D
  248.       sprintf(filename,"(%s)",file->file);
    ' h! \4 w3 q' W/ C4 v3 J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # |; J1 x# p- W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & V+ [/ D3 L8 }/ Y" p# Y6 ?) D
  251.     }$ u- B2 a0 F, o, Y3 r4 x
  252.     dwCurrFile++;
    0 a& S+ O) M. x7 E3 J$ T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 c  m8 z9 w9 L/ \
  254.     {
    ) e: J" z7 D0 E" F7 n1 |* e
  255.       bSilentStep=FALSE;! B) e$ {6 l+ K; o* V
  256.       bCompressed=TRUE;, F& o& I) T- \6 H* X
  257.       strExtLocal.Empty();( a$ k7 D; H' f  L0 }# @2 z, X8 d8 c& @
  258.       strFullName=(*i).second;
    ; @" M" X4 z9 d; j+ f6 s
  259.       dwProgramState=AP_CONNECT;
    ; {6 U- p, ~0 d
  260.       return TRUE;
    1 ]2 R0 o1 h: w# P" v2 o
  261.     }
    8 p- F: M! ^6 X! @' ]% S
  262.     if(!bRestartUpdater)( E+ m7 _+ S) e) ]% y  L) A
  263.     {
    2 h% q8 ^, V- [- z7 O
  264.       int iCurrSize,iFileSize;' u6 e& m1 c; _8 o5 G, i0 v
  265.       iCurrSize=0;- D4 g9 O/ x& ]7 z  y& V
  266.       iFileSize=UpdateList2.size();' C) f9 c' \, I0 @) h: c- x  x
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 Z4 o& c" }. D% q& w# i) V2 g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( ~3 c7 _4 I, @! L
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ k" \, e4 t3 t- B0 f
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& T, ?3 |8 {2 G
  271.       Fclearf(".\\update.dat");
    7 N' c1 g- Y6 @( [- U
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 z  @0 v7 v# B
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / q  Z0 Q) j% c  s0 G: L# G+ \3 b8 v: Z
  274.       {  ~2 i: Z& l5 S9 e( Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())3 {& H, u+ Q% v
  276.         {
    6 I; g7 ]6 T  X$ |' J$ y' L
  277.           file=(*p).second;+ h( Y* P0 H5 f
  278.           sprintf(filename,"(%s)",file->file);8 I! p5 s- ~: Z: Q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( M+ D9 y+ m7 j% \- O8 m
  280.           iCurrSize++;9 z( K2 z' n( |8 H& {3 _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 ^7 l7 n# a: w3 D1 V$ d
  282.         }
    % }8 b0 D+ U1 e) _6 v3 Z' A
  283.       }! c; t& v6 i6 k4 S, q0 \
  284.       unlink(".\\update.txt");2 L7 v$ }% \$ [! r. C* o2 v8 p1 o
  285.       unlink(".\\update.tmp");0 V! \6 g. t( @5 `/ d
  286.       Fclearf(".\\checkversion.dat");
    8 E5 i" A1 y0 F2 @2 Q3 t
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    7 m. R% l3 ~1 t# e  Z$ H" H, i
  288.       if(UpdateLocal.size())
    & A  F) f- U9 f" b% ~1 ?
  289.       {
    4 |0 K) p) c8 Y
  290.         UpdateLocal.clear();
    , m" a2 L: a3 d+ L+ k1 t  K
  291.       }: U) F# p" ]  @/ T2 R" J2 F* m5 Z
  292.       if(UpdateFile3.size())
    ' j. o+ ~5 h  I7 f' |
  293.       {
    " J  Z! d1 w- q) O  R" X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 Q2 G8 W+ s$ }  Y
  295.         {* v8 q2 W% e9 D3 E0 U+ Z' |
  296.           file=(*p).second;3 d, w- m& l* O% }
  297.           free(file);
    3 g$ @  x0 I9 c1 P2 H; ]; ?: J
  298.         }! j/ V/ R8 E+ c: L0 v. B. Y
  299.         UpdateFile3.clear();8 L) u, v: {* k
  300.         UpdateList3.clear();5 q4 L- P; W! j% }1 m4 [) A- B0 _
  301.       }
      B. r; w3 v: I6 Y1 q2 o
  302.       if(UpdateFile2.size())
    % t! J* S' U) u9 k* X2 r& Z
  303.       {
    # A) {+ G2 x) |8 i4 f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- s) t5 I1 h3 M6 _
  305.         {
    - q: ]+ H7 G. F+ G1 J
  306.           file=(*p).second;
    ; I3 O$ v7 I( {! s* r0 G
  307.           free(file);
    ! i/ Y5 Z2 q; [/ C* W
  308.         }! J: h, S/ J# u1 \& K/ ^" ^7 V
  309.         UpdateFile2.clear();5 Z9 l: Y: R5 W
  310.         UpdateList2.clear();
    4 ^; R" m' S7 m* u5 T
  311.       }6 Y2 u* B4 n9 Q( K: ^+ m
  312.       if(UpdateFile1.size())! d+ g& Y* K; h$ B, r2 i
  313.       {* u& N8 ]2 d( a' t; I2 v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 w* M% O2 x6 x
  315.         {# h7 L! y3 y1 o$ G
  316.           file=(*p).second;* v) a5 }! g& p' Z- i. k! M8 l
  317.           free(file);
    , A  ?0 F1 {; K- Z: d: C
  318.         }) j* Q0 e* d; j( R/ ~
  319.         UpdateFile1.clear();
    * R  C$ A( f# ^$ A6 g- ^# Y& {3 e6 _2 h
  320.         UpdateList1.clear();: @2 `8 Z  y! s" D: t
  321.       }! G6 ~4 Y* y5 X
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 o- J) Z3 b9 P8 m
  323.     }
    % |3 s$ Q; \$ c0 l7 I& a5 v2 Q3 q
  324.   }
    9 q, G! F  A6 c. I
  325.   return FALSE;
    ( I! @+ o: J  m1 P. k; d. x
  326. }
    , c* ^$ \: E9 S2 w$ K1 [

  327. 0 T8 A, B4 N) T9 T3 l9 E8 r( n
  328. void CRevAppApp::ClearAll(void)# @2 a0 M! B! c7 ~% c7 f4 q
  329. {
    0 B5 ]9 N2 m& i0 I  e5 u
  330.   LPUPDATEFILE file;$ H$ r: X. `: I9 h1 K" C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' X, J9 a) O! B8 c. C
  332.   i: k% b' m& q2 _
  333.   if(UpdateLocal.size())! Q& r5 z7 ?" T% P6 y% m
  334.   {
    ! p" D: f. z' {" v
  335.     UpdateLocal.clear();& U( t. [2 c# d1 X7 _3 h
  336.   }+ E9 T' D0 V6 M1 J8 B$ \: `4 `
  337.   if(UpdateFile3.size())
    ' O/ ^% y/ ?" P- r& l4 u8 S* x
  338.   {
    7 C: |6 @- D: ?, k0 Y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - O1 [* }  l2 p) C/ [( F
  340.     {
    " O  ^& H% q0 d; r
  341.       file=(*p).second;0 h8 J8 P6 q! U+ J1 `+ @
  342.       free(file);7 {% O& \% B; I
  343.     }
    & x( N% o, y( A5 c4 d1 @
  344.     UpdateFile3.clear();! l" P) V- @8 B8 b& P3 a! M4 Q" ^  r
  345.     UpdateList3.clear();
    , Q$ m* r' n- e' E0 B2 [6 G7 s
  346.   }: M& b; ]0 A% N, d
  347.   if(UpdateFile2.size())  W$ |9 k* W6 b% Q, m
  348.   {
    & z. r: k7 _  }$ u- b, N
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) t; Q, Z" r5 t0 Z
  350.     {
    7 P. b3 x; s8 h0 Y# m/ r) I
  351.       file=(*p).second;9 P! e7 T5 ~! k0 Q
  352.       free(file);
    - d; A- e: V4 b0 J
  353.     }
    8 P! C& G- S& x
  354.     UpdateFile2.clear();% i2 N+ Y* H3 U; o; e- T: E
  355.     UpdateList2.clear();
    * _5 e$ }# X4 r$ I$ L+ d  V8 ^
  356.   }* E( G/ D* C2 a; r- j; \
  357.   if(UpdateFile1.size())4 w0 v. O6 y4 o0 V0 Y  Y1 K
  358.   {
    , Y5 Z- x8 c- T" d
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), P4 I" R6 e! m) H( i
  360.     {! U! J3 j) p' z& p4 @
  361.       file=(*p).second;' E% ~2 Z1 M/ F) E, i2 F% B
  362.       free(file);
    3 U- ]+ ~4 v, |# G5 J) j9 V
  363.     }
    / d& z# q- a) y1 U9 f- J/ U
  364.     UpdateFile1.clear();& ]' v. n, `+ E- B& G
  365.     UpdateList1.clear();3 a: d: x# S) i6 k
  366.   }: t: K# \, w, T! Q. I/ U( @9 i
  367. }  
    5 K/ i- G: b) n7 [! i
  368.   
    : V- B! O5 P) D1 b
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ j4 k* ]; g9 J- Q! C! }" T
  370. {
    4 |7 a1 _6 b& g. N1 ^2 ~0 J
  371.   int c;
    - B/ c, I8 t" n  _5 Z& u
  372.   LPUPDATEFILE file1,file2;$ g  y) ]6 b+ m, e& R2 I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;3 [8 m2 n2 T; X/ u
  374.   std::list<CString>::iterator l;
    9 l# c0 `  z: M9 \6 @3 i' B6 B9 y
  375. / S! K1 [1 P  o$ U- {- l& I
  376.   UpdateLocal.clear();( p  G$ m) p/ g7 i8 O4 t5 ~9 z1 e
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 i  |5 M8 A+ B6 p0 D+ `* ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 H, M/ G8 q6 W* \4 }  Q
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( j/ O5 e, ~* y, m8 p# q7 Z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 m$ B/ U0 ^# w# I& _
  381.   if(UpdateFile3.size())2 a  X# c1 g$ g) G9 H3 E( m8 T
  382.   {( P8 B6 ?' G2 z! p* u6 V0 ]
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , D/ b, ]$ a/ t
  384.     {3 \1 g6 K6 q2 ?2 D% F
  385.       file2=(LPUPDATEFILE)(*i).second;1 B- }6 \  c" ]4 J# ]" P; {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    + @( u% P5 j0 u) R) K" l$ m
  387.       {
    : C- K: n6 k7 I% |) U
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! A: Y; x' M! X6 i; e
  389.         file1->vers=file2->vers;5 U4 ^1 R' {9 K+ Y
  390.       }
    ( i; A, L% b6 ^4 q4 k0 N
  391.       else
      L6 N- B( a2 S/ j; a$ M
  392.       {
    6 {. G, h# A/ T9 f) w
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, l0 E* g) ]1 W: p- q* Z1 c" _+ ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% d" }2 v& \9 s! y
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    $ Z  \. Q3 k; V) e8 q7 {4 @3 z
  396.       }
    ( |  f% X! |3 o" i) n
  397.     }0 l' G+ b7 G* J3 }5 `) E8 n
  398.   }# v  G5 W, F4 v* l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( l/ X3 X, E- O* H3 h; T
  400.   {1 z0 ^" p) X/ ?  r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : H" {- c5 v' C6 i; h9 ]) |
  402.     {9 N) r- U( d9 `  y1 W7 d- y
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; B7 [+ G# m3 w8 ^' T+ ?
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' P# u9 C% k; v$ ?
  405.       {; x' ~1 D) f1 ?
  406.         file1=(LPUPDATEFILE)(*p).second;  G, Q1 x% Q# T. [) V& I
  407.         if(file1->vers!=file2->vers)' _" |* b5 s7 m
  408.         {
    ( `5 k1 A( E  L* y# y# v
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! d6 q4 K$ n: y4 t
  410.           c++;8 a) n/ ?$ D. l9 _
  411.         }5 @; y% X) J- |4 S; n( w9 w
  412.       }: ]: ]  n. ?4 t2 L% d  s. S  R
  413.       else# F9 v7 ~" a$ D
  414.       {9 a- v- I' }6 {/ H8 Q7 L! [, D
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 ~. c# F+ z8 ~6 Q* d, M& @# D
  416.         c++;  R% k% O: g) ?8 s# b. c/ D
  417.       }
    8 z9 \4 P* v5 x* x; B
  418.     }
    % f5 x0 j: l' o8 f* U( ~/ E  f
  419.   }
    ; B3 L; x" x# C9 ^  P7 _7 Q
  420.   unlink(".\\DownLoad\\update.txt");: \- `4 A7 I, L% T1 P, j) u3 [  R
  421.   if(UpdateLocal.size()) return TRUE;
    ) ~  M' X) t' i# x8 ^
  422.   else                   return FALSE;. Y  Z/ G0 L/ [# g
  423. }2 C" g9 c; |: _

  424. . d7 h/ ]  v- T) ]9 ?/ g4 O' D' M  e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"7 m0 m3 P5 y8 p2 [9 M' ~2 ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 ]! x7 M" c. N8 e

  427. 3 T- i' T! }( J$ i
  428. ! P/ I/ s$ Q: Q0 i5 @
  429. # H2 ~( \! [* h
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), ^0 n+ b* Y2 {* A2 u2 z5 ^( y! ^
  431. {* w) R  v, H; d8 A8 `4 c' [! p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    7 G* \6 N' d0 {1 `8 K& [
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" S  T- b7 W7 O1 }
  434.   {, I$ P4 u9 h5 b% ?: e- _3 P
  435.     char szLanguage[50];
    % C3 P5 ~4 g) v! o/ s! r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% q# m2 N/ W& u! g" _
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 F  L* J  S7 n# b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + o9 ^& j+ y/ v7 g: \
  439.     else                                   m_iLanguage=ENGLISH;6 l+ t# X) g. h
  440.     char szRegister[100];4 q& X* A! o/ @
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& ?: p8 j# b6 v: s1 E1 H
  442.     strRegsName=szRegister;0 y4 ~8 P- B1 @3 R# L! P
  443.     char szPatchURL[100];
    5 b+ p* B8 r6 s" M* [: I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , V; B# c( h  [/ _) ~5 V8 e, u
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ L! I  e+ v1 s3 K
  446.   }
    # l% D# w7 g1 e! Y6 a) C
  447.   else
    ) u$ C" ~3 {2 |! j4 T
  448.   {2 I) i7 Z; n) z( Y0 N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 p% _# b: h+ C: N# I
  450.     strRegsName=DEFAULT_REG_URL;
    5 _  m0 O7 V+ |- W7 T
  451.   }
    3 n2 A# m0 E! d! a  H3 u& H8 @9 D
  452.   if(GetFileAttributes("hosts.ini")!=-1)& K  w$ k$ l$ q) K$ f
  453.   {
    " |4 g) ]. ~* B+ r
  454.     char szIP[50];
    4 E! b4 \: p. }' R( N) f7 ^& {
  455.     char szDIR[300];
    * D( w9 _4 n0 i7 m9 Z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): h9 K5 G$ Y1 ^" T! `9 k
  457.     {  O6 r. ^! I4 d
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 L& I9 E7 W# c! Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 \0 p9 u" V" \  Y4 Y9 _
  460.       strHostName=szIP;
    9 g1 K7 S- G8 t7 D6 o! a+ M
  461.       strHostPath.Format("/%s",szDIR);2 h) S; @$ r  r
  462.     }
    * C; i! U  ~) |! Q
  463.     else
    " q/ m% r4 Y9 R8 U% ^" \" H
  464.     {
    , r# o0 v( [% Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! v' s) k% ~: r
  466.       {
    5 L) J/ p8 J, E. ~# ]
  467.         char szLanguage[50];
    . l/ [! Z; |5 t& I$ a/ A8 f' h5 G- j, i4 m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! X% a' T- Q/ a0 W+ [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) J3 r  e( [6 A* [( W
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& P5 V& D* e$ O( n) j+ \
  471.         else                                   m_iLanguage=ENGLISH;
    3 a2 s# K' X0 S- N) B; x! u& d  W
  472.         char szRegister[100];% I4 `: H6 a& F! a+ l4 K! N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % R/ ~6 I+ R& o" ]) U/ y
  474.         strRegsName=szRegister;7 T, |7 @8 L$ I$ ~
  475.         char szPatchURL[100];; e$ e2 g: @" d& [2 u  i: S
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  l$ D4 `8 H. U3 m% U! U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, a* _) m* _% K' c& W
  478.       }
    3 j( M- V: }; Q$ \. ^, y
  479.       else
    . S- p2 [2 E4 R3 `. V
  480.       {
    ! n/ Y# Q: U! ~4 C8 U, |: N& M0 h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- V% W; g2 Q6 Z9 D7 A2 B- q) r
  482.         strRegsName=DEFAULT_REG_URL;
    ; o$ l' Z1 B( k* {; k& E9 B3 ~
  483.       }: e  u- Z5 E' T3 j" z5 H8 T
  484.     }
    7 J+ _5 P" F8 F5 S9 e# }
  485.   }, i1 q; E6 }2 i6 U6 g+ F
  486.   return true;
    5 `# t4 \# h/ P  k
  487. }
    4 E9 X% P6 `8 _, Z- M4 ~4 U' |

  488. + \# V" Z* V. m3 Y$ P
  489. #include ".\ZLib\unzip.h"/ y1 e% C0 h. u' D- M# S; b
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    * p# h& T0 j4 I/ z. s3 F
  491. /////////////////////////////////////////////////////////////////////////////( t, F+ @4 _" H9 [
  492. // CRevAppApp initialization
    0 Z* @/ g* ?9 N" ?. V! d* _
  493. ( m4 t3 O4 x% j' v& |$ U
  494. BOOL CRevAppApp::InitInstance()' f9 n/ S2 b1 A9 j7 E/ C* ]3 ~. E
  495. {
    . F2 r7 [) ?6 Y. Q- a: ]( @: S
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];# x" H3 c: _+ j) S9 E4 _+ X

  497. 0 B, D: R3 V+ E0 t. z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);, N/ i( n9 x+ y4 O% s; i7 X
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 g9 t7 b' G0 `2 j  p
  500.   {
    . [6 X0 M$ w( I6 b: z/ H' d; u8 F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");6 W+ ]3 W$ N6 J5 P# J
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    " Y( s. J) O! L2 Q% L" Y7 ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))7 [2 `: `/ T* Q5 e: i
  504.     {
    ; K" _$ ]. @" Q! u. `
  505.       strcpy(szPath,szPathTarget);3 `, c* y  Q+ b6 D2 J
  506.       SetCurrentDirectory(szPath);9 r5 q" c8 {0 G' p. z& D# j& u. |
  507.     }
    ) |1 [5 }* h+ f5 M. r. U7 p
  508.   }2 j, X5 c# r4 Z6 ^) B2 K: l
  509. #ifdef _DEBUG# o' F* M& L; [7 ?( m
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ s% l8 i& {$ `: O0 a
  511. #else
    ; K7 a$ X6 v4 R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))$ ~1 U5 I, F  {9 J) R' H! ~
  513. #endif
    7 g! `- k9 y4 ]
  514.   {
    ) ^3 c+ Q# ]8 U( K
  515.     char tempFileName[MAX_PATH];
    : U% G8 Y5 D2 u; C
  516.     strcpy(tempFileName,szPathSource);* }& q  w* L7 A! G, O8 F0 S5 |8 _
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; A, j- r6 L  y( O& `9 V6 d
  518.     strcat(tempFileName,"\\$CSUpdate.exe");9 a! y0 F9 L# T( [; G' ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    , L7 P4 F9 p2 l! ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; _* e, J& F6 D/ }3 h% ?
  521.     return TRUE;' k2 h( D' A6 l4 t+ |; A- Q
  522.   }
    ( U3 J# y. M2 ^5 L6 L9 Q; Q. d
  523.   // Nuke 0118: Delete run.exe
      |' O: d" C: E  j6 I, f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + \6 u& V- a4 P" R
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) U: z  O3 g& k4 x/ Q1 Q6 ~
  526.   if(!ReadCfgFile("Config.ini"))
    ! i6 D% A( z6 u2 E
  527.   {7 x/ E' Z" A7 u, q/ }+ b1 c8 X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    # {& u) O& J8 R1 G1 u
  529.     return TRUE;' d7 [& ?* L2 Z! M1 N5 e
  530.   }
    % a8 |- v6 U# H/ I+ `# ~1 w
  531.   HANDLE mutex;
    ' n$ `. d, \; m4 b8 E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))) W1 d" W' T& x/ v
  533.   {& X+ v% R0 ?% z; d$ P" ]+ @7 Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)- C* w/ E  Y3 A' O
  535.     {$ Z( s+ C( I$ o) _; A
  536.       CloseHandle(mutex);  Y# Q. ]0 Y; w; ]: m; }
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    $ C, T6 I1 c  y& H# q0 L* N
  538.       return TRUE;( S% i6 ~% _: ~) M- K% Q7 J( O
  539.     }
    . u5 }( B- \3 n. G6 ?3 V
  540.   }  ! V( Q$ u! X2 v. z% z6 g& b1 L
  541.   CloseHandle(mutex);! O" l4 J* d3 t8 q2 C+ i
  542. , A) B3 ]4 A: f7 K$ n( E- ]
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    5 p6 ~: f1 u7 B- V6 _* ^% K4 _5 @
  544. 3 y$ z! w2 S( }; }+ @- D" w
  545.         AfxEnableControlContainer();2 i2 t' \6 R( @5 c
  546. 5 F2 @7 @# V: w
  547.   bCanUpdate=FALSE;
    8 H0 y4 Q4 t% e
  548.   dwStartUpSteps=1;
    ) X( ?* X7 P  ^) g
  549.   dwProgramState=AP_NOTHING;/ v" @' ^) r0 k( m' S7 z

  550. + ~1 Y: |9 E* ~+ ]8 `. U% ~
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 }3 ^. L- t( j. r

  552. ' i! S) B0 h! V( q
  553.         // Standard initialization) f! V: }! h% i" b- W1 ]4 b
  554.         // If you are not using these features and wish to reduce the size
    - k3 |) v6 x$ c  H+ q# P
  555.         //  of your final executable, you should remove from the following4 V! w7 t: p! l
  556.         //  the specific initialization routines you do not need.( v* e9 M8 d" n* H; g  _" T
  557. 5 z) l$ _  |! i$ Z
  558. #ifdef _AFXDLL" t( H4 U/ N9 e3 [1 Q6 c
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 i. @2 ]0 I* ^; ^
  560. #else+ c4 h% u& Z" L' @: ~- Y6 o
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , K1 K. u7 E  R( L
  562. #endif: y2 J' S) t) |2 ~; p/ K. D
  563. ' k. @( b$ W0 ~- L2 f2 F2 x3 k
  564.   dlg=new CRevAppDlg;, \/ d. h0 c0 a' W6 I  o
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    & n7 L0 e- v  i; j' F1 j! u' t$ h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);, s( ]$ y9 a# B0 Q/ X
  567.   m_pMainWnd=dlg;- V6 d/ N* }! i

  568. / _* F  {8 I  K
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);& m3 G& M+ k9 A6 p& Y

  570. , H  f9 u  Q+ O! D" ?+ @: M6 w; z8 n
  571. //  GdiplusStartupInput gdiplusStartupInput;# Q) d/ |$ [' ^- v5 i5 v! l
  572. //  ULONG_PTR gdiplusToken;' }( u3 \' Y9 Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' y5 t) B2 r+ h- e$ q$ ]* X, [

  574. 5 ^1 q7 `, f! o2 J  ^8 `
  575. //        CRevAppDlg dlg;
    7 q: t6 n8 A- O' R" u! Y/ v
  576. //        int nResponse = dlg.DoModal();9 Y, G6 R  z6 j
  577. //        if (nResponse == IDOK)
    " k. f3 ^3 P& ]4 T( d2 B
  578. //        {
    1 N9 L  P, h4 o% h/ ]
  579. //                // TODO: Place code here to handle when the dialog is
    8 h! E- o2 L0 U1 c) [- M7 C
  580. //                //  dismissed with OK
    * I) E3 E1 W2 p! C
  581. //        }
    - q1 v, i/ k% @* m. h
  582. //        else if (nResponse == IDCANCEL)4 L! h' ?2 x( j
  583. //        {" M  X2 h; C, ?0 E2 C$ w
  584. //                // TODO: Place code here to handle when the dialog is
    # r4 }5 y( W7 `& }  [, v; L
  585. //                //  dismissed with Cancel  F  N5 y  R2 T1 X( ^/ n
  586. //        }
    ! A; h% H7 v, ~0 ~

  587. * \1 J, [. Z# |  o+ x! G
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 F7 H! u% v$ A* t1 t. _
  589.         //  application, rather than start the application's message pump.% l& U# z' M5 D! F1 Y0 q. h( d
  590.         return TRUE;
    0 y6 x+ _2 j# j9 Q6 V) o& b6 P
  591. }
    ( v8 P4 i' E4 O$ ~# ?

  592. % k$ [1 R2 ?$ |: I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    : o8 f/ U& Y- {
  594. {$ n6 L' L$ h" g- |3 \2 Y' G
  595.   int i;0 y3 t3 T% J( m1 s
  596.   char *szRet;
    8 Q+ f6 K3 U2 T- H+ d+ t

  597. / _3 _/ v4 n$ ~+ q: g
  598.   if(pSource) { itoken=0; sztoken=pSource; }; m' d6 D# ^1 p) Q
  599.   if(sztoken)- T) I8 b  w( S- ?' S/ N
  600.   {
    # p9 o  `0 O0 |
  601.     szRet=&sztoken[itoken];, m! I7 T8 O- S# x$ m, M: Y
  602.     while(sztoken[itoken])
    ) N8 c/ ^) J' B# m8 w$ ?
  603.     {
    # i% W5 f' c8 t( M$ W; T6 e
  604.       for(i=0;i<(int)strlen(token);i++)
    9 ^2 g0 a) m; o, M; F
  605.       {
    , y" r2 T( [9 A7 i5 V8 \
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 q* E! V+ v# l
  607.         {
    : t4 H! m9 m! ^# q. j
  608.           sztoken[itoken++]=0;. [% D+ m9 d3 X; X& [5 R6 o8 P
  609.           sztoken[itoken++]=0;
    ! M3 S4 C* e" {9 k/ Y
  610.           return szRet;6 F5 d% a$ q0 f- x
  611.         }
    2 U' U( P$ M: |* w% r. w+ _
  612.       }; z8 y' D9 h) f
  613.       itoken++;5 e2 x: y3 b, X! i  g, a/ F6 C5 ^
  614.     }& C0 j; @; w( N
  615.   }9 `2 n& G. s$ t$ @& B' a
  616.   return NULL;
    ; }8 F. P7 [, f: d' [% {( c
  617. }8 h  g' \  T8 Z5 }# f  F0 m
  618. 9 _  i; h7 b/ ]
  619. void ProcessProc(long Total,long Current)
    4 ^% o6 W; h/ s
  620. {
    4 n2 |. c' L% [1 N
  621.         MSG msg;
    1 L( I1 O4 u& ~, ]  K. s
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 X, d' `$ L& o& d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));9 o# c9 k6 K+ {+ B5 V
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    / C9 i3 X1 c" [2 Q1 s
  625.         {
    % O" H  s4 O$ L! S. r& v4 W( b3 Y5 R
  626.                 if(!GetMessage(&msg,NULL,0,0))
    * \  |4 g/ m9 J9 k( r. V
  627.                 {
    ; W: p! ^2 @9 p/ u
  628.                         return;3 {/ Z: r0 V9 b2 {9 @
  629.                 }
    , S2 ?4 q) P7 ^9 Q4 r+ N$ J
  630.                 TranslateMessage(&msg);
    8 C4 S; Y) D: S8 c; s% r3 s+ G/ a/ F
  631.                 DispatchMessage(&msg);2 j3 d1 R1 u3 X2 {9 W+ k
  632.         }       
      [1 R9 A- h- y3 }- v# F) K
  633. }
    3 B9 }2 j: l8 ~" [% d1 }
  634. ; k$ K/ U2 q; U4 a
  635. BOOL bFirstChar=TRUE;
    " @; v1 w( j0 j" h

  636. & @1 a9 G+ \5 r8 N9 ~" L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    + u" [8 T1 M1 s8 I# Y/ C0 V- p
  638. {
    3 N2 D. v1 z* \% C8 d( k
  639.         // TODO: Add your specialized code here and/or call the base class
    5 s1 v$ E; C3 `' X' I
  640.   switch(dwProgramState)
    3 F0 _: [1 S* p: {' j& m+ v7 I
  641.   {
    ( R3 N$ T) Y1 U8 T
  642.   case AP_NOTHING:, R- q5 N" e! @" ^' W
  643.     switch(dwStartUpSteps)
    $ K' ?8 ~% [4 J' ^6 M6 W) l/ E
  644.     {' s9 I. u# U3 n- Q3 H, e
  645.     case 1:1 }+ g( }) [: C- h2 w* m$ {' X
  646.       {( X2 k3 o! {- n) _! ~' f) M
  647.         int i;' t5 p" n: p' Y2 n% O
  648.         CDC *pCDC=dlg->GetDC();/ z6 C  K1 I* l- i
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; k1 V7 i' ]" R1 A2 }0 A
  650. //        Graphics graphics(hdcwnd);. i: O' H2 k6 }
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    9 e! T  V+ h. X6 ?
  652. //        INT iWidth=bitmap.GetWidth();4 \3 o1 a- d  A' \! Z0 E& e7 v
  653. //        INT iHeight=bitmap.GetHeight();# n$ Z2 r0 n7 S; a8 x( q0 T
  654. //        Color color,colorTemp;
    * w0 k& N7 I4 @  S# P( D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)* \- ?% T9 D* p- t( Y7 K' O- M. a
  656. //        {
    - |% P) x# N4 ]( x$ d: c
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) @) M$ b' b  m4 T  j  s: s
  658. //          {* K! q6 v+ p+ E9 L7 s: A! k2 ?. s
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ ~6 M8 f7 `* R6 h
  660. //            colorTemp.SetValue(color.MakeARGB(- m; P7 T8 r9 U8 }. s
  661. //              (BYTE)(255*iColumn/iWidth),
    , V, |( }; {% t! S
  662. //              color.GetRed(),% T8 w$ p! o/ J. c7 J' K; l8 y
  663. //              color.GetGreen(),( c6 h5 g/ t! `7 a9 v& O
  664. //              color.GetBlue()));8 `. X3 N/ E5 |% M$ p
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # B. e0 L  ^  D5 U9 ]3 N1 J
  666. //          }
    8 \8 g* q2 A, k: E0 c, J
  667. //        }
    * h: |, f8 f9 r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    7 Y3 t  l: R" t+ {4 h- Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 `# E- v/ f# M6 h) M
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' M' U  r0 G! f' i& D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : r$ M2 j# _) @  e
  672.         for(i=0;i<240;i+=8)' f! O3 N6 G/ O2 u& [
  673.         {
    " z2 Q/ h; ~) b3 F
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 g% a$ |8 v$ J7 f+ ~6 Z. w0 E4 C
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 W8 T! x; W: A5 O- f6 Q* E
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : Z: c1 }% O/ z5 C. t0 E7 _5 I
  677.           Sleep(33);+ ^4 z; E. f4 y2 Z. E: z
  678.         }; N- u6 u; O1 S$ h4 @+ F7 a
  679.         Sleep(1000);! X2 n% U/ `6 O+ K" x, L
  680.         for(i=240;i>0;i-=8)
    : ]! s: h0 A" c( _2 q: l
  681.         {
    ) Y( y' b; A- }& p- L7 d/ y8 ]
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / S6 v1 B/ V' R; r9 D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% x$ P0 d. n5 Y  F( M8 O
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& C0 V3 M3 I9 p' O
  685.           Sleep(33);
    + R1 ~8 G$ X7 [, C" h) F& y
  686.         }
    1 O: X8 K/ X, a: s% H$ \
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);! A" s. p' }0 c( e0 [+ N' r% R
  688.         dlg->ReleaseDC(pCDC);
    ! B4 g: ~/ p4 U
  689.         DeleteDC(hdctar);
    2 M6 c$ E8 k# V7 B# M0 z$ C7 C
  690.         DeleteDC(hdcsrc);
    + w: T  N& v3 `9 ^) {
  691.         DeleteDC(hdcorg);' W; h5 \6 n+ s$ W' o
  692.       }
    % X) j8 N- y6 N: L/ u) ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    4 L8 E) o- c1 X, j% _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 a. y, _* \$ F( I' |9 ^) X
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    - o& g, t5 A; O
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! U" I6 t, t. t7 k" v7 u- I( Q4 F
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 j* y3 o, z! S% L# ?
  698.       if(!Dn.Connected())
    ( ^! r+ ?1 A% c4 |" j5 d6 x
  699.       {6 q# N2 |& v* P& V* \  H
  700.         dwTotalFiles=1;
    : o& M- m, c7 t* D% L
  701.         dwDownLoaded=0;
    - v* q0 x% c+ Y* m( g
  702.         bSilentStep=TRUE;
    , g1 M2 y* G; h8 c* ]
  703.         bCompressed=FALSE;
    ! \& F8 M% s6 [. X0 q0 t
  704.         strExtLocal.Empty();
    , D. B4 K8 i3 f) W! y% D7 ~0 Y* @
  705.         strFullName="readme.txt";8 k9 w3 w( I* U6 v: o
  706.         dwProgramState=AP_CONNECT;
    6 _5 w( ^8 z' G% G, s
  707.       }
    * c( H* X3 e- V  C, y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();* A+ a( L: m( v% s
  709.       dwStartUpSteps=2;
    ! B; o, o8 r$ v7 j, w
  710.       break;
    + X) B; Z+ l% Z  N0 |7 @
  711.     case 2:4 y  C, C; n6 K$ B- I
  712.       {
      y# w) V/ |) W3 h3 \' R/ ^& a0 J
  713.         int iEOF;
      A7 A& [) u6 h
  714.         FILE *fp;/ Y, q2 _2 S0 [6 I7 {
  715.         char szString[512];6 ^( v+ B1 w1 j: P( @
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ) G* ?" J- _% K' u$ O7 H5 O- o( p
  717.         if(fp). p' N: T: T5 v: s" D3 `
  718.         {9 k4 X5 n0 o" f: S/ r: E; G
  719.           do
    5 Q: u7 i' S( k1 S3 p) w
  720.           {
    ; @% K; a, o2 a3 l& B
  721.             iEOF=fscanf(fp,"%s",szString);
    ; B& G$ y# W. j, J3 ~+ l8 \
  722.             if(strlen(szString))
    4 w! y6 b( L1 H/ x9 C# y6 E1 N
  723.             {& A' m* s+ R! i5 N
  724.               if(bFirstChar)
    6 H9 U5 z1 c* o% r0 M' W# p
  725.               {  G7 G4 h& d; @( ], N
  726.                 bFirstChar=FALSE;
    ) x6 P: M1 ~) `" J" ^" v
  727.                 bConnectIsBig5=FALSE;( @: g6 t8 V) b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;) k* j) M: t/ q" [  M/ I
  729.               }/ \" t" b8 n: H( u9 p' l) v
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));, r( O0 U& H! E/ h9 W- ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: o- |; G: z$ T- U# w2 a1 R
  732.               dlg->m_ListText.AddString(szString);
    ) k  C# C! T0 R( U% Z5 x( s" B
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" Y( s! F# [, w& f3 b
  734.               *szString=0;
    8 ^9 J3 s2 g7 a+ N' S
  735.             }( J) H! ^+ u- a
  736.           } while(iEOF!=EOF);" d5 b9 K9 J* X- s1 l3 ]
  737.           fclose(fp);# X. |& U/ o9 O
  738.           unlink(".\\DownLoad\\readme.txt");, @8 Y: z" c, v- |
  739.           dwStartUpSteps=3;
    9 H' p& t9 y- g/ b" w
  740.         }# c# c7 q7 k1 Q0 ^; i2 s; V
  741.       }/ ~3 }' f9 |5 A& e
  742.       break;
    " P" @! l4 b( K0 G  v" Y
  743.     case 3:
    , O8 i9 ?) x. }- w3 E1 K5 x
  744.       if(!Dn.Connected())
    0 }' B0 y. k+ y, G5 y; L, y8 R  r
  745.       {. W6 u  E/ a2 ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);. z  y; O* |) A  X9 _
  747.         dwTotalFiles=1;* Q3 J) Y/ j, u; B' K6 L
  748.         dwDownLoaded=0;
    $ Y5 m9 k* J' ]. U3 @0 c6 D, g
  749.         bSilentStep=TRUE;
    " y$ o4 w" H# r' B# F8 N# E
  750.         bCompressed=FALSE;
    ) s% [" N/ ?0 X$ u
  751.         strExtLocal.Empty();8 r* V$ `" s3 d, q
  752.         strFullName="checkversion.txt";7 ^; N! k( o' m9 F
  753.         dwProgramState=AP_CONNECT;2 D, ?9 A; V9 D# I- i8 B* S  [& G
  754.       }* t5 d0 e* q9 d
  755.       dwStartUpSteps=4;
    ) \% h7 t8 t% Z2 V, W: R
  756.       break;
    % V9 C/ b6 n$ T+ q
  757.     case 4:
    0 t% H% M: i, h
  758.       {
    - v( h# h9 i. p0 C+ L7 f
  759.         FILE *fp;
    + [" d7 w3 M+ E; F, o
  760.         char szString1[128];
    " S* ^+ B. {- S' X; |" M0 D
  761.         char szString2[128];
    5 X6 {" ~$ v6 T$ k
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; k/ D0 L4 P( w! X7 e& M, e
  763.         if(fp); l% B5 H7 `' [, M$ X0 w
  764.         {2 ]' c9 H4 B  v) @( y" A) V
  765.           fscanf(fp,"%s",szString1);
    9 P" o! Y7 h6 p1 y9 M+ B
  766.           fclose(fp);  i+ u! s! J* _1 C
  767.           fCheckVersion=atof(szString1);
    6 B' l$ Z7 g/ _1 o# @' d9 _
  768.           fp=fopen(".\\checkversion.dat","r");! D7 O, I) T: X1 y2 F
  769.           if(fp)
    . J1 m9 N# z4 q3 _3 ~! j- B$ k$ H
  770.           {3 b2 R! i. M: G$ b  U
  771.             fscanf(fp,"%s",szString2);# i& g" l. X9 O( @3 }; x
  772.             fclose(fp);# B3 G  N" @( z) p
  773.             if(atof(szString1)!=atof(szString2))2 F- x2 `* e' r. [
  774.             {
    ( O6 O* W9 I2 B( Z& d
  775.               if(!Dn.Connected())
    0 s2 p+ U7 a. ~3 h% }, z
  776.               {
      r% u3 P+ g; k
  777.                 bFirstUpdate=TRUE;
    1 @8 r+ ^1 [, H/ ?* I
  778.                 dwTotalFiles=1;
    ( `' @2 d4 {" U5 w' w; d5 n
  779.                 dwDownLoaded=0;
    2 B- v: a: J/ N) F) M
  780.                 bSilentStep=FALSE;
    ; |( O% G' d3 x1 m3 E
  781.                 bCompressed=TRUE;' `% H/ j# ~. V
  782.                 strExtLocal=".\\DownLoad\";# |- s+ q% |5 m
  783.                 strFullName="update.txt";$ E; n2 `3 }" c8 C- l8 f* J
  784.                 dwProgramState=AP_CONNECT;6 ^- W  S8 X) \& o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! u1 o0 d( |1 J& R4 B/ J
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 A2 q# A: T) {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- k  B. F1 t/ C1 e# _  R
  788. # p7 I+ h8 k+ h* ]9 Z' w. V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 d: C- A9 {6 t) v% e
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ U8 p2 }, m9 O0 w. }
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). G7 S* G8 @6 l4 D4 P0 e9 [
  792.                 {* E1 J' p! [9 }9 A; E+ B# @
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");: R, o. n  p5 i6 V. S0 f
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # S/ k4 v: F( d, `. s
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");8 S& _3 @! @$ ?& s7 B7 e& h* o" }
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      k( |3 H9 R$ U' y% q

  797. : o% O+ ?5 o1 [' L+ ?/ l* i' t
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. i1 Y7 P/ M) |: v" i
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' n; u# ^# M( b( q3 a
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& K  _8 }: X! t# d' Z# ^+ T4 X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 l4 q; A8 F. h# o5 K2 _) d
  802.                 }# h7 Z) l1 G+ j4 Y7 n0 [: A  A
  803.                 dwStartUpSteps=5;
    9 ^+ X9 u2 h0 F. ^( n# L
  804.               }3 f7 m" \) G% c8 Z4 q
  805.             }
    $ }+ I4 R% e9 A3 H
  806.             else
      ]/ S2 Y# Y& p
  807.             {$ |/ f# {; c4 O
  808.               unlink(".\\DownLoad\\checkversion.txt");
    4 U+ m$ ~6 b# A9 B, e3 P7 X0 b
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 u: G* x% b" F3 _8 T
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 T) z# l$ d6 W' }1 Y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    7 ]: z6 e/ b2 u  Q) K' \: o0 E* f
  812.   ^8 G, n! t7 z; B, h0 V
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' _7 w- @# u( ~$ h- O
  814.               dwStartUpSteps=99;( A4 B$ s! t3 D! Z- c6 M" X
  815.               bFinishUpdated=TRUE;2 s2 d. Q' t4 o4 y$ E
  816.               bCanUpdate=TRUE;6 ]+ s1 {" U( q, ?9 U
  817.             }" `4 r: D# @. c6 V$ _0 p: V& q/ B( i
  818.           }
    3 Y, v- b: h$ C9 }/ I" F
  819.           else
    3 k0 s4 A, y6 l; v5 q9 P. n
  820.           {
    ; R- G; N) x) F- l4 l, g0 g+ e
  821.             if(!Dn.Connected())) i; h' n$ Y. Z3 P5 _
  822.             {
    ' E" e8 j; \4 i+ x) i* D' l2 O' L  \) k8 u
  823.               bFirstUpdate=TRUE;+ a* ?; G% {# }2 x
  824.               dwTotalFiles=1;
    3 O# N/ b% n: z
  825.               dwDownLoaded=0;3 W% W1 I6 d+ ~: z! e0 ]1 p* x9 v4 D
  826.               bSilentStep=FALSE;
    3 z6 n- z; R  e8 t2 d
  827.               bCompressed=TRUE;" e) w' [' M. I6 b; c' \
  828.               strExtLocal=".\\DownLoad\";+ B0 T) w1 L4 q( h) E7 z
  829.               strFullName="update.txt";
    5 o8 I9 ^0 P# q9 p/ @0 u
  830.               dwProgramState=AP_CONNECT;
    - v( B- G3 Z9 }) p2 o
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 i6 ~4 D+ l' i( m% f9 V, M) j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      H  C' @6 v% H' c( }1 s- m7 F+ R; s' @
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 K: K! ~7 `6 H/ H) ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ L( W9 ^. O( M
  835.               unlink(".\\DownLoad\\checkversion.txt");' V8 W2 F4 t  w3 \' y* i5 V) S
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # R" H/ `, i8 O6 U" B5 v
  837.               {
    , y. v9 J, i6 K  m; |. Y$ w0 Z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 W" x: u  w2 z/ f
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 T; y! h8 k6 V" u3 R# C
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * ]3 i  F" ~0 e' X
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 e' k: t. ~, \8 n( g
  842.                
    2 I. @/ H0 E- M6 a0 B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- c( K. B- o  f6 g, F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");  b2 P) V  X; W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- g7 K( F" C' H  k8 q: V
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; i  S3 F4 X9 P
  847.               }2 \' Q' x$ @6 p+ x, |( J
  848.               dwStartUpSteps=5;- ~5 d* a  h. @$ M
  849.             }9 j, _' G7 ]& f9 \
  850.           }
    : w+ \# g# j7 [% g" e# W" e
  851.         }
    ; q. j  S' q1 t- |4 Z% R
  852.         else) x$ Q- T' C; f& p( E
  853.         {! W8 ~, E5 q" b9 F
  854.           dwStartUpSteps=3;7 }& L, m  H: o' T% H$ s7 g
  855.         }
    2 x% F$ S% {7 [. ], j# m- X5 I0 B
  856.       }( ]1 z, r" l6 y- s+ @# @; `3 [' P
  857.       break;3 {$ ?( Q( X4 b
  858.     case 5:- V! J/ z9 a- v8 I1 t, |$ l+ h  F* c
  859.       {8 h, ?7 w! O& [+ p; D1 D1 ~1 y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    4 `9 P! }7 v+ {7 E; p+ i( S; V* k
  861.         {
    7 I% [$ a' P/ c$ L# |" b" g/ G% ~
  862.           int opt_overwrite=1;- h: D% y! T" f- d* J
  863.           int opt_do_extract_withoutpath=0;
    8 A) J2 B. L8 Q( s2 p9 Y1 o
  864.           unzFile uf=NULL;
    " A. A# x+ i. f- _9 z

  865. 5 @2 {# O* P9 _9 I
  866.           uf=unzOpen("Wsa.zip");
    1 G9 A+ m: n, j7 H# d0 w: C1 ]
  867.           if(uf)/ }0 g/ N% ^# l
  868.           {
    / d. y7 u# t5 }: m% ]( ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ) @- G1 A+ S/ T  C- G- O8 b& F
  870.             unzClose(uf);9 F) x6 V) |# ~
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");- n/ \( [; E& e5 q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    3 x. N. f1 b" k, |: l5 U& |
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");" H% m2 t' X. q  {8 {$ \2 {
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! h, @# Y/ P; n* X" {' {- w$ f
  875.           }
    , R  x% t- l0 {$ b7 |1 b: G
  876.           DeleteFile("Wsa.zip" );' x$ O5 K. t; m' Z  y" I
  877.         }2 k7 S2 l( i; c# d- b
  878. 5 T9 F* Z8 F  B( q
  879.         if(CheckLocalVersion())
    ) @7 ]0 c. e. o' D  Z) n- G' m
  880.         {
    : S2 D. w) n4 E2 a& g; R6 ~6 c
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ) c4 W0 P* ^/ H) a' l* }- z* p* ^7 p
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ' ^1 x& |' t7 [* f' B" s, C% F
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");* N8 P* t( L8 ?) N- i! d; a4 L
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ T, u, K/ D1 _1 q0 t% r. Y( L
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    / F; e1 L8 b6 Z/ G7 w% v1 f
  886.           dwStartUpSteps=99;
    ) `& x7 W) P9 {1 x3 J
  887.         }/ U+ i$ T' @. v3 v) U% K9 o- j$ s
  888.         else/ Z2 x  X% ?2 @; S
  889.         {! W: r3 D, i, g  F
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      D1 A- v( Q! p$ \+ \
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    8 T! m6 q+ t: X" Q8 ]! I
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; g$ I" S% ^- X: i% h" c

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

' u% A9 r6 {) @& E9 b7 V4 f4 q5 x" N% n# g: H/ ?& w8 {

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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