CSUpdate.exe源代码

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

2 Y% @: I- E, M
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 ^% l) x* Z3 J8 J2 V
  2. //
    7 z; f: }5 r1 h" m( A

  3. 3 p) i5 d) S+ X
  4. #include "stdafx.h"
    ( [. N# N2 q4 s% g3 q5 Q

  5. / m5 N& k. l: A1 D$ f/ K. }& p8 p
  6. //#define UNICODE
    * B5 C$ p5 n; o( o* ?: u" y$ v  U
  7. //#include <gdiplus.h>4 i4 K9 P) Z3 U" P& T! d/ Q
  8. //using namespace Gdiplus;. [. D1 J7 F& X% d6 Z* c$ D

  9. : M' o- q/ s% j# ]
  10. #include "RevApp.h"+ Q$ \  C; }8 j# ?- z6 _/ K9 U) x
  11. #include "RevAppDlg.h"
    1 C) K9 {- `8 }7 D

  12. * J  a/ x5 s- ^- D! S+ `. u( j8 V
  13. #pragma warning(disable:4786)" @& Y' [' P  H
  14. #include <map>7 f# s+ R$ t& q" W0 X
  15. #include <list>7 d# F& o; {( @% V. @
  16. #include <direct.h>7 d! v3 ~1 e* E
  17. 7 L7 d0 l6 q. d7 N( o' J
  18. #ifdef _DEBUG! h% l. k& R& W2 `
  19. #define new DEBUG_NEW, h2 w& R8 D5 k0 _9 p+ O
  20. #undef THIS_FILE1 w1 U# r7 N0 c' G, T
  21. static char THIS_FILE[] = __FILE__;
    & y( Z3 w5 D. C3 F
  22. #endif
    % w) V0 p6 w+ E
  23. #include "SkinResDef.h"% D+ \- }; }! M& z1 D2 c" o* @
  24. #include "ChangeBG.h"
    + h  y0 g: V+ X5 p/ F% A
  25. #include "AFXINET.H"4 U! b: n4 u; @6 a
  26. ( ?5 K4 a  q8 \4 c( }
  27. #define TRADITIONAL_CHINESE 0
    1 i# \3 x; d, [7 g* S1 I) n) x; |
  28. #define SIMPLIFY_CHINESE 1
    9 c/ R6 u9 x4 q2 g1 C
  29. #define ENGLISH 2
    & }1 E0 ^6 c9 v* y6 A/ B9 V% U" d
  30. int m_iLanguage = ENGLISH;7 f; G! i8 s1 N, S& |( Z9 i! E
  31. /////////////////////////////////////////////////////////////////////////////, H" n3 u" O) z* f
  32. // CRevAppApp
    9 {3 o/ y/ l* P5 _

  33. ' k2 v* M* U; D4 {3 W/ Z* P( T
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)* T# H+ u6 a. g5 Y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    $ @$ V  m2 B% x. ^( N& U- K  F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    0 `) W% `! r! `
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    & W& R5 B8 N7 l
  38.         //}}AFX_MSG2 X% w8 M# [4 X9 {0 N$ i0 w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)/ [  j' p/ P* Y
  40. END_MESSAGE_MAP()4 i5 Y. `$ \3 s

  41. 8 I8 Z# z8 w' P) b  s$ y5 ~' N! t6 o
  42. /////////////////////////////////////////////////////////////////////////////
    ! C1 h! O8 N. D/ J0 n
  43. // CRevAppApp construction7 Y! W1 W1 u  R3 [5 `* o

  44. % d) z+ y- t# W. P
  45. CRevAppApp::CRevAppApp()4 X8 d! k8 |+ j, e6 B" Z5 O
  46. {
    + o+ W, M" f+ a2 Z' s# S( \
  47.         // TODO: add construction code here,
      U8 o' S, R, S9 |. T! |3 i6 _- b
  48.         // Place all significant initialization in InitInstance  c# @& g9 f1 V! H2 R4 w
  49.   bDisplayIsBig5=FALSE;. |2 h& T2 {* |& Y+ c! g/ g
  50.   bRestartUpdater=FALSE;
    * E) Q+ \+ X2 u( W9 P
  51.   bFinishUpdated=FALSE;
    4 \  j& k( L5 i, Q3 a
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. _) D( Q+ @  A" x% s
  53.   InitChangeDataBig52GBKS();3 E( ]" k. v; j. k
  54.   InitChangeDataGBKS2Big5();8 L  ], G, _: e7 F) ^# z
  55.         //
    5 T! _4 E; E0 m' J" O7 E6 M# \
  56.         bClickRunExe = FALSE;  O% n; k+ W8 `$ `% Q7 ~4 m# C$ a
  57.         //
    5 o6 O$ R! \  M
  58. }! m' \! p9 {8 t* L  u# G

  59. & q4 p0 m# |6 o, `+ _
  60. CRevAppApp::~CRevAppApp()
    ( N/ V  N4 b2 C* h. r6 U, f# e
  61. {
    / n2 q2 j7 u+ @4 H3 [
  62.         // TODO: add construction code here," M- r8 P% p7 }# C3 D- V( b3 z
  63.         // Place all significant initialization in InitInstance' u5 H9 Z+ z+ s; L2 v6 Z' j
  64.   EndChangeData();+ \3 ^4 k5 {" o9 z
  65. }
    2 {. ~; k8 Y6 I/ @
  66. ! I3 f) Z8 o3 X( T
  67. /////////////////////////////////////////////////////////////////////////////& C' I& {* B; [0 w) u, D
  68. // The one and only CRevAppApp object2 B  n& J5 H: f0 `" Q
  69. 2 ^+ F7 o' Q+ o. o; A
  70. CRevAppApp theApp;
    " B* W- h8 P9 i2 T6 q# e; ^
  71. 1 _$ y; A3 D* a* s- h
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName); h  {; K1 e4 k  v1 T1 ^/ a
  73. {
    2 b% p3 y. l1 m! F& E
  74.   int iEOF=0;
    1 z% h5 B$ o6 d
  75.   char szTempName[MAX_PATH];
    6 `& c; H" w: a. Q7 y7 G
  76.   *szFileName=0;& b7 p7 |' Q& v" m
  77.   iEOF=fscanf(fp,"%s",szTempName);8 G) V; q5 [; _1 q: V# s( ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( F! ^( Q" b8 X$ c$ D+ z0 j
  79.   {
    9 |2 T, M& p" ?* i7 W5 N0 U* R
  80.     strcpy(szFileName,&szTempName[1]);7 t! X- Z: I6 t( ^
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)  \( r( P8 Q3 _$ H, o7 K  n3 W
  82.     {+ {, G- a7 N( B7 A- T
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , G( _: R8 G" c; C+ F
  84.       strcat(szFileName," ");
    7 w, `- |  _" f( R8 e, {2 l
  85.       strcat(szFileName,szTempName);/ Y6 k) F( l9 I. ]2 \. Y+ w
  86.     }  A! c/ m, n$ _* N
  87.     if(strlen(szFileName)>=1)% b/ m. t2 A; y# O+ s" W
  88.     {
    9 S" l( q, f" E. y
  89.       szFileName[strlen(szFileName)-1]=0;( ^* d: s, s# M/ r9 K  N8 ]" ~
  90.     }
    & T8 l+ C- Q) E) W
  91.   }+ [# B+ X3 D4 Y! I( G
  92.   return szFileName;8 N4 s- Q1 ^6 Z8 ?; z* ^! Y3 i6 l
  93. }
    $ j7 ~" x8 R+ K, N

  94. : L) g7 q) O# M# r
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), }3 a0 P0 ?. U2 p8 y! b" w
  96. {" G4 w# P- D4 d; }% n6 `" P% b* A
  97.   FILE *fp;  b- \+ F4 h1 W' P
  98.   char *key=NULL;
    3 l4 g. ]; U" o
  99.   char version[MAX_PATH];) J( T) L' O8 [$ L2 ~: L, N6 O" Y
  100.   LPUPDATEFILE file,olds;
    $ J' E5 z3 W& [. @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;$ X& l! w/ a" ^9 a7 g5 L6 M
  102. 5 {* g: X  v7 L
  103.   UpdateList.clear();
    ! m& w1 q$ D% z6 f: F7 T7 T
  104.   UpdateFile.clear();+ O3 r2 t  z/ z1 |1 U- |6 g  j7 H
  105.   if(GetFileAttributes(filename)==-1) return false;
    ( a4 f* T3 y& f
  106.   if(!(fp=fopen(filename,"r"))) return false;- T) W. {. i( W: ?  j$ u
  107.   fscanf(fp,"%s",version);
    + m5 |6 C' z' f) K
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }' v- _7 L0 a$ @% I  C7 M5 [
  109.   while(fscanf(fp,"%s",version)!=EOF)) C  ]2 E( w3 l' R3 X& {
  110.   {. d# V) p( }2 Y4 ~- y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 ]' F1 K5 H. \4 A5 r. f
  112.     fscanf(fp,"%s",file->path);9 `+ V6 h5 e3 }; V& g
  113.     ReadFileNames(fp,file->file);
    ; q8 R  p4 ?. ~% c1 I3 J
  114.     strcpy(file->full,".");
    ) _3 u) Y, f6 E# E" r, O7 U
  115.     strcat(file->full,file->path);
    7 j, C* d9 z; x3 V! @' v
  116.     strcat(file->full,file->file);
    ; O" I, r0 ?9 r! Y4 H
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & P% P& Y) W" p8 Y: h- c1 |( D# S
  118.     {# u4 |( z/ Q. V! Y" j/ ?- K- m; b
  119.       file->vers=(float)atof(version);
    1 E; L5 W' }* A1 J) N6 ?
  120.       UpdateList.push_back(file->full);
    + u: F' U' ~- M# ?1 J
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));) J, R0 h$ y& |7 E2 d+ [
  122.     }
    * x. j8 m) u# S2 x7 @% M, E
  123.     else/ u  b2 L  q& P3 C+ d
  124.     {
    ' A; c: J0 g9 q  v
  125.       olds=(*p).second;- t0 e$ T) S/ i9 v6 a' O* H
  126.       if(olds->vers<(float)atof(version))
    " Y$ i* p# [  m: d8 y- n/ ~$ q
  127.       {
    2 G4 U8 x- p/ X6 x) s
  128.         olds->vers=(float)atof(version);" Y; t5 I3 a; y" @
  129.       }
    4 Z8 f0 I5 y$ E8 |5 X+ H( f) N
  130.       free(file);
    - o2 P. S6 A$ f' |5 L( ?( l7 i
  131.     }2 e1 w) f4 R/ j2 u; Q, H
  132.   }0 e8 F/ B7 F5 b, X/ B
  133.   fclose(fp);
    ! T! Y$ S/ `, T4 Y
  134.   return true;" }# U5 P( `) W9 \& c
  135. }
    & K2 F9 Y  G& w1 X" W) m6 @
  136. & g! _4 c" a6 P1 T
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ) Q- j) X# g4 I
  138. {, F" M1 G4 T/ l
  139.   TCHAR  szFull[MAX_PATH];
    " \3 B+ N. P# M$ _
  140.   TCHAR *token,*inter;
    - X, q5 X0 @! C4 ~7 ^+ z% \- b$ [3 C& r
  141.   *szPath=0;
    5 N. `' B4 N3 Y8 D2 P* T% |  r
  142.   strcpy(szFull,szFullPath);
    % k' p# d, N1 `' K2 l1 C9 _
  143.   token=strtok(szFull,"\\/");( f0 N& T# O+ c+ }
  144.   inter=token;
    $ {5 w$ B" e% S
  145.   while(token=strtok(NULL,"\\/"))! h# u. M' A$ V0 }9 S/ T0 H
  146.   {
    $ R. {' {" W8 g; _4 N7 H; ?* \
  147.     strcat(szPath,inter);" X  j9 o( R! _5 T
  148.     strcat(szPath,"\");
    " d6 ?0 R3 a: u  ]) d5 _1 p! r
  149.     inter=token;
    - t4 W* m1 ~+ }4 R
  150.   }
    # x# C" q2 R6 H; @0 I
  151.   return strlen(szPath);$ x* v8 U3 U0 a- W, }5 ~
  152. }; F$ d! A5 q& }  H  C% l
  153. ; Q$ k. j( M3 l7 H6 F. B3 O$ X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase), H& _& M/ Z# G: N, ^
  155. {
    ) {: z: l5 |$ i) m
  156.   DWORD attrib=GetFileAttributes(Target);0 l6 p* [* e1 N, z0 S. N; ?/ |
  157.   if(attrib!=-1)& n9 {# H! `/ M+ O# ?1 i( E
  158.   {- r% i6 I  o/ K! [" ]! _) d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    9 ^& C# g% c2 f2 i5 O& c
  160.     {. L* J+ b$ F9 K& K& @' p) ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    4 a+ Z: C* H/ L( n. l! C
  162.       SetFileAttributes(Target,attrib);. C5 z; H- U( ?" J5 t& u: k1 ~7 K
  163.     }
    9 p" v2 E) X8 G6 g. }9 l( @
  164.   }2 `' m3 y+ q5 B" a0 z$ N
  165.   CopyFile(Source,Target,Erase);3 J! o% o* o' u
  166. }
    3 i/ {" [  _3 S* ~' D. }
  167. ) T4 D6 ?* b4 e! T" _
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; D9 r4 O; q" b( j5 e) m" V
  169. {0 H5 D7 ^1 Y, y  X3 m
  170.      FILE *fp;1 O6 F  q3 G1 d$ K( i5 D9 u, @1 c. ]
  171.      char  szBuffer[8192];6 g1 Q. p4 \) D8 }  J7 ]& h
  172.   va_list  argptr;
    7 G  q, [2 |) \+ I2 n! O1 J& g( \) e

  173. " Y# W$ ?5 `9 X- Q9 ?
  174.         va_start(argptr,message);
    + z% N' ~- @, ?8 N0 E8 N
  175.         vsprintf(szBuffer,message,argptr);
      |& z! V4 E* E* h9 w$ P
  176.         va_end(argptr);
    6 z0 i! R' q3 J' a/ [  z
  177.   fp=fopen(FileName,"a");+ P8 x/ _+ U% S$ x' V0 H
  178.   if(fp)
    ) @3 z' `) E! n
  179.   {! e! D3 i$ c  f$ W4 v0 n! d. _
  180.     fprintf(fp,szBuffer);
    ' p- m1 f" y% `  O& y, u
  181.     fclose(fp);
    , x, a: P4 b! ?1 w; U
  182.           _flushall();# K  w% H- O! W* Y
  183.   }6 A0 l5 _2 W  G5 F$ p' d" r& E& h
  184. }' w, k* r4 t* q2 w4 w& s$ M2 |

  185. , l/ r2 d& X2 q
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 T3 B6 h0 p$ J6 Y) x' P6 `2 j
  187. {
    ' u' ~' l. W0 G6 f4 z& c1 f
  188.      FILE *fp;! c! m5 b" \" R5 Q. h  b, W( D
  189.     DWORD  attrib;3 `# f7 L4 n! t0 b) u( ?6 ]: Z# c
  190.   attrib=GetFileAttributes(FileName);9 i- e1 u6 w* ?
  191.   if(attrib!=-1)
    . a$ f" O* @5 q/ z  J: [
  192.   {( P( w  P+ H' B* w
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);% B( `& m+ Q8 ?5 j- T/ k4 V
  194.     if(!SetFileAttributes(FileName,attrib))5 P2 Y# x4 v* K" _, U
  195.     {2 O* Y* p3 N0 c' L8 j/ _
  196.       return FALSE;
    3 ?' O5 q2 g+ [" |8 X" C3 g* Q9 o
  197.     }
    - k5 a* b# c5 ]
  198.   }
    6 u% \, {/ j0 {# G) o2 M' w
  199.   fp=fopen(FileName,"wb");9 g+ J: E2 T& O: S0 I6 H
  200.   if(fp)" \' H0 V2 T* s+ h' o& j+ I( L! U
  201.   {
    ) B0 ~& @* ?& S- S+ R( J
  202.     fclose(fp);, \  l% K) M) r# |; g* ?
  203.   }8 c2 r; P+ L7 a% y
  204.   return TRUE;
    & P. h1 T$ K2 Q
  205. }
    # S% m# g7 |$ w4 l: {, }

  206. ' p3 |1 }: m. c! K4 ^3 f5 ]3 p
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 i7 P1 j$ e! l) g
  208. {# R7 d; `6 q4 L3 G6 G5 T" J* I" J
  209.   char filename[MAX_PATH];! P3 y5 v% F# E
  210.   LPUPDATEFILE file,olds;! D% u3 @4 \2 {
  211.   std::map<int,CString>::iterator i;
    , S  {1 k) ^3 G: L
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 G3 U7 ]& J+ Y+ |8 K8 X
  213.   std::list<CString>::iterator l;1 _8 |" `5 }0 s& x! u0 c# B" y

  214. # O* U( k5 V  J/ H
  215.   if(bFirstUpdate)
    8 k' {5 ^* r7 G. `  @
  216.   {" k+ _: A  S8 e" V- I' Q+ J
  217.     dwCurrFile=0;
    3 q; e' y. v: k% T% _8 c
  218.     bFirstUpdate=FALSE;; G& t- a+ @9 y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ; F3 A  |1 N6 s8 k4 c2 g
  220.     {
    8 x+ c* k' ]1 T( U2 B, k' Q' Q9 Q
  221.       dwTotalFiles=UpdateLocal.size();/ T" C- L& A, |
  222.       dwDownLoaded=0;9 r- g9 {  V, F- A
  223.       bSilentStep=FALSE;
    % K# D# L' s6 O
  224.       bCompressed=TRUE;% y+ w: Z( K: y6 Y& p+ K
  225.       strExtLocal.Empty();
    5 [/ X& M: P$ @1 m8 A- P( O! ?
  226.       strFullName=(*i).second;+ {& E" I& ?1 {! k# _
  227.       dwProgramState=AP_CONNECT;
    & K, h: y. p; P7 D( q6 u
  228.       return TRUE;7 ]+ j( n- |0 i3 c0 O7 g4 \4 L  m
  229.     }
    3 f# m5 t- M9 W, A) b; z
  230.   }. i& f; B6 m7 o4 Y
  231.   else if(bRestartUpdater==FALSE)
    ! _3 n1 C! {, q  H; c9 @
  232.   {9 j' `, c, q2 Z" e
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 X$ r: [; F% g- i
  234.     {
    / _6 z5 ~5 F% ~% U
  235.       file=(*p).second;
    : x# j6 r7 T, [" Z; T0 F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): k1 J* j2 \% k' R
  237.       {
    ! w4 f/ T$ p3 @6 z4 c+ c$ l
  238.         olds=(*p).second;) E1 M! Z( y, J! E, a$ w2 j
  239.         olds->vers=file->vers;6 m, t' H. m" F7 |
  240.       }
    : m  a( e4 G4 v
  241.       else9 ]& ^# T6 T, U1 t
  242.       {
    ; w: L) M# j% l) {4 D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " v& ^9 ?, j) ?
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 }1 F) j- W" S) z
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! B: I5 p0 C; V( f1 ^& X  A
  246.       }
    " {6 R/ X) Z4 j1 \7 I6 u3 B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");5 K+ b& a! @, n& }* f  R4 m6 c+ w1 V  U
  248.       sprintf(filename,"(%s)",file->file);1 d" c" _& f. o7 L
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 ~0 L6 F& \5 o5 ]0 J2 T4 e
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }% }4 D& f% c: P0 D% p% }0 I
  251.     }
    8 y- r8 g7 @% F. y' H5 f
  252.     dwCurrFile++;
    4 D* E# _; z+ U& W! F& Y
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + v% g7 m5 y/ C+ R, b( F
  254.     {
    : X6 z+ N0 I1 C0 X; [3 S
  255.       bSilentStep=FALSE;) t% [' \9 D$ Y) I3 S' ]; G' |. `9 _6 _
  256.       bCompressed=TRUE;3 N, w" a4 q" @6 I$ @6 }
  257.       strExtLocal.Empty();
    : l7 Y9 B% t: |6 T* v# q  f
  258.       strFullName=(*i).second;
      Q. [! Z1 J& c+ b  }( s# S
  259.       dwProgramState=AP_CONNECT;' X) {( Q( d: Y  X3 L0 `
  260.       return TRUE;4 q' l( v! C  i( L) v8 r$ u, l& p
  261.     }
    - n# D, u) n/ |( `8 y' y
  262.     if(!bRestartUpdater)
    " Q/ X) A6 `) W6 p+ n4 Z% C, s! S
  263.     {; Y0 L* V9 E* _# u4 M6 H, N/ O" J
  264.       int iCurrSize,iFileSize;
    . ~8 r* F) U! p6 S0 h
  265.       iCurrSize=0;2 i7 P. }4 A2 L' A! r+ v' `
  266.       iFileSize=UpdateList2.size();5 G% E! V, N' i0 ]$ }; ]7 i( u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! r5 S4 q/ `5 h/ u
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ _' f) r4 H, w; `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    7 D7 K& V8 }& u( j9 \; M) k
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( a. C3 }8 a( B8 S+ }5 {% p
  271.       Fclearf(".\\update.dat");/ P+ a8 v) c; F7 P* z0 l
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 I2 m; u' v0 Y  ^# }* g
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)2 ^( I% h- n% y( \* a/ f4 c) I
  274.       {
    + `" ?5 u1 M+ T7 I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 y9 x2 C" A6 t( F% c
  276.         {' k& m# }$ Q4 c
  277.           file=(*p).second;; u' ~8 ^, D( h% X
  278.           sprintf(filename,"(%s)",file->file);
    9 |" U. o: a7 W: h9 W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);5 V4 ?- T, m. B8 @# \' L! \5 x
  280.           iCurrSize++;
    2 L1 b& E- u$ t  u" o6 d: L+ n
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 ?- B/ K, S/ a1 T1 w+ F9 @, H7 r+ F
  282.         }
    * ?/ D( J# ?5 |% C/ r- H
  283.       }$ m, C; R9 G  e1 w0 I
  284.       unlink(".\\update.txt");( D8 n$ G' o6 ?9 B5 \5 c  O; K
  285.       unlink(".\\update.tmp");
    0 O5 @6 m! k  h! f! l% f% x
  286.       Fclearf(".\\checkversion.dat");
    * V8 ^& `: Y  `
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( A! V% @9 w. j! Q9 g5 l* p6 a
  288.       if(UpdateLocal.size())$ T& K4 U4 b8 O/ X; i# A
  289.       {
    & Z  d) K% X, x% g3 c; w+ Y
  290.         UpdateLocal.clear();( O0 D$ N: L4 F9 M
  291.       }
      G4 [2 W. N! j& M; v/ F
  292.       if(UpdateFile3.size())/ D% H5 u+ H0 ~2 M, X
  293.       {
    3 L: S5 g) Q# Q  X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)1 I- |+ q& b2 X# r2 U! I. F
  295.         {' }  G" \9 @% z: V" |
  296.           file=(*p).second;1 r; o4 w( N7 u$ Q; {0 Q
  297.           free(file);7 X& i0 {1 P- X6 D
  298.         }
    0 u) ]+ x) V' f0 P
  299.         UpdateFile3.clear();
    ( ?1 e2 N8 B2 e/ m+ z* {8 D* s
  300.         UpdateList3.clear();
    5 l# }, p/ X% A" f* F
  301.       }
    ; B% l$ X+ Q: r' r2 g1 G8 D
  302.       if(UpdateFile2.size())
    ' X# r% Y$ m2 X) \& Z( X
  303.       {% H- ?! y6 s- U, r0 m3 D$ X: p% }2 [+ n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    & C6 e6 D5 i9 |9 v' J/ L8 K6 G
  305.         {1 x( D5 h* x: j+ q: t$ r
  306.           file=(*p).second;3 f! a% k3 B4 C* c4 P) L
  307.           free(file);
    - @+ |) H; ~3 Y" `9 y4 `8 Y$ \
  308.         }
    : V& w! n: {/ E+ H& G; [) W
  309.         UpdateFile2.clear();
    7 Q% t+ K5 S$ Z" B; K  v0 o
  310.         UpdateList2.clear();# Y) f6 }0 ~* j8 V( K
  311.       }3 D( X+ Z6 k3 k1 `
  312.       if(UpdateFile1.size())
    9 W" V9 H7 L/ ?/ R3 _1 K
  313.       {% L. V% m5 c# D! n8 @4 w0 `+ K" }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& O" g2 U! M/ I, L
  315.         {* o. n2 }% Z/ Y) {5 i
  316.           file=(*p).second;1 R$ l8 n: I" ~1 E6 g% G
  317.           free(file);
    ' _' D: w9 q& b
  318.         }2 ^  p; I+ ]) }7 ]5 x1 V8 C
  319.         UpdateFile1.clear();
    . M9 r' j: m# k% @+ o+ k; I
  320.         UpdateList1.clear();
    * R+ c! G4 l; u# W
  321.       }+ m3 G3 [$ J3 ]  K: M# A# @9 z+ r
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; W& b. q2 a, ~. T& J  S3 E; E; k
  323.     }7 A# ~) z& O3 a* f7 t8 [
  324.   }! Q5 b* W9 Y+ u9 `
  325.   return FALSE;1 G+ @' s9 o" D  o" \+ K
  326. }+ a# J4 X9 x$ s" r7 T1 R
  327. - t6 e2 k- j  ^; d. f3 ~
  328. void CRevAppApp::ClearAll(void)# T- r. F9 s9 U
  329. {# r! {$ w! n& V+ K3 w
  330.   LPUPDATEFILE file;
    ! Q  }3 E  S2 `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 S( b3 M. U8 b0 ]
  332.   z. C3 b$ K( I% `6 T/ N' }0 r
  333.   if(UpdateLocal.size())- |, K+ O' r+ b6 n0 z4 x, `2 F
  334.   {& k' @6 K( j4 X, k; _
  335.     UpdateLocal.clear();/ u0 `/ Y; F9 H
  336.   }
    ( h5 D% U% l( b7 H! v# }1 f. j
  337.   if(UpdateFile3.size()): J& k3 C6 r! M2 c; V9 j9 g
  338.   {
    $ j$ l3 B# f+ z" A) X1 S8 l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % E) s3 D3 m" u( N* T' Y- l
  340.     {7 {( g% Y6 z: K  Q
  341.       file=(*p).second;+ y! n& [: @4 `  p# Q
  342.       free(file);
    2 e; c  W0 z: R8 \
  343.     }
    / l1 j& k! e4 I( [& I: r. V
  344.     UpdateFile3.clear();/ E1 R# q. P7 H' V5 t! m% K
  345.     UpdateList3.clear();9 r8 a- k  P  d; E  M' M+ D; }
  346.   }7 n+ b% G+ K% h! S' ?6 S' w, |
  347.   if(UpdateFile2.size())% Q% r! Z5 |5 _- |4 P
  348.   {: G% o  T& P' n( H4 u; i& p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' J7 O9 w4 b: X
  350.     {
    + Q7 w: W3 H8 k
  351.       file=(*p).second;
    # Q, i" Y7 ]8 \& c2 o/ @
  352.       free(file);4 o, V2 n( g6 @' b
  353.     }
    7 B3 o" U" z9 {, X
  354.     UpdateFile2.clear();  M( y1 Y' R0 S; c% g( q  W
  355.     UpdateList2.clear();+ f6 Y/ G: y! v0 v& @. \
  356.   }9 V# x: y* P  j- d7 B# W
  357.   if(UpdateFile1.size())
    & h) ~" s* j5 v! g6 A' C- \
  358.   {
    9 e3 ]- c, l9 _# H( x5 M) Z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( g" b( |: M# k$ Y6 V" e
  360.     {% u2 F) L6 |4 ?
  361.       file=(*p).second;4 O. P% X2 c. N
  362.       free(file);
    - F- {+ p" L7 ]# l3 V
  363.     }& F* q5 {: {6 ^; |( I  y8 ^: n
  364.     UpdateFile1.clear();
    - `9 d1 |4 j) H4 f
  365.     UpdateList1.clear();
    . X: u+ F4 f+ y5 Y
  366.   }
    " J; A5 ~5 r* V' r
  367. }  3 K. q1 m$ e5 a0 h: J
  368.   4 X) `( x1 S- k0 P  R
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    4 _' R; w0 f0 |* o( o( o
  370. {
    # V& k" P: H3 I; f
  371.   int c;# ]: @4 c. T* t; y( V
  372.   LPUPDATEFILE file1,file2;
    0 P& h3 ?0 K- o8 W( L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" ^4 _9 w+ n  f8 y  L
  374.   std::list<CString>::iterator l;: X8 l# r, J- X

  375. 6 y  B! p. B7 k5 [# b# V. g- B
  376.   UpdateLocal.clear();& k, h) u' g! q+ S; I1 y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ( A( a3 s9 ]2 @9 J  V% ?, v0 C  O  U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    5 S1 m% l: Y+ b/ S2 t1 `+ n% F* D
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' J& ~  O8 c: P
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - Q0 H- R+ O7 |, a5 I% U
  381.   if(UpdateFile3.size())9 s$ U( o3 A& h$ t& `' S8 H* R! E) H
  382.   {6 j# L5 ]; z2 L4 O: k( {2 G, E# y
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)1 D8 ^) Q, l9 }
  384.     {
    ' B( [% v. B' M  V
  385.       file2=(LPUPDATEFILE)(*i).second;: g# q, {! |4 T7 B+ ]5 d* @# e6 C  u) A
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  W7 ^! Y/ ^0 a  s$ Z" Q
  387.       {& S5 e6 Z  r5 h- S: M
  388.         file1=(LPUPDATEFILE)(*p).second;( o# I1 y0 `; U2 K
  389.         file1->vers=file2->vers;  j, E, V& f, E$ @* i$ T  `: j
  390.       }
      l$ F8 d' a# J5 G. j6 Y
  391.       else! |7 h9 q* H1 a) E) k$ @+ z
  392.       {0 {- L1 g4 J' B# S$ `+ }1 v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; b- w8 U* k3 |# S$ x
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      @3 `! j" ]0 u$ [2 ?( P- R
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 _8 y9 b1 t0 n' ~- z% z
  396.       }' R  R+ P( O8 ?+ D
  397.     }
    : u! l8 O: y9 U5 ~3 Q' n* x, E
  398.   }
    4 o# W& W  t! ^4 g& ^. T1 M/ M2 Z; b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)+ j, _' c5 u$ k% l, K
  400.   {$ @, I2 j: Z* E6 U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 ^7 E( @- h5 w' n/ [
  402.     {9 H3 h# U/ u5 C
  403.       file2=(LPUPDATEFILE)(*i).second;2 {( n) d) e4 C5 y8 X4 e( }
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& q1 A& t3 r* P, Q+ J3 E
  405.       {
    / X$ m6 x& ^( W6 q/ a
  406.         file1=(LPUPDATEFILE)(*p).second;
    3 C5 n/ b8 C7 F( u
  407.         if(file1->vers!=file2->vers)
    9 R* [7 P7 a3 _7 P5 s5 |& o
  408.         {
    8 c1 W# U( r' Q# R$ q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  U8 X' g+ ~& \# |$ e
  410.           c++;
    ) i) X* |6 }: B: q4 _; V9 l: u
  411.         }
    ) C; [4 J$ |( g% i3 o, h  [
  412.       }
    ; ^$ B- Z/ C* x  V% W; {7 \" O
  413.       else
    ' y4 h( n: q- c5 ~
  414.       {; r: t: z( [$ ^0 ]! S
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& T- ?6 [) |% C. Y0 c( a. E4 Y
  416.         c++;
    5 T( g3 N+ k2 l! i  C4 e
  417.       }
    / q) ?1 f5 X: B1 u, f  l
  418.     }
    5 ^9 Y9 o" E9 b2 f+ `% g. m
  419.   }- h& Q+ i) v* }; D7 }* g
  420.   unlink(".\\DownLoad\\update.txt");6 R; {+ U% ?$ J( y# v) R: F
  421.   if(UpdateLocal.size()) return TRUE;
    ; n0 ~1 X) f3 O- @4 T
  422.   else                   return FALSE;
    : C* a) a3 a3 u  p7 r+ u; ]8 ^
  423. }1 E' l4 j2 d9 X0 |# J% O
  424. 7 \. y7 h! a( i* Z: T# V3 u5 M2 _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 M9 {+ y; P6 f; t- w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    0 y! E- {5 k0 L1 b( O

  427. : W0 K. L: x5 u% ~: g8 ~9 w
  428. / F* k$ ~; R- r, i
  429. * w) m8 E' d2 s5 B; `+ w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), ]' E& v, D0 m" d: {0 R" l& S6 K
  431. {4 V1 E+ o( F2 z, U. S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" K- ^, c' F' Q; q4 r& b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ g9 w; L- o: b7 W& s
  434.   {3 b6 w6 z& _, L: a4 H
  435.     char szLanguage[50];! T3 F* M, p8 ~! i* |9 w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) x7 m; @5 g$ B# \7 G5 y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;$ D3 Z4 i( ~- N0 o2 ]! q
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      I. ]- n$ |4 g+ k4 I
  439.     else                                   m_iLanguage=ENGLISH;
    : H$ P. q% L! c; B) x8 j- c) p3 E
  440.     char szRegister[100];* d- E3 Q  q' {/ {; k
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% c1 f. w5 t; T1 a
  442.     strRegsName=szRegister;+ q, w" F: N$ K/ d
  443.     char szPatchURL[100];
    ! G/ T+ J4 p: p. y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 Q  K$ l# Z+ A$ m5 ^
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 Z7 _- M9 J+ m9 Y0 b1 \
  446.   }2 H: E) S5 x3 }+ P
  447.   else2 A7 }' Y" ]9 D! O
  448.   {) L5 \% T" G8 D! j3 f/ M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : s2 H( d5 w$ ^1 K; a
  450.     strRegsName=DEFAULT_REG_URL;
    3 P' Q7 k0 Y/ M' |& M
  451.   }
    ( j8 }3 G: G$ z/ q( F3 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & s# J9 J! L9 l! w( c5 |* l# Z
  453.   {
    , J  d4 U- A* H
  454.     char szIP[50];( ^6 P. M6 L% f, e1 D) z  A6 ]: i
  455.     char szDIR[300];. P4 }) T- m. z
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    * d" j9 x: ]5 E/ |" D  u  f6 e
  457.     {
    " ?1 l/ x! n3 z& q6 C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");! X* O2 f" x% g, P7 M7 K9 W: a2 C
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");% g3 ]# n4 L9 |7 t- t) O9 O0 b/ d
  460.       strHostName=szIP;
    3 K% h7 s9 [8 l/ `! [" ?0 W# d# q9 o
  461.       strHostPath.Format("/%s",szDIR);
    ! `# C5 Q: u+ v% G
  462.     }
    ' e" j$ t# x. Q. V; Q; e7 |3 E5 ?
  463.     else6 d( W) P$ m) @8 m# s" C( i, ]! r& N
  464.     {" i' C. b: I$ E0 e' k
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)# I3 q& c6 u6 {5 J$ x9 |
  466.       {
    . Y1 n3 U8 [6 T) o2 A- N& ^
  467.         char szLanguage[50];0 h. m4 p" C3 b7 l# s8 X3 t; g
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' O* x) [& m% x
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; K4 b4 k& _* ~+ ~8 I; T4 |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " t* {0 p4 }! f- y9 P3 q
  471.         else                                   m_iLanguage=ENGLISH;
    + k" H& [6 G2 ]$ s
  472.         char szRegister[100];
    ; [/ @; R- p1 B) p' v
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 Y/ U, L1 v4 t! A1 |0 w
  474.         strRegsName=szRegister;
    7 |6 j5 y$ w4 C# H
  475.         char szPatchURL[100];
    5 Z0 ?9 u2 ]' K+ \) A. b5 p- z  _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");. o! D. J4 q( s9 O% G' o( @8 o7 h6 ]: P
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" g6 j4 j8 T, J, f! Y+ u# p  w; Y
  478.       }+ }  _/ U8 c; C* ^1 l
  479.       else* k2 H3 r9 {& J
  480.       {
    9 @/ P; E( {' K* H6 N  F  a2 D
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( n5 a" J# F# g* |3 d! W7 G
  482.         strRegsName=DEFAULT_REG_URL;  E2 ^5 {/ n0 c3 _/ ^" z9 _& N
  483.       }+ U- O; ^* x8 C
  484.     }1 S7 T) p! W. \2 m9 r) |" V
  485.   }
    * b0 S" }+ ]$ j9 ?
  486.   return true;
    7 Q7 C# O# @7 P; w! L& @
  487. }
    ) F7 d# ?% l$ D" B
  488. # ?- I6 R5 G: v; Z: Z9 C3 p
  489. #include ".\ZLib\unzip.h"
    / J+ P% z- c9 U: w2 a+ D7 s& t! v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( P4 G9 k. l4 f
  491. ////////////////////////////////////////////////////////////////////////////// t: G! c& ?2 h: T2 T
  492. // CRevAppApp initialization
    ' g# e# K- p" h! e0 \

  493. . N2 O* b3 D7 D5 d
  494. BOOL CRevAppApp::InitInstance()
    4 N) K8 B3 ?+ }. O$ e# B- d5 A; z
  495. {
    / Z* V7 G0 y, H$ Q$ d! i4 J
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    , Z" R* P" ~1 {* k$ H
  497. ; k2 ]4 R& X+ z! [; ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# h. @/ u" g0 V3 @4 A8 z
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 T5 W4 i& q/ m2 ~, w* o; A1 ?$ H! I$ t
  500.   {
    ; u! P) p! ~( y/ R, |9 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");. ^5 k3 d+ e. e$ r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; e3 v6 f5 z  }/ G6 x  G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 [2 |* Z; H9 P6 _% G0 ]2 w8 ?
  504.     {
    . P* T6 C, P$ ~- T5 g
  505.       strcpy(szPath,szPathTarget);
    ' Q' F6 c2 L9 [1 x4 m4 d7 ?
  506.       SetCurrentDirectory(szPath);
    " |/ B( ^1 _3 W' B0 |$ M
  507.     }( r- R3 v* @; i9 }2 V
  508.   }
    " Q0 @! e; @( m5 x' c. @1 p. h, `
  509. #ifdef _DEBUG% U: s/ M  U2 T) w4 X0 |' y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - R! q5 B7 b! Q/ W) R
  511. #else/ w* k7 ?6 K1 A5 v6 g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * u* D: [9 w' y4 `6 ]: o* z
  513. #endif
    - I8 z) D" D% b
  514.   {
    , d' h9 o6 [- S
  515.     char tempFileName[MAX_PATH];
    * A$ @* f, E4 \! v! |; m1 Y
  516.     strcpy(tempFileName,szPathSource);
    / U+ D5 t' n( V' m
  517.     tempFileName[strlen(szPathSource)-12]=0;1 ^; z- T2 b% v; C7 X! y9 q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% Q) y5 N, T' E3 o8 D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 m  H2 {: _% P& Z4 G
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ V9 ~0 x# r  O/ z7 u
  521.     return TRUE;/ v+ l1 J: }: N
  522.   }6 |" s2 z/ A1 C5 x5 b; f! K7 \0 w
  523.   // Nuke 0118: Delete run.exe
    1 A' e3 I7 j2 L: B; j  z+ E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );2 F+ u2 y; u% e3 U
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; o8 \; v/ R) S% n& j
  526.   if(!ReadCfgFile("Config.ini"))
    " W& J/ Z8 y% y4 n: {4 _
  527.   {& C' L8 p0 ^" q- R# x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);6 s+ t9 d) L0 s( C4 h8 U! q
  529.     return TRUE;' n' R0 h/ y9 r, S' u; ?0 g. `# F' [
  530.   }
    $ o1 J% Z- v! M  t$ s4 d
  531.   HANDLE mutex;
    1 F) c$ F' G( e' l% |
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 ?( O5 p. s. C% |2 x# F" y) `# o
  533.   {! f) H2 k3 I* G) A, k
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    8 Y- ~3 C  G7 D7 f0 e$ K# b$ O
  535.     {* s8 }# v1 n  q( o
  536.       CloseHandle(mutex);
    1 f9 b& \. ]* g; q& {
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 T8 G9 b3 _# e" D" i" O& c  N
  538.       return TRUE;
    + Z' i* m* F' V# B. [8 @- l
  539.     }
    , G9 _2 w1 ^2 O# U& o
  540.   }  
    . G1 m9 [& ^! Q* t( j: e
  541.   CloseHandle(mutex);
    ( l$ l' @! o; {
  542. + B" Q5 W1 ?3 P% L: l3 B0 B
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    3 ?- ~7 \3 i1 s% r* j

  544. + Z; f  ]% P9 m, M  Y
  545.         AfxEnableControlContainer();3 u) H  Z# w; U. z7 f. ~" ?% d8 A
  546. & Q. S) W( o  {& f- h* ~/ l0 t
  547.   bCanUpdate=FALSE;
    & @' j' \" ]' @+ c
  548.   dwStartUpSteps=1;' f) ?1 j' C" p2 K
  549.   dwProgramState=AP_NOTHING;
    ) S  i# t. @3 H
  550. 9 O1 _% b, c8 S5 A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" j3 u1 w" W9 w. `
  552. 0 q/ u6 N2 j! z+ M. s( A
  553.         // Standard initialization' N) w7 Z# K% D) l3 f2 I
  554.         // If you are not using these features and wish to reduce the size
    * Y) f. ]8 k, k5 W8 K3 b4 r
  555.         //  of your final executable, you should remove from the following
    % f' b+ B3 y7 R/ P
  556.         //  the specific initialization routines you do not need.
    / P4 }, ^) W8 K, K- N- C

  557. ' s! K$ U, Q, K+ ~$ v1 E7 q+ P# n
  558. #ifdef _AFXDLL
    5 B& I7 ]; V! x" o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    1 G: Y2 W, k: r, p4 x0 J
  560. #else3 Z: P9 f( M: X+ t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      W9 Z2 T  a0 W- z4 c4 r
  562. #endif- t6 q$ k; i$ D1 E

  563. 3 z8 q7 i' }3 _$ r7 x( P( u4 U. z4 E1 |
  564.   dlg=new CRevAppDlg;' V' W9 n+ C) n  Z; ^$ O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , w1 U. A' _7 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    8 C3 W+ k+ U2 U: o3 G' o2 e' Y* a
  567.   m_pMainWnd=dlg;/ g3 @0 I, |, m, T# m

  568. ( |+ ~4 }' j+ _! _: f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) e0 N5 f6 B4 d

  570. * a+ U) e* h% |( @( f
  571. //  GdiplusStartupInput gdiplusStartupInput;1 Q$ g" l+ A5 Z- q
  572. //  ULONG_PTR gdiplusToken;0 {+ c, v9 Z( B: v' N! p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);' V7 `5 D$ p4 X: ^; X- _9 K6 h
  574. 4 Y3 \+ }# e( ~2 O+ R
  575. //        CRevAppDlg dlg;
    ' i$ x- {" f5 a, }2 I0 P' A  M
  576. //        int nResponse = dlg.DoModal();
    / S2 U+ {+ k' x( }7 a, Y" _! {& `. ?: a
  577. //        if (nResponse == IDOK)
    0 w5 _! q1 B9 M
  578. //        {; y, u. K( q/ |% z7 y9 k
  579. //                // TODO: Place code here to handle when the dialog is
    , g2 f' Y$ S6 v8 D1 C% c
  580. //                //  dismissed with OK7 d* o% |( F2 p
  581. //        }
      {: M( @& u0 c" G
  582. //        else if (nResponse == IDCANCEL)' T, C9 Q  ]! T* _
  583. //        {
    2 Q* ?- J) ^! O" w
  584. //                // TODO: Place code here to handle when the dialog is7 ^) V) M$ K2 Y. D
  585. //                //  dismissed with Cancel% p) C( K/ Q/ U( q- v8 q$ `
  586. //        }% j4 t; n3 e& p) \

  587.   x/ O3 x! l  g* ]& j- {, w1 j8 b
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; M' u4 K& O7 y9 ^2 ^, k
  589.         //  application, rather than start the application's message pump.: t& E6 }- H. D
  590.         return TRUE;
    / U& T2 j* o( _9 o+ [$ ^. |2 ?
  591. }
    ) ?: J8 a( I: K

  592. & a1 [- ?% s, h# D+ b
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) K1 U" z" p2 \$ E8 P$ c: r+ c" n5 j
  594. {
    2 c- u9 y9 U, c# z3 K$ u, I, h
  595.   int i;
    # J# {  b! W, U4 _
  596.   char *szRet;0 e* b1 O# X( ~: n/ T1 w* e% w

  597. ) e9 c" W8 o* F7 R) p: d0 l
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 J3 Q+ S$ V% t) z; h' c
  599.   if(sztoken)
    / _" l6 ^0 b1 d
  600.   {
    * Z  k* G0 U7 z+ C
  601.     szRet=&sztoken[itoken];0 s( P+ ^% b5 C6 ^# W7 d, r0 G
  602.     while(sztoken[itoken])$ ]8 U! E. Z. C6 U
  603.     {
    # |  S* ^; ^) L! u& x( u- F; L6 r
  604.       for(i=0;i<(int)strlen(token);i++)
    5 t9 }. ?- r) f9 p8 W( C
  605.       {
    1 q1 \4 i0 ?3 ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), t* ^3 ^8 N1 }' N1 k/ q
  607.         {5 [2 e2 T/ @& `  o0 O- h
  608.           sztoken[itoken++]=0;
    & V- J& R9 V2 m# L
  609.           sztoken[itoken++]=0;) a" k# M( G% V
  610.           return szRet;
    $ [4 @7 @2 u5 S" [/ L; _8 A4 k
  611.         }
    0 S" n( u6 \6 W4 I( r
  612.       }
    % a% ?9 s+ W0 D) u
  613.       itoken++;& V4 s/ y6 \1 N& S' ^; `
  614.     }
    $ ~$ p" f) B4 |2 j
  615.   }
    8 \! z) q  v8 u  [& N7 x
  616.   return NULL;
    7 ~  k& G/ G" |$ E( N* T
  617. }
    0 r% P" Z0 L: y& Q, ]
  618. 6 n( Q' O+ u1 h( z, g
  619. void ProcessProc(long Total,long Current)
    6 b* I1 [: p3 s4 h; L! B
  620. {3 x! ]) ~, c& C" d' N& B8 o
  621.         MSG msg;+ a( ^- `8 Y2 o( d7 n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* D3 S1 `  ]" K% q7 O
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    5 `, H% \0 V/ ~
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))8 Q& E- e* E' h
  625.         {
    6 H" v5 G- P* |: Z  M
  626.                 if(!GetMessage(&msg,NULL,0,0))
    6 v; p% g* r  I; W! N
  627.                 {+ D8 T( E1 U4 x( ?
  628.                         return;
    : i0 m" A! D" q# c% s
  629.                 }
    # h* r9 H4 w3 w4 K3 O
  630.                 TranslateMessage(&msg);
    $ y6 l: t: g& s7 c5 q
  631.                 DispatchMessage(&msg);3 L& I, b9 y5 d0 x* r
  632.         }       
    ! c1 K/ w7 W6 w0 D2 a" q; ^
  633. }2 c) Z) N  C( H0 x" ?) X7 E
  634. - |; ~- N8 D. S4 [" z8 @/ X
  635. BOOL bFirstChar=TRUE;
    4 Q6 j1 W2 H7 R1 W9 E
  636. 0 }! H5 _: C% f; U! h
  637. BOOL CRevAppApp::OnIdle(LONG lCount); ~. ]7 `+ L) q. R# Z+ D
  638. {) X/ |! q- i3 @. M4 P7 W1 ]% k
  639.         // TODO: Add your specialized code here and/or call the base class
    ! M% t6 L6 T: b
  640.   switch(dwProgramState)
    ( E" d( x% \( ?
  641.   {' Z8 ^9 X: X% ^: c) t' ^8 p7 h9 z
  642.   case AP_NOTHING:
    - p* {, Z* t& ^
  643.     switch(dwStartUpSteps)( c4 J$ ^) H0 ~% O' h6 A
  644.     {
    # n5 y- G5 S% q" a( r8 W% M
  645.     case 1:, U1 p8 H7 ~  j  E1 U
  646.       {: P( Z  W# w$ _& W6 K8 w' p
  647.         int i;
    6 G1 t2 R& g0 P9 b2 t8 W
  648.         CDC *pCDC=dlg->GetDC();# A5 K8 J! `$ {2 V% i
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( l0 z; {- T: ]* @# l3 k
  650. //        Graphics graphics(hdcwnd);
    1 p; g8 t5 _& J: |# d' c/ q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    : z; k: f4 X# y4 l2 r: p' e* }! u$ ]
  652. //        INT iWidth=bitmap.GetWidth();+ r. n' C% `. G% V
  653. //        INT iHeight=bitmap.GetHeight();+ W  X7 {# W6 B7 \
  654. //        Color color,colorTemp;
    6 P7 I* c* j; [1 B# S
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 Y% D3 D, v1 X" D$ [: ^
  656. //        {8 k7 F' r/ c( b5 Q) C  B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / j# C% s* J: |  T; }3 N, l
  658. //          {" g2 r1 A4 `! }2 N: X& Q$ W
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 {2 ]9 B+ B! c; s5 ~7 J4 o
  660. //            colorTemp.SetValue(color.MakeARGB(' J5 a: f7 u3 i, H
  661. //              (BYTE)(255*iColumn/iWidth),- u6 w  D' f4 D# q7 h
  662. //              color.GetRed(),
    % ~- m# o/ d$ F& }
  663. //              color.GetGreen(),
    ' s  P2 e9 \; u$ |2 h0 E2 R
  664. //              color.GetBlue()));
    , }' Z" s" s9 F' ^" {7 M
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; j% J; j- p# s: b( {& G3 f
  666. //          }
    ( O. s' a: h- }+ ^! l
  667. //        }7 x( w/ U  k3 a; F$ u
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* J8 A: h- B) w$ I" F2 O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 |# B0 `1 O6 e2 V  m
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");5 k) A, p2 d. }5 q$ S9 ^
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 h6 N5 ^* j# i; Y. f4 ~
  672.         for(i=0;i<240;i+=8)
    # X: I/ m* y; j; F8 i
  673.         {* }- f; U3 W3 p1 b: I/ t1 X
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 y* ^0 f- S* e( k4 x
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 i7 a% i9 J) C- x& Z2 N
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- M5 [! w0 n( s% _
  677.           Sleep(33);
    - t9 J1 x, B+ h0 j- C; y2 t' W, e0 W
  678.         }; C8 ]3 p: }( w0 A( z- J/ y; Y" |- g
  679.         Sleep(1000);
    * t# R7 L; H' q! m0 _( l/ ^
  680.         for(i=240;i>0;i-=8)
    ' z7 [$ X" Z" Y
  681.         {
    + l% {' h7 W$ u/ W. s
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  F1 U& X. J/ m# l- ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " R+ Q# I! V6 f! s- }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) [7 t6 Q2 v* ]
  685.           Sleep(33);6 d8 N7 {$ r1 H
  686.         }' O. S5 K* X: g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. F6 _7 K3 M+ i' L8 R7 k; ?
  688.         dlg->ReleaseDC(pCDC);* v( `8 ^. T3 @: x
  689.         DeleteDC(hdctar);
    , B+ X# a7 |6 \9 }7 V' x
  690.         DeleteDC(hdcsrc);( s, Q5 k  s4 M
  691.         DeleteDC(hdcorg);
    9 ?& [. c% B4 [7 P
  692.       }( [; d' N& Q- ?* C
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 z7 q0 G* N3 q/ k  \) `/ R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    , f* A+ P$ E% p8 R/ n3 A0 ?' O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    " E8 F3 y2 r) a: `3 j, E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    $ e2 u$ E# L9 }4 e# O1 {
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 L- Y4 J: c9 m2 `' w1 _1 X
  698.       if(!Dn.Connected())6 N& N- c% `3 n( p. c" |; w
  699.       {9 k4 B& q7 L, D" S/ p& V% m8 ]
  700.         dwTotalFiles=1;' h* F1 `9 ~3 Z' _. Q
  701.         dwDownLoaded=0;- [% b$ O) \( ~  R
  702.         bSilentStep=TRUE;% }% N0 w$ Y& v2 A! x' R( C
  703.         bCompressed=FALSE;
    / S; Y! A" j/ n2 G: C
  704.         strExtLocal.Empty();7 w' G9 l* `5 V/ T% K, R
  705.         strFullName="readme.txt";
    # u- O; b% R" W
  706.         dwProgramState=AP_CONNECT;
    + W1 A$ z1 B3 k2 K
  707.       }
    - N' S" ?! ]+ }; ~3 V
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    2 |* {) N. d. q
  709.       dwStartUpSteps=2;+ ~. d* U3 A8 A7 v' W2 Q9 K
  710.       break;- @* c' W& R" g  j* H
  711.     case 2:/ _: S/ s( }4 [$ L5 K
  712.       {
    2 b2 l  `" I0 B  P7 K0 G
  713.         int iEOF;! U; K4 D! P3 t! D. Z/ f
  714.         FILE *fp;
    ! P! c+ h! X. T, v) R+ P# z4 B: [
  715.         char szString[512];# Y: ~0 e" X& n2 H6 D4 C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: Z( N; I) Z& R8 b- s7 N# k; U! E  R
  717.         if(fp)/ q6 L+ O' t7 C2 p8 H& D2 `. V
  718.         {* w5 W( |6 ]: ~5 {0 I) N) o
  719.           do
    7 X% k2 u) n* x. _
  720.           {* H% C$ J* [6 `
  721.             iEOF=fscanf(fp,"%s",szString);2 x( ^6 k3 z, |1 G' @
  722.             if(strlen(szString))3 B+ i$ f  P1 }& S( |: M" K  O. j
  723.             {9 _) g  B9 T7 g7 {4 \
  724.               if(bFirstChar)
    % n; _1 t' \" }, E2 E$ I$ _
  725.               {8 W0 @# M! |  C+ E0 j) G+ v
  726.                 bFirstChar=FALSE;
    + F( V* x% f8 |) b* ~7 M
  727.                 bConnectIsBig5=FALSE;
    , u3 n* O1 R* q2 R& x& Y: n0 E
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ; `. l* ?) @. W4 w, R
  729.               }
    0 |* t2 S+ ~: ^& N7 N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 W- N& r. g- [& a9 N: r
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' Q$ R8 w9 N5 \; U* }
  732.               dlg->m_ListText.AddString(szString);* ]5 ^: t0 O: X1 E6 I+ c, S+ A8 g0 [
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 l! i! L1 B9 H1 ?* v% ~
  734.               *szString=0;6 m# ~# n6 V5 q: Q
  735.             }. R6 r5 H' L, _8 l
  736.           } while(iEOF!=EOF);/ v" y* M& t6 w) n' D$ q& ]
  737.           fclose(fp);
    ( K4 y% z9 q5 `5 W
  738.           unlink(".\\DownLoad\\readme.txt");
    # v" \: y/ B/ n$ \: |% N
  739.           dwStartUpSteps=3;7 Q5 e( O2 X' d- }6 N
  740.         }. ?3 e; m" P: p
  741.       }
      W& b6 t. Z2 @
  742.       break;
    / }/ D+ K% s" `7 r
  743.     case 3:
    . a3 w$ Z# P& n7 O, I6 W) A
  744.       if(!Dn.Connected())
    8 O7 W! ?3 h' D% m! X
  745.       {
    5 M3 y1 i4 [+ D; i+ O
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);' a& ]' Z. s% [( P: W
  747.         dwTotalFiles=1;9 ]% M+ T& r! I7 d0 |  f. d
  748.         dwDownLoaded=0;7 i$ B) h* r& B& f$ G/ ]+ A
  749.         bSilentStep=TRUE;$ c( f/ W) }4 x$ H- y3 z: n& H. ?
  750.         bCompressed=FALSE;, A; D) N/ M" g& C
  751.         strExtLocal.Empty();
    - g1 G/ ?5 v' `- F
  752.         strFullName="checkversion.txt";8 a+ X+ J" M" k' d4 ~
  753.         dwProgramState=AP_CONNECT;# G& n6 \- I- {4 {! {5 P7 a
  754.       }
    " D* ~- ~$ k% i0 L
  755.       dwStartUpSteps=4;0 \7 b* K: v4 D6 j: }8 `
  756.       break;' w9 I# K- q$ W7 L( q
  757.     case 4:
    + n, o3 G, Q1 H. y: B4 _+ g
  758.       {
    % C' r1 C. {3 f5 Z
  759.         FILE *fp;
    7 ^  \: ~8 S+ F$ a
  760.         char szString1[128];
    9 R8 [" R8 w! D$ ]! @
  761.         char szString2[128];
    % p+ o7 J  {! u/ v% N3 W/ R
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    * Y9 I: |2 G& u5 i
  763.         if(fp)
    6 o' c% a+ ~7 d; y. U0 {1 ?  R
  764.         {
    ( ~$ B8 \& u4 q5 y; L8 S3 g
  765.           fscanf(fp,"%s",szString1);
    8 h* c. b9 [3 }: t' F( f) o# K0 ^
  766.           fclose(fp);
    & ~) r9 U/ n+ Q* m2 Y
  767.           fCheckVersion=atof(szString1);
    . H% H; h/ A; `) |3 x
  768.           fp=fopen(".\\checkversion.dat","r");  w/ e$ E6 o6 U! ^  W* O8 w, ^/ y
  769.           if(fp)
    2 H1 R7 M+ S6 Y2 Z# M' y
  770.           {( K5 }% Q! g( b7 n
  771.             fscanf(fp,"%s",szString2);
    * }6 _; \; c- H4 |4 K/ x! e
  772.             fclose(fp);+ O0 `, d; z! ]! {
  773.             if(atof(szString1)!=atof(szString2)); X2 x% O) `1 N% O, Y' ^
  774.             {; V" y9 C0 P/ L, M0 M
  775.               if(!Dn.Connected())
    8 ]$ F% O6 b, I
  776.               {1 [, r$ a+ C7 A4 [, J1 t
  777.                 bFirstUpdate=TRUE;( q" j3 _+ g: D, j& G: K8 L' d
  778.                 dwTotalFiles=1;
    : q+ m" P8 K0 u9 M2 F- V1 F6 ?
  779.                 dwDownLoaded=0;- y  e4 [4 |% U9 L
  780.                 bSilentStep=FALSE;, Q. A6 U9 I" ^0 c' y
  781.                 bCompressed=TRUE;% o; _1 M9 P8 ^9 Y. w
  782.                 strExtLocal=".\\DownLoad\";
    : `! V" o$ H/ D2 V4 U. Z8 c5 i' y
  783.                 strFullName="update.txt";
    , I8 k: p1 R& d
  784.                 dwProgramState=AP_CONNECT;
    . R% ]' ^' B. Y% ^
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; G! V( B' [' S
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) Z  y6 J9 b7 B6 |' d! ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ @5 s  x5 p7 T  |6 c
  788. 4 m2 e9 z9 @0 s; W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 n2 b# L% D2 {3 l. i. }
  790.                 unlink(".\\DownLoad\\checkversion.txt");% ~5 @7 L9 D% V7 }
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 L/ G: T  U) P5 L2 ^+ a9 C% ~
  792.                 {
      P3 S7 ?8 u" v7 e) ?. i' F
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");: \7 o! U% n8 h! G" J$ F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    # O- C5 g1 S0 ~: f
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    + h7 j3 G# ?8 `- X
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 g2 c, n9 u6 ^' k) f2 W
  797. " _! U8 V  Y; I3 f1 Y" E4 ^" g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . m  l0 X" N" S6 n  B' ^) ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; s9 K6 F$ `" b8 O0 X* |8 F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! d2 w% G0 @8 G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 O0 @9 f* }  h: F( U
  802.                 }
    2 N3 j" Q! Q+ O8 |& y3 }
  803.                 dwStartUpSteps=5;
    0 C+ k/ h' b& r* _% R6 \: e
  804.               }
    - C) i7 ?8 a- _' z2 f5 J
  805.             }
    2 @; j+ i/ i) L- @
  806.             else
    5 G/ q& i  Q- c! U( T+ L. {4 A
  807.             {0 V7 U+ Z- T  Z
  808.               unlink(".\\DownLoad\\checkversion.txt");: g' K, k3 K7 X: U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - l9 Y3 |+ X) C6 h: l, I
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 M4 E3 |" t$ U& C( }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" L( M3 y( z. x

  812. & ?# F' B) J* Z5 y$ g/ O" h! U
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 b5 ?- \2 c7 ]& g( Y# `& m
  814.               dwStartUpSteps=99;
    1 W' K. t1 Z' E8 U! J; Y
  815.               bFinishUpdated=TRUE;
    * k( Y) ~* I6 n1 X# ~% P
  816.               bCanUpdate=TRUE;/ i: P) ?* ?7 Q
  817.             }  x1 f. i& N% |, Z! W
  818.           }
    ; g6 t, W$ H( M0 N. x1 t
  819.           else; W( g3 w! u" }3 N3 B
  820.           {, z6 N& b/ e! d4 \' P3 s9 p2 z+ n
  821.             if(!Dn.Connected())
    % j' l: ^2 s' C, I7 E! F3 F; u
  822.             {6 j' A3 w7 A: z7 V
  823.               bFirstUpdate=TRUE;
    % W5 w% ?1 G* Y  g
  824.               dwTotalFiles=1;* L& B) C3 w& G+ l, J2 U0 b
  825.               dwDownLoaded=0;
    & h: l. _7 y8 g4 p
  826.               bSilentStep=FALSE;
    7 x4 n. t: M( Y7 O* K; k" S
  827.               bCompressed=TRUE;
    / |! A( r( F) {4 q- b0 Q( e
  828.               strExtLocal=".\\DownLoad\";* }* [/ m8 s2 p  {9 T
  829.               strFullName="update.txt";
    $ X9 j; z; G, o  w; i- O
  830.               dwProgramState=AP_CONNECT;9 i7 ?3 N1 F8 ~
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & N6 J( b) U9 c6 c5 [$ p2 X2 B' V
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, ]9 h) F7 D) d7 K3 C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 M. H. ]7 h! o* D
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      l! {' J# [1 X$ q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    - O% ~& L& m* F6 ?- s
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)% R/ W6 ?" s3 L/ a: @
  837.               {" W; P4 H' v# y  |* {; H9 R4 @, D
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    $ J( B  g# P0 V4 K3 `% ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");5 Q$ c9 _" T* l* ?  w
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 a& z) z/ `& r& P: v! C" U* @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 {6 R2 @2 l$ u
  842.                 : c9 s1 v( U1 P# s
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 d' T* F# N' J3 ~! {0 e7 |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, ], n& F1 S& v4 d5 X7 t: B( @
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! {6 X! `; _0 S+ v6 [/ [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 a0 T1 x1 T/ j2 J6 F' Q% _8 e. P
  847.               }  u0 I/ \: X; v( F' {* b
  848.               dwStartUpSteps=5;
    : z. W+ l% u* I# e& g, K0 g
  849.             }4 u7 t/ K& W9 w, i+ w0 F  a
  850.           }$ X' ?' M: |7 D1 ~& S7 B, F2 g
  851.         }
    % {4 K* Z  V* u" W( Q" Q) A" P
  852.         else
    " |' Y4 C0 \  k
  853.         {) ?, i9 e, ?& V9 W# {3 J& X
  854.           dwStartUpSteps=3;
    1 W  Y' l2 l8 K1 ?$ D$ b5 `7 m; z
  855.         }' c: ^* K& `6 e' v7 H8 F" e+ w
  856.       }
    1 j1 j& M( T0 X& `7 o
  857.       break;
    9 o. V* [7 ]8 y4 E, z  i5 T
  858.     case 5:
    9 R- k6 S4 S" Y7 k& p4 W/ C9 Y6 ]
  859.       {
    / h: D  p4 i6 p0 W2 ^
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( G6 _$ X5 Z! w9 G/ H3 z
  861.         {
    3 {5 L, |& i- C8 y% B" n
  862.           int opt_overwrite=1;
    2 ^! Q3 n5 s9 m+ j8 ]  }- b+ C  q+ N
  863.           int opt_do_extract_withoutpath=0;
    - Y5 w5 z# H3 c; O5 L: D+ P
  864.           unzFile uf=NULL;
    4 j! Z9 q6 G  @' I# l: U) [3 q. S$ V- F
  865. * m8 @* ?$ U6 m/ g6 \5 g( g& a% `
  866.           uf=unzOpen("Wsa.zip");# b5 B; I. ?, G
  867.           if(uf)
    2 @6 [0 e! Q- \* g1 x3 R
  868.           {
    / b6 L9 y+ ]) }
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);9 {* V( c- `" J% a
  870.             unzClose(uf);
    + i8 }, d1 U- ]( F
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ K3 X( G& l  j, ^$ v4 D
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");6 x2 P  ?' N2 o4 {; C  h# {0 e
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! c+ a1 H. I/ W- V7 M; S
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! I# d8 V$ O& C) `1 m
  875.           }7 K6 K9 ]- i6 P  S) N' _
  876.           DeleteFile("Wsa.zip" );
    1 R7 M- p' c8 ^  y, |1 L
  877.         }' \$ I% h( ?$ O3 [5 K  B
  878. % l; I) n0 U5 c# a
  879.         if(CheckLocalVersion())& o. `2 J& Q6 e- u
  880.         {/ F* b  \! H. }8 {
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");% \. f  s& ]9 {0 d& H  H2 E
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");+ ^+ X  @% L! S! @" G: v" P$ x4 g' b
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    : A  U/ O8 V9 g) I0 G3 F
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 [+ l# \2 Q& H5 J6 y
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);7 Q+ M+ _9 q2 ?7 F) H
  886.           dwStartUpSteps=99;
    7 h* j" s) {* J% R4 K
  887.         }. l; M' j, Z. K/ A1 [' B! a
  888.         else
    ) Z8 `  \" x5 @* S
  889.         {" U# j* d/ W8 a& z1 W/ a; d
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    + z/ l$ k6 ?7 ]- e9 w1 g1 b/ |
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 i% g/ h; m. w4 ~' a, K
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( z8 E; b9 }  e1 e! z0 t' s/ P1 m

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

評分

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