CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
. d. j0 @: U6 s( M5 }. i
  1. / RevApp.cpp : Defines the class behaviors for the application." k7 G( w0 \6 l
  2. //
    $ k& @/ Z$ x. Y8 C/ P/ G8 V3 G
  3. 9 f  F- u: o$ _1 }6 t
  4. #include "stdafx.h". }& q6 X) @( t( o+ c2 W2 _7 l
  5. " h, P8 d, z% ~5 ?6 u( v3 _7 G! r
  6. //#define UNICODE7 W0 p/ Z# V5 V3 m6 O& U* y8 X
  7. //#include <gdiplus.h>
    9 n7 n2 c# R- p+ e. R
  8. //using namespace Gdiplus;! l' r# `4 G/ J9 ^3 }
  9. ) ]. P: d4 u/ ^* S3 G
  10. #include "RevApp.h"1 ^) H4 U) h( \$ l
  11. #include "RevAppDlg.h"/ g0 C6 i' ?- k: j. s. v. I
  12. " P/ h, Q4 x$ h' z0 W) p; g/ H
  13. #pragma warning(disable:4786), R6 l8 ]  v! Q& D5 n2 a
  14. #include <map>( U, Z9 k0 x( J, @0 l8 h4 M
  15. #include <list>
    & [- A6 T9 k8 m) w
  16. #include <direct.h>& U; R; X5 O7 K9 y$ N
  17. / b0 }7 v: o$ n7 v
  18. #ifdef _DEBUG
    2 U4 L/ J4 A' y9 e2 y" ^* i" H
  19. #define new DEBUG_NEW
    + M) S% O; o3 P6 V# e3 _
  20. #undef THIS_FILE' E$ C. G1 ^6 Q9 `1 D$ q
  21. static char THIS_FILE[] = __FILE__;% Z4 n- a0 y3 a; Z2 m
  22. #endif
    4 Y# Q3 Q* M7 X/ h( e
  23. #include "SkinResDef.h"
    0 e5 e5 d1 H/ t6 N% j2 Y
  24. #include "ChangeBG.h"
    ( c9 b6 d7 q/ ?6 J
  25. #include "AFXINET.H"
    ; x9 s  V2 N8 z! a" d( M' R( H% z
  26. ; u+ i, P2 s- ~+ X
  27. #define TRADITIONAL_CHINESE 0
      [9 {  c$ p: p% E  x: n2 X( Y
  28. #define SIMPLIFY_CHINESE 1) D% A; W/ _% C, Q
  29. #define ENGLISH 2
    & ?7 ^2 B( I, r# ]
  30. int m_iLanguage = ENGLISH;
    : L  v* T. W/ c1 I) N% v
  31. /////////////////////////////////////////////////////////////////////////////
    - b% y7 H2 \4 l+ [
  32. // CRevAppApp# U4 l; l, _( @2 l: k7 R
  33. ; ^2 Y; y7 N) j# E5 y- u! i
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 m2 l% p( Z% z3 R2 @& C. H
  35.         //{{AFX_MSG_MAP(CRevAppApp): r7 E9 a* a* w
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + ?9 l! [$ f# s1 h+ Q* l2 m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; u+ z0 r" o5 Q/ M( C
  38.         //}}AFX_MSG
    2 M5 N* B0 ^" ~* d7 \2 S/ ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    - g$ F& [) o; a3 i$ o
  40. END_MESSAGE_MAP()0 q* ?" A  Q1 D6 T
  41. ' M4 r0 H, C6 y/ _
  42. /////////////////////////////////////////////////////////////////////////////
    $ f  Q# k$ E, L9 b4 Y
  43. // CRevAppApp construction
    1 Z8 u( S5 u( h

  44. - G% p" E/ _3 k, f! @
  45. CRevAppApp::CRevAppApp()
    9 @) `2 T& ^' Y; C
  46. {& E, F  O$ p& `& g( h
  47.         // TODO: add construction code here,
    % M& }) e% L8 N$ t
  48.         // Place all significant initialization in InitInstance
    0 }! l) P: O! h  w- O7 m( R/ r1 n# w
  49.   bDisplayIsBig5=FALSE;
    / o; S' {& z6 w- W
  50.   bRestartUpdater=FALSE;
    & h# S: Y# I6 B7 l: G% K
  51.   bFinishUpdated=FALSE;% p6 W9 ], \! {) Y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;# W+ O( U, o1 p$ T4 q2 p$ T8 K# ~9 {) d
  53.   InitChangeDataBig52GBKS();
    0 V& M. r$ j/ K, w
  54.   InitChangeDataGBKS2Big5();# X7 E+ E0 {. T, r- v) n% I# S+ Q
  55.         //
    ) I; B+ D5 S6 [& p) U) {
  56.         bClickRunExe = FALSE;
    $ j" B. ~# P/ ]* K  [* M
  57.         //- ?' b& L1 \$ o4 }$ }2 O
  58. }
    2 G1 |4 D+ G+ r. ]2 e

  59. 0 [4 _5 ?7 S* M% t4 P  B
  60. CRevAppApp::~CRevAppApp(); \% b" ?0 T$ X2 d  n* ~
  61. {6 \$ |7 l( d4 K4 @: q( U
  62.         // TODO: add construction code here,
    & y! s) i4 m7 L( J1 e
  63.         // Place all significant initialization in InitInstance
    9 z6 q5 J0 b- I' E7 o! J. v
  64.   EndChangeData();
    ' T- G* D; I# v+ e1 A! I8 R& x( r* P
  65. }
    $ S! [9 b& u! r4 W1 _
  66. 2 b2 j5 X7 N3 x+ H
  67. /////////////////////////////////////////////////////////////////////////////1 v, O1 ^. {' |# e: O
  68. // The one and only CRevAppApp object
    9 P$ V% X1 F3 O3 s; w

  69. 1 ~" D) E" V9 K6 G$ p
  70. CRevAppApp theApp;: `' U$ K9 E- g/ B: f1 y6 s
  71. 0 q( V) ^  e7 W
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " e* w1 x5 s+ q" O- O' C
  73. {' D+ r- `6 y6 F! r( s
  74.   int iEOF=0;% M, X- @+ b1 }5 B: }8 v9 ]
  75.   char szTempName[MAX_PATH];
    6 B# u/ H2 p3 T) p
  76.   *szFileName=0;
    ; J# a. Q% P! W8 o$ X  |* Y  J
  77.   iEOF=fscanf(fp,"%s",szTempName);! F" l6 H9 n" s/ @# K) a) k! D
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')/ W4 x# C' u- D( y
  79.   {* r. @9 _1 i. `- h* L8 v
  80.     strcpy(szFileName,&szTempName[1]);$ E' i( A2 p) l
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& H" `. Y. q/ o& j/ V; I" W& I- k9 E
  82.     {9 R& @) x5 d! z$ H, H: e/ r
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % M: X' h* X& Q7 L; Z
  84.       strcat(szFileName," ");
    5 @5 D- J4 n2 t0 h; e( W6 y7 {
  85.       strcat(szFileName,szTempName);" f0 L- ]' z, c! B
  86.     }
    3 K9 M, F: U3 J; w, u& z+ r" A
  87.     if(strlen(szFileName)>=1)) E; x/ Y; H$ X6 x$ l, c, f+ ]
  88.     {" l* [. d( R0 t4 n" ?1 M# `
  89.       szFileName[strlen(szFileName)-1]=0;* h1 o% Y5 n1 {+ R- i8 X
  90.     }* E; r1 n: K1 E( _8 Y8 }0 M
  91.   }
    & q) s- g- L+ V8 ]% D) R2 u% m
  92.   return szFileName;
    $ m9 e6 C* d- t* P+ \4 U8 E
  93. }
    / Y% ?8 k' l! L' H# _7 E! u

  94. / o& O4 i2 i/ e6 _7 O" h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)0 e* O  h$ d8 A: Q' v9 j
  96. {/ h; F. v5 [8 I8 P0 R" z, E
  97.   FILE *fp;
    4 q9 c$ B6 f* U5 @; V: _
  98.   char *key=NULL;
    " [8 e6 b5 ^1 l6 r+ l  Z2 Q
  99.   char version[MAX_PATH];
    7 I- S! k. b- F
  100.   LPUPDATEFILE file,olds;
      J- b6 s8 d! A1 Z8 f8 R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- |% U- B' c' q  N" i

  102.   g5 E& L. X0 U
  103.   UpdateList.clear();/ n, H6 `6 F# H
  104.   UpdateFile.clear();; W) ?& @/ }) _8 C
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 q( g9 H% Z% g8 ~5 [
  106.   if(!(fp=fopen(filename,"r"))) return false;  _# L  g" [4 U9 }
  107.   fscanf(fp,"%s",version);( J: u: i+ w( R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' i. [8 d' l1 o) k/ ?4 _
  109.   while(fscanf(fp,"%s",version)!=EOF)
      L: n" z+ R( Y
  110.   {* F- ~0 }7 _3 }; Y& i! c5 {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % V% K2 @" _+ Y9 `$ j0 I
  112.     fscanf(fp,"%s",file->path);! E: j! Q! a4 D+ G3 g$ u& y
  113.     ReadFileNames(fp,file->file);7 s7 E  ?% \: u: Q  [
  114.     strcpy(file->full,".");
    ! }9 ^0 Q; o1 o: z" J: u2 w
  115.     strcat(file->full,file->path);# c0 w7 x$ r; G" s  s$ \3 {5 x0 J4 U
  116.     strcat(file->full,file->file);
      P- l* o) F0 p) P9 q  C" p3 n
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())1 P; N- R# k6 o* J/ a* T
  118.     {
    ! h  _! r/ ^% Q# q  E& a" O
  119.       file->vers=(float)atof(version);2 ~3 c/ u  p, t- R' u, {
  120.       UpdateList.push_back(file->full);
    / E) E. P. c- T5 A, r, V
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: H& S+ W3 v& S4 f0 F* K# @+ Q! P& Y
  122.     }' R" z9 x  Y$ J
  123.     else
      s8 W+ K; X9 P0 R# m
  124.     {" t# @1 z3 ^8 W6 O4 D
  125.       olds=(*p).second;
    - K0 J0 N5 `  @0 T( k: o
  126.       if(olds->vers<(float)atof(version)): \2 k6 W/ r  n
  127.       {, F9 v- \4 P' r9 j% ~4 M+ g$ p; ?
  128.         olds->vers=(float)atof(version);4 q# s, ]  A& ?0 s; e' K- ]
  129.       }
    + I, E4 M& \0 {9 b, N* N
  130.       free(file);' y( Q! g# A) h( F% s& d
  131.     }
    8 u# B! G' d2 t: A) m
  132.   }
    8 }1 I$ s& B( B
  133.   fclose(fp);' s, g7 R( k) q2 {$ P/ t
  134.   return true;4 F- f% s$ k9 n2 e
  135. }
    + w! b9 |4 K7 u) @3 f, e9 E
  136. 6 w7 t- f# c9 R" @1 Z( e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)0 E$ C  X7 \8 v+ o! ^3 L% j
  138. {# `, A1 Q! q/ s6 K" s
  139.   TCHAR  szFull[MAX_PATH];
    1 z1 ?$ D' M. Z
  140.   TCHAR *token,*inter;
    , b  z" f8 o6 r9 C! w# ~; v
  141.   *szPath=0;: u! T+ s5 n% k" Z& e6 S
  142.   strcpy(szFull,szFullPath);# x, T8 L* j! y; `
  143.   token=strtok(szFull,"\\/");
    5 ?, N. g" h4 f4 p) Q, q, A
  144.   inter=token;
    # r3 G1 d; T( N6 l2 V1 R
  145.   while(token=strtok(NULL,"\\/")), T1 q/ g! B4 |
  146.   {: Q* z' t$ m9 F/ @5 u: U
  147.     strcat(szPath,inter);  ?. ~. w! `4 I; x" v5 P  C! b
  148.     strcat(szPath,"\");
    5 Y; {" N. {1 r" R  p) }
  149.     inter=token;- q; }, q0 {6 i6 c  @
  150.   }
    0 ]" r% t! D" }: K+ D2 @, R) t" b
  151.   return strlen(szPath);
      f. T5 X( l! i; Q, ?2 W5 B) q! }( D
  152. }
    6 @$ K) R. B5 Y* ~2 a2 U

  153. + _, I* Q# T+ ]% g  L
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( q8 q- v$ t9 a$ `! O9 F/ x
  155. {3 A0 i$ o! Q" F& J+ k7 P
  156.   DWORD attrib=GetFileAttributes(Target);2 a% Z# ?4 C: Z* Z5 K
  157.   if(attrib!=-1)1 g6 F4 s# x* b0 D! D- ^% D* f
  158.   {
    $ Y2 L% j9 ~# F
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* U6 V) w4 ~$ p
  160.     {, T8 y9 I( w/ X% {& n
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 [$ l% v* H4 X8 _2 f' D/ c
  162.       SetFileAttributes(Target,attrib);
    1 [! O7 p( ]* Z6 r' F- l- X' V2 P' w
  163.     }
    % j; I, C" [6 h2 p$ F- r& o
  164.   }! c. n# N% c( d: Q
  165.   CopyFile(Source,Target,Erase);6 g3 f) V. W& d8 n$ P
  166. }
    # r4 w% ?) z# X6 o% _! G
  167. # d, H" B- e! Y8 b, D& I* ~
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)% [, a( J4 c4 _9 k1 k+ k6 g- o
  169. {2 o4 F; W4 V4 V! M/ k+ |
  170.      FILE *fp;% A" `& |9 X' `& y+ I& C
  171.      char  szBuffer[8192];
    4 c& F& i8 w( `4 T; i7 x7 l$ T  N# E2 [
  172.   va_list  argptr;& F5 o/ U6 R' u# k' h, Y! M+ j

  173. ) _. z% b- z& k7 A: S% V' ^
  174.         va_start(argptr,message);; |- v0 X2 a9 y- C9 K- s! ?
  175.         vsprintf(szBuffer,message,argptr);
      i/ [) n$ g2 \) _: H6 l8 q% U
  176.         va_end(argptr);
    ' h# }, w  f3 W5 j
  177.   fp=fopen(FileName,"a");
    - e- w0 M% v  u; h
  178.   if(fp)
    $ k; y: d" |  |, ?/ ]
  179.   {8 C" ~+ H# A/ N7 X# e  Z9 E- c
  180.     fprintf(fp,szBuffer);
    0 d5 E2 M9 y8 y. P$ s8 N( E5 B
  181.     fclose(fp);( {/ E9 x! J$ Q- x7 j
  182.           _flushall();' R6 ]4 o0 n7 i7 D3 ?
  183.   }
    9 O2 _0 B; f7 p$ m
  184. }
    $ ~8 Q- M- v, l" ^% k8 Q( v3 D

  185. : a% F+ ]8 j2 [$ {6 ]
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    6 Y8 k6 }  A! L* c. v) U# h+ v' E
  187. {2 T+ u+ a" R9 `% d
  188.      FILE *fp;1 [3 G' e! H6 D, h  o
  189.     DWORD  attrib;( E; U: t. E5 j+ O! Z- v, L: b
  190.   attrib=GetFileAttributes(FileName);; u3 Q4 @* E$ {9 A) r  V
  191.   if(attrib!=-1)6 k: u  T) h% b
  192.   {
    * w: J: C# y1 ^& G3 Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 |* [5 d5 t: U8 L0 K
  194.     if(!SetFileAttributes(FileName,attrib))" W: X6 _9 Q: p. r* I9 z' t
  195.     {- G) \* K' W* J4 Q  r' J
  196.       return FALSE;
    2 \+ `* g& k& Z- O) Z
  197.     }
    0 A/ w* q4 g1 }# K
  198.   }( f7 [/ h0 D) c% f
  199.   fp=fopen(FileName,"wb");
      C" s  H! A0 F
  200.   if(fp)
    ' X' j7 T: x3 ]
  201.   {/ U  ~+ X. P* ?" R
  202.     fclose(fp);, A7 ?$ I' r% ], K, C
  203.   }! H; E3 i: a7 }7 l% v
  204.   return TRUE;& k4 [# d% g2 }) R1 c2 u% d% A& N
  205. }0 N2 k2 Y: S& @/ A6 r
  206. 5 M9 u% c( Z8 n; l
  207. BOOL CRevAppApp::UpdateLocalVersion(void)# V* E, v5 C7 K+ \& D8 k5 k; r: j
  208. {0 b0 b" W# L; C1 G
  209.   char filename[MAX_PATH];
    1 C. ?& R; I0 z1 h
  210.   LPUPDATEFILE file,olds;, j1 Y* [6 _1 r$ ^+ i! V+ a
  211.   std::map<int,CString>::iterator i;% `+ Z9 s  i1 s4 f5 z) C
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* b4 f1 F: |6 ]8 ]" {
  213.   std::list<CString>::iterator l;
    1 b6 s$ h* ?0 h( |6 v2 e/ O

  214. 5 P  W. p' O0 N8 j1 H: r
  215.   if(bFirstUpdate)
      E8 ^: E; e  K$ ?/ s
  216.   {
    . K: s, G1 ?) P& r# w
  217.     dwCurrFile=0;4 M2 r8 K. F# j7 I- w/ v: p
  218.     bFirstUpdate=FALSE;. p, F* y' m! D# q- Z) X0 J
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* X! X. d  X( D- v+ D  m% ?8 g
  220.     {' V: d7 G! A; I" O' [
  221.       dwTotalFiles=UpdateLocal.size();
    ! j; [9 Y% C$ `: t7 h! F
  222.       dwDownLoaded=0;0 K3 p% d& e( A% N8 z% T9 Q
  223.       bSilentStep=FALSE;
    , T+ P* p+ v/ q( I
  224.       bCompressed=TRUE;
    ! t) j  z4 M6 J/ R
  225.       strExtLocal.Empty();$ [# w5 ~  X) c/ ^8 B
  226.       strFullName=(*i).second;
    2 I, c+ ^% _: k- n* x1 J8 S
  227.       dwProgramState=AP_CONNECT;8 u3 |* N8 {( ?
  228.       return TRUE;
    ( F" @/ J; T8 d( @$ o# i9 t' ?4 X
  229.     }; @" J5 @3 g  Z" w
  230.   }/ d8 j# l( F# `* l
  231.   else if(bRestartUpdater==FALSE)9 B  C- N" Y  {  M4 j
  232.   {& V$ `" A- g" O3 ~) Z4 O4 Q! z: s
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    1 O8 U7 P: R( k/ z
  234.     {
    ; t/ O0 Y/ t( P: d# T+ H
  235.       file=(*p).second;+ i4 f# ?2 e: r6 \; b% m$ m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())9 \: b& R& s) t5 s4 |
  237.       {, s) p+ [/ i, w, C9 q
  238.         olds=(*p).second;
    9 X9 u: c' X8 N3 k! Z- h
  239.         olds->vers=file->vers;  j: R6 k7 F) L- y1 d
  240.       }3 r3 `2 T! x/ a2 D3 _7 }) e
  241.       else' k& \& x% v( w% T/ D" S) J
  242.       {
    # ?; S3 Q/ ^9 S  F
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 Y  y4 j/ q- M" }! c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ }% H* q4 B7 Z4 B+ U
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));  m5 ]4 H0 Y4 |* W' z( u
  246.       }
    " r. \2 o- P& G( m' P/ W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ; i5 z+ w9 `2 A/ s2 x: O
  248.       sprintf(filename,"(%s)",file->file);
    9 {2 V, L0 \9 @1 S
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % L- b' w8 G# n) O& U4 I- o
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }- c# q  z. e5 D/ G
  251.     }
    . n6 \% [+ K0 k+ A' C
  252.     dwCurrFile++;
    + ^3 |; Z- y6 L. h/ }" L, b/ u
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 t  Q+ j6 r2 Y/ V  n1 c0 x& J
  254.     {
    3 l) ]' h0 R" f" L4 z
  255.       bSilentStep=FALSE;2 o8 M+ h- y# ?2 e5 u
  256.       bCompressed=TRUE;4 {# b" a/ t; M: Y' ~$ a
  257.       strExtLocal.Empty();
    4 z5 d7 Q& N* h; S- f; x3 J7 ~; a
  258.       strFullName=(*i).second;  m8 ^! p  @5 T
  259.       dwProgramState=AP_CONNECT;6 ]4 g$ a+ S; l
  260.       return TRUE;+ B' h) ]: v. Y( y
  261.     }
    ' o- D8 B' B1 r8 I1 C! W; T
  262.     if(!bRestartUpdater)
    8 O. {+ |7 l" `# [
  263.     {6 U3 {7 K  G+ K" R  L
  264.       int iCurrSize,iFileSize;
    0 V2 Q: m3 |8 J# R3 S& q; i) F- X7 l
  265.       iCurrSize=0;  z9 F  G  y! L5 t1 {1 @
  266.       iFileSize=UpdateList2.size();! Y, }) G8 [5 x9 \/ g) |" l+ H% @; j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ g: U3 t# \( P1 X0 I4 Z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : o! m$ a2 N& d4 U' q8 j  n
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 u) m- Z$ t4 T  Y' D9 I' @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 m4 m- a' W' }
  271.       Fclearf(".\\update.dat");
    , b0 v7 c5 Q5 X! Z9 [8 s+ J# S. Y) [
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ J- L; B  T- T3 O' E
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; a6 h' j9 i$ i8 q) {& p) ?
  274.       {& }+ O/ U9 W, K. U9 ]) _( o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 F& B4 r) E3 F7 B( |; q
  276.         {& b5 q  s9 @6 f
  277.           file=(*p).second;1 @& I1 A' A  }
  278.           sprintf(filename,"(%s)",file->file);
    # s4 d" I3 m/ A) U: x& B
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & D5 d" L, b# G# t1 v3 w/ K1 Z
  280.           iCurrSize++;3 [8 v' i- ]+ P7 R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));  B( x6 j# _8 Q  X3 N
  282.         }
    & S  ~" p: B) j8 w& E
  283.       }
    % h1 c/ i' v) z+ ^8 l
  284.       unlink(".\\update.txt");" n( _2 ]: v. ^- S. T9 r
  285.       unlink(".\\update.tmp");
    1 `4 r1 V/ S9 x/ s( B$ y
  286.       Fclearf(".\\checkversion.dat");
    * l, Z5 g$ l: M6 b1 s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# @5 r. Q0 d) G# H
  288.       if(UpdateLocal.size())6 N+ r& H" K- f
  289.       {
    9 a7 a" `4 @7 C& {$ }7 T
  290.         UpdateLocal.clear();
    7 j4 P4 ~) x9 l
  291.       }$ t. }; x. P/ ~& e! ~% q
  292.       if(UpdateFile3.size())- X3 F; ]9 X3 b& t
  293.       {
    / r& D0 }% R+ p' m0 n9 B# }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + O+ [* _; }- \% ~; X# o
  295.         {
    1 X  ^3 C1 n& |9 u. O) y
  296.           file=(*p).second;
    # B- o% h# C& W$ X2 X) [3 O
  297.           free(file);. ^( E: n1 c. P4 `1 t1 _5 F
  298.         }% A  v! ^8 P3 t# D+ g/ \  ^0 P+ M3 t6 d
  299.         UpdateFile3.clear();
    1 t' X& n: S3 s/ v; c
  300.         UpdateList3.clear();0 a, Z3 E. V# G0 H
  301.       }- M. E* k3 f$ }1 P8 Q* _) ?& {
  302.       if(UpdateFile2.size())
    : Y& W; l- ~1 |' d9 R+ ]
  303.       {
    ! @* F% u' S  l' J+ u8 E7 q1 _% M+ A
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), U: }! o& `! \& i7 ]" m
  305.         {
    . N9 s+ _- s* x2 d
  306.           file=(*p).second;, E( a) K2 l3 v% M3 ~9 _
  307.           free(file);! ?$ H5 c/ _! g2 C
  308.         }
    2 {) q( N( X* o9 h+ M9 g
  309.         UpdateFile2.clear();
      Y1 a& T$ Z. Z5 F4 G. F' K
  310.         UpdateList2.clear();
    ) {6 I9 t; y" r, A3 V4 c: {. k) V
  311.       }: [. o- A; P1 B) A
  312.       if(UpdateFile1.size())
    ! M; q, F; r" i) J: u, i
  313.       {- t- a/ Y1 V  c! [9 T% u
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 ~' ~( I0 _9 w1 K/ t* [& o
  315.         {
    7 B1 V6 D) S* ?; h7 M, K$ ?
  316.           file=(*p).second;0 X- a7 l( n( m% \" f
  317.           free(file);
    ( a% ~! A; I+ N8 ]* p7 A
  318.         }
    : Y+ p2 p/ T) }$ }0 n) a& W
  319.         UpdateFile1.clear();2 C2 i& w4 c/ Y
  320.         UpdateList1.clear();$ a6 b! l2 u4 o9 F1 |9 N" c
  321.       }
    9 g' u  }$ o! x, O4 j9 n
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % D  e7 Y8 M- `9 ]- @2 L/ M
  323.     }
    6 a# L0 b2 b8 {. X" u
  324.   }+ q8 F5 b( O  Y
  325.   return FALSE;
      i" u' B* I% ?* Z" M
  326. }
    ) v2 l6 U6 i; {2 l
  327. # n6 `, f" ^, o- L! `; Y
  328. void CRevAppApp::ClearAll(void). O3 N' N+ ~  \" d4 {4 X
  329. {
    ' t- ^1 C0 n9 m# D' `9 w" {% q$ Y: z
  330.   LPUPDATEFILE file;$ A6 p, N" }7 Z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 E1 x& D  t6 _7 P0 \9 S

  332. 9 ], t" d9 k# ?0 P5 [% Y
  333.   if(UpdateLocal.size())
    ! X; V8 T% ^# p( [
  334.   {
    . t& u4 O  G3 u2 `, Z, T6 B9 U
  335.     UpdateLocal.clear();1 ]6 x+ u) b+ D8 ]
  336.   }* l8 `5 f4 S- e! F. K
  337.   if(UpdateFile3.size())3 _) \3 q( D( ?7 e" }' o  }5 t# S
  338.   {, L  g: I+ S+ Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 T0 y+ k, r5 |6 ]8 ?
  340.     {; E7 B: u' X/ |
  341.       file=(*p).second;
    - B9 R# \0 U, M/ M6 M
  342.       free(file);! E: H: |+ E9 W# H, b8 m* w) ]
  343.     }$ t( U1 {9 P: p
  344.     UpdateFile3.clear();
    / Q! U7 X0 R0 F0 L+ y, b
  345.     UpdateList3.clear();5 j! f0 p+ X) ]& ]- w
  346.   }
    % \2 d* n) K& t6 I. D8 b
  347.   if(UpdateFile2.size())
    ! I2 U( C' K: _& v5 {
  348.   {
    : f2 }: T' v% Q& L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)5 I+ b  [2 S, b6 i, {% K
  350.     {
    " c% o( a5 u, o% V- ?, _4 ~8 A
  351.       file=(*p).second;
    . t0 f4 u8 j7 |5 E& Z* \  q7 G5 X
  352.       free(file);
      f! c) D: A# p% L6 R; b1 L
  353.     }: p4 a( j( q6 B! J9 }
  354.     UpdateFile2.clear();4 g8 x3 H( D3 f" A! `5 j. w
  355.     UpdateList2.clear();' o4 m! A% ]. a$ [* w8 k( O
  356.   }
    " k7 ]5 ^; C1 h
  357.   if(UpdateFile1.size())$ E/ q2 t* I9 V, g# d
  358.   {
    + h! u, a7 e: }* Z* y7 ?
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) P( b4 l- |$ z* c1 o1 Z
  360.     {' @5 m0 }) m' \" O1 B! Z
  361.       file=(*p).second;
    4 D6 v9 N0 l' l& P& p  w5 D
  362.       free(file);+ c  f! E% g8 y0 V# c
  363.     }4 o  f+ h# ~/ i* ?
  364.     UpdateFile1.clear();8 v  O3 u9 @9 x# V3 Q
  365.     UpdateList1.clear();
    5 g0 w1 G' U! U% ?
  366.   }2 K  u3 K; Q: }2 e8 M' d% L7 l
  367. }  
    0 H/ @3 ^6 u" \8 i1 c
  368.   6 p7 A5 ?6 c) e
  369. BOOL CRevAppApp::CheckLocalVersion(void)" E8 P3 b3 X& H6 }1 q9 _: ^
  370. {
    & v, d% h  _! d% V$ g
  371.   int c;
    % u7 {2 G4 A) q" w' N
  372.   LPUPDATEFILE file1,file2;
    ; G* R7 ~6 s* G3 n! E) g. n
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& H, [1 C* |4 A$ ~& z( {
  374.   std::list<CString>::iterator l;
    : x* u" _% R3 |. j* E
  375. : l: E1 E( m& z
  376.   UpdateLocal.clear();
    $ a0 W" c$ B* u6 o5 k9 ]; W
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);' W7 K) z/ _" ^, H0 Z8 |
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + }& x8 e- S5 l. x: C* |6 S
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; H2 N6 s5 n; v
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);1 ]% m, s/ N' I& J* Y' C
  381.   if(UpdateFile3.size())  _. p8 ?" g! s. c: A6 J% I
  382.   {
    ! |3 m, i# a% v; Y1 r; `# o
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : R+ h& \: V2 N5 H5 `
  384.     {
    9 l# M8 g5 U5 A! d$ U! t  J
  385.       file2=(LPUPDATEFILE)(*i).second;
    # ~" e- i# ^. n4 m* `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! s8 Y- G( \7 n5 M
  387.       {, g" R* r% Z4 V  H/ `  R
  388.         file1=(LPUPDATEFILE)(*p).second;
    * Q4 U( G  Q0 x7 h
  389.         file1->vers=file2->vers;4 `+ s+ K4 Z% p3 R4 @2 I1 U
  390.       }9 z% @4 G0 `6 r) V) ^
  391.       else
    ( w) C- {6 w1 e2 n# I6 M
  392.       {
    ; H# i9 O3 m3 w$ L
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% l; _$ A  I4 w8 C0 ?) F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    0 v1 D. n3 F  |' f/ w5 S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));0 ]; Q2 ^3 v8 E- k4 n
  396.       }) `% K: c4 C$ p8 A7 S. g) h- [
  397.     }8 b5 R( C  R, s; c0 X
  398.   }
    % [1 ]: ^* O3 B& D* ~& |
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)/ w6 D4 Z4 A/ |2 |7 \8 H1 a
  400.   {
    # f6 U6 [  U) _3 F" i
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% Q4 m- x1 C  R6 ^' M* G
  402.     {8 b5 @  q; S: ^/ I7 s" p* c) p
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 f* R3 a6 _% F$ J
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' w7 x0 U+ R/ |
  405.       {
    $ B1 w6 u9 X/ J% D
  406.         file1=(LPUPDATEFILE)(*p).second;
      G# X: a' }* I5 I6 R0 x7 W
  407.         if(file1->vers!=file2->vers)+ p% S% L. Q) k2 G% q
  408.         {: G. _2 o( n5 w; Y( v0 w  ]3 J
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ Y. k; v% u+ k7 H+ s% z; E5 K* y
  410.           c++;( Y" v* o5 M) p% ]; d: H4 \
  411.         }) M  [8 x, u" {4 g) Y
  412.       }7 D) n9 T/ h0 Z% O3 p6 [, V6 [
  413.       else
    " }! v6 L9 {& k
  414.       {
    # G; b' z$ i8 o8 y2 A2 ]0 |- w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ w3 \6 ?! q3 L7 _
  416.         c++;. F: q7 d) D6 E) z* f4 i
  417.       }  E. ~% Z) l* U  o+ h  ^
  418.     }
    8 Z& b! ~9 ~1 g9 e% i+ d
  419.   }4 {2 v' q% R* d9 D4 o
  420.   unlink(".\\DownLoad\\update.txt");0 U, g: G$ s  g& b- {+ B
  421.   if(UpdateLocal.size()) return TRUE;
    1 X- p. j+ X7 @% c$ S
  422.   else                   return FALSE;* ?8 C$ m) I" p) d5 P
  423. }) x0 w$ u4 T. q* n
  424. # l8 G0 g6 A7 M! C; d- i
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- {8 b. l( a- {( s6 {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 z# G' E- J+ f
  427.   }8 X8 p9 x+ _/ O

  428. - C( g% [% K4 c0 f0 y6 ^

  429. ' J+ s$ Y4 }. i2 Q! G( |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)- H' N1 ?5 _6 n
  431. {
    3 R, W% N$ K% o4 e" e/ [; M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ ^8 Y  w% K3 e, y- j% a
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) w: U: O& I: d( [. c- e
  434.   {
    ! W/ Y# d8 u0 I, R  @7 m* N" S, `
  435.     char szLanguage[50];  S- f3 V6 w2 Y+ Z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% v) O" e6 q: `6 c; }3 _7 b0 o
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : @& {% o- f5 n# I' @( M
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;* h0 r4 l9 D7 }# l2 i  S: _& U
  439.     else                                   m_iLanguage=ENGLISH;
    4 b$ N5 [; ^! t( m4 Z8 p% }" l
  440.     char szRegister[100];# s; P6 v0 D- B9 N5 d- l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 x+ a; @4 a  n6 d: @5 m
  442.     strRegsName=szRegister;9 E( O1 s; P* B. N6 q
  443.     char szPatchURL[100];
    8 S# R4 W4 i1 {% d
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . v7 f# j6 p; O5 Q1 k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; _$ q8 ]9 I5 ^3 {
  446.   }+ w: e/ q+ K  v6 s
  447.   else
    , k, q  e1 Z" x5 i6 c6 m4 r
  448.   {
    8 u# N& h( E5 O1 j* I( ^
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , z3 C& p# F1 }$ V6 Z& J. Q1 Z2 o# S
  450.     strRegsName=DEFAULT_REG_URL;, x6 C3 ^0 P4 O+ E0 d/ E0 C, U; w
  451.   }
    # k0 J9 X* U9 Y
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 K# @! N) p/ S+ R* g! z8 }* @4 p
  453.   {
    ( K* [  ~  a$ b( ^/ \
  454.     char szIP[50];
    9 @& \+ k. ]; D4 X
  455.     char szDIR[300];
    - s+ V+ b+ V' X0 ~8 O2 [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 q5 [$ {. E  ^0 n$ z
  457.     {: l( X7 @# f& F$ i" i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' Z, h. O6 r7 Q* w) d4 S) t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ( T8 P0 N9 V5 y( u" D" a' o
  460.       strHostName=szIP;
    # x1 k; t9 h3 L4 Q# b% W
  461.       strHostPath.Format("/%s",szDIR);
    7 Z- X, Y0 w* o& _, R
  462.     }# Q% I6 u0 [8 p' G5 X" Q
  463.     else' P: K8 }5 h8 L& t# a
  464.     {2 I$ j3 F; y+ q+ k: Y+ t7 I( l
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 G6 h* E  S8 q3 o7 p0 y0 o$ D7 \
  466.       {
    7 x) `/ k6 I- o9 X
  467.         char szLanguage[50];- r6 u( c2 M: ^/ h5 a. K
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! M9 X$ G. P0 `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;" |! |8 b! k: F  x+ S
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ e3 T: M/ Y* ?) Z6 j* K3 Z+ K( G0 X
  471.         else                                   m_iLanguage=ENGLISH;8 ?: m, |# z8 i, r, H- n
  472.         char szRegister[100];/ K' m7 J6 d4 u) i6 q4 ^3 D
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! g. L( f; J# I; f2 p8 r
  474.         strRegsName=szRegister;
    $ z& k' j% i8 f/ V' R
  475.         char szPatchURL[100];; i4 G* g0 y/ d& d7 I; ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  l" M3 n. |2 I; G& X4 L7 Z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . q. ]" |6 q. m: g9 W9 a* b
  478.       }
    & g+ l& @: w1 n0 u$ Q( \
  479.       else+ w- A& j! d- g7 ^6 R4 e
  480.       {
    ! t' g. ]" a5 i- P' B, Z9 B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- K$ w. T: P' W0 [- ]) a4 }3 f
  482.         strRegsName=DEFAULT_REG_URL;
    ) E9 @  ]- M# W# w1 L
  483.       }/ s6 b! D5 h& ~  a; ?5 o$ t
  484.     }
    6 J4 a5 R# q$ S- J3 j
  485.   }2 N$ ^  p% ~( c$ s
  486.   return true;8 P: h: o1 ]! C* o% I5 ^& S% i' F# Y( W. U
  487. }1 a! H* G6 N5 ~7 g$ P4 l' |

  488. ! k' V$ P+ K5 h5 ^  `, x
  489. #include ".\ZLib\unzip.h"4 a: {1 [! s/ n% B0 e, e% i
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 v7 |( x) h# e3 D1 |
  491. /////////////////////////////////////////////////////////////////////////////
    0 M0 `" h7 E' h2 K4 ~* O/ u! R
  492. // CRevAppApp initialization! e5 `7 |$ m' i1 Z; |& z4 O

  493. 1 ~# v  M' p( F1 o% }5 b
  494. BOOL CRevAppApp::InitInstance()+ P0 v4 D& b( n- Q
  495. {
    3 W8 D  p1 q  \4 {+ n: w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];& B. U* \' z1 q, `. g
  497. 8 F, J* {7 E* X' |# U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);! X" A; Z  s, A& A+ C
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    : h% t" n6 t& n: C
  500.   {" l+ `0 Q3 A, }; {& s8 }/ o; b8 `
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");6 P% q$ u2 O: `; z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( M1 v2 B+ ], t: n- v6 @: x
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ( v) z* b8 Y: A) L" E9 N' v9 [  R3 s
  504.     {
    7 Z6 w$ Z0 j% G* k" ]- a
  505.       strcpy(szPath,szPathTarget);; I% K* H( k9 J' i% W  w
  506.       SetCurrentDirectory(szPath);* q9 u- a0 [( @& m
  507.     }
    9 k( Y1 ^( @) G0 B: {) H0 ?
  508.   }
    5 q0 y& h; y6 D& W6 T
  509. #ifdef _DEBUG9 o! A; E4 Y. ?# E4 k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; x; d+ ~8 N7 Q2 v! f* ]  m
  511. #else0 {( X+ r3 I) s8 C9 U$ M( }* L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))7 O- C+ u& ?5 o5 q
  513. #endif) Z7 r, h9 G+ [% U# F5 n7 z4 l6 r
  514.   {6 B, k3 B' w$ ~2 m0 d1 M
  515.     char tempFileName[MAX_PATH];4 y! J7 u2 m' e/ K
  516.     strcpy(tempFileName,szPathSource);7 t% u1 w% _. e1 Q1 Q2 _
  517.     tempFileName[strlen(szPathSource)-12]=0;- X6 \1 @1 d2 R% m; j0 B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 t( h1 ^$ R$ B: c" F
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    4 Z! u8 Y  t( i
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ C& a/ t$ x$ d. t9 C# W
  521.     return TRUE;
    ' x: S- \0 m" i' C% J9 X, o; V1 G3 Y
  522.   }
    + ~: H, g7 z3 [
  523.   // Nuke 0118: Delete run.exe
    1 ~) W" j; ~4 s5 Y% @
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! h% P0 r( a/ r5 Z% Z* Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ k  _# q& b+ C8 a
  526.   if(!ReadCfgFile("Config.ini"))
    : S9 V. d! B) }# L
  527.   {& Q$ j2 f& j4 x% \/ ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' `! E6 N  B6 `/ `5 O9 \( s: ~5 B
  529.     return TRUE;# J. _' J6 J* ^* W% I3 E7 J' n
  530.   }
    8 S8 x" G; {) S9 Q" O4 O& X
  531.   HANDLE mutex;! P! `4 I2 p2 f: `2 j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))- J2 S; u& k: {& P: c
  533.   {6 E; ]$ R3 @! ?7 z
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)0 i0 g" n2 C  M# }
  535.     {
    - a4 N$ S+ w/ ^8 T
  536.       CloseHandle(mutex);8 w% _7 g6 ~# a' V+ [% v1 C9 y9 f
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);! I( K: b. V, Y& _( T
  538.       return TRUE;4 z' v# t: N( H) _7 g
  539.     }
    , ?4 \) X' i& @7 x& r
  540.   }  & Z6 L" S' a1 q$ r3 K
  541.   CloseHandle(mutex);
    % C% C' u" h  }; O7 ~* E# _; \
  542. 0 m0 J% a+ Z4 b. b$ Y6 t, n
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);! C" W8 d5 t0 C. |4 o" {2 K+ q9 O
  544. 1 p3 D' ^- C0 T0 n* [9 v0 H
  545.         AfxEnableControlContainer();
    7 T; G" e! H  q, @

  546. ! T4 J2 M: Q8 X" L2 C& G
  547.   bCanUpdate=FALSE;( H# I, I8 a' d+ @& Y+ S' J% @) P
  548.   dwStartUpSteps=1;
    / N* ]$ T5 W" Y6 J) a5 @  S, V
  549.   dwProgramState=AP_NOTHING;
    : D% _9 e+ h% P7 N6 c7 t: d
  550. ; Z+ t# A0 O$ `
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 I" A5 }, z: G0 \; r1 t5 X6 N" L: J
  552. + C; `& T( v# M/ s9 r( z0 o
  553.         // Standard initialization4 }8 k, P1 N' W! r% {
  554.         // If you are not using these features and wish to reduce the size
    - y+ u$ V. u3 I( E5 E9 N" t
  555.         //  of your final executable, you should remove from the following7 Q& N3 W3 Q( [7 Q% Z
  556.         //  the specific initialization routines you do not need.! K( F7 Q; V  R* I

  557. ( m0 ^# I6 h$ O2 V6 Y
  558. #ifdef _AFXDLL8 W2 C  h+ Y8 r1 F5 Y' K
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 B, [4 H. }  d; B) r- `  j
  560. #else; ^* R) b5 U5 q) k( O- O" L9 l
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* P5 a6 v2 Q) g; u2 }
  562. #endif
    ' R3 P/ }" }% {2 w

  563. 2 A+ b3 q, Q3 X. o2 X3 p
  564.   dlg=new CRevAppDlg;0 k) A" K0 u4 ]. u
  565.   dlg->Create(IDD_REVAPP_DIALOG);) l; w2 O# d0 q$ Z& p, d+ |
  566.   dlg->ShowWindow(SW_SHOWNORMAL);4 A% d, o& M. V8 I% {
  567.   m_pMainWnd=dlg;4 y1 F2 M( }/ m! ?) R
  568. 3 e& H5 _0 V- M5 s% a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);& s7 D8 I) [$ [( |! Q; n; i0 R9 c
  570. " H& {! w. t* ?: g
  571. //  GdiplusStartupInput gdiplusStartupInput;  {3 z$ W" J; }$ l9 E
  572. //  ULONG_PTR gdiplusToken;& u6 I5 m. ~- V) z
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);5 d/ l6 g4 m4 ?# N6 H. z/ g
  574. . ?$ K  s% @1 b. S
  575. //        CRevAppDlg dlg;  E7 }. Y2 A/ ]3 n) }  c
  576. //        int nResponse = dlg.DoModal();; R" e1 I" ]  g& `. @8 n
  577. //        if (nResponse == IDOK)
    2 n6 ]+ `, k- W$ q* c' ]/ Q3 R
  578. //        {; H- P0 X7 A# g4 H! u6 p
  579. //                // TODO: Place code here to handle when the dialog is
    " z8 u% N) S  p1 p) D
  580. //                //  dismissed with OK+ g+ C7 P# X) Y; `0 I
  581. //        }
    9 y6 Z# l& {4 O* l) |- `
  582. //        else if (nResponse == IDCANCEL)* y+ x' ~5 T8 X
  583. //        {
    1 E/ C  M' X" F
  584. //                // TODO: Place code here to handle when the dialog is* o8 T! F- f1 \- _2 d
  585. //                //  dismissed with Cancel
    ) {* v1 y5 T( u) y) i+ y9 H! D
  586. //        }
    ( H( X+ l# J# }: }( W2 V4 r- \

  587. ' D/ ^; B2 a1 d" g* t/ Y  r
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' M$ ^( g1 p9 R( t
  589.         //  application, rather than start the application's message pump.2 P, r" E8 a, T& l
  590.         return TRUE;
    ) _, q% ?& P; d, ]
  591. }8 C8 v6 E4 r& a1 u  a

  592. 5 Q. i( n+ n& n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! [) k9 _& @) O) d1 o: C6 Z
  594. {
    9 J8 S( Q" {/ }1 r
  595.   int i;
    , `7 d: B+ t* W3 n
  596.   char *szRet;( w1 J! Q. W; y2 _% x# @$ X0 G
  597. ) {' ~8 l2 Z0 U. Q6 D& _$ ^, p
  598.   if(pSource) { itoken=0; sztoken=pSource; }5 A( h2 I3 n  O) _0 g+ ^4 x
  599.   if(sztoken)
    : B# y( ?1 }7 P4 X' I0 Y
  600.   {
    6 M4 a* k) L1 F) G* G" M% P
  601.     szRet=&sztoken[itoken];
    $ p! L' h% f6 Z0 o% s
  602.     while(sztoken[itoken])/ ?4 t/ a! Q9 ?; @7 @" D) p) ]; n: Z
  603.     {
    * Q/ e0 S( X# d
  604.       for(i=0;i<(int)strlen(token);i++)
    6 |% v  v6 _5 l6 r. f; d6 [: d
  605.       {9 H- @4 q2 a. v4 G) m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / c/ m  L: c' j$ z' s
  607.         {; e2 R% W: z1 M9 C. r1 I) s4 e
  608.           sztoken[itoken++]=0;7 Q; }, g' }# O# ~
  609.           sztoken[itoken++]=0;& W) W1 g8 p+ {) q; X, v
  610.           return szRet;2 X$ Q6 q/ O! Q; p& f
  611.         }
    . x+ \  m0 I- E" i* x' }4 M
  612.       }
    - a* V* E3 E$ W$ z; }) e  T: H* W! M
  613.       itoken++;
    ' d& p, v; v" d* d* ~8 f7 x
  614.     }
    - P% h  W- M7 W/ O: n8 X
  615.   }2 s! g  T( ]7 t' R  k( L9 f
  616.   return NULL;& b7 ?# ?6 H5 Z( j
  617. }( m2 f$ Z5 o" v# U+ I

  618. ( F& J6 V6 s$ b0 g- n* H
  619. void ProcessProc(long Total,long Current)  J6 I8 a5 j# M! v
  620. {9 P& ]* ]1 ^( O2 A5 o
  621.         MSG msg;: G$ j0 V# A# [( L8 t+ h1 a8 w
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    * V% V- w* c% B7 T' B+ {6 Y: ]. A0 S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));2 M* m+ |8 ^; s; U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))  O& A6 S. s1 t/ f2 y
  625.         {
    - f6 {% d; ^5 M% r( _
  626.                 if(!GetMessage(&msg,NULL,0,0))
      d, j& N- r. h' [6 K
  627.                 {
    6 u" D8 s* a3 E# I. G0 U) }2 ~
  628.                         return;
    , E% f5 G5 p, N4 y/ D
  629.                 }& I- r6 Q  u$ {1 ^: h3 M9 Q/ i. K) ?
  630.                 TranslateMessage(&msg);
    " |$ p: S, s# f2 `3 R8 F
  631.                 DispatchMessage(&msg);
    0 z) C3 w& V! m/ Y; a- x
  632.         }        + v/ j, B# B% L' F  K* M4 Z$ V
  633. }! X$ ^8 {% E9 X1 w

  634. 9 \* ^  P# X0 j
  635. BOOL bFirstChar=TRUE;6 b5 ]! f, _0 y$ S0 N0 k! x  ]
  636. : a* o4 [. B2 x) i. s: j
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - b0 u9 W: c9 s  m, T- A
  638. {* K5 K4 a! d! M. E
  639.         // TODO: Add your specialized code here and/or call the base class
    ) N/ a+ w9 [; a) [* K4 ^
  640.   switch(dwProgramState)
    / @" Z( k% o' |9 k9 A
  641.   {
    " e. Q% }$ W3 x& J! }
  642.   case AP_NOTHING:) m2 E# Z8 D3 a- b9 `- Q1 A6 b
  643.     switch(dwStartUpSteps)# f0 x) j- e3 u0 ^6 N5 S! b9 {4 i
  644.     {. r$ @6 j& f  o
  645.     case 1:5 p$ W6 F' j4 ^0 v3 ?
  646.       {
    0 N* o7 o) j3 Z  l8 o- ^2 K+ u  D
  647.         int i;
    9 R! A$ U9 c, D1 x
  648.         CDC *pCDC=dlg->GetDC();
    # W5 b3 N/ B) z3 b0 l
  649.         HDC hdcwnd=pCDC->m_hDC;, n1 Z) k5 ^' y4 v8 f
  650. //        Graphics graphics(hdcwnd);
    6 y/ _5 V8 j# ~- |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");7 q( X# R# }+ `5 c
  652. //        INT iWidth=bitmap.GetWidth();
    " C$ s! y) c) f4 n# G) X
  653. //        INT iHeight=bitmap.GetHeight();6 V% G6 A/ u- y
  654. //        Color color,colorTemp;
    & U. ]. M% O5 u) k) N  L- y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)7 r7 o- }5 k8 g- H
  656. //        {% W: O- {8 D4 L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ J$ X2 i, @: j1 {
  658. //          {, w- `7 J  F/ P7 S7 t' Z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);  }6 T( m7 N* K- M0 k
  660. //            colorTemp.SetValue(color.MakeARGB(. r  n$ {% `5 Y* F1 d5 _; J0 d
  661. //              (BYTE)(255*iColumn/iWidth),% ]9 I+ \  ~: B  Q1 ^2 {" [
  662. //              color.GetRed(),
    4 K) x8 U: O" W
  663. //              color.GetGreen(),
    3 B3 b# J9 r7 a: @& y) I
  664. //              color.GetBlue()));
    1 q. d1 b8 ^$ s' K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 a8 O; c4 \* O
  666. //          }, ]/ g$ x+ c. ~3 G
  667. //        }
    ' g0 {! b$ o% P; m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ; q/ w& a& R+ K. W7 z* S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ H( M, V) S' U9 r. I3 x# @* H; V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");  a) h3 U  E& k1 w! p7 X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # l8 t% G. \9 T6 j: {) x
  672.         for(i=0;i<240;i+=8)1 X8 X6 e. S- S1 r" i" i# L3 A
  673.         {. S; J0 ^1 ?9 n- Y6 |1 y" s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; r, z( }2 s; m$ f& P
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! ~) x+ s% I) k) b# m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 j" y7 x# d$ R) d1 C; e1 C% `$ @
  677.           Sleep(33);
    3 C0 Q/ g# ~6 M3 K0 h: r
  678.         }5 g7 s, }* b( X* O$ E, H
  679.         Sleep(1000);
    8 C# ]/ s8 C* j9 t7 s
  680.         for(i=240;i>0;i-=8)
    2 P* _- e0 o6 Q4 |9 V- e
  681.         {
    ( e0 ~- `  C7 _& I0 I) _# B5 J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ( h5 z& F" x% D- X, f
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ v( D6 f2 V# p
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 E$ o; B. Z' s; J2 d+ @. E
  685.           Sleep(33);3 m% C' ^! r5 N# M" Y- R4 j' k
  686.         }7 L3 s5 W/ f* Q5 H
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' t, w/ f/ s1 V4 a
  688.         dlg->ReleaseDC(pCDC);
    + y/ J2 @# A, L" x& a8 U
  689.         DeleteDC(hdctar);( y; ~) h% i; S$ S4 C  T9 a! d
  690.         DeleteDC(hdcsrc);5 k3 |8 b( l: s! @2 k6 P; Z
  691.         DeleteDC(hdcorg);% b6 D2 G& M6 T& \' Q1 K( C8 W3 D
  692.       }2 a. j* _8 B+ ~  u4 D7 i# ^
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! M+ t8 t4 {3 ~; X( Q# s$ n
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");' o# Z# f- W- _  s5 A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    6 I" U, g& {; _  ~/ l: x/ M" k2 v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    1 \/ i: l& U: g& j" k
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) H! N9 E3 K! i2 T, [# e% Q/ d
  698.       if(!Dn.Connected()): i9 j+ Z  |  g' S
  699.       {
    9 X7 H; E. D6 V$ ?9 U
  700.         dwTotalFiles=1;
    0 y* ~1 a8 X- M. w5 Y' Q( m" o
  701.         dwDownLoaded=0;
    + `; {: }2 J2 ?4 e+ b3 \
  702.         bSilentStep=TRUE;
    3 a2 c/ K2 Q9 Z7 ?7 J# n
  703.         bCompressed=FALSE;8 b! k3 e3 X" L# @: ^) ~6 S! X
  704.         strExtLocal.Empty();
    7 G4 V4 w, ~( \
  705.         strFullName="readme.txt";3 v' N# [; z2 Q
  706.         dwProgramState=AP_CONNECT;5 y" n# b+ ^) b& z% `- n% n1 q7 X" q
  707.       }
    + a& k6 m5 r# S/ X1 A$ u+ _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( L7 Q) ^( O8 F+ p
  709.       dwStartUpSteps=2;
    5 p3 _+ N5 @7 e9 ^4 i/ J; y
  710.       break;
    ; I& t) t4 d5 M: w0 B$ h: ~
  711.     case 2:, f  ?" c, F5 A1 \1 ^
  712.       {
    7 C6 C% v4 L! J- x. B% T
  713.         int iEOF;& j" Q5 n; c; ?0 j+ L# _
  714.         FILE *fp;
    ! {. A0 K# G: [7 k6 V9 k7 [) F
  715.         char szString[512];/ e  z" Q& v8 w/ o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% s* c$ N# q1 L2 {$ f7 G& Z
  717.         if(fp)
    * ?! U$ ?# n& y
  718.         {
    1 h; e( P: P$ a) j
  719.           do
    " Q  Z" J5 Z; l3 _4 u$ r7 [! w
  720.           {
      R9 Z: Z7 n" I
  721.             iEOF=fscanf(fp,"%s",szString);
    $ Z. [. h* d" t) Q' B, `
  722.             if(strlen(szString))
    8 E# F& B3 x: Q, v! s
  723.             {+ }. R5 X: R# T& d, m
  724.               if(bFirstChar)
    & ?0 N' a; `* u$ Q0 Q
  725.               {7 b* i. ?; i7 c4 a( X
  726.                 bFirstChar=FALSE;# g& S& l; e! U- |7 Y
  727.                 bConnectIsBig5=FALSE;% d" Q# F( }5 m
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 m+ X- m1 l8 e* P' v  c8 N
  729.               }4 M: z9 n& W5 Y5 A4 x/ _
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 l4 ~/ n3 C7 V# R* C$ g; r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    1 l' `5 s6 a: |5 v2 s
  732.               dlg->m_ListText.AddString(szString);) c; z7 @! i, p- b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) Z! H% M! A( u
  734.               *szString=0;
    / e1 _! M' ~! q8 g
  735.             }
      I2 j0 Y9 y/ d5 [0 c4 L
  736.           } while(iEOF!=EOF);& q& `; l" F6 y
  737.           fclose(fp);" b' ?' Q4 w( D- q' Z5 @3 I
  738.           unlink(".\\DownLoad\\readme.txt");
    : A+ X# r; J+ ~; ~8 X
  739.           dwStartUpSteps=3;
    7 g6 K/ @! N, W
  740.         }9 }0 ]7 w( `( z1 w, X. S
  741.       }4 S3 D3 b0 F4 f* U/ U+ e0 ]8 P  ?
  742.       break;
    ! _& l7 P6 s0 v$ r3 {- n9 l
  743.     case 3:" [, U, \& c+ l  h8 N2 a, _  O! t0 E
  744.       if(!Dn.Connected())
    % l- C' S: _+ ?
  745.       {
    8 l! {! C8 H5 [5 b9 j2 z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 s0 I  n8 U: H* }0 X. S7 H# m
  747.         dwTotalFiles=1;" a) c6 {% M( O8 G* u) A* B* |
  748.         dwDownLoaded=0;7 Y( m# W  L+ s  e/ Z( q- |/ O
  749.         bSilentStep=TRUE;$ `6 c% t, U0 @" `$ o3 a
  750.         bCompressed=FALSE;
    # g: _3 ~5 N; b7 ^* S3 a* x
  751.         strExtLocal.Empty();
    - n/ W! F: {" k% |7 b
  752.         strFullName="checkversion.txt";/ E; }7 q2 ]; K$ t
  753.         dwProgramState=AP_CONNECT;
    . F" v) {6 g, M4 c) k6 {! A! r9 s( F
  754.       }
    $ F1 z% h3 Y5 D6 t4 Z
  755.       dwStartUpSteps=4;% r+ G* n! F) n5 z8 a
  756.       break;
    1 I- U# |& ^. L4 `9 s! x) q0 J, Q' ]
  757.     case 4:2 u( M! G4 h4 p& G2 z, X# s
  758.       {7 S& J$ j6 m! T& L, j) E# o
  759.         FILE *fp;3 l  o. \" @2 ]
  760.         char szString1[128];
    1 n& b! q4 W" {3 Z8 H
  761.         char szString2[128];% Q5 Z$ }' f- C! [, B- N- o& }
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 `4 K& j' o. y+ H8 V" F3 V2 j
  763.         if(fp)
    # S2 P5 }% C2 B, n
  764.         {1 p3 U) C+ `. s8 _- n
  765.           fscanf(fp,"%s",szString1);
    3 n0 J1 t2 B  \3 w5 p7 B
  766.           fclose(fp);
    2 B7 }9 `: m$ d4 k5 y" {) Y- _
  767.           fCheckVersion=atof(szString1);
    8 ?8 g6 G& z2 ?3 g" z$ i
  768.           fp=fopen(".\\checkversion.dat","r");% G3 n+ T" r6 {' j
  769.           if(fp)
    5 Q% }2 s& E/ S
  770.           {
    + Y# T" R; Q) o9 Y$ c# J
  771.             fscanf(fp,"%s",szString2);
      `4 l# t0 B# ~3 d
  772.             fclose(fp);
    6 d: G7 ?- F) k$ |; O
  773.             if(atof(szString1)!=atof(szString2))3 S# U& q1 A$ }0 _. C2 s! ]
  774.             {
    # |: V5 V$ ~4 {$ d8 E6 f
  775.               if(!Dn.Connected())
    4 I. `( ]! E8 r
  776.               {! s2 L# M' f, {
  777.                 bFirstUpdate=TRUE;
    4 |' t" w5 e4 i
  778.                 dwTotalFiles=1;
    . G0 R5 L0 z% N* ?9 p3 a8 X/ q
  779.                 dwDownLoaded=0;
    5 u4 d1 e7 S. G" W& \6 t6 Z
  780.                 bSilentStep=FALSE;
      \/ n% W% m# |* \& v  ], {2 Q
  781.                 bCompressed=TRUE;
    ! [: v1 s+ o) O- o; B4 S# j
  782.                 strExtLocal=".\\DownLoad\";
    / f5 _+ T+ @3 u- d+ `
  783.                 strFullName="update.txt";2 F3 q) L& |" c6 Y' n
  784.                 dwProgramState=AP_CONNECT;0 a% S. _5 l8 _' ]0 E1 \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; F; ~& {  H: X, X  T
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 O7 i, k( f) {) u" h4 M+ f
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");  f. l. _& s7 s; w7 W* M% L

  788. ) W1 K4 N% O- Z. P3 O& G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ U- ~+ l/ N' O' P. V# n
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ C: m# E* X9 c  `
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)7 l6 b( \: r3 J  ~5 ]- p; v2 }
  792.                 {+ M% K4 a2 v! W7 z8 G4 v* R. `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( h3 ?# B7 S  p% W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : W5 o# A& M# ]. C0 X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    - K5 `$ `+ X( X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' Q+ p, v" G6 r% P$ {

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

- n, U0 r/ P( ~: c; w. ~" M: s7 r6 I; }5 ]& u- g9 a- U

評分

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