CSUpdate.exe源代码

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

1 P/ ], r7 E. T) w& u
  1. / RevApp.cpp : Defines the class behaviors for the application.) h5 b' G1 z/ g, G9 b$ L1 a
  2. //8 b6 ?! `: ~5 Z: Y8 U7 e5 Z" Y9 ]2 }
  3. " X5 l+ w  W( K/ o. w: O' h: K% s5 g
  4. #include "stdafx.h"% ]$ U$ S/ L7 J7 l" w

  5. 7 n5 q7 J' Q/ c# @: w
  6. //#define UNICODE
    ( i5 s0 X+ c: C) F8 s1 i6 k) a& N
  7. //#include <gdiplus.h>- q' t, G6 v4 v5 w
  8. //using namespace Gdiplus;" X: z6 J7 H8 q( Y

  9. * v* j' g7 T( P; U4 c4 ~# M. B+ ?! l
  10. #include "RevApp.h"
    ; z/ S" s* e* L- l1 V8 S2 n. }/ o
  11. #include "RevAppDlg.h"# \5 |) X# {2 n# ^, X
  12. - I, U8 c) S  Z! i# l
  13. #pragma warning(disable:4786)8 Y" n& u9 p+ v8 O5 f/ Y$ _( T, X
  14. #include <map>
    3 ^' f( b; j& P5 W
  15. #include <list>: h$ N6 u6 D. x/ @& p
  16. #include <direct.h>
    7 H6 H4 |; ?8 W$ x2 v" v* S
  17. + f* y1 J* E- E3 ~: j- o$ y# s
  18. #ifdef _DEBUG
    8 D. s5 N. @) r1 G: _! s
  19. #define new DEBUG_NEW1 R, }: A! |) u- u3 c& K
  20. #undef THIS_FILE
    : Q' s- B, E# T  T$ H1 I
  21. static char THIS_FILE[] = __FILE__;
    , s0 b# v& m- k2 t  c
  22. #endif2 m( }7 x, _5 Z5 w& r5 H0 }
  23. #include "SkinResDef.h"
    4 p( s" G8 |1 O3 w* V& e7 e
  24. #include "ChangeBG.h"2 e  v5 L1 w+ B; ?( M1 c
  25. #include "AFXINET.H"" W# r1 p5 k+ X

  26. 6 d) {. I0 J2 o. b2 Y0 o0 j; ~; E
  27. #define TRADITIONAL_CHINESE 0; W/ M5 O- H8 d* ^$ w; l# l
  28. #define SIMPLIFY_CHINESE 1
    9 c$ q3 _; F9 g! W
  29. #define ENGLISH 2
    - N) ?' C1 ^* O3 w8 o
  30. int m_iLanguage = ENGLISH;- T7 {* D' r% x
  31. /////////////////////////////////////////////////////////////////////////////% O1 b# ?6 [2 g2 E3 A& s/ b0 z
  32. // CRevAppApp! F2 T6 y  p0 h4 |  R/ a

  33. ' u( t0 ?; f% v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ {+ t  I/ ^2 F
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ' l# T' b5 p( d1 p1 v, x* v
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      Y$ U1 u6 e% J6 T
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    0 ?* D2 a: ?5 b9 u  ?( M7 z
  38.         //}}AFX_MSG4 H2 T: d1 _+ Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)& Q' j; z+ y4 S& U  i+ d1 k
  40. END_MESSAGE_MAP()
    # \$ W7 C0 q" f2 I: B8 ]

  41. 2 g% X' K: X+ E/ P. @( I
  42. /////////////////////////////////////////////////////////////////////////////
    # K, R, M& D) {+ a
  43. // CRevAppApp construction
    $ `6 x# u3 g1 J0 C- G6 a% r

  44. 0 h- f8 p! E  h" K
  45. CRevAppApp::CRevAppApp()
    ! P. g8 e3 A+ ^( O0 k
  46. {
    0 y8 u2 }+ ?5 q
  47.         // TODO: add construction code here,
    7 Z6 d' H3 E" J$ x0 d: ]
  48.         // Place all significant initialization in InitInstance
    + f+ X* S- ?" Y, C- K- v
  49.   bDisplayIsBig5=FALSE;' F9 ]) w& D" O; D
  50.   bRestartUpdater=FALSE;
    . C0 a) ?6 I4 l9 `0 q
  51.   bFinishUpdated=FALSE;2 l& j$ I4 o) C3 d2 i) I, v2 j
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;* U( k, P7 I8 P( [- n
  53.   InitChangeDataBig52GBKS();
    : [6 F. W" k) `; M
  54.   InitChangeDataGBKS2Big5();' [- }# B% K8 o5 Z3 M. j
  55.         //% J9 T* q* t, X3 j+ d% ~; n' w
  56.         bClickRunExe = FALSE;
    ! R9 |# [& M: \6 Z, g
  57.         //
    ( n4 i+ t4 H) \# _" M5 D
  58. }/ L, e$ m) a7 L

  59. ) E: H- Y: B. K
  60. CRevAppApp::~CRevAppApp()
    ; G2 Q6 Z2 _4 ]* x( g
  61. {
      S+ @5 J- ?" k  s, a" x2 ^
  62.         // TODO: add construction code here,
    ( A! J& P- ]9 @. c  U
  63.         // Place all significant initialization in InitInstance( S: X: ^$ h8 l( t/ Q5 M+ ?3 ^3 B
  64.   EndChangeData();1 p; S. f- f) o+ q
  65. }( [5 c+ @( p' B1 m  y% m

  66. ) v  Q9 \( Z- P
  67. /////////////////////////////////////////////////////////////////////////////1 K! i' `' e" u
  68. // The one and only CRevAppApp object& G) W6 D" _- F3 J
  69. ! R& [( V4 ~! i" k- u
  70. CRevAppApp theApp;
    8 j- z/ W: ?, Y( v" D0 p
  71. 5 N% Z5 D3 A" Q: Y. J* M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% Y. i  d/ X$ M1 f4 h
  73. {
      B% n( I' A5 Y
  74.   int iEOF=0;
    6 M8 [% J/ ?% c0 {- P3 L4 ]
  75.   char szTempName[MAX_PATH];! `; o$ C8 |. v  i4 K
  76.   *szFileName=0;( f4 y. ?; w  H6 T9 R' f; a$ \: ?
  77.   iEOF=fscanf(fp,"%s",szTempName);
    / _# h$ X2 x$ Z- N
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    0 t  j0 B% {8 q4 {: \
  79.   {
    ( R2 L6 o0 F; d* S* q5 U) h) l
  80.     strcpy(szFileName,&szTempName[1]);
    - K/ p! ~/ L! e% D4 E1 n$ C. k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! N) _; r5 o3 J5 z2 U' U5 J
  82.     {
    - Q0 y- G& C% F5 ~
  83.       iEOF=fscanf(fp,"%s",szTempName);1 y9 i1 X4 {0 `3 Y  Y
  84.       strcat(szFileName," ");
    9 W8 c! j- t: _
  85.       strcat(szFileName,szTempName);  b1 ^% T- l& c# H9 ^/ ~- p
  86.     }
    6 Q  b/ z7 l: w2 _
  87.     if(strlen(szFileName)>=1)
    9 B# s2 C9 K: [! w. L; Y
  88.     {( U% g! l' s6 N' @$ N) Z, G/ F: A
  89.       szFileName[strlen(szFileName)-1]=0;
    / v; H) f9 K2 b! j+ N, I
  90.     }
    1 M& T! @/ z8 D% {# c
  91.   }
    ' w/ y- a5 J4 S( B* G8 z' F' f
  92.   return szFileName;' k& C! R( \/ t3 M
  93. }" o2 H9 p4 E+ o1 t( \

  94. 1 ]0 C8 r% P* j) }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). b4 u% q. R; @$ g+ t$ [
  96. {
    4 \: j- o/ V# f* v1 c
  97.   FILE *fp;# W3 U8 R& `' }% y: M3 J
  98.   char *key=NULL;( V& W1 }3 o% r4 w
  99.   char version[MAX_PATH];& H0 Q; B! J0 _" y3 ~5 {! D  V) ^9 m
  100.   LPUPDATEFILE file,olds;
      M3 J9 Q; h' t4 D
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ ~) d& L( [: j- u$ b5 o

  102. 5 i5 v1 l/ j7 p
  103.   UpdateList.clear();
    % T, Z' d! z- M4 j8 z
  104.   UpdateFile.clear();
    ' R( V1 b1 x& F+ {  f
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( E) K& w5 J' v2 f; b" D
  106.   if(!(fp=fopen(filename,"r"))) return false;. e/ P5 x) k% I  u$ [* D; X' n
  107.   fscanf(fp,"%s",version);
    2 P" r  O% O* k' Z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    " J. W$ S" ?$ v/ n, ?
  109.   while(fscanf(fp,"%s",version)!=EOF)
      g& f" ?3 X. H' M& E  a$ g
  110.   {! o% B0 m$ y) a7 V, V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  O1 d$ [; z. }# Y  c
  112.     fscanf(fp,"%s",file->path);
    7 Q# y" n; ]( d5 U" o
  113.     ReadFileNames(fp,file->file);
    ( O+ [1 W* ^) k
  114.     strcpy(file->full,".");
    ' \9 P. Q" J. C
  115.     strcat(file->full,file->path);& q& G  B" }2 }
  116.     strcat(file->full,file->file);6 i4 [; e7 q; D* V% |! x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . ^) E( Y! O+ F  n9 w+ g& w
  118.     {) p  l/ h9 N8 b& x. L
  119.       file->vers=(float)atof(version);- Z. V' T' m% g( M+ k8 v
  120.       UpdateList.push_back(file->full);' P* B" ]  e8 j2 ~7 q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: Y3 @* e* V, R* ~# @
  122.     }
    " e+ d/ N+ Q: R; s
  123.     else
    8 T/ d! I  H+ N! k0 r& B
  124.     {
    ' d7 X: b+ s' [8 T% T; v. ]
  125.       olds=(*p).second;2 K, O" T7 R: C7 P( @9 s9 f" P8 f
  126.       if(olds->vers<(float)atof(version))+ M2 K6 W2 A" m, W# q& P( X1 |* |6 X! u
  127.       {& l6 _- L% I8 N% i$ H. ^2 L
  128.         olds->vers=(float)atof(version);+ ]. q/ t  C2 J+ }$ i8 V7 B- p- [
  129.       }
    : d( d( C3 V7 Z
  130.       free(file);
    + O) O0 N! g2 j1 ], b$ a
  131.     }- a- A6 Z2 [6 B: x' o( R" T) Z* y) m
  132.   }
    " x$ u6 b6 T- |( N9 i6 G- ~, f
  133.   fclose(fp);7 P  I  x7 K& c' a6 k+ Q. k0 S* i
  134.   return true;1 `" t3 A% s( w# m8 b. S
  135. }
    5 R. s) K7 }/ F: h
  136. : n. F" p# N, ]: c7 w6 ^8 ]
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + k. u- w3 Q, O1 h
  138. {4 Z. D2 S- }; Y- L
  139.   TCHAR  szFull[MAX_PATH];; G* t1 H3 e1 ]9 v0 Z+ z6 s5 r& N
  140.   TCHAR *token,*inter;  k5 H$ u. k: R& h6 b
  141.   *szPath=0;
    , G; J7 m7 `7 ^. H( D
  142.   strcpy(szFull,szFullPath);
    6 u' y# Q* `0 Q* L
  143.   token=strtok(szFull,"\\/");- P% j8 h1 W5 i  s6 V- E
  144.   inter=token;4 L  R. x9 k. q( T$ Q1 D
  145.   while(token=strtok(NULL,"\\/"))
    ( C' o( L6 y& A7 a6 }
  146.   {
    1 B+ z/ A4 X" l. X1 P* t2 i+ W  b
  147.     strcat(szPath,inter);
    ( K4 q5 N) E( Y: ^: P- h
  148.     strcat(szPath,"\");
    0 t: D/ x7 {9 T% U: q& i
  149.     inter=token;
    7 k  f0 Z& G* i5 R$ {- t# a/ Q
  150.   }
    ! a7 N; t: ]7 A1 K- E
  151.   return strlen(szPath);
    ( q0 t- w2 |# r
  152. }1 S) X1 @" @2 S) s5 E7 Q$ Z

  153. 5 c: O0 z* y- N/ @/ V6 B
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 Y2 N  q% J5 ?
  155. {6 a' F; O9 E. W0 h4 P: u
  156.   DWORD attrib=GetFileAttributes(Target);6 D) y- l' W& @% `# _' j
  157.   if(attrib!=-1)
    $ R% u2 {+ {/ v: a6 z' A
  158.   {
    " ]9 x& o0 j2 s  ~1 }
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    0 t* N. }% \7 g+ J5 |2 H! W1 E
  160.     {
    " e3 W  `7 y3 n* ?, N
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; |  {! t& r! o* n! e1 t( I
  162.       SetFileAttributes(Target,attrib);! s" ]0 J+ ^5 P! Q% L! I
  163.     }
    0 X  \9 i. q. Q
  164.   }/ S8 ^) M9 _" ?: z) C6 b/ N
  165.   CopyFile(Source,Target,Erase);
    / Q; w7 w' p$ g! K! @2 Q
  166. }% J9 T% q0 N' a
  167. . Z7 y8 z3 q2 w1 @. U
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    / Q( I' f3 ^: V  X
  169. {
    $ M( M" `) E9 j4 o& w. U
  170.      FILE *fp;) u0 K/ R0 Y: l, c- i/ Q
  171.      char  szBuffer[8192];
    7 Z" |3 ~- h  a+ i- u$ ]
  172.   va_list  argptr;
    1 \4 Y+ A# o% x! D& ~7 j$ U0 B
  173. ( h- ^. E; c& H! L' I
  174.         va_start(argptr,message);
    * i* l" \9 O- s0 J' E
  175.         vsprintf(szBuffer,message,argptr);6 D+ o" ?5 A* G8 i$ S; O4 `
  176.         va_end(argptr);. H: \8 r2 Y7 }' `" a" p7 Z& Y# @
  177.   fp=fopen(FileName,"a");
    * A# B7 p0 Q7 Z' U& X
  178.   if(fp)
    6 j; F: f' `6 q1 I+ o
  179.   {
    % c+ o7 u, E1 r3 K9 @1 @
  180.     fprintf(fp,szBuffer);9 H! [4 s+ Z1 w( J( s( V
  181.     fclose(fp);
    5 @7 ]( w% a  f" a0 I
  182.           _flushall();
    - d! U7 C: U. c- k, x! C# B
  183.   }7 F3 u8 H, y: o* v" \9 B6 n
  184. }
    % @# w" R& A# H) W) o: t
  185. / N2 T- {8 Z8 z' g/ t4 @4 X! x" j
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    + O8 r8 t* a# A( B6 T8 |5 A' [
  187. {: l0 H5 f1 y+ s' m3 w. K
  188.      FILE *fp;, \; G0 k6 w2 t
  189.     DWORD  attrib;, ^2 r$ t! J, m" f+ Y. z
  190.   attrib=GetFileAttributes(FileName);
    $ T" v7 C1 h+ |& g. E
  191.   if(attrib!=-1)
    , m/ C1 b) q6 w- D) E+ q4 a
  192.   {- {1 X9 C: F& Y1 k: B5 ~/ _4 z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    $ u; P+ X8 R- b! p5 t+ A
  194.     if(!SetFileAttributes(FileName,attrib))- B- E1 Y; Z8 Z
  195.     {
    3 W# p% y7 p/ H  |+ H' C
  196.       return FALSE;
    ; _' h1 g6 B+ T
  197.     }
    8 o) Y2 H' d9 h! U8 t2 U% F9 n
  198.   }
    ! S# j3 [3 M$ C. l
  199.   fp=fopen(FileName,"wb");
    & g" `5 u: Y9 S! y3 d7 F
  200.   if(fp)
    % r4 @/ [2 d: }, q7 P, r+ t6 B
  201.   {1 v! ^, `6 F7 c
  202.     fclose(fp);5 W; f. o2 X* }* d
  203.   }
    ) \6 V+ U& `  Z: o' C, _
  204.   return TRUE;
    ! O* f4 j9 b" `1 h% p
  205. }
    & B! I4 I6 u& y0 j; g+ v% I: I
  206. # g; B  @! A* m( p$ W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" a% p1 o  d( y2 R7 z7 Q  i
  208. {
    / R( y2 [9 X6 G4 w
  209.   char filename[MAX_PATH];
    1 ~; N+ B0 K# |
  210.   LPUPDATEFILE file,olds;
    ! k6 O2 {3 `8 M! R, U1 r
  211.   std::map<int,CString>::iterator i;
    & G" y  \0 _9 M2 H4 K* |2 U3 L3 r
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 c% ~8 k& z, R% H. x6 ?
  213.   std::list<CString>::iterator l;! J$ }6 y$ q( t! C2 d* O
  214. 9 ~  {3 V2 o0 D1 @7 [
  215.   if(bFirstUpdate)
    $ L7 v7 R3 Y1 G% a+ P% t8 I' Q
  216.   {
    " ~4 n: g9 j& v$ P
  217.     dwCurrFile=0;
    3 p( L& z% K) M+ F9 b
  218.     bFirstUpdate=FALSE;
    5 {& ~4 ]1 b# e0 c- ]* t
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); i9 z* [4 i% V4 B/ }: R) _
  220.     {- Z$ e* R8 n: H7 ?! B# X7 a& o
  221.       dwTotalFiles=UpdateLocal.size();  L* V% z' E8 Q& b/ r1 r
  222.       dwDownLoaded=0;
      ~9 |8 ~" g# Z+ C
  223.       bSilentStep=FALSE;
    * x0 J+ D0 A2 `& g" Z# e/ V
  224.       bCompressed=TRUE;
    " f0 x% U/ b% A. l; B5 o" k% b; @9 @) L" y
  225.       strExtLocal.Empty();
    7 U- ~: {! M, U/ @
  226.       strFullName=(*i).second;4 }% e1 C. x* z2 J- i: q# Q
  227.       dwProgramState=AP_CONNECT;# Q& V& x+ c. O" z, ^
  228.       return TRUE;
    / {# A# o% P# c
  229.     }
    6 D. r( I1 V7 @5 X# E* D
  230.   }* d6 L& X2 H5 S7 m
  231.   else if(bRestartUpdater==FALSE); I5 X" F8 q% A; F
  232.   {
    ; f2 t7 b( o5 \6 Q. f9 d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), M7 b) ]8 f- n
  234.     {5 M0 S7 v$ s' I# @$ q2 L
  235.       file=(*p).second;9 a8 o, K# s8 s* Y2 C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ; Z8 {8 d- C2 [$ ]+ N) z0 R/ m1 S. h
  237.       {
    : `: i0 N7 C5 x  F
  238.         olds=(*p).second;/ e; e. Z' F- e8 H
  239.         olds->vers=file->vers;
    * c0 m( ~( V% y
  240.       }' I3 a$ D4 a" Z& ~, ]* T
  241.       else- w" T4 t, F2 V/ V6 ^
  242.       {
    9 _5 `  s( ?7 g. j3 i2 V* R" F% A
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: u) B/ ]) T3 L8 a! n! F4 Q6 O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ U  ]% l' ~$ a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    , l' M9 w" F% `: n& H1 I
  246.       }
    2 B  o; G6 f' T4 L3 M2 {
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");. A' p1 P8 }$ B1 R) X* j/ L
  248.       sprintf(filename,"(%s)",file->file);
    - C" ~$ Q& i7 W4 i3 V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  Y# @, D$ Q) w1 p
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }0 k& r  J" g3 |+ o( c) W* D2 k
  251.     }+ T7 W$ {1 O* u, t/ a* h, V0 r
  252.     dwCurrFile++;
    , Q% ?6 I4 R; S, q  X% [6 g* m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 @' y. c7 R' n% L
  254.     {
    - A3 Z8 V( {8 r+ M% a
  255.       bSilentStep=FALSE;! E' x. v. U7 p
  256.       bCompressed=TRUE;# R5 l2 o' J. _  j
  257.       strExtLocal.Empty();/ `& d& d- ~% ?1 O; c5 X% [
  258.       strFullName=(*i).second;7 k$ m$ k+ r& F7 z0 w
  259.       dwProgramState=AP_CONNECT;
    $ G# @( L3 U1 @5 X. L1 h3 j
  260.       return TRUE;' i7 A& u3 \8 P. I" c& r
  261.     }7 B/ Q3 a5 H6 i( }
  262.     if(!bRestartUpdater)- f% H/ _. p+ Z! Y
  263.     {; Y* @" K' \9 G3 q% Q
  264.       int iCurrSize,iFileSize;; {3 B" ^7 z; [% d1 d; o& Y0 D0 C
  265.       iCurrSize=0;
    : O8 H0 b& D5 w; P
  266.       iFileSize=UpdateList2.size();
    , A# P8 c( D4 p/ b' P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % L9 @8 d0 }, d/ ^
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% g- L9 }. l" A% }0 ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");0 b; m+ [7 e/ D- [
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" ~2 k6 K8 y$ G$ Z* X2 n- p5 B: D
  271.       Fclearf(".\\update.dat");
    8 W8 T) }) m, ?" [" w0 A' \& ~
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; m5 [& v3 z! q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 ~9 N7 @; P% ^: v; v
  274.       {0 ]! L6 U4 m  V7 a0 E7 u/ x+ U& H
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    6 E8 j5 j/ D5 I. u. k; n
  276.         {
    + c$ x5 `/ m9 K: |- d
  277.           file=(*p).second;
    . _+ C& ?( q1 S5 l- u
  278.           sprintf(filename,"(%s)",file->file);, P1 l  l9 o* O# |" y* S: }' [% H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    2 v2 k5 u$ j' R
  280.           iCurrSize++;6 r& k% u5 D! S, u; r; ^
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
      {. A0 Q; n. t/ t3 m  e
  282.         }
    9 f; e% e6 e1 w* Z# L6 ]5 e
  283.       }: J4 r8 m2 }3 k* }' I, @, `! n
  284.       unlink(".\\update.txt");
    8 o7 d4 o* }& N. j# O" a
  285.       unlink(".\\update.tmp");  F$ w! M  @! m2 t
  286.       Fclearf(".\\checkversion.dat");$ H/ O& f# M& Z" j- p% T
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" K6 Q% Z4 z: t) T& V
  288.       if(UpdateLocal.size())' ~$ J1 b  g' V- H" {
  289.       {, g* O( |+ h: t6 P6 c& ?3 B
  290.         UpdateLocal.clear();
    & V0 p5 @: y  \5 z
  291.       }
    + e- t, q: C  A5 w* A( k* K" l
  292.       if(UpdateFile3.size()), ]- @. w/ \* F
  293.       {, {1 V( v. j8 [) Q, l( e" S& t
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ P0 k' q$ O! S% S* L
  295.         {: Y6 C9 b1 H: g. A+ d5 z7 |, R
  296.           file=(*p).second;, `- _8 Y" l2 v7 L
  297.           free(file);
    6 G3 ~* A6 g7 s1 ]! Q6 \6 y: {
  298.         }
    " u( ?- i; N+ ^# }% Y' U
  299.         UpdateFile3.clear();
    $ f  t$ J% M$ F- R0 G4 q
  300.         UpdateList3.clear();
    : z9 p' m3 {% p7 Y3 |
  301.       }' q7 ^# s7 T. ]. `' M+ O( ]% h
  302.       if(UpdateFile2.size())( f$ ^5 s$ r5 e. n
  303.       {  ?$ @- C. |3 @. n6 i( c3 ~5 a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)- R/ Z; Z$ u' _  }/ `
  305.         {
    ! h% q; d, H4 u% q$ F' G
  306.           file=(*p).second;7 `& j( r1 m& i. F  G7 d
  307.           free(file);  H! d& [: \" e0 w- e* x1 B! W
  308.         }
    8 \! `9 ^2 W1 W% e1 z
  309.         UpdateFile2.clear();
    4 @; Z: J4 S5 A
  310.         UpdateList2.clear();
    : X) ?2 i( i: ]. h
  311.       }1 d: {# r3 G* W$ M# f
  312.       if(UpdateFile1.size())3 v$ ]% j: B/ Z3 F
  313.       {7 ?- E9 y/ r# k2 H) P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 s  P$ k5 @1 `& w* e4 ^- }
  315.         {+ f, t4 _# v/ Z0 T3 g: M; e
  316.           file=(*p).second;! h! t- Y: }' U: X: U
  317.           free(file);5 }3 o4 H" Y* z1 ^, M
  318.         }
    , _5 R1 G: _4 P0 G4 J+ A
  319.         UpdateFile1.clear();+ \3 J+ [; k' a
  320.         UpdateList1.clear();. Z: y6 U& C' ]' F4 e- j  e7 q, R
  321.       }
    0 Q& Y% A$ P* @4 S9 e. a* y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' p1 z6 u) q% N1 @% g$ a5 g' ?4 T8 J
  323.     }6 g- d2 F3 V$ k# a
  324.   }
    % _  Q% F4 T: G3 M8 t4 B; s
  325.   return FALSE;7 I9 [  v" p' f/ w
  326. }7 n9 F# {$ v4 Y
  327. 1 V1 {- Z! A+ R
  328. void CRevAppApp::ClearAll(void)
    9 d* C: ?* A  [
  329. {3 F) v) ~( ^' ?* O, H
  330.   LPUPDATEFILE file;
    8 k, ]* d6 n: D. q$ R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# J7 ^/ X3 [: d2 y$ v% K: u4 Q; ?

  332. ; K. q0 D8 L* n/ X8 s
  333.   if(UpdateLocal.size())
    % U* G: E5 Y& l0 t$ w5 u7 ]; k' n
  334.   {
    ! _0 @8 H3 V! [! B: t% T
  335.     UpdateLocal.clear();: G4 Q: T. M. t) t+ S0 y9 e
  336.   }) \7 L/ m: E' R9 O1 o  @: G
  337.   if(UpdateFile3.size())" Y7 c- q' M# R7 t+ F
  338.   {
    0 |0 f; J: z' z* P+ y# I
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % x6 g: [  K3 p# C) n
  340.     {4 s% v6 g# u! X* T
  341.       file=(*p).second;. l# u" X% |. \) j/ [) T
  342.       free(file);
    : r! F" e& G$ }/ v5 l% z7 o8 f
  343.     }3 }- [9 I3 v" h: E6 R5 g* x1 C
  344.     UpdateFile3.clear();3 T1 \$ V& I# F
  345.     UpdateList3.clear();
    . K: k# N( p. C0 ]
  346.   }; Q0 j# \: p9 ?" M3 i
  347.   if(UpdateFile2.size())
    6 Z" I( {, j& V6 d5 V! v
  348.   {
    - S$ h! [: e7 e6 C: j5 n- f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ g8 ]: _5 [9 k% o
  350.     {- F9 m! e! s9 V% _2 {9 d
  351.       file=(*p).second;1 B) l" e$ _1 \3 G
  352.       free(file);
    & G" l, [# E% B$ ^. L/ [
  353.     }
    5 G4 P  l. U0 G8 M( R1 ~
  354.     UpdateFile2.clear();
    / |1 @' V' K5 ~* {! W% N
  355.     UpdateList2.clear();
    * B& s/ w3 W1 s* b. W
  356.   }# ]6 o6 S8 }! u3 I, E" q
  357.   if(UpdateFile1.size())
    / X* z6 x2 m* F* K9 [
  358.   {: U1 n6 F/ s1 o3 `9 O& [% [* t
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); G$ Z' k4 f2 V1 {4 X, p
  360.     {6 A6 V3 w" H/ l
  361.       file=(*p).second;( {; U# r/ }4 ?  X# C0 W2 F
  362.       free(file);
      x0 P  K# I' a  E7 N$ N, \
  363.     }
    3 m: W5 s4 ^' W) V5 y! n: T
  364.     UpdateFile1.clear();
    ) e, {9 A$ t/ m1 H6 P6 Y; T
  365.     UpdateList1.clear();# s) X2 H5 ^9 U/ ]
  366.   }
    $ [& p( L8 v/ k" X0 P. o: Z
  367. }  4 j) W* M  H4 U. {
  368.   + v2 ]7 a. I' P
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 Q+ g' c, p. {. N3 S9 G. s" M( F
  370. {
    : j4 V; _7 N3 ?" ]
  371.   int c;
    - G5 w3 h' H6 O. @( S
  372.   LPUPDATEFILE file1,file2;
    # _( M) l$ A' \5 e
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    : z; a7 \: `9 Q! H0 z
  374.   std::list<CString>::iterator l;
    6 m+ o7 S4 L1 w' `8 b- `
  375. / r) Y1 Q! c2 ^( h7 `
  376.   UpdateLocal.clear();* b" o& {. T, z4 l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    5 M; V2 |' J' n7 I" O1 @+ p1 c! T
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 X- @$ E3 g# M! @. X+ q$ P
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);$ V+ u4 E2 Z5 I+ u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; C" S2 W3 m$ |2 l
  381.   if(UpdateFile3.size()): c" U; b: T. q: x) w4 `
  382.   {8 Q' c; W6 J3 v7 s, ?: J- L. R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ! q% c# r' e2 h$ e' |2 w
  384.     {) B4 D) ]/ [. @
  385.       file2=(LPUPDATEFILE)(*i).second;1 g1 i7 K5 |) }$ j( v; _- S7 o# J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); ?; F5 i  K1 ^2 J" B
  387.       {& i) h0 o; S! ~$ S# n
  388.         file1=(LPUPDATEFILE)(*p).second;
    5 @2 V9 m- b+ U* X% l9 A
  389.         file1->vers=file2->vers;
    ! v% }; G2 b4 B+ ^/ g* `
  390.       }
    , S" C3 t5 @/ Q* Q  N2 W7 z
  391.       else! X+ A3 B2 ~' k# L% ?
  392.       {
    1 _4 b, K& J1 J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' G# {9 |3 l  E9 b) g
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 m8 e; k( J5 ~4 @* `9 L% V2 R/ K& ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; y) e6 o0 u/ H) O6 |" y' {
  396.       }
    - u; i; ?) S0 j) Q$ y" m
  397.     }
    * I" U* k9 @% G7 C
  398.   }# [6 M( I3 H0 }9 ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % D- f. q' g+ \" ?
  400.   {
    # M: G) M+ @2 ]( z7 o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' K& \* }, a& c; F% s
  402.     {
    5 `- N$ G: y9 B+ G
  403.       file2=(LPUPDATEFILE)(*i).second;
      [  `3 A5 q& d0 z/ a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) a2 w8 ^8 e* q- f
  405.       {, s6 [3 I9 Y9 e
  406.         file1=(LPUPDATEFILE)(*p).second;
    " y8 x6 r5 Y' I- ^
  407.         if(file1->vers!=file2->vers)
    7 Y9 y. @4 P+ l9 l) z" f
  408.         {
    ) h- ?( t* h; _+ f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 v5 y9 d' g# ]; s
  410.           c++;$ e4 E: i8 f* ~1 E& J& C" A* i4 X
  411.         }
    8 c# ?" l, O3 @* [
  412.       }6 Y5 N; v( O- s8 p8 X. C  X3 y
  413.       else
    & V7 ], l6 d/ W  W4 l& m2 ?
  414.       {' D/ G, d4 K$ _  x* v" {
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ [$ z& o3 U" `. w. D+ b
  416.         c++;  T' B. y. {' m3 x) l/ b
  417.       }3 b! w& e1 x" _: M
  418.     }
    . n, _( s6 n; e% u8 Q" M/ x
  419.   }  M6 Z; N: r* O+ j+ p% M5 e
  420.   unlink(".\\DownLoad\\update.txt");5 o5 e$ V/ R/ B$ K* U1 C3 \4 ^4 v6 ?
  421.   if(UpdateLocal.size()) return TRUE;! `' o' t5 w' Z, t
  422.   else                   return FALSE;2 N8 i  y, f! N/ o+ L
  423. }' H( X: h! u3 [) r% O
  424. & B" O! t! ~! p( y* j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"$ O# H9 p7 L4 \; s6 g4 M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ @- t) }7 u$ W8 Y9 c
  427.   E' K* M& w! ]0 o
  428. . i( K+ f( @" Q1 x- h+ S1 g: F( Q  ?! k
  429. ' @. g9 I5 d' a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ q' c" T: i8 [% x5 T
  431. {
    * J+ D) ?2 S4 K3 p5 O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ O) c' r1 y/ {4 F; Y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 N7 i5 y1 S3 K$ d
  434.   {
    % X7 N: e6 b7 U6 |$ n
  435.     char szLanguage[50];3 O9 ~+ A& {" p% V/ e+ ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 r* \6 I% W1 V2 B$ e) E
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;1 Y" w- W: r  L5 R7 A; R9 X% ^( g9 b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! R# q$ l2 }5 k* D
  439.     else                                   m_iLanguage=ENGLISH;
      W% ~+ P4 p/ `" \0 W0 w
  440.     char szRegister[100];+ V  v0 Q7 B. S& I
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) t# K2 C% X* p# w$ r
  442.     strRegsName=szRegister;) ?: z% @9 R6 E/ B/ w5 J
  443.     char szPatchURL[100];: |( D8 g: W6 [
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 v0 F5 Q; [& @0 f. A1 d
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 G5 f# S! D, J$ P/ p
  446.   }
    * ^9 u4 P8 Q# Z9 u' g+ w
  447.   else
    - a" T# s  \% w) ~. f
  448.   {
    & y7 }0 y& @# O' ~
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : T  B, `" s  r1 K% r/ ~6 Z
  450.     strRegsName=DEFAULT_REG_URL;6 Q3 C# H! B( p4 j* T1 Z. d
  451.   }
    2 Z8 F- t& Z6 G' c7 d2 Z4 H3 `) s
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 t# n  u: s7 B6 H
  453.   {  U3 E; V4 A( c) h. H& u' D
  454.     char szIP[50];" ^5 i$ ]2 ^3 I% D; {9 O% o" r
  455.     char szDIR[300];
    8 `6 {9 u0 v, k; R% }. b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    3 {- i2 u% `1 f# R
  457.     {
    ) U" u9 _, ]9 E- s/ Z1 w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");/ g. C$ A6 S* y1 L% U0 s6 F- y# x- u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");  c0 S! D) t1 v/ }6 L7 Q' N
  460.       strHostName=szIP;
    2 M( ]8 j& h1 e/ x# h9 Q
  461.       strHostPath.Format("/%s",szDIR);$ X2 J8 J" R1 R( k5 G: T
  462.     }' _4 H2 O# |/ Y9 n! Z: [4 |  E
  463.     else
    ; K3 H7 C7 r! {9 I
  464.     {0 m: }! i4 Q* [1 m4 X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : l4 C5 q( \2 n& W
  466.       {% m3 G9 e( x3 N0 D8 o; K9 Q* u
  467.         char szLanguage[50];
    # l' `& }% X' h( B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");( G! j9 S* ~  \5 @( t! N( o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 W5 l. L* R# `* Z( j7 F+ [  `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ h7 z& J  N* }" P. H# k
  471.         else                                   m_iLanguage=ENGLISH;
    2 O) {6 P+ a% V  s, K6 P
  472.         char szRegister[100];
    & B! G% E0 U1 q. Y, m6 d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . j7 h7 d1 J0 `& f' t5 T" X
  474.         strRegsName=szRegister;
    1 f7 s6 l: H( i* _* Y! U7 T' G
  475.         char szPatchURL[100];( Y* D9 i* H! B7 Q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 k8 R( U8 k: t/ y2 r4 j
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " j6 I% @  n! e; y2 u$ o% f
  478.       }. Z. S, w: b& ^8 N" l
  479.       else# _; D$ L$ C" ?- y" m3 C
  480.       {" q- z) r8 m1 i6 _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 q. S  [9 m# V9 j
  482.         strRegsName=DEFAULT_REG_URL;1 a' ~3 }4 p& @. d: h: Z3 [
  483.       }
    4 t9 I6 i+ P% ^( Q( x
  484.     }
    5 W7 z% H) J( @) ?
  485.   }
    . z7 A% {0 c( h+ \+ P6 x% F
  486.   return true;; N; }* @+ G" ^9 A" j! w. r9 ]3 M
  487. }9 L, M1 [1 z+ r& L! F6 a: b/ e
  488. / Z/ S0 M- y% T! i( X
  489. #include ".\ZLib\unzip.h"
    1 O  Z0 S+ P+ D1 v7 k  F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 J7 d6 S. j- m* x5 P1 P
  491. /////////////////////////////////////////////////////////////////////////////2 S# s/ x9 R  d1 ^# u2 I
  492. // CRevAppApp initialization4 ]2 ^! x) C; m! O" M3 c  ]4 Y4 \+ ~) r
  493. + H- q0 f7 \# s& R
  494. BOOL CRevAppApp::InitInstance()
    ) f$ k: Q/ q  @/ w  P6 V
  495. {
    4 l! A4 t# d& k/ C8 ]
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, l6 Z. n+ D. N, j4 y" c
  497.   O  o% p' O7 O) C, E
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# Z2 k+ G9 h: y- @" E9 c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" i+ F1 B: [4 G( s( h7 F3 u9 o
  500.   {2 j+ k' B) D/ V5 G2 ^3 O0 o2 F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    * q3 m6 R, f8 h* `% u# g; L
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % O3 \1 x) x) R& x& |, r
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' W# W- K' D% p3 ]: f: `) Z/ ^7 V
  504.     {7 w% J( {9 ^% L1 M& f# i. a# u
  505.       strcpy(szPath,szPathTarget);. l7 Z: R! ~, q" n8 J
  506.       SetCurrentDirectory(szPath);0 u# m6 i( t/ W# W% t) C+ t+ k; w
  507.     }, X, B8 X8 h' P" P
  508.   }
    * E+ E/ u# F$ U+ K0 b) T
  509. #ifdef _DEBUG8 d. I! v1 F7 k" w
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 C$ ^. `3 O2 S& m, |2 d+ D
  511. #else
    , X, {4 A( Q8 A8 ?5 F0 {+ L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- I7 D1 V+ h3 L
  513. #endif
    / B5 P& h: z3 y% E, j" I2 J
  514.   {
    / }' j9 H8 y" W* u0 u' s# a
  515.     char tempFileName[MAX_PATH];
    2 N7 `. K7 B- C% [& J- q: [
  516.     strcpy(tempFileName,szPathSource);
    4 |; N. [) C% b7 |$ W
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 j$ ?; k5 P7 G" h% u
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 _" I% i0 Y* K' G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 l* H% d2 W$ F
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 f+ ]# {9 a7 ~1 y- p, T
  521.     return TRUE;
    ( z( [3 p/ r. B! U
  522.   }6 c3 n& Z  e7 [2 X3 g: V
  523.   // Nuke 0118: Delete run.exe' ~' l7 s* o9 O+ i- ]# x+ R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );4 c' `* L9 E: v0 N: x7 L
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    8 n2 z3 Y9 d. [4 t% D: r
  526.   if(!ReadCfgFile("Config.ini"))
    & }: a! ^; R1 ~$ V# x9 g) W
  527.   {& I1 }" |5 B$ H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 e/ q, e4 k- G5 I2 K4 Z: N
  529.     return TRUE;
    + n( M; Z9 C: S6 }" L1 B
  530.   }
    % u% O$ O9 \( Y8 z1 ?5 B/ f% L2 K
  531.   HANDLE mutex;
    4 ^" r6 S, d# b4 V- T# S6 v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ N& t" y1 g9 A1 h/ K
  533.   {9 P! {, P8 H" E$ w  S. r" O* L
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' M7 y3 H- X' E1 O1 Z# [) H
  535.     {
    2 w" C$ Z7 U% F5 _9 ^* M/ C0 q3 M
  536.       CloseHandle(mutex);
    - ~* z& c& o4 [, V9 O$ {
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. v3 j3 x* T2 x2 T
  538.       return TRUE;, m7 o; H9 W) M
  539.     }
    , R7 c7 u$ `, |  V
  540.   }  8 B2 f' [+ A4 f' \2 ~8 ^' I, Y
  541.   CloseHandle(mutex);7 A- [+ h+ a6 H2 Y0 C; L2 j

  542. + d* g# F2 I, P& }4 j
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 d1 Y+ s' A- A

  544. ) ?# }) w1 r% R3 R5 S- v
  545.         AfxEnableControlContainer();, Y8 h; A* V3 C: t

  546. $ N7 w) y( z  ^; _3 `
  547.   bCanUpdate=FALSE;9 p6 ~1 L( B7 I2 n/ X4 M
  548.   dwStartUpSteps=1;) I) v; M% a$ z& a9 O7 O
  549.   dwProgramState=AP_NOTHING;3 o/ S8 T- Q! T  L9 x
  550. 0 L5 W4 {0 s: W8 g5 n0 {- n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    / @1 |4 A; E* S# n3 ^5 Z: u
  552. * L/ v; D+ y; x  I) H! n; X5 V
  553.         // Standard initialization# e1 G9 U6 A* J% y" W0 Q
  554.         // If you are not using these features and wish to reduce the size5 h9 \- g$ D: T' S6 F& M
  555.         //  of your final executable, you should remove from the following
    2 v: J$ ?8 x5 R+ L# P9 G  V
  556.         //  the specific initialization routines you do not need.( ~1 r% I& }, i
  557. * j) z/ r4 H/ q6 ]
  558. #ifdef _AFXDLL
    $ A$ S( ?$ L8 D4 x  j
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " j" L9 X# w  m: T7 c; L- A, ?
  560. #else1 C) A" ^- r' \  I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; g1 E& ^& i. S/ U
  562. #endif
    / w/ Q2 Z& J' Y. b" E

  563. 2 `; |) u, j: @& ?8 W* j6 z3 d
  564.   dlg=new CRevAppDlg;5 s7 B0 i, j4 }# {
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 t' U; T" f+ v; c1 K( H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 X( \9 I2 K  e, D1 P( q* R. X
  567.   m_pMainWnd=dlg;) m8 d- }  ]" A; w/ C6 W. R
  568. / F4 a" r- j# L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ ]! v+ }9 G# J; W% V+ Y, C
  570. - E+ I& I7 O! j4 \6 H5 c
  571. //  GdiplusStartupInput gdiplusStartupInput;
    8 w' ~) Y0 ]: J
  572. //  ULONG_PTR gdiplusToken;
    ' o7 Q- Y" s4 ?0 N% Q% M* c
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    / D. }; W! A* n; f0 f$ D+ {

  574. " A+ c0 X% a! d
  575. //        CRevAppDlg dlg;* E  t" s8 t& }& B
  576. //        int nResponse = dlg.DoModal();5 e5 D# z* q) M7 M/ o4 Q
  577. //        if (nResponse == IDOK)" W; O& E- ]  }
  578. //        {% `2 @* k! ?# f5 _( I
  579. //                // TODO: Place code here to handle when the dialog is
    ( U: o1 a/ _; F  {1 {3 W" z
  580. //                //  dismissed with OK% j2 @% x: ?# n, `) O3 P5 R% E
  581. //        }
    $ v  u% w1 R: H) e" D# W
  582. //        else if (nResponse == IDCANCEL)
    ; Q5 g  m2 i' B; I5 w! @& ?
  583. //        {
    ( ]1 u1 c+ G! `3 P+ w
  584. //                // TODO: Place code here to handle when the dialog is
    & s/ ^& c. O( w% ?8 t
  585. //                //  dismissed with Cancel
    0 E" w- y' T7 W5 Z
  586. //        }
    6 l( h" }  J  x9 P( e$ ~

  587. & T0 g/ o" I7 o! X4 C, H' U
  588.         // Since the dialog has been closed, return FALSE so that we exit the& w/ Z4 K" L$ @2 d# M
  589.         //  application, rather than start the application's message pump., E/ d- O1 y  T+ i) l# _* ~; ^
  590.         return TRUE;1 J9 g4 ]5 c+ r0 S9 Z9 I
  591. }% j1 B) [  e, K- X5 E& K

  592.   X; H$ g* i. G0 u/ M
  593. char *CRevAppApp::strtok3(char *pSource,char *token)" Z, D! X# K1 n- T' ]) f
  594. {, X+ l2 A' R3 J: S
  595.   int i;
      g2 N, W2 D2 G4 ~* I( P$ k: M/ A& C/ Q
  596.   char *szRet;
    ! M6 G6 b3 [7 @: q" }
  597. ( z0 Y: J7 R4 |: T) M  Y! X7 O7 U
  598.   if(pSource) { itoken=0; sztoken=pSource; }
      }3 ^8 s' r+ T, A" ~$ b! k
  599.   if(sztoken)
    . j; V" H- F3 z) ^4 |6 j4 u: X' Q+ }
  600.   {
    : G2 d8 t# ]/ v3 I) A% `" P% S
  601.     szRet=&sztoken[itoken];
    & l/ X& y) i1 {1 s8 k6 W
  602.     while(sztoken[itoken])+ T" E4 l& [/ k9 q
  603.     {& M$ m- G7 U6 x$ H3 b
  604.       for(i=0;i<(int)strlen(token);i++)
    7 i; l1 v! l$ s" }
  605.       {
    * |3 p, R# _# N7 M2 y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), _& {; {' T2 s. x' m4 o' y- [2 N
  607.         {+ M* [4 N- |9 L: R8 H( C
  608.           sztoken[itoken++]=0;3 c# D+ {' K  H% I" l
  609.           sztoken[itoken++]=0;6 Z  r, m8 l- u; `* l' A
  610.           return szRet;$ v0 o" o' K9 o. G9 A2 O
  611.         }
    ( u  L6 k! z  y- Q# ~
  612.       }
    ( G2 [, Y9 J- }% c
  613.       itoken++;. g7 H5 W  @+ f
  614.     }2 {) p) H. y" P0 \7 }0 q
  615.   }
    1 A) ]3 R  J6 r6 m* D' z: J
  616.   return NULL;
    7 p6 Z( J& P+ W3 h* |" m) F% m3 @( g& S
  617. }
    ! P7 D/ V6 F4 z4 d) W
  618. 2 [# H2 f, ]. w2 r. _- N8 ~& F
  619. void ProcessProc(long Total,long Current)' Z3 W  B5 O/ S6 Q' Y" i& C
  620. {9 e( }" v. }  ?! v) S0 |4 k" F% V
  621.         MSG msg;' w3 z1 t3 h- F+ _2 |4 r# _$ D
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);' f( U0 i* n2 s2 p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    . ^: ~' A: s9 r7 w& q& H6 R5 D7 ~3 m4 a4 t$ ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    0 L- n- @/ K( \% `3 g; r* ]. u& Q0 r
  625.         {  r$ x" R5 r- f* S+ N
  626.                 if(!GetMessage(&msg,NULL,0,0))
      C- Q2 Y9 j- z9 o! g
  627.                 {
    ! y; w7 x8 `, T/ b/ D  \) R
  628.                         return;% v$ F% R" I; q3 X: O
  629.                 }
    2 j7 |7 K# I' _
  630.                 TranslateMessage(&msg);* Z- S" a# J. L: J' H
  631.                 DispatchMessage(&msg);/ P9 w* \. t/ d, l. \
  632.         }        : ?% X, \4 P8 q: ?& r
  633. }
    ' ~. F- i' C* t6 e+ T; U
  634. : r* L" |1 l) o5 G: Z2 w6 X
  635. BOOL bFirstChar=TRUE;4 k7 k9 o  w9 G8 d4 M  M
  636. 9 G. n$ {( B+ a6 W
  637. BOOL CRevAppApp::OnIdle(LONG lCount)/ h" ~2 Z$ e5 m/ f" ?2 t: E$ r4 i
  638. {9 }6 k1 x1 A0 U- @/ A' Q# E8 T6 H
  639.         // TODO: Add your specialized code here and/or call the base class
    & f4 H% ]/ h+ f9 K
  640.   switch(dwProgramState); l2 }+ x9 i( G( h: N) b$ W
  641.   {8 }' W2 r9 S8 ^: z% W+ @9 T8 X- `
  642.   case AP_NOTHING:
    ( f+ r. f( }' u# X
  643.     switch(dwStartUpSteps)
    + [) y8 ~, ~6 _) a
  644.     {
      @& a4 A! s/ ?
  645.     case 1:, X1 S: D# K; c3 ~  U; z4 `
  646.       {
    - b7 g  Z0 ~. j" ^2 e
  647.         int i;
    % e5 H$ l: f/ q  z8 V
  648.         CDC *pCDC=dlg->GetDC();( X. P1 k8 C, {& ~- x
  649.         HDC hdcwnd=pCDC->m_hDC;& W. i5 ?+ R7 K8 l9 Z; v7 i
  650. //        Graphics graphics(hdcwnd);
    ! T0 L9 g5 h4 C* P) U  H" r% @& S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) m4 x' ]' ~! Q6 K: o$ x0 z
  652. //        INT iWidth=bitmap.GetWidth();
    4 ]9 i. J8 J$ |" e7 J5 O( y
  653. //        INT iHeight=bitmap.GetHeight();" U8 _: {% b( B  D" g. j0 g' D
  654. //        Color color,colorTemp;3 [( K) _7 b5 \6 g" k; ^" }/ ?, d
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 M+ T* L6 I+ i
  656. //        {' [  ]2 T# N1 a  F; c( Z  T1 G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). ~2 a2 T  b5 c  _/ ~; ]$ i- S
  658. //          {
    * l/ I3 U7 P' e3 j& j, X
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    # Q; g0 w- |: B9 ^! @7 l2 D* R
  660. //            colorTemp.SetValue(color.MakeARGB() Z) d  b( O. t& J
  661. //              (BYTE)(255*iColumn/iWidth),
    3 J, Z& j  L% J' k
  662. //              color.GetRed(),
    6 B) u- W( l! C( Y! I# s1 `, ]- \
  663. //              color.GetGreen(),( n' K- w/ J; D% _3 N
  664. //              color.GetBlue()));
    / q, }! y- }# B& U5 Z0 q7 c- K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);0 r" ~. }2 b9 M9 x* `
  666. //          }
    : z1 o3 ~! \! u- t6 a1 F" \4 N' x, j
  667. //        }
    , ^: h' j7 Q, }+ g  I8 t' r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 Q, v' K) ?/ X5 n/ p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    8 Z) F/ G, H0 P4 ^" x: z0 @# I
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: a* {8 d0 ?) V, Z% `
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* v1 m; v: j* m  {1 R
  672.         for(i=0;i<240;i+=8)  q. u5 x" ~- t
  673.         {
    1 J; k; m5 \: C, {7 m( K* J" J
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; t# S) N9 U- ~! Z4 d
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 F, k# l3 v" r* u. D+ J( X
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! ]( \' M) q5 [' F; q9 }! s8 t0 a
  677.           Sleep(33);
      J5 _; I9 X8 t6 ~
  678.         }
    1 G( b5 A* L+ ?3 ~  P5 t. E! p
  679.         Sleep(1000);
    & J* N: L! A% O& _
  680.         for(i=240;i>0;i-=8)
      D; U4 D) N$ e! v+ b# Y
  681.         {
    % E* j) Y- W) |; v+ s% ^2 k' g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ G. Z2 C5 x, \& R9 r% q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% S5 |$ L! h  L7 P3 v# l& d/ w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 ?! R$ H" R  E- e
  685.           Sleep(33);+ Q% y. U4 Z3 {! ]0 j1 W
  686.         }
    5 t6 F, [. b9 w9 b# s9 D
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 @# v" G5 z' H0 K- }$ i9 G3 m" q
  688.         dlg->ReleaseDC(pCDC);
    ) U$ K' B) V' B. p
  689.         DeleteDC(hdctar);
    ' ^' h" t8 M0 ~6 N- V! ]9 `# |( Q$ g
  690.         DeleteDC(hdcsrc);1 p/ c& ^9 _& A3 W
  691.         DeleteDC(hdcorg);4 Z' W  Q( l: J; |0 p
  692.       }
    ! N+ B- ^% e. i. s  N% R& G5 Z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ H7 K3 ]# [1 M, p, r8 u5 |. t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");% c) f; Y. H& T) I1 U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    $ @! D& d$ a' ^# D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" O" D: S5 @2 V1 v
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + y% G& U% N: l, E$ Y- F
  698.       if(!Dn.Connected())
    $ F' p) W9 @  N7 M7 V7 q* i  l
  699.       {2 D/ g! Q8 N% L4 \+ ?
  700.         dwTotalFiles=1;
    + k2 M6 c( S# S+ ?9 T& Z! u
  701.         dwDownLoaded=0;7 Y, W- v. I! B0 z8 ?* ~
  702.         bSilentStep=TRUE;
    - ], H! x; `) ]. ?5 b+ H! E$ \
  703.         bCompressed=FALSE;* D, k+ A* `. g
  704.         strExtLocal.Empty();
    * C/ Q' X2 G) p' N, H
  705.         strFullName="readme.txt";3 u/ w' [5 A) K" f6 q8 j1 F# |5 v6 O
  706.         dwProgramState=AP_CONNECT;  o' E1 Q$ V) I- W
  707.       }/ z- c  F6 [3 T& [2 {
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ; b4 Z) J0 K0 O5 a! J% Z0 F: A
  709.       dwStartUpSteps=2;9 C7 h! L7 t2 @
  710.       break;; V( Z2 R  q+ v9 L1 Q5 r1 a3 v/ u4 N
  711.     case 2:
    $ b  z* \8 ?( l! a! o: c& v
  712.       {/ j8 ]. ]/ ~7 _
  713.         int iEOF;
    ( O4 M) \1 ^. g- R, s
  714.         FILE *fp;
    / ^& d( Z& S% j/ ^+ ?
  715.         char szString[512];
    $ t) k. i) ]$ [/ t  m$ W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    * p9 A+ K& \5 v& u
  717.         if(fp)1 g6 N3 H$ H/ Y! \+ H
  718.         {: E' n) {" X" O2 t: c  m
  719.           do
    . H# F# g- e  Q
  720.           {
    0 x0 d) I! M1 _5 i& o
  721.             iEOF=fscanf(fp,"%s",szString);6 V8 p/ {: c$ L7 S' `. T6 D
  722.             if(strlen(szString))/ x! ^, Q6 F# C; y4 x3 V
  723.             {) L) q) |$ E* U2 b' r8 b  D
  724.               if(bFirstChar): |, P! V( [4 S' D/ Q, Y! \
  725.               {+ D$ m3 b$ e& h) l* ]; n: ~5 v
  726.                 bFirstChar=FALSE;
    . k; G0 }3 d! a4 |6 G
  727.                 bConnectIsBig5=FALSE;
    3 o9 F9 a; x8 ]0 R! p! Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    , u, f' C9 t. f: \/ s9 h* |9 e
  729.               }2 N0 G; H3 J! X. a2 ]0 Y3 G/ l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 X% B; w! s1 ]  H/ v: F! x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    4 N. Z* }) q+ K- v$ M3 ]
  732.               dlg->m_ListText.AddString(szString);9 z6 Z& C- G. D1 n8 `1 W
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* G$ |$ L  ], B' P
  734.               *szString=0;
      i: R  e# K8 M: C6 G4 u  K+ S
  735.             }$ g$ [# o6 p( X( k* j1 K% ~
  736.           } while(iEOF!=EOF);0 [$ |  ?" e% o! h" P
  737.           fclose(fp);) U# e  ?1 v- r  `$ V. f
  738.           unlink(".\\DownLoad\\readme.txt");  G0 j  P$ }8 t  v! m9 Y  U
  739.           dwStartUpSteps=3;
    $ W* ~3 J3 P% }' \! c4 G
  740.         }" ^! L0 ?# y9 B9 N
  741.       }' {1 k  T  @+ R$ B
  742.       break;: u) Z+ f4 K- }
  743.     case 3:; h( e; [% v2 S9 q6 A6 o5 W; ]' B- h
  744.       if(!Dn.Connected())- V3 {, n4 \7 \2 O8 `/ A
  745.       {) [  o/ U$ X1 \, \; V" H8 ?; i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);4 O! z9 U. S7 w) t( G5 c0 p
  747.         dwTotalFiles=1;% P1 z3 w% j- ~) J# T  Q: r
  748.         dwDownLoaded=0;
    . J4 Z0 }* N4 S  b7 V, r0 k/ [& R
  749.         bSilentStep=TRUE;
    2 a5 ?2 q$ W; P# g
  750.         bCompressed=FALSE;
    1 ?. R' J0 u+ D! E
  751.         strExtLocal.Empty();% z+ a( z2 [6 A
  752.         strFullName="checkversion.txt";& p- K5 U4 T* x! k/ z
  753.         dwProgramState=AP_CONNECT;  }" x; U% j" P1 e
  754.       }
    ( y3 c1 ^  w" ]% T$ u( r# r, I
  755.       dwStartUpSteps=4;7 f4 ~' t! |, D1 @& H6 ^2 H8 U
  756.       break;5 Z; Q. d# b7 I. s5 G
  757.     case 4:. w% x% l+ D9 w& [* _# L1 y+ P8 M; u
  758.       {
    % L$ i* `. g, r& D( k3 t: ^1 r
  759.         FILE *fp;& G" a" _5 t1 B+ @! }  n
  760.         char szString1[128];
    4 b4 z& |3 P# Y- Z# i$ O/ g
  761.         char szString2[128];4 p  Z- j3 q& V3 a* q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");6 j3 P! R7 {9 S9 m
  763.         if(fp)% f: {) m! ~& B8 d8 N6 p
  764.         {
    6 o7 r8 W% l! M: E
  765.           fscanf(fp,"%s",szString1);
    0 k$ o$ M; \( O# ~& s
  766.           fclose(fp);
    9 o' j; t6 ?3 p
  767.           fCheckVersion=atof(szString1);
    ' }/ A0 f+ K/ b2 V  \
  768.           fp=fopen(".\\checkversion.dat","r");8 O: r; D8 h0 u# |8 p4 G/ ]; W
  769.           if(fp)" g* f+ \- Q, {$ e$ S" h
  770.           {
    3 M8 {! X# v- F2 F* W6 y* O) R
  771.             fscanf(fp,"%s",szString2);5 R0 l, K: w% F2 j3 }: l8 }& |
  772.             fclose(fp);& ^$ x$ t- R5 H9 U
  773.             if(atof(szString1)!=atof(szString2))& r+ z* v" L0 ?8 I1 p9 F
  774.             {- K" V' o5 a2 j! Q- I& e6 Z
  775.               if(!Dn.Connected()). I5 L* {& \8 G+ K+ |3 J; C: {
  776.               {
    / L, U9 @) y( s- c
  777.                 bFirstUpdate=TRUE;
    1 L) _) N( C7 h- @. r3 G
  778.                 dwTotalFiles=1;, \+ X) D5 \$ W+ c3 x
  779.                 dwDownLoaded=0;
    * |0 u9 t- u& Y9 D. B9 Q$ K  g* \" I
  780.                 bSilentStep=FALSE;" i* K* D8 b; @" u" q1 w
  781.                 bCompressed=TRUE;$ o, D' |  k1 Q
  782.                 strExtLocal=".\\DownLoad\";' c: h' C( s' F
  783.                 strFullName="update.txt";
    ; `+ u$ i$ R: p! \' R
  784.                 dwProgramState=AP_CONNECT;+ V) K/ @( h/ u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 q7 L) {3 G  _4 i* `' |# W
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 S0 z: {; J# V0 p5 D. P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 t5 z" t& t0 M6 A& A/ ^9 o! @! L

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

' [/ w$ S- A6 V& g
# Z+ w2 ~0 z4 G

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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