找回密碼
 立即注册

CSUpdate.exe源代码

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

" q9 S% z3 m1 _5 M6 [6 F
  1. / RevApp.cpp : Defines the class behaviors for the application.8 c) V0 x+ R" c6 X1 r2 z
  2. //
    ' G# C: S' O- m% {
  3. " d- n4 M2 o- q5 L+ K/ [
  4. #include "stdafx.h"% J. r$ {0 L$ _

  5. 0 t# Q1 L0 `+ d  P* w
  6. //#define UNICODE: f3 t) O& c9 U9 C
  7. //#include <gdiplus.h>$ [% t# Y1 [7 P/ }4 G+ B
  8. //using namespace Gdiplus;
    ! G2 R9 x& S; }9 x- e6 F+ j
  9. 0 \: J: M" k0 ^7 K$ |
  10. #include "RevApp.h"$ y0 g+ ?' U) i+ N, d! H: l
  11. #include "RevAppDlg.h"
    & a" S5 D3 N- ?3 x

  12. 5 G( Q- _/ T2 j* V  I- Z
  13. #pragma warning(disable:4786)
      O# r* k0 ]" g, ^
  14. #include <map>
    . j( A% o+ Q2 ~* f# g1 V: }; O
  15. #include <list>
    ) R6 z& Y) c# V
  16. #include <direct.h>
    : b5 \& U4 _6 p2 n8 x

  17. 8 B: f2 n0 d( J( b
  18. #ifdef _DEBUG
    9 w5 o% P# e% c
  19. #define new DEBUG_NEW5 o- e# _4 }$ `9 Y
  20. #undef THIS_FILE
    ' t4 D6 \" L0 r/ {1 A
  21. static char THIS_FILE[] = __FILE__;# `0 O3 P* T1 L& h
  22. #endif
    ' U: i8 `( J# `0 h" B! n# E
  23. #include "SkinResDef.h"
    : v. w* d! C( j0 ?) O1 g
  24. #include "ChangeBG.h"
    3 w4 G4 \( ]8 d" W/ M( B/ t4 z" h: t
  25. #include "AFXINET.H"
    9 ?4 Y) K6 z, K& y/ R

  26. 2 o. [7 I0 x+ ~; k$ j% w
  27. #define TRADITIONAL_CHINESE 0
    * _% s& D9 J% W, Z/ p/ v
  28. #define SIMPLIFY_CHINESE 1. G9 V2 W, S" [6 v
  29. #define ENGLISH 2
    / q( N7 I; w( `+ X# x* i
  30. int m_iLanguage = ENGLISH;
    - {$ l% L" i6 M3 ~$ f8 B0 S1 \( k
  31. /////////////////////////////////////////////////////////////////////////////& i% [+ l8 O9 ^& E+ i! r
  32. // CRevAppApp" D6 y1 Q) B5 r6 U: Z5 ^
  33. : N1 d, }+ P( ?* a6 c# X6 h) |7 w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 u0 X% H1 o1 h& Y9 Z7 I5 U' T) g; ~
  35.         //{{AFX_MSG_MAP(CRevAppApp)/ M& i- ~, }- b: A' y7 m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.& g6 W( D: m! B% @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    # j  r% f! Z2 g3 x, \! c4 ?
  38.         //}}AFX_MSG
    ( m/ h8 _6 i6 |* V" f
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), v  M" p! z$ f3 B* {% p
  40. END_MESSAGE_MAP()
    8 k& F* w3 ?) [* h+ s7 U8 K

  41. & t7 H+ E1 m& W) y6 W
  42. /////////////////////////////////////////////////////////////////////////////1 F: T( V% F3 I3 z. h" w
  43. // CRevAppApp construction% b( h1 h7 U7 J$ w1 l

  44. ! j, r0 d1 b4 ?% j5 e4 C9 E
  45. CRevAppApp::CRevAppApp()
    1 D. x$ V# g1 S0 r: d8 W
  46. {* c' t' D7 [5 q/ K, z
  47.         // TODO: add construction code here,
    & d5 ^9 T+ D5 ~& n  @+ k
  48.         // Place all significant initialization in InitInstance7 e! E, H6 ?/ {  }8 w* }+ _4 q
  49.   bDisplayIsBig5=FALSE;
    2 X9 C  m8 G, ^& V
  50.   bRestartUpdater=FALSE;
    0 [& L* {4 L5 z5 t* g0 s& Y. f: M
  51.   bFinishUpdated=FALSE;
    4 K9 C% i' R- x, y. t( ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      S( P$ ?$ U2 N6 e
  53.   InitChangeDataBig52GBKS();
    - C- t2 G8 j3 E5 @
  54.   InitChangeDataGBKS2Big5();
    ' n- j2 E% a' M% E7 E" ~) s3 V
  55.         //; c; x1 L/ U" r9 M  r0 a' K
  56.         bClickRunExe = FALSE;
    1 x9 f1 d! R/ M, h1 G
  57.         //
    - Y! f% ~: [, [! ?8 @
  58. }0 Z4 K  h; t+ J$ S! l6 p

  59. $ E* \- E, Y) o, f' i' i- i: X9 |
  60. CRevAppApp::~CRevAppApp()+ c9 g$ l4 e7 k3 |5 r+ t2 L; ?& R
  61. {, v: @( j8 J& r! {
  62.         // TODO: add construction code here,! p2 I+ W5 k. U# d  {
  63.         // Place all significant initialization in InitInstance
    $ K. T5 y7 G2 Y, G
  64.   EndChangeData();
    / R$ E: e/ \* H; L
  65. }
    $ }8 C/ |( @) w0 B2 V

  66. 3 M$ K* p) I5 [0 Q3 Z' N; w
  67. /////////////////////////////////////////////////////////////////////////////
    % G: y# Z' |; [0 M- Y2 q
  68. // The one and only CRevAppApp object
    $ X" D6 T; t) W: q9 u# ?5 U% F
  69. ! x- ^" f" D* E( K1 C5 O0 @" c
  70. CRevAppApp theApp;
    1 }! o+ |- M2 L; @7 A6 j! a% Q. u; {: f4 y
  71. ! y6 N2 s3 y4 K7 a) J% t5 _- A. `# x7 t/ B
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( n2 v, B/ q% z; l6 }4 L$ c
  73. {; T0 _/ e6 X! C
  74.   int iEOF=0;# b& V( L( r5 U2 c- w9 O
  75.   char szTempName[MAX_PATH];
    # |  P8 \) G1 p8 D' [
  76.   *szFileName=0;& J+ N* P% e, N! t
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " x' d2 s1 e; o7 a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    & G) O( a& ^8 v5 }4 ?
  79.   {; X3 K/ E) }( ]( O6 t. k" K) Z+ t
  80.     strcpy(szFileName,&szTempName[1]);
    9 h5 v, Z. f- `9 j3 L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    " A6 i. a1 e. U3 e, t; i
  82.     {" B, ?2 T; n" Y* K' o; M, v
  83.       iEOF=fscanf(fp,"%s",szTempName);& m% w# T5 ~: I/ I6 e  {
  84.       strcat(szFileName," ");8 Y: j7 X) W% e: [  e# ]" R
  85.       strcat(szFileName,szTempName);1 B" ^( Q/ I3 o2 o) E: Z; D
  86.     }
    + n7 o( m3 n" d" U
  87.     if(strlen(szFileName)>=1)' P6 @# n# J& Y, e6 |9 j4 C0 q
  88.     {
    . G- s$ ?9 ?* q0 v
  89.       szFileName[strlen(szFileName)-1]=0;
    * _: c! I3 G4 u1 C. F
  90.     }
    7 `" R3 a! ?: [/ G2 `0 j
  91.   }
      f9 j5 c8 W) J! u! F# T- N* f1 K
  92.   return szFileName;# A2 V( F" e0 C- K/ D
  93. }
    * J! ~3 x5 S3 C5 d* m
  94. & t* w$ z2 [3 t, I* c' x+ C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % ~) ~. }: `! _# i  h% v% B
  96. {
    " }; g- @. g9 I5 [5 V
  97.   FILE *fp;
    + u, @/ t* d6 A: N+ ^) l
  98.   char *key=NULL;
    , N! j& X0 p9 |+ Z) D
  99.   char version[MAX_PATH];2 W/ y  C: M% o1 L* M
  100.   LPUPDATEFILE file,olds;
    " {- h1 M3 ?4 }# h* f
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" q& E' M/ J+ |! p

  102. 9 ?  l- ^8 g2 W5 D
  103.   UpdateList.clear();
    4 A& O/ t% E" o  ]% s' Q- a
  104.   UpdateFile.clear();5 X* {) e* Y! q$ N+ a
  105.   if(GetFileAttributes(filename)==-1) return false;
    * p& t; V* o9 i8 c0 ^/ B
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 A7 X: M, h0 t, `0 w! A4 x
  107.   fscanf(fp,"%s",version);1 H9 H0 q4 s' T. u3 s
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ; Z) n5 N( Q7 M& `3 v
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 [  a; f! U$ E4 B
  110.   {
    : \7 T0 o- }0 q' M6 [4 T" p/ K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 y  z/ i) ]2 Q/ c
  112.     fscanf(fp,"%s",file->path);
    6 @1 l( H; E1 A1 z0 V
  113.     ReadFileNames(fp,file->file);- u7 n8 U* V' G' A: \; ]7 f1 }
  114.     strcpy(file->full,".");+ q  y3 \2 P- A0 t* {
  115.     strcat(file->full,file->path);" \- w6 k$ }9 H2 G% S
  116.     strcat(file->full,file->file);4 K+ a" G  J0 l) G" \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , B5 r# w$ o: z( s
  118.     {! A: l7 r9 N6 @* n
  119.       file->vers=(float)atof(version);& g" c0 l. @7 T& l5 O% G% {3 A& p( ^
  120.       UpdateList.push_back(file->full);1 s6 g7 b. o* M: m' `) {! K
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    * r+ r) o* Z, c; V
  122.     }
    # W( o2 j) @7 F, d
  123.     else
    6 V. k/ F" a' t0 j2 ~% \
  124.     {- U2 s8 K, [1 x& |
  125.       olds=(*p).second;
    8 J( I( a  G7 o2 L6 m) d
  126.       if(olds->vers<(float)atof(version))0 u+ N3 V8 j7 g) o+ o% I/ A( K+ R
  127.       {. N3 ^7 G& s, |( [1 a
  128.         olds->vers=(float)atof(version);, O  i; Y" C7 ]% T' N7 a/ P$ A. A% u( Z
  129.       }' u, }+ A. ~7 |3 c( |
  130.       free(file);1 l/ e6 q3 b9 z3 d7 v2 r0 A1 p8 l
  131.     }
    3 R' D' D8 X# I- O& c9 [
  132.   }* ~7 K$ Q( X6 l% F1 [. f
  133.   fclose(fp);- [/ Z4 D* x& z! R. E: \" [4 A7 n+ ~
  134.   return true;" M: U  x* M) [9 }1 B
  135. }
    8 c3 ^6 }5 ]1 N5 P, Z; q

  136.   X" _. x' j# s; _1 W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)" V8 q/ I2 X$ r# c3 L; i7 {
  138. {
    0 h) X1 Z" j' H$ j/ {
  139.   TCHAR  szFull[MAX_PATH];
    - V( z6 o/ j9 Z4 L9 i: k. Y( I# I/ l
  140.   TCHAR *token,*inter;
    * r8 K9 [  a! E" I
  141.   *szPath=0;2 Q3 |7 O0 ~! u' E9 p' ^
  142.   strcpy(szFull,szFullPath);
    % t$ i" v, C$ Q) y  j
  143.   token=strtok(szFull,"\\/");' |( U7 r2 e( i3 z! b
  144.   inter=token;
    $ h# P. b! u# K6 a' b9 ]+ ?
  145.   while(token=strtok(NULL,"\\/"))
    % B0 m. k$ ]+ E% l
  146.   {8 D* `; c( U5 J' Q
  147.     strcat(szPath,inter);4 h1 y) D) e$ s9 g4 [* ?: u! [
  148.     strcat(szPath,"\");
    - b/ V8 R4 A- ^2 o8 r5 s
  149.     inter=token;
    6 c/ H; X: C5 d7 q
  150.   }- n9 q9 d7 }9 \7 j
  151.   return strlen(szPath);, s# X/ I. f# t7 |+ Z8 V
  152. }
    # e( C+ N6 _  R$ t2 f
  153. & j3 q) E& L  B3 }* \" w2 C
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    4 O; U+ g  }% m4 [9 z" ~
  155. {5 q" }- ^5 r9 P1 O
  156.   DWORD attrib=GetFileAttributes(Target);
    / p% A& q& B1 f" ?' q
  157.   if(attrib!=-1)) x- e. E4 Q! z
  158.   {0 d, D) z. _, h5 P3 \5 X/ b
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , C8 r8 g- v( V' K8 \3 s
  160.     {6 R! o2 n; |7 n
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 X. I# F3 X- N3 e, [
  162.       SetFileAttributes(Target,attrib);& A, @6 F7 \( M6 R. S6 q
  163.     }  a6 X. |, B; \7 y
  164.   }
    ) F# P2 q! j4 p8 `
  165.   CopyFile(Source,Target,Erase);1 ]( T( q- }( a, x
  166. }% \/ W; H4 z8 v" k7 t7 W
  167. % ?$ N! V* V4 M$ }$ Z$ ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    * `2 H. I2 h0 ?) U3 y! M
  169. {  p2 H( N9 y$ d
  170.      FILE *fp;3 u! Q+ y/ \( ?8 a
  171.      char  szBuffer[8192];
      O$ t$ C* [! F/ |! Y- g7 h- ]) r' ~
  172.   va_list  argptr;
    + e3 ~& c! k' F6 l" R' @* `

  173. ) `' X- M& s$ k; u# ?
  174.         va_start(argptr,message);" a) w5 Z" s8 a5 O# e' x/ ]
  175.         vsprintf(szBuffer,message,argptr);
    6 v2 D5 C. G+ [9 u9 B; E
  176.         va_end(argptr);! ]) Q& L9 g$ H: m6 a
  177.   fp=fopen(FileName,"a");
    7 P2 I9 Z) n6 W$ y" `& i8 s9 M$ }
  178.   if(fp): ~0 g: l6 q; B3 c5 \3 _
  179.   {
    + k# r5 ?  q; A' }" l3 e
  180.     fprintf(fp,szBuffer);$ r3 e: S3 ]& E; A
  181.     fclose(fp);
      V. ^" L$ j4 `& R
  182.           _flushall();* ?& I/ g, t3 E0 o+ O7 ]
  183.   }) B8 K, x* e" M4 S% Z1 _- F
  184. }
    9 }6 _9 @, H' x) k! z0 F8 z
  185. , @# @; F9 ~' {& r  \4 _6 I
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ( l; s& C0 G- x+ e: X5 y
  187. {' B  b5 E" m5 n  [
  188.      FILE *fp;
    2 F' ?% q7 S% q) ^' t% p5 O
  189.     DWORD  attrib;( N. i  z% Q( w# M4 Z3 C9 C
  190.   attrib=GetFileAttributes(FileName);$ z2 c; E# x8 S8 d8 t+ Z
  191.   if(attrib!=-1)7 w3 p0 _/ v; P" p7 G
  192.   {# m0 V0 M" i* W8 f; @4 J/ U4 t
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 M# {7 n8 @4 I7 B# C! T8 X
  194.     if(!SetFileAttributes(FileName,attrib))
    ; ^0 f  o! t% L0 q2 N5 |
  195.     {
    6 j3 w2 x3 u; z: m9 ]2 f* I
  196.       return FALSE;- s! X- U6 k: R
  197.     }5 @8 X' n) m: ?: k9 D) f  |) f
  198.   }
    # n: u- |. G/ Q6 A; w" f  |; ?: L
  199.   fp=fopen(FileName,"wb");
    * R4 o3 g8 U5 r! L$ C4 H: w. J
  200.   if(fp)1 A  I# u1 O% P" c& y7 [9 v5 |
  201.   {+ ]' W+ L; c; ?
  202.     fclose(fp);
    . T2 E; p( }8 S  v
  203.   }5 `+ k( U$ K/ J3 V* B5 V; l* F8 M
  204.   return TRUE;" |8 V4 u' j& m/ ]9 d) w& C
  205. }
    . {5 n5 A6 ^2 \) a/ x9 Y

  206. . _* N+ R& D% I5 j" J
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , _! N- F5 H: r/ Q- g
  208. {
    ; a+ R' Y/ O: G$ z8 q
  209.   char filename[MAX_PATH];
    ! `1 a1 R. x) t; @$ F
  210.   LPUPDATEFILE file,olds;6 J3 L9 ^$ c2 D
  211.   std::map<int,CString>::iterator i;
    & H3 a8 G8 k. a" g" G3 m! t
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) `2 f% B, I7 r5 j
  213.   std::list<CString>::iterator l;
    - J: B6 Z/ q0 y
  214. ! K* C& z( a+ f: y; G3 J+ p7 l9 s) f3 W
  215.   if(bFirstUpdate)9 O$ v3 E. Z/ k% D: \
  216.   {  l4 {. s: C* l8 v) `
  217.     dwCurrFile=0;
    ) U( f# h/ L3 E
  218.     bFirstUpdate=FALSE;" Z7 s; @& N6 \0 W/ w% H9 o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# J, C8 m  s' @9 U
  220.     {
    / @. }' g3 ]2 H$ s; A
  221.       dwTotalFiles=UpdateLocal.size();+ J+ [4 q8 L3 {7 ^& F
  222.       dwDownLoaded=0;) l' O% O' H* K" K  T& v& J) N( X
  223.       bSilentStep=FALSE;
    & t7 L6 D, V- }5 R, O6 V0 K% r; X
  224.       bCompressed=TRUE;
    - {4 ?+ ~! E1 E' J
  225.       strExtLocal.Empty();
    & A. Y0 G7 K* h! Y; x3 F! Q  S4 |  O
  226.       strFullName=(*i).second;
    ! {. t+ N+ |! c" y; e, c1 I
  227.       dwProgramState=AP_CONNECT;
    ; }! ], u/ t" S* `1 v0 B( B
  228.       return TRUE;8 k6 }$ J: H( Z- ^
  229.     }
      m& O% `5 P5 ?, a
  230.   }4 A2 a' ^! e5 o8 h7 t4 y
  231.   else if(bRestartUpdater==FALSE)$ V5 o6 \) q+ I, r+ j4 e
  232.   {
    + a5 V" `1 U2 B0 ]6 P2 @, Z$ Q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 `- a, o8 k* n- P" w6 Z
  234.     {
    , Y8 z- `! {7 I4 h( K8 I
  235.       file=(*p).second;% B1 U9 K: f- x! @" Q0 a
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ M+ J* l9 B/ L4 s3 `1 Z! [
  237.       {
    3 @( O3 R# z1 Z1 A
  238.         olds=(*p).second;
    - }* Z: Y" q7 ?8 T
  239.         olds->vers=file->vers;# Z+ @3 n$ ]0 A* l3 d
  240.       }$ G7 q6 {6 o/ @' t1 Y
  241.       else, t# L6 y  K' }( g" o6 p4 R
  242.       {
    / l9 V! S; O2 f7 E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) `, J* {2 E( U1 {7 s, p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    0 n1 T% o2 B  A' B5 b& b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 X, m5 S1 M$ z( B. Z
  246.       }0 U3 g# R, y' U: Z! ], O
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 w" b/ W. R& P4 z& g7 d0 H( Y
  248.       sprintf(filename,"(%s)",file->file);# |0 y6 I6 m- v& q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' Y6 }* W6 Y+ ]' C1 P% f6 R
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 X6 H+ a, L8 |4 l9 Y$ ]( M
  251.     }
      c% e9 p8 m' J( u, Q
  252.     dwCurrFile++;6 c& |% t  P6 |) N9 n- O& s
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ G3 z" I" t4 k; M
  254.     {
    & u/ S1 [3 Q, G6 ]8 F; r( E
  255.       bSilentStep=FALSE;5 ]+ n- X4 W6 F9 l( r
  256.       bCompressed=TRUE;% P2 F+ o8 ~- }7 z7 d. A) w3 Z
  257.       strExtLocal.Empty();
    ; x1 i* c8 ?4 Y! E1 Q
  258.       strFullName=(*i).second;
    7 f* R) {. u" R5 h, z& ]2 Z
  259.       dwProgramState=AP_CONNECT;( {2 ]6 @: D( A
  260.       return TRUE;8 G! w8 t2 F0 ~+ z2 L
  261.     }
    1 d7 N0 P! |7 V2 s0 {
  262.     if(!bRestartUpdater)& A: j) N2 P8 {1 E9 H( A
  263.     {! r2 a  ~# V: m0 w
  264.       int iCurrSize,iFileSize;
    ) R( X# z( v7 s3 z
  265.       iCurrSize=0;
    + ~/ R  Z# V1 E- j* L% i% t9 v
  266.       iFileSize=UpdateList2.size();
    0 s4 u3 ^6 b2 w* @4 q
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    " |, {, Q5 b! Q  }6 W
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ; g( _9 j, w+ ^
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % b8 @% _+ p1 G% i
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 N3 f+ d4 D  Y' O& o2 @
  271.       Fclearf(".\\update.dat");: K! C7 F9 @  t( X
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & q8 i, [7 m% [& T1 j  t  [5 Q! ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 P7 Z  A3 A2 G& W/ o/ x' i7 r
  274.       {
    " {% i: |! a" T3 Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())/ F% U) k; B4 s: x
  276.         {0 x: V' i2 n+ ^; Z  |: ~( A
  277.           file=(*p).second;& W* Z' v+ K" D6 M2 b$ I
  278.           sprintf(filename,"(%s)",file->file);2 r* u2 J$ U  J$ Z0 d  H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' r: B! r: y, M1 ~9 u, T: @" M. D
  280.           iCurrSize++;& }( s4 h9 ?3 S2 ?' g1 I' N7 ^0 T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));: ?; a, r% O0 O0 j* i
  282.         }
    & g, M' c$ S8 r5 B2 ]: k
  283.       }% b0 @0 l3 Y5 p& k
  284.       unlink(".\\update.txt");0 l2 L  a) A: Y" W! i
  285.       unlink(".\\update.tmp");$ E+ A8 ~; G6 t
  286.       Fclearf(".\\checkversion.dat");5 x1 {- u/ ~6 L9 @. {+ }8 u: e4 u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 d. \) m3 r$ n. ^7 V+ p: |
  288.       if(UpdateLocal.size())( I: S) R% [: g
  289.       {
    ) N  w8 @: q3 G1 M7 O& e3 _9 z
  290.         UpdateLocal.clear();
    + ~8 U, t2 A! p0 A
  291.       }
    0 v0 i3 c! q. X( T) r0 \1 j
  292.       if(UpdateFile3.size())  N0 D5 \3 h& E& r
  293.       {- \3 w! Q; q0 o' A  X) S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    + L* o. n- ~1 l
  295.         {
    - X" P$ p2 Q# y7 M1 g" V  x, I
  296.           file=(*p).second;2 r3 u4 ?" k1 `7 P: m9 A( q, c5 s5 v
  297.           free(file);
    1 c- k9 Y2 Y, w3 z
  298.         }
    3 ^5 M2 x) X' v8 I) f4 P. Y! N
  299.         UpdateFile3.clear();6 |. V! w8 @* R: J6 o: q3 `) n" @
  300.         UpdateList3.clear();3 R" W9 n8 t0 ]- P$ b! _" B/ Q
  301.       }
      }3 l8 d; m4 [) K
  302.       if(UpdateFile2.size())
    6 g# q& A! t, y; A6 I, Z
  303.       {6 e' M8 i6 y8 w- W3 H* n0 i# S! \+ \
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& y: Z% Y' n+ r! [3 q7 A
  305.         {" w, `% V0 ^& \! L" \  l( ]  Q
  306.           file=(*p).second;
    * @$ X) Y, B. N  ]4 O; ?3 P; J
  307.           free(file);3 O2 u  n5 A! p) U$ F4 t+ Y4 B" a
  308.         }
    3 g! f3 E. B8 a
  309.         UpdateFile2.clear();
    6 t' S  [7 \2 D. i  P2 j4 i9 H2 F
  310.         UpdateList2.clear();
    & r/ K2 z9 Z1 V. N* a' `; |
  311.       }" l4 f9 m" S7 |: T2 x/ t
  312.       if(UpdateFile1.size())1 _3 ?, {  S; J6 y. A2 p, v& e8 z3 p
  313.       {6 ^5 R/ z- X8 P; S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ' J& z1 E. u9 c
  315.         {
    ' F3 p, o5 \9 ~5 l
  316.           file=(*p).second;( @9 _9 @- t1 r( p1 `
  317.           free(file);$ W7 b( F+ q7 l  \5 d& H
  318.         }, Q/ e! O) J, ?# d! p* C
  319.         UpdateFile1.clear();$ w) a! [- {/ ]5 `9 }
  320.         UpdateList1.clear();5 j& n* R- G( C/ n! z) T
  321.       }. ?6 `- Q4 J" I) ^
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));# E7 K: H: O. J8 a
  323.     }
    % [2 H5 G# s2 a8 Q) h' x  E4 ^7 z# |
  324.   }
    6 B: I4 j  W' ~1 Z5 x+ B& B5 ~1 e
  325.   return FALSE;
    & |' J  F* T5 e
  326. }7 ~+ ^: N# Y/ Q6 K  {* G
  327. 6 U, z4 `. Y. O/ {( M5 q
  328. void CRevAppApp::ClearAll(void)
    % q0 c1 m+ ~4 A
  329. {
    ( E% P5 [/ L5 O( m6 C2 N
  330.   LPUPDATEFILE file;2 x( u, b+ ~3 t3 w8 S$ N
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    * o6 q/ L% r! X+ c; k7 a

  332. / T  U6 T3 ^$ _$ j0 D/ M/ Y9 v! N
  333.   if(UpdateLocal.size())
    & a& u5 q, U1 Z2 r1 o2 \  G6 P
  334.   {
    ) k, u) n6 F0 o9 B8 M) u- i
  335.     UpdateLocal.clear();! M1 Q& c' s- `
  336.   }
    ' {: W+ F. |% ]5 |( d9 l
  337.   if(UpdateFile3.size())5 {, C0 m( l/ X% d2 R; t
  338.   {
    0 p8 T2 x' c4 E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! U. y9 J# K* g. `* {7 J
  340.     {
    0 V3 {' w- F* L5 R
  341.       file=(*p).second;
    * F! j4 c9 l1 x/ B3 k
  342.       free(file);$ O! Z- P& `: `
  343.     }; z; e" B4 q" ^- I) y; j. \
  344.     UpdateFile3.clear();, i/ h: N! {/ K* Q
  345.     UpdateList3.clear();6 H% C  y/ l  f6 V# c
  346.   }
    " C, x" w- p. c+ R2 k+ ~
  347.   if(UpdateFile2.size())
    5 |% q; }! w) {0 n! [
  348.   {7 }7 ^; @" b' Y& h: e# D4 Z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 H  ^) B$ M/ z
  350.     {8 _; L( X7 f$ C8 Z9 e, |
  351.       file=(*p).second;9 F" X$ }; |7 j* g3 N5 d
  352.       free(file);
    " K1 b- h, Y5 U7 u7 e) G
  353.     }: w) {" \* f/ V* k
  354.     UpdateFile2.clear();% }8 N( G* w6 C- ^) W& z3 G
  355.     UpdateList2.clear();
    4 j  a7 l/ p7 E
  356.   }+ x; w; U) M5 D; H  @' F- L, ~
  357.   if(UpdateFile1.size())7 y& K3 D9 ?3 G  n4 c: t; a; K3 d
  358.   {
    ! I' |8 s7 m! u( x3 U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 r6 ~4 h- _" W) Y5 T1 {
  360.     {
    6 {! |2 r9 `8 x0 W
  361.       file=(*p).second;4 |7 _' P! y7 h7 T. m
  362.       free(file);
    ; B# x& |% g+ e6 s
  363.     }
    : g. G% P& l" A! D+ I- }8 I
  364.     UpdateFile1.clear();
    * [3 c2 R; {; B8 j1 y' b
  365.     UpdateList1.clear();2 |, \# b2 R; E0 g; M, a. i, N
  366.   }
    9 x; Q6 p& ~% v4 f0 a
  367. }  / ]0 [# Y% y; b: b' Q6 L' K, e
  368.   9 @$ l) Q6 j9 Z
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    " i8 D0 i0 f# k+ n! ?
  370. {! E5 d5 Y# P4 g+ g9 ~
  371.   int c;$ E  }- A1 e8 H
  372.   LPUPDATEFILE file1,file2;
    - a: O" ?6 l* r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% t; U# G) r4 ?& M0 [9 C
  374.   std::list<CString>::iterator l;
    . [5 i3 }* ?+ i. a
  375. 5 X  i* o  v, X! j; u% c* g. r
  376.   UpdateLocal.clear();( B7 f/ ]/ v; |/ C9 w
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; I. p: a, W- `1 S9 {; d
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);( w  B' s6 G* @- R; Y* G
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);" f7 x1 J; d3 O& l; M: D9 T# j2 a
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% b4 r8 p1 l2 v. Y# b
  381.   if(UpdateFile3.size())
    ! m5 y* [1 Z$ I: Z- l9 b
  382.   {
    - G, B4 \3 Z/ r' s. d$ l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' {  I2 p4 u4 v+ e: q. I
  384.     {0 R* I' _- p, m& V7 `: e
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 x* P2 r5 k& T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ B1 F  Q6 j; h
  387.       {, e2 f% Q9 {# ^4 n& [' M' n3 {
  388.         file1=(LPUPDATEFILE)(*p).second;5 e& f1 q$ X7 j$ z& c: g$ b
  389.         file1->vers=file2->vers;% U# r, T. A/ ^. v+ @/ y* _
  390.       }
    ( g( `: g' T( ]( w: _) a
  391.       else
    & \2 `# b* n! W; J2 x7 f; U
  392.       {
    ( C! x) T# U( M3 W& f* O
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 H* }, V5 V5 z+ K) u7 E) i7 F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 z' P% y% \  v
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 J! t, M, |( W8 j% x! }- S; \
  396.       }
    & g3 U! ?* i2 A' H$ y0 g
  397.     }
    $ D# w" R- i5 e$ `: t
  398.   }# e$ l* u" y3 G: q4 ~) z3 ]' k7 M
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 W9 s1 Z3 {; M/ b' g
  400.   {
    + Y* v* x! h6 k6 J2 p' p" v( P8 ~
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' ?+ {! s7 `7 e8 ?0 s- Z
  402.     {# _. u4 D" T& E; p+ C1 v
  403.       file2=(LPUPDATEFILE)(*i).second;* z; r( V" Q3 Z# K7 ]6 `
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())( Y/ m" {$ I  E5 u  q" e4 @  d
  405.       {
    + F, c8 `" F* s8 `1 H% u1 K
  406.         file1=(LPUPDATEFILE)(*p).second;
    + t/ M: A/ V7 x* q
  407.         if(file1->vers!=file2->vers)
    1 V  J9 H: L& j. d
  408.         {
    ) W% e  @  k4 N( p8 N9 n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ D( S' u' H3 q9 {+ q' X; O" s
  410.           c++;; l+ `* f) N4 D' A8 I0 k
  411.         }6 v7 ^0 N* M  R7 K- H& _9 L
  412.       }
    % P) c8 C) U8 x" T# i4 R8 r; @
  413.       else0 i3 ^, q0 O' H% j) h8 g1 a
  414.       {
    ; z  ~% c8 ?  a2 \
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) }/ b' A4 |5 \9 [& j) q
  416.         c++;+ o9 Q& B( Y* z/ s0 y5 [
  417.       }/ D  z8 F: @& o# F1 ?& s
  418.     }, i7 h4 B+ i8 h! t: F9 `" T) Q
  419.   }* U$ i/ ~& {) f0 g8 l
  420.   unlink(".\\DownLoad\\update.txt");8 ?5 s+ C+ q4 l0 F( C
  421.   if(UpdateLocal.size()) return TRUE;
    0 M, H1 h' j7 I% K3 |' t2 b8 Q
  422.   else                   return FALSE;# O. K9 Z6 N& _7 v
  423. }$ Q5 `% r! ]0 y& s% M; d. `7 @

  424. 3 V; s6 w1 ?  c* U1 C; r7 O4 b6 E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 e0 Z, f) ]# k; x9 ^4 _
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 ]# A! S/ }; `8 t
  427.   }- O) W3 e1 c. \
  428. : V' Z' F0 i; B4 i* f

  429. ; i% [# r. [1 U/ h3 l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# b( @* O+ y! K6 A0 X9 r5 p- s
  431. {% k9 i+ ^$ ]" c4 h$ m7 W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 f6 t' K: k8 t8 D" r/ m
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 R4 ?1 }( d6 A" i: ?" x7 }
  434.   {
    % [2 A$ h- |( ]- Y
  435.     char szLanguage[50];' k5 b( {/ ?& g- N$ P5 Q# h" }
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 p% [  C* l& V' O3 Q
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      N4 A+ R* S- r% Z* o1 ~" m' b1 }/ E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) N9 Y' v! y2 [; G4 b" m) W
  439.     else                                   m_iLanguage=ENGLISH;
    $ z% _% Y" l+ c/ u
  440.     char szRegister[100];0 [3 {5 m1 [$ V5 F) Y* V% }6 p1 U
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 d0 d: p% b, S5 F, u' O( v4 ]
  442.     strRegsName=szRegister;* b! w+ V: }. {/ U* ^+ i  ~
  443.     char szPatchURL[100];3 R& r8 o2 |/ [" B6 Y
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 B+ @4 O' B5 }
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ D0 p: P6 }% Q' j3 I) S; v  ]
  446.   }
    : I; ^  x1 G$ a5 L/ W6 ?; D$ K
  447.   else' v" A$ e! X7 [' e- m" k  Y6 l
  448.   {) j( w  i4 g5 a5 M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& i& e0 h$ q1 ^
  450.     strRegsName=DEFAULT_REG_URL;
    4 q' Q1 P4 ^# |& i2 `9 b6 X) B! D
  451.   }
    6 k% T3 e2 p8 y$ D/ L& f, W
  452.   if(GetFileAttributes("hosts.ini")!=-1)& P8 a& e. C, Z$ |
  453.   {
    % F( f" V9 R/ Y( s& [
  454.     char szIP[50];
    5 X/ P3 @! H: r2 ?
  455.     char szDIR[300];* W4 D- d8 t. X$ I( E; k
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))) _+ W6 i% w3 u
  457.     {
    ; F8 k9 n: E- t, M  l7 E' ^! R
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: H! V: G2 _, l9 i
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");) E3 `% O' h! [. @( A
  460.       strHostName=szIP;; Q; z- ^7 ]' q# f
  461.       strHostPath.Format("/%s",szDIR);
    $ b2 D* a% H6 f6 K/ u
  462.     }
    * w5 N1 q; H$ O* N. v0 A: H4 K
  463.     else" l) _# G* O* t
  464.     {% _6 x! u" t: f& S9 ?
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 a6 ]/ b; O4 ~- @" [
  466.       {3 U. \# W5 c4 v4 q. @4 K
  467.         char szLanguage[50];
    3 l9 e! r" R5 Y! [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # J/ f/ l" h4 |! m
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ I6 e, r0 N+ E4 U) C+ f
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' ~, a5 @; a; P2 G* X+ w" ]( L
  471.         else                                   m_iLanguage=ENGLISH;, e( U) b. X. D
  472.         char szRegister[100];2 `* s: I' F  J; j# Q3 b
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; v6 h5 G! n2 u
  474.         strRegsName=szRegister;# P& n0 [% I7 ]3 ^
  475.         char szPatchURL[100];
    9 E1 O  r1 Y* K* X9 G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 k, [5 H- |; n4 f  }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . N- U+ e, ]$ l6 Z( {4 j
  478.       }
    9 R# Q' Y" n% x# ]# c. O2 S& `# N
  479.       else
    ) E5 P, F' D' T
  480.       {
    8 f& R; {4 ?( l, w) c' L
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ Y! O2 G' a, H
  482.         strRegsName=DEFAULT_REG_URL;
    ( f  B5 z+ o8 Z! ^" Z5 Q  m* w
  483.       }, }$ A! A$ v% x! q
  484.     }
    ) q9 ]" \' _- @: `, v! s" u% B& K
  485.   }
    , X- d5 `6 [4 \. d
  486.   return true;
    5 E2 P3 b/ j& x' M7 q
  487. }  J; q7 W% H# U* W) V6 b1 B

  488. : c; H+ ?  w- i' z; h3 ~
  489. #include ".\ZLib\unzip.h"
    # B/ ~2 i7 I! k* r1 \. M
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - Y) J! a6 m' {0 n: ?& P
  491. /////////////////////////////////////////////////////////////////////////////
    7 y" e* V- l1 b- s& F
  492. // CRevAppApp initialization
    / n! B, y! P8 I" V4 Q. E) ]
  493. ! {" u6 p8 B6 p
  494. BOOL CRevAppApp::InitInstance()
    $ C; |8 ~1 ~4 \: L( _! B
  495. {3 t1 E$ R6 C2 \; z4 G1 W0 L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];1 B: T/ r* v2 ?$ }  J; K4 T  @, {
  497. , L& |3 i$ Q2 M- M# E# ~
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " [& u% k3 A6 y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    , m' A) c9 g: R: x5 W* d- s
  500.   {, H! t2 U. {1 [/ G4 F9 p; D
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    0 H8 p2 B: Y8 Y, M8 }% h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    8 w6 K8 A+ v2 g3 u
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) @8 ^8 L* m  u8 `
  504.     {
    & w/ y4 v! u, _/ M/ @! q5 Q
  505.       strcpy(szPath,szPathTarget);+ n2 Q1 g9 Z( A. Y" I3 ^, a
  506.       SetCurrentDirectory(szPath);
    ) V4 h' H6 u* ~; a1 A1 i+ p2 h: s" m
  507.     }
    0 A. T( Y' d9 V5 E9 f- w
  508.   }
    0 D/ k1 y% F4 \  ]
  509. #ifdef _DEBUG
    1 p$ R7 v0 ~7 a' R/ ^# J, U, K
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 ^% @/ K) E( J3 T0 q4 q
  511. #else; S) i# x$ E5 S1 C
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    * k) k5 ~' U  O2 o
  513. #endif
    * g7 _& l. C! E* Y$ D
  514.   {
    - k2 I2 a; R4 l" k. ?
  515.     char tempFileName[MAX_PATH];
    2 w0 k$ u# v, }, Q2 D0 u5 E
  516.     strcpy(tempFileName,szPathSource);) w0 a' u$ V3 @7 e- b$ _
  517.     tempFileName[strlen(szPathSource)-12]=0;: `1 }" ~1 m. {5 @0 m
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & F) o+ }% u. {/ {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# }1 Y; U' J- [1 B$ \) t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . o# E  E( V" @( d6 f2 K! Q
  521.     return TRUE;8 t" l- G5 S* Q. ~7 @; q. P: [9 g
  522.   }
    - B9 a5 V$ o5 j+ `( w9 ^
  523.   // Nuke 0118: Delete run.exe- j- e8 _& y/ ?! b. w
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. E' _, g0 u; M: d+ ~- w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 S- M( l1 {9 j' p
  526.   if(!ReadCfgFile("Config.ini"))
    : r5 O. _2 k: j. R4 d5 y9 U
  527.   {
    . o8 ~2 ~( T3 c5 C' }! ]
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    5 c. A7 F6 T+ E+ O' F
  529.     return TRUE;
    * f5 Q- s0 D& R4 W7 \* S" y
  530.   }6 t+ G5 Z2 I$ j1 q; X) G1 ?
  531.   HANDLE mutex;3 ~. y% e' `# g
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ t' l8 M! O" t) j$ U
  533.   {
    & ?5 I" F( `* A$ K3 K
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)1 t3 J& y8 x: P; ~
  535.     {9 a  A6 R4 y% h3 P$ o' j* W. }/ g
  536.       CloseHandle(mutex);
    2 R; C8 R# z% O0 x, K' L8 N' `
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);0 g: y; }, J+ z5 F; q8 @( s% e
  538.       return TRUE;) \7 Y5 m% X* L# n8 t
  539.     }
    ; }* I; d% D. g& z' t
  540.   }  
    , a- x+ d  [  U) u# G
  541.   CloseHandle(mutex);
    % R$ K% O0 v. S
  542. % C8 C) y+ J8 G7 S! o/ Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);( W. u( s' Z! z* ]

  544. 9 |, R0 h/ j& x& m
  545.         AfxEnableControlContainer();1 Y$ u4 i. Q7 S% j

  546. ' j! t; k) {8 |( F. z
  547.   bCanUpdate=FALSE;
    2 _, Q! C/ f8 |1 ~  C
  548.   dwStartUpSteps=1;7 z* |! e( z* x+ r2 D+ J
  549.   dwProgramState=AP_NOTHING;" L8 e  Y; D9 }" \) a

  550. 9 t9 H* z/ U1 j# I" o3 @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    : h0 d) m% T' _
  552. ; {4 Q" P8 ?. A; E- [) g& Z
  553.         // Standard initialization( f( b3 k; L; f( m. e- _
  554.         // If you are not using these features and wish to reduce the size+ D; n4 f, [  Z; ^0 D- u2 V% e! F
  555.         //  of your final executable, you should remove from the following3 z+ F& ]/ W6 g' |. t" C* s
  556.         //  the specific initialization routines you do not need.
      Y0 [% I; E9 o& F

  557. 4 |9 N9 B* [/ j5 q* H
  558. #ifdef _AFXDLL+ G+ F) ]! }! ?9 H6 T: Z) a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 A7 Z  c/ y! n" p1 L
  560. #else
    - ~4 E7 N+ c# m) O
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    , A" m$ h: v6 R. c6 I' s
  562. #endif
    * g% n" K+ K7 [: d

  563.   Z& D& d7 l* t( O% x) v, q
  564.   dlg=new CRevAppDlg;
    7 N( D) m8 g1 N' \/ H6 c& L6 W
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 s! }4 V2 k" m& u3 x0 J6 J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 r/ Z0 L: T) u# z9 Z
  567.   m_pMainWnd=dlg;
    9 Y9 g6 Z* o( D, `/ b6 }/ I
  568. . R- e5 o! v* [& G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    + n# J' X- R, X( O

  570. 7 ^% `2 v1 w* \6 [4 n4 b3 y. N
  571. //  GdiplusStartupInput gdiplusStartupInput;" M. T' w5 V& ?/ E
  572. //  ULONG_PTR gdiplusToken;2 @" t. a* I( _% D5 [/ l# @% \
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ! N! `4 [& L/ {4 d  y6 K8 c
  574. ! v/ @( G5 @1 P# a  a
  575. //        CRevAppDlg dlg;/ i6 D  H& K2 }2 c" S, D
  576. //        int nResponse = dlg.DoModal();: H4 O. ~- x* C. Q
  577. //        if (nResponse == IDOK)4 U, u" w2 r1 {1 R
  578. //        {! k1 ^: R4 G; [4 l4 P' a% s" w- o
  579. //                // TODO: Place code here to handle when the dialog is* f6 V  S- y, }
  580. //                //  dismissed with OK9 k* n9 B, i7 {# ^: V9 z
  581. //        }9 e6 X/ @7 V1 A) N" [
  582. //        else if (nResponse == IDCANCEL)
    . P. E+ X) R1 _7 ~# O. g
  583. //        {
    4 X0 H2 r- o& ?; P' t- P
  584. //                // TODO: Place code here to handle when the dialog is
    ) Q4 q* v9 c- T/ ]6 g" v0 E
  585. //                //  dismissed with Cancel
      J' ^5 O! |3 [/ }! G) g/ G2 C/ W
  586. //        }8 q$ Q! E. V' @* v; S# F: y
  587. % o/ q; [: [, D
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 \9 x* z7 x: ?& B+ c
  589.         //  application, rather than start the application's message pump.
    6 z% m1 J5 f/ J
  590.         return TRUE;
    ! G* k& [! R* H, a$ H
  591. }* B  j6 }' ^1 t6 Q5 C( U& A

  592. / R$ t' Q. S7 K2 r' F, L3 Y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    . g$ E* E, n9 i" S0 ?
  594. {6 G: b6 H- S$ u3 J& Y; t
  595.   int i;
    * V7 l9 a) `2 Y' R
  596.   char *szRet;3 b1 R' i" S' N) v2 S" L

  597. 8 N% }5 ]! T# ~
  598.   if(pSource) { itoken=0; sztoken=pSource; }7 S; x2 a/ e: m: r. w8 V
  599.   if(sztoken)7 t3 Z* b8 r& v0 V5 s
  600.   {
    ) J1 W8 }4 W% I8 f% h& v+ m/ Y7 ?6 {
  601.     szRet=&sztoken[itoken];
      c7 ^! D8 e9 f
  602.     while(sztoken[itoken])
    : r1 k6 O7 V6 X5 K- Z5 R& r
  603.     {5 q! w0 R# t/ s( N2 G% z7 i
  604.       for(i=0;i<(int)strlen(token);i++)6 I" i0 F; Z# v
  605.       {
    5 B% Z  ]% L* p; ^4 U& e# ?# U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    0 d6 F; A+ R% g- [# @8 z! x. C
  607.         {
    0 T5 r, Z7 Q% N1 l
  608.           sztoken[itoken++]=0;5 j0 Z8 J5 N" V5 U& q
  609.           sztoken[itoken++]=0;( G: r, e; e3 n- [
  610.           return szRet;
    + F$ v/ x, `2 q9 {  e
  611.         }
    2 @: G. ^8 @$ X. q0 c
  612.       }1 Q8 @9 E2 a5 K; y4 `& y/ l  @
  613.       itoken++;$ h6 Q' \* {4 ~9 W
  614.     }: G/ ]) f1 B0 c" P- u
  615.   }3 z, ?. n/ U/ s4 X
  616.   return NULL;
    6 m! P# g& |1 e( d/ y5 _* V
  617. }
    # {) Q2 I5 ^1 D" G5 L
  618. . o5 q7 g' ^& ]- {5 q% m: M7 D
  619. void ProcessProc(long Total,long Current)
    , d+ C1 U( `: Y+ H
  620. {
    : L/ b8 d: p/ ]/ c% N. t
  621.         MSG msg;
    9 B( ^9 s& ^, R; J! ^* L. ^3 W" V( Y5 Y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);) M8 Q+ Y8 ~. ]
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - J5 S4 A" N2 E' h2 D& A
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * r) x1 j% y" ]5 r! ~: w7 e8 P
  625.         {
      `4 @* F' E. S4 d& i& V9 |! p6 [
  626.                 if(!GetMessage(&msg,NULL,0,0))
    * g+ F# `1 K& P. D5 p
  627.                 {
    - q7 \; q6 h: R0 Z
  628.                         return;; o# h$ B% c) ?- J  N7 C
  629.                 }
    0 P9 c% {. Q* q
  630.                 TranslateMessage(&msg);
    6 X" e5 r* j2 l( D2 P- {3 k- V" z
  631.                 DispatchMessage(&msg);0 I3 a# O8 E: }- C/ D. f
  632.         }       
    3 t+ R5 G( o' J4 v% U
  633. }
    ( c: @. D( j- m: _
  634. , k7 Y) y! k$ C) U, p
  635. BOOL bFirstChar=TRUE;6 `  p- V, }  [: E
  636. ! w8 P  p" f6 [* ~% b% r
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    7 @: D1 ~. G% l$ u
  638. {3 S) U( ?( y5 Z# c
  639.         // TODO: Add your specialized code here and/or call the base class
    4 l" a/ Y0 p) E& y1 V- o
  640.   switch(dwProgramState); v9 n8 J5 [- C% l* }5 J5 ^
  641.   {
      T2 p! T1 D$ B" r/ B: F) i
  642.   case AP_NOTHING:3 @; o' `! q2 L
  643.     switch(dwStartUpSteps)
    , d" @: C/ C2 k  N
  644.     {; g! b& A& y( ?
  645.     case 1:9 S1 m% z- N3 u" T+ g* `3 j3 I2 t
  646.       {
    8 B& Q( a' h- J3 O! N
  647.         int i;( Y. o1 q# m! B5 {4 o* D5 @* {
  648.         CDC *pCDC=dlg->GetDC();
    3 c& p5 u% j: E1 d2 _
  649.         HDC hdcwnd=pCDC->m_hDC;$ S+ v, I, g. f: Y; I, l
  650. //        Graphics graphics(hdcwnd);( a0 I0 V+ D3 k+ S
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 b' z; _. s$ Z" K, c. q5 p! N9 A4 Z
  652. //        INT iWidth=bitmap.GetWidth();+ e5 Y9 r" z& s" Y, i4 h
  653. //        INT iHeight=bitmap.GetHeight();
    8 n9 ^0 }/ ]. Z0 M
  654. //        Color color,colorTemp;- k0 O1 g- P' J1 K
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)+ \- u. b3 e7 J: r5 J6 m; |/ {: @
  656. //        {5 d1 a& f% F. J( t& P: P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    , m1 b8 c0 _6 j6 v+ G! F( ]# ?( v. d: g' x
  658. //          {
    : f8 Z/ N; H4 U( w! f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ e& G( `1 K9 K2 T2 ]+ H! w6 H
  660. //            colorTemp.SetValue(color.MakeARGB(
    % _. V# ^% T# _5 h
  661. //              (BYTE)(255*iColumn/iWidth),$ F1 C$ u0 O0 q" O& U
  662. //              color.GetRed(),! r: S$ X! c! K) V4 y" l
  663. //              color.GetGreen(),
    4 k( `0 B! C, D/ @
  664. //              color.GetBlue()));
    2 E7 b8 T' d! U
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' }5 k4 w0 g( V: ]
  666. //          }6 t7 W7 X8 _+ h" \4 Q" U
  667. //        }
    0 `& I& _( P0 o1 w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    " U8 W% G+ L: Q# f$ E
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( m0 z, z  S6 x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ x$ U: x  J/ y4 i6 u5 Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 h* J7 A( z, D" u0 F$ k
  672.         for(i=0;i<240;i+=8)" G7 `5 P4 e5 F) w1 ^8 q
  673.         {
    ; A5 j( c) l3 U1 {9 D) R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! P  v. g. R. }9 b- Z9 B2 g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + c* B" V9 [& y+ I1 B& O' H- o
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + X$ ^' O& n5 ?1 T
  677.           Sleep(33);
    6 Q: c# `' S  d0 }
  678.         }
    ( z2 T7 W% i# u
  679.         Sleep(1000);6 t; T/ N* L# C7 C  R
  680.         for(i=240;i>0;i-=8)2 t% C. f" U. d6 [: Y# n
  681.         {6 b% `2 V1 D* W
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ g  h' H! \% A7 m3 f7 t! [
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * Q3 N/ P& s% B  s5 P# p* V! J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" O2 i4 H' z3 l) s- s9 y! U" w
  685.           Sleep(33);
    " `( B5 |+ O- r" z. ^5 H! n
  686.         }- X# ^6 ~) `, J$ ]5 P; t5 L( _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);" |2 q* K9 a3 @! X, S) ?4 a( N3 \& M4 i
  688.         dlg->ReleaseDC(pCDC);
    / |4 K% y4 U( s  m" q
  689.         DeleteDC(hdctar);7 [7 w! x6 A3 H6 x
  690.         DeleteDC(hdcsrc);
    0 l! {5 f. [+ y& t, a
  691.         DeleteDC(hdcorg);
    . ^$ e% s  w# J5 o6 }2 z" q
  692.       }
    7 z" P3 _' P# t6 t* s  c6 \: b
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);4 S" z9 @( U# y! F- e1 ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' Q  g! G4 B: Q7 b
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");+ p* g2 V5 r% J1 [
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");% \5 \1 r* `, r; @. u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - b4 R/ Q+ b' Q! @7 |* @
  698.       if(!Dn.Connected())
    ) y; b- F- @( Z$ O$ O" I7 W
  699.       {" c3 B& l5 A/ B! p  y4 Q
  700.         dwTotalFiles=1;, P! g! G, o0 E) W2 [; u2 o
  701.         dwDownLoaded=0;
    4 ^. f0 s9 N7 I  T
  702.         bSilentStep=TRUE;
    ! K% b& k& i$ [/ z- ], |/ w0 G
  703.         bCompressed=FALSE;
      ^5 z5 |# M3 o  }) q, n
  704.         strExtLocal.Empty();/ n4 Q9 h5 t" @
  705.         strFullName="readme.txt";
    / w$ @1 p. G9 D. Y6 e2 _0 v; z- ^
  706.         dwProgramState=AP_CONNECT;
    - g* m& \9 X. k! H. D0 q
  707.       }
    : J# o6 r6 @6 ]+ _
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();0 A3 A/ Q8 y2 F6 C
  709.       dwStartUpSteps=2;
    % P, d' A4 ?/ N- M. l( b9 b1 b
  710.       break;
    - P/ B  u4 B! o5 Q% x5 d
  711.     case 2:
    . ^" N- c: B- Y# h2 @4 e2 n: ^
  712.       {
    , i# G# C/ a. _( g4 p
  713.         int iEOF;" K6 Q; h  V0 S& O8 W7 _  I
  714.         FILE *fp;3 l, d0 N- C. w1 d0 z9 e
  715.         char szString[512];$ s$ n3 ~, l0 W7 v% J" o
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    + K/ Z( J' w3 _& y) G0 ~/ T
  717.         if(fp)% n# [/ j' Y5 o( F+ y9 S
  718.         {
    + H7 H+ r1 `$ q# x% w
  719.           do# G- z9 ~$ |' H; G" X: j
  720.           {" |5 Q9 c% ?  s/ N
  721.             iEOF=fscanf(fp,"%s",szString);; Q7 g) m, J8 D' b9 ^2 @
  722.             if(strlen(szString))8 e. _# r1 ]" q7 s8 U- B
  723.             {
    7 ]+ f5 g; o$ s
  724.               if(bFirstChar)
    : r7 `- y& q  N" _$ d# K
  725.               {
    ( z3 n; y, @& d. N  q- c( e$ G
  726.                 bFirstChar=FALSE;2 X8 }$ P' d4 L5 H  m* ^, a
  727.                 bConnectIsBig5=FALSE;
    1 S* X/ E* d7 F8 w; ^
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 D$ @0 I! K! C6 J, @7 |* X1 L
  729.               }
    1 V/ J. Z+ x4 o* y& n7 z% f( C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    3 g& L; y8 \, F- Q" A
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 j1 ^; \6 p) r$ z: A
  732.               dlg->m_ListText.AddString(szString);
    ; `& R7 W7 y! @0 l! t& F
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 Q% j( a) j. }
  734.               *szString=0;
    0 [" F& o" J' t' p* D& n3 b( z
  735.             }
    5 E) ^5 c& k% S' }, t4 Q
  736.           } while(iEOF!=EOF);
    $ `+ Y  ?' r4 Y
  737.           fclose(fp);/ V. w- K5 V3 _  ?- ]0 e& a# l! V5 Y" z
  738.           unlink(".\\DownLoad\\readme.txt");
    ! P: [% T8 z* R+ u* r! c* u! t7 G
  739.           dwStartUpSteps=3;! w! {& f0 n) R
  740.         }
    - l6 J9 J: k7 P
  741.       }
    , c3 l: _4 z" [( b+ M% P
  742.       break;+ g5 D  T. Z; g8 Y7 `' }: k
  743.     case 3:
    $ k* m7 F" m* C% H5 |( E) f
  744.       if(!Dn.Connected())1 Y8 M9 m/ N: M2 X2 l! F( g
  745.       {4 W* F. E9 `' N" C' U3 c- C
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . ]' Q0 Q, _0 E+ |
  747.         dwTotalFiles=1;" M! M) G( u) q% t/ p! v( |6 K
  748.         dwDownLoaded=0;
    4 d. L4 g& G5 C
  749.         bSilentStep=TRUE;4 ]9 [& e  R0 H7 W: W$ b) _3 G3 N+ g
  750.         bCompressed=FALSE;
    $ r! R; i' S3 P1 ^9 ]( h6 \
  751.         strExtLocal.Empty();
    2 ]. b/ D. l0 X
  752.         strFullName="checkversion.txt";4 l4 H  p1 B5 k, e- F  M# A
  753.         dwProgramState=AP_CONNECT;
    - R3 j9 M! I. R2 u6 W( n
  754.       }& r4 J8 Z! o7 G( D
  755.       dwStartUpSteps=4;
    $ ~0 l2 `' e5 h3 {/ Y' u2 O. v
  756.       break;6 F/ K3 P0 l. Z4 X! N8 h8 F  P
  757.     case 4:
    4 `1 M" A1 D" y# R* W4 c$ w
  758.       {0 s5 o5 X! J  U& w2 N; v) j8 M3 T
  759.         FILE *fp;
    : q  ?4 C4 g7 K
  760.         char szString1[128];3 Q+ [; I* N- p) N
  761.         char szString2[128];% N% n- F, F+ j8 A% t, q: h" m9 K
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ; W' a9 \9 [; w! F6 e; b" V$ F
  763.         if(fp)
    & b1 |) \/ f; M! o! l- _( \
  764.         {
    5 T7 X$ [) B" Q! Z3 O9 o
  765.           fscanf(fp,"%s",szString1);
    ' L* e2 q6 L8 S2 ~9 T/ P0 q, F
  766.           fclose(fp);; g! E# h* q2 N" t" x$ q
  767.           fCheckVersion=atof(szString1);. l2 r8 P: G  c5 m" \& h+ Z
  768.           fp=fopen(".\\checkversion.dat","r");
    % X6 L1 f3 X( p4 K0 N' z  V  y
  769.           if(fp)
    ' u  C6 o8 b( x
  770.           {
    # T: C2 k: d9 l2 X; e5 B0 ]
  771.             fscanf(fp,"%s",szString2);4 a4 o3 _( h6 S7 s7 z# J
  772.             fclose(fp);
    & J% o* c9 x& _. r* S
  773.             if(atof(szString1)!=atof(szString2))  R5 u  T/ n. d8 R9 Y
  774.             {' s9 l: I1 e$ M8 f4 j: C2 Y
  775.               if(!Dn.Connected())6 Q+ ]* I0 ^7 I4 F1 d* v: _, X6 _
  776.               {3 N8 ?+ S: _) e; o) k+ x$ g
  777.                 bFirstUpdate=TRUE;
      Y, y7 ^2 `9 \
  778.                 dwTotalFiles=1;7 t9 Q* s( E' V6 _4 R
  779.                 dwDownLoaded=0;4 c( v: _& H% L- h5 V5 U/ a
  780.                 bSilentStep=FALSE;0 v& p# C4 t9 }0 x7 C
  781.                 bCompressed=TRUE;. Q1 ]7 v% U, T$ S  O
  782.                 strExtLocal=".\\DownLoad\";4 G7 ^5 `( U; k  a7 e+ o
  783.                 strFullName="update.txt";  m  Z& Q: ~* f5 ~4 h% w
  784.                 dwProgramState=AP_CONNECT;/ w3 w( Y& j8 p! y( |7 t. ~# ^, i
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");/ H" |  z4 e! p8 m5 ~: f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% a2 _, [! w' H, l3 P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");0 ?0 |; k+ f9 f) A) Q4 Y- d6 C, Q  G
  788. * p4 o/ K5 m  d' J$ r' G/ S' U8 j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % |; l4 V+ h) e" W4 l, ^- x
  790.                 unlink(".\\DownLoad\\checkversion.txt");. D2 X% x0 M) o  r# `  B4 b
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) l' |7 R+ x. @) I7 a
  792.                 {
    ; D) W) P& s; E% ^; I" g
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 p* p; v0 W6 z! D. H
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 E4 q; h" @$ D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
      u: T( H" c" X, k3 l
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 p# W' {! y7 T* C! G

  797. # `5 }% C+ B: x/ r. N4 ^
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ z# S2 R1 r. H' K8 [2 ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" k) w! Y, @' g' e6 n
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    . t9 z2 |5 P$ K( Z+ S+ z/ b
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 |1 R2 O' N- e/ |5 R2 x
  802.                 }) M- g( M. u# N& V* t! P% {) [
  803.                 dwStartUpSteps=5;- O9 \* ~! V6 J1 Z* o9 `7 q8 I( C
  804.               }
    & f/ T4 Q2 K9 n5 L) m
  805.             }
    3 @- p  R2 ~) `' W, z! h$ ]
  806.             else
    , j. F) B5 ]1 n3 F+ c/ G  F
  807.             {
    & u3 }+ y1 _1 \* y
  808.               unlink(".\\DownLoad\\checkversion.txt");
    8 m1 j& h; p' g% e
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 Y7 v1 |+ }, |6 Z( S
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" l. K# d6 g5 P7 j7 M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " @" S# ]/ w9 A5 y& I- y

  812. 4 p0 Q- F& C' b% c6 M7 E1 c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% z9 ~; X/ K0 D$ U7 x! @
  814.               dwStartUpSteps=99;
    9 Q& N" g( H7 Y5 T
  815.               bFinishUpdated=TRUE;
    ) n" y# n5 b+ p; A! ?
  816.               bCanUpdate=TRUE;, `% n0 t) M! w* s
  817.             }- E5 D+ p) a* X% ^, w  h
  818.           }* h$ x8 \0 g1 B  {+ D- U: h! w! f
  819.           else& L2 z7 y, i8 a+ u+ Y- r
  820.           {
    7 S! ?6 s0 g9 t" [6 a) [( Q
  821.             if(!Dn.Connected())' }# H, G. w* i; X
  822.             {
    # [( V: r! w2 v4 q! O% Q
  823.               bFirstUpdate=TRUE;; f/ \' o4 q: N+ V: ]. p7 a. ^
  824.               dwTotalFiles=1;
    7 C' L/ v! J$ p+ C3 A, ]6 R* @
  825.               dwDownLoaded=0;- G+ G/ p4 L' j- @
  826.               bSilentStep=FALSE;
    + k2 G2 S, {- W+ {8 j
  827.               bCompressed=TRUE;
    + X  p7 D& S7 c- G# `
  828.               strExtLocal=".\\DownLoad\";
    6 d5 U1 B+ |/ q. m
  829.               strFullName="update.txt";' D' t) o. f$ n
  830.               dwProgramState=AP_CONNECT;$ ?! |4 n6 F# F2 e! }* `
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) T$ x$ s. g8 ?) }# n8 a! ^0 I
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 S; J$ O: P& L+ ]$ E& m, t2 d2 `/ i: h
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");9 B; ?4 u8 v' f" z3 z& @
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 c& b% [8 F' R: f- o
  835.               unlink(".\\DownLoad\\checkversion.txt");! s6 h* s  o1 |0 D7 ]( q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # Z% _) w6 }3 d) |- l
  837.               {2 ?3 f4 L4 ~3 N: I1 B2 P4 z$ z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    % c+ C/ r: E) [7 j: [* a
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");- v; A" Q. z7 I+ g2 ?4 G" o7 E0 f4 K
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");4 \; l/ M! N, j' t% v) `6 `2 R, _
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. F; ?9 f- c7 P
  842.                
    7 L4 k7 J4 g' M3 x8 i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% h4 Y. _8 {2 w1 {, j
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - q6 M. g: Q9 P/ `- h
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 }' K0 B# w% m0 b3 @
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 G* ?; L3 m  H$ H
  847.               }
    3 h& U! E" n+ D: z! A1 h
  848.               dwStartUpSteps=5;
    4 Y! S1 `1 y% a/ a, n# K/ f/ y8 ?
  849.             }
    1 B9 Q/ W' A' p2 I, l6 i. _4 @0 c  X
  850.           }
    # ?. M! W1 g: s4 l7 s
  851.         }
    : K; ?) ?3 H$ e5 Y7 }* n$ E
  852.         else9 Z% o' g  A2 `
  853.         {
    0 B7 a/ V& `6 S. l+ Y4 a+ F
  854.           dwStartUpSteps=3;
    ( F& m+ F. S, D3 t' }
  855.         }
    . V, S) K: c5 s5 f4 t. b3 k
  856.       }8 g2 K- E# L4 P& R) Q; K
  857.       break;* G9 o% e+ ]4 j3 B% k5 ]" r
  858.     case 5:4 P- {! o/ n7 Z5 D) [
  859.       {4 ?2 t* K5 @0 L
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    3 |% \+ j& g! o6 }
  861.         {( L+ c9 n& n, y2 q& R: H
  862.           int opt_overwrite=1;
    - @: b& f" C: `1 e
  863.           int opt_do_extract_withoutpath=0;; y3 i; b' f3 z# Z4 C) _, t. |
  864.           unzFile uf=NULL;
    4 [" M- o2 d, V% x

  865. 1 D# I7 O: P; g. Q# y! b
  866.           uf=unzOpen("Wsa.zip");0 T. z4 i* {+ @4 S( K
  867.           if(uf)
    * E- d( d# Z+ N$ k7 T$ I
  868.           {. i/ P. k4 I0 l
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);8 B- v$ Y7 ?6 i* b8 }8 C" k8 Y
  870.             unzClose(uf);' W" E4 h  g% ?9 |8 _" n- R) y
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    # h$ A. `! G- J/ [  l. p
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; A# V  K2 z% F9 Y, z' A
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* _% M. c) `6 T/ s
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 B( ^* I" f( x
  875.           }3 V# g' M3 q! @3 l
  876.           DeleteFile("Wsa.zip" );' ]) r* z% d- p1 M
  877.         }
    0 ^8 e6 m) V$ ?( O' S/ t

  878. ) N4 T+ u; K4 u5 d3 \, F; a2 E0 a
  879.         if(CheckLocalVersion())
    - x% S/ \; M- j# D1 a
  880.         {
    4 y/ M1 n1 _# @( Z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    3 ?! y# V# g2 O, Y5 \0 a0 M, s
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");) u) a0 N2 T( L* c% D: C
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    4 S/ z* Z6 }# X5 g* o. H# b$ I' L
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # ^( c; X' A  P/ \1 F6 y/ e5 z
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);/ j, t7 ]# G& u/ H0 j6 _. J/ ~% R
  886.           dwStartUpSteps=99;# E2 ?* n& ~# v# o$ ^
  887.         }
    ( s7 F' ~+ k  B$ E$ `0 r. r  A8 }
  888.         else+ k: b) z0 l8 X6 k
  889.         {5 n$ F/ X$ @( O6 P6 T. _8 x
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    . Z" s' T, j: x# y8 o5 v
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    3 U) h! q. ^  V9 N4 G( Q
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");& F0 `0 p2 X0 i, U  X+ R

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-28 12:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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