找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
% A$ N9 ?1 f# o' ^$ s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! N# z. A( P/ ~8 C) n- W2 C
  2. //
    # ~, A; r! b9 ^8 j' I
  3.   p  O! @  p' X1 F- T. M! r
  4. #include "stdafx.h"
    0 ^# i. b$ J5 W+ V
  5. : o8 U8 k+ ~8 x( g6 K; X
  6. //#define UNICODE
    9 U: u, q8 P' a' P& |. z$ n
  7. //#include <gdiplus.h>, d2 L$ p9 p. H8 N' R9 L
  8. //using namespace Gdiplus;
    * q7 {9 G4 t2 h

  9. + k+ I6 u$ u& G4 y% R
  10. #include "RevApp.h"
    2 S- x2 z" s4 n1 @2 m7 @
  11. #include "RevAppDlg.h"# w* J; O$ o: w6 }% {; n
  12. ' k3 a" G) o0 A' G! G1 b$ h5 r, F
  13. #pragma warning(disable:4786)
    ! j- {" m7 y+ e6 f; i
  14. #include <map>; D5 Y1 F+ Y) D3 P2 j4 M
  15. #include <list>
    1 O$ H: m1 ^7 D
  16. #include <direct.h>. E3 p8 D- N  k! A7 E# V9 ~$ O

  17. ' u/ d; A# U+ N$ B
  18. #ifdef _DEBUG& m0 v! U  a% m( I, P
  19. #define new DEBUG_NEW3 W+ N- b2 e6 Y+ n6 f- g
  20. #undef THIS_FILE; c; c2 m6 y- N
  21. static char THIS_FILE[] = __FILE__;
    $ w7 K* O, q* K' Y9 m
  22. #endif) S- x4 ]. ~# t' g
  23. #include "SkinResDef.h"( V- I  i6 M6 P1 L  p0 W
  24. #include "ChangeBG.h"/ a/ n; m) g- a0 r/ S
  25. #include "AFXINET.H"
    $ }6 w* L: U3 u! b
  26. ) A- `6 u$ ?$ k7 _2 X, B( y$ p- Z
  27. #define TRADITIONAL_CHINESE 0- R1 I* [. ~- B
  28. #define SIMPLIFY_CHINESE 1
    - Q! F  F* B( {* b6 H, F# W. D
  29. #define ENGLISH 20 j; Y6 p6 n9 [4 A1 Z
  30. int m_iLanguage = ENGLISH;
    % Q% O" I2 V% i! ~% q0 o
  31. /////////////////////////////////////////////////////////////////////////////
    2 `% D& j& [: P  U7 G7 H0 t% q
  32. // CRevAppApp$ ^: l# U" Q! ^1 N7 \1 c' w
  33. " H7 j1 W9 q# Q. K" O
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    . r, j! f6 e( T% P0 m+ \1 C9 e. R
  35.         //{{AFX_MSG_MAP(CRevAppApp)7 E8 F# M) F' I7 N
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( L% F5 \& k  g; \
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) f6 q7 k- j6 b. o7 c
  38.         //}}AFX_MSG2 R! y" B6 E5 l* O) v; K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 X8 q! |8 L! a9 x9 m. v
  40. END_MESSAGE_MAP()$ z$ ~5 W) v. X
  41. # i# G$ N) g* n7 U, z) ^
  42. /////////////////////////////////////////////////////////////////////////////
    # i; h; l( Q  Y% _2 k
  43. // CRevAppApp construction
    * F9 y- X5 _: M

  44. * U; k5 N& {/ m- h4 }6 [) F
  45. CRevAppApp::CRevAppApp(); p" }3 x4 ?( a( O
  46. {
    . U2 g2 H1 S+ X7 j9 E
  47.         // TODO: add construction code here,6 S# T3 p1 A* B
  48.         // Place all significant initialization in InitInstance' ]! p. V- L( l& B& K& q( E7 u8 g
  49.   bDisplayIsBig5=FALSE;
    , z! B8 U, C! M, B) c, U2 ?% {9 V
  50.   bRestartUpdater=FALSE;
    " {+ j2 e+ q# w( \) v
  51.   bFinishUpdated=FALSE;
    * W( {5 R+ f7 C/ |! u6 G
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;2 Q1 t! S# H/ [( `* d( b2 H# m
  53.   InitChangeDataBig52GBKS();
    7 V) D3 {+ n) n: B
  54.   InitChangeDataGBKS2Big5();
    , B- Z$ z/ r. s$ k( f/ ^$ i6 q
  55.         //
    ! U4 p7 \" U( A. ]
  56.         bClickRunExe = FALSE;
    6 j  |( k. f  ~
  57.         //, v: N7 p8 E. n5 m& j& M
  58. }
    ! ?0 a$ B3 \2 _' D( b
  59. 6 g( C* x' v5 p5 u
  60. CRevAppApp::~CRevAppApp()
    ! q( {/ o0 O2 `1 ~/ `/ t8 g
  61. {
    0 @( \" E" X8 f
  62.         // TODO: add construction code here,  k) |' U8 w5 U8 F
  63.         // Place all significant initialization in InitInstance
    8 s  t, B- C/ t
  64.   EndChangeData();" P' Q+ s0 m  V# D8 |
  65. }
    ( {: U$ [1 K2 k" d" J

  66.   a3 ^) r  y7 M. s2 e6 u
  67. ////////////////////////////////////////////////////////////////////////////// @# E1 j0 }6 e6 g9 T& n: v9 p
  68. // The one and only CRevAppApp object; g; _: T$ d, [% [2 K$ j# H

  69. / P) v( Q6 N: i$ X
  70. CRevAppApp theApp;+ h6 P: d2 R% `: Y) N7 R
  71. + l: }% m! @+ R  `: Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)* v4 G3 F. @( R% o. S) C5 m. r' G2 J
  73. {
    % o$ P. o& R, u- z5 ^0 k, e3 k
  74.   int iEOF=0;( o$ ~, F* j0 h1 x5 n& O# K
  75.   char szTempName[MAX_PATH];
    5 M# L7 A2 ]  [; g
  76.   *szFileName=0;* W4 L3 ?, a- s: B8 I( K
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! [" W' R) d9 P' |( h" I
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')% D  D( Y! _& M, a
  79.   {
    ) S, J, y9 e* g
  80.     strcpy(szFileName,&szTempName[1]);
      x; }! T6 x) ~5 V8 U2 f+ l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    5 [1 B; b9 z7 |7 j( P% k
  82.     {
    1 I. a! A* S  F0 c" x
  83.       iEOF=fscanf(fp,"%s",szTempName);7 P7 G& ?8 n6 O# |9 [0 R0 k+ n
  84.       strcat(szFileName," ");( N( |. T4 m9 Y* [; i" C: i$ x8 B
  85.       strcat(szFileName,szTempName);
    ! y/ ?' |+ Z# [* V+ Y5 Y
  86.     }
    $ N" L3 K/ z! h/ j5 }0 j
  87.     if(strlen(szFileName)>=1)* l0 Q" ?- @7 s% \) }
  88.     {
    + `8 S+ @% D( i/ u" w, K) V( l% d' t
  89.       szFileName[strlen(szFileName)-1]=0;
    1 K( w" N( U. \" J5 j7 B
  90.     }" j6 P* f9 o' c
  91.   }
    , C4 T" i$ B0 a
  92.   return szFileName;" {$ r' n) N! n  K; V" o) Y1 q
  93. }
    ) \# i/ b, g2 ?/ R' _" N

  94. 9 [; {. B9 X) U/ _# U* [$ ?& E
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 T- u. ~! u6 s$ d1 G; i! b
  96. {
    7 h7 }- ]6 i% ]2 a/ |
  97.   FILE *fp;
    - f6 X9 a; Q& h: k: u9 J) g
  98.   char *key=NULL;+ T; {- F, Q/ Z
  99.   char version[MAX_PATH];
    & l0 v6 u* j( [) @9 C' }
  100.   LPUPDATEFILE file,olds;- z& Y. I& ?& p0 Q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 o2 `* J2 p1 B

  102. ! f8 s# c- `) D3 }
  103.   UpdateList.clear();# G5 p( G4 M+ K# M" X  i
  104.   UpdateFile.clear();
    " Z' T+ Q/ {4 X
  105.   if(GetFileAttributes(filename)==-1) return false;' `9 b8 [8 b5 U1 H& v
  106.   if(!(fp=fopen(filename,"r"))) return false;
      K, V/ U! ~# G5 I- ^( U0 y
  107.   fscanf(fp,"%s",version);3 C4 T; a0 [: V- i( Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }2 x2 X$ ]7 {0 }1 d! N
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 T5 I$ [* Z7 O4 i
  110.   {2 w( X7 J1 b8 q. a5 v$ C! b9 d1 n
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 I4 I5 M1 Y3 g% O/ R+ j$ Y
  112.     fscanf(fp,"%s",file->path);2 {1 G; ?! f5 F' z* h; ]
  113.     ReadFileNames(fp,file->file);
    " M! p) G8 ^. i" j! y
  114.     strcpy(file->full,".");
    ! N$ v# \$ V1 x8 W) r' a& M
  115.     strcat(file->full,file->path);7 w9 V9 z. n( h; u8 y+ l7 Q
  116.     strcat(file->full,file->file);6 }! A4 W, |( a7 V/ ?" P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())9 Q6 n; s6 W* Y0 L
  118.     {
    1 r9 g; T8 x) P
  119.       file->vers=(float)atof(version);
    6 \& B+ f1 a' Q2 i
  120.       UpdateList.push_back(file->full);
    ; K3 B. c2 k6 \$ j3 E. O8 X, \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 I6 E% H$ H9 h, L9 D2 Z+ U5 b
  122.     }2 `, e* Y; f* F
  123.     else
    & q( a: y( r6 P1 R  n
  124.     {
    ) i) o9 h4 ]) t5 [0 `1 U% N' D
  125.       olds=(*p).second;# r  U' s( n' [  n, x
  126.       if(olds->vers<(float)atof(version))5 w3 O8 A' A* {! L4 W9 b# X
  127.       {; @# v( P" y) X+ M2 c- h
  128.         olds->vers=(float)atof(version);/ p4 T( x, C$ ~9 W- \
  129.       }
    ) i+ o1 v# t8 O" f; K
  130.       free(file);* L+ y2 w$ w. f8 }# }
  131.     }
    ) u. g$ W. V3 y1 b0 r
  132.   }
    1 R% ~. a2 Z2 U2 i( O
  133.   fclose(fp);
    , ^1 r3 D  ^, X8 e
  134.   return true;
    ) i8 {  q, V1 r! V
  135. }- f, @8 I+ K+ ?' X" u: H/ E

  136. ! A+ N. _2 k. P- ^
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! b6 u% f# X# T
  138. {+ x3 P$ L. v1 a
  139.   TCHAR  szFull[MAX_PATH];
    ; K( d" m! ~+ C1 V2 F
  140.   TCHAR *token,*inter;
    1 [+ F4 T, s6 C' o
  141.   *szPath=0;% J& Y, x* S) j( p
  142.   strcpy(szFull,szFullPath);
    . s  W" U. t( @1 Z- C; I9 u" {% @
  143.   token=strtok(szFull,"\\/");# c: q' m( C" ^: O6 s5 U* [
  144.   inter=token;7 k( ]. m# C, D3 v& D* o8 a1 Z
  145.   while(token=strtok(NULL,"\\/"))
    * f8 y6 m  s  w
  146.   {# q8 g$ P- J" G; f: s  r7 Y% n' f
  147.     strcat(szPath,inter);8 u1 E3 y+ P- `& M4 Y7 o
  148.     strcat(szPath,"\");: V! O) A/ X2 [! _6 k9 q$ M- _
  149.     inter=token;2 V4 s# C6 P2 x! y  P' q
  150.   }
    - t. X& ^$ A2 F% p- M2 Y& O
  151.   return strlen(szPath);
    " L; e: V: ^* N  ]! Y
  152. }
    ! F$ |9 v" {! I; p0 H; ]

  153. 6 \( ?. F7 b8 s: O  X5 ~9 \4 G
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)9 X" R% G3 Y$ b( X
  155. {6 Y$ ?  z* i6 q: A, ^
  156.   DWORD attrib=GetFileAttributes(Target);+ E0 k1 i. S1 D8 z6 Z
  157.   if(attrib!=-1)0 M, r. b; u& S+ B" C3 m
  158.   {- [7 ?( S* F: v+ q7 q& M# y* _8 x
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 K) W+ @9 {" K" l4 `7 T" }
  160.     {
    2 z) _- u9 e5 `0 }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. ~" d% {1 I( f/ W5 q6 c5 f
  162.       SetFileAttributes(Target,attrib);
    . D- d: w+ j: l: z1 K
  163.     }1 j* ?4 Q0 V0 ^* p( q( w
  164.   }, Y) x% S$ c$ V7 ?9 Y) H
  165.   CopyFile(Source,Target,Erase);) Z, h" }0 p! s
  166. }
    # k" @! M* X; ~/ `0 p+ t- w
  167. 6 o5 r9 j" w* D4 x$ o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" b4 ^) X0 V/ v
  169. {' T; W2 a5 q* y8 O& x. i; E
  170.      FILE *fp;
    + f6 b1 y# H) H/ s3 f; n
  171.      char  szBuffer[8192];
    8 y* E, o9 Q: F* O+ C" E
  172.   va_list  argptr;& Z8 `# L) n" D# `$ c" }( ?3 x: {

  173. 6 c  v7 V$ Z! ?3 g) V
  174.         va_start(argptr,message);
    - z$ @$ F5 b/ z5 U' ^2 @* d; X7 C
  175.         vsprintf(szBuffer,message,argptr);
    ( }$ T2 e& h1 j, [" ^& R4 y5 S
  176.         va_end(argptr);4 q* p* U( k3 l# _6 M
  177.   fp=fopen(FileName,"a");/ T" v2 _; [& t, X# O7 F
  178.   if(fp)
    ; Z2 n+ F5 g/ C" k' G
  179.   {+ _1 Z! G$ L) a8 d6 |7 d
  180.     fprintf(fp,szBuffer);
    % Q$ G  \9 I6 p  v' w
  181.     fclose(fp);/ i% z+ I2 |. e/ Y
  182.           _flushall();. Y) p" f5 ~* m1 f
  183.   }* M& k0 E6 P# Z# R  |* |/ L
  184. }
    8 o/ B" b1 u: }  O& ], C8 U6 ^

  185. * Y; P9 X  }1 E1 T. C$ k
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 \: a  h1 ]1 i1 D
  187. {
    * }" i  |$ [1 Y6 _
  188.      FILE *fp;) g. P* k" J  ^
  189.     DWORD  attrib;4 H% H& A: R8 B' @# h
  190.   attrib=GetFileAttributes(FileName);  u2 T+ A4 I$ Z( z4 X5 H1 K
  191.   if(attrib!=-1): N  v% |1 `; o; ^
  192.   {$ g3 Z& w! x+ y# \. l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 j' \* `! ~+ M
  194.     if(!SetFileAttributes(FileName,attrib))0 k% s2 [; i5 z* P7 I5 w) {" T) `2 N
  195.     {
    ( M" }. j2 y; ~3 R; G! U
  196.       return FALSE;5 k" i, ~; m$ |3 {/ I7 x
  197.     }
    ) `, T# w/ b. ]. ?- f( l$ B8 b5 _& \
  198.   }$ ~% w, n; N! L8 U; R
  199.   fp=fopen(FileName,"wb");
    # E8 `2 X8 y; W6 Y. [
  200.   if(fp)
    : M2 Z0 V0 v: K' Y# J
  201.   {" V3 N* ~$ G6 r) ?
  202.     fclose(fp);
    0 T, w" q( M5 t) q4 f* m/ l) r& C
  203.   }2 y; K. z3 ^/ g+ Z
  204.   return TRUE;
    : ~# x% {1 O3 k1 g8 I
  205. }4 @- {' ?8 E! J- d( W' z' |

  206. - P5 [1 I! ]( F6 R
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    2 W; V+ ~! A0 ^9 Q5 h7 q7 {) o
  208. {6 s. b# S0 ?0 ?% O: `- I
  209.   char filename[MAX_PATH];/ U* B8 F4 Q" j5 Y7 U  @
  210.   LPUPDATEFILE file,olds;
      X8 y1 f) j6 Z1 d
  211.   std::map<int,CString>::iterator i;
    # g8 p  }4 F4 G# s( C6 @" |
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# b' n; i7 |. p  o8 j, V
  213.   std::list<CString>::iterator l;
      ]- E9 o; ~; p2 S. @3 V

  214. $ r6 u5 H" i- \% {' M3 l
  215.   if(bFirstUpdate)
    % z5 V7 n: i- v- B  j5 T4 l* z* k
  216.   {
    3 S$ [: E' V4 J' i  g% s2 N! k4 m4 s7 o
  217.     dwCurrFile=0;
    9 w( Y* L9 d) K9 Y; Y
  218.     bFirstUpdate=FALSE;% {; g' n$ l  r. L' d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 r% d7 F! ?2 S# C) H
  220.     {6 D9 l( Y1 @2 i% ?& e% y! M
  221.       dwTotalFiles=UpdateLocal.size();* L) U7 X& i* S
  222.       dwDownLoaded=0;" H" I# s$ y$ }
  223.       bSilentStep=FALSE;
    & S  P1 ^6 A" a$ ?( U7 M3 |
  224.       bCompressed=TRUE;
    0 |7 s+ R# [, d! [9 _- z
  225.       strExtLocal.Empty();. b* H3 [" A+ X% z1 o4 x
  226.       strFullName=(*i).second;  \4 U/ a  W- W& X$ T- u
  227.       dwProgramState=AP_CONNECT;
    ) w' C1 C* h) e. g
  228.       return TRUE;
      \! A& W0 O! H7 a1 [% z1 `  x
  229.     }
    7 E, Y# [: X2 J+ z% q+ B9 z: M, D$ f* l
  230.   }
    + W5 c" O8 ~2 [" b" A2 A
  231.   else if(bRestartUpdater==FALSE)
    ( z$ n  {, _6 e0 n- m
  232.   {
    . w2 a9 h3 B1 x) ^& f
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " Z( w/ H9 v. }7 \2 S& {* O, n
  234.     {
    . P% t/ J, ]0 ~4 E" N' G7 ^
  235.       file=(*p).second;  c8 y! ~8 t% x; B9 F4 G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 B& @9 [8 ?. J5 S1 f
  237.       {; N! s& n( d  F9 V* f7 J
  238.         olds=(*p).second;5 `) _' m9 m* C
  239.         olds->vers=file->vers;! t7 D( a8 @; e' x3 k
  240.       }
    % {7 _/ g& V" n# w5 z1 Q
  241.       else
    : i  A6 n% h) ^- a4 R- Z9 Y7 O
  242.       {
    % i* F8 f' r& C8 V' M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 B/ Q' \  x  m1 @
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    1 ]: m# `# t9 X4 x0 f9 C
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
      r$ E* I% }: t. U9 J4 l
  246.       }
    , a9 `" h* E: K1 r. {
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ' c  T$ b: K9 ^6 @& U1 D
  248.       sprintf(filename,"(%s)",file->file);
    / z5 u. q) }  E0 V
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ p! M0 I  F. j* B$ A; @( j$ E. |# m# j
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }* o( v- B0 i4 ?- H  V% c4 ^- G: J% t
  251.     }
    4 j) |& h( z) e; L+ y; k0 A6 k* }
  252.     dwCurrFile++;
    ( W+ G* ^$ _+ g) `5 I* |
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; u" m  ~& z) M! ?
  254.     {
    / n  g. j' |; f3 l' _$ d
  255.       bSilentStep=FALSE;
    $ F6 z7 w/ T- D7 P9 G
  256.       bCompressed=TRUE;9 h: M8 w$ S/ e
  257.       strExtLocal.Empty();
      P! |9 e7 [9 f( N; X4 f
  258.       strFullName=(*i).second;
    ' |$ n. h) e+ n8 ^
  259.       dwProgramState=AP_CONNECT;
    6 o3 j5 _0 k' ]* w
  260.       return TRUE;& M9 h) u" q! b' z
  261.     }
    3 ^! U" u& s2 b" x
  262.     if(!bRestartUpdater)
    & q3 T/ p9 T) ]
  263.     {
    2 n6 F8 A- T$ _" X! q1 |% w
  264.       int iCurrSize,iFileSize;- S: Q+ w- o5 Y6 h- Z7 l/ l. I+ ~: e
  265.       iCurrSize=0;
    ; F0 v. M0 S: e) B- b1 U
  266.       iFileSize=UpdateList2.size();2 x/ B/ \3 c& i9 s( b) @( S, y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! G0 [! h2 Q6 `9 V0 q. S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 ^2 V/ R3 K. F
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    1 n$ ~& E5 v9 h" |8 h4 A) S
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. j* T  [5 J. T8 p  N! Z
  271.       Fclearf(".\\update.dat");
    + C. [7 \' m, D3 l8 P& u
  272.       Fprintf(".\\update.dat","Bloodyf\n");1 j8 `' K5 K% q1 O- M  ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* [5 d$ F& a: T  ^  ?# K
  274.       {
    5 d3 n% a" _6 l% [) N' a: a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) f. F0 i0 x( a# C
  276.         {8 d' g$ p; {! Z1 x( z
  277.           file=(*p).second;
    / I- X3 s7 v! e
  278.           sprintf(filename,"(%s)",file->file);" j! L0 F; G2 I) Z- U  |# v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ Z& k4 P: I7 m. g4 C; _
  280.           iCurrSize++;9 D5 B5 y; R& @7 s  i4 I- i* @
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    " K9 b: J! `4 T4 A$ C- x3 D) k  ^
  282.         }& c7 n, F4 R# L3 n. R
  283.       }- M$ v$ K6 _9 i% ?, A
  284.       unlink(".\\update.txt");3 X* P  A' l4 Q2 ?, h
  285.       unlink(".\\update.tmp");
    ; u5 b% f$ ~2 `
  286.       Fclearf(".\\checkversion.dat");
    ) @7 `4 A4 o+ p" o9 p
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    * n9 }* c% n. c% z$ Y0 R: W
  288.       if(UpdateLocal.size())
    . S8 L! H! w; E' F
  289.       {
    9 ]; ^2 L- H6 M7 K9 k& X
  290.         UpdateLocal.clear();# T% e0 i$ l; [( Y* B: I
  291.       }
    9 c" X# |5 @2 n9 t3 q
  292.       if(UpdateFile3.size())
    5 Q( ?  ]' B" G/ B
  293.       {: R, M$ r& e0 U# c: W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & Z" J$ F- w8 F0 y
  295.         {: h) V& Z' D/ U2 e) m8 j1 |
  296.           file=(*p).second;
    7 [# H) \' q( }. b$ N
  297.           free(file);' d3 j# M7 K2 p* p1 i) E, y
  298.         }
      q( \' k. A! X; S5 [; |5 I
  299.         UpdateFile3.clear();
    7 k+ ?# F! Y8 m- D% _
  300.         UpdateList3.clear();) `$ @9 R( ]9 d
  301.       }
    & X5 O; d( x3 `% A6 P/ p
  302.       if(UpdateFile2.size())3 _+ e* ~  b$ j6 I( ^  r
  303.       {
    " P$ x2 x1 n) N2 B+ M+ L% m4 h
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 \" t) r; U* G( d
  305.         {: B) m1 ~7 R* v, s
  306.           file=(*p).second;
    ' ~! l/ N8 s! ?5 Z0 y) Z/ W
  307.           free(file);
    3 w4 _8 J8 e! s
  308.         }
    % m9 s4 I1 l' E
  309.         UpdateFile2.clear();/ x+ q1 M" S# @8 ~5 b6 D
  310.         UpdateList2.clear();. `6 E1 p  H  S# `: y7 k
  311.       }4 Q' W: g6 F5 v( A8 G9 }
  312.       if(UpdateFile1.size())
    . _% F$ d9 a4 O/ T1 C  J& m
  313.       {
    - Y+ t0 n$ _! X2 O$ E2 Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + V7 |" q, N5 e
  315.         {* d! F! T- \, Z
  316.           file=(*p).second;8 V1 K5 k4 f: E6 c3 a& L/ I! u  A7 w4 c
  317.           free(file);' k8 N& c: L4 ~- y, S7 q
  318.         }6 c% D3 k# M3 }1 a5 @3 x& v
  319.         UpdateFile1.clear();$ P3 a  ^6 `! Z& i, I: x: X, f
  320.         UpdateList1.clear();
    $ n2 ]+ T2 Z! _' d8 ?' H' }. _. i& u5 }
  321.       }
    - i- W. D# [) @8 R- }0 K" l2 m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & G5 I! J( G  ?# ]) h
  323.     }; d' k3 a  X" ~& K4 h1 o" W% v
  324.   }( `" ~/ J: B1 f/ B  w' ?+ l, y
  325.   return FALSE;# |' o. J# N' u! k) ?
  326. }
    9 ^* n4 k# o6 C

  327.   Y; i5 M; I" i, O; k, h
  328. void CRevAppApp::ClearAll(void)% i1 H5 p3 a! A1 `
  329. {
    9 ?, N, S( I3 D. N9 ~' E
  330.   LPUPDATEFILE file;
    3 a& a! T1 x/ u: {* Q7 B
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; T0 a  ~1 E7 s9 j( M/ u$ V

  332. 7 q- a5 b8 r, h& p( ?( T
  333.   if(UpdateLocal.size())
    " i- T) w8 x1 i* O7 |
  334.   {
    % i$ p, }! ^0 B, h) I4 Q
  335.     UpdateLocal.clear();
    # J9 e8 b% m* Q' I: L
  336.   }
    $ g# ^1 C/ `$ C  B
  337.   if(UpdateFile3.size())) D2 ~. w# U$ S+ ^# B$ i
  338.   {
    3 `4 p$ o7 J8 I/ E9 Z% g! P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % P1 w' h3 V. j3 U% O# t, r
  340.     {
    7 n7 \0 ^* E! ~" J( G0 t/ b0 W
  341.       file=(*p).second;5 ~7 ^# v  x1 J& i( @% y% w8 E
  342.       free(file);, @7 W/ u5 C8 g; `7 q$ z
  343.     }  H+ M9 q" c, @$ w, h2 P
  344.     UpdateFile3.clear();  C0 |4 H$ u% n1 q' }+ G% l6 Z
  345.     UpdateList3.clear();
    . B' l6 E( f  i  H# H2 Z
  346.   }0 _; Z+ [  X+ {. I# [( l8 G; [
  347.   if(UpdateFile2.size())
    2 u) D  \( n, |6 W4 u$ w% p
  348.   {9 G9 Q  P" f0 ?# F+ ~8 |
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), f. O; E6 i% p* l  y! H
  350.     {+ j6 a& k, |6 J3 t0 U
  351.       file=(*p).second;
    9 m5 e$ I" b4 i6 c% U( v, A
  352.       free(file);3 Z) Y; F" x6 V& p4 R. y7 `
  353.     }. ^: V8 O; w; v/ ~4 M
  354.     UpdateFile2.clear();
    5 T- B! t+ H. w3 L8 D* p
  355.     UpdateList2.clear();% z4 J% K+ I2 W
  356.   }1 f3 t7 ~- p7 Y" _: _- v, C
  357.   if(UpdateFile1.size())
    - |- V) m: k, y6 i" B2 Z
  358.   {9 L: [+ B9 H: f+ s  c" T- L
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      z( b0 w) l$ l* V
  360.     {
    # b& j% L% f- X& [
  361.       file=(*p).second;* x  v2 n" w- q
  362.       free(file);" ]7 ^. [$ z  I( \* @( t6 m* ^5 g! p; P
  363.     }$ J! r3 H1 g7 I! z( C+ O
  364.     UpdateFile1.clear();
    , g/ x: }' ?9 F1 N) L8 y
  365.     UpdateList1.clear();- |$ s* X1 B0 d+ j) T
  366.   }
      @1 `- Z/ p) x; @
  367. }  7 [7 S9 H6 ?6 s# x
  368.   # U+ ^% C2 k. L" [4 P9 n
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 Q6 f" Y  N0 E6 X8 [$ m1 Z; i
  370. {
    + T0 ]6 M0 z$ @$ {+ y3 x
  371.   int c;3 ^1 h- g2 A/ k& k' N, r
  372.   LPUPDATEFILE file1,file2;( j, e. M" {/ U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;7 H% B  E4 K) ?: n2 k
  374.   std::list<CString>::iterator l;
    ! K# ^3 m* `6 d: @7 W. l" t1 N
  375. * B  v8 |. x0 L* n0 r
  376.   UpdateLocal.clear();9 y0 s9 @" t0 Y7 Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 ~1 {. _. v4 O" P4 d8 {, i9 M/ S
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);8 K- m! }8 l% A; q! a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ S3 a# G/ S: n, m; r/ Z1 s7 r
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 W7 U  [5 W5 H7 m; ?/ J+ b7 Y" z' V# a
  381.   if(UpdateFile3.size())9 I) g, l/ \5 d5 Z; S
  382.   {
    , \- d, ~9 j" r4 z1 T5 O+ I) c
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)* ?8 L8 I$ s( S- r- O
  384.     {! f% G& s: z4 {! e1 W/ y3 Z* |
  385.       file2=(LPUPDATEFILE)(*i).second;5 Y5 n6 P/ T. u, P+ S0 v
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 o, p, Q: s( u
  387.       {* k  T) t$ [: H: S
  388.         file1=(LPUPDATEFILE)(*p).second;8 n1 _8 N$ G5 [& U, h
  389.         file1->vers=file2->vers;
    & z0 F- ~6 ~0 b! {
  390.       }- D1 |9 i5 s% H0 @" P; N
  391.       else9 \# ^' l$ X- {/ ?
  392.       {6 }" u- J( G9 s- `* ]& ~+ w
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ t: |$ j$ w5 G: x. o
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ( n! k! K! j6 Q* `* E6 U
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 N$ l5 k: M) a. ~$ c; v; l
  396.       }! n- e  P/ Z+ R! c" ?
  397.     }& i; Q, l6 S+ d9 Z
  398.   }, r4 ?& L2 a* |6 Q8 H
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)1 h- d; S- v* b; |3 M
  400.   {
    ) K0 z; }) w* P+ t+ f8 [7 j, N. ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    . ^2 Y1 [/ F& w! {5 P* J- O
  402.     {
    . v% r& h' B. g4 J
  403.       file2=(LPUPDATEFILE)(*i).second;
    8 g% ^! n3 D& |$ K
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 b& ^8 J5 U+ ], w
  405.       {
    : D0 ^; O: f* r8 M+ G
  406.         file1=(LPUPDATEFILE)(*p).second;7 _0 T+ S) G$ J" G# W6 Z
  407.         if(file1->vers!=file2->vers), v+ x& L4 }! N1 I* F' f
  408.         {
    " n  j& t' R$ y$ @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! {" T9 X0 e' i- b" o& K* E& `  D5 m
  410.           c++;
    - q# S6 J0 x9 i2 p$ Z! J* Z
  411.         }
    $ v2 N3 N4 J, s; B+ {9 ?
  412.       }
    # e6 b' K* w$ c+ Y8 P* |! Z. }5 ?
  413.       else
    ) h; x: H5 c* f1 d( `
  414.       {
    2 s: ~- \8 ~2 n5 w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : U& g3 X4 q! a1 k$ H5 }" S
  416.         c++;% r; b" p* ?* Z2 R5 V1 i
  417.       }9 ?) A: p+ v4 ~
  418.     }& W2 j5 h+ _2 R% z: h# A
  419.   }
    % `7 S9 H8 L' H( \
  420.   unlink(".\\DownLoad\\update.txt");1 A4 H+ C) G/ U3 L
  421.   if(UpdateLocal.size()) return TRUE;
      R4 p, ~3 L$ \6 t7 y  H3 j+ u
  422.   else                   return FALSE;8 ]+ G2 C, A, q! Y- l6 w' F
  423. }9 D  z1 u3 i  m5 a

  424. 9 f( ]9 O3 E7 Z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"( j; E0 w6 j$ r) e; t- L
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 v* U4 D* M* o7 P+ H
  427. ; F& S  |+ |2 C3 Q. M- r

  428. ) D5 X5 F2 S& [% |

  429. 1 {1 q6 T$ p$ m! S! R& _  a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)0 Q! A* B& N8 q6 V
  431. {- k1 X; i* F  V8 y  Y5 ~
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; S3 k0 J# n6 C
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) D4 T  d1 ?" H3 `+ |
  434.   {4 f4 d3 X8 h; r+ s- W+ z; y
  435.     char szLanguage[50];4 B! ]3 L- v! m/ U+ }$ ~* T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # x$ N! {, u$ f  l+ g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * b3 ^: i' i' w* |2 A. M' ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' J* R7 [0 R; E2 o7 e* N0 W: p) X+ I
  439.     else                                   m_iLanguage=ENGLISH;
    , H- i% `. X0 a% S
  440.     char szRegister[100];
    # N& Y2 m4 ?% w# G$ E2 j1 Q. K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % m; X' L- r8 h  J4 [* a
  442.     strRegsName=szRegister;
    . j* ^9 k" l$ z6 n& X
  443.     char szPatchURL[100];4 F/ E' E3 Q; X+ C
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 q9 m7 L7 J4 ]; u4 D- i$ ~
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# |5 Q  Z1 o1 l' s
  446.   }
    7 y+ Q2 ]; x, b% H% G! k
  447.   else
    7 ?( V5 g: X# @8 v1 x- x
  448.   {+ c, o' x- H( |' ?3 i) ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 G4 a5 D! r- e# u  G! s
  450.     strRegsName=DEFAULT_REG_URL;/ Q5 h% ]. v# b, l4 m
  451.   }
      y2 k! r" c. D+ W$ N8 }
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 Q5 g5 |6 b! p8 B
  453.   {
    # b; \) x' `; n2 h; b+ Y
  454.     char szIP[50];
    7 G9 B6 E) ~; a$ j  a" u
  455.     char szDIR[300];
    8 ?0 m  L' N& n* Z3 e- u; ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% h1 ]2 [6 K" [0 Y2 d
  457.     {
    9 }# m1 L( c5 ^  T- u$ |0 r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");+ S* Q9 B0 m4 G0 p. U! F" d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");+ o' g5 I. \: k1 W
  460.       strHostName=szIP;( c3 B1 ?; N7 V2 h0 m1 B' F
  461.       strHostPath.Format("/%s",szDIR);$ t1 W' q, T5 F6 ?6 }: l
  462.     }
    , o9 v6 c: o; e! }! v  Y
  463.     else  W' z, a' g7 C/ z; Z* K* a9 B
  464.     {
    " |" O6 D1 ]) g& M2 b
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % g2 U2 m+ u, K' c' z/ z: I2 y
  466.       {
    / T/ y) G' b( K0 [9 A
  467.         char szLanguage[50];9 z' G( D( i' p8 E4 ?" y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 a& b& a7 h$ l" m& B* a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " h' q( j( L0 r7 n
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ k' ?# c$ A1 ^5 K. e$ m% q1 F
  471.         else                                   m_iLanguage=ENGLISH;
    + [* a; H6 v% e7 f
  472.         char szRegister[100];
    ; R* k$ ?+ Z5 M% B4 ?
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 g% ~+ U& ~5 q, C# |/ \
  474.         strRegsName=szRegister;
    , [3 v. w4 y# T) X0 M* X' p  o
  475.         char szPatchURL[100];& g  l5 n& k3 `4 i- \/ l
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; a( Q& G: A& C- v5 V0 n" f8 ]) r8 U
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* s7 k* B' R! j) Y
  478.       }
    3 @5 a' @' r5 v8 Q% W$ }
  479.       else
    " Z" d" n3 w( m1 B3 c1 R
  480.       {/ h1 ?1 I& \; u* X7 h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * w% ]( D' L( k: E# y" K$ b- V
  482.         strRegsName=DEFAULT_REG_URL;7 R, B+ i: i# J+ n, V% w. N7 [
  483.       }
    4 w. f5 z  V/ j* X$ n
  484.     }
    ' X. s" i6 F# Q/ j6 y
  485.   }: Y) \# f# B% ]; b
  486.   return true;
    # c5 E/ G" N4 s3 o7 y( [
  487. }/ d0 r/ s" {* M0 ^; L- D: R  x
  488. 3 J1 v3 X5 |% G$ Y; ^1 G$ P
  489. #include ".\ZLib\unzip.h"2 Z  B1 t! u, }( T" j
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: {" S" X2 o- ?& o% ^1 z' N$ s
  491. ////////////////////////////////////////////////////////////////////////////// ]8 S% u5 u' |$ T4 ~: H
  492. // CRevAppApp initialization
    . o- z7 ]; e0 a! |3 ], b3 x. D3 }
  493. ; E5 `9 i3 n+ l4 a
  494. BOOL CRevAppApp::InitInstance()9 }; n' S1 o7 [" f
  495. {% Y6 D. A$ a0 \+ `( w% b& m0 V: T$ Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];7 k& b; t2 ~9 T! ]/ M* D% r8 R, ^

  497. 4 p$ c* a7 I, f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 P* r; ^* {% R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))+ X8 h9 P, s% y; B
  500.   {2 j$ J, \( @$ U4 T$ Y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    6 x* o2 i( @9 f$ w3 }) {  D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! L- S, d# g1 O6 T8 }/ W* p$ y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# ~  K" m7 \% Y4 ]+ o8 D/ v' c
  504.     {
    : f4 P2 z1 @; S& x7 k  v
  505.       strcpy(szPath,szPathTarget);; Y; H$ \0 E- [$ c+ ~/ w4 z9 [: A' `+ x
  506.       SetCurrentDirectory(szPath);
    ) f3 q( s7 q& Q8 s' [7 f
  507.     }
    ( c# ?) G5 `, m) |/ _) q. g8 v
  508.   }
    & \6 K- k% M4 e' \2 J, b
  509. #ifdef _DEBUG
    3 |2 a& S0 J" a# n$ o, a
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% r, ^% [3 z0 G
  511. #else
    6 u, ?, A7 n  Z8 b  t- A/ P; H2 V- X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      h9 N/ g# G1 r8 O/ M
  513. #endif
    3 U" d! s) J3 B" z7 }
  514.   {
    $ J, e$ d7 s5 T! Z9 S
  515.     char tempFileName[MAX_PATH];
    ! Y! p% Y  ^2 v- X- r) |" Q
  516.     strcpy(tempFileName,szPathSource);
    ( O2 X4 W5 z( a
  517.     tempFileName[strlen(szPathSource)-12]=0;
    " ]& F8 Z  t( p9 T
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    # w. A& p9 o+ Q: c: g
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* l  o+ W; d# F0 ?' a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 i& p) A2 K* g' `* ^* h
  521.     return TRUE;' p: Q! v. Q0 _$ d$ U
  522.   }
    ! c" Y3 a* n5 G7 x$ \6 `+ f5 j
  523.   // Nuke 0118: Delete run.exe
    ) g8 J# l* U. z% V9 X% q. K
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + u) f) u4 |3 }6 M! p0 q" I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    2 o. x* C2 m/ U+ z6 c; ^2 E
  526.   if(!ReadCfgFile("Config.ini"))& d4 T) ], }  L1 \8 P  X
  527.   {
      o4 K1 @3 C. N# a, I
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : @/ N8 R; S( \9 k7 x6 U+ M, X
  529.     return TRUE;# y; a! j% w# c8 q' f9 \
  530.   }9 T  c8 |( _2 K, ~: `
  531.   HANDLE mutex;$ d0 B8 I$ ^& i5 N& o2 z' j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    6 ], C" g- a% p: ^7 ~+ b; L4 v& q7 V: ?
  533.   {9 ^& G8 C9 ~7 {1 ?% d: m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" @/ K8 Q1 H  p6 m& P9 s: h
  535.     {( L3 p% R( d' I- [% G& F  H
  536.       CloseHandle(mutex);: ~) N- B) ?  H! X7 L  F0 A' g
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! e: y$ b2 _' S# x1 `. ~+ T
  538.       return TRUE;, L- x( V: y! ~9 |- P0 S5 z
  539.     }
    & U" q7 U& l( [! K4 J# Q. _7 Y
  540.   }  
    8 L* t! l! {" X+ w+ `
  541.   CloseHandle(mutex);) n. r! |9 }7 y6 _, l
  542. ( N# k- T; b+ Y  `* ?2 C
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( H0 }; {) a2 h+ B9 I/ L* C4 j
  544. * O4 N0 h) S8 \/ c( c4 j0 G, A0 s
  545.         AfxEnableControlContainer();
    1 [* K) Y2 o/ W  E2 {) d

  546. ( E) }1 V: T4 f( n3 d1 c
  547.   bCanUpdate=FALSE;
    6 F5 L7 l; e$ B) y6 C8 _
  548.   dwStartUpSteps=1;: o, F, T8 ^# K
  549.   dwProgramState=AP_NOTHING;
      d; ~3 g0 P' S0 Y" N/ P. X

  550. & n6 U% {* w: c7 R! b, @5 o  i# E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    8 X( E0 @5 P" E$ k/ Z# a
  552. + _7 p1 {: X4 ]
  553.         // Standard initialization
    : F2 P# o! X5 B( @1 H
  554.         // If you are not using these features and wish to reduce the size
    , X( ], u! y' S1 [1 s) u3 M
  555.         //  of your final executable, you should remove from the following
    ( }  a) R# C& ~- z0 c
  556.         //  the specific initialization routines you do not need.+ I" ^$ Z3 l0 w+ O, z  H9 F

  557. * N. Y' b. @7 t7 Z) a
  558. #ifdef _AFXDLL
    : k; l* ?2 ~9 j. [) w
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: Y# r! M, m4 p8 V
  560. #else
    " ~4 u2 X* M( j& Y: V
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " Q4 ]* S7 r, {% y! v) s
  562. #endif
    ; T8 o: O- C/ Q. ]( b; p$ R& [
  563. 3 ^2 Q3 v$ q1 l* l; n
  564.   dlg=new CRevAppDlg;' i* E$ R2 L8 [$ V
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    0 n7 x& c, V; T) L
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 N9 [$ k8 ?# A  j( {3 \5 h/ l3 ^
  567.   m_pMainWnd=dlg;
    6 v- P% |$ A& B" k. h

  568. 2 |; Z# V0 W- _2 [! X
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 {/ O) }7 I/ A* a

  570. / I' m$ i, m( N, J, U: q5 a
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' D# e4 W$ z- ?! `  u4 b
  572. //  ULONG_PTR gdiplusToken;
    4 c& C2 d" C8 u# N: V, G
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . z0 I! y/ @: P" G, q! [1 w) H* U+ R' H

  574. 0 ^* p, D7 B- S# t
  575. //        CRevAppDlg dlg;/ P) s4 n4 q  e( t
  576. //        int nResponse = dlg.DoModal();+ r3 t& V& E: j+ c
  577. //        if (nResponse == IDOK)
    7 ^0 N+ w& N, K
  578. //        {# S; I2 N+ r0 u
  579. //                // TODO: Place code here to handle when the dialog is; p, @2 J2 C% D4 f: Z$ P& V
  580. //                //  dismissed with OK8 [! @# V& \  p- ?
  581. //        }8 Z" y, v& z  a' @( H! B& B
  582. //        else if (nResponse == IDCANCEL)
    $ Z0 Z, q! x6 {$ h( {, H
  583. //        {6 H  G8 a2 \( z! a' J9 I( R
  584. //                // TODO: Place code here to handle when the dialog is/ ^- d( Q' m5 |! k# m
  585. //                //  dismissed with Cancel
    1 h+ G" x9 M) o# O' C
  586. //        }
    ( @0 ~. A; W$ c/ ^
  587. / P$ D! C% r0 {$ ?# p4 s0 C( t
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    / |2 `( \# P: x9 v
  589.         //  application, rather than start the application's message pump.
    ; ?/ R, A2 P& P  C4 Q1 Z; ]9 W
  590.         return TRUE;
      I# o) @" t% ]2 H% b9 l
  591. }; \2 `- k1 a" B; [4 K0 w3 v7 t

  592. # o$ T1 ^  ?+ U! ]4 Q! F" O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- q! _& q+ E5 [$ _$ U
  594. {
    , {7 g5 |6 [) k
  595.   int i;
    5 r. }( m; O. @6 w: k
  596.   char *szRet;
    8 l, _# `. F1 d

  597. ( J& ^' K/ Q" w
  598.   if(pSource) { itoken=0; sztoken=pSource; }; M4 f2 c3 g8 i$ {; I% i
  599.   if(sztoken)
    . l8 \, X* A" m- |) O$ V
  600.   {/ p& f; G" c' O6 |( Q8 z
  601.     szRet=&sztoken[itoken];1 X3 z+ B# `- _, ^; s- s
  602.     while(sztoken[itoken])
    + K$ b+ o; r- H0 Y7 Z7 W
  603.     {( {& D+ v2 N# r7 A  W& _9 d/ ~2 i' i: s
  604.       for(i=0;i<(int)strlen(token);i++)" b+ e6 a1 [2 k$ ~
  605.       {* J8 [. Q5 M! e4 Q: Y2 F$ e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& z0 X+ l* r7 U
  607.         {
    8 @# s0 M3 T0 N$ s
  608.           sztoken[itoken++]=0;
    3 _8 h; L3 h& M5 V4 o# ~, ?
  609.           sztoken[itoken++]=0;& Q3 L1 r( d4 \" a
  610.           return szRet;
    0 w, w2 E* z5 p% N& x
  611.         }
    5 H5 P! S' B2 c
  612.       }8 B+ }7 G. }1 q3 ~' S
  613.       itoken++;
    * {/ L% E' i3 o6 }( Y! N
  614.     }+ j! N' c/ y$ z- J+ b8 U7 {$ g
  615.   }
    9 J/ p+ a7 Z; W+ {; p" V
  616.   return NULL;
    & |1 N0 |4 l9 ?; U7 O& Y; b8 }. w
  617. }) B& p+ q* {  z, ]' B
  618. ( @% v$ k* E2 R2 s
  619. void ProcessProc(long Total,long Current)
    2 u# S3 c5 n* I5 L$ W$ E
  620. {
    6 Y( l+ D0 n* H+ M
  621.         MSG msg;  a2 b+ S6 P3 i* d- V/ H
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 _+ ^5 s$ B- x5 [! L- {/ I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  ]& G# M$ t2 ~9 L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 I) w7 V& }6 s
  625.         {
    ) I' m, ?' z$ v' Q$ y9 R
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 J1 R  b+ F& a$ f% g
  627.                 {
    ! X: m7 s, T0 ]1 p1 _2 m
  628.                         return;
    , |2 a1 p% N* l# x5 q
  629.                 }
    " \' D; I8 @# a- O* s7 C( P) ?
  630.                 TranslateMessage(&msg);0 }! s3 ?0 M8 R$ S/ D2 t
  631.                 DispatchMessage(&msg);  z  `$ u9 F$ p2 S
  632.         }       
    4 H$ @! r) G" T0 K, e& A4 C
  633. }, I: ~% p: {5 u) N  `, m* i

  634. 7 w; o$ n' }0 ?" H
  635. BOOL bFirstChar=TRUE;
    - O! r* U6 p% Y. ^

  636. / R4 l6 S3 e- S7 v# J
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    9 @  h5 ^. [, F& x2 o7 d) n
  638. {
    2 l+ U& {2 z5 c5 q) F0 l/ o
  639.         // TODO: Add your specialized code here and/or call the base class1 r- g( y/ Z7 ?/ g# V2 l
  640.   switch(dwProgramState), t3 E2 z: T. `- s
  641.   {
    % ~8 ]7 e) D$ d0 ]
  642.   case AP_NOTHING:
    # H5 F* ]# J: U2 i7 M& t& u
  643.     switch(dwStartUpSteps)8 ?0 [) w: N8 C0 r; T3 |
  644.     {; ~) N" C3 {3 p5 S4 j
  645.     case 1:8 M- Z, [8 l1 o* \4 ^1 I" P9 M
  646.       {% [5 }" u# _% M* v, d% n) A
  647.         int i;
    ! d7 b* ]+ \) k: f  r" ^
  648.         CDC *pCDC=dlg->GetDC();. @; q* m) u: Y/ q( Q- I5 ~
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! S0 ^3 j0 y2 \0 I
  650. //        Graphics graphics(hdcwnd);
    2 C" {* P) a; l0 j4 G% @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");; F  X& P' Z6 i. s! b1 k
  652. //        INT iWidth=bitmap.GetWidth();- Y) Z6 K3 {6 D4 L4 P+ e
  653. //        INT iHeight=bitmap.GetHeight();8 N: m! \) o: Z  ^3 u# F$ M4 o/ M6 D
  654. //        Color color,colorTemp;/ v* t: p$ R2 A6 I. Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)9 g+ A' p  o$ N: ~& j. z' \
  656. //        {# T% U/ S7 @" w' s$ |5 n7 @3 q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % F( K' ?" W# Q' ^
  658. //          {
    + ^* N2 I% z$ S$ n  e/ V
  659. //            bitmap.GetPixel(iColumn,iRow,&color);# m! X; k% h1 Q' h
  660. //            colorTemp.SetValue(color.MakeARGB(
    + j4 s; \) k& N% y) U: e
  661. //              (BYTE)(255*iColumn/iWidth),
    # r9 R( Z& ^4 g/ X
  662. //              color.GetRed(),
    1 y; ~" n2 \) E" {; p
  663. //              color.GetGreen(),5 P9 T) u$ |" c9 f. r+ C
  664. //              color.GetBlue()));
    ; w) ]9 Y: P4 n& P3 `) `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    * Z# `6 M7 ?; U/ ^$ u
  666. //          }
    " O3 _1 S6 u: M1 B# e% S
  667. //        }$ E3 U6 p8 F! I# _# g
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 }9 ?8 O7 R5 \2 v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ l" F& X, r" }7 c
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ ^# Q! f9 Q' Z' U8 ?5 A& x2 E) T- O
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ c& Q& i9 g8 `0 L1 ~9 n! W
  672.         for(i=0;i<240;i+=8)2 U; p  \7 h' ~$ A: R+ v) D
  673.         {
    1 Q5 [* F+ z/ N) e0 V* ^0 J0 \
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);: R  S/ B/ y1 {0 O6 E( F4 R- p! j
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: W' u& ]! I. r; j0 f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! X- f" P7 G8 L/ s% {* F
  677.           Sleep(33);
    + V+ _* Z9 G- ?/ T% d6 \
  678.         }& \* p5 X8 Z* B! I8 R- Z9 t4 a" F
  679.         Sleep(1000);3 B% U& K9 z! Y" E8 b
  680.         for(i=240;i>0;i-=8)
    2 Z- v; \" q  g1 E
  681.         {8 _, a4 T1 c, g6 t0 J) j
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  F2 \9 ^' S! H+ F7 \
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " A  P+ i. r0 W
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ' k" F; u" L, t/ t* j8 b! K
  685.           Sleep(33);2 Z: ]% d, |# g& Y  P
  686.         }
    $ ~7 j+ _2 A. K1 `7 n% d
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 ]: i9 z5 e8 D, O
  688.         dlg->ReleaseDC(pCDC);2 T" e' |, T* C; M8 @6 c% y
  689.         DeleteDC(hdctar);% a& B. w, M! N
  690.         DeleteDC(hdcsrc);
    4 o# A; H& X4 b5 z
  691.         DeleteDC(hdcorg);
    % D  `! M- `; `$ t$ p
  692.       }# T* F* f: {& l( `6 v4 q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) p- C7 E" G# m7 K4 i% n8 V
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 b. L5 q* g3 _4 D. t" ^
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 ~3 \! x  s6 Q: A6 a3 v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # r, y: R+ M7 S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! y7 i# H2 q; m' |! c
  698.       if(!Dn.Connected())( |! I) ^2 s1 Q0 ?$ _
  699.       {3 d. C5 w+ p) x
  700.         dwTotalFiles=1;
    ) }& M1 X4 c4 p, J
  701.         dwDownLoaded=0;
    $ p" R- l+ X" {2 b  L1 t3 T
  702.         bSilentStep=TRUE;' H8 f$ o4 x9 A+ h, @- _# {" O
  703.         bCompressed=FALSE;
    ) j1 O- B; d% Y! E* @7 C9 m# `
  704.         strExtLocal.Empty();% |$ F  h- ?/ A  X0 d& @  c" m: W
  705.         strFullName="readme.txt";
    $ E# J. P4 G2 v. ]% V# N
  706.         dwProgramState=AP_CONNECT;
    , T  p: u; D3 q; {4 E5 d
  707.       }
    $ u' M' ^. b+ R7 N5 ?
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; }$ ^; h- p* `! F3 m
  709.       dwStartUpSteps=2;. d) ]  u0 C. x, g5 H$ e& @. ^
  710.       break;
    . W7 m9 R4 d9 d7 [  C( v
  711.     case 2:& ~5 O1 Q: v3 d0 k- a$ `
  712.       {# a0 C$ }4 i: s. ~6 Z1 c" O' t0 M
  713.         int iEOF;
    6 m& p' R7 H8 ^& U& W8 [
  714.         FILE *fp;' i9 a) f6 L& X7 C9 L  G& r
  715.         char szString[512];
    ' ?0 A" m4 w; x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");/ }5 g# I5 V  e1 ]( D
  717.         if(fp)6 `2 Q' u% k, T: K0 X
  718.         {
    + }& e' M* ?* n+ f7 J% A4 t
  719.           do
    , Z! @/ d6 E/ D% ^
  720.           {: n$ w+ k+ r: J& p4 e& M
  721.             iEOF=fscanf(fp,"%s",szString);/ e, j3 C1 I* }) _5 \+ T- q" s
  722.             if(strlen(szString))1 o, b  Q+ P! x; E+ Z3 x
  723.             {2 C" V/ h: j) V! o4 {& i
  724.               if(bFirstChar)
    7 K+ G. R5 J# j( d+ a- v
  725.               {
    2 q7 H! }0 y/ C3 ^7 n1 \9 [2 c1 F
  726.                 bFirstChar=FALSE;& Y5 B! l! u& A( A5 n' h0 `* j$ D
  727.                 bConnectIsBig5=FALSE;
    0 f, i1 Z6 D8 _8 I6 I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  G& f# W# G5 F5 c: L5 j
  729.               }) {; P# r) \1 Q3 I  {4 K
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    " }! H- H1 u4 o3 N# B" O) }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    % b; L7 k: M* m& n$ B
  732.               dlg->m_ListText.AddString(szString);( y  U/ z) S7 u( F- M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Q/ B# G' k4 N1 M: Y
  734.               *szString=0;
    4 e* x& @" p% U" \1 K6 @8 i3 F
  735.             }
    ; f$ t4 G! _4 Y1 F: r1 E; |6 r
  736.           } while(iEOF!=EOF);
    & h, Z: ~: u1 k* o) q; z
  737.           fclose(fp);* n/ L8 {* M, i  |7 B4 k
  738.           unlink(".\\DownLoad\\readme.txt");  u+ S6 n  W9 J
  739.           dwStartUpSteps=3;. F' u! _! k, m/ Y" O+ B3 J
  740.         }% m3 ~  [. k  }7 A
  741.       }1 s4 o% A7 t: ]7 l- w4 c, O
  742.       break;
    ! V1 X4 f& A- I' g1 _6 d  C3 w
  743.     case 3:
    3 L- n8 C7 w  b) t  Z% n4 v
  744.       if(!Dn.Connected())% X3 T7 s1 J( S' f
  745.       {
    / T6 Q7 ^9 y8 v# G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ K( r# j* W9 R' s+ m% M
  747.         dwTotalFiles=1;
    : [" [9 R9 }8 c
  748.         dwDownLoaded=0;
    8 k: c5 m, Y* A( ~
  749.         bSilentStep=TRUE;
    $ f0 `& N8 @' |8 Y! U
  750.         bCompressed=FALSE;
    ) o! L7 P7 [8 ]/ }! j
  751.         strExtLocal.Empty();- E0 m3 W8 D% M
  752.         strFullName="checkversion.txt";: S: ~0 A/ z9 g
  753.         dwProgramState=AP_CONNECT;) J6 f7 S+ f% c+ {
  754.       }  n! _2 T" }5 K' ]. h
  755.       dwStartUpSteps=4;  I( [5 Q% ^, S) P
  756.       break;
    - {* V. \  F) i  z( W
  757.     case 4:! g. c" B( n$ k$ @5 [0 m2 P
  758.       {
    ) Z9 ~' s: |" t) D$ g
  759.         FILE *fp;
    ; N) M+ @1 @1 U$ ^0 ~/ ~4 Q
  760.         char szString1[128];
    4 u( R% j- n/ D
  761.         char szString2[128];
    3 s$ k+ M2 o" j& `0 X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ! x/ B& U; U5 j' v
  763.         if(fp); `( j5 }: S$ e! g
  764.         {' y; f! w5 m9 O2 d! Z
  765.           fscanf(fp,"%s",szString1);
    ! V* l8 r( d/ {
  766.           fclose(fp);
    ; D  R8 Q- `  c! N' P$ a! e7 `$ c1 \
  767.           fCheckVersion=atof(szString1);
    ( a; M6 W- k/ I2 S8 v
  768.           fp=fopen(".\\checkversion.dat","r");7 U2 q8 |- @# y6 x- I
  769.           if(fp)% b/ b1 Z! @' K4 K4 Y& h, |
  770.           {
    8 O3 a/ a) S: k2 w) s0 n& m
  771.             fscanf(fp,"%s",szString2);
    . J! J8 c  j0 _/ D6 n; R
  772.             fclose(fp);
    8 \( @- }; }; F  i8 p9 K* p  z
  773.             if(atof(szString1)!=atof(szString2))- y% |/ S- z( e- z8 r% p
  774.             {
    , ~4 d  N) _; ?$ h
  775.               if(!Dn.Connected())0 S6 v9 a$ W) W! O1 R( g' ?
  776.               {
    - f) y) |# T. u& t' M  t
  777.                 bFirstUpdate=TRUE;
    , W; x) M+ s7 G: ?" [
  778.                 dwTotalFiles=1;
      o' o6 O( Z: i$ X
  779.                 dwDownLoaded=0;
    3 J5 E$ j0 G( R9 t$ |
  780.                 bSilentStep=FALSE;& D' s% ?' R- U$ l3 ]
  781.                 bCompressed=TRUE;
    6 X' H  h8 t1 N: k6 e
  782.                 strExtLocal=".\\DownLoad\";( X( K- b- v# @6 V! q8 z9 ^
  783.                 strFullName="update.txt";$ ?( `0 j9 D3 M- ^! S  l" P1 s
  784.                 dwProgramState=AP_CONNECT;
    & T7 L" ]9 C3 T4 ]# T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 S  s0 l4 \# G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 {" w4 M% ^6 N# Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ [0 Y/ F& K: I2 r( k) L. g
  788. ! |* m# j5 D. x# }3 i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ k/ }+ s3 Q4 B6 b
  790.                 unlink(".\\DownLoad\\checkversion.txt");. e" r" d( J% W& s. V( l7 ?
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 k( ], z% M) `  u3 E  r
  792.                 {
    7 U  Z, Y# ?$ M/ y1 p" ~; Q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( w) w8 P+ f% Q& I. I0 o
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    9 [# J4 Z, W. @6 I  B" R3 v& O8 I; I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ ~( N; ]  m% I, A5 G
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 h  W; H" @0 X& e

  797. 7 v% E9 N. N( R- h/ y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & d% h$ O4 p! x4 E2 ^
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* u" U4 N. z: s0 L6 Z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");" N7 g9 n0 b& u* Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , k3 _3 A6 z( t  x; k
  802.                 }- X8 }  ?: Y! Q2 c
  803.                 dwStartUpSteps=5;1 Y2 D- N1 w0 r7 l6 }2 C
  804.               }- U: v1 N+ k. i) U  O
  805.             }8 {% N+ T. A' C& b& b' ]
  806.             else
    8 p4 I/ Y5 w* }8 G4 O- C
  807.             {
      l& ^3 ^/ @, u  X- g
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; W' V& L9 O' V# t4 n5 ^( ~  r' L
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");/ b1 p9 F4 h7 r5 ^& A' D
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");; n% |  T9 s) G% V1 n8 a
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( a8 [& g. V1 B/ E

  812. - D" e# A$ a: C; I7 m0 `4 ^/ J3 b
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 c$ W& B5 u0 U% e
  814.               dwStartUpSteps=99;
    ' ]& S/ j, r$ {& E
  815.               bFinishUpdated=TRUE;1 _3 z* |! g" A; U4 `3 t
  816.               bCanUpdate=TRUE;
    ! S4 t& H( z) r! y+ v
  817.             }/ F' b; o+ v' e7 |! A/ I( @
  818.           }
    $ t8 L) D) Y' `$ f1 @
  819.           else6 A! n, Z- k( K) M+ N( b
  820.           {
    / ]9 V* ]# G) m' r3 Z
  821.             if(!Dn.Connected())/ m4 ?; d) n  x1 v- ~1 I
  822.             {- D* O* O! Q; Q' b$ H, R, F, L
  823.               bFirstUpdate=TRUE;
    9 |' P/ r& z1 Y9 k) ~1 ^
  824.               dwTotalFiles=1;
    4 B$ E3 Z' s0 b+ z
  825.               dwDownLoaded=0;  Z. c- K3 O+ v7 H
  826.               bSilentStep=FALSE;
    * i2 i. D7 f& x/ V% J" \4 H
  827.               bCompressed=TRUE;% ?* A* Q% W2 r+ p" c! O
  828.               strExtLocal=".\\DownLoad\";
    ( {  O, n& |9 J+ d# b9 t
  829.               strFullName="update.txt";
    " u" ^) S8 z3 c3 \* w- S* x8 Y' P
  830.               dwProgramState=AP_CONNECT;: ~, q- p7 y2 F7 R% M/ A& v
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");2 s/ @+ R  O0 h* |* j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 f$ X; z3 d( L- }# N- ]
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    : a  A' F! M. S9 o/ g: v0 A# w
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! P( U* m/ j$ P2 ~, o( L$ P9 z1 h
  835.               unlink(".\\DownLoad\\checkversion.txt");* G* O( I/ O3 ~5 I8 i- Y8 i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' m2 l' T& P8 w9 ~$ v0 t! F
  837.               {
    / y  R9 U  q( a& K; q/ b! i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 m4 I/ e1 T/ h; A% }: H
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    4 x& [; e" C  p0 _  U$ u
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ _; h3 `2 I# s0 E4 V0 V4 ]6 j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 r* c7 e9 C; _1 k" R" P
  842.                 7 w4 ~  X( l1 f7 `8 P. S2 w6 E
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' x3 ^' o) a2 y* C
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 I. X" \9 D2 ~! _
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");2 `" a5 p& I; Z0 |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( B7 |7 A! K+ E" D+ b
  847.               }
    " N4 A+ A* U" l, m
  848.               dwStartUpSteps=5;
    & c) m. q& s& b" m
  849.             }
    6 @$ D2 m+ d  ?$ e+ ?
  850.           }7 s& ^* g5 d6 F' K8 y# s
  851.         }
    $ o2 K4 c5 k. ~6 @' A' l) Z, I) }4 Q
  852.         else
    ( m) Y4 u6 u# L2 z9 n- S/ g
  853.         {
    5 r$ ]2 ?7 u$ ~! r) _8 v
  854.           dwStartUpSteps=3;, d9 T6 U/ K4 z5 U' `
  855.         }; n/ N# T3 I& z6 r9 ]6 b, ^+ f) P
  856.       }
    7 z" D: U. ~8 K7 t6 e$ @) |% z& ^
  857.       break;
    ( L5 y" q7 F, x5 h( }" F+ F
  858.     case 5:& B' E$ G* S1 T8 J5 @8 h2 }
  859.       {
    5 R) z" n/ o' Y) Y: J7 _1 ]
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    9 q8 _0 L, N) ]/ {4 K+ A9 d! T
  861.         {/ Y4 k& z0 ?) m8 J. I, W( m, C4 p
  862.           int opt_overwrite=1;
    3 {. e' {% {3 {; J& m- O
  863.           int opt_do_extract_withoutpath=0;; p& r/ m5 v/ _3 @. v
  864.           unzFile uf=NULL;
    # V( L9 ]" p$ o) x  p8 U

  865. * K7 l+ d8 a2 \( ^
  866.           uf=unzOpen("Wsa.zip");
    / |1 F# x% Q9 {) h6 a
  867.           if(uf)/ e& ^( h. {; z% x- ^4 T
  868.           {
    ) e4 Z3 `/ r9 v7 o0 u  b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 _4 A; @( |/ c% a+ r+ s4 l
  870.             unzClose(uf);
      ^5 ^* B- x2 @  q+ m
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    5 I, b3 P# V1 |! k; V9 E, L
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");5 K+ Z* J6 f; |, o9 j& Y$ u' N& V
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");, @- i4 E: x7 P. _6 b% Z: w
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; T) f& D$ x( d0 f- |
  875.           }8 r' ]/ c1 E0 p
  876.           DeleteFile("Wsa.zip" );# q( p1 R' Y6 s+ b
  877.         }6 K) N# {' z, v7 S4 ?1 V6 Y0 D
  878. 8 M$ O& A0 u3 P$ l
  879.         if(CheckLocalVersion())$ Q6 t+ W4 E& E# \7 n
  880.         {
    - p5 b# X5 `6 T* h/ \3 ~, E
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ! I( D. g# Q% u/ I9 x0 {
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");: z/ |! D0 F. O2 Q) x9 I3 G% p
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");% b* _: D. ?3 [
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 R. Y" c, B' `! s. T1 e8 Y% z
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);4 O: o4 a2 _* ^- _5 _* [# `/ j6 ^
  886.           dwStartUpSteps=99;4 T( d5 @" G+ O) {- c2 @
  887.         }
    $ L0 s' ]0 m9 ~# d- N/ }
  888.         else" G, [. i7 s4 }4 x7 D
  889.         {
    0 l$ [8 v  y6 O3 V' D: G
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 p+ [/ V& j1 i; O- _4 Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 K3 F0 y- G- v% j+ E
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");& r% S' ?3 [! r1 a- J4 u- Y, B

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-19 13:49

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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