CSUpdate.exe源代码

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

6 g" ^3 D' N4 C$ ?0 p- f9 P
  1. / RevApp.cpp : Defines the class behaviors for the application.9 l) ?. s' b5 T2 C& @
  2. //! s4 X5 u1 k4 M, f1 Q

  3. . ^/ R8 A$ E5 c- |) C
  4. #include "stdafx.h", I9 h- L9 g9 K5 |- |/ g( j

  5. : z! l$ J. {6 a1 z+ x
  6. //#define UNICODE7 n/ s' i* V, U
  7. //#include <gdiplus.h>( E6 r1 ]; h" `  U
  8. //using namespace Gdiplus;
    : _8 N8 R4 O- p5 A# m
  9. * N5 H1 f/ u( t
  10. #include "RevApp.h"
    0 m/ t( u, P  U
  11. #include "RevAppDlg.h"4 B& j% H$ B9 d" {3 H" K* x% q
  12. & a7 G) H* |1 T) R2 a* c' `
  13. #pragma warning(disable:4786)
    4 X# A- f$ \+ G+ X( B; E; |# s
  14. #include <map>4 ~' D+ y' H- h4 i) b* p! }/ j5 Q: x
  15. #include <list>2 i! [# |0 N( {0 H1 y
  16. #include <direct.h>& {& X1 ^' j# d3 u9 O
  17. : o! ^9 b3 c! @# g+ s! N0 @
  18. #ifdef _DEBUG
    * `/ `& O9 Y# o9 n# ]
  19. #define new DEBUG_NEW
    " p  `# R  I6 H6 A, ~8 C
  20. #undef THIS_FILE) W$ T; j' {* J2 u! E
  21. static char THIS_FILE[] = __FILE__;
    ( w4 h, H7 d$ l( e6 H% @1 O& O+ E; a
  22. #endif
    : N5 r; ]  I: t+ i& S! d
  23. #include "SkinResDef.h"
    9 P# H: B4 b/ K+ J8 t
  24. #include "ChangeBG.h"
    & S7 O- G; H' i7 x+ @$ S, t
  25. #include "AFXINET.H") \+ o  C/ i5 g# v

  26. / K  P( J$ g! a- P) d3 o
  27. #define TRADITIONAL_CHINESE 0
    9 c/ o4 M6 X$ k/ o3 s8 ^% m, t
  28. #define SIMPLIFY_CHINESE 1
    7 O( D% e1 A3 G& y8 S* }  @6 E
  29. #define ENGLISH 2
    8 s) t7 @' o! y8 w
  30. int m_iLanguage = ENGLISH;
    . w6 o" E+ x" B0 @/ k3 [! L
  31. /////////////////////////////////////////////////////////////////////////////5 c7 V+ l$ Z1 y
  32. // CRevAppApp
    2 h, u/ m; z& j2 ]5 ?- {

  33.   ?0 s! J# V4 A, x0 d; T1 d8 U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    * u5 u1 Y6 V$ {# e& T9 Z. r, C
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      m" W( w- L- E( Q  l4 w
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 Z5 |' b! l6 v/ b3 v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  Y5 ?1 C& V5 s5 L0 x
  38.         //}}AFX_MSG+ E$ d( _1 B8 n( ^$ \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , ~" H- |! S! L+ _9 @. q0 J% q
  40. END_MESSAGE_MAP()
      \0 G8 H0 Y# z

  41. / R( t- G! F- G& M' T
  42. /////////////////////////////////////////////////////////////////////////////
    7 z3 d+ f7 M: G) I5 d' Z' z$ @
  43. // CRevAppApp construction
    8 q* Q: Q9 O' T( c7 m, y+ J( Y
  44. 0 q  y" p6 P0 M# j+ W3 F2 G3 l
  45. CRevAppApp::CRevAppApp()
    2 [$ ~1 o. U4 @$ ]4 ~
  46. {9 ~# L/ F  F& F1 r* j
  47.         // TODO: add construction code here,
    ' S0 L/ F& ~# n7 f* `
  48.         // Place all significant initialization in InitInstance8 h* D5 p# \$ j" d; I
  49.   bDisplayIsBig5=FALSE;0 Q2 Y$ }7 W. [  b
  50.   bRestartUpdater=FALSE;
    0 J% `4 C' Y# \; d/ ~
  51.   bFinishUpdated=FALSE;2 [) B6 f  Y" H/ c: y. T5 l
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;; `2 n8 r3 a  u, W( V
  53.   InitChangeDataBig52GBKS();8 v) Y& R; G5 x3 e
  54.   InitChangeDataGBKS2Big5();! U; U; e6 f! }. [1 ^- \2 y& x( d
  55.         //
    % B" m" b+ k9 w( M
  56.         bClickRunExe = FALSE;3 Q/ g( a& g4 V  ^9 j5 K1 P
  57.         //
    + B9 y8 R# D0 z5 X+ F: l) a  l
  58. }  C* I& G$ }) m" |/ Z

  59. + y  }+ x& W9 f  D
  60. CRevAppApp::~CRevAppApp()
    % G. q: y$ g8 J; k8 j# {
  61. {: K7 s+ K3 |! a$ S2 }! W" v7 Z
  62.         // TODO: add construction code here,% J' \/ o2 u5 o' `- R! Z' A
  63.         // Place all significant initialization in InitInstance
    9 [" P8 y: M  d
  64.   EndChangeData();8 t7 d1 R  e! A. W$ |& R; I: h
  65. }
      Y( ^6 }" Y2 v! A9 D* @; {% O
  66. # I! y2 h) R; [  Y' P: E$ Q4 R
  67. /////////////////////////////////////////////////////////////////////////////
    5 O* b/ |1 u9 }, r8 n
  68. // The one and only CRevAppApp object) f7 J( t, K1 G. A: A% q4 a
  69. " g4 S, Z, [7 m
  70. CRevAppApp theApp;
    8 P+ m& C- }6 b: ?/ e. u8 f# F2 A
  71. " A7 ~& k6 T5 `: A5 n! m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    8 R9 A+ j1 \$ ^. j% o1 O- X0 G( K
  73. {% ~& M# F; E% H! s
  74.   int iEOF=0;
    1 Y/ O5 p7 @, u  @4 J0 b
  75.   char szTempName[MAX_PATH];1 e2 A5 @. m, a, W: Y; S  p. ]
  76.   *szFileName=0;
    1 i/ u% v) I( B
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " v. B- M% @7 b* }& r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ! K2 a% n" }1 r' d8 J
  79.   {: g1 r8 d0 T" A  n
  80.     strcpy(szFileName,&szTempName[1]);' [5 t, d+ t2 {2 b& q
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 Y' Q2 J9 I( v% K$ a1 F, e) d8 e
  82.     {, k) b5 q7 g* c, }& d% R- V" d
  83.       iEOF=fscanf(fp,"%s",szTempName);; u& `: N0 D# D3 c
  84.       strcat(szFileName," ");
    ( ^1 u- W/ Y8 Y3 Q) r4 k& E: Z
  85.       strcat(szFileName,szTempName);
    : m. {2 m4 q- ~" v1 S2 Q
  86.     }
    2 ]5 q7 o+ Y; c7 \2 ^
  87.     if(strlen(szFileName)>=1), ^# [# p  G5 k' B$ D
  88.     {
    1 L: W% c5 M6 ?, c
  89.       szFileName[strlen(szFileName)-1]=0;
    2 q% i, C6 x2 ~, w* m: s
  90.     }" H- k" i$ E" w5 ?/ V9 `
  91.   }
    ; Q" }$ J1 F6 d- i- P* w# a
  92.   return szFileName;9 K2 r4 N- R- @4 P0 X; h
  93. }
    2 s( f, Y, l- O# y/ i

  94. % O* I0 R* ?  O: S
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    " |& K. x+ c9 F$ p( ^2 P3 O- l
  96. {1 M' ]% m, H  r3 N1 @# R& a  B, [
  97.   FILE *fp;& d3 M6 D  Z, E9 j
  98.   char *key=NULL;) f# ^& C2 D& B. z5 e
  99.   char version[MAX_PATH];3 h5 @! d$ Z+ ~0 j
  100.   LPUPDATEFILE file,olds;
    , ]: F' j5 g/ G3 r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- t, H3 r1 A$ ^% p& e. N

  102. 4 X* k1 u) N8 C6 B8 T
  103.   UpdateList.clear();
    & C: B+ b& `1 J: @1 d8 _
  104.   UpdateFile.clear();2 W8 {# K( `" q( K, x, o' T6 G
  105.   if(GetFileAttributes(filename)==-1) return false;
    # F4 [, C3 J/ Z1 D9 s( J
  106.   if(!(fp=fopen(filename,"r"))) return false;6 I6 T3 k5 z- l
  107.   fscanf(fp,"%s",version);
    ( u* a* Y# {9 j7 f: b: {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ K5 P1 _) g( V' w$ W2 `3 c
  109.   while(fscanf(fp,"%s",version)!=EOF)
    & ]; Q! j' `' u% u' I; p
  110.   {
    2 i) n* N4 V' C+ A
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! @4 R* L8 U1 P8 f8 q
  112.     fscanf(fp,"%s",file->path);
    0 W- }9 z5 C: ^3 q8 M7 l* v7 V
  113.     ReadFileNames(fp,file->file);- \- B4 G" I& l; {+ `; d- Z
  114.     strcpy(file->full,".");! k/ R0 o! T3 x, u$ D; w
  115.     strcat(file->full,file->path);
    ' v# u, s, s  p# x% `
  116.     strcat(file->full,file->file);
    2 e2 w. z  \: S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); _3 q) x0 X5 q4 M% Y9 R! x: [4 f
  118.     {
    ' d/ f- x+ R) g" Y% w  P
  119.       file->vers=(float)atof(version);
    8 q5 Y- j) F; [! q
  120.       UpdateList.push_back(file->full);* {' K/ m; @$ r8 ?2 j$ u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));- F* [2 ?0 `, m7 O! h/ M
  122.     }
    ) S. U  B; u1 y+ f6 G
  123.     else
    9 W" w/ x. V- a0 L4 r; h% R
  124.     {
      W; A* C. _& b" n4 _
  125.       olds=(*p).second;  o' F5 Y" |% f( `0 j" I
  126.       if(olds->vers<(float)atof(version))
    6 z6 m# q; I8 a- r7 A0 M" R
  127.       {
      w& }5 i' S8 m0 D
  128.         olds->vers=(float)atof(version);
    5 M) }* o" k2 c0 L, l# n
  129.       }6 e) u% @+ S% @# M
  130.       free(file);8 R% ?2 _5 t5 h$ t4 Y* e6 N
  131.     }
    7 J  x8 z0 ~% ]  ]" B, R
  132.   }2 ]6 v- h" e  n& [( f! s/ F
  133.   fclose(fp);
    1 N6 o6 c$ R& l; ~# _
  134.   return true;
    8 x- z) n2 y7 q4 L4 U
  135. }
    8 v6 g4 `* j0 J% T& P
  136. % w; e+ i) N* w+ s0 A' g* s; S
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)5 e" B& T$ P: L
  138. {8 N& M5 S( z1 c5 I
  139.   TCHAR  szFull[MAX_PATH];
    $ z* ~% {4 E# b2 F$ X
  140.   TCHAR *token,*inter;1 s. R3 b5 u$ q* l  |' F
  141.   *szPath=0;1 M0 n$ G& \) J( c
  142.   strcpy(szFull,szFullPath);! S+ X* o# H, V9 ^/ ?: J9 f5 m
  143.   token=strtok(szFull,"\\/");# h: ]: R: K( w5 I1 p, G7 V: W, D& O
  144.   inter=token;8 R# S# z% G" G7 v* ~% I% B
  145.   while(token=strtok(NULL,"\\/"))
    5 l5 ~* ]7 o; m4 y9 j2 f
  146.   {
    7 Q* U5 s/ ^5 [
  147.     strcat(szPath,inter);! N6 r$ [4 e# H: e# c5 _( V  j
  148.     strcat(szPath,"\");. h$ i( m) ^7 |
  149.     inter=token;; ?. s7 ]. w% {$ H8 _* D) R
  150.   }" K6 ^& W/ V8 K. T9 A% o: u1 A- s2 y
  151.   return strlen(szPath);: x, u* m/ f0 X) V; J% g% e
  152. }
    * D/ F/ I1 d5 [& k4 F

  153. ! X( @9 Y* k9 y5 s) _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 `! e- O- X$ v: P9 w% r1 `
  155. {
    8 e5 S# D9 ]$ U9 l
  156.   DWORD attrib=GetFileAttributes(Target);2 I; u0 g6 k0 g8 {; W
  157.   if(attrib!=-1)
    4 b' G/ G3 V+ n) K
  158.   {2 N0 N! z) Y. E$ x  d
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    0 O5 }: E0 \/ H$ A* G) F, n
  160.     {
    6 N  V, A. g! T  m4 W" t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . m" |) g# F' M+ l* F$ L
  162.       SetFileAttributes(Target,attrib);
    8 \- U6 S9 \3 F  _9 B$ F
  163.     }
    6 m5 p/ H8 h: @5 t" e
  164.   }0 R/ z1 [/ R: T+ a& F* a
  165.   CopyFile(Source,Target,Erase);" Q: C2 z2 t/ F) z& i4 M, ]( g
  166. }& P) E5 \- h1 u) g! p0 `& m& z
  167. 6 X. O# v. F' X3 L0 {0 p& i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : p3 o! i* L7 \) Y
  169. {
    ; B: J5 |7 W2 R/ R1 z
  170.      FILE *fp;* ]/ |7 p& @0 p! L; B
  171.      char  szBuffer[8192];& U8 ^. F1 J/ Z. |0 X7 j) X5 o
  172.   va_list  argptr;
    4 g4 b6 _. N3 O$ R: `

  173. 6 ^7 i% k* H$ @7 y! c  d/ P, f; R
  174.         va_start(argptr,message);  o# q6 M  R( _( u' e
  175.         vsprintf(szBuffer,message,argptr);
    0 L4 C* e1 b. r+ d/ _: b( r& |
  176.         va_end(argptr);
    " N- g# U0 C1 f% ~# G# z. u. a7 n5 l# j
  177.   fp=fopen(FileName,"a");5 p( q! w5 t3 N6 B
  178.   if(fp)6 Z# Z- E: \, ^( q
  179.   {; }8 Y+ \# N' E2 f( B$ }
  180.     fprintf(fp,szBuffer);: O. F* _7 n, u% F
  181.     fclose(fp);* N1 o' w, `& E9 ?
  182.           _flushall();1 C$ L  A# _0 |. I. M
  183.   }
    " v& Y. B3 C# [: D* j
  184. }
    + t1 B  @. z( X0 ^+ U4 f6 A# v

  185. / J- g8 a- m4 ]' ]! F& G/ z; \
  186. BOOL CRevAppApp::Fclearf(char *FileName): p% q- \& j' ^' L- J
  187. {
    2 q0 N. B  j0 A) B% `
  188.      FILE *fp;
    9 ^' }$ F( t6 g( T  t
  189.     DWORD  attrib;
    , ?$ l; {! H/ k
  190.   attrib=GetFileAttributes(FileName);
    ' B& _: v1 _6 n# n) ^
  191.   if(attrib!=-1)
    2 h8 q" d* a8 J% d/ s0 q/ b6 t
  192.   {& U  |5 i1 v" y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % j( u; f- i0 M
  194.     if(!SetFileAttributes(FileName,attrib))
    1 ~' b2 H. B3 \; }# Q  n7 w. s- C! U8 @
  195.     {4 S  e0 ~5 h) I5 U' ?
  196.       return FALSE;( m2 j" S1 R! l: k2 }5 _3 X
  197.     }
    7 A4 s0 d& ~! ?
  198.   }
    ( a/ P7 @$ Q/ R5 `/ p) L% P% s
  199.   fp=fopen(FileName,"wb");
    0 t) T' d+ f7 U
  200.   if(fp)' B/ U2 U6 k+ X5 q' W8 \
  201.   {
    0 ]( J* @9 k# V' U5 e, X( }
  202.     fclose(fp);3 l3 j& u) Y( M* x5 Q) K
  203.   }4 E, ?# y& a+ M* w9 R3 n- X( Z$ H
  204.   return TRUE;
    9 Z/ w) Z; D1 F8 t6 q* X6 y, I% Q
  205. }
    $ b. _8 O2 V6 p0 o9 U' Z
  206. 8 `9 {; A. f( x( k7 ?" G
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 f1 z6 r* x1 c: N! A9 F
  208. {: r- Y" k# m8 T
  209.   char filename[MAX_PATH];; K% n4 G+ I7 ]7 w# j0 B. O2 [; l
  210.   LPUPDATEFILE file,olds;  I2 z" O( p% |3 t! w
  211.   std::map<int,CString>::iterator i;3 M; b! C# ?; V  |. c5 T
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    , {  b5 T1 P4 J# @+ r
  213.   std::list<CString>::iterator l;
    ( ]) {' T4 b- {* s7 W

  214. 7 U7 @( h5 y; b2 @
  215.   if(bFirstUpdate)
    " E% d* A, Q- G6 h
  216.   {6 a0 N0 C' n, X: _7 b  J8 s  N
  217.     dwCurrFile=0;9 Z+ j6 ^- G% F2 Y
  218.     bFirstUpdate=FALSE;
    ) A# h- R- A8 d
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    4 ^7 O* r7 l$ A
  220.     {
    $ q0 q! i$ [7 I+ i# v, _9 D, y9 y
  221.       dwTotalFiles=UpdateLocal.size();0 ?5 E1 K+ p% m3 n8 y) w
  222.       dwDownLoaded=0;
    ' M+ ]! q  s6 A5 V9 O5 x
  223.       bSilentStep=FALSE;
    & J. {* N$ [  p# U% V% j
  224.       bCompressed=TRUE;! l) C9 @  i+ ]# f3 W8 d; M
  225.       strExtLocal.Empty();2 x* E" T( p0 b  S7 V! z
  226.       strFullName=(*i).second;
    ) V9 s. H6 s# u* |: F1 T0 k
  227.       dwProgramState=AP_CONNECT;% o3 Y" J3 d6 Z4 N. F$ X3 P2 H- U' F% N
  228.       return TRUE;9 k. `  R4 n: y8 q) M8 t4 c
  229.     }6 W+ q2 X) O: {* f4 D4 H, I
  230.   }; t8 {0 H2 Y6 R
  231.   else if(bRestartUpdater==FALSE)2 `0 _& I% A" u# Q3 F
  232.   {; G/ j, r1 E" ~+ n! N. b# p4 L# a
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- A7 |7 `6 W2 B3 W) u" c. ^% ?8 ]
  234.     {
    , |% ]+ y9 o( @7 q9 ?+ K3 g1 p
  235.       file=(*p).second;7 E& U, d- I5 h, Q- x+ M: V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * ^* f" {# W: C. c' o
  237.       {
    6 y/ }$ B2 H2 m6 S/ j. [
  238.         olds=(*p).second;  ^8 s2 @1 x* i  o
  239.         olds->vers=file->vers;) {/ \$ }& _/ ]7 ^
  240.       }
    ; k4 k, T( Z: W, i5 T  H! d
  241.       else
    ; k! i/ J# @$ {& g+ e8 L
  242.       {; O6 \. a4 l4 e* S! d0 {
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# g1 W. c1 @4 W! {3 D, K1 k+ n" u
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! }& N8 m. W. l- ?" L5 t( G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ! m0 X7 m) f( a# e
  246.       }
    " h: r7 @! s- v& X
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");) f+ f2 z6 w6 d& l( f
  248.       sprintf(filename,"(%s)",file->file);: `8 s( Z' N& e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: p, }5 K+ K2 w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / Z! J0 u( j/ B$ @
  251.     }! Q# E3 E7 p( O" q9 u0 l$ K6 }
  252.     dwCurrFile++;
    / L) [# p  {0 m$ S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - D" q# Y8 k2 ?
  254.     {
    $ \, o8 U( U: ~8 F
  255.       bSilentStep=FALSE;# Z8 U# o7 @3 l6 ~) i+ N) M/ Q
  256.       bCompressed=TRUE;
    9 p0 e5 u# N' Y' ^7 J6 J
  257.       strExtLocal.Empty();: D" o* X. v( _/ [# m
  258.       strFullName=(*i).second;3 l2 c$ K/ H: G# |2 a1 W7 f5 G) G
  259.       dwProgramState=AP_CONNECT;6 u- c# d+ i( I. {! T, W5 {* D2 }# W+ W) w
  260.       return TRUE;. e: P- S- o3 K# {
  261.     }
    8 [- I3 R: ^: B0 W9 N- ?
  262.     if(!bRestartUpdater)
    / L  Z+ w7 I4 d( N
  263.     {! S. [+ U3 T- z' S
  264.       int iCurrSize,iFileSize;; x* @& D  r0 x) q
  265.       iCurrSize=0;
    1 V; e" E4 W7 I5 h
  266.       iFileSize=UpdateList2.size();0 ^( b; A) K2 K6 u% G3 }5 p  T5 {
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");& R1 v9 S% T. ]! ^+ ~2 G7 t4 `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    - C6 Q) e) m, C* A! O! _- `
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! y7 d& n! g* M
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 U% p: B) Z8 H) y1 B/ r9 {5 _  ~$ ^
  271.       Fclearf(".\\update.dat");
    : L9 f# X  L4 `& x! W0 ^0 Y# N
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ N  {6 l' {( l  I
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 G8 K; B- ~- ~0 ?
  274.       {$ _& W, t+ {' k' `+ W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())  H, D3 q8 H4 T# ?$ I9 |, e; F
  276.         {6 y8 ~3 |2 h" v5 i5 w8 E6 y2 z
  277.           file=(*p).second;
    * ]& ~5 [# c3 Q: s; k8 G' }* o
  278.           sprintf(filename,"(%s)",file->file);
    # k- U5 _0 E0 N8 w- o
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & _4 y1 R8 F; Z& i
  280.           iCurrSize++;
    . M- Y) {$ |( M) ~( y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    7 j) n- }# C1 y4 N
  282.         }, E+ ?! F/ N; }& Z' F
  283.       }
    - e* H4 V  u1 e3 Z; m+ M
  284.       unlink(".\\update.txt");
    ' T: z2 U- P/ ~2 R1 @
  285.       unlink(".\\update.tmp");8 A$ O5 s9 d* y- u. C; a
  286.       Fclearf(".\\checkversion.dat");
      u; B* I) |0 H3 b2 c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    5 R5 V- k. }: J$ T- p- H, }
  288.       if(UpdateLocal.size())
    # u8 Y/ }( h* O% I, l6 w
  289.       {
    ; n" v( ^8 z8 F  M' M' I
  290.         UpdateLocal.clear();
      p: z9 |7 M  d( E  d' @
  291.       }0 ?2 ~- Q! A9 X  Z7 |
  292.       if(UpdateFile3.size())
    - V) k/ {9 e+ ~& }
  293.       {0 i1 U8 c! }, M; k9 ?, {% Q
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ h" K6 J5 O% x3 f' ^* G5 P
  295.         {
    , h0 V4 n8 E/ P' f+ N  f
  296.           file=(*p).second;+ y1 O7 ?( s0 B1 I. C" a
  297.           free(file);
    * U1 }0 c' Y7 C" X$ Q* }0 s
  298.         }
    ( `3 T+ Q0 D; {0 N$ a
  299.         UpdateFile3.clear();+ z: P& J( R: S1 [. t
  300.         UpdateList3.clear();
    " T9 h$ e' V5 q& ~3 a8 u9 E
  301.       }
    4 ^& s7 P3 I" k  x) P" a' J* o
  302.       if(UpdateFile2.size())1 d( L# x/ I/ l- i' G* `4 v
  303.       {
    9 n* L& j9 l# z- V+ N8 h, R
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); q( h! o* P- x+ E" x
  305.         {
    / y8 ~) u) d. N! H
  306.           file=(*p).second;
    . u4 v9 K4 X' q9 J6 g1 q
  307.           free(file);
    & z# u" G0 D/ ]0 m/ H$ R
  308.         }$ G+ D- i! `  M; ]& K
  309.         UpdateFile2.clear();
    $ w, \6 z( D. B* R& \
  310.         UpdateList2.clear();; f4 y! X$ ?) Z1 r) \  Y% ?
  311.       }
    8 S; }( L$ ^- a+ R9 ^" k# U" m
  312.       if(UpdateFile1.size()); D; K; |& C) Z: X
  313.       {/ W3 O9 T: u4 i0 l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - I5 U; |+ h4 L# }. ]
  315.         {
    / }4 m9 R) C2 y3 t7 _# s
  316.           file=(*p).second;) M8 y/ A1 o# x& ?
  317.           free(file);8 r& Z, Z  M$ C' U+ o
  318.         }6 ?& z9 }; U, k* T# n9 K" t
  319.         UpdateFile1.clear();
    : K" K) C# O4 a1 X/ L; I4 W& r
  320.         UpdateList1.clear();2 u; @. T: T2 D% Q" ^" B
  321.       }
      O! A$ V& Y+ e' v/ Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % y* l8 s  p6 E$ `' l1 W$ J0 \
  323.     }& c5 b3 U3 W& @' z% s4 S( u1 A! X
  324.   }
    . B! V5 ?, }- d' N
  325.   return FALSE;- O' s8 L6 ?( U  P$ S
  326. }
    $ V. K% ]8 O; j7 u4 A9 b: J7 y; Q
  327. , i5 x" y& G5 [- c* o
  328. void CRevAppApp::ClearAll(void)% H5 E- ~% r$ E6 D; O
  329. {
    7 l* F# ?7 W' i, {/ N) @2 C7 x
  330.   LPUPDATEFILE file;
    . }' d+ d0 `' W( q. ~
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % Q1 }3 ?- S( V6 q0 v9 b

  332. ; c& @. y7 _. q8 `0 c- e2 v8 [
  333.   if(UpdateLocal.size())
    6 L6 m1 U8 t3 e
  334.   {
    9 N. r/ {' b/ M7 m5 [2 X& A
  335.     UpdateLocal.clear();8 B/ A, s$ v( n1 A9 z2 h
  336.   }( @9 Q* l7 C7 b3 ~& @
  337.   if(UpdateFile3.size())  b. t! G, B1 S8 q' P/ P
  338.   {; S* C8 ]* u8 z
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): F- D8 Y  K9 U4 q, `  y
  340.     {
    + \* M5 u. v6 |; S% i
  341.       file=(*p).second;7 c4 U1 h6 R# E' X8 U$ K
  342.       free(file);
    ) Q, A& p! l( @. S
  343.     }( x7 r1 p- X1 c& H4 M* e
  344.     UpdateFile3.clear();- q% I, y! r4 t& E+ ~# ]0 K/ d/ s
  345.     UpdateList3.clear();
    7 R7 m7 r) N5 }
  346.   }
    $ p) M$ Z4 g* m: P
  347.   if(UpdateFile2.size())7 U8 n( r/ @7 e1 F) K2 p
  348.   {
    0 H4 h5 z0 F. p! b
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* j' L4 ?. Z; {+ `+ M0 B4 o1 p
  350.     {
      k1 s. U& r( |4 b& O
  351.       file=(*p).second;. q8 f# C3 O9 f- k" S5 M
  352.       free(file);
    - S" H- w! r) b
  353.     }4 y" N7 I1 [* V, i! r! ]! ~
  354.     UpdateFile2.clear();5 R, \: l8 R- a: R# u% E
  355.     UpdateList2.clear();
    , e% O/ T- m' J3 H% \. n+ M
  356.   }
    . \+ L' i& w% B3 s( C% @% b
  357.   if(UpdateFile1.size())8 J1 c% t* @* {2 X, N! U5 z( W5 d  C5 ^
  358.   {
    5 M8 g) K: A, y* A1 @
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 h2 h( M: b* P; I0 B7 a
  360.     {
    ! d1 d" n. j8 i1 V" d) I
  361.       file=(*p).second;) l% M! g) x5 ]8 S; y( V& C
  362.       free(file);3 k% T6 c4 ]2 E+ g7 z: C
  363.     }
    5 V$ j4 t: `* c6 h* W( b8 B
  364.     UpdateFile1.clear();
    # x' t2 O; Y, f
  365.     UpdateList1.clear();/ N+ f3 x! D6 [' ?: g/ v3 C
  366.   }+ i9 L7 T7 \7 |7 o1 m! N
  367. }  
    ( u0 ^( i# t% ~
  368.   * P+ z6 r4 r# B
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ! \4 F0 g. Q5 w& ~" O, Y8 C
  370. {$ }& W; c2 u. h/ k# j
  371.   int c;
    ! o0 U+ G6 Q7 G: [: K; E- s
  372.   LPUPDATEFILE file1,file2;
    - [! ]- Z; T  Z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ( S8 P% y; U/ u% ~) e" p5 c: G
  374.   std::list<CString>::iterator l;; U! H! I. ?/ O5 n8 k- H0 O. S

  375. 3 s2 a1 o+ G$ W( L5 D) `  P
  376.   UpdateLocal.clear();# B: D$ S! L7 Q4 s3 c. {' e
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 ~4 J6 ?/ U! I! ^7 G) V
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    7 `8 n  N+ O0 T8 q+ ^* @4 n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' d1 P. h% U5 ]) b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    2 D' K9 X! n6 o
  381.   if(UpdateFile3.size())
    : j( _; Z, j0 |8 H4 u
  382.   {8 d5 v7 M1 e  F* H/ _1 V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 g, {) j/ Y  h) p8 B. K0 C8 i2 s
  384.     {. ~2 I  `2 o% l1 |, }; i' ]
  385.       file2=(LPUPDATEFILE)(*i).second;1 o! ?  U7 a$ Q/ S! H
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& [! Z. h$ W* V, x
  387.       {+ I  t) v5 [  R
  388.         file1=(LPUPDATEFILE)(*p).second;$ _- a6 l4 T5 P! D
  389.         file1->vers=file2->vers;9 D; G( V/ ^2 [$ C# \
  390.       }
      a+ `* O9 {, T3 j" b
  391.       else$ S( B$ z0 }9 b
  392.       {
    4 }8 X1 d9 w* P- k# Q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: g8 F  n# y% S! Z* A4 P9 h4 c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 a2 h# K/ I, ~+ f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    # V9 g) G! w# Z+ e8 P7 Z0 O7 Y" I
  396.       }- K; |! K, W. o4 c) r) a' _/ P- g
  397.     }
      D; j# G& L/ A+ J6 P
  398.   }
    # B, K# y: H/ Y1 S
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): m) N# j9 g, a2 a, \2 S, W
  400.   {4 x# ~4 X$ G8 |+ W$ Y& l. l7 D' c
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    6 m0 g! t% r* |# @: [
  402.     {
    - z1 K2 p' W! Y7 W' D
  403.       file2=(LPUPDATEFILE)(*i).second;) m7 W4 T% {+ `! O! v5 X5 r
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# t) x! F7 }+ m0 M: ~
  405.       {( s, k* x7 u3 F4 ]2 p5 @. m
  406.         file1=(LPUPDATEFILE)(*p).second;
    " {, d% a, P! v
  407.         if(file1->vers!=file2->vers)6 N/ P3 ?' \) f# U7 U: \8 W7 b
  408.         {
    ; `% Y! a* A3 X, a
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ `$ H2 s6 f9 h8 [9 O
  410.           c++;
    % U  P% [# H$ L# M/ Z* _$ |* K& s
  411.         }
    # x+ M6 d  w- w1 p( V& [2 a
  412.       }, {# G4 F/ p: x* `! P% E+ ]" q
  413.       else: U7 Q. S* F) N) @8 W% [# O2 G
  414.       {
    / j% |, n$ j' g! B0 j/ l4 s
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 j2 y$ q8 h% {
  416.         c++;
    / z; s% L) f. ?$ Q$ t2 _
  417.       }
    ) b" p# ]7 H( L. U* K
  418.     }. @$ j3 N- X% V4 f
  419.   }
    . j, O4 r3 x! E5 V& z4 `4 z0 U
  420.   unlink(".\\DownLoad\\update.txt");
    2 _& u( T5 |! \
  421.   if(UpdateLocal.size()) return TRUE;6 A9 O( {+ d$ N4 F( x; M8 d' i* p
  422.   else                   return FALSE;( l: w# W/ ?/ @: u' ]/ [
  423. }
    0 X/ @2 K! j3 c, @% [
  424. / F5 [/ g5 R6 c4 n, A* j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"7 O, P. v  v8 `& l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 ]3 w' Y9 L3 u0 b) y/ R
  427. ! c$ |" M" a* Q( E1 E: r1 ]: I# K
  428. 4 N! i9 A5 f( ]6 x

  429. , ~6 `3 r$ A  T% Z5 G0 p
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / w! U. |6 G" ?. O
  431. {
    ! h; U% t0 I! U" @& A1 _, E
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    4 _* S# U9 R0 L3 O* e; D- T3 Z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 N2 v: n# V2 h. F0 _
  434.   {
    . f7 W: L: x: R' U2 @3 }9 g8 W
  435.     char szLanguage[50];, z( }, W5 \6 S* k
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& i! `' Q2 Y/ f% a+ p# @
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    6 N3 F, }' p7 s. f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; E" S- r& S& @+ V) @) p' {6 W5 j
  439.     else                                   m_iLanguage=ENGLISH;
    / R. @- C4 J. G5 c
  440.     char szRegister[100];# i3 `& v5 `' B2 T7 i
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 Q- m6 n: _6 |/ x5 R
  442.     strRegsName=szRegister;! n- K( p- l5 N
  443.     char szPatchURL[100];) }' I: W5 o% [% t
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 q- ?* ^( U1 D1 _% K# W
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);$ M$ @2 _0 p/ y" A0 Z& }+ C
  446.   }- \, B; E3 a0 e! H8 [" v3 l! }6 ]
  447.   else; ]9 E. u! w4 D0 P9 m! |( K# T; t
  448.   {' \+ E# F5 O7 S# {/ h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - j6 J4 V! G5 A$ `9 b
  450.     strRegsName=DEFAULT_REG_URL;. U% p2 p1 ?7 m2 B6 x# c
  451.   }
    0 e6 t7 T8 K0 v) I
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 B* Y2 D2 I7 j# r; l
  453.   {
    % U, _& M) f+ S5 ~
  454.     char szIP[50];' Y* \# c1 U6 H8 @# k  w( F6 g  m
  455.     char szDIR[300];
    3 n; f) c' h0 ?  x% q0 K# t( b, \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % b# A8 Z6 J( u  N; {9 i% S, H- H
  457.     {. w% t. r$ f4 T. _1 _7 `1 |- A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 ?$ ]/ y* v$ N, {: v
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    9 f2 a3 I. Z8 v6 u* h6 o
  460.       strHostName=szIP;1 ?! I$ d* T  b5 s6 @% s! G' w3 _
  461.       strHostPath.Format("/%s",szDIR);  {2 K! D' `, i
  462.     }
    ; M2 Z) j, n7 w8 B3 M
  463.     else' ?* s. e% c7 D2 w5 k9 V4 Z9 X3 w
  464.     {
    ) Q6 L8 K  V9 L+ k  O( a
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    : q5 t1 v( @% W/ \
  466.       {7 ~/ b3 M. l1 G) Z% c
  467.         char szLanguage[50];
    9 k: l  q9 Q4 I6 F0 P! D$ N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: M5 I: K& X& C! _
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! @# ^4 ^1 I8 M3 p3 |
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 n' A. K4 \. P. M
  471.         else                                   m_iLanguage=ENGLISH;! D' [+ P5 F) ^2 Q
  472.         char szRegister[100];& t) u* x# v, t( y$ G% L/ i, U. o+ d
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! t+ A) f. h% `$ C
  474.         strRegsName=szRegister;' ]- j" t4 n# t
  475.         char szPatchURL[100];
    & ]5 m, T; s9 X. U- q6 r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      e$ H7 n8 D' g
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# J$ I: v% R0 ^% ]4 j5 k$ a
  478.       }5 o7 g7 G4 V9 {2 Q% D
  479.       else
    ! E* m/ _' A  G- s: u: |! I+ M
  480.       {" ~& O) ]; e$ ^2 k$ o+ d& m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: s* A$ [/ S+ _" G" K( u& [
  482.         strRegsName=DEFAULT_REG_URL;9 R" G. S& y- ]) F, r1 ]
  483.       }
    + Z1 ]! M' S& t1 M- d( D! N. h; p  C
  484.     }
    $ j# i2 l& n" R: V* }
  485.   }4 t1 M) I; r$ H- Y# t! U
  486.   return true;: n7 w, J  p$ I8 w- z
  487. }* ~1 o1 R; Q3 t; O+ R1 Q; t

  488. 7 K2 U6 g1 a# f/ g$ m
  489. #include ".\ZLib\unzip.h"- X# [2 P9 |# |0 N; `; K
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, k; d( M6 Y+ j' D, r; b3 u
  491. /////////////////////////////////////////////////////////////////////////////! f( d  R) E+ v  r# {
  492. // CRevAppApp initialization
    7 G+ ~0 y  J/ R+ ]
  493. ) k2 i+ i/ w+ r- ?/ n4 i
  494. BOOL CRevAppApp::InitInstance()
    # A- T" b, P4 ~- P9 @6 s- r( [
  495. {. r7 h2 C% f- x0 }
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];/ y+ Y9 _& A' p( D( `

  497. & R4 f* ~  o8 H. K/ Q$ s( U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " F7 ]. U# Z( B: t% n" v
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  K5 f/ Z$ e" |  L$ _  y- s/ u  l
  500.   {; i! l5 ^- r3 f) l
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 e, _2 W6 Y! V0 A1 m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    . |- s& ^/ V& L( s& ?
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + N* A) P4 t9 s5 y* W
  504.     {$ E7 |1 K9 ^4 C/ Z: T+ M! |) ~
  505.       strcpy(szPath,szPathTarget);
    1 s9 j% R" c' X7 y' C
  506.       SetCurrentDirectory(szPath);
    9 g- \2 k( E) A$ O$ _* M
  507.     }7 K2 B& l' x4 m. s
  508.   }; V0 N2 N: y, v8 ~
  509. #ifdef _DEBUG' F% m7 v/ \* ?+ Y" m! l- |5 O
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- d, r  D; K/ K5 V  b% U5 y* ?: |
  511. #else/ i4 T% f8 K- h  R3 u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" K, x$ a6 j. o: x
  513. #endif8 y% A( `6 k0 E' |! _1 u
  514.   {) D; D2 F5 x9 u4 Q! G
  515.     char tempFileName[MAX_PATH];
    ' K& {4 x2 i" ~  R$ M0 }
  516.     strcpy(tempFileName,szPathSource);
    5 y; k' S5 l  a* I
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ; n. J' Y) t2 f2 x6 \9 Q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    4 l0 T) I4 A" Y8 f' T3 A' \
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);1 v- X3 g4 P- K# h# D( T4 o
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 F3 |: f  N8 l/ k
  521.     return TRUE;: ^. G3 `3 I4 `+ A& J
  522.   }
    ' I2 E  ]$ t+ J3 n- v1 I& R6 P3 ]4 H
  523.   // Nuke 0118: Delete run.exe
    4 N+ d* M1 }% Z, b0 y" G: |% x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    # `. \# Y! p) G- W
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    8 U6 @* G/ f9 @6 S+ ?, G5 r6 ?" {
  526.   if(!ReadCfgFile("Config.ini"))( U1 \! d' W, d% M7 F% n- l
  527.   {
    / y1 ?+ `2 {' c7 Q) C' X
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. z/ K- i) L% a: h! }8 w  R7 h
  529.     return TRUE;
    : G) i8 d) p; n( A! ^
  530.   }6 v$ S; h' x: `2 P, l1 f5 m
  531.   HANDLE mutex;
      q! ~1 j$ C, K$ t  P) m  n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ t7 A! @, ?% S) D
  533.   {
    $ m9 s9 B7 o4 n  u  W. `
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)  `3 Q/ ^7 d' S* ~( M! u
  535.     {
    + B" l+ a) o7 ^6 D. Q
  536.       CloseHandle(mutex);( D' q3 E1 N' U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);1 b: B# M5 q1 _
  538.       return TRUE;$ L! v7 s6 h8 l3 s. g9 _$ N
  539.     }
    ; j' l' H. q- ?# g9 O; I2 S. q" z
  540.   }  
    2 @. U& v0 H; O9 U7 f- `, N
  541.   CloseHandle(mutex);0 v* o' p& Z$ H. ?; ]6 K# s

  542. . t8 f5 K- R% k* U6 m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    1 k; }6 I* T! U: A9 f9 x$ M; D
  544. 1 Q" _  p5 ^( f5 a
  545.         AfxEnableControlContainer();5 n* k0 u) Z( I1 x

  546. * f& E- E) {4 Y
  547.   bCanUpdate=FALSE;
    # N0 W/ P' ^0 u
  548.   dwStartUpSteps=1;
      g0 r$ c% v9 g4 ~* K+ I
  549.   dwProgramState=AP_NOTHING;' s/ \  N! [! c" M. D
  550. ; e$ B" l) v5 b2 b
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      Z/ [4 U& `4 n# H* p

  552. 0 J& f" r3 a8 J' s3 b$ E, O
  553.         // Standard initialization: J* S3 a6 P- ~
  554.         // If you are not using these features and wish to reduce the size7 y- T" z3 {3 \% i
  555.         //  of your final executable, you should remove from the following
    3 V" y7 k6 a1 K, M
  556.         //  the specific initialization routines you do not need.
    # a  ]6 k, m, Q# a1 k

  557. % h7 W1 [- d  F. k* j  T9 B- J. B; Q
  558. #ifdef _AFXDLL4 w& D9 B5 v0 |4 H, _
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL9 M5 m8 Q3 `4 A5 W- [3 F7 m) \" j
  560. #else& v" j+ @# i& Y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; `2 c& ], v: d) s: R/ W' O- l
  562. #endif* W- T0 K5 Z) m6 {& n  v3 Q, W. _
  563. % g7 M- f0 b( r& j$ u
  564.   dlg=new CRevAppDlg;* @' X; A% e5 [: ]6 i8 |
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + j0 b! s6 o2 O' y) {/ D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- L1 G8 k0 B9 B$ ?
  567.   m_pMainWnd=dlg;+ T2 N$ D! r2 {
  568. 1 O- t+ u; Y* N& G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : [8 J& W3 {: p0 `5 \+ h0 B7 }
  570. , ^( D( Q' R! G
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; V2 i# R" |7 N  h- H. x
  572. //  ULONG_PTR gdiplusToken;
    0 v, M/ q. Z7 d- p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 a; M1 J9 g7 [% M$ B% y
  574. / P5 x; p7 i, S1 z0 e8 @
  575. //        CRevAppDlg dlg;% U2 Z# Y: k  z0 g
  576. //        int nResponse = dlg.DoModal();
    - O+ n5 l3 C* o4 D+ k8 k
  577. //        if (nResponse == IDOK)
    ! q) a, c" Z& t3 ]
  578. //        {
    . Z' t9 q2 e1 c9 E2 X
  579. //                // TODO: Place code here to handle when the dialog is: j: ^( I! }' O& V3 g. e
  580. //                //  dismissed with OK
    8 `; S9 _4 z4 s' G* i+ M) {0 g2 ~" N$ K8 C
  581. //        }
    % Z, i6 p/ [, p8 x7 j8 Z
  582. //        else if (nResponse == IDCANCEL)
    ' b7 s3 y) ~1 c/ q0 {: Q* u; L% I$ S
  583. //        {
    1 x' V5 B& L  p# H3 M- Q
  584. //                // TODO: Place code here to handle when the dialog is
    / e: H; o" G, T! ?
  585. //                //  dismissed with Cancel* Y" R' B1 {; m. O$ M. N; B& ?
  586. //        }
    0 k# ]  b! R: f

  587. 5 g% S, a4 G* z; W% B! m
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 b/ Y/ G9 o% K' k8 v
  589.         //  application, rather than start the application's message pump.
    , j; A" Z" G5 j2 b
  590.         return TRUE;& o: E7 g9 \) J6 n+ z( q- J
  591. }
    # w* c# Y6 U3 B& G7 G% h6 P

  592. ' B; E! O- I' P+ y+ _7 U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' v& Y8 Z$ @  r
  594. {% D) G- {  E3 l' H& H' H
  595.   int i;9 u# k/ k9 o& i# N1 e8 Y: H* Y
  596.   char *szRet;
    ! x$ ~" T! \5 k8 H* V. h
  597. * ?3 O! l2 i" u  G; [1 g% y: ~+ f) h
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    " g3 i/ o9 p6 Y$ K. D2 c
  599.   if(sztoken)0 M* x; ~# q. `$ t5 x% R/ j; J
  600.   {
    % ^: X3 f8 l4 L: v
  601.     szRet=&sztoken[itoken];
    0 ?- \2 I2 T3 b
  602.     while(sztoken[itoken])1 F1 S( V: _% `- G6 |8 N
  603.     {
    + f2 G8 V4 `" Y, E/ O) K2 G
  604.       for(i=0;i<(int)strlen(token);i++)6 d- ?# g6 `8 B$ R
  605.       {
    & S7 j1 x  d; I# V) ^& h
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    / p. \0 t2 _1 N1 }5 l9 U# G
  607.         {  e2 a" s( {4 {
  608.           sztoken[itoken++]=0;6 ]  F! x+ Y; u
  609.           sztoken[itoken++]=0;
    5 i" U* _0 c  y( K6 E+ g
  610.           return szRet;; Y9 q( F, w6 t1 u% K
  611.         }6 r( X- n4 U, J+ Y5 T
  612.       }: r# O; I* s: q% l! X' g4 |
  613.       itoken++;- H' }4 w1 E" R* T* m& u+ w* y
  614.     }1 E8 `4 N2 V6 p* v  e/ D, P. I
  615.   }: R$ s$ Z3 W5 Y" z, c
  616.   return NULL;
    4 g9 I* t/ m( c+ \+ l
  617. }
    " D8 d. i! x- ]% A' @1 X2 P- ^

  618. & V: v# h  Y  i3 z# P
  619. void ProcessProc(long Total,long Current)1 h' y$ u( u& `* G) W$ A
  620. {
    9 P$ G4 k  }% _: Z2 h
  621.         MSG msg;
    1 J& f5 t3 D* R6 {3 |( h0 m
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);: o9 S' g. X# @: e& R
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));, M* r$ Y; A7 s  z, {
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))0 y& K4 \' z3 D; c" k
  625.         {; d! L: A; l! P8 t9 U5 f/ z
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 z% k. K2 s! x  }5 D* `# u& G
  627.                 {
    6 J  V+ Q4 A+ _
  628.                         return;* d0 a0 N+ f2 x% a/ A0 T; G5 w
  629.                 }
    ; K: G. o# D- j) `2 G3 f+ v9 i
  630.                 TranslateMessage(&msg);
    & C! L& C# ?% @  K
  631.                 DispatchMessage(&msg);
    9 L! Z3 W& l0 x2 b% R2 P  q
  632.         }       
    " P  y6 a) U5 j0 S2 |
  633. }) z5 K% W: t9 u( {# r) R

  634. , x/ u, G( z) C" m
  635. BOOL bFirstChar=TRUE;% x/ C! i( z# A! }

  636. # q, r) C- B. x
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 F& e  j2 Y  F# x! y2 g
  638. {
    6 Z+ X% X% O) A
  639.         // TODO: Add your specialized code here and/or call the base class. G" ?2 l; u9 o
  640.   switch(dwProgramState). B  V9 e9 ?% r0 n/ F# Q
  641.   {9 W+ T, {4 M+ k1 h; P" D  W
  642.   case AP_NOTHING:
    0 J1 K5 x- V3 Q. B" N9 N4 Z3 Y
  643.     switch(dwStartUpSteps)- m+ a( x/ s" i% s" Q) k- `2 O: V
  644.     {; s) S( L' D3 d3 V
  645.     case 1:
    # d' C! O2 f4 e( r- z& P" _/ q
  646.       {
    + v! P5 i) T& @- _$ v9 P
  647.         int i;
    . A& {8 X1 v2 Z! A
  648.         CDC *pCDC=dlg->GetDC();- T: r; L" ]+ o) R
  649.         HDC hdcwnd=pCDC->m_hDC;
    * ^! ^  ~) e: Z7 m0 g( d2 ~( Y
  650. //        Graphics graphics(hdcwnd);
    ' @* e2 A+ E) v# |# g" ^6 f* k- K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 g$ @5 \+ `6 }5 I5 c
  652. //        INT iWidth=bitmap.GetWidth();1 j, h/ N% [- L  F' G$ V0 u  c
  653. //        INT iHeight=bitmap.GetHeight();! B# t1 S) M2 k4 X% D
  654. //        Color color,colorTemp;
    2 T# Z! I+ k& W' L6 D0 i- e
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
      y( p1 B; F3 r- k0 U6 c1 n8 G' R
  656. //        {
    " ^; W' Q  @, @0 V5 ^
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    9 n4 p/ ~  I( j; q  N+ \  n* H
  658. //          {& c4 c; l/ \, C4 ^% F; F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; {% _# R/ l7 \6 s
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 F1 E6 p" v6 m1 `+ _- P! h5 B
  661. //              (BYTE)(255*iColumn/iWidth),  M& I+ q% b1 b
  662. //              color.GetRed(),
    ( N& C5 M* s: F) G: k8 e+ A2 Z
  663. //              color.GetGreen()," A8 ^% A0 i8 i; f# i( x( s# ?5 w" W3 L
  664. //              color.GetBlue()));, g) V7 G7 T. [/ z( G* ]/ e0 ]: e
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 ~- g; C5 @3 l" z4 x$ F
  666. //          }+ E, x4 \, b! }
  667. //        }
    4 ?: c. u) f, H3 I
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);: U$ E- E. E. P7 Y, k/ Z4 E3 G
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 z1 \' _8 }/ b0 x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # o- C" _2 `# ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) e, ~0 n, M0 w* \9 p! U
  672.         for(i=0;i<240;i+=8)
    / z. }) Z9 o* ^4 W  G
  673.         {
    ( _7 E: D0 U# B3 d* [" V8 M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& ^' P/ J- P7 N+ a% x: q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, B" Z9 v/ J4 ^
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 w: i& h4 Q' V! V, m2 `
  677.           Sleep(33);, x+ I9 m( E3 K( U
  678.         }6 o) I$ ]0 c% m) E6 \5 N
  679.         Sleep(1000);
    0 Y/ s0 r+ J, y- p
  680.         for(i=240;i>0;i-=8)  O& m7 K  G: |7 |5 t2 t- }1 v
  681.         {1 n0 N0 N* _) `* n+ Z9 t/ |
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 g6 H  `# T; k2 w* {7 r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% o' c. D0 ?  o( V/ ~  \, c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % h- `8 F3 i: T; d5 E% V5 z2 c6 \
  685.           Sleep(33);
    0 F0 P5 x- t  ^0 F% N
  686.         }
    ) f' H+ ^# M0 ~; e8 ~% g
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ O3 }; t0 y4 n2 Z  O
  688.         dlg->ReleaseDC(pCDC);
    & z: |  V" `* a& Z% ]
  689.         DeleteDC(hdctar);" w0 |- D, k6 y3 w
  690.         DeleteDC(hdcsrc);& M2 k7 M6 L* t9 V& d4 g
  691.         DeleteDC(hdcorg);
    ; k+ _9 a" `' n+ e8 b; X7 R
  692.       }
    ' A- {( S) t* N$ K4 G" Y3 ?
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    0 y4 N5 A8 H6 \! @8 ~; T+ A& Y
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: e3 J+ d5 X& v5 S0 l5 x
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");6 Y0 L4 e; q6 ?" C) w
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");# k; t( G5 u( g7 K$ ]; [. y9 ]( G
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 N( [4 X& p) j* ]6 x. @3 b
  698.       if(!Dn.Connected())1 }  ?" t! q0 ]8 p- i7 x, M
  699.       {* l" E( X3 ^9 |# O
  700.         dwTotalFiles=1;9 I- A% _8 Q# K1 ~2 @& }7 y& B+ t  L. T
  701.         dwDownLoaded=0;
    1 l- \; C  h2 h1 J8 h" T  c
  702.         bSilentStep=TRUE;, @' Z1 Z4 o9 G; ~- h. s8 C
  703.         bCompressed=FALSE;6 Q+ Z' |+ k8 e- a' G
  704.         strExtLocal.Empty();* W' ^0 Y0 Y: n, q8 j
  705.         strFullName="readme.txt";
    ! m& N+ ]6 _5 f5 Q+ g- g; E! R
  706.         dwProgramState=AP_CONNECT;
    ! C# b8 [3 I, y. S, w3 ?
  707.       }
    8 t# q3 k6 x" g% Z
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / s0 U$ @4 s* O8 h8 m9 Y9 M& g3 d- P
  709.       dwStartUpSteps=2;
    8 U  T/ @6 m: k1 G/ W: l
  710.       break;+ @" U, [4 `2 T
  711.     case 2:
    , v, ]  L% f. U9 \: U
  712.       {2 u1 {3 R- I* D$ Q
  713.         int iEOF;
    2 n2 {. A, O  I' u1 j
  714.         FILE *fp;
    ' J8 s, a5 o( S% N0 ?1 p$ I
  715.         char szString[512];: }0 @6 o% h/ g: M2 c
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! i3 f2 t6 Z5 z, M* U
  717.         if(fp)8 c% p, W: e0 z. V1 {! U2 c3 b  o  l
  718.         {
    2 Y3 G9 W2 @- ]# g% F# K, B
  719.           do- }' t7 B+ T; L7 H
  720.           {
    $ _8 M  v9 g7 m( r$ e* G, K# x) X0 |3 b
  721.             iEOF=fscanf(fp,"%s",szString);* Q* e; b1 z( e$ K  w! h: ?3 \
  722.             if(strlen(szString))
    % p  C! `0 k$ e: o. d
  723.             {& c" s6 Z$ l- I/ G8 f1 D
  724.               if(bFirstChar)8 P1 x  J  u& r5 I
  725.               {
    9 _4 U. j+ @/ x5 F
  726.                 bFirstChar=FALSE;
    / M1 B( @# [" `9 A4 P0 L' Q
  727.                 bConnectIsBig5=FALSE;
    4 r1 v" f" X" H) b1 K! w/ i; H5 e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    # U- i/ q* u+ \. `4 F7 F, w
  729.               }
    : B- z0 u2 q- W5 _5 n& U
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# @% D* H1 T7 o$ n, C! z6 ]3 u
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! K6 b8 J) W6 ~  Z- V3 w
  732.               dlg->m_ListText.AddString(szString);
    8 Y7 x  y3 ]+ W  j7 t4 R& I
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) M0 A9 ~  r0 w% ]
  734.               *szString=0;/ K7 f8 W7 X5 M; _, k) h' k
  735.             }: \' `  T- I+ [" d
  736.           } while(iEOF!=EOF);
    $ b$ J% F+ ~; M: R+ v
  737.           fclose(fp);& g& {7 q3 W0 z1 g# K
  738.           unlink(".\\DownLoad\\readme.txt");
    * S, Q% D9 y; D
  739.           dwStartUpSteps=3;" X! H; k+ G' u' C' X8 L% K
  740.         }
    ( \- c1 W+ x  D; G9 O0 W
  741.       }
    8 Y' b* W, o* B7 c2 E
  742.       break;
    ' J; B7 l$ W$ [+ [/ S
  743.     case 3:
    8 O4 R. R% T0 M1 k1 X, }
  744.       if(!Dn.Connected()): F+ Q" k9 J/ d+ i& B; M
  745.       {
      G/ X4 O( {1 z$ |1 V1 u% Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 B9 n* A0 f1 A8 u( `7 V9 `
  747.         dwTotalFiles=1;
    $ i( N- N, B- O) I7 j9 r$ _4 i
  748.         dwDownLoaded=0;
    ' C5 ~: Q/ f4 r
  749.         bSilentStep=TRUE;! Y8 I% b) F# @  e' F; n$ t
  750.         bCompressed=FALSE;
    * G" G! }; s5 s# v/ A* F  j
  751.         strExtLocal.Empty();4 p; W1 Q, r. Z0 G- P7 I
  752.         strFullName="checkversion.txt";
    + q7 r  {0 ^" H/ c$ O- h; w
  753.         dwProgramState=AP_CONNECT;
    9 S3 \! a( y; B9 F1 v* @( p
  754.       }
    / t( ~$ |/ P- x$ Q# U. |8 E
  755.       dwStartUpSteps=4;
    ' H  @( ~3 X$ _
  756.       break;; F) A9 p: D! l, k
  757.     case 4:+ B6 P0 U7 z# S) q
  758.       {7 J! M' @7 f4 c0 O
  759.         FILE *fp;  ]4 t7 W0 J7 B6 I; g  f
  760.         char szString1[128];
    , `4 D: L2 V$ y+ K( T( R
  761.         char szString2[128];1 z  x- F( ~) A/ ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ! m' d( j# U8 {1 V8 w/ M8 P8 h
  763.         if(fp)9 |. f$ S" q& |) G" E6 F
  764.         {
    / Z& ]/ G- H4 _- I4 Z0 v/ n3 ^
  765.           fscanf(fp,"%s",szString1);7 r, X( \4 S  ~8 i
  766.           fclose(fp);$ S5 T$ P/ [& p
  767.           fCheckVersion=atof(szString1);+ B$ V& B2 q0 C2 J
  768.           fp=fopen(".\\checkversion.dat","r");* ^; y/ p+ d: C
  769.           if(fp)
    + j; {$ @9 {) E# q
  770.           {
      {  E( y2 _- |3 k
  771.             fscanf(fp,"%s",szString2);
    5 M6 v9 |$ D' ]0 o
  772.             fclose(fp);. d/ x6 _4 T6 M9 k& X
  773.             if(atof(szString1)!=atof(szString2))" }4 J5 i. ~) X2 g2 ~/ b5 i
  774.             {$ }: M* U' V2 q: ^% `; q
  775.               if(!Dn.Connected())
    : Y* |. v1 V$ h2 ^  N8 r1 B6 `% l
  776.               {
    + ?4 q2 N9 R) b1 R( q3 g- q2 ]: p* ]
  777.                 bFirstUpdate=TRUE;
    " |+ {+ A; ?; b, J
  778.                 dwTotalFiles=1;5 a8 y' x2 t4 y. M9 X3 }
  779.                 dwDownLoaded=0;
    # O6 f3 i7 G0 j$ M- S; f3 J
  780.                 bSilentStep=FALSE;. c( H( A4 e4 ^! v4 I9 R: x
  781.                 bCompressed=TRUE;
    6 l6 }) U# e# U, L8 d" r
  782.                 strExtLocal=".\\DownLoad\";
    / E7 C8 n/ h+ w3 R( ?
  783.                 strFullName="update.txt";
    6 D; \- I6 u% W6 V  v
  784.                 dwProgramState=AP_CONNECT;
    - y0 C* Z7 n0 p9 F
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");. ~7 M6 j; y5 @( s: X$ N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / o; [+ q/ K. _. ^! y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");# I; T: B) a0 H6 C% A
  788. 2 ?: }" u/ t5 A- w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - F" d" J- Z$ q* G' p
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 ]+ C/ o- [; t" @9 x2 e$ W" C0 y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    * n2 v! l( M* S' _- f
  792.                 {5 q. X+ Y/ m" B7 M) r7 V& R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . k+ D& n- i; I9 y/ J+ }
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! X7 _2 s8 [; j: M( @# b* l1 P1 M# b. e
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ) B( Q; O' ?6 X. Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' E9 r' Y  N' j" b9 R
  797. 5 z" o' l: H4 V. S  `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    6 L2 Y* P" c& U& T% o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 I3 F9 X2 I: t7 M4 q/ p8 y* n
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");( c5 I% y' o: |8 C
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 \1 G6 Q, U; o* X5 i% [" S/ k
  802.                 }
    * |! ^9 Z0 _% z
  803.                 dwStartUpSteps=5;: F/ T* o) E1 i  m3 r4 q+ w6 D1 _( u
  804.               }
    3 E% p. o7 [7 B9 Q
  805.             }4 h" K& L' x3 f
  806.             else1 K1 J0 t- ^! d4 R1 c8 |
  807.             {2 ~  `8 \% y% N' t
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( H8 y7 m9 }2 K
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( Z( X- D/ D8 |8 i+ G, [
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . t/ y0 I: }3 c. v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- {. z1 b3 e, E4 y" o  @# y" |
  812. , E5 B' b, k7 ?9 [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 ~% G% ~2 e$ J! D* h0 Y  [
  814.               dwStartUpSteps=99;
    4 Z# i/ K; Y2 L
  815.               bFinishUpdated=TRUE;- k. ?/ V& [6 \4 \+ H
  816.               bCanUpdate=TRUE;4 A' G0 h$ m) n3 z
  817.             }( z/ s. a" G4 y5 k; L4 N6 u
  818.           }
    3 X. D% {; e3 a6 e9 D
  819.           else' b" h, G! e4 \- K
  820.           {
    . s- _9 Q. `# k  A2 x8 X
  821.             if(!Dn.Connected())3 D( N" Q# t- m, l" m* [. j
  822.             {
    9 i+ }+ N% A9 b4 I
  823.               bFirstUpdate=TRUE;1 j: H8 p, w% Z' E+ Y- y
  824.               dwTotalFiles=1;9 A" B: @+ i+ I- B! Y0 @) s4 ^2 z
  825.               dwDownLoaded=0;
    5 a! ~. D; l( X% o8 y- W
  826.               bSilentStep=FALSE;
    7 e) {) Z( p: Q! ~: ]
  827.               bCompressed=TRUE;5 f% V, ?. r, d5 d3 w
  828.               strExtLocal=".\\DownLoad\";
    3 p7 n- @! J8 e  {) _+ k9 o
  829.               strFullName="update.txt";
    4 I; ?# q# M2 K: ^  S1 L
  830.               dwProgramState=AP_CONNECT;% H  Z) O2 H) j7 E- m) g  w
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # M3 H4 e# ]4 x1 y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% {$ |1 D$ e9 b$ B
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");5 L5 t2 b5 k5 x+ n9 i/ n/ y/ Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 b- I$ {8 t6 k/ D: C8 C$ {
  835.               unlink(".\\DownLoad\\checkversion.txt");- `- }( V! g! [
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    : @. j; ~2 A( C* Q% p9 G, l; _
  837.               {7 X% u0 {1 w- \1 w$ F' E
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");( D5 ^: }7 @2 Y9 D! T4 d' p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    % a) n) g3 `. ^+ r
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");3 @3 U+ v  e! f) e- ~
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! G6 W  }5 J2 W( T% `1 ~5 p
  842.                 2 `& Q  R; ?2 j0 v! H
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( j8 J3 V5 y/ P/ }! I! [2 B* a& |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    3 M) I" }1 K" G4 o9 `
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ; B- t' c6 ]" Y. B; T* w; u
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 L. {3 D% @* W
  847.               }
    1 l2 ~7 N" K+ }( Z
  848.               dwStartUpSteps=5;: C5 \/ p: F4 t" w- ~$ f, l
  849.             }0 [) V: S5 H1 ~" C1 M+ P
  850.           }- Y3 s( [* r+ H7 [. W/ e7 U, a
  851.         }
    6 E5 k/ a) i/ i; m" p; b9 P
  852.         else3 b- u0 V( }2 J# ^% j5 O+ \
  853.         {7 {1 c, C7 Z5 R& `
  854.           dwStartUpSteps=3;% ?7 d# I! K4 [" v2 g
  855.         }( L, }/ `% V! z* _1 G# o
  856.       }; ^5 R* i' O6 ^3 t
  857.       break;
    ( E4 e  Z, h8 a. N* R
  858.     case 5:
    6 @# V  |1 k/ S2 B
  859.       {  k( R$ k4 m( `* `9 K4 m# \0 a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)" p6 b* R' n) e+ V, k: E0 u
  861.         {
    2 u: B: x# X; k! \, s6 r
  862.           int opt_overwrite=1;
    ' n" }. P# M5 r
  863.           int opt_do_extract_withoutpath=0;' K) M3 A+ ~- z* Y9 X
  864.           unzFile uf=NULL;
    $ l1 A2 O6 x8 i. @
  865. ) k3 j3 a! R6 v$ U1 b
  866.           uf=unzOpen("Wsa.zip");
    $ U) b+ A4 T! e5 V# X
  867.           if(uf)
    5 m0 o  a- w) }1 x7 S
  868.           {
    ( U) e# l+ ?4 q# V: i
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    / O4 \' _) j& x- O# s
  870.             unzClose(uf);) X6 V' l+ [+ P. w/ H
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");" p- R0 R$ Z" v$ Q$ ~2 I9 R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");0 L, t( g9 L" o  ?# c; r7 H  L% z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    - r2 k8 a; Q0 j2 P7 s/ W
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + I% q5 v  X' b; G) c) s1 L
  875.           }
    8 X8 B* Z* p$ v3 R. Z
  876.           DeleteFile("Wsa.zip" );0 K% p) I1 H* D8 L& z4 I# Y
  877.         }
    + T: ]/ J+ r& e. k

  878. 4 A( J6 L8 X* r
  879.         if(CheckLocalVersion())
    4 Y) v+ S& R& R  P
  880.         {/ f1 p2 `. u7 E- @9 H, L- {- z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ( J! H- X7 C. A* ~1 F
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");! G! Q, M$ |* F2 r$ |: |; F
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    $ w6 B8 ~: E/ ?
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; s! U0 Z3 d" i8 A1 ]0 _0 b
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 I1 c( F' M. R" c
  886.           dwStartUpSteps=99;
    - R; p: }# p* r
  887.         }4 B( I) @! ]7 y  [! Q: K
  888.         else1 a# S, E( X$ M! D* _3 |
  889.         {
    5 P1 s( s' {! \( t/ ^8 q' p
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 O: ?; r, y2 H9 g; C- {
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , l! F% i3 z4 h; H& g
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");6 [( b2 ?0 w$ u0 c0 b# E) M. v( Z  r

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

) _4 m- x. E$ a* f1 Z  v. y: ?$ x& {" a  g4 _+ U1 i+ M

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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