CSUpdate.exe源代码

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

, [' O3 x* w* A! @6 m' ^+ E
  1. / RevApp.cpp : Defines the class behaviors for the application.9 L/ Y1 K8 o4 Y3 ]
  2. //
    ! o* W0 l/ s6 i
  3. ; h- }  B. w3 j7 G
  4. #include "stdafx.h"
    : Y% F/ o3 Y$ z" q& [2 R. [
  5. + |$ [( Q3 e  c" d0 O
  6. //#define UNICODE
    ; r) p- A, b3 K
  7. //#include <gdiplus.h>
    / ?* Z1 a9 B( k- v! m; L
  8. //using namespace Gdiplus;  d$ e/ H+ w! }! P- s. J

  9. 1 w$ P8 x/ U4 w; v+ _% a: m
  10. #include "RevApp.h"
    6 @$ h( V5 Y+ T5 g, S
  11. #include "RevAppDlg.h"
    & J) E, A2 o. x/ g' @6 F# o" [% {
  12. ( d1 I. L9 L7 p% C7 y
  13. #pragma warning(disable:4786)
    + g% q# c: ^& ?& u0 l' X7 x3 h2 W
  14. #include <map>
    7 }5 `0 ^4 d7 o3 q: k0 M/ k6 Q
  15. #include <list>
    ; o) D) F4 ]1 }5 d* O, \
  16. #include <direct.h>) m# n" i5 c* d6 ]5 y. G0 z0 }: R0 @
  17. - F) z* A' c+ f& o% R+ P9 X2 q
  18. #ifdef _DEBUG
    * X) K3 s+ K$ V
  19. #define new DEBUG_NEW
    ! N# F' ], Q: N: Z- D3 F) B
  20. #undef THIS_FILE. M  x2 K/ ]7 |4 w9 `. C: U
  21. static char THIS_FILE[] = __FILE__;6 P; ]" I6 [( d, L
  22. #endif
    ( a; ]5 g/ ?: H  n$ ~6 A; H
  23. #include "SkinResDef.h"5 F2 j7 I' ]! W- j
  24. #include "ChangeBG.h"" b0 H# V! l$ ?# U2 _- D6 M! j
  25. #include "AFXINET.H"
    2 T( J. r. v- Z7 ^* f

  26. 3 @! u' g; ]! r2 b! p
  27. #define TRADITIONAL_CHINESE 0
    2 T' b3 ~3 @7 b8 Y
  28. #define SIMPLIFY_CHINESE 12 ]! w  Q. G0 S/ K7 K
  29. #define ENGLISH 2, t7 S" b) R# H' [, x8 I
  30. int m_iLanguage = ENGLISH;
    1 j+ l* R' y2 h, a0 E
  31. /////////////////////////////////////////////////////////////////////////////
    0 {  m% T" U) e1 v( C
  32. // CRevAppApp# V6 u$ ?5 @/ g4 D
  33. 8 e9 K+ c  `1 T2 \
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 ^& c' a# v( N6 s  J% p9 Q) B
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 O% }! ~* j- f% j+ u* |2 x
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) O7 I) g7 d! u/ C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    9 A9 Z6 U0 g4 B& P1 @  ]1 |3 D; s
  38.         //}}AFX_MSG
    ' k4 o4 v! w  T# A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)+ ~3 y/ N5 ^; p. e( i
  40. END_MESSAGE_MAP()6 _' m' z/ f: s2 {# q

  41. 3 p. Q' P9 \5 g7 D& k. x& P3 M
  42. /////////////////////////////////////////////////////////////////////////////. z$ @, X0 I8 Y9 P" ?
  43. // CRevAppApp construction' A5 r/ m) T' T6 d. X6 J
  44. ) ?& @, A. B) u# i. i0 Y) F: W
  45. CRevAppApp::CRevAppApp()4 O! G) J/ C' D# K
  46. {
    % u0 X8 Q: Y2 c) {( _1 Z
  47.         // TODO: add construction code here,1 f* n* P! h' y% x1 {. p) [; t
  48.         // Place all significant initialization in InitInstance( S/ j) p+ T7 J3 @: ^" z
  49.   bDisplayIsBig5=FALSE;5 h3 D; a$ t$ E
  50.   bRestartUpdater=FALSE;
    " k. A& q( S3 j
  51.   bFinishUpdated=FALSE;
    5 j" h; b2 Z2 P1 L  v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" E1 O4 P  y$ A, {7 Y1 Y, u
  53.   InitChangeDataBig52GBKS();
    ( L# b, C# X/ v4 b1 `
  54.   InitChangeDataGBKS2Big5();, Y: n; w2 b7 J$ Y/ M* f
  55.         //
    1 u& l8 U! N" g
  56.         bClickRunExe = FALSE;
    " Y: v% R- E& @0 `
  57.         //- U( O/ i4 h; C  T
  58. }
    / L% d: x+ c4 ]8 ~

  59. ) X6 u* h6 _* p) c$ O
  60. CRevAppApp::~CRevAppApp()( D3 U( h4 ^6 }* y$ ^6 I0 [3 y
  61. {
    ( I8 g$ d" \2 [( G7 n+ c
  62.         // TODO: add construction code here,. k" m0 {5 c  r- g3 [$ Y5 S/ _" G
  63.         // Place all significant initialization in InitInstance5 f2 x$ J% ?  W  L% J1 i/ t! p8 o
  64.   EndChangeData();/ M) F4 p( d; ]/ V9 E4 `
  65. }
    5 D1 {3 O3 w. l- B

  66. 2 s1 j: p. X* W+ m  k. _
  67. /////////////////////////////////////////////////////////////////////////////
    3 P+ P  N* E7 ~/ x
  68. // The one and only CRevAppApp object# u7 J; m3 q* n* m0 h
  69. 3 D! b$ G  P( @5 p3 J8 Z+ i3 n( Y
  70. CRevAppApp theApp;  r/ H- g9 r$ K, O9 V

  71. - J( R9 ~0 ~0 V, g( F* h
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ r- o% N9 ~2 E8 l
  73. {
    " ]; _& g" E- }
  74.   int iEOF=0;+ Z" R# ^( s1 D( Y- w3 j/ U3 f
  75.   char szTempName[MAX_PATH];6 ~: X1 X* h% w+ N/ L, w# D; [% [
  76.   *szFileName=0;
    4 H+ C+ ?: P" F6 [
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' t% o- Y2 r2 m$ J
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    6 }, ^9 y' W  p$ A- n; R" y
  79.   {! r5 g- K5 e5 w$ [2 n4 K
  80.     strcpy(szFileName,&szTempName[1]);, b4 Q3 t7 J2 P# L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 [! d3 P: s, w+ ~
  82.     {9 y% ]2 k) F, A
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 L" m: j! V7 E9 |6 s$ h
  84.       strcat(szFileName," ");
      ^/ I6 n) N% a5 ]9 \  _
  85.       strcat(szFileName,szTempName);8 R1 x. h8 A  [) o- x# M
  86.     }' H, a. [# J' H3 m: O, U  ^! w
  87.     if(strlen(szFileName)>=1)
      v6 K6 U5 h0 H2 S
  88.     {
    " K7 [  c. |3 c. ^
  89.       szFileName[strlen(szFileName)-1]=0;
    1 C( K  b" H2 k" F
  90.     }; t' m3 z! S* O4 f' }, x6 X2 Q
  91.   }
    1 C' a1 ]9 J$ N  }+ j" ]
  92.   return szFileName;9 m. L2 `  ^" Y; ^1 @) P
  93. }: r% c, J; M: Z

  94. " g( |' i0 @! W2 g1 q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : u7 h6 n9 A2 X+ s7 ?0 v
  96. {9 c( Y: i: D& ], h* {
  97.   FILE *fp;0 [, ?: J, L5 w, V
  98.   char *key=NULL;" U5 h  O2 |: _* z& _
  99.   char version[MAX_PATH];
    3 R) ~2 K( Y! I# F
  100.   LPUPDATEFILE file,olds;, p/ ?" Y: j. V* K  p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    - E, w- F/ N2 Z  Q3 t

  102. 9 h! Z5 R5 M" m. a: i7 g3 g9 r
  103.   UpdateList.clear();' M7 O* I5 z+ \' @
  104.   UpdateFile.clear();
    9 q# m; p# ^9 |
  105.   if(GetFileAttributes(filename)==-1) return false;* r) ]- p4 A" r, z! I
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 Y; F5 Z9 u) n8 k0 ^  w/ }6 b
  107.   fscanf(fp,"%s",version);
    " r7 E! c1 j8 F  i" r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , Q0 }: W0 u  ~4 e7 V
  109.   while(fscanf(fp,"%s",version)!=EOF). }9 X' |# B. O) O
  110.   {2 o) u8 e: i9 u! Q: ]% F
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - C. @4 n- A9 X% ]; r# V
  112.     fscanf(fp,"%s",file->path);7 n( h  c! P2 X2 i
  113.     ReadFileNames(fp,file->file);
    0 V3 B* C& q, n  M2 x
  114.     strcpy(file->full,".");' I5 w) e' q6 B3 I# e
  115.     strcat(file->full,file->path);, q" g" N) P* A$ w3 F: @$ r& K
  116.     strcat(file->full,file->file);
    ' [/ d' u9 w9 }8 ^: |4 J7 O, N
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; R$ T; B$ `5 V; o, T1 C9 x5 \  _
  118.     {2 M- [( i: x! i( ~7 O+ K5 ~
  119.       file->vers=(float)atof(version);
    & \( x/ _* v* z  @% i
  120.       UpdateList.push_back(file->full);
    * B6 |( q, u+ Y( ?* N4 d) o/ R
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + e$ r& U8 d4 p' G# e: E! I
  122.     }
    0 v6 x, n1 l* [
  123.     else9 E9 M1 c% v! D. n# d  [1 k4 Z
  124.     {) I5 W2 T  p* Q7 W
  125.       olds=(*p).second;
    % k+ f& v5 |0 a" q
  126.       if(olds->vers<(float)atof(version))  U; ?. o. [' G- X7 t' r$ q' y' [
  127.       {" z5 m+ t0 R3 ~2 ~
  128.         olds->vers=(float)atof(version);
    0 H% f& J( k) \# h* j, B8 z
  129.       }
    5 _( U% t  x6 ~/ x0 K+ ~- ^, U0 H
  130.       free(file);: S# Q# M# {3 |. a  K
  131.     }
    2 v- a8 V  p# H
  132.   }5 d2 u: \$ x/ U# A6 D
  133.   fclose(fp);2 z* |% R$ w0 }# e" e
  134.   return true;, h) w. A3 r9 V/ E9 J- P  k
  135. }, s  ]7 ^3 L# B. e4 ?" i( _
  136. 8 }$ @) L  f' |
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + I7 v7 q  U6 l) |% k
  138. {- L7 Y6 D5 ~6 \0 K. d, y
  139.   TCHAR  szFull[MAX_PATH];; J5 R+ q) S4 Z0 F: F
  140.   TCHAR *token,*inter;$ j! Q/ d( ~2 n0 O
  141.   *szPath=0;9 w4 }9 e" A5 `/ U; w2 z- G' ^! H
  142.   strcpy(szFull,szFullPath);9 ^, j6 C6 Y. D/ K
  143.   token=strtok(szFull,"\\/");
    ) @" w, R6 v/ C0 @  {
  144.   inter=token;
    5 ^7 ~& b$ N3 f7 Q5 @
  145.   while(token=strtok(NULL,"\\/"))% S- V2 H6 ^$ Z: f8 y8 V
  146.   {
    * }  m* _- o( h5 o8 N
  147.     strcat(szPath,inter);7 k$ m& `# i1 |& F2 X
  148.     strcat(szPath,"\");8 o9 _( c' ]2 |: [7 X' I8 y. F- a/ s
  149.     inter=token;. I5 z+ P/ N7 o( c
  150.   }) Y! ~5 b  S5 w) V  @7 e; }
  151.   return strlen(szPath);# C& @  x8 `4 U* r6 d/ M7 o. ?- O) u
  152. }8 E" u( F4 X3 c$ ]1 _) F

  153. ! Y7 K( F1 ]+ e9 E* `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). l2 v" e- r3 B3 k& H
  155. {
    2 Q2 s5 u) Z  n/ Y" E- i, ^; _+ ?
  156.   DWORD attrib=GetFileAttributes(Target);1 x9 O' G* v+ e' W  |/ t4 {
  157.   if(attrib!=-1)% `" D1 k  w8 e8 f. _
  158.   {
    & m+ D& L* o( b) ~! M2 l4 ~1 R
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    3 F6 i* t: e/ @' N4 B3 \7 v
  160.     {
    , n4 P. g. G, F, R1 a1 F  V
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + O  k0 g( J1 m# P% F
  162.       SetFileAttributes(Target,attrib);1 w1 }1 ?8 A: c5 a; g& x1 E
  163.     }
    / b; @8 R" a  F" W" {
  164.   }
    - m' a" d" ~1 G& D9 ]5 E/ j/ L' q8 x
  165.   CopyFile(Source,Target,Erase);  ^0 @$ w& x/ l0 C: B4 P
  166. }
    - H4 {1 r7 C# T# q0 l- c" ~3 C
  167.   i6 F. Z  Q$ Y+ f9 J& F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)7 Z: E7 x  [" l1 k% v" G5 i
  169. {: Z7 k% W0 J& |' B" }
  170.      FILE *fp;. s4 y- z, G. u$ K
  171.      char  szBuffer[8192];
    ' e1 d( r- Z5 @8 V% z
  172.   va_list  argptr;
    $ i7 H- a3 l3 n3 M

  173. 1 L9 E: O* A0 ^, J% h. o
  174.         va_start(argptr,message);
    ) k; K8 E8 |( E+ Q9 l3 U7 ^
  175.         vsprintf(szBuffer,message,argptr);
    ; q1 l9 n& E" g
  176.         va_end(argptr);: b2 p, |& X- n0 l2 h5 C1 Q
  177.   fp=fopen(FileName,"a");
    # Q; T0 Z/ U, q
  178.   if(fp)
    7 `+ U7 I$ A' ^2 D* h
  179.   {
      N$ M8 e! c) t& J& `5 W2 o! y- _
  180.     fprintf(fp,szBuffer);1 g- Y/ R/ l6 X9 v/ G3 x8 Q6 l4 a7 t
  181.     fclose(fp);8 M6 T3 ~+ Z! H& u
  182.           _flushall();. K  u* e) X5 p+ h1 Y
  183.   }4 ?* F% X1 b% p5 e5 ~- _3 {
  184. }
    ) D! N/ s5 o4 [: |
  185. 1 L9 s% ?" f" G: @( c
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ! ?; s! |2 Z* W  |- C6 B7 T
  187. {
    8 C  ]1 l7 E8 P
  188.      FILE *fp;' ]& f- F. F+ o& `0 O  h) Z7 M! N
  189.     DWORD  attrib;
    - W" o+ u  j6 b% c
  190.   attrib=GetFileAttributes(FileName);! w+ N2 d  ]& g0 Y% V' S, }# L7 n
  191.   if(attrib!=-1)# M; t5 X9 E) G, ?
  192.   {
    7 z& y9 y6 }$ p% O9 L" ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 T8 N6 Q8 z4 U& [& {
  194.     if(!SetFileAttributes(FileName,attrib))
    8 j5 |2 @( ~. {/ }" ~$ T( H
  195.     {0 s% g* p! C2 s; ?& D! [' E3 o
  196.       return FALSE;
    $ \) Y3 H+ P' A1 l  H
  197.     }6 d( y' J( y5 p1 D
  198.   }
    4 g5 V4 E) r% t$ |) v, N
  199.   fp=fopen(FileName,"wb");
    , V$ w5 s% q7 ~% X: m( k
  200.   if(fp)& |/ L3 W1 u( o  A
  201.   {
    : Q! x& z; i6 Y3 R6 |) w. e
  202.     fclose(fp);  A( g1 z  c4 I* I+ g) H2 N* \
  203.   }
    ! B; y7 C/ ?* _4 {) ~
  204.   return TRUE;
    . z0 B! q" [: @4 n: M$ W
  205. }) e7 w0 ]: q  W( x' r# E1 b

  206. " v  [2 U2 L! L; b1 e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ! q1 ~1 p7 }; v( k7 }/ j
  208. {3 c" K7 L$ f+ `  x& t& Z- O6 Y/ ?
  209.   char filename[MAX_PATH];
    4 ?) _5 f5 s+ k" j) B2 W  j
  210.   LPUPDATEFILE file,olds;
    % S% a1 O9 i. ?7 r
  211.   std::map<int,CString>::iterator i;
    . }, O3 X# ~2 ~
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) |- |2 j" g  ^7 r: Z5 _! \
  213.   std::list<CString>::iterator l;: [4 E- B( ^+ r: S) G8 U! h

  214. 6 M) A# i# f2 f" W& L& q- F
  215.   if(bFirstUpdate)2 o- x( @5 E" O% T) Q7 x. ?
  216.   {
    2 U6 b9 t1 v  k" i( r7 y2 @
  217.     dwCurrFile=0;
    5 F0 x0 V' e8 I
  218.     bFirstUpdate=FALSE;
    " l1 C+ I" @/ d3 V
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    : q$ ~7 I5 ^7 B; a
  220.     {
    : Q1 f, X* u" R; c* S
  221.       dwTotalFiles=UpdateLocal.size();8 Q( D; Y4 v, c! q+ P3 ]6 {3 f6 ~% D
  222.       dwDownLoaded=0;
    ' L5 R! ?% c* y3 t) U. a! a+ P# y
  223.       bSilentStep=FALSE;
    & u/ s  s- D5 U& l: x& h
  224.       bCompressed=TRUE;9 ?# G" q4 t3 b& @
  225.       strExtLocal.Empty();- l; ]2 E* d$ M( c
  226.       strFullName=(*i).second;
    8 T* s4 v) X+ s( Y
  227.       dwProgramState=AP_CONNECT;1 L* p* @3 j- m/ z* i
  228.       return TRUE;) F0 {8 h8 O2 h: |* P# \
  229.     }
    ! n/ j- l1 M) W: K# x+ G/ A& E& y0 H
  230.   }
    * n* g7 C" Z5 E# D
  231.   else if(bRestartUpdater==FALSE)4 X' [( B0 w4 P; c5 V2 [: t
  232.   {
    % ]/ A) @& }+ t( b# C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' Q  |/ O8 Q# ?' k
  234.     {- A' D% y; T+ t1 P  F! l! H
  235.       file=(*p).second;& x& F4 D0 e4 A$ P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 I7 C8 f( [: C" U* c1 v4 {
  237.       {
    # ^9 _0 w3 E7 M, a
  238.         olds=(*p).second;
    ( W& B4 H3 H# a2 ?8 R' b
  239.         olds->vers=file->vers;
    ) U2 u) p, b4 N' r) K6 `
  240.       }+ O6 E; E" V1 ]# `+ e1 O0 Z
  241.       else( M' |0 j# o  E8 }4 k+ v
  242.       {* ^: U. k( z8 M) ]: K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / ^( g/ q4 f* p& T  S! n
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 `. \6 f  i" R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ Z( @% ^* ~' d+ }6 d8 F+ z/ g2 R
  246.       }
    5 l9 D  `3 e2 e4 X" Z1 r
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    , F/ H' {! C. J7 e
  248.       sprintf(filename,"(%s)",file->file);& C" s- @+ f9 f% K  C
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! ?5 G0 h: p8 Z. f' z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    9 S1 v4 `( ?0 w0 G& [& X$ B
  251.     }
    9 j/ x8 X% S/ v2 J" }' d" y. X& {& q4 F
  252.     dwCurrFile++;
    : p# J1 o0 _4 s0 U; k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , a$ Z6 K2 H- I* O
  254.     {
    / s1 a9 }3 h% V3 C8 A% \. y7 C  i
  255.       bSilentStep=FALSE;
    ! E+ E& `8 @$ S% Q
  256.       bCompressed=TRUE;2 C: q( P. q. Z7 Q
  257.       strExtLocal.Empty();8 ^+ F# U5 N5 b9 t3 V
  258.       strFullName=(*i).second;
    3 {+ |* s# @. q3 w$ D9 \3 m
  259.       dwProgramState=AP_CONNECT;6 a- [8 x$ n' ^% P" x# k# r
  260.       return TRUE;& c# T: i7 y  R
  261.     }, j. k  E  W5 U- x; n
  262.     if(!bRestartUpdater), f9 Y/ a: W& y: A+ d9 M5 ^" O( T
  263.     {
      _  y2 K- ~% P
  264.       int iCurrSize,iFileSize;& w/ t& I, }3 M7 _3 u3 S' v
  265.       iCurrSize=0;: x% E0 C8 }; N9 M" w' m3 F* I
  266.       iFileSize=UpdateList2.size();
    + \/ K6 _# z4 m0 X/ w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # e: m- v/ k% H; j0 M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! A) U( N6 q9 M/ S' p+ P, B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 O- t; t; Y6 @/ v# t
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % v0 Y6 k/ e  q& a( f" g4 Z
  271.       Fclearf(".\\update.dat");/ ?  }# F: i6 C' U4 O
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( R# z( q" J2 h" F, h! E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 _, D7 F* d/ ~; E) `8 @
  274.       {$ M- U+ W" t8 l5 c" K6 r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 f/ d/ {- ^' I
  276.         {9 i4 G& p) V; a0 B
  277.           file=(*p).second;  u' w  O' A/ L% }( n# C- f! M
  278.           sprintf(filename,"(%s)",file->file);
    0 |8 i: @8 Z* P0 o  m" R$ q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ E6 a* j( T6 s3 P8 s/ J
  280.           iCurrSize++;
    6 c+ [. Q* M: c7 G) C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 p7 p9 D( Z9 s8 J7 N$ g2 K
  282.         }/ C4 B, K* p7 h, A* F' B
  283.       }1 j$ ?" G6 t6 V1 H
  284.       unlink(".\\update.txt");# M/ c) S% V8 V1 E# Y5 q
  285.       unlink(".\\update.tmp");
    : |5 ]" Q# M7 f3 k  T: S. `8 F! V
  286.       Fclearf(".\\checkversion.dat");2 C- n; E$ {9 a( ?6 r
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 m9 l$ ~/ p8 e) M+ X7 U
  288.       if(UpdateLocal.size())
    % E0 Y1 O  V+ y+ g7 W% D! O5 `
  289.       {
    * i* r/ P3 |* e( i( s7 Q/ H# Z# j3 g
  290.         UpdateLocal.clear();
    # ~. E6 M" s6 o) Z$ c! i. P
  291.       }
    ! [5 Z& E3 b( n6 _  ~1 O1 @
  292.       if(UpdateFile3.size())/ a  q! E4 ~# k4 z4 ^2 {0 |
  293.       {
    & U0 ]# w$ ?9 v5 k3 S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * U4 z$ ~; a8 b9 }
  295.         {
    ( A5 |" q: W  p; v( N
  296.           file=(*p).second;6 Q( \2 Y7 ^! m9 k$ k7 _* K: u
  297.           free(file);; M- @0 e$ U/ v
  298.         }
    * j# ^; S+ O: H3 g! d. P: X
  299.         UpdateFile3.clear();  E+ q7 K, p/ \, j9 L% V
  300.         UpdateList3.clear();8 v$ d" p# b# D/ g# A3 v1 q
  301.       }* n: D3 X. T  a
  302.       if(UpdateFile2.size())- Q/ a. [& n. ~! R9 s8 z6 y
  303.       {' ]& P" H3 a: B, G, \* C$ d
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - w) z$ C6 d$ P2 u1 L3 h
  305.         {
    5 b1 ]1 J1 H" e* W1 [8 e; d
  306.           file=(*p).second;/ j' r  G& Y" M8 u
  307.           free(file);
    ) G! ?! X  t# E( G
  308.         }# J9 u3 x% ?8 X1 j" B, f
  309.         UpdateFile2.clear();
    1 r: F+ b0 Z* \+ Z6 k
  310.         UpdateList2.clear();$ G0 S& i$ ~' E4 f8 M) G
  311.       }
    + `, }. U; x, S
  312.       if(UpdateFile1.size()); s1 k# T% J( S4 Z" s  Q
  313.       {+ y0 I! _6 ~. Z3 A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 `1 m# f4 J) s! \
  315.         {9 a  {0 U8 [7 K* f* c$ p
  316.           file=(*p).second;$ p( l* W: [( I! J- E  J( }0 q
  317.           free(file);
    ' n7 `7 d, |9 ?) R. v  f
  318.         }" ^6 ]9 m- q6 ~: A" o. Q
  319.         UpdateFile1.clear();: f* M  o# z8 |6 e) r5 ~
  320.         UpdateList1.clear();
    . A  |5 S6 P! K2 g( r& Z
  321.       }
    - M- y) ^( u$ ^% \: E
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    * M% a( T' s7 G3 U8 X, ~$ r
  323.     }
    0 }8 _3 B# Z' H4 {  C$ a- U
  324.   }" D2 X, y7 ?# N3 Q7 Y
  325.   return FALSE;( z. Z  g6 }6 ]% l5 R& @" n' e
  326. }
    # }( U4 o7 e/ @( S% [1 r
  327. ( q) L1 ~, E! F4 [
  328. void CRevAppApp::ClearAll(void)7 j# t- E# L( n8 J
  329. {
    , o$ ?2 W! \- e9 _1 z
  330.   LPUPDATEFILE file;
    4 `7 x- K( ]5 e0 P% _$ w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ A( t, \$ n+ ]" q/ }2 f
  332. ' L2 }& p- @& m6 M( M
  333.   if(UpdateLocal.size())# u3 i* `: X5 V, I, r6 \
  334.   {! G5 ^* `' L6 ~. q- g) _
  335.     UpdateLocal.clear();. Q! f8 c4 d/ n7 ]0 w/ X! D
  336.   }  A. `3 @! \; G+ L& E5 g
  337.   if(UpdateFile3.size())
    / _, w- b  w* E  p5 `% |2 T4 I+ x
  338.   {; }. T  ?* o) B" \0 w( ]7 a
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& v  n# m+ n8 @+ q$ L! ]7 q
  340.     {* V1 {( ^3 }! a
  341.       file=(*p).second;
    ( @, V( ~) K0 m' P
  342.       free(file);
      i" Q8 V- P* O, G; F, q
  343.     }
    6 Z7 n) @, R/ k7 m& p
  344.     UpdateFile3.clear();- F0 P* Q  L3 e+ Y
  345.     UpdateList3.clear();$ z  g+ }6 W. @% K1 }: @* f
  346.   }
    7 i  j# u# G% [7 M. J! ~
  347.   if(UpdateFile2.size())  ?" T8 }) r+ h  A/ K: X% V
  348.   {
    5 `' T0 U. p& s- F0 f" v6 V2 s, ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)8 w  P0 [' V. |/ r: O) A
  350.     {
    # i9 u0 Y+ ~' m+ P
  351.       file=(*p).second;% }# P  S, l+ j8 X& L5 W: l& G. c" I
  352.       free(file);
    . n) j# \# k8 B- l1 s7 x
  353.     }! h' A4 C9 b/ q
  354.     UpdateFile2.clear();
    + x7 r; V2 f' s, J
  355.     UpdateList2.clear();: C1 @8 O3 H: L# C$ o/ P' d
  356.   }% G* ~3 s8 a1 q  Y
  357.   if(UpdateFile1.size())
    6 l9 |5 K2 c' p, Y. ~0 H% a5 Q8 @
  358.   {) k/ J! \' [2 l- G
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 ^- E" [3 {# `- \8 F
  360.     {
    5 F8 Q8 H$ j9 `  `: }
  361.       file=(*p).second;5 k( |4 I0 r; Y1 d. T
  362.       free(file);
    9 Q6 V2 V' O+ O8 r% f
  363.     }
    ' B) o4 q0 H, a; d7 z: F
  364.     UpdateFile1.clear();; _9 Y1 b( x; e; [% P+ O
  365.     UpdateList1.clear();" b* ^" R1 k- o7 i3 r. K/ I
  366.   }. N" M6 d/ d9 Q/ J$ c, ^$ ]
  367. }  * `  U  P  a6 A' S
  368.   
    4 z3 t+ x% W: v3 j& Y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 M( }& A8 a; W2 ^) }& U: v
  370. {/ J' M9 R2 I* p' |( B
  371.   int c;% }/ s) m0 P' w) O4 _/ w/ S
  372.   LPUPDATEFILE file1,file2;
    1 M2 J; T5 g+ I! I: @, e
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # c/ x# t: |# e3 R5 n* J
  374.   std::list<CString>::iterator l;! n. w2 g" b5 S% i  N' e
  375. 9 E2 b9 }0 S' l) b; A! G
  376.   UpdateLocal.clear();
    ( l- M2 R. f  b$ k" j8 J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; |5 N  X! k) i. j2 J2 Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 L9 Y6 V$ P0 V( ]$ F7 n9 @7 Y# F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' D2 q# F6 P- ?: b7 i+ C; [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# g- }& ]. Y$ `; O
  381.   if(UpdateFile3.size())
    ( ?5 i$ `6 b; l8 c! D; N
  382.   {
    3 }. @4 [1 G/ e% S& H6 t! G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), U  l, H4 E. q: f8 ?: v) Q
  384.     {
    . L) h  e8 X" }2 e7 L6 L
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! w$ W5 ^, N+ e7 [0 t" u9 {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * N* W3 Q$ @# [% Q
  387.       {( ~4 v. O0 r+ p  l, A( ]* }( n& H
  388.         file1=(LPUPDATEFILE)(*p).second;
    0 h( R5 P2 w9 _( H* j
  389.         file1->vers=file2->vers;6 [# V5 J* d: L* {
  390.       }$ b& U3 Y4 s: s; G. P
  391.       else
    ' a' s. ?1 G1 M) D; }7 P# I
  392.       {
    + s+ Y- k8 E* _0 g! h
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 ?6 Y, z) r" I$ I. k4 ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));. s8 y; ]5 `/ n  h& {. a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 Q& h3 M' i: {
  396.       }( ~, ?3 O) K6 L
  397.     }" j  D8 a4 h. D) k. t. B5 ]
  398.   }/ K. }* f2 u* U+ n* u
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)8 ?: [& i3 w3 u1 \7 X8 l6 p
  400.   {
    4 I: z0 b, \1 q: D$ a* |
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ i. r9 W+ }1 L  R- P- D2 m
  402.     {2 l* I1 E+ I# l+ F
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 g; _9 i! c. ~  y  u, C1 v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): m; T+ L& I8 d
  405.       {
    ( F, Z, B: Y7 [
  406.         file1=(LPUPDATEFILE)(*p).second;5 s- @3 n9 n' F# Q$ i. g
  407.         if(file1->vers!=file2->vers)
    - x, ?) ?$ j. c  l8 x% G
  408.         {
    * U. U7 @- s2 [- ]
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : F. r7 l0 q- X6 q
  410.           c++;' x8 S+ C, D) e7 f
  411.         }
    , B6 R* ~7 B3 l8 l8 t  i# W
  412.       }
    ! \1 M& K" I* R9 n7 x
  413.       else4 s- `- @4 W- B6 p. ^
  414.       {
    4 E) I  L  `1 {4 ?
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , Y; I3 J" Z/ @8 L9 I% B7 O* _
  416.         c++;) ~: d7 ~3 v! Y# \8 V
  417.       }
    . B! D8 f& X& b1 m' i8 O; b; e( i% T) a
  418.     }
    1 }7 M# |0 g$ g6 K) j1 F7 }
  419.   }2 m' a# w/ J% c0 g
  420.   unlink(".\\DownLoad\\update.txt");
    8 B$ n. E( P: c$ \3 t# i
  421.   if(UpdateLocal.size()) return TRUE;
    * l4 I4 e7 I( Q# ^% }6 G. U) d5 a
  422.   else                   return FALSE;& C3 q, W2 M9 M4 ]
  423. }- B) E9 k! s" c4 M. c  f7 R) l

  424. + y: T! r6 i: i8 |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    : i3 J; z/ z/ i- Q4 {0 k) N+ k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    8 o6 {+ u; G  U3 x7 C6 S9 a  x
  427. : U( C7 \: N) K- Q6 ^0 C- T: B/ P

  428. : R( S( Z& g* w# ^, d3 m
  429. & l: k. O7 \# n7 q0 G2 X% D  v
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), Y! ^% r0 G  B$ Q9 c$ Y0 N/ ^2 X
  431. {
    2 ^, Q0 u2 W$ ^
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    6 ?  \7 ]" M! ^0 s; {  z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 N5 o0 r1 j$ K" \$ W( P2 K
  434.   {8 g, Y$ l" g$ F- I, Q, N+ M4 s
  435.     char szLanguage[50];' K3 V3 {4 H/ t: J
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 H! D9 d8 N7 u9 U. }
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : a7 X& k. W7 K) s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 ?8 m# m, z' ?4 @5 R
  439.     else                                   m_iLanguage=ENGLISH;
    . X4 F8 E  b+ r2 @3 Q
  440.     char szRegister[100];- ?# [! |3 [+ ~, v3 s; u
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; L( i3 h8 Q9 i9 D
  442.     strRegsName=szRegister;+ P3 F+ Z' T: v& T+ E( G
  443.     char szPatchURL[100];
    ) F: }6 ~! h( I/ [& W0 q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 ?7 v- h7 m. L  z+ W  I$ |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: ?/ P8 X8 a! ^1 x" e
  446.   }
    7 \, o# w7 i" g
  447.   else* n( W4 o: |) H1 x
  448.   {
    1 L2 k8 q* t7 H
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - q( x- E5 J3 r2 `7 {+ b
  450.     strRegsName=DEFAULT_REG_URL;+ u4 W1 h3 e! T
  451.   }
    ' V' C$ e7 I, d# N
  452.   if(GetFileAttributes("hosts.ini")!=-1); b$ J8 P; |0 j4 A% L
  453.   {
    / [. `. z$ C: V4 o' O: O: u
  454.     char szIP[50];! c6 v: {1 Z, k, K4 B# U9 Y7 _
  455.     char szDIR[300];
    & r, S5 f  z0 C* T3 }3 y3 d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))6 }) H9 A5 I. f4 v" p
  457.     {
    0 n" N4 k. e5 v& V3 _! S: R$ x: j
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: ]+ |$ p  `. U2 O7 X+ K' J
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    # c# I' i+ i; ?5 e: d% j/ c( V
  460.       strHostName=szIP;2 F! n" |! a( f% z
  461.       strHostPath.Format("/%s",szDIR);  V4 a. y+ `& ?* A5 Q: V0 e
  462.     }
    0 G* j+ B& b& M' U2 X3 e; a# T
  463.     else! Q2 G# U3 _' e- g# f
  464.     {
    9 T: z! s- U+ p6 a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + o" @: g+ D. x" U& x% w- a1 u
  466.       {1 I2 _) V' A; m) m" F- K4 ~
  467.         char szLanguage[50];' Y: n0 ~. v) J/ I" k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 v. N% W- h1 Z* o( F- R, L# \* y8 w% O
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. \+ d$ l! \- s' b; D" v, a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ U9 M. F8 ~9 K: ~7 I
  471.         else                                   m_iLanguage=ENGLISH;
    + d( ?0 x) S9 `( @+ ^: L/ ^
  472.         char szRegister[100];
    ( f9 `5 a7 \4 k
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 q2 c6 `9 i" |" r6 x9 [
  474.         strRegsName=szRegister;
    : ~2 M7 L3 @: t: ^( E
  475.         char szPatchURL[100];
    ( D+ a0 M3 L$ @2 G* e
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ G' L, r, t% }: J1 v! \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! m; s8 b2 ?. ^  z3 _7 Y) J
  478.       }) u' N$ ^/ B' L: ^
  479.       else' N6 o2 W) {* l0 s2 N+ ^
  480.       {/ }  p1 @# c0 c) i6 L$ q# C
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * y; g, X4 ~, c. R* K! ]5 n
  482.         strRegsName=DEFAULT_REG_URL;  A6 g( E% n8 |
  483.       }5 u5 e( `1 y) L+ ]! _
  484.     }
    * q3 X! f+ o9 `) H) \  n- x
  485.   }" L( g1 q7 \6 n4 o8 t: a4 w3 p
  486.   return true;* c9 y; j/ E3 _, M- i  h: s4 ^
  487. }
    * w% ]1 `) V* }/ p# u$ Q/ `  O0 {

  488. ( T  y8 p" o+ v1 Q: e/ K6 o6 d
  489. #include ".\ZLib\unzip.h"! p, C) n4 d/ r6 k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    : H9 f# k0 J8 l9 ^' J7 k+ I
  491. /////////////////////////////////////////////////////////////////////////////5 k/ j; S* h' a0 l% n
  492. // CRevAppApp initialization
    ! v  ~0 H4 t6 {4 y. ?; z
  493. ' \' A- ^9 {7 k0 t8 t1 F
  494. BOOL CRevAppApp::InitInstance()
    7 V1 r# N5 ?2 X4 e
  495. {$ n/ S5 R' V8 y6 E- C' Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 D, u. ^# O& W, g
  497. / F1 X0 l9 w4 z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 c* b1 Z8 v. W" [% e! K! Y" j
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - n: S( _* C) O' P5 y- k' K
  500.   {
    5 O1 w" X3 X, p' E% Z! w: ^
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / {( b7 h9 r6 N) u# N; @$ o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( n1 x' Z5 e' A! R' C, J" I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) u( K$ d" e6 q. R
  504.     {2 {. b3 J3 ~' Q& f' k
  505.       strcpy(szPath,szPathTarget);
    6 R7 K% n, m4 x: i. J! z( ]$ B0 s
  506.       SetCurrentDirectory(szPath);& ]9 _; L, e2 H$ J3 h  F5 j
  507.     }. `. G7 o3 i3 _; `' i
  508.   }* A$ J3 i' |2 }; i; A5 }
  509. #ifdef _DEBUG6 H" n. O. t: W% R$ v
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 q: p. e4 m' {8 K  [0 r: v# v
  511. #else
    & T# G2 Z! c/ X/ B! \- y+ p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" O9 Z8 ~* k6 o% U' c
  513. #endif
    6 N- [. F( c* A4 O' f- d: D
  514.   {
    $ w" I0 M4 J6 J: h( V' ~
  515.     char tempFileName[MAX_PATH];
    % M6 W/ {2 B9 g" n
  516.     strcpy(tempFileName,szPathSource);/ p' l# d" r0 W) q  M( R: H
  517.     tempFileName[strlen(szPathSource)-12]=0;
    . G' ~* _2 H0 Q2 ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * H" Z( T& l& X5 J' j- h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    0 a* l' F& S% A* y/ {( A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 Q4 y- @2 M" t: p( ?4 k; S
  521.     return TRUE;" Z% P' C: I* C& n3 R; s
  522.   }
    : Q& u5 n, `8 r* s' ]
  523.   // Nuke 0118: Delete run.exe7 h  ~& w# d/ L$ K, ~, z$ U' ?3 j5 L
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) I& s! I( K9 b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    5 \' p. F$ ]& V7 B
  526.   if(!ReadCfgFile("Config.ini"))2 U! ?, l3 k) Q* R- f
  527.   {
    3 M4 }! u- U5 O, r% _7 i& O$ a
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);  ]' X- W6 n6 r0 ^0 p
  529.     return TRUE;
    8 x4 ^: H, v1 ]+ y* @( l& ?0 f
  530.   }& ^2 L+ b# }0 ^! S2 n; K
  531.   HANDLE mutex;
    1 j, l1 @; D% I' Z
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    1 }) f- T- Q* `) N& v2 v' E! q
  533.   {
    ' N" {  Z4 o3 x$ `0 Y! F3 E( j
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 r6 m% D+ z5 c) {+ r# c
  535.     {
    $ d7 X5 z6 ?" ?0 L
  536.       CloseHandle(mutex);
    + T# W" v4 z) e* R8 r9 R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ) A7 V8 ~2 h- _/ s3 {% @
  538.       return TRUE;6 H, K$ [4 G- S; z6 Z3 V
  539.     }8 ]  [: o' [0 j4 l2 p
  540.   }  
    ( L# D) P* V7 j9 [5 V/ O$ b
  541.   CloseHandle(mutex);
    % N4 \7 F$ g9 {% c

  542. ! B9 X* p8 m# |- y9 P
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. V9 O) ~$ E6 H( ^

  544. : P- {6 A2 r) J' \& Q/ \
  545.         AfxEnableControlContainer();
    * K, L7 S4 u( D9 [! Y
  546. : j4 u7 s$ A/ t9 A1 R# N3 y2 I
  547.   bCanUpdate=FALSE;! P1 w5 w; w1 y- V
  548.   dwStartUpSteps=1;3 Z- C3 F8 ?7 P9 H9 K4 Z4 z
  549.   dwProgramState=AP_NOTHING;; L& H9 e+ {; r* u
  550. 3 t: t5 X  f6 o2 h* i8 r
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);8 p$ }& l8 D: ]& X- l& R* u
  552. , S, h: e; Q5 I% ]
  553.         // Standard initialization1 ^2 V; y! r! L* [
  554.         // If you are not using these features and wish to reduce the size+ `- Z9 G' n- Q
  555.         //  of your final executable, you should remove from the following
    8 o1 t- ]4 H" b2 v4 T# R
  556.         //  the specific initialization routines you do not need.
    1 T, y" ~0 K' P3 v0 Q1 N& o4 l  d
  557. & H7 y1 K# M; t* z
  558. #ifdef _AFXDLL  o, x, `8 K2 x$ \9 L8 q3 t
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + m5 ?  n  l) X. B
  560. #else
    : y$ d7 _9 `: H( S# H2 j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* q! T7 Q+ j% o
  562. #endif
    ! |# X6 T) V0 b( l

  563. / r3 E) Z3 {2 E" r0 i3 D3 d
  564.   dlg=new CRevAppDlg;  e- m: N" g$ c/ N# v  r  |; s) s4 R
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + _1 q! o( H) ?1 U) W2 w
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ A! f2 D6 i$ G
  567.   m_pMainWnd=dlg;
    0 T: d# _. E8 X$ v5 n
  568. . \+ Y3 n1 Z! c1 J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 Y! \, a% @  f, P, Z* m$ A9 e# y

  570. ( Q# d" @, o2 S- O8 J$ S
  571. //  GdiplusStartupInput gdiplusStartupInput;& X3 l/ N3 Y, s! M
  572. //  ULONG_PTR gdiplusToken;3 r; ]* ~5 z# F- _% v
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' `$ `5 M) A) Z' U/ N

  574. ! T0 b; k7 s( A7 n
  575. //        CRevAppDlg dlg;
    $ M! M! W7 W& D' f, C/ U+ F% F
  576. //        int nResponse = dlg.DoModal();8 a" h, @. P0 K. ^, P: ^
  577. //        if (nResponse == IDOK)5 E$ c$ X8 U# B* A! K, |+ Z
  578. //        {& b7 r, ]3 ^% |' D
  579. //                // TODO: Place code here to handle when the dialog is
    0 T7 Q# t9 W; X3 ]$ E
  580. //                //  dismissed with OK
    8 l9 \& Z1 g8 o
  581. //        }- q; k  h6 E# D0 a; s1 I1 R( D
  582. //        else if (nResponse == IDCANCEL)' R0 x; C* f; N$ Y& U1 C$ c
  583. //        {
    # g1 S% j8 M: z1 W
  584. //                // TODO: Place code here to handle when the dialog is
      }8 Z- e" g) M
  585. //                //  dismissed with Cancel
    ; P3 i: O; v- ~  Y9 n2 s
  586. //        }
      O' p9 m6 Y. [# F' V( U
  587. 0 w0 T7 y' U# N: C: ]
  588.         // Since the dialog has been closed, return FALSE so that we exit the" l7 s3 ]) e/ m& R& E/ {5 c
  589.         //  application, rather than start the application's message pump.
    ' S: G) O( ?$ a3 K4 V
  590.         return TRUE;% U- b( a1 \  o$ y5 _, r! [
  591. }
    ' ?. a6 I9 S2 k( b( X4 J5 U
  592. 6 S5 Q# J) |/ j0 n) K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) x- a7 r( _6 s2 H# e7 S
  594. {
    . W* E5 s7 b, d  ^6 z# w9 U7 D1 I4 x! ]  ~2 `
  595.   int i;
    ; F6 H8 u* w, k$ I' r
  596.   char *szRet;
    % m: S9 R5 {' @) s
  597. ! b! p& ^4 B; i- `' i& s3 G
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 B& ]: Y  S7 F: X5 Z4 O
  599.   if(sztoken)  E7 v- `  z" q/ r1 Y
  600.   {
    / w2 F& Y; a: u6 J0 I! O6 _6 Q
  601.     szRet=&sztoken[itoken];
    9 _( f+ s* d7 d5 S
  602.     while(sztoken[itoken])
    9 M# p- B* W  h0 p1 S5 b0 L
  603.     {
    ( x) U: L( b7 h, N
  604.       for(i=0;i<(int)strlen(token);i++)+ Z- B( P. G& m3 e
  605.       {
    7 w7 M! @4 M$ ]* p" A
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 Q/ P# Y. R& k9 \
  607.         {3 r3 u, t5 j. G% v: y8 N& c! Y6 C
  608.           sztoken[itoken++]=0;3 I% j. }. L( k, T8 C
  609.           sztoken[itoken++]=0;* C6 J+ ]: w) @! R
  610.           return szRet;
    ( j5 d" a$ n! U. y
  611.         }8 N/ E2 L9 n3 P( a/ V
  612.       }1 \5 f5 S/ K( x" V' y( s4 ?. ?% a, z
  613.       itoken++;
    3 I1 a( W* Y- B" k! L* O1 G
  614.     }) T$ N1 k' ]' V$ z" B
  615.   }: ~. c: W1 N9 k# z+ _' F
  616.   return NULL;
    * q3 ?6 x" g% \2 |: r
  617. }8 B+ [) I0 z/ Z/ X- Q; K5 s! R

  618. / f% y2 B* v! |. R  d$ O" Z# V: j
  619. void ProcessProc(long Total,long Current)
      T! A2 z4 b/ u" e' p, n" J; H8 C
  620. {
    - }: k8 J3 b) x8 T. N
  621.         MSG msg;9 T' e( h# f+ v9 ~) W9 e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    & ]3 Z" U$ q" N, K' j: `6 i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));" R. N8 h5 ]" n" x7 I2 Q9 l& o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))3 G* W! U& b0 x
  625.         {$ C' }9 R5 `: E  Z7 ]" v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . P, X* ]" ^! ^9 s; I: L
  627.                 {  _3 A! J! s4 j" N9 Q) @5 L
  628.                         return;9 d, n% v1 R% [  `3 [/ b, k+ Z* t, N
  629.                 }3 i" c' A- `, S. k; K! [
  630.                 TranslateMessage(&msg);
    " i6 N- _! D% F( h4 Q
  631.                 DispatchMessage(&msg);1 N4 w  I) _$ \- g" ]
  632.         }        - N" m$ S1 o/ R1 H% x1 m1 J
  633. }
    ; S0 h6 M' I( j. s) Q1 B
  634. $ K; \. T( }4 P" c4 Y* ^  u7 Y
  635. BOOL bFirstChar=TRUE;0 J8 o( k: l" @

  636. 2 b- c9 U9 ?# f3 c5 ^
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! h* D% z  l8 f) W9 O# z6 o
  638. {2 o2 b* @& e8 G6 _' _* Y9 ^
  639.         // TODO: Add your specialized code here and/or call the base class8 `/ l% K% @! ~. M" {" o5 _% q. d$ v$ [
  640.   switch(dwProgramState)
    2 Y7 Y# V; d( Q7 ~7 U! l
  641.   {$ S" T- X1 k# R6 ?6 b! l3 J6 w
  642.   case AP_NOTHING:
    0 b/ {7 |$ _" R
  643.     switch(dwStartUpSteps)
    5 e; [7 Y0 k' j$ E. G4 ]
  644.     {
    # C% Q! x4 J; y* I- t
  645.     case 1:5 {% ?3 [% [1 D, |5 @) @& }
  646.       {/ {# V, ^) G$ Y$ F# `
  647.         int i;$ ~- e0 e5 x! O: k
  648.         CDC *pCDC=dlg->GetDC();/ h! L  y* j% r4 V% M; s! T8 q
  649.         HDC hdcwnd=pCDC->m_hDC;
    , D0 V! Y, S9 K) B
  650. //        Graphics graphics(hdcwnd);/ [* C) h6 u$ g- F# ^
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( ^3 [5 M+ O0 O9 K: R4 J
  652. //        INT iWidth=bitmap.GetWidth();- ], |7 @% \  \7 A
  653. //        INT iHeight=bitmap.GetHeight();
    & a  v/ _6 z& q" A- S3 }" d- ^
  654. //        Color color,colorTemp;
    - W6 c$ p( y! m
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 U9 B  [4 _9 w9 K
  656. //        {$ R; l. C+ b% d7 v( T* T3 s$ h+ Q4 M4 |
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % e* p( d9 V  l- x9 G
  658. //          {
    $ T3 G( Y' D, Q/ N4 o; S! o
  659. //            bitmap.GetPixel(iColumn,iRow,&color);& ]) K& _6 X% K
  660. //            colorTemp.SetValue(color.MakeARGB(" q$ F5 d$ H8 y4 J. i0 Q1 g
  661. //              (BYTE)(255*iColumn/iWidth),$ u9 V1 N6 d- }4 f- |* f! z! {
  662. //              color.GetRed(),* S% T/ g2 Q! f
  663. //              color.GetGreen(),/ N2 |: e) y+ O+ ~0 q2 m+ W
  664. //              color.GetBlue()));
    2 K( K( W  n5 m0 v, v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 Q3 v! T+ ?7 b- x$ F+ y8 W
  666. //          }/ ]; Y- r; X" R  L" Y. J
  667. //        }: K2 r6 j% Z* ^; I7 g; \" \! X9 O, w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 U, e, u: e( x- Y- d3 a+ k* |) c
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 {+ ]* l% Q6 O3 o/ L' F/ h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " E$ w4 j& s. k( s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 e" [9 o( I5 e7 m- j
  672.         for(i=0;i<240;i+=8)9 F/ y5 @, z3 ~* Y- G" F1 r! `
  673.         {
    $ M4 W! k; ]' i& `5 `0 t& T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# ?6 I( m5 a  C; m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / X/ Q+ V4 b4 m2 j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& G1 o0 N. M6 ]2 N* {# @! Z0 `
  677.           Sleep(33);6 ~4 u, [* d2 \( _7 \8 y  B7 |
  678.         }4 _* g7 N4 M" q  B% ?
  679.         Sleep(1000);! b1 t+ q5 R+ L# V
  680.         for(i=240;i>0;i-=8)+ n/ m# j% U7 y2 V( a4 r1 j% g
  681.         {
    ; t" e$ ]( U% }4 E" N1 @( z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    * r3 o) [- F  V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 P% v0 v- A1 x( b1 y% T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 l; t* O$ v2 s0 m
  685.           Sleep(33);
    1 F" X; j/ y  |3 c. _: r- P
  686.         }  W( {8 a! o" y5 J3 e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    + C' W  U1 R1 G. E' d
  688.         dlg->ReleaseDC(pCDC);0 k% o" G9 F5 V0 R0 E
  689.         DeleteDC(hdctar);
    / B# C9 P3 J: r  U  B$ D
  690.         DeleteDC(hdcsrc);
    . f- {6 g* |7 o: m
  691.         DeleteDC(hdcorg);
    % m( J% ~9 t2 L9 V: k
  692.       }
      l1 ^4 y2 h( y: w- `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);$ J8 V3 w, T6 h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* P; b) \6 U( [8 m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");/ ?1 E- A0 k1 u2 q8 X
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 k1 r( l+ Z: z: N8 c* E& W
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 g9 n- L8 U) l# Q
  698.       if(!Dn.Connected())6 T7 N% i; X9 ^0 k# c
  699.       {& l/ Q" H0 z( T& r
  700.         dwTotalFiles=1;: e6 j$ n8 m6 A7 X/ X. h
  701.         dwDownLoaded=0;0 p0 P* r: s* t( r
  702.         bSilentStep=TRUE;) }7 C5 U8 T" r" `
  703.         bCompressed=FALSE;
    9 [$ p/ _' D) U: ^% x7 @+ a
  704.         strExtLocal.Empty();: Y" m6 I4 B* R7 B9 d' C+ w
  705.         strFullName="readme.txt";
    ( q  k( }) \- m; I& Q8 `. b
  706.         dwProgramState=AP_CONNECT;# |" Y! p) T6 D$ @; `4 [
  707.       }
    ! d/ [7 l6 \6 z4 @
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();" e) s$ e# _2 x
  709.       dwStartUpSteps=2;
    ( x9 D: |* I! ~# R" q
  710.       break;  f3 u1 L% \/ L* Y
  711.     case 2:
    ! z7 P. E, P0 c
  712.       {' r5 ]5 ?; M  [; \
  713.         int iEOF;
    ! F; V% a- i4 [5 l$ w5 S
  714.         FILE *fp;
    & {( w$ |: `/ b- r8 F. d" |8 n
  715.         char szString[512];# f6 O9 k' r- F9 p3 x7 D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 D0 u; J& C7 i6 Y
  717.         if(fp)6 s' V# V+ O* [
  718.         {
    5 w: i6 B* T4 J$ D! b8 |% D( \1 e
  719.           do# R' R2 @$ B/ |1 l2 l. ~
  720.           {5 a* b% U8 `7 |7 ]. i
  721.             iEOF=fscanf(fp,"%s",szString);
    5 t+ s2 H8 q2 C" \) @* Z7 Y1 b2 j
  722.             if(strlen(szString))% R5 B3 S' Q5 U& p7 E
  723.             {
    # \0 o% v, K. C7 Z4 E3 Y
  724.               if(bFirstChar)
    9 A* b7 a0 y2 R# J
  725.               {, w6 {9 {% n3 }
  726.                 bFirstChar=FALSE;0 G  E3 [7 p  v. T& n0 }$ e
  727.                 bConnectIsBig5=FALSE;
    1 d' L4 h; j* ~7 n+ G* t! x' ^6 k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & m0 C' [5 R: q, e0 y0 v2 o+ `9 U
  729.               }
    1 ]2 B$ Y1 h. ~6 R
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " x! y0 A8 y- _7 P7 X* t8 Q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 K# W' J* E. v: D
  732.               dlg->m_ListText.AddString(szString);0 r. j. n4 X  b' x6 M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) c- B# H, t4 O% ?, N0 P8 q
  734.               *szString=0;  t: I$ ^/ {0 P% z- @% u
  735.             }
    + j5 [( K7 e$ V2 B1 i- c
  736.           } while(iEOF!=EOF);$ f+ K) X3 N3 w  [' a8 y# R" J
  737.           fclose(fp);3 d) z, h$ S; d# X9 r
  738.           unlink(".\\DownLoad\\readme.txt");0 z3 K% d* X- n' a
  739.           dwStartUpSteps=3;
    2 o3 P" c1 P  {3 Z( Y5 l: U
  740.         }: @9 |* ?( ?& p. M( O, \2 K. }
  741.       }% u4 o* ?) {! r0 z% h: q
  742.       break;2 z& `- \6 z0 O( g/ I  e
  743.     case 3:0 d2 Y8 H  F6 ]. Q6 T- g
  744.       if(!Dn.Connected())& @5 M5 `! r: [6 A4 W
  745.       {
    4 f  F, V4 \6 S( l  Y3 a1 d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ }  Y6 l6 f' S% D  G
  747.         dwTotalFiles=1;; @; O7 e6 i1 `& H# x
  748.         dwDownLoaded=0;5 d2 P# E$ L/ ]! s* y
  749.         bSilentStep=TRUE;( A7 o2 G0 k" r* \% Z
  750.         bCompressed=FALSE;
    3 n& a  _3 l0 q# t0 v- [& X" _
  751.         strExtLocal.Empty();3 ]& g- O# S4 r# l! w* V" n
  752.         strFullName="checkversion.txt";
    ( C$ P0 Q& Z% G( m1 y$ I7 D
  753.         dwProgramState=AP_CONNECT;! q3 ], u5 H! w" ~
  754.       }! i8 X2 U5 p! n) {7 B
  755.       dwStartUpSteps=4;8 A3 N7 }4 A8 D0 J; H# s3 a
  756.       break;
    ) a/ p( r4 L9 ]6 y' [2 e* R
  757.     case 4:  O3 g, J/ ?4 |+ Z4 I7 H, a
  758.       {8 N5 P/ l. c' z% I4 u, q1 R
  759.         FILE *fp;
    8 Z$ P' e$ R" b: s2 i
  760.         char szString1[128];
    7 y% d6 v! K" t: j% T
  761.         char szString2[128];
    1 M" P3 z+ f( t) s$ \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 X1 h8 S" |( f4 J; G# \
  763.         if(fp)8 ^6 F+ Y* ^* W" S
  764.         {* Y# D( J; ?& i" K( a+ z
  765.           fscanf(fp,"%s",szString1);
      Q8 B( s9 T' `; w5 x
  766.           fclose(fp);
    9 Q- x% u* j) O& b. F7 B' F
  767.           fCheckVersion=atof(szString1);9 k0 u7 X9 _1 W  ]
  768.           fp=fopen(".\\checkversion.dat","r");  X# Q8 M& }+ J, \6 K
  769.           if(fp)6 f4 v/ T" G5 I* ]1 L' x" a
  770.           {
    1 ^$ \! }0 F5 Q; s
  771.             fscanf(fp,"%s",szString2);/ |3 q7 Q7 g; z1 p
  772.             fclose(fp);
    $ y7 t; M  I, q/ P/ N0 Q
  773.             if(atof(szString1)!=atof(szString2))' T' c- |8 M. U+ ~6 K$ d* @( Z
  774.             {
    % i; e9 ^, }. A7 Q# I; R! h
  775.               if(!Dn.Connected())
    " K4 d9 _  g8 y  O/ e4 ~
  776.               {
    1 D; W5 E! B6 M& [
  777.                 bFirstUpdate=TRUE;, ?! f# G; `0 i  h
  778.                 dwTotalFiles=1;
    8 C9 S$ x7 W0 L& g. t  p
  779.                 dwDownLoaded=0;
    6 S5 K/ h; D$ N9 e" U4 |
  780.                 bSilentStep=FALSE;' W4 N5 A; {" L  k& Q% V) d# M
  781.                 bCompressed=TRUE;$ L: B# G8 X! L
  782.                 strExtLocal=".\\DownLoad\";
    4 |3 Z/ A! D- |9 ~
  783.                 strFullName="update.txt";/ S, p0 Q" K; ]' b) g, V$ |
  784.                 dwProgramState=AP_CONNECT;* L( N, R& j8 U& m0 y$ `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 x4 C: }- C4 ~% x2 B- ^/ Y! ~
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    1 {5 r! r- Y% m; [" ?
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + x, |+ S6 y; c; `& W5 Z& h

  788. 0 u7 f- R2 [5 M, {+ l* s- d. N
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , Z2 ~  x+ u: z4 X% ^- B
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    7 g( [0 v- j2 b  d% t6 \: {6 O
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    3 o4 F+ w. H% n5 ^+ o( v! i
  792.                 {2 k" J# O: I2 u4 I$ S! J  e1 n0 s
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ J! Y; A5 p' K0 g2 A! [* R8 w
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 ~2 X: q* ^0 `" [* |5 N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    3 N$ w) f. h) X( b8 a0 d6 [
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . p7 M9 m7 Z( n# _6 m
  797.   J! y6 r0 t. w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 |$ z/ v, r: K' ~% [) q! ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 N- E- s3 }3 I- s0 t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' y' m6 `: g6 m. y6 p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 I) x: L: Q( W: y7 Y; D
  802.                 }4 V, z& [' L5 C! Z" Q+ Y1 p
  803.                 dwStartUpSteps=5;
    ' g/ q0 ]( H# e- Z! N# X6 J
  804.               }" e1 K0 N  n# z/ n
  805.             }- k  J6 |) m# z# c; A1 k
  806.             else
    0 ^0 E& ~5 }8 O4 v: o
  807.             {
    ! W# E$ t4 B$ h# R
  808.               unlink(".\\DownLoad\\checkversion.txt");% }9 Z3 o& B& d( C, b! m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# e2 T# \" b' ]: f4 v  e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % h$ d, m% B& U6 H
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ! o$ {% e( L; n1 l" D# F* _* u
  812. " y5 p9 D( D1 i+ ?+ [3 t8 s: O2 {; z* L
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 C. Y; ]* J9 D$ \& q
  814.               dwStartUpSteps=99;
    - k: j) x4 A& G0 ~4 [" y! c4 S# N
  815.               bFinishUpdated=TRUE;
    & i/ W0 @6 ?% [! }
  816.               bCanUpdate=TRUE;
    ! L) M( }. a9 D; @( d* S& L8 K9 Q/ K
  817.             }' q  n8 \" d; t6 \  w
  818.           }
    4 H0 P& X" F+ U+ }
  819.           else- k  H% u$ h/ x4 e  }- Z% x2 U
  820.           {* P0 n" I$ Q0 O! P8 i
  821.             if(!Dn.Connected())$ s& L; H5 z7 n% D
  822.             {
    - F$ I; t6 }2 k, q& n" K
  823.               bFirstUpdate=TRUE;
    ( [6 p: f* I7 i* T$ [6 @
  824.               dwTotalFiles=1;6 d. E% e, s' `5 H* O; h- [
  825.               dwDownLoaded=0;
    : k" v' ~1 l& t/ x; }, g
  826.               bSilentStep=FALSE;9 E6 c8 j1 j/ D/ v  w& B9 U
  827.               bCompressed=TRUE;: r" I! E) Q+ q
  828.               strExtLocal=".\\DownLoad\";
    % y. Y$ W. U5 d6 ^3 t  G
  829.               strFullName="update.txt";
    , q% U/ D2 H0 [  P2 p) y+ R
  830.               dwProgramState=AP_CONNECT;! W  B' ^% J. t0 w% _; M
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . J& M+ M5 @2 x# i3 B! u7 ?0 t# i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : ~/ D- h! f. x( r# |. w
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" @8 G1 h% {/ W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 v. M5 b; G" ?6 X$ n
  835.               unlink(".\\DownLoad\\checkversion.txt");
    $ `6 C# g1 J* c$ r$ e0 o8 k: a
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)0 \, L$ z7 Z( p9 U: L! `( y5 R
  837.               {+ ?, M: L, n4 h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ) Y% z4 Q- g) p- n% q. V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' h% `2 x6 C) F# `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& k7 ^. y" V3 K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) c1 I, }' i: ?2 v. W+ E0 T, s
  842.                 7 ^/ W9 q7 b  [% ], A
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ h& C4 H- \$ P  ~; C
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , j  C- `/ L1 E# l6 C
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 G1 N! ~6 L; u' H0 U! w7 a& T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ b# @* R! M- N
  847.               }2 c- Y4 B/ L+ \8 C
  848.               dwStartUpSteps=5;$ Q2 i7 k& Z( p2 }$ G
  849.             }
    + a; {7 W% x) G$ a: A% s
  850.           }0 [7 X& V( u$ N) P4 m+ b/ A. a
  851.         }; Z# f' G" W) ?* d/ `
  852.         else
    , ^1 h" N* Y+ H
  853.         {
    6 o9 f# k) {' c' |
  854.           dwStartUpSteps=3;9 T% A  g/ z7 x; P8 [
  855.         }
    . C; G5 d: F& }- E/ v8 b+ i) u
  856.       }0 ~( f8 U: {$ b2 Z  j
  857.       break;" T. t5 n% j8 `/ _. y& R
  858.     case 5:
    + w5 y. n2 k  W/ y* O0 ?0 n
  859.       {
    7 R. b, O( w; b  f
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    1 I" ]+ l8 s: x) r) ?! l2 @
  861.         {
    4 \6 Y4 F4 w" P6 [
  862.           int opt_overwrite=1;+ ~- j8 m/ t2 R- R& C) K
  863.           int opt_do_extract_withoutpath=0;  K( a6 L/ U0 U
  864.           unzFile uf=NULL;
    * s- i- v$ t* j& V- W+ m6 Q

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

1 F: P4 S" J4 @5 d; U# Z
8 W8 z9 w# Y; E6 R- j6 f

評分

參與人數 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客服返回頂部