CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
5 @- ?. [2 I& p0 f3 T
  1. / RevApp.cpp : Defines the class behaviors for the application., n0 ^7 D) |2 {% N+ B
  2. //5 M! e' @: [* u. Z
  3. ! C& j/ {+ x  B, I' Y- I2 G
  4. #include "stdafx.h"
    9 n  a' r0 s8 Q

  5. 2 f, D5 C1 g' r$ V1 {+ i' O
  6. //#define UNICODE
    8 `) t$ V4 l' Y, e) G" |; O
  7. //#include <gdiplus.h>
    5 Q+ _2 Q7 Q( H3 M; Y" @2 g/ g6 v
  8. //using namespace Gdiplus;* R, H+ ]5 j6 u% _6 W% Z
  9. 6 n! m* J- R0 ]7 m4 _
  10. #include "RevApp.h"
    ) y. ^; [" @3 k  s3 T  e, r
  11. #include "RevAppDlg.h"
    ) F  B3 t, w7 N0 Y$ h

  12. + F9 L+ X$ s9 r' v0 m
  13. #pragma warning(disable:4786)
    ' s2 H' r; V9 U- i  l  ]/ F
  14. #include <map>1 b* r' `$ ?  z  {) G9 E
  15. #include <list>/ E" j6 {: r% ?) D# e
  16. #include <direct.h>
    ; V7 M5 y2 v: M

  17. % V7 {) H  w3 ^
  18. #ifdef _DEBUG
    / J/ b9 {5 [# Z7 |
  19. #define new DEBUG_NEW
    8 n3 \( ]% Y, r
  20. #undef THIS_FILE
    ) s5 W( w. c( ~8 a+ P& ^
  21. static char THIS_FILE[] = __FILE__;* ?9 V& \- [7 j" C9 u4 c
  22. #endif# _% d+ T5 Y& Z$ _$ q; a
  23. #include "SkinResDef.h"
    ' X5 u* S0 p( ^! E
  24. #include "ChangeBG.h"' n( _* C2 O2 @) e  @. o7 k
  25. #include "AFXINET.H"
    5 f+ ]5 w2 H7 Q/ n  m0 i/ m

  26. & \* k, ^. l: f2 q+ v$ Y1 g* I
  27. #define TRADITIONAL_CHINESE 0
    ! @& A3 d( E! D1 D
  28. #define SIMPLIFY_CHINESE 1
    0 ^0 [9 a3 Y4 \6 E
  29. #define ENGLISH 2) I* J0 _2 ]  V: I
  30. int m_iLanguage = ENGLISH;3 M% e1 w: q  K. |  a8 n+ _) @4 l
  31. /////////////////////////////////////////////////////////////////////////////
    8 C' o$ ~0 I3 n" M; a' y- g& ]
  32. // CRevAppApp
    . |9 t( X- M/ b4 E, L2 z

  33. % }! {) M2 E$ V  ?, {0 F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 W8 y( h% d# P0 n# P
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    6 B8 u& p7 c" y# ^
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.8 T" {2 F4 v2 j; f7 A
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!' y  k: p+ U4 f: Z1 W
  38.         //}}AFX_MSG& p8 N* I8 e& w7 y' U$ u
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)! M4 G4 D4 P: `' j
  40. END_MESSAGE_MAP()
    # T5 m; d7 ]4 q; U! `4 }
  41. 6 C0 f. X7 {1 k9 z4 Z8 m
  42. /////////////////////////////////////////////////////////////////////////////
    ! ]+ Z' E% I1 U+ I# s
  43. // CRevAppApp construction
    , ~) v- [/ M  C% I: q# U4 ^5 {% C
  44. ) x9 E$ P4 \6 W& q% o
  45. CRevAppApp::CRevAppApp()
    6 o" P: M# A) Z4 \2 b9 O& s: X8 u
  46. {
    4 r  |/ c. K0 ?. v; j- P- B
  47.         // TODO: add construction code here,) ]) O* y: F( D2 G" R) g6 e& L
  48.         // Place all significant initialization in InitInstance( N& Q$ Z. t+ m8 U8 }
  49.   bDisplayIsBig5=FALSE;
    & Z& X' s3 I  _) b
  50.   bRestartUpdater=FALSE;
    3 v; a/ Y! O; Y, U. }1 X
  51.   bFinishUpdated=FALSE;2 @; f  h3 T4 Y& x* n$ P; C" [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ) T$ A! X7 w2 V6 t" k* `
  53.   InitChangeDataBig52GBKS();! @. y! ~6 b: N
  54.   InitChangeDataGBKS2Big5();/ ~: F' {4 ~% {4 l: \
  55.         //) k) z( S4 C- q4 S- g% a8 `
  56.         bClickRunExe = FALSE;0 K6 D  \, |* [  K
  57.         //# N" P8 u& a9 G& z3 R
  58. }% B- f7 t8 P; a
  59. & ]2 L1 Y% \0 E- u
  60. CRevAppApp::~CRevAppApp()" E& p, t# S: N# B6 ?+ U  L1 m
  61. {
    5 X* s3 q% a5 j' t+ r4 K1 Z$ K  D. O: v
  62.         // TODO: add construction code here,* @. u0 H2 Y8 b) J
  63.         // Place all significant initialization in InitInstance
    1 x0 p3 L" `* `0 V# k% P% w
  64.   EndChangeData();
    9 a" u2 r* H. K# O: o2 O6 |
  65. }
    & N6 ~" Y- U  R' X$ h2 o: Y

  66. 5 a! r- @( I1 P$ ?- v# U
  67. /////////////////////////////////////////////////////////////////////////////; {/ a( a, D& w( T
  68. // The one and only CRevAppApp object
      j$ n% C9 B8 [8 N

  69. 0 ?  ~3 |* v/ A, ?/ Q
  70. CRevAppApp theApp;/ R5 g  G: e6 J2 i

  71. 9 k/ W' c& ?0 {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    / i8 }7 d4 H( X1 F8 @
  73. {
    6 M% M4 m. L$ C8 E' v( U, U
  74.   int iEOF=0;; |3 v4 U7 D# _: w/ e& {
  75.   char szTempName[MAX_PATH];
    $ n* q# M8 J& s% b4 C- i3 c, ~
  76.   *szFileName=0;
    9 _6 B) C! }' x. u* Z6 O( j
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & d% P; ?  ^7 d5 k0 z. f
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')3 E) N1 D. @+ Y: D3 r9 C
  79.   {( T/ F( W9 |- [/ {$ K3 T
  80.     strcpy(szFileName,&szTempName[1]);
    4 q1 D9 K! v! U1 u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)6 b2 I; B' E- e; d0 w1 X5 j
  82.     {" {! X) o* {& N$ `+ X
  83.       iEOF=fscanf(fp,"%s",szTempName);
    9 o# @& c+ B: [1 }( P9 E- a1 B2 _# r
  84.       strcat(szFileName," ");# t( Y8 |0 @8 U" N. C% }
  85.       strcat(szFileName,szTempName);; a! o; U! H/ t
  86.     }
    * P3 d9 q# I9 P3 w
  87.     if(strlen(szFileName)>=1)7 K, Y9 C6 A" D, s$ I& p  W
  88.     {
    : t% M# f: y8 R0 U" i
  89.       szFileName[strlen(szFileName)-1]=0;( {9 L1 Y6 F- {
  90.     }
    + c& `9 n2 h/ ]# d" i5 M
  91.   }
    + g2 S+ [% W4 o! ?/ e4 K
  92.   return szFileName;
    2 S) }" t+ x9 |/ |+ a$ j' u0 g* d
  93. }" W. E6 X/ L. W9 ]0 k( y/ Y2 b

  94. ! r0 k% H' `0 `3 @' A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)$ C9 A7 _5 R% C9 x; k
  96. {
    ; S) U4 K$ B. F+ O
  97.   FILE *fp;/ V6 ~- y/ {! r
  98.   char *key=NULL;7 t0 _0 ], ]/ m! s! |: P" Y3 s: h
  99.   char version[MAX_PATH];; B4 d+ f' \% L& I
  100.   LPUPDATEFILE file,olds;- U3 ^. V: j/ D, |$ v
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- W$ A% y9 d! `$ ]! F
  102. 8 `3 C& V1 `; v5 o- B* c4 D
  103.   UpdateList.clear();
    # E, i+ k- R5 C5 s: [
  104.   UpdateFile.clear();
    , a- g- N. W4 l' P- q# O
  105.   if(GetFileAttributes(filename)==-1) return false;
    / L% y% |. @1 v; y0 V: n! s/ L
  106.   if(!(fp=fopen(filename,"r"))) return false;4 G' ]3 i2 W. @# L
  107.   fscanf(fp,"%s",version);
    / P. k" v1 y& l7 [1 v0 ?5 ]
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }' A6 u6 h9 \4 A/ S. H
  109.   while(fscanf(fp,"%s",version)!=EOF)+ z0 w5 ]* O4 T/ |0 T
  110.   {7 S( b+ ], Z) \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + u2 v2 q0 A1 j
  112.     fscanf(fp,"%s",file->path);
    * ], K3 P8 h3 ?/ X. J( B/ [/ {7 j
  113.     ReadFileNames(fp,file->file);6 z" j, L: }1 X
  114.     strcpy(file->full,".");
    " V' c% _& ?+ ^: c
  115.     strcat(file->full,file->path);6 R7 p: q+ ^3 ]8 o. s
  116.     strcat(file->full,file->file);' u* x( F& D  E1 i" `. N+ R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ) E. j! }1 _8 k3 P% P8 W  H6 V7 c
  118.     {& D9 j4 T; a4 O
  119.       file->vers=(float)atof(version);
    - G( g6 t1 X7 v
  120.       UpdateList.push_back(file->full);$ A6 v0 p; E; h( ]; a0 {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));7 n: `9 {( S) f/ U- H& T+ }
  122.     }
    ' T6 s. u) L# m8 w
  123.     else
    6 S- D( {# k/ ]/ b
  124.     {/ X8 N1 K" i) W8 D* a" t9 U5 q
  125.       olds=(*p).second;
    : H& C1 Y! }5 Z
  126.       if(olds->vers<(float)atof(version))
    ' `: x; T  o( f' E' h
  127.       {
    1 s1 |. S' |8 b7 s
  128.         olds->vers=(float)atof(version);
    ( ~  u. W# K  u
  129.       }8 E# `3 g! L8 i9 b, V
  130.       free(file);! I5 }# X% }" V5 k% |
  131.     }
    , `7 J" r  p  i' T
  132.   }
    2 m3 g/ T& p, |  f. R
  133.   fclose(fp);
    & E, @2 q4 J2 J* A0 N" ^( V! H
  134.   return true;- z7 d6 R& t, b5 Q5 u& F9 V1 t
  135. }
    % M) M' e9 A, v$ R1 U' X) ]

  136. 2 u5 ?, N$ H7 l+ f, Q# B+ M
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' k3 t) V- o" o/ d+ Y' H1 c
  138. {" Y% Y9 \6 V2 C; u! C# r
  139.   TCHAR  szFull[MAX_PATH];7 S% v# H. V  `/ [2 _+ Z/ u$ E
  140.   TCHAR *token,*inter;
    * r5 |7 \7 t% @2 {- A2 \
  141.   *szPath=0;7 x& M' l, I% }: F- u
  142.   strcpy(szFull,szFullPath);) q1 O6 U- r" {$ y# \
  143.   token=strtok(szFull,"\\/");5 l2 x9 M. {1 d- D
  144.   inter=token;
    . C- R2 x: e% r/ R' S( L
  145.   while(token=strtok(NULL,"\\/"))
    ( @( s. K* r+ D' P) }
  146.   {
    " [4 [5 F6 e3 m& F
  147.     strcat(szPath,inter);' R( J( \9 @" f5 M- M. O
  148.     strcat(szPath,"\");
    7 {4 w. T8 x% g9 z+ B3 E6 {! z/ \
  149.     inter=token;
    + b% c! O9 R' H1 b  X- @: H
  150.   }
    , M+ ~/ Z; F7 x* T8 j6 \, R! P# e  L
  151.   return strlen(szPath);/ p. l" f) _6 z, ]4 [" y& Y
  152. }1 q/ K+ F* @" k; H- M1 j
  153. ! n# @2 E( C% o# O0 g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    : l0 c/ X2 T" I4 K$ Z/ i# e; _( T
  155. {
    : `. ^7 B: Z: t3 @! q  h
  156.   DWORD attrib=GetFileAttributes(Target);
    # J+ k8 l0 T9 ^8 d/ B
  157.   if(attrib!=-1)5 }# {# p( }) V9 |4 C, f0 V1 V1 Q
  158.   {
    " u* r6 V7 V9 O# E4 [
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    + i2 b9 g, y) P
  160.     {4 [& v% T  T+ E$ I
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);  W- r- x2 d# B  X
  162.       SetFileAttributes(Target,attrib);: Y7 O0 D9 v7 Z8 g' s
  163.     }
    & Y- A' E1 Z# Q7 ^  D/ V
  164.   }
    " S5 ~/ Z" A  J% [& m5 ?) }
  165.   CopyFile(Source,Target,Erase);4 o  k9 ?  ~. B7 u' _
  166. }7 o7 j  J1 `1 t5 w4 u% d
  167. + [  U2 p, [+ |/ v! _) q+ t" E* W$ h
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)  b' M9 ]  B0 l! {' h% m; E6 B
  169. {
    1 h2 x' P' `- j' t6 [
  170.      FILE *fp;
    5 D  M  K: i) R' J% V
  171.      char  szBuffer[8192];. V# D9 u8 a+ b' H5 N
  172.   va_list  argptr;
    1 I+ L& d; r3 o# C8 e$ u7 A& B

  173. 3 }0 L5 W4 q& ?+ X" ?" y
  174.         va_start(argptr,message);% H) ~" [6 E0 C+ g0 q* m: g
  175.         vsprintf(szBuffer,message,argptr);
    7 h5 G* Q: v& o- q3 y
  176.         va_end(argptr);7 K" b1 X, A0 r$ `  s. T$ Z- O
  177.   fp=fopen(FileName,"a");
    - x1 ?6 i* e$ e  H1 H
  178.   if(fp)
    - U5 y: }2 N# U* f5 l0 V% d
  179.   {
    : i& a8 o- p. ^9 p0 K1 d
  180.     fprintf(fp,szBuffer);
    % {+ c$ d7 w; c/ P7 X% n. t
  181.     fclose(fp);
    + K! j$ {- x( b) C( Z
  182.           _flushall();# @6 N7 O4 f, J0 D& p+ d6 R& D
  183.   }8 k6 _8 N  G3 \' ]
  184. }1 V) X1 v. h' i9 B/ F4 R) e3 m0 I

  185. $ h7 w" P  f& @0 Z% z: q  M
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ |  e* P/ s6 T
  187. {8 w% {2 P; m# q3 m9 H  D* `
  188.      FILE *fp;& ~# |+ s" W( A4 m$ b9 _
  189.     DWORD  attrib;
    9 Z9 A6 j7 K; p. y* L
  190.   attrib=GetFileAttributes(FileName);
    ) T+ L& b/ V  R+ E! \
  191.   if(attrib!=-1)1 E6 [/ S+ o. ?* ~: e5 q
  192.   {+ ?4 u. Y4 ~5 A% L. o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 N& K+ A# ]7 N/ n  n
  194.     if(!SetFileAttributes(FileName,attrib))- n" W$ N2 K* N
  195.     {
    : U$ P0 \: q# q4 C/ Z$ w1 X
  196.       return FALSE;$ ^. Q5 s; m/ [- B4 [9 X- A/ L. c
  197.     }
    " i+ u5 u+ _4 n" X% F
  198.   }
    ' C5 y% l4 @. I; {
  199.   fp=fopen(FileName,"wb");8 g' v, i1 q# G) l
  200.   if(fp)
      S) C; Z% W; f, R2 E' G% c
  201.   {
    2 X" I$ K' P8 C% P0 Z. E1 G
  202.     fclose(fp);
    + ~( f% K8 U1 v8 S5 e; m
  203.   }
    , M% m" W; ~" b2 E$ _+ x
  204.   return TRUE;( j+ e: D# e$ e+ ?5 Y  {! y& p. J4 A
  205. }
    * F3 h( I) L2 A0 T" c& `6 a" [1 [
  206. ' e0 {; U% i" B* y; \. ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    / q4 w0 }9 D0 z* n- N  d
  208. {& {& e( w0 b+ T) ~; ]) G/ N, r
  209.   char filename[MAX_PATH];! g3 V3 h' O0 W2 b& |6 d0 P
  210.   LPUPDATEFILE file,olds;
    ; Z% j: M5 J2 N( S+ [$ [. G1 a
  211.   std::map<int,CString>::iterator i;, R" |2 z8 e* R0 N- z2 ^
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 i* b. _4 J2 v$ m4 z' S
  213.   std::list<CString>::iterator l;
    1 P, o$ w3 i% q  V9 C$ j* b/ K3 ^4 u

  214. ) W3 n& O2 \1 O! ~6 f! }% {
  215.   if(bFirstUpdate)
    ) m. v2 Q0 a0 F: a& V
  216.   {# j2 u2 y% N7 R6 d+ ]
  217.     dwCurrFile=0;
    3 g) D' G5 J1 v$ k
  218.     bFirstUpdate=FALSE;' z* Z! Z0 |: x+ B
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  \; `( e2 M8 m' G8 o% T
  220.     {
    2 G) F" r3 o' u- k
  221.       dwTotalFiles=UpdateLocal.size();  A+ Q4 c7 B3 [- B
  222.       dwDownLoaded=0;
    1 r! h  `9 w6 J  B6 X6 F, P( l
  223.       bSilentStep=FALSE;
    " s  R5 z4 S9 b5 i$ @# v
  224.       bCompressed=TRUE;
    ; k2 q. W! g' M( Z
  225.       strExtLocal.Empty();
    6 j4 d" `  |; J; t
  226.       strFullName=(*i).second;
    % J0 d# l: R! z  a2 e1 ]" H& R
  227.       dwProgramState=AP_CONNECT;  G& p1 q0 S2 H+ \& t7 Q* s
  228.       return TRUE;
    : f, H9 c* ^% W: _2 S
  229.     }5 E: E/ A' h, w7 r
  230.   }
    $ p3 q, U# g: }% G: `" a
  231.   else if(bRestartUpdater==FALSE)
    8 ~9 K$ n9 |: r% U* N& Q
  232.   {
    2 P! B- P) e( P% F) X
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" V  H5 q0 F- l# s2 T; c
  234.     {( O6 H# ?3 t8 b% r
  235.       file=(*p).second;
    , w8 S* i) d; a9 ^" a0 f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / d: G8 v, n# Z
  237.       {
    - Z# G5 |- r( |+ J) E. {7 X# z
  238.         olds=(*p).second;
    ) k: B4 \8 M* b2 m
  239.         olds->vers=file->vers;
    ; \6 ]3 F  L, t2 l, Z
  240.       }# ^7 _9 x0 q' _$ _, T
  241.       else& f8 O) K# [. d' O; v9 l
  242.       {- g8 {5 Y) ~" A. C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 x8 g0 ~* r0 r" k0 l6 a7 W
  244.         memcpy(olds,file,sizeof(UPDATEFILE));, Y  |( p8 v& I
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    % l9 k( H$ i' ^/ X8 S4 i0 J
  246.       }' p' k. ^$ r; d1 b- }& W7 }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    $ Y9 i# C( N8 }9 G# P
  248.       sprintf(filename,"(%s)",file->file);
    9 S) ~6 }( J2 \, r: R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& @' i  b" n3 o
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }# B9 g$ [! T6 I% s
  251.     }1 N7 Y0 W' h. J8 o& @' a4 l( c
  252.     dwCurrFile++;3 b" m% [% ]6 K; q/ G  b
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 U4 p  [( O. a$ h" ]8 k% j' A$ W
  254.     {
    , ~3 j- d, g* Z, A0 s% Q! ^: D2 N$ v
  255.       bSilentStep=FALSE;* Z6 j! ~8 h. \" R0 C) q
  256.       bCompressed=TRUE;
    - I! R1 \# _% R$ G+ Q% s
  257.       strExtLocal.Empty();
    . ~" B0 l6 S3 U$ o
  258.       strFullName=(*i).second;
    # y9 B: u2 o; [. {- ?+ y# e
  259.       dwProgramState=AP_CONNECT;9 `" @. x: e. L4 g5 x
  260.       return TRUE;
    ; w. R3 M, a0 g
  261.     }
    ) I/ O: L, r  s- Z4 m
  262.     if(!bRestartUpdater)
    0 i- I; i* A' j9 ~. y, y' w% Z. D
  263.     {* Y8 k' M5 {2 a$ b: O
  264.       int iCurrSize,iFileSize;. z' o! W2 y4 S. S: z, D
  265.       iCurrSize=0;
    : m( Z2 i, v% n$ j
  266.       iFileSize=UpdateList2.size();
    * C* O, A3 o7 O& V) C* O$ l5 A
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 G# b1 R4 b0 j1 n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % d, ?; ?" _5 w7 U! o- x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    : I: v2 w' k( o( {
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ R/ ?" g- t2 Y& ?! ~) p
  271.       Fclearf(".\\update.dat");
    9 ]1 u5 Q+ Q  Z2 n
  272.       Fprintf(".\\update.dat","Bloodyf\n");4 S6 Y+ \: C+ i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
      U+ q! C% U8 ], X
  274.       {
    ( A% o1 i5 {* ~6 X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ r& Q# e1 ~! D3 [0 }8 O: ]
  276.         {
    8 u- J* ?; A$ y3 ?: J  h1 t
  277.           file=(*p).second;+ U+ \) k- B9 V
  278.           sprintf(filename,"(%s)",file->file);! K- w  I/ i6 \- X3 h8 G
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ( }, h$ {2 b4 N+ C2 U9 W1 R3 L; N  Q# U
  280.           iCurrSize++;
    , ?( `! `  [. O1 V# f. I
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * e9 q) n4 E1 U' k2 @
  282.         }
    ) A4 U9 i0 q  Q" @/ u; `0 v
  283.       }
    ; ^7 I& b6 k# j, Q
  284.       unlink(".\\update.txt");2 n7 w/ v0 v1 u# m" t2 X
  285.       unlink(".\\update.tmp");
    ) q) p9 t- r0 R* c) G9 g. e4 ]
  286.       Fclearf(".\\checkversion.dat");$ t  H! `7 U6 r6 U$ V
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);7 v  C) O: |) ^& D" B; w* F
  288.       if(UpdateLocal.size())8 ]0 G/ ~0 c9 N' u' u
  289.       {
    % b1 O; P5 u. \2 V
  290.         UpdateLocal.clear();
    . t7 t% b2 K5 i: Y- a7 z: ^
  291.       }0 ]# i0 S$ V# _) i# p
  292.       if(UpdateFile3.size())
    & E# G; z, X* J# G$ u* H( I- O
  293.       {
    ; m; N/ c& x& `( k
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # c) `2 J8 r, W! L% s
  295.         {# W2 c/ {3 y. d& y/ D% d0 O" g
  296.           file=(*p).second;; h" J) f, Q1 e" {7 w
  297.           free(file);
    : \  S- H" B: @) r
  298.         }0 g1 f7 s$ q" y
  299.         UpdateFile3.clear();
    ) M$ R; u- Y! G8 @9 Y: \, E
  300.         UpdateList3.clear();
    2 k- ]/ x. u( {4 C8 y1 H0 C9 k( ?
  301.       }
      D" F, z8 {0 s0 P
  302.       if(UpdateFile2.size())
    5 m0 a# q; C$ k7 i
  303.       {( W. i( d2 n( L' h6 G- V+ c
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      o: C1 v  `  v, Q
  305.         {
    3 p4 K2 u7 y2 M# E
  306.           file=(*p).second;
    ' D5 K/ W9 O8 U, B  v" u
  307.           free(file);
    : A; {! D4 ?% U' k0 o
  308.         }
    0 |! }/ b6 v/ b7 \2 {
  309.         UpdateFile2.clear();0 K8 h1 o( F, \
  310.         UpdateList2.clear();
    % F3 o; \/ L) d) K* r
  311.       }! p, M% _3 @/ t+ B5 _0 f
  312.       if(UpdateFile1.size()): B. R/ E! t+ z3 b
  313.       {
    6 e/ z. ]7 F6 W- {+ C5 w4 ~" b1 y1 e
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! N- F* B8 b+ t8 x! E! a: `1 Q# o
  315.         {" P3 m* P9 H( `0 E* A
  316.           file=(*p).second;
    2 i& ~5 s! M+ d' ^
  317.           free(file);- y2 m6 P4 P4 H  w5 T0 i8 Q7 x
  318.         }
    # |* z1 B- \1 g" n) ]
  319.         UpdateFile1.clear();& C6 b+ Z" Z5 s( |) A" n
  320.         UpdateList1.clear();7 u, r% S! \% a' i; V) o8 }
  321.       }( }0 l" V1 _( J  N; X: p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; ]+ ]+ X% Z7 T: k
  323.     }6 {6 T. ~, y5 S1 K
  324.   }
    7 E: ^8 O9 ]- F2 ?  k
  325.   return FALSE;
    ) \$ d, @$ [. y( H; p; Z) j
  326. }3 A" H! V0 T2 w( I
  327. 0 {, `3 C/ k: G5 G9 [, `# E1 {- n# n  i
  328. void CRevAppApp::ClearAll(void)1 h' t- ~9 S/ b+ f6 ~2 j9 p
  329. {  f- x5 s9 C, Z, g
  330.   LPUPDATEFILE file;1 M4 W% C+ ?" h% f- G$ h! ^2 M
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( Z$ L4 ]; Y8 y" Z

  332. & ^* w, c' [9 |, u' k5 p
  333.   if(UpdateLocal.size())& g% Y( _4 @- }. s- @5 \$ D
  334.   {5 V5 Z% e& s6 j
  335.     UpdateLocal.clear();
    + L8 P7 a7 j# j  y% \% e( r
  336.   }5 b) @) D+ g" _0 {
  337.   if(UpdateFile3.size())
    5 {2 N1 G# b0 F6 h+ d1 x3 A
  338.   {
    . c! X  f! M% o6 n1 b9 N0 r
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++), f) G- g& D8 Z5 w5 a! A
  340.     {2 B% c+ V  Y+ G
  341.       file=(*p).second;9 F9 \) d& w, u8 m
  342.       free(file);* t, q5 t  V8 g0 G
  343.     }: Z% F/ i  a& l8 d" Y) X6 m7 d
  344.     UpdateFile3.clear();; F  q  z) S' ?% q9 T
  345.     UpdateList3.clear();
    / g3 c2 Z) J3 `8 ^8 k1 G
  346.   }3 l. r+ h  ?. |; y* p% p
  347.   if(UpdateFile2.size())+ |; ?$ N  _9 u2 \" g
  348.   {
    4 K( V, v( ~  x9 ?3 \. U
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . m3 f' M: \0 y
  350.     {2 |4 m7 C' D7 u# e- Y, ?2 h# O
  351.       file=(*p).second;5 @9 H( M) i" @+ G3 J" x
  352.       free(file);+ s$ m  p" U, m! N+ L
  353.     }
    6 K1 |) m" g( ~2 B/ i$ S
  354.     UpdateFile2.clear();# @7 N# B2 `9 A1 Q( A2 I
  355.     UpdateList2.clear();* x$ o* {9 S% V
  356.   }
    / ^& I% f& u3 R( t0 A( l
  357.   if(UpdateFile1.size())
    / b  o( X. U# {" n
  358.   {
    2 ?5 N( A8 W  q' e) |- Y
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 l& m! P# a1 A$ m$ d8 l
  360.     {) }# e( p/ O+ h' |# ^
  361.       file=(*p).second;
    + k4 h: P2 l" Y' K# Y
  362.       free(file);
    + Q7 G7 E) [* w$ X, d1 C
  363.     }
    ; o6 k) W3 U; `8 z1 _& m
  364.     UpdateFile1.clear();
    ! m6 P- m$ I+ q* h" z0 q; A0 x
  365.     UpdateList1.clear();  u, A0 i( y8 N7 S
  366.   }$ B0 ?- V9 b# Z  Y1 z3 q  y3 j' e* C, c
  367. }  2 X6 @+ B6 `/ u2 e/ h
  368.   ) w/ u# S+ k3 y/ J7 ]1 z/ N" y
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    $ }8 u8 m! X  q: @4 b. }
  370. {
    / {+ @) R0 T; B) q9 |/ G, T
  371.   int c;8 ^8 X, L! S5 J0 o* R3 P: [9 q; y4 [
  372.   LPUPDATEFILE file1,file2;
    3 |' z+ P7 }; S3 `0 u9 O( n
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) i+ j6 r: \* X% |
  374.   std::list<CString>::iterator l;
    8 C, |# k) {' E. ?* n( N: O# k6 d
  375. + h0 r6 {; y4 l7 m+ X+ i
  376.   UpdateLocal.clear();
    . N  E8 n: S% F8 ?. l# e0 o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    * h/ ^* O/ [" L3 S& k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);2 `7 y( B/ P" l4 {' j
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ( w. ?3 W8 n% z$ D
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 f9 f/ r0 w7 x
  381.   if(UpdateFile3.size())
    8 j2 O  j* A4 |  S' j* L7 D
  382.   {
    $ D. M/ I& S6 T0 @# P8 b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)* \, o! |! m, k" m. G% n  \
  384.     {. o+ y# D$ q2 c* S: O7 z- F; }7 D$ X
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( g+ {- d6 b1 D' L& Y" s3 M0 i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! D" o9 v* U/ d+ G# }
  387.       {8 ?) @! W# [. S, K3 W
  388.         file1=(LPUPDATEFILE)(*p).second;! p; T3 X5 u4 [( u5 Y5 V  f: {
  389.         file1->vers=file2->vers;
    2 a+ _, L* }$ q" z' n
  390.       }' d/ _+ z; q6 n6 S8 X; a6 r. H
  391.       else$ R  ~  l0 Y. ~3 @! K
  392.       {% ~6 b3 Q: r" P: \
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % j7 v9 x- A! X8 s7 {5 K3 }
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));/ `! S& L4 e( K: e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    7 |0 s7 }3 U6 J3 Y6 ]* A
  396.       }  i$ m/ M+ j8 ^+ ~2 _3 n
  397.     }
    % x3 o0 B5 j  [, @: E/ g$ n
  398.   }& r- w- d. G6 y% v$ `" A) Q. c4 {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)% Q1 W: ^/ Q3 ]* T" p8 m
  400.   {
    9 r4 c, F# H+ `  Y6 ~1 p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); M2 D: U& t3 F: f" p; k
  402.     {: A# l. u" o9 v: {0 p# `* d2 l- j
  403.       file2=(LPUPDATEFILE)(*i).second;% g- |1 J9 X) u$ x; i! \; Y
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " ~! R" @# {8 m6 J: E& _4 O
  405.       {$ q8 r5 Z& F) X# G7 t2 p$ i2 O- Q
  406.         file1=(LPUPDATEFILE)(*p).second;+ x% A  t- }9 w" x
  407.         if(file1->vers!=file2->vers)
    3 A: ]- p9 F0 m/ F
  408.         {
    " L: j( z) y  W0 P8 R: [, ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & q8 @6 m# F# ]8 f; T
  410.           c++;
    + n; w2 H. ~4 N# z9 i: e6 {. R
  411.         }8 f% g" G3 a& ?
  412.       }
    . m4 r: C8 @' W% `/ m: d( ?! e
  413.       else* u& c( n% k( O+ h& O: j) Y
  414.       {: s) H. k  I3 ]5 m9 a4 M) @2 l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    $ I1 t- q  {& H1 D: g
  416.         c++;3 W( u  v  c+ u3 K( D4 f  q6 @+ n* Y
  417.       }
    ) d& l; v. \; ~: `9 l
  418.     }
    ( W. D0 n/ C6 I/ e0 @
  419.   }+ O' C( E) E: o" \. U$ s# n$ t3 `$ Z
  420.   unlink(".\\DownLoad\\update.txt");% o; X& N8 R) N! n* ^6 K
  421.   if(UpdateLocal.size()) return TRUE;
    ' {) C( y8 _- ?$ C: [' W. R& i
  422.   else                   return FALSE;; K( d1 U8 `7 ]' x& L
  423. }
    , P% V' V1 F9 Q5 P6 I1 I
  424. ' U0 z) s. v4 R. X9 p8 R$ M: g. \
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"( [5 `8 x' o; Y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ b6 o$ M2 G& q6 |$ h8 J& p
  427. ) ^+ q/ H* u; W# ^& a8 H

  428. 1 j# G. S( O( n4 h7 e
  429. 6 a! u6 A. b- W4 F+ ]" K, @8 s
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 i% D, k! i' H) ]  Z8 d
  431. {
    / O9 X6 v2 b1 k8 S8 C' m0 y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( V. \- w8 N) y) Z0 i# r0 C; L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). h5 S. i: O7 N5 s* S" [
  434.   {
    , \) ~7 K/ c; u9 ~% Z! ?
  435.     char szLanguage[50];' x" a8 ?) Y" ]3 g% W0 T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% X6 [; _5 S2 l9 W6 j2 K- u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 r9 L0 s. ?6 K/ O# x9 `
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 w$ @! |/ A" {  t  u' }0 c
  439.     else                                   m_iLanguage=ENGLISH;
    5 I  ]7 z  Y% t, _& H0 T7 _
  440.     char szRegister[100];
      }7 P; Z& E$ K1 N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! e- O* E. @4 p9 j, T
  442.     strRegsName=szRegister;
    2 T( {5 b+ h# p) |
  443.     char szPatchURL[100];
    / t* z8 Z4 C, x& m9 F$ _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" m; s9 {4 ?% b' s2 o9 x1 p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* l4 R# X) ?' `! f% y
  446.   }
    , Z9 S; C' O) y2 ^! i  h5 J
  447.   else
    + D, x! C$ K2 H4 o
  448.   {
    0 k+ ~* I  ?, m+ t- g0 g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 x* ^& X3 o* z( n) b2 J
  450.     strRegsName=DEFAULT_REG_URL;; E  H! j2 _* ~& {2 S
  451.   }
    . P) Z5 q1 a" D  Q
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 M- [' S# k" A3 |2 Q. f  @: ]
  453.   {8 d% Z' m, P/ {* H( q+ g  w0 I) m
  454.     char szIP[50];
    & g  y/ m" S7 _/ M0 i( l. V7 y
  455.     char szDIR[300];; x1 s' }6 h" x' S4 B( {- p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))& G, T+ l8 k4 T0 J, @% \6 M
  457.     {! M. Y- a# m% n4 r% h4 V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 R6 H- n5 [, e3 G& Z/ c  x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 s. u" D6 s: b: |' Q# x# V3 |
  460.       strHostName=szIP;+ x( i: v0 m# A$ ]$ E
  461.       strHostPath.Format("/%s",szDIR);
    ; h  u( o. j9 Z# K
  462.     }) c' }; }$ t8 E- t9 R/ s$ N
  463.     else
    7 X! [. g  b+ P2 X7 U! |5 O+ r
  464.     {1 @3 a3 Y0 I2 `) w
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & q6 N$ d" M) w. q. v; r
  466.       {6 T. u- {" F6 p7 Y" U
  467.         char szLanguage[50];
    5 ?$ u5 M: N+ d
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; ~) B0 M' k& K: h% ]6 a
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 {7 r9 {# p8 j% o; H! Q
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 ~; a- `: t% X0 N4 W
  471.         else                                   m_iLanguage=ENGLISH;
    8 A: b# P3 {" b# U2 _4 }8 M
  472.         char szRegister[100];
    2 y2 Z% x0 i7 W5 v! c( i8 V! c
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & o- K2 S1 w, q' F' p
  474.         strRegsName=szRegister;
    + }, n% U8 x7 d( M7 J
  475.         char szPatchURL[100];
    - o# g4 Y$ E6 d2 x$ p/ n
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! P7 @/ f% A' {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' F  _$ I; o8 K& {' q
  478.       }$ p/ `! I" B- A! r0 a* {
  479.       else
    $ l9 w) c& Q# c
  480.       {
    % A, B: w( ?7 x$ O3 K
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & w! v7 p( b0 e* M$ O
  482.         strRegsName=DEFAULT_REG_URL;. O+ \! p) g2 _
  483.       }
    , I1 ]0 }) O  n2 N1 [
  484.     }
    6 L4 e8 @# Q) Z" g
  485.   }
    4 w7 q# c& w0 Z# ?2 x, h0 i* z
  486.   return true;* A) w4 O% D! n0 |) o
  487. }
    " O) \9 L" {: Y1 X! s1 X" Z
  488. % R9 a0 P! B+ V9 P
  489. #include ".\ZLib\unzip.h"
    ) T' b& r1 t( o
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);+ t8 O7 |% p  _' Q$ Z- p
  491. /////////////////////////////////////////////////////////////////////////////& e1 c# r9 w# w) t+ x
  492. // CRevAppApp initialization4 H6 z0 D5 W9 y4 Z

  493. - y6 k) ^) h$ v0 |0 Y# S% D" C
  494. BOOL CRevAppApp::InitInstance()
    & q9 O8 W6 n' S
  495. {
    , I/ }  U" S' d" Y6 p1 z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 ~6 ~4 z6 I6 o. O7 u
  497. 2 T. B( z! j& i! M; j4 y
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 r: f; o( }% f$ v2 A* `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))% r6 H4 {$ l: G) Y7 ]( C9 t
  500.   {3 ?& L4 A/ k4 \. b5 i
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! G$ }% a+ |% S% f, C7 ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);4 n0 ]( J2 G. b7 A/ z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))), d% L7 G; l& s1 _
  504.     {
    + [; B* L/ ]0 m2 }0 I3 z0 n9 n" r
  505.       strcpy(szPath,szPathTarget);
    ( ?% U  J& f# O+ I- z
  506.       SetCurrentDirectory(szPath);' q7 Q& z. K- e* ]% z$ S
  507.     }
    9 \* Z, W; @0 R* e6 a: n
  508.   }
    * {1 w' q( K2 \- ^5 Q4 b7 K
  509. #ifdef _DEBUG
    & C% |  _, @8 U) H6 g( y9 o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 R2 \  h) q' [) {6 x  m6 q" k
  511. #else
    & }1 f" K  [; Y- ]' O
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% V) r9 Z; Q7 \, g% _* s; C
  513. #endif9 E; B( r) n) w% J. T* |
  514.   {! i. ]0 H" Q. V
  515.     char tempFileName[MAX_PATH];$ N9 j' V3 q2 e/ m& \
  516.     strcpy(tempFileName,szPathSource);
    % {% H9 d. g( o7 m/ \4 q% ]' e) U
  517.     tempFileName[strlen(szPathSource)-12]=0;
    3 z0 O  M7 m2 X. L7 m8 C1 R
  518.     strcat(tempFileName,"\\$CSUpdate.exe");0 I! r# b6 L: Y; ]+ B( P+ z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 d  [* ~% e% o. y9 G8 m
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);8 K/ [  C, U8 d3 _" f' d' ~4 z
  521.     return TRUE;
    ( L9 {5 k" ]6 J: G0 p( g/ l
  522.   }$ g& r/ e& v+ s8 A% V( B
  523.   // Nuke 0118: Delete run.exe' K$ Q1 N0 ~- w
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    9 b7 r: X, [1 H* J( |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& q( g& u/ t6 k- Y& W4 G0 I5 |
  526.   if(!ReadCfgFile("Config.ini"))# z) ]  t  `6 ]0 `
  527.   {
    1 X8 c" ~+ w- @& Q+ O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 y7 X5 q/ a' d+ I2 U$ b1 Q0 Q5 @
  529.     return TRUE;3 |, C+ Z3 ^' n: X( v! `! ?
  530.   }) B% {7 X7 L$ W9 Q$ n8 i
  531.   HANDLE mutex;/ z( D9 e8 _+ D1 T
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    " q+ v" Y. n: T3 |+ y( e  \
  533.   {
    2 _8 |5 u/ ~2 r4 E% {4 W; ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& s0 U8 ?( B$ g- ~
  535.     {
    + c) N4 `! u2 ]$ B, [
  536.       CloseHandle(mutex);8 t/ y/ t! h0 B2 w1 _
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ' u3 E. A. r" y  n
  538.       return TRUE;  j) z- O8 k. A1 M
  539.     }) d# n7 E0 h% o2 k
  540.   }  ' n" q6 p9 T- v4 m  @8 q
  541.   CloseHandle(mutex);
    $ r/ s; E! ]6 e
  542. . d/ ~2 Q; A: B: ~8 o6 j" s6 H
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / X/ P9 ~# o4 ~# h7 P

  544. : S/ r* I% y2 Y
  545.         AfxEnableControlContainer();3 |# A; S, F# U" ~& p4 x
  546. $ L9 K5 n5 Z( L, l4 J
  547.   bCanUpdate=FALSE;2 Y- K# D2 V$ A- P" F7 g9 H
  548.   dwStartUpSteps=1;* ~3 ]' \* `: \4 L* B
  549.   dwProgramState=AP_NOTHING;
    - f& p/ `  U, H) P
  550. 7 P% Z- I( u+ i' d5 L7 y
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);4 Z+ L4 x1 n4 H; ~4 G/ Y
  552. % b) t) A# I& [  f
  553.         // Standard initialization4 s* l( m8 \& a4 \
  554.         // If you are not using these features and wish to reduce the size; s  }+ Z* E  _, W: y
  555.         //  of your final executable, you should remove from the following  H, F& X; J* q" J5 }& V. }
  556.         //  the specific initialization routines you do not need.$ _9 {$ K5 x. e6 z- R8 ~& z

  557. ) \* g2 f$ Y2 p8 J" @
  558. #ifdef _AFXDLL) F$ _" a& _& @6 y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; ?" m% w! _8 v7 b7 x* F- n
  560. #else
    & I& T6 H7 F" m+ F. l3 u
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ Z6 [6 J3 `; w+ w
  562. #endif) l$ T+ U( f- K, `5 S8 z
  563. 4 P' k* r, s* c" T. b# {
  564.   dlg=new CRevAppDlg;+ P# N+ S) B7 l4 o) c1 L
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! h9 P& _/ ^: l3 l/ N# s* M  k0 h
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    1 ?, g) }1 _, r0 o. S0 x
  567.   m_pMainWnd=dlg;
    , g3 p: i1 C" X! M

  568. + o1 n1 M1 Z- A4 s! G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 s6 M! z1 L9 G

  570. 6 z. E" w, p7 A4 N
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + O- S$ d8 t" s! ^! T
  572. //  ULONG_PTR gdiplusToken;
    % K4 R, c8 O! s
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, Y& Z8 l5 W" w3 s  @) \: G
  574. / N* p9 [( F; C! s; {0 \7 g2 q
  575. //        CRevAppDlg dlg;
    0 E" F2 K* X+ }; F6 S* F1 j
  576. //        int nResponse = dlg.DoModal();4 c$ L  d5 u# F% b
  577. //        if (nResponse == IDOK)
    / @9 f8 A- X5 x: z, {* p+ l
  578. //        {
    $ ~9 ~- _$ i$ T3 d+ l9 E3 o
  579. //                // TODO: Place code here to handle when the dialog is
      C9 v3 K5 U( N# A0 T' `" T
  580. //                //  dismissed with OK) O* W2 U2 b! J% y9 h
  581. //        }1 C: T1 f8 f) O" j
  582. //        else if (nResponse == IDCANCEL)+ F2 t9 U( H/ {# m
  583. //        {& G/ Z0 |6 Y1 g7 k: A$ c( W' K4 l3 ~3 Q
  584. //                // TODO: Place code here to handle when the dialog is
      l3 |: t- o( W2 c$ b0 A* i6 V
  585. //                //  dismissed with Cancel
    : r& Q7 \4 A# K( N9 N0 e' Q
  586. //        }! E" H$ E- P! q- Q
  587. / R  W: t3 M8 W8 a" C  A
  588.         // Since the dialog has been closed, return FALSE so that we exit the) L3 d4 Q, }5 k4 [- G5 }
  589.         //  application, rather than start the application's message pump.
    * q. X% o5 [& T  Z
  590.         return TRUE;
    7 ], A2 E' u' {2 |
  591. }$ J4 W; n* }$ Q2 v' H+ u

  592. ' _$ |6 z9 K, W5 K1 T
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    4 l( W4 }8 E: X1 V- o2 o
  594. {4 H5 {5 M! U' c; B! f6 b( t, w
  595.   int i;. A  B/ j* d* z+ C
  596.   char *szRet;/ |! E1 Q$ ^+ ~& C6 m5 {1 q7 p

  597. 8 `: e$ D# Q4 U2 J4 t/ f
  598.   if(pSource) { itoken=0; sztoken=pSource; }. p' @& G( O% p0 q
  599.   if(sztoken)
    $ E( D0 `! }, u7 D" @5 ]
  600.   {4 N( S$ A6 t# ^  k8 V1 p; Q2 ^( w( n+ p
  601.     szRet=&sztoken[itoken];
    ; O. I$ b) R' O1 p( \
  602.     while(sztoken[itoken])
    % ^) {4 u# K& L
  603.     {
    / f" t, n1 C) E9 ?7 r
  604.       for(i=0;i<(int)strlen(token);i++)
    . H6 ~9 Z/ Y: p2 V5 N: a
  605.       {
    3 Y- N1 q2 O0 O/ O$ h# W+ ?
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    . U: U$ e4 o" `+ @" V
  607.         {; }( r& z1 m  i$ a: L
  608.           sztoken[itoken++]=0;& \! q; \5 C3 |" a
  609.           sztoken[itoken++]=0;
    : p) o. H$ P" v5 _" g  k, E
  610.           return szRet;$ V  x: J' _7 g% ?+ {
  611.         }/ g$ c6 @0 P+ J1 ^4 p' m: t6 a* G
  612.       }
    + j4 s: R- s5 `0 l% t, a
  613.       itoken++;) @/ p- p; ]# u" X
  614.     }7 @6 E2 Y! W% N) ?6 z7 S
  615.   }9 ]5 S+ X1 T+ F- h$ o3 u
  616.   return NULL;
    & B1 `/ R/ ~) X4 u8 S8 b, p
  617. }% ^% a$ G3 T4 p- m6 k+ ^
  618. 8 J8 y' m2 |# s; }! J4 n& s, n  ^) M
  619. void ProcessProc(long Total,long Current)
    ) b' _# z% `+ q+ w% s: R
  620. {# H8 s% S& A- x* b
  621.         MSG msg;
    * I3 }1 }4 \/ X% V$ [' _9 L
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) l8 ^0 A) u/ ?/ \4 F" E( d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));( v, P" A  m/ C8 J, x# D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))# `1 M2 u+ x) Z5 }' K4 `
  625.         {
    " D6 p& a4 c  c- Y/ G" {" Z. B9 M
  626.                 if(!GetMessage(&msg,NULL,0,0))  N: \* K/ R, `# M3 b
  627.                 {
    4 T/ \+ U& K! i1 n* A
  628.                         return;$ |0 n+ q+ k6 {! L  G2 e
  629.                 }
    % J( @; C. D" J6 D) r) F
  630.                 TranslateMessage(&msg);
    $ b9 Z9 t) N/ ]- r% g0 _( Z0 d
  631.                 DispatchMessage(&msg);
    7 }  V( g" `6 `3 o0 v
  632.         }        6 V$ [. ?% \0 i
  633. }8 T3 a8 I# e- Y% J1 k$ D! I. Z
  634. 3 W, l( U' u8 A& H& |+ \& S9 `$ K& {
  635. BOOL bFirstChar=TRUE;
    ( p' H1 b5 N( g% Q) a- j* b

  636. - g0 \6 y& H7 D* S) g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)% d5 L4 t% p  o* T/ ?/ f$ B1 Y. {3 W
  638. {3 e6 F3 a8 z+ F5 _
  639.         // TODO: Add your specialized code here and/or call the base class
    - H9 |" e1 C/ k' Z1 A& G
  640.   switch(dwProgramState)7 z  a3 e# q# S; w! e
  641.   {/ z( _' ^8 K5 H
  642.   case AP_NOTHING:
    : X/ D" m. V+ O. v
  643.     switch(dwStartUpSteps)
    - m8 @) [, f% M
  644.     {& R' v5 ]+ S# I; m0 o) P% l
  645.     case 1:$ |7 j8 ?8 `7 g: |) e, B% S0 y
  646.       {. `& O- M% b8 P0 O+ p
  647.         int i;/ q8 L$ z0 u6 Z
  648.         CDC *pCDC=dlg->GetDC();( p+ W% H+ V5 v# q
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; v( O, q, Q7 O; `, N) }3 @
  650. //        Graphics graphics(hdcwnd);
    $ D2 C+ @- F) b- v2 `6 }
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    4 g+ y9 v: |" ]" I- z6 K1 r
  652. //        INT iWidth=bitmap.GetWidth();9 M& |: T6 P# @" u& _8 t: w: \
  653. //        INT iHeight=bitmap.GetHeight();
    8 `- f# w* Q' g) K
  654. //        Color color,colorTemp;
    4 F! O% _8 Q2 T
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & T+ |7 b2 a; ^' {, z/ C1 [: s% v
  656. //        {, V+ O' C; R, z; A* r
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). b; u6 Y! A# V. {8 ^+ M
  658. //          {
    2 C& h5 r, Y0 z" l
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , q8 T: l  p) J: R1 z
  660. //            colorTemp.SetValue(color.MakeARGB(+ a+ P) G3 }, O1 F* q* m
  661. //              (BYTE)(255*iColumn/iWidth),
    8 H: M) b% c4 y! _6 U
  662. //              color.GetRed(),
    7 [- `+ f* j: d6 \9 b1 h
  663. //              color.GetGreen(),, c) T4 r: k( E/ I- Y
  664. //              color.GetBlue()));
    % O8 x% b4 |, Y+ C$ b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    + W- F' r" }* X$ T6 A
  666. //          }
    : l( ~2 n* q1 h0 T* q  q
  667. //        }5 j" t2 d7 F5 c' I0 x. w( p$ b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 r3 _3 T4 [% y, k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");8 x1 ~" h; |- H0 ~3 K
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    * O# t3 M: W7 G' _
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ l$ r; m: Z. `  _- `
  672.         for(i=0;i<240;i+=8)7 y: O  I$ V6 ^: l! @) D
  673.         {
    * X# G- t! _2 |1 K0 G7 ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; n; Z" b- C1 `) X. z7 L
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: P( F+ e; E6 [- @3 `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ g( v' v! b. \- Q+ C% v* I
  677.           Sleep(33);2 k6 N3 \) g- O" T
  678.         }% w$ ^6 `- ?% D- R6 U
  679.         Sleep(1000);+ ~- C3 m$ R7 }% m
  680.         for(i=240;i>0;i-=8)
    0 A% c6 f, l! V
  681.         {
    ! u& F3 g9 B3 T' c
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 ~3 F& d4 h" p
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , Z2 f8 h  ?* ]: ?9 n) c, t8 o3 H
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" V# Q% z8 l. b, X; w6 M1 w) D/ |
  685.           Sleep(33);
    4 p$ ~5 h9 M1 o% I
  686.         }) p2 I  E, }2 n$ f7 r2 v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! ^0 o% d" j) T1 g
  688.         dlg->ReleaseDC(pCDC);
    " T- E! ]5 B' K; f) i/ i
  689.         DeleteDC(hdctar);
    - l7 \) o6 V7 u5 g! o1 V8 U
  690.         DeleteDC(hdcsrc);6 V% k+ |8 d* [$ q
  691.         DeleteDC(hdcorg);7 w" W" B8 c, Q6 I- j4 l, E$ d
  692.       }8 I, i+ j0 E& {6 k0 U9 I+ ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 t" Q) e* Q6 D  m. @$ x2 ~) K
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ( y7 k* ], v+ }1 \6 k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & j+ x: I. D; ]( k. ]+ f# ]
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + J. Y6 |4 |% p9 _1 e. |; A5 j
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( T0 |; a% s: A( X+ ]1 C' A
  698.       if(!Dn.Connected())
    + s' j4 t- f4 N$ @) d
  699.       {3 T8 A  x4 f0 H/ a) H9 E' `
  700.         dwTotalFiles=1;
    2 n( v+ l7 U1 @0 @2 T( J: S: u
  701.         dwDownLoaded=0;
    ; Y9 }5 U3 H& n0 q
  702.         bSilentStep=TRUE;
    $ F4 c4 H: @1 U
  703.         bCompressed=FALSE;" d% T% i, e4 @* n7 D* D
  704.         strExtLocal.Empty();
    3 |- K" n$ r' i. |( F* q* m
  705.         strFullName="readme.txt";
    ! d' h, s2 H( q" G, W
  706.         dwProgramState=AP_CONNECT;
    ; Z5 I, w( {- |. H# b% f
  707.       }2 }1 u' o. m# x, j8 a% U$ [. X4 |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; X9 q; H' r8 q
  709.       dwStartUpSteps=2;
    5 R3 f) v; ~1 K2 G4 q- p
  710.       break;
    5 S+ Q* C1 E  o9 i; t: U
  711.     case 2:
    - T5 b9 {+ g  ?1 q, Y" Z7 U: a8 H
  712.       {
    ' \" c; d2 \! ?
  713.         int iEOF;
    8 |& T- W( V) b5 v( T, ?7 z
  714.         FILE *fp;
    & Y8 t. G1 w7 g$ ^4 ?# [
  715.         char szString[512];+ x6 @# V& d! Q* R* @' G" `
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    - K6 Q' D5 ?4 \& g
  717.         if(fp)
    + M4 U% u/ ^* q! i* J
  718.         {
    2 |; E% ^! x5 a& p5 u4 g$ B
  719.           do
    , M/ R. y. }! n8 g: R; v5 E
  720.           {
      e2 o* M4 [- s
  721.             iEOF=fscanf(fp,"%s",szString);& z0 o9 _2 w* t1 |
  722.             if(strlen(szString))
    5 |$ z- D( g* U( @
  723.             {) f7 i7 J; N) \, `& F3 |5 X1 q
  724.               if(bFirstChar)
    0 D; X& n& u3 q- @( ^6 h2 B% L
  725.               {
    + ~2 ~& C- y( m
  726.                 bFirstChar=FALSE;
    # {, z, p3 M; p& {& r
  727.                 bConnectIsBig5=FALSE;* T# _! B4 M& q( `1 r, p9 e$ }: z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ J( j" b' ]! ~% l( P
  729.               }
    : T& _. f3 u# g7 E/ B8 E+ g+ j  w
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));" o' G8 w% P$ C$ }
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));- C9 T' l8 R. Q
  732.               dlg->m_ListText.AddString(szString);5 Q4 q3 Z6 M8 w! K, c! E8 E, `
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , m3 k+ f0 `4 R6 J& @5 o$ r; q
  734.               *szString=0;5 [0 p9 K) J' L
  735.             }
    * Z$ {8 e) b3 v+ M* t
  736.           } while(iEOF!=EOF);
    8 O: P6 h2 E0 b. T9 n/ H
  737.           fclose(fp);( {, r8 w, ?- f$ z4 l
  738.           unlink(".\\DownLoad\\readme.txt");- p6 y7 V. }7 S' z- Q: o) H
  739.           dwStartUpSteps=3;
    0 \7 @2 V9 Z7 ?5 M' p: ~7 I( }  ]
  740.         }, M4 x" y4 e! M% E! o0 S
  741.       }
    , Q# l( i  d7 B' A
  742.       break;
    - L+ I' Z" O# ^/ r( n2 n4 V2 ?
  743.     case 3:: B" r4 Q9 C* H# L2 J
  744.       if(!Dn.Connected())* H+ T" `! l" H$ [6 F3 s$ t3 o
  745.       {* {: r) n( s, l6 A1 V% Y. W$ O! R
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - L5 R" {: _1 c
  747.         dwTotalFiles=1;
    0 |( h9 v  b+ h, |) n& R
  748.         dwDownLoaded=0;3 `# w. q% l! \0 \9 b
  749.         bSilentStep=TRUE;
    # n  U4 a+ N" _8 J0 ]
  750.         bCompressed=FALSE;
    4 C- J. p$ z  {% G: ?, j5 @
  751.         strExtLocal.Empty();
    / k, J7 g% x. c/ ?$ p1 i
  752.         strFullName="checkversion.txt";
    " R8 b8 q, K& W% s7 r& D; j
  753.         dwProgramState=AP_CONNECT;
    3 h/ Y, v/ v- J1 y
  754.       }
    ! I' n. T, v! e) R/ |. Q+ U
  755.       dwStartUpSteps=4;- h0 k( L7 M) B/ R9 E
  756.       break;
    9 V' H: l3 I  }6 I  Z7 s
  757.     case 4:% s: [* ~" v" f" R% ?
  758.       {
    0 P9 T+ w1 M; @6 p: w' i8 Q6 D
  759.         FILE *fp;9 x5 f% X& l. q( |$ H" \" p$ Q
  760.         char szString1[128];& c/ A$ ]* K! M8 a& ~! Q
  761.         char szString2[128];
    4 ^- {( l& S7 N  ^' H$ |
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! G0 i9 P9 p5 b6 E
  763.         if(fp)
    8 o* b& |: L# W. i- x! ]# m5 n
  764.         {# Q6 z) M, [+ ?* [) z8 l' x( L
  765.           fscanf(fp,"%s",szString1);
    . |! n0 \6 T2 o2 @. n
  766.           fclose(fp);* V9 m9 ]4 G# b4 R
  767.           fCheckVersion=atof(szString1);
    3 z# P$ P1 h/ c% @( B4 y; l/ m) U3 g
  768.           fp=fopen(".\\checkversion.dat","r");9 O- l: V8 ~3 b/ d* \. W9 v2 ~
  769.           if(fp)* \3 B& B6 n. E# }: q6 Q7 i2 Q9 X
  770.           {1 U& k) D3 F! Q7 d" P+ T- ~
  771.             fscanf(fp,"%s",szString2);, p- z" X/ j( T' b3 P/ K6 L7 @3 P# y
  772.             fclose(fp);# [' Y/ q: D/ ?7 s# z
  773.             if(atof(szString1)!=atof(szString2))9 s1 R( D( F8 W8 U& P1 a4 ^
  774.             {
    & ]- ^- P4 D/ X/ V% N. y
  775.               if(!Dn.Connected()), G% b* |# P' H* |
  776.               {
    + P" A5 o- C. R; `! L; g
  777.                 bFirstUpdate=TRUE;
    ; j" b# Y" b# ^$ T+ `5 a$ l* F
  778.                 dwTotalFiles=1;# Q5 @3 z* G2 `
  779.                 dwDownLoaded=0;3 V! X7 O, [$ J5 U2 S" F0 S
  780.                 bSilentStep=FALSE;
    5 o2 ]% x, c# d3 `$ B) [2 u& E
  781.                 bCompressed=TRUE;$ R" J* r: N0 ?& `/ k
  782.                 strExtLocal=".\\DownLoad\";
    2 O( p# c& T, q* J8 y
  783.                 strFullName="update.txt";8 @. {! `5 m# J0 n4 J
  784.                 dwProgramState=AP_CONNECT;/ t( I+ B& B* c# ^) F: _1 a
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 r# r  m6 K+ T7 `/ s, _7 A4 k5 i) {
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 Y6 {: X9 |( h9 ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # p/ u) q0 e, m% d) u& K

  788. 6 o% {7 s4 N" c3 f+ y* y2 _2 ]
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ?/ a+ w! m8 V9 n6 m+ j, w
  790.                 unlink(".\\DownLoad\\checkversion.txt");* `" S/ w" V- P7 P* ?, @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / Z# y  r9 ]0 ]3 r
  792.                 {  j- \6 f6 Y) S# m8 M3 B
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");+ ]3 W, b% Z7 N+ `2 U4 s" j
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    " K9 x& c2 j7 l, K8 K
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( ]; ]: T  C' Q$ A( `; K
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- P" [% H. K: c3 y# L6 ^7 V9 q5 s

  797. 7 Z' `) }# u" |9 z5 p
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 p) M; {6 k. T$ _
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! Z: f% c( h% h7 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! R9 B- Z. t9 `3 n; T" q- V9 h
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 K! h, n  v. N3 t
  802.                 }. c% u. h/ Z. @0 f+ B$ L" R
  803.                 dwStartUpSteps=5;* w) d' _. K4 J# d
  804.               }
      J5 H- A" P9 z% e! l: k/ y% f0 p
  805.             }$ E) f4 u4 @. x. u0 v: J
  806.             else- I9 _7 O0 Z: `; S" @1 U
  807.             {$ B  w" ?! `- {
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " Z# z! o& f& X
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");: ^$ \$ p2 y0 X' c" a3 @- e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' K0 B  S: [9 E* U+ Z% n- \6 }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % ]3 D! X  b3 Z+ I7 C

  812. : Q; T0 p' Y+ b, \. x1 c( d3 y
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, h7 q& ^# h. U0 Y$ P
  814.               dwStartUpSteps=99;5 o8 y* n: k* X# X2 R
  815.               bFinishUpdated=TRUE;7 |" Z* K) k& X
  816.               bCanUpdate=TRUE;- w& ^1 b# l& Z1 y% A
  817.             }
    - p( S( p( T6 ?7 w: H, Q9 g0 n2 g( L
  818.           }
    + y$ X" ^4 }* k- t" N
  819.           else. ]! ?8 B* _8 W7 ]7 u
  820.           {
    7 _0 [- \" W  B/ ?: D1 d1 d
  821.             if(!Dn.Connected())
    2 H' r  I6 e6 q" M, Z! A
  822.             {/ G  f) ^& `; |7 [. W2 N
  823.               bFirstUpdate=TRUE;
    8 h. m; A* I0 c; B! |- ]2 D
  824.               dwTotalFiles=1;
    - N9 ]7 J: s7 |+ [6 t
  825.               dwDownLoaded=0;
    & Q+ j9 ^1 h- s
  826.               bSilentStep=FALSE;
    0 k' s0 A0 q( i8 @' t5 b# a( Z
  827.               bCompressed=TRUE;
    * d8 T5 h, M' w( h2 O/ R
  828.               strExtLocal=".\\DownLoad\";+ i) t! x6 E7 Y* J- s
  829.               strFullName="update.txt";& z. O) D% {* `- [/ P6 U: V0 F# n% L
  830.               dwProgramState=AP_CONNECT;) U( E) Z7 j) w8 @" k" @* q& L
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 K, [( ]- h) {
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % Z+ F" S: S. {. @1 H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");' l, [* ^$ L, \1 |0 h" O" I
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 O" B% h/ f$ w
  835.               unlink(".\\DownLoad\\checkversion.txt");" O# j9 B) }5 b# [( b
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : r& M* A3 i( [) F& G& n
  837.               {
    6 Y. f2 q' i1 x% v+ b
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ z9 M( b# s& t# d. R4 _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");1 A1 X1 ~, l) f9 U* @. V' ?
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");- [0 a0 P5 J. }& s  D9 b8 x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 s4 |# M. V7 L( V1 k
  842.                 , X. |% x% t2 B0 U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & [; j$ Y+ v3 C! \+ @2 h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' L! Q& m* w& i$ ^! K9 {2 c
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");7 e. T. K- d5 H
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) I/ \6 h3 e; P- U8 b/ B0 |  O
  847.               }
    / v* b/ o3 o: i8 L% r8 V& c; H% q
  848.               dwStartUpSteps=5;
    ! j+ P6 G0 a$ A$ b* C/ ^2 e, Z" U
  849.             }
    % o' y: C, c7 \- I
  850.           }- L; y6 a" c. L) k
  851.         }% z4 o. N# J8 U" d, u% p3 O/ |. H
  852.         else
    " F( g1 V8 g6 f) |
  853.         {
    * Y( `7 M0 \8 c2 K  X  y
  854.           dwStartUpSteps=3;
    ) O4 x2 m6 ~4 g" F2 O% f& b
  855.         }
    + J4 |6 a& _, s2 |3 ~
  856.       }
    1 n6 q3 d8 [# w# l+ ^
  857.       break;
      H* T; [- N( ?% F  h0 I
  858.     case 5:1 G: L) g* p) Y2 |  q# X
  859.       {
    # M7 ~8 q4 V: r* C# g2 z* I& u0 t
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)  v: J7 ^1 f0 x9 B' y9 O7 _
  861.         {
    2 K6 t; ~' V% Y& \, h
  862.           int opt_overwrite=1;
    + Z. t$ w3 x( k) u  }: b4 B# A( d
  863.           int opt_do_extract_withoutpath=0;
    0 d" C9 Q0 ~3 s( R* Y( H
  864.           unzFile uf=NULL;" k2 s; I; u, u( k& M

  865. : k2 z: V' ?1 \: Z
  866.           uf=unzOpen("Wsa.zip");! ]7 f+ I/ R3 g* q3 ]( `
  867.           if(uf)
    3 Z& k1 {& p: l$ L
  868.           {, `( e; I6 ?& O% L& Y8 _* p7 F& Y* B
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    2 ?2 ?) f$ a* B4 {+ p. C% u5 E
  870.             unzClose(uf);
    9 ^3 x6 ~. w- y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* }! C9 a9 S5 x* L: c7 a$ Z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ! `8 ?. k2 M, y: r1 n: E9 X& \2 T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    1 N( n$ F, F) ]# ^0 ]
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 O. U/ c7 A  y
  875.           }2 \( C- L0 G: a" \/ o
  876.           DeleteFile("Wsa.zip" );- x- ~3 G: }1 \8 Y) O
  877.         }
    . o7 l( p% |6 q5 ^- F
  878. & b: P. J7 Z" J
  879.         if(CheckLocalVersion())/ L% q8 g+ ~' K
  880.         {
    ( t! L- v- B5 f, h
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    4 ?: t. O5 B4 k4 `9 m. r
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / q# [% T" V9 q7 P5 k/ i5 I6 U
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    4 D* K# M1 h$ H
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . ?7 _: s( B. F  P/ E* F
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& Z# J0 F0 }8 L; r, p
  886.           dwStartUpSteps=99;+ P/ [/ N$ O/ K0 _7 @3 J* q
  887.         }, L* `- I+ A# b" `4 |9 u
  888.         else
    , c, V+ m/ Q2 Y1 z0 v
  889.         {3 f1 R0 _8 ]( c$ Z
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 d1 c3 d/ k  H6 l. ?0 L
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! y. _: X5 k0 ?+ w4 c9 k: `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    : G% c& ?8 ~7 P5 }3 Q

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

  H) @5 B5 i5 t' P9 f$ a" d

評分

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