找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
4 D3 I# T7 }" Z
  1. / RevApp.cpp : Defines the class behaviors for the application.3 n- }3 t. x9 w* S: Z
  2. //
    * x  ]# d' Q( f5 }( M8 B

  3. - A- a; N' K" F" ^- |2 }/ ]
  4. #include "stdafx.h"' s7 a& T* K& ?2 o4 A7 }

  5. : d: C! A1 y" s! u+ \  Y0 z
  6. //#define UNICODE3 L+ @; {6 V0 w& q9 R, N
  7. //#include <gdiplus.h>
    & D8 r# B7 H% U( T" |1 H" W
  8. //using namespace Gdiplus;1 y; R* f0 X& ?( {' ?

  9. # Q' y0 V) m* }4 B( u& ]' f
  10. #include "RevApp.h"
    & K! g! L0 Q% Z# Y) @. G
  11. #include "RevAppDlg.h". }1 B$ c# y  ~& K/ {: y
  12. % n- X2 U! t4 S4 K
  13. #pragma warning(disable:4786)6 G$ f7 E# ?. a  B
  14. #include <map>
    % m  J* G7 t$ g/ [# l
  15. #include <list>0 v% `4 _/ e0 r
  16. #include <direct.h>. t! g0 X+ B! ]- Q* \
  17. # N0 t0 g1 _/ {# z
  18. #ifdef _DEBUG( X5 ^# Y% j& D& {8 ~0 T
  19. #define new DEBUG_NEW
    7 |* D0 d" C7 H9 D! h2 P% ^
  20. #undef THIS_FILE
    3 f! K& u2 E5 `( x/ x
  21. static char THIS_FILE[] = __FILE__;
    ) i' F! a" D" Z1 o/ J/ I
  22. #endif
    - j* `/ D* i4 C, Z) D
  23. #include "SkinResDef.h"
    9 f6 }) T% f. r) ], ]+ m- N; ^
  24. #include "ChangeBG.h"
    - v! }1 G2 v" ~
  25. #include "AFXINET.H"* K* ~8 z, U. I- a( y
  26. 3 @+ @2 Z3 h) G% b9 M! S) g+ x% ~
  27. #define TRADITIONAL_CHINESE 0
    , S4 D. r+ c6 I# [; Y  L5 F
  28. #define SIMPLIFY_CHINESE 1
    / w4 }2 K% V3 _2 L9 L9 z
  29. #define ENGLISH 2
    + `9 F- n/ a0 e7 W
  30. int m_iLanguage = ENGLISH;7 \1 M5 O. k5 H5 a; S* i
  31. /////////////////////////////////////////////////////////////////////////////
    7 j+ m9 f: q# }. }% X
  32. // CRevAppApp
    2 b/ T8 c  J$ ?) r: B

  33. / k$ i4 D) u4 h6 h' V
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 `& U' l# \% s, u
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    7 d: k' P  ^9 S* H
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.) p: e1 P+ V8 N( h
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' I( a) Q0 s. u. w. v
  38.         //}}AFX_MSG/ m! m: m' S/ l
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    : J! I% R3 N* ?- _
  40. END_MESSAGE_MAP()
    0 ~; c- v! O6 r2 W! Y& \2 \

  41. & j  V7 H9 z5 N5 v1 M: U
  42. ////////////////////////////////////////////////////////////////////////////// \; x& Y5 v+ h: |7 {
  43. // CRevAppApp construction
    " R+ J' ^4 J+ u' ~2 {
  44. % x. W0 H7 j/ T9 e. G2 o
  45. CRevAppApp::CRevAppApp(): `4 P( }/ H& h  E) v/ l; z
  46. {) k7 ~' }7 L/ T! h+ O1 o
  47.         // TODO: add construction code here,! M( \& c+ a1 @7 Q0 x' V
  48.         // Place all significant initialization in InitInstance
    # N9 N0 C* b7 c" u9 {" |; e9 z
  49.   bDisplayIsBig5=FALSE;
    ! ?4 u0 R5 V; E8 Z0 w
  50.   bRestartUpdater=FALSE;
    ' t3 _2 h, w! y
  51.   bFinishUpdated=FALSE;
    3 l+ I5 Q7 w8 O8 Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! h5 j2 {  D3 h" E* v
  53.   InitChangeDataBig52GBKS();
    9 G# N  F3 B* L0 a+ M) E6 r8 w
  54.   InitChangeDataGBKS2Big5();! i2 n' x2 z! Y& m
  55.         //. h; a* R  u- @2 L: M9 m: \1 q
  56.         bClickRunExe = FALSE;! g4 D0 I$ H1 V) [& T( p
  57.         //, ^5 O1 W% G1 D4 S; R
  58. }8 }; L3 _" A. a, U/ B
  59. ) i, g0 x' A' x: d* _
  60. CRevAppApp::~CRevAppApp(). y9 m8 Q4 {) M$ H, k
  61. {
    : c6 }& N& C; s$ C
  62.         // TODO: add construction code here,
    , n. y% r  B& {5 K/ Q6 b
  63.         // Place all significant initialization in InitInstance
    # J  p& `' d% `( `5 U+ x5 ?
  64.   EndChangeData();, T0 l+ P% }  P& u
  65. }! f9 C6 R+ p& m

  66. % e+ p9 h4 M3 R0 }1 d
  67. /////////////////////////////////////////////////////////////////////////////- ?! @1 L- h; _/ |) K# G# A0 r
  68. // The one and only CRevAppApp object. J) q( _/ U# m4 w* f5 e

  69. ; j' t4 i1 s( n- c
  70. CRevAppApp theApp;
    1 i, `: H9 C; I: o" c" K5 B

  71. 9 P5 J* G9 N* I. _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)& z  D, |5 C: D% l; s- H9 r
  73. {+ a  l9 b4 E* e
  74.   int iEOF=0;. f, a* ^5 M8 M4 x
  75.   char szTempName[MAX_PATH];
    7 k& m' X. D# n& C1 c
  76.   *szFileName=0;9 F  X( D. I+ a# d# D, B
  77.   iEOF=fscanf(fp,"%s",szTempName);& f* y: e0 p2 L& @' h2 y* O1 O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . @! M" d6 ]/ p. i
  79.   {
    & R1 V/ ]' s3 _" U- w! c) h; N" @
  80.     strcpy(szFileName,&szTempName[1]);- _& ]2 j. Z% W% E& T! H
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    4 a! }# h  Z, {6 V1 x- d. @
  82.     {, t, o& L, ~% Z' L. y5 g
  83.       iEOF=fscanf(fp,"%s",szTempName);' U4 @0 s" T/ u8 `5 x- ~2 i7 m$ z; u- ~
  84.       strcat(szFileName," ");, c4 f: {# U8 e! b6 S& T' D
  85.       strcat(szFileName,szTempName);* Z6 u+ f% s2 s* B
  86.     }
    + w4 u1 a6 d0 I
  87.     if(strlen(szFileName)>=1)
    8 f6 m. \2 e& S  h% D2 Z  b0 R
  88.     {
    * `% p; b) w/ U% G" q7 ?* a
  89.       szFileName[strlen(szFileName)-1]=0;5 V: N9 i1 T+ f- u2 |, }- k8 q
  90.     }
    6 [8 q! m, c/ \" I& z
  91.   }
    ' p0 \5 ?* S# u8 E0 ]
  92.   return szFileName;
    5 {  d# j; X  ?- U$ a: z1 N' J
  93. }! X9 l; D* e, R% _3 x; O  g* C
  94. ) Y0 H, a, y; R$ j; f3 s
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)0 R1 o) d7 G4 a) W4 C
  96. {
    5 q, O  R/ ?9 ~( I
  97.   FILE *fp;- c% L+ Q, g' B( m* y8 j
  98.   char *key=NULL;# H/ E6 V5 g' m+ D4 a
  99.   char version[MAX_PATH];
    0 o* }- M0 i& @/ |$ o7 w3 f
  100.   LPUPDATEFILE file,olds;
    ' _  ?$ x. W4 o( U7 V9 g
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    # E2 f) X+ h! Z9 b

  102. 8 a' k* q7 o( P8 R" V
  103.   UpdateList.clear();
    ' m1 X' a5 D& h2 S+ D1 ~/ C7 F& C3 X
  104.   UpdateFile.clear();! X4 V/ y; Q/ g
  105.   if(GetFileAttributes(filename)==-1) return false;
    / Q3 ^6 q- ^3 B( _
  106.   if(!(fp=fopen(filename,"r"))) return false;# o8 i; k, ]) d* h
  107.   fscanf(fp,"%s",version);
    4 g/ i0 H( i. V
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    5 G! r, n# {4 B& h' j6 O
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( I) Y/ n: C& @% F9 _7 u7 t
  110.   {
    , N* V8 g0 Q; B1 N" j. a' R' o
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" Z- Q  e. t. }3 c; f
  112.     fscanf(fp,"%s",file->path);
    7 p  q- r4 j* V6 W9 y4 E& j: u6 G
  113.     ReadFileNames(fp,file->file);0 i' t8 n3 f$ x, v* \' h4 l: h
  114.     strcpy(file->full,".");
    ; F7 j3 A7 y6 ^/ c& u/ K
  115.     strcat(file->full,file->path);
    / n: R# j0 L" w7 ?8 \# K
  116.     strcat(file->full,file->file);: {$ x& i" d& l# z; y8 @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())8 Z# x* B; p! k, b0 J' W
  118.     {4 A+ P# A4 E  @
  119.       file->vers=(float)atof(version);
    7 J$ e  X6 N. b
  120.       UpdateList.push_back(file->full);
    - d! O+ d0 x8 ]# c
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));% R  K# s" b) e) W, c( ^4 a# O
  122.     }) e% T6 E+ y5 ?. E3 o
  123.     else7 f& h+ `' u  `
  124.     {
    # x( d$ G5 f  f0 ^
  125.       olds=(*p).second;
    6 B& t- j, ]/ n+ `: |
  126.       if(olds->vers<(float)atof(version))
    % @/ _1 N) n. i6 ^9 m; a
  127.       {
    0 D  L" Y. h7 N4 u- R
  128.         olds->vers=(float)atof(version);" ~' n" g# J& [% k) M( }2 d
  129.       }
    ; B$ `; L) N8 {4 t
  130.       free(file);
    ' v# y" @  E2 s  R% V8 {) |
  131.     }; R8 O' _/ K9 ], k5 A* V7 Q+ V
  132.   }
    % o2 K7 P/ E) m" o6 x7 g/ _
  133.   fclose(fp);
    5 Z( k3 ]* j  c: }" ?8 R! L- Q' _2 e
  134.   return true;5 f9 Q- e6 C$ E
  135. }
    ) c! |( D" @9 E, x* x$ B9 o
  136. ( f* @1 o/ j) ?( V( C; k  d) E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 t5 Y5 w- ?5 c4 J0 i4 A7 L
  138. {
    ' E, [* u: z% M6 t4 x4 R
  139.   TCHAR  szFull[MAX_PATH];' V& l: \6 i1 a. [6 y3 `: t& f% I
  140.   TCHAR *token,*inter;2 b: k  f& T% p6 |
  141.   *szPath=0;
    & q/ _1 @5 o4 v- |7 a5 C6 K
  142.   strcpy(szFull,szFullPath);% c1 j+ X& G3 c9 C) _
  143.   token=strtok(szFull,"\\/");
    ( l' _. e  l# n) X6 N& U5 _
  144.   inter=token;
    $ e' f) Q) I# e- ]+ g! \9 {) w$ P
  145.   while(token=strtok(NULL,"\\/"))
    4 M  M5 P6 l+ t% X  {
  146.   {. T* c( W3 u& p) h/ x2 Z. p, p- a
  147.     strcat(szPath,inter);+ D$ k. ^+ e; ]7 z3 q4 ]5 {
  148.     strcat(szPath,"\");
    + }& D6 ]  ^9 ^) J: _
  149.     inter=token;& J6 i7 F# y9 A8 |) A7 t9 P
  150.   }4 X8 `$ G! |  p1 A$ n" Z1 V
  151.   return strlen(szPath);. X+ C4 X8 v0 p" ?
  152. }8 Y9 k" Y7 ^0 s# ~" _5 d/ P
  153. , v: A1 e# U4 G) N) p( a# P, Q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)' A& a9 X* N9 j2 Q
  155. {4 d. K6 T+ n" V. ^. V9 A+ n
  156.   DWORD attrib=GetFileAttributes(Target);+ i5 L# t" z' V2 ?; f2 {' t
  157.   if(attrib!=-1)
    + L- i; j$ T6 W7 G; @
  158.   {8 M3 D" y9 k3 t2 H/ Q0 X; {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 c: P9 `! z( a; d( v
  160.     {) a4 `1 h; D* @/ s
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);" e% }& ?& Q9 w; {9 d! G' N
  162.       SetFileAttributes(Target,attrib);
    & g0 g4 p% h" K6 e
  163.     }
    ' y; k$ K$ I' o! k1 S- @
  164.   }
    ) j4 |0 t% Y& R; S1 f) i
  165.   CopyFile(Source,Target,Erase);* i3 z! z" g1 }; \" N
  166. }4 W  e8 J) u6 B* D2 r' M- \* n
  167. ) R2 ^8 a6 y" |
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 |+ Q* d! F- M. Z* B
  169. {
    $ z9 O0 e7 {$ A! c$ [
  170.      FILE *fp;
    4 R, m# X# x$ \% V4 L
  171.      char  szBuffer[8192];
    # }! W+ f! i, _2 v. r* H1 y. N) m, W
  172.   va_list  argptr;
    9 O2 J2 t( F. v7 U* x2 U4 e
  173. 3 r- r4 F& c# j: f6 v
  174.         va_start(argptr,message);
    5 D$ e& `2 Q3 l3 `6 S
  175.         vsprintf(szBuffer,message,argptr);+ s. s( `- F, f* q: V4 @
  176.         va_end(argptr);
    ; F9 v  a- h& ^7 Y  Q" V0 t
  177.   fp=fopen(FileName,"a");- R" n; s' `5 J" r7 G8 B9 j) d
  178.   if(fp)' e8 |4 f9 a( T9 b( R
  179.   {
    / q1 a5 ^% u; [- q( H( q, J1 G" E
  180.     fprintf(fp,szBuffer);# R8 E- g5 t) t% j' s& H6 `8 g
  181.     fclose(fp);# u) b/ R6 i0 s) V- k' E
  182.           _flushall();3 ?5 {5 O) ~. Z2 e
  183.   }
    : Z( B5 I) q6 \3 w" x
  184. }
    7 s7 T" B0 j( e+ j$ P+ @' _* s6 L
  185. 1 e& Z% N/ J* E, z- e
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 Q! c) i& K' W% L6 J: u
  187. {
    % y6 o0 X$ m) X% j, i3 N
  188.      FILE *fp;
    + Q, V3 A9 A! G6 `$ r  R
  189.     DWORD  attrib;+ m9 f1 h! C7 M3 @- k/ G- K
  190.   attrib=GetFileAttributes(FileName);
    % i3 _- @* a8 w  Z& ~, e
  191.   if(attrib!=-1)
    9 j4 d- K6 @4 H7 G% g1 _' P
  192.   {
    % X# f3 U& x9 @9 |  \
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' N8 w5 p+ C3 \5 V+ C
  194.     if(!SetFileAttributes(FileName,attrib))
    + \4 h6 p' k: A
  195.     {
    + G% S4 J* k6 T7 E
  196.       return FALSE;; s$ D7 P! w# `1 b* o8 Z
  197.     }
    0 {0 z+ K7 J' x+ S
  198.   }
    6 ~' G1 s/ V) m% W4 _
  199.   fp=fopen(FileName,"wb");
    , o* ]0 Y, p% t  o7 r: s
  200.   if(fp)
    3 ?' V" p1 l  b4 W
  201.   {, h$ K+ Y0 q! U7 X3 U- i
  202.     fclose(fp);
    ( D" w& Z3 `" G/ Y+ u' `
  203.   }
    " C7 `. m# p" o# Z8 z0 h( S: d+ V
  204.   return TRUE;7 R( O7 z, o9 C& T/ v2 Q- E
  205. }" }! c; G5 e: q
  206. $ [2 E' z5 T# M% d/ B( W( d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    & U3 y2 R2 R0 _  P
  208. {
    9 H) d& B, A- e% J' o1 u
  209.   char filename[MAX_PATH];" V$ q" Q! H0 x- S" X8 ^0 [
  210.   LPUPDATEFILE file,olds;! z- h3 @8 [$ n! ]- `: g
  211.   std::map<int,CString>::iterator i;+ X: j& A0 q, A5 h& `5 ~) c
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / m& _& `5 N6 T, X/ q1 [: U
  213.   std::list<CString>::iterator l;7 P  T- G3 f. [$ i( s

  214. * g! ~. f$ I) P; N
  215.   if(bFirstUpdate)+ z* k' g- V' {3 x- Q
  216.   {
    3 l- A+ p- _# k: _9 T9 s
  217.     dwCurrFile=0;
    # }: D# L. b" L* T3 @
  218.     bFirstUpdate=FALSE;# o# k% |, j$ i# j9 E: F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 u" ]  \1 p) F2 N  v- w
  220.     {
    5 C, Z. _' G( g9 U" f2 Z9 w7 z. w
  221.       dwTotalFiles=UpdateLocal.size();
    ) O& G9 g% L! u  c
  222.       dwDownLoaded=0;/ F( S! h1 ?5 j4 g9 n! l
  223.       bSilentStep=FALSE;5 h5 q9 v- W2 W% X
  224.       bCompressed=TRUE;
    " @: A: s2 h1 r& r, R$ g* \. N
  225.       strExtLocal.Empty();& F. o. A: o$ c  A7 a4 m
  226.       strFullName=(*i).second;
    0 U. Z+ Y6 ]/ F9 F5 k: j9 v% s/ e
  227.       dwProgramState=AP_CONNECT;& F  K, M2 n" g! o6 T
  228.       return TRUE;
    4 p. y' T/ \" o2 L
  229.     }$ o9 \& m1 m' s! M8 v4 v3 v; a
  230.   }6 X% z$ n* b0 h# U# @6 Z
  231.   else if(bRestartUpdater==FALSE)1 r" j) c9 `: m  z  R. d  {1 [
  232.   {2 K8 t& w3 H4 g: j& e+ @
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( c) [8 g; }# O& \, a# {3 `
  234.     {
    6 w/ _2 H" S3 q
  235.       file=(*p).second;" }2 n/ b7 E8 w* J  t4 b8 H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 `$ U( h9 O3 A1 |! |8 c
  237.       {
    . C9 P+ `% G: X+ B, R1 J" i- z
  238.         olds=(*p).second;
    : \& S( t3 ]1 k. ^2 ]) j
  239.         olds->vers=file->vers;! e1 D* I  t" \: s
  240.       }
    ; q9 {! Y1 q/ J1 y
  241.       else0 v* c& h% o" x  j3 ^
  242.       {$ p( G( q6 k) f" }; a) P  |; x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ _; @* g  e; @. F0 w1 w7 a
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# `, Q3 P: @2 J" h" L7 f2 `' E
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));- q7 y! N! B$ c) G1 d5 a
  246.       }; x/ p+ @" L: m. e- v  T' z; E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ) E) R, P1 A2 g5 G5 U$ d
  248.       sprintf(filename,"(%s)",file->file);
    ) L* K$ L( H0 d, `2 v9 V: z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - V. q3 t9 S. s# ~# R0 g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& ?1 ]/ B5 o$ c0 f( j+ }  O2 D
  251.     }
    # H: R+ ~7 _/ k: H/ A' U* s
  252.     dwCurrFile++;/ }, e2 x1 |* @1 G  J( z' F
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* y8 z. {( T- Q) y# d
  254.     {
    % c1 |# u7 z% t( ^% j1 O- x; M5 d7 F
  255.       bSilentStep=FALSE;
    1 x% {7 |2 [0 _
  256.       bCompressed=TRUE;6 X8 l# e% }+ P% j, X% L
  257.       strExtLocal.Empty();
    - d' K) O$ h8 {/ ?1 G, f
  258.       strFullName=(*i).second;! y2 w8 \+ F$ S0 c, }
  259.       dwProgramState=AP_CONNECT;
    + {& H! C% k$ Y; U  X
  260.       return TRUE;% X' z6 T+ S! w3 F1 X
  261.     }
    , ?0 }2 x) ^8 K& i
  262.     if(!bRestartUpdater). \' j- L% S7 a1 u6 i
  263.     {+ K+ v8 Z" c/ l% R
  264.       int iCurrSize,iFileSize;( k% c# f6 `, N. \" A; l! {" T6 z
  265.       iCurrSize=0;
    1 i, c/ S' f( }" f3 w7 c7 M! A& o. E
  266.       iFileSize=UpdateList2.size();
    2 o7 ?  l4 H' H! R# R+ N9 e: P; w5 D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    9 B! Z# i2 r6 o/ v' I
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    9 D) c  m8 @4 b  b" F) A& a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");& {& D- K" J( Q0 d
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , @% ?6 P$ a' J7 H. J' M3 W
  271.       Fclearf(".\\update.dat");
    ; w& v4 |" G0 ]' G
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 e& e7 i7 x, J* v+ \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ x+ i$ T' Z% Y3 x3 ?+ h& m& G3 E2 {( A
  274.       {' S' w& R9 \2 X( J8 {1 f7 M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())' Y# M7 _3 s) m! X
  276.         {
    : o/ w6 {- z6 V* l/ p# w+ d! C; P
  277.           file=(*p).second;% `- H# G" J  u4 x4 R' }+ V
  278.           sprintf(filename,"(%s)",file->file);
    8 Z# E- Z# i4 Y. J3 s) ?
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : u" L: g* w, c# _
  280.           iCurrSize++;
    ! I+ F! Q8 ]/ f( d3 i
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: X+ m# Z7 L" A) l1 e& M- o
  282.         }. q. h6 m% Q) z5 V9 }, W8 Q
  283.       }' A8 I& n6 F3 |& @- R
  284.       unlink(".\\update.txt");& a. e( m5 {  L$ h5 O$ j0 p% i' z
  285.       unlink(".\\update.tmp");
    " G# Q1 K% d( C' `2 G; Z& F
  286.       Fclearf(".\\checkversion.dat");5 G2 E$ H0 m0 @5 f5 a" L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    # ?$ H" ?9 l' m) `7 K0 e5 q# ?: l5 K
  288.       if(UpdateLocal.size())2 S, K" }( u3 T/ j
  289.       {
    3 U, ]3 ~3 _7 g. r) r
  290.         UpdateLocal.clear();
    , Z5 J6 {# V, c$ b9 h" Z+ l0 Y& R
  291.       }
    # J. D7 c' `. c
  292.       if(UpdateFile3.size())1 I* o: c9 T& b8 \0 F. [( V
  293.       {7 ~  [3 z" d. l1 P( B
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    * V6 K+ N" B% K! T) {/ X3 y2 j6 ?
  295.         {
    6 H: B" I& }5 N: S0 |
  296.           file=(*p).second;
    5 W) a0 n2 a- @6 u
  297.           free(file);
    ) B4 ^5 F! X. N
  298.         }* V( E7 P8 v' `9 P7 z
  299.         UpdateFile3.clear();2 K; A6 W+ P9 A; T* M! h% |
  300.         UpdateList3.clear();( b& v& j& w" Q2 ~  L) V* U' C
  301.       }
    5 G8 F$ j+ x) F" J) s3 z" ~
  302.       if(UpdateFile2.size())
    + ~3 M" ]6 b4 E1 s
  303.       {% k2 p; _# ?' Y  u9 [/ j2 D7 x  p
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) \1 o1 O$ G+ b  W5 P
  305.         {" Q1 F) u) w9 P' X. q1 I
  306.           file=(*p).second;
    ' k- v+ W" [" Z* |2 Y8 Z
  307.           free(file);& k& A+ K% Q- m' K  [$ m
  308.         }9 c3 z% `; m' G% F1 r
  309.         UpdateFile2.clear();
    % W" h/ M2 o, y* g5 g0 M$ s: x4 V4 _) Q& B
  310.         UpdateList2.clear();
    4 X4 |! k0 @2 u
  311.       }
    # z$ E: R' p6 h9 t( m& W
  312.       if(UpdateFile1.size())6 x6 C, l! D. O& |0 O
  313.       {( W4 f2 _; }% E7 {; w% ~! C
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). h8 K6 Y  {# B( H1 J
  315.         {
    ' O3 }" h7 |/ c& k7 S
  316.           file=(*p).second;/ y6 }. ^- ^, m8 h) C8 N/ Z
  317.           free(file);  @* Z) _2 V1 ^# M. s0 i
  318.         }
    + q8 B, P3 V" r, a1 h
  319.         UpdateFile1.clear();
    . |* u. K8 |! }, d0 K; ^
  320.         UpdateList1.clear();. I! N5 C7 `( ]; a6 k# W
  321.       }
    $ q' q# M0 {0 ^# Z7 W1 B: U
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 A* z- v3 d7 c6 v3 p2 M
  323.     }3 P& m! y) T0 n, K7 W' A' f; P6 e
  324.   }
    ( ^: N7 d4 N' y. M( `
  325.   return FALSE;' p- W( x9 N3 A( _# Q( J
  326. }& A- p+ e5 u- d, y0 G$ d
  327. 8 x  {$ d/ A; ]$ `# x
  328. void CRevAppApp::ClearAll(void)8 d" ~$ a" T$ t# V
  329. {+ x( h2 V* Z2 T2 N& o& w( T3 K
  330.   LPUPDATEFILE file;) S' u6 g9 |2 P, W/ L6 g+ L+ @  T
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # A9 ?' X$ e( M3 A- _0 S
  332. 9 I8 g2 V+ m, b0 F. ?$ }8 e
  333.   if(UpdateLocal.size())
    * g* q' p# C9 l- {% ^
  334.   {$ d; z- R) e2 `* H% R
  335.     UpdateLocal.clear();. w( |$ a1 o5 a
  336.   }: u4 |# D3 D) R; A( o
  337.   if(UpdateFile3.size())5 f1 R' J6 o5 F
  338.   {
    - ^! D! u- s% F0 w+ e; c. j! ^  F
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + b: t0 }* B! v0 I) a
  340.     {
    ( O  g" J3 }5 h( Y  L3 x
  341.       file=(*p).second;5 _1 P3 r& O! B! S% U, c* v2 B5 y4 S
  342.       free(file);
    , S+ F9 [! \+ D% Z0 F; _' k
  343.     }! N3 P  W7 _  z# h2 a: y
  344.     UpdateFile3.clear();- }' U6 Y6 f# U7 _! h" c, j
  345.     UpdateList3.clear();
    / J/ v9 _' |2 ?9 [
  346.   }
    ! Q8 q+ a2 h7 P/ D
  347.   if(UpdateFile2.size())
    # K/ i: u) q" @( k
  348.   {" y- k. e3 p2 n# |+ h4 y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ W7 K$ x3 ^: D! m; y
  350.     {
    6 @7 H3 _! b' [, ]4 w( g! V) i6 G& E
  351.       file=(*p).second;
    - I5 U! X6 A# }# O- A' n3 y. Q
  352.       free(file);
    8 \" E8 ~" A2 i; {# x
  353.     }
    ( W: q1 F' }1 T9 m5 N7 F' U; @
  354.     UpdateFile2.clear();6 M! X3 b% S$ S+ j2 p) B6 E
  355.     UpdateList2.clear();
    8 R9 ?3 f& E, D' [; I2 x
  356.   }: H2 ~& Y3 e+ s, C4 e. c( O2 P: w. X
  357.   if(UpdateFile1.size())# u! J$ w7 S8 }2 g
  358.   {6 \* l) ~/ b! w* ]( D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 }; e/ E& r$ w2 j
  360.     {
    $ p* K# |9 y) \' k+ H9 `+ }
  361.       file=(*p).second;. `9 z5 o. ~) w! }. r: H
  362.       free(file);
    6 I- N7 F# Z/ N" D+ Y: V$ n
  363.     }) q, w9 N7 k  P+ s: h  D
  364.     UpdateFile1.clear();8 z2 J* Q- T/ T  O
  365.     UpdateList1.clear();
    - [6 G' {" k. m+ F3 W6 N1 v
  366.   }
    8 L' D5 |3 }/ u- [
  367. }  
    ) n/ f9 ^& S4 F$ I0 x
  368.   4 q/ H5 f/ g+ L5 P0 }6 k; Z
  369. BOOL CRevAppApp::CheckLocalVersion(void)8 Y2 n  Y! P: E
  370. {
    9 e" E4 d& [+ p# h
  371.   int c;( t' J9 Q+ O6 q& Q% [! Q
  372.   LPUPDATEFILE file1,file2;
    ' w! K% |0 e6 V: S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;2 d6 I3 d8 t0 y4 E9 h) c- Z, o
  374.   std::list<CString>::iterator l;
      V8 u3 L. M) {  I/ Y$ N& o2 J
  375. % o; W5 \# G' b0 F* r# {
  376.   UpdateLocal.clear();! T9 ~+ F$ I5 E) {1 `
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);3 m) ]$ `# b0 x! _5 Y$ ]# }
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ u; Z4 p3 g+ o" a
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);# M! r) Q& Y& \; w  X. P, \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ) |$ ~$ Q- h' ]; ~
  381.   if(UpdateFile3.size())0 e: }9 {: s6 {- x! Q
  382.   {% ^) f8 A! C' M+ j9 Z$ h" u& b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)8 U/ c2 K. ^6 O5 ]
  384.     {
    2 o1 o0 x1 A. c( e2 x* y
  385.       file2=(LPUPDATEFILE)(*i).second;
      c3 N: F8 s( w/ X9 a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 Y+ z0 D8 p- a8 S
  387.       {( B+ p$ X+ C0 S) S' @2 X9 r/ ]% E, U
  388.         file1=(LPUPDATEFILE)(*p).second;
    : \. B: n3 C) a% P* @, \  n  }
  389.         file1->vers=file2->vers;
    ' ~4 b+ k+ F" }4 q' n% {* J
  390.       }5 S, f( |  z* k5 D- w$ N3 Q5 W1 y
  391.       else
    : W1 `" r0 q6 m0 V% v/ G( M
  392.       {
    & o/ M: J) M& I' y' e: N
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) V: L# L! s$ m/ p' V7 s6 z: ^/ Q7 F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    6 o4 i( N' w( Z/ p: C: C' T3 {
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));' k9 ~$ G0 x& q9 O% Z, Y( X$ g
  396.       }& c% q9 r: [3 Y. n' N$ G% O
  397.     }
    # I- `% o: H* ]! ~0 `
  398.   }
    7 n# r- x1 \. h. H6 ?9 T
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)  O; X3 ]# i3 m6 X! m3 g2 O: m2 c
  400.   {
    7 t4 C  r8 ?! j7 O" M" F# a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 t( M9 H% K0 Q
  402.     {
    , h! y# B. F, \) ]
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; e- N0 I/ q# }8 Y; i: i  n% @1 W
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 s  g# X6 z3 Z* Z/ ~5 k% y
  405.       {
    1 ]) z1 }: l0 p7 T9 v
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; L8 B# F) s" c: b
  407.         if(file1->vers!=file2->vers). R. h4 ]% i2 l, I4 K0 B
  408.         {
    0 P9 S4 Z' Y! n5 I6 Q2 G
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % P0 F# C' z5 t6 K( a1 K2 d4 E! Y
  410.           c++;
    , P1 c8 {, R5 f
  411.         }
      I4 {$ S1 B4 b" D/ l2 u
  412.       }
    $ ^6 `* Q8 c  G
  413.       else  |1 k4 v+ O$ x* w
  414.       {
    9 Z1 D" U. M- ]. e% L7 ~
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    6 a1 _  z5 w/ _1 S% \
  416.         c++;
    ' g2 n2 p9 y% [' K: K% C1 ^
  417.       }
    / V5 W- @/ t; A
  418.     }
    0 j: @. O# L4 ~8 _- a0 B
  419.   }
    7 L8 u( G- K. p- I( ~
  420.   unlink(".\\DownLoad\\update.txt");
    4 V: x/ ?- @" s. ?
  421.   if(UpdateLocal.size()) return TRUE;8 @. h$ s+ O  K3 s# P1 y0 [
  422.   else                   return FALSE;: Y" h& ~! o; Q3 d& K# O* a
  423. }
    6 j" }; l# j6 }
  424. . U) a! Y8 t6 E, v" g. I) t( z; ~
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' H# ]  Y$ {( ]" y/ m& I: |) x+ ]1 q) M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  f  j+ z+ F" z: `: }$ x( }

  427. 1 N$ h! G& J8 x: j3 S+ m0 x
  428. 0 G5 K, I9 Y5 c% i: R4 Z

  429. + O# D1 d9 Z$ V) g; P2 s/ {3 F) a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)4 q. K2 ]. {* a5 Z. k4 ^9 ^  d
  431. {6 P9 [' X6 f2 `) f8 ^" f# T  G
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 O& U! N- h0 P# p- g' I
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 ]% j% b* [8 M% ~% y
  434.   {2 w" H8 t' E  f) b) X
  435.     char szLanguage[50];; T' q  ]  r- W- Q5 }2 v
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( A2 @+ ~$ M9 ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! Q  g+ E5 ]! y( G1 E& c) Q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ D0 F% h2 A/ w1 U$ M$ P& c
  439.     else                                   m_iLanguage=ENGLISH;
    ' q1 p! i+ Q; Z' V: R- `% T
  440.     char szRegister[100];
    - e5 f& G! J  E' ]7 D; i- {: D0 w
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 ~4 Y  _  f1 [1 [  g" C9 g
  442.     strRegsName=szRegister;' ?5 c: P& Z  b8 \) Q
  443.     char szPatchURL[100];  B1 j7 h# x9 g, d
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");, r3 e0 H6 Z; C8 P  Z& `9 C2 ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 K: E* R+ ^0 K
  446.   }% ?' x% P% q/ u9 L7 |  q6 e. z
  447.   else" m; f% P' ~' L7 w' w
  448.   {
    : g( Q; ?0 }, s! W- w
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: x2 z& d/ b  b$ B# S( F) @
  450.     strRegsName=DEFAULT_REG_URL;1 K. Y1 P* @1 A. |) i7 a
  451.   }
    , |! ^& P% `% C# ^! @) A
  452.   if(GetFileAttributes("hosts.ini")!=-1). @$ _8 B+ Y; A
  453.   {5 @5 z- [$ ?2 ]: E5 h5 A1 a
  454.     char szIP[50];* `; H: j4 H5 o3 r2 _
  455.     char szDIR[300];
    ) C) Z8 l7 G8 Q- B2 M" Q8 e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    * d; E) {+ Q  l! ^. u) O) a/ X1 ?
  457.     {2 `4 V( ^% t1 p' i5 t. Q# K8 K
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 p. s8 S1 M' J2 i$ M; Q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    . z' H) k% e4 h% S
  460.       strHostName=szIP;
    / H% P) S+ t! h9 o9 ^8 I& Z4 T; M
  461.       strHostPath.Format("/%s",szDIR);3 w8 d. m1 n6 g6 y5 x
  462.     }
    " I" ]6 w9 @. v. G" a! k# m3 @
  463.     else" c* g3 V6 m+ S2 T+ G
  464.     {
    , W5 _0 e) ^/ v4 j
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* C9 {0 S4 B) d4 x( a* |3 `
  466.       {
    9 y4 C! M, K: J; h* W5 i+ L
  467.         char szLanguage[50];: `6 R" |& f- u, N/ V  u1 }- N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: A+ T$ w- v% T' H0 Q& O
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' ~3 x9 `" s% B  w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 `" h7 {. Z- N$ [& y
  471.         else                                   m_iLanguage=ENGLISH;; d/ G) `+ _" N1 {$ y) Z" [
  472.         char szRegister[100];$ \% P" D! Y, N5 Z3 X  D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");# w. Q" K, g) q( Q& s& }' D
  474.         strRegsName=szRegister;) {# O# h0 I4 q$ v
  475.         char szPatchURL[100];
    ; v2 v2 B1 E) F: ?5 t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) C. B3 [# \6 L+ Z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  H9 ^# q  F& B# I
  478.       }2 R* j( {0 U; J! L, @6 l
  479.       else
    # ~+ }; S% U6 V. }
  480.       {* m, ~7 ~& C( O9 O( u
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 q8 R5 @& x" d# M7 h  }: j( g
  482.         strRegsName=DEFAULT_REG_URL;' u. z* U" @+ h. L6 d# N
  483.       }3 X! S: \( I1 ^  E0 s! n
  484.     }
    3 J7 B& p% m/ @7 \9 e6 Y- U; y( Z; j
  485.   }; u8 z) _" B* x# K3 C& ~
  486.   return true;
    + r: T$ m0 W0 J
  487. }6 S/ K( `( Q- J
  488. " s% O$ f9 |; F, N5 W7 `  y
  489. #include ".\ZLib\unzip.h"
    $ y- I  l3 V! R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    5 X: m. @5 ]- w. c0 `' s- p. o& {- W
  491. /////////////////////////////////////////////////////////////////////////////
    8 N9 |7 G0 u5 {* J9 [
  492. // CRevAppApp initialization  ^* D- o1 M2 l) o: R# q
  493. 4 N" ^, w5 f0 A& m
  494. BOOL CRevAppApp::InitInstance()
    ' ?0 l  a# \" `2 ?( G9 u+ A3 m
  495. {0 u* ~7 D1 v% v4 S0 k% v: Q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    4 X) I9 F( a. B/ [* x6 ^

  497. " s, B( P$ {' k( ?, g$ L
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 e+ E3 D9 m! ]4 {# c, R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) \& Z/ ?9 V1 }, G' G1 p- l' P% R! o
  500.   {% r5 n" X4 l% Z! `# p/ u4 r
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");1 `( u% F7 y' I7 {* Y$ ]5 n
  502.     GetPathFromFullPath(szPathTarget,szPathSource);' t( b2 C% G% W! `- f; q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    . V1 ~1 Q1 m. q
  504.     {
    $ {0 I# J- J6 }  |; i& J
  505.       strcpy(szPath,szPathTarget);) i2 }  R& ?8 S# g+ z0 c
  506.       SetCurrentDirectory(szPath);
    " _) {% A- W5 q+ [
  507.     }
    ) A6 g& R5 |. k" s9 h1 p  i# B
  508.   }' ~# K+ D0 J! W7 Y' z/ T
  509. #ifdef _DEBUG
    " ~) w0 Z7 M( a' g- K/ b
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 {6 g4 L8 @( ]& m! U9 v
  511. #else
    ) z+ J1 I6 h. a
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 p$ H: t! [$ E" m
  513. #endif% o7 c4 S- E6 _; \; p) K% A1 P$ Y
  514.   {
    5 {; W3 J. o: C9 C8 V1 `# y7 x
  515.     char tempFileName[MAX_PATH];
    1 Q6 J% Z6 ]2 D" @
  516.     strcpy(tempFileName,szPathSource);
    - y' u' _6 w" t; ?1 |5 ]
  517.     tempFileName[strlen(szPathSource)-12]=0;
    9 t* k+ [5 r2 J
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    + B; X5 y1 X/ k4 y) e9 b) G
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 P  L. j1 A! r2 l! |. [
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& B& u6 X, J: j5 i' l0 g4 U
  521.     return TRUE;+ w& r5 W4 ]) Y" n: {, g0 Y5 [
  522.   }
    3 u. u8 ~; O* q+ ]: ?- H
  523.   // Nuke 0118: Delete run.exe
    ; d; ]1 }) u0 {4 h1 a( x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );# M' p* ?& M( ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");2 L* X, i1 r7 y
  526.   if(!ReadCfgFile("Config.ini")): Z5 v; H* O4 M3 C
  527.   {- g6 ~/ n; C7 [  L# U% K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 w5 t/ ^7 {. c9 f2 M1 j& [2 }
  529.     return TRUE;
    : Y8 [7 Q* Y1 r% l4 A2 W4 R
  530.   }
    : O# ~) y4 g; f1 D$ ~2 |* q
  531.   HANDLE mutex;& O7 a' V) J# o+ M. [9 k
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    7 [* H- s( J9 ?. Q& g# B; D
  533.   {
    & o' U9 y5 s/ {- T' a: M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)9 \* l$ j& H: @1 B1 V5 M: }  e, @
  535.     {! ?" s1 n5 ~% Z8 m3 M1 n7 ?
  536.       CloseHandle(mutex);) C7 {# A( d  F4 p$ b8 c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ q$ w, F7 z* t' F5 m& C) q
  538.       return TRUE;' b% D/ |2 [; A  v
  539.     }
    * C2 L' X: r: o- @2 ^& T
  540.   }  0 G( ?. |6 X9 K! c
  541.   CloseHandle(mutex);! X$ n/ c/ X$ X
  542. 1 l% s" x1 E+ w7 Z6 z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);5 n5 l' E# u  r; z' ]
  544. 6 L9 S5 j. I: W/ I6 }
  545.         AfxEnableControlContainer();! g+ G6 ?+ ^& V& e4 t# I; l

  546. - r1 S/ a' H) t. w! y# U4 d* |
  547.   bCanUpdate=FALSE;
    ( Z+ [% o$ ?. e
  548.   dwStartUpSteps=1;
    3 K' s' Y9 E7 ~& B* K* u
  549.   dwProgramState=AP_NOTHING;
    ' H) Z0 ~) o4 |' ]+ ~
  550. # e# d; i# B1 v2 j: x; Z8 ^3 Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& e  L  \7 h2 G* d* e2 \+ E
  552. 1 Q) c2 S2 }% W
  553.         // Standard initialization% \) k: O' _* _8 m6 Q
  554.         // If you are not using these features and wish to reduce the size) b0 \- e$ }  t
  555.         //  of your final executable, you should remove from the following
    9 f- B! T6 @% r
  556.         //  the specific initialization routines you do not need.3 B% ^/ d* J+ b! _0 X+ [  v# J3 _# B

  557. % `6 j. n/ V) P' p3 l' b
  558. #ifdef _AFXDLL. w7 C- X+ D' Y# Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 K2 C9 k8 |7 u% u" `; J
  560. #else
    , L5 c) b0 G. m) c! G4 ]5 @( `+ }  H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    2 e& X4 a$ L1 D* [* a
  562. #endif
    4 }# J, q' W# ?: j7 J
  563. % {1 W8 R) A# E
  564.   dlg=new CRevAppDlg;- S* S. W2 v* l: i+ {! E
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    3 C* }0 v- B/ k  E5 m1 M: Z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % N; t4 y) V$ {' M, ~6 Z& e
  567.   m_pMainWnd=dlg;1 W" |0 h9 n. t4 \+ F3 {

  568. 3 X; s$ H& v0 |6 `6 |
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    . N+ T9 P2 I. r6 v2 t4 B

  570. 4 h+ o3 f1 f7 g7 c: w. g1 v$ J
  571. //  GdiplusStartupInput gdiplusStartupInput;) o" M3 I& ?% V/ ?$ q
  572. //  ULONG_PTR gdiplusToken;
    ) ?' S5 q# v! H3 t' d$ O2 ?6 X$ K
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! c: Q& ^) z0 q: V2 ^/ i* J$ \
  574.   x) R7 Z2 ~" ~$ u, _
  575. //        CRevAppDlg dlg;- p! B7 [: C! [2 L
  576. //        int nResponse = dlg.DoModal();1 T0 v/ }, w: K) Z$ A+ W
  577. //        if (nResponse == IDOK)7 F+ T* @) S6 }/ {& X, v! f2 H, W
  578. //        {; T+ |) J% K: ~' K
  579. //                // TODO: Place code here to handle when the dialog is" ^. M: t! E7 N) Y6 @/ V
  580. //                //  dismissed with OK
    ! V) ~9 F3 W0 u
  581. //        }0 S6 m' X# {: H) `" ]( `
  582. //        else if (nResponse == IDCANCEL)
    & W1 {$ o9 m3 d  y
  583. //        {* o7 e* p# g$ |/ N; @: J$ ^
  584. //                // TODO: Place code here to handle when the dialog is
    7 x2 [; c; n% x( z* Y' k  {8 F/ D
  585. //                //  dismissed with Cancel
    0 _1 P' {% K' k. F, f
  586. //        }7 G* c+ L0 m8 U! @
  587. + W" w4 V2 Q# w9 Z# L) r6 ]# h/ x
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 z/ R  F, d4 m. [2 {. x! y
  589.         //  application, rather than start the application's message pump.' o4 u/ j* s% w$ h/ F
  590.         return TRUE;
    ) ?) k( u+ g# o9 |- |% e
  591. }
    " g; y) z8 |2 N% _1 e$ P% W
  592. 3 u5 p5 @6 w! z7 p
  593. char *CRevAppApp::strtok3(char *pSource,char *token)- @' E" Z3 T- X6 [
  594. {
    * \8 d1 \8 P$ b+ x. C/ E
  595.   int i;- F8 i3 X) ^8 W
  596.   char *szRet;; X( S$ b9 X* n' h: ~$ V. ?
  597. + X, `4 N0 S' [' L( d
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) U9 a' E2 Q8 K' c
  599.   if(sztoken)8 u, ^) f2 `( v3 j4 ]" d
  600.   {2 R( q5 b8 D( }, u9 n
  601.     szRet=&sztoken[itoken];- S# j3 X# j4 q( O
  602.     while(sztoken[itoken])% g  b7 n5 Z; S% F
  603.     {
    * ~1 z3 g% D! M9 V" |$ e# H$ I
  604.       for(i=0;i<(int)strlen(token);i++)
    / G# ]2 _% Y# e0 D0 U
  605.       {$ W+ }9 i) n7 p  D
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& M+ x5 N9 Y0 z
  607.         {
    4 J: B7 G0 J6 m1 w$ Q- j7 n
  608.           sztoken[itoken++]=0;
    * z3 E) q: x' [* |! g
  609.           sztoken[itoken++]=0;
    ) `% P% J. j" `4 z# ~4 o
  610.           return szRet;+ ^, A& r5 f) ~3 \  K" M
  611.         }
    $ u. o' [) ~6 W, h' Y8 \
  612.       }' O$ b8 ]5 |/ f) C' P2 w; R
  613.       itoken++;
    9 O7 T; ?! z1 ~5 h6 B/ b, {2 a9 u
  614.     }
    5 e  V/ s; m+ o* V+ {; a
  615.   }
    ! ^8 _1 r3 m* B1 f5 E3 C
  616.   return NULL;8 l$ y; B5 s: |% h  P: n
  617. }% P: E/ C5 s  e& d$ O  [

  618. 0 \" [; E/ G( F% h
  619. void ProcessProc(long Total,long Current): C- V. O2 x% @, E, H' J: q. d, u; O' D
  620. {
    - ?/ U. u* F# D1 }5 h$ u( ^& x
  621.         MSG msg;
    3 j2 ~& C$ @0 ~( W- ^
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, G# n4 B3 q: v& o5 O
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' }3 K/ Q: S+ U3 \" B. y% c1 a
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # p; G0 D2 p3 `2 \0 @
  625.         {/ }6 Z+ n# a& w$ I) P6 x% b
  626.                 if(!GetMessage(&msg,NULL,0,0))4 y, ?2 h: S5 c4 g5 t8 S6 w' J
  627.                 {
    ! p, {; M- l& ^. D- ~) y
  628.                         return;
    % _4 i. P& G5 ]2 c6 r, L
  629.                 }
    3 X6 m& ?& B! E$ k) s( U* m& f: a
  630.                 TranslateMessage(&msg);/ W4 K3 V* L" d% f7 _! I  c8 }! ]
  631.                 DispatchMessage(&msg);# ?% J6 P% A9 O1 I) U
  632.         }       
    " I9 U# X$ A+ c0 a
  633. }
    , o  Y& T$ L2 M/ ?8 c2 _
  634. * h$ `) m0 E/ O. I
  635. BOOL bFirstChar=TRUE;: Z$ B1 R! b1 e& g( z# b

  636. % K; M/ a% f2 U8 P( r, X8 v' F1 @
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; z0 _* W: L) y3 a: S# ]
  638. {
    , ^' E7 f$ `, t% w, a- h
  639.         // TODO: Add your specialized code here and/or call the base class5 \; }4 C+ i7 k* X, F+ w
  640.   switch(dwProgramState)" t3 x2 W8 L' H$ N
  641.   {
    6 a' R" H0 s- y9 O# r4 x
  642.   case AP_NOTHING:
    : V0 l' X# p* Y9 u
  643.     switch(dwStartUpSteps)7 i4 i) l( u3 _8 S7 I
  644.     {+ y' |8 m: O+ R; y. r5 ~6 G% t
  645.     case 1:7 u/ g9 G' o! ^+ T
  646.       {6 _1 \- X; \6 x& D' S& o3 s( n; ?
  647.         int i;6 F2 Z% c& w2 M) e
  648.         CDC *pCDC=dlg->GetDC();7 s0 ~2 ?0 r5 v3 i
  649.         HDC hdcwnd=pCDC->m_hDC;1 P9 I" j! [: d' y0 \* n+ e
  650. //        Graphics graphics(hdcwnd);
    / U" q( X6 y+ {3 a# G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");( d+ Y8 x7 \" @2 H7 \9 l
  652. //        INT iWidth=bitmap.GetWidth();
    7 p" ^# r1 K5 @3 ~
  653. //        INT iHeight=bitmap.GetHeight();5 y5 e3 B! F# H: q4 h
  654. //        Color color,colorTemp;
    : Q! y: h  ^: h' [0 X0 z. @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 J6 P5 W' t/ Y- p8 [) i. _
  656. //        {
    ' v8 S/ o6 C; t; g1 @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    + W8 }; N* ?! x5 Q4 h# B% }# i  i0 d
  658. //          {* @1 s" y9 r7 _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    " }- k" `  x, ~; e8 ?7 V7 T
  660. //            colorTemp.SetValue(color.MakeARGB(0 N3 O7 E) U" h$ J$ k& v
  661. //              (BYTE)(255*iColumn/iWidth),9 b: `4 G/ @) u- o
  662. //              color.GetRed(),9 J& K; Q% e0 k  N) ]; v! }' R5 y& O
  663. //              color.GetGreen(),
    8 e; `$ @, b$ ^/ w+ V, d8 o
  664. //              color.GetBlue()));/ n& J8 Z5 ?8 ^3 }
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 o9 [2 B$ v* _" f- l0 W
  666. //          }% R4 K3 Y* I( b+ V
  667. //        }1 I9 S+ k9 p/ {
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' f: F# ^4 `, F( A8 C( b3 {' M7 M
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    . Q9 |- {+ f" W0 j" K7 p( h5 Z+ V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    : L9 T. @$ e$ [
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # [; m1 }% K; W( Z
  672.         for(i=0;i<240;i+=8), W9 V9 p. u8 ]8 O3 I
  673.         {
    2 s' e. _7 j; ^: v6 h: @% y& E
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; B. D& `- \6 |) h/ k, i. g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 h" m* I% D8 m. \8 X+ R
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 l3 U5 q& m+ s( @
  677.           Sleep(33);/ m+ u8 E  d: f, b8 J3 {% N
  678.         }
    6 c8 h7 W2 {1 w. s/ K# Q
  679.         Sleep(1000);
    0 p$ |$ g: }8 \  m1 s
  680.         for(i=240;i>0;i-=8)
    % F% d+ B  L5 u# t$ P4 P: W
  681.         {$ h, \7 Z6 L: H; x1 H1 A
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( k" b# _! f0 s0 i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% ?; Z0 ?3 A" S( i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 d' ?5 f# T- ?% d
  685.           Sleep(33);5 }8 w9 [* u" P3 r9 F1 Q5 j
  686.         }
    , V0 ]3 N; Z0 M1 j$ u! J& _' n9 }
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);! [) r# k" x' E
  688.         dlg->ReleaseDC(pCDC);
    : v% u: T( ], O4 I- b, `: M: W
  689.         DeleteDC(hdctar);
    . `. \  t4 \3 }5 @, M4 [7 P, y; M3 |
  690.         DeleteDC(hdcsrc);) b. }, V& P! C
  691.         DeleteDC(hdcorg);
    - ]1 [3 k! s9 T; \5 S9 Q
  692.       }
    4 p6 I" k+ e3 \+ H9 u+ \2 [/ P- [! J# r4 Q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);# E! W$ Q: G4 ^( l  g+ i& y6 ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 r; K$ m) B, q5 {- M  U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");3 b7 Z: J" G$ b: {" W3 b2 K
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 {( m6 f1 y( ^' u  G% K; J
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% [" A6 P, [* x3 J, a( k0 A% D/ B
  698.       if(!Dn.Connected())
    4 X, [  x, V2 C
  699.       {
    3 T; n$ g* z& N# ]3 W. G
  700.         dwTotalFiles=1;
    ( r' i9 I2 v9 \! `- ~
  701.         dwDownLoaded=0;
    , B( O) F4 c+ ?: v! {
  702.         bSilentStep=TRUE;
    8 V/ C% |: a: D! b9 W
  703.         bCompressed=FALSE;
    1 Z8 |0 W% p! W5 o8 q. g
  704.         strExtLocal.Empty();/ e  f4 d; x% P
  705.         strFullName="readme.txt";
    5 _% ^5 [5 o2 Y, T6 ^% a
  706.         dwProgramState=AP_CONNECT;9 L! q  k9 E0 q
  707.       }7 ?! B' A, {! d7 o$ g
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 @  `+ h/ M# u0 c
  709.       dwStartUpSteps=2;
      n$ ~2 @0 f- i6 o: A* j- K; Q
  710.       break;3 G. m$ v: t3 _6 j: K6 g
  711.     case 2:
    ( J, K+ o; X' _  s' Z4 E
  712.       {7 c+ q( O" n* D0 \
  713.         int iEOF;
    . g' g+ C+ D1 S1 \+ `
  714.         FILE *fp;
    0 p( P+ z- B# d' N+ K' z
  715.         char szString[512];0 f. B  X5 d8 F  C6 N8 x
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ w& J9 O! e4 Y' i) ]
  717.         if(fp)
    7 t5 m$ \) O: W( O; B& Y
  718.         {
    1 d. B2 P7 X( b' o$ @/ c( `" b% E* E' G
  719.           do
    , P1 i2 h5 e0 G- d
  720.           {
    1 h0 U  g3 U! ]2 O' ]4 R
  721.             iEOF=fscanf(fp,"%s",szString);% L% G, w9 ]6 G9 ~4 {  P: Q. ?
  722.             if(strlen(szString))
    3 f5 K  O6 s; o8 h
  723.             {
    ; A* P* x( L6 G' s4 v. ]! k
  724.               if(bFirstChar)- ?4 o. `1 b/ {' D0 ]5 {
  725.               {4 `# k7 o) R5 V; A3 S7 C
  726.                 bFirstChar=FALSE;' Z. A4 K( ^' R0 m& x+ f  T& A
  727.                 bConnectIsBig5=FALSE;
    3 V1 E. s  ~# p, E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 j3 p: @2 z% q) I5 \* U
  729.               }
    & H/ a8 a# Q7 c6 C( c1 @0 p! ^: u
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      K7 H. ]* _7 q9 i: K5 h0 x
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: F0 F; V: l7 _$ L! E/ K
  732.               dlg->m_ListText.AddString(szString);/ T" a; G5 [+ |! U5 E1 L2 h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 r7 [; v9 d- q6 j
  734.               *szString=0;% L' G/ h% E- U6 l
  735.             }
    " Q- p( I, H4 N+ W$ }4 q* _
  736.           } while(iEOF!=EOF);3 a4 j8 w6 x! w( S
  737.           fclose(fp);" {, ^5 p4 \7 \% w: G3 N
  738.           unlink(".\\DownLoad\\readme.txt");/ t2 U) M9 V9 q+ m. H
  739.           dwStartUpSteps=3;
    3 l7 p$ l0 P* U8 |; r& j/ Q
  740.         }1 U. w% l1 G: y! B
  741.       }
    + ]4 q# F, y- E; B7 ?
  742.       break;. c3 b! x/ K: Q' p
  743.     case 3:
    ; S; i$ n  v% K4 K% z
  744.       if(!Dn.Connected())
    + r" M! T# @" \
  745.       {& W: H8 n, r. X
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    0 X8 M1 Y% S& \4 W4 u
  747.         dwTotalFiles=1;
    * O9 W+ a3 v  Z9 |
  748.         dwDownLoaded=0;1 v. D+ @9 r) ]  `) v3 G6 t
  749.         bSilentStep=TRUE;
    ) E) u* Y; `' X( f8 k. i5 v
  750.         bCompressed=FALSE;/ [% N- m% ?) E" |$ a2 f; x+ H
  751.         strExtLocal.Empty();
    9 S9 Z- D: M+ d( p
  752.         strFullName="checkversion.txt";4 q( b6 i# h; x& \& H
  753.         dwProgramState=AP_CONNECT;# T* S8 c: }  b' j) q& C. k. l
  754.       }4 p# e% H% M$ h4 m) K
  755.       dwStartUpSteps=4;
    / O9 X" ?: Q9 |4 Z  ^
  756.       break;# e  @# g& a  o2 j, @
  757.     case 4:
    . g( n4 S1 |9 h' d: V" V5 Z* N
  758.       {
    9 L) S7 h( m0 M0 ~: P! E
  759.         FILE *fp;4 s; x' ~0 s6 @" C+ U3 ?
  760.         char szString1[128];
    $ M& I4 Y# W9 s, i/ v
  761.         char szString2[128];
    8 T2 q% S8 c( d& c. I: Y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 K  T+ S! i1 R( E6 u
  763.         if(fp)7 j% ]# ^4 e- H  }2 Z
  764.         {& H) J6 q- `& c( k: F+ f
  765.           fscanf(fp,"%s",szString1);
    0 a; m$ m2 A& o. X& p( ?* ^
  766.           fclose(fp);
      U4 d. S  j3 c+ o. A4 Y( l8 J
  767.           fCheckVersion=atof(szString1);
    3 C1 i7 ]3 e2 x; F0 o! f
  768.           fp=fopen(".\\checkversion.dat","r");
    . W. t$ ?5 M" \$ c# x3 X6 h0 k
  769.           if(fp)
    8 s6 m7 o' H- k/ G3 z0 W" \
  770.           {
    , w: @9 v, y/ V
  771.             fscanf(fp,"%s",szString2);) m/ Y9 y: T9 y
  772.             fclose(fp);& y6 E& F; r. y) ^2 H* @
  773.             if(atof(szString1)!=atof(szString2))
    ( \( U( v+ p8 V8 x0 R
  774.             {
    0 o4 ]& o% k" H" @
  775.               if(!Dn.Connected())% x( q0 L7 l( p1 w4 u
  776.               {
    6 r1 K' j' V* w; Y( a
  777.                 bFirstUpdate=TRUE;2 X1 `. |9 n5 G) D" ^
  778.                 dwTotalFiles=1;8 r# d0 ?2 ?: y; g* d" N- O
  779.                 dwDownLoaded=0;8 Y% {1 w7 v, R
  780.                 bSilentStep=FALSE;
    ; I+ R  Z; H0 @# ?& W) t
  781.                 bCompressed=TRUE;
    ; Y5 A0 X: z5 y6 ?! a+ ^8 X
  782.                 strExtLocal=".\\DownLoad\";
    5 c' z" D3 C/ T( E
  783.                 strFullName="update.txt";4 r* i7 t# F- \: w  ^5 v
  784.                 dwProgramState=AP_CONNECT;
    2 w# t$ A5 R2 p8 T" R6 F
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 E: Y* A* g7 j& J
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");; X6 Q' o! L0 u9 [( \+ L1 E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 a9 q% O: k6 }

  788. 5 _3 T) R8 {6 Q7 ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: i' ]$ g9 i$ e. P5 I+ |: h
  790.                 unlink(".\\DownLoad\\checkversion.txt");% C( Z; n  G9 R( G# D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 k& i) n+ p* |+ s. d* o
  792.                 {( ^. s2 `& t- b4 C  f; S1 }- z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- o, H4 ]% R2 n6 l8 L
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    & _5 j' f7 E* a5 V7 B; b' Z! F
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 r4 B4 f9 c, o/ E: h) D7 f* y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 I1 n: {$ X: H- Z: {% O# o9 X+ f

  797. " A* {# _& Q% N0 b/ h8 x( Y& [
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & w  W/ M/ X  T. T9 Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 x" U. c1 x2 e* c  P6 L% n, D9 H
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      W5 X) B1 e, n9 I. w0 Y+ e
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% w0 X# M$ e( J& s/ Y
  802.                 }
    5 E) Q0 H2 S, R& ~3 v4 \( v
  803.                 dwStartUpSteps=5;5 l' {; i5 F" s1 V
  804.               }
    7 z/ x- W9 T3 Z8 z6 Q- J' N
  805.             }& l3 R2 ?- p% B4 v2 k
  806.             else6 v/ n3 u& |& Z
  807.             {' f1 @+ K$ Y8 u9 j8 l2 |, V- n
  808.               unlink(".\\DownLoad\\checkversion.txt");% k" l+ N: Z8 D+ {, b+ [8 p% Y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / [$ K* y' K3 y# \  o
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    3 H% l' \' z# t# j7 Q& ]2 Y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");) ]: l7 n; B) d1 x( T( ]

  812. + b& o0 U! k& B" Y" S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : f: _3 X- [1 u
  814.               dwStartUpSteps=99;
    % C3 l; z/ M6 Q
  815.               bFinishUpdated=TRUE;
    9 }# `( `9 L: v( w
  816.               bCanUpdate=TRUE;
    * N7 M2 i' s, j
  817.             }
    - n/ q  `9 Z) ]( v6 }
  818.           }
    + w6 r0 b- d! O3 \# w
  819.           else
    ' @: @+ u& J+ d! l# @
  820.           {
    0 I$ T( K3 b8 _" F5 ]$ b/ s
  821.             if(!Dn.Connected())) i8 [' N0 @6 k" E8 s) K( {% Q
  822.             {0 i! v) Q8 b+ D' Z& x
  823.               bFirstUpdate=TRUE;7 M; f, G& H0 z$ _2 R3 @& _+ K
  824.               dwTotalFiles=1;3 @% z: G7 W. f8 A
  825.               dwDownLoaded=0;  c# R; A1 }( g: j: P
  826.               bSilentStep=FALSE;
    2 t& E( s4 W' D" i5 }$ Y
  827.               bCompressed=TRUE;
    + \5 h) O' \, _0 M( b* d
  828.               strExtLocal=".\\DownLoad\";; _/ S, j( J* {! |; v: d
  829.               strFullName="update.txt";5 Y1 ^1 y( W8 ^0 E+ j
  830.               dwProgramState=AP_CONNECT;4 s% M$ e' Q' l* P: H  Q2 C  N
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; [( b. K& v& C) ]9 f/ k6 m/ }
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " g+ E* J, P( E' a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");" f! m2 Y) D5 ^6 u6 [+ Z: c
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 T6 V) I' u; ?2 a' @& y7 }
  835.               unlink(".\\DownLoad\\checkversion.txt");  W9 F$ e, u# S3 ?) H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    2 d+ ]9 X8 D8 V$ k
  837.               {
    / i' o7 ^* Y% g
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + G" p2 R* x1 b+ k
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");9 r: o( Z, `# p! l  H! ^4 f, z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ) G- j" a3 s4 R
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( ]$ h! J- j$ m" P: _
  842.                 3 p- G) c4 _* b: y$ @
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ ]# h* r- Q9 P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 u% C6 A. v. F  ]  Z6 F( w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; K3 u) N* t+ D/ ?
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' [( u" G5 D/ v& @# q6 e
  847.               }3 C1 x" W' Z8 _
  848.               dwStartUpSteps=5;+ u' A8 g( v) P/ T& a  n( `$ o. M
  849.             }
    2 A" u# [8 d! j# [  @
  850.           }
    # @* g- p1 x  g: A
  851.         }9 |4 v0 u) t- {* Q* g
  852.         else
    0 u. B. b; f. d, r+ g
  853.         {% ?  c4 j* K, ^8 W
  854.           dwStartUpSteps=3;0 h! i8 ~$ k1 [
  855.         }
    : m0 U4 S+ e7 C6 U" m  S1 y
  856.       }! i  A% _2 W( D+ d& X
  857.       break;
    ; j- `7 H: _6 H
  858.     case 5:9 x2 v# V- S/ B' m& Z- j% i
  859.       {
    & D% j( V* P; T. o' f2 a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)) ?1 r1 D, x% T1 Z
  861.         {5 x) u# l. K1 k8 h9 m. Z5 n! Z
  862.           int opt_overwrite=1;
    1 c) V5 }3 [0 A1 [; v( z
  863.           int opt_do_extract_withoutpath=0;
    3 @& H6 k+ d2 }9 e! T$ Z
  864.           unzFile uf=NULL;
    ( `- q- t# Y5 l: o3 n7 H
  865. $ q+ w) ^, U+ Y' r$ M
  866.           uf=unzOpen("Wsa.zip");
    ' [" Q# F5 f8 d0 Q1 y* H
  867.           if(uf)% N3 U( \# q2 p+ H% v. r* U
  868.           {: P* _9 U% ]: b, x* u
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    + N$ k/ g8 ]  f
  870.             unzClose(uf);
    & L5 {2 ?4 S  C
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");: x0 e, s6 A7 L3 t+ E
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 d5 A+ s( k' N  K2 `& M1 q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");; |+ M7 x4 k1 c8 b5 ^% a  k7 w1 b
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" _3 K: e# U) g( ?4 p
  875.           }
    + ^3 `1 n. k. z( B4 t9 G. d
  876.           DeleteFile("Wsa.zip" );# q( f5 B0 }" w) l
  877.         }% s* Q% Y" J/ q$ y

  878. 5 J, \6 Y# M; L/ y6 u) m9 X$ c
  879.         if(CheckLocalVersion())8 i, a& s0 x; @
  880.         {1 q& i! s6 j( Z8 X
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " {1 A, A- N# ^. B, b7 H
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    5 Z- N& }9 d2 a
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");. o4 H! `3 X$ V  i# R( f6 L% j# |
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + r/ }# p, S! F, T; [( {- ~" r
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    + c# l6 j4 d, E3 E) F/ ?3 e, y" e
  886.           dwStartUpSteps=99;- H  R4 \( I  V5 `5 \& e
  887.         }
    % R* w; {* \  {5 N
  888.         else
    6 `) d, [# I* g; k7 |7 I
  889.         {
    % H: U* L- g/ K+ p% q
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * m! I  }  n6 a5 B/ d# W
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ y0 I9 g$ G, e
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");$ f8 @" j% f. ?8 P+ h" d9 Z% ~

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

評分

參與人數 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-22 09:42

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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