找回密碼
 立即注册

CSUpdate.exe源代码

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

, ~9 p* D. l; ?: M$ ?
  1. / RevApp.cpp : Defines the class behaviors for the application.
    9 C, P- b# H( V
  2. //1 O/ l& a- Y& l$ L4 _2 w( K
  3. ! t' O9 ]( v. H! C! |* u0 ^
  4. #include "stdafx.h"
    $ n1 [9 m' N8 ]
  5. $ Z9 l; Q; ^7 G
  6. //#define UNICODE. d4 [9 A6 ]( {/ b! t8 H3 o
  7. //#include <gdiplus.h>
    : e( Y) W: R% _& o, Z
  8. //using namespace Gdiplus;' D3 g8 Q  w* Z" @
  9. & N) D/ [- J+ T
  10. #include "RevApp.h"+ p; e7 L/ }" T6 `/ N8 s9 `
  11. #include "RevAppDlg.h"
    ( C+ a! ~% w( _: Z. E6 M$ s

  12. ( ]2 a- \3 u, r$ s
  13. #pragma warning(disable:4786)
      X" F- V8 `( B. I$ X5 y
  14. #include <map>. Z2 e* ]; w, [( t  i8 N
  15. #include <list>
    - `' m$ o4 P0 b' \: v6 @
  16. #include <direct.h>
    3 i- K4 K2 v8 u/ n2 V. R1 b

  17. 9 x8 E( J' k. b0 |# M- ]
  18. #ifdef _DEBUG
    2 D- x# H; o% S# j. Z6 Z
  19. #define new DEBUG_NEW
    9 A# @+ @0 P, G
  20. #undef THIS_FILE
    # @7 X. m& r8 R( W/ O0 |
  21. static char THIS_FILE[] = __FILE__;5 L! A$ a0 [5 Q/ i: k& h1 |3 v
  22. #endif
    * u7 f4 X) _( L- J( H; |0 B3 h4 o
  23. #include "SkinResDef.h"% `7 ~* L! e+ r/ k& `$ I( x  `; ~
  24. #include "ChangeBG.h"
    / L+ G; D: [' p4 s
  25. #include "AFXINET.H"9 F! L9 _" k8 S, ?( u& p0 r3 U8 H
  26. ! w% {5 I3 @% Q1 s) J: H. c8 x
  27. #define TRADITIONAL_CHINESE 0% M$ ]' \2 N" P# L( m% g; |  d
  28. #define SIMPLIFY_CHINESE 1
    $ }& C& G. }) K! ]: M' f+ f: F: Q: M
  29. #define ENGLISH 2/ g4 q: F: Z# T- o2 |
  30. int m_iLanguage = ENGLISH;3 L/ b3 R, O! @6 S$ k; |  O
  31. /////////////////////////////////////////////////////////////////////////////
    1 I+ g9 O8 l2 g8 r# C& a$ w/ S
  32. // CRevAppApp0 y# @& Z# r* Y! L+ }

  33. % T; A# u4 X; f: O& ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    . u  v& _; ~) t7 z
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 r: e0 S1 d3 Y! F4 h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.; T" K# D) R/ p$ y
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    & _0 x# |- ~3 X6 J4 w. R
  38.         //}}AFX_MSG% b( F) V. _' h& H4 b
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 o* V6 g! @+ R' u$ \1 C7 _
  40. END_MESSAGE_MAP()
    # I% C9 g9 t( G, R: T
  41. 8 p. s3 T8 j5 N6 K3 T) v+ V1 Q
  42. /////////////////////////////////////////////////////////////////////////////
    ; O# j5 R: M9 ]8 ^. d1 O
  43. // CRevAppApp construction/ ^3 M3 R2 ~9 J8 G, |4 Y" e& D
  44. ; c: h6 h7 k) U; `4 e& k
  45. CRevAppApp::CRevAppApp()
    ; \+ J. G# X7 S2 ~7 k# V
  46. {& y# h/ }' K7 O/ h6 k: t
  47.         // TODO: add construction code here,: q9 x! q9 Z0 v3 R) U- s7 P  v
  48.         // Place all significant initialization in InitInstance
    , o( V7 Y  ^. O% s; Z
  49.   bDisplayIsBig5=FALSE;
    1 i5 t* w/ V- r; m, ^
  50.   bRestartUpdater=FALSE;  Y" o, h7 a3 w9 c3 s
  51.   bFinishUpdated=FALSE;
    ! G1 I' A* j. @) c
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    % R. p: K) E3 }! D
  53.   InitChangeDataBig52GBKS();
    * a2 I3 K6 I- I/ b/ ~6 k
  54.   InitChangeDataGBKS2Big5();
    4 F5 ]0 b" V& @! ]3 t
  55.         //
    # F. `$ O' X& ^
  56.         bClickRunExe = FALSE;5 g" v! T% o# }0 |5 s5 G- g
  57.         //
    ) j( G( ?0 z  ^1 j0 T$ k+ b( C
  58. }5 [, c) C3 Z& E
  59. " k. Y0 _  S+ G5 s
  60. CRevAppApp::~CRevAppApp()" x- s. l; U& ^, @
  61. {6 g& P- r( H' G" X) X$ q3 P
  62.         // TODO: add construction code here,
    ) s* G8 V  W2 c' S8 l+ i: h
  63.         // Place all significant initialization in InitInstance
    7 C$ r( E, X7 V# |! l# l
  64.   EndChangeData();
    4 c( ]# B) n1 b/ [
  65. }+ W" Z+ D" k+ P6 i9 D( ?$ |
  66. / \( t* v' w6 \
  67. /////////////////////////////////////////////////////////////////////////////
    ' D' w. x5 M6 _% \- f
  68. // The one and only CRevAppApp object9 ?' C( X, M2 D/ v0 d" r( X3 J
  69. 9 ]6 A3 U6 e& w* h4 m2 q1 }
  70. CRevAppApp theApp;
    # I8 i- ^1 P' p4 R- T

  71. ! l  O3 {  C4 F2 w4 z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) m# Z; I  p3 J
  73. {! T! i# B* i% r0 O3 N1 p
  74.   int iEOF=0;
    : l( S5 E# g' `* {( _
  75.   char szTempName[MAX_PATH];/ c  @* V$ W2 x  n
  76.   *szFileName=0;# d- U1 L; x( t5 c, {* m
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % ^4 M" {' i8 L) k0 r" J7 n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ [; w* S4 m9 O0 ~+ x+ m, j
  79.   {
    6 I. S  ]6 n3 G4 x. ]+ ~
  80.     strcpy(szFileName,&szTempName[1]);0 Y% M. e: N1 ^- z
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # }8 ~+ J  G# \. I, A3 v% D
  82.     {
    ! s, A" T1 i' g+ }% z8 f3 H
  83.       iEOF=fscanf(fp,"%s",szTempName);
    8 a" |7 @( M& ?, D  x
  84.       strcat(szFileName," ");
    , }4 z6 @8 F/ h) k7 ~( t5 s& \  U
  85.       strcat(szFileName,szTempName);1 ~7 ~. O3 T7 V; {  t7 p2 X& @3 V
  86.     }4 C* e* T  K5 h8 E; ?. a
  87.     if(strlen(szFileName)>=1)
    # w3 H6 [& }) S5 t; N0 ~) I. U
  88.     {
    * D& m( h, ^8 U; l8 }
  89.       szFileName[strlen(szFileName)-1]=0;
    % O7 `+ Z, O1 w- I1 _
  90.     }$ z8 e3 f6 K$ e! [1 \
  91.   }
    - b9 b7 a6 Z7 o" B& x' c) S9 W, e/ i
  92.   return szFileName;
    ; M* ?& H/ }. G  L) F  [
  93. }
    8 L2 c7 B7 ~- y6 \4 m

  94. " x! l: m/ o6 V0 q0 w! W# _
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 s& ~9 r8 w1 z* m6 |2 J% ^' y' i
  96. {
    + F0 M7 \- n# U; z2 x
  97.   FILE *fp;
    ! p9 c  |2 B9 ~) N5 C* F* ^
  98.   char *key=NULL;
    ! |& ~9 [- {' D1 N- T# G
  99.   char version[MAX_PATH];- u/ K, j1 R+ R8 m, L- X6 ]
  100.   LPUPDATEFILE file,olds;) C- f8 y/ Y* D! _
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 s) C! n  H( o6 D& y
  102. 1 A- N$ _  G$ D. E: }
  103.   UpdateList.clear();1 }: q) d, l+ P- ]* @  `! D& _. n
  104.   UpdateFile.clear();: _. L2 W: D; o! |: V* _6 J
  105.   if(GetFileAttributes(filename)==-1) return false;5 j; H2 Q, h! D. J
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 n* H. `! |. K1 e; o
  107.   fscanf(fp,"%s",version);
    6 ~- [; L5 B* f, v5 C1 p+ d4 |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    8 N# y/ Y# A5 A* C$ z: j& Q5 l6 T
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 h% e  ?2 U( h) N. W; G, U1 Z
  110.   {
    * J# o2 P7 Y5 A6 b& U
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 Z8 t' L. ?) ?  A6 U  y) k  |# A
  112.     fscanf(fp,"%s",file->path);1 u& s# M) T  i  q) s2 t
  113.     ReadFileNames(fp,file->file);) F# J* c; R7 M* s) H9 H, j
  114.     strcpy(file->full,".");
    * q! l% j0 M; Q" I1 V. t! T! p* V
  115.     strcat(file->full,file->path);
    : Y) ?6 p! ]% a! `7 e* w8 i0 D
  116.     strcat(file->full,file->file);* Q/ P4 g* Z( V0 R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* D& p( C) l5 W& s: N+ ^
  118.     {+ t; ~2 V3 D. K# a1 i$ |
  119.       file->vers=(float)atof(version);
    ' V% p, ^* \5 ~* [; [- H. }+ ]
  120.       UpdateList.push_back(file->full);0 i( e% f' ^3 z9 a
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " [) B( l5 ^* Z/ ]' ^& X7 S6 S$ \& o
  122.     }6 j0 T8 @; t3 E2 ]
  123.     else5 Z% }4 B; M) p! T8 d3 }
  124.     {; o/ t, {* D& N( M
  125.       olds=(*p).second;
    0 J" ?8 D) H% P  p6 i
  126.       if(olds->vers<(float)atof(version))
    , P2 D  O) |8 h) z0 ]
  127.       {0 X$ N- I+ g9 U7 X- J- F7 h% m
  128.         olds->vers=(float)atof(version);1 R" V2 ?$ m9 ~' V6 r: O& R2 K
  129.       }6 t/ I/ |2 m$ p9 M
  130.       free(file);
    # E7 b- J1 g/ Z$ w- b7 l5 N( o! F* F
  131.     }
    # [7 Y9 a$ l! Z8 P% Z2 t
  132.   }
    3 d; d: o' a6 w+ _: S$ X
  133.   fclose(fp);( o5 B3 H/ H% ]$ i3 h
  134.   return true;
    ! L7 |  g) |2 ?6 Q0 O
  135. }/ S* O7 p% e4 A% I6 R

  136. % f+ g! x1 V8 Z& n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)- X# [4 _, f- ?2 n* G" C
  138. {
    & y2 A8 J: Z' A$ {8 h
  139.   TCHAR  szFull[MAX_PATH];
    * G7 O& i6 }0 d. E+ C6 v
  140.   TCHAR *token,*inter;3 j/ ~9 t' a# T3 \- |3 [' T9 w1 ]
  141.   *szPath=0;8 v1 j# Q( ~: O, h" K' `2 _
  142.   strcpy(szFull,szFullPath);
    ! b) n8 p/ F: E8 ]% O7 B
  143.   token=strtok(szFull,"\\/");
    ! F2 Y2 p# o3 V8 O: H. ~- W
  144.   inter=token;
    4 p$ p+ i# X# q& Q1 q0 F  w
  145.   while(token=strtok(NULL,"\\/"))1 V- l$ K8 v' d$ p3 @
  146.   {
    . N' o- P* C" j/ C, t* o
  147.     strcat(szPath,inter);
    2 h' W( T7 d: d8 ~
  148.     strcat(szPath,"\");
    1 L9 L0 M7 [: W* G2 Q$ |1 x
  149.     inter=token;
    8 u& [2 t- t9 H& }
  150.   }" {4 m* j" g! ?2 y
  151.   return strlen(szPath);
    9 s5 O8 Z, }9 x% T! d( Q
  152. }
    ' a# Z9 `8 V6 l6 }4 B

  153. $ Y8 G# c5 N( ]4 I; [" n  d
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! A& }, K: p5 W" o# D- N8 A
  155. {
    $ `2 |& R2 U8 X7 p
  156.   DWORD attrib=GetFileAttributes(Target);0 |0 G) V: B/ x3 ^2 z8 e
  157.   if(attrib!=-1)
    - C& ^2 D8 e0 V& V4 H2 f! V5 D
  158.   {
    ; X" ~5 G) L- M$ O) ?+ ^3 }1 b2 Y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ' [. e0 L1 Z! [$ X- n$ T
  160.     {
    7 D+ {& l3 Y. L9 O8 m6 }3 P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) i7 c3 }' s$ f+ _) H
  162.       SetFileAttributes(Target,attrib);* P; x0 _! h% q& s
  163.     }- [6 D8 x. f. }: z; F( {
  164.   }9 j/ }! Q. L/ O( E
  165.   CopyFile(Source,Target,Erase);* `$ L3 f5 D+ {5 y9 v
  166. }
    0 ]* z5 ^. b% U& L: H  ^
  167. / B# K+ J  [- R7 Y  T( r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    7 _% v6 n7 [5 s7 p& C
  169. {; g5 d5 Z. \; H
  170.      FILE *fp;
    $ ^2 K' P! U+ |; X* z% [( A, V
  171.      char  szBuffer[8192];: G# P/ M" o# t+ Z3 o& l3 p
  172.   va_list  argptr;/ o- e7 `7 g9 L! l
  173. + Y$ t( l. {2 z: f: ^4 x
  174.         va_start(argptr,message);$ g3 r  a+ Z# C# A  ^! E
  175.         vsprintf(szBuffer,message,argptr);
    2 B, m4 p, S/ n8 E6 I- _% n' |
  176.         va_end(argptr);
    0 ^1 v. P4 o: E1 ?- o
  177.   fp=fopen(FileName,"a");+ e, ]7 Z% Q% u+ i* k* ^
  178.   if(fp)
    : J8 _0 b5 H5 R# A
  179.   {6 Y+ v/ x9 R3 a8 Q5 w* A2 ]# w
  180.     fprintf(fp,szBuffer);0 F: \0 j1 O8 C. k3 }1 n  D, ^
  181.     fclose(fp);
    ! m; _; x; a: U
  182.           _flushall();
    & z9 A) e) O, y3 a/ T! r& P
  183.   }# ~$ @/ ^8 T8 V, B3 D/ @
  184. }5 N* X$ [: @' I
  185. + u6 B* U& J  ?4 W
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . X: [& Z6 f1 G' E/ }6 ]1 j7 T
  187. {% D) `5 s, m" |
  188.      FILE *fp;# y/ x; }1 V1 r, R; G
  189.     DWORD  attrib;
    - b  a% `" X; t/ M1 f  a
  190.   attrib=GetFileAttributes(FileName);
    1 }! o' v; _9 g+ S. r, _6 r, X8 W
  191.   if(attrib!=-1)& {* d9 L$ p2 u1 z
  192.   {
    * J; x  I# W* I0 \" F" N3 r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);% _5 s  R7 \# \* e
  194.     if(!SetFileAttributes(FileName,attrib))
      S; n8 V7 o( G  m
  195.     {0 h/ W4 O, D& V  ?5 k# v3 ?0 U
  196.       return FALSE;
    $ z+ X, g* s9 h5 t4 v
  197.     }, }. X: L9 v8 Z' w6 y9 e
  198.   }: h0 G  {) C" b6 R
  199.   fp=fopen(FileName,"wb");
    7 |' H6 w8 x' H2 t) A( q
  200.   if(fp)8 Z+ Q  V6 J. q+ e6 [; ?6 ?
  201.   {; @6 J8 \; ?1 j
  202.     fclose(fp);4 V; c/ W9 G3 T5 o
  203.   }
    * r9 i5 r" t$ `. M6 c3 W2 m5 }
  204.   return TRUE;0 s8 c2 a) ~4 |( a# X
  205. }
    : [% C0 V, s. ]  {
  206. * E& |1 \4 c* K' D1 k+ Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; B& k( `. Z9 @/ \$ C" U$ i
  208. {4 ^9 V* x! q% I* B! ]5 R' Q& d% ]! B! L
  209.   char filename[MAX_PATH];/ ^: S1 g$ y+ {! W8 |& G! w
  210.   LPUPDATEFILE file,olds;
    0 v* Z1 M7 V1 q7 H' N( M! D5 U
  211.   std::map<int,CString>::iterator i;
    # m0 E7 \9 n1 }8 f" v+ }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 o5 j4 e, m5 Q+ v/ d% P4 Q
  213.   std::list<CString>::iterator l;
    " x6 g4 H, `/ V- d3 ^4 T7 k
  214. ( ]5 V* E$ G5 I4 q3 O6 S, p$ t7 \
  215.   if(bFirstUpdate)
    2 h4 ?( j! ^4 k! |! L4 u! u1 K
  216.   {
    3 @, J% ~9 j/ i. K! ]  h) r
  217.     dwCurrFile=0;" h2 `! _9 |+ ?# t4 K  Y& n# n
  218.     bFirstUpdate=FALSE;
    ! y8 K6 |5 @3 G
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); Q8 y6 P+ L( w
  220.     {
    . n% K' g2 x! B
  221.       dwTotalFiles=UpdateLocal.size();
    / K4 t& H/ }$ |5 L9 d+ i8 t
  222.       dwDownLoaded=0;
    + v, s5 @: w! V, G
  223.       bSilentStep=FALSE;( O! n" E2 t( Z/ g
  224.       bCompressed=TRUE;1 d& C" l7 {8 R% d3 r5 @
  225.       strExtLocal.Empty();
    $ n: m) D  F% ?1 L/ ^" ]* q
  226.       strFullName=(*i).second;6 A6 C- `) W$ `3 b- K" B
  227.       dwProgramState=AP_CONNECT;+ n- {4 ]! T* m$ O
  228.       return TRUE;& |* N( g! @0 s
  229.     }7 \! \8 D8 o+ J+ Y6 b, c" N
  230.   }! k7 Z/ Y% k/ s
  231.   else if(bRestartUpdater==FALSE)3 R( s, r/ q- i% l
  232.   {7 x5 p4 Y- l- s& Q, u+ e
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 {  j- D, Z0 c; u  C/ {6 C7 F
  234.     {
    4 `6 f/ ]. i5 N* a/ n: v% \
  235.       file=(*p).second;
    * D7 q7 @6 n* s7 w7 J& \
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 s5 F6 k; o4 y
  237.       {
    7 M/ n$ R% R; {( {3 R
  238.         olds=(*p).second;2 n) L& j: F# x9 a: z7 V4 w
  239.         olds->vers=file->vers;/ E! @1 L- `% G1 N: n
  240.       }
    * L- w! M# W) N7 a% C. U0 B* Z
  241.       else# P; Q: u; o6 S
  242.       {
    - z, R5 ^# c7 M! k
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 G) R* J* i: o1 ^3 H
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 y9 n8 Y$ j7 `# S/ R( Z. L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& v2 z) n! g" v$ B" S, P. u' _" c
  246.       }6 j( _" x% z, n+ U
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 T$ K/ o8 `* F. h6 |/ x2 V
  248.       sprintf(filename,"(%s)",file->file);
    9 e5 @5 l, a; M- ?4 W1 C: J
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ w4 U1 H4 m) z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }0 ]3 L6 B: g, O
  251.     }4 F5 `1 w7 h+ O; h# l. ~& p
  252.     dwCurrFile++;' y1 G/ f) Z7 {, C: ?2 C" ~6 f2 N) ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - a3 p3 E9 r: f: T$ o, g
  254.     {
    ! b3 Z% w: I, i, R! E
  255.       bSilentStep=FALSE;! o7 j4 c8 q- V8 x" X7 l. B
  256.       bCompressed=TRUE;
    3 T' _! [' Y  o: S1 p
  257.       strExtLocal.Empty();. X2 \" {8 Z+ q* o$ l
  258.       strFullName=(*i).second;
    9 F* m( b) J- K
  259.       dwProgramState=AP_CONNECT;+ t/ v5 j0 E- Q8 N5 x0 g
  260.       return TRUE;
    & n4 J: B9 ~6 ~* @
  261.     }
    + n7 E4 \: Y" X) F$ }* f
  262.     if(!bRestartUpdater)# L4 ~( f* m9 Y+ k; j8 R
  263.     {" @1 |' D+ R; M9 p
  264.       int iCurrSize,iFileSize;
    * Y% t, l' K4 W  B
  265.       iCurrSize=0;6 I0 y* o7 D  x+ e* U; p
  266.       iFileSize=UpdateList2.size();
    & T6 O2 V* H3 w( T& H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    + p# z6 j  J& l0 i4 {4 M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    3 r1 F- V" F. a, m
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; D2 i$ S# z3 w1 r; e' O
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 D- s) l2 h8 y
  271.       Fclearf(".\\update.dat");
    6 u8 b( ?+ `( j
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 ~5 n1 V5 O8 ?5 O$ k
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)9 p$ }$ u7 u: }* p* O+ f& c7 F
  274.       {
    ; Y4 \$ P7 C. O/ s* {6 T
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    5 {9 \$ B! ], y" ]7 c% z0 a8 ]
  276.         {/ J: L! F) A1 k+ C# s3 o: e/ b3 D  a) N
  277.           file=(*p).second;  Y( E( R, w- K2 {
  278.           sprintf(filename,"(%s)",file->file);  z- t: g$ F2 {' G* H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  W: F2 c+ U% {" v. r8 L
  280.           iCurrSize++;& N/ M$ p( ?7 `0 g0 b9 m
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));/ ^# K, R0 I" I( G2 G
  282.         }
    5 N$ S7 t$ n* l
  283.       }
    $ q* N( X' \# D( g
  284.       unlink(".\\update.txt");6 N- P6 O. D" M8 P/ u+ ~( b( @- M
  285.       unlink(".\\update.tmp");
    3 G2 f4 w$ w) f. j& r% i
  286.       Fclearf(".\\checkversion.dat");
    : m  L+ I( E& n/ q) S% G
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);' \9 Y2 j4 k4 B9 Q6 B! x; A
  288.       if(UpdateLocal.size())
      F2 w: S/ B( X0 y
  289.       {  t% E- x$ K( z' \, k. ]
  290.         UpdateLocal.clear();
    9 S" R: c  P) g0 z
  291.       }, W% B9 z5 V* r4 z5 g/ B& C% w
  292.       if(UpdateFile3.size())
    2 Z& k/ D* J6 D
  293.       {6 p1 {# Z! ]' \, e( h% Y$ I
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * O* d# h1 ^# Y
  295.         {2 @5 b" G, I6 L/ l
  296.           file=(*p).second;/ h! f. v- s) U; ~. W* W! n0 L$ n
  297.           free(file);, D% c0 I* x, P7 Q
  298.         }
    + n  f7 h% ]# A& G; O3 V3 p2 T
  299.         UpdateFile3.clear();
    , b7 n6 `3 Y( o- ?
  300.         UpdateList3.clear();5 ]2 m8 W! w& ^2 B3 y: Q) p. H7 U% ]
  301.       }
    # Z% h1 \4 a5 S
  302.       if(UpdateFile2.size())% W; p( j& X  d
  303.       {! H) R4 a% i1 {8 A
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      s) T3 w( `3 W8 x# e( I
  305.         {
    3 A# L" Q( t0 |' l. ~7 m5 }
  306.           file=(*p).second;
    2 k; L. U) d1 l5 A  b' z) f. A# i/ ]; b
  307.           free(file);
    3 r% ^' P/ J  g
  308.         }) \& S) B( ?% M
  309.         UpdateFile2.clear();
    + k2 h  y2 O3 q  J
  310.         UpdateList2.clear();) p! n% U; D3 J! t- e9 ?
  311.       }( K; u" t/ C+ N! Y( Z
  312.       if(UpdateFile1.size())
    ; M, C$ Q+ E8 Z! O! [' q6 b, I
  313.       {
    + V1 `5 O* Y; k4 V/ O8 f' C1 |. x5 l1 R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" G$ k' e# ^8 r$ V# M
  315.         {
    ) g( a; B+ ^* u9 j
  316.           file=(*p).second;! C+ B5 M; v( Y3 v" |
  317.           free(file);
    ; I, |+ s' `! U- a% W' X) l
  318.         }0 B# f8 Z) B$ D! |
  319.         UpdateFile1.clear();
      s3 E, t' j* X- [! e
  320.         UpdateList1.clear();
    6 V0 a8 y+ g3 B) T- r# k
  321.       }
    & n) q8 F* C" A! j; j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    # l4 M6 J4 V: N' F
  323.     }
    + W2 ^1 S+ T3 d8 q
  324.   }
    ' o) o. k4 |) n8 u7 F/ k7 C7 E
  325.   return FALSE;9 B; J; k% s1 i+ \& u
  326. }
    - c# P/ i6 K% n, j; J
  327. ) s$ ~8 r$ Z$ F; X  p* k9 j+ O4 q
  328. void CRevAppApp::ClearAll(void)
    5 I+ [6 I. w2 V
  329. {! `. F1 V2 s3 Y- _  G; ~
  330.   LPUPDATEFILE file;8 @' [  a9 I" z7 z& ~) `* q5 w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% {" O2 Z# |' K) y# t& c( I

  332. % \4 W. l2 }- n3 T' r- W5 f) K
  333.   if(UpdateLocal.size())
    7 B. s; M- Q4 x. j9 P0 e: K9 p
  334.   {) [2 I) L' I9 h% P, K$ h
  335.     UpdateLocal.clear();
    6 F! ^5 ^+ E$ R6 Y! u$ T
  336.   }7 a' g+ N0 c  G& H  u) ~( N
  337.   if(UpdateFile3.size())
    / S: c3 l* d  O& {# k- F6 K$ ]7 I
  338.   {
    9 ~+ s' j1 P8 V4 T/ Y5 x
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & N2 T* o9 Z( ~( [+ R
  340.     {
    9 N1 e7 E2 ?. E- a+ J1 K4 D
  341.       file=(*p).second;
    . H6 A' K. ~- n) b
  342.       free(file);
    / I" v9 W* h( P9 W$ O7 y
  343.     }
      a9 _2 I% D9 F
  344.     UpdateFile3.clear();
    : Y: C" v. u# F+ c% [
  345.     UpdateList3.clear();
    ; R4 v2 K5 |* P1 N! p( C
  346.   }9 q7 Q' b- U, o# N' d* s. S
  347.   if(UpdateFile2.size())
    3 c( ?, A& X0 S* u& K9 q/ K( ]
  348.   {$ a/ z. V  Y, D7 L' @0 [7 {
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* U) K7 w. k, {4 X: ^7 a$ o$ ^+ R
  350.     {
    9 Q  J2 i4 o; Y2 r7 E
  351.       file=(*p).second;
    ; T* K$ i9 u5 b% e$ i2 R7 C
  352.       free(file);! s5 L9 R2 j. p
  353.     }0 B2 ^0 q& U; f5 |
  354.     UpdateFile2.clear();
    " E0 i* P9 H& D  j7 I4 h$ }
  355.     UpdateList2.clear();  A; A3 e. O. P% K. g: e" z1 @
  356.   }
    1 l! h+ a3 x& c
  357.   if(UpdateFile1.size())3 v- W3 q9 a/ h& T, f3 {
  358.   {1 E' D% Z6 |9 k. U$ m' o3 s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& P) j$ K+ [  r" x% B. ~9 n- X
  360.     {7 p: @! _, ^6 }
  361.       file=(*p).second;! U1 K" a) {# U2 w$ z* ?+ H! }3 k
  362.       free(file);
    1 S4 g, P; Z" y8 S4 @, V( y) E6 ?
  363.     }5 L8 S0 Z: `* Y2 S; m- ~0 k/ f
  364.     UpdateFile1.clear();
    7 p3 |( k9 _5 [! ?2 P6 \7 j1 J
  365.     UpdateList1.clear();
      d5 M6 g& D& u$ p5 p8 o
  366.   }" k6 N: u/ t2 Z, y" x) ~7 ?0 S
  367. }  8 p0 B+ y' U8 E- M; s5 M
  368.   
    2 [( X- o# F3 Z+ ~# G
  369. BOOL CRevAppApp::CheckLocalVersion(void): ^; s5 g) F1 t5 T& _9 {/ i$ c9 D
  370. {
    ; Z  q/ W, c+ O4 G8 |6 w
  371.   int c;
    6 _! w! {+ x& d: a/ A
  372.   LPUPDATEFILE file1,file2;
    + I* H+ n5 N4 j3 w. C9 L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; A9 K! d$ r4 k# ]
  374.   std::list<CString>::iterator l;
    , Z5 o' t% J/ ~( `3 @- Z" K* k8 g

  375. ! J& s) G8 f% t1 ]; ~& _
  376.   UpdateLocal.clear();
    2 U( u% I, W0 z& |% m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      @3 N' r8 M% s; E+ B7 ]$ f1 \
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. r; c( `2 V" n4 S6 M1 Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);, Q' C: H7 I% H& \9 ~
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; q* _- V% y' k6 B
  381.   if(UpdateFile3.size())
    % O# K6 Q( D1 d6 k, H: S2 N' N. Y
  382.   {1 C# {: r" a  c  F6 v: V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 O# E- m! \/ d$ h5 B
  384.     {
    ; O8 P# f$ Z4 P  ?* c3 H0 X! l) c
  385.       file2=(LPUPDATEFILE)(*i).second;
    , n- Z) E# v/ }. J* r5 D) D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : [4 x# i  r( u7 w: D  z
  387.       {
    ! i4 S) q; Z" \. T% f2 x. I4 Y
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 U6 _' I( Z; H8 G) y
  389.         file1->vers=file2->vers;9 y% }* R- @9 i2 W" m
  390.       }4 k3 S  L. B# n8 }) ^
  391.       else* v( Y0 K7 I3 s( e
  392.       {
    ) b5 S* K& v: q& d. w( u& E
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 q% z* p) m7 C/ U: }
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( O& q( J% n8 J' x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    + P- Z8 s) E/ L* r" c0 r
  396.       }
    : ^; a  J" V6 b: ?6 Y. x" E  K1 F
  397.     }* h. ~5 z" g6 ~* ?* ?; ?
  398.   }
    , h% x- l8 ?+ x! ^9 ]: f& h' a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 V3 I2 P8 \, P
  400.   {
    % u2 f5 L/ |- Z4 h# q4 ^0 Y) V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( z: g3 F6 Q6 @: N$ a
  402.     {
    / w7 B# p9 m1 Y# I- d' ~; B% y
  403.       file2=(LPUPDATEFILE)(*i).second;3 A% ]1 P: p' a/ y* i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# k# s" t- X# b, D' {& ~
  405.       {" n2 |, s9 q& n6 P6 m
  406.         file1=(LPUPDATEFILE)(*p).second;( t$ \" r# a/ e( Z! }- @2 ^
  407.         if(file1->vers!=file2->vers)' x/ c8 _2 v# j% Z* Y7 y( s
  408.         {$ X6 j5 y- M3 |8 R( j! r/ Y/ f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: l; l. B  e( }7 I
  410.           c++;$ Z8 P% \; G1 A, D6 Y4 t
  411.         }
    ; Z3 }: j; k* V8 ~: d+ c
  412.       }2 H3 U7 j, U* Z/ S
  413.       else
    , O- l) e% A0 H2 [
  414.       {
    ! y: C, S3 m" R4 U: C
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- S3 i. U; M) L7 c+ H6 R
  416.         c++;
    ! e3 m& X- E* P+ V9 T# v9 o3 E3 T% }
  417.       }. M/ p" s4 u5 U: t% @# W
  418.     }0 ^/ v6 y! _% I1 _; J
  419.   }
    9 V5 o# n9 f# A  H# i
  420.   unlink(".\\DownLoad\\update.txt");7 C1 C$ P3 v* s+ V- r
  421.   if(UpdateLocal.size()) return TRUE;  s4 r6 b' p1 v- w
  422.   else                   return FALSE;9 H2 T8 m* i- c' S
  423. }
    1 J, N; M  c4 @3 G, H! h! Z
  424. : ~9 n* F( a3 S, H# t
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    - O3 ~( ~# V0 t  v, y/ J
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    * h+ d( }/ `' g

  427. 6 A7 H2 w8 p3 Z+ }* h& Y0 h- I

  428. & E5 S  B: v- u" [+ G7 c' \# w
  429. ) W# C  A1 E8 X/ e
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    7 B7 b/ d  u, T1 j& A; C4 ]
  431. {
    ; L# M8 G+ U0 v- f+ N8 w: e2 y9 k
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ' c8 b/ ?% c, l$ c' h' l9 u" B
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 e  L) Z- d* r
  434.   {$ \$ u2 ~7 b7 E; n& @9 ?
  435.     char szLanguage[50];7 I6 X/ p* W( d5 I8 ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" j' h3 J8 T  o2 [0 X( d8 S0 H1 w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& V0 s5 o# p- S' T: k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 G3 H' s( N2 Z: |# S
  439.     else                                   m_iLanguage=ENGLISH;+ C  J/ ^+ D. \. S; \& C" T
  440.     char szRegister[100];
    : U+ r6 |! o  k; X% ?- J; [! _
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) d3 B# p% D2 i9 y2 K
  442.     strRegsName=szRegister;
    4 j- Y5 L0 G, E' T: m/ l
  443.     char szPatchURL[100];( j/ g3 Q- D7 H& K9 N5 x# _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 Q0 q( g: Y% f- Q1 }$ T
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 u" ]9 i4 ^0 s: I8 p; z. C
  446.   }
    + t" J4 F( C0 O% ]1 b- a
  447.   else& i; }$ z0 N; m2 y9 I* f4 @% Y( s
  448.   {
    . Q$ j. o, O1 W2 D
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : @' h- N+ e' I5 I: \
  450.     strRegsName=DEFAULT_REG_URL;
    : j6 X$ \3 _* D; J7 c+ s6 v
  451.   }
    6 X: Q* d, q# K& {3 a
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ D7 V8 c: b0 [" r  x, h0 J
  453.   {6 e: p# l5 {" f1 I
  454.     char szIP[50];
    9 Z  j4 X1 k; {6 i! K$ \
  455.     char szDIR[300];
    7 b& _( E4 ?/ R3 X4 d( n/ S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))- m+ f+ F  p& M. z, u, z
  457.     {
    4 y( r/ h3 C; R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' [$ ^' d$ N3 r  x8 t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    & ^$ s+ {5 }1 H( ^' I# D
  460.       strHostName=szIP;2 V' ]3 Y7 V4 s
  461.       strHostPath.Format("/%s",szDIR);
    $ l2 G2 c1 k  j. T" M
  462.     }
    7 X2 h- j0 {8 `
  463.     else
    ' g) B& S& Y0 q- X) J1 L
  464.     {# g* S  N6 g" n( @+ Q0 a3 M  n
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 Q1 h3 p4 \9 G0 Z  t1 `! a! Z4 ^
  466.       {
    1 t) Z# e: G3 t- G, P; `
  467.         char szLanguage[50];
    3 V1 a$ Q1 r& V1 u% C2 P! V/ |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ b2 R4 [% ?/ w2 F8 ]5 z+ q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 r3 A( r4 v# d9 Z. ~1 m
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; _9 s* q3 t$ t2 {
  471.         else                                   m_iLanguage=ENGLISH;
    ( d9 k, `& K% p
  472.         char szRegister[100];
    % k1 y* m2 J; m4 ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* `% U1 _( v# z7 K
  474.         strRegsName=szRegister;2 @7 i; d" k/ N$ S% [
  475.         char szPatchURL[100];( v0 u  r  ~8 R, k
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . ~: S/ ]% Y& |# M6 e4 k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # v- A% Y/ W) l) p' j" @7 |! _
  478.       }
    & c+ O& |2 r/ ~" c: x6 l! b
  479.       else
    5 i9 P+ L- \+ M- q: G# l+ B
  480.       {
    6 U. t  |+ h6 G3 v6 Y9 h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : m- |- I( d. G$ p: q! S
  482.         strRegsName=DEFAULT_REG_URL;
    2 R) z/ R7 |& v. m! O. S1 R
  483.       }1 ~6 J$ r) I+ T7 b8 O, c" _$ b
  484.     }
    1 m/ j  x2 z+ B& E7 ~
  485.   }4 g4 b1 Z. |) V# [, y
  486.   return true;
    + A& r. s; z& C! p; @9 g: n" O
  487. }$ t) p' P4 s( M* Q' W% y. o1 Y

  488. , }1 N% z* S7 w/ L, f
  489. #include ".\ZLib\unzip.h"
    8 m1 l' J8 |7 V5 U2 E9 }3 e
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);1 C  V* J+ @7 U3 }4 }
  491. /////////////////////////////////////////////////////////////////////////////1 r5 D* {6 G+ e# w8 I* ]* S1 z
  492. // CRevAppApp initialization
    % j, e7 B0 F3 x/ O" V
  493. 9 z& J) _0 e8 ?' _
  494. BOOL CRevAppApp::InitInstance()
    ) Z7 k0 \( |- t# e! a$ _
  495. {8 n) k4 ?; E# T6 F3 r* u+ Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];3 q& o0 B$ t) m% W
  497. 6 ^* E9 s5 K+ p3 T9 @
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 Q1 H) m) d5 t7 s6 M
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
      X2 C3 k& d6 ~, t# H9 ^- }
  500.   {1 _$ N# X5 f; S  X+ n" z  W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% Z$ X" m6 k( U2 b( r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);9 v! |5 u/ R: ^# y6 x' d- h
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))4 m7 |# b, U7 S! p; g& {
  504.     {
    8 F' k( q2 v1 T3 }& `9 k% T& t% f
  505.       strcpy(szPath,szPathTarget);  D' W9 T  \& E2 D/ p
  506.       SetCurrentDirectory(szPath);
    " E  ^' O& e! d& J" b- C/ e+ g
  507.     }" u% Z  A1 L, g  c# H# K
  508.   }  W, L$ t: K. y6 P; U, y5 |
  509. #ifdef _DEBUG
    : q. @/ M- F0 l* V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # S, |: ~3 d+ j8 w6 c5 v
  511. #else
    , ~( R9 t8 H, {; [
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * Q. j" g( N3 c& K  C( L
  513. #endif
    # w( Z, R# [- v; |! u, `& p
  514.   {
    / e, d* ]+ D1 o: v, D
  515.     char tempFileName[MAX_PATH];* R& |+ R6 W' g, ], I3 N
  516.     strcpy(tempFileName,szPathSource);
    9 h& J$ p4 O) K3 c; U
  517.     tempFileName[strlen(szPathSource)-12]=0;
    6 y( W) T, L- |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " w* f3 ?0 z  ]. A0 u! I
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% V# y: p/ j7 E3 j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 I: w% o& d" Q5 D
  521.     return TRUE;
    ) ~4 {; e7 D: j( l0 x2 Z' h' F
  522.   }5 _0 b' [; f/ e% c8 e+ @+ Y
  523.   // Nuke 0118: Delete run.exe
    ( Z' d/ V6 B( Y- w4 z) Y3 @1 y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 g1 s' ?( Z& b/ C& d4 t  {
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ X) i7 ]5 G9 o$ Y0 Q
  526.   if(!ReadCfgFile("Config.ini"))
    6 G$ ]& ?9 T2 J9 k
  527.   {
    1 L6 X% X- y; g4 @- k# f4 P
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);* K6 y/ X+ }! {, n, o6 Z
  529.     return TRUE;
    8 E. n8 e) T+ @1 n$ Y0 x
  530.   }9 B+ v- d5 X) ]- E# W2 e
  531.   HANDLE mutex;6 M1 j: w# Y0 ~5 N  u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))8 u0 X' B, Y$ [' w. j+ {$ C/ P1 T0 m
  533.   {" b0 @! R# m/ `) h9 i; s
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 G! l5 M% g8 B) h. a  N
  535.     {
    # X( g/ @! v) O3 H8 U
  536.       CloseHandle(mutex);9 @4 `  k* J% w" s1 v
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, u3 y' H- q& X  M1 v  D
  538.       return TRUE;& N% x; L3 N" c# j
  539.     }2 [8 M7 F8 E  S, N5 N
  540.   }  
    7 P+ e$ P/ ~' V2 b. W2 r2 k/ G
  541.   CloseHandle(mutex);0 z7 O- @/ f7 g8 z% U: x: ~/ ^
  542. 9 m/ ?( \0 `- O! @" z- r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 }$ z0 S7 g$ I
  544. " w8 e* g) ^$ K* K# N% G4 Q
  545.         AfxEnableControlContainer();
    - }- d& X0 T9 Y7 ^; X' S
  546. ' D" T  F* }5 v9 F
  547.   bCanUpdate=FALSE;& e+ B- G# k" l  l$ l/ i1 d3 O
  548.   dwStartUpSteps=1;' C+ A9 T: i9 B6 ?" R/ o
  549.   dwProgramState=AP_NOTHING;
    ! d$ I+ q- P1 z/ f, Z7 m' @  g

  550. / U: u8 e' W! M1 s9 k, I/ s/ M
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 D; t& {7 b! R! J

  552. 1 w2 T8 D: x( f4 A
  553.         // Standard initialization5 p6 F- w: J7 V( l+ S
  554.         // If you are not using these features and wish to reduce the size1 [* i5 E! v/ b: f
  555.         //  of your final executable, you should remove from the following5 x/ e; g  z  R: S* }9 q
  556.         //  the specific initialization routines you do not need.
    ( }2 \' {/ e* m0 O6 Q2 M9 ^* r5 l
  557. " I% |$ G) _* r; J, s" q$ J
  558. #ifdef _AFXDLL
    # v  \, g( X3 r( j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    & s9 c0 n- M+ v/ O& M
  560. #else
    . U6 y+ }5 O( r+ H+ a  D/ E
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' O5 M1 n  Y5 J4 Z' c/ h
  562. #endif1 j2 Y, |+ P+ q

  563. - C# @# F9 z8 I# `* R- I* z
  564.   dlg=new CRevAppDlg;
    % [$ D; Q. h% x
  565.   dlg->Create(IDD_REVAPP_DIALOG);
      E( V+ s- Z! Y8 O$ \4 i; \
  566.   dlg->ShowWindow(SW_SHOWNORMAL);9 x5 D& v. U2 X$ n5 V4 E+ p
  567.   m_pMainWnd=dlg;
    - _5 c& {! r! |8 I, r: h3 C" r' H
  568. 3 ]9 [3 ~( S. _3 ?" i
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 P4 d/ s4 b( l' U. z' q- P3 u2 Q

  570. # L+ V5 H: _* }' F, |4 a$ v
  571. //  GdiplusStartupInput gdiplusStartupInput;1 M9 S& r$ c3 O
  572. //  ULONG_PTR gdiplusToken;9 w7 D. Q/ r) \7 G0 q, D/ _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 c. y+ L7 c% f9 o/ V& F( z& U5 E

  574. $ X; o/ ^; |3 A8 I
  575. //        CRevAppDlg dlg;5 B6 ^2 ^6 h5 [  b( a# G: P
  576. //        int nResponse = dlg.DoModal();  Z+ C  {( b$ \
  577. //        if (nResponse == IDOK)( c) ?1 ?* l* i
  578. //        {9 B! |) L) V( L5 J5 U: j5 f
  579. //                // TODO: Place code here to handle when the dialog is+ @. H/ F$ d2 b' D
  580. //                //  dismissed with OK9 z+ D. n) ^; B6 q9 ~+ ^0 l
  581. //        }! ^. c$ F) H8 [* H& ^' J+ U+ T/ h
  582. //        else if (nResponse == IDCANCEL)) ]4 [  Y" a! R: t* X
  583. //        {
    0 I" E5 A( Y3 R, L0 ], h  [! J
  584. //                // TODO: Place code here to handle when the dialog is
    # M8 Y& M8 L" q2 l# f+ X6 H
  585. //                //  dismissed with Cancel
    3 _  Y. T. {3 c" g, P( q4 l
  586. //        }. x. b0 Y1 \9 [  ~  A
  587. ; Q( @5 I3 w3 w! X
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 N6 G: F0 N* R4 }$ R% \$ X6 S1 f  T
  589.         //  application, rather than start the application's message pump.
    , X  h" F8 \+ w$ u- G$ P; g, G
  590.         return TRUE;
    % J# K- V/ P& m! z
  591. }
    6 f3 o/ k; L/ @1 u9 ~

  592. 1 s4 l) Y" O$ c* T" u. v) l6 a
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- X! y( c) k7 u1 o6 s( s, X
  594. {
    ' m* e% }6 ~4 C( s0 G0 p
  595.   int i;" T+ }- u" a, }& H1 w
  596.   char *szRet;
    ) Y: }4 T: i# {, b5 L2 A" u) ]
  597. 2 y& ~' I' B, {% s
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , T6 U2 D# Y5 m, a8 ^, g: X
  599.   if(sztoken)7 c: U9 t: g- i* [) E
  600.   {
    " N. k- v$ ]; }3 P/ p; p
  601.     szRet=&sztoken[itoken];! Z' Q+ p+ Q0 d
  602.     while(sztoken[itoken])5 G8 a/ r6 r5 H* c/ o3 b- Y) g4 U
  603.     {3 F7 z1 h6 f1 B& `, B) ?
  604.       for(i=0;i<(int)strlen(token);i++)
    8 k9 G% G" W+ l) V
  605.       {' y$ N) q. C  W( ?, Q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* _3 ?1 m, ^+ F
  607.         {
    7 A( K4 s3 U2 o
  608.           sztoken[itoken++]=0;
    - l5 p: Q& i% x  x: l
  609.           sztoken[itoken++]=0;, t% i& I/ y% `( ^- u7 @* P6 s
  610.           return szRet;, Z6 l& j$ V( X, \2 H. s8 m
  611.         }
    ; a" ~& z" [0 ~- i$ G" s; M1 l) q
  612.       }
    . j6 O) v4 ]  N$ b
  613.       itoken++;
    3 H9 M' [4 r/ D5 A
  614.     }
    9 N" D3 }7 e( j
  615.   }( q, |' h4 X/ @* _3 |& e
  616.   return NULL;
    # Q6 ]# d' a1 [% c7 y( @
  617. }
    0 J" T- F% x9 ~3 O! ]6 `. v0 f+ `; I

  618. ) _" L( x: z  k
  619. void ProcessProc(long Total,long Current)
    : `0 N4 w7 U  q# I' [# q2 B& V
  620. {
    & a2 I2 g& f2 F3 g! q
  621.         MSG msg;3 l8 ~& P2 ^0 e, L: e/ [' k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    7 {! \" w# x) G6 `
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' l& ?6 e$ Q) U1 s6 E3 O1 @$ {
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) @; P% D0 j* w( R
  625.         {3 E- ]: R: f4 M( a: W
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 v& S8 J8 ^1 U4 f' @! ^4 e" {
  627.                 {/ G3 {7 z  `3 a9 B% E
  628.                         return;
    6 Q: w( F* u5 w3 j% m" Y
  629.                 }5 y1 d0 X6 u1 E" |# ?
  630.                 TranslateMessage(&msg);
    * k- C4 p* S. |# _# Y- M& L
  631.                 DispatchMessage(&msg);1 d, G! I3 H7 S8 R$ [
  632.         }       
    ; w0 j3 A. B& B- e2 F4 l
  633. }
    , `/ k" }6 J% F$ J) `

  634. ) O1 x' L% p! |7 z6 y; t7 w
  635. BOOL bFirstChar=TRUE;
    ! B: v$ q. Y% f- a; r: m$ G$ t: k
  636. % k8 [0 I4 x; w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)* U2 j! V; i9 O, y
  638. {
      l7 o, o$ q) d& B- z6 q8 D
  639.         // TODO: Add your specialized code here and/or call the base class
    # F) ^3 C" E0 E1 g  X8 s
  640.   switch(dwProgramState)" B3 B, S& c) f) ]( `) J6 V
  641.   {
    , g# S; X: q- t% U
  642.   case AP_NOTHING:) `. z) y4 L# u
  643.     switch(dwStartUpSteps)
    " X" D. [% p. m4 H
  644.     {& G/ D8 ^* ]* F, b
  645.     case 1:
    5 V* G! L) o7 m' w
  646.       {
    8 }7 R4 b; d: W! N! |$ s$ G
  647.         int i;0 a- W. c2 w: @6 G& M9 m$ }
  648.         CDC *pCDC=dlg->GetDC();
    8 M( Q+ q6 |, J( O
  649.         HDC hdcwnd=pCDC->m_hDC;
    & g& @1 {# n& Z( k" Z2 ~
  650. //        Graphics graphics(hdcwnd);
    4 {) t$ v# |% k7 i1 n1 \: M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 i' ~- G$ m8 j# t
  652. //        INT iWidth=bitmap.GetWidth();' _6 M. f8 l& D, ]+ Z  L  r
  653. //        INT iHeight=bitmap.GetHeight();
    1 I) }2 r! g5 F( ]* s
  654. //        Color color,colorTemp;& Q$ r: o4 {9 p, k1 \
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" U9 d! |% k% n/ m, n( b3 O2 v* Y
  656. //        {
    3 v1 B/ l. c" u6 t$ Y4 y, Q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( X4 q: G3 f3 m# b$ q4 X# U
  658. //          {" U. @* D. T& C$ g9 {+ V: V
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    - x2 c- d! z2 @6 s( K! M5 Z/ F
  660. //            colorTemp.SetValue(color.MakeARGB(& T& W$ c6 h) e) g
  661. //              (BYTE)(255*iColumn/iWidth),
    9 m. R+ ?! L6 w: l; T
  662. //              color.GetRed(),
    ! `/ f0 X7 T& n% a0 T2 L% A
  663. //              color.GetGreen(),
    + |" \, J$ S% u" d+ {8 R
  664. //              color.GetBlue()));
    . D  i5 x! o4 b4 _
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);7 |, \5 B  w) U5 q, ?- Q( r
  666. //          }, `; I4 l% S( R! P4 }. t. e. l
  667. //        }/ q. J7 Q, s. f; l! }9 \
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 ^" h+ |& V1 H7 \
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 c. _) i% l' f7 h( M3 D" P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " ]6 }0 H3 Y) s, G* u* j
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    , ]' o- w& @! [" t) b
  672.         for(i=0;i<240;i+=8)" O- ^: Z5 d- p$ `) h
  673.         {
    : `0 Z- m+ K- q: `0 J3 |: w  ]8 G0 M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 l+ B5 Z1 F0 y) ^2 b. f- x
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) c+ i/ c6 q7 W6 j0 g* ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 P- |+ m# f3 Y: b% f" f
  677.           Sleep(33);
    ) R6 I: S) Q+ p5 B. ?- m- w
  678.         }5 v* q* O# ?) T% G6 U! ^  F
  679.         Sleep(1000);+ N( ^* D1 e  E* ^; b
  680.         for(i=240;i>0;i-=8)- V& _( t2 K; T0 `
  681.         {
    % E4 A4 D3 s" \+ L, p& [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ ?0 K7 ~; U, J. a9 a
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 x1 q8 S& o: `; a
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 r: N* z# X' Y! @) F& l. J, m' ~" H
  685.           Sleep(33);
    $ y4 I; R3 Q' m* i+ J
  686.         }, s5 z9 C: @; K9 O6 W' @
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ ?& z- L9 C$ `7 U4 i0 B7 N: k( y% u
  688.         dlg->ReleaseDC(pCDC);
    6 S. q* p: _; C" k) A2 Q
  689.         DeleteDC(hdctar);
    : O( V; N( G  K8 o) @) o) f/ c
  690.         DeleteDC(hdcsrc);
    : S$ @5 `7 D$ C+ f5 }" Z! y2 w4 h  t
  691.         DeleteDC(hdcorg);
    ! M5 f1 _! Z( G( H# s* i+ Q( y1 t
  692.       }
    9 e, A, q, O( N8 R
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);  C; N! B3 ?" c
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");- h. `" x4 _2 t% l8 U0 F
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");$ y' V( U. S. u- |: c1 q0 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ( P+ W3 O  {! ]: d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ j  Z' H6 ?6 w& P  D
  698.       if(!Dn.Connected())
    0 A1 \8 B" ?* z+ B' f- E  |0 |
  699.       {
    8 E+ Z$ S3 `$ T7 V+ v
  700.         dwTotalFiles=1;" R* D8 }: Q( i+ h1 Z- n. O$ u' _5 H
  701.         dwDownLoaded=0;
    8 e' c: U0 u( ]9 B9 T& y8 p
  702.         bSilentStep=TRUE;
      [( s0 |% R( G/ c: _- d3 N, R
  703.         bCompressed=FALSE;) {; K( N- |  g. Y, H  ~4 O
  704.         strExtLocal.Empty();
    - V& v. E6 F7 n' g  b. ^) Z- N
  705.         strFullName="readme.txt";
    0 q! \6 h% W2 H9 u0 J0 O8 K
  706.         dwProgramState=AP_CONNECT;
    7 G' e: E5 }- J: I1 F- ~/ W
  707.       }* x$ [. ^) Q, m
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : X# H. ]* p/ K! q, [& I
  709.       dwStartUpSteps=2;. }3 C, U2 T: }) S: G3 l# g" r/ K
  710.       break;
    ) g: H; s. t. x
  711.     case 2:
    % s" ~7 E5 K) t6 m" E
  712.       {* {  ?( ^/ p* d
  713.         int iEOF;
    * z4 G$ D' l) }0 c
  714.         FILE *fp;
    ) E$ i( H2 ?6 m3 O
  715.         char szString[512];. g5 u& r2 M" J0 Z; G* C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / L) x1 {0 Y, G! [  V- N
  717.         if(fp)
    ( U1 n3 v6 p& _0 I0 p
  718.         {
    ; }3 o* K2 a& J' [5 C3 V& M
  719.           do
    2 v; a5 u, {( {: Y0 R
  720.           {3 s% ^4 q; I1 n% }/ M% g
  721.             iEOF=fscanf(fp,"%s",szString);
    . j8 M9 _: c# t7 ~, _
  722.             if(strlen(szString))* h  x* x$ T1 v2 W
  723.             {, ^, s: x  i7 J3 ?4 l; }
  724.               if(bFirstChar)6 T1 x. e! A/ D
  725.               {( h7 @9 ?8 D1 i' `0 [9 n
  726.                 bFirstChar=FALSE;
    ) ]2 q! T3 Y, `3 T+ O8 I0 g( e
  727.                 bConnectIsBig5=FALSE;
    # ?' n/ s; {9 n+ N) }8 U2 ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) O  ]. [6 h- x! L! D( |2 |% g, e
  729.               }6 ^$ i9 Z$ G# p! A  b& T/ i5 G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 I) M# l" B+ q; I$ o2 s7 U  ?1 q( ~: P
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 z: k) p3 s6 b8 T( Z" E* T
  732.               dlg->m_ListText.AddString(szString);: w7 h; @7 r# o5 V
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% J  f. R. L- C+ W7 Z# F" A5 B
  734.               *szString=0;
    * b* r& w" k" d( j
  735.             }: {2 G* A8 ^, O* P; F2 ]/ X  d2 f
  736.           } while(iEOF!=EOF);& |1 E( O" }$ Z$ C) z' S" @* a- B
  737.           fclose(fp);
    ) b1 \5 Q* k% }# c; i1 E( U
  738.           unlink(".\\DownLoad\\readme.txt");8 P; L, o8 X: W4 K  D# f" v
  739.           dwStartUpSteps=3;
    2 Z( ~$ C, J  q! l
  740.         }
    ) D$ G+ G6 Z. P+ L' e
  741.       }7 ~5 e: M; _) n6 U0 @
  742.       break;
    % e+ S. K+ z' o5 K
  743.     case 3:
    % f% ^5 j: n- o9 N9 ^( L. g
  744.       if(!Dn.Connected())
    * i* n1 |* J$ ^
  745.       {
    9 i8 ?/ n1 S3 _' S8 }: L+ l$ ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);- a! p! P. V$ S( |3 J
  747.         dwTotalFiles=1;
    . T# A* ^, s# V7 ]
  748.         dwDownLoaded=0;
    # X1 N2 J7 g' H! E7 @( I
  749.         bSilentStep=TRUE;$ h- i1 g4 w; Z
  750.         bCompressed=FALSE;
    1 e; }. D& N' P( ^$ }% K+ h
  751.         strExtLocal.Empty();+ I( C" V" p2 M/ S& J& F
  752.         strFullName="checkversion.txt";5 d% {/ ]5 z) A- g) v/ ^8 w
  753.         dwProgramState=AP_CONNECT;
    ' t8 S! S9 Q( q6 f
  754.       }& W0 p: [# J7 n. B8 E2 K4 d
  755.       dwStartUpSteps=4;, V5 q7 h; C# ]6 U* E7 n
  756.       break;3 r2 d. W  C3 {- a
  757.     case 4:& s6 \, W+ p+ Z2 F5 [/ E- w
  758.       {% Q, H2 y& ^' w  V
  759.         FILE *fp;
    2 y8 ~; x2 ?7 _
  760.         char szString1[128];/ z5 R; A5 Z" q
  761.         char szString2[128];
    , G' s+ u0 z8 E6 O5 }# |2 m/ M4 r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");% C* u+ Y& x- ^" |& s
  763.         if(fp)9 a* s4 z" A5 Y' S
  764.         {
    7 p1 s9 ~( [, H" `- N
  765.           fscanf(fp,"%s",szString1);. c" T, O( _* ^' K
  766.           fclose(fp);
    ) w  g. R9 O3 {4 V; }* H8 @; J0 p
  767.           fCheckVersion=atof(szString1);" S# N) ^! m- e  ?, X7 D
  768.           fp=fopen(".\\checkversion.dat","r");
    5 L$ }5 S( f9 m, A3 s% q: r; c6 e% Q
  769.           if(fp)9 ~" X- g7 n6 x
  770.           {9 |5 _7 a0 M+ |
  771.             fscanf(fp,"%s",szString2);
    ) a! P( X2 w  I; H( T8 A  ?
  772.             fclose(fp);  U; U6 W3 h+ [3 G7 R
  773.             if(atof(szString1)!=atof(szString2))' o5 t$ ]% n" Z* n
  774.             {7 p# f0 H' Q+ v9 ?
  775.               if(!Dn.Connected())
    9 X# S/ @4 I4 R7 j* K- ]' w, ~2 h
  776.               {1 Z) [6 ]; \' X, B% M
  777.                 bFirstUpdate=TRUE;! I) m- {" o* A# ]9 A3 d$ H; h" i- V
  778.                 dwTotalFiles=1;9 s" p( W# q" L: ?/ U
  779.                 dwDownLoaded=0;; J0 b& W3 C7 {/ `5 T
  780.                 bSilentStep=FALSE;
    8 u: B2 d- }. Y& y5 ^
  781.                 bCompressed=TRUE;
    & E( P* {" C+ f- F. b/ z
  782.                 strExtLocal=".\\DownLoad\";8 J' W- m; ^) I  f
  783.                 strFullName="update.txt";
    + a0 B4 O4 U8 `! I+ T
  784.                 dwProgramState=AP_CONNECT;
    & A7 C& y* F" o3 H2 F9 w0 n$ z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 v: |) L: }3 I$ `- @2 U) h( [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  `( X' r6 C6 u
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ l+ t9 }+ t% }6 A
  788. + Q9 Q7 q1 I* e" f* a9 z5 r
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* T' j6 D1 V0 ]3 N
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    - m: ?: u/ D$ j
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( j. a, Y5 ^4 D. B) e2 W. b' a
  792.                 {
    . p( C3 c+ b0 d
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");/ M0 k9 y; `4 K1 i0 R
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    8 q' _& F4 K& W7 ~& C1 x
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & Y& I' j4 B8 V" |7 X! _; w) ~4 c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 v2 x, n" Z$ }' D$ [6 \' o

  797. 3 ?7 ?: d. {3 j+ X! D3 F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! u+ u& w* w7 h* |) X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ f/ h8 r, y, ?( L
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! D+ V1 X+ h6 L) Y- x' J0 w4 `
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( J- n4 F7 N, T2 w" m1 s0 E2 U
  802.                 }$ Q. Z# a$ G' {7 F& H+ y; B
  803.                 dwStartUpSteps=5;
    : B. `: l( R% r1 e7 J( [
  804.               }
    ! a2 B7 A6 F' ~8 g+ A
  805.             }: |: m  w6 @4 A$ t6 D
  806.             else
      H& G0 v/ g: h4 }) w
  807.             {! I6 q9 T& X2 o- e; W+ v" O$ ]
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 ?% x" ?% v' y. e2 C
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    1 `( W  n  A: Y, r
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");0 }; \5 z% z7 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 b! Z5 p( I8 h: [
  812. & I$ I! Z4 P' i3 \* h4 ]' H# {3 l; m+ q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& C4 x1 T" s% t. {- S8 g
  814.               dwStartUpSteps=99;* u3 i) l9 Z" k) K
  815.               bFinishUpdated=TRUE;
    / e; |. i" H5 J8 Q+ _- T
  816.               bCanUpdate=TRUE;
    7 ~; v8 s$ ~+ c; f2 I1 {2 G
  817.             }
    5 }0 d' G* \5 g1 _
  818.           }1 v: _1 A" c2 }" _1 v
  819.           else
    ' E* t1 q' u4 L& h
  820.           {  N) d; D6 T& {% L2 t5 U# Z7 W
  821.             if(!Dn.Connected())
    % t7 K9 O- P# d7 c. P
  822.             {* Q3 h( D& B5 z) j6 C
  823.               bFirstUpdate=TRUE;+ [$ `1 {, r4 G  U
  824.               dwTotalFiles=1;
    1 H" {1 S$ C& e
  825.               dwDownLoaded=0;3 [: |8 E9 Y$ \
  826.               bSilentStep=FALSE;0 z8 D) b+ w- A$ u, \$ a
  827.               bCompressed=TRUE;  ~( ]$ H, g' u  E0 i: ]  t
  828.               strExtLocal=".\\DownLoad\";& v& g6 I0 b  \: V% P& Z% K
  829.               strFullName="update.txt";
    8 z' t+ n% j. ^. |
  830.               dwProgramState=AP_CONNECT;) A" y" Q& ]5 }& J  W
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 b2 |; a" \' ^& m' @8 N
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . U7 _, ]: D" y) X. q6 Y" B- P
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ @1 ^, U4 _8 g! f8 Y$ O6 S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. \# p/ ^4 D5 G! Q9 Y; G5 k
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ' B1 a; A! W5 p$ T( K- D" p, V
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    4 Z* V7 h, i. ~/ |
  837.               {' W- F/ r  u$ y! a# m: _
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 |" ^6 U1 h# ^" d2 Z! K8 o
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");# k# ~9 y. V4 L& _1 x7 B. R
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ; z! n# |6 Y( v! I0 O* R2 Y/ I$ n) A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; k: n9 T: n, o
  842.                 ! E6 o$ N  x% l# z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! {. ], h& X2 I" p. ^- n+ P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 E/ L' O, j# y9 h7 `9 X5 z6 O& E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 F- h- H! |) p1 w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - Q; P6 N8 x% ?
  847.               }
    $ i1 t% n. E' F+ H9 |* d7 Y' H
  848.               dwStartUpSteps=5;
    3 P3 V0 j% H& n! V  l  L/ [
  849.             }0 m; s* I/ S3 h$ j
  850.           }
    1 K! [" H/ w* |- B$ r& f
  851.         }$ z7 C* Y+ f2 m1 ]! M$ A
  852.         else
      D+ p5 n; \8 Z8 q4 ^( }3 K2 e3 I
  853.         {
    9 K7 w% F! W8 {( R- i4 j* D
  854.           dwStartUpSteps=3;
    1 I! N7 W8 m; U
  855.         }
    8 u* I. C+ F0 @+ B- o# B+ ]. Q
  856.       }
    / M/ d9 V& u" p! B# g5 Y+ L. m5 e
  857.       break;
    , r( M) w* U2 F( G0 [+ G
  858.     case 5:7 {$ a3 }3 J' V3 s! ]9 Y% M
  859.       {: M5 H+ g( G. g* ^$ g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    - u$ l/ d3 ~; o3 M6 d2 G
  861.         {9 z  u1 W: v5 a, M3 p; j
  862.           int opt_overwrite=1;3 z; @, y( u3 Z" B$ B7 Z  D7 ?
  863.           int opt_do_extract_withoutpath=0;$ W* q6 [7 p( ?9 F1 E2 n, ~4 _! D% x
  864.           unzFile uf=NULL;2 m2 l6 i; n; O

  865. $ ]7 L5 _6 h% T# Z; N
  866.           uf=unzOpen("Wsa.zip");
    ' a, k& _) ?2 d: ?$ Q  u
  867.           if(uf)
    % X0 R9 C2 J$ ~( D3 D! l; K- t7 o- C
  868.           {
    3 ^0 i# B! k# y0 O  x
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);! D8 U, S( J0 |4 u
  870.             unzClose(uf);
    8 z$ U+ ]4 K/ j1 t$ `9 \  Z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");: g9 Q! m6 ]4 D6 J7 @' g5 n2 r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");. c' m3 G) ?! T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");+ F% X$ a$ |7 H/ F7 w! C; a
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( M! y( g! i. u
  875.           }
    6 R8 ]1 z  }) R
  876.           DeleteFile("Wsa.zip" );
    0 \0 {# P9 o$ F
  877.         }% R0 M- y  M* n

  878. ' G, q" {3 l+ t2 j7 H! _
  879.         if(CheckLocalVersion())
    7 y7 c' t$ Y/ R5 V
  880.         {
    6 X1 X; m) ?; Y# b6 @6 x7 |
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");6 `/ w% W$ f. K. x! m! U% b4 X  ~. F
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");9 C3 d* j5 |5 l# r# C7 V4 V
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    ( I& _8 z8 S; m. [0 u& y$ g
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & I$ r1 a3 o& B, @1 R
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    . P+ x. ^) }2 H# }$ x
  886.           dwStartUpSteps=99;$ v/ A$ t$ Q5 k* F6 X
  887.         }1 D. I8 g6 Z. ]5 e1 p
  888.         else
    1 r$ D9 W7 y4 Q4 K! s
  889.         {7 L' n7 k. }# T
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");, p* }; r3 X7 `; G8 R! t
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & J, k& e4 I) z' H8 ]
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' _7 H4 b4 K4 q" o8 e

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

/ A2 J& |0 P# Y) P4 n& u# J
, D3 i' I+ S  `8 W% a+ }5 s+ d4 S! c

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-23 20:14

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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