CSUpdate.exe源代码

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

* S7 Z7 Y% o: b
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * Y& Y$ L( Q2 G- T: H; `. G
  2. //
    7 d- f7 Q0 b7 o! S. E; t2 Z: [! B

  3. / ~0 K1 {% s# L' t/ t) H2 a
  4. #include "stdafx.h"
    & N4 @# A/ r& Z- b( g

  5. 2 G& q2 W5 U' k0 P( \6 C
  6. //#define UNICODE
    + K; L: @7 T- f4 n8 D3 o
  7. //#include <gdiplus.h>
    7 {' o  U9 y6 i6 ^3 ]) k9 v
  8. //using namespace Gdiplus;
    ' G- c' D; L9 n7 N' W
  9. 4 q" b9 z6 w7 T7 u
  10. #include "RevApp.h"
    $ H: k0 j. a, t5 A5 Y
  11. #include "RevAppDlg.h"
    5 f5 {8 F* Z' B# ~5 S* K

  12. 1 t  X! y. @/ L, }5 z
  13. #pragma warning(disable:4786)- {5 \! |6 ~* J( i& z
  14. #include <map>7 R! A) w: i- _, m. {7 b
  15. #include <list>
    ! q" M* V2 o6 j
  16. #include <direct.h>, C2 p" s# ]" z, N' _/ L

  17. 0 V1 H- J8 Q. ^
  18. #ifdef _DEBUG
    5 M- U9 w/ A4 Y/ d+ b" z* v, r
  19. #define new DEBUG_NEW$ b6 c& l. n' d/ ~
  20. #undef THIS_FILE
    3 }& _9 v) W3 q$ m
  21. static char THIS_FILE[] = __FILE__;
    . S% @6 L/ g1 c' |0 y' n
  22. #endif  K' z, M" @+ A
  23. #include "SkinResDef.h"6 F% ^3 j3 d: i3 r$ y4 `
  24. #include "ChangeBG.h"
    ! G( H- P+ P) o
  25. #include "AFXINET.H"! v2 u6 v- I6 `3 F% j: ~
  26. 4 N5 ]2 p5 q, y  D4 c1 W
  27. #define TRADITIONAL_CHINESE 0
    ) y: v8 A/ q. F) }8 j
  28. #define SIMPLIFY_CHINESE 1
    $ [7 L5 r- }& ~4 @2 a" p5 Q
  29. #define ENGLISH 2
    , c& _5 S! l. [" ^3 B
  30. int m_iLanguage = ENGLISH;& w. d% |1 s4 y5 Z6 T8 u4 {, Z
  31. /////////////////////////////////////////////////////////////////////////////
    & Y8 z& ], b3 R! q  F
  32. // CRevAppApp3 B; E3 v% h5 e  \/ C& Z# I

  33. 9 v& E0 |& W+ ?# M, f
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)- s9 ?* q  }" x! g! _& a4 U% g7 j
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 Z% B3 d8 I/ A  T  Z6 f2 x; o
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    $ _8 x- @# F& p; N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!: t! m8 [& I# r( ]
  38.         //}}AFX_MSG) |% n6 i0 R3 i+ U( P* {+ i! M5 G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 G+ U- v' Y3 w4 C# I  V
  40. END_MESSAGE_MAP()5 i8 {  A3 ^* v' U) s" ?# d8 A2 I

  41. ! l% i  _* I( J3 P% k
  42. /////////////////////////////////////////////////////////////////////////////& K) h8 [9 s% w, L' U0 f- m8 x
  43. // CRevAppApp construction5 Y9 p+ [) Z4 F
  44. " y* q( R! U1 t6 R! n& B
  45. CRevAppApp::CRevAppApp()( U# z# K+ C0 |& C5 m
  46. {+ T! {2 Y) x! c+ |
  47.         // TODO: add construction code here,2 S& Y6 s2 ?1 z/ N/ j3 Q( l2 i
  48.         // Place all significant initialization in InitInstance, b# |: Z3 V( l- c3 ?
  49.   bDisplayIsBig5=FALSE;
    $ O: k" ]' r% c, a5 G& z: |
  50.   bRestartUpdater=FALSE;# j1 o$ i9 ]1 L2 n! D
  51.   bFinishUpdated=FALSE;; m- I& O9 @# ?* |7 T8 `7 e, C$ d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;' l1 O# K! z! N
  53.   InitChangeDataBig52GBKS();. e: U  d, A% B1 O/ Y
  54.   InitChangeDataGBKS2Big5();
    $ U& K1 w) h0 M$ ~! d' m
  55.         //
    + V" u* ?8 A( S* _8 [  a/ @& G
  56.         bClickRunExe = FALSE;; a& W' r. K* _6 ]- s4 J
  57.         //8 d" P7 {1 A, }4 {$ j: q
  58. }' I: R3 ~8 ^. g+ z1 `% p

  59. 2 e# B0 a0 v' ]
  60. CRevAppApp::~CRevAppApp(), S. ]' F# y% p
  61. {
    - W' V5 y$ p4 Q& e( `& r
  62.         // TODO: add construction code here,
    8 M1 ?7 T7 s8 X
  63.         // Place all significant initialization in InitInstance& g. M7 V& g7 E, a; ]
  64.   EndChangeData();
    3 F) w" d* [' d/ |2 d8 m% v
  65. }) j& m+ u. W2 J

  66. : d5 Y/ R& n% d/ e
  67. /////////////////////////////////////////////////////////////////////////////
    $ F, Q+ M# G& R# R! z$ D4 _
  68. // The one and only CRevAppApp object; j- @" G3 Q: t8 J6 p6 N: g

  69. 9 n, q8 }! _+ O& i$ z* j+ `
  70. CRevAppApp theApp;
    . j5 e+ g9 ]# ?0 Y# A) @

  71. / C6 w) s: F5 O. N+ R0 A* D9 f
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      h, K) f/ X& s8 m
  73. {5 A$ V" p9 m% H( ~5 z4 b7 [
  74.   int iEOF=0;
    1 t; g' t2 O3 w* U( W8 r
  75.   char szTempName[MAX_PATH];& ?+ y: z9 s6 A2 D, k, C0 x2 F
  76.   *szFileName=0;" e3 [$ A- J; h, Y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    0 I$ u, b3 q1 |% @2 x
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 l% q1 J, ?; z& k
  79.   {
    5 S, o- F9 q6 s: S% P% P6 n
  80.     strcpy(szFileName,&szTempName[1]);
    ! U1 ^: k; G. l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): ]8 H/ f" F7 j
  82.     {* i: q1 u4 E1 I$ _2 c1 m
  83.       iEOF=fscanf(fp,"%s",szTempName);1 q+ R2 m0 P# p; |' R( _- T
  84.       strcat(szFileName," ");
    " _# g; b8 g4 l0 n9 `4 W% H
  85.       strcat(szFileName,szTempName);9 k& a/ E& i( E: f+ E9 m
  86.     }
    - P7 A6 i3 h, o7 p- `
  87.     if(strlen(szFileName)>=1)- a: \) r! O+ k6 [
  88.     {
    2 x! d8 a" i; B, h; b8 j
  89.       szFileName[strlen(szFileName)-1]=0;" G- L1 E( R$ p- o3 l: I
  90.     }
    8 t' ^7 `4 {# m
  91.   }* d3 h% N, }8 \2 _2 O
  92.   return szFileName;
    * w. {- C$ t! I5 r8 V* L- }
  93. }5 N, e/ _% J! j, l

  94. 2 D0 v1 Y' Y, A( t9 y6 U- a
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ b* w/ \# L, I
  96. {6 a6 r8 `% E9 N: w
  97.   FILE *fp;4 @  n- m! T/ ]. a8 P6 A. i
  98.   char *key=NULL;8 `' c+ }& `, D5 X
  99.   char version[MAX_PATH];6 H0 W- L$ G! r
  100.   LPUPDATEFILE file,olds;% y  Q# ]6 N( L0 Y, D4 b
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 z' _! r2 a" z( m+ @& ~6 j

  102. % C1 u. C1 @& m# J4 D
  103.   UpdateList.clear();$ \% [4 `# E( Z9 U( T; @9 M% d
  104.   UpdateFile.clear();% f+ X+ ]' P+ a7 a) h5 f
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 M0 }. A1 @# e; I
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 X7 S* h% k* S& A. t; W' {
  107.   fscanf(fp,"%s",version);" C! @: q2 Z/ q& o4 E
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }7 ~7 F; ^( x: r& y5 q! f( x5 O
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( y; ?& }6 w# T4 q
  110.   {
    - h4 j. q6 _2 v# }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" ?% V, u5 }& p9 Z. s2 o8 z0 u& G5 N
  112.     fscanf(fp,"%s",file->path);8 H# l* [) \' G" [
  113.     ReadFileNames(fp,file->file);, W* Q& R* \2 h9 k
  114.     strcpy(file->full,".");' E! {7 L3 g8 ]9 b8 Y0 a2 T8 [
  115.     strcat(file->full,file->path);4 H* B5 C3 o: q
  116.     strcat(file->full,file->file);
    ) S: x4 z. @, W+ B1 j0 Y* p: [  Q1 e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; S9 r$ q; W( Q& `
  118.     {) r" y% a2 c- M! |$ V
  119.       file->vers=(float)atof(version);) K; z0 h. w3 g9 g$ X( l4 z
  120.       UpdateList.push_back(file->full);
    ; O7 e+ n: P" n# G
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + ]. x1 F2 d7 I
  122.     }
    8 u! y8 x* W8 v) v
  123.     else
    ' u. F6 `  u0 H" e: r  r
  124.     {, }) i3 h& _; l! L% @" H
  125.       olds=(*p).second;" n( p5 A; L0 O) H7 K, h
  126.       if(olds->vers<(float)atof(version))
    $ v- ^& Y* C' r
  127.       {
    ' W3 o/ O/ C% i" M3 F% c2 C2 W
  128.         olds->vers=(float)atof(version);7 U3 h- @2 J0 ]- \
  129.       }
    2 R* c5 i$ v. r# x9 Z8 K! A: I
  130.       free(file);
    9 q5 v( p1 y7 b& L$ A. R" z
  131.     }
    9 Q6 j( E! I% K3 U+ w( d
  132.   }
    $ i  x; c/ v4 o9 R  T0 x( _
  133.   fclose(fp);
    - ]& l0 B2 x; W1 E9 L
  134.   return true;
    5 p$ w0 _# p, B- W
  135. }7 O1 C: y$ |  H& @) T5 ?

  136. 7 n$ V: G4 l: y- J* @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 L. Q( M) p# E6 S! O
  138. {" |( Q* j6 m; m1 q4 a5 k; o! v0 `7 v
  139.   TCHAR  szFull[MAX_PATH];8 ^9 C" B& M2 d: T5 j
  140.   TCHAR *token,*inter;
      [, o. B# i0 ^) y- p
  141.   *szPath=0;
    0 _0 Q# A, f& H
  142.   strcpy(szFull,szFullPath);: j; A8 v4 s. Z- j
  143.   token=strtok(szFull,"\\/");, m/ q/ \# L( T0 V
  144.   inter=token;
    ! j& c! c2 |/ t
  145.   while(token=strtok(NULL,"\\/"))3 K7 j5 }& y, D. L
  146.   {
    9 d# p3 N1 d7 G4 }
  147.     strcat(szPath,inter);
    ; S% ?7 R! Y! Y7 v
  148.     strcat(szPath,"\");
    ; P" D; s* t% W) x
  149.     inter=token;$ t1 s# p* v: ^
  150.   }7 r* J$ J' a4 O' b0 a" X
  151.   return strlen(szPath);
    8 n' X  ]9 E; ?4 h
  152. }
    ! w6 T# _8 @5 H- |9 K+ n
  153. 7 J4 H: N$ F. Z! m! n3 `5 z5 N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) |7 m; \& h" s/ v4 |
  155. {9 e3 V& ?  x( p! A' @6 n( o! ~; A
  156.   DWORD attrib=GetFileAttributes(Target);
    6 x% U* ~; ?: C: q6 w
  157.   if(attrib!=-1)
    + [+ u! r. y8 f
  158.   {
    : m" k  a+ S& J
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : |) _5 V& a0 Z) ]. j5 p
  160.     {
    * A8 C# f, _# k, b/ t6 t7 c6 {4 x
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);" S7 ^+ {" f8 Z! B& u0 \8 m
  162.       SetFileAttributes(Target,attrib);
    $ F5 Z. G5 {% n' k; G/ g  G, h) m; X. ^
  163.     }1 \) r) n5 G: u) o  h/ m" Y& P: [
  164.   }
    . G, E( v7 }  {  [4 d
  165.   CopyFile(Source,Target,Erase);: d6 ~% s/ e( L1 j) H
  166. }  E7 c% u+ P! J% C' R7 I
  167. ! l, ~- u2 e2 x+ }) w! O1 a+ O+ y2 n
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    " L8 n' j* ^- ]9 ], c. Y
  169. {+ B7 v! Q8 j- h+ r3 h. b
  170.      FILE *fp;4 o5 a8 {5 f" K. }
  171.      char  szBuffer[8192];' j1 `! f0 E% B+ s1 ~' X% h7 W
  172.   va_list  argptr;
    * C8 t0 z& Q0 X1 O& Z

  173. 0 ], g  n. u; h# X
  174.         va_start(argptr,message);% r: D8 ]. W# {- f, A
  175.         vsprintf(szBuffer,message,argptr);
    7 [2 \5 N* E) w) A
  176.         va_end(argptr);
    ) f$ `0 V" ^. Q: H$ n& `  g4 ?
  177.   fp=fopen(FileName,"a");# z1 z4 t3 w( A
  178.   if(fp)
    8 g6 h% Q: {  \$ j
  179.   {: z6 N% f) }) I
  180.     fprintf(fp,szBuffer);: J' A5 K0 V3 Z' n9 E
  181.     fclose(fp);  q) X8 d4 s) i/ O+ C2 G1 u% \1 [  T
  182.           _flushall();- {4 Q# i: b  a" p
  183.   }* ]! O/ t  i2 w5 \2 ~& z, w
  184. }8 g) ^7 F% L. C! o- v2 o

  185. 2 n" L. e8 r4 N7 F& [2 j
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    7 Q, U4 J/ Y# X
  187. {; ^- ?" ]0 n( J, k5 n. Y% z( N- ~! @
  188.      FILE *fp;
    5 @$ K, {2 z$ R- K
  189.     DWORD  attrib;5 k/ z4 m. q3 |% G( ^7 [
  190.   attrib=GetFileAttributes(FileName);
    ) Q& s; S) P- Q. e% _
  191.   if(attrib!=-1)- W0 r6 l5 _  _0 H. b
  192.   {* m1 v* S( B* h1 F, M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 q- @2 b& t( k/ M
  194.     if(!SetFileAttributes(FileName,attrib))! p1 z$ l) t  ~/ _
  195.     {* E% g4 B8 f6 ^+ l
  196.       return FALSE;
    7 o9 B5 C% o) c5 e4 q8 m( _
  197.     }9 j) d8 {# l: `; {8 x0 B4 }9 c
  198.   }+ h/ g  r- w! \5 P; S
  199.   fp=fopen(FileName,"wb");3 a- \) f' n8 p4 j" y# G, M
  200.   if(fp)
    1 M. w$ t* {+ G: {& D* B: x
  201.   {
    ! j. _! r3 b, g0 K
  202.     fclose(fp);
    # ~, p. p# A" M4 V6 `+ l4 ~
  203.   }
    ; j7 X: K+ H' e) H
  204.   return TRUE;
    $ s( `3 g* P/ M6 n; y& }
  205. }% X  k! i  U, V$ @
  206. 1 F, E# D0 |6 g3 a! W. ~
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' ^; _) O2 Z6 I8 @! m$ r1 a
  208. {- c/ ]- {2 w, l# S. z; s
  209.   char filename[MAX_PATH];. |3 u, S3 D4 D# X$ i/ V/ S' G: X
  210.   LPUPDATEFILE file,olds;
    6 w; J9 Z( t1 {
  211.   std::map<int,CString>::iterator i;/ M( v4 K, `( h/ `; N- j; p8 T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 D+ Y, A: }7 _& y" ~3 E: N: t! ~
  213.   std::list<CString>::iterator l;
    # d4 R7 r, ~: W5 ^  }  x9 {2 |
  214. 6 j+ o& M. \( @/ {8 B/ `
  215.   if(bFirstUpdate); F! W# x* o9 @' \
  216.   {
    ) G( E2 D, F, E6 B$ j" t+ b  N" E. |; I
  217.     dwCurrFile=0;
    * M5 f; L; J$ R; Z! d" N. }" U$ ]* @
  218.     bFirstUpdate=FALSE;) N0 x0 P# F& ?$ k7 h9 w8 e
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 y+ U" V1 }* t, }
  220.     {
    + w4 I  P! o: r+ n+ C; k% L
  221.       dwTotalFiles=UpdateLocal.size();9 k# u9 @% Q9 h% o  b
  222.       dwDownLoaded=0;
    " _1 ?! d3 r! G$ `  N
  223.       bSilentStep=FALSE;  p" ]: V# T6 \# J! W' o$ h" C
  224.       bCompressed=TRUE;
    8 y/ @2 b- J3 Q4 ?8 B. t
  225.       strExtLocal.Empty();# f+ f: Z9 Z, s* p0 m. [
  226.       strFullName=(*i).second;
    1 Y2 g% [* i7 [$ \/ F
  227.       dwProgramState=AP_CONNECT;# [/ e; j" b, |" V' ^- u+ H
  228.       return TRUE;
    / m% f! A" _/ O9 \  ~! m
  229.     }
    8 N/ ~- n" O% f. s& M4 u
  230.   }
    ' N7 _$ t- I7 ^! B! x/ P
  231.   else if(bRestartUpdater==FALSE)
    , S2 {! W4 Y" F: J  a# ~
  232.   {2 S6 P% W) I2 F4 @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())' j4 t1 d! R, K2 ~! S8 c
  234.     {) R) ]# E9 f6 i8 S; H$ u
  235.       file=(*p).second;
    5 r; \" n" |' ?
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    , h  P. W: J* H% x" B
  237.       {. U6 q5 V0 H8 t' K0 x
  238.         olds=(*p).second;( C8 E6 S3 V  E% g8 g
  239.         olds->vers=file->vers;5 |: ^- \. a6 I
  240.       }% M' A6 O/ J3 Y3 P
  241.       else
    . }+ j& g4 d8 N* g
  242.       {4 D, ^  `. |* D2 @$ ?4 [! T, D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % P' S% N; S7 R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ W: i9 J! }' P/ t0 l- B# u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / X* E# r( W5 z6 U5 C! T2 V9 @
  246.       }
    7 h/ B+ E, j4 t1 L
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( `4 k8 O- u) V* Z
  248.       sprintf(filename,"(%s)",file->file);
    : b" U" B% v: ]8 Z( Y  M6 d5 g& T1 o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' X7 g2 [4 V, j4 K: U/ y: w) N
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 M0 o9 i) S4 l+ _. |' x% ^2 J( P
  251.     }
    2 U5 n+ w/ Y3 P0 Y
  252.     dwCurrFile++;
    / W, M2 o& U' ~- h; }$ D# j5 n
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% ^$ c) l9 V1 }- e6 h. W
  254.     {
    - V! t: T$ a, m: t+ ~& v
  255.       bSilentStep=FALSE;- R+ a( K* M. N( ^
  256.       bCompressed=TRUE;1 u# P: J( m' M6 v7 s, `+ T
  257.       strExtLocal.Empty();3 L3 B; l+ {( m3 V: X
  258.       strFullName=(*i).second;4 I* I( E, L5 a7 r
  259.       dwProgramState=AP_CONNECT;6 t, P1 t1 j0 c/ p8 {2 a  J( v
  260.       return TRUE;6 S* B$ |  `9 m* r8 w2 g/ P$ _4 u
  261.     }/ A0 a; S" w3 B1 C# h
  262.     if(!bRestartUpdater)4 }; |. Z+ ?; d& u) j
  263.     {3 g: y7 l$ y0 V8 }/ p. E
  264.       int iCurrSize,iFileSize;0 m$ A8 G" m* D
  265.       iCurrSize=0;0 ^; b; X/ D2 i! S0 A$ f
  266.       iFileSize=UpdateList2.size();0 l: }( y: x3 Q8 o$ ^) D7 |
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , i% ~; R" P/ l! ^
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . @. m% E* _4 W; y
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    6 a0 w8 X3 N+ b- o5 q0 @3 O7 M7 f; ~
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 j3 b4 b/ J/ C# M, M7 p! |
  271.       Fclearf(".\\update.dat");, U2 U# T8 S. v
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    # ?& I2 i/ D& |/ F9 K; d; }) V
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' t9 j5 M2 T8 ?
  274.       {, b' C8 S/ O2 @- m( S/ o9 N$ ^
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & H3 \' t* i3 e& ?7 L  b$ E9 [: D4 R# G5 ]
  276.         {& Y. Q* M$ I: W( y4 O9 j' m
  277.           file=(*p).second;
    6 ~) O, D6 E4 @) _0 c- j
  278.           sprintf(filename,"(%s)",file->file);! n2 K% \2 C& O, h  K2 Q
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * J9 b" q8 |- e; w; {* [. y( N
  280.           iCurrSize++;
    ' B: C0 M# j2 k, M) M
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- ]  |5 l9 a- e
  282.         }
    , v7 _: v& V) ~
  283.       }' b" \7 y% j- \2 ]+ Q
  284.       unlink(".\\update.txt");5 q/ U/ _1 b# R5 n3 E
  285.       unlink(".\\update.tmp");  R+ E9 G3 ^* k0 ]; a
  286.       Fclearf(".\\checkversion.dat");
    2 M9 Z  o# o1 Q( ]6 X. d  r4 K  Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    & M& F# u& \  Z0 W$ G% g3 F
  288.       if(UpdateLocal.size())
    $ w6 k+ C  j9 g
  289.       {+ z5 j& ~0 ^, }# Z7 H
  290.         UpdateLocal.clear();
    % ^7 r/ h) r+ {% d' l
  291.       }
    * J' h) k: C1 I9 \0 W7 ?8 U7 A
  292.       if(UpdateFile3.size())
    7 L# k- [) w! n  c! F' a
  293.       {) @1 s# G0 s( Y/ X) S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)9 b5 Z6 A. |0 H( P+ T4 M( t
  295.         {
    , r6 L$ \- g: p# W& P
  296.           file=(*p).second;
    7 J6 E6 j% K# T0 z0 F8 @
  297.           free(file);( e6 R: j5 {6 A
  298.         }; V6 U& q0 X( y: }0 V  j, g% R$ V
  299.         UpdateFile3.clear();2 D6 w. V/ m& N9 O* R
  300.         UpdateList3.clear();" h. |3 n. R! v$ @* ]5 o9 V: `5 |
  301.       }
    ( ?) h; c. [1 f% O6 h
  302.       if(UpdateFile2.size())7 a' l; s5 |" @; q9 W
  303.       {
    : ]. x" d) m  A8 @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" B4 ~# G0 c( ?. o* W
  305.         {
    # L4 g5 V, l4 S& i/ }" e
  306.           file=(*p).second;/ C8 N9 J6 M3 |( d
  307.           free(file);
    % c9 @: b) @3 b( j1 C: u6 D
  308.         }7 i9 S3 `- v/ W8 ^& V+ y2 c4 S; R; r
  309.         UpdateFile2.clear();
    5 C  Q( d  m: Z- [9 q3 Q. r
  310.         UpdateList2.clear();. F2 J: p8 e$ t6 p: n
  311.       }5 K2 ~# ~4 {0 K0 {, K0 {
  312.       if(UpdateFile1.size())
    ; N, s; ?# w( R3 `4 ^8 E/ W
  313.       {* H; Q0 i+ H# I( z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)- V' @: _: K% D1 ?
  315.         {9 j- l$ s. y4 `! I/ y/ B  Y
  316.           file=(*p).second;7 `; q! V! l( W7 O: Z* y
  317.           free(file);
    " @; ^0 d; J/ X) ^' O, X7 _
  318.         }- v' L9 y8 s6 `- V5 G+ C& ]7 {& X( b
  319.         UpdateFile1.clear();" E! n4 h; @3 r! t+ v; M7 U6 p
  320.         UpdateList1.clear();
    # O9 p! e9 `  T2 L
  321.       }8 j: u$ T, u! d! j
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 A! l6 ?  r7 ]" j1 y
  323.     }' i8 B! j, C  v+ V9 U
  324.   }
    & Y, l+ x1 b3 B5 L& z& [
  325.   return FALSE;  K6 n+ V9 G" z% X2 K
  326. }
    8 V5 Q; k* l1 U6 z' x: S
  327. 5 k$ r% J, f& E0 D! I+ i2 b% F
  328. void CRevAppApp::ClearAll(void)' W* f  n/ f/ {* j- Y
  329. {
    6 j3 J, q( |. {' R: {
  330.   LPUPDATEFILE file;# U2 C! |7 S% x6 }" w- c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;  l! O% f( M& q" @2 ?3 A

  332. , o1 o4 W+ o% B$ Y) t+ X
  333.   if(UpdateLocal.size())1 X9 `5 N, C' k" q2 ?9 M1 x
  334.   {' ~$ d4 L$ G: [. I/ S6 P5 n. }
  335.     UpdateLocal.clear();
    $ U+ i8 F! L; u: u: i2 U- K
  336.   }
    + L4 k0 f+ k8 w
  337.   if(UpdateFile3.size()): r* n/ n/ ^5 i- e) c
  338.   {
    ; J, t' d5 p) \$ g4 R  G$ D
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' \5 S( t, n: F. s& k
  340.     {# |( K5 S2 I6 F$ m
  341.       file=(*p).second;; k3 x8 B5 k9 X3 N& Q
  342.       free(file);
    * e+ t8 a* X% u. f, }
  343.     }* H# K9 }) x" s$ e
  344.     UpdateFile3.clear();
    5 t- [- J7 F! w& H' }# [
  345.     UpdateList3.clear();, F/ t7 F& K7 n% z
  346.   }' ?7 q# D& x& z, ]# x3 M6 a1 G: }
  347.   if(UpdateFile2.size())
      P3 N3 p' x& C  @4 u, n
  348.   {8 g4 W) h# U6 o; a. R+ ^
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % r1 ~$ B8 G' D  f1 |2 X$ E( Y5 A
  350.     {
    ) }" J1 I  q; N, x
  351.       file=(*p).second;
    % J* q$ \, A+ q/ a) }- ^9 p9 @# M8 V
  352.       free(file);: C( m1 Q/ P* Y  z: ?
  353.     }9 s: k) A7 L$ c2 [; l0 Y
  354.     UpdateFile2.clear();
    6 j# h% `0 Y" p  k( V+ J
  355.     UpdateList2.clear();
    ! M, J( t0 z  h, T3 @7 i" e! G" ^
  356.   }  U" c- j- V# U- x8 N7 M
  357.   if(UpdateFile1.size()); e4 w3 E0 Z( E& S& d2 M4 j6 J* b
  358.   {
    * N1 V* X- ~, n( W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & @. M9 r: N$ o5 g7 u) ?' k  B
  360.     {2 ^; ^5 l8 f; }$ y4 I; k+ ?/ O
  361.       file=(*p).second;
    5 j% `5 `3 ]+ d6 ]% |  h# {1 q
  362.       free(file);. R# i/ r* f1 Z, O$ K
  363.     }
    5 q* k  H) Z& C- @5 ]7 M" ~8 M
  364.     UpdateFile1.clear();
    , s( R8 V6 t3 E' o
  365.     UpdateList1.clear();4 x* _' L8 @1 e* Q- f: h6 f- w% j
  366.   }. P6 b6 S1 A3 }( @* {- `8 i
  367. }  , x/ j; u5 {2 x
  368.   
    / ?& L' u9 A- t$ t! D, R' I
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 c& R; y& e, B
  370. {
    / C6 y6 L" U5 _- i: y
  371.   int c;
    ! Y( z/ `. F7 q/ R; |) O, d
  372.   LPUPDATEFILE file1,file2;
    % u: `/ n* T" M# H# p# [* U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , I* _; {3 |1 Q/ Q
  374.   std::list<CString>::iterator l;. q. p0 M) m9 u/ `4 n; S4 F

  375. . e4 q1 s1 b* r, v
  376.   UpdateLocal.clear();
    # E' I2 R& \, f' k; c0 Q0 h
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( O/ l$ Q! w6 }2 I6 P' |
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 n/ U  w3 t# D& [9 @
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' j2 e* P% `1 I1 A, I5 Q1 g- o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 }- ~5 g( Q9 H3 T3 E
  381.   if(UpdateFile3.size()), D" X; X! S4 O2 S, C: ?
  382.   {( K" @) u; [$ v( |' J; r
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- Y0 ?* J7 k0 N: I/ n
  384.     {& T( g+ P9 B. s* t) W
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( b% Y% T' P$ ?8 c
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) u/ ?& E- n4 Q. h! i
  387.       {+ O2 h/ p& Z; f8 ?9 j4 [! i
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 P% a* n' J9 }$ d
  389.         file1->vers=file2->vers;
    ) V; q9 q+ i7 ^
  390.       }
    # j4 t1 U# P8 @
  391.       else5 W- g' C8 Y" z
  392.       {0 @# `0 S% k' y  U3 {
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + G  I$ s3 }3 o: A% f
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" q3 B) m! X) e; F
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));/ G: ]; X2 {- V3 R& ~
  396.       }
    7 o* \$ `/ b! T
  397.     }
    8 f3 A! \- r. K3 l
  398.   }
    # r6 f5 A  j/ }5 B1 R1 w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 f$ Y( f+ _) i7 L7 K
  400.   {( i# z3 ?* {# x- M8 s8 M( h/ z9 z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 l$ W$ {( I( {
  402.     {. ~* |$ H# B8 F( l+ K
  403.       file2=(LPUPDATEFILE)(*i).second;
    # u) f! X* @/ M5 p3 N& B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 P1 P( y# m: _; ~9 _( ~+ J2 b2 \5 L" q% U
  405.       {* I3 A' [$ w" j- u0 @7 n+ ^9 b3 A
  406.         file1=(LPUPDATEFILE)(*p).second;
    6 f# ~5 l. t9 ]: ?8 A. f
  407.         if(file1->vers!=file2->vers), [0 x, c( F# i- q9 n7 ?
  408.         {8 h& X5 R/ `/ a- t/ F; _" [
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 o7 O, M  E6 K1 F! q, ]9 ~
  410.           c++;! k7 E# L, J7 Q* Y$ R) P
  411.         }. `2 c) B$ x, _' l
  412.       }
    ' Q% {& z7 u7 @4 ~" y# j1 f/ I0 y
  413.       else
    0 [  \" B) m2 l* I
  414.       {6 k2 O/ G" T. w: ?! j& h8 L  V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + e) _' M) `, p
  416.         c++;
    / x6 I- L$ Y, }- |
  417.       }6 R' a1 d7 c8 `! {; p. Y3 J
  418.     }
    3 q, L* }/ b) N
  419.   }: R! j# l0 y3 I- I7 s1 ?
  420.   unlink(".\\DownLoad\\update.txt");! V8 m* u1 J+ J4 `8 t: |
  421.   if(UpdateLocal.size()) return TRUE;6 k0 u) }+ Z* q2 X' t
  422.   else                   return FALSE;: t0 U& k% s  p/ R7 G1 m; b* Y
  423. }* X: a4 c% j! A7 N7 A
  424. 6 P1 Z' D; w" R# Q6 d1 q: f0 K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! B0 Y2 R4 _" g0 {# |$ n
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" U$ Z3 u; Z) o) {; A

  427. ( ^& z( G5 T  h% Q1 L. L
  428. 9 p! I6 k1 J; K3 H1 u. _8 T

  429. ' `6 O3 D, G9 K' {/ ?5 H$ p8 ^5 j( a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" U( t' B' ?% Z" q
  431. {2 \8 G; a" Y, ]1 R3 P
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;. f/ A2 D3 k. Z" l+ x+ X2 r* y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) O# _. G5 V' s+ K2 A
  434.   {+ C% ]$ t- S6 g3 Z
  435.     char szLanguage[50];+ S/ d! o' B0 F) y8 h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% [% ~3 W' B& `4 H5 G( N# A0 k# w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- I+ P% _# s+ o) E6 X3 P
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 K' z9 X0 `' N& n8 M4 |5 X
  439.     else                                   m_iLanguage=ENGLISH;
    . j: Q. o- U& o+ j0 M4 m4 G3 P
  440.     char szRegister[100];
    : l& l; K$ e- _4 B% s/ f0 _0 }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( e! M! @1 q9 A  c# J' J' Q
  442.     strRegsName=szRegister;
    , _8 f/ f% K- F6 e
  443.     char szPatchURL[100];
    7 E1 S9 D7 f1 t$ }6 e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + B) k: P% D! E9 o: x
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) O) e; _# U8 a) |4 T
  446.   }4 D- w+ l7 ^6 W* k# E
  447.   else3 W% d9 [. H4 C
  448.   {: d" R8 O  w: g1 w2 a
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" X: h4 P4 o- T
  450.     strRegsName=DEFAULT_REG_URL;; P, E2 q& N5 i9 D6 ^! w* z
  451.   }7 e; d/ [. H% i$ d- m+ Y" f  [
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ V# C5 ^% e6 O" D# ], {; J& p+ R  j
  453.   {
    $ B5 G( T; Q# s' H
  454.     char szIP[50];; @5 ~8 O& M. P& v4 v  ?! d" X
  455.     char szDIR[300];# {, I; ^6 w8 {6 P: Z& M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). L8 f! J/ N0 g
  457.     {
    2 X, S# R. T8 x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ' b6 n: l  `, t' O# O( v5 |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 ]# Q/ s9 R) f
  460.       strHostName=szIP;
      K9 `& T: a) m/ i3 o+ N; I+ ]
  461.       strHostPath.Format("/%s",szDIR);9 p- D9 \1 B- O- I3 ]' X& C
  462.     }6 [) q4 u3 ~. e4 G
  463.     else
    " Q7 c& Z+ B" B9 P" p" g. ]
  464.     {
    % C' T: N# _, m" U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - A# w6 v, Q# H6 k- P4 Y* F5 F
  466.       {$ r7 S1 ^! c5 c, w% ^/ H" l& r
  467.         char szLanguage[50];
    ) c" n  M* _7 V* N% ~0 o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 x# W( b' p3 [8 M
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' `$ }. c/ ^; N: {& I- x
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; q( X% U+ m5 N3 K) T( R7 I
  471.         else                                   m_iLanguage=ENGLISH;" U- e- f, i& p# A7 K4 |, v
  472.         char szRegister[100];
    2 U& e4 A' l+ w/ i. D, J
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 s/ }# M3 Q2 a- r; w8 ^' v3 x, I
  474.         strRegsName=szRegister;& i: \$ ?( U6 t' n
  475.         char szPatchURL[100];+ s; i; L& L& {* I1 [1 E
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 W% l2 N& p% t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , K3 r8 g2 |7 m. p
  478.       }- L, h& s4 `/ i. D
  479.       else6 S3 e% M3 r) z8 N/ @; I8 ?3 _' P
  480.       {
    * g' i) J/ l& K/ P6 Y1 k6 v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * D+ r! a- z. h8 j
  482.         strRegsName=DEFAULT_REG_URL;: u. v" O, \0 K5 ?
  483.       }
    & ?3 e" k- X0 Z6 z3 p
  484.     }
    9 n% V7 ?% b7 u( x3 o  [3 Z7 w
  485.   }7 S! N% P3 X" I4 i+ \( x
  486.   return true;; c4 E& Q4 V! ]
  487. }: f; W9 W4 ^  z6 @* ~

  488. " Z! i5 l9 B* X  i
  489. #include ".\ZLib\unzip.h"# q7 l6 r) n- _- p' Q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  T8 L0 u: ~+ R
  491. /////////////////////////////////////////////////////////////////////////////
    ) t$ |1 [# F& t% i( K
  492. // CRevAppApp initialization
    4 w" z% t' [. K

  493. : i8 A% j* E2 e6 L& ~; L
  494. BOOL CRevAppApp::InitInstance()
    4 a5 D0 r  X' c1 F- z
  495. {6 P3 M1 M, ]4 p/ ~8 S4 N) g& D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. v1 S/ w5 q- q" P- d& }4 I5 F

  497. 2 X5 O+ `2 n7 J0 v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / D% b! U( n# x; ^" q, G2 ?; V- c
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  E* Q% b  a9 U  `2 {0 F' o
  500.   {
    % I* ?( K' j* O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  `: t7 J9 l3 J- I
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    . G, e1 p5 A. C; z- Y4 p. N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))- S; J4 w" U) B2 R; O/ ?
  504.     {% W' e3 S5 M/ N  ?
  505.       strcpy(szPath,szPathTarget);5 @; ~6 N- j( p1 c
  506.       SetCurrentDirectory(szPath);2 X7 w$ @2 ^( m2 l8 r
  507.     }1 j+ G) D+ Y* T- i& j) u7 B
  508.   }' d' P; |- X4 B8 {. Y+ ]( ]
  509. #ifdef _DEBUG; G, g, P. F4 E. s9 ^1 t1 d
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). a. K' e. q9 a; V) U
  511. #else
    5 N4 c9 m3 G- C
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  X4 Q4 R5 ]4 [8 @8 |
  513. #endif
    $ C1 W/ a4 O, o0 |
  514.   {4 U% X/ M7 @6 e2 ]! K, s
  515.     char tempFileName[MAX_PATH];0 m: a9 T" M( Y  J# |
  516.     strcpy(tempFileName,szPathSource);" \* w, F# w6 B. p
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 C7 w3 W) F6 d7 r- T+ ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");( G7 p) G" j! c2 T; i
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    0 T4 o+ ~  r$ I4 f' |' M
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& K4 F4 w7 m) i$ J
  521.     return TRUE;
    - K* t' x. S! b
  522.   }
    . S3 q$ R3 o9 ]6 m8 |+ r
  523.   // Nuke 0118: Delete run.exe* f/ d* b$ Y; ^; D2 U$ g
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , g1 x; O8 o6 J3 `  S
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 C  U6 J1 N% b' x& v% W, H
  526.   if(!ReadCfgFile("Config.ini"))8 o. r5 k3 f! n( Q6 e
  527.   {- ^% c  e) y9 v* k! B  V: Y% M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    $ m4 |, i: s$ \3 ?$ D
  529.     return TRUE;
    . g5 T) P( a; j# R! }  }1 f: G
  530.   }9 q& ?2 d& |$ D6 T
  531.   HANDLE mutex;
    5 S( F- T; V' U4 f& r
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    3 s: x+ }  s5 q6 u, }, r- f
  533.   {% y3 j2 Q1 L! W; D7 N7 q. U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# v) b6 E- ?- g  P- o4 m! }
  535.     {9 c8 h" @+ z: z9 _/ |
  536.       CloseHandle(mutex);5 y) W2 ~0 E" ?+ p9 R9 t" T- R2 ?. B
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# V. n* p5 H" l( R
  538.       return TRUE;! I( n7 m+ R  S  m* \) o, B: i- O
  539.     }
    / r/ t! I2 `5 M5 e2 W
  540.   }  
    5 Z( z: k/ v! k$ x% P/ G
  541.   CloseHandle(mutex);+ r% }- J2 j4 J" z% m3 i

  542. 6 |% N+ z' ?" ?" g
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
      o' ]' W. Y, c2 v% F

  544. , Z, F* S& ?9 J& ^6 z0 u4 S
  545.         AfxEnableControlContainer();
    $ N# r8 s9 E# r, }2 }
  546. 9 r6 @2 H' g% M: B
  547.   bCanUpdate=FALSE;, f) m4 q  q+ i% y# ]( R1 B
  548.   dwStartUpSteps=1;) s5 _/ e& u% ^3 L* g0 b- L
  549.   dwProgramState=AP_NOTHING;) }/ t$ `$ {; A
  550. 8 P4 e6 t; K6 L. d
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - P+ R' @" }7 A0 s+ [

  552. 1 J  C1 Q; t# a' r& p  \
  553.         // Standard initialization
    & V& Y0 \- H+ G( [
  554.         // If you are not using these features and wish to reduce the size1 S2 ]. \4 f3 P2 j2 r( O
  555.         //  of your final executable, you should remove from the following
    . q# Y: R8 _' l1 a: m
  556.         //  the specific initialization routines you do not need.
    . s/ n9 H9 P: v- [) x" p* c! A
  557.   ~, s3 _& Y, t& U* O
  558. #ifdef _AFXDLL: H. A: j2 h0 K4 x, \6 f+ J( f
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 g+ Q+ M  h2 M) O( J
  560. #else
    5 @; u  q/ K% z+ Q! O% Z2 k
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically( s7 ]6 Y! k0 ?
  562. #endif
    3 {: ]4 {, ?6 T4 f8 T
  563. 2 Z0 B" H, e# `6 q! Q
  564.   dlg=new CRevAppDlg;
    8 K- Y3 |' B! Q# R
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 C. [! {. A) l( P$ M: m
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ l$ A. f# d) d! B* I* T
  567.   m_pMainWnd=dlg;  U1 I& ^. H0 e& F& |- R
  568. ! ^3 w1 W+ A  R& j4 L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ; l$ y  g' o9 D+ [' f! z: }
  570. 1 X% R+ n  g. ^( D0 V. z0 L  E
  571. //  GdiplusStartupInput gdiplusStartupInput;
    . `: L& X. g+ h6 j3 @# y
  572. //  ULONG_PTR gdiplusToken;. H  \8 u% K( U8 x7 o- K; S
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) |9 p/ `0 n" X6 C8 A

  574. ! `# R  A9 o6 p2 y! M" M
  575. //        CRevAppDlg dlg;: X* U! D1 i# }+ B
  576. //        int nResponse = dlg.DoModal();- Y3 W0 U- b4 B9 ^" U
  577. //        if (nResponse == IDOK)
    $ E8 w% K+ |7 m. x% x$ d- ?
  578. //        {! U4 w+ F) N. ?+ w9 V8 a9 O
  579. //                // TODO: Place code here to handle when the dialog is
    : q. }, f' {: E' V* y& i
  580. //                //  dismissed with OK; d6 e. S6 n' l9 m6 V
  581. //        }. ~: l" x& S/ _
  582. //        else if (nResponse == IDCANCEL)+ }2 F. s) s3 p# O: d
  583. //        {' r8 I% [) q! R+ F2 O  {5 g0 k4 J
  584. //                // TODO: Place code here to handle when the dialog is
    . w- l, f+ P" V, ]4 s( n
  585. //                //  dismissed with Cancel
    3 U- m, A3 z& p  s
  586. //        }1 M8 i$ k  K  Q1 F2 v

  587. " e' ?3 b  n. w: w
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    * ]$ J$ o+ D5 n2 P+ p# \/ w
  589.         //  application, rather than start the application's message pump.
    9 B* g; o) H2 [2 f
  590.         return TRUE;* r. c- e5 o% Q, ]" j$ H5 H
  591. }
    ! |' _5 [. Y9 j

  592. # e5 S( m  g. I  R6 O# e4 v+ a
  593. char *CRevAppApp::strtok3(char *pSource,char *token)  U, \2 E0 \7 K0 c# U
  594. {, h5 \9 g  ]9 v# B
  595.   int i;: v" K9 u1 {: G. H
  596.   char *szRet;
    3 t( {; F; _) v5 c5 L  a& ]
  597. 2 ~; ?* }4 J6 R. N7 i/ t4 M& [) w
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    5 U+ T2 u3 N/ i$ R% p# y* E
  599.   if(sztoken)
    " Z( y( ~8 G# i2 L
  600.   {
    4 u. y5 F# j' _6 H$ Z0 H
  601.     szRet=&sztoken[itoken];+ h7 h, ?; v. @
  602.     while(sztoken[itoken])/ f6 R! J* ^- C! R: F' R. s
  603.     {7 [, n- b2 b. h) t/ ~% \
  604.       for(i=0;i<(int)strlen(token);i++)' `! f" f. t' ~
  605.       {: K0 X% L) j# z) O1 E" @! {! \
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ [0 w/ k6 Z/ z5 B% k# a
  607.         {0 o* b% A; J* B% d
  608.           sztoken[itoken++]=0;, F' g2 t  D. f; g0 d1 o5 m6 q  ~
  609.           sztoken[itoken++]=0;+ m! w- q) z( j3 Z2 ]0 K! W) Z
  610.           return szRet;5 T+ i$ K/ q5 F" m8 Z& P% A4 |  V
  611.         }; k" h% e! }5 Z' ?5 `6 ^
  612.       }! p9 r) c7 M$ Z- t& P# a! C
  613.       itoken++;' V: L- d8 E. T& X
  614.     }
    8 u+ }2 W( ?3 l; e  ?' s) q
  615.   }# f1 h8 ?5 Y4 ?, ~$ g
  616.   return NULL;
    : |* r: ]* e# C, o& L
  617. }
    7 ?( E7 `6 r$ ^$ t* m
  618. . A7 O  N. w( L5 q  V" }! b
  619. void ProcessProc(long Total,long Current)
    . {' T0 D; _. h' ?
  620. {
    , ~' Q. o1 [! u; ~$ t* G) N
  621.         MSG msg;  o' Z8 `- D, v# f+ K$ g5 ~
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    % h8 X& b; |' Y+ D8 Z0 v6 b
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ F8 O8 ^4 h* O7 f6 m3 C) V) r4 r' Z
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 c, C2 a; |" k/ N/ W
  625.         {& I+ _- ^' T( ~3 e4 M& t+ `9 _
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 ~4 g' R3 W$ J- [/ ]2 b
  627.                 {. v* C3 ?- q* P/ q# u9 ]
  628.                         return;
    ! i4 c1 g/ F0 ~! A. X6 w3 t
  629.                 }
    3 e/ z" c! O& E7 s, Q+ s
  630.                 TranslateMessage(&msg);
    9 Z' @+ I- W, f
  631.                 DispatchMessage(&msg);
    & l* k. i% E, U6 V- ?' z
  632.         }       
    . q4 P0 F" c# W
  633. }$ I6 \1 V6 w( p8 q/ C

  634. ! k/ M& _6 g! X" {: t5 @
  635. BOOL bFirstChar=TRUE;3 `' z3 |2 f" V% j- M& ]2 p

  636. # F1 U6 v# }) \5 X0 M0 d6 x
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ k  X: B& r) b' e
  638. {9 u5 h1 \+ Y' W8 W& _
  639.         // TODO: Add your specialized code here and/or call the base class
    ' c5 y( z  k- O0 J
  640.   switch(dwProgramState)
    , p1 f) }# x# I6 Q, Q: W6 ]
  641.   {' b/ R: v% S1 e! H
  642.   case AP_NOTHING:
    6 Y7 {- e5 ?$ ?0 s8 Y
  643.     switch(dwStartUpSteps)
    5 j! `# Q$ _" x, r# {
  644.     {
      u  f8 V- a( g' s/ }  [: l
  645.     case 1:$ |) Y% _7 L, i  K. T- y
  646.       {
    % r% j2 @: h1 g+ D- R6 a3 q$ Z
  647.         int i;  \( Z9 ?* h0 T. y$ z8 {8 u) a  |$ r
  648.         CDC *pCDC=dlg->GetDC();
    7 B3 t' f4 u  j! e0 M1 v% J) `
  649.         HDC hdcwnd=pCDC->m_hDC;
    - ^9 {- k9 E, a* r6 m" T" A
  650. //        Graphics graphics(hdcwnd);  b& G. l( x/ G" x1 J- a
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");: a/ O/ r8 V/ p4 c
  652. //        INT iWidth=bitmap.GetWidth();  S5 c6 z  r$ @7 J, {
  653. //        INT iHeight=bitmap.GetHeight();! F1 w# l* O4 t6 D/ ]7 _0 C
  654. //        Color color,colorTemp;
    6 i% @, z* U1 y1 X( [7 B9 C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ' @  Z2 o" L) K0 t/ B
  656. //        {
    9 D$ k  U9 G; p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; U  ]  q/ C3 u! I
  658. //          {4 r( F% q( I; x, c8 [
  659. //            bitmap.GetPixel(iColumn,iRow,&color);$ _5 N( U7 ]) F" H6 _+ }, t+ Y' P
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 k7 Z/ Z2 i  W8 P, H4 p
  661. //              (BYTE)(255*iColumn/iWidth),. M9 n: _9 c6 H
  662. //              color.GetRed(),+ Y. |: J: L8 H: F5 ^4 Y+ _9 N6 e
  663. //              color.GetGreen(),
    ! \) z* B: y; w$ J( O9 B
  664. //              color.GetBlue()));
    ; k5 z& I  X" d$ j8 s) K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ G! ^" }' u8 t6 X2 Q4 Q% S
  666. //          }
    3 S3 w- W" @; r; e. Q
  667. //        }5 y0 f3 f/ e. E' b! X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + |/ B- {9 K) U5 P3 l0 l
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# G# g# B& B$ R) b  g" Z" J
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");9 J! `0 [2 j  w& b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 Q; Q4 V  W2 t. s/ C: _9 ?
  672.         for(i=0;i<240;i+=8)
    6 M: G3 w+ P$ `* F4 Z* h
  673.         {
    4 c0 E: P; u; O6 K) t0 }7 h
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 e" t! K6 @+ v1 \6 }4 b' |6 y5 K
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);" p5 F; B: ^9 E4 a2 @0 [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  T1 ^/ d% Q) V% D
  677.           Sleep(33);
      V4 `, f, s' e* s+ G' O: e
  678.         }
    " T6 H7 I+ v  p5 e9 b
  679.         Sleep(1000);7 F3 ?6 u3 W& c4 Y
  680.         for(i=240;i>0;i-=8)
    , n* V( l( S8 p
  681.         {
    % d9 }8 c3 B( K3 m  V" O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    4 F: @' g, S. A) }$ T8 b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  |; u3 W) r  ^5 h# H0 I9 O
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 `( P# h& e$ Q& L1 S% i. \7 V1 M
  685.           Sleep(33);: E- X* o8 ~; c! C6 j' C
  686.         }+ O/ J+ [7 f5 c5 w' v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' `: o1 k6 }) ]0 W+ _1 Q8 S) {3 D
  688.         dlg->ReleaseDC(pCDC);) L2 ]1 P, u- ~6 _' x  C1 |7 P
  689.         DeleteDC(hdctar);
    8 ^0 P5 x9 ?$ [: P* j, Y5 a4 P
  690.         DeleteDC(hdcsrc);9 g" B2 l. t* z! K3 |: A/ q
  691.         DeleteDC(hdcorg);
    " g# O% i. A* `1 l
  692.       }/ }: @: m6 k& a
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 E% ~" n2 ?/ \* b. j) h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    : \# j# x) z- B: V
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");4 x( u3 l  Q6 F0 |; P
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");0 w, t- z0 T9 ^6 f& I3 Y* S* H* `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' Z+ e* c: o$ C+ M
  698.       if(!Dn.Connected())! H8 e8 A& ~1 f4 J2 A6 n1 `' m0 v" i
  699.       {8 h: c5 L! }6 i+ u; C1 E  o
  700.         dwTotalFiles=1;
    1 S$ }  O; Q  g0 v
  701.         dwDownLoaded=0;
    ; f$ N1 h# t5 U6 a) T
  702.         bSilentStep=TRUE;9 g4 T" x7 b+ V, h6 p
  703.         bCompressed=FALSE;
    % @0 w7 k! t. R5 a" w" h+ D& ^8 G
  704.         strExtLocal.Empty();) j% J7 ^4 e6 [) p) t, h, N
  705.         strFullName="readme.txt";
    ' p- [- K$ v! O1 ]* ?$ }
  706.         dwProgramState=AP_CONNECT;4 J5 w! y1 J0 G! N% M* P3 s8 F8 e1 H
  707.       }5 u8 d- F) u7 H7 H* Z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    , M# \( w: S4 }5 q0 r6 t  A% D
  709.       dwStartUpSteps=2;
    ' d# R1 r! q3 G/ z* T4 K
  710.       break;" L3 X; z$ H1 J( c
  711.     case 2:
    3 {( b6 {0 w4 y. p- E8 {
  712.       {% F+ a* X3 E9 q4 v
  713.         int iEOF;+ U3 S% w# ^4 p/ F
  714.         FILE *fp;
    . g, C/ K8 C& ]/ q- n
  715.         char szString[512];5 }2 u# _; o( ~. J
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: F) ^. h# K- @3 p
  717.         if(fp)
    8 U* x! Q, Q5 O8 |& B
  718.         {8 H' [& s" f+ ?, A( @
  719.           do  ?( B7 C- w8 [; c4 a; P
  720.           {
    + g4 ^9 {( C" X% L+ y
  721.             iEOF=fscanf(fp,"%s",szString);
    # d7 [4 P  e& r; R  w
  722.             if(strlen(szString))
    0 T8 V; B9 Z/ u. J" e
  723.             {
    * e! x" _" p! a0 s9 Q. I4 E+ w
  724.               if(bFirstChar)" D5 a2 }' C- V7 A* [' r- C! b
  725.               {
    # F& J2 F- m# O" }/ O( u
  726.                 bFirstChar=FALSE;4 n% R4 L" H; ~
  727.                 bConnectIsBig5=FALSE;/ F7 ?5 `0 \9 a% \' g6 l
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 B3 l. `& h+ [' a* d0 y
  729.               }# H+ D9 R8 _! P" Q  A% ?
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ a! M. s% A6 i1 q  A. f. [+ R9 |
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    , U. Z( G, c# Z/ _5 g; M# F% F$ y
  732.               dlg->m_ListText.AddString(szString);
    1 `1 r8 {( z# B# \! x8 v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 H0 H; C; d9 m/ u( `' u4 Y
  734.               *szString=0;
    1 h4 S! n- w" ~3 Q  I$ \5 [, d
  735.             }( }- y( Y: d+ x( W$ l3 k7 {' E. O
  736.           } while(iEOF!=EOF);
    5 Y7 Q7 d6 c4 l! p0 f
  737.           fclose(fp);  F( M+ y; M3 |# p* P( t. L$ U4 \
  738.           unlink(".\\DownLoad\\readme.txt");
    - y- `' ?$ Q1 n
  739.           dwStartUpSteps=3;* q! F* m7 R$ o) H& r' l. f
  740.         }  v. k# b. ^$ P. x6 L" J
  741.       }7 }3 Y1 N% b- n: I0 O8 M
  742.       break;* x" _3 ]0 Y$ ~6 K( ^1 V8 h) @
  743.     case 3:
    3 }! o' }1 m) L+ Q9 i
  744.       if(!Dn.Connected())- @6 h7 i0 F( v' D/ {. b
  745.       {
    , E& k4 {+ |* t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    0 ]- Y9 ~* D" B) ]2 o
  747.         dwTotalFiles=1;" M2 H9 c7 p% X$ E9 h) V  W
  748.         dwDownLoaded=0;
    5 \# b0 F8 w# t1 S
  749.         bSilentStep=TRUE;
    1 [% \4 [5 Y) h7 P6 y4 O) e
  750.         bCompressed=FALSE;8 x, [/ s" \+ W0 v7 [$ |3 ~
  751.         strExtLocal.Empty();
    " V8 x# i/ h" q( w# q( N6 [3 h
  752.         strFullName="checkversion.txt";+ b" V/ i# b& y7 P8 S+ U5 p9 k
  753.         dwProgramState=AP_CONNECT;
    4 a& S* w- Q6 b; h' ~+ C
  754.       }
    ; D/ @, E' m) S  O7 i6 L
  755.       dwStartUpSteps=4;
    7 P$ P+ }& }% P- S0 O
  756.       break;
    , S9 L$ `( S, n* c+ j
  757.     case 4:
    + Q4 e: A+ _$ o5 H  h
  758.       {7 t" ]+ H5 \( f
  759.         FILE *fp;! L2 W7 r/ D# V, G: ~
  760.         char szString1[128];7 j$ e  M1 k, j1 h6 P$ z7 F# j
  761.         char szString2[128];
    3 ~4 F8 }" x! h4 L. O5 w4 F* F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 ]/ j/ V. r6 s; B0 `; J
  763.         if(fp)
    3 Y5 ~; u9 f1 Z
  764.         {
    ' U; U  y4 [5 k  v+ p7 i
  765.           fscanf(fp,"%s",szString1);
    7 P/ T& Y& c/ Z- P
  766.           fclose(fp);8 _9 s4 J; C/ r; P
  767.           fCheckVersion=atof(szString1);. x* P$ Q- b! L
  768.           fp=fopen(".\\checkversion.dat","r");
    0 f+ \( ]/ e- N3 t: |; z
  769.           if(fp)
    ' j1 m  O) |; Q' L" z4 s$ u
  770.           {' I; [; {) K& t
  771.             fscanf(fp,"%s",szString2);
    5 w! _9 Z% p7 V6 N2 }7 H* a
  772.             fclose(fp);: s0 L" Z6 T7 s1 s# i  H
  773.             if(atof(szString1)!=atof(szString2))! w4 L1 H0 m+ g0 R6 V/ X- Q0 q; ^
  774.             {
    3 c1 f0 h8 p3 a  I0 @) A% j
  775.               if(!Dn.Connected())
    # n2 I! }* I! ~. x7 s' j& O
  776.               {9 _# e+ d3 ^! B. A. R
  777.                 bFirstUpdate=TRUE;
    . A1 ~4 q9 h% G9 E! d3 Z, a
  778.                 dwTotalFiles=1;  ]3 A2 o" ^0 Y* v$ y
  779.                 dwDownLoaded=0;( Z8 {9 B3 L: m- W$ O  X
  780.                 bSilentStep=FALSE;" u# L: x# ?8 p" Q
  781.                 bCompressed=TRUE;
    % w4 l' ~  h9 T
  782.                 strExtLocal=".\\DownLoad\";
    - j" a# V$ E  D" T& Z) Q$ D
  783.                 strFullName="update.txt";8 I7 h* `" f* ~1 X, B
  784.                 dwProgramState=AP_CONNECT;* {5 u2 L1 W9 w7 y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");- C7 U/ C! k! S" Q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 _7 ~# o# N2 q3 I4 u# O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ) m7 y2 g( |' S1 b2 G/ m0 w4 o
  788. # K( n3 Q0 o$ s- F) j( t- a* t& L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . F5 o' ^" {4 e# M4 h3 h
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 e9 y* D; ]6 ?$ ]* ?3 z9 K
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)* ]9 X( W% c4 \2 q
  792.                 {
    0 ]  X9 c& u# c( j% j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    4 p" E8 y, c' X- l% ]( e% i
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    % `# _, A9 X! V
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    , b0 r' J3 j1 D, A; c# ?8 _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : U6 K" k; G+ e7 T# S

  797.   {% U: v" [2 Y' ~6 j5 b% ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. J" F$ b1 i* e6 @5 k4 k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      z$ ]% V4 R2 l% r' S( l
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# J, I/ v3 V$ _8 |& ^
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % [# C4 E/ a5 A) o: }3 Z1 W3 y% w# {& k
  802.                 }* |$ \' e, n8 \
  803.                 dwStartUpSteps=5;
    1 x) {6 E0 F/ e" `% i1 G: f6 o$ O) t
  804.               }9 t5 j  P2 @1 F: V" [
  805.             }. h5 A: @% @* |, v; `8 a2 O( j
  806.             else# w4 m% O) U% v( k/ [9 K: W
  807.             {
      `* F) m! i8 G* D- A! d
  808.               unlink(".\\DownLoad\\checkversion.txt");: J4 b) L% v" ~9 t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");0 s. D0 k- A! A. c( K2 Z
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");) E3 P% W, a3 Z* s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' a4 p; f# d1 k8 F6 @9 g6 M! ^' d- w; q

  812.   b1 v+ N4 K4 r# B. S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 d/ K; w9 G7 z  {9 u( e% d. `
  814.               dwStartUpSteps=99;& W2 @4 p/ g0 B) y% l
  815.               bFinishUpdated=TRUE;
    % K; B* D, H. [! f
  816.               bCanUpdate=TRUE;
    $ \* k7 g( A3 V, v( Q5 F
  817.             }
    1 n+ E8 c2 K% w4 U2 }) U
  818.           }1 M! f+ H+ m9 N9 B3 d) ~8 J' Y
  819.           else$ W& M8 H, W# I8 Q2 {
  820.           {
    3 z* k4 I9 y3 X
  821.             if(!Dn.Connected())
    % x- ~+ w$ \/ `! P" L% I! L/ j
  822.             {
    2 A" i3 A5 [0 m- d- a6 l% s
  823.               bFirstUpdate=TRUE;
    4 Q8 ]% x- g3 J5 B
  824.               dwTotalFiles=1;
    ) r9 d0 f2 c, Q
  825.               dwDownLoaded=0;" X4 R  i( e7 J6 y
  826.               bSilentStep=FALSE;$ E* o( W/ M' i9 e; q
  827.               bCompressed=TRUE;
    ( @  g+ ~* m9 O. k) a3 R
  828.               strExtLocal=".\\DownLoad\";. L3 t. N0 [0 B
  829.               strFullName="update.txt";
    2 X3 t; Y6 G& ?6 @6 b; \; d. Y
  830.               dwProgramState=AP_CONNECT;
    : z2 v$ R$ c# P! T) L
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( h" o- K$ C2 H8 ?6 j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      x/ q2 s: ^" ?/ ?
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 P6 {9 I9 }  @7 n" k1 t
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- V9 M- I$ W; I2 [
  835.               unlink(".\\DownLoad\\checkversion.txt");
    4 J8 [/ V$ t" {' D" ~2 U% _& S; C/ z, Z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    3 T$ ^' e- B8 f3 d
  837.               {5 }4 g- t7 `! O) Z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    : K8 s( g& S0 l+ O) Q. M( h' |
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    . r: w4 d/ g1 d; J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& d" B, \/ o1 Z0 O0 F
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. P. y3 F) t$ j4 H. ^; h2 w
  842.                 % U7 o% ]/ l1 B4 Y& X3 f" M
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 n7 ^6 |* N4 }, T1 o) L3 Q# H+ \( V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - `5 `/ U$ _& e" o/ n- ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 L. `, J/ a- x4 j& ^
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 K8 U4 H0 t7 {$ S( `0 z
  847.               }  n8 S8 A' i6 S+ a
  848.               dwStartUpSteps=5;' p8 I8 C. ]# E% j1 L
  849.             }3 \2 Q, [) ]; B- o+ e1 ?; [
  850.           }  }1 P  K1 W7 z7 l1 B
  851.         }
    ; U2 O, P/ L9 y( }+ X+ T4 G1 m
  852.         else
    % R# A1 ]/ g0 y  Z7 Y6 R/ _
  853.         {
    * {9 e* E' Q! y
  854.           dwStartUpSteps=3;
    , D0 J# X  n. e9 A+ d& O
  855.         }9 K( N- p  P, H" m7 M1 A
  856.       }2 x  [: m6 X+ e" d! G
  857.       break;
      R7 `+ D6 d& J9 R% l! m6 Y/ k
  858.     case 5:
    ) s* J/ N" Y; B8 j4 u  y. _' x
  859.       {
    , t" k  [( j# s% L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( M0 O) m) l/ q3 Y0 i: s
  861.         {
    5 q: K: c8 t8 T; M; }# c3 m. h
  862.           int opt_overwrite=1;" m, j9 ~8 E; z  S
  863.           int opt_do_extract_withoutpath=0;
    + t- I- }3 H+ O: U# {
  864.           unzFile uf=NULL;
      B# [6 t- d/ L1 k0 D

  865. 7 w! m& }, g# C6 j0 E$ c1 n& j. x2 B
  866.           uf=unzOpen("Wsa.zip");
    , _: h  d/ T- O
  867.           if(uf)) n& P+ ]/ t  E* S  d' C* M
  868.           {
    ! M7 W! b3 S0 z
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);; k, }1 K: [& m( t( y: L
  870.             unzClose(uf);
      _: k: v( T7 B% C$ M' T2 a
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");4 S, U1 ^& _, I9 w; x* v* \
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 F3 U" K' b% ?& ?! [: @" C& z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 d' I6 F6 l: l" s! S# }) z2 i9 `4 b
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % a7 |. g" \1 c2 l
  875.           }
    : q1 L" x& t, ~$ o/ C
  876.           DeleteFile("Wsa.zip" );
    1 v; D1 A1 C- g# A, }
  877.         }
    4 ?2 q$ X. M( H: {& W* P

  878. 7 @5 D. T' n: ~8 d4 X% V
  879.         if(CheckLocalVersion())9 k/ k; u& C$ ^+ r
  880.         {
    + D, E/ x" |2 N' }  G" O0 j1 {
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");% x- [) a. z, E- u
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");$ ?1 m. y1 {; Z! x( v: P
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");4 h2 v# t) L/ D/ B; \6 z# _- z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) x2 S4 d: e* [
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    6 I" s5 \3 Y) ?+ u; l' j
  886.           dwStartUpSteps=99;
    ! o# A. g' m/ n4 k" R: t8 i, R
  887.         }
    8 G! O8 \9 A; B5 G, k6 @' [4 J
  888.         else+ I: d) L. C7 m, @
  889.         {
    $ u1 H! Z! y0 q! ~' u! o3 \
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' |# L9 u& z1 p2 ?0 r1 M
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : n, {- D( i+ p( l& z: t
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");3 d8 z. S) z) G7 E8 S9 G, Y% ]

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

評分

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