CSUpdate.exe源代码

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

1 R, p9 R# Y( {+ O) C( Y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 P. N& M+ I; c7 |3 _+ }3 n  O% s7 `
  2. //1 {- M! M% P" R, L
  3. % ]) l$ j: b& N; A% @1 H( X. o
  4. #include "stdafx.h"5 @3 X& z, l7 d$ K' V7 w
  5. # r! g! q: @( Z0 {! r' R7 r! C
  6. //#define UNICODE
    * M$ K  F2 ]4 k) N: m" {
  7. //#include <gdiplus.h>
    - i, e8 P, y1 u8 a+ Y
  8. //using namespace Gdiplus;
    9 u/ d6 K! t! q# i

  9. " a" X/ n2 H5 {7 g3 ?% N
  10. #include "RevApp.h"% H% H% ^% x, ~% x4 z: N' a
  11. #include "RevAppDlg.h"% `$ Q6 W* P* F# g" G

  12. ! u0 ?  r0 b5 e6 {2 l+ K
  13. #pragma warning(disable:4786)" J& d" U& R" \* f# E$ q3 m1 {6 k
  14. #include <map>6 ?) d* A1 D8 j4 g' k: d' `
  15. #include <list>7 [, M2 y% ~2 a. v
  16. #include <direct.h>2 t( }' t) |) V( D2 @

  17. $ @/ Z- T* @/ O* i5 F- y
  18. #ifdef _DEBUG5 C+ {  `' G8 z* o, B1 N# u- D0 y
  19. #define new DEBUG_NEW$ c; ^' G+ r  b% ]' d$ U& \$ P
  20. #undef THIS_FILE
    # {1 S9 d  X9 z% ^0 }/ N
  21. static char THIS_FILE[] = __FILE__;
    4 h. v  i" ?) \3 R- g; ]& u/ [
  22. #endif
    : U% ^" w8 C. R" X' e  T
  23. #include "SkinResDef.h"0 ^% ~8 _* g: ?* Y7 X- |
  24. #include "ChangeBG.h"8 K( a1 J* S8 Z5 d* z
  25. #include "AFXINET.H"% O) }: n1 R5 @1 Y& J  M

  26. : I' r. C8 X  z: I9 Y' c
  27. #define TRADITIONAL_CHINESE 02 k% C% R( }2 s4 e! [* T6 B. u
  28. #define SIMPLIFY_CHINESE 1
    : L# j: [( N+ K0 q, d5 ^: ~# t, c
  29. #define ENGLISH 2
    ) G2 z7 T) G+ n7 [" s6 H! @/ i
  30. int m_iLanguage = ENGLISH;
    & X& ?8 R4 ~. V: r
  31. /////////////////////////////////////////////////////////////////////////////
    : D' }/ I6 c  k
  32. // CRevAppApp5 d" U+ f% _, ^$ C$ l) _/ x
  33. " s5 @2 W" Q. ?/ J' X# a
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    : ]. m) A) M; E  Q7 P
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 C% U1 J/ o1 U/ Q# `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.9 ?9 d1 n$ q  \% p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!# l5 T, S- K, S' B
  38.         //}}AFX_MSG: l+ n1 r. \* I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
      y  t6 C6 ~6 r. ~2 X# c) Z
  40. END_MESSAGE_MAP(): t3 e' V" P' u/ M
  41. ! z! ~! V; t4 B6 n8 c
  42. /////////////////////////////////////////////////////////////////////////////
    1 O$ q5 N, I' V6 a' M* X2 B- V3 B
  43. // CRevAppApp construction
    3 A$ Y' H5 r1 u  G4 m9 n1 H
  44. 3 j2 Z4 R9 q, B/ i$ Z
  45. CRevAppApp::CRevAppApp()' r4 d# {1 M4 N4 H
  46. {
    / d. X8 ?5 \4 A/ o: C* E: S
  47.         // TODO: add construction code here,
    % I; ~# r; _, s2 I+ I
  48.         // Place all significant initialization in InitInstance) s( _1 C2 n6 x% L
  49.   bDisplayIsBig5=FALSE;& B* [, o4 G! h
  50.   bRestartUpdater=FALSE;
    ( I  i: ~. ~( B! C
  51.   bFinishUpdated=FALSE;
    ! e0 M  o6 m: k& G/ ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    1 J3 ]; l# ~+ L$ ]& R) o1 H
  53.   InitChangeDataBig52GBKS();" a  p& ?; R  e$ Z( Y( d
  54.   InitChangeDataGBKS2Big5();
    : n# F3 t- m% J4 O* u* o
  55.         //
    + _# D( ~0 R7 [7 E. G
  56.         bClickRunExe = FALSE;9 G3 c8 I0 y% a; E4 ^* B
  57.         //6 d" a! [( K% i) V& Z; a1 x, Y
  58. }5 ]" m( D' y) {9 }; S# v5 t  Y

  59. 7 X- U) w+ b7 s- y$ f2 }
  60. CRevAppApp::~CRevAppApp()$ L  f  M. Q, v% t/ a0 d
  61. {/ ?0 }1 K! u& i6 I
  62.         // TODO: add construction code here,
    / k2 z: w3 B/ B; B* a! {; B! i/ H! v
  63.         // Place all significant initialization in InitInstance
    ' i8 {0 ^  p4 w
  64.   EndChangeData();+ z5 V4 }2 e0 c# F! q, n; [3 N$ K
  65. }! `  t5 S, H' m4 u9 i
  66. 1 }1 c$ X. b$ V6 P2 J
  67. /////////////////////////////////////////////////////////////////////////////4 e' z+ W3 ~: i( |; @* A
  68. // The one and only CRevAppApp object
    9 k7 |! }3 y0 k  h. b/ p, k6 N
  69. 9 z9 x( m/ c6 w) @- x: r
  70. CRevAppApp theApp;2 o( o* |( Z1 I  A

  71. ; {: r' ^; Z2 S3 C& p* ^4 o" G6 K, M
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( X% J; z, W- L  A
  73. {
    " {/ a* j0 Q; p* b. r
  74.   int iEOF=0;
    " G& G, }/ A3 ^5 W4 K
  75.   char szTempName[MAX_PATH];
    ! i3 R+ h0 m& Y% B& S
  76.   *szFileName=0;
    6 F3 L' A& s, j) {$ j
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ' d. U- x3 \7 D2 t( L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) N3 Q0 m# `# c* |
  79.   {5 t/ y1 U) Y: D# q
  80.     strcpy(szFileName,&szTempName[1]);
    $ ~7 ~! Q2 E4 |( e" l; H  l- p0 k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # q% ~; t5 M! Y0 s: d6 `
  82.     {0 @, t7 Z3 z- W5 ]- u
  83.       iEOF=fscanf(fp,"%s",szTempName);% Q' M& r) K9 k+ {$ m/ L# S
  84.       strcat(szFileName," ");$ z1 c2 t- d; i  d
  85.       strcat(szFileName,szTempName);7 b" p* x, R" o: E  b( \" q
  86.     }
    3 D: a5 i% [; m; Q% O
  87.     if(strlen(szFileName)>=1)
    0 \' |. V4 }, O; ~" P: ?* [# i
  88.     {
    1 }0 Q: K8 u9 S6 r% m
  89.       szFileName[strlen(szFileName)-1]=0;4 N/ \# h2 B+ H! c  c
  90.     }
    8 @( I6 Z& B! m: T; V
  91.   }; S4 ]! Z* e- D3 v, }: ]' n! D: }
  92.   return szFileName;
    9 }3 K0 `0 R6 A9 v
  93. }0 ~& R- h" E6 b, ]7 R/ N8 T+ y

  94. # }( \; H# I5 j# y( G1 U% `" b# a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! j$ E5 n/ ?/ e/ T* ]
  96. {
    3 H2 r7 A  N/ l% D' {
  97.   FILE *fp;: B# x% p5 M! `6 x* }! n6 O! Y0 H
  98.   char *key=NULL;
    ! c; Q  N! I! k( p" Y
  99.   char version[MAX_PATH];9 _) P5 f, H, j2 ?
  100.   LPUPDATEFILE file,olds;
    : P# w9 `1 g7 Q( l# O# b& P2 K0 M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;& o+ R7 S2 m) @- \

  102. ; A5 X( j. K( X, `- ~4 ?4 a) P
  103.   UpdateList.clear();' j) z9 C' X8 `7 i- A* ^
  104.   UpdateFile.clear();
    8 V! D4 e: R  E
  105.   if(GetFileAttributes(filename)==-1) return false;
    , \  D. ^& C' z- G5 ?
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 ]! K3 `5 l+ _' G3 r. m0 n. D/ f& o
  107.   fscanf(fp,"%s",version);- |  w, p* o8 q" c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }8 E/ ]4 s' D0 o( E# x6 a9 E- K
  109.   while(fscanf(fp,"%s",version)!=EOF)7 g5 B& k7 k! r. U1 O
  110.   {6 j/ t7 g6 @1 Z( k
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! F! t# q' J, o: p; R
  112.     fscanf(fp,"%s",file->path);3 N! h3 @; }7 q, T3 i
  113.     ReadFileNames(fp,file->file);1 y; Z! Q# l6 e
  114.     strcpy(file->full,".");
    7 E6 j! c9 d( K1 n
  115.     strcat(file->full,file->path);
    7 E1 ]2 C* {: i" R: F* Y+ }
  116.     strcat(file->full,file->file);
    % f" r! ^: @2 }- h2 J. p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' f1 P  I4 O: j7 F, N2 ]- V( p3 d
  118.     {
    1 e. c" g) a' Y( J0 c
  119.       file->vers=(float)atof(version);
    9 v. v, p, Z% {3 l2 {
  120.       UpdateList.push_back(file->full);
    4 ~6 D; H2 S6 F) P& F+ L
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' r6 \, `: w) Y- P
  122.     }
    ; \" v2 c$ b4 {) J
  123.     else
    ! D) R  c/ n9 T0 N
  124.     {
    : P% p* @* p* J* B! Q- h& d( `
  125.       olds=(*p).second;
    $ |) j' C* d" a- |3 J
  126.       if(olds->vers<(float)atof(version))7 ]6 s6 a) O7 a( d! f! `) H1 p) b
  127.       {9 `1 j- F7 C" k
  128.         olds->vers=(float)atof(version);4 @* T  I4 L( ^& d( o& f3 @
  129.       }; F! f0 [+ R% M( a- M  x
  130.       free(file);$ ~) o$ F2 _3 y
  131.     }  b9 M# C; b3 p/ W! B: F  y
  132.   }
    & z1 s  I/ z1 u) Z' U9 w' a
  133.   fclose(fp);
    1 P+ @( W9 V3 u& _& Z
  134.   return true;2 B  T) O7 {  @4 Q0 Z  k
  135. }8 |; O1 h( w/ H/ R# W

  136. # c" i# {% N: |4 P  f" s+ V
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    # K% W+ n& P% C& |
  138. {* r' {) P* O4 r  ^& {& P3 Y0 ^
  139.   TCHAR  szFull[MAX_PATH];
    " p; L5 n2 l: L9 i
  140.   TCHAR *token,*inter;
    2 _* U! H7 R4 q* X3 q
  141.   *szPath=0;
    # t  P. {7 J0 c1 `5 p  ~% p4 q
  142.   strcpy(szFull,szFullPath);% y, H% t, T1 f/ L+ V
  143.   token=strtok(szFull,"\\/");
    " x+ c; D& b2 S6 Y' E* ], J
  144.   inter=token;
    1 Q4 w% o3 U" L% m- {
  145.   while(token=strtok(NULL,"\\/"))( p1 x4 z# S3 b1 i  B
  146.   {1 l' s1 e5 U2 s# z) \) R
  147.     strcat(szPath,inter);
    3 E# _7 x: H, z, V) G, P, P
  148.     strcat(szPath,"\");
    $ m8 B9 i  R( f. p5 G
  149.     inter=token;  o6 N! h' j7 E8 [5 U) M4 J) O
  150.   }" i) i% R: D: n) K! t1 Z2 e+ x1 ]
  151.   return strlen(szPath);0 X4 X2 N7 a* f/ \
  152. }! g# }, ^! t1 h, G4 z2 u0 b
  153. - v! c5 p: d( K
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ' f4 G5 n8 \% V$ E
  155. {
    3 q  a2 b: X1 g+ j0 |
  156.   DWORD attrib=GetFileAttributes(Target);
      m* P, R1 V/ B- T; C2 ]
  157.   if(attrib!=-1)/ \: ~& x4 I6 {4 N
  158.   {
    + ^6 o' i- s$ F4 `: J
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    - Z& |1 h+ L2 r3 L
  160.     {
    ( x) m+ w8 }6 |5 o) C1 k
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 A. j  T& U3 @
  162.       SetFileAttributes(Target,attrib);" W' ~2 {5 K- n4 V
  163.     }
    / o. A7 N$ I7 N- Z
  164.   }
    % L7 V1 v' m! Q1 F
  165.   CopyFile(Source,Target,Erase);, |3 m; |  t; W$ u5 E
  166. }$ h5 D; c( ~& u6 G0 y
  167. 9 R  [. r5 m* ~( o2 N' P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & O( j( v' x" b! i0 F6 P
  169. {
    ! M6 l5 g/ k, \! ?; L
  170.      FILE *fp;
    * q5 ?1 _3 T8 C" R
  171.      char  szBuffer[8192];
    / F' N" M/ z  m  Q3 z  P
  172.   va_list  argptr;
    6 ~* P- c1 C/ r7 @7 i" I: x

  173. 7 p7 Q( k3 i4 E5 x. W
  174.         va_start(argptr,message);/ f9 f0 S/ D; k. M5 w, N7 }
  175.         vsprintf(szBuffer,message,argptr);
    3 Q5 g# ?5 f. Y. F
  176.         va_end(argptr);
    * U- O+ m& l$ C# I
  177.   fp=fopen(FileName,"a");
    , Z8 _7 s7 P6 n1 t0 y  j
  178.   if(fp). a' u2 L2 A: `
  179.   {/ g/ a: X$ M5 ~; W" V/ j9 F
  180.     fprintf(fp,szBuffer);
    9 y) A0 j  D+ ]1 H, Q$ {4 k; F
  181.     fclose(fp);! W$ X) J9 _8 W& A- ]
  182.           _flushall();
    - }6 B# V0 p& A5 u; Q' c/ f. a
  183.   }6 b9 z: s( |0 }( J! d' `
  184. }4 k/ u5 i8 _% N6 p0 m. \: C0 N) b
  185. # @, L& @% X7 j! W
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ n' t, q+ H+ O1 Z9 N3 |
  187. {
    1 E; p4 Y! L% S4 }2 g* ~
  188.      FILE *fp;5 M; {3 ~0 n8 M5 C0 [. F! A! {( h
  189.     DWORD  attrib;
    ( O1 ?. i% R& m* k( B& P& F* P
  190.   attrib=GetFileAttributes(FileName);3 T6 L! z8 E: o! ?2 F4 ?! ?0 A3 I; s
  191.   if(attrib!=-1)
    # q+ h1 Z" \1 p
  192.   {% S, r& a: N( M" t- d$ j8 a
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);1 V7 r- M' h, W) N. Q) S# \- F3 }
  194.     if(!SetFileAttributes(FileName,attrib))/ g, F" T, h% ~
  195.     {
    4 F* R* {- S. |
  196.       return FALSE;
    & d+ M" j: b; l% {/ o6 W# ]
  197.     }
    : G; z2 d" ~4 @' D) k/ c
  198.   }- }- f8 _9 W  h! ~8 ?
  199.   fp=fopen(FileName,"wb");/ P& R- w, a' O" J4 E
  200.   if(fp)
    6 |  s9 {1 ?0 J" a  [0 W. h
  201.   {0 @' m. P6 S) l
  202.     fclose(fp);
    $ G/ z& _, K' \; d3 H4 Z2 {
  203.   }. }# N. z+ o% B$ F. l& p
  204.   return TRUE;
    7 W) r" k6 P: l& h) H% v
  205. }6 }3 M6 l- N- j0 M0 y
  206. 1 U% F; y5 ^7 g
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 o7 n4 a! p" V
  208. {
    1 S! g  Y7 u/ @4 i  |1 {" w5 d/ Q
  209.   char filename[MAX_PATH];0 e! T5 ]$ \. S, ^
  210.   LPUPDATEFILE file,olds;
    * j  U; ?6 C. q+ S$ h) Y
  211.   std::map<int,CString>::iterator i;
    . \8 h! \# |% Z* J& ?* T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ q9 ^- y, n, v1 p0 `. ^2 L
  213.   std::list<CString>::iterator l;
    & X5 b1 F- o+ }
  214. : A0 n/ u1 S7 G# m6 y, H6 u
  215.   if(bFirstUpdate)5 \1 x4 o0 X% F# b+ g; X
  216.   {
    ; Y, V6 Z  {! R4 }
  217.     dwCurrFile=0;
    3 n* P' l! Q' d
  218.     bFirstUpdate=FALSE;
    2 R; r# _6 z8 c+ ~- @8 z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())! |. v5 h! T8 {2 ~4 B
  220.     {! t0 ~4 d" D9 V! O4 @. {) q
  221.       dwTotalFiles=UpdateLocal.size();
    % x) P3 K( c" h! r
  222.       dwDownLoaded=0;
    5 O2 g9 z0 G3 M" J% P9 ]) |7 T, v
  223.       bSilentStep=FALSE;
    / t3 x9 O7 f% X6 Z" J
  224.       bCompressed=TRUE;: O0 m! T0 n6 V# ?" d1 H8 l
  225.       strExtLocal.Empty();
    ! `3 |+ Z+ \# a9 p' z3 L5 V
  226.       strFullName=(*i).second;
    # ?- G9 R8 p/ L+ w
  227.       dwProgramState=AP_CONNECT;2 b4 C. j) U; h5 d7 n
  228.       return TRUE;
    $ Q( r* o* L% ?$ T
  229.     }
    / z" I8 l. U3 _
  230.   }
    % f1 U# H+ t9 J; T+ d$ o' E) a
  231.   else if(bRestartUpdater==FALSE)
    " ^6 N% x* a+ R$ I' {
  232.   {9 B- }& e! `% I; Y6 m0 a. ]
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' h& m4 a6 d$ N4 ]1 c& E! {+ l4 U8 [
  234.     {
    4 ]9 D6 v3 |% }: C* ?
  235.       file=(*p).second;
    % }3 M4 v# z! C* Y1 a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + E2 }' Z9 o, i- F1 s/ E
  237.       {
    / p" L. \3 a) y' m( C. {9 Q
  238.         olds=(*p).second;
    ; {& J' {5 i8 e# r4 }% I
  239.         olds->vers=file->vers;
    / r. c: U0 o- k' q& I! W8 \0 v
  240.       }9 O; T3 D& v/ z6 B- K2 ]" K: n
  241.       else
      O, c  V( I0 A$ i
  242.       {
    5 T/ k/ R# v! A4 a& c# {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* i5 A& [# H' d& F" a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . _- {" R- j; q. N, R7 [
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 }8 h: n6 ?+ ~6 Z4 D8 v
  246.       }
    * F& Q1 s8 j, U2 a5 G/ m
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    7 `" S+ l: ]4 B0 T$ K
  248.       sprintf(filename,"(%s)",file->file);8 g! t8 W% l$ h6 d
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" r- h$ `8 L  u7 A# y' y! s; _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }. U; j, k+ B6 q8 N2 N- X1 a$ g% M/ Q
  251.     }1 i0 ]! e8 `8 F
  252.     dwCurrFile++;$ u3 ~" v5 @3 r# q' `4 h6 T
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 Z1 ~7 o" _( D& u1 T
  254.     {/ O/ }9 Z8 H9 B% ]9 X
  255.       bSilentStep=FALSE;
    1 P3 c0 j3 \" c4 u7 b6 Z9 t7 U
  256.       bCompressed=TRUE;
    4 Q. j/ S) x8 `( e
  257.       strExtLocal.Empty();
    ; _) [9 D* _8 E
  258.       strFullName=(*i).second;8 H9 }* H( _! p
  259.       dwProgramState=AP_CONNECT;
    ; m5 C# M; n2 \: ?* D1 H) W2 G( \# l$ O
  260.       return TRUE;
    " c  z# r( l1 W# x+ J5 C
  261.     }' K( ]. H# G# h
  262.     if(!bRestartUpdater)
    9 s1 {5 [* \0 l2 x8 x! i
  263.     {
    & m3 _& z  C4 o  ]
  264.       int iCurrSize,iFileSize;
    ( U( |# j6 b# q
  265.       iCurrSize=0;
    - F: c$ A" |" g: [' ]; h% z
  266.       iFileSize=UpdateList2.size();
    8 e% O" I2 p6 L7 |+ ~+ _+ o
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* X+ |. E2 Q9 |
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");3 H8 B( ~; e, b
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 O5 f8 N/ y( ^5 {: q8 P
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 N! w. I5 J5 F, E
  271.       Fclearf(".\\update.dat");4 r6 q* Q; @# z
  272.       Fprintf(".\\update.dat","Bloodyf\n");0 Z1 ~' E  k" x3 f. d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)3 @, _5 i2 w4 c! j4 @1 ^2 q2 s
  274.       {0 J7 s- x9 [, \/ k  g7 k, u
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ j& i5 U3 y4 n5 F
  276.         {3 P9 C  P9 m0 Q" E7 X: a# s
  277.           file=(*p).second;
    - |' W4 O* F! w! D$ u
  278.           sprintf(filename,"(%s)",file->file);, ^/ m8 Y: ^% C) f
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  E( Z; s% x5 @+ F
  280.           iCurrSize++;' n8 v7 X# t2 i! K3 m
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));, X+ i8 r. l& `, I" V& m
  282.         }
    $ x& u- N' g0 `, l
  283.       }5 L. G5 f+ _- S/ ?7 W& }# }$ ?4 k
  284.       unlink(".\\update.txt");
    # l9 B4 Y8 _9 E2 U
  285.       unlink(".\\update.tmp");3 ]; S0 n$ R* G6 u
  286.       Fclearf(".\\checkversion.dat");
    ' d' D6 {* c# |8 q' K) D1 o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- g( r4 a" Q4 D) y# C+ J* b# q
  288.       if(UpdateLocal.size())
    + ^7 j; `  ^/ J$ C8 q# b
  289.       {, E0 K7 |, e4 E/ `8 d7 D
  290.         UpdateLocal.clear();3 I! U  \' F2 }4 u6 v9 \
  291.       }
    % r. r" X9 O( }3 G
  292.       if(UpdateFile3.size())
    ; a3 w! ~) x0 ]3 @* r
  293.       {; c* w; D/ S$ ]. K5 T. e
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 }0 J, a% W5 H& Q
  295.         {
    + Y  P. C; K2 a4 d, \
  296.           file=(*p).second;
    ; F4 y* ^) r$ v% U# b* a- p% l
  297.           free(file);
    3 @6 L- t8 T! {6 O4 o
  298.         }
    . x/ a; q/ {, F8 u+ g3 A; {
  299.         UpdateFile3.clear();5 Q; T3 i' E- m
  300.         UpdateList3.clear();
    4 u& R" L9 @6 |: S
  301.       }
    # y1 v1 f1 Z1 u
  302.       if(UpdateFile2.size())7 d- v' k) [1 L8 }. B6 L
  303.       {  g+ ?7 j; e3 I% I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( a+ ^" l7 P1 o7 N1 u* z# p* Q
  305.         {5 v7 C" L7 i1 y) l  r2 u; H
  306.           file=(*p).second;1 g) {  H) W! k* ^6 m5 s
  307.           free(file);
    5 Q' }5 w& j' g, F% {
  308.         }3 E% ?( r( p- D
  309.         UpdateFile2.clear();
    ! ^* t! D, i/ |1 O
  310.         UpdateList2.clear();' n" z3 R8 d- v( w3 P$ d
  311.       }
    * Q7 }, j$ p4 q
  312.       if(UpdateFile1.size()); B+ y7 |8 L9 O
  313.       {
    0 b% e0 ~9 p  T# g! Q- p0 a
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 g' w2 h7 f0 d" c7 l
  315.         {( W) _8 p& W: z6 e
  316.           file=(*p).second;
    , C7 n9 [# _4 b8 z/ w6 l8 J
  317.           free(file);
    2 Q5 K6 M1 f& V9 K; P0 _
  318.         }+ }) T$ e' z, R7 h% m
  319.         UpdateFile1.clear();
    : b: W7 P$ r( |( q) x2 X
  320.         UpdateList1.clear();
    8 [" C8 K5 i+ a" T1 [9 d
  321.       }
    6 ?) y8 n" x* @% |" z) V
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . r' \( n- G6 ~
  323.     }2 p4 I$ D, z8 ]( T
  324.   }1 i) s' ^  [( |$ I' L2 ?
  325.   return FALSE;
    4 k$ |' n! {/ Y  Q9 U
  326. }- T0 s1 M. }2 P( n

  327. 2 G- w) g( z9 Z- L
  328. void CRevAppApp::ClearAll(void)
    / r, V" d" |" M
  329. {5 R7 B; S1 O3 M
  330.   LPUPDATEFILE file;
    % I0 H6 P0 x( c' W2 ^. K: B6 x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 I# y8 V& c0 y3 S
  332. # ~& ^  M2 m' m7 R. r
  333.   if(UpdateLocal.size())% J: X- [5 f& _5 I0 V0 T
  334.   {
    ) _8 `' \4 n# }2 ^* z0 j* E
  335.     UpdateLocal.clear();
    ( J, c, o. i& f  k
  336.   }* A# H* i1 K4 [$ Z- e
  337.   if(UpdateFile3.size())! Y) b& t$ K2 J8 o
  338.   {4 Z6 q6 Y" G* a3 F  m) w) q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
      M& L+ j1 _  L9 R  l  M# U
  340.     {0 w, ]: f) h& ], s
  341.       file=(*p).second;( Z+ Y0 f' Q" |' V+ p
  342.       free(file);. A. C' A  s  n( W9 f
  343.     }4 U. ~$ d- L( K% \
  344.     UpdateFile3.clear();; ~0 {; d' k# [. z2 }
  345.     UpdateList3.clear();
    , K7 _! s% s0 p( n" T$ ?
  346.   }% Q$ e, b3 k2 I/ C
  347.   if(UpdateFile2.size())5 x$ D  z! [, t+ _. ]0 K
  348.   {
    " R, I. ?6 \( q1 D8 l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( U4 r0 |+ v0 K  \% d
  350.     {  a* r6 O. K$ g. j
  351.       file=(*p).second;
    * ]( R- @- z8 s4 y  [* l+ M( `# |) G
  352.       free(file);( y5 \0 ]( ?3 P# Z! ?; }
  353.     }
    / x* w- N, G; b
  354.     UpdateFile2.clear();- f6 o7 C& p" u) z/ f, l2 v
  355.     UpdateList2.clear();8 N: a/ H- o" R# J
  356.   }6 P5 T5 w* R* P' n, T
  357.   if(UpdateFile1.size())$ V' b, s3 G( d- U1 P
  358.   {
    % ~4 n. @+ B. a. h2 ^; t3 Z; {& F5 W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% |+ [9 N$ x5 s$ i8 j' O* a: a
  360.     {! T: Q# T- y0 M* |) z4 }1 n
  361.       file=(*p).second;6 h: Y. S+ w! a- {/ E1 k
  362.       free(file);
    : U2 a8 ^+ j- J% Z! Y% a* ]
  363.     }* y2 {2 `4 t2 Z0 z0 |  _
  364.     UpdateFile1.clear();
    , q4 }* a+ `6 h) i8 v
  365.     UpdateList1.clear();
    ; X" M% C6 O% f8 F
  366.   }
    % T9 k1 m' t: s' x
  367. }  " M8 x" O) ^1 f+ }! v% _
  368.   
    * O" s) b+ ~+ u* h7 `# l
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 `: X2 O( q; Z
  370. {
    7 @+ I3 n) H; {; ^
  371.   int c;1 H+ q7 U5 v6 l7 E9 H0 s
  372.   LPUPDATEFILE file1,file2;. x' N6 _% c3 r9 C$ L7 `4 q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 c4 F5 H9 p8 j( {
  374.   std::list<CString>::iterator l;6 h1 R4 z, m/ X
  375. 0 d/ x* H1 h  n4 N; t
  376.   UpdateLocal.clear();+ U6 W. C" |! s. |& x+ H  Q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# Z# g/ T- P* u
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    0 V# S% I( l% A! S. _
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 C4 y& T* ]. a+ E
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    8 h8 k1 j; h# m) V9 x
  381.   if(UpdateFile3.size())( U* N# v" r$ p' Q+ c, z0 O( L
  382.   {$ N5 [' W8 N% I+ ~, Z! g# m) U- k4 [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++): H" S* T: X2 Y8 D' Y1 l
  384.     {
      G( u4 m9 p% j/ t, A
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 D' M) ?9 j: u; Y" x: X6 @& ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 Z- m- i7 P4 y% q& Q
  387.       {
    6 }4 q% a5 {" ]/ ?6 W
  388.         file1=(LPUPDATEFILE)(*p).second;5 j5 E  w( K8 o6 n
  389.         file1->vers=file2->vers;
    5 \3 w  b5 _0 s" O5 d4 b% D
  390.       }' [( B; G$ b# ^; Z  H+ s. A$ s
  391.       else
    % V: I9 N; k3 J& G; H* h+ R) m5 _3 @
  392.       {6 O( X, E. l, F. x' D
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / x' o+ c: Y* U
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));$ a" @; ]# m( z7 e( [$ z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 ^! y  k) X. `# ^3 O9 H+ X
  396.       }6 \7 u1 W2 P3 D. A  \, b
  397.     }9 l( M$ ]. K% f- L" d
  398.   }! z4 V# ^4 F/ `* @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)0 a3 _5 @9 `; |/ W9 R% Y
  400.   {% Q1 U, F: \2 z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 ?" F. q* d8 S" z* Q4 G% f
  402.     {) x+ t9 |. P3 r
  403.       file2=(LPUPDATEFILE)(*i).second;2 H# R8 r- x2 M, F% O; {
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' M* J/ e* I0 }8 ~8 K& B4 y: m
  405.       {; W: x" L  Y' H
  406.         file1=(LPUPDATEFILE)(*p).second;
    & m+ ?: ]3 @6 t: W5 g' H. k3 q
  407.         if(file1->vers!=file2->vers)
      H+ |; V  k3 [& X1 G9 R
  408.         {7 m/ s0 T* b9 S  Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * ]) B1 v, k) B' M8 H3 k
  410.           c++;
    ( ^5 B  v+ Q- v, f
  411.         }
    % Q5 ~$ I6 Z4 s. j8 f9 }; u8 K
  412.       }" @! c8 T  H% r3 C
  413.       else  ]% h) E# M" T" x, x9 A
  414.       {
    ! f+ t# g& k% m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 ]% {" y! d  ?; r# H7 V
  416.         c++;# \  x- ^1 @$ i) C; j
  417.       }
    7 b: H2 ~! C6 U
  418.     }
    ' ~4 Z7 `0 k. [; P. Z: Z
  419.   }
    & j- V' {" M3 `$ A3 J0 I; Z1 C2 V
  420.   unlink(".\\DownLoad\\update.txt");
    6 M( y, }$ B. h
  421.   if(UpdateLocal.size()) return TRUE;
    , p' q% i. X) m! F
  422.   else                   return FALSE;
    % P) P1 d) E/ ^
  423. }6 {8 z9 M* C" j5 p* B7 K* }
  424. 3 c/ P% o3 E( q
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", ^7 t1 A& u* @; o# p. q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% ?2 _3 O0 f9 }. d* @1 h) Y

  427. 8 Z5 Z9 J8 X; b7 X: [; M

  428. ( A9 S4 ~; z6 ~7 ~* m8 ]. H

  429. 4 k# H' r1 |  K2 d3 h* m% ]! u
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    6 b7 |& E8 \2 o: L% u
  431. {+ e+ o) J0 z9 Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 g' ]; d4 p: L  f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( d  F& ?  C1 Y
  434.   {
    5 r  G' v2 Z1 z! V% x
  435.     char szLanguage[50];# p4 @9 `/ C9 j
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; f$ `1 \# h8 b4 ^8 y' C, I
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * y$ d( D7 ?2 u3 N7 N" d- F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 p. k* y0 x, ~
  439.     else                                   m_iLanguage=ENGLISH;
    : G. x5 ?/ O8 P& U% g
  440.     char szRegister[100];/ f- |2 |7 D! H/ a- O! r
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: S/ @+ ~7 \1 ^9 E  d
  442.     strRegsName=szRegister;# u; x) l* A  N' F* c& ?, D. O
  443.     char szPatchURL[100];( c* V5 j7 l7 l$ ]
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    3 T& B7 K1 B( e& |: P9 j
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% S9 U; w# u7 M* g
  446.   }
    ; p: @5 t- ]( F+ i: _4 X
  447.   else3 ^& e2 w% }# L
  448.   {9 I8 n. g% l% a% J: {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      U; N' m7 Z6 B; }  ]( R
  450.     strRegsName=DEFAULT_REG_URL;
    / g# K+ @& q! P7 ]0 M
  451.   }: c: U: S7 f& }7 x; E4 a
  452.   if(GetFileAttributes("hosts.ini")!=-1)6 x* G* F7 d' o, n6 R5 }3 ^$ C6 Q
  453.   {  b3 G) u3 G& j+ h/ @# w8 r8 d
  454.     char szIP[50];5 o8 t; }; K* |
  455.     char szDIR[300];
    7 M; i, Y. W, x) }& Q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  t' `% L& i9 B3 [
  457.     {
      [5 V- F: V, ?) ~! l! C/ o
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ' v) D/ k) [5 l/ [+ s# {
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 ~8 h8 |. j7 A5 _
  460.       strHostName=szIP;
    ' I& e, L% b. D9 C/ G
  461.       strHostPath.Format("/%s",szDIR);4 A5 a- c$ b# t% y( h: y
  462.     }6 s6 q/ R) B9 P5 c6 o4 Q1 e
  463.     else1 ]  d7 B& C$ A  S+ {" l6 \5 q
  464.     {( {6 N8 H6 ^* X4 l3 t, E
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). z) L$ p4 w/ B$ R) |* ^
  466.       {! f7 A) R: Q+ Z" j
  467.         char szLanguage[50];" \* k6 }" ^/ Q% K5 ~7 }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      g& T3 b, P$ C! E5 B" `9 T1 q- c
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ {) J' y6 Y9 e" n# T
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * Y# G. k; W# y2 a
  471.         else                                   m_iLanguage=ENGLISH;
    * \3 c; h! K4 W: S( h1 Z0 v0 P) C
  472.         char szRegister[100];
    * S* ^* l9 z' A2 B, ]# |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- b2 h. x+ q. ?
  474.         strRegsName=szRegister;6 r$ K# |3 s* D, y! W# s8 o1 s# R
  475.         char szPatchURL[100];/ h8 x7 G6 F) o' H+ c7 [# q
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 W6 T3 ~; K% p, _0 I: F& D$ }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ( G+ H# t* `2 {2 D$ T+ F$ j
  478.       }/ @+ A4 ^' K$ U$ l& C- W9 a$ }
  479.       else
    $ k: X4 U4 D' a8 g
  480.       {
    3 _' N+ Y! ^+ ]0 U% K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . A/ i4 l* d# d+ G
  482.         strRegsName=DEFAULT_REG_URL;1 M+ l5 w, R5 T9 U4 B' L9 ]. J7 S8 A
  483.       }
    ; @, c% }+ f- Y5 B9 X
  484.     }; U; Y* C. w. r2 _! f0 z3 w
  485.   }# H! G  I$ M: K0 K$ B
  486.   return true;+ K+ [( y" I/ k6 Q' B: p
  487. }
    % m$ N5 i, x( b( C2 `

  488. . ^( Q% q+ Z0 `& O, W
  489. #include ".\ZLib\unzip.h"
    , E* C1 a1 {. y7 X) p% H& b# R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 B7 t% T8 \8 D/ f6 T% d
  491. /////////////////////////////////////////////////////////////////////////////* f% _( g: t: U4 V) _6 ^4 B" W7 u2 }/ D
  492. // CRevAppApp initialization
    % `8 m, k# }. g
  493. : x( N9 d$ j& d. ]$ m4 v* n* p
  494. BOOL CRevAppApp::InitInstance()3 h# l: ^. _8 x2 O) h
  495. {0 P* j# s1 M" D4 u
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& n( q3 T) t9 ]! ~

  497. / G) b( A/ ?$ P$ |3 G: g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! \% V! I* |& A2 `# o9 P% P
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))$ X  D4 \6 Y" q) O: f! u2 H
  500.   {
    " R+ m+ H2 C9 C+ C0 M
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");2 Z: P. B4 t( a: V  {+ `
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    & i) J' z5 k9 Z. k6 J2 E- t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# Z. x/ @0 a. C- T7 ^
  504.     {& t* ?6 G( X, ^! F/ H. Q5 y; O
  505.       strcpy(szPath,szPathTarget);
    / |. q2 q0 {# W$ a9 s4 I
  506.       SetCurrentDirectory(szPath);
    2 N2 M/ n) e  E+ S$ y& }
  507.     }/ H; Q& |% `2 a
  508.   }
    6 `, B9 o- p: U8 {
  509. #ifdef _DEBUG
    ; u% y0 s- @9 X& C) K' x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 e; `1 h" {7 C; N% h
  511. #else
    9 c  k) X6 e2 k' u$ x% f: {- j9 ]
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 P' C: A+ ?1 D6 \, Z
  513. #endif4 C( t$ A) f, S
  514.   {
    . F; C2 M5 z5 L* h
  515.     char tempFileName[MAX_PATH];
    ; i* N4 k3 N9 N% j# J( P
  516.     strcpy(tempFileName,szPathSource);
    ' ~" j  B: d& I' M7 t
  517.     tempFileName[strlen(szPathSource)-12]=0;( J+ {7 k/ Z+ Q7 D/ ~. s4 ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    7 Q' O5 Z& F8 ?/ J6 S# m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    " V' j2 m+ ?* ]5 w* C
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);7 ~- C. Q2 j& v/ @
  521.     return TRUE;% Y# \$ w9 {7 d( X) C- R
  522.   }
    " k# t6 ~# N% {" }5 w& G: m
  523.   // Nuke 0118: Delete run.exe
    . {; m6 d( D* {. v  T
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );1 g  d0 a! K( p: L  N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) D6 \, |3 y0 {* `  I
  526.   if(!ReadCfgFile("Config.ini"))' P% K- G2 f6 z8 j* c0 X
  527.   {6 P! y& N. m3 x2 g, @
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 Z8 B& A0 i9 k- O8 y
  529.     return TRUE;; a+ Q* W& L' ^- m0 c, i0 W
  530.   }( b4 ~3 n  ~; ?% f) m
  531.   HANDLE mutex;
    ; H/ m( f( v( W5 Q$ ?2 ^
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ ]7 C: i) I; G5 v4 w, o  _4 X% ~
  533.   {
    $ q- `1 q' ^+ F5 ]
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 C8 I9 t. w0 V  X1 ~: I+ w
  535.     {: `5 M1 A# c8 i0 w
  536.       CloseHandle(mutex);6 O8 U  s# q- A) T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* |+ i3 h8 N) g7 m8 B
  538.       return TRUE;
    " u  |, Y  [# ]; m' g$ @0 W
  539.     }
    : F" g5 ?2 r! m: ~0 a+ r3 p3 F
  540.   }  
    / n8 |. R0 k0 M. c0 l( t3 q2 Y+ }
  541.   CloseHandle(mutex);
    ( l  X- C  L8 I$ ~% m

  542. ' i7 [/ ~4 g2 ]2 l! b
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ @! Y. H" U) o! D+ |9 M  k$ X. J8 O
  544. ( b/ m0 `! s" N1 N
  545.         AfxEnableControlContainer();
    3 S, t& F2 k9 M" B

  546. ; K2 i1 Y1 H% H: r# E# K, ?2 @
  547.   bCanUpdate=FALSE;+ u0 c% g- q2 [9 b, s
  548.   dwStartUpSteps=1;
    $ }% v" U9 Q- b2 q+ ~' @% |( R: r
  549.   dwProgramState=AP_NOTHING;* z- p, q+ S% L1 u: m) E7 g

  550. * Q7 M$ t+ ?1 K4 r! Y# `" V6 q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ; v! `- c7 F* g3 r% Q1 d7 A" d
  552. 7 _; m" N! W  T
  553.         // Standard initialization
    4 c6 e6 w2 e6 k7 |  C  C
  554.         // If you are not using these features and wish to reduce the size3 J! D7 @, O4 ]1 j
  555.         //  of your final executable, you should remove from the following& j- }" W5 _6 h8 Q: g/ o
  556.         //  the specific initialization routines you do not need.
    & b9 A7 J; S9 M/ m
  557. : V2 c# T' ~4 z$ o8 }
  558. #ifdef _AFXDLL( g% J( w) r# X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL) \- E  b" u* \  m; {
  560. #else
    ) Z8 m$ n7 S( `, I" Z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    : _' h2 ~; ]2 |3 S5 X. r
  562. #endif" I, x. z$ C, J6 x

  563. 4 T1 }7 z, E( z" G, D8 A1 i
  564.   dlg=new CRevAppDlg;% a6 k4 y& W5 l% r0 S  b! ^
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( N% n0 {+ _% F4 P7 T9 T1 s
  566.   dlg->ShowWindow(SW_SHOWNORMAL);/ b& v: ~8 R& b4 B# |+ C' Y% v
  567.   m_pMainWnd=dlg;  {' t- [: @9 k1 L/ ^3 r# e6 i

  568. 5 h" U( r( n) E( }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);: N7 K+ ?' m6 U* l

  570. ! z- y$ O( V' P7 V3 {
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 d2 y) Y* L0 M2 _
  572. //  ULONG_PTR gdiplusToken;" O) r+ ]( M' ^1 c
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 r0 l& ]+ _% B# O/ D

  574. / P  g$ D! P( ?! w9 d! e
  575. //        CRevAppDlg dlg;2 T/ q. _, ]* o5 D( a& j1 U' X
  576. //        int nResponse = dlg.DoModal();9 O' z" T4 f. ]+ I! z. w! W- Z
  577. //        if (nResponse == IDOK)+ {; p3 [+ J# j/ ?1 O
  578. //        {) H' e% z& o  j* f$ n
  579. //                // TODO: Place code here to handle when the dialog is
    + Q  s. ~9 v4 f" V+ a5 h, }
  580. //                //  dismissed with OK5 |( q2 v% F5 d. c" P3 K0 ?
  581. //        }
    ( L- I) O# l& {3 f
  582. //        else if (nResponse == IDCANCEL)
      K7 W/ U" Z  G
  583. //        {
    0 _# a! \! m9 ]$ w+ O0 Y7 a
  584. //                // TODO: Place code here to handle when the dialog is+ f, J' o2 ^$ O+ d) }# R/ o
  585. //                //  dismissed with Cancel
    7 K0 e+ U' ^) ], b! m2 X
  586. //        }
      v% r. U5 D* g+ ]' ~9 j) K

  587. 9 K3 g1 R  x0 f; c
  588.         // Since the dialog has been closed, return FALSE so that we exit the  P: w, {, w8 h
  589.         //  application, rather than start the application's message pump.
    ; L8 _9 T/ X) X. I$ R& i
  590.         return TRUE;
    3 b/ J6 n1 N6 z' Z
  591. }& B1 R# g8 K& ]) G
  592. , s* z: n0 C9 f+ `8 U9 c3 d
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 E5 ]! v( i, Q. o# `1 u0 y
  594. {/ w* ^& m2 m! T; j
  595.   int i;5 p/ f9 G6 @. T" Q! W
  596.   char *szRet;& D; U& @% M6 t( y

  597. + |# W+ b, E& r6 l' t  Z' `
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 K# T( R! S  P. _+ x
  599.   if(sztoken)' y9 @/ ]: m  j0 ~* g3 N
  600.   {: j' f  R, P# Y2 m
  601.     szRet=&sztoken[itoken];/ l+ Z" a) t$ c7 j
  602.     while(sztoken[itoken])
    , O( w6 G# L4 y/ m' L; L0 x
  603.     {
    , h! |1 O- X* W
  604.       for(i=0;i<(int)strlen(token);i++)+ g/ x* D, b" z( h6 U; a/ P
  605.       {
    ' ^$ m! M/ l& U. d, J& B0 M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 H' f. B3 K: j. W' ?4 ]
  607.         {
    ' L4 W7 ]) o$ B" W% }; T
  608.           sztoken[itoken++]=0;8 H$ q4 `! J2 p
  609.           sztoken[itoken++]=0;$ L2 A6 S, u( L" |2 X
  610.           return szRet;
    6 q9 B$ X4 \. G
  611.         }
    % j: T0 N; l: i5 A  L1 h
  612.       }
    ( U$ p- h, N. P6 z$ u- q
  613.       itoken++;
    5 a1 i& r# B. q% F. i" K$ j" U
  614.     }
    0 }5 ?1 T8 ~7 V/ i; L, ]
  615.   }
    5 t' `& v% I# s1 _) U& a
  616.   return NULL;
    * p2 C: `% v: T$ }& O
  617. }
    - z, t* m: l7 Q

  618. ' @/ J2 ~( N, ~: Q* F
  619. void ProcessProc(long Total,long Current)2 a" t6 g) u' E3 G
  620. {5 @$ M' @& l' z6 N# k
  621.         MSG msg;
    ' x, F* ?, J( z& r# M
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 P4 Q. Q/ I% [$ H3 t- Z; A
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));2 C* P# B* D0 W$ z! a9 e# i: @' E
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ v8 n$ _7 z+ W. ?+ G
  625.         {7 q- m. M. P0 y, U
  626.                 if(!GetMessage(&msg,NULL,0,0))
    6 R9 w+ `; _. k( d6 J
  627.                 {
    7 P2 O$ G" l" `6 x1 Y, h
  628.                         return;
    # [3 h+ N3 y/ x, P1 f4 b
  629.                 }6 u2 \# ?* I$ F8 v& J9 j) Y
  630.                 TranslateMessage(&msg);
    4 f. E! x) j# }
  631.                 DispatchMessage(&msg);
    ( @- w$ a3 j# F, w
  632.         }       
      p7 G) H+ n2 J1 i" r3 \$ Z3 p6 [  h0 l
  633. }
    7 B) n& R. z' M( I" M

  634. 0 n2 d' T6 p( O0 S0 f/ i
  635. BOOL bFirstChar=TRUE;
    ! ]3 U! t- h9 R0 B

  636. , k. ~% b: D* [" `  b0 J" I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    % v6 |5 g" F7 _* e  ~! n: ^6 E
  638. {' k* l5 G* f( y2 b2 X# A, R) ^
  639.         // TODO: Add your specialized code here and/or call the base class
    + b2 l. Q4 }  L5 b
  640.   switch(dwProgramState)
    - _& |" ?" O# Z1 G! k: x( S
  641.   {
    7 g# \/ k9 @: P7 z
  642.   case AP_NOTHING:
    " s5 z6 V/ @3 E  N
  643.     switch(dwStartUpSteps)
    5 _( P0 h6 E4 A. l& ?8 @
  644.     {3 e# X! C; p: V3 h+ j8 g) _
  645.     case 1:8 d; G2 o2 P1 Q! j
  646.       {$ z3 z. D( S3 {% x. Y0 ^3 P
  647.         int i;
    # R2 N8 Q% E8 _4 q4 A
  648.         CDC *pCDC=dlg->GetDC();
    0 v7 J9 A7 }1 M1 G5 K
  649.         HDC hdcwnd=pCDC->m_hDC;1 U$ B7 Y: A6 u$ G, `5 d8 V
  650. //        Graphics graphics(hdcwnd);' y. s, g( {! E2 q! v$ e+ ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
      O* E) N" ?, r$ d7 |' c2 D( o
  652. //        INT iWidth=bitmap.GetWidth();
    + W: _9 B, q4 R, H
  653. //        INT iHeight=bitmap.GetHeight();
    1 ^4 g$ x1 P+ j) A1 n; M
  654. //        Color color,colorTemp;
      V. z& n$ w' \2 M4 Y3 G$ ?
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), J1 S: ?1 d4 E- `$ m0 a6 J* O% h
  656. //        {
    : z5 v9 H( O7 y! U9 p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& Q" I. n! B+ |9 q$ s
  658. //          {
      x- y! u" d1 ]4 E9 u$ t- j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);2 I, V5 L/ c* F. V
  660. //            colorTemp.SetValue(color.MakeARGB(# V, V3 A7 @& \8 Y  G0 V0 E
  661. //              (BYTE)(255*iColumn/iWidth),
    % q) Z1 h& U9 n) z; ^
  662. //              color.GetRed(),
    5 s- {7 x8 d8 l: Y
  663. //              color.GetGreen(),
    & @3 ]  V/ k# b/ G# f6 y
  664. //              color.GetBlue()));! `/ a. ?6 m- t9 A5 G: k
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);2 ?- a1 [, F% q1 _
  666. //          }8 z' x0 ^  W% C8 \! j, i
  667. //        }
    / G! F9 e2 }( v# U, U
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    % S, S; s1 d' C1 _6 E( b
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) w. \7 E. b7 K4 Q* l6 U3 n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");' z2 K) d% ~+ o  p# i& ~) c6 {- {
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + F# ?% [* m- b1 ?0 W, e
  672.         for(i=0;i<240;i+=8)
    8 t  w. o* [; w5 l
  673.         {5 ~' h8 c6 A$ Z4 j# n$ a
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; e: o. m1 l4 C6 `5 f
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 F! A) w& i0 B0 ^' _% K' v* w. M- u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % w. V3 {4 v& n. l( N
  677.           Sleep(33);; v9 Q; {: |0 X+ Z2 Q* u6 }
  678.         }4 ^) t. q5 F  u9 g- s7 V" G
  679.         Sleep(1000);& ]8 Q- B( l' W
  680.         for(i=240;i>0;i-=8)9 x/ n4 Y! v0 ?3 t. U. O: L2 `
  681.         {/ @7 |1 ?! ^( B$ \- v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & O! U" u) F' c5 D9 L9 ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! Z* W: j% N  G0 h* Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ |3 `. X1 |7 t: P; {: O9 K
  685.           Sleep(33);+ D1 T1 f# v& a8 X& h* g
  686.         }
    , [6 j$ |$ n- K) W
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);) K+ s: {9 T/ V# }9 h
  688.         dlg->ReleaseDC(pCDC);
    " O3 G! ~% t4 @+ _
  689.         DeleteDC(hdctar);
    - @7 u  O/ X, D! q2 }6 B
  690.         DeleteDC(hdcsrc);
    ) D+ W8 H+ ?- K: U, i# A
  691.         DeleteDC(hdcorg);: [/ i% O4 G: S7 M
  692.       }
    4 F% ~$ {1 h  O  D7 t( t: f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 E& ?) D/ W4 A% k- ]! y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    - O: Z5 `5 C6 M3 {5 t2 j0 g0 ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) N) V2 \2 s2 {5 Y+ p; F. M) W- J9 k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 ]+ X! z* \+ N" s' L* p: d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 P, y8 H* Z+ ]2 v3 P
  698.       if(!Dn.Connected())( w. b& u3 ^/ r7 V; J
  699.       {! S7 c1 N: W' A  d% m' P5 C- d- D
  700.         dwTotalFiles=1;
    1 Q- f4 J8 V2 ?. g; J
  701.         dwDownLoaded=0;2 v4 e  w6 z9 }  [+ ^! L
  702.         bSilentStep=TRUE;( a4 s" l3 z: J# ^# e" [/ |
  703.         bCompressed=FALSE;( z6 {9 P7 T( |( ]3 Y3 m" h
  704.         strExtLocal.Empty();
    0 D/ M* a2 E9 Q$ J" S3 I
  705.         strFullName="readme.txt";
    8 l/ {1 ?* j; A# Z" X1 W8 m, l+ X
  706.         dwProgramState=AP_CONNECT;; K# u2 W$ u& z$ g- ?6 C! }
  707.       }
    2 E: G' N5 b" v3 V9 V% V) F0 Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / [1 }" b7 ?$ [2 N4 C# {; G
  709.       dwStartUpSteps=2;
    9 S1 M" d: w5 J% i
  710.       break;
    ' S& a: b  x, d" c1 t2 L
  711.     case 2:# W9 o9 L$ W4 N
  712.       {1 n3 p/ y, s7 A# O
  713.         int iEOF;, {+ I3 F$ z) c  E  X3 g4 ^
  714.         FILE *fp;
    ! P. K8 O' V9 W* z, G
  715.         char szString[512];! j. P4 d, y) s  p. S  h  S1 B7 w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 t1 l9 B( S9 ^5 b: |" [4 C- C3 l- }9 c: O
  717.         if(fp)
    ' l, P" \- B& s3 m
  718.         {
    : `) a8 I: H+ b* f) G+ L
  719.           do0 _8 k8 q1 G6 I3 l
  720.           {. y; B$ Q5 |3 a  t: A( o$ F
  721.             iEOF=fscanf(fp,"%s",szString);
    # `) j- s: u. {! T2 \
  722.             if(strlen(szString)), p: U$ @0 c! F
  723.             {! Z& q, n' r6 B
  724.               if(bFirstChar)
    ; N, I% z+ E( E9 }1 R/ y
  725.               {" }$ `0 M7 n0 r: x5 B1 c
  726.                 bFirstChar=FALSE;/ ]: _% Z9 M2 o4 w
  727.                 bConnectIsBig5=FALSE;/ E0 n5 q. w, t( m) `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - q8 X; e  |  r% M* j8 L
  729.               }( Y5 z5 S$ W7 {1 E* D7 L: G0 o; l* p& ~
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . A1 ]/ J* S$ Y
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    " M$ k' e! c7 T- [# Y+ t% s
  732.               dlg->m_ListText.AddString(szString);6 p! S' \0 g6 O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 O/ I, t9 @5 U" `5 i% c$ w
  734.               *szString=0;
    , M1 o. ^1 C0 l, p- z! I
  735.             }: v2 `) y! s* H+ V, \5 g
  736.           } while(iEOF!=EOF);* [0 @7 E4 v# [
  737.           fclose(fp);9 t+ n9 m; S+ Q$ T/ m+ s
  738.           unlink(".\\DownLoad\\readme.txt");& Q3 F. G$ Q* l4 \/ a" U
  739.           dwStartUpSteps=3;
    . m/ t! j3 _' `0 f9 S0 e
  740.         }
    ) [* l$ Y) j* _1 e& `0 y- q4 u
  741.       }. K9 o1 T. t8 \! B3 G
  742.       break;
    0 u7 @" a/ o" t. i4 y5 X# u# @
  743.     case 3:
    0 f1 \+ L& ?0 @% k+ k2 q
  744.       if(!Dn.Connected())
    6 M5 g) X$ M. q4 B$ R
  745.       {! e( H" d3 d, c% J2 L
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    , o, H1 Z- _9 y1 R
  747.         dwTotalFiles=1;
    4 m) f, s! b$ w
  748.         dwDownLoaded=0;; a8 m0 K) |$ t1 r) ^# t4 |% g* i
  749.         bSilentStep=TRUE;
    $ i" Z/ h: T4 l/ b8 v' G; O; X4 l
  750.         bCompressed=FALSE;
    - A4 ~/ p5 }% Q) Q6 o& A
  751.         strExtLocal.Empty();
    5 p; o; {3 k5 |0 |- Y  q8 r
  752.         strFullName="checkversion.txt";
    3 y$ m" g9 r9 o/ [
  753.         dwProgramState=AP_CONNECT;( z7 x( Y" f! C' o
  754.       }
    7 M! E3 Q) X7 `/ Y8 h- L
  755.       dwStartUpSteps=4;% D# ~; F5 O3 _+ z+ w% _% e- N6 G  _
  756.       break;+ D7 q' }: M9 F/ ~1 n
  757.     case 4:( q+ h9 p/ j! y* I0 ]; L. P! `- G
  758.       {
    3 E& U4 K$ b7 C, r
  759.         FILE *fp;
    * K9 G. d" |9 O
  760.         char szString1[128];
    . e3 D- ~; m4 y
  761.         char szString2[128];  X' w8 B6 ^3 F& e: o/ h( r. W# M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 h7 P2 B( t  I( o8 i
  763.         if(fp)" x$ w( X; V+ z9 X3 ^
  764.         {
    . h  M: w' O* C
  765.           fscanf(fp,"%s",szString1);
    ( R. u. R' F) y* e3 K0 X
  766.           fclose(fp);$ W8 N1 k3 ?5 L
  767.           fCheckVersion=atof(szString1);7 m2 l2 c% ?2 ^
  768.           fp=fopen(".\\checkversion.dat","r");
    % m: F3 G3 m) j; k+ m
  769.           if(fp)! ~. ]3 G- e3 A& @) U  }
  770.           {6 c  [- t2 ~7 w; ^
  771.             fscanf(fp,"%s",szString2);
    / M# @4 ^! e0 ^5 f+ v
  772.             fclose(fp);
    1 G: k1 S& |2 ^# f' c0 O
  773.             if(atof(szString1)!=atof(szString2))
    ) \4 p3 ^9 n+ V# x% n# `% i
  774.             {0 T# n  d/ H4 |' q9 I1 K# d
  775.               if(!Dn.Connected())
    & j; K) c3 l! b; ]$ @4 c: t
  776.               {/ F7 ]1 g4 [# s- a+ v7 c) ^
  777.                 bFirstUpdate=TRUE;
    # E" r; S- Z  G
  778.                 dwTotalFiles=1;) c4 O4 ?, E$ x; M) ?8 K
  779.                 dwDownLoaded=0;; @# c! K( n9 L3 v, N7 X! O
  780.                 bSilentStep=FALSE;
    9 m' H9 S5 C! E9 r3 ?5 h
  781.                 bCompressed=TRUE;
    % |1 E& w4 e/ N0 u
  782.                 strExtLocal=".\\DownLoad\";
    + b) a% {& S0 U7 k
  783.                 strFullName="update.txt";
    / e. t2 g* n: t+ Q& I1 O1 ~
  784.                 dwProgramState=AP_CONNECT;" d9 Q# ~! d+ T7 s: B4 |9 L, T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ D/ M& x; M' p$ E; |6 x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 U, \3 @+ N) e2 Y- {3 Z# F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");3 h6 A/ O/ d- o
  788. 1 ]4 j8 Y* ]# j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ e# I1 O) X" a; E# ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / p6 Y/ c  b6 R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 L; I0 J% o. e+ Q$ |- x% l% j& K- |
  792.                 {
    ' {# M: H8 V+ E! d5 U0 }  b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  B: v8 G. ^7 J- c
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 ]; ^3 R% _9 a- `( D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ [' _4 m1 e: N; e
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: l5 P% Y5 o9 r1 O2 [, ^% q7 a: L
  797. 6 c& X2 {& ]' {  p& P/ Z* J& V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# P. I1 k4 |( }, W& n5 O8 S0 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ D, c& v& q1 U0 J
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / d+ X# u' v4 F
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 S/ g5 }+ l+ n& X9 |1 \
  802.                 }
    ' Y2 c5 [6 x7 w, ]1 T- z' ]
  803.                 dwStartUpSteps=5;
    $ ~, l  Q* l. r9 k, z% q$ H
  804.               }3 @& b& N3 C# x! G
  805.             }  v% U2 z- @! S. R7 O6 E
  806.             else
    1 ^! `* i6 t$ V8 `+ v
  807.             {
    % l0 Y. p" F! ?2 d2 v2 y. b- ~+ Y
  808.               unlink(".\\DownLoad\\checkversion.txt");: V/ P# [3 ^: F
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , [& y& r& ]0 T* \
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- \3 C6 O+ t8 Z# Q$ `3 [
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, c, E4 S- f7 F, g* ^" _$ \5 |. I! z
  812. : U6 g' F; f; _& \
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % O" j$ S! Z- ~4 ^8 t+ B; m
  814.               dwStartUpSteps=99;
    2 A4 P6 n3 h2 F' f8 ~+ J# f
  815.               bFinishUpdated=TRUE;# L) S& m0 E- ]' l/ \0 x" Y
  816.               bCanUpdate=TRUE;
    : C' [  u4 g% G
  817.             }
    5 T. j6 `8 X: \$ E7 \' n
  818.           }
    ' g) V/ e1 [# F  x- ~6 r5 \1 h
  819.           else$ t6 k( G  _. k! Z$ e, \- k3 K( I" U
  820.           {9 l5 i4 _0 F6 R1 H
  821.             if(!Dn.Connected())
    : G- B* ~2 a! Z# m) h4 n# f" h
  822.             {" B- @- h9 ]" K& {# }5 c
  823.               bFirstUpdate=TRUE;
    7 J2 p4 D- K4 s( U0 p; I, z1 |- @$ m
  824.               dwTotalFiles=1;: J% o; K- r% e" E% R6 U
  825.               dwDownLoaded=0;
    ' m9 D7 z& G8 o! {
  826.               bSilentStep=FALSE;' q7 B) h% U1 D7 n' a  h/ t
  827.               bCompressed=TRUE;& y% S0 J( D, e/ N5 o
  828.               strExtLocal=".\\DownLoad\";
    5 E7 d5 E/ @# E9 m. U3 C# D
  829.               strFullName="update.txt";
    3 \3 C+ O0 C4 U
  830.               dwProgramState=AP_CONNECT;
    : ^' |; W3 L9 P: q+ F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * n; `/ _& V; S7 S' L
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    : b; u9 S" Q1 z. Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");% a( G, C) ?  Z- y5 `
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  J# ]" ]8 W  i" a5 C* H4 T
  835.               unlink(".\\DownLoad\\checkversion.txt");
    3 F8 n6 @; U# k' k2 v  n
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ; |; W4 r: B2 U: ^  f5 C
  837.               {; N: Q7 K1 l2 s' ^! ?1 h
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    6 Q7 p: v9 E0 `; F6 k
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 w" {4 A3 b) |' I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # q* x* {' ~4 n- s: B
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 N' Z) W9 \: N
  842.                 ) g9 d, `" U9 {; t' T! C. b% _
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 }) t; `# H* `6 E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - U1 o7 W$ b6 B( z; B( m2 G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' r3 `3 ?# c. u) s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; }4 y. r! U' p8 p9 I! i; i
  847.               }+ c1 @0 B8 G  D- h* M% w1 V
  848.               dwStartUpSteps=5;
    " X( f5 A# f* X( {
  849.             }
    - q; _. k- O0 R+ q
  850.           }% U# b- F& q3 s
  851.         }( U  j! v" G8 s& J; J
  852.         else
    - v) e9 ]& f& O4 h( q) g
  853.         {
    8 {" q! X, ?+ ?
  854.           dwStartUpSteps=3;# [$ d2 V9 d- e+ ^& D8 I
  855.         }
    . w9 I& \( G' }+ }+ J3 ~! q9 M2 h
  856.       }2 |- x$ b; m) W: b( W
  857.       break;! x; j/ N! ?! a+ K" d
  858.     case 5:
    . p. m9 H0 q5 u, K
  859.       {9 Y" Z$ b, F1 N
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- J( ], T" t0 g8 S
  861.         {( ?1 j  D0 [) u4 t6 G3 ^3 j' E
  862.           int opt_overwrite=1;
    1 q; p; k. q, ^0 a3 J: C2 f
  863.           int opt_do_extract_withoutpath=0;9 z! S/ r5 s- k! m4 `6 G- K) ]2 d# V
  864.           unzFile uf=NULL;
    ' I7 Q; v- r7 D. D8 ^' R& A. G1 I
  865. 5 K) A. S  R5 l2 s" [. ]
  866.           uf=unzOpen("Wsa.zip");
    $ I3 _- B1 {6 ]* C* o! X
  867.           if(uf)4 c5 H- p4 M$ t7 Q1 ^
  868.           {7 H, _# S& Y' f  M: w/ e
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);4 p5 H% {6 u( O, i+ `
  870.             unzClose(uf);! q9 {6 }; Q, c  A1 \8 ^7 d" ~1 z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    5 Y& n( Z% }* r0 r' j
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 F: p4 Z1 z( l
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    7 l4 g: T% \& f4 ^, p: }; w; L
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 B# f) r- ?* i. i  k
  875.           }% m+ p) r5 s4 D4 C  F. J
  876.           DeleteFile("Wsa.zip" );# q. y4 Z5 k  _: ^# H0 T, o) g/ {/ H
  877.         }& N+ {; u" M' t. z: v
  878. ' P8 y: b% ~4 T$ Q" ]$ _
  879.         if(CheckLocalVersion())
    : h  ]% n. S( |4 a2 x
  880.         {
    - F/ w% e, R  a, @/ U
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");2 S$ o' [4 r+ U$ a$ a/ ~7 }+ s2 W
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");% O, c% b. s. t7 y1 A
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");. d6 V' g3 [* R& V+ `
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! h* t+ @( x1 F& h: r9 @
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);2 X/ q5 n: O+ U; W! g
  886.           dwStartUpSteps=99;
    4 O6 J: f0 @: h, }+ A% i
  887.         }# X2 A9 t4 L0 z7 q9 d) u
  888.         else
      J" V8 F; ]# u, ]" g8 q- Z
  889.         {. u6 [6 T' O# y
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & l8 [& T6 _) I9 T! f* R
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! j/ q/ `" B4 e0 v* b- `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 [1 C; O; B( a! Q* z, G

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

# u0 y" s) q/ p1 C- k& _+ A
, N0 |; R0 f% }

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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