CSUpdate.exe源代码

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

$ S- J# g8 p" ?
  1. / RevApp.cpp : Defines the class behaviors for the application.9 Y" k& B; t. ^6 N! k- A
  2. //
    1 W# j6 k; w" [

  3. : g- @6 Y# ?: B% y1 J& I( u6 o
  4. #include "stdafx.h"4 m: u  Q) w$ k+ w9 L) K1 Q

  5. / p# S4 t5 [5 U. X; Z4 E& M
  6. //#define UNICODE
    / b% W: B5 O# \% w0 `
  7. //#include <gdiplus.h>* z: @8 I* f" f3 i
  8. //using namespace Gdiplus;
    ! [" u+ z% _, @2 x& X

  9. & p  E% S$ n+ q6 f+ I
  10. #include "RevApp.h"
    + D$ _2 H2 W. s6 e0 f& z# _
  11. #include "RevAppDlg.h"
    $ o9 p1 y! ]) q- g+ _
  12.   N* \& K; i. K# t( b
  13. #pragma warning(disable:4786)
    0 p- x7 H5 `0 t6 k. s) Q. P
  14. #include <map>3 N3 ^" {# q" ~3 p
  15. #include <list>
    ! _$ u, v. g" j1 q" [: s$ {
  16. #include <direct.h>
    ; }* E5 s4 Q+ [, \. ]4 G
  17. # s9 O' i" p$ `* K) A, l" ]
  18. #ifdef _DEBUG
    " B8 W- x/ K! W* d6 }
  19. #define new DEBUG_NEW! Q# S2 r1 O8 T* F: ^9 w
  20. #undef THIS_FILE8 Z. t8 e2 a, x
  21. static char THIS_FILE[] = __FILE__;
    . N2 f+ v% X5 j* E
  22. #endif- j; y! ^; a1 M5 o0 W4 J
  23. #include "SkinResDef.h"/ R) a# ?3 {* b4 m4 j. U4 l
  24. #include "ChangeBG.h"
    3 d7 d6 h/ p/ b, V
  25. #include "AFXINET.H"
    4 S! a; A7 R( o) f2 U) p
  26. 3 Z) P! T$ e) z; ~: _' f
  27. #define TRADITIONAL_CHINESE 0
    & n! H' h) _& d: A7 H4 T
  28. #define SIMPLIFY_CHINESE 10 T" }/ q  `8 M  @2 t: I" ]$ K
  29. #define ENGLISH 2
    1 d( x# J/ C+ U" M- M
  30. int m_iLanguage = ENGLISH;
    + f7 {, z( K) a1 P% A
  31. /////////////////////////////////////////////////////////////////////////////0 D6 e) I( T2 N4 u
  32. // CRevAppApp
    / c; ], x* C) H6 l- f

  33. / ?. G/ z- s1 L
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& U' {: o  ~+ B' g4 p# v# i
  35.         //{{AFX_MSG_MAP(CRevAppApp)% Q* A4 [1 ?2 Y5 z- ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% ?6 g' f+ N. P7 }5 U, w! c# D5 I& [
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    3 k! Z/ f! s5 S. x
  38.         //}}AFX_MSG5 A% D$ e6 p8 }, _; N" l" `2 f$ A
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ( O* v3 {; S8 q  D" c$ f; e2 W
  40. END_MESSAGE_MAP(). N8 _* @9 {" T0 p

  41. ' n- k) f6 a8 I( q, Z
  42. ////////////////////////////////////////////////////////////////////////////// o6 n; y% b" F+ C5 `
  43. // CRevAppApp construction
    8 c6 G- ]2 J' D0 t' L; r" `

  44. - E, D; v& K+ s
  45. CRevAppApp::CRevAppApp()5 h2 U( ~' S) G0 r
  46. {0 t) V% Z9 U! c9 R1 K0 f
  47.         // TODO: add construction code here,) S  ~+ K9 t/ a/ B- y8 y' j
  48.         // Place all significant initialization in InitInstance
    ! a. ~; w6 O4 B, R
  49.   bDisplayIsBig5=FALSE;
    $ y5 R, R; h8 r4 _2 }! \- y
  50.   bRestartUpdater=FALSE;
    , I* h9 C3 f6 y9 y% ?# Y0 ?/ v
  51.   bFinishUpdated=FALSE;
    / Y; v: N) b4 N, E& D/ W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " D# R6 O" Z! U9 a7 H7 l! i
  53.   InitChangeDataBig52GBKS();
    . r9 J. X; S6 H/ k* m; ?( z: m
  54.   InitChangeDataGBKS2Big5();
    : `& k  s2 o) c9 r
  55.         //+ r8 K, H/ A! U* m
  56.         bClickRunExe = FALSE;: F0 d: j  j, {# b, D" I
  57.         //( g$ F+ t+ i' b" j# d
  58. }
    ( g& Q+ [% j1 m. _9 K0 O% d

  59.   T3 D( d7 c/ P9 [  {/ e6 N% X6 R0 m
  60. CRevAppApp::~CRevAppApp()
    2 n6 i+ Q# S6 W0 W$ \6 v- Z' `
  61. {0 f; B8 X: C$ t' `8 O7 q
  62.         // TODO: add construction code here,
    $ W" L# z6 Q' }
  63.         // Place all significant initialization in InitInstance1 I1 ~' I* W( F2 H& S
  64.   EndChangeData();, d  P% ]( ]2 d* `9 @
  65. }2 W, ~" Z3 b2 e: ~1 _3 W8 H+ ?" K. }

  66. 1 ?$ K) {* [) d4 |: y- q( ?
  67. /////////////////////////////////////////////////////////////////////////////
    4 f2 h/ k& B7 j: x! p) h
  68. // The one and only CRevAppApp object3 R2 {1 w( f$ D# f

  69. + R2 |1 Y3 ]+ \0 c* [9 k) F0 E! B( N
  70. CRevAppApp theApp;
    6 J. V" u; {0 h% F6 V9 l

  71. : {7 J  F8 B, e8 D* e
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . P( c7 D7 X3 [  X  \- H% v2 v$ {
  73. {( q' B# p, ~. G" _- A
  74.   int iEOF=0;
    " s5 r% a' ]( @% x9 D, P
  75.   char szTempName[MAX_PATH];
    / H. R' Z- s* X' t' a& S* K* l
  76.   *szFileName=0;, w$ y* o& C% W( t
  77.   iEOF=fscanf(fp,"%s",szTempName);. b: Z/ H! E- W/ v% Q6 |! U
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): ~- p- y, i  o! G" A, g9 X/ U
  79.   {
    & y  ?5 [0 J) k$ G0 n' G. w% ~* U
  80.     strcpy(szFileName,&szTempName[1]);- a7 `6 E5 }0 L7 Y- C' \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ' Z! {/ B9 m. g+ w
  82.     {2 h; |8 O3 h- R- E3 x9 z/ ^7 [
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ) V# r& E+ X' k- B/ W
  84.       strcat(szFileName," ");5 |6 m2 W2 E/ y7 Z, S, B: j$ k
  85.       strcat(szFileName,szTempName);! m5 A* T' ?4 s& S# _" \
  86.     }
    9 v- e! x7 t, S! L0 B% X: ~: e( H
  87.     if(strlen(szFileName)>=1)
    1 e  ?7 ]. q1 C( z" e6 G. X
  88.     {2 h' v2 W( x  u, a# W3 u( L
  89.       szFileName[strlen(szFileName)-1]=0;
    * z6 O' Q$ H4 e
  90.     }* W/ r% w5 a& k6 g$ o0 ^
  91.   }& p  Z0 x; o4 p5 S! K5 ]9 ~
  92.   return szFileName;3 q3 z: z4 U$ l, u/ n
  93. }
    5 V4 g4 D1 K7 ^9 i

  94. 3 v0 o9 p9 B0 c5 `# J% \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)$ O" s5 ]( t" @/ D% P
  96. {
    9 s& o* T5 Y( a7 O3 d6 n: X0 n3 ]
  97.   FILE *fp;7 n! }0 Z% B2 `1 N$ \$ w. s
  98.   char *key=NULL;
    " |7 E' b; q' B0 U; j* |) I2 p
  99.   char version[MAX_PATH];! `8 p. K0 `' W( _( f; g0 o
  100.   LPUPDATEFILE file,olds;5 q  h7 c2 X' Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 C* c2 P: m, m; J# o5 {
  102. 1 _9 Q) k' F0 K5 C5 J# f
  103.   UpdateList.clear();
      a6 G" j% J9 {
  104.   UpdateFile.clear();3 s! H5 z' C3 w$ V( b
  105.   if(GetFileAttributes(filename)==-1) return false;% c- ?4 l$ P6 i0 n; x4 N* k
  106.   if(!(fp=fopen(filename,"r"))) return false;5 b) }" {1 `: I: z, |4 `
  107.   fscanf(fp,"%s",version);
    2 r5 f. f) |) r6 f$ r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }+ c; I0 x( Q6 D
  109.   while(fscanf(fp,"%s",version)!=EOF)
    0 ^1 W& i$ ?  H8 }6 h8 s! g' h
  110.   {
      u: a; Q3 Q2 {3 c% ^* e+ M, T; f- k5 Z- R
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 U' Z+ g3 Y9 y: m1 w9 _2 x- e- a
  112.     fscanf(fp,"%s",file->path);
    / J8 V$ A& m/ w0 m' @4 E
  113.     ReadFileNames(fp,file->file);' m8 O" Q$ r3 B
  114.     strcpy(file->full,".");
    8 e$ v! l  Q2 ~5 p7 @
  115.     strcat(file->full,file->path);
    . _# l5 z' J: x) K4 @' C
  116.     strcat(file->full,file->file);/ [  A; t2 A% F( L+ b" ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ [; P/ K0 F; F" ^% w3 T
  118.     {
    % J/ M7 b) `4 i5 v
  119.       file->vers=(float)atof(version);
    8 L4 q- a) p+ k0 k8 M
  120.       UpdateList.push_back(file->full);
    & Z$ |" t# @) E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; `1 F7 Y0 h7 r/ C; J/ z
  122.     }. N, ~/ _! E1 v# y5 Z# P. z
  123.     else
    5 r( e' P( q* N/ Y" z9 Q6 Q
  124.     {
    2 {- `3 l- d+ w" Q
  125.       olds=(*p).second;* A) S0 x& c3 t1 `/ X
  126.       if(olds->vers<(float)atof(version))" i  @9 o- X9 a8 ~
  127.       {
    8 f" Q6 O7 y8 a' i
  128.         olds->vers=(float)atof(version);: d/ C( H6 H3 ~0 @: q3 B
  129.       }
    % }8 ]- G( c8 x
  130.       free(file);
    $ F- z0 i" z/ d3 b* S
  131.     }
    6 J5 a, F# x& V3 g- u  t& p
  132.   }+ k# K0 E* ?/ x5 Y: V/ b
  133.   fclose(fp);8 t/ s% C6 ^4 }) \, {- @
  134.   return true;
    7 E; s) Y3 `) m; H# V7 b+ [) Q
  135. }
    5 o, P5 Z& d1 u: m
  136. : N2 U" Y7 Y& G
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)- N# q/ I4 |- E8 [4 j, t
  138. {
    * n- {7 F( y! ?/ x3 Z
  139.   TCHAR  szFull[MAX_PATH];
    1 D3 g4 F2 j# m8 r1 P$ d2 c; k& a
  140.   TCHAR *token,*inter;+ T: R; ~% J: t6 ?; u7 m& y  k" k3 E
  141.   *szPath=0;
    ' ?+ g8 A) J" v+ s- ]) Y
  142.   strcpy(szFull,szFullPath);
    - d8 @0 {1 O, c& Q& ?+ N
  143.   token=strtok(szFull,"\\/");
    % I$ g  f1 }/ H, ^8 l% s2 e
  144.   inter=token;* S* F0 s5 m3 d, Z. u% t
  145.   while(token=strtok(NULL,"\\/"))
    6 w0 v" J/ {) S
  146.   {) c# L8 |- c% ~5 p3 a
  147.     strcat(szPath,inter);
    , Z- \; z1 N1 `5 S
  148.     strcat(szPath,"\");& e$ W; Q7 G( T9 o4 m) l
  149.     inter=token;( J! U9 y8 N& P1 I) n
  150.   }
    % j4 \- p: l# P" }$ D+ Q. i( d
  151.   return strlen(szPath);' [- q/ @2 \9 l' F5 [7 _. G4 x
  152. }  H3 N. v. y" S+ H  l1 G0 b
  153. 6 E9 L6 h: {" K  z! u9 v+ l. D
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( k2 W" L- X% d
  155. {
    1 C* t4 Q" `0 i$ l% a( w; B
  156.   DWORD attrib=GetFileAttributes(Target);! P7 m# R! J4 f* N; }# l4 A
  157.   if(attrib!=-1)
    0 v8 A# E7 L/ T& M- m4 `% T# n
  158.   {+ ^2 `. J% P6 N
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* c+ J1 S/ q$ S4 R' z" D: `
  160.     {- K5 V2 E8 M* K1 o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 i4 z5 i8 z, k8 w% b% X
  162.       SetFileAttributes(Target,attrib);
    * [/ R5 T# Q  _5 u0 A" i
  163.     }
    3 v+ s. r) {3 ^/ n) \8 X$ e2 B1 H
  164.   }
    4 G) b# g  G. `
  165.   CopyFile(Source,Target,Erase);% p) y# u* w5 E# p" M
  166. }
    ) _' h( Q$ c; A8 K

  167. , X3 t% J4 b! m# c4 w5 X
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    3 Q2 r6 k5 M) w1 N/ q/ h% ]
  169. {. C* D! k2 Q! e& b; W# [
  170.      FILE *fp;
    , r+ p; `# I& k7 I! @
  171.      char  szBuffer[8192];6 ^/ b/ ~2 R( v* Z. z
  172.   va_list  argptr;% j+ u4 `0 k: u, u6 f

  173. 8 q4 W7 R5 f! |0 ^) M6 o0 _
  174.         va_start(argptr,message);
    3 D' d, X+ l* q
  175.         vsprintf(szBuffer,message,argptr);
    & y1 e8 J4 ]* a6 F  [& m
  176.         va_end(argptr);
    % L( z, b" ]* W; P( _
  177.   fp=fopen(FileName,"a");6 I# q( W( P' B! @. n  ~0 ?
  178.   if(fp)
    ' ~* {' ~) ^% N1 i* H* H
  179.   {! M6 U4 s- d- z: P# C' _- |
  180.     fprintf(fp,szBuffer);3 C; r+ ~$ x$ g& O, V0 [
  181.     fclose(fp);  E9 p$ r9 u1 T3 t8 P6 P, q1 k
  182.           _flushall();
      q. F. f3 K& @+ Q4 y+ C  d# ^
  183.   }4 k7 a- X# ^- \
  184. }, C2 i) _+ w! H; L0 H8 \
  185. & k3 \0 d2 ^, J
  186. BOOL CRevAppApp::Fclearf(char *FileName), B: o4 W/ M+ z* X/ Z+ u
  187. {9 e9 ]/ |# ?5 x0 X5 |1 y4 y
  188.      FILE *fp;
    2 U0 Z! \4 Y' H  N8 o
  189.     DWORD  attrib;
    ! H1 }- C: i9 ~3 Q5 d
  190.   attrib=GetFileAttributes(FileName);
    4 y- h2 D- e5 d$ K$ ?
  191.   if(attrib!=-1), `1 l  A9 W0 N
  192.   {. g2 b% ^. d  A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( B- G3 D3 B5 a9 c+ f
  194.     if(!SetFileAttributes(FileName,attrib)): P1 Q7 ?5 V  F+ _, T3 z) J/ W5 C" j
  195.     {/ P: Z& J0 J$ A7 s' K8 v
  196.       return FALSE;6 u6 g0 M  T# w6 e# l
  197.     }, L) F8 m; X" I; [3 Q, B$ |
  198.   }6 [- R: H5 k# {
  199.   fp=fopen(FileName,"wb");
    & F9 L9 [  G0 A# Q
  200.   if(fp)
    % h. ]7 u- G; g8 _2 m" u
  201.   {
    . C* ]1 }7 |9 W: Y3 s) X9 S
  202.     fclose(fp);
    - a4 l) C, O0 G& \0 \6 `1 D7 Q8 h
  203.   }
    $ e3 H, r" O& G2 A# X% v" c
  204.   return TRUE;
    2 d2 [5 U- t; a. K2 h2 @+ V8 T: [" ?' U
  205. }$ h( y8 i' B1 g0 ]4 T& }& y  M
  206. ( a0 T  z9 R2 z* f
  207. BOOL CRevAppApp::UpdateLocalVersion(void), h# T9 C" w; K( F0 L
  208. {2 L, i2 O. R8 d
  209.   char filename[MAX_PATH];
    * Q: d$ w4 g3 a' x5 v8 {% _  C! Q$ j
  210.   LPUPDATEFILE file,olds;
    3 X+ F( [/ N  t, m) C( D8 |- m! V
  211.   std::map<int,CString>::iterator i;
    ! R+ S/ J2 F3 ~! G8 ~" w1 c
  212.   std::map<CString,LPUPDATEFILE>::iterator p;( \/ v/ k& i$ {( w% F: w
  213.   std::list<CString>::iterator l;% u7 I) E' p* G1 z2 \, S0 [, w
  214. ' v) i8 z2 W; A, \) H  e
  215.   if(bFirstUpdate)( b* {8 P+ t$ t3 X% Q+ K
  216.   {
    7 |$ j# x+ Z. C: m
  217.     dwCurrFile=0;/ L& q5 d3 r, {" l3 r/ g: R8 h
  218.     bFirstUpdate=FALSE;7 k3 D8 ], ?  b/ r4 d% K
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 F0 J* o5 O6 \' J+ V) M( }
  220.     {; U2 t6 d9 g/ Y6 B& W
  221.       dwTotalFiles=UpdateLocal.size();" t9 ^8 Y/ H  P+ Q2 r6 X5 M3 r
  222.       dwDownLoaded=0;4 l( M" ?6 q8 p; G; T) A: i7 ]
  223.       bSilentStep=FALSE;
    & J7 j1 ~3 N# e1 u5 M- T
  224.       bCompressed=TRUE;
    % l% R1 a+ j; a* ~
  225.       strExtLocal.Empty();6 W+ x9 }4 |' H2 u
  226.       strFullName=(*i).second;
    1 f, `# X& x9 R9 w, Q  R. ~( ^: C
  227.       dwProgramState=AP_CONNECT;8 P; b9 ?: b5 Y* U+ H: ~
  228.       return TRUE;5 J$ j  j: ~9 K# c1 R& a
  229.     }
    7 G. w! k3 X2 P' Y, H
  230.   }
    * E' _+ ^4 V& A4 g" m0 L
  231.   else if(bRestartUpdater==FALSE)
    $ o8 ~) F0 S: u; i  \
  232.   {
    ( G$ h5 M' }& r. b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())2 M5 p1 _2 T% z0 {5 U/ A
  234.     {1 x2 n- \) R5 ]% s7 ^! P: W
  235.       file=(*p).second;. _0 Q. K) e$ E# ~2 Z# e2 X7 \
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  c+ K! c3 b# M( f4 H( ~
  237.       {# q1 S6 C* |6 w) f  L
  238.         olds=(*p).second;
    . `7 A; [* I+ t
  239.         olds->vers=file->vers;
    ( a7 P- [, B. c( L
  240.       }
    + ]8 l) X' Q: v& B$ v0 c/ H/ A. y- l
  241.       else) w1 D% A5 i! X( y  n
  242.       {
    2 d' n9 l: ^1 N4 m2 T0 t. s  B* @' ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & ]: K- s/ k4 p8 I0 {  Y' m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , T! b! ^7 y$ r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& A0 e7 U3 M$ X5 R0 k: K2 p; t
  246.       }( C+ a  D" Y" L  c3 k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 Z( p9 L2 {& y: t6 e% }
  248.       sprintf(filename,"(%s)",file->file);
    . N& r3 l4 D/ C# g2 ~( A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 v/ j$ Y; V3 W. j4 v% i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }8 O1 J6 N# K. X: a
  251.     }* Q% |5 J# K5 K3 r8 u  z
  252.     dwCurrFile++;
    # x5 ]# z$ L: e% D# g
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 j) \3 Z. e- @( `
  254.     {$ i6 J, b# w  `' f) b9 ~
  255.       bSilentStep=FALSE;" K9 m2 Y; K6 B3 n: ]# z; j
  256.       bCompressed=TRUE;
    % E9 y4 ?; k6 }
  257.       strExtLocal.Empty();% N* \+ e/ F0 E1 |  t$ ~
  258.       strFullName=(*i).second;0 ~' X% r0 L/ m1 a9 L. @; F7 r
  259.       dwProgramState=AP_CONNECT;* A; p( a8 c; ?* g$ z
  260.       return TRUE;
    0 }1 }# u/ _7 T: ~
  261.     }* s8 x5 P9 s( O, J: \
  262.     if(!bRestartUpdater)
    0 ]4 j5 Z) |# y7 }' H+ M3 z# D& M
  263.     {
    , E5 J$ E' ~6 r, e1 F- j4 s5 w
  264.       int iCurrSize,iFileSize;
    4 k' V  H( G. L4 E
  265.       iCurrSize=0;
    ( S/ M4 k: @( g, z
  266.       iFileSize=UpdateList2.size();
    0 u' E# T0 z# Y5 K7 G8 ?. A
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ; K! h$ [0 @/ u
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , v/ Z1 B: J" e
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( O% C; N" k/ w, L1 [6 Z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, n" l; n) U$ t; g# |, ]
  271.       Fclearf(".\\update.dat");* a. _; }3 q& n  y- C6 i6 n
  272.       Fprintf(".\\update.dat","Bloodyf\n");) n; A: j  V- g- m8 D9 u
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . A8 `4 g/ B8 z0 B" Z; g
  274.       {9 P$ m) }* E0 g+ f. k' I( v2 {
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ( _) x" q& z6 j( B7 r' i# t
  276.         {
    + z/ c2 F% K" h; h/ v4 Z  m/ J
  277.           file=(*p).second;4 A2 U2 `9 B8 G1 g4 R: w
  278.           sprintf(filename,"(%s)",file->file);9 m! d4 Y% d0 s  g; f! w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + J' r& p$ X1 Y. s  _
  280.           iCurrSize++;
    0 E: F- x2 D, B& e# n$ v! ^( h3 O
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));* u& g4 m, d! L! d* g1 u- ?8 B. ~
  282.         }
    / A6 u$ H' a, q( Z0 Y8 {
  283.       }
    5 u7 H5 K, z5 d! k  R
  284.       unlink(".\\update.txt");
    2 w6 Z: `- [/ b0 i3 K; R
  285.       unlink(".\\update.tmp");
    + q' y$ [6 v, K. x6 o
  286.       Fclearf(".\\checkversion.dat");
    , r  Z5 V1 Z" `
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);) z: @6 x4 l4 v' J7 X
  288.       if(UpdateLocal.size())
    ( C$ T" ]# T! u& Q% I: j( t1 N
  289.       {+ K: C5 _4 m3 O- M- J* _
  290.         UpdateLocal.clear();
    % R+ Y+ P! V& r# q' t! ^. \% G7 i
  291.       }
    ) T0 v2 t! l1 b4 `; E  I+ D# q2 c
  292.       if(UpdateFile3.size())
    ( I4 R2 U5 I& k2 [/ \# Z
  293.       {$ U6 z# @1 U, E  H; x8 U
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 V8 I$ B! z" y4 V1 A4 I: K. }* ?
  295.         {
    ; w  ~6 ]0 x6 p: S
  296.           file=(*p).second;
    8 k' }+ k1 O( H* P: P1 L
  297.           free(file);( m7 b0 M( H7 @7 @
  298.         }: d+ R( h6 u& p+ q" _# U4 B# M$ m* h
  299.         UpdateFile3.clear();6 Z% K# f+ L$ ]/ ?; Q" R( O1 u' F
  300.         UpdateList3.clear();; G0 p4 m6 A6 s9 ?( \
  301.       }
    $ x4 e+ V$ |% h% W6 t$ J. b
  302.       if(UpdateFile2.size())* M% H. q; G5 Z# r
  303.       {
    9 w0 w6 h+ ?' D& c) A- d
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 H+ n3 C: q) _5 u8 x9 Q& [
  305.         {& P6 g( Q7 s& c
  306.           file=(*p).second;
    8 S/ {2 t# h* u6 R
  307.           free(file);
    8 @* l# T+ j9 t6 _
  308.         }  [1 S8 f" y9 z5 ]2 c
  309.         UpdateFile2.clear();
    7 H1 F$ [9 @9 e& h3 S2 C7 E8 ?
  310.         UpdateList2.clear();+ Y/ W  ]4 O' C$ I9 C: M& x
  311.       }% n2 t3 m0 t3 I8 w% ]: ?
  312.       if(UpdateFile1.size())
    " Y& m) S, e: o" p: N, W3 t
  313.       {
    ' z3 B6 W3 j+ a0 _" `1 @4 R3 G1 B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ T+ j' X( E! V/ w( U  n6 |: ~( |& i
  315.         {9 L$ g7 ?6 v; \5 q0 b
  316.           file=(*p).second;3 N% k0 m6 a1 J# O5 a4 l& r. S4 E5 L
  317.           free(file);2 D# s) ?6 \9 ?) ]: `0 K" P
  318.         }* {5 F, H5 D$ F. t3 ^% ?% B
  319.         UpdateFile1.clear();, k8 D" J- p3 x( Q
  320.         UpdateList1.clear();
    6 M. e8 F+ k; l: X
  321.       }5 L" l9 h' F. d' K' u8 s
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));7 H0 t% D, C6 l1 v1 Q
  323.     }  F0 G: w/ j* ]: J( P" U: Y3 Q' g
  324.   }. [- P$ o0 J+ Q/ c2 G& P$ \
  325.   return FALSE;
    1 v  m* f. \$ }4 R  v& I  d
  326. }
    - o! `9 I- [, }& c  z5 [; a

  327. & a( u* F0 S6 ], Z4 A
  328. void CRevAppApp::ClearAll(void)
    . _2 Y5 V0 e/ d7 V  M
  329. {
    ' j' w" T) r( d+ M- H" ~$ |
  330.   LPUPDATEFILE file;5 N# L8 r8 K% M" G0 o* I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;' u/ C: H( _( x) r
  332. 3 w- M# |# c  r
  333.   if(UpdateLocal.size())
    . q) H9 T! V1 s3 p
  334.   {
    4 o# @1 d+ @9 s- b  L+ Y# H
  335.     UpdateLocal.clear();5 ]' v! ~  z% z# @) s7 K: B
  336.   }/ O: t& L& \! P: g, p' t7 J
  337.   if(UpdateFile3.size())8 ~4 E  ]( U+ l1 e' u4 q
  338.   {. t/ X4 B- `  u8 T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 H! h5 ?) b# X8 k
  340.     {/ \! t; _! a; R+ L5 R9 Q! Z5 v
  341.       file=(*p).second;! U3 ]* M6 u3 \- {
  342.       free(file);6 K: U) c  b/ P# A4 D' }- v1 C
  343.     }
    ) i- \' H! q4 K9 J' q
  344.     UpdateFile3.clear();
    , @' }2 ]$ E4 E0 Q
  345.     UpdateList3.clear();
    : Q" A" |9 e2 v& L5 Y
  346.   }: J$ |  ]% f) z2 _/ [% V
  347.   if(UpdateFile2.size())5 {( d! ~. H2 B7 O- s5 N
  348.   {. }$ P( ?$ a, I) m* d3 o/ v0 E
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  `1 H9 a* [9 G' J9 N. V
  350.     {( f$ }: m/ b; L5 p: K+ T
  351.       file=(*p).second;$ W9 v/ ^2 z+ h8 u; _$ }. s( R
  352.       free(file);+ p$ p0 Z" e5 D  C: y- H# H$ x* ?
  353.     }
    ! U; o3 \5 Q1 S" P* s; v% ]7 K
  354.     UpdateFile2.clear();
    1 S, [6 w+ J1 n, b
  355.     UpdateList2.clear();4 G- m2 T7 F% G7 U. B+ c# V2 w, _
  356.   }
    3 y) A! [- I/ {  ]8 X
  357.   if(UpdateFile1.size())
    6 S/ l1 Z3 u* ?( M% b
  358.   {; A& Y! h  `7 i8 k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 _- O3 F+ ^& @: _9 U
  360.     {
    7 b: y* B4 w8 b, i+ N
  361.       file=(*p).second;5 c$ ~7 @/ O$ X% y/ j& ]4 k
  362.       free(file);$ F5 _& h6 f, Z' B8 S* J
  363.     }
    ! L& _6 b  c7 n+ w* D
  364.     UpdateFile1.clear();
    # s2 a1 X# V3 r" d* \8 _+ d
  365.     UpdateList1.clear();
    4 U( z1 b( |/ b8 Z  t6 y$ r
  366.   }
    0 \9 H- n. f0 V. s9 w
  367. }  2 U: J, J3 H7 f7 r$ _' D  H9 x
  368.   
    % a4 {9 V, `7 P- Q! b+ A- @
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; |# Q6 h& I3 ?1 j' F4 r
  370. {
    7 k0 c; m/ t8 J4 A8 i4 {' S( o  T" h
  371.   int c;
    ( r/ i/ h3 K) u8 i
  372.   LPUPDATEFILE file1,file2;9 r% ?7 t9 V7 b: O1 _, m% E  D
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* \# P" l0 ?8 L
  374.   std::list<CString>::iterator l;- r1 V0 b! S9 ~) @

  375. / C( ]! ]" R7 g, x
  376.   UpdateLocal.clear();
    ) r; I/ N! g  q- D$ {9 j! H/ R/ S3 L
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    , J, c2 E! U. v' U- M) X- ?
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* u6 I- C3 g* c! c
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 z, o& P/ H+ y
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    1 \3 Y$ X1 s! ^
  381.   if(UpdateFile3.size())
    7 H. Q  Y& k6 @( ?
  382.   {4 s* r% n( _* V3 b! [7 p3 _& w6 R: G7 L
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ l/ p& s4 K9 r/ @( K# K3 H( \3 ^
  384.     {2 y" p) x- M$ D. d  q
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( q# Z/ c; O' I! ^
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* \& Y4 X- i, ^( M- o
  387.       {) x7 o1 }) x3 a: [
  388.         file1=(LPUPDATEFILE)(*p).second;
    * g* w1 L# I+ K2 g5 ]
  389.         file1->vers=file2->vers;, ?6 `9 Q% z4 y$ y
  390.       }
    7 `, I: `7 U# J4 H5 a5 h: O5 u
  391.       else! g/ x& Y  v9 o7 s
  392.       {# m$ Q3 N( O" R5 ^9 @$ ~2 N# @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 Q( r7 M' Z8 z; T: S; U2 l. K- ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 d& W3 Y$ Q  Q! D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 o2 c) a" k. p2 f1 m2 S4 s$ T
  396.       }% [5 n' |. o8 N+ y: `% I4 e6 n
  397.     }
    + S" T$ _" H. c) o  a8 h! t
  398.   }2 |  w/ K$ D, _7 o4 U$ y  b8 Q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 ^1 I" C* V" x/ N9 c
  400.   {
    7 n) |& s/ L. u& i' h* q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 J' m3 V+ b# \5 |& F4 g  Q
  402.     {
    3 A1 O( L) s" C; @
  403.       file2=(LPUPDATEFILE)(*i).second;
    7 M+ D# j! P1 v# y- D0 Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / X+ l+ v" `' O! s( d( z2 b
  405.       {3 e- B6 z+ s- |; E4 B' {5 V
  406.         file1=(LPUPDATEFILE)(*p).second;5 P! O4 D7 ]4 A- z. W2 [0 z
  407.         if(file1->vers!=file2->vers)4 ^+ E1 t0 r, O- c
  408.         {
    . X1 @8 }8 x+ P. w3 g
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* y$ K' J0 \: ?9 t4 H
  410.           c++;# j; d4 n6 B* b! i& M% Z5 D; Z
  411.         }6 u. f# z" i) k- G
  412.       }' D2 v1 |) S& I, b
  413.       else
    2 a6 t  h, K. P5 H: Z- v) P& U
  414.       {
    - U: q5 t- M' Z5 e7 z9 H8 H
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " f# P! T+ G! x2 I( P& p  m
  416.         c++;
    # N  v& M% I$ A- M# Z
  417.       }3 @( D3 `" H9 @4 t4 K
  418.     }* @5 L7 s$ w. M: r3 Y# G. d8 y
  419.   }
    " c9 N& \2 f! g
  420.   unlink(".\\DownLoad\\update.txt");6 J4 e) }1 O( I4 O7 f6 R' E( I9 _
  421.   if(UpdateLocal.size()) return TRUE;5 h0 T3 X! O1 ~
  422.   else                   return FALSE;
    . v* J0 @! q# E9 p
  423. }, o4 h% P' L" w6 E  T2 v+ \. S4 |% W

  424. 1 z* O$ }, {  a& r, B
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    4 N3 t) L9 V4 e& b( }  X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( b3 r) }" k; Q! r4 y

  427. & j' ?/ a1 E4 ^

  428. # u* D/ _/ m8 J3 ~4 |7 _! f
  429. . R& N+ Q9 S" z! e) }5 _
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' t: i7 U* [; Y; U8 n8 E
  431. {
    5 {& L; F* O5 G/ C
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    + J  x0 e0 Q4 W: s# u  N: o
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), @: R! s% r3 y6 U" f: I$ q
  434.   {* a; j; t7 ^: A+ m4 q
  435.     char szLanguage[50];
    - E+ X0 G( }, A" W4 T* t* ^4 s( Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 R8 {4 `7 |3 J8 h+ ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 [3 a4 W# \8 `7 V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; s  ^) f) O2 l! c* @
  439.     else                                   m_iLanguage=ENGLISH;+ P) w' s1 O+ s
  440.     char szRegister[100];
    * s7 h% X& s% s
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; q+ y# H* L5 P7 ]1 ~* _* V2 _
  442.     strRegsName=szRegister;' j0 d, n3 P( X% G
  443.     char szPatchURL[100];
    : |0 k+ U2 l% D: ~3 a% w7 m8 N8 }- {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; W! v# f# E5 j5 j# A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 \5 t1 G0 }% M0 _3 L
  446.   }
    . x$ o* F0 T2 Q* k$ r1 u0 K8 A  g
  447.   else
    / V) n2 `6 f# ?- N( O+ y
  448.   {
    % T- B, L$ }5 u  z  J$ d: N4 o8 C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 [" _0 o( @7 F  I6 n3 r
  450.     strRegsName=DEFAULT_REG_URL;
    6 p* z: w  f1 D: M9 y
  451.   }
    * O  k/ h. t, P) U* k6 I) F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ) B* E; U+ @5 C2 G# _& }
  453.   {2 k) j$ q+ b9 C
  454.     char szIP[50];* {5 ~8 I& y, s: O& r1 [6 ?
  455.     char szDIR[300];2 w  W: Y- M# ?9 O+ `* |
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* p; s. r- c# H  W) z. R% G1 b
  457.     {# X4 k7 M" L1 d" f$ }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ! F& e2 M' Q% Y  o. R- d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! ]. \0 n) e  q0 r' M  r2 r3 C
  460.       strHostName=szIP;
    - C( m1 N( K8 O5 o$ v
  461.       strHostPath.Format("/%s",szDIR);" d4 x! M" d; d  {$ P6 Y
  462.     }
    . B5 i0 _& H! u1 s! ~$ ?7 Z
  463.     else. I  S4 ~( u& B* Z
  464.     {4 Q* r' J$ L# W, ]" Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- o1 Q1 v4 h5 Z9 v+ g
  466.       {
    ( S0 z5 W* H7 ~  O2 |$ r$ Y
  467.         char szLanguage[50];
    ) X  |6 L1 {) n( B- i2 \1 u
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' K9 K7 b# P2 R) O1 E. [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: }7 p' n2 J; V& B$ D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    7 D) @% Z) f( t3 g9 U3 |& R# w5 L# w3 @
  471.         else                                   m_iLanguage=ENGLISH;
    5 ^% t6 O+ y* v, t
  472.         char szRegister[100];  M/ M& r% y/ W. c. e
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 A2 S; k0 \6 z/ `
  474.         strRegsName=szRegister;
    " ^9 F3 X# _$ `% H$ u* `
  475.         char szPatchURL[100];
    . e. W0 S+ c9 J6 \6 J7 o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 T/ k  g3 C0 I6 ]5 m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) ^3 e2 H# g6 o5 N% ?# b: A8 Y( H
  478.       }, p% k! A+ Q: S3 h8 N
  479.       else
    * z) W. i. ]6 w" U" X0 t  e" \% c
  480.       {
    % E+ ?: G, j3 W2 A
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 b- f0 l  h1 d/ `% E5 a
  482.         strRegsName=DEFAULT_REG_URL;
    & k+ q8 a- y! z7 q! i: \% R; f% J
  483.       }
    2 F: @) |8 h! l, D( c! p+ E
  484.     }' `  e' y  [0 T, ]
  485.   }
    5 z& H$ H! @# Q! d0 e8 ?, i; |( T- h
  486.   return true;
    + F" g0 l/ s5 o6 ]
  487. }+ f& T* A8 ]" o
  488. % A. B( f4 F0 E, y/ j+ ]% p& z
  489. #include ".\ZLib\unzip.h"+ o9 p4 ]! c4 J1 B( T3 |
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    1 O5 w' I% ^% z9 |' R- J
  491. /////////////////////////////////////////////////////////////////////////////
    ; V0 N) i1 c. i- _
  492. // CRevAppApp initialization
    6 \# \( T4 P% S
  493. & @0 g5 J$ A' b  t2 K- K8 ?" ~0 {
  494. BOOL CRevAppApp::InitInstance()
    # s3 k; }: @8 z  ^: T% O" K
  495. {
    6 ~, K7 W; ?$ f  T
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' `# C- |9 ?' o: R2 W# k! `
  497. ( k# {0 ^  ~( y' V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 y, v8 g9 r: ~, `: [
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 Y& W7 Z6 \5 a( u& B0 \8 e
  500.   {- E- s+ O' x5 @
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! D& X, X$ w0 T  N" ~& ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ; L& c* z0 r' t2 Q9 c4 \: t! i
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). }. b2 P5 c- u) ~4 b
  504.     {, o4 h" X) I. N$ K
  505.       strcpy(szPath,szPathTarget);8 W1 ?2 _$ R, P
  506.       SetCurrentDirectory(szPath);5 t9 t& N# R  r3 e: w' g
  507.     }
    # o( h* ]8 C5 T2 H. h$ `. W- S
  508.   }' ?* F3 I7 v: u/ \: c
  509. #ifdef _DEBUG5 I2 q* p2 V" L) r8 W/ T7 n
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 s) N4 u4 K- {. d
  511. #else
    / i) `, R9 u& `- H- P$ Q' V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 R/ g5 j6 A( t
  513. #endif8 j2 O% I0 N4 f3 {: F
  514.   {
    1 I: L2 X: Y6 N( G9 W$ |0 S6 e
  515.     char tempFileName[MAX_PATH];) @+ R3 R1 w  K- j9 X
  516.     strcpy(tempFileName,szPathSource);/ S- }+ C& a0 }
  517.     tempFileName[strlen(szPathSource)-12]=0;
    $ e1 p& D* l4 H5 V1 _' o4 c2 c! |. A) Q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! N7 J9 z2 P3 k* Z: M6 ^6 U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 z' z3 O- R1 _- J+ D/ q0 |3 v
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% i/ m" _6 X0 M6 o
  521.     return TRUE;& M1 N* h/ I6 s) T  k) ^. @
  522.   }
    / c. R) C; ]6 l% B4 U* F" N7 U
  523.   // Nuke 0118: Delete run.exe& t7 u6 Z0 B" W/ H( M. Y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    + y0 Y$ ?8 U' X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");5 Y+ e- {# ^" E3 H; u( s' Q
  526.   if(!ReadCfgFile("Config.ini"))7 a) d; m( U+ p7 h3 Q3 p
  527.   {3 k0 j* |: K% k) `8 Q
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 n9 O0 c* V" w; Y  e
  529.     return TRUE;0 M! h* S3 N  Y( Y9 P/ f6 L
  530.   }9 c6 Z3 ?2 Y. X9 K; t
  531.   HANDLE mutex;3 Z, L9 ?9 g1 p
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* U6 H3 U8 {4 g+ @8 C
  533.   {' E1 f7 i( |& W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    $ W, B* D& ^, n8 `( c& A+ x
  535.     {
    5 ]( j& H& A' Q2 M
  536.       CloseHandle(mutex);
    % A7 h) T& s8 k& @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);) n; Y% I: Y: P5 }7 w
  538.       return TRUE;
    / k0 ^) i( G$ ~* F& i. D6 x
  539.     }
    . Q4 F+ j; V0 T2 \9 N
  540.   }  
    " x: d! Y8 s0 Q( x4 Z
  541.   CloseHandle(mutex);
    9 Q3 _$ I! Z( w! T) p) {& R5 h
  542. / U- H+ j- m$ E: Y5 n3 M( M3 g/ k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);/ |6 c1 S- ?4 f+ S+ j6 k. B( T. P' a7 |+ o

  544. ( N+ |, u% ^6 H+ R6 S
  545.         AfxEnableControlContainer();* g) [+ |( _3 ~- T% F& h, b' k: v

  546. / V( }  ^  F6 ~# W  e# U- @
  547.   bCanUpdate=FALSE;
    9 a4 K5 g; U# d8 o
  548.   dwStartUpSteps=1;
    4 L6 J% l4 J0 u; g% G5 d0 V. `
  549.   dwProgramState=AP_NOTHING;! |- u; u/ n9 w$ k! l
  550.   y; u6 `& O. ]/ F! J' _' W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    8 a9 y2 K  w3 z
  552. 0 k8 [! [6 {9 m" J. t
  553.         // Standard initialization7 O. w0 j4 r# \8 V9 N' B
  554.         // If you are not using these features and wish to reduce the size- F& A2 Y7 C; ]
  555.         //  of your final executable, you should remove from the following  }( I/ B" t" L
  556.         //  the specific initialization routines you do not need.
    2 p. \0 G; m' G

  557. , K' M, W- D  o* q7 y3 U1 H4 z- Q
  558. #ifdef _AFXDLL
    + G: x9 Y) L; i  I6 Y+ L( [, ?
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL4 R! j# p2 r" a; i
  560. #else
    & _: x) \6 [2 ?2 E1 w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically' K4 q' s6 v3 w7 M+ a1 J5 W
  562. #endif; d: O9 m2 }/ C$ M: X
  563. ) k2 M5 j; Z' L# p. Q
  564.   dlg=new CRevAppDlg;' z9 k( O3 F1 I# J0 S1 k. C3 C+ O
  565.   dlg->Create(IDD_REVAPP_DIALOG);5 T1 F; C' n& M
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    9 d" k! Q0 Y# }1 p
  567.   m_pMainWnd=dlg;
    ' m+ \2 g% i* k) `, |. K

  568. 1 S! ~% b4 C9 }# Q9 I9 c! q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);$ J) r  B6 b6 I5 E2 v: o

  570. 3 F* p1 o7 C& c1 ^0 g
  571. //  GdiplusStartupInput gdiplusStartupInput;; _* u1 X+ P+ V* b
  572. //  ULONG_PTR gdiplusToken;
    / O+ b" u6 m  C. X* P, v$ |# T
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    - {$ h5 o* _5 D- a! l+ \6 E

  574. ; |+ ]$ J9 I9 V- T7 d6 `5 ]# `5 |
  575. //        CRevAppDlg dlg;
    & `9 ~6 C* L% @
  576. //        int nResponse = dlg.DoModal();
    , W0 i9 y2 J+ ~1 c" H! D/ a
  577. //        if (nResponse == IDOK)
    4 P5 I' Q! N, N, [2 r& V+ k( e8 [! ^
  578. //        {
    . F5 F- E& ~5 C( `; G
  579. //                // TODO: Place code here to handle when the dialog is
    . [( g2 ?- w- n. E' ?0 _
  580. //                //  dismissed with OK
      ?1 ?) [1 S) b
  581. //        }
    4 N6 R/ @; Z7 d: {9 K1 d
  582. //        else if (nResponse == IDCANCEL)
    * ^4 @* u; t. K5 q4 a0 k
  583. //        {# N7 Y6 `2 n  m8 \3 B$ z
  584. //                // TODO: Place code here to handle when the dialog is  `" _5 t/ A& ~
  585. //                //  dismissed with Cancel% H* Z; }. y# \
  586. //        }. h- d6 g& \7 C/ p$ A* ~

  587. 3 J* m0 F3 Q5 k1 X" y2 U9 k9 p+ W
  588.         // Since the dialog has been closed, return FALSE so that we exit the$ ]- V$ l4 t; ^! \  X6 d! Z
  589.         //  application, rather than start the application's message pump.# W  S) |8 k( z* E* {
  590.         return TRUE;
    - K8 P7 x5 v0 b3 {& B+ m
  591. }
    ( a4 J2 P# p( k4 y2 M1 I

  592. 6 R& J. G1 n- ^: M  \6 R
  593. char *CRevAppApp::strtok3(char *pSource,char *token)7 A8 W7 Y& }' X/ y4 R( r
  594. {
    3 T3 D1 t+ u' x1 @' ~4 D! s
  595.   int i;
      q; Q' \0 i2 J
  596.   char *szRet;' v; P! y5 I5 S! M
  597. 2 C- Y* {2 K7 V3 H* ?7 l0 ?7 t
  598.   if(pSource) { itoken=0; sztoken=pSource; }" U0 |9 `: B8 S) L2 o  J
  599.   if(sztoken)
    * B. d4 b' C4 I6 l+ ]% p& l
  600.   {
    ; _2 l* q3 R5 E5 U3 E3 _4 H4 `' c* c
  601.     szRet=&sztoken[itoken];6 [; }0 v: @0 T  T, P5 L: {/ P
  602.     while(sztoken[itoken])
    5 P; x/ c; f3 ?, e7 y% s/ u) W5 d
  603.     {: D& ]( w3 Q' H
  604.       for(i=0;i<(int)strlen(token);i++)
    9 L2 h! A/ u& z, y
  605.       {
    2 T) J; ?+ {  f6 s8 q3 m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % G- {* y6 i3 F5 t$ J' d' s7 F
  607.         {8 \7 q' a+ ?  b2 m/ o
  608.           sztoken[itoken++]=0;
    3 h. B, D+ X; L( `' Z2 z9 ^
  609.           sztoken[itoken++]=0;
    . V$ ~; U5 S, g8 b  z1 C' O" N/ [
  610.           return szRet;
    : ]- v) t% M! F5 x
  611.         }
    3 H2 l2 n. v3 l2 s2 V* U2 |8 O
  612.       }
    ) @2 e! p9 V, J, z
  613.       itoken++;! Z' u9 }' _/ L/ X* x
  614.     }0 |6 A# S1 ?* \/ j- X& @/ j
  615.   }/ w2 g* p, a$ e2 Y* e# f
  616.   return NULL;
    + d7 N: Z5 p$ M/ k- A. ]$ N' G
  617. }
    4 N! [0 I0 a" |" Q3 n6 G

  618. ; S3 v3 R( q% ]
  619. void ProcessProc(long Total,long Current)
      E- A3 E- I: |7 w8 _1 B) t
  620. {# G7 w. s9 s6 }0 c! l! |
  621.         MSG msg;) b) ]2 b% W7 R' F3 z  r+ g  \; X
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 F  p" r0 O' {. I: X  v
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 K: v3 S7 X" h, U, A
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ( ]# }9 e3 k8 D% k# j
  625.         {
    1 \  A, W# _* z& I
  626.                 if(!GetMessage(&msg,NULL,0,0))
    : ?, R, G" D+ K. {0 E3 }  K* w' M5 {
  627.                 {
    : W& l. I  ?/ e& ^
  628.                         return;, l+ _* V& V  I) y
  629.                 }) L/ ^! V3 _2 i0 V$ Y- D
  630.                 TranslateMessage(&msg);% _. s: m+ C, Z- f4 C( x+ ]
  631.                 DispatchMessage(&msg);
    ( }0 Y" z. K4 W: _8 G+ M
  632.         }       
    1 w, W( Z  }- P4 B
  633. }
    6 p! k' Z2 \+ l0 @8 Z+ O

  634. ' y" ^$ q( M% S/ S$ |' T% y/ K
  635. BOOL bFirstChar=TRUE;
    " `) z% u! G, C' p1 @  I

  636. ( K5 O: h% ^  {5 w! d; O/ |. C$ |. `! s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - f  |1 N  Q4 d8 k5 g! w) T; w# Y2 S! Q
  638. {8 F1 Q9 d9 J$ s
  639.         // TODO: Add your specialized code here and/or call the base class2 Q8 z' G9 @. w/ L* [  P
  640.   switch(dwProgramState)
    + I/ C& `0 `4 W, ~
  641.   {" S7 Q# ?' ~6 K  K/ L( O! c0 g
  642.   case AP_NOTHING:0 y6 P1 p& o4 [0 p
  643.     switch(dwStartUpSteps)7 M. t* o& ?% \& e* D. w0 s2 T
  644.     {$ G; b6 I; s2 v; e! u& p% D
  645.     case 1:. W" G) u* i9 f: O% n" {
  646.       {2 h% H/ }9 C' l( y! v
  647.         int i;
    3 c( U4 B+ E! {8 g
  648.         CDC *pCDC=dlg->GetDC();! O3 I( g  |/ O8 R
  649.         HDC hdcwnd=pCDC->m_hDC;, a* @2 m( U* u" E& U
  650. //        Graphics graphics(hdcwnd);. f& G$ E: d$ w' n- o; e- r
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( x/ G; U# u2 M/ _2 ]1 K- ?
  652. //        INT iWidth=bitmap.GetWidth();) }8 }/ c* ?9 R, r5 Q4 h
  653. //        INT iHeight=bitmap.GetHeight();: E6 ?7 x( G' S. n  M+ N
  654. //        Color color,colorTemp;* g4 u% Y9 J$ q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    % L3 x, b& @0 b$ p# _9 R3 v' |' w
  656. //        {, f6 A: ^6 r, k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 F# M& O. ~9 f# D5 o" x. h2 _
  658. //          {$ h8 Z$ l. K5 ?( v5 x7 ~( Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' i. o' S' v/ w
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 u0 d% D2 @( O2 K
  661. //              (BYTE)(255*iColumn/iWidth),
    $ x- ?( E# j5 ?$ P. A+ V! ]
  662. //              color.GetRed(),
    # n1 i# U: g  P# k1 q
  663. //              color.GetGreen(),% I. U0 w( x; O$ _! o& F. E4 m+ |
  664. //              color.GetBlue()));
    1 h$ J' _1 h) y/ r8 \, a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 m2 x' e6 w, v5 q, p1 P
  666. //          }6 \2 @. C  ~  u9 J, B4 d; t+ r5 a
  667. //        }
    $ B' D* i" ]& a4 k! J0 y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    9 e5 P7 ?3 l( I# a* j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 j1 Y: r7 G( S
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( t. D. i; k8 @( K2 a& M
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 h( ~7 `. K4 Q$ P8 X
  672.         for(i=0;i<240;i+=8)
    ( r6 T1 C9 Z8 `  C2 y; ~3 k7 U
  673.         {$ e# F5 J- ]9 u1 _. T) y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);8 \2 v+ V" W& ], s8 w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 E+ s" H. b6 |; ]# \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ T! R, {" \6 }5 G
  677.           Sleep(33);" a4 U* `. i- @9 ^/ o8 s  M7 @3 x
  678.         }0 q3 G& S8 p7 Z& l1 m
  679.         Sleep(1000);3 I% H# ^6 ^7 P8 B6 d, r: \
  680.         for(i=240;i>0;i-=8)
    ) K" d. L) G$ r; v! s, ^
  681.         {
      f! O7 w9 r* z" t6 g1 g! F1 b
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      Y8 g. ]( n) @. n- k- b, N  H: [, ~
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 p  N/ n$ l  }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( p, i1 L* J4 s$ J+ z# B" S2 ?
  685.           Sleep(33);* D- V- C* D+ a/ i0 ^
  686.         }9 M! O, z7 c8 V( A* V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);, s0 U5 G/ Q! M, m
  688.         dlg->ReleaseDC(pCDC);, H: H' S, `: Y0 P) o$ U
  689.         DeleteDC(hdctar);
    2 g6 F, x( s( D
  690.         DeleteDC(hdcsrc);# C& A# N8 A* W5 d/ R
  691.         DeleteDC(hdcorg);
    ; V( Z9 o7 H+ r* @1 K& A. c
  692.       }
    ) N/ O, f. T; V8 E7 w1 g! w5 i5 q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . a0 i) j3 X$ H2 G% d& h
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + @% r& J) C: G- A$ h# A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 q, [# K" C; ?1 w$ B
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , V9 T$ G6 o0 R" M* F
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 u$ ~4 F$ K8 L# ?
  698.       if(!Dn.Connected()), W+ T& t; B; \  J& K; c9 @6 H/ w
  699.       {
    6 t7 t$ W4 E+ ]8 S' ]* u9 E
  700.         dwTotalFiles=1;- Y0 A  E$ I0 w7 Q, o
  701.         dwDownLoaded=0;. H* D% q6 c2 ~2 ?; A8 ^
  702.         bSilentStep=TRUE;, n, c0 ~6 l; [
  703.         bCompressed=FALSE;
    # l/ v: }' o0 [! h5 r# F8 S5 m4 h
  704.         strExtLocal.Empty();
    - H+ ^2 E6 f. I; P* m& r7 v
  705.         strFullName="readme.txt";5 P1 H) r* G7 {2 m9 i4 G; K& G
  706.         dwProgramState=AP_CONNECT;+ o4 d2 l8 E3 Z# W
  707.       }# ^' H# r' m' f8 }7 b& F0 H; a9 f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 |6 d7 `+ g  u4 G+ V" N
  709.       dwStartUpSteps=2;
    % a, H/ R2 ~2 W( A
  710.       break;* o' U, q9 t6 K' V  ~$ J! d
  711.     case 2:6 S9 n) ^' l" c1 E
  712.       {4 M$ L+ E0 \& P5 e# O8 C
  713.         int iEOF;
    " b5 _7 n2 B9 V3 u: n
  714.         FILE *fp;
    3 j$ L0 Y: v* c: \
  715.         char szString[512];
    6 t! t1 h* W: q3 b1 @2 y: ^
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + _" _1 J4 ~' G! R! h
  717.         if(fp)9 f1 w* E7 t. U+ S+ e* V6 N3 E$ K* s
  718.         {: b0 H# g/ ]5 Q4 B+ Z/ p' d  _; x
  719.           do
    . u' U) `( W- I' {$ O
  720.           {9 c( Z7 n! U4 ?% W4 ?/ Z4 ]4 G1 Q
  721.             iEOF=fscanf(fp,"%s",szString);$ S- G2 o7 k) k4 E5 O4 i9 L
  722.             if(strlen(szString))6 {! n7 T4 ^( S% Y6 D
  723.             {
    9 Q" q- J( K& c6 s) F
  724.               if(bFirstChar)7 [4 G1 G+ J, G
  725.               {
    # e* l5 e4 i# K1 S# ^
  726.                 bFirstChar=FALSE;
    6 \$ E  _# k, _8 L  Q0 y
  727.                 bConnectIsBig5=FALSE;2 o; w# [  {7 I1 K& a; Q9 X
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 p: o5 Z: c/ s. A
  729.               }3 Z' X$ L: \6 a! m  n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    % G/ O- e8 h6 ]  z+ A7 k: s; v
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 b5 T2 ]0 S' U8 z3 C
  732.               dlg->m_ListText.AddString(szString);- `3 M2 c+ q* {* |+ o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ]3 S' t8 X+ y* _* N
  734.               *szString=0;8 m% I. f3 Q; H  v- g
  735.             }
    + S6 h- ?" N0 A8 _% V: w
  736.           } while(iEOF!=EOF);
    0 r  Z. O: Z  e; \
  737.           fclose(fp);5 D' V2 O4 b% _
  738.           unlink(".\\DownLoad\\readme.txt");& X! O2 y7 ?9 @# b0 S0 ~
  739.           dwStartUpSteps=3;& r3 X3 O- u3 @3 q/ z
  740.         }( `0 m1 v% A: j+ R  u* F0 [; P1 ]: Q4 r
  741.       }
    # G! b9 a/ C9 O( O' k% ~; t* p
  742.       break;
    * S+ p- b5 y) F3 i1 D
  743.     case 3:; }" j" v4 \- c5 d% @6 j9 S9 {
  744.       if(!Dn.Connected())6 j% m% C* r1 P8 N) y! i- Z
  745.       {) _+ }. ?; X3 q" z0 E( O0 z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
      f+ @0 r, u7 v  A/ G$ Q8 ~
  747.         dwTotalFiles=1;& y! v$ b; k" U* T
  748.         dwDownLoaded=0;
    * p* S1 d  H+ |% K0 k$ x$ h9 h; y6 E( ?
  749.         bSilentStep=TRUE;
      |9 w" P- C* d
  750.         bCompressed=FALSE;
    , B) K5 S- r/ O( m
  751.         strExtLocal.Empty();
    # |# U8 z6 i; m8 H8 y  o
  752.         strFullName="checkversion.txt";
    ' U9 [/ ~2 m- G: U! x3 J
  753.         dwProgramState=AP_CONNECT;
    & `6 r) w& N/ U! \% a
  754.       }
    + U5 c; v4 U& q2 Q* V# G4 {( T
  755.       dwStartUpSteps=4;
    8 r- o* d. g) D! {7 V
  756.       break;/ i. K! X# P8 O' `- W& V3 Y( o
  757.     case 4:3 ^' B3 i1 v( M( H5 J  W; D# ^- [
  758.       {' I6 w& t4 j3 L
  759.         FILE *fp;. J0 B) D* q# ~, e, w* T9 f5 ^* q
  760.         char szString1[128];' [- Z1 W* G" B% J
  761.         char szString2[128];
    ' L/ l( O; {/ }/ F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 d' R, l  E- ~. u4 x
  763.         if(fp)
    ' u& Y3 V1 J$ I- V4 Z. s. b
  764.         {
    : ?1 ]& f1 W( o  D1 B! T  U. {
  765.           fscanf(fp,"%s",szString1);
    % N  z6 |& a4 ^9 ~
  766.           fclose(fp);/ ]7 G2 s, N) g6 s9 g
  767.           fCheckVersion=atof(szString1);) ~# \4 z$ v  r+ o! I4 I
  768.           fp=fopen(".\\checkversion.dat","r");- f( j( K( [! X! {
  769.           if(fp)5 m0 C5 c/ [; W# l6 M
  770.           {
    ! t0 n+ W, G1 s( K! j, P/ W5 R
  771.             fscanf(fp,"%s",szString2);
    + v7 h$ E6 V+ U* p
  772.             fclose(fp);' R6 M# `0 b! a" _8 v& P9 y
  773.             if(atof(szString1)!=atof(szString2))
    * ~6 j7 ]" z  L5 R( s
  774.             {
    % s  ^+ R4 Q# O$ d
  775.               if(!Dn.Connected())
      H9 M# D3 i6 [! @+ l- w- e* C
  776.               {& k6 ?$ o, [- {+ P( `4 }+ E! S
  777.                 bFirstUpdate=TRUE;
    8 z* n/ {7 ^. J7 Z
  778.                 dwTotalFiles=1;- _% j& T4 M& X3 F0 ^( S4 Q
  779.                 dwDownLoaded=0;, F0 J$ }- L8 w2 S2 _
  780.                 bSilentStep=FALSE;
    + ?  {/ X; i" P, g' d& ~3 Q( t- G4 P
  781.                 bCompressed=TRUE;
    0 q+ }# d8 s: j' n' _
  782.                 strExtLocal=".\\DownLoad\";) q+ x) R4 ?  I1 q' J
  783.                 strFullName="update.txt";
    " M- k# y& a/ i* S0 y: l
  784.                 dwProgramState=AP_CONNECT;
    ' X' A4 @; v3 Y/ V0 c. h& v
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( g0 P5 M  G3 `% x" C: o) f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( d7 W7 z& X# V$ r
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' v* |# x2 w2 V$ ~# @; z, J* x

  788. : t3 E/ ^* _. m/ s6 u8 \
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 \- _. W: _+ t1 Q: x; H9 b4 j
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    3 v1 j1 c0 b& J* D9 o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 H; Z6 ]4 o9 P. U$ U- e
  792.                 {
    ! P' _5 i( e& N' `* k( G
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! a+ B: w( l% t- z4 P
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");6 }6 X8 }# u6 X! d9 @2 e
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& b6 Z. I$ H* c* D- b. @9 R: m  H
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * w, b, p1 [6 L6 ]: {& J2 I

  797. $ U3 Z7 m1 o7 o5 }* U# _' W+ R
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");) ?1 u0 `. W, q* e. W. e2 }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( R9 f( D& I4 Y5 L; S
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - C$ C6 x; R# H. e
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      J& H3 A+ @( o5 Y7 z
  802.                 }. [0 a2 y4 i3 o
  803.                 dwStartUpSteps=5;6 P) c4 q, _3 G* U6 Q& j
  804.               }6 M0 s( @6 R$ B# ^0 m
  805.             }
    ' z* g; G. y  Z# `6 j: b
  806.             else9 ], n1 p% a& }, U/ j% [4 J* K
  807.             {! T/ a: |9 A4 t! U% h1 ^
  808.               unlink(".\\DownLoad\\checkversion.txt");& T5 U" }% g3 X5 X" T: \+ K2 t" U! x
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    : w! c6 M, S. a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ X( {; x9 j( Q0 X
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % B2 O4 M; H# l, s4 S* {* N* T

  812. ! [- T9 T& b4 x: k, T; D# Q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( L* W9 ~3 s3 R6 T- v
  814.               dwStartUpSteps=99;
    : f8 F  N* A8 N# }& u' E
  815.               bFinishUpdated=TRUE;3 b9 m0 V4 y# N2 x( p4 i3 l
  816.               bCanUpdate=TRUE;/ ]0 }+ Q5 c+ ]. S
  817.             }" j) [/ Y$ V( a! ]) l+ F% M# h" k/ j2 R
  818.           }
    ! ]) L. a7 O$ T2 E
  819.           else
    " @' h) @' m( g' @0 w4 n
  820.           {
    : I3 w* @' ?5 A. `
  821.             if(!Dn.Connected())) V! ?6 o1 ^, r$ T
  822.             {
    / t5 Y' T9 m, M" q: t
  823.               bFirstUpdate=TRUE;
    5 f1 E" q, D4 Y. W. X8 Y7 q
  824.               dwTotalFiles=1;) ~$ g% Q9 h2 J* X
  825.               dwDownLoaded=0;' |9 k3 b; X9 O- C( Q/ o
  826.               bSilentStep=FALSE;
    $ U, T" B) h: Y! E! j1 N7 c9 m
  827.               bCompressed=TRUE;
      g! H9 C& b/ g, d1 z. ^
  828.               strExtLocal=".\\DownLoad\";8 e( _6 N: `' _+ ], m
  829.               strFullName="update.txt";
    5 [# w$ w- L- J/ ~6 x0 Y
  830.               dwProgramState=AP_CONNECT;
    ; @" h( y3 A0 q) y* N. M! H
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ @8 M& W- n4 h
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - ~/ B2 D* d0 N# r  O: ^
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  ~* m! A) i0 q8 h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 M* ?5 U, p( S# D, @+ u3 |
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ; L) q; L6 T$ Y" P: b; v/ v
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)3 \0 p  ?$ P9 A; T
  837.               {
    : Z9 [8 F6 [$ s& K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 n& s& f: ?8 N, P
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    4 P$ |* x* u0 `6 Y8 i
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ G8 N/ W& O9 H" @. ~7 W$ S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* L/ W, \7 l% y' m! h
  842.                 8 a$ J& e) }2 X) X+ d1 J7 z) m
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    2 g6 H- V! J' I: M+ O( W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 D  j( U" ~& s1 g% j3 Z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! F+ F% [3 J6 w- X' s6 k5 n
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- Z/ ~7 }/ K# f9 L8 W7 g3 V
  847.               }
    , Y  t: i( x  @4 c3 y/ \' g7 X/ W
  848.               dwStartUpSteps=5;4 d( O0 e& y" K! Y. K% |2 c3 ]' d
  849.             }6 S% e% W+ ], Q/ E5 V: r
  850.           }& H9 O' @* p* {. V/ q( u& h
  851.         }. X5 W! n; v2 P) M/ c
  852.         else
    , T7 c5 Q& G# ?" ^$ B
  853.         {- |# E) x5 i5 Q0 f
  854.           dwStartUpSteps=3;
    : f) z1 l* u. ]" M
  855.         }
    1 w: |7 f' |* T
  856.       }) S/ x0 Q$ D5 J; H: V
  857.       break;" }+ j* C- U' }- `+ |) {
  858.     case 5:
    & U$ i8 E: g- I5 @
  859.       {
    ( k6 M! d! k' Q7 H0 V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    & S6 V1 W) l3 j. D
  861.         {
    5 E2 S# m6 k( ~7 q2 x: Z& |* Y
  862.           int opt_overwrite=1;' B2 r! t! J0 ]
  863.           int opt_do_extract_withoutpath=0;
    1 ?4 Z/ Q% H+ ^4 t9 ^
  864.           unzFile uf=NULL;! F/ ?7 A4 U7 q8 d* {- H  M

  865. 6 J1 K( B& N5 M7 h
  866.           uf=unzOpen("Wsa.zip");
    " o- d* X% S$ E: H+ l
  867.           if(uf)4 [0 ?) [% L! R" ^+ k
  868.           {$ K# w7 D& \$ b4 T# Y% j
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    , G! Y. y3 w5 }
  870.             unzClose(uf);
    ! A+ F2 I5 |/ z& m8 `( D
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    1 _* }0 s- R# q$ b, O# b& w8 h- E
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    9 q% r$ _" ~! ^6 ?7 |; f; o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");- F6 H! ~# o. l$ V8 K
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 @3 v3 [+ _( H4 C8 l
  875.           }" C9 P6 {7 j6 e' s6 a
  876.           DeleteFile("Wsa.zip" );
    8 h% w2 \: m  @. Y; z
  877.         }
    7 D4 p4 ~- P5 r  A, L

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

7 M; d1 G3 U# e' x5 T* K' N

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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