找回密碼
 立即注册

CSUpdate.exe源代码

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

* T3 {& h/ I+ ]6 F, B3 h6 ^# s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 v. s: S# @* H( V' O( R8 ~
  2. //# j! U# r& E7 v
  3. $ p% u; A( c- H
  4. #include "stdafx.h"" ^7 }+ ^2 A4 w( w  I" I

  5. $ _8 ]' l: `4 z8 t2 W+ h1 Y) f
  6. //#define UNICODE+ q8 q! |4 z/ A. u. l
  7. //#include <gdiplus.h>
    6 l3 c- \- M5 ^
  8. //using namespace Gdiplus;! e; `6 T$ s& t, \

  9. 6 x) D: K7 [% S
  10. #include "RevApp.h"
    6 [  v0 p9 e- \7 X. w
  11. #include "RevAppDlg.h"3 n+ f% m! }1 D
  12. $ J9 R% s* R3 h8 P( w1 J
  13. #pragma warning(disable:4786)1 I  }& b0 I2 i8 O. V9 D. s' t
  14. #include <map>
    ) X# K- w- x# H0 [8 ]
  15. #include <list>
    : x1 F. b  w, ]+ _1 g6 e
  16. #include <direct.h>+ x9 [! r% `0 T- f: s
  17.   R0 M% V. b( |) c! @
  18. #ifdef _DEBUG- O% W9 t4 q. q+ Q$ x6 A
  19. #define new DEBUG_NEW
    & ^0 N3 `' N$ Q+ j5 y
  20. #undef THIS_FILE  B& |& f* ~5 t7 h
  21. static char THIS_FILE[] = __FILE__;
    ! x! N: r) M. N( z
  22. #endif& O  Y$ Q0 T& c% G
  23. #include "SkinResDef.h"
    3 _2 E" ^" ]0 y" k% M7 x0 W
  24. #include "ChangeBG.h"
    - t/ T9 Z( t  t, j* |
  25. #include "AFXINET.H"
    # U) D' M/ v3 b, z$ |* Z
  26. 2 U, x6 f0 A$ p2 Q" m
  27. #define TRADITIONAL_CHINESE 02 |, R" ?/ D2 {% Q3 ?# {; l  I
  28. #define SIMPLIFY_CHINESE 1  D$ w! ]9 ?, S
  29. #define ENGLISH 2+ Z9 V) l" s) ?( E) ^
  30. int m_iLanguage = ENGLISH;
    4 w  q+ z2 v$ [9 w! R3 k, n
  31. /////////////////////////////////////////////////////////////////////////////
    , T( q8 ?3 ~3 I2 R! C6 |0 e
  32. // CRevAppApp
    % K/ W& v2 A: W. ]$ N- [1 d

  33. 0 q# r7 Y7 i) n/ T6 h) Z" Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)$ V4 G4 e! W% R1 V6 y  A' A( ~2 j2 ~& @
  35.         //{{AFX_MSG_MAP(CRevAppApp)' c; z# a/ p: L6 ?3 {
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    * G* R# q' X% P! F' T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 z0 c1 M6 o, w, k
  38.         //}}AFX_MSG% D. z# b8 v0 i2 ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& d% [* X/ R0 p
  40. END_MESSAGE_MAP()6 N1 T' o+ n& t% K

  41. / w. t% y% j7 x0 R( ?7 _# r- r8 g
  42. /////////////////////////////////////////////////////////////////////////////1 l/ a9 N) i/ s0 g( ^9 X: `0 w6 X% C
  43. // CRevAppApp construction/ h/ R! v) x: e- m5 C

  44. & O6 u$ X$ K3 l7 V& g: J7 Q
  45. CRevAppApp::CRevAppApp()* K5 d8 w, W% Y4 a
  46. {/ Z) N3 a5 n) S/ J& j
  47.         // TODO: add construction code here,! \+ z4 M" u/ R0 |  \8 x
  48.         // Place all significant initialization in InitInstance
    & g  b% W. l# K! ^2 b
  49.   bDisplayIsBig5=FALSE;! L1 D2 L' Y" R. ?
  50.   bRestartUpdater=FALSE;
    4 x% j1 K6 R" F2 ^$ p! d& ]& U' @9 i
  51.   bFinishUpdated=FALSE;
    , C/ Z+ ~" S' I! W! ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    # i4 i5 Z, H6 l% P
  53.   InitChangeDataBig52GBKS();9 m' h- J3 R& @& ^- `, c5 Z
  54.   InitChangeDataGBKS2Big5();
    $ G' m- }  g% S2 ^
  55.         //0 Q' R% S) g+ _! G
  56.         bClickRunExe = FALSE;
    / z, G# G) n1 h0 E) ?4 [0 E  B
  57.         //
    7 f* u/ Y8 y# V
  58. }
    5 D  K& j6 l# ~- v

  59. 5 L$ M2 p3 L  d: ~3 O1 j1 c- T
  60. CRevAppApp::~CRevAppApp()
    * ^, ?. _1 o$ p9 ?0 w- [# d
  61. {1 k- X* ^2 S0 H6 u. ?% H1 Z5 o7 I
  62.         // TODO: add construction code here,
    ; \7 Q( ^5 z2 h
  63.         // Place all significant initialization in InitInstance
    ; q/ }  ~# [- u2 Z% r
  64.   EndChangeData();; ~. P- ]/ A7 j7 U$ a4 |
  65. }
    : [; e. A3 U2 z0 a: d, x: N
  66. 8 S: p5 j3 ?0 |5 ?4 I8 j
  67. /////////////////////////////////////////////////////////////////////////////
      j% j9 n1 P- z' T2 F2 T$ T
  68. // The one and only CRevAppApp object+ v, H. Y$ `6 ^0 o* ]$ t

  69. ! X" A8 B) ~( ]& a/ I
  70. CRevAppApp theApp;
    4 K, r, j6 Q3 }; L7 `- u

  71. ! I2 s9 G8 a, w" m4 c2 I
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' }3 {: H: Z' [% k1 w/ J- w
  73. {0 [# `' _' W5 w+ ?/ C/ O( d8 K% m
  74.   int iEOF=0;
    8 h  O# `2 J: X( E" `, a9 A
  75.   char szTempName[MAX_PATH];
    - d& }+ O: F5 P2 o- [
  76.   *szFileName=0;
    , D( ~7 v9 F- Y
  77.   iEOF=fscanf(fp,"%s",szTempName);( v( `) ?3 [9 ~
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' K: I6 ^% Z) S6 K
  79.   {) s" Q6 r1 R) I; F
  80.     strcpy(szFileName,&szTempName[1]);
    ; y" l  ^; `* m+ I+ j- d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ; \1 ^2 d5 V+ \5 C9 S" F
  82.     {/ ]+ E, U; K5 A& y% b4 G" z% S) `
  83.       iEOF=fscanf(fp,"%s",szTempName);5 C7 S! {2 p  ]. r8 k$ P0 P
  84.       strcat(szFileName," ");
    9 }( Q% \. d( p- N. ~
  85.       strcat(szFileName,szTempName);
    # b4 x' I4 W" `; W- X& G6 H8 B. K
  86.     }
    ) F3 H. c6 g; H$ p1 U+ W
  87.     if(strlen(szFileName)>=1)
    # ?4 W+ `; k2 T7 T/ P
  88.     {
    $ k8 T" G8 i% f) g3 v
  89.       szFileName[strlen(szFileName)-1]=0;
    8 U2 K0 G; B  E  Z1 j
  90.     }
    & j9 W7 T! l/ M* D" o
  91.   }3 h) z( o4 N! x1 s
  92.   return szFileName;; t9 p( ]5 y7 D& S6 n
  93. }3 f$ A; U7 w8 f, C7 N: C

  94. + r9 P& E9 P4 P/ u& j% y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    4 f" |) Y# B' J3 t5 u
  96. {
    5 L- u" A2 @2 y5 f+ N; q
  97.   FILE *fp;& k5 g9 m3 z4 y
  98.   char *key=NULL;! g/ B/ v# F+ v, \3 m
  99.   char version[MAX_PATH];0 B' [; Y2 j4 ~8 P
  100.   LPUPDATEFILE file,olds;8 l5 W8 r) N# O3 d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    - g  l' P, i! B' ?3 j

  102.   ]# [: }# V+ S# ?1 W2 [
  103.   UpdateList.clear();) f8 W# j/ \8 i# v, O/ n& W
  104.   UpdateFile.clear();
    1 P. x6 d% Y+ _* e0 I2 r. U2 w
  105.   if(GetFileAttributes(filename)==-1) return false;% i" M. _. U1 t/ X
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; ?5 X" M* j7 A& z
  107.   fscanf(fp,"%s",version);$ \, t0 @4 y/ ]$ X; R- i  [
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 M: _. J2 h  N/ ?% z& z3 w4 i
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ! Y3 [7 d8 }% {7 |
  110.   {9 P6 a5 F1 M4 F* [( k6 Z- f* F
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 w% d) p2 U, \) ]
  112.     fscanf(fp,"%s",file->path);# O  A) e% H  t. y
  113.     ReadFileNames(fp,file->file);
    * d) M4 z. ]( S' [& w* ?9 U! c" s
  114.     strcpy(file->full,".");$ f8 ?8 H  X  g6 N2 X
  115.     strcat(file->full,file->path);$ C7 D* M' ~9 \( k6 \4 e
  116.     strcat(file->full,file->file);; J4 ]1 Q5 G7 B7 t. E& w
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 b3 D5 e' H* V# g
  118.     {
    ( {0 P7 C' m8 o2 t; C3 A. n
  119.       file->vers=(float)atof(version);
    8 ]: F, Z' O8 N/ D$ s
  120.       UpdateList.push_back(file->full);
    7 Z" I5 K% K1 F$ k" J* ^- ~- l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));5 C! F/ d, Y2 b& H: q9 J0 @" ^
  122.     }
    % i/ w1 R! b! g  t! C
  123.     else$ h: A, H) u/ |2 p  l# l
  124.     {
    1 F  O. ~6 D$ ?' [
  125.       olds=(*p).second;- B8 l! E4 }4 U: ?6 W6 T% k% K
  126.       if(olds->vers<(float)atof(version))  t7 P! b( n/ k' R! I! \
  127.       {
    * o8 S% _4 _$ V+ D! Y
  128.         olds->vers=(float)atof(version);6 z! B8 h$ e( D0 w6 q( O( d
  129.       }
    1 Z8 x6 n; P7 O9 ^  p- ]7 h( D
  130.       free(file);
    4 v- L9 h% d( h: d- T
  131.     }# i3 H4 m- H& N( |
  132.   }! W, j. a7 c2 h1 t: H, j
  133.   fclose(fp);
    7 j2 C4 H' G- |1 |: U3 n$ u8 G
  134.   return true;* Z* K3 @! _* P4 g+ B# F
  135. }4 v. o! {3 V! |# N+ X  ?

  136. * G. U: D- L9 X' r# D. J
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 S1 I! }% q- v& D' g) a
  138. {
    : X+ _! R4 P4 X" T$ m, ]8 Z( R
  139.   TCHAR  szFull[MAX_PATH];5 Y0 [7 ?. ?) V9 e$ v
  140.   TCHAR *token,*inter;
    ) g, L. S1 e' m  p
  141.   *szPath=0;% R( r2 i5 p1 \8 j2 [" M2 D
  142.   strcpy(szFull,szFullPath);8 t6 y; w- J  G
  143.   token=strtok(szFull,"\\/");0 C0 A) L6 }9 e7 F% k" x( `% B+ _
  144.   inter=token;
    ' @" w) k8 Y! B, C
  145.   while(token=strtok(NULL,"\\/"))
    5 n& O, d# G% ]8 _( w2 s
  146.   {7 [6 _1 ]. L) j, S
  147.     strcat(szPath,inter);
    - S! V: K' v/ k2 j
  148.     strcat(szPath,"\");) F! z# B- `( F/ K3 B
  149.     inter=token;
    - `2 g1 V3 t* d
  150.   }3 F9 L  b3 L2 A# g* k
  151.   return strlen(szPath);# B) G& y* ^( V: F, Z8 I; _% p# B
  152. }
    2 A1 f: m5 c; ~" n& z

  153. . f6 |( ^+ i2 ]+ Q2 n
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ G4 |2 R) O0 F: A0 b; C) O7 e& T
  155. {
      D+ z4 c7 u  ~% S: Z( q, z( ~
  156.   DWORD attrib=GetFileAttributes(Target);
    / h8 [( }9 L9 n! G- m
  157.   if(attrib!=-1)- I: T* q' A9 y  B
  158.   {4 @# R4 V8 u2 ~* ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - @# u) e$ b& y8 T8 ~, m
  160.     {. |3 ]% o& Z3 I8 f: M3 _
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);+ L+ B9 M- e9 k* i" o
  162.       SetFileAttributes(Target,attrib);
    & W2 X  j$ q: ?# r1 h6 ~+ ^
  163.     }: J3 F$ k1 }9 c, T% |
  164.   }. x! c8 X; Y/ ~2 K
  165.   CopyFile(Source,Target,Erase);
    , q" r8 q+ C' g) b, [
  166. }1 T9 k1 |) i# P) G* t1 p
  167. ' K7 a! Z- @0 o. w0 H% U& I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 d6 A, G" ~+ g% ~' h0 R: b
  169. {
    9 v7 Z3 b- Q% C0 g" Q
  170.      FILE *fp;6 Y% H, w) [3 @5 i3 H
  171.      char  szBuffer[8192];: b# O2 S! _% q& i( N1 z
  172.   va_list  argptr;
    - v% ?, s5 q4 ?
  173. . k) l; b2 ?% t4 C
  174.         va_start(argptr,message);/ Y9 _6 W8 o( {
  175.         vsprintf(szBuffer,message,argptr);7 R: y' n) d$ d9 y1 w* Y
  176.         va_end(argptr);0 k* v2 U5 K% ^9 i$ x
  177.   fp=fopen(FileName,"a");0 `- x; G$ L; y* T- \  a6 W4 @" S
  178.   if(fp)# X# ?, q' A! O, K
  179.   {
    " r9 P* h; ^" Z( I  ~- Z
  180.     fprintf(fp,szBuffer);
    ' h5 |0 Q, k7 D
  181.     fclose(fp);
      ~" v- D/ S8 }4 B5 W( Y
  182.           _flushall();/ L7 v% {( p/ d4 i: Y( @, H
  183.   }( J7 q  u& L, j* w* h7 s1 t- [0 d
  184. }
    6 x7 [) N- R7 ?' o! P# V+ c

  185. + W$ r: l" q; _4 |2 y& N
  186. BOOL CRevAppApp::Fclearf(char *FileName)% E6 m( _# s, g0 ?" J
  187. {
      K, w. @1 r; s, N& I
  188.      FILE *fp;: E! J, Y8 A6 m+ A" e7 ?; h1 e: R4 w
  189.     DWORD  attrib;2 l# l' p& e5 J( ?* H
  190.   attrib=GetFileAttributes(FileName);0 |4 b* Z* H6 ~. Y" B! V
  191.   if(attrib!=-1)
    6 s. s% V3 W- N$ C, M1 N6 |
  192.   {
    5 ]2 k5 f3 n+ @
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, l4 M& @% M" X8 _2 f8 ]7 R
  194.     if(!SetFileAttributes(FileName,attrib))
    # ]  }. ?4 C/ i( m
  195.     {
    4 v  ]. c9 S# L/ Q+ ?; m, a8 E# f( v
  196.       return FALSE;
    " _/ i" Z2 O1 `/ u  N- l6 |4 L
  197.     }
    , C- \; o& `3 e  k% T- ~: t
  198.   }
    ) }# H0 j( P8 E+ P
  199.   fp=fopen(FileName,"wb");
    . M8 }4 L: D+ {3 Y1 Y9 O$ Q- p; ]
  200.   if(fp)
    ' Y$ c9 M4 Y$ ], ?( b
  201.   {# l* a4 w) u: F
  202.     fclose(fp);
    $ u$ m* K7 R9 J  B- s8 @' R5 C
  203.   }
    - q, o! d* g: {% Q
  204.   return TRUE;' C6 x) Y/ r2 Z- O1 v; Y) q+ M: U
  205. }
    8 G/ q/ x* A  P- a7 e; v

  206. / k  o8 b5 r4 D
  207. BOOL CRevAppApp::UpdateLocalVersion(void)9 e( I: d1 m( P1 a. _* @! u0 P
  208. {- p; m8 \7 l8 f7 f+ k9 _$ `
  209.   char filename[MAX_PATH];
    6 b- }# D2 k! _- K
  210.   LPUPDATEFILE file,olds;
    1 R+ p- U1 b3 n) x; E# @
  211.   std::map<int,CString>::iterator i;3 }+ ]' F3 {8 f
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, f- [2 ~1 v- Y$ G* p% \
  213.   std::list<CString>::iterator l;
    . Q& V8 b1 w& l' _+ u: m+ o' M) ~7 r
  214. + ?# `; r( `8 n1 M
  215.   if(bFirstUpdate): F" R& B9 k5 Q& \
  216.   {
    " v  {. @6 _! S$ K& v
  217.     dwCurrFile=0;3 C+ O; J% C. b1 B0 W. @
  218.     bFirstUpdate=FALSE;8 m* A+ `- q5 W
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 `" K6 Q! @! D; `0 D6 D1 b
  220.     {) T5 L8 j6 _7 \. ]7 N6 c
  221.       dwTotalFiles=UpdateLocal.size();5 e5 |5 I% x. X
  222.       dwDownLoaded=0;
    / p! s( W7 h* L& ^% O: S7 X
  223.       bSilentStep=FALSE;: b/ ]. I! l* ?0 O4 c6 n
  224.       bCompressed=TRUE;; P2 }& ~$ g) O. ?: O& X# l& H5 V
  225.       strExtLocal.Empty();! d- u% B+ ?9 R6 k8 K
  226.       strFullName=(*i).second;
    . D4 [/ N  ~( q
  227.       dwProgramState=AP_CONNECT;* U/ i; u$ O& Z* g
  228.       return TRUE;
    % u' l/ V' Y3 P/ ^
  229.     }
    . J3 n* I/ k3 H3 [5 |  u
  230.   }8 G) T2 }# _/ [, m- C
  231.   else if(bRestartUpdater==FALSE)
    ! N1 f1 O8 K4 G. y
  232.   {: t9 `3 D( ^+ G- k! V* C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ' s6 o' u3 e7 k) \
  234.     {+ Y7 A0 v7 P, _# v7 ^8 t
  235.       file=(*p).second;& M. R% Q2 @1 \" m! Z, N6 q$ {
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - B+ _; B* M8 `" A. v  M
  237.       {
    - e3 ^2 r- D; f) K
  238.         olds=(*p).second;0 Z7 e# N; ~/ a0 K6 r
  239.         olds->vers=file->vers;0 a% s; t: u7 ]1 Y/ y. O8 a" T$ ?- v
  240.       }0 @$ I9 q" M: [2 H* M9 t9 F. }) q
  241.       else
    . Q& y+ z; Z: E. p  {/ u
  242.       {  }, C2 ]5 B0 r( u( S
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # L/ _) v" j* t& U
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 e( P4 r$ J1 _) d* i# F! B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' u; E8 D- r3 f+ d. r/ }
  246.       }  ]( a1 F) V9 ?$ V2 ?6 W& J- ~
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # p3 L& ^( V; q& ^# O  J. N
  248.       sprintf(filename,"(%s)",file->file);& J7 {% H% D7 {) J# |( W! B) U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & c% i# A5 o- O9 L' j+ B
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 w6 }7 E& d8 i5 {
  251.     }
    # U' q6 W1 f, m4 L. H% K0 s$ c
  252.     dwCurrFile++;
    6 T4 U! V' Z; b3 O
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! b$ a$ D( y% V2 I2 e3 [
  254.     {
    1 p3 l) O1 K; D: _  u
  255.       bSilentStep=FALSE;8 ]2 D  x& @- a  B5 t- v0 h
  256.       bCompressed=TRUE;
    9 c0 V4 G5 H0 {0 W" Q* A
  257.       strExtLocal.Empty();
      u. H1 _* R; d1 E' o# K6 X+ P
  258.       strFullName=(*i).second;% `4 ]# b, I" r  Y* y! h$ F3 u3 q
  259.       dwProgramState=AP_CONNECT;1 V& y! X1 k2 x' o1 r
  260.       return TRUE;7 U- w9 A2 X/ S% s
  261.     }
    # S! l  B4 k* p( H* M& f& U* j$ D
  262.     if(!bRestartUpdater)
    ) ?8 Q. c: o0 k) a8 R
  263.     {0 A( n! N1 S1 E5 f  s0 T, a
  264.       int iCurrSize,iFileSize;/ a3 F' o* t/ e3 D  l8 }
  265.       iCurrSize=0;
    , Q1 C, N/ f4 X+ U0 z- A. d
  266.       iFileSize=UpdateList2.size();
    ' \' x) a7 c" p. F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    * V# @, m! n* r5 T5 L( B
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * E' \% E8 n9 d- j3 M3 N4 J
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");7 R9 l6 z# I0 ]% o7 g
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 Y3 e" x5 P7 d# I
  271.       Fclearf(".\\update.dat");
    ' t3 n9 c* f% g1 z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ j' Z1 q  ]% q' I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    9 M7 H. [: s4 G# i# s
  274.       {- M" f, T& u% O& ]
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ v7 ?  H; o0 Y; w
  276.         {: j% }9 N# {  {& E! w
  277.           file=(*p).second;6 h4 m- }( w$ ~$ W' w& T
  278.           sprintf(filename,"(%s)",file->file);/ o" V9 p0 s+ p: R1 W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ z% G- D" ^$ e
  280.           iCurrSize++;
    - ?" c) c! J' R- B: T/ a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 Z1 z7 H+ o3 Z6 f
  282.         }1 k# }. A1 f4 L  O  C
  283.       }; B# Z4 t$ J% o& Z
  284.       unlink(".\\update.txt");
    ! {) |  y- i8 J( @' l, B
  285.       unlink(".\\update.tmp");) ]/ Q  B: L$ ]1 x6 F) t/ _& G" d7 M
  286.       Fclearf(".\\checkversion.dat");, j/ Z" r" v4 q6 V9 J- w2 H
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);, C- L9 b0 H6 C0 f& @% m
  288.       if(UpdateLocal.size()), _( c" H4 g8 m& J; P# w4 z
  289.       {% c6 R# W' f) Z8 N( M- p- l/ d
  290.         UpdateLocal.clear();$ X! z+ m* |6 g4 [9 |
  291.       }! D9 R9 m3 n. K; T& E
  292.       if(UpdateFile3.size())
    9 H; i" \! F- d$ W0 e; V9 a
  293.       {  a5 S: K8 I0 c& ]/ U& a, H
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 `$ x( W& d; J  H% `
  295.         {1 d! @8 B& v) R/ h" z" G
  296.           file=(*p).second;) W% u- Q, C2 J( y
  297.           free(file);
    ' W7 d( }7 d  A( `6 W% R
  298.         }
    # `* U3 Z: I' t: r$ k/ P
  299.         UpdateFile3.clear();
    $ |* }1 v! A% J. r' y& T
  300.         UpdateList3.clear();  o- X+ o! t. h$ ^/ s$ i
  301.       }
    5 J7 o. x* _' n* u; ^" |
  302.       if(UpdateFile2.size())( F+ v" a1 L9 {+ x+ O! t# |
  303.       {
    : w6 O5 _9 `) J" m$ r# j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ |" ?7 J0 e' o" H1 B
  305.         {9 H+ \9 Q5 v# G  P3 s
  306.           file=(*p).second;2 E9 j- U5 m1 |( A8 v/ U8 u* i
  307.           free(file);
    : a. M) D- r$ ?# H* x, {. g
  308.         }
    ( M, s9 M' k4 F" i
  309.         UpdateFile2.clear();
    % }6 e1 F$ F9 U$ f/ H0 l& ]& j
  310.         UpdateList2.clear();  X4 F2 M% J4 a# X, w
  311.       }+ Y+ `5 j) W+ R
  312.       if(UpdateFile1.size()). T! d' M1 V4 L( x( y- _9 A9 U
  313.       {- }# c8 G' \0 d# I: V: q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - ^/ |$ j2 {: X# o$ V
  315.         {9 D2 }! G0 ~( [  }9 o* p
  316.           file=(*p).second;
    3 I+ R, Q, ~: H! k; U- q- J
  317.           free(file);
    ; N  V- r, y$ C6 o' W7 ?
  318.         }* J* G8 C* p7 H5 y+ v
  319.         UpdateFile1.clear();) C" n5 \/ z, g$ r% Q7 `
  320.         UpdateList1.clear();5 C  O* ]) t, G9 O+ d/ ^" v
  321.       }
    6 F. J% a- B1 I- N/ G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ B2 P4 T1 I$ b
  323.     }
    " o8 j5 \1 w8 O0 k' V+ H4 O
  324.   }
      O  [( y  M: M+ T( \$ I! ~8 `
  325.   return FALSE;
    & t4 `/ t1 `% P, k  G
  326. }
    " h  b( M: P! y1 S8 F0 H* O

  327. ! ?# j5 k- ]2 u  \% ~
  328. void CRevAppApp::ClearAll(void)
    : o# h1 S1 q: m7 E3 s6 ~
  329. {+ N3 v' p" q, B7 o5 \* g  a
  330.   LPUPDATEFILE file;
    8 ?$ X% W# r2 c# W9 m
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + w0 S# u0 f$ a! S& [& Y9 g
  332. 6 Z9 o) I' s9 g
  333.   if(UpdateLocal.size())
      L1 n2 O( r$ |3 T" a4 m
  334.   {( `/ W0 ]* G+ v' G( n& n
  335.     UpdateLocal.clear();
    . w) d, o; ^6 Z& d2 }+ {- U
  336.   }
    * }3 d: l( w# [% [1 Q
  337.   if(UpdateFile3.size())
    " D/ P0 }! q7 J
  338.   {
    , Q: Y3 K4 F! _; m) a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- V8 i# F; O) I# u6 O
  340.     {- [, {, w, a" o. w$ Z- r
  341.       file=(*p).second;
    ; h7 K9 v: p/ i, g0 ^
  342.       free(file);
    1 b* W& H6 j9 S6 u0 @% w
  343.     }3 Z% d# V: V! L& T
  344.     UpdateFile3.clear();7 K/ A. x2 @" e  ~2 D" H
  345.     UpdateList3.clear();6 Z6 r# M- r4 l
  346.   }
    : L7 d7 B( r& o& @3 ^* e% h
  347.   if(UpdateFile2.size()). q& n( ]8 {% ]
  348.   {
    3 F# F5 \) u' w0 P1 ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), p! R/ X. S  f+ i6 F7 G+ K9 U
  350.     {* K0 @9 V1 t  B3 s  C: Q
  351.       file=(*p).second;
    6 o& k" C( m; Y8 f/ K
  352.       free(file);
    8 ?- U& g; H- _6 L% M
  353.     }# u8 T% N: E* ]0 i, C
  354.     UpdateFile2.clear();
    & _1 B' w6 K# j9 [7 F: R! k* P, \
  355.     UpdateList2.clear();+ B( l# z$ e. ]+ [
  356.   }5 a  `# r$ _; T/ @* k4 f, u
  357.   if(UpdateFile1.size())5 w$ m( ?2 g& A( q1 Z( c
  358.   {3 b: s; U( u7 ^% D/ r! J3 m7 i2 k3 s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 `! B& u) ?! g* Q. C8 s$ l& t
  360.     {
      O2 h' I, ]0 [( C! _
  361.       file=(*p).second;% \8 E# q, s/ A
  362.       free(file);
    . R5 ?+ p0 ~& }3 B+ P- V7 v. E1 \: x
  363.     }+ Q( \6 ?) u8 X( P" J0 j7 }( h
  364.     UpdateFile1.clear();
    * c9 P* T' j5 o6 G' l
  365.     UpdateList1.clear();
    + X: ^* ]) W& A2 S# y* c: ]' O4 z
  366.   }. v; M0 \6 Z. g2 L" m! c/ O" X& h
  367. }  
    % M  ?! s) j$ |- U% }
  368.   # t3 z5 F2 n- K2 w& \8 A" {
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * @* w4 q; Q1 @+ F- Q, W
  370. {
    . O: Q) n" B* _9 @+ I$ E
  371.   int c;( O( i* c/ S7 K) f
  372.   LPUPDATEFILE file1,file2;( Y/ |% V2 X+ O' i* R  V
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 I- w. v" u  [- [: \% o1 k
  374.   std::list<CString>::iterator l;1 j+ O$ X( F, j0 A9 T6 Z

  375.   s$ I. J+ Y. _# ]+ @" G
  376.   UpdateLocal.clear();8 l; @) C! E9 J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ C" n7 g% N. Y4 j( [
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ; l* m9 b: d  I9 a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    2 \; B! ]4 c5 `/ d" D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# Z+ e# `* R1 a: C; B
  381.   if(UpdateFile3.size())
    7 U1 u, s  [: o
  382.   {
    ' A# K" F; I* |; B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# Q2 w8 I' y& a: _5 M5 u# }; r( ~
  384.     {. ?# ?( p8 _* v* f$ f( U
  385.       file2=(LPUPDATEFILE)(*i).second;
    * `  I1 D! M( V$ ^- }0 @* j- E
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& i, m& Y, z5 X- f" N
  387.       {9 o) y3 c! {$ W* S. j! n
  388.         file1=(LPUPDATEFILE)(*p).second;% h/ B  {; i( T& P$ e
  389.         file1->vers=file2->vers;
    : N5 B3 t0 o, W( q8 y( P. u
  390.       }
    7 @; I( |+ M: M, R8 u% s1 T5 X- t
  391.       else
    0 y. ^3 W& _, H7 B
  392.       {) ^4 |% a1 v% @! L' T1 @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , n4 m: u; K6 R
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 Q+ g' ?9 O# g, B: k
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 r+ g8 v' R0 x- C  ]
  396.       }& X! ]1 z! d' S0 {
  397.     }& U+ Z, s! {5 {* Y( ^/ r; Y/ A" _
  398.   }$ g( ]2 o# N/ D$ z0 {3 w# y" k
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)/ [) Z" S7 j& Q" E& P! B
  400.   {
    + ]* o+ s! Z& p& r) p4 K/ G3 G- t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    - T) t  l  v  ]
  402.     {/ D) Y4 \  r: H. F
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ u) |6 r. }  z* Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( R6 {! j" M) [6 k/ M* W! f9 S
  405.       {
    , i* T7 Z. t; m$ q& @" R4 w0 [
  406.         file1=(LPUPDATEFILE)(*p).second;) I  v$ d2 ^0 d! d8 E
  407.         if(file1->vers!=file2->vers)( m* D( S0 k0 l$ B/ n. \
  408.         {
    1 ^3 [. U2 B5 q. v7 J$ p8 r- n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' |3 G( Q& v; j: P5 Q) B
  410.           c++;
    8 O# `. x1 ]$ W. y) A" u% ?1 j3 [
  411.         }/ z4 c. M4 I! T) @, l8 ?; N
  412.       }; q. u3 I# y8 M6 X- K+ o9 Y( g
  413.       else( p; k- |4 W- |) j
  414.       {: A. f( `0 c! I; ~- E' N1 j
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " M$ `! ^  l1 q& K2 B, z; c
  416.         c++;" p8 K$ Y& Y; F; h/ H3 I# p( N
  417.       }
    * L# h4 a' x0 \; B6 A) j4 \
  418.     }
    2 \) C* ?% I- H" }  e9 q
  419.   }
    # p& G* q  u7 b3 E
  420.   unlink(".\\DownLoad\\update.txt");
    % [6 @( J! \& N
  421.   if(UpdateLocal.size()) return TRUE;6 v( g6 o1 b0 y1 _9 I
  422.   else                   return FALSE;( y7 l: b" v0 [3 n( v, a
  423. }
    6 t1 R9 M, v6 b( p6 i& h8 w

  424. 7 c% e+ S$ s" p) t8 Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") l8 n( T2 s8 a
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ {: W$ e3 T) t/ R  l) p9 `# j

  427. 7 }7 d) [& D  L: \- M

  428. " y$ {! G/ a! @6 H. \, C, b) V, ]

  429. % N" g* L: b: d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 _/ y% ]& p) W
  431. {
    3 e. l1 [' \3 [% W  Y3 q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    + c+ b& U) v/ O: M- V
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% w" Y2 J( a2 O
  434.   {
    , J- K6 w$ f8 {# _$ L% ~9 ~
  435.     char szLanguage[50];
    - R: |5 Z% i% D- {7 ~, o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");$ m( Q: ^( U+ F; c
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;& d3 h5 r# q8 T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  z1 d9 g  M: N$ h9 z
  439.     else                                   m_iLanguage=ENGLISH;
    6 a2 H1 P0 j* ]
  440.     char szRegister[100];0 m5 [; N! {; {" ]% U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * z/ P$ a1 `2 H) \
  442.     strRegsName=szRegister;
    3 _) N4 T8 J' Q1 p) i, q' E
  443.     char szPatchURL[100];! D* V& S4 H, K) u" ^' e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . y5 w" L9 t; S2 |3 k  s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . k; o7 B' Y* J: f; `% h, e, ?
  446.   }' w4 v  v5 H9 L$ ~! a# V& t: t5 s
  447.   else
    9 S7 {7 h4 c' e7 f$ n
  448.   {8 O) z5 F: b7 @8 u  t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 B* M9 b+ s- d9 q7 |
  450.     strRegsName=DEFAULT_REG_URL;
    . K$ @0 T' S2 v: V6 z2 ^
  451.   }8 i! ^6 v" W2 C6 J- J
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 y+ C  w$ ^$ o. ~) P7 l1 B2 u
  453.   {) M& L2 @$ [& T4 C  U
  454.     char szIP[50];" U0 y- i8 r/ ]' f
  455.     char szDIR[300];) n" a5 \2 @9 O4 Y0 _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ' b% I) p. F! h
  457.     {- U- Q: j* p, a- y1 \
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");  K2 _1 F9 X! Y( k# \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 v5 j3 g1 O+ u( J/ @
  460.       strHostName=szIP;# z# @5 H2 i. c) X
  461.       strHostPath.Format("/%s",szDIR);/ D) C1 R1 C! k2 @/ n: `8 ^
  462.     }. ~! }3 W3 d9 o: {2 Y
  463.     else
    + t4 K1 y) I# q7 X5 u
  464.     {, B" y6 U# w; W4 q2 M2 J' j- I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # J: {  Q( O2 v) ^+ O6 i7 s
  466.       {" A- n( d' \* q0 S
  467.         char szLanguage[50];- J) }/ a# J. ]- A4 |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 @+ d6 |. u8 c, w- ]; `( h' B, B
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , ]5 {9 D. r1 i' B  V" ~# f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 F% |* o: o9 v: h% ^% `: l4 S
  471.         else                                   m_iLanguage=ENGLISH;
    + Q# a& L" x4 K1 I
  472.         char szRegister[100];' A# t7 t( k: ]* m& a. v" ~; n
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 C5 s6 h" @2 H0 Q7 ~" a& U* M
  474.         strRegsName=szRegister;
    / D& P: D; D, X, [, J
  475.         char szPatchURL[100];. Z) \3 @; t% Z7 U) ?  w; Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      o6 J0 [8 P* |# E
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ Q: J2 O( W) E. [! ^" I# c
  478.       }
    9 `, a- g. h& k2 ~1 j, Z6 U& j% R
  479.       else
    ; G* j5 u& i3 t, ~' B7 N5 Y+ _8 o9 b
  480.       {# \/ v  p& n. q8 ^) @# `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; V0 S& s& K  o0 J" q
  482.         strRegsName=DEFAULT_REG_URL;
    3 v- M8 p3 z: b; I% Q
  483.       }
    : ?0 l6 B/ L, ~7 G; i
  484.     }
    ' O" H, Z" I5 }
  485.   }
    % d# \4 I* l, f# i
  486.   return true;5 y2 `$ P1 b2 F$ w! x7 V+ g
  487. }
    ) Z8 T* v/ c" N/ [; k8 C

  488. 6 W" _& X' S' z0 z, p
  489. #include ".\ZLib\unzip.h"
    + C/ _6 o) u3 [# c, ^: U
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ a- e  U! _$ v8 V
  491. /////////////////////////////////////////////////////////////////////////////+ U7 v* V# R1 |; X5 @: r& b4 a
  492. // CRevAppApp initialization
    " x, {2 F0 {: ]1 c. @
  493. + h: H) r( x8 C) b) [* p  `1 a( m
  494. BOOL CRevAppApp::InitInstance()
    : y& r. s# s5 \! q$ s8 L
  495. {
    3 M; x2 s0 S4 R/ X, U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( e% T* T6 Q* S5 }

  497. 6 u# N7 c8 e$ b4 w2 Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 T! V( s8 c* }3 h" `" y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); ~. @' T% A, ~
  500.   {5 F- Y$ I* I. Y- s9 O& @4 Z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  X: S) |  Q& I; ]4 S% u0 \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);, D& j/ o- t# l5 X
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 q7 A% Y2 e# s
  504.     {
    5 N! o4 X& g% j) N
  505.       strcpy(szPath,szPathTarget);
    $ S/ S0 |7 o1 g- h( D7 k
  506.       SetCurrentDirectory(szPath);9 O8 P, Y' ?% I/ k% z
  507.     }$ ^- S* D: S, u6 g: j
  508.   }2 F" \' @  y3 h" q1 j  V" n5 X
  509. #ifdef _DEBUG* E* }8 U9 d: X* K0 \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 b5 T/ C% y/ ~7 ]6 w* i
  511. #else2 v; {3 _$ r( |7 U# ^3 Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * ~3 D' b$ b- F+ s! A8 g* e6 g) @) y- a
  513. #endif
    % d+ j' M; T! S7 ?2 N
  514.   {
    - V. x7 k4 V+ D9 u" X
  515.     char tempFileName[MAX_PATH];+ ?4 P4 {- b5 l6 G( s, M
  516.     strcpy(tempFileName,szPathSource);
    , U/ B+ L% h7 b5 z  C3 K& z
  517.     tempFileName[strlen(szPathSource)-12]=0;; x3 c1 t$ w2 }1 ]: W5 S- i
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; v; V: \7 L5 k, v* s4 K
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % x; d  r* {- V% _( y( h5 h6 S! h
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);/ C: ^# |$ P# @3 ^: C& J6 V/ m$ ?% m. s
  521.     return TRUE;  _+ j: \0 U1 e* ~- {- i3 [
  522.   }3 o% \+ s8 z" r9 q3 t) Q4 r
  523.   // Nuke 0118: Delete run.exe" k3 X# a  x$ S6 P4 g6 _  p
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );1 B2 A: t( [/ m! Y- G
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 |4 d' n2 r( k) u' J  K
  526.   if(!ReadCfgFile("Config.ini"))
    3 o* Z5 b* W3 x" B; e
  527.   {
    , F* Q& \! W9 Z" r" U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    7 _& S- a4 W! Q3 a6 a: S
  529.     return TRUE;
    " n5 R" T# a- j2 p" Z# S: n
  530.   }7 D; i: X! r$ C: a1 F
  531.   HANDLE mutex;
    % Y8 Q: n# f- p
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' r$ Z6 Y; K9 X# F' T% y1 E
  533.   {* A; ^) B# ?* W, ?" r" T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    6 w4 I6 n* @! t8 t; W* X. Z$ V
  535.     {. C. t' c8 I  w
  536.       CloseHandle(mutex);
    4 V1 \% F5 Q! o) j
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 [0 @; D0 d9 P+ g- X" N
  538.       return TRUE;) ^! ^/ x6 l5 z' f
  539.     }
    # E" d+ K; |3 u( R
  540.   }  ' ?. b, Q& b4 P& f
  541.   CloseHandle(mutex);
    5 s3 M* j3 p" o+ }, p

  542. ! J' M5 G& p& D; T6 h9 a4 p3 k6 P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    9 G  O% k* |3 \( v' K$ T! ~

  544. 4 f* j- {7 o% j% \& F
  545.         AfxEnableControlContainer();& q. F# g! F5 Q

  546. & `4 }0 \4 s" O0 f6 j
  547.   bCanUpdate=FALSE;6 D3 c: P0 F% v; Y! ~
  548.   dwStartUpSteps=1;9 e) M* ^$ g$ F$ `0 S- J) c. b5 U5 j
  549.   dwProgramState=AP_NOTHING;# q( b5 Z/ L, V# [
  550. 5 |4 m5 s: K( Q( h! \- L. l
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);' `0 {2 L7 B* P
  552. ; e0 q/ D) F  _: `
  553.         // Standard initialization
    ; |3 P+ N9 R- w- c6 p
  554.         // If you are not using these features and wish to reduce the size
    5 k! r7 V1 q4 P8 |
  555.         //  of your final executable, you should remove from the following
    ' |2 N2 N" Q8 J4 l
  556.         //  the specific initialization routines you do not need.' o; O5 w% p1 L* r* M0 [4 i; y# A

  557. ' N+ S0 H! h. r( ]5 @; x
  558. #ifdef _AFXDLL
    ! M+ G# w1 S6 T
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    % c1 ~8 F( H( Q
  560. #else: F% W! H+ m* Z, e$ c6 Z. i5 m4 K
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically) T) g+ e8 b1 W$ K! k/ ^8 ~
  562. #endif) y0 I- s  z' ]% X
  563. 5 v9 `7 s1 d" q' n5 n' N7 u
  564.   dlg=new CRevAppDlg;
    / e/ s1 k: T! o3 H0 K
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' S2 j( K. _: R5 r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; W$ K  y2 c% X- |9 V0 |0 n7 ?
  567.   m_pMainWnd=dlg;" ]* o9 Q# ^! F0 u9 m

  568. - a+ ]9 K3 e, s" v, {
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% X5 W1 O# j( M( J
  570. ) }) u7 B7 x5 U; B( O6 s7 `# A
  571. //  GdiplusStartupInput gdiplusStartupInput;. E6 V% [" L- N' u, y
  572. //  ULONG_PTR gdiplusToken;
    1 h4 F6 K& o5 t& B6 Z  x2 L
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);3 w6 H4 |4 B, U! N

  574. , w1 Y+ F3 q5 V7 v6 I% x: S
  575. //        CRevAppDlg dlg;+ G% q# S. E2 {5 }$ ?
  576. //        int nResponse = dlg.DoModal();
    + c2 K! x9 [5 m# U/ ?) |
  577. //        if (nResponse == IDOK)
      ]+ A* J2 \) B2 T& m- @
  578. //        {
    ' i6 Z- @3 w' ~/ p3 b
  579. //                // TODO: Place code here to handle when the dialog is
    5 x$ t1 o# T( r
  580. //                //  dismissed with OK: ~. ?6 m" d4 P3 n
  581. //        }
    ! M. `2 J7 L1 G3 g
  582. //        else if (nResponse == IDCANCEL)7 q+ W( u5 s& Q9 \3 p' a; E  i
  583. //        {
    9 W0 _" G& l& p& _9 s# _, O9 h
  584. //                // TODO: Place code here to handle when the dialog is
    8 x9 h/ {8 @& w# m+ F% k3 C
  585. //                //  dismissed with Cancel
    - ~& T& h' {5 v% b  Z" \% L
  586. //        }
    ' ^3 X% ?+ @+ N
  587. , }* J# e. j# T  G
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * _) [. X) E3 z* B' ^5 j1 O& x: `
  589.         //  application, rather than start the application's message pump.: h: P& B# k+ p: J  J2 N
  590.         return TRUE;
    9 b# }( U8 d- E! [: o% x
  591. }$ ^. R; }3 w8 D' g3 s
  592. 5 j% k4 _. _, y9 G1 ]
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) g& b* w. v$ g8 s. f% A
  594. {
    7 W( J$ n% ~& l2 m" x2 e: d
  595.   int i;4 t6 ^2 q; W$ W- X  N9 R- y# H
  596.   char *szRet;
    7 ~( `+ B0 c! w' ]$ t% i! N: B- a

  597. 8 o4 K9 k2 t8 C) G$ E
  598.   if(pSource) { itoken=0; sztoken=pSource; }) w# N0 T8 m# a* P, O
  599.   if(sztoken)
    - W; f4 J4 X6 d# `
  600.   {
    1 {/ y  i( _5 _8 V
  601.     szRet=&sztoken[itoken];- l3 p& G4 N- C1 G8 a) i
  602.     while(sztoken[itoken])
    - c% J+ d/ q8 K$ t8 x) @5 j4 |
  603.     {/ |& D& i  t/ [# q  f2 G  A
  604.       for(i=0;i<(int)strlen(token);i++)
    + t+ }% P$ K7 @  x3 d
  605.       {
    ! f; x4 _3 F- U; G# v, U) D
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 m" J" [3 x7 A  J, [
  607.         {
    1 T' p7 q* d; w: E
  608.           sztoken[itoken++]=0;# r  p4 {4 S( A. A, u/ s: P. [* f  P
  609.           sztoken[itoken++]=0;2 q4 f) p- p/ L8 u' `
  610.           return szRet;
    # T4 B2 a$ M4 R  p2 O
  611.         }2 S6 q9 f2 ?# d
  612.       }/ P" Q4 r' ]& @/ G
  613.       itoken++;
    6 A, i. y) J  ^& g. Y: ]
  614.     }. |) A4 O  h& N2 S( o2 y
  615.   }5 o; z/ p9 t6 F; N& ]/ i5 X# H
  616.   return NULL;
    . p7 i# M  w. h% y% H: T2 z
  617. }: R) I# F6 s: J, q& o
  618. 4 Y3 S+ H! _0 I2 F
  619. void ProcessProc(long Total,long Current)
      \( K5 a, P' a" P/ S6 S
  620. {
    0 u1 B' A3 t  V( x/ J" x: |
  621.         MSG msg;/ W4 F7 e$ Q6 O  c9 }6 O
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " J& V& E, p- f: ^8 W2 F
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  \0 G# B: C* q" e
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    6 _& L. s, g( {& H
  625.         {: O  n5 M6 c7 C  H2 ^
  626.                 if(!GetMessage(&msg,NULL,0,0))
      Q/ f7 e0 i) O3 o1 C% I
  627.                 {
    . b0 j( S3 S2 g" \8 \; N
  628.                         return;
    3 T! X6 w/ B% c: s$ P
  629.                 }7 A  |% }) c8 F, r4 O% n1 |: G
  630.                 TranslateMessage(&msg);" u5 m/ S+ D1 k; g
  631.                 DispatchMessage(&msg);+ k+ G+ w9 A+ x5 o" P! F0 f' Z
  632.         }       
    3 L- `0 }. l) l+ O2 P1 u; z
  633. }
    - ^. G/ U  ~/ W0 v  L2 [6 t2 n
  634. . [6 [) c3 n, t9 T1 }$ N
  635. BOOL bFirstChar=TRUE;8 ^: Y1 B. X  [; f) L

  636. " L: J4 x: Z2 Z( u4 ]2 r" T8 g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    1 {9 N- l7 K2 ~$ h8 z. @
  638. {( s$ E, y9 @* g1 Y
  639.         // TODO: Add your specialized code here and/or call the base class
    7 j! l% W2 p( D- L9 Y2 |! C
  640.   switch(dwProgramState)
    0 c. \' k1 d8 v3 |$ P4 ]9 p
  641.   {
    3 [- j( {$ ~7 n. }( s
  642.   case AP_NOTHING:) d; N' y% [. ?7 Z  M' w, H' J
  643.     switch(dwStartUpSteps)/ @6 X0 e7 y: a$ w- G3 H
  644.     {
    7 d( p. w! ^0 L" r, f, m% k+ S  k
  645.     case 1:2 t3 S& E5 s$ a1 G- S
  646.       {
    3 N& u# E. |' I
  647.         int i;
    9 r8 |1 o& P2 d2 {, I5 i
  648.         CDC *pCDC=dlg->GetDC();2 a, H2 A, q; n) d6 ^3 F; u
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' @, v' J' s& N- e8 b
  650. //        Graphics graphics(hdcwnd);$ c7 k- m+ u" x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");+ }% }; _9 X  U
  652. //        INT iWidth=bitmap.GetWidth();6 y& i: g8 Y$ h; q/ Y
  653. //        INT iHeight=bitmap.GetHeight();
    ; Z% D& G; @# M4 {0 x
  654. //        Color color,colorTemp;3 C7 [; t8 `0 @8 O
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ {% W; q1 t, O
  656. //        {& ~. l7 B$ ]/ V
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    2 F9 }# y; i4 l1 U& d4 _
  658. //          {
    + U" E, S; ^1 F% O8 ?# V6 B7 f" D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. _  A/ j; P, A2 ~
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) p( }5 w( L& _. }0 X
  661. //              (BYTE)(255*iColumn/iWidth),% U6 D4 D9 K1 P6 [: k& c
  662. //              color.GetRed(),$ E: b0 I8 q  Q
  663. //              color.GetGreen(),7 s5 x( t) [* f; p- x6 V5 T
  664. //              color.GetBlue()));
    7 G, B. T4 ?3 I. q8 B+ o
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" E$ B0 y% S  W4 t' A0 U
  666. //          }% O, b2 n: q- }) I0 C. p
  667. //        }( R% o0 k6 K) N  E- G$ s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    8 x! Z: u; s# p# z( o3 }
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% |" P3 i3 m6 Q& S
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / `4 s+ P5 H% c# H( w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& d3 ?1 E! t$ W, h  o2 q/ h
  672.         for(i=0;i<240;i+=8)
    7 q2 q, l8 V; ~& J4 z
  673.         {
    $ p$ s2 C, j1 k0 Z8 F) M1 w0 H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! [$ i+ w: U& d$ r! I* h5 w/ S
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . L1 n+ _+ I# p, [3 R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ g! O2 }+ P2 g3 ^2 |- A0 {
  677.           Sleep(33);# k* Y" y  I$ Y
  678.         }6 w% p/ p- E5 T: d$ ?  j+ U$ m% }
  679.         Sleep(1000);
    0 n0 q6 G( p4 s- I, C- b" ?3 W5 C
  680.         for(i=240;i>0;i-=8)
    - @* P* S4 z. s& m3 R/ Y; s
  681.         {8 }" \0 v8 i8 {% w
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) R7 `2 G/ J: Q1 a4 Z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; s- Y* X- I0 s; |, F+ B% ~: Z: Z' A* _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( h- a) I) R" W% j5 Z) |+ i3 U  k# T9 O. P
  685.           Sleep(33);# j8 `( V$ z( \, z: F
  686.         }
    ! m! [. S& v) N3 \8 {; l6 ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    # O  E3 T% J2 R6 k" T8 X( E: @# G
  688.         dlg->ReleaseDC(pCDC);# y6 C1 u" ^) t' o
  689.         DeleteDC(hdctar);+ }9 Y6 f/ @! P) N/ D
  690.         DeleteDC(hdcsrc);3 u2 o$ ]$ Y7 y" [
  691.         DeleteDC(hdcorg);
    . a6 e* {# O. c5 m
  692.       }+ p+ B+ H4 k5 J) L  f5 ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : Q; S) W6 @0 U3 n. P; k
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    & g6 s" T% E7 i% ~% j
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, \% s. X$ S8 c0 G  {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ Y' S$ l. a5 ]- A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! C# f0 @9 i- }  Y' S
  698.       if(!Dn.Connected())
    % l" {9 m6 l4 h1 ]/ P
  699.       {* f2 F) P8 Q' z( m# j* s
  700.         dwTotalFiles=1;
    ; l- _  e, _$ E" d2 {
  701.         dwDownLoaded=0;
    1 B( E) z3 ~& o- Y: h+ D
  702.         bSilentStep=TRUE;
    / W, d8 M3 B3 u4 O6 Q/ z( }
  703.         bCompressed=FALSE;/ `3 [0 s' Z, E  N; q9 o( ~8 O
  704.         strExtLocal.Empty();
    ' \9 g( D, G: j
  705.         strFullName="readme.txt";
    - N  Q" u) O- u) r6 O
  706.         dwProgramState=AP_CONNECT;
    & j6 O6 I; O( c$ J
  707.       }
    2 }8 j7 D' P& p9 F
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( f9 g6 |- J& c
  709.       dwStartUpSteps=2;
    . t7 O  c# ^- G; N
  710.       break;
    9 q2 [; X$ @% u
  711.     case 2:
    ( q& O, B' u  x1 y/ |9 t
  712.       {( a0 A, g1 `. E& o9 h7 P
  713.         int iEOF;
    1 {8 M! j5 f9 _, {
  714.         FILE *fp;
    * w8 H6 d, S) a) O9 W" I, e2 z
  715.         char szString[512];
    0 [  A. Q# N& ~  w( j
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 A- ]1 n% H( J; c+ _% ^* B; W; F
  717.         if(fp)
    ' A. q. u5 N6 M, H( T* T$ K$ b! p: G+ R
  718.         {
    ' \$ }* n  X; z% Z6 |6 q* ^" u( W
  719.           do
    + a5 H' E+ R' P2 m" `6 m/ d; ^
  720.           {; _& @* X( S6 ]0 S
  721.             iEOF=fscanf(fp,"%s",szString);  L2 c8 u- n/ f1 S# C
  722.             if(strlen(szString))
    2 K/ E& g" a( Z6 R# @6 f
  723.             {) ^9 [$ _$ q0 ~; Z5 ?! u
  724.               if(bFirstChar)( _2 T. P# |( N! x
  725.               {' W  h, X1 A- G& i3 b% A# C8 g
  726.                 bFirstChar=FALSE;7 Y& k4 Z/ J  K
  727.                 bConnectIsBig5=FALSE;* c" P% I3 ^3 I6 h/ ]/ D2 ^1 A
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; v" y. q2 @/ M0 C7 M/ I% l
  729.               }+ M+ Z3 s# Y/ v$ F6 ]: h4 R, {# P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' m! P) D2 O" O* ]1 i  n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    1 ^  K. J" i  E$ w* x+ ^5 v
  732.               dlg->m_ListText.AddString(szString);
    & P( R! v! R' g! x1 _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% y9 a8 D6 a0 k$ o% N6 K( L
  734.               *szString=0;
    4 ^+ W# O4 u+ t$ D% s% r+ K
  735.             }: q& }( p) X4 I
  736.           } while(iEOF!=EOF);' a( ^! Q+ i7 n* {6 w. `# z9 J
  737.           fclose(fp);  V, B" }- b, u6 r3 s
  738.           unlink(".\\DownLoad\\readme.txt");
    4 X3 a/ T# t1 j  K
  739.           dwStartUpSteps=3;
    & ~9 x7 W) C- c- K8 _+ p5 w& B6 N
  740.         }
    ( o" J9 O+ k# d% f1 W# @( M
  741.       }
    " E6 l; ]# C5 Q1 F
  742.       break;
    ( X% [- y- N! v
  743.     case 3:
    # C/ I$ p4 e! s1 o* P- l7 j
  744.       if(!Dn.Connected())( [# Q2 x- t/ ~$ X6 p! I4 W
  745.       {
    8 S9 H; f. L$ W3 O3 Z$ l
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 x: {  ^5 v0 [- ?. Y  J
  747.         dwTotalFiles=1;( H! L2 x0 r- g1 O
  748.         dwDownLoaded=0;
    2 H1 l1 w4 x3 {6 y
  749.         bSilentStep=TRUE;
    * Q- J2 _7 E3 v+ ]
  750.         bCompressed=FALSE;8 Y! a' e* _! K. g
  751.         strExtLocal.Empty();8 x& U7 ^- W5 g9 v0 s
  752.         strFullName="checkversion.txt";
    0 \% j; r% g6 x* F: @
  753.         dwProgramState=AP_CONNECT;
    + H5 a  A0 i- m& V2 Y2 r
  754.       }7 N# G) a8 S9 M# K2 f
  755.       dwStartUpSteps=4;
    ! q' Y+ t6 E. t8 A2 ^0 {
  756.       break;; c9 H6 j" G1 X1 \
  757.     case 4:: d! }* m* J6 F& n+ s
  758.       {
    7 ^3 L9 |1 z7 E8 U5 v
  759.         FILE *fp;
    6 o# t, s4 F5 ]( s+ f& c
  760.         char szString1[128];
    ; f1 ~$ J: C) ?) R5 ]3 D
  761.         char szString2[128];- c7 a1 [4 n4 k: o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 w1 v; i# I, d8 p  Z4 W# E1 A: R/ W* g
  763.         if(fp)4 C5 g' r4 ~# o( \3 n
  764.         {0 Q0 e6 c, \0 _& G) D
  765.           fscanf(fp,"%s",szString1);
    % G! y4 Y3 m, @) @2 w0 D" a
  766.           fclose(fp);
    * ~6 P3 e% S1 f) g% D3 ]! V3 A
  767.           fCheckVersion=atof(szString1);) H1 b6 n( b/ Q- b0 n: T7 [5 `  b
  768.           fp=fopen(".\\checkversion.dat","r");: Z/ j3 n/ Q/ b* U+ A( t
  769.           if(fp)8 Z6 {- X: o: E8 L  F. c
  770.           {
      I. A4 N3 h. u# R) N; t# i/ ^
  771.             fscanf(fp,"%s",szString2);
    / F/ c) R: g+ Y6 U1 ]
  772.             fclose(fp);
    4 ?5 Q4 S  p8 \7 i. A9 E
  773.             if(atof(szString1)!=atof(szString2))) W9 S6 C; ^7 C" v* q
  774.             {
      O1 R. [( ^4 Q5 J
  775.               if(!Dn.Connected())
    & N5 ?+ a( ?1 ?1 `
  776.               {& s& c( h9 I3 [/ A! [) }/ o
  777.                 bFirstUpdate=TRUE;, K2 J+ o- Q2 X
  778.                 dwTotalFiles=1;
    . d; V0 X8 s8 m7 f" \! y
  779.                 dwDownLoaded=0;
    ! x3 {0 k2 Y4 j1 ]# ^' a3 o0 v
  780.                 bSilentStep=FALSE;; |+ I+ m3 F4 t
  781.                 bCompressed=TRUE;
    8 U' l5 D& Q; O0 S' ]( ~" r4 L
  782.                 strExtLocal=".\\DownLoad\";9 d9 Q7 p$ z7 P7 O( T. A
  783.                 strFullName="update.txt";
    . E$ `- {* T8 q4 ]' y" v
  784.                 dwProgramState=AP_CONNECT;
    , y3 K5 e- f" }, q! ^6 W! K: M! U8 S/ ]
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; C6 T/ k3 V$ f) n7 B% Y; ^5 u" [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + b6 ^' t* |  W5 I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 R0 f7 u! S7 b
  788. : t  L; s# E8 ]; g  m4 p  d* A1 s; Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - I6 E. G' S9 Z: }
  790.                 unlink(".\\DownLoad\\checkversion.txt");. a! _/ Q9 a; k
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! ^7 H# k) _( u3 S" I3 L( T
  792.                 {7 b) n8 i( M) t: S$ S& X3 p9 T
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 h2 J* H8 v9 o# |+ h+ R5 ]. }
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");( f' _; i7 @; I- l6 X5 Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");; p! P* ]/ d5 \- m
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . P6 o: {6 N3 i* r

  797. : Q$ F' U7 r0 E! C6 v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  j$ ^2 `' s$ ?3 C. n0 h& {* k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) V7 O' `8 \: ^5 X& _9 \- u
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");, u+ r" V, f: S  a* S& N
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 J/ n+ P8 m7 }
  802.                 }
    0 K5 ^' a$ T8 d" u& _: h
  803.                 dwStartUpSteps=5;& B9 h' t! D# n3 B, S! \
  804.               }
    + i0 w: @3 `3 O8 S+ G' m
  805.             }3 C% k; B% Q) p5 ~! x
  806.             else
    : y1 q- z$ Y2 _( k
  807.             {
    : ~- a# w) r1 c8 x- w
  808.               unlink(".\\DownLoad\\checkversion.txt");9 i! n" s/ ~- l' e, Q+ f
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- q( T5 f8 H8 N/ V0 Z, ~  X/ S, X
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : b& B4 y+ P* b, I4 U1 t  \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 c4 V% L9 s! ]' w. C: p

  812. , }* K" q) j; c) U! r
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 a  [: l% Q, q6 B
  814.               dwStartUpSteps=99;1 u* O3 B% L' @7 V; z1 {
  815.               bFinishUpdated=TRUE;" ?1 S; i4 H$ p5 r% l6 n
  816.               bCanUpdate=TRUE;
    ) w1 t: b0 W& j+ p$ @2 B
  817.             }
    * s* Z6 \  d- a" `
  818.           }
    6 G, Q5 Z7 y3 C$ W5 b' A2 b4 L9 C, a- p
  819.           else
    # G3 C* h, H2 r  a
  820.           {
    ! x! `. {* @. E# j; h
  821.             if(!Dn.Connected())
    5 \, Z. I( r8 p! `9 n& L
  822.             {
    4 y( W7 r, |& }) m7 [3 V8 y
  823.               bFirstUpdate=TRUE;  [; K  K5 a" p
  824.               dwTotalFiles=1;# x, V/ G+ X. f, H' Q0 D
  825.               dwDownLoaded=0;5 v3 U7 W9 _# y  z0 g4 l# d
  826.               bSilentStep=FALSE;
    6 f& I, m; q/ [$ E! g) m) S
  827.               bCompressed=TRUE;+ z! r# ~2 n; `7 t# {/ |" W" r
  828.               strExtLocal=".\\DownLoad\";
    # v/ M8 W2 `- N
  829.               strFullName="update.txt";
    ' E+ K+ g* z; U) [5 s  C9 P( h
  830.               dwProgramState=AP_CONNECT;; v9 R0 p$ G, w! E  p$ v' |) U
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ C+ m, I: i8 `4 ~$ g& e" {/ F
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 H4 }- g3 R% I/ w2 x4 Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");4 F& M) y9 B/ k; ^& H) T
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( L2 q, l: i6 Y1 O
  835.               unlink(".\\DownLoad\\checkversion.txt");6 q6 Q& c: z( W. @! g! q9 A( L
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)9 y' B' B/ `1 L) o
  837.               {
    ) H) \3 Y0 d, k. m. s9 `0 k. H
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + V1 ~7 w3 N* h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    # S  c8 ~( ^! l( @- r4 ?* I6 u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  q/ {) ?, {- t" F4 A
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : c0 T6 H: W# \3 Y* D
  842.                
    ) M9 M" B$ V1 L* ]. E" @* m/ @" B0 d
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' p+ |6 x  q" F) h7 L( M* e. L) g
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / C/ C; F' e+ C4 X" h' v
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");9 h2 E; R) f: y9 L, p3 j) J2 l
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! V( O: t! o: M" z$ g* X9 S1 C
  847.               }7 l/ a# J( d% ]: X" _  P5 ]  {8 {
  848.               dwStartUpSteps=5;+ q  N; c0 O  G  f
  849.             }2 S; ^: o" Z& R8 z; H1 @$ `" y! A
  850.           }
    . Y- p8 b3 ~/ F# G" V9 _1 t/ _
  851.         }, x% g* t1 `6 I. I
  852.         else
    ! j; h: _- ]% X5 Q  L+ m/ v3 P
  853.         {
    " a& I) D- T  @1 }- F9 `- u
  854.           dwStartUpSteps=3;5 p, q8 C' [9 s
  855.         }
    ' w; |4 v- n" D1 |
  856.       }
    2 r9 j4 D8 k$ S% R- z6 |; U7 E
  857.       break;0 a# m. w0 i4 I
  858.     case 5:" n6 k$ @+ q& Y
  859.       {
    ) m% e" C0 h# C7 B8 u& e& u
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & K9 P2 N" a7 x$ o/ G2 s1 l2 G
  861.         {
    / T0 c" ~4 n& H* H9 B; k. U( a
  862.           int opt_overwrite=1;& O% F* P6 d5 \) u. J1 l
  863.           int opt_do_extract_withoutpath=0;
    ( S+ r; f5 U* g( w. M0 [: H
  864.           unzFile uf=NULL;/ r, c+ y7 M1 t6 Q

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

+ n1 |: d& r" t% y
* Y* s2 q& [! \

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-24 00:29

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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