找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
% Y" h, k4 T$ n& y* V! k4 f
  1. / RevApp.cpp : Defines the class behaviors for the application.' b7 b  k1 k) [+ J6 O& x
  2. //
    9 w- j4 p: O: L

  3. 9 b' e( M) u+ n6 M7 G0 k+ @
  4. #include "stdafx.h"& F) }& a' Y+ T; y& E; k- _3 e

  5. 6 t* |* Q; b) {
  6. //#define UNICODE
    & J/ {' @6 g- }; u+ m
  7. //#include <gdiplus.h>0 z7 g6 h2 k8 H) F1 t# y! i1 C1 Y
  8. //using namespace Gdiplus;
    + M! h# f9 ^) ?( l3 e+ d

  9. - N" Z4 T# t) f& e7 X/ _0 d1 k# `+ h3 Y
  10. #include "RevApp.h"
    ' P* `8 r3 g/ b6 {% i
  11. #include "RevAppDlg.h"' b4 h2 c9 F6 I4 x6 z

  12. . M* j  l" j8 d. a
  13. #pragma warning(disable:4786)  R, {3 C- U% s+ C
  14. #include <map>7 j7 c7 f! j! n2 Q, l+ [9 ~
  15. #include <list>+ P1 F# r  i0 y; H
  16. #include <direct.h>& s  \4 ~- a+ G# U
  17. " a. {, b- A4 P- P7 z# [
  18. #ifdef _DEBUG* T' [6 B9 R6 y. N! `, o% p
  19. #define new DEBUG_NEW" b1 T; O8 l: D6 P* C  Q7 n
  20. #undef THIS_FILE
    / V8 L. c$ D/ r1 K3 \
  21. static char THIS_FILE[] = __FILE__;
    + \1 u0 B' ?; I* o7 }" f
  22. #endif
    2 P: n# I! ^4 V8 d* a& p  i
  23. #include "SkinResDef.h"& X9 i( j- q7 q4 }, x: R! @1 q
  24. #include "ChangeBG.h"! ]! D$ l, i; L) L6 R$ q' T
  25. #include "AFXINET.H"
    : m1 m# U& k: @# j

  26. # k4 K5 U4 F, }; |* j+ n5 v# o
  27. #define TRADITIONAL_CHINESE 0
    ) b% Y8 q6 Q* h# D) L  n- P+ H
  28. #define SIMPLIFY_CHINESE 10 M8 ^' f( _/ ^' m; d8 H
  29. #define ENGLISH 2
    ! h8 |0 i8 Y" \0 O; g2 J& T
  30. int m_iLanguage = ENGLISH;
    & k" B" ^  Q' X9 ?" ^  ]
  31. /////////////////////////////////////////////////////////////////////////////8 {1 m8 ?" Z+ v# e2 c
  32. // CRevAppApp6 f" B- F, M+ G! d, r8 l# K& L6 \* Y
  33. ) H! n0 V  o7 [8 X) j
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! a7 Y. V% t1 d3 i6 z
  35.         //{{AFX_MSG_MAP(CRevAppApp)& T/ m! Z2 O) H
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / \) t# _+ m. j! P3 \  }
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!* v6 ]$ U' S4 i* _6 }
  38.         //}}AFX_MSG
    7 ~" X# y' f8 `( T9 X3 v0 {
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# u9 Y4 L/ v* o- R4 k1 B5 a  S
  40. END_MESSAGE_MAP()
    * R/ r9 d- v7 R* U, q
  41.   m: d! s+ ], N! \
  42. /////////////////////////////////////////////////////////////////////////////
    . Z4 B0 b" [6 t' ?
  43. // CRevAppApp construction3 S. _8 r$ w/ l; W. ~

  44. : ?8 T" E: u6 L; X' t0 w
  45. CRevAppApp::CRevAppApp()
    " m$ q6 N2 `( D$ P
  46. {
    2 f. h/ f9 ]5 [3 {) v! [
  47.         // TODO: add construction code here,, d: R; r- \6 k9 T& T/ ]
  48.         // Place all significant initialization in InitInstance1 P4 k, t0 A9 V8 M9 Z0 Y
  49.   bDisplayIsBig5=FALSE;
      l. i& ?- q9 w( q0 N
  50.   bRestartUpdater=FALSE;
    ( w% T- [  v; I
  51.   bFinishUpdated=FALSE;0 R( ?8 t2 a( T. J
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 ?* p3 U" m5 g! F( z9 H/ e
  53.   InitChangeDataBig52GBKS();
    / X% b9 q6 H2 |* s9 J) Q
  54.   InitChangeDataGBKS2Big5();# i, b; x5 |5 _8 R9 X# ~6 u
  55.         //4 f7 Q2 d2 R7 Q8 v; D: a; I
  56.         bClickRunExe = FALSE;
    ( s# }8 i1 H# u' _& A' B5 X: ~( g
  57.         //" w& k  H9 B1 o0 H7 I+ Y
  58. }
    6 o2 m7 A0 ~6 b* R

  59. 3 F. ]3 b5 B, |! @/ s5 p: o/ a4 ]
  60. CRevAppApp::~CRevAppApp()0 z& P% ?2 I2 {" G' {3 {) y! p
  61. {
    / n4 l" `) h2 [3 B2 B
  62.         // TODO: add construction code here,) @) H) L$ G6 K' s) t/ s. b
  63.         // Place all significant initialization in InitInstance) f6 `3 N4 x% X9 v
  64.   EndChangeData();
      H# n2 Q5 m3 k, b4 c
  65. }
    ' d4 Y" v$ H6 H* @7 d

  66. ( {0 T3 \$ a4 D7 z9 _
  67. /////////////////////////////////////////////////////////////////////////////
    / V$ `" s/ p$ x6 R
  68. // The one and only CRevAppApp object
    ' @8 M$ M8 F. b0 t( a7 r5 G* U
  69. ( L4 d. B5 S7 l7 E7 i
  70. CRevAppApp theApp;9 D- ?2 l1 Z0 w9 d1 d$ Q

  71. & [' j9 w3 T9 Z  `# }& h1 q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    : k, _# F2 {. A, B' j% r
  73. {4 ?8 X  C5 f8 h! N% o
  74.   int iEOF=0;
    . I; O& A9 ~& {: P
  75.   char szTempName[MAX_PATH];
    ) l; X, W" ?, B) A2 V
  76.   *szFileName=0;
    , @8 M( n% j3 z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & @  g0 k! l7 |' k7 T/ ~. Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) j" M1 a9 y4 k
  79.   {9 j8 W+ s& t+ H% I4 j7 O
  80.     strcpy(szFileName,&szTempName[1]);
    5 `/ N7 ?8 C& X+ ]: g
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 z8 v) G+ E$ W+ F1 _
  82.     {
    / [& f3 ~' A/ ^2 O) V  {2 h( p
  83.       iEOF=fscanf(fp,"%s",szTempName);" M" j: A3 K8 V9 d, ^1 {' c+ o. W
  84.       strcat(szFileName," ");
    # Z- Y5 E3 P" q
  85.       strcat(szFileName,szTempName);
    * Q7 G0 Z: {! U( W
  86.     }
    ( ]9 X7 h7 H* S& E
  87.     if(strlen(szFileName)>=1)
    ; @  \9 o4 C  y3 f: R5 S4 F
  88.     {
    ! q# z6 D' L4 Q. e) B, P
  89.       szFileName[strlen(szFileName)-1]=0;
    7 t$ s! i0 t7 t4 I7 R+ i
  90.     }
    7 o; g# B0 o+ ?& C+ Y
  91.   }$ U9 d4 W; _' V8 M( V1 L5 q; Y
  92.   return szFileName;
    ' b5 m; r. g% n7 r, D9 Y+ h, k
  93. }
    8 g; X- m* l: m7 l( @

  94. ) b2 H2 q6 K6 q: G' |) \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" Q# @- z7 C. V0 }: f5 u: q
  96. {
    2 A! ]  s' d$ F' t, W* r- x; U. s
  97.   FILE *fp;
    6 j. T/ T, E1 p( ^3 S7 N6 N2 i1 [
  98.   char *key=NULL;& G8 N+ _  w; R/ d8 K
  99.   char version[MAX_PATH];5 I8 T+ e4 }: G. x6 C5 Y
  100.   LPUPDATEFILE file,olds;
    1 X- U0 _  k7 F- |
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , [* o! q0 ?* s2 G5 d( }3 G1 f
  102. & H3 w9 j# n# E# H# R5 Z  ?
  103.   UpdateList.clear();2 A$ _; C& F6 P# p- }5 J
  104.   UpdateFile.clear();
    - F; L9 R" y, v# F# s8 S' w
  105.   if(GetFileAttributes(filename)==-1) return false;
    ! y+ T$ _; B, d( F, ~' U
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) |* i$ z, o+ n3 i' e+ q
  107.   fscanf(fp,"%s",version);: q" u2 q# J$ M6 ?
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: o' f8 c: Q9 Z% B  Z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    % _' o+ `$ H5 }) @, U
  110.   {
    * h- y( z, v2 P3 Y6 f3 c5 P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. i, t$ D5 l/ Z* s0 `
  112.     fscanf(fp,"%s",file->path);
    ) m' g- H8 U( c6 x8 @4 E# c
  113.     ReadFileNames(fp,file->file);
    5 b& _. x' Z. x+ u- L- o
  114.     strcpy(file->full,".");' P: u1 z- H7 y) M* H
  115.     strcat(file->full,file->path);
    , ^4 ^; \5 i9 N$ I1 P/ q
  116.     strcat(file->full,file->file);
    , ?& B2 _- S" s; R3 M5 H* c( C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())0 J% k$ m6 E0 a9 H
  118.     {
    ) @  C, a" j+ c7 F
  119.       file->vers=(float)atof(version);
    , g: t1 T& G. k
  120.       UpdateList.push_back(file->full);( w$ r) D& S/ [' A" d( I8 J
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));7 m& q5 k* k. ?
  122.     }; \0 N- p# q7 s- U$ w
  123.     else
    / a0 W% |( P! v: b2 I
  124.     {% L4 m- g( p* y. q0 r, {$ v8 ?3 `" K0 s
  125.       olds=(*p).second;+ Y1 }3 y; @  ]; }. Z' R: I' }, F2 P
  126.       if(olds->vers<(float)atof(version))4 b2 a) E1 N" E) K
  127.       {/ X7 ]6 u1 r) S9 w4 Y/ N
  128.         olds->vers=(float)atof(version);
    , p& Y$ S. y8 G8 e( T: a+ V) D
  129.       }! R4 E& W8 z4 }- d# X7 o7 _
  130.       free(file);2 C2 i5 c" E, C2 G7 d6 D
  131.     }
    & T. m7 j  f# V% [, R) x" Q5 {9 i
  132.   }
    5 o6 L2 L9 R+ X; j5 s
  133.   fclose(fp);" F2 {# N0 `2 l8 k
  134.   return true;
    : Q9 l% ^; `/ [/ y9 a4 n; g( K" `
  135. }5 x. V: W  W' @. s9 {; h; q6 z( o

  136. # b8 _- @% s. g
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    * S! @2 H% }+ X2 t. {
  138. {/ H( b! O" `& m. C* W
  139.   TCHAR  szFull[MAX_PATH];8 g' S2 u8 `! J! Y" w; K
  140.   TCHAR *token,*inter;$ R! G; [, z0 t
  141.   *szPath=0;
    8 e; _5 J! L5 b
  142.   strcpy(szFull,szFullPath);
    , e4 y0 k! F: n- U/ Y8 p
  143.   token=strtok(szFull,"\\/");$ Q3 ^7 X; o9 E5 c8 ^
  144.   inter=token;# h  j" O; b' t* A, `
  145.   while(token=strtok(NULL,"\\/"))  J$ @# L1 ?  x) r
  146.   {& `, l, r9 s$ I5 [# b
  147.     strcat(szPath,inter);
    ( n5 a8 S, I6 r0 @
  148.     strcat(szPath,"\");& }9 D  u: J3 e4 Q# y. a* r
  149.     inter=token;. v/ d/ @' e' ]: x$ M7 H' E
  150.   }
    7 v. Y4 v' Q( q8 y2 R  d; ]1 G
  151.   return strlen(szPath);: ^$ r  _; H3 o9 s: e
  152. }& V" A2 j  R# X# Y6 S# X3 b  e

  153. 1 h9 F' W: F0 B0 j0 F1 z. D% h; Y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ( X0 A( S! y- i6 }, e
  155. {
      c/ U) q- l2 I4 A9 v
  156.   DWORD attrib=GetFileAttributes(Target);
    8 x& o" v0 X9 V: w$ y6 [
  157.   if(attrib!=-1)+ q* c5 ^) c- a5 \% F
  158.   {
    " ?2 I. `" P+ {" e& d' H' n( G
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))4 F# F2 r( h1 R" u2 x
  160.     {8 i4 m' Y' \9 ~3 ]4 M6 J7 C1 H
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    6 f) e  w* r' ]. U: V7 X
  162.       SetFileAttributes(Target,attrib);
    ) ~. z/ R; |6 |" P" o: p
  163.     }% `* Q2 x( F$ J
  164.   }( A6 c. T2 F  c) J/ H7 H
  165.   CopyFile(Source,Target,Erase);# C7 h/ v: s. E! V, L
  166. }
    + L+ U/ i+ L- j$ Z
  167. ; O8 T- ^( q- o, m2 H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...), q. P) r8 E7 w' W, ?3 B6 W1 h  e
  169. {
    # q( q; h( ^- G, f& y
  170.      FILE *fp;. {5 `7 {+ e( U
  171.      char  szBuffer[8192];% C4 ]1 M& ?. y7 e# o: r* h
  172.   va_list  argptr;
    ! s+ d, Z0 j  P/ R

  173. ( z. |  @! x8 @, |, c9 T" G
  174.         va_start(argptr,message);
    3 v& C# r% }# U
  175.         vsprintf(szBuffer,message,argptr);
    7 [: n6 H# k" u6 A0 c, {
  176.         va_end(argptr);2 z0 B+ A& p) n
  177.   fp=fopen(FileName,"a");) f1 t! r5 E' [( W. P; l- _
  178.   if(fp)
    " [9 j: W, @, [+ q: B* m  W
  179.   {. w5 u4 K' k1 @8 }6 u+ f
  180.     fprintf(fp,szBuffer);
    / t" V* \% r7 h$ {. b4 D6 i
  181.     fclose(fp);
    - B1 Q2 r( j- S9 z9 g4 L8 H' Z" C
  182.           _flushall();
    % h1 K# m: y2 L8 t1 u* O% M
  183.   }
    ; v, v$ _  h! e6 w
  184. }
    " c. D; F* z& ?, l) d; q+ ?

  185. : J! F7 b" }- v( t
  186. BOOL CRevAppApp::Fclearf(char *FileName)* T, F* K! K  J' O% R
  187. {
    " \8 f  y# u. \. ]
  188.      FILE *fp;
    2 J# g4 V3 u6 V6 f5 Y
  189.     DWORD  attrib;: m/ W5 b2 U, V9 q
  190.   attrib=GetFileAttributes(FileName);
      B% C0 }2 E' r0 D
  191.   if(attrib!=-1)
    9 D4 T9 r/ C9 ]' g& W! _
  192.   {. Q" I% y) W; \1 `7 H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    2 p0 v5 r" H8 g6 U
  194.     if(!SetFileAttributes(FileName,attrib))+ u: V) X7 G7 K1 M
  195.     {
    3 l' S& W$ q: W% ]
  196.       return FALSE;4 g7 h7 G' N# W. R- R& P  _
  197.     }
    8 n( @8 |' _+ _' R% r; A% T
  198.   }- M+ G( V5 i1 A  U8 z1 s/ e
  199.   fp=fopen(FileName,"wb");
    / w! g4 `) w5 N9 w% o2 I. j
  200.   if(fp)& c% J; P+ g8 l% H& r
  201.   {' u; X/ r: y# B$ b* n5 b' d
  202.     fclose(fp);6 Z* J' H3 s. g, x9 T5 h
  203.   }
    - z; c  l/ ~, z
  204.   return TRUE;
    1 e$ ~3 q8 L, p# \
  205. }
    , h: Q' t4 `. G6 d9 H4 m

  206. * i) t; Y& J% \0 A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    8 e# m) Y% s, ]7 P! ?& C( h0 D
  208. {
    - w2 p$ ]! Z" X# _1 W; J5 A
  209.   char filename[MAX_PATH];/ D7 L' `; `, m" r
  210.   LPUPDATEFILE file,olds;
    . t4 ?7 v8 ^1 k1 M5 y" ?
  211.   std::map<int,CString>::iterator i;. p% B, ^, _' n% c' q: b7 }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;4 ?- S# P4 R. @: N
  213.   std::list<CString>::iterator l;; C8 ~! }" _& o( z3 l% s
  214. 0 ^6 [+ o0 C1 ?7 {2 ]& P
  215.   if(bFirstUpdate)
    & }; B' B+ V0 o5 y  P% V
  216.   {( X' N* {( R2 D- _2 j
  217.     dwCurrFile=0;
      ?; d& I4 N1 Q$ r+ k. s6 C
  218.     bFirstUpdate=FALSE;
    7 P* k. l( E( n! }, @5 ?' ]) `
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " h% j- d& v' ~6 F  e7 f
  220.     {% i" k8 [4 `# a9 N
  221.       dwTotalFiles=UpdateLocal.size();
    / y2 T# o$ _5 u$ y8 R( N* n3 h
  222.       dwDownLoaded=0;
    # G6 N) t; }/ n% f7 u2 z3 v
  223.       bSilentStep=FALSE;
    , d/ }. @/ w3 s7 H  j
  224.       bCompressed=TRUE;; F' t8 I$ q! B/ m
  225.       strExtLocal.Empty();' c2 |- G/ ^3 V  u
  226.       strFullName=(*i).second;# q) h/ a& e+ n# C
  227.       dwProgramState=AP_CONNECT;' i! O! C. S9 D' ]  i2 r
  228.       return TRUE;( t, n- @" K/ j$ k2 J9 }4 ?: X2 s
  229.     }
    " \( m, B. }1 `+ @4 J
  230.   }/ Y; J5 r0 I0 J. M% e/ M8 a" P3 w
  231.   else if(bRestartUpdater==FALSE)
    4 a/ G5 z5 k& @- X" M/ b; |
  232.   {
    1 c+ T' W  b9 t; d: j3 d0 Z3 Z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 P* v3 n" t% C& ]/ t
  234.     {
    # a1 p; K& E0 S
  235.       file=(*p).second;7 Y8 r! w3 e; H) Y* V; B
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()); @3 l7 G: I! p! S$ v9 C9 t; L' X2 K
  237.       {8 C' f- j& G4 r! O2 q) E$ d
  238.         olds=(*p).second;  C8 F1 c. z  M( U  C( y
  239.         olds->vers=file->vers;# u: b1 M, |0 `4 u* p+ b( S) H
  240.       }4 _4 Z/ ?) z& j
  241.       else8 v% i7 J- a0 V  D  b# }5 J9 [
  242.       {
    % N6 Z" p3 F# V) x& {. t
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: M4 S& K* \# W/ J
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 k2 g! M$ {) d7 X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" P$ V' G+ g" T/ b& Z
  246.       }
    ; W5 t# u& _1 J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    3 Z' h1 |. L0 s  N9 s! Q+ Z3 W; x$ b
  248.       sprintf(filename,"(%s)",file->file);2 P! n5 ], V. E) F! b! q+ Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) [3 T& t3 ?6 K
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; J6 X; D- s3 N3 Z+ ?) k  C0 w5 v
  251.     }
    2 z: @$ `- Q" H' k
  252.     dwCurrFile++;+ S2 l" ?9 R$ ]3 ]. U0 o3 C
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" N. b; P% S! V& r4 d) C/ g- p
  254.     {
    8 s5 V- X6 R' G2 T
  255.       bSilentStep=FALSE;
      }7 C7 }6 x6 g5 J
  256.       bCompressed=TRUE;* ^2 \; g" \7 y5 `; a" z# ?7 [" v
  257.       strExtLocal.Empty();
    3 _+ e8 e8 `. C; `
  258.       strFullName=(*i).second;7 D, Q) u) C- M
  259.       dwProgramState=AP_CONNECT;
    ; N% c. C$ ^( g: x8 w
  260.       return TRUE;
    : t' j% i! {& u& A- p
  261.     }
    6 B' ^9 y7 ^/ _1 o8 B
  262.     if(!bRestartUpdater)
      T$ D8 ^, m: |9 m& R3 l
  263.     {
    " T8 L' \8 m& C; s6 }3 [5 J
  264.       int iCurrSize,iFileSize;
    6 p/ Z* {) B# U7 ]0 I8 u0 J* z
  265.       iCurrSize=0;
    4 ]/ O6 B0 A: c. |0 P, }- D- h
  266.       iFileSize=UpdateList2.size();. j; s4 y9 t% W9 ?& s
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    * `0 ?7 C+ u0 F0 Z. y8 W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 H. a: q; n- Y0 G# e0 F6 O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");6 D) Q9 I: [$ h. y: d& F
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 Z4 W6 s0 m8 k2 @1 }
  271.       Fclearf(".\\update.dat");
    " a0 O. A7 _- c) P% v2 ]- Z
  272.       Fprintf(".\\update.dat","Bloodyf\n");% W  j8 \2 \" U2 {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 ^9 u$ Q& X1 v9 b' H# {
  274.       {5 m( j% l0 Y* [4 `0 x# f8 b
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  N1 @4 h9 z; @, p+ \- b( z
  276.         {
    2 H) l4 l6 d! q
  277.           file=(*p).second;1 N* m7 Y) ^7 M1 O- z3 b
  278.           sprintf(filename,"(%s)",file->file);% |. }+ c( ^/ j: C  a4 y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 |# c. M3 {8 A3 p1 `; i0 O
  280.           iCurrSize++;
    ( u) x* ]3 M1 I$ m$ @9 ~
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ c; j6 C9 S8 K/ M' C  G: J
  282.         }5 ~2 D. M( R/ K8 b4 r
  283.       }* I* E$ q3 m0 J7 S
  284.       unlink(".\\update.txt");2 |* F. L: x. |4 j
  285.       unlink(".\\update.tmp");
    8 |- j7 l; G8 m) k$ F* S5 M+ m% z
  286.       Fclearf(".\\checkversion.dat");
    " m0 l! w- p2 X8 V, }' f
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    9 g" b1 i4 R  ?
  288.       if(UpdateLocal.size())" }! `0 O) |( T! K6 Z
  289.       {, n/ w8 W, ?0 {
  290.         UpdateLocal.clear();
    - l& o6 |" o7 u
  291.       }  c9 n- f- u, V* U' `. W
  292.       if(UpdateFile3.size())+ j, B- I7 h7 _( Q2 g% m
  293.       {
    % \7 ]+ x" M1 e0 S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)( t5 Z: W8 t5 d* S  v! P! k( X
  295.         {
    7 k1 z* H) D, m: P( e+ z( G, q
  296.           file=(*p).second;
    : H9 O. i+ G5 o+ a
  297.           free(file);9 J/ m6 ]- \3 D+ d/ G  c- Y; g
  298.         }
    5 L& o& o6 J" X. I; L' `
  299.         UpdateFile3.clear();+ X; G4 F, F. p2 R, x* h
  300.         UpdateList3.clear();" b- I6 g( Q4 y9 H4 H7 Z- J  E& i2 x% n
  301.       }
    0 S$ P% n  s& T& ]9 c3 H
  302.       if(UpdateFile2.size())5 u( b% E/ A! n% \
  303.       {1 n0 q0 N$ S1 ^: L( F0 v) s% G
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) E8 t: m+ e" f6 M
  305.         {  W" a' h1 u; p3 H' R( x
  306.           file=(*p).second;8 |" c9 q3 ^& S& i0 d
  307.           free(file);9 s$ N1 T+ T+ m6 B- s" D7 o# C
  308.         }# e; d9 i) t* N' c0 H! Y
  309.         UpdateFile2.clear();+ a2 _" s  H/ _* f5 @4 q, r
  310.         UpdateList2.clear();
    . v1 X2 _9 _7 g9 I# d$ c
  311.       }& ?+ c' |2 X7 h$ m9 E
  312.       if(UpdateFile1.size())
    ! I6 f  V. b! k! D9 i2 x- z
  313.       {
    5 i" k( |. S8 t" O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* P; U, ?. ]+ {' E5 T
  315.         {
    3 H% s) M( i5 x4 J/ c& T
  316.           file=(*p).second;0 O/ A! r) o2 ?; t" n
  317.           free(file);
    6 R% h! O/ Q6 S4 E9 X! `+ q* p
  318.         }
    ; z$ c$ D/ N3 k' f9 I! L$ V
  319.         UpdateFile1.clear();% Z" r0 Y+ B4 J1 j0 M* a7 o8 ]
  320.         UpdateList1.clear();
    / L7 @& P' E3 ^( G5 y
  321.       }+ v9 B$ f" C4 i( |# V" d
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 _* \$ _5 r6 n* G5 C: g; N! @! A
  323.     }8 q& y# q3 M% _1 K0 j0 F
  324.   }
    3 ]- m/ L8 o" f. o4 j. j& _" m; c: Q- i
  325.   return FALSE;
    , n/ p/ X: n; ^0 {3 \
  326. }
    7 v0 X0 X+ Q$ A* V: E
  327. % `8 x8 d: O! x; f
  328. void CRevAppApp::ClearAll(void)
    ) ]* j; U6 p  x  i
  329. {
    6 X. H  ]6 A1 }: M
  330.   LPUPDATEFILE file;' }  L  R/ ]. \4 ]; ~, |2 X
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 m# V# q% o$ }

  332. # s3 k" K0 ?; t" F( x9 F9 K3 ]% L
  333.   if(UpdateLocal.size())1 T) ?& R# S% ]) \1 d; o/ Q1 T
  334.   {: M. t5 ]3 o2 N& _7 T2 \$ W
  335.     UpdateLocal.clear();# P) t  o; s3 v5 ~
  336.   }& F1 b* ?  m5 k' o  |
  337.   if(UpdateFile3.size())6 F9 a: b+ }: V
  338.   {
    9 H& i. ~* |' L7 D1 [/ a% W
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ I2 m( s, A+ V' z5 o
  340.     {0 i; E# w+ E! T4 ]
  341.       file=(*p).second;
    8 e3 e6 P3 t. n! c. z( j
  342.       free(file);
    : R; |/ o& O' n7 U( Q8 z& |6 o: {
  343.     }
    # z$ t6 k& \* q2 N2 C' t7 k8 c
  344.     UpdateFile3.clear();5 Z' k8 }3 @4 o" B2 I- z' T/ x
  345.     UpdateList3.clear();& p& d. K- k7 A3 Q; I1 h$ }7 v. E! H
  346.   }
    / l2 D- {1 a. S# F8 D, `; H) b
  347.   if(UpdateFile2.size())8 _: G8 o0 g, G0 R  Q7 X
  348.   {( l+ e/ K" i# p' M: E; Y4 i
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 [9 Y7 V! E/ Q
  350.     {
    & \+ W: x" Z, z8 P3 M
  351.       file=(*p).second;
    3 W3 \7 ?" w1 q- K4 q6 L9 _
  352.       free(file);
    . [& @! D# y7 j. {' r
  353.     }
    " f7 q& e4 L! _1 s! [
  354.     UpdateFile2.clear();
    : U: S, C0 l/ I
  355.     UpdateList2.clear();
    ; v1 a. g: `7 H) P2 j+ j6 Q3 Q' T
  356.   }
    . u3 ?- c: h3 h
  357.   if(UpdateFile1.size())
    * |5 b8 P( p' V
  358.   {
      C0 N- J" W( @* n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , _; w- X) [" T- s/ [  y
  360.     {* x( G  B3 [# f2 n" u
  361.       file=(*p).second;
    + w+ z) F5 }* k
  362.       free(file);
    $ l3 W( X" ^0 s$ z- J& H7 D
  363.     }
    % I& r& W6 p/ u0 A) O5 u
  364.     UpdateFile1.clear();7 m/ U/ M* x+ r: W/ P0 l% ]6 ^
  365.     UpdateList1.clear();
    ! D! J: o& Y4 O$ `$ y, h7 C
  366.   }9 o3 V) y8 Q7 D- q7 S
  367. }  
    ' P4 w& A7 l  M( |$ b7 {1 U" O' {
  368.   ( E* B" b0 Q8 j  F' o( ?) X0 V& a/ p
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . L' S  \  O/ Q- B/ K* J. q" }- L
  370. {
    2 ?2 |3 h% i5 a. _% J8 b
  371.   int c;) p* J! s, A% K3 f% A7 E
  372.   LPUPDATEFILE file1,file2;
    8 W6 j( A% {; t
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 X2 X8 M7 k3 v  O  N- P
  374.   std::list<CString>::iterator l;
    & [+ d9 Y2 ]' i' R9 r  L4 [: L& _

  375. & _9 P  U, R+ ~: r$ x- f- @( |
  376.   UpdateLocal.clear();
    ; B7 K* _) u+ Z% `. N; P
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
      B7 _- a) x$ Y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 z, }5 H; K8 c* u1 g- E3 C( t
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + b. _5 n  {6 e. O9 |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 N. Y  p% W& N. m+ L1 K9 i
  381.   if(UpdateFile3.size()). b3 ~* S8 v  v1 r& Z# u
  382.   {
    ! {* T! }. M5 F4 m' a; v$ n9 a: F
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    4 L/ |7 m2 z8 g
  384.     {+ g! ?( n4 V8 P4 o8 F) W: m: B1 S
  385.       file2=(LPUPDATEFILE)(*i).second;- b, t! _# Q- N5 Y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # I) t# c, S8 C
  387.       {8 I0 a% v9 O9 O# o$ c+ T
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 e7 I3 ?! ~. ?5 _1 L
  389.         file1->vers=file2->vers;1 N0 y" ]$ [8 i; X
  390.       }2 b/ L7 j' B7 O  C4 T1 s
  391.       else+ T! u( |' N) S4 _" Z$ q0 i
  392.       {
    , F, q( c/ f5 S8 z3 T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- i6 d$ _8 X9 z; n' @+ ?# y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));% I9 `; ~! R7 m2 t: D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) b2 C! e% G+ B1 \* ^
  396.       }
    * g, z% l0 b0 ?6 f
  397.     }4 C; e2 f  }& l" ^
  398.   }; @. h6 b4 j0 d/ I7 @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - X  v+ v5 H$ m+ V  G. y: Q$ l
  400.   {( Z; X/ W2 m+ a7 g9 N$ n8 `. \! [, ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 E( a7 E5 H5 S9 N7 ]$ `! f: a
  402.     {0 \; g8 C& L$ a4 M' u
  403.       file2=(LPUPDATEFILE)(*i).second;
    & ~# {' h2 G! W' _
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! E$ u4 I- G& G) T, v5 e( B2 U# v% g
  405.       {( @6 L- m: N% _
  406.         file1=(LPUPDATEFILE)(*p).second;# L" X) Z0 z! I: J
  407.         if(file1->vers!=file2->vers)
    6 g7 _; A5 W4 Z/ E: o
  408.         {& R0 I8 ~! i3 Q* j8 a
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));: r* Q2 e- s2 s( W
  410.           c++;
    & [' I3 }1 @6 S3 M4 G" k
  411.         }* s1 {; Q3 N- E# M$ y
  412.       }- C1 d9 e" U( c8 F3 d! G2 P
  413.       else9 _+ M' l  p) {
  414.       {
    # {! H' ^+ E% o8 s# w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) x' K- o* }( \$ D& ~$ \! C
  416.         c++;
    & N' W1 t4 k" h. \& Z  N" e  Y7 d
  417.       }) @+ L0 P5 Q8 B
  418.     }0 L) x. w; {1 p1 g* l; O/ n) r
  419.   }
    , E. K  l: n4 s, P3 S1 A' z
  420.   unlink(".\\DownLoad\\update.txt");6 K. H; D! u4 |/ d8 n
  421.   if(UpdateLocal.size()) return TRUE;
    , Q4 Z$ w6 M: K( p1 k
  422.   else                   return FALSE;
    / I3 U% _; Q: D" ?8 v4 }; q: h1 \5 Y
  423. }
    + Z" G+ U- z7 l) w, P& L6 r
  424. * Y6 n$ U! b1 B0 [; v
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' M9 o' A# Y" |6 C  K; {9 b2 `
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  F0 o- c* I# l
  427. / M. I. J& I3 b7 ]

  428. 0 ~; L/ M2 I4 k! v1 T# [' B  ?1 m
  429. ; _' b( ?' r7 o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    , `* C! A7 K. L, }/ m
  431. {
    : k/ K, O" f  G7 [# ?
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;3 Q  [) s( A7 r$ a9 M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 m: f8 c& y" g  O5 G
  434.   {8 d/ z) s4 m5 n. o
  435.     char szLanguage[50];
    + A- O# W+ j- y! O" r
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    . z# @1 t; U2 x
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 w  h# I/ K3 v- j+ w
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 I( i9 V  ?( H0 ?6 w
  439.     else                                   m_iLanguage=ENGLISH;
    " ^9 w9 ]0 M3 b: ?1 b6 B3 e
  440.     char szRegister[100];
    : z1 L( N: L% r% t
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' d0 A- X; s) B" O( [
  442.     strRegsName=szRegister;
    8 F* j! U8 y) \, a: o
  443.     char szPatchURL[100];: U7 F' t2 K3 w& f1 q
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! _7 e0 ?3 `- }# f* t6 _8 ~
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - j. H# `2 @9 ^! \% _( I) d
  446.   }  H2 d8 ^- ^0 ~0 x( p& `2 q
  447.   else/ b$ N! l/ S& I' E
  448.   {& M, B" |, r9 b
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- d* w( K- L2 X' F- t
  450.     strRegsName=DEFAULT_REG_URL;
    : w- h# E. x; \2 P
  451.   }& {% H9 t  C& _4 A4 P% f
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    1 |/ T* u  ?6 [5 B9 `4 O
  453.   {
    $ H; t+ ?+ d" F/ g
  454.     char szIP[50];) o* |: J1 @* Q2 A, K) Y
  455.     char szDIR[300];
    ) r7 p! N) h1 [4 s: j
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    3 m% ?! E% e% K7 G% t' K- P! f
  457.     {* [" r4 W" }/ B
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, a) K+ U: }- n! O& \
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) F9 G  C- _- k: I. I
  460.       strHostName=szIP;
    : X! g" J7 T  U# w( T( ?" z
  461.       strHostPath.Format("/%s",szDIR);
    " @% n0 _  |8 c. `7 Z
  462.     }
    ; K2 u+ p+ @) x3 X+ r
  463.     else
    . ^% h3 a, u+ ^- U0 \( I& Y
  464.     {( ]' s% J8 S5 a! U1 {9 Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)8 \: a- I9 O6 X$ |8 \8 [9 J
  466.       {8 ?$ _+ u  L% m& F: {
  467.         char szLanguage[50];
    # x8 z- U' f! K7 z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 Z/ V; m8 R/ o) q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: s7 h! \- r9 O, }
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 Y% J3 \- v- L% K  V; q& k' S
  471.         else                                   m_iLanguage=ENGLISH;
    0 c6 w7 N! B* u. G. Z" M4 c
  472.         char szRegister[100];) ^. L: R) [' K4 {- @) k
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* T  _3 `$ J+ I
  474.         strRegsName=szRegister;
    # N# [, T+ E/ E& L+ n8 H2 r
  475.         char szPatchURL[100];
    * b: ~5 g4 W- K; c3 y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# T- v8 u2 y$ ?/ t# e0 G2 H! t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# R" I2 B$ g8 X6 x1 X4 d
  478.       }8 r/ G; e; _2 _8 J. B. b" d8 F2 N
  479.       else
    6 H6 j! V% T' y
  480.       {
    ( w* F% \3 Q6 |1 f! \$ r5 t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# P% K5 C# _2 l" g! f& ^# L
  482.         strRegsName=DEFAULT_REG_URL;
      D% M+ R' t% @: a- O; g
  483.       }2 L8 ~# K. Y! P6 |
  484.     }* |* [/ K2 }( p, l- J! `
  485.   }
    7 M1 k# Y( X8 M" q# \- k
  486.   return true;
    & E5 Z( J  s& ~2 x$ B
  487. }6 C) ^0 F2 D9 P# O0 }5 i/ f' ?

  488. 1 Z6 `' Z1 c1 [  `# B! _* x5 Q% R
  489. #include ".\ZLib\unzip.h"8 \6 O) B) u8 U3 S: G2 T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    9 y! k* e$ ]: r2 u' U
  491. /////////////////////////////////////////////////////////////////////////////+ k7 _" c. {3 y8 f$ z
  492. // CRevAppApp initialization7 c  B4 ?; t& P1 L7 C6 }

  493. , s" x; o! G8 x* g! Q4 K, c4 Y
  494. BOOL CRevAppApp::InitInstance()  g3 {7 G6 q) R0 _7 K  P/ J
  495. {
    7 b0 L0 f9 j! x( f. r
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, U1 {: X8 k# O$ C  Z) n2 c7 ~- C% H
  497. % @( Q6 Z, S4 R4 j: d
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    0 A  Q$ j, ~4 `3 y3 D5 P" ~* A+ b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . H) Y/ L& x1 e( r% X  |: j+ I& F
  500.   {3 h8 p. J; Y3 D4 P  R' E3 T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ( K% S6 P* q8 B$ Q2 T5 S, N2 |# t
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    / M8 ^) d! D4 A7 ~
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): U6 u8 D8 ^3 p) D6 U
  504.     {
    5 P1 N0 n" h; g2 b, m! W" e! }
  505.       strcpy(szPath,szPathTarget);
    % O) g. B  m1 I
  506.       SetCurrentDirectory(szPath);6 S0 E4 U, P' v/ {. \& u0 z
  507.     }
    ! y" I% u& H. {7 H+ D/ f" x1 p/ ]
  508.   }
    , E9 ?( t5 x0 ?
  509. #ifdef _DEBUG. D; f: `$ |; l: v0 q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) o, O. C0 e2 A( E4 @3 e* k. m
  511. #else
      H  e* N( H$ ^1 L
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 }- |, k5 z7 O9 A/ S
  513. #endif) t( P  ?  R# u2 a2 d4 [# J
  514.   {
    ) x& l6 P' t+ L+ a& q2 ^/ @
  515.     char tempFileName[MAX_PATH];
    & ?7 j4 N) i& N
  516.     strcpy(tempFileName,szPathSource);3 r4 A3 V/ y2 h
  517.     tempFileName[strlen(szPathSource)-12]=0;( ^4 `1 ]; k% _! k9 a+ O: j$ C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & ?# N0 k0 V8 S) b& v7 N
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 o1 Q' K+ {  i$ X2 g% V
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    - {1 Q* P/ F1 r9 j
  521.     return TRUE;9 `$ T) [! V/ f1 U" c
  522.   }; D* Q9 m# O) U5 J4 p. u( N
  523.   // Nuke 0118: Delete run.exe  Z/ J4 O3 w+ E$ p1 P. v- n+ P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );) z1 C2 \& }1 ~0 Q- o3 ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");# T4 _8 K5 \# x$ U( E
  526.   if(!ReadCfgFile("Config.ini")); B( J, ^( D5 L$ C; N
  527.   {: X0 x, y9 j, M5 w+ h+ v
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 H: ~+ Y! n$ M
  529.     return TRUE;  |/ k) c2 g4 ~& o+ n
  530.   }0 |% M8 _& G4 U7 F8 h6 G
  531.   HANDLE mutex;8 b, Y( l, `( {# ~# h- \
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 K$ G; h' y% I; E2 j* S; V: V5 N
  533.   {
      v+ ^2 ^3 V( h6 G# ?) O8 m! ]1 p
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)6 Y5 }0 f& _  K6 B& w
  535.     {
    ) b) X7 X3 f$ ?! [( _
  536.       CloseHandle(mutex);# n+ g8 N+ A3 e6 z' H& i' a
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, F$ E. t0 [7 `/ d3 e
  538.       return TRUE;" Q- C8 {' z5 w) f# k
  539.     }' M5 J& I; \6 i. J. a, C
  540.   }  
    2 K5 d  |  T0 w
  541.   CloseHandle(mutex);
    9 b# s3 m& R/ z0 m5 g5 j( f

  542. + }  i4 v/ q; W7 `# D( ~  H& B* b
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ' L+ T, D: F% B; s: l

  544. 0 ~$ x* t& r, r, x4 B" b! t
  545.         AfxEnableControlContainer();8 B( I! e& T. L7 T, p% ^

  546. 2 T) x$ Y7 j, j$ a
  547.   bCanUpdate=FALSE;
      [0 r7 o1 {5 s$ V
  548.   dwStartUpSteps=1;8 I$ _+ ?" {9 |0 t
  549.   dwProgramState=AP_NOTHING;
    1 o' z" K* w" p* z9 n
  550. 7 J6 |7 X, }- y7 k( C8 d
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ; V* B, Y4 q- G/ k; c1 i
  552. $ E, x, I- O% |% e4 C) K
  553.         // Standard initialization; n* @6 L6 [; m" F( N% ?
  554.         // If you are not using these features and wish to reduce the size; s1 r4 g% W) D5 v  h- l
  555.         //  of your final executable, you should remove from the following
    + K3 T6 M) g& s4 n/ T* H
  556.         //  the specific initialization routines you do not need.
    2 D9 Z# c4 y& Y+ |1 H- c# ~: Q

  557. % d  _3 [7 w/ J# m! ~- ^
  558. #ifdef _AFXDLL
    ( x0 q! r1 r4 d
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ V# ?0 `5 S* m) E3 O1 u7 H7 \- A  }
  560. #else6 `! R, p) O; L1 R0 ?
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ) ^% D- ~+ Q1 F7 r% `
  562. #endif7 b( E7 [, R: R) x8 ~6 C

  563. : z. p. h- D9 o. D. B" W; g
  564.   dlg=new CRevAppDlg;; j2 [" O: T: M3 s9 t1 o/ Q/ }% `
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 g! V6 j" q: Z+ \" u
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    4 L' o7 u: M5 d
  567.   m_pMainWnd=dlg;+ C6 Z* d1 x8 ?* B  a2 u6 O
  568. $ C) }3 f/ y" G& M( L, p, ]
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);0 y" J* _: z7 S( w$ q

  570. 2 @: Z  g8 I, B+ {; Q
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; m  T0 O9 l- k. d3 x# B& t
  572. //  ULONG_PTR gdiplusToken;
    2 @7 K& K. K: J9 ^7 f, d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);6 W; G1 ]6 b2 q8 {0 k! ^

  574. ! D' P; G' V7 j. Y1 g
  575. //        CRevAppDlg dlg;% C2 v* k7 g, q+ r6 F
  576. //        int nResponse = dlg.DoModal();+ c2 I! M" k% a5 A' S# ?
  577. //        if (nResponse == IDOK)
    & a- b4 f: E/ @1 W. J
  578. //        {
    ( F# z  R5 f& q1 Z( q# ^% s
  579. //                // TODO: Place code here to handle when the dialog is
    ! N6 Z! X9 J. K& o* S
  580. //                //  dismissed with OK% n4 C! X. F2 T
  581. //        }' N5 R% \1 F4 k% Q' C  o
  582. //        else if (nResponse == IDCANCEL)
    # S- ^0 g7 Y" e) U3 b: J' ^# X2 n
  583. //        {
    2 }- [$ c/ ^; Y" B) }3 \
  584. //                // TODO: Place code here to handle when the dialog is# s6 o( q8 a& L& o  z+ W, {0 Z$ o
  585. //                //  dismissed with Cancel) x9 c( Y! ~; ~6 @
  586. //        }4 X( t% [/ B8 J4 y7 m/ p" [

  587. : l2 a6 `- H3 E0 Y0 N! E; u
  588.         // Since the dialog has been closed, return FALSE so that we exit the" S& `) i2 |# Y$ G. ~# |  Q
  589.         //  application, rather than start the application's message pump.% H4 y( Z+ j1 m, Q" b
  590.         return TRUE;5 N6 P, q5 x" q  A
  591. }5 X$ o& G; O+ I9 {
  592. ) g7 n9 E6 c* N& n
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ H7 W+ L7 B( O. Z
  594. {
    $ m' m" ]1 J9 `5 C: {
  595.   int i;
    , C" w( E) x# D% ^$ l8 W& {
  596.   char *szRet;
    / S( R$ N. f+ M2 X, |6 b5 i

  597. + d* [' V- l" f* w
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 K( \3 `0 s+ D( B0 v" F
  599.   if(sztoken)
    : v+ C8 k* ]1 \9 u/ B1 e
  600.   {- F- l8 c; N: p/ g$ b
  601.     szRet=&sztoken[itoken];( g$ R  C# B0 J9 f- s7 Z
  602.     while(sztoken[itoken])- G1 c: P+ }4 o
  603.     {$ D* {5 B. O0 l# e
  604.       for(i=0;i<(int)strlen(token);i++)
    0 s0 B- U% H! D5 n# P( d9 @
  605.       {9 Z: A( D4 e- K/ B
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]): y: T2 W) Q" T  b! Q
  607.         {1 R9 V: E# s7 Y2 m; C
  608.           sztoken[itoken++]=0;
    8 B& W& d7 B3 {) J+ L7 G. J
  609.           sztoken[itoken++]=0;; |, q$ @; B& @9 G
  610.           return szRet;* G! w& Q; K3 W6 \
  611.         }, r& V- p( g0 |. o
  612.       }
    ' ]. j" ?/ b- h& K9 X1 n, ^; c
  613.       itoken++;" {. Q. d: V1 A8 @" D. {
  614.     }
    : Z$ I; d1 ]4 U; J. q& `' u- \
  615.   }
    5 }) w: I2 m3 [) c8 m; f
  616.   return NULL;
    6 s7 ?7 e! |" {5 [
  617. }. c4 b: J. W1 q! o. J$ D5 R

  618. 6 F3 F$ |, a& ?* O$ I
  619. void ProcessProc(long Total,long Current); x( G& L, t, t
  620. {
    ; v0 M0 k1 L: R: q/ P# X$ E6 Z" Y
  621.         MSG msg;6 C; _- Y3 }+ q0 ^0 S6 i
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    " @& t0 r1 S8 p: |1 u
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 V9 v( x% M, u/ R/ `
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + e7 s- @! y/ r
  625.         {/ W" c* [6 v2 N% s0 o
  626.                 if(!GetMessage(&msg,NULL,0,0)), \7 C2 D; p. H# b3 O( _& l- W
  627.                 {  K% H$ ^2 c0 H+ G8 o1 F9 C
  628.                         return;5 A5 V7 B! X  i; ]1 ~( p8 s
  629.                 }) z' x- s$ T: H( H
  630.                 TranslateMessage(&msg);9 S8 c$ s) f/ _5 [& }8 i; K; l
  631.                 DispatchMessage(&msg);
    & Y# l8 o; F. m) `
  632.         }       
    0 w  c0 b% O& i; O% I% t& o
  633. }* X5 s/ }5 {1 r9 c! `, `' X

  634. 5 W" p* m' G3 ^; Z
  635. BOOL bFirstChar=TRUE;- e- P! R5 a9 F' h. c
  636. , h$ @/ H" O# U7 a4 Z9 l4 R) q& u
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    / b+ y, T! c4 v2 D6 i
  638. {
    ) }+ k( \, D5 C- |0 q5 t
  639.         // TODO: Add your specialized code here and/or call the base class, ^% L- i3 }. L
  640.   switch(dwProgramState)
      P5 v. T2 b# o' |
  641.   {3 D) U/ x; \* b
  642.   case AP_NOTHING:
    + ]% A! T" a0 a8 w  {- w# k1 y
  643.     switch(dwStartUpSteps)
    ( O& A$ [# ^$ C( a: K7 Z* k
  644.     {" j1 D& [) O3 l/ Q
  645.     case 1:
    : a! F+ ]# y- ?* C6 C# [
  646.       {
    # E  }; I- w5 q6 r* X4 U
  647.         int i;: q1 h( w! X+ Y9 P
  648.         CDC *pCDC=dlg->GetDC();
      [4 A! _& u& H, G0 e% u- ?" b  K) O9 i7 B
  649.         HDC hdcwnd=pCDC->m_hDC;( L) |3 k7 v) {: \/ ^  r
  650. //        Graphics graphics(hdcwnd);$ N% \; ^. I& ^; p( J* B
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 `5 _4 Z9 w4 Z* V7 I( a
  652. //        INT iWidth=bitmap.GetWidth();, c+ J) Z& @  b9 V( X$ d
  653. //        INT iHeight=bitmap.GetHeight();
    1 ^1 ~* W- g+ Z$ S4 F
  654. //        Color color,colorTemp;# j1 ~+ S6 M. t7 L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)  W5 J: E% \7 [# o( B1 K/ j( K
  656. //        {
    ( v: R, X* u# }, D2 x% Y$ b& Q9 o+ \
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * v7 R+ k' k8 I2 B* ^* Q/ ~
  658. //          {6 j! n/ U4 H7 `4 q9 Y1 }8 b4 U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; a  ^* r& _9 m7 T; Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 l" E+ G: b, n# J8 n9 i
  661. //              (BYTE)(255*iColumn/iWidth),+ v8 E& G' ]4 y2 i) p+ W+ B; ?% z" Z
  662. //              color.GetRed(),
    % P* w) V' S- \# }/ {
  663. //              color.GetGreen(),- R! y0 F4 [/ o6 A( T/ T
  664. //              color.GetBlue()));
    9 v9 v3 K; T6 S
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' W6 B& p+ s; s5 _3 s' _
  666. //          }
    1 t2 H2 R( z! Q
  667. //        }
    9 `3 A7 X6 G0 ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( B8 U* }, Z) F( j7 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");4 r5 s( p- G/ f9 A. \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* H% I  `5 I" c! s+ ?6 w
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    " Q! l- H8 `1 ]6 f9 M  D
  672.         for(i=0;i<240;i+=8)
    : m3 n9 D9 J/ d- N& }
  673.         {
    3 c/ H) @8 g& O& r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' V. A+ F# Y0 J' I5 o+ D
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' R. h# m. ~; X* l) @
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& I% M6 h' p4 ?: Z3 L8 T! p
  677.           Sleep(33);
    $ D! W! j0 i% A+ L: V
  678.         }
    6 v+ V: t4 r" J  _
  679.         Sleep(1000);0 E2 n& L" p3 o! R  o4 M' y
  680.         for(i=240;i>0;i-=8)& _" |% p: D  J6 s& Q/ L' h8 E4 @
  681.         {
    ) e& t: U( X# d" e) d) m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! Q6 u3 v! v; q5 S3 x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' p# N/ A+ G# S, ]
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 U8 a! t. Z7 k5 u4 @
  685.           Sleep(33);) f+ V  q% }: W& d, P5 |, ^/ Q7 {
  686.         }
    : C4 w* Y7 q- `  g' s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 ?, v" Q/ u) q, n1 S$ N
  688.         dlg->ReleaseDC(pCDC);# j  ?9 O5 y8 }6 ]0 i8 ?4 i1 I
  689.         DeleteDC(hdctar);5 `2 x. @0 c5 t: M0 e
  690.         DeleteDC(hdcsrc);/ X1 ~9 F1 C; u+ |* F; B8 l# c& `
  691.         DeleteDC(hdcorg);
    ( n" n4 g- P4 C$ F$ l& s
  692.       }
    , q% e2 ~+ |2 x: Y9 T* c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);8 h; u5 `9 Q  j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");0 F7 V+ s1 O6 y* U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    / {6 ?3 V" j4 |$ {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: X* ~' r- i  [- ^2 \4 E
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ^8 o' H' d( w& n+ X0 b
  698.       if(!Dn.Connected())
    4 @/ O" p) k/ X
  699.       {
    - Y  ]/ T' B3 T
  700.         dwTotalFiles=1;2 E, l* }5 j7 {
  701.         dwDownLoaded=0;  p3 p) j# v/ ~
  702.         bSilentStep=TRUE;
    8 B- q6 L" N- g$ v4 a
  703.         bCompressed=FALSE;
    8 i$ ^9 C* V: |$ d# G2 k! @, K4 \
  704.         strExtLocal.Empty();
    3 I/ ?1 ~4 j" _0 }
  705.         strFullName="readme.txt";/ y% T9 {) K; g
  706.         dwProgramState=AP_CONNECT;
    2 z! ?0 I) s9 e
  707.       }
    5 j1 Z% X! Z; x  g4 L' E) U) Y
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: G+ L* `: y( [& g3 \/ p
  709.       dwStartUpSteps=2;
    9 @9 O! F0 u7 G7 @! K9 Z& Y* p
  710.       break;# p3 T* w% W7 b  p- q2 \+ {
  711.     case 2:
    # }4 Q3 v2 x# Q; G$ t
  712.       {% S; T. @! A1 f! j. i( x: Q
  713.         int iEOF;8 l. `& t7 c( D& |5 u% H
  714.         FILE *fp;
    6 ^- Q+ o( S6 v+ m$ ]# X+ s* q# S
  715.         char szString[512];% c5 I/ @/ e2 r3 h' q
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    % ~9 M8 }  C- \1 {7 J- l, S" E
  717.         if(fp)- Q* u2 \! {( r8 W- |
  718.         {9 x" k/ O4 p! e2 ^
  719.           do) P. D" F, T- G" k+ |
  720.           {# _( O$ B0 U! W9 K
  721.             iEOF=fscanf(fp,"%s",szString);
    * ~  m$ K7 S. ^, ~
  722.             if(strlen(szString))+ O6 Z7 Z2 `. F4 z) l' H1 D
  723.             {$ w4 z4 }6 F3 h) ?7 c1 Y
  724.               if(bFirstChar)
    - C# ~7 I  H. C* W' S+ S
  725.               {
    ' r- x/ Z+ B  E7 n( A8 u7 h
  726.                 bFirstChar=FALSE;
    8 i& W% l/ g$ R1 x2 m
  727.                 bConnectIsBig5=FALSE;8 c! W( M' K( ?. u9 w; f% @3 v$ I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 s2 G1 M% H- u  T
  729.               }
    . A7 N6 @: a, ^* ?* K4 }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) H7 n! m. M- w2 a8 J- O4 P
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));7 W: z. d* S8 ~( Z1 x0 K
  732.               dlg->m_ListText.AddString(szString);
    : q+ f5 h6 ]3 K- N6 p
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' p" \2 y7 [; E- k6 |- x
  734.               *szString=0;; x% |1 N) O9 }
  735.             }! A* R$ t2 ?1 f4 P
  736.           } while(iEOF!=EOF);: I& U8 X4 G7 _0 ?) U% A
  737.           fclose(fp);
    % J5 ]. E, N2 X2 O
  738.           unlink(".\\DownLoad\\readme.txt");
    - O* \. O! C8 P: r+ G
  739.           dwStartUpSteps=3;
    ! w% ^( _& m. x6 o
  740.         }/ R$ A1 c* Q4 o! V! v! r
  741.       }% `# C2 M9 a' {
  742.       break;0 z$ G$ ^4 [# S2 H
  743.     case 3:
    9 k! \$ d3 i3 D6 M" [5 g6 G0 h
  744.       if(!Dn.Connected()), c# c& A. r5 I9 c; M7 p  F) d9 C
  745.       {
    , X8 [' V) w; e$ _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / q8 K% z- _! U) a" y
  747.         dwTotalFiles=1;9 y: a; ?3 |& T2 F
  748.         dwDownLoaded=0;
    / {& i0 @/ a4 w" D
  749.         bSilentStep=TRUE;) C+ [7 ?: n( Z/ T
  750.         bCompressed=FALSE;
    2 a4 [% F' M  a1 g6 y6 Q
  751.         strExtLocal.Empty();
    % r, b+ t( G, e  @; {
  752.         strFullName="checkversion.txt";
    3 h/ w* b4 F4 M' a: g6 Y) U$ y
  753.         dwProgramState=AP_CONNECT;; F, M% l; [( U
  754.       }8 `6 f0 _, h: M1 }" x+ K8 S
  755.       dwStartUpSteps=4;
    - Y9 J# J) u( A3 G# t1 L
  756.       break;8 k; @% x2 o: M0 X9 h0 H
  757.     case 4:
    - m/ d8 N+ Y0 B
  758.       {
    & C+ c1 }0 J" f; z) {0 m
  759.         FILE *fp;# A& U) n0 B5 h3 \! z6 O' V, J
  760.         char szString1[128];5 K1 y0 n) G+ e5 i; o3 n. z; H
  761.         char szString2[128];
    % ]5 ?3 i! \) |: V: c0 W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");$ y' m* E9 L! `( i$ r+ L4 J
  763.         if(fp)
    ! L! j/ E4 B, s; i! B- @) {
  764.         {- U# Y/ S* v8 w# c
  765.           fscanf(fp,"%s",szString1);
    , l- `5 G) n) T7 g7 G  o
  766.           fclose(fp);6 Y4 i: l5 ?4 ^& A$ z
  767.           fCheckVersion=atof(szString1);
    7 R3 C- B" `4 _
  768.           fp=fopen(".\\checkversion.dat","r");) B( R8 p" ~" Y
  769.           if(fp)
    $ k5 m& s; W8 z  [) \" j: _
  770.           {. G& E0 q) W2 O9 G# W
  771.             fscanf(fp,"%s",szString2);
    + {  @5 o6 C5 N! y/ `
  772.             fclose(fp);
    0 Z/ [8 H! n, a- T; E
  773.             if(atof(szString1)!=atof(szString2))  u% U! y. u( I) e: n' D
  774.             {
    $ u4 G8 B6 b. T: J8 b& n
  775.               if(!Dn.Connected())) K6 V! J( k+ [: O# P) M7 U4 ~9 R
  776.               {+ X  t" S, C: l, O4 f9 x- [, |
  777.                 bFirstUpdate=TRUE;
    8 v7 R& s. `& a6 x9 O1 F
  778.                 dwTotalFiles=1;' [6 Z: {/ S/ R' o( k2 E
  779.                 dwDownLoaded=0;
    ' d& h- X. n9 C5 d  S
  780.                 bSilentStep=FALSE;
    / n1 M! L$ E- k% l# r  C+ N$ W+ s
  781.                 bCompressed=TRUE;% ]# |# [! E) W1 [6 l; C
  782.                 strExtLocal=".\\DownLoad\";+ e5 `& w: ?8 w& B8 m6 j% y8 G
  783.                 strFullName="update.txt";
    : X# Y) Q2 g( \& o2 L# X
  784.                 dwProgramState=AP_CONNECT;5 W9 R' r- i. s# E* l4 E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      f2 c# K$ }" \" q, L" o
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 s% Z( v& A) B- L1 E8 N/ @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    3 a7 k& I; A' h

  788. ! R0 ?' ?/ q% G
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ T  w* L2 c  ^2 w5 L4 [0 {6 w
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    - H4 r2 A3 {0 e# i! a' s7 m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1): E: l2 f' r# w4 ]
  792.                 {
    : ]/ \2 ?! P% U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * g- v: j& n  w  l$ V: @0 q* x
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");+ c8 B# S/ H) v# N' Z( d/ L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& K8 e" m4 D$ K, X+ |
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - }! @& y4 c- c- w1 \& V

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

8 @) s. c, x" L% g; `
& I! {+ y) f7 r; Z4 |

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-3-11 17:53

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表