CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
8 F/ g! x9 @2 D8 z: X
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 m& \, _0 I  J% [+ @9 D6 V/ T8 T
  2. //
    8 W- C, m, f9 {8 ^- W# A. Q

  3. % |! J6 O% V3 F; M3 f* G
  4. #include "stdafx.h", T+ k  z6 D% |, k

  5. 9 @/ ~5 W$ r& {: l7 E" ?2 p
  6. //#define UNICODE$ \9 ], P- s: }7 a. {6 l" W
  7. //#include <gdiplus.h>- \! _' {; n6 Q: [6 I
  8. //using namespace Gdiplus;
    " }: a- p" Q. z$ s, y! s

  9. 1 Y7 t1 o0 i# s; t/ Z
  10. #include "RevApp.h"
    ( }+ k# x% p9 J) v
  11. #include "RevAppDlg.h"' f/ ]" Z9 L- o6 U

  12. 5 E( \/ D( f7 _" N1 U3 G, }- G/ @
  13. #pragma warning(disable:4786)( L" T- }# m6 U" j" q
  14. #include <map>  d1 G. S. G9 ]5 Z$ V
  15. #include <list>+ k: m" J  T4 [, C
  16. #include <direct.h>
    , F1 Q' V, m; A, X4 s  @
  17. ' o& Z: `9 o; a1 a" |3 w
  18. #ifdef _DEBUG
    - K# t- a7 i) U" X2 S
  19. #define new DEBUG_NEW! e+ \0 E  n) D
  20. #undef THIS_FILE
    1 }) t7 ^' |. O3 l1 x3 F. x
  21. static char THIS_FILE[] = __FILE__;4 }% v& H: w1 g/ y, K
  22. #endif8 g  f  d# K0 g# k. F; @
  23. #include "SkinResDef.h"6 j3 B9 y3 Y. c8 u6 f
  24. #include "ChangeBG.h"
    2 o% ]( r; {' y0 t" ?
  25. #include "AFXINET.H"' N1 t$ }& ]: m* q, X+ x
  26. # t1 _/ w, S. ]; K: a0 _7 U  P- S
  27. #define TRADITIONAL_CHINESE 0
    # L: p- B/ a# E. n) y7 `& @
  28. #define SIMPLIFY_CHINESE 1) h( f, X5 ]% F+ s( D$ {) W8 ?
  29. #define ENGLISH 2
    8 c- q3 L/ |. |' u  B' u
  30. int m_iLanguage = ENGLISH;, ^  ?; Z& r7 \' m5 I: f
  31. /////////////////////////////////////////////////////////////////////////////9 v* ]* @0 z3 K% V
  32. // CRevAppApp
    - m5 `. H) h+ A" ]3 `

  33. 1 Q1 J3 v! R( X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " T) @: f3 [; I' C# A  {
  35.         //{{AFX_MSG_MAP(CRevAppApp)" C0 i, F" `5 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    % D# r. c8 H6 j7 z7 Y! h
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 v$ J2 O) L- a3 f, J
  38.         //}}AFX_MSG) Z4 X; j1 q/ H3 p4 B; [
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), F& l' E* ]* G& r8 F+ s. `% J+ u
  40. END_MESSAGE_MAP()
    - a- D# a7 r+ i; K
  41. * U" Y9 K( w2 X2 m- b, G
  42. /////////////////////////////////////////////////////////////////////////////, R/ ^; K* j, d; y( p
  43. // CRevAppApp construction
    ( ~* c* g) l) _  L

  44. % w3 I/ O! l% |: o" L- n" T
  45. CRevAppApp::CRevAppApp()  P* ^- m* {" _5 l/ h7 y& W
  46. {, l+ m( v) d6 [8 U/ M( ~3 J
  47.         // TODO: add construction code here," C! M) x  \" \$ _6 r* Q
  48.         // Place all significant initialization in InitInstance
    & q4 p. f  i6 E1 \, d# u
  49.   bDisplayIsBig5=FALSE;
    * b8 w" T5 X  k$ l5 \
  50.   bRestartUpdater=FALSE;
    ( V$ k) C7 F5 D" g
  51.   bFinishUpdated=FALSE;
    ! C2 p- e9 V4 H8 M
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;* W% D  C$ ]8 _# N( `
  53.   InitChangeDataBig52GBKS();, T& [3 E( M& B; u8 j1 y
  54.   InitChangeDataGBKS2Big5();
    9 j% ~' L* k) U2 ^( ?; g
  55.         //
    5 ]4 F# n) A) L7 [! E# \/ i7 S& O, J
  56.         bClickRunExe = FALSE;
    ' E; U% F! x2 G. L. Z. |
  57.         //: Z  }, {- c: I4 F' S1 w8 k1 ^
  58. }0 E5 N; D& b  L% ~+ S( t

  59. 1 Q1 a+ e3 I2 B3 a
  60. CRevAppApp::~CRevAppApp()
    . x0 E7 K* u3 T
  61. {1 n; x2 N+ H$ U6 `* b. q0 r
  62.         // TODO: add construction code here,* I- `# u# o0 x' @4 ?
  63.         // Place all significant initialization in InitInstance
    9 f/ v' C' S& K( L$ N9 O
  64.   EndChangeData();
    * v# I  ]9 V; J
  65. }
      A$ v* l% ?) U+ W
  66. $ B/ ^8 u0 f9 J" O9 }; l/ l6 B
  67. /////////////////////////////////////////////////////////////////////////////
    & V* L, f! d* s+ G7 ]. v
  68. // The one and only CRevAppApp object
    ' [6 f0 V; W# X5 Y5 }
  69. - I+ ^0 w6 V) t) G
  70. CRevAppApp theApp;8 m5 [( j' f( M0 s( K6 U
  71. ' u. T; c' V% y+ v# p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName): c/ p6 A6 f1 S1 K1 ?3 M( `# O8 T
  73. {' F# e6 w! E% ^8 U, L7 i) @
  74.   int iEOF=0;
    0 I- y- h1 _2 A  j! j
  75.   char szTempName[MAX_PATH];
    , J; v# u! J( t
  76.   *szFileName=0;
    4 s2 W- W9 r( u7 m2 E
  77.   iEOF=fscanf(fp,"%s",szTempName);* k8 @& m2 D6 ]* }0 F7 G8 c
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')* f3 z- `9 Z+ a: Y7 r
  79.   {# O2 r; s. @, {- L0 U
  80.     strcpy(szFileName,&szTempName[1]);
    3 P5 r- ]! s. I: A
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 E- v. [1 P( U. x+ |
  82.     {
    ; h: ^3 V' ]' @( ^8 m' B
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 C$ c  r( a, C/ s# B& w# i
  84.       strcat(szFileName," ");- m: j" Q; ~& a6 y& I
  85.       strcat(szFileName,szTempName);, K) u. k% `: E
  86.     }
    . A0 d4 d7 p+ G/ M6 B* i
  87.     if(strlen(szFileName)>=1)
    . G* }( L. `; L" i8 h5 w# i/ Z8 [
  88.     {
    % l0 A* U* s7 E' ^  f
  89.       szFileName[strlen(szFileName)-1]=0;
    ' [+ H' j; b  J' k* u
  90.     }- m( n: w, t0 H" ]8 \
  91.   }) Y8 l2 O( H3 H4 z
  92.   return szFileName;# I8 L/ l& o, Y  E. n
  93. }
    ! z1 g5 n$ Z7 A3 Q  J* ]
  94. / t( k! D0 H( A7 N6 ~4 Z. A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)$ J3 t5 {" ?7 G, A. S" O
  96. {( n# h& Y" w# u7 e4 x$ V+ d
  97.   FILE *fp;3 }' y& b4 R& ]0 C+ d
  98.   char *key=NULL;5 d1 x/ Q; e) t& }* J0 _* |
  99.   char version[MAX_PATH];+ }$ F2 a/ g$ M8 d7 c
  100.   LPUPDATEFILE file,olds;
    $ I- q0 J5 ?1 s+ k) F
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 w  I; B% j" p( v+ c0 j
  102. & O# V% W* J1 C( ^# y
  103.   UpdateList.clear();# S# b+ r1 g& d) Y# z8 ?+ w! [
  104.   UpdateFile.clear();4 }: z, E: |" U0 T5 S
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 K9 i" Z+ r9 t. i3 q, R
  106.   if(!(fp=fopen(filename,"r"))) return false;9 w* `1 }/ o5 {# _5 h( K6 c
  107.   fscanf(fp,"%s",version);
    1 ~% C& d7 c. O$ V7 `+ H: l
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }5 l9 l4 a  D6 B7 e; n$ v" Y, x
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 h) H: K! |- W5 V
  110.   {
    ! L. a1 Z/ M1 d; T/ G$ ]" m1 t) T$ m
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & q3 g/ D% `4 ]& L- Y, ^
  112.     fscanf(fp,"%s",file->path);( K- \; W! T% l' V# q% ~
  113.     ReadFileNames(fp,file->file);; X. K6 M: r( P% ?& e- m
  114.     strcpy(file->full,".");8 @/ t* R, V. p6 V+ B
  115.     strcat(file->full,file->path);) k% J* P1 I; ^; T7 O
  116.     strcat(file->full,file->file);
    5 w/ k: P  _& m# \4 b, N  V2 G( B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# g- `6 n! s1 C, b7 g# s
  118.     {# o% t/ J; P2 r  d9 z
  119.       file->vers=(float)atof(version);
    ' n$ \- A8 c2 ]) F3 H; d' Y3 L* ~+ E
  120.       UpdateList.push_back(file->full);
    1 g; z( M7 F! C: X
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; y- m3 f( f2 {2 a2 c$ o0 O; x& l
  122.     }& u) r9 K* t- D; `) n4 l) g! q
  123.     else. S7 V3 Q4 n' Z2 Z4 E4 w5 Z
  124.     {
    ' P* s) v6 R7 T- Y
  125.       olds=(*p).second;% i  x5 B3 ^# M
  126.       if(olds->vers<(float)atof(version))
    # Y4 m0 R  B: s( m$ H! m- Y
  127.       {! ]- t  S4 i6 [; N
  128.         olds->vers=(float)atof(version);
    3 A$ D' @- ?' z9 C' \3 u
  129.       }4 P0 A9 s, a' j) c& x
  130.       free(file);  F: b! I; z: W: [; v
  131.     }
    * b0 T/ D$ w+ G: l% f
  132.   }
    0 L% S5 M5 s; N
  133.   fclose(fp);( `! A% t3 N; S4 c4 W
  134.   return true;
    ) G: w' ^( g4 Y( z
  135. }$ O3 X8 d$ b! b7 z8 g+ K2 w0 Q
  136. 9 f2 S8 H( e2 `" `4 ~
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ o7 |5 P, c- [/ I2 G6 k9 R
  138. {
    8 F9 o/ g8 v7 w7 z2 E4 y
  139.   TCHAR  szFull[MAX_PATH];
    $ @5 N/ I' M) k! {9 q
  140.   TCHAR *token,*inter;5 j7 W8 C3 [9 L- h5 u; `
  141.   *szPath=0;
    3 i$ c2 T0 g& E1 j
  142.   strcpy(szFull,szFullPath);
    2 V9 D& r5 x! g. ^0 R
  143.   token=strtok(szFull,"\\/");9 |/ G: @- L+ b( ^8 g
  144.   inter=token;
    9 b6 i/ s% b2 d& Q
  145.   while(token=strtok(NULL,"\\/"))
    4 y  ?& i0 n% V" I0 d
  146.   {( b9 g5 B0 K2 L& ^# j6 r1 ]
  147.     strcat(szPath,inter);8 d- q/ ]6 H; m' v! Z
  148.     strcat(szPath,"\");
    # N% y* g/ f6 y
  149.     inter=token;7 a0 K" j7 |' a0 t. q% Y! X
  150.   }/ S$ C8 X9 \$ G5 c9 J
  151.   return strlen(szPath);
    2 Y, f  [. |# A  n& |
  152. }
    4 Q) w3 D$ @' @8 t

  153. 0 Q! V- B. z/ A9 c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)9 H! C: B  h! d% W6 p
  155. {+ n# S% ~# w/ J7 N9 {: {
  156.   DWORD attrib=GetFileAttributes(Target);
    ! d/ v1 _0 R9 _0 \  p1 H
  157.   if(attrib!=-1)! f! l) c3 X' x  S
  158.   {
    # X) u% I1 A+ ^  K% c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
      I0 m  z. P# k7 z8 f" I4 z
  160.     {
    $ g3 ]! g' {( z9 A+ D& V( F5 \
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : v0 P* q; w9 b8 Y6 i0 P
  162.       SetFileAttributes(Target,attrib);
    2 x2 F' b( e0 P$ v6 k
  163.     }
    " K# z! L: B' F4 d/ A/ Q" B
  164.   }
    ) j, M1 ^: k' U- k
  165.   CopyFile(Source,Target,Erase);$ ]7 U  e/ _* w2 C% K
  166. }$ U( h& n$ `% }' f
  167. " T  U  c# k9 \. t( T
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! C- R9 f: F  w; a6 t
  169. {% U8 o0 N& V+ b9 B& y4 `
  170.      FILE *fp;
    : k( g. t8 `  ?8 E  e% i; L; s
  171.      char  szBuffer[8192];! x% X7 g9 p! A: v7 W6 Z
  172.   va_list  argptr;) z5 ?& m2 E1 N; k! c, C; U% C& A
  173. $ y& W2 N; V& r) l9 T
  174.         va_start(argptr,message);
    / ]0 j0 e, ?) j1 e; l3 r
  175.         vsprintf(szBuffer,message,argptr);
    # N' X, ^0 X7 @9 H: y" N* D6 `* M
  176.         va_end(argptr);9 T( A. Y& s* r! ?" z  N8 O7 u' N* ]
  177.   fp=fopen(FileName,"a");
    - M  H' T. H7 F) y: `4 j
  178.   if(fp)
    , w* k) l9 T* X/ N) l7 ^
  179.   {8 {5 z, c; T9 e( K
  180.     fprintf(fp,szBuffer);8 L7 f7 \1 ^, D$ D4 g! V# e
  181.     fclose(fp);
    3 _* L# s' A2 F1 `1 X8 r8 E
  182.           _flushall();
    : ~! E: d0 D0 z
  183.   }+ D* V/ @* I% ^8 b
  184. }* D# i, e: ]3 r

  185. ; S: x- ?: m; K8 S
  186. BOOL CRevAppApp::Fclearf(char *FileName)% V& c  k1 y% F0 ^. H
  187. {
    , j& Z" w/ @% E. X0 ?
  188.      FILE *fp;0 G+ O/ T! C$ I' H- ^  f
  189.     DWORD  attrib;
    % ^' e) H3 z  v" n+ N$ q( p4 @" U
  190.   attrib=GetFileAttributes(FileName);% x- j" P! `, w$ u
  191.   if(attrib!=-1)
    2 j$ i! M1 H  S1 t5 ]$ g
  192.   {
    $ R8 A3 v: y( i4 b/ G
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 k& K( R& K. `9 q0 S
  194.     if(!SetFileAttributes(FileName,attrib))
    5 G( f, T8 y) [; p: |
  195.     {
    0 N. T; `/ J/ [; l4 c- u3 [
  196.       return FALSE;+ d' ^+ ], B- X/ n2 ?8 Y
  197.     }
    3 g( J  n, j( ^: u* c
  198.   }) |% s3 t7 |  r) s* X% s2 {
  199.   fp=fopen(FileName,"wb");
    $ C; R- a9 k# X1 @! ~. y
  200.   if(fp)
    7 r& T& ^- a/ }" r% b5 s# Q
  201.   {
    , }! r9 S; _3 k0 i
  202.     fclose(fp);& e* x0 o$ d; N3 V
  203.   }/ K; ]2 t- \9 k) a* r
  204.   return TRUE;' {5 f6 R/ }+ g
  205. }0 B$ i# l; Z5 I% ^! ]6 T

  206. : T! B  U2 _5 B; X6 A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)/ D% T- |# u7 I. }5 W( H* z4 R& N
  208. {* @4 m% @$ Y# V! P
  209.   char filename[MAX_PATH];9 j+ r0 k, L7 h6 D7 {
  210.   LPUPDATEFILE file,olds;5 t, v& a+ \/ N
  211.   std::map<int,CString>::iterator i;
    0 w7 c+ _- f2 b  d
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 V8 I2 s  l- I0 r9 W
  213.   std::list<CString>::iterator l;
    % b) I# w- |- M. f. L& j
  214. + {& E) m1 U( ^' A+ i
  215.   if(bFirstUpdate), |8 S- [) o9 n, I% f
  216.   {
    7 J, K' m8 U4 B2 ~% l  h0 K$ J. F
  217.     dwCurrFile=0;
    ( p$ Z, F" L! J6 G" l- _
  218.     bFirstUpdate=FALSE;) q6 Q4 C/ h& B: J4 E
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( q( j: q! b+ y' M' z
  220.     {, f. C8 ]: e+ }" P8 q
  221.       dwTotalFiles=UpdateLocal.size();
    ; ~# J7 s- L; V2 G3 W$ q6 q; _* s
  222.       dwDownLoaded=0;( ^* c) W9 ^3 h, d+ K* E/ I
  223.       bSilentStep=FALSE;( w2 h  A# ]( Y* q. c2 \' _, t! D
  224.       bCompressed=TRUE;5 a- ]) H) d2 e/ g  A4 S" S5 w7 Y
  225.       strExtLocal.Empty();9 k* J) O8 |% w
  226.       strFullName=(*i).second;
    % u# ?& V/ [4 g7 w5 W/ @$ f
  227.       dwProgramState=AP_CONNECT;
    ( G; F. I% U8 x! r
  228.       return TRUE;9 G. i, `8 z* E
  229.     }1 \8 n# H- s6 B
  230.   }' {  L' q3 R7 G5 C: d$ g
  231.   else if(bRestartUpdater==FALSE)3 k6 s9 M: F6 v/ }
  232.   {7 p9 S8 \; T1 q& D* U: ^/ P
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())3 D3 T$ Q, X" z% i8 Y+ Z/ r1 p2 a
  234.     {1 M+ k! ~* y7 r( H- q8 e: D
  235.       file=(*p).second;1 a% {2 {. {1 g( J
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())) |, G' r' s7 O5 D1 s4 U# w
  237.       {
    - V2 C' f5 f) _9 Y9 a% I+ [# T0 o
  238.         olds=(*p).second;
    : U- @, v7 }; s- ?+ `
  239.         olds->vers=file->vers;9 B2 `0 C: q; F" R
  240.       }* g2 u% W0 Y2 h4 y6 K4 `
  241.       else. A: g- \" T4 y* ?8 u: \* a0 M  y
  242.       {9 j$ @* R. y% P" o; Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 Z4 |/ b$ r' Q
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 U1 m/ n* g6 |* |3 \& R
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: I( Y" |) f0 \  O" H2 M% X
  246.       }& L$ _3 r  e1 V4 z9 Q' r0 k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* w/ k, V3 m( c; B
  248.       sprintf(filename,"(%s)",file->file);9 Q: x0 w# {6 `* X7 I, d
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! O! }7 x, M7 l7 z2 a8 {* q! s% _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 C# z. x! G" a" ~2 L7 v
  251.     }8 O% t' T5 B- a" l6 ?4 u  d
  252.     dwCurrFile++;
    " l: X) ]$ \1 s/ h/ x. E
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; h7 P* f6 ~6 s* A# V5 x5 K
  254.     {" \8 ?0 B0 t0 C: c) O2 i
  255.       bSilentStep=FALSE;
    2 R9 D/ e7 t. e+ E" J
  256.       bCompressed=TRUE;3 B7 i9 |3 E) Y3 I
  257.       strExtLocal.Empty();
    6 \9 q$ f/ B- R9 x  Z; H  U
  258.       strFullName=(*i).second;
    . Q% C2 r  H% q' u9 r; X+ G( A
  259.       dwProgramState=AP_CONNECT;: d% Q: c  ~6 J' l
  260.       return TRUE;' ~7 Z' m2 u  N0 ]
  261.     }/ P1 T( q0 q! P
  262.     if(!bRestartUpdater)5 V8 X2 x% M3 }7 v
  263.     {
    - E1 g' H& ?! ^4 d' R2 \5 t- d
  264.       int iCurrSize,iFileSize;, a9 X/ v! d  O/ M; B3 m
  265.       iCurrSize=0;7 ~4 v2 z2 t* a# M- F, @
  266.       iFileSize=UpdateList2.size();; U$ X; F9 T; s/ M: ]* E9 L/ l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' H! x7 L. J4 J4 h% a1 c+ `( S" c5 u
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( r; I9 j' c* a& W5 b+ ~
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");' l- D/ L2 U0 B: T: y8 p9 ]" r" P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + q% d* U/ u: I. _$ F% C* D
  271.       Fclearf(".\\update.dat");; p6 d$ K) C# w5 z% a' o+ i: k
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    " Q/ K5 t! K. L0 R5 [
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 O7 g7 s5 W# C7 u/ q* L% }
  274.       {
    + U0 r0 C8 B; @9 K: O' _6 m3 H0 v$ \
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 N% b" l7 U  T
  276.         {
    4 W0 D9 i5 j: |; d
  277.           file=(*p).second;
    & M: Q3 Y8 w, Y# W+ {* E$ j0 [
  278.           sprintf(filename,"(%s)",file->file);
    & |/ n0 e8 E' k' `
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 a# I9 A7 p) I8 F7 Y
  280.           iCurrSize++;
    & x/ L7 Z& w6 w; @' l9 J
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));; M; S8 H' T1 e
  282.         }
    , P& S9 p! `0 f0 s! u# A, d
  283.       }1 h( w+ n/ j8 p' e; w
  284.       unlink(".\\update.txt");
    0 x$ I$ V, \7 c- Z% ]" w
  285.       unlink(".\\update.tmp");/ a* [; M7 e, n$ u) S' j2 |5 p
  286.       Fclearf(".\\checkversion.dat");
    1 Z; F2 m' D5 {. q) n8 V7 |
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);6 s4 K' u' e7 x) i
  288.       if(UpdateLocal.size())
    % r" ]9 n+ I& ~0 D; X
  289.       {5 y5 A( S# z" {) d
  290.         UpdateLocal.clear();* f; n4 }- j9 F2 l4 P
  291.       }
    2 }) I- O, s( i2 K" X5 x; R3 m
  292.       if(UpdateFile3.size()): s' T3 z) |& A) ^( W( B. s
  293.       {
    0 @2 J3 a( M( }! G6 h
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # @9 U0 D% I) _) @/ Z% d0 z4 H8 I- g
  295.         {! B- Z" F6 Y( U) j, g# D; e* D) X8 L
  296.           file=(*p).second;
    , m6 u) D& M; l7 Q
  297.           free(file);
    " ^- l4 _1 P8 `) a
  298.         }$ @) v: I& D3 J4 G* v
  299.         UpdateFile3.clear();
    5 @/ k; E& M5 o( Z0 s' z
  300.         UpdateList3.clear();% D& Q0 j! L/ {* d" I
  301.       }2 a8 T1 [& i7 V' Y+ _2 v
  302.       if(UpdateFile2.size())
      ?9 G9 O; d! A4 Z4 T# o+ g& g# e9 z
  303.       {
    " s" x. z* w& r* h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)0 R6 c. V# l( ^& O7 J) z/ [( w
  305.         {4 ?8 h- w- I* N+ w" M6 O. [
  306.           file=(*p).second;1 T  T# ^9 ~' \+ _& H5 Z: E
  307.           free(file);$ y" C+ m2 v/ t2 B5 B  A3 D4 J! C
  308.         }$ l- U1 i( {: L8 Y% G  n& X! T
  309.         UpdateFile2.clear();
    / s: x( ~5 P/ x& M' U) e/ T
  310.         UpdateList2.clear();6 t( u- q6 E3 R. y8 Q) O9 p
  311.       }3 P2 J) b: x9 \" [
  312.       if(UpdateFile1.size())
    7 p3 D6 X1 K/ ~8 y7 g# c
  313.       {2 i2 Z) |& U7 e$ j: o9 f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); C3 [; Q) u% d; k% j' d9 p1 M
  315.         {
    # F: ]( ?5 n9 G. b8 G7 ^) {& |
  316.           file=(*p).second;
    6 I+ i$ w2 f$ m& `8 N  U6 ]
  317.           free(file);
    $ W$ X- a: q5 M
  318.         }
    9 B, O; l# i+ x2 Y+ z( Q
  319.         UpdateFile1.clear();1 |* c- i( b) J8 t
  320.         UpdateList1.clear();
    $ J; y+ X# H4 h4 X
  321.       }
    . Z; r8 S" s- \9 T; @1 _, l
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));+ l  \+ J% @* v. h8 h8 l( G1 K
  323.     }
    7 A# l7 ~6 O8 |" y
  324.   }& i, z4 K4 n- O# i1 }& n
  325.   return FALSE;3 g4 Y) N% A( K* K
  326. }
    % i! L; f2 E! \+ W

  327. 9 Q8 ]: _' [+ n7 I, ]+ A
  328. void CRevAppApp::ClearAll(void)$ c4 ], C  @# y  A  `
  329. {* R1 p2 M7 z! v, S1 P
  330.   LPUPDATEFILE file;
    ( s2 H8 O# v$ G
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    " h4 ?/ j5 E  x/ T% O. N

  332. 1 _) C* u* p3 b
  333.   if(UpdateLocal.size())
    ! ]+ z5 P) ^4 g5 p
  334.   {: \$ L( H9 b5 e5 q" I9 }/ K# }- d
  335.     UpdateLocal.clear();. }# g, r) M; U+ H; g+ }7 u( B( k
  336.   }
    * `2 j% K" C% S6 o1 k6 C
  337.   if(UpdateFile3.size())
    : W8 p  i7 x; t. q5 J
  338.   {
    : J1 N" w3 G* S8 }) A9 k7 f. `# j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 L. m. q# p( A6 ~8 t3 d+ k
  340.     {% ?4 k; `& [% c0 Q0 \5 Q
  341.       file=(*p).second;5 u# ~1 B) E- I* L8 d
  342.       free(file);
    ; T; _6 m6 x, I& Z% }5 g1 {. W/ K0 P
  343.     }9 ?; x1 C  p9 T( G) k
  344.     UpdateFile3.clear();
    % m( p" C; I; |* O( [
  345.     UpdateList3.clear();
    ! b( W" `( y, X7 m3 q$ n, c
  346.   }
    3 y1 ^- T" Q, N1 `4 I& Y; x
  347.   if(UpdateFile2.size())5 `, q. s' \# f7 I- I
  348.   {( x" l* v. U' k) A3 F7 C8 X- }% v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 z$ I6 f4 ]0 g0 @3 p
  350.     {; h  e, q/ m  p: z- f6 @
  351.       file=(*p).second;
    5 R5 q6 D+ x( S* L4 C
  352.       free(file);5 B/ O, ?7 ?+ z; D
  353.     }+ n- @2 [6 ^- b3 e- K' p1 N
  354.     UpdateFile2.clear();) G# |5 l  u3 q1 N
  355.     UpdateList2.clear();
    1 `) i( K4 {0 a/ f- d
  356.   }
    2 q/ L# O, O  e( Y  s
  357.   if(UpdateFile1.size())
    ; b7 F: d' m$ J& d
  358.   {# t5 H& }2 x& l; i2 l- x
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 {! i4 H3 y+ O- Q& T% [
  360.     {% ~# P  y3 R. t8 B/ p
  361.       file=(*p).second;
    & o8 J3 n( c8 ?% l
  362.       free(file);
    3 q7 n3 r9 X3 I; t# H. p
  363.     }
    / g- u$ |) X: N/ c8 d* M
  364.     UpdateFile1.clear();
    , t! F' B3 @& j$ p+ g  A
  365.     UpdateList1.clear();/ ]6 W+ g8 j; M1 h! t$ k
  366.   }
    " {4 {3 H  {6 z  @6 Q, t; _
  367. }  , {3 |) ^! V5 D' _# w$ U' \# `
  368.   
    5 f" E; T3 D, f9 B  ~
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + k7 Q; V' C- a& J0 h' {
  370. {9 Z) k- ^6 v$ C5 B. w/ x
  371.   int c;" L7 F' a, y  T9 \0 A8 ]
  372.   LPUPDATEFILE file1,file2;  b6 k4 `5 b' d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) b, W( [( F# V
  374.   std::list<CString>::iterator l;( R$ E$ l8 l/ F7 s$ F6 }% K- d( }

  375. " B& X$ Z  E" X; A! D+ l6 R
  376.   UpdateLocal.clear();
    8 z9 Y' o# X4 N% W% ~; P6 C
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 g8 x6 _7 P6 n, v2 N$ O
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / g  y- m! |% I/ b9 V# F+ }9 y* `
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);% i8 z: _& l9 h5 {( K8 [3 y2 D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    9 q* q- \4 p5 U: z7 S
  381.   if(UpdateFile3.size())
    - p' `: X+ t, j4 A! {2 l) z
  382.   {
    0 \1 G- _6 A* W5 @- b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 d/ q. G- `/ P2 X  M
  384.     {
    4 P# f9 G, G& A- m1 p% M) Q
  385.       file2=(LPUPDATEFILE)(*i).second;4 b( i, z$ ~- p% s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ X$ w5 B$ ~( }6 u4 Y
  387.       {* ]; W7 `; t, ?) f8 H
  388.         file1=(LPUPDATEFILE)(*p).second;
    * K; M  }" N1 l9 b: s2 ^
  389.         file1->vers=file2->vers;  |& f3 Z) Z$ u) f$ M- @
  390.       }
    " d; U7 E  e8 `
  391.       else6 I' A" u  w$ j, Q' y) V
  392.       {: X; T) {% N7 z, p  Z9 N6 L+ y1 v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 ~& B( D6 P2 I, ~0 y' S* X
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 i: I5 Q2 Y1 M8 c% t& J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    $ `% w5 `2 X0 ^4 K/ `' W* ?. u
  396.       }
      k. M1 H" H& c' }! ]1 [
  397.     }
    3 E! V5 D/ O+ r& x" k* _% F& d
  398.   }
    ! a) K( K6 i- u- l5 q  _
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ \* _- r6 z" j5 q7 }" \- q
  400.   {
    1 q1 @: Q2 `* X* |) v1 u0 v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), {  l3 N3 n1 A0 p% |3 H
  402.     {
    2 h  ]/ f6 a* P# e. a
  403.       file2=(LPUPDATEFILE)(*i).second;  @, z3 k' P& c) f* ~4 u. w
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' G9 |# g+ r. n+ s
  405.       {( \& W# P" L4 [8 h4 q( u
  406.         file1=(LPUPDATEFILE)(*p).second;3 J8 D: b9 o7 `& c. ~
  407.         if(file1->vers!=file2->vers)# D! A$ Q2 N& T7 f; P
  408.         {
    , v3 m3 w+ e" C' |
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; V1 p% y- S0 ]3 S7 W: `) b
  410.           c++;/ u4 }  T9 j5 v
  411.         }
    : X/ C' R  N- y5 |7 N/ V8 B
  412.       }
    ( p& m. t# U& q$ k  Z
  413.       else4 T4 o$ Q- U; h( t( \5 m
  414.       {
    + ?; F0 o6 c3 D( A% i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 D; k2 E* D2 X" Z
  416.         c++;+ y5 [' n% c) K, l% w
  417.       }
    8 X( N& m/ K1 M4 o* i
  418.     }
      |) [: ~& D: s  i
  419.   }
    ! ~) u) [, W) Q# s
  420.   unlink(".\\DownLoad\\update.txt");
    1 M) \' n. g0 g8 H, F
  421.   if(UpdateLocal.size()) return TRUE;
    . W0 \# B3 F" j8 l
  422.   else                   return FALSE;
    & O5 X7 [( `6 i) u
  423. }
    + Q( Q  Z* [$ a9 @5 J+ M
  424. 2 O4 c: S9 L! T( G, A
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"5 v) o, W( z) H9 l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( e: w* f7 r7 O2 G0 G8 M  y

  427. - D; K  C% g- h$ L

  428. . q4 j/ _( K( ?2 n9 ]* M2 }

  429. ( E4 l5 F2 s3 t7 s3 j- s4 D3 B- {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    6 H& d8 _4 _2 w& u' A
  431. {) F! u! \; E" Q. X. W) ]4 J
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ! B' c2 \$ X* I& m; p! |" h/ @( ~
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): n9 o! z# t1 G% g
  434.   {6 \" o$ X/ L" W  D+ u2 i' B
  435.     char szLanguage[50];
    / {: i5 v6 R+ @. \0 x0 v
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 h- _7 x& v# U3 f; i" }5 s# ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , u* n: X" l4 g- O- L
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 u7 |  V; Q7 M( u" W' Y
  439.     else                                   m_iLanguage=ENGLISH;
    2 P8 ~1 [! F: [
  440.     char szRegister[100];
    ' K& j8 c1 U% y! G) s+ o
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& J$ t& @; j/ j- J
  442.     strRegsName=szRegister;, B/ I6 y. W0 y; u- W
  443.     char szPatchURL[100];; d2 \$ O' r. U+ v# O0 D/ R3 t- ?3 N
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ e8 o6 t" p% o; r; V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& h! V) q) ~. f, T+ P. ^( Q
  446.   }/ z3 ~+ @9 Y7 h. e! v* `  n
  447.   else
    9 Q6 o! ]1 q' }# d- x
  448.   {
    5 |: z2 ]% U! }( q" X  ~+ i
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - M5 J( i0 S" t. Y' M
  450.     strRegsName=DEFAULT_REG_URL;
    # }& y. g! S& q& t$ a4 \% I
  451.   }
    ) d, ?& t/ a% K: L, n3 s
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / m8 y$ k$ t9 n+ y  G& f+ l
  453.   {: ~3 ~- W- k+ i7 f
  454.     char szIP[50];5 A. ]1 L9 M8 C% R0 ^9 m
  455.     char szDIR[300];
    : p& V+ E6 G; E
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ ]% t8 p& }, ^! P1 S2 \
  457.     {
    & M& [+ u. K0 v& L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 y& r4 x( a/ _3 c/ `" c
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 Q5 ^  ^2 S5 f0 l" W) @. y! I; a
  460.       strHostName=szIP;
    0 X$ p. N9 B; g% d3 A
  461.       strHostPath.Format("/%s",szDIR);1 X" i* J9 p: s0 F' W  `1 h
  462.     }
    % b6 ^6 b* K+ z
  463.     else
    8 Q7 r4 Q, X! Q+ c# C4 B' Z
  464.     {& o5 d5 B8 D/ G6 l
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 R6 }4 u, m" Y
  466.       {! F& z, X5 Z' F
  467.         char szLanguage[50];
    3 I3 a8 V3 h: O+ o* F
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / z+ Y: V. s: Q% R
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 Z) a; Z+ G4 i+ ^7 G
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 Q! c! {8 Q  A7 W6 n$ ?* s9 E
  471.         else                                   m_iLanguage=ENGLISH;
    ; \6 y4 Y1 s# X7 ?4 {$ i# ?
  472.         char szRegister[100];4 w: t/ E" V) s2 S8 ?( z- G! y7 O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # b9 H" _& v; b8 r) k" P+ J# K! y9 R
  474.         strRegsName=szRegister;
    8 h$ s2 Q* n5 g6 f
  475.         char szPatchURL[100];
      b) V5 F% y  X4 Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) I( f! p7 l8 s1 {' z( {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 N% H! D# E. {5 m. @
  478.       }& V# Q3 ?0 {( m# S' l% B( R
  479.       else
    5 S; A7 [& J) v8 S- X( n- c& Y$ d
  480.       {9 q5 f$ W6 G( C* c' n7 H( [
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 S5 |* p$ p- V6 e  c4 G
  482.         strRegsName=DEFAULT_REG_URL;
    0 y) Y5 M5 w9 |5 W3 t# t2 J0 s
  483.       }1 q2 }; A! i: `5 v  v" X
  484.     }% }7 n  B& Q" w: K
  485.   }
    ; D. n1 |, D+ U) Y( v
  486.   return true;
    9 j- h# {) C4 N; d
  487. }. b. s7 M% J. s& ~+ s8 v
  488. 3 ]( s  C5 e7 K6 ?' i2 E2 e5 y
  489. #include ".\ZLib\unzip.h"
    - ?# r0 u- P0 U: v$ c% R7 r
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( V' Q7 C7 j" g. y
  491. /////////////////////////////////////////////////////////////////////////////+ r, X+ A3 X2 ~7 i4 D; I
  492. // CRevAppApp initialization
    - z7 ]7 D" [; e! Z: M, k7 C
  493. # |7 j8 ?9 N+ f. v7 M& A
  494. BOOL CRevAppApp::InitInstance()) R0 t. j# E+ H8 v; x% r
  495. {
    / G! \/ V4 W. S. w8 U* u1 V7 L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];5 o/ m$ J' N) D, e# X5 X% E4 e3 ~! T

  497. ! w8 Q& z2 H' ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 _% U* ^6 t+ T, U
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    2 v- J) v+ y) A6 z. a, Z3 X* s9 H) z
  500.   {
    : [4 g3 o3 [5 F! x7 a9 i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' v& r) I) D7 t4 z3 L. l' W
  502.     GetPathFromFullPath(szPathTarget,szPathSource);5 J9 ]9 S9 T; |# W: C
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    3 t0 Z. M$ x) e5 ^: |/ F
  504.     {0 ]  |+ Y* n/ b9 }; z
  505.       strcpy(szPath,szPathTarget);
    4 Y0 g) @! H  z  m8 s; Z
  506.       SetCurrentDirectory(szPath);( p# r2 A/ t  p6 ?8 b3 b* d
  507.     }$ i0 j( ^: a9 o0 q) g) [
  508.   }) g; h- }2 v0 W, j3 X
  509. #ifdef _DEBUG
    + x; g" W% l- s" F1 _
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 f7 q' |- `7 e" v5 J9 j3 e
  511. #else
    3 @# n2 \, q, B2 a1 t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + ?* B* g6 E' v9 p1 j- s
  513. #endif7 _- Z0 O* X8 a+ u& y
  514.   {  R. w& j9 z2 ?9 p7 M2 o
  515.     char tempFileName[MAX_PATH];
    . R( c, F8 W4 E- P
  516.     strcpy(tempFileName,szPathSource);" j3 i$ J# ^: L" A0 {8 N2 }+ e3 G
  517.     tempFileName[strlen(szPathSource)-12]=0;* G% F: A  }: e$ r
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ i' t1 j& x2 P: B" E
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; D0 ~2 t1 O' j) d( N) M( [
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);" `# P! A; F& |0 ]( A+ h
  521.     return TRUE;
    5 f1 O$ I! s7 R
  522.   }
    " {5 r: E" c2 H6 A. c% Q
  523.   // Nuke 0118: Delete run.exe& }4 v5 N3 z  ^; i/ f3 y( ^
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* b& h  F' v8 Q6 n4 {8 w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / p9 q3 T( n' G8 C. D- v# z
  526.   if(!ReadCfgFile("Config.ini"))
    ( Z/ T9 w4 A4 i  D$ c" l
  527.   {
    6 u5 q& _+ ~/ ~+ x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 p0 Z9 h1 k; |( Z+ D) J" K3 R
  529.     return TRUE;" K' ]0 C) S$ b+ M
  530.   }
    ; ]0 R, O; d$ f; ?7 Y& b9 T) v/ g
  531.   HANDLE mutex;
    8 q1 T' w! b' ]  s
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 t5 w8 b# ]" ]2 e( }* R4 U
  533.   {+ |. j6 q2 k$ c: g
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 V  W& I, ^' b8 X. C
  535.     {
    1 s& S# q  Y1 S* H5 o
  536.       CloseHandle(mutex);3 Y0 B3 R* n# J9 M$ e4 l5 X5 ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 d9 i: ^5 {5 [8 E4 d- V5 c; A; Y3 A
  538.       return TRUE;
    ) y6 z& H5 y; r( ^0 J% d" f
  539.     }
    : p% t3 I5 j( N' u
  540.   }  . w. K' ~" N  Z1 @1 }2 Z4 X8 O. F
  541.   CloseHandle(mutex);5 m8 |) U$ v0 l; c! m% L: W) ^
  542. ' a0 W  `, R/ R% M, r9 b- {
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 h. b2 P* i: b. P2 ~5 \6 B
  544. , y7 B* W0 j  \3 I
  545.         AfxEnableControlContainer();& b7 {: K$ c9 h7 V3 D, B, F

  546. ( F: N8 L) o6 H9 }/ w# }$ I6 ?
  547.   bCanUpdate=FALSE;& w3 m, |. |: H8 C% X0 t2 y" g1 _
  548.   dwStartUpSteps=1;8 c* I, o  \# Y  i3 B
  549.   dwProgramState=AP_NOTHING;1 h7 G* t9 k8 Y3 O1 E  E

  550. 8 N( D1 Z- }8 U( N
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) o8 K' h/ F4 j) [" f7 j$ n- g
  552. 5 F# f" R0 Y; D* }" U3 K5 J
  553.         // Standard initialization$ a# g& [0 \" [7 }! U2 |+ Q6 A8 Z* @
  554.         // If you are not using these features and wish to reduce the size! B9 y* M4 K. `5 O- c* \1 H" Y
  555.         //  of your final executable, you should remove from the following1 c5 L: t& k- }6 \/ g8 P. F7 [
  556.         //  the specific initialization routines you do not need.
    - N6 \% G' }" d% a

  557. 9 L0 d. ]( ]/ B+ v7 Z
  558. #ifdef _AFXDLL
    8 ]( b* q* m. M# p# E" n. J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 m( s+ k4 T& e/ ]) M
  560. #else
    ( h; J4 o' }) Y8 h$ q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 V' c  m7 F; \- _" E" g
  562. #endif2 ^, N0 T5 E  v, w- ?! U9 e8 y

  563. 0 V  e9 R, N  n% g
  564.   dlg=new CRevAppDlg;+ [$ @' k5 u6 U  g2 y3 v% j
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' @7 s- ^; J, `8 C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - t0 [8 x$ x' @$ r+ D' |$ e, P
  567.   m_pMainWnd=dlg;
    * l4 W3 B$ @- w: f2 ~9 F: _; c

  568. 6 ?6 T' B0 ^1 j% ^4 ]8 a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ J& k) X7 q6 W! l* U# l

  570. $ w8 I4 v" ?9 L! r
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 v3 R9 F' t. D
  572. //  ULONG_PTR gdiplusToken;1 E+ M8 q1 u) \* i, |. }. q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      p5 M# x9 M/ N" q) E* P( v) H3 E

  574. 3 I7 \4 `2 m* \/ y' D0 x
  575. //        CRevAppDlg dlg;
    $ d7 H& ~5 D/ }4 e3 K+ S
  576. //        int nResponse = dlg.DoModal();% n7 q( V: B* \
  577. //        if (nResponse == IDOK)8 S* j9 U- {( v+ A
  578. //        {
    ; R1 ?% y( h$ j+ i9 q
  579. //                // TODO: Place code here to handle when the dialog is  V: I  {. d" A' q2 E" T
  580. //                //  dismissed with OK
    # @: |* M: I, r: o7 p
  581. //        }
    : T' b2 m' s3 Q" s5 w# G; }
  582. //        else if (nResponse == IDCANCEL). K# L+ j7 Y) z- X4 u; P3 N7 Z
  583. //        {
    ' i$ L. E1 r* F3 P* E/ O2 M* Z
  584. //                // TODO: Place code here to handle when the dialog is
    * {/ \: _$ s, L5 e9 a6 f
  585. //                //  dismissed with Cancel
    4 O  J& U) z8 R6 t
  586. //        }3 M  f% \  K0 u' V. _$ |) l
  587. 9 V( |5 i, f1 v1 f$ V1 @
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' H2 U! [4 ]- V
  589.         //  application, rather than start the application's message pump.
    2 Z$ w) E, k( L
  590.         return TRUE;: s6 l; g& t, p4 Z1 S* E% U
  591. }' G, \+ \7 l5 `1 m: n

  592. & S2 Z( Z  U3 b& |# ?& K; [
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 A% g) {( B" ^2 G  n! f
  594. {: q; T: y+ {2 m* t! J- N/ [
  595.   int i;
    - z& Y0 X& A  O9 G6 L) K4 M- B
  596.   char *szRet;0 `5 O: n+ w' _, e

  597. : m' r! H- f. ^6 S- H% v( {
  598.   if(pSource) { itoken=0; sztoken=pSource; }# u' B! x! U0 v: Q9 d+ B8 m
  599.   if(sztoken)
    ' T* V6 A3 G2 O6 u. I7 O
  600.   {
    % [6 M. z9 s. H  z
  601.     szRet=&sztoken[itoken];
    ; }5 r1 H" A% P8 i* t
  602.     while(sztoken[itoken])( c1 ^5 W  D& E6 F5 z' n
  603.     {
    , r- [! p( G2 i: B3 k; x) x
  604.       for(i=0;i<(int)strlen(token);i++)
    + y, o) }2 w: e5 V. {/ `9 @
  605.       {2 v( X% q9 q2 _/ B
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      d& e( h! W8 y& S- b" O6 w; S
  607.         {/ M2 f* V2 g4 B9 |+ d
  608.           sztoken[itoken++]=0;/ @& }" Y) j9 J
  609.           sztoken[itoken++]=0;9 A) e* z# v5 w
  610.           return szRet;
    0 Q7 M( K  z' @$ e$ H, b0 P
  611.         }3 Z+ D1 s  R4 [1 h" T# }7 a
  612.       }& C! g" Y, c) ^) X. i; I
  613.       itoken++;+ s% Q0 ^) ]6 E) a% W/ S
  614.     }  o% I+ w+ w/ b
  615.   }8 M; k- i2 w1 X3 a# b
  616.   return NULL;' o8 [3 M/ U  ^* X) Y
  617. }  \, b0 V; b5 K" u
  618. . t) Y+ F& s) a$ `
  619. void ProcessProc(long Total,long Current)6 D4 B. a0 s  a  V2 X) D
  620. {4 g% V2 Q( O1 i! Q4 m5 H2 v8 r5 x2 e
  621.         MSG msg;- `1 O  ?& \9 [  U
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* J5 p9 U7 i# a8 J  Y' o
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - }* e6 a8 W3 {5 b; \# o
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ H! n! ?! E; o! J
  625.         {
    % w4 ]8 p5 X( ~
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & c, ~2 c+ z) s! |0 z, r. a0 k5 J& F
  627.                 {
    3 [- R8 ^4 ~" |
  628.                         return;
    . z6 J; }% k$ p. [! }( c+ e
  629.                 }& \& Q! i; [  ?: e, ~7 Q
  630.                 TranslateMessage(&msg);
    5 u" ?& V5 R7 i0 Q
  631.                 DispatchMessage(&msg);
    7 u( M% U7 b0 c2 q4 b8 _& ?- N
  632.         }       
    - Z4 G1 M; v$ w' v, h$ }$ E1 N
  633. }9 Z# K+ t2 W( R

  634. 3 z( S# e# h! U3 S9 Q) K
  635. BOOL bFirstChar=TRUE;' y' ^3 i; J- j  h; P8 s  H: e5 e
  636. - w1 d% G, u# Z7 H, M! o% y% I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)! A0 j' b9 E( T2 S6 g' u/ G
  638. {
    5 b6 f; _. d0 a- b% ]) C0 K; @
  639.         // TODO: Add your specialized code here and/or call the base class
    * t4 c/ i9 n! Y3 {
  640.   switch(dwProgramState)) u( V+ G0 H7 {! f  X. `8 A
  641.   {
    ( J; Q2 x1 S& M+ ?1 S8 ^
  642.   case AP_NOTHING:
    8 D/ x' |$ ]. P( P+ U4 H) p5 O
  643.     switch(dwStartUpSteps)
    2 z# L! v! v+ R: o3 e6 \
  644.     {$ M+ t$ ?4 d! n% _. g  e
  645.     case 1:- p6 t0 P! c, m# W+ N8 P  g) j
  646.       {; t5 x% N& t# d; M- n; K$ B
  647.         int i;
    ) |  w* X( e. r
  648.         CDC *pCDC=dlg->GetDC();
    $ n4 U3 q" ~7 p) D' W
  649.         HDC hdcwnd=pCDC->m_hDC;1 r7 a6 E- I/ s( s
  650. //        Graphics graphics(hdcwnd);
    - Z# C; f+ K, l6 S2 F7 Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, ?6 |- @$ I1 {6 o
  652. //        INT iWidth=bitmap.GetWidth();
    , M; a- V( K' }' s1 A+ X( M% `- h' D
  653. //        INT iHeight=bitmap.GetHeight();  [3 ]& M# Q8 Z3 L" f# ]
  654. //        Color color,colorTemp;. E; y9 h/ O  ?# o2 y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    $ ]$ f" X8 J- x9 m3 W
  656. //        {2 s! \2 c" ]$ S4 [. Y
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    , k. }, f% F: i/ e" W
  658. //          {) U9 ~9 D9 C6 {4 @, r/ r( U! D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);+ ^) j, d2 q7 u
  660. //            colorTemp.SetValue(color.MakeARGB(& F5 @/ r' t4 R+ u) T/ E
  661. //              (BYTE)(255*iColumn/iWidth),
    8 {$ h: A, y7 g$ ?- |$ j
  662. //              color.GetRed(),
    ( J0 [; b! H9 j8 @' k
  663. //              color.GetGreen(),& R! D* ^4 }9 u( p& L) T
  664. //              color.GetBlue()));
    ) ?0 s4 h2 m" F6 q; x' R
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: ?$ P/ T) G* i+ G/ f
  666. //          }3 i- P2 N  u8 ~
  667. //        }0 e; {) |( A: R! ?) w  Y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    / e' E, x4 U" o* N
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 w8 I0 }" S. U6 Y) I& n- `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    6 c$ ~7 F+ E* H! v4 X' E. R  |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 e, _, a) s; \4 y( t8 U
  672.         for(i=0;i<240;i+=8)4 X1 U0 b1 I# X. s" Q* @, N
  673.         {9 b! \3 E0 ]/ c: Q5 s7 G
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 h. X) h. p6 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - L; L. W$ }* G0 M3 X7 q: ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ L" W0 V; ]5 @, X; @- K) e7 ]. h
  677.           Sleep(33);' b7 H* u1 c% i
  678.         }
    % r+ o- c8 h5 g2 @
  679.         Sleep(1000);' ~2 T* ]: B6 \3 Y, Y7 s0 U- a$ B( y" }
  680.         for(i=240;i>0;i-=8)
    0 u2 U; M; U% z* m$ }, b7 w& ]
  681.         {
    4 p; S) \" I: K0 u0 ]0 l1 K
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 [7 J& q8 N2 }1 c6 l$ L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. `( e; h4 B* P& n( D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 R% V8 l* a7 c0 C
  685.           Sleep(33);
    ! ?% o0 ~7 a; {8 _) Z! [8 ^
  686.         }
    ' _! o  V$ L, K  Y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * X8 f% q4 I) d# t& u& @# J2 O
  688.         dlg->ReleaseDC(pCDC);/ z; V; Z5 [/ n5 Y
  689.         DeleteDC(hdctar);
    / L) j9 H* _- k, g& S5 X! T
  690.         DeleteDC(hdcsrc);
    0 g+ V# }8 ^, g" g9 i; N
  691.         DeleteDC(hdcorg);+ v6 y! T1 a! x) A+ n1 G
  692.       }
    9 n1 [% Z4 L9 V' h  T) q9 H1 Z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . }& |9 s7 B9 [8 t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: r* U$ d  n1 [' i
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 S2 e" ~" W1 N7 c' `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& x7 E1 w1 P: I1 j1 Z9 k% \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& O, G; i% f  ~0 q0 \
  698.       if(!Dn.Connected())7 j+ a1 p4 K# |. J% A) b  Q
  699.       {
    - Y; A# X6 B/ @( `& V- o
  700.         dwTotalFiles=1;# V5 @- D# c4 u- _: |' S8 u8 [5 M
  701.         dwDownLoaded=0;
    ( c- ?3 \* a! w) I
  702.         bSilentStep=TRUE;
    ; F3 A# |" u( I5 @" _8 Z
  703.         bCompressed=FALSE;
    $ y3 o, j: m; T8 d: N
  704.         strExtLocal.Empty();- d4 [  y  D/ T! Q1 J
  705.         strFullName="readme.txt";
    6 \: Y' x* A% u' s% i
  706.         dwProgramState=AP_CONNECT;! v3 J- z3 X# Q0 M, g
  707.       }
    ) N% t! [9 M+ B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    & _8 N, @! r, m" T+ f
  709.       dwStartUpSteps=2;
    ' ~. T# t6 F$ G4 D! q
  710.       break;
    ! A6 D, x, d. R/ e/ A
  711.     case 2:
    ' q' e* p$ _; z* o* u" q
  712.       {) K  \* @$ c9 {) O; @* J0 `
  713.         int iEOF;
    % V' r7 i1 Z% B# \
  714.         FILE *fp;
    0 T3 X4 G, k6 \
  715.         char szString[512];- `. W4 @* R8 T2 S
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! |3 _  R$ k6 R, a( q
  717.         if(fp)) m5 P. H% S6 q
  718.         {, R: S. Z0 ?; W3 j  R/ m) `  A" P
  719.           do
    8 F# _  A7 ~1 ?. ^/ Z7 b
  720.           {2 z1 I! S& M8 Y/ b" d, K2 q. \
  721.             iEOF=fscanf(fp,"%s",szString);
    ) ], ^2 u* f- m+ Y6 N0 O* O
  722.             if(strlen(szString))
    ' K! k5 [( T3 V) v/ l$ g+ f5 S
  723.             {
    * `6 \) e; j5 Y. ?9 ~- j
  724.               if(bFirstChar)! u  @* L+ F: F( c% a
  725.               {
    ( C5 u& ^9 h9 |2 s; v- w1 v
  726.                 bFirstChar=FALSE;4 [: v- _' s: _: V3 t( D
  727.                 bConnectIsBig5=FALSE;. l3 W! c: \' I6 o- G! C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& E6 @5 t: }) j4 @; ]: E  Q! N  f" P/ q
  729.               }
    ( u; [( `' n/ C* Q; t0 K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - `' U- {: L5 z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! s& P/ t7 d4 B8 \9 t8 u6 f% \
  732.               dlg->m_ListText.AddString(szString);
    % b& p. F/ G  w! K1 t
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 j$ x5 b. l* h: ^$ K
  734.               *szString=0;! d5 T7 p4 y# m7 v1 a, D
  735.             }
    1 p) z2 [$ _' W: \( r/ P9 k# F( Q
  736.           } while(iEOF!=EOF);
    1 }+ H4 z6 o' E/ O# [
  737.           fclose(fp);
    " B, V3 i! l. Y6 G  S8 l" `# X
  738.           unlink(".\\DownLoad\\readme.txt");9 E7 V* N5 Y' Z  D, Q8 P
  739.           dwStartUpSteps=3;6 p, a4 D' c4 I: y9 I) V5 B
  740.         }
    % k0 Z7 W: q' S
  741.       }( \7 J: [- K1 [+ X. T
  742.       break;
    . V* a: g' f8 S$ w3 d) Z: D
  743.     case 3:) n% O3 ~9 _: f' @" `6 |4 G# F
  744.       if(!Dn.Connected())
    5 o5 c, q# y: u- l: S2 v: e, u# `
  745.       {
    8 |3 R0 _) C; E0 B; i
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  \# a) l2 ^/ L/ I
  747.         dwTotalFiles=1;) ^* ^$ m5 \% M: U4 N
  748.         dwDownLoaded=0;
    ; U, d0 L/ H% X3 P$ Y2 y
  749.         bSilentStep=TRUE;
    3 O6 T, B( d' ]( e1 j6 `( _
  750.         bCompressed=FALSE;
    " P$ ?- l$ T7 `. y
  751.         strExtLocal.Empty();  p6 G: ^, H5 t" w& e# z
  752.         strFullName="checkversion.txt";
    7 d. `+ D( D. N; B3 v" e
  753.         dwProgramState=AP_CONNECT;7 m9 _1 t* f. V$ j
  754.       }
    7 ]$ @2 E, L  q+ t
  755.       dwStartUpSteps=4;: `; v3 k1 K8 E+ @, }4 T" G9 G
  756.       break;
    ' t# y8 I$ P; @: u; I* S3 i; j
  757.     case 4:2 y' T8 ?  J# s
  758.       {
    ! ~1 P( Y' _/ Z- e  f
  759.         FILE *fp;
    * N6 i; \/ i& j( \; _' N1 d
  760.         char szString1[128];
    $ F) {( z! `$ O4 [) A# ~
  761.         char szString2[128];9 b* r' d9 ~, }
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' _1 p; @. p' h) |
  763.         if(fp)
    3 J, @! z" S# ~9 Q
  764.         {
    - j$ N0 o6 y2 U9 n( q
  765.           fscanf(fp,"%s",szString1);
    8 N- P6 s& m0 ], ^- Q
  766.           fclose(fp);
    " e/ m( w5 I& H" A" l
  767.           fCheckVersion=atof(szString1);, J* t* K0 s( x% e- m: ?
  768.           fp=fopen(".\\checkversion.dat","r");
    5 g/ N$ T7 b! I6 x# K) G6 R
  769.           if(fp)
    " l* o, T/ T% P5 T) R
  770.           {
    1 V. [2 Q6 G9 A( o9 T! f: T& |
  771.             fscanf(fp,"%s",szString2);* R6 {; Z' m) t" h# W
  772.             fclose(fp);" B7 U1 @: e$ h+ ^
  773.             if(atof(szString1)!=atof(szString2))0 @# j/ n% I: @* e
  774.             {
    8 x+ @$ f0 _" D: ^
  775.               if(!Dn.Connected())( |6 L: r* `5 P* i8 x7 F- M
  776.               {
    # e( E' ]8 G: \% j1 P
  777.                 bFirstUpdate=TRUE;) Y/ b1 {2 E. Z6 P
  778.                 dwTotalFiles=1;
    3 B7 F) X5 N, E0 z! ~# {
  779.                 dwDownLoaded=0;! y9 h1 v$ Z1 z0 s8 E
  780.                 bSilentStep=FALSE;
    . \; j8 u% v* |# m3 c. L! m! f
  781.                 bCompressed=TRUE;) S; b0 e; y4 B9 i3 X; Z4 u1 b1 p' @
  782.                 strExtLocal=".\\DownLoad\";$ r1 D; u, y+ s  A8 g& ?
  783.                 strFullName="update.txt";/ P+ }0 }9 f$ m) X* }- d
  784.                 dwProgramState=AP_CONNECT;4 B, s' `8 Y& l
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ w/ z3 ~# L* y0 f: i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");* X2 V& ~, S9 t& V. ?
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; }) M$ t6 J; b0 p- P
  788. - W$ C; V% ~" T6 w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * N: L2 ^7 I1 S+ G2 z. @
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    * ~8 I4 n+ S) Q/ A
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    " U- K8 }0 K# }8 A) R
  792.                 {
      D5 U/ ]. H2 C6 ~' O2 C& y2 X! R! ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ t, T0 G: J, h* z% e" O# h% W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- H# M2 j4 M8 K0 @8 [
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ! l2 g! N# @0 `4 f( ^: r( b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " l9 X, w) G' R9 ^2 J0 g

  797. 7 P! G  l+ b' U1 O$ G) l3 g8 R" C2 H( n! O
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + R* p$ s4 P0 m1 I  d9 n
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; B4 N% c/ ?6 H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- H1 n9 _0 j% R8 E7 L/ a' P0 U2 V# {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 R+ j* C$ F  k6 u/ n! V
  802.                 }5 Z. G0 M& D$ L
  803.                 dwStartUpSteps=5;4 U& t7 ]/ D" W- I8 ~8 R" O
  804.               }" g0 g5 [, W3 W5 ~7 `
  805.             }
    8 ]% t1 L6 f( G" V8 G5 I' X) u2 x4 S
  806.             else
    * ^8 y- @& \5 c) {
  807.             {
      p7 a! F' Z* t7 T% w
  808.               unlink(".\\DownLoad\\checkversion.txt");$ ?) ]% s/ q9 B
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ; a2 g; ~: c$ f- c4 y% v& O2 y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 {7 R) z8 D/ Z0 }$ r9 P  X0 O6 T
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    & C, R: W6 s3 L: h4 \
  812. 0 e/ p5 c) O" H8 p: ~
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 j. c, V$ b  {1 y
  814.               dwStartUpSteps=99;
    , g9 H' t- G, L
  815.               bFinishUpdated=TRUE;$ n" M# _0 w+ `  v5 Y" Q
  816.               bCanUpdate=TRUE;
    8 D( a  O( q( o" O' I0 L7 g8 M% T4 Q
  817.             }  l% {8 M+ V- [
  818.           }* R6 \1 E( e3 d
  819.           else
    ) j" e$ l! J6 W  ~$ s1 y
  820.           {
    % Y( H9 W% U; F$ }* h1 J5 y! [/ f
  821.             if(!Dn.Connected())
    : k: w$ z' O+ C; {1 Y, {
  822.             {
    . m# g5 d: K& e# |
  823.               bFirstUpdate=TRUE;
    # F& z" e% X4 B9 d2 u
  824.               dwTotalFiles=1;
    0 P) g2 `. r. f! i: ?' i
  825.               dwDownLoaded=0;
    5 W% {# O7 {" G% [; w* u
  826.               bSilentStep=FALSE;. D0 t- ~2 m# S: a* w( \
  827.               bCompressed=TRUE;
    " J7 j& a1 ^- r/ z* f# u
  828.               strExtLocal=".\\DownLoad\";; ?7 [, n' C! d# q2 M
  829.               strFullName="update.txt";/ |0 j. S* e1 {1 ~8 U
  830.               dwProgramState=AP_CONNECT;
    ) W. N( R+ Z* S+ t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" t  v, c1 N/ h2 `% h& h3 ]
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 M5 W+ ?7 U  A% a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# ~: d) U7 {- }; Z4 V' f+ h5 p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! n: C. {& C5 ~
  835.               unlink(".\\DownLoad\\checkversion.txt");  a% A) p9 x; Q4 @4 D3 z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ; W) s; u* q3 g3 }
  837.               {
    , F6 G) M, N2 U- H
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ' P& `$ t; x7 h( }1 V) W5 m3 W- j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' M  I# e# k4 e9 W7 D- n% H. S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # ]3 Q3 ]: Q8 j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& z4 d- m1 q5 N# X" V  ^$ v  a2 Y6 J
  842.                 5 s: t# ?5 b% O1 j! m
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% O/ |, @, k  u- k& r4 [5 `5 T1 R
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ l9 Z% T1 m; p' H0 m$ J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");, b0 q) f7 k, i' T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% w3 h" S6 W9 k
  847.               }
    9 b" t0 A# C4 R" q8 T# j) L
  848.               dwStartUpSteps=5;8 p6 F( `( t2 K% e5 V9 J& M' T
  849.             }
    * [* d) m9 W! x" O$ W: v7 l; y3 J
  850.           }& y3 z! y. _, o' o. a
  851.         }
    3 Z" J$ U; Y; }/ k
  852.         else! s( d- m' d/ O% R3 W8 P2 u6 I
  853.         {$ I' i# H; Q6 }4 o& _+ f9 p1 U1 t
  854.           dwStartUpSteps=3;( R8 D; N( s& k
  855.         }4 g; W6 T- {$ L
  856.       }
    0 {6 k! _% K  h* G
  857.       break;
    7 B& I, ]/ j: Q$ z
  858.     case 5:: ?# g7 s+ _- l9 l
  859.       {3 ]* [0 f, W" X/ R8 b
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)8 L0 z# k9 v8 F# L5 W
  861.         {
    , M+ y. u: v, h' @/ F
  862.           int opt_overwrite=1;
    " }# F8 C! H  z6 N' ~
  863.           int opt_do_extract_withoutpath=0;
    # ?2 v3 @% H& L2 P; L( ]0 G
  864.           unzFile uf=NULL;7 m! Q5 U1 A. H7 i, o4 o3 y
  865. : }: ^. M  i1 F( |/ ]5 q- a
  866.           uf=unzOpen("Wsa.zip");
    9 w) o' L  s( S" ^1 x2 c4 _
  867.           if(uf)  V8 L) T7 |/ s5 q
  868.           {
    ( v0 \% P! U( x6 J! F! |" u1 I
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);* z. G6 E' J+ z) o6 T4 r* ?4 Z2 j8 G
  870.             unzClose(uf);
    9 a3 `3 |7 {! A( e
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    7 ~6 _9 b# M) ]3 b8 G- s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    + S, u  T/ P/ }" H5 p' R
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- n1 H$ E$ [- i- T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 }) W, H7 _* l. M
  875.           }
      p! ]/ X+ G/ g/ s* z" ^/ }3 P4 Q
  876.           DeleteFile("Wsa.zip" );2 G5 B! r' [/ j. v; `* G
  877.         }
    4 a" n  K" |0 S& C, ^! K# D, R
  878. ) C: L! _& U5 M! V1 i8 o" A7 c
  879.         if(CheckLocalVersion()). T9 E$ [" @% Q  C% v" [
  880.         {  F) A2 X) f4 ~6 `
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");8 B+ K" k* p- y- a8 l% ]
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");& j0 J8 o! r! Y
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");* _+ s# N# i+ O$ X4 X5 l  H
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! O" o. T7 {+ u- w
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);2 P5 s. M: i9 e; T( k) J, y
  886.           dwStartUpSteps=99;
    , P- w2 r3 L; h8 ^1 f6 S1 {
  887.         }
    : G. ?/ ~$ d* W, {
  888.         else
    5 x: V1 i: T0 H$ s; q
  889.         {$ T5 t( E9 X) G9 t+ d" Z
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! r0 _: X! |. r2 v& F
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 q  f0 d! Y" s' W, h" u
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    # |+ q. Y; F) j

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

5 i' j1 E( V8 }+ _3 s) }% l6 l! J: q- X9 A

評分

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