CSUpdate.exe源代码

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

' ?7 c& Z9 Y2 S1 }; w, Y
  1. / RevApp.cpp : Defines the class behaviors for the application.
    5 J  Q! ~0 ~% k2 B- S# T% G
  2. //
    6 P; @3 [) K3 M3 C# W

  3. 7 @1 L1 V( D& `, F' ?
  4. #include "stdafx.h") Q- a8 B* O) L' c+ K$ w' q2 C# s- b; Y
  5. # x0 e4 u- S. \! k% {. D+ e4 v, [
  6. //#define UNICODE+ z+ _5 [, ~. j
  7. //#include <gdiplus.h>, ~& E* q7 w' |2 e
  8. //using namespace Gdiplus;
    9 V, \. d$ u0 d5 j- b: Q9 ^4 q/ @  _
  9. 8 R1 Y$ ?' y0 |1 R
  10. #include "RevApp.h"" ^9 P& ~5 P+ ]3 c
  11. #include "RevAppDlg.h"
    # }0 u8 m( w1 a0 N. e

  12. / X: E1 w7 ~  }5 L
  13. #pragma warning(disable:4786)/ [  ]; r0 w4 q
  14. #include <map>
      |1 v% ^9 A, i: G( U, P- B1 H% {, ~
  15. #include <list>& v* k' o8 z' k  k9 B$ f
  16. #include <direct.h>* V+ g4 y' \: m8 b

  17. 2 B: _% `- |; f. ?' t
  18. #ifdef _DEBUG
    4 X" h  _4 L4 ?) J* e7 C
  19. #define new DEBUG_NEW6 O" _6 X# x: Z/ g
  20. #undef THIS_FILE
    2 T! S$ N+ e  a: S3 x; [. ?
  21. static char THIS_FILE[] = __FILE__;) {- Q7 V7 J& J
  22. #endif# g' k$ e& I+ R. @$ C
  23. #include "SkinResDef.h"
    $ e8 A! W) [6 `3 B& [5 z- ?) Y
  24. #include "ChangeBG.h"
    : \/ j9 T! K% s; C
  25. #include "AFXINET.H"
    ( S! z5 ?9 _# e+ O. b

  26. ! L$ \; S% t: Z- d, j: e+ c
  27. #define TRADITIONAL_CHINESE 0
    ; G2 J/ t$ P5 C# D4 Z
  28. #define SIMPLIFY_CHINESE 1& q6 ?: x) ?8 B, \0 g& k
  29. #define ENGLISH 2
    ' q& t# b5 {( Y6 G
  30. int m_iLanguage = ENGLISH;
    & E3 h  X3 A( O' ^5 Q
  31. /////////////////////////////////////////////////////////////////////////////3 `. d% ^! M: j7 [1 R2 t
  32. // CRevAppApp& a3 h  [: q0 J( U

  33. 2 X2 m! @& J) g& \" Q; b
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    2 z% `+ e( \* P; J- x- \0 O
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % a; u* i$ K3 Z$ k. D; e% F2 f7 G
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.7 T% q6 R+ p# e6 ^/ H6 p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    5 Z$ c& U5 H6 X" i9 ]& C
  38.         //}}AFX_MSG
    5 I: L1 i  d7 r3 d6 Q
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)1 S5 A$ C6 e( [- A% c  O2 Q
  40. END_MESSAGE_MAP()7 s! ?* W# l! c% C' T) o6 [  z4 w
  41. ; R: U& R  f& G: K
  42. /////////////////////////////////////////////////////////////////////////////- N5 y- W0 `) B, H& L2 [# L6 R
  43. // CRevAppApp construction0 [0 ~+ X* k6 W2 Q" |" J
  44. + R2 a1 P2 ~& |" {9 b7 S% _' l  x
  45. CRevAppApp::CRevAppApp()
    4 h6 ~* S: l! D# t9 Y( t
  46. {
    ) M( M' N0 J5 j2 L& ?; }' C
  47.         // TODO: add construction code here,  I- D) l% G. @
  48.         // Place all significant initialization in InitInstance
    7 q& V$ y( x4 T
  49.   bDisplayIsBig5=FALSE;8 C3 ]2 G+ y* i- P, ?
  50.   bRestartUpdater=FALSE;  z1 R: M/ @( n, V" M% f" w8 U
  51.   bFinishUpdated=FALSE;
    " }; G9 p2 i! t- E# U
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - J4 M, K) R' S& b. K# X
  53.   InitChangeDataBig52GBKS();7 L8 v4 a5 E. P$ n5 f$ L
  54.   InitChangeDataGBKS2Big5();
    9 t" m6 a! U4 ]7 y" K
  55.         //
    ( Z% i2 q0 l- K1 ]
  56.         bClickRunExe = FALSE;9 V# {3 y+ L$ O0 r8 q
  57.         //
    % u' t: b5 v) m! L2 E3 J  N$ m7 e
  58. }0 p: l' |( S7 Q  \. `

  59. # i+ u. T$ i% z& m; V& j, t0 C. y
  60. CRevAppApp::~CRevAppApp()
    ! m0 I# C# m# O# d( z
  61. {9 |$ p; G$ w4 ^
  62.         // TODO: add construction code here,  c$ a$ E  [  k5 e9 m
  63.         // Place all significant initialization in InitInstance
    $ V9 H9 `# ]' G1 E* G/ f, d  d" l; B
  64.   EndChangeData();
    0 l8 d. K% h( [/ D
  65. }) G$ C8 W( z/ j) J" h
  66. - p, H4 M/ u7 v; Y. j5 V+ z
  67. /////////////////////////////////////////////////////////////////////////////
    3 C* G7 K; M' j# o1 _2 N) D
  68. // The one and only CRevAppApp object
    " o$ t" M2 a9 t& K

  69. 7 }5 [) g( m- Y( F9 x4 g
  70. CRevAppApp theApp;, r9 ~# z4 c# a- `9 S7 I2 w+ S

  71. 6 ]$ f' C/ B' t3 r  n9 G6 e" j- t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)( ?) Z& X% G" z( T. B8 ]
  73. {+ _( }. v& g( M$ {+ l  B
  74.   int iEOF=0;2 y1 G/ y; A! g1 p: ]) c% S: Q! b
  75.   char szTempName[MAX_PATH];: u# I! [  m4 t( H9 \4 u/ x6 G4 t
  76.   *szFileName=0;- T; V) ~8 J. ~
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ; [  w! H0 ?6 W" P  Y9 X( e
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * g& N; V0 o- Y4 T2 ?" p4 ^, h
  79.   {2 L$ ?) @( x7 X+ f0 X/ y# R2 A6 Y
  80.     strcpy(szFileName,&szTempName[1]);
    $ v3 q+ v+ r5 ^, j1 X2 d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & {8 L) I3 p" V7 @  h3 F" [) t' S
  82.     {8 v( O  y5 B* b, \% L
  83.       iEOF=fscanf(fp,"%s",szTempName);9 Q9 Q  S9 o+ s
  84.       strcat(szFileName," ");8 n1 j# v! R7 A, E( W" q/ U
  85.       strcat(szFileName,szTempName);2 ^: N( Y3 B+ A9 H- k
  86.     }0 A( n/ G; X. l8 m4 y! `2 @2 i$ @
  87.     if(strlen(szFileName)>=1)( H7 k& @2 \; ^! L3 K; e2 o
  88.     {
    ; D! S- b! i8 |* e
  89.       szFileName[strlen(szFileName)-1]=0;
    ) g$ ~$ ?/ m4 n9 p0 X
  90.     }
      G! s6 o& `# Z0 \% q0 v
  91.   }0 T1 M- A( L) P% f
  92.   return szFileName;
    7 a/ k; D. ^3 G4 r3 x
  93. }% P/ U% R- K2 \' d$ Q& d

  94. , @. W- B. b' ^# [- v6 z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , y3 }1 W+ S% o
  96. {& S, `: I8 S0 ^7 [3 Z
  97.   FILE *fp;  Q  ^  _* m7 e7 u3 \
  98.   char *key=NULL;
    ) {  o5 v" N2 @0 S! d# \
  99.   char version[MAX_PATH];
    . R4 ^- D6 d$ q) j. f. k
  100.   LPUPDATEFILE file,olds;
    ; W3 v2 T1 W3 k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    " m# E3 w* c! v6 N9 x. p& v* Y

  102. 8 S5 Q5 P* t) B
  103.   UpdateList.clear();; J0 T# V. G! h* `1 n% a
  104.   UpdateFile.clear();- b1 J. y* `( F0 b" J9 J! Q, B
  105.   if(GetFileAttributes(filename)==-1) return false;
    6 a  d; ~2 w/ L! g3 d2 q" Y+ E
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . t7 ]8 Q. H% j. T7 V. B! M3 f
  107.   fscanf(fp,"%s",version);9 W) F( l2 t: x, X: H& d
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }9 |  s; i5 i- {
  109.   while(fscanf(fp,"%s",version)!=EOF)/ w- ^2 |5 }5 d  \
  110.   {: ~! f& }- p, u; S
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % X( q- ~4 n6 R) L
  112.     fscanf(fp,"%s",file->path);0 N3 B. q. p+ K/ G1 E( C
  113.     ReadFileNames(fp,file->file);- W' {: b2 ]: [8 G
  114.     strcpy(file->full,".");
    ) ^, k$ B" E( e
  115.     strcat(file->full,file->path);
    4 o& ^/ l7 k( K) i! ]
  116.     strcat(file->full,file->file);
    ' \) j) ]/ T5 V- h# B( u8 E6 `
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    2 P# F; x2 j2 k4 J/ i2 R
  118.     {
    " X/ G/ B* i4 S% a0 }6 X& u
  119.       file->vers=(float)atof(version);6 O/ L# B5 `  O. q9 q0 ^
  120.       UpdateList.push_back(file->full);
    , c3 m4 h; K1 u' }% W( o% u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - x" z" p8 N: v. E
  122.     }* _( O0 q, Y& }4 U2 ]* c
  123.     else5 `/ s" |( z3 F6 }
  124.     {
    , T# j) C8 I7 S, r+ v' v7 R
  125.       olds=(*p).second;
    6 ?8 x! x, h$ W( c: O# A$ w
  126.       if(olds->vers<(float)atof(version))3 z" h7 H5 X7 v. u# [
  127.       {- g& D! }% O( ?2 {0 F$ e% n
  128.         olds->vers=(float)atof(version);
    8 x$ m' u: V# O( ?
  129.       }7 b8 R- k. c, ?# z
  130.       free(file);% ~* r, Q( `5 T- W8 c
  131.     }
    , G' i, o! H3 q  _1 S4 [
  132.   }9 P% ~, u- F' ^9 T* X  z( z& W: A2 G
  133.   fclose(fp);
      j" d) j7 Q( q" j/ E
  134.   return true;
    & V* E# x. Y# F
  135. }
    + P4 m" P5 T& N' i% ^

  136. # x& i' \& U" S: z& g2 Y* ~% k" E! [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 H0 g4 {: ?- B! f/ M& Y* x+ U+ o- `
  138. {+ @! Y$ q1 H8 P0 ^
  139.   TCHAR  szFull[MAX_PATH];5 J& u, x* D5 }0 W
  140.   TCHAR *token,*inter;# \, Q0 R" I/ R8 ~6 x( \0 h5 O$ m6 l- ^
  141.   *szPath=0;
    : N0 Q0 X6 [# P1 u
  142.   strcpy(szFull,szFullPath);
    - d( }, S6 D: u
  143.   token=strtok(szFull,"\\/");
      F# M' x8 S8 Q1 o; P. I' N, M
  144.   inter=token;6 [* H8 y7 A' g
  145.   while(token=strtok(NULL,"\\/"))
    ' Y5 k' s4 p( K7 x7 a. e* a
  146.   {( y( d0 N0 W) S3 _* @, f; J  o
  147.     strcat(szPath,inter);
    ! c$ v  p9 O! Y* z3 U7 o
  148.     strcat(szPath,"\");
    9 t( W2 g8 Y, \1 u  B# Q
  149.     inter=token;9 o0 u, P- n6 l$ @* |, U
  150.   }6 U2 t1 r2 f* u  W7 Z" f- L
  151.   return strlen(szPath);. _$ L3 W: E6 i
  152. }
    1 X+ H0 q: u- v6 E9 ^
  153. 1 r+ u! G' s. P) b" ^
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ R8 \, c1 }8 Q' l
  155. {
    5 p3 d5 e6 ^" H+ N) w" B
  156.   DWORD attrib=GetFileAttributes(Target);
    9 j) E) d, H* r- w
  157.   if(attrib!=-1)
    " n2 I9 ?' g2 P$ }* c
  158.   {) V0 d/ J! b" R/ V" o6 l5 c7 b
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))3 I$ ^5 P: m. z/ m+ |, s! v+ a+ q% R
  160.     {
    0 z5 g/ l7 v6 C& r
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ W5 a1 I9 \  y/ p3 _8 P/ S' D
  162.       SetFileAttributes(Target,attrib);
    * }  {7 C0 p' ~6 v# d! k1 Z$ D
  163.     }# T: m6 V- y" O, e
  164.   }! h, ~8 D9 M; b' V2 c7 C! E
  165.   CopyFile(Source,Target,Erase);
    ) D' O6 C7 v* W& b; N
  166. }
    . p; e1 h5 Y) r, ^1 f* M$ N- w

  167. : X/ u6 v7 n9 |! C! B  y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)- o* t1 K( x4 j
  169. {- h8 t6 Q, ~# l
  170.      FILE *fp;
    6 y* o" x% G6 e+ b) v/ B) a
  171.      char  szBuffer[8192];
    6 H/ {5 x, o4 t+ J
  172.   va_list  argptr;0 J" Q5 N0 N( R- I! @3 `$ [, w

  173. 8 M7 x- X. m, ]5 L7 j
  174.         va_start(argptr,message);4 v! d! J$ h2 w6 y/ \$ w2 u
  175.         vsprintf(szBuffer,message,argptr);& V( ]/ R; a/ L8 \! u; T8 e9 \
  176.         va_end(argptr);
    . I$ O' Y  j1 _4 C; A
  177.   fp=fopen(FileName,"a");( _" Z! B/ [% x  t, m
  178.   if(fp)/ t: r* Z2 s" U  x( v/ Y! q
  179.   {& Q& ]# W, Z4 x# F6 _6 U
  180.     fprintf(fp,szBuffer);
    7 f) o* {  B9 Z5 E% m5 ?+ g
  181.     fclose(fp);
      C" v4 t% a3 Z3 P
  182.           _flushall();
    / @: ^: ?$ [1 h$ w2 l
  183.   }
    ; X! [5 W" F4 I( f
  184. }' H  D1 q! d; W. Y! L& D
  185. 5 Q/ Q5 k% H" M. Y7 S) A  S8 v5 V
  186. BOOL CRevAppApp::Fclearf(char *FileName)# b# ?0 N" k2 c( l7 r' X0 d  r6 e
  187. {% B9 T2 h# w9 |( v
  188.      FILE *fp;
    9 V  c/ g  d( U2 P) I
  189.     DWORD  attrib;6 W' N1 L  y' {  I, D/ g( J' O# l
  190.   attrib=GetFileAttributes(FileName);! ~0 B: E: M1 V& i* |- N9 \5 T
  191.   if(attrib!=-1). }4 K1 _! ~4 F. c' M# i; u: l
  192.   {
    % y, v1 U0 _3 ^# S& e; w; A: `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    8 h, p( p6 Y/ Z; h/ x8 {, C/ O
  194.     if(!SetFileAttributes(FileName,attrib))* O+ b% e( o5 \: |4 T, Z
  195.     {
    : a7 ^% v- m/ s& K* Y
  196.       return FALSE;3 n- x+ V7 z; v. C, c) t
  197.     }
    + `1 c4 E/ y" L
  198.   }
    1 c5 _1 o+ r: v2 o+ k( U
  199.   fp=fopen(FileName,"wb");
    3 E5 c" H& I; A1 n3 r) E
  200.   if(fp)) W9 J: Q2 _8 ^, X0 I6 ]( v
  201.   {% N' E& b" w! x* z) G* u
  202.     fclose(fp);! ^4 v9 R/ S2 e6 b0 [; C& |% g7 P  I
  203.   }
    2 l/ g4 Q7 C7 s3 ~& t" R' G5 y
  204.   return TRUE;
    % }: d( s8 p# w) [6 {+ G
  205. }
    $ w( W. S/ ^6 f1 X- Z1 A8 J( _2 c$ a
  206.   J3 `( [& P8 l1 x( M) ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    2 e* [3 p: D2 @1 ?! q
  208. {
    , P9 u9 P: A9 P
  209.   char filename[MAX_PATH];
    " n8 K! K3 M) }4 q, l7 h' Q
  210.   LPUPDATEFILE file,olds;
    * H0 S; \' g9 [) {7 S& x
  211.   std::map<int,CString>::iterator i;
    2 f  Z# I* h4 }3 k4 i7 W$ f
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; q+ P/ S2 ~- ^# c
  213.   std::list<CString>::iterator l;( m) W5 J- J: _0 L& z; R3 E) M
  214. 7 `2 ?' E2 ?" R8 x: {/ ^; v. [
  215.   if(bFirstUpdate)# ^3 P" {7 y7 R; b9 Y
  216.   {8 L6 \# d; t7 i
  217.     dwCurrFile=0;
    # L' R, E8 y/ N5 W( X1 C
  218.     bFirstUpdate=FALSE;1 N8 [" |7 ^& x
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # a; G& X9 q, |/ b6 r
  220.     {+ P1 l, ]- X+ y( ]+ n! H
  221.       dwTotalFiles=UpdateLocal.size();3 v% B' Y- W+ P" W/ W# z- b
  222.       dwDownLoaded=0;
    & g/ |  N3 K+ u
  223.       bSilentStep=FALSE;0 }0 g% v% ~0 `
  224.       bCompressed=TRUE;5 i+ F0 L: W) a9 W$ \
  225.       strExtLocal.Empty();7 z% j9 \7 d# {) ^5 Q
  226.       strFullName=(*i).second;
    & ]" a7 p6 y. }3 \
  227.       dwProgramState=AP_CONNECT;
    0 I. |6 r, C* e; s3 j
  228.       return TRUE;/ w# i. E( ^) a
  229.     }" Y# h$ E8 W! y# m3 I
  230.   }( C$ |9 J9 P3 F# Z
  231.   else if(bRestartUpdater==FALSE)
    ( K* J& f& I1 p  e
  232.   {
    5 [) y! o% f# ~+ r) t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; Z. s" ^6 ~  D' {% [
  234.     {# c4 Q+ `% p7 s4 a
  235.       file=(*p).second;
    8 a& e& ?8 x8 @# ~/ _9 Y/ ^% P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 d* I7 A4 `8 w
  237.       {) x3 [% l4 F6 s
  238.         olds=(*p).second;
    . c5 m( k+ m  W" {% z' ?/ b  C
  239.         olds->vers=file->vers;
    3 L+ k0 X; ?0 @* t, w6 b
  240.       }
    : [2 K) Y" p5 @3 q% L& `% C
  241.       else; w* v/ P/ e& h9 m
  242.       {* q9 z  X, S9 ]9 J1 A# i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 F6 v) }3 A/ c' w5 j, b, s* Y; r5 y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    3 |9 c% L4 F& b- h+ D& V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));+ N3 d/ d3 A# R1 I! g' L# J
  246.       }
    ; ~5 p0 X7 P: ~/ T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 N5 ^; E9 M7 V) l& ]
  248.       sprintf(filename,"(%s)",file->file);
    3 }5 R, z# {# r$ Y4 K+ u4 ~
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! m+ l/ W: b. n; M8 ?! x
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    0 x6 |7 w+ g% X" a: J1 _% w  w6 |
  251.     }
    ; B& y5 m% ^, r6 y
  252.     dwCurrFile++;$ b) N3 N1 }" ~2 L. y6 U
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( z% i6 F4 h: z' b6 |
  254.     {
    9 d# n: n8 X  P. f8 @% U
  255.       bSilentStep=FALSE;
    1 z* z% |: j' {8 O
  256.       bCompressed=TRUE;
      v7 h, h- [) R- `4 D
  257.       strExtLocal.Empty();
    + E3 d" z( ?- W( s$ ?
  258.       strFullName=(*i).second;
    3 r1 h7 Z1 k$ p, e" B( Q. e
  259.       dwProgramState=AP_CONNECT;
    & C% ?# o) n1 U; |7 {* \" z# y
  260.       return TRUE;
    $ j5 T, s1 A( s# @' R+ W0 g
  261.     }/ X3 R9 W3 B/ q0 _& k( Y* T
  262.     if(!bRestartUpdater)# r9 G6 ]$ P. m3 o8 [7 X9 L7 S
  263.     {9 b4 B1 q! d2 _- F4 U! B, u$ @
  264.       int iCurrSize,iFileSize;
    1 J' p/ E; x9 K( p. O; [
  265.       iCurrSize=0;$ a( m  D# B9 O5 g) X( L+ I7 X
  266.       iFileSize=UpdateList2.size();, n* H) `$ D3 L/ _2 Y7 M6 ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    % p. q4 f  a# j$ q. z  U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    : Z  z+ K( J3 _& J" F& ~' x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");: C0 t) ~. o) Z3 @! j+ b2 s
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" x/ j2 H5 P1 @9 [3 |+ @7 h
  271.       Fclearf(".\\update.dat");
    6 f% [7 d/ x+ s  l. l$ [, z
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ; n. ~2 _1 G5 d' ^! n, x- |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++). M; i* L& ?4 J4 m
  274.       {
    & R) [0 g, e' L6 H
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())3 a5 U8 C! u- v
  276.         {! o3 \6 N7 @2 d8 k
  277.           file=(*p).second;
      y; I$ a6 @% E& y0 w
  278.           sprintf(filename,"(%s)",file->file);
    / g4 g$ n5 F  _+ T$ F( O- A" C
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & _* k3 J' h: G
  280.           iCurrSize++;7 ]7 |( {! p- s
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / L; J$ h9 N' Z1 a+ m' e" f7 \
  282.         }7 ~; a9 r8 C! C: F/ y  ^% n
  283.       }8 g' G4 ~$ s+ d) b3 T
  284.       unlink(".\\update.txt");5 {- b. P' O; e6 P% D8 g- Y
  285.       unlink(".\\update.tmp");
    % o) R% C! {; f* x
  286.       Fclearf(".\\checkversion.dat");
    & q$ p8 p. s" q7 h+ n2 ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 c0 A( `% ]/ v2 O& W/ d
  288.       if(UpdateLocal.size())9 D* I! p# O$ Z/ D
  289.       {) P' M, j: c0 e& p5 C4 b+ G
  290.         UpdateLocal.clear();
    0 S" A( l3 X5 h2 ]' d
  291.       }. O& V: c' o7 W: F  R
  292.       if(UpdateFile3.size())
    , G) K8 u( J# N' M6 k! h) l3 L
  293.       {
      X) B' H# B! B+ c) c5 B2 W0 C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' ]2 ?! e. Z$ ?3 q6 @$ d5 [0 F+ \
  295.         {
    & m  v4 D8 U1 y! V7 a4 M
  296.           file=(*p).second;
    & g. K" c' X! o; B* C
  297.           free(file);
    $ a4 X, \; G9 |3 t5 A
  298.         }' @! v% ]6 X/ _( D
  299.         UpdateFile3.clear();
    7 P/ S) x) u3 S
  300.         UpdateList3.clear();
    ! f  a/ S9 H* M4 c
  301.       }
    $ L) s4 n4 x2 t; o5 X  ^4 f
  302.       if(UpdateFile2.size())
    ) [2 N8 r  d* f- x; I# J
  303.       {
    7 M1 G* f4 c! y2 K# Q; }/ K# [. a
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & M  V4 X8 ?/ D  q
  305.         {
      d" S& H* e( r, a
  306.           file=(*p).second;" ]% }+ K- J* e% q. y* |
  307.           free(file);# l3 R  Q* P) \7 H) h
  308.         }
    0 {/ ~: q% a. N$ m; r' _% N8 J* i
  309.         UpdateFile2.clear();
    ( p: J# C% m4 h
  310.         UpdateList2.clear();
    ! n$ b5 x/ k1 v4 O: h* A% H6 }2 p! e
  311.       }( _9 h. q" B7 q
  312.       if(UpdateFile1.size())
    : a5 z" D( `, t  I# j
  313.       {5 J8 r- y" X/ l: \- A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( K4 ?" ~; c) |/ {7 }
  315.         {1 \( n- x/ K& J4 [- `% ]$ i2 J: M
  316.           file=(*p).second;
    4 ~: }' d  @4 M8 s) T
  317.           free(file);3 s  [- I; L, k/ `' ^: f; f4 A. X
  318.         }& l% n5 U1 |/ t- P3 R
  319.         UpdateFile1.clear();9 t- B9 R% n; e' D3 y
  320.         UpdateList1.clear();
    ( f. _& E2 y; W! L8 V; z/ {
  321.       }, s+ v7 N% t* Q% R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 [, w4 R% v* B+ m5 p/ j
  323.     }
    # Y3 c1 S: J3 H% K5 X) @9 s& U
  324.   }3 U6 K& W1 L4 c4 Y  K* C) O+ C
  325.   return FALSE;
    5 k  ^& A0 K) h# J7 O5 X- q" O
  326. }% {- d; m% g: Q6 e2 q) M

  327. ; [, d9 U$ R: Y' l* T9 h2 u0 z' |" h0 i
  328. void CRevAppApp::ClearAll(void)& a/ j& ]2 C1 Y* h9 R9 q
  329. {% x/ z7 E% z% j$ k8 Z- N( T  Y4 k
  330.   LPUPDATEFILE file;5 Q3 K* j& i+ ]" ?3 k: i
  331.   std::map<CString,LPUPDATEFILE>::iterator p;; ]0 y5 C8 o; r" j* D8 e
  332. . b9 h0 R, B/ `& L# z4 k
  333.   if(UpdateLocal.size())  @* Z' k1 d- B# t( Y8 W; k! l, |- g
  334.   {
    $ T' E7 O6 z6 w6 m' g; V4 O0 V; ^6 c
  335.     UpdateLocal.clear();+ A6 \% o$ B. r! T- t3 E0 d
  336.   }
    ) s7 S* @8 r' g' M  A! C9 ~
  337.   if(UpdateFile3.size())6 V' c( w$ i; t
  338.   {' n" v- ^2 ~2 M8 `
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* J; e% T$ V1 M* j* {, p7 ?( D
  340.     {
    ' `  U, |! i# B
  341.       file=(*p).second;
    : I8 c( m7 y. @* S8 d$ y
  342.       free(file);8 h% S! s6 o3 C  T. Q7 s! ~
  343.     }
    " }; a8 e( f2 N8 [
  344.     UpdateFile3.clear();' D0 w  |' L, {
  345.     UpdateList3.clear();) l4 A# n) a" P( |$ c# |
  346.   }5 D- N) r- C& F) G! P9 \
  347.   if(UpdateFile2.size())
    5 K, y2 N. o% `9 P) I7 b
  348.   {
    + Y: `6 a8 X) ^6 l: a7 h, c& O7 h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 r0 J, C! o2 e) n& f4 V1 c
  350.     {
    * x& w) o" p- X, R) l% S% x
  351.       file=(*p).second;: e0 G  _" J3 h$ A& ~
  352.       free(file);9 y& }7 k. {% g; d9 Q7 q
  353.     }% k4 o4 i# f8 I5 A7 \4 S$ n+ h! V8 A
  354.     UpdateFile2.clear();
    : Y! z4 [; J5 n9 g# j- Z2 F6 \
  355.     UpdateList2.clear();2 U  k! G! z; `. w- V3 A
  356.   }
    7 G+ ?( E+ }% N/ `
  357.   if(UpdateFile1.size())
    9 o! U9 j# @) j7 g
  358.   {) I5 U  K2 `8 F3 U6 z( Y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    + q9 U8 k# e! r. {7 Z
  360.     {) m1 _6 @8 b7 Y' I
  361.       file=(*p).second;; T% J% d8 L$ Q: R' c- e
  362.       free(file);
    7 \2 N1 R1 f8 }; j! `
  363.     }
    , b+ g2 Q$ \7 E, A3 k
  364.     UpdateFile1.clear();
    # y% g5 F: }7 q' |# P+ J& u
  365.     UpdateList1.clear();
    1 z* X! b3 ~9 X6 p5 T4 S( X
  366.   }
    - \$ Y0 W" d3 ]
  367. }  9 F1 o+ p- O9 y, V
  368.   $ y0 O9 [  F8 u6 C1 W2 }: |) f4 L; x
  369. BOOL CRevAppApp::CheckLocalVersion(void)$ q: B9 \/ a* h: q$ P2 a" D
  370. {0 |" N! U% q$ d. E/ R
  371.   int c;& O4 |  H9 R- b4 @
  372.   LPUPDATEFILE file1,file2;; ^* }2 ~+ r) z' V
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 F: G7 w3 B6 T) a0 X. {) v
  374.   std::list<CString>::iterator l;2 [1 m, j& c' m, S
  375. , _: f# g: q; H
  376.   UpdateLocal.clear();9 c+ y/ ^( i9 Z" j8 T+ w
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % d" ~2 @& {4 U3 T( [* k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # d: V) ]: c6 ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      o" y8 t' v" n) R) b( O# S
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);0 s: y- j5 q! @: ~4 `" M
  381.   if(UpdateFile3.size())2 P# t% \$ C. w; s
  382.   {4 r& A2 ~. P! ?
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  D* o4 t8 h* d6 w" M- ?
  384.     {3 I9 ]/ B+ w: s- g) h# ]3 J3 T1 K# [
  385.       file2=(LPUPDATEFILE)(*i).second;
    * m5 K- x% e8 L: i- L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ m0 T+ H8 `+ X5 x# D& ~
  387.       {
    3 M5 e* ^6 {3 {  Y
  388.         file1=(LPUPDATEFILE)(*p).second;/ V7 V! P% p* a8 q4 D/ p% V6 o
  389.         file1->vers=file2->vers;  H+ Y$ z( y8 o! v# W
  390.       }4 v- Q& q9 B0 f7 D9 \
  391.       else% r" b# h8 m4 k8 h, \
  392.       {
    . H4 K( _- a3 j& Y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% }' _; a1 S( t1 F/ y5 p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, ~: a; V- M% ?& \, K3 i3 w; _
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 Z, e) O( b$ Z9 J. ^# \5 F
  396.       }
    - N9 e; Y" y- t& k6 g/ ~+ h
  397.     }
    0 d3 u1 j- F, F$ t
  398.   }
    2 C+ Z4 Y! Y6 M+ r  n
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# d0 w/ g5 }; a. C) d+ U; Z
  400.   {
    8 v# w3 x& H! \, `5 e3 x( O% E$ m
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' i& k1 t% j* ~! @2 z/ n* X
  402.     {
    ! ]/ H* s! D* A# Q. S9 Y8 `
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) J4 X& T8 {/ h$ s4 R
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& t6 p+ l2 F3 H* R: u2 ]
  405.       {
    ; e/ n$ R& }$ z' p- S2 Z: x! s
  406.         file1=(LPUPDATEFILE)(*p).second;
    1 b& ^# v; B- }3 I/ M
  407.         if(file1->vers!=file2->vers)- h  ~0 B2 `4 d+ ^
  408.         {; ]6 ?& G& g7 D- F' @+ ?1 `5 W+ I! T
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , h; [3 c3 |9 n; K5 x0 e
  410.           c++;
    7 {" ~/ z# T) y. e( _6 A
  411.         }
    7 s; ^# Z1 U, u; H/ g" ?) S. i) ~
  412.       }) s& W; x, [! k4 n& m; }
  413.       else
    6 S5 B! Y- k- L7 X9 y
  414.       {' R: J, e* q  D$ ?4 O1 I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% e; R* n5 \$ @
  416.         c++;( J' y/ F( f! ~$ ^0 x
  417.       }: R5 z5 L0 B5 M: q! u
  418.     }: @# {1 H$ t" j" r
  419.   }0 D0 T; R4 ~- I
  420.   unlink(".\\DownLoad\\update.txt");  N9 C1 M/ d  e  v7 A
  421.   if(UpdateLocal.size()) return TRUE;
    # X& N, G3 ?9 d- d
  422.   else                   return FALSE;
    / ?  Y  z0 W* \
  423. }- o9 y6 ^. F! _/ c6 B) p! O. n( |
  424. 0 ^( e% [4 Q2 d( s3 g" Z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    6 e% C! {" o3 R: X7 P6 H" _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - R( _/ H/ n6 K

  427. % l& R( l8 {3 V
  428. ; N5 H1 R7 J4 @' c3 }
  429. 7 l9 [. s; e! R6 m* t
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , d) c1 N5 n" `' R/ @7 r
  431. {
    6 s, m" f$ ?7 g" d
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;$ ~' P5 A9 m/ I
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 P- t6 r5 r) G/ V
  434.   {- k# I- I1 Y5 J  N" d
  435.     char szLanguage[50];
    ! d9 j  \% C- |$ v5 D4 O8 g
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 P5 k* O# F! c+ i0 v4 y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 s( V! a1 U9 I$ a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 O. Q2 I' N) J( F4 D/ z
  439.     else                                   m_iLanguage=ENGLISH;4 _1 j) D" c7 A( {2 o/ R' C
  440.     char szRegister[100];1 K% u( u& h- ~7 r
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ y/ t  l7 L9 G4 f9 y- B" H
  442.     strRegsName=szRegister;$ p+ m: s9 E0 F: A$ {# E8 s7 i, c
  443.     char szPatchURL[100];: Y: b1 U0 d( c
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , N1 e1 h# A" L
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; }/ T5 c( p$ s' {
  446.   }
    1 L9 h0 y6 r. s" L
  447.   else
    % W4 g4 ^9 ^& \6 a9 m
  448.   {6 s! B7 Q1 u2 `" P* L4 R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 U& f  Z* u; f! [4 D
  450.     strRegsName=DEFAULT_REG_URL;6 O9 \/ T2 c3 K  s1 H6 W" V' Y
  451.   }+ Q9 m3 I1 l" L5 ^) Y
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 W6 J) h6 v  @$ M( z
  453.   {
    9 x1 p: r) R3 v6 M' f& r/ v( R1 @
  454.     char szIP[50];
    ' P9 O, g6 M' C* k3 G
  455.     char szDIR[300];3 H5 u4 y1 b1 ]. k) L, w! ?/ w% T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% [. E7 s4 Z+ |" _& z8 s8 @3 W5 u4 W6 s
  457.     {! J* A6 h/ _" J/ W/ |$ e- n, n
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 A. I8 m9 f1 V0 G  g/ j% `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");5 C  ?9 e7 R" C& C3 s# C
  460.       strHostName=szIP;
    & d' h. E' ?- W5 a" l+ m* y
  461.       strHostPath.Format("/%s",szDIR);
    * O# l- M' c5 X: Y
  462.     }
    5 u( z4 u5 Q% G0 k* a
  463.     else
    4 s6 s8 n, l1 p3 x0 U2 U
  464.     {
    9 D! r3 C0 ~. m# X
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # b8 K  U8 t8 ^1 u3 B
  466.       {
    $ O" f! i& J% B" d
  467.         char szLanguage[50];
    * @2 ], y0 z) ]; d5 y$ K4 Z$ I% A
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 }+ i! x, h/ u4 p9 N8 l3 L' a+ S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;. X- t, `# T' O* ~, Y! [8 L$ U
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ e( ?9 t9 O: A5 ^3 C- ^5 b# I
  471.         else                                   m_iLanguage=ENGLISH;
    - n' ~/ }. o2 t  \; v/ D6 I
  472.         char szRegister[100];& V3 L% ?/ Q) U6 r! R
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");- c1 p: O& I% T$ y3 R, b
  474.         strRegsName=szRegister;; V: b0 @& I9 s7 i- `$ R8 V
  475.         char szPatchURL[100];
    . S  K: {" S( |; M, C! p
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      V( B: r/ b1 f  x$ J/ p& [
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ A+ O% S$ B+ R3 R
  478.       }
    / L/ R5 h  L+ Y3 F
  479.       else9 C/ o4 @+ x* W+ _; P
  480.       {
    # Z, d' V1 c; }9 }: M0 {  X' J
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);; _+ R( v) k9 O6 y
  482.         strRegsName=DEFAULT_REG_URL;
    / w1 ]! {. G$ ?5 {" i4 d
  483.       }! {8 q; F0 {+ b! D. g
  484.     }( n, J2 ]5 _' E0 j" ^
  485.   }7 R& X1 g- n3 V; r. o2 j3 r2 u
  486.   return true;
    ( H9 V' R: O0 r; I" d7 [( H2 d
  487. }
    9 ?, w$ s+ S; e, B9 u5 W! d0 s
  488. 6 w3 ~7 i( t/ p, L
  489. #include ".\ZLib\unzip.h", \* L( V6 q* B
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 Y( E; M' [9 P% C& l1 g
  491. /////////////////////////////////////////////////////////////////////////////- V( `8 s: b5 k; ?8 {2 n
  492. // CRevAppApp initialization7 U4 R4 L: F& z( j
  493. ( {- p5 d$ R5 c
  494. BOOL CRevAppApp::InitInstance()
    * U1 }) @7 G- G: Z
  495. {
    * v6 v0 \  V7 F6 |
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , r( r9 c1 H& Q) t3 t4 R$ b

  497. $ v" t; {. G! y! O0 Y  v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# O3 V% F% d! H4 `' L5 r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 N7 D+ v% V, m% l* z
  500.   {
    ! k( s+ d' ]' F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - D+ x* s' w, s$ d$ d; S" c
  502.     GetPathFromFullPath(szPathTarget,szPathSource);8 ~2 l) C& w& I2 G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    4 Z7 ~0 x. j* \  c
  504.     {
    ; H9 i6 e, _0 ~4 k% m6 ~( v; r
  505.       strcpy(szPath,szPathTarget);6 f+ R: }+ H, e' ]( K3 A" [
  506.       SetCurrentDirectory(szPath);! P3 I+ S. U0 _1 ^3 b' F
  507.     }0 P+ w% h$ o: F6 f5 P- S: Q( i. W
  508.   }
    : e2 v# ]' x1 N2 B# `1 M
  509. #ifdef _DEBUG
    % N& L" K' n6 e) Q8 T* ~
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ s4 Q, c8 R& e, L1 n6 I
  511. #else
    5 N# b! Q' Q% ~
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , f" M' e  G  i6 X4 X$ s0 p0 l: w' O
  513. #endif# z0 P* }% c2 ]7 b" ?, \
  514.   {
    * b3 x, n1 i2 }6 C! `
  515.     char tempFileName[MAX_PATH];
    ! W! I% w4 Q2 L# q1 X
  516.     strcpy(tempFileName,szPathSource);
    / [& V9 w9 D+ B8 I3 t8 Y% M
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 p3 |" L9 ]# A2 ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( I$ |# ?! @: B) x6 ^
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ( U& W8 P. h* a% u; k; S/ w; b
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);7 T7 ~* g" L, O- K* ]$ d
  521.     return TRUE;5 _% o+ a) h* G/ O9 |- R1 Q1 o( ~8 e9 ^
  522.   }. H6 @. _( ^. z/ E6 r8 v
  523.   // Nuke 0118: Delete run.exe- j" a( ^, p( i- l/ R( T
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - z; Z$ \& Z$ s/ n' z- t1 m+ |, c0 z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . ^+ [' i' t3 l9 i; x
  526.   if(!ReadCfgFile("Config.ini"))6 R% Z7 {. e' J$ Z9 `2 t
  527.   {+ q. |7 X# N5 Q* u" n
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    - P, j, T* T% u- m4 X+ \
  529.     return TRUE;
    1 p6 \$ w- H! [8 I3 F* K3 b$ e% z
  530.   }& W  u; z! G+ O2 s" n
  531.   HANDLE mutex;
    / s/ Y4 ~0 r& P
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))( A, b0 \/ w6 C6 V0 g2 [5 l7 h
  533.   {
    ( D& K( H: n4 M4 l0 J
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)% U- @' M- y* F
  535.     {7 R! R7 `3 w& Y6 {4 a$ O9 F5 g
  536.       CloseHandle(mutex);
      b% n( J/ I3 J7 n5 e0 \9 S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);$ Q" L- y% F  p; p$ w4 j
  538.       return TRUE;
    ; G' y3 C" j; c2 C, \( W
  539.     }
    ' K) R; h. q! f3 Q7 T0 v2 K
  540.   }  
    # R' l& b% o- e$ j% V
  541.   CloseHandle(mutex);/ r' v- U. I- c' _8 n/ j0 I

  542. 4 \# V8 V3 D: z) k7 b  ?0 w' ^; M
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);4 ~; A. `, e0 o6 f! w6 I1 ~& O

  544. 9 j" u/ |( f& G6 ]+ P
  545.         AfxEnableControlContainer();  c4 S! _  T1 ~7 ^

  546. & W; y/ ?6 r" ?: T
  547.   bCanUpdate=FALSE;9 f9 D& g: n3 ^
  548.   dwStartUpSteps=1;
    3 [& y+ d4 E& {! I" j1 h1 N
  549.   dwProgramState=AP_NOTHING;
    1 u5 v# o7 F( s
  550. % c+ l3 H/ d0 c$ R; R7 n4 V% \- @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);: w; x) E4 t0 _2 U2 \% i2 |8 `
  552. 6 `- p5 z& U$ @0 |6 w6 d# B
  553.         // Standard initialization
    2 D% M0 [5 Z+ t; @0 v
  554.         // If you are not using these features and wish to reduce the size
    8 |* ~% F; i+ M" ?
  555.         //  of your final executable, you should remove from the following6 q. Q5 O. i, L
  556.         //  the specific initialization routines you do not need.
    & `$ s6 l% }7 Z. d3 w/ T. i# g: L

  557. $ u8 K, R+ |' @/ n/ @+ I
  558. #ifdef _AFXDLL9 V/ f) w* ^+ h9 |, c8 l" P; ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL$ g4 l# e/ [( @+ c5 A
  560. #else
    + F0 T1 k" O% W2 O" T# ~3 m% L
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    & s" X3 i$ v/ E1 o# r
  562. #endif
    % @5 v! Y- [6 h* d4 k
  563. ( C; h4 q$ j% V% K. j! [
  564.   dlg=new CRevAppDlg;  m$ N& r- L7 c- F5 q
  565.   dlg->Create(IDD_REVAPP_DIALOG);6 |2 K" o0 Z. D. g
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / `& E! B' f1 b" w$ q# x
  567.   m_pMainWnd=dlg;
    3 _8 X0 o' I3 x1 F, x
  568. ) h% S# b. r0 O" P- y, y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    2 ]' x3 ^3 f' V9 {
  570. : M0 G: A! b7 C6 }/ H
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & y, t! E# Y4 v$ \) `
  572. //  ULONG_PTR gdiplusToken;5 ?( g7 D/ H7 V+ ~7 t0 ^# ?
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    , S8 j5 F% s6 m8 V

  574. % {3 h& p  O9 {9 P( E* y( Y
  575. //        CRevAppDlg dlg;
    $ Z4 ~6 @+ C1 i/ c8 o& e
  576. //        int nResponse = dlg.DoModal();
    / G! W" Q7 e! S8 y9 U. O
  577. //        if (nResponse == IDOK)
    1 ~: T# F: _- r* Q- e
  578. //        {: y/ P$ X" F) k8 t# y
  579. //                // TODO: Place code here to handle when the dialog is
    ! `- J- q8 f( U$ d' y* O
  580. //                //  dismissed with OK# p$ @7 [- M* P1 q7 E8 p( y# K
  581. //        }
    5 Q; B3 W' r- m! ]# m
  582. //        else if (nResponse == IDCANCEL)
    * W3 A0 i/ `- ^! f) s2 s
  583. //        {
    & N$ ?3 {) z5 _; z4 X
  584. //                // TODO: Place code here to handle when the dialog is
    : X3 u7 ~: @! Z4 @& x3 M1 d
  585. //                //  dismissed with Cancel
    " o: }0 o: u7 R# U
  586. //        }% N! |: U; \9 F: }
  587. 0 D# z5 {3 k5 h# ?$ t) z+ E+ U
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 N3 n# J" D& J# w- B! Y
  589.         //  application, rather than start the application's message pump.
      l( r# U9 e9 r: K
  590.         return TRUE;
    7 Z$ Q/ X, w1 v3 R4 D, Y, l: e
  591. }
    7 k! ^" T) V% ~' U9 r
  592. ; }4 p" c) m# ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)7 `2 @2 O2 {' v6 p. ?$ Z
  594. {
    ( g8 e0 O; T8 e# X  E4 Q
  595.   int i;4 c  J+ h( E2 D& P0 S
  596.   char *szRet;
    $ e* t3 N2 `  y( K5 l6 G7 @

  597. , m$ G' `1 o& U
  598.   if(pSource) { itoken=0; sztoken=pSource; }# o. @% t0 U, B8 j, d  g' S
  599.   if(sztoken)
    ) P4 S3 T, W6 u1 i
  600.   {
    " X  |1 y, p. W2 ?+ ~; P3 V
  601.     szRet=&sztoken[itoken];
    + Z. X8 t' d# |' U+ N) d
  602.     while(sztoken[itoken])2 N1 d. |! m, I/ ]  h; P
  603.     {  f' v- r5 {  x
  604.       for(i=0;i<(int)strlen(token);i++)
    3 G) U  \- v3 B1 H$ X3 g
  605.       {
    " U/ \; d# L+ J8 u. |- b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 y: Y$ M% v( G& o
  607.         {" j7 p& r7 E* M, Q8 Z1 B
  608.           sztoken[itoken++]=0;
    ' k9 b, ^/ Z. ]
  609.           sztoken[itoken++]=0;
    & p  b( j% {0 a$ Q2 P& i
  610.           return szRet;
    , D  u7 x, h& _1 z; l2 b
  611.         }: X& R. c; O; y) e7 u  d/ T
  612.       }: d5 q2 Q& J# m
  613.       itoken++;7 D8 j7 h3 Z* G* D
  614.     }5 M4 F& n: c5 U! H. J* r2 K8 T
  615.   }  ]- I8 E# z4 r& y0 P
  616.   return NULL;
    6 }  _" L7 c/ c: X, o
  617. }
    : q4 x9 t; Z4 ^0 r4 E6 x# v" R

  618. 9 W" g/ W* y* c' P: b( s' A
  619. void ProcessProc(long Total,long Current); l% a4 O  ?! [2 u& q
  620. {1 s" |4 `% _5 a/ ^% D
  621.         MSG msg;$ k' m; Q$ L: ^7 C1 g0 I# b- ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);  H0 Q) u! i& x( G0 ]+ c3 ~/ S7 n- \
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));# H5 T' d9 H* x3 P) _; W
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))/ U2 u/ B" B  j. J
  625.         {
    ( P: k. {& l4 Q- N5 }- K% K% C* `9 j
  626.                 if(!GetMessage(&msg,NULL,0,0))" T' D% O! @4 C6 b# S
  627.                 {- x* ~+ s( ?: ^& e
  628.                         return;/ }5 ^3 b+ ~% f$ L% o
  629.                 }
    " o  v5 `' |3 }6 k
  630.                 TranslateMessage(&msg);2 O: q/ Z6 l0 j5 |
  631.                 DispatchMessage(&msg);
    9 c# J, o' U  W( d5 R, h
  632.         }        ( ~$ P! H( [4 S% [" g+ l# _
  633. }- B# u+ b" ~) W4 L1 H
  634. , P& l- U/ @, D- f
  635. BOOL bFirstChar=TRUE;: I1 ]7 w. `: U2 f. W% F
  636. 0 P4 `7 q; O; ^" P* G5 ^" X- t
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    . o( @. o) a5 y' W! B0 C8 t  m
  638. {
    7 I. T* ~- }& s- o3 D) L/ V
  639.         // TODO: Add your specialized code here and/or call the base class# X. K0 S" b) L- s) q
  640.   switch(dwProgramState)) u' D! P4 k+ R$ K4 T% p: y+ k$ X
  641.   {3 q6 d' ^3 T7 M+ L: x) W
  642.   case AP_NOTHING:: {+ X! _7 N$ b( x
  643.     switch(dwStartUpSteps)& s& \& t! F" M0 U0 Y
  644.     {- g1 ^$ M# G  u2 |) P" u
  645.     case 1:
    + Q& W7 x  \5 A# H8 k
  646.       {3 _$ r) a, @$ ?# f  v! ?9 B
  647.         int i;
    ; A* ^: `9 I7 o; g: O, Z3 Q
  648.         CDC *pCDC=dlg->GetDC();
    4 n; U! H" I) t- F" q
  649.         HDC hdcwnd=pCDC->m_hDC;, R& F' {4 n- s! H
  650. //        Graphics graphics(hdcwnd);
    5 G' }" @2 k; t$ @6 D5 R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");* E1 k1 @0 ^8 }; A( d/ k
  652. //        INT iWidth=bitmap.GetWidth();
    2 R9 j& l  h$ y% E- D% @$ `
  653. //        INT iHeight=bitmap.GetHeight();* B7 D; h1 p. H6 H# R
  654. //        Color color,colorTemp;
    ' E1 F' @1 ^: o) I4 k& g9 ~
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 {. K# _- P) b& z
  656. //        {
    % P+ }/ j2 T+ F( L9 f9 J
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& F$ G! x- k0 Q- B- K# p% E
  658. //          {) e3 H% `' k% |7 e  i/ V
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : I8 ^. A6 D8 J$ P5 G" ?
  660. //            colorTemp.SetValue(color.MakeARGB(# K  V- _7 W5 a7 \3 q" O& K9 m+ `
  661. //              (BYTE)(255*iColumn/iWidth),
    + s0 {0 O: f- T/ s
  662. //              color.GetRed(),
    3 `0 l* N/ p: ~# N5 r
  663. //              color.GetGreen(),8 a7 q2 V" q/ J2 p, Y5 o7 F
  664. //              color.GetBlue()));
    ' d/ i0 t# p0 J9 e0 `
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 _# f5 [0 s9 a& ?3 s
  666. //          }
    8 K) q, P+ I7 B& o7 `
  667. //        }
    $ p* \$ W# @. }3 }
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* a# t. u5 @+ M/ J3 L2 l" m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 d- F6 R* D$ R/ i
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + V: d9 k/ m- Z7 d) B0 w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( k5 _7 n4 b7 L7 E9 L8 A7 A! e# m
  672.         for(i=0;i<240;i+=8)
    ( y# T9 k/ L! i. _5 [0 f; r
  673.         {
    " @/ l; t+ m( d: d8 T  g, E
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ `; O& g/ C& W/ |7 J0 G) y& r
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + V8 f1 Z( s& X: o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% f5 d; t  Q7 O: ?  M! e' J5 o
  677.           Sleep(33);) E$ v3 a/ I6 G; l* b. l" `
  678.         }7 s1 W3 \+ d# m6 A
  679.         Sleep(1000);" D" o. n7 e5 O' H4 _9 F' \
  680.         for(i=240;i>0;i-=8)
    . X) \; Y$ _# f* m
  681.         {" N) w, V! {; x8 M1 n1 U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);- ~& B  }7 M" T
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 f3 M" T8 a1 U+ {$ m
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
      P/ r# V$ j8 J7 B
  685.           Sleep(33);3 n# p/ I3 {5 H4 W+ Y
  686.         }5 D4 y9 \& x7 z) C3 a! @" m( f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);% ^6 F6 O- |: y' W9 k4 B: x
  688.         dlg->ReleaseDC(pCDC);
    4 U& O) X3 Z, W" d
  689.         DeleteDC(hdctar);/ h0 f" g1 O& f
  690.         DeleteDC(hdcsrc);
    6 H" {3 R9 K" d$ s
  691.         DeleteDC(hdcorg);
      @. p) Q1 O6 k' c. n9 f4 y
  692.       }! r8 q+ Q* i% s4 z+ j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    / X' p. }% g7 C: e4 C" u) ~- w: X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 r' w8 z3 L3 H
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");5 f7 t! @* P  A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) Q( S9 s; l! K. B, K+ l: U) r
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" w# y  J2 D. r8 l* R0 o
  698.       if(!Dn.Connected())0 Q! F) M' V: d# h
  699.       {
    3 R# ^  U# Z& |$ G- J
  700.         dwTotalFiles=1;
    / r! w$ s9 {3 r: c
  701.         dwDownLoaded=0;8 J) t- B! J8 k. V/ t5 m
  702.         bSilentStep=TRUE;
    9 x& A5 t4 [) p8 V  s
  703.         bCompressed=FALSE;
    , Z5 v2 O# @8 L8 b
  704.         strExtLocal.Empty();1 w  l8 ^) o4 l
  705.         strFullName="readme.txt";
    & O: [; N  }% `! ^* X* C
  706.         dwProgramState=AP_CONNECT;" S% X  G6 \: B! k) g& J
  707.       }( X" Y) E' _9 \1 I3 Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    . j! x# {! B- v& d" w) Q
  709.       dwStartUpSteps=2;
    4 `: x3 J1 B! z; g9 L4 c* N7 h
  710.       break;3 q1 v2 b7 P( V3 |
  711.     case 2:7 Q* H( g7 X: W2 k3 u' F: V
  712.       {
    " ]# K6 g: u: e8 _9 b
  713.         int iEOF;
    % N' B0 P8 a. y1 \8 W8 }
  714.         FILE *fp;. k9 V/ [4 i5 ~) g. N
  715.         char szString[512];' F6 W/ }6 _8 y& N4 j+ F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , D( b6 v# H( H( k. T
  717.         if(fp)3 G8 t: E* M8 ]4 w$ m0 [
  718.         {
    9 M8 ^7 J; m. V- p6 O
  719.           do
    % x6 t& @( v4 a9 e3 D9 l
  720.           {
    ! v4 B$ U  f) s% p* g
  721.             iEOF=fscanf(fp,"%s",szString);( J4 O- q1 ~3 C2 x' E; Q
  722.             if(strlen(szString))
    / x/ g+ o4 B/ |% A
  723.             {
    + |, O5 p/ ?& F$ D* \
  724.               if(bFirstChar)' h: R5 k6 U# ?( Z: J8 L
  725.               {
    4 C% R+ o- Y$ x9 ?  O  L$ H
  726.                 bFirstChar=FALSE;# N& b9 t5 M/ B
  727.                 bConnectIsBig5=FALSE;. X) t& l- r! F2 t6 T# e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;6 e8 P4 X3 W2 ^  T1 f
  729.               }
    ' A, b1 \; I0 j$ U  `9 ]4 F- {& a
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));. S1 ?# n5 n' V: V& W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 m1 _: h# Q. s! o$ M$ M
  732.               dlg->m_ListText.AddString(szString);/ v( f: M! P1 k6 @/ c% A
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 P0 W/ E% J! O  B8 G- Y+ o
  734.               *szString=0;
    0 e8 M1 O% }( W/ T9 h& z! }
  735.             }; ?! ~: o$ @& g; m, p3 B# p. T
  736.           } while(iEOF!=EOF);
    $ |% C. j8 G; e4 v
  737.           fclose(fp);: X! }% p/ H; O9 A! ]' v, L
  738.           unlink(".\\DownLoad\\readme.txt");; q( F) W" C8 p! R% f1 h0 P
  739.           dwStartUpSteps=3;; o1 M  C% K6 ]8 N
  740.         }" R9 p1 v1 X; @  |0 E+ s9 l0 U/ X
  741.       }
    4 W- N& R) C) @2 I% g: z0 U+ p
  742.       break;
    ! J, A6 _. a' E8 X% H7 h/ I/ h
  743.     case 3:
    ; n. Q( l: }; G+ c' N/ l
  744.       if(!Dn.Connected())- g, P2 i- s! M. L0 Z2 N& C
  745.       {
    + t1 x) H1 [) t+ H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* w- E. e! ?3 c. Q% T
  747.         dwTotalFiles=1;( m) Q; Z. I/ f* ^! U& p
  748.         dwDownLoaded=0;
    . X, C" \6 _* S5 C
  749.         bSilentStep=TRUE;' O" J) w4 d9 a( N% @
  750.         bCompressed=FALSE;2 G$ {: r) S: l8 a+ @" W4 t4 g
  751.         strExtLocal.Empty();  l0 \$ b9 A) ?% p
  752.         strFullName="checkversion.txt";
    / W% w) d7 u. ?8 s8 l1 g
  753.         dwProgramState=AP_CONNECT;/ @9 r2 Y, v" V- b! p
  754.       }
    % y# D; a1 C3 Q* J- N( \
  755.       dwStartUpSteps=4;
    % {. F+ f" B6 h0 [0 ]7 E1 [
  756.       break;
    ' [) ]3 @7 ?/ j0 a# L" h
  757.     case 4:
    8 v2 K3 X7 O  c5 g( m" [
  758.       {
    5 G  ]4 k) K, k6 A6 {
  759.         FILE *fp;! q; O) M, D  m
  760.         char szString1[128];
    * Y" v. X0 c/ n1 h. |9 Q$ v
  761.         char szString2[128];
    ( j1 K; b8 T1 r; J( c/ v" H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    : y( i" X1 W$ v$ F, v, ^
  763.         if(fp)
    ( u0 w' e, D- W  w: T1 I
  764.         {' e& `$ O0 u( x, t8 j  F$ V& E) w
  765.           fscanf(fp,"%s",szString1);
    " d: f, A# n' o( _: R0 z
  766.           fclose(fp);
    9 m1 ?( {* c! ]( h# X: F
  767.           fCheckVersion=atof(szString1);  x: i6 a3 ]! @, o
  768.           fp=fopen(".\\checkversion.dat","r");
    ' {) L! {: N0 n  }3 b
  769.           if(fp)
    6 p, f; F; V* O; Q4 @* E5 V5 x
  770.           {& h/ w3 z: ?, d8 D
  771.             fscanf(fp,"%s",szString2);" n! B8 A: [; x# v
  772.             fclose(fp);
    3 r* x; a* J6 E6 S: }! [- L/ p
  773.             if(atof(szString1)!=atof(szString2))
    0 _9 l3 G) t2 f. q/ [
  774.             {- F( |) t  K; R# @' z2 V
  775.               if(!Dn.Connected())
    - j1 |# U3 E9 G* g! `& ~
  776.               {9 ^! j& w1 Z: T! v' X# J
  777.                 bFirstUpdate=TRUE;  ]$ C2 v: w. |; M1 b
  778.                 dwTotalFiles=1;
    : w" l8 S" l# {6 z
  779.                 dwDownLoaded=0;
    7 [& {+ A/ [) {: A
  780.                 bSilentStep=FALSE;" A1 v0 z* p) ~) x$ D/ u
  781.                 bCompressed=TRUE;
    ; E- G" K* ~5 K" P1 n
  782.                 strExtLocal=".\\DownLoad\";! T) C5 i) C" @; d/ L6 L
  783.                 strFullName="update.txt";0 q+ s9 z$ a7 ~
  784.                 dwProgramState=AP_CONNECT;
    / U3 b' q5 F  e" X1 e, H6 W
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * p2 T8 t, b  j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " n$ H) l2 M9 i* T& x' u
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 U) b* J! g2 X7 Q: P
  788. , w5 x- e+ B# s  ]0 H( W+ h. }* d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 v+ {: {* h  r  y8 e
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    6 B, B1 Y/ W. S" |
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 h: j& j- Q$ Q$ X" q/ s# k
  792.                 {
    ; V+ Y! F8 `0 {' J1 Y" g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    7 Y6 z* B) G6 j, d$ K( h# ^" {- E
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    / u0 A( a  F1 O" u; u# u. b
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 y3 v5 I) k- e5 C; e" Y; b' c& {
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + @- `2 Q/ v) X" x# V9 |: d
  797. & P7 g3 q$ @. z5 [5 j9 z, [
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 Y3 u) ]' S4 ]: `  w& h9 H: f
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    1 v: j: u; }) g
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 i4 D  x9 d/ g3 W2 W( O7 p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + j: |! T$ u  n1 z9 a" Y
  802.                 }
    9 E: ?7 @- A, [$ |* h0 J* ?
  803.                 dwStartUpSteps=5;; n! e- `2 T- F* p
  804.               }
    % g' u0 f# ]. M, F/ f
  805.             }" G5 e" C; \  ~; B7 I$ o
  806.             else% v# E' \2 A5 b6 U. @
  807.             {2 K1 N. M+ D8 ~% [( \' K, F& z6 g. z
  808.               unlink(".\\DownLoad\\checkversion.txt");1 j# M1 V7 e$ e7 @* O2 s) [  O# @2 p
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) p5 Y, V0 j5 M$ ?& s
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / Z: |+ O: I1 W8 @' T! E) X
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");/ q& j6 F  a' p+ b

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

4 Z9 s4 D5 T3 ~4 v3 H

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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