CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
- I6 r% T+ K& D$ U
  1. / RevApp.cpp : Defines the class behaviors for the application.
    % \7 n, d, S) p: N& J* J! x
  2. //+ q8 N& y& k' n( `0 U

  3. 4 r9 t" g3 ?8 l& T
  4. #include "stdafx.h"' v& d! {  d# Y7 I& d3 U
  5. 0 z9 F8 e' F+ Y- s- C
  6. //#define UNICODE
      c! |; l0 O! f  m. W
  7. //#include <gdiplus.h>' k$ Y3 m& k  N9 J6 c; ^  `" \
  8. //using namespace Gdiplus;; \5 ^) H7 [. R4 R/ L+ ?) j( h; l

  9. 6 p' J, a1 v5 U4 `
  10. #include "RevApp.h": h/ w& X  b& j9 G5 l" l) P4 m
  11. #include "RevAppDlg.h"1 r4 u5 u$ P( f+ n

  12. " g1 ~0 Z/ N3 h% S% e
  13. #pragma warning(disable:4786)! I0 T: ]( |  Q
  14. #include <map>1 c- x5 z, o$ s( Q# a6 z: g- T
  15. #include <list>
    & c( G: Y- S9 }8 a) n5 ~. q' b" F6 A
  16. #include <direct.h>
    ; _3 b* h5 m" [- x

  17. " g& Z; I# [  i/ C
  18. #ifdef _DEBUG
    , _4 _6 |, c6 Y" d
  19. #define new DEBUG_NEW; A' t  d2 b" _* a; ~3 b6 e
  20. #undef THIS_FILE
    ' `7 d: \1 U2 I8 o: o+ O; X
  21. static char THIS_FILE[] = __FILE__;9 v  D# C: g4 y1 g) E9 I
  22. #endif" ^! d/ V! k2 P$ [9 Q' |, x# A
  23. #include "SkinResDef.h"
    # W& n/ y: w6 Z4 P/ _3 q
  24. #include "ChangeBG.h"' \, X/ L. A% a5 x$ h
  25. #include "AFXINET.H"
    & y% f% v$ m% H3 R- o. G; Z: \; T

  26. 1 F* F% t$ s( v) W8 w+ X# m
  27. #define TRADITIONAL_CHINESE 0  _, O0 B8 ?& l, Y+ R+ E
  28. #define SIMPLIFY_CHINESE 19 V% \3 {/ q9 g$ E0 [) }. D* C
  29. #define ENGLISH 2! q' w2 E! Y2 I; E$ j( d; W1 I
  30. int m_iLanguage = ENGLISH;% J# R# C. R6 N5 y! l
  31. /////////////////////////////////////////////////////////////////////////////1 I. v$ [8 y5 N' |, u
  32. // CRevAppApp
    / p/ k  B8 d7 X, b7 T
  33. 3 Z1 m. _3 {2 S: n
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 A# d6 M% i4 J: J; W/ G
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & O# B4 u; [# i
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    2 \' b, u/ s9 F, X- r" t/ L' a. C
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    & g8 h; R, B" A' d6 {
  38.         //}}AFX_MSG
    9 a8 w5 r9 m+ K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! `" R# b/ F# S6 L1 n3 c1 l5 h' k, D
  40. END_MESSAGE_MAP()5 A5 w" n; V$ ]
  41. / t2 c. R3 f3 f- E6 u
  42. /////////////////////////////////////////////////////////////////////////////
    % Y- C  o5 Q. a! j1 m  N
  43. // CRevAppApp construction
      I! Q2 e0 O! o& W9 d
  44. 3 i+ q7 O7 R. ~, {: h& ^
  45. CRevAppApp::CRevAppApp()
    6 r3 l9 |  p- B' V$ H6 \& {$ t# E
  46. {1 f. k6 X2 @3 X) R. r& O* U
  47.         // TODO: add construction code here,
    5 |, K  D3 Y) y" ?# n. b8 b
  48.         // Place all significant initialization in InitInstance6 p+ Y' d8 H& T
  49.   bDisplayIsBig5=FALSE;: p7 o! p2 q  s9 h: a* Z8 g
  50.   bRestartUpdater=FALSE;
    - @/ D  y! N7 s% U6 V
  51.   bFinishUpdated=FALSE;
    ; P5 }  [! O  i) Q/ k
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    . W* M: `* I$ V8 \
  53.   InitChangeDataBig52GBKS();4 h8 x  c! E9 j  [9 P' f: |
  54.   InitChangeDataGBKS2Big5();
    2 ?1 D$ h( A1 n4 t' n2 T3 w
  55.         //5 o" s& r, y6 K6 B5 G# `/ v# ~
  56.         bClickRunExe = FALSE;3 y; K/ X4 O0 P; h' x6 Z# Y6 x
  57.         //2 v/ i0 V/ U2 g# G! B
  58. }
    ( ]" O- H% P! w5 C
  59. $ X/ x0 p" T4 n3 I8 ?0 l/ F. R
  60. CRevAppApp::~CRevAppApp()' k- ?4 d9 F* Y0 J" m
  61. {
    + M: V7 r  V" L9 A- L/ I
  62.         // TODO: add construction code here,( P! X# z7 n. U$ Z$ k' L8 A
  63.         // Place all significant initialization in InitInstance7 Y& e; g/ f, s9 F
  64.   EndChangeData();
    0 c8 Y  G5 v' I; t3 M% G" v
  65. }
    . @4 ^: e8 @/ m, R7 C7 n
  66. . R4 ^7 R0 J: {9 z
  67. /////////////////////////////////////////////////////////////////////////////. ?8 i: N: X* F! {
  68. // The one and only CRevAppApp object5 }# T! {0 M& \, y8 o" C" Z/ y
  69. " B8 ?  ?* `6 F( Y: I/ c
  70. CRevAppApp theApp;1 B6 r- T) P2 }/ v0 w

  71. 4 e9 n/ ?! F& J# ]4 E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)- P8 f* S- ]# |' C3 w, H
  73. {
    4 h3 M1 t, z; G! M. q8 {
  74.   int iEOF=0;6 p+ F' N2 o! I( s
  75.   char szTempName[MAX_PATH];
    7 i* w$ p! u. h- o" `( F
  76.   *szFileName=0;
    9 u9 R/ f1 m% [3 X" W4 a
  77.   iEOF=fscanf(fp,"%s",szTempName);1 }( b: j  K& b% o5 u% c& p
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ A, ^0 U) i  q2 y* O( g) g/ x, ]
  79.   {% i# i& n7 _; H( m3 E+ d2 _4 `
  80.     strcpy(szFileName,&szTempName[1]);4 W3 E2 [) T. h% G
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    , g, r2 r+ Z! {$ f, D
  82.     {
    ) {, C  B+ ?9 o) B6 \
  83.       iEOF=fscanf(fp,"%s",szTempName);) A& ]& @% d, H( L: d1 |
  84.       strcat(szFileName," ");
    3 y  H( u. q- h& m
  85.       strcat(szFileName,szTempName);0 N! \0 }0 ^: P. ?
  86.     }. U% d# i: H# k. p8 W/ L2 W6 B
  87.     if(strlen(szFileName)>=1)& v7 n( r$ C1 e$ p$ k
  88.     {# ]5 V+ K+ X" \. w( A; {& s
  89.       szFileName[strlen(szFileName)-1]=0;* D# r9 t& {) B4 C
  90.     }
    : m6 |! ?" n; h
  91.   }# I+ ^- M% {0 D/ ?
  92.   return szFileName;
    ' o" c$ S; y& a+ ?
  93. }" X$ M- ~$ a, x- S+ |/ H* E0 Q
  94. ' Y1 W, a1 _& `8 y4 i9 {
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + C/ ^. h; S: X
  96. {
    % O( K& z4 d+ I( ]
  97.   FILE *fp;
    + O$ x5 k$ X% m3 l1 P
  98.   char *key=NULL;
    * h) ^# i" W. z: @
  99.   char version[MAX_PATH];
    $ b" @# \. K: O
  100.   LPUPDATEFILE file,olds;3 U" v# v( }9 H! h' X7 f4 d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;% v# v) o, m2 V8 J

  102. " S7 n5 b# v' E. _* o; R( q# a
  103.   UpdateList.clear();& C  T2 P3 T% ~9 D  g# v- ?5 k$ H0 [
  104.   UpdateFile.clear();$ U, S  Q! P7 f0 p" j7 L
  105.   if(GetFileAttributes(filename)==-1) return false;$ G$ J# I% F% M4 ?
  106.   if(!(fp=fopen(filename,"r"))) return false;: F' n" G" \3 H1 a
  107.   fscanf(fp,"%s",version);
    % F/ p6 a0 x3 L0 O* j$ V# `& q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 u& p: V7 J  C8 E* h' \
  109.   while(fscanf(fp,"%s",version)!=EOF)* C7 M# E3 ?6 _% T' C
  110.   {) I' I0 K+ V; `% ^! i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 W& N+ H8 Y2 Q( w
  112.     fscanf(fp,"%s",file->path);  ~5 K: h; W6 _7 V
  113.     ReadFileNames(fp,file->file);
    # j) ]# o1 |2 Z" p0 w! r% Q. P
  114.     strcpy(file->full,".");
    : G3 u; ?8 Y, j% Z; g* Q" H; Q) M
  115.     strcat(file->full,file->path);2 e- l. F" s* G) c
  116.     strcat(file->full,file->file);- R4 j, F5 c/ _5 X* Z' k# z; V) ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    " c  \, G' A8 f" z% g  Y* W
  118.     {3 G0 q2 p& e" o( M$ M7 O4 T
  119.       file->vers=(float)atof(version);: c) Z$ f$ k% o) _% n/ d7 ?) s5 _' ]
  120.       UpdateList.push_back(file->full);
    # }& u+ q! j5 A8 \  @% N
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    6 ?  v- R: B0 g6 I
  122.     }  M. T! k' |% y' H' {" v2 T, I
  123.     else% @# W; r, E3 }0 N) L& c+ I& @- j) R
  124.     {
    9 u0 y1 \# [  S0 p5 j
  125.       olds=(*p).second;) X6 Y2 R; U! |
  126.       if(olds->vers<(float)atof(version))
    2 Z- w7 Z$ W: Q5 T
  127.       {
    3 P1 o" e% ]1 m1 P0 {. C. I
  128.         olds->vers=(float)atof(version);9 s. Q$ Q$ j" l: O
  129.       }
    % o% q- p' o2 t: K
  130.       free(file);: T" U% V4 u5 L: @
  131.     }0 _" O0 X4 ~$ W! r
  132.   }
    " N' t$ \* _2 T
  133.   fclose(fp);* E! r& x( X! K9 c2 n* t" Y6 z% X6 C
  134.   return true;
    8 w" D0 q% c* h2 Z$ {1 E8 k
  135. }# ]! t3 y: n5 X# Z6 q' j8 v

  136. 7 ?4 p# R0 p/ R% ~. d
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , Y% o) W! m) X% T; m: Q+ ?
  138. {- \/ P" Y. w3 [' g2 e2 t2 ~
  139.   TCHAR  szFull[MAX_PATH];
    0 q& N  o! W9 G5 ~
  140.   TCHAR *token,*inter;+ t5 q- e) _$ Q5 [1 V
  141.   *szPath=0;
    , ^$ l$ A; v, y1 O( k
  142.   strcpy(szFull,szFullPath);
    , {( A2 K- w( s7 H3 p
  143.   token=strtok(szFull,"\\/");9 c" E/ \" Y6 S; X# A5 r; `: L
  144.   inter=token;
    # ~+ U* z6 q5 y; q
  145.   while(token=strtok(NULL,"\\/"))0 r8 b9 E* x2 }6 X. T" o, V* \
  146.   {0 q+ d. F3 w+ |
  147.     strcat(szPath,inter);* c. L) R& C) h- G4 Y
  148.     strcat(szPath,"\");5 y2 v9 E% T9 z
  149.     inter=token;
    & p; J2 |2 K6 M0 w: C
  150.   }0 M2 h0 ?0 K0 ?
  151.   return strlen(szPath);. s2 t+ t& e8 T5 Z; v
  152. }, U+ K; T! d3 O( i2 Y# V

  153. 1 C( @8 e$ g+ H9 x7 V% k# {$ {7 j+ C2 t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)) g# K/ z  m: w
  155. {( O" J7 ?+ D: u: O
  156.   DWORD attrib=GetFileAttributes(Target);6 z! z; E( ?/ K& Q1 g
  157.   if(attrib!=-1)
    6 _( U! s; D: v- F% y( F8 b( P
  158.   {% x5 Q# ]: L- o: x7 K2 |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ d8 |3 i' ]! ?+ }* V, M# M
  160.     {! ?, x( i7 C! M' |. g0 V3 @
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);" p+ F8 o- O% ?
  162.       SetFileAttributes(Target,attrib);
      @$ `0 r; Q2 T9 h
  163.     }
    4 J, c7 D8 Y* m+ k7 {$ }
  164.   }
    ) m, i3 ~/ v, R' ~$ p) B4 Z/ M9 [
  165.   CopyFile(Source,Target,Erase);* q: I! V9 x# y& f  W& i" w
  166. }
    % x% c. H# ?1 f) P" w, c- }

  167. $ O8 U! |  B" |7 y" F# `
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    3 |" A( l  l; X: E  x/ j
  169. {$ r" S+ b, W. k; J; f9 W# B
  170.      FILE *fp;9 P  Y! n4 `; c2 d& Y2 `
  171.      char  szBuffer[8192];
    ; k# O$ f! G) I  w
  172.   va_list  argptr;
    " x4 m/ S: ]" o6 h3 h
  173. 3 i9 G9 R3 X. s! E% T. K% s
  174.         va_start(argptr,message);
    ) [; Q: o! f) C
  175.         vsprintf(szBuffer,message,argptr);8 P- N1 R, H" ~
  176.         va_end(argptr);. n5 @% _4 B' `% a* d( q# |
  177.   fp=fopen(FileName,"a");2 A8 K* P1 @0 d: A2 J4 y
  178.   if(fp)# N0 C0 K, V5 d  i+ q" x
  179.   {
    3 G" `7 y# Q; ]* s) h* F
  180.     fprintf(fp,szBuffer);
    ' v" k' N3 y" k
  181.     fclose(fp);# ~0 Q' N! }. H% c5 p( z6 Y6 G  b
  182.           _flushall();- D6 m+ \7 R  Q. ^
  183.   }* {+ C1 Y- M: P2 c$ y0 W1 r
  184. }# g; I  Z1 m1 r

  185. 6 c& n3 ~& j9 W! H, o9 p: s# u: U6 Y7 A
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . N2 S. b- p* p5 P
  187. {
    : A6 H5 K, K$ W! y/ M
  188.      FILE *fp;! t2 g) P$ ?7 t
  189.     DWORD  attrib;* E2 |0 A' g$ u6 c6 W; G
  190.   attrib=GetFileAttributes(FileName);' k$ z3 L# z: {: J$ R9 B9 R" |, s4 n3 m
  191.   if(attrib!=-1)
    . \9 ^  W: l) i+ J
  192.   {2 Q+ k1 I6 A# k( N2 P* y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# |; \; ]7 w9 P
  194.     if(!SetFileAttributes(FileName,attrib))
    / N" \% M( Q) q: W2 d/ ~
  195.     {
    ' }* {$ o- i9 E' X
  196.       return FALSE;. q  e* p+ S; s
  197.     }! X) L% a# F4 d* _# u
  198.   }9 Y2 I" z  w, U- M
  199.   fp=fopen(FileName,"wb");+ P. M, z; v& a1 }" y
  200.   if(fp)
      `6 U+ d4 R& Q  i" P4 f  \
  201.   {
    ( w) F9 H1 f6 ?( d; E- ~9 Y
  202.     fclose(fp);
    , H: b1 D% v$ e4 i
  203.   }1 o& U6 f- z( [9 u# C% V
  204.   return TRUE;# j, `- ^; I3 }
  205. }0 [% e5 f5 y& B. `* t2 P
  206. & g3 K( S% b5 P% C
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ) i* k' R# b2 ]* z- U5 g3 e
  208. {4 z4 l$ Z4 L" o, _# \$ ?1 P4 g
  209.   char filename[MAX_PATH];7 d0 P2 a8 A2 a. V7 O
  210.   LPUPDATEFILE file,olds;8 @  k  y4 O4 ^5 A. T' Q+ F* S
  211.   std::map<int,CString>::iterator i;
    3 t, B" ]$ p. p, g, J" D
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' ^6 ^5 e+ ^' T$ ]# K4 Y
  213.   std::list<CString>::iterator l;
    1 H% u6 C3 P( n! z" R: l6 F+ x

  214. ! Y) M" Z6 R1 b0 z; Z1 ]+ d( s
  215.   if(bFirstUpdate). n2 Q5 C  R! {
  216.   {3 R7 F5 J" C5 W5 Y7 s; h
  217.     dwCurrFile=0;1 G6 Y# c$ s. r/ ?0 M$ E6 u
  218.     bFirstUpdate=FALSE;
    / o6 H/ P) I* p# h3 C  h
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- _* ?2 `8 D& u/ ~" M
  220.     {
    5 J  P1 y9 `8 N& H9 v  i
  221.       dwTotalFiles=UpdateLocal.size();
    % ^8 M" P: |% ^) x: d$ V
  222.       dwDownLoaded=0;: y$ {* d6 ~# R; a+ x' |
  223.       bSilentStep=FALSE;
    4 s$ ^4 Q8 ~! g* ~+ e: I& @7 a) z
  224.       bCompressed=TRUE;, z; T/ @, q. _# e
  225.       strExtLocal.Empty();1 V8 y6 j% s5 n; W
  226.       strFullName=(*i).second;
    2 g: a* R; I& z! u2 _+ {! i  ~
  227.       dwProgramState=AP_CONNECT;8 f4 y& q' C6 U
  228.       return TRUE;: s+ d" J/ q2 u/ P. l. D
  229.     }- D1 j, [" Y2 J
  230.   }
    / p9 x% I' X+ I+ H+ W  N. ~, c8 t
  231.   else if(bRestartUpdater==FALSE)/ G0 F, y" I& N3 a; w* @& M* E
  232.   {
    1 q2 L! n$ a( p; b' r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      S' _; D3 ~# f- c1 `- r
  234.     {' u) L" F% K1 `1 O% }' B
  235.       file=(*p).second;
    $ g% }% O* Q1 R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    . h* k) S( @( n- r
  237.       {
    * e- w+ N. a0 E& y0 g
  238.         olds=(*p).second;1 X, m$ k9 ?$ `6 G
  239.         olds->vers=file->vers;
    1 r: j* f4 b" _3 P9 l# s5 Y5 `8 X6 D
  240.       }7 y" ~, Z0 Q& K' R
  241.       else/ o& [; A4 F* ]; k+ M. S9 |% q8 R1 |. ^
  242.       {- S( {. u6 M3 R
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. T+ h9 ^8 v* s% {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));7 |/ g4 l$ \+ l+ h0 n
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% F/ ^( V% }! K" {
  246.       }
      e1 R8 x6 O" V2 P( @
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");1 @3 H  l/ }0 T
  248.       sprintf(filename,"(%s)",file->file);+ o# W6 L* Q3 ?+ D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' f/ W. i& y5 m% f9 [
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 ]5 }! p5 Q1 j+ P9 F1 F
  251.     }2 o2 L: E. {* {
  252.     dwCurrFile++;4 F, @! d9 V% Y1 N
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())7 ], @* O7 \8 M
  254.     {
      }$ Q) X1 F, h4 ^
  255.       bSilentStep=FALSE;) }/ O, J+ l7 p
  256.       bCompressed=TRUE;
    - i1 @+ p7 b) G3 I, I' Z
  257.       strExtLocal.Empty();* f: F  z4 f. E: W! T5 X5 @
  258.       strFullName=(*i).second;' H. H/ Q  h' }/ N# v
  259.       dwProgramState=AP_CONNECT;7 b: R# i+ g, q9 L& C7 M
  260.       return TRUE;
    ' r# e7 e* G! o- m
  261.     }
    % B% K. i/ \  U- H' K6 q, i6 E
  262.     if(!bRestartUpdater)# _- Z% b8 T' M$ W: s
  263.     {+ I; o' R$ x6 I: `" I3 O/ K2 ?
  264.       int iCurrSize,iFileSize;
    2 E7 e, N' F0 h. T+ o1 t8 e
  265.       iCurrSize=0;
    9 B" S' _6 l' y) u# x. @5 h/ {; y
  266.       iFileSize=UpdateList2.size();9 d" m& m) C  I3 q6 I
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");3 `! z! |: R) ~7 {0 ~4 S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");8 J; T% X0 k; ~+ b0 w# y4 i5 T0 H) w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 ]3 `+ L$ \  M9 {( G0 A
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 i) A- X$ J. v& g) W/ t7 C# a2 b! g$ v
  271.       Fclearf(".\\update.dat");2 V0 F7 i( E( f$ ^4 u$ {" k
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * @4 C- l( B7 u" H6 ~& \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); }& `( \" J7 j
  274.       {
    9 i: ?! {9 c9 H* I% q7 f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())- s" B, N- z6 W) @4 a: P! X: h3 j6 v
  276.         {0 g6 t- M/ O9 I. Y$ P& g
  277.           file=(*p).second;5 A0 [/ b2 C2 O7 C
  278.           sprintf(filename,"(%s)",file->file);/ ]& t/ G- R( a( [; E: w( z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + I  @) H* |. B6 X, z
  280.           iCurrSize++;
    ( v) o1 O7 n' R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 n/ p* ?" ?" `; R  Q- {2 v
  282.         }* K. i* @6 \7 Y/ J" }$ J: _$ a
  283.       }
    2 A$ Q; J2 ?* d
  284.       unlink(".\\update.txt");# U, {+ O' H$ [" i5 ^/ }# D. p8 t& x
  285.       unlink(".\\update.tmp");- z9 E* a7 d- N
  286.       Fclearf(".\\checkversion.dat");
    2 T7 Z/ y9 p# }) b5 H6 V3 c9 f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    0 v4 B- @5 S- b! j
  288.       if(UpdateLocal.size())9 F8 }; Q' H8 k4 M' c
  289.       {
    / R8 m! n# k: b4 D
  290.         UpdateLocal.clear();
    : Q3 k0 ?8 v/ R* b( y6 }% g1 W4 y
  291.       }
    / n/ J3 i& A8 I  e6 V" Z
  292.       if(UpdateFile3.size())
    0 g! Q' r, c1 L- h
  293.       {2 `# A( R' x3 Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)& y% `7 q2 P9 X6 `9 c
  295.         {0 I5 s1 m$ K+ [" k
  296.           file=(*p).second;
    4 h+ x' Z, D& R7 B; {
  297.           free(file);- t/ Q# x5 w, l- [" I7 A0 q
  298.         }: T' R& o* ^, H" P
  299.         UpdateFile3.clear();
    3 a- y9 l& o2 C
  300.         UpdateList3.clear();# G- _) ~1 H: m  c7 G+ {0 V
  301.       }% r9 P* X; ]$ I1 H
  302.       if(UpdateFile2.size())2 V( p8 T9 j; m6 v0 h9 }+ A! l
  303.       {9 h1 e* i$ x  m; I$ V5 }
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 d3 ?  r* W4 r6 u/ ]
  305.         {7 ?6 ]& i6 `* R  B9 i
  306.           file=(*p).second;: S) W7 x# R! W) x
  307.           free(file);: p4 E/ r' R1 h' v) L$ j
  308.         }1 K! x5 q. u1 B1 e5 b6 o
  309.         UpdateFile2.clear();$ I# K+ O0 f2 _* Q) E4 y- z
  310.         UpdateList2.clear();& {* {" @( d5 }
  311.       }& a: F: f7 \$ K
  312.       if(UpdateFile1.size())- o& i$ ]# D  i/ B) F
  313.       {1 K  w3 T  r4 e6 n
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + b( ], S4 I2 k+ u( k) }6 w
  315.         {; U; V: t: d+ t6 @- D3 {# s' L
  316.           file=(*p).second;4 }9 K% y: \+ N8 I% N8 b+ M& |
  317.           free(file);& N' |8 k" z# m$ j" A' j2 T
  318.         }6 }5 |: C6 O; a8 O0 |. x
  319.         UpdateFile1.clear();
    4 i" A" [) y; l# J' A" |# P- [
  320.         UpdateList1.clear();3 ?' p' e& n  S6 R$ v$ a
  321.       }
    : o3 r: `' `' o3 g* M& |/ A' H
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & u9 s/ x; N, O4 z/ s5 E
  323.     }% Z) R( N' f5 T5 u. z  _
  324.   }2 w, N- @  n" Z
  325.   return FALSE;% r! W. I1 Z+ P/ |0 Z" @) B
  326. }4 P+ c7 b1 [% p& n1 k6 O

  327. 9 M3 @+ ?' i+ P/ y8 a  D. U
  328. void CRevAppApp::ClearAll(void)8 y$ e& f4 c' I9 s, d: n$ s% x3 Z
  329. {. R+ o- H& X, P+ w+ ?! e+ t
  330.   LPUPDATEFILE file;
    8 i: g) G5 r( i4 ^  [
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( H( E- H+ `7 ~) C; H
  332. $ \& g% E/ }5 d, G4 K" U
  333.   if(UpdateLocal.size())
    # `1 D' g5 Q8 N& v! z3 J
  334.   {
    " q+ z! y1 s6 f3 ^9 L
  335.     UpdateLocal.clear();
    6 O2 x2 V8 G" o5 z2 h! o; V. ?
  336.   }
    7 ?$ f/ ~0 c, F2 {! d' V
  337.   if(UpdateFile3.size())
    $ ~0 d8 c/ f2 |: F# K
  338.   {, s: S, f( c' F7 X
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! h& q* m% E' f* \0 v8 T% ]
  340.     {* R& A7 g9 u: q. c* ^
  341.       file=(*p).second;% t, D* G# v! x; F1 Y- ^9 t' y
  342.       free(file);% @; z! e+ w2 q6 ?/ u5 v
  343.     }
    $ S, y4 U$ v& O* W, R& ]1 l
  344.     UpdateFile3.clear();; q3 e) A! N4 x* e2 M5 U% R. c
  345.     UpdateList3.clear();
    , g* v( ?( L, c2 V2 C  ]9 y
  346.   }
    ; L0 Q' ~; V7 M; O+ p
  347.   if(UpdateFile2.size())4 X( e; b) u2 Y1 G( ^- q' Y4 h) X
  348.   {
    + {1 y5 _- P9 q1 Q( |- _, O
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' L9 K  ~5 ]0 E# [/ h6 M
  350.     {
    . X& ^( H- Z* E: s7 I6 t
  351.       file=(*p).second;! ~3 C4 \! }6 h5 T7 h2 [/ T: J) _3 s
  352.       free(file);, }* Z7 m! t1 k* ]  L3 V, W
  353.     }
    5 Y* l$ H* m; f0 Q; c
  354.     UpdateFile2.clear();- [. l# j  x# f  N. l% i8 {
  355.     UpdateList2.clear();
    % O3 u% U: `2 H& [
  356.   }
    6 [* v5 h2 Z9 ?+ T1 q  N
  357.   if(UpdateFile1.size())
    * I/ I8 d4 u- R, C! @& X% t6 F1 G  b
  358.   {
    3 C  j0 h( U4 ]/ b, {# ?6 Y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 ]; c! l6 w; Y7 x; m; W  z6 n7 U
  360.     {1 m& @) q0 a* \
  361.       file=(*p).second;
    % _$ X. v  u' n) W' [
  362.       free(file);6 u- b/ v/ ?( I1 H* Y
  363.     }& Q# D9 U+ S# U, n4 F  G8 N
  364.     UpdateFile1.clear();
    6 n% a  U5 c5 h& K$ \. |) y
  365.     UpdateList1.clear();& K& u1 |" s8 h( V+ O4 }. f
  366.   }
      d: G5 {/ U# q
  367. }  
    ) T8 W. H  r$ @. _' G
  368.   % b) D3 _; \  p1 f
  369. BOOL CRevAppApp::CheckLocalVersion(void)% I3 ^5 T( }- S4 T$ X8 E% Z% f
  370. {3 E) z' p4 J$ |4 `! M7 f
  371.   int c;) U6 R7 ~) d1 v- ]; F  E
  372.   LPUPDATEFILE file1,file2;
    ) O0 B9 r/ ?) {( ?$ w- E( @. P4 m
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;' Z: H1 v) m* f1 K/ E
  374.   std::list<CString>::iterator l;( P4 t8 B, l) @; X& a5 r8 R4 y! \

  375. . X- E' T( I* ]( O. Z% R: Q
  376.   UpdateLocal.clear();
    4 B" s% `& k; [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    & N% E4 z$ U& N! J+ M) @
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 C. P' H. r' [& ~7 L* E5 `
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);  U, r4 ]' M4 d
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);, h+ O6 @: p: \7 s7 y" b% h% L# A
  381.   if(UpdateFile3.size())
    8 w( `( I" D$ v( H/ d" G8 E
  382.   {
    ; x* E8 Q' y' w$ S: c
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 ^3 E, [9 h+ P6 M
  384.     {; j& Q+ y9 i* u7 s. N
  385.       file2=(LPUPDATEFILE)(*i).second;8 V. ~: P5 M$ @+ t4 u3 ~+ h. A
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    % f# O0 s* W! V2 A4 t) N$ s
  387.       {# E& @0 ~4 m0 ?% c  F
  388.         file1=(LPUPDATEFILE)(*p).second;, o0 B: Y) {: U" {9 P
  389.         file1->vers=file2->vers;
    " ?) d+ ]' v7 V7 F- t
  390.       }9 ?& I. T  e" X: ?* M: _3 a0 d
  391.       else
    * K4 O: D  s) W4 z- x. v
  392.       {
    & w5 B0 `- U5 ?3 D  Z' a) @/ t0 T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) Q9 n6 J( s* Z5 _1 W/ Y8 u( g4 \
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));* @8 o2 _) R/ d) t0 C$ D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ( k" H* s: c4 \' y
  396.       }6 L, q1 N0 E1 G9 X  i9 b
  397.     }
    6 y- q, i# u8 L1 H8 O
  398.   }
    % d9 \8 ?$ s) d' ~& K
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# Q6 W( F1 e8 `4 Z& I# z
  400.   {$ [4 e- l% @8 \2 L* ?% J( h2 M- z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())1 C( W0 o0 d2 f$ h2 M  m; h
  402.     {& {- A$ c) I: k. Y. \( T2 i
  403.       file2=(LPUPDATEFILE)(*i).second;; E$ U/ \# F8 G3 a1 m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : H  Z3 l$ W3 a  f/ }
  405.       {0 u, {8 }& c$ y& g9 s. }
  406.         file1=(LPUPDATEFILE)(*p).second;- g2 X3 v$ [. g4 e% ]9 q( K
  407.         if(file1->vers!=file2->vers)
    , q# o! O' G; [- x8 H* B9 W
  408.         {
    ' X$ |( Y- `; _& k7 S+ @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ P  }. J9 g7 ]/ F" {* Z
  410.           c++;
    . O8 R, P  N& [6 ]
  411.         }
    + a" M# n6 q( c
  412.       }/ ?% U8 u) x# b# _+ g2 ^
  413.       else
    : Y( N9 F. N4 D( `) I: R
  414.       {
    3 A( Q  S/ a3 W6 m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));- Z8 |! K5 f, N) j
  416.         c++;2 ^4 g; p+ M" }1 d' z
  417.       }
    , @9 J: o% f* G8 X7 C
  418.     }: U: T& D4 m- q- Q! w* F
  419.   }
    ! ?4 g* ]/ X9 w9 f8 J  x# E
  420.   unlink(".\\DownLoad\\update.txt");
    3 ~. G6 k6 s, V/ w+ P! r) z
  421.   if(UpdateLocal.size()) return TRUE;# f" d; y' F7 Q: m& J" i5 ~' j
  422.   else                   return FALSE;
    # x4 q$ K0 W6 {( ^
  423. }
    7 \9 i3 @: l5 G( x, a/ s1 h
  424. : o" g5 ^7 r8 \
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". r% ?+ [) q4 L5 j2 k2 @
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 h- z1 @- s0 |9 u

  427. , L4 n" e/ l/ [4 v: G+ N' X+ _5 t1 a5 I. j

  428. 4 T* f( q/ D% i
  429. 1 r- r4 y3 Z2 N2 c
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)! G! m6 S( Q7 Z. @
  431. {
    - k" J% q% ?' \. v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 G5 }* S, O& K, j$ t0 L! n! r
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 s2 B9 r- M8 o, B2 F8 Y# I
  434.   {1 |9 ]; e  H9 i; C! s
  435.     char szLanguage[50];, O( {: k/ _: ~. _# F
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 i) x$ d0 e+ A) p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " I/ H1 U7 i: v; K+ f( v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ I* D8 L" }8 x4 }0 a1 k% X
  439.     else                                   m_iLanguage=ENGLISH;
    * F" c; T/ b0 M/ ~9 x) w
  440.     char szRegister[100];
    , t* B) M6 @( D6 x- w4 {
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 s9 ]8 {* g- N# c
  442.     strRegsName=szRegister;
    ( `- N# F( D: }9 }, t9 H8 U6 ]
  443.     char szPatchURL[100];
    6 |+ a; N* k2 [6 n8 y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ E2 z" L4 ]# p* S" t5 k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- ^( g+ Y0 A4 b2 {) j1 ~
  446.   }# w$ G, |; F- j$ Q4 l, s
  447.   else
    $ s  l8 c3 M6 n. v% W3 o) `
  448.   {; C4 s$ N0 ?- m8 [- A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 R% m2 z; N7 a6 Y5 z) |2 {( w
  450.     strRegsName=DEFAULT_REG_URL;
    ' R, `( ?2 W; J4 |
  451.   }
    : }) f2 @" P* a' v  H
  452.   if(GetFileAttributes("hosts.ini")!=-1): n9 w" e5 \# g
  453.   {
    % A. C  G4 y8 }# i( b
  454.     char szIP[50];3 _( T% g3 g: W* Q- ^2 ?
  455.     char szDIR[300];1 G. B/ A7 v8 c7 l" S% m$ P
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 h2 l1 O4 T+ I
  457.     {
    $ P$ ]9 G( k$ a% d0 V% [- c( ?; _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");8 _4 r/ y2 _% F2 ?! b2 R+ u
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    , m* M5 d; O4 ]8 L. u
  460.       strHostName=szIP;
      Y5 }! L2 U" W1 n" b
  461.       strHostPath.Format("/%s",szDIR);- M: k9 ~* X# V+ R+ ?
  462.     }
    7 Y1 ^) y2 h0 `) V" Q, ^
  463.     else
    ( e5 r9 r% S. H
  464.     {
    ; L" b: ]4 u  @. u
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# z6 L% B$ b( B
  466.       {
    & o7 h" }5 i3 d3 k: \
  467.         char szLanguage[50];
    1 R$ ]/ _3 c4 c: B, F! e
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : y) [7 M9 R4 ~' H: D" S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: I6 k% E/ E, a5 {; A
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! K) {6 m% k2 f# R9 T# a; G
  471.         else                                   m_iLanguage=ENGLISH;8 `3 G# B8 P9 |
  472.         char szRegister[100];
    ( O, t# T& V' \. l
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + z& ?' H1 V5 i; ~0 M, b" Y$ m" g: U
  474.         strRegsName=szRegister;6 h# ^/ e' R4 y' x
  475.         char szPatchURL[100];3 M, r. g# v' s  s; p$ Z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . d  K7 ?+ {2 J8 Q, r8 F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% ?, V) w; Z1 C4 m0 ^4 M
  478.       }
    * q5 v9 S: V3 `3 p7 d' R. P
  479.       else' t/ v9 S( V" C3 {% o7 h0 r0 I
  480.       {
    & k, }, H: I$ x2 t% {2 t$ l
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. H: K) |2 D1 A+ J9 z; [' c  k- g
  482.         strRegsName=DEFAULT_REG_URL;0 q: _5 i' Q, V- R0 s; l7 I
  483.       }! p5 z6 e# E/ A  }
  484.     }; G7 Z% q7 S- ]! a+ b1 i1 M" K
  485.   }
    ' X$ {8 e! c0 U6 W& O- d" e( ~
  486.   return true;6 K9 {0 \5 d: c" F
  487. }
    * N" l% T3 R6 R5 c* ?' [* u+ l
  488. ' K9 ?, q* g. |8 W) a
  489. #include ".\ZLib\unzip.h"
    ! J7 ]* C2 W2 Q% e3 `  M  o( N
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# T4 E" v1 A2 r) u
  491. /////////////////////////////////////////////////////////////////////////////- g; \1 `( X! w& b8 v
  492. // CRevAppApp initialization$ m0 {; S( b3 n1 ]2 Q( ~6 D) K: [$ t2 D/ y
  493. % K) {" Y+ w! v9 \* w3 w5 Q# b
  494. BOOL CRevAppApp::InitInstance(); m% ]/ \( v) z0 _% G
  495. {& Q6 e" I) E) i4 X5 A$ H6 U& @
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];  y3 f: a  j8 c' {7 y/ C
  497. ( A, i7 {- [/ K. [+ L& x" p9 @/ a/ z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    5 {3 o+ }& }5 v/ c+ @0 U3 E
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    " \: r) I6 x  w7 }" l' H7 E
  500.   {
    7 D4 i/ |) R+ \9 ]: h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");9 W4 T. E( p( ~6 }) u1 A
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ W- ~" @0 {0 @. B3 F. D) v- i, \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))8 z) W% j# E9 b( U! g
  504.     {2 V6 s! V8 i/ {7 f' `5 p0 ?
  505.       strcpy(szPath,szPathTarget);7 [, _: h5 |7 A6 U+ u, f
  506.       SetCurrentDirectory(szPath);! Q' M  M" ]) u# T. ]9 t3 p) }1 C
  507.     }
    ; U$ R& ~: I: L: y- O8 R  k
  508.   }8 N$ W9 d& ^2 o
  509. #ifdef _DEBUG
    ; T% w" }0 C" n  g+ Y) X6 T# B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . [1 |4 _! U7 ~( z2 i5 c
  511. #else+ n  G. N0 v( t$ p7 Q: h5 b
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))! [. X. E7 n* b" |  b
  513. #endif- Q. u! K! c- f# u9 m
  514.   {$ U0 i2 b7 @5 o- \% q0 Q
  515.     char tempFileName[MAX_PATH];2 p# b5 b: L- i& s; L4 G2 r( J6 Y) H% s
  516.     strcpy(tempFileName,szPathSource);
    & [! j( V/ d* O+ q  M6 v9 r
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( |8 ?. r; e0 `, j3 V( [9 A
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 ]! G8 @5 Z5 y" c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. v# y5 `& S3 w/ K$ Q+ Z; ]% w. T8 }1 X( S
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . O- y. J: y  @, `0 |
  521.     return TRUE;
    4 H* `+ D( ]/ y) a4 p
  522.   }2 c# r8 a) Y! i0 l
  523.   // Nuke 0118: Delete run.exe
    5 r4 B& |" P( r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );; U. c9 T3 J4 t6 t5 C
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" _3 ]7 _+ I5 j9 T
  526.   if(!ReadCfgFile("Config.ini"))
    8 w, f  h$ }% F3 i% {
  527.   {7 s4 x% v# U* Q7 l1 l
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 Q  e: U- I2 X1 x3 |. e& @9 d
  529.     return TRUE;
    6 [+ Z! u5 q7 i( g
  530.   }, e8 n1 m/ |8 n
  531.   HANDLE mutex;/ |6 i) [4 B; l  a9 a
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))1 |! n6 K3 K5 t8 J; @4 z0 h
  533.   {; _. u! U* A* J. A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): S/ ]; L4 C8 @9 C
  535.     {
    9 A( I. E) h% Z( G5 H6 K9 k. ?
  536.       CloseHandle(mutex);0 n7 t2 ^' [' x' I2 A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);& X# p, G3 d0 d5 v" X7 q4 y, Q
  538.       return TRUE;
    ( b2 s; G, R9 c  _2 X. Y
  539.     }$ d( p4 F; V: o: X% U
  540.   }  & m0 \9 V  N/ I$ ~+ }
  541.   CloseHandle(mutex);4 Q7 [1 i2 T1 O# Y' q4 e! s" z5 [

  542. 5 X) V2 P6 C) V. O
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ) e9 V" o  H! N  I4 ]3 e
  544. 8 |: F1 p6 P, m5 u* g/ ]
  545.         AfxEnableControlContainer();
    6 w( |2 b# W9 a6 p5 a. ^& k
  546. # ~6 n/ C, r+ ^2 e8 d* B
  547.   bCanUpdate=FALSE;
    - g" F, M. M  W" b& E
  548.   dwStartUpSteps=1;
    8 V7 `0 ?5 y6 N; P( F. h2 E  v
  549.   dwProgramState=AP_NOTHING;6 z% ]5 ]1 ?: y

  550. . h9 d2 l/ U* x( j2 W7 B; x# u( ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ ^, j1 {3 L, @) X* Z
  552. 9 y7 n/ e9 r' \7 E
  553.         // Standard initialization7 b# c) W' [5 f' A% M
  554.         // If you are not using these features and wish to reduce the size
    , @+ y! d8 I% v9 ^: d
  555.         //  of your final executable, you should remove from the following3 F+ K* m/ N& ^0 q
  556.         //  the specific initialization routines you do not need.
    ) Y" ~5 g) n+ t5 X; y
  557. 4 X7 e2 j- V: B# w# X
  558. #ifdef _AFXDLL# e1 ~/ Q& s, _4 R- S& U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    4 N! M( w8 L6 h) H, h* v
  560. #else
    # X8 g) y9 ~" ^6 H0 a0 V" x" t0 N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically9 @4 }2 ]1 U4 b
  562. #endif
    & e8 D: _2 q8 U" v3 K! N. I

  563. 4 k9 A! w; P9 ~  I, v+ f
  564.   dlg=new CRevAppDlg;
    + }% O' l- {6 u0 k
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , W& V4 h* f; y  V2 T, y
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      M' K5 Y& F, B5 e
  567.   m_pMainWnd=dlg;
    6 A+ A! p' Y5 `; c5 W- k7 L6 G
  568. 5 k3 m; ]; i( F' u$ [5 }8 |5 w
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);9 b9 C  n6 f9 i9 n2 ^3 U$ n" A

  570. & x* P8 d, i' x5 {
  571. //  GdiplusStartupInput gdiplusStartupInput;8 L/ @: x! Q, Y8 v8 r6 C0 i$ Y% ?
  572. //  ULONG_PTR gdiplusToken;
    : ]* F) ], E+ x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    & i' m4 l: \  Q, y

  574. 1 C# w4 e- h& @' l' d
  575. //        CRevAppDlg dlg;1 L2 Q1 Z$ G3 A& T# a* L
  576. //        int nResponse = dlg.DoModal();
    2 `/ R% s9 r9 D! j& Q
  577. //        if (nResponse == IDOK)
    7 {5 C8 M/ T$ g. ?4 `. o5 q. s
  578. //        {4 A$ T0 O& V9 l5 D- I9 k  m
  579. //                // TODO: Place code here to handle when the dialog is8 N) J! y$ H# r; }9 ], s
  580. //                //  dismissed with OK
    ' ^- N; k1 Z7 O9 q$ y5 s! T: E& I
  581. //        }
    ' K3 l9 y8 R/ U" L5 }8 E5 Z
  582. //        else if (nResponse == IDCANCEL)
    / f7 f2 A' G( S0 U8 v4 t! K
  583. //        {
    0 c( p+ b+ [5 L5 v: \
  584. //                // TODO: Place code here to handle when the dialog is  k; r6 z3 C. [5 c- k" K
  585. //                //  dismissed with Cancel
    # a8 V( i' _( u5 Y% ?/ g. ~, j& A
  586. //        }
    - U) ]" J9 v- m& _0 A

  587. 2 r7 G& N- t  j+ X6 K- v' [
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ g- `7 i8 N  p
  589.         //  application, rather than start the application's message pump.
    + d* U9 I1 P7 j/ j; Z  N& p
  590.         return TRUE;* ?7 U' Y$ W0 X4 v% Z& r8 J
  591. }& _' N) m0 k8 M
  592. ' ], m3 ]0 u; s3 W7 C
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
      f3 [) ], m  r  n! O6 J
  594. {
    - C. U& R7 r; o
  595.   int i;6 F, L, x6 @. c) G. d& x2 p
  596.   char *szRet;* D4 N8 n! {! O/ |
  597. 4 ~; }8 S* k$ ~/ X( h
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    & X5 P) A2 o) {  |5 C" G) p
  599.   if(sztoken)
    6 h" X0 |3 P8 v2 Z8 q( Z) r8 P* j
  600.   {9 u$ b' ^! i: x' |2 P9 w
  601.     szRet=&sztoken[itoken];# a! Q  X2 w. z( U
  602.     while(sztoken[itoken])/ ]6 U( U! R6 T5 T& Z/ t
  603.     {- s  _  K& t; E7 b$ m& \
  604.       for(i=0;i<(int)strlen(token);i++)
    " j; F" D0 w6 t
  605.       {
    3 ~# `8 m2 {1 R5 @: v" r3 m9 e5 z
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 p+ Q6 q" j# f
  607.         {6 f% R1 ~( }* t: C; q( x
  608.           sztoken[itoken++]=0;9 U8 `0 h: \& T* s* {, G3 L1 m
  609.           sztoken[itoken++]=0;" e* ]9 d% b6 L9 d
  610.           return szRet;$ p/ s  u8 X+ u0 i, a8 D  E5 R- A0 D) A
  611.         }
    4 Y& X( _  V; V6 G# V; J- |5 T
  612.       }
    2 |( h& e8 _  J
  613.       itoken++;$ N% t3 h3 }4 g, A. g  \* L
  614.     }
    8 T- c0 z  q! s( F3 {# @& f
  615.   }
    8 p: m2 u; @  p$ l
  616.   return NULL;' L, R5 h) E9 x
  617. }6 e7 O8 @$ ^# f) ~1 W

  618. & \- u" R* @- _( N8 G
  619. void ProcessProc(long Total,long Current)3 ^+ ^3 l2 G! ?
  620. {
    4 y7 a. t' y' g; q/ s! D  K5 q( |
  621.         MSG msg;- G& P5 i( \% b. c2 f) {
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ O; o; J" |+ Z" I- j
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    + {2 T9 `% O! e7 r+ p3 O1 h
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    $ x2 |' ]! q6 r  F* _; \
  625.         {) ?* J- Z& ]( U; W* ]1 X) y
  626.                 if(!GetMessage(&msg,NULL,0,0))$ w. o% g3 }9 c8 S
  627.                 {4 O0 f& [) U. ]2 G2 b
  628.                         return;2 w) w, T3 o5 V, n
  629.                 }; _/ ~# `' R9 Z; J
  630.                 TranslateMessage(&msg);
      Q+ ?  f0 {5 U% [' v9 j
  631.                 DispatchMessage(&msg);  l0 H8 \; y7 P! H5 A" g% U
  632.         }        % d' L+ |$ u" C* {4 R' r
  633. }
    5 K0 ~. l& n8 x/ b& n1 _
  634. / y/ J. c8 M8 s7 R8 {2 Y; i; D" ~
  635. BOOL bFirstChar=TRUE;7 u) p/ z+ A# U, k) W

  636. & q- P+ U6 V4 Y4 j. ]6 j) D
  637. BOOL CRevAppApp::OnIdle(LONG lCount)) V: i: e' n9 ?4 G' h" @  {0 G+ `
  638. {
    ( ~% V1 h2 P( y: W
  639.         // TODO: Add your specialized code here and/or call the base class
    % u. x$ a, P4 V2 E  V( L% M$ ?
  640.   switch(dwProgramState)/ D6 m/ x8 S6 {: E+ ^7 P& _( p
  641.   {$ h' _3 k1 |3 w1 x2 W
  642.   case AP_NOTHING:4 c, l7 B& E( p6 I. @) U7 f
  643.     switch(dwStartUpSteps)
    6 ]; q. q6 j9 j
  644.     {
    ) J& P9 F4 ?+ J! Y+ @
  645.     case 1:
    - l& q+ u+ F+ f0 [) N
  646.       {
    ' W5 h' a* P& r; V* y
  647.         int i;6 u  ?, ]4 ^4 Q5 Q+ J& x
  648.         CDC *pCDC=dlg->GetDC();/ s3 B; q# P+ d3 J4 l
  649.         HDC hdcwnd=pCDC->m_hDC;
    4 N/ r/ O! ^. h. z% g7 s) m1 R
  650. //        Graphics graphics(hdcwnd);) D" r5 @& n4 z- F! R$ H% ?" \
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ x! p( g3 g& U$ ~& v8 [) x, U
  652. //        INT iWidth=bitmap.GetWidth();
    , b. z) d' a+ w9 ]! @  M0 x
  653. //        INT iHeight=bitmap.GetHeight();
    & }9 [* |2 Q- B0 m, S
  654. //        Color color,colorTemp;
    : }, {; y1 |3 {9 F+ D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); |# d* q" X( C, \2 n
  656. //        {
      m( l! ?2 u: Z. f
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)% |$ X8 M1 a  _* z. G/ q
  658. //          {( k* j  e3 p. e6 r! u
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 w( z- n" ]( H6 }
  660. //            colorTemp.SetValue(color.MakeARGB(6 N2 S1 d: A) ~* s4 H, N
  661. //              (BYTE)(255*iColumn/iWidth),! ~% o& A* {- M& `8 J: e5 x
  662. //              color.GetRed(),
    & ~1 d. k; x) A: U% W8 S
  663. //              color.GetGreen(),1 M) Y# h% Z- a* S+ U7 p
  664. //              color.GetBlue()));9 B8 \  X( O7 p& D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: p& s. j8 |/ z$ k4 h. _
  666. //          }- v) _* ~& @2 {6 T* G; ^
  667. //        }
    ! K) ?" H: ^8 X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);! ^1 V9 a. n; z; `
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : w( t; f* T2 |8 b+ v
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 x/ ]: d! R  W, \) ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ ?- h* E6 [: l
  672.         for(i=0;i<240;i+=8)3 {+ x2 z) a, W, ^) S
  673.         {
    + {, f- x8 l& ?% P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 g6 w7 {- m' p: }1 _0 R
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    3 {: F. |/ }6 K+ e. t' ]3 k! t1 W
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + m* Z" _+ G$ U! a6 R6 O+ W' Y
  677.           Sleep(33);
    ' q5 W4 d- z  i2 U9 S  _
  678.         }8 f  H3 j/ s9 N! r
  679.         Sleep(1000);
    ! b1 [/ q) H' c/ a- j3 W
  680.         for(i=240;i>0;i-=8)
    0 p2 M" C4 s/ S" S
  681.         {) U. Q8 c0 x, O: b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: s, e/ c5 A" _7 r9 }% G4 {& Q
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 B: H; E2 L; m/ `6 C$ P6 m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ `2 U5 F: q0 C) ^
  685.           Sleep(33);
    8 y- a/ z3 t( r( C
  686.         }
    + O  s( J) r/ a$ j6 b/ n1 Y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 e7 x5 N" W5 O% D' S
  688.         dlg->ReleaseDC(pCDC);% O, E5 H1 K4 E/ {
  689.         DeleteDC(hdctar);
    9 G. F/ C9 a+ y7 L) l
  690.         DeleteDC(hdcsrc);
    * _- J4 _9 `; p, @$ c  y% }% X
  691.         DeleteDC(hdcorg);5 u0 e2 R7 t. q  M
  692.       }
    $ R6 t( p9 ?  L; C/ w
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    4 L, Y: I. {9 W' U3 W3 @% B
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + ]. b4 T0 u- z# ~! k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 ^* t  J! I3 b& _/ Z# Y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) l: J1 M( {+ f& N7 s+ q. ~- \" X8 B( d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. U5 o( \. G: S
  698.       if(!Dn.Connected())
    . {( n; S1 R3 ?/ |) W8 F9 X
  699.       {
      O5 J# C% c' H
  700.         dwTotalFiles=1;1 h! g6 ?9 L0 ~8 S* F3 Y6 D
  701.         dwDownLoaded=0;
    6 _$ |5 \  w7 T1 i( I# n
  702.         bSilentStep=TRUE;
      g0 k6 S& v( K) k% `+ D
  703.         bCompressed=FALSE;
    3 u+ {$ ]" s* C; y, X3 B5 U
  704.         strExtLocal.Empty();# ?  K1 K* r3 O- O# h
  705.         strFullName="readme.txt";8 C5 G( ?% X8 T) l
  706.         dwProgramState=AP_CONNECT;# C5 W& ]/ q2 Z! e. M
  707.       }
    3 `4 C+ E: D; K" Y$ _' |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();7 K6 [* s9 n9 F0 s
  709.       dwStartUpSteps=2;$ Q7 O. @" [, R- x& S5 N5 {5 l
  710.       break;5 _  V" g- [( O$ j2 V; j* K1 s6 c
  711.     case 2:6 u5 m. s$ h7 \1 t2 }
  712.       {' z) s9 Q; A  \. n3 b% r
  713.         int iEOF;
    # o; y- e+ r/ ~+ ]% K" C% G
  714.         FILE *fp;$ X& E2 i/ U3 N7 Q
  715.         char szString[512];
    : F) B8 p1 G( M. B- z( ^5 D
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ K, d: a( v  z( t' Y
  717.         if(fp)1 g8 T: {2 |% G# ^9 m: ~: s5 `
  718.         {
    $ C6 T, [* i: X1 P1 }7 i7 n
  719.           do
    7 H' ]2 o; x9 z% {' B
  720.           {
      E" Y# n# U4 x# a& \, n/ l* A
  721.             iEOF=fscanf(fp,"%s",szString);
    6 {" r: E! l, u3 |; j) B/ s
  722.             if(strlen(szString))
    # O) f) ]$ ^+ f8 r' a0 Y
  723.             {9 q6 I/ _  m- T" i; |! z* S: e2 m
  724.               if(bFirstChar)# H6 l9 |& N1 n( }- r
  725.               {/ {) k: I* y* [' ^$ h% v
  726.                 bFirstChar=FALSE;  O7 |! Y0 Z) Q( |% a
  727.                 bConnectIsBig5=FALSE;
    , Z5 p, t, j5 p( t! E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      x7 u! _8 ]! j% x  U  q
  729.               }+ a6 A) V5 ^" G) Z5 P; w5 P
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - c- H9 \) I0 E$ ]- }0 ]
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));+ W% R1 |+ n# o: I4 i6 A
  732.               dlg->m_ListText.AddString(szString);; i$ V7 X$ t/ Z: |* K, S# i$ I8 I
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- t- X5 g  w) I/ T
  734.               *szString=0;  M6 _9 h$ I. B5 P; v6 l
  735.             }* z5 s/ s0 n: h  g& x; ?0 Z
  736.           } while(iEOF!=EOF);
    / ]0 q5 o/ [6 E4 \1 N* e
  737.           fclose(fp);
    8 H+ d* R9 X& P' }
  738.           unlink(".\\DownLoad\\readme.txt");
    2 e6 D8 D8 E! P+ G
  739.           dwStartUpSteps=3;4 K0 C, T: m2 I3 H. l% z: a1 O% A# o
  740.         }
    2 R. b3 ^2 `: ]1 l9 ?
  741.       }
    0 y* O" j9 }* v9 h: s; O
  742.       break;" @1 |: D# n4 h! C# G; R
  743.     case 3:
    0 f* L1 K8 m% I; Z" d1 Y
  744.       if(!Dn.Connected())/ T& q: B, |7 E, d
  745.       {
      h- J  }6 L& o3 o* x. M
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 c8 @+ \! V" \4 z, ~& G* G
  747.         dwTotalFiles=1;7 L+ N3 ^+ f! O  l0 ~6 e! t
  748.         dwDownLoaded=0;
    + g+ z' ]0 f! ]2 O" z" P
  749.         bSilentStep=TRUE;8 Q- S) s- G) B8 g' j0 ]
  750.         bCompressed=FALSE;+ E' a7 Z+ [1 I* C( e
  751.         strExtLocal.Empty();
    6 u1 D3 V* \6 G2 ~
  752.         strFullName="checkversion.txt";+ G- p  I  F! u. J/ z" p) D* d  D
  753.         dwProgramState=AP_CONNECT;. m8 Y6 J& ~. C8 F6 ?: a: ~
  754.       }
      t9 M; ]5 G* F: @" K$ p
  755.       dwStartUpSteps=4;% T2 x6 n$ J( L: C: c
  756.       break;" S) q+ R7 {$ a. f2 f2 k' M" b: _
  757.     case 4:
    3 `. A* U6 D* D, j. Q$ g( D& H. n
  758.       {
    ! `6 W* L$ O/ B, g. O. W
  759.         FILE *fp;
    1 n3 A* _9 g; ^: d" P8 d
  760.         char szString1[128];
    " Z$ G( k0 C* l
  761.         char szString2[128];
    . p! m3 i2 N/ V: e& l2 n. j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    6 A3 i) X& Z% L: a' X% Y% g
  763.         if(fp)
    3 N' @4 T* o, ?+ O/ w
  764.         {) K4 ?# [% |2 m% V5 B' ?
  765.           fscanf(fp,"%s",szString1);! R3 W% H2 u; |' ?6 V6 W. F
  766.           fclose(fp);* C4 r4 h( t; j2 q
  767.           fCheckVersion=atof(szString1);
    , w" m" t; S- ^& p6 E9 H
  768.           fp=fopen(".\\checkversion.dat","r");4 V( J+ B5 ?1 y& D
  769.           if(fp)0 `2 w7 L0 J# e- ]7 R+ ^1 k. m
  770.           {
    ; K( h6 }" `# B- ?9 n( }3 U& `* l/ L! ^
  771.             fscanf(fp,"%s",szString2);+ I- k2 D# y6 `+ V
  772.             fclose(fp);! r$ L, b4 A0 Z2 F* G! j; v* t
  773.             if(atof(szString1)!=atof(szString2))
    6 W/ I* J& G7 C
  774.             {
    ( C& V6 Z: Z$ T8 k( f$ q, }! j( \$ w
  775.               if(!Dn.Connected())
    4 p9 n5 L- @5 A5 W7 S
  776.               {7 [6 O: A' W4 R
  777.                 bFirstUpdate=TRUE;9 x: d9 Z  t- ^# ^
  778.                 dwTotalFiles=1;' h1 l9 O  I* @
  779.                 dwDownLoaded=0;
    5 W. K( M3 L0 ~; d6 r* z% R' c
  780.                 bSilentStep=FALSE;( q1 \( l/ H, F/ p# k
  781.                 bCompressed=TRUE;
    , V9 q0 a% A& Q
  782.                 strExtLocal=".\\DownLoad\";& \/ j9 ^5 B* X$ ~% _; J
  783.                 strFullName="update.txt";# s- t; w1 `4 M7 _
  784.                 dwProgramState=AP_CONNECT;( P+ t- C3 }) A2 K  U8 @# j
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ K2 ~2 C' Q7 @/ x: u" u5 d2 E  d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 V" Q! e7 ?+ g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");( X# z, Y+ I9 d" u" m. }" d
  788. 6 C: a1 b! l" P7 @& I9 S3 j$ Q
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' B: \- B8 W  h7 K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    . j" J/ Z: K7 n+ @" V- U
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)( S# t; e, Z1 L& V' H3 o8 R( B; T
  792.                 {7 c; s8 {3 `! R4 A7 I% H+ {0 a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( `" [2 G5 o& d0 K$ x, t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ [" J6 W6 S, Q! C' b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    4 Y5 f- }% u  H$ I( W
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ v" q% {0 E' B0 T" V
  797. 6 J. W9 R- l9 l. d9 Q
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 |6 G0 ?  z% b7 l6 o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 ]" z6 H! H" p& I" W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    & n% V) A' J& t
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) i7 F' M6 l9 `& d8 \3 i% I8 R
  802.                 }
    . D4 F1 u# d( s. t6 T/ T2 s
  803.                 dwStartUpSteps=5;
    6 N7 V& X/ ]2 t6 C: Z) Q2 M
  804.               }
    0 j2 S7 A6 Y. Z* V# V
  805.             }
    5 @& ]4 O) g$ _$ e2 U4 Q% l" U+ s: `
  806.             else7 z# o+ `1 i8 h5 b3 i: A6 W
  807.             {# l% Z8 z2 ?  g  M) L
  808.               unlink(".\\DownLoad\\checkversion.txt");
    $ F; }  ^- I; e8 b- Q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * j* Q" y+ U2 W$ n$ d% g
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. \7 ^6 J% }  r) a: A- h! y+ k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    8 C/ x$ Y1 a  r$ b# B8 m! e0 q

  812. ) s" p% R/ O* j1 g
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( ?# |0 f0 m: R; D. F
  814.               dwStartUpSteps=99;0 r: @) J( ~- i3 M) }1 d- w
  815.               bFinishUpdated=TRUE;, m: A' t8 B4 r& Z& p4 y7 c$ p
  816.               bCanUpdate=TRUE;
    " V; v( t. k4 \6 o9 ^1 Q
  817.             }2 i2 ]1 s7 z* ]+ G% ]" ~
  818.           }
      e* H( u8 G8 L3 n7 ]) F: D
  819.           else  H( k: T7 Y" \7 m0 A( s
  820.           {
    0 o# t; y& A! p7 e7 E
  821.             if(!Dn.Connected())
    6 Y$ c( b2 l1 o% i" b: v
  822.             {
    % E3 Q7 R# b# R1 X+ T% F) ^
  823.               bFirstUpdate=TRUE;
    * N" Y. i: C3 j3 B
  824.               dwTotalFiles=1;5 ]2 F$ t- p! {3 `
  825.               dwDownLoaded=0;
    3 H/ i- @- v4 ?  v2 s
  826.               bSilentStep=FALSE;
    0 U6 ?3 a( p+ a
  827.               bCompressed=TRUE;
    7 w( G" }+ `; I6 Z  N9 L3 s$ g
  828.               strExtLocal=".\\DownLoad\";
    & q2 @% k" \2 b- o
  829.               strFullName="update.txt";( U5 D" d4 l( m$ ]' K
  830.               dwProgramState=AP_CONNECT;
    ) H1 F: s( a6 l6 e- ~7 t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " B1 p$ u* `6 E6 R' B! y- r
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    8 O. ^5 f9 U; l' l* A+ q/ l2 D( ]3 a( {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 E, B$ A( H* F  W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 Q+ a2 Y+ T5 i9 K6 o
  835.               unlink(".\\DownLoad\\checkversion.txt");3 ?$ n$ C1 d) v* z: I$ t/ v% k; _; H, Q( U
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - S5 o7 M0 p. v; w, F" l
  837.               {
    3 N1 f# \$ n+ ]2 d2 n
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 x1 B% s$ g+ G
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");  E& \2 \( Y" r; B, `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% r, K# M* T; [* V$ K
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  a+ f1 Z9 w3 `& _  x
  842.                
    9 y7 Y" _! b+ H9 g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  T  v: C; m( u( h. y/ r/ l2 ~& C: W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    6 R1 p3 @- s6 _- Z0 ^, Y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  [5 B. |' j% H4 ?
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # H; {4 n/ H& i  \1 r
  847.               }
    1 X+ L5 ]' d0 l. v) ?
  848.               dwStartUpSteps=5;
    9 g  e" p+ s3 d
  849.             }( I/ U: J1 o* V3 P% m
  850.           }+ e5 T/ `# ]( n; c. W
  851.         }( v! N. c) J- O& P) k) h' C
  852.         else
    , V' |: p1 K4 K! t+ B! `$ h
  853.         {
    . \# }& u' j% J$ R/ X
  854.           dwStartUpSteps=3;
    6 O  m8 C( y  H& Y( K
  855.         }
    + t8 d6 U* v9 i" u- y+ n
  856.       }# _5 B( e" M$ _0 r$ E% D, H4 o7 A5 S
  857.       break;
    ' @, M; G' e& g" F$ s& }
  858.     case 5:
    7 R0 a& M% L, c+ a8 A
  859.       {: |, J( |$ B- u" ]4 h9 b
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ( `* ?# t( {+ L5 T& d( t% d
  861.         {( `$ ^3 e( v5 |7 W* m  }
  862.           int opt_overwrite=1;
    0 p6 y& i& D2 `6 D2 U  r$ f
  863.           int opt_do_extract_withoutpath=0;* F- r; B7 x: \
  864.           unzFile uf=NULL;8 t2 D+ D, A; @6 _6 O* y3 `

  865. * T" j5 `$ y4 I5 R
  866.           uf=unzOpen("Wsa.zip");/ e; Q+ {2 D* @9 W3 m% h* w
  867.           if(uf)' G3 P1 P5 E& O3 C- V. W" f
  868.           {
    3 T7 p# I/ n0 E8 K9 M
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    & X. E: ~) j0 o3 L# f' ]
  870.             unzClose(uf);
      f) b- u! K" ]; l/ Y5 S; n$ [
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; o* m: T# s/ h" e4 ^0 ?! r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    0 e" C5 d; q2 D
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 G- Z3 Z4 {& ?' V
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / r. {7 c3 Q( W% F
  875.           }
    9 B4 r% P5 v' T1 P1 b# n) t
  876.           DeleteFile("Wsa.zip" );8 S7 V! h5 A+ |- D
  877.         }
    . F! H0 y! G( S3 I

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

; |8 _" g2 q+ u5 r5 f1 V3 q- o& _6 H( z$ [# M% G' j, q8 Y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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