找回密碼
 立即注册

CSUpdate.exe源代码

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

. X# n- z4 b% D
  1. / RevApp.cpp : Defines the class behaviors for the application.2 C$ O% {$ [; i% y) T
  2. //+ _4 D% O3 f1 z6 R/ Z
  3. 6 |( c6 q( l) ^' a
  4. #include "stdafx.h"& I# L6 n. t5 n. v0 ~/ r
  5. & i- h* [0 z7 e6 w0 s  d9 t
  6. //#define UNICODE6 T4 ^$ {" k& y# U
  7. //#include <gdiplus.h>+ j2 T5 z1 w4 S) m. k
  8. //using namespace Gdiplus;
    , f/ d# Q9 A+ N8 J. ]2 R9 A

  9. ; ?  v0 P' }0 _
  10. #include "RevApp.h"
    # t7 J( q: j, {. Z6 L& H
  11. #include "RevAppDlg.h". l: m9 @$ C* b0 Q2 m. z

  12. ) a+ P. \& X4 F- E" s  m7 H
  13. #pragma warning(disable:4786)
    " p1 h! y& v4 @5 t# u0 A
  14. #include <map>: Q1 f, ?2 [0 D* D5 A6 F- W4 H. Q
  15. #include <list>
    # G5 M$ l. A8 q  t% F
  16. #include <direct.h>3 e% _2 M" D' C) V9 K
  17. - z. [5 a. J6 R; l* l9 c
  18. #ifdef _DEBUG6 N$ s% Y/ w/ W! C: W
  19. #define new DEBUG_NEW6 P" |1 q2 ^+ E/ c; j; B/ I- g* \
  20. #undef THIS_FILE
    8 p" J' o  t  P9 _- H' q$ E
  21. static char THIS_FILE[] = __FILE__;
    % h8 {3 M, ^8 y! G8 }, S6 M
  22. #endif
    7 l1 T1 o* V4 ~2 `
  23. #include "SkinResDef.h"
    . A) M3 x: o+ @; J
  24. #include "ChangeBG.h"5 }5 |* Q! K+ c; C3 W' }
  25. #include "AFXINET.H"
    3 O6 M# o6 u9 b$ }! W; `) c
  26. 7 x# t% o4 G- x+ Q, e) G3 o! D8 i
  27. #define TRADITIONAL_CHINESE 0( H! m9 O8 a) H' h, Q/ x) b
  28. #define SIMPLIFY_CHINESE 1
    8 Y5 p4 _) u9 b% `$ C- f
  29. #define ENGLISH 25 ~% I) \- P; i
  30. int m_iLanguage = ENGLISH;5 d' q" ?9 U! H) H
  31. /////////////////////////////////////////////////////////////////////////////" O; X* {2 [" ?5 W+ f9 A
  32. // CRevAppApp5 l' O. W5 V, B, I; h% _  W! X8 z

  33. % O' r1 [& F, q# k8 f2 h$ C
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    + a! y: S/ N; ^9 Z4 \
  35.         //{{AFX_MSG_MAP(CRevAppApp)3 l. _# o4 I0 ^6 y$ T- Q) U
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., T* v0 L/ v* a7 S4 ~9 [) U7 `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 i3 T& `- ]$ l# W. a
  38.         //}}AFX_MSG& |9 m1 E6 A+ T  _: s4 n; \( u
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    " w2 |; X9 q& V! {4 a' D
  40. END_MESSAGE_MAP()8 X; Y. g8 _/ f. Z- g1 E
  41. ( @. o5 `& ~" A% t
  42. /////////////////////////////////////////////////////////////////////////////' R+ @; Z! M% [* [: b0 k6 H  g9 ~" Z
  43. // CRevAppApp construction1 F9 u- l4 W' p7 f' I( I$ E

  44. ! [, x( H- C5 Y) Z+ D6 E
  45. CRevAppApp::CRevAppApp()
    4 i: K& B' i5 g+ V
  46. {5 E# R4 f) M3 P8 U9 G8 S9 }6 Z
  47.         // TODO: add construction code here,
    % @1 N8 G/ q- D
  48.         // Place all significant initialization in InitInstance( d8 |3 V3 H* {# U6 o
  49.   bDisplayIsBig5=FALSE;
    9 a& s3 }" R# M$ j
  50.   bRestartUpdater=FALSE;3 M; C0 c* Y9 H5 O2 l' W1 v
  51.   bFinishUpdated=FALSE;. K- U1 n5 L; s3 _5 h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& F: i! r, X0 V1 i# Q1 U* c! J
  53.   InitChangeDataBig52GBKS();4 T% ?6 p7 {2 Q* B7 b
  54.   InitChangeDataGBKS2Big5();+ |9 y& e4 i# T' w  Y
  55.         //
    - r) ?2 I% u+ l8 V% k
  56.         bClickRunExe = FALSE;
    % l* i# i" l5 \
  57.         //
    ) d0 ?/ s% N; d- J
  58. }9 V0 ^( a! \+ }1 q$ r4 N

  59. " H% r* o/ N: q8 B( i! S4 ~3 @
  60. CRevAppApp::~CRevAppApp()
    9 `% ~. b: D5 b9 Y2 g/ N1 L' w: a
  61. {
    % P8 P3 H( h% a
  62.         // TODO: add construction code here,- }# w& e+ u8 T" ?
  63.         // Place all significant initialization in InitInstance
    , J( b5 g7 ]' T1 |
  64.   EndChangeData();
    0 O6 z: F9 K; w4 A; y
  65. }
    2 W! x6 d! ^5 C1 Z+ h8 D
  66. $ L3 F! |+ b5 |; I1 w. T
  67. /////////////////////////////////////////////////////////////////////////////; g: X& }( l, q  ^" u
  68. // The one and only CRevAppApp object7 A/ m8 w' ?4 P) a5 N. @" f9 q

  69. $ N5 n- N. W! ^/ b
  70. CRevAppApp theApp;
    3 O3 U4 @- ^% u

  71. 8 P% d! J9 C' S
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - L3 g. U; u8 F. y2 l7 q0 c1 a
  73. {
    / r  L9 T8 `3 P
  74.   int iEOF=0;6 i" N/ n' X4 n; ^
  75.   char szTempName[MAX_PATH];4 k. a6 z( Q; n1 m3 c
  76.   *szFileName=0;
    ( l$ W) E' P1 y7 O7 X
  77.   iEOF=fscanf(fp,"%s",szTempName);) Q; H( w% k" _
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): ~6 ?5 O( ^0 z! R% B  Y' F" m
  79.   {; k/ U" Q) R* W# j% m% s0 Q
  80.     strcpy(szFileName,&szTempName[1]);
    * D0 M2 A/ f6 |4 g
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% A+ v6 ^) z1 e) B5 Z" M
  82.     {
    8 Q1 h" b2 ^$ i- a; o4 l! s
  83.       iEOF=fscanf(fp,"%s",szTempName);1 Z5 D5 J' w. U9 z* \# p9 T
  84.       strcat(szFileName," ");' \1 v8 E) g2 W  t
  85.       strcat(szFileName,szTempName);3 N! B' n3 n+ X+ l
  86.     }
    : e& H8 e9 W8 l4 o. B7 V
  87.     if(strlen(szFileName)>=1)
    5 r& F; C- m' t  b) }- d9 D
  88.     {+ K1 l* Q+ Q/ m* q
  89.       szFileName[strlen(szFileName)-1]=0;7 ?7 q2 L* H0 @. h; ^7 z& L0 u
  90.     }
    3 m! E6 F& I1 R% |5 \1 S* L
  91.   }' l  ~) l- k0 C# r+ \# U
  92.   return szFileName;
    9 }# m' }# @8 p2 ^, p
  93. }
    4 {9 Z: s7 `( r

  94. " G* L: \  L' H$ G+ k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)) Q: P& r9 n, e* u
  96. {
    " Y. [' W* Z1 X  V. c$ q3 m
  97.   FILE *fp;; o% Z4 h0 Y2 X) |8 N  O7 f
  98.   char *key=NULL;  r% [* G* e( x* U5 O
  99.   char version[MAX_PATH];
    ! C3 Q7 P1 g+ X5 ^( l: N
  100.   LPUPDATEFILE file,olds;
    / Q+ x8 X& u7 d" g0 H0 a
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; g' B+ b- @1 Q9 E$ L2 z  [. S
  102. ( D& Z1 j& E) G. `
  103.   UpdateList.clear();
    + l; ?- r9 m" b/ ?- L; Q
  104.   UpdateFile.clear();8 L- d. H- F# N- l! d$ g
  105.   if(GetFileAttributes(filename)==-1) return false;( U' \; o- W& N  _" X# P1 L# Q; \
  106.   if(!(fp=fopen(filename,"r"))) return false;
    9 D. ?2 u/ e! z; P' p' `
  107.   fscanf(fp,"%s",version);- B! o+ {! D1 [% J
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% ~/ n0 y, d/ o, k: u$ g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    * h4 ~, m3 d& u
  110.   {
    . {7 \9 |3 _  p' U, o  j
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( Q% a5 k3 [1 }5 N0 J" \% N
  112.     fscanf(fp,"%s",file->path);
    - t+ D) E; [7 N' C: r2 b: S
  113.     ReadFileNames(fp,file->file);' }% \& ], A1 O
  114.     strcpy(file->full,".");
    8 i* E# k9 }4 [, ~3 k, u) K5 L
  115.     strcat(file->full,file->path);* _; b3 [7 r- V6 k
  116.     strcat(file->full,file->file);
    & Y* g. d- r( B+ C- h5 Z
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 q1 Q7 l2 s+ k
  118.     {! v) x- ^& a/ ^1 F1 T
  119.       file->vers=(float)atof(version);
    $ z  q# w# |6 s1 ~8 v
  120.       UpdateList.push_back(file->full);
    " }" J; b3 M  l3 w3 F
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));& ~; s' D  q- ^$ v
  122.     }2 ^6 L/ @% I: w4 |6 E. D
  123.     else
    7 j  Z) W. x; O7 a% M9 b; o& M
  124.     {* H) V3 Y4 Q5 o( Q6 N
  125.       olds=(*p).second;
    # C' U: v7 P; b4 o2 `3 G5 S: m( U
  126.       if(olds->vers<(float)atof(version))
    5 i* D! I* o  E
  127.       {6 f" r& w, B6 ], I# I' i# ?2 Y6 {
  128.         olds->vers=(float)atof(version);
    - e. E: _: p5 ?
  129.       }$ Z5 w! n3 V! `% d, R' O
  130.       free(file);( a3 y# R, s" b" N  \
  131.     }7 X! g# h* x- r! t$ C
  132.   }
    / u: l. m$ J5 p" w
  133.   fclose(fp);
    " Z- M+ r) X1 T8 t" d/ N0 `
  134.   return true;
    0 v; t  r+ L5 B7 Y6 x
  135. }/ E$ n8 m9 t' n9 i
  136. 9 v: q( u# i1 N% W* ^8 w* M1 o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    . M, g' X2 a, j. N$ f0 ?
  138. {
    # S5 T* M9 K( l+ ~8 q* U
  139.   TCHAR  szFull[MAX_PATH];9 y; z. z/ F# R! H& [
  140.   TCHAR *token,*inter;
    % G3 d& e5 u; I6 W
  141.   *szPath=0;2 f) o# p5 @* S+ G2 s" d
  142.   strcpy(szFull,szFullPath);
      t3 |" y9 Q- _
  143.   token=strtok(szFull,"\\/");; B% o1 v+ [3 P
  144.   inter=token;9 c; E  m9 I2 G. ~- Z3 J, B
  145.   while(token=strtok(NULL,"\\/"))$ a8 W2 o- ]" X, _, N
  146.   {
    , R) w" N9 u6 J( K3 L
  147.     strcat(szPath,inter);
    # B! G" \9 E( ]' O, ?
  148.     strcat(szPath,"\");
    ! M0 H% s  S" p9 }6 R: l% `. S$ r
  149.     inter=token;
    1 x+ e9 C/ V+ W- ~2 \" E
  150.   }; \! l$ q, K. Y. }) q8 L
  151.   return strlen(szPath);
    & r! r! ?+ H) Z
  152. }2 I6 F5 m$ {7 f6 \9 i8 K6 x+ d
  153. ; U4 Q. {# J$ b' h
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : _6 C) i  x, c, H: c+ \
  155. {
    9 a6 S: z8 n2 G* d$ a
  156.   DWORD attrib=GetFileAttributes(Target);7 v' \5 O9 |: z% p
  157.   if(attrib!=-1)
    # U  M) z" {- R' V$ {& \. ^4 ?- I
  158.   {
      k) ^- F2 }( Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))! [3 D5 \) _- S& M& E' E9 R6 C' n3 y* Z
  160.     {& B) D7 N" t5 F+ d$ I' i- |) `: ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. t0 L& n  E, E' {7 E# S0 p, R
  162.       SetFileAttributes(Target,attrib);
    $ ~  i7 r* P0 F* s
  163.     }
    " D- f* p, Y6 d
  164.   }# I1 z& y/ F6 P9 @7 N- J8 w2 Z% Y
  165.   CopyFile(Source,Target,Erase);3 I! T; f+ C8 D( u
  166. }# T. v  P4 _' _

  167. + c: R/ |" W0 e! ^  c. `5 D. f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" @+ X9 x. c: r7 q1 q/ r
  169. {
    # i. g: b8 X) y
  170.      FILE *fp;
    " o% s- g0 C( Z9 r6 g: j2 f, j2 c+ v
  171.      char  szBuffer[8192];
    8 _2 P2 z+ @9 K' G
  172.   va_list  argptr;
    3 ~; C1 k6 B8 E1 X% s, H- G

  173. 1 r8 h0 T* ^7 z1 o* {
  174.         va_start(argptr,message);
    , e; Y/ y5 s5 A1 ?1 t3 \9 ^. l
  175.         vsprintf(szBuffer,message,argptr);
    - ]: D$ o3 f6 [/ E
  176.         va_end(argptr);
    - h  l8 X4 y/ _8 ]* N) a7 j
  177.   fp=fopen(FileName,"a");7 v  w) X9 f, T' j$ U" K  S
  178.   if(fp)
      @+ T+ X/ r7 H$ G& e( [
  179.   {
    * w1 X' m  S' J0 }5 `
  180.     fprintf(fp,szBuffer);& N+ o$ T- b4 u! ?( J& ~3 D8 U3 P
  181.     fclose(fp);; `$ r: A4 M9 G9 ^4 j
  182.           _flushall();" p/ \; }  ?: M+ J! k; M
  183.   }! ?3 X2 y" C' c) z- c4 s
  184. }" e9 y7 G1 b; X1 R1 D

  185. 0 V) b$ H+ T8 g' f
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / K# |: h& j! e  V( ?
  187. {
    + Y/ {* z! N# k# i
  188.      FILE *fp;; W+ q5 B4 _0 x0 x: L* l4 ~
  189.     DWORD  attrib;
    ; d- w, e# x: r% d
  190.   attrib=GetFileAttributes(FileName);5 d8 |' c5 g% N
  191.   if(attrib!=-1)3 Z' G& X! L2 p8 W$ I! K
  192.   {
    5 W3 n  f, ]" x1 a# ]
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ }/ o" V4 B, Q$ K* Z: `' V  f
  194.     if(!SetFileAttributes(FileName,attrib))
    # |; I& A+ |" c4 c
  195.     {
    3 d  E1 ~. e% v/ [/ s, l
  196.       return FALSE;
    7 q* v2 x# h. F/ a
  197.     }
    0 U; V& B1 m' }) O
  198.   }
    ' N  \7 E) Z9 @! Y$ U" c
  199.   fp=fopen(FileName,"wb");- k5 U" V8 M+ O1 b9 k) r- n
  200.   if(fp)/ V/ p! c. o9 D0 y
  201.   {
    * i, f' t3 D4 n* [# V" y
  202.     fclose(fp);
    & u- B" @" l  }
  203.   }) U. D. z4 R! ]+ G
  204.   return TRUE;
    % u7 k  t, O" @* Y* n2 B6 q
  205. }; ^; |: Y: Q. g* }4 K

  206. 8 u2 y* h0 M6 i5 Q# p9 I$ P5 u
  207. BOOL CRevAppApp::UpdateLocalVersion(void)7 r0 f& `' o- l8 g% H
  208. {7 Q  K6 O# W4 @3 M% m9 [, k5 V! a
  209.   char filename[MAX_PATH];4 W6 z: m/ n# l5 _0 A; r% M0 A& T
  210.   LPUPDATEFILE file,olds;
    7 N8 @! k' O" }4 i7 n' }1 v6 M
  211.   std::map<int,CString>::iterator i;
    1 d9 \+ [1 E% N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( [1 G) T+ d( @! g& H. }
  213.   std::list<CString>::iterator l;1 q4 W) k% |* t5 _

  214. - [' R2 K( C; L% S; G
  215.   if(bFirstUpdate)8 N4 ?6 X0 H+ ~* ]9 j7 _
  216.   {
    % ]# O1 `6 ]8 w, c( P0 A9 u
  217.     dwCurrFile=0;
    0 R+ j9 K' f) P- k0 t3 X) D" r% Y8 k
  218.     bFirstUpdate=FALSE;
    ; ~* _/ E+ l7 ^5 x" X3 }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 Y- j  }. f# K0 I
  220.     {
    7 _4 a! x7 d$ |: ]
  221.       dwTotalFiles=UpdateLocal.size();3 j- P  n# o( C( Z4 ]; H& D! O
  222.       dwDownLoaded=0;
    , U# C8 B8 r+ W" e* A
  223.       bSilentStep=FALSE;
    2 A  w$ `& R6 K8 c3 R* Y) u; F. s
  224.       bCompressed=TRUE;7 x5 ?" ?. \8 p3 b4 L
  225.       strExtLocal.Empty();
    * L+ K1 Z9 q  E  K8 `  {
  226.       strFullName=(*i).second;
    9 q, l# v# ?/ f: W: q* ]
  227.       dwProgramState=AP_CONNECT;
    + {4 t8 V! L' s) a- F3 c% |
  228.       return TRUE;
    / e( y+ K4 J( g3 V/ s
  229.     }
    : F) ~5 I0 H3 W* e
  230.   }
    ( f9 |* @1 Q/ J% J
  231.   else if(bRestartUpdater==FALSE)/ |3 C: z( k& y0 f. M+ a/ e5 ]( M
  232.   {* Q) c1 i& k8 c, M. j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    9 R1 l- P7 G; H4 U
  234.     {- E$ G. [% O, ]6 E
  235.       file=(*p).second;8 E" x' a7 z4 [+ f" K! a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' }! S1 N( U+ b9 [/ H7 `: @
  237.       {
    ( J; o$ `. F6 d- M$ M. |$ v+ k7 k
  238.         olds=(*p).second;! C) o- f# M$ |! ]
  239.         olds->vers=file->vers;" ?6 B& }% `8 `( m
  240.       }
    - S& y  f) p: u6 t& x/ f0 u
  241.       else
    % ?# [1 x. t3 F# q9 H
  242.       {
    # M$ R. o- R+ O5 d7 C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& q2 U7 B2 `( w
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 s; g' i: U/ k
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 O4 i5 @$ c6 M9 P
  246.       }
    6 j$ x7 b# K+ l& Y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    9 V1 p9 f5 H) d
  248.       sprintf(filename,"(%s)",file->file);+ t9 m4 H6 K0 T, r" [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 o6 k% W6 @: A2 ?2 v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }* q3 b- }" H& X/ h$ V
  251.     }
    ( B' x6 Z8 U* i9 q* w. A
  252.     dwCurrFile++;
    % p, e5 A/ E$ Q- Q# X9 c
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% s( c4 X& c1 a, F
  254.     {
    - l2 {# V+ d2 _9 l5 J* k4 T; @
  255.       bSilentStep=FALSE;
    6 B7 w! J0 {+ Z4 Q; d
  256.       bCompressed=TRUE;
      t9 ^; q- ^& S) Z: \1 F) t6 R
  257.       strExtLocal.Empty();
    5 C$ ^, ~$ {* E& U
  258.       strFullName=(*i).second;0 L6 ?  Y8 u- K, q
  259.       dwProgramState=AP_CONNECT;
    . p3 L( V4 _9 p0 m
  260.       return TRUE;- G: t/ _' S2 d) a" D: K, H
  261.     }! n- X7 x$ b' E$ m& B" r
  262.     if(!bRestartUpdater)! A6 B( O5 U) L" N; D/ l. d1 @& g
  263.     {# W: d5 H; T$ [" y$ }/ z5 g
  264.       int iCurrSize,iFileSize;
    ) Q+ j; b- y" H7 g) f: y
  265.       iCurrSize=0;1 p$ T1 p6 q1 Q) c
  266.       iFileSize=UpdateList2.size();
    5 B0 [+ K1 |; Z0 t  a, T* F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ v- M' r- A% r0 {
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 |- c1 m. `  O3 @1 r
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 ]! y& @* P" F# r$ G2 Y- d' s1 \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! }" J. y1 _& p4 S9 h
  271.       Fclearf(".\\update.dat");
    , j) L- m. S- _+ F* ^2 E$ U6 `
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 ^; E8 _, I/ S) e4 I+ s
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    / p/ W" `8 u: @2 A
  274.       {: I) w- l4 w( J+ @, B
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 A( @& {( o/ k* I
  276.         {
    : m5 V5 r# ]  B+ {: E9 }4 q
  277.           file=(*p).second;
    . |. e$ }+ p. K: v  G
  278.           sprintf(filename,"(%s)",file->file);+ I- c9 f7 ^; j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! A2 x" a0 t% v  X+ E" I# L
  280.           iCurrSize++;
    ; N; X8 z* C, ~8 u% c4 s: f# Q7 U, D
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 ?& X+ q. Y3 r3 k/ m1 I: V6 j
  282.         }2 \6 g2 K# L. d: Y; J; h
  283.       }
    # \) Q) ?3 s* B
  284.       unlink(".\\update.txt");1 d9 W3 p6 }3 ^* x7 Y! x
  285.       unlink(".\\update.tmp");
    # R2 I+ G3 g- y& |
  286.       Fclearf(".\\checkversion.dat");& T( P5 l, z, g' Q+ a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ k$ H: x5 e2 x: s
  288.       if(UpdateLocal.size())# Q1 {' x' z) [3 W# k/ \
  289.       {
    6 Y! h3 `. u0 n& t  S2 K- F- z
  290.         UpdateLocal.clear();) F4 @9 g. A- f) S8 a
  291.       }$ p/ R; ?: P3 ~9 N
  292.       if(UpdateFile3.size())2 G( _* R( I# W# l2 `+ k  J
  293.       {
    3 B" S6 o% F3 W8 c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). {  Z' ^' E, F2 M& d
  295.         {$ r) d+ c* P& H) j' L- Z$ R
  296.           file=(*p).second;
    ) P3 D- @2 a- f4 D# [7 n; u
  297.           free(file);* u& |; e- Q7 T0 ?
  298.         }( H" s: {, d: M9 |- \4 d
  299.         UpdateFile3.clear();
    0 T( A! @% R% \0 R$ E7 R
  300.         UpdateList3.clear();
    ! _% `$ B% h) x" e
  301.       }2 {6 G) d3 i! C% Y' E- C8 m
  302.       if(UpdateFile2.size())
    . R) j5 V# n# X4 f( D9 v/ ]
  303.       {
    + o, t, i# E: N, t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 S# n& r" g% T9 Z* H
  305.         {
    ; o0 z# M& }" ^& k
  306.           file=(*p).second;
    0 d) b) w$ n1 Q  R% E: A) N
  307.           free(file);
    ' c: ~9 h1 q- G+ c& }& p
  308.         }
    * N4 Q% B+ B; D/ `
  309.         UpdateFile2.clear();
    . d, H$ l* q2 P9 s9 [) g# L& C' I
  310.         UpdateList2.clear();
    % Q/ R& S, ~# k8 f4 L! S# y! _- D
  311.       }: T* p  t$ ]' |% o! \- {
  312.       if(UpdateFile1.size())+ r2 f5 {% o% p  j" W
  313.       {
    0 }% c1 Y4 {2 V1 f) V. Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ }6 Y" S8 ^& g4 t
  315.         {8 J& M$ i* C. C4 O0 f
  316.           file=(*p).second;
    ( o0 m/ X5 Z& U+ r* u, |
  317.           free(file);2 r1 n% }) n6 V8 Y+ [$ `
  318.         }
    - P" W+ u4 J2 q6 d7 t6 ]
  319.         UpdateFile1.clear();: D# c$ M8 T: b9 g  y
  320.         UpdateList1.clear();: U) s% P9 E" m1 s' l; o
  321.       }9 [, D5 H/ Z6 w
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    4 B+ w- ]* P, c2 R' }+ a+ e
  323.     }
    & e/ r. q& V1 c8 N* Y: P
  324.   }9 ~- }5 U6 ^3 J+ I5 @, K" e: h! y
  325.   return FALSE;: y  Z. s- g! s1 o& e# d8 G
  326. }% w# ^, M% p3 ?( \. Q  x6 g+ G

  327. 2 E% C  i) h  q+ ~
  328. void CRevAppApp::ClearAll(void)
    - u: O0 J3 ]% |5 e6 v
  329. {
    6 B: @8 E( g6 G0 X
  330.   LPUPDATEFILE file;
    # q# k! D, ?, g% C% C, I6 t7 x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;8 i+ U- x, y$ Z( ^& `
  332. 4 J( R/ ^1 ?' }8 d0 @
  333.   if(UpdateLocal.size()): i/ m0 g3 _9 V9 h* }) _: X) ~, W
  334.   {
    , S# e. [  |4 {2 h; q# p, j) `
  335.     UpdateLocal.clear();7 k; p+ ^9 V5 t1 f! t  Z5 h
  336.   }" e8 ^6 S5 h+ }( V+ z; j) ~
  337.   if(UpdateFile3.size())
    # ?% r7 J7 d. S# s- x
  338.   {
    6 l4 ?9 r5 U# i; e/ I2 x" c
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 M- L1 _. h4 b0 u; H0 W
  340.     {
    3 h  ~2 m9 v, h1 |7 E# H
  341.       file=(*p).second;# |% D$ b, n. C8 i) l4 w
  342.       free(file);/ M% S$ ^4 D5 U8 V( V
  343.     }, @9 C) v7 a* E  z% g
  344.     UpdateFile3.clear();, [8 R7 D0 }) \3 T& Y& Q
  345.     UpdateList3.clear();
    ( h& d) m% p: [5 X
  346.   }
    5 P. u7 m( `- D$ z
  347.   if(UpdateFile2.size())
    ) ]; F& Y. o- U% O- o9 b$ r
  348.   {
    , W- P# G8 B0 H+ G4 o1 ]% b
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 L0 A+ N0 g+ s6 I  U% J
  350.     {% p6 U! ]. I3 k5 F( N1 I3 F
  351.       file=(*p).second;. U% q* D, C2 e" i% A8 P, k
  352.       free(file);) G& q+ j5 }; [3 ?
  353.     }! @% R' H/ k" d& ]2 F3 f
  354.     UpdateFile2.clear();, d  T8 k: F* {1 m% [
  355.     UpdateList2.clear();
    / Q: s% J/ d7 @* v
  356.   }  A& X* X4 i8 E3 N
  357.   if(UpdateFile1.size())* d' @  A: v! [2 |. S
  358.   {
    % Y2 w9 ]% z- W" k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! Y% e5 }) q3 Z6 G6 f/ f, X3 h
  360.     {9 }1 H/ J/ u/ O9 H( n6 l
  361.       file=(*p).second;
    6 d& Q- K8 l! R& }
  362.       free(file);
    4 o* ]' q! {! e
  363.     }( C2 X& j' C7 k; B2 k
  364.     UpdateFile1.clear();
    8 ^) `# j% ~3 u8 B. Y; \
  365.     UpdateList1.clear();
    4 [6 H9 S3 O  `# c; P
  366.   }  N& e# u' p% `0 q8 f
  367. }  
    : J& g0 D% J9 Z! H4 u6 y; L
  368.   1 I6 S  p" V/ l; B" C# a3 f* l
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 X* ^1 ]/ ]# E# ?0 z
  370. {, G) k& ?5 a2 @6 `. t  }
  371.   int c;7 R* O, N7 j7 A  }- |* j" W! P
  372.   LPUPDATEFILE file1,file2;' V& B: k8 M4 B% `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 p: A  ?% ]2 q
  374.   std::list<CString>::iterator l;) {- S: i* `/ ~2 j6 ^( M

  375. 0 D8 X+ B4 N: L& j& P
  376.   UpdateLocal.clear();
    + M" E: M5 u6 v  b8 m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    # _& r+ w% H+ J9 U) a; ]+ J$ ?
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);  m5 q. u- t& m+ h3 H0 `0 ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 ^0 V7 L6 C" u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( i) H- T9 d: [+ Q5 h, u! D
  381.   if(UpdateFile3.size())6 G: E% g! q# F5 j
  382.   {
    " u3 u& x/ O- H, f; s( O6 n2 ?& C, i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 ~6 z# O8 i6 M% i
  384.     {  b# b" c6 }5 f: q
  385.       file2=(LPUPDATEFILE)(*i).second;+ I8 N* N& d3 o  c$ e$ s9 m
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  i& B+ ]5 g( l+ r' e: S% F: i
  387.       {
    ; p) y- a: k5 i, Z5 y/ v- c5 S) ^
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! V9 Z) X+ a: Y" a* l4 u. s
  389.         file1->vers=file2->vers;
    : C- O+ l2 S7 ?% N2 p+ A( i, i
  390.       }
    ( W6 p+ |/ c$ V; C: E
  391.       else
    9 K" K+ i  z5 p4 S) {# G0 D
  392.       {7 U& Q- t; P8 C2 ^4 x8 q3 N
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' R  d2 _5 G, Q. @( C
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));* A: r3 T5 f6 B* \/ c- g0 Z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ @! x, K1 P0 f( u8 E+ B% M1 `
  396.       }2 r& A- J, g2 I
  397.     }
    6 Z- }9 P) e+ B" A+ c' v
  398.   }9 T7 e. {8 t: d) Q) e! \
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" j9 t" ?! S* z
  400.   {* z" ^" I$ F- H0 ^
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ( F+ ]' v; J$ K9 A% E
  402.     {
    - |( h. y( o9 T
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ p! z- R/ G/ [( m- G" d$ A7 T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 @6 @6 L9 G# k
  405.       {6 I- S9 ~- [4 C; V  l
  406.         file1=(LPUPDATEFILE)(*p).second;3 o$ ?% x  S8 Q; `1 p" [
  407.         if(file1->vers!=file2->vers)
    5 K* i4 G+ K* V7 E4 Y+ o6 X
  408.         {) ]3 h( i0 U( t* U) n' ~/ \% F
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 H* E" m; o/ v3 V
  410.           c++;8 g) b, r# O, _- C* x
  411.         }
    1 p5 Q( E% v1 L  Q  G
  412.       }9 |9 l' B) Q% F
  413.       else6 X9 H9 e- S$ j: T( m8 N. d
  414.       {6 h2 F$ D5 A4 X, K( D# L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    7 U1 |9 w9 [5 a) j9 g# b. b
  416.         c++;# K3 F* z8 Z* R. l
  417.       }
    # ^: l  L* `( @
  418.     }, K: Y! ~4 c: T$ ^  U5 S5 n0 a
  419.   }9 N# m+ x, ~) B9 w& U+ U
  420.   unlink(".\\DownLoad\\update.txt");9 ~+ \6 u9 e3 C  i  {+ s
  421.   if(UpdateLocal.size()) return TRUE;
    + }* k+ K: _" L7 w: Y/ g6 ]8 l
  422.   else                   return FALSE;- P; H; b$ ?8 s1 h* k/ L/ i
  423. }- t, X/ c" f# ]' [
  424. 8 ?6 Z) L. B/ W; K, D& {5 C1 B) b
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"8 ~' |% \2 m! o" R( g* e, u
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) E  \; E2 k$ F' N$ s# D! H7 v
  427. 8 W! F: X* L. }: o0 E$ c0 E. \3 Q

  428. - j3 c; P' n/ G% T
  429. & h+ n. k7 f! g! g  g- j
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 D& Y8 A% A$ d5 p# L( v1 y6 g
  431. {, j! j/ P) B' U3 c+ L. l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;3 I$ d2 R( |/ |) w
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): k0 s: p& E! C
  434.   {+ ~8 j& p3 C+ m( L
  435.     char szLanguage[50];
    * h* T# _5 g; |' H6 K
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( C" @& r! p- Q: n3 K, g0 H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 U' H$ f1 k/ }. E( a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' w# H' Z5 P' u+ z" w7 v
  439.     else                                   m_iLanguage=ENGLISH;
    3 y7 u$ I2 [- C, m+ x* N) n
  440.     char szRegister[100];/ D$ r9 f5 ~, A' u$ N7 K% p* Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- a- x' }4 R- ^8 B
  442.     strRegsName=szRegister;' j" H4 @: D  [! p1 y: J& U2 S
  443.     char szPatchURL[100];0 B# ?( u2 E& o0 ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! ?8 _4 b3 `1 _8 ^; v+ q5 U0 @
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ j+ K6 d9 }3 s) o
  446.   }
    - d0 w& x3 J3 k3 `' N# N2 a% C& x
  447.   else
    $ }. X, {7 x2 V0 f
  448.   {
    , O9 ]* ^  J# B- F, |( `! O) y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% f9 j! r" f' _8 Q
  450.     strRegsName=DEFAULT_REG_URL;
      h1 O$ g  m1 f- [9 R  R- K5 {2 v7 |
  451.   }& h; F( n" G+ @1 f
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    : K" ^$ I6 l4 k! k5 E; N5 a
  453.   {
    6 W' a$ L* g, T- b
  454.     char szIP[50];
    : w* |. u8 F( D; W; l0 N6 c
  455.     char szDIR[300];
    7 a; }- I2 V6 ~5 I6 D* Z; ^  _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      W7 f8 Z/ Q% }( f- T+ y
  457.     {
    # k! k& |. j. k9 z- |2 |8 I1 s
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    8 @0 p7 F  h: i! ?; k9 A
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 M' l3 K  Y! G4 i/ A$ v5 {4 A
  460.       strHostName=szIP;
    1 e7 ?. K8 M) A( q
  461.       strHostPath.Format("/%s",szDIR);# o" C3 m, [- d
  462.     }
    " ^6 t1 O& z+ H, z: N
  463.     else
    8 V7 O+ k0 P+ p# d: w; m! D
  464.     {; f) e+ x% d: Q; T8 J
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ ]9 B$ A. T# ]% V$ o" q+ D! y) c1 \, T
  466.       {
    ! H- Y: \- a  b. Q# ]2 C
  467.         char szLanguage[50];$ f4 H& g  g0 @& d4 Z: H; Y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 o, r+ {; f# G- v9 U' n  E; V0 z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : a5 }5 S0 T0 b+ D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 m8 `& W4 Z! X3 {: q8 @' E
  471.         else                                   m_iLanguage=ENGLISH;
    0 c! B9 B5 e; o0 E9 a2 X
  472.         char szRegister[100];
    8 f4 G! T. i+ z! ~
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : D+ y2 g9 r9 j; q
  474.         strRegsName=szRegister;! Q# ^8 X) d+ I% W8 X5 _
  475.         char szPatchURL[100];
      J9 q5 M2 E& ^7 _& w7 m% R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' X# F. P+ v% V  S2 o( t# _- l
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( M' h# S! l% Z4 K1 @  g
  478.       }
    5 a& @8 c$ _0 J5 t: w* D* Y5 U# q
  479.       else- n4 L8 x& @7 B/ y
  480.       {" W1 U" d. _5 f5 d+ U0 k- S
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + v& N, B3 v( @5 }- L1 A- L3 {
  482.         strRegsName=DEFAULT_REG_URL;
    ) Y# r4 b% M+ L
  483.       }
    / j9 E1 `% j# Z3 Z, T1 `5 U' z
  484.     }
    6 [5 k( o  r( N) e
  485.   }
    ! x6 Y. c* [, p, ?( T( E
  486.   return true;+ T* {( O5 u9 O0 |5 Q
  487. }
      f  l! v- S6 i9 I3 w$ n- [& P
  488. : ?) _: v/ e* a" _
  489. #include ".\ZLib\unzip.h"
    9 l  e+ Y7 V. w- o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 d9 w0 w- [8 F6 Y
  491. /////////////////////////////////////////////////////////////////////////////
    6 W  C. A( p9 ^3 \9 t1 l+ ]
  492. // CRevAppApp initialization
    9 w  t# c8 R2 |6 ]# g" o

  493. ( ?4 k5 D# O, P+ J' J
  494. BOOL CRevAppApp::InitInstance()+ }; h1 j3 P$ k1 V% \7 K, e# r' b$ r
  495. {
    8 ?6 W. F1 u( D% \* ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 k  Z6 _" M! w3 U: P3 h

  497. . V; V9 e3 O( v7 \  d+ r4 u
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    , u+ ]& A3 L" \: z( d5 A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))9 F; {% K3 t9 v# i5 S
  500.   {
    7 z& W1 J8 D; T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    4 a- o- V0 B. o$ Z  u& ^. T2 x
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 J" p0 d$ W" J* [! Q: \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 J% L4 J; K! W) B
  504.     {6 z% T# o" C' W
  505.       strcpy(szPath,szPathTarget);
    ' ]& ]9 k+ m- b8 B2 R
  506.       SetCurrentDirectory(szPath);6 n- s. j* Q" L9 w' T' K$ z
  507.     }
    - j# F+ u8 ]. W# S
  508.   }
    2 x( I1 h. V; s
  509. #ifdef _DEBUG
    4 V& E/ H9 x  R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% |2 Y* N5 i4 \1 e
  511. #else( |* r0 N' Q( L, x5 q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ s, b8 P( \0 h+ j. ~  {3 R+ S" B
  513. #endif: v% Y! W4 o7 Z/ p4 Y6 o( v8 t# {5 D
  514.   {# N+ F5 N+ g4 p! K! M) H7 Z
  515.     char tempFileName[MAX_PATH];
    : k9 Y5 y2 G% g1 N! p  e3 e/ c
  516.     strcpy(tempFileName,szPathSource);
    6 L8 A% v, X  y
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 m$ T$ E/ v% A" V# O, q1 m
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 L6 P% \: C3 g7 G  m- s% r3 M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 q: q: i! K* b- q( l$ v
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);* C% L% J+ b; K5 H( j
  521.     return TRUE;! N, b$ G( T+ a" \1 C& T) _9 C
  522.   }
    " @3 U! l8 f3 H6 X$ \; ~& ~: g
  523.   // Nuke 0118: Delete run.exe
    , C$ t) V/ W8 |/ s
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 @+ F- k0 R9 t0 \+ d' h2 {
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # s; O# C" c+ A+ M/ T/ ~5 K7 o
  526.   if(!ReadCfgFile("Config.ini"))
    : x+ m9 P$ v# h8 e
  527.   {6 q' Z6 V& K/ p9 z; V$ {
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);0 X# V, @: g- ]: ^
  529.     return TRUE;
    . `! `0 @: ~7 W$ _
  530.   }! }; q: E6 v) d+ o" }
  531.   HANDLE mutex;0 V8 q; z  n4 x) [# F% X
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))3 S. S1 X% o3 G/ f" A2 n2 D$ o, i6 U
  533.   {
    + Y  F3 W2 B4 w, u2 f+ |
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " y+ q% F: U; N0 k8 b1 P
  535.     {' Z. H) q7 r6 p* J9 S7 D: G. Q- i! G
  536.       CloseHandle(mutex);
    + f# `/ w, C* b7 O! u' w6 Y5 h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);' r3 S+ L# O5 h; [+ B
  538.       return TRUE;+ V) D" \; w5 R  J) ~
  539.     }
    4 V3 m9 A4 |- A, w- ?6 ~/ R
  540.   }  1 X1 ]0 i& \' R! J/ \. F
  541.   CloseHandle(mutex);
    5 A8 T9 O9 I6 B' }" f8 i" K

  542. 8 y- ~# X% g1 U& L3 p) r* r) y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);9 e7 p6 W5 p2 y0 Q5 }
  544. " p/ ]! V' g9 ^" E: x9 `# r" y8 B
  545.         AfxEnableControlContainer();
    , c4 Q' z" @* t
  546. 1 H, M* o9 V- V( D
  547.   bCanUpdate=FALSE;
    ) ]: |* w9 c2 D3 h- j
  548.   dwStartUpSteps=1;
    9 U8 n2 v' w. g0 c1 f6 I$ w2 w
  549.   dwProgramState=AP_NOTHING;; |$ U: l' A7 z: k2 S: G4 T
  550. , }( C$ R8 g8 ~" ]5 }8 z& s; S" X0 O; d
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 @" Z& a0 J: j/ |

  552. ( n4 ?8 X9 h" ?: y+ W1 H5 v
  553.         // Standard initialization% N  A5 x7 e# s, C
  554.         // If you are not using these features and wish to reduce the size
    : y$ m& a. [" r$ I
  555.         //  of your final executable, you should remove from the following" G' K  E, U) A2 }9 _) D
  556.         //  the specific initialization routines you do not need.5 S, K( o, U0 W% ^" N

  557. ) d7 J/ @6 w1 K& @6 I: N
  558. #ifdef _AFXDLL
    ' I! D0 w% u9 N( E8 ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + j4 L9 }; O0 s+ U5 {
  560. #else
    7 O* F$ C/ H7 n+ f% Q. Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' h" {+ ~1 T$ n# g# G& R& |) Y$ G
  562. #endif$ |. D1 R  ~6 J' y  K

  563. $ y8 x- G( ~# O5 J' ~
  564.   dlg=new CRevAppDlg;
    " j/ u- A2 @& I+ v+ K; y8 T
  565.   dlg->Create(IDD_REVAPP_DIALOG);* s. q+ r$ [  K1 y) a/ J4 @8 Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 b& E  \+ ]# l0 K# |! T) V2 [% c
  567.   m_pMainWnd=dlg;
    - {# X  U2 y. R* \  z; b* }6 z  |0 x
  568. 7 i2 h) y/ H9 i2 V" Z& Y0 ^  q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 z( E3 q  V: D4 k5 B
  570. 2 _& L0 H% U( [; \
  571. //  GdiplusStartupInput gdiplusStartupInput;) {8 R7 Y; G9 C# n/ H; I
  572. //  ULONG_PTR gdiplusToken;
    ) h- _+ k4 s9 E- N. q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);4 s& b7 ^: q4 ~- X6 Y

  574. 4 Q; x( H1 _; w9 W. \+ a- d9 U
  575. //        CRevAppDlg dlg;
    0 ^. Z3 W, A6 U) X8 _" C9 y
  576. //        int nResponse = dlg.DoModal();
    6 d9 q% ]! \. E
  577. //        if (nResponse == IDOK)
    $ C/ ~' X& Y. p$ M
  578. //        {
    4 P* a4 u1 N5 p0 x0 S
  579. //                // TODO: Place code here to handle when the dialog is
    ; i0 r5 I; j+ b6 D3 S6 W
  580. //                //  dismissed with OK0 b9 y# P: {6 T* F" C
  581. //        }
    3 ?8 v4 a- W0 k
  582. //        else if (nResponse == IDCANCEL)' E, N, D1 q0 W- a3 ]- w
  583. //        {6 A8 X& \  @! {/ x9 g+ x( j$ i7 [
  584. //                // TODO: Place code here to handle when the dialog is+ g. u5 x: V; {: _5 _2 @
  585. //                //  dismissed with Cancel3 [; y7 K- O! I7 L
  586. //        }
    $ l+ l5 j9 @( u6 U$ X7 b7 I& |

  587. 0 s8 Q4 O' F8 B' |2 T9 G
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    8 N, Q& C; s+ H+ J
  589.         //  application, rather than start the application's message pump.4 }5 \6 y$ R& n) I
  590.         return TRUE;( b6 Q9 z% r( V" C8 z
  591. }
    / q4 y9 V2 ]1 A/ |7 z4 F9 W' d0 m
  592. & X' `" p( s2 u( c. ]1 v/ }
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    : J7 ?3 O1 V5 k* W* P
  594. {
    3 n4 e7 \* ^; A+ F" @6 d
  595.   int i;/ V0 m5 Y. x4 ^* i
  596.   char *szRet;
    6 `9 \- q2 N; D4 }# u4 p

  597. ' h  B6 @2 ?7 d) U! i
  598.   if(pSource) { itoken=0; sztoken=pSource; }' n/ P# x$ Y6 K  k2 |
  599.   if(sztoken)/ x7 U) q& S( C/ S# V+ S( q
  600.   {
    9 C) B( l! x' D: ?/ ~( F
  601.     szRet=&sztoken[itoken];. m' [: L2 D3 a3 Q
  602.     while(sztoken[itoken])
    ! q. c+ \3 o* R" S
  603.     {
    6 N0 V% ?! O- u; V! X! F  K
  604.       for(i=0;i<(int)strlen(token);i++)4 }) G, j9 Y) `0 O, q
  605.       {
    0 n* g8 X+ z' ?5 Y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    $ d/ R, ?9 S9 H
  607.         {
    5 L4 h2 C, |3 S' {1 }4 M
  608.           sztoken[itoken++]=0;. m2 ?1 z( ^1 @4 n0 [
  609.           sztoken[itoken++]=0;# x% _& ?- d4 f
  610.           return szRet;
    : Q' Q6 A. N8 _0 J
  611.         }& s5 Q* g6 B+ C! c) V- ?
  612.       }, l0 c1 G, l+ ~/ a
  613.       itoken++;
    / E  v* f6 a3 |1 j; h
  614.     }* @: @' [: K1 Z
  615.   }
    0 J' B9 r1 T6 a( s$ [
  616.   return NULL;" @9 \8 A. s/ R# w/ d( N
  617. }
    / [2 G" K( N" _; X

  618. 0 V# x# B) |4 g6 j
  619. void ProcessProc(long Total,long Current)- k4 F! x" Z6 A5 m0 ]+ L
  620. {
    $ K" e) ^- P7 a
  621.         MSG msg;
    ( L- C9 J1 c' ~6 Z& b$ F$ d9 o
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ( a) g+ y3 a. Y: O4 m- B& }1 p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 w. W) B& v4 m1 z1 j* ]
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    , A) j+ Y% U* `
  625.         {& ]$ f. ^' m8 Q# r/ E/ I6 c
  626.                 if(!GetMessage(&msg,NULL,0,0))2 I* x9 J* _4 ?% w* H
  627.                 {
    ; [  b" z) e9 c$ z1 [9 y- z) W
  628.                         return;5 `- A- z+ g5 \6 d( }
  629.                 }
    0 y. l! `4 r+ i( }) y
  630.                 TranslateMessage(&msg);
    6 G) d0 s& R* m$ E2 J
  631.                 DispatchMessage(&msg);  E5 |4 S  k5 \
  632.         }       
    6 D0 j) H' @# h
  633. }
    & m+ ^% v' ~: V% |# ~" B

  634. 4 Z- J; O1 O) X1 J8 j/ n+ o* B3 ^
  635. BOOL bFirstChar=TRUE;
    % k5 `8 l6 T' a8 i

  636. 8 S, M% c$ \  v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# i0 V. r" B" }( p7 J& }9 y8 h
  638. {0 K& l8 O3 [* E9 s6 Z. @
  639.         // TODO: Add your specialized code here and/or call the base class! I: b: E3 L6 j3 ^! R# k: V7 P
  640.   switch(dwProgramState)
    " {& J9 W, C4 `
  641.   {
    # j- D4 [/ ?% A% b, |* m
  642.   case AP_NOTHING:
    ) ?% ~( x% D: g+ h8 c/ Z; `
  643.     switch(dwStartUpSteps)0 r+ X3 t* Y# Z: S
  644.     {
    6 n/ c; F4 d- ^" |+ |, X
  645.     case 1:
      S" V; ~2 q) ~4 Q
  646.       {
    * O% `2 X- n1 J; p# I& g! h: V
  647.         int i;
    5 z6 l- s& M( e+ t/ |
  648.         CDC *pCDC=dlg->GetDC();
    + x" d- n6 K% G. Y) x7 q
  649.         HDC hdcwnd=pCDC->m_hDC;
    # d4 y  p, C3 h) N
  650. //        Graphics graphics(hdcwnd);
    - f: i  y1 ~. L; o, A4 p
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    1 @0 _- m% @/ r. q) `8 I- [
  652. //        INT iWidth=bitmap.GetWidth();
    8 |% @* ^, \( z* A, i8 P1 y+ A
  653. //        INT iHeight=bitmap.GetHeight();
    % H* b. e; R. S+ y
  654. //        Color color,colorTemp;! ^3 r' @3 w5 I# Z" J
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)" |, K7 R  _6 B$ X$ y) y
  656. //        {
    # e9 y! j4 X$ t* a3 f# \9 l
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - B6 S0 G! p$ c- t& o4 o
  658. //          {
    ( t4 R- t! h  k5 ?) ], f! @
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 X) D, p+ k/ B
  660. //            colorTemp.SetValue(color.MakeARGB(. v) S  a0 M* ~3 \+ B; g/ a: a
  661. //              (BYTE)(255*iColumn/iWidth),
    & R6 }* }8 h; `: G; ]7 Z  c
  662. //              color.GetRed(),: @& S& y1 q1 [! n# G
  663. //              color.GetGreen(),( H% s# Y8 [$ R
  664. //              color.GetBlue()));. o7 A% Y. @9 G- ?- U
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; P) g8 `# U; J
  666. //          }# e) F: K) K. \$ h) R/ J5 g: ~5 E
  667. //        }
    2 t. S. b# E3 r$ h/ c: s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);1 Q  k" @! S* w0 z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");2 I! T4 q4 }4 e+ t& ~( ^9 H
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");  S- W) x/ T' u/ v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 A0 o' e* t4 e) D- V5 j2 S$ m
  672.         for(i=0;i<240;i+=8)
    1 H! i! }/ V1 N4 {' t
  673.         {, H, M3 c" J0 K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; P) a! S! N1 i: o
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 i5 L4 ^6 J( i! M4 x
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 \6 q- q; w6 n4 P
  677.           Sleep(33);
    , x- R6 d4 X" g' U0 _' n
  678.         }
    & f/ f' z3 w6 _
  679.         Sleep(1000);
    1 T4 z. c! F  h4 F6 [  G" Q
  680.         for(i=240;i>0;i-=8)$ d" {6 V3 U0 h7 }# G0 E
  681.         {5 [5 |" J( Q& \# }0 F/ G; h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 L3 O9 n. r0 B: n, ^9 N$ o3 ~
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 r* G& `& K$ T. U  ^
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 O! k, u: r) i$ G  T
  685.           Sleep(33);* f( ^6 x  M( H7 c7 m9 ?
  686.         }( J  _. t/ H0 j* r; x# {5 p
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; X3 g" x/ Q/ y5 Y6 ]
  688.         dlg->ReleaseDC(pCDC);6 S$ |" ]/ ~/ k& N0 [' T3 t
  689.         DeleteDC(hdctar);
    9 ]7 i5 }+ X8 z/ u* @6 j8 b
  690.         DeleteDC(hdcsrc);: G& Y% f4 f, q5 ^8 i4 _
  691.         DeleteDC(hdcorg);
    5 Q+ x* ?  d9 `- g/ s$ k+ O1 r
  692.       }4 W9 j  j5 g* }1 @9 G! N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! l  M* K8 Q. F' x# _4 f* B2 a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");- k! P7 Q8 q7 r( E! M6 B
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ! W' A% R; i6 j0 s' Z
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% Y% R8 R/ M) K5 p- \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( o* o) w! a! z. A
  698.       if(!Dn.Connected())  W- P7 a5 R' q; l! h
  699.       {
    / F8 l1 T+ t8 h' J2 D6 Z; `0 l* F
  700.         dwTotalFiles=1;' s5 [6 s  c6 ~1 }2 d
  701.         dwDownLoaded=0;) o) x( a. M8 u  I, E
  702.         bSilentStep=TRUE;" v$ C7 h! w# T0 ]
  703.         bCompressed=FALSE;
    1 s) K5 {' N7 ^$ K2 R4 h
  704.         strExtLocal.Empty();* j# h7 A8 T5 r0 X  F& N) e7 h
  705.         strFullName="readme.txt";
    5 U  r# p2 T; i0 U- Z* X
  706.         dwProgramState=AP_CONNECT;5 v( @9 ]$ s$ g. y: K: q$ A
  707.       }
    9 g1 Q0 n4 B) z6 m! l" r9 m- o
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 e4 r7 K4 k$ Q4 X7 Q0 I
  709.       dwStartUpSteps=2;
    1 p8 h# i; }4 N9 P- U. W
  710.       break;
    ; ^. l; X6 H# O. H7 F' q8 [
  711.     case 2:
    ; p% C8 j: A6 s! K0 O
  712.       {
    # @4 i' ~3 G0 a) K. ?$ N; S
  713.         int iEOF;
    0 H5 d/ O- L5 B5 C2 G0 \
  714.         FILE *fp;( s1 e6 a9 V( v; w
  715.         char szString[512];# q7 k1 J$ g" ?* e- p7 ]
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");" x  G$ q( L/ N! t, u! |* d
  717.         if(fp)5 ?7 \7 l+ \5 p' q5 Z  h; S4 n
  718.         {
    * `4 ?. ~* ^6 \6 @
  719.           do3 P/ q% G9 u( L9 x5 L. J) t$ B: A, ^
  720.           {2 y& e& X0 y& X9 ]
  721.             iEOF=fscanf(fp,"%s",szString);9 R( h% [; i% w7 X+ ~
  722.             if(strlen(szString))7 Y$ W( `# d# [4 W6 ~
  723.             {
    % K$ O5 G+ `6 n( o
  724.               if(bFirstChar)$ m* C8 f1 j) `; `) y  Z) k9 W( ?
  725.               {4 ]- p8 {- ]* G) J' Y" M5 n
  726.                 bFirstChar=FALSE;  i& k/ C0 H. d& B+ q
  727.                 bConnectIsBig5=FALSE;) ~( w: N. I; w
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 i, ~" n9 R( e/ z) U4 f
  729.               }: R9 e, t% F7 J  I
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    $ K4 n. Q0 z/ G, p
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    " v- l! T7 y  y6 C/ ^# v/ d) x/ g6 u
  732.               dlg->m_ListText.AddString(szString);9 n; f5 T, ~/ ?$ p" ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , t# y) P( L9 K
  734.               *szString=0;1 s/ `" A2 m( a
  735.             }( Z8 z/ L# B" F3 s# }: x0 U
  736.           } while(iEOF!=EOF);% w) [9 P- L4 l: K# ~1 U- e( r
  737.           fclose(fp);1 N$ P* C/ Z* |5 Y( I0 d
  738.           unlink(".\\DownLoad\\readme.txt");0 `0 {, q- N0 K
  739.           dwStartUpSteps=3;- z1 C; d4 K9 t$ y/ c; b1 @/ X/ o
  740.         }) Q1 S# F% v# c) f; n; g
  741.       }
    * c; C7 o8 P0 ?$ C8 I2 w/ M
  742.       break;. q, t9 L! R: T% w& t& {5 O
  743.     case 3:2 `$ f9 u" H5 N- z
  744.       if(!Dn.Connected())
    ! {3 E; L/ @3 l- I4 {# `3 t/ A! L
  745.       {
    $ A6 H) O/ s6 G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);5 t! U( ?" V9 ^$ O  N
  747.         dwTotalFiles=1;$ j" w5 a& s9 _$ a- ^& X- k# k! K
  748.         dwDownLoaded=0;5 f- D1 }" T$ s3 l5 c5 |; ?
  749.         bSilentStep=TRUE;( u5 d" d3 g5 X' R: N! ^) L
  750.         bCompressed=FALSE;
    0 }2 e0 p1 U) m6 T7 M9 l, o
  751.         strExtLocal.Empty();9 z3 R8 v# J' |3 ^( C
  752.         strFullName="checkversion.txt";  N. y' z! K. b  g4 M; ]
  753.         dwProgramState=AP_CONNECT;
    " i4 c- @6 f6 x/ C. r8 T7 n" ?
  754.       }2 j7 F+ |* a" C" u% o
  755.       dwStartUpSteps=4;: l9 b7 s+ B/ D  U  q  t4 q8 w
  756.       break;& }, }1 z# e1 g- C/ }- o! p
  757.     case 4:2 @' B8 A3 S/ R7 r9 j
  758.       {
    " J# g7 O  E6 g0 m: c9 z+ W7 T8 o
  759.         FILE *fp;
    . F2 d& _1 p0 K4 N# ~
  760.         char szString1[128];  M( l2 O6 X% k+ n$ `7 }
  761.         char szString2[128];
    2 Y* f; o" u9 T" ]- W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; _7 D2 ^5 U4 _! o4 C3 I& w
  763.         if(fp)
      H- G9 g! @' I8 d7 W' E! L$ F; }
  764.         {7 ?' a' Y1 q% [5 s
  765.           fscanf(fp,"%s",szString1);8 |$ Z# _  _: N& Z9 n9 Q/ S  G" [, r
  766.           fclose(fp);" k) M9 J+ d: |9 f2 r1 C  G2 Q- k6 \
  767.           fCheckVersion=atof(szString1);5 q( A# m+ i- d- L- W% o2 ~2 B& C
  768.           fp=fopen(".\\checkversion.dat","r");  y" n! ~$ k2 o1 |, m
  769.           if(fp)
    0 H% o* x: S( i" g9 ?
  770.           {. l' J& a* v! M$ F
  771.             fscanf(fp,"%s",szString2);* U, p0 `2 [/ D3 ^
  772.             fclose(fp);
    . n2 q( v" [* i6 ?) B
  773.             if(atof(szString1)!=atof(szString2))
    / T* t) v' H3 u
  774.             {6 V7 B# \7 L- ?6 k
  775.               if(!Dn.Connected())& S! ~; v9 I7 \6 }# o
  776.               {/ R4 E6 ~# P0 l+ d: ^7 D) A% G
  777.                 bFirstUpdate=TRUE;
    - O) _0 F# f' i" i8 s/ d4 b7 e
  778.                 dwTotalFiles=1;- k& E) t" i' U7 W$ k5 I+ G
  779.                 dwDownLoaded=0;/ Q5 Q# p) J1 j
  780.                 bSilentStep=FALSE;
    , n1 T) h: @% b3 k& O
  781.                 bCompressed=TRUE;
    : h( R2 @0 j  f# g3 A/ U3 e) e
  782.                 strExtLocal=".\\DownLoad\";* E* V8 K" A' ~. b! f
  783.                 strFullName="update.txt";3 v% i- T& l0 ^3 K- l4 A
  784.                 dwProgramState=AP_CONNECT;$ P" v8 D( E1 F: j& E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    1 I1 H, {* i) S) v8 u
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 m$ L' s+ h0 N" F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    4 _5 s, O" o  U5 Q( \$ ]

  788. + n' Z" \7 X4 w7 _: P; I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . ?$ ]" n+ M$ B' I  e% |* L3 @
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    & c. {$ T: r7 I, I/ f* s1 ^" \( D- r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1); V1 S) b% ]8 S% u5 T( U
  792.                 {5 n9 ]) u3 u  @) r
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");8 X. c. Q: N5 {5 Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 A6 R0 I0 ^$ Z/ e0 T8 G9 v
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 a0 ?. y" p% F0 L+ ]7 ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # I+ E) H3 R0 e& S; R

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-9 03:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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