CSUpdate.exe源代码

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

! Y% x/ w0 p0 S9 l9 c
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) r! i. b8 e! S" w
  2. //
    1 B2 y+ J  h% ~8 w

  3. ' `. A9 N+ e2 ~: U' q
  4. #include "stdafx.h"1 U9 O$ {) y3 C. V
  5. 7 h4 S* r  X( [4 z/ `. m% e
  6. //#define UNICODE
    $ F$ Z7 I. C5 P/ F1 v1 m1 J
  7. //#include <gdiplus.h>* F- P) S% U, ^# S. G
  8. //using namespace Gdiplus;8 G( ?% N8 W3 }4 d5 L8 v, S7 ]
  9. % {# z) R1 `% F
  10. #include "RevApp.h"
    / E8 Z% l" {7 F; s
  11. #include "RevAppDlg.h"
    ; B( S1 ]6 f$ l/ Q/ T
  12. 4 U3 R. o% ^8 X/ z" ^
  13. #pragma warning(disable:4786)1 @; F; N( d! g( N9 S
  14. #include <map>
    - F! [/ y" q5 N& w
  15. #include <list>; C8 L% H/ p8 M( o$ Q7 Y
  16. #include <direct.h>
    ) S1 k1 {1 x" u* Q( z4 O- o
  17. ; ^% Y) Y6 H/ O0 I
  18. #ifdef _DEBUG
    9 T2 h' m' x/ X6 G( j
  19. #define new DEBUG_NEW
    ) l* _! S" Q. G, E/ Z
  20. #undef THIS_FILE
    : x! ]! g& W9 x7 N" z8 L1 p# s
  21. static char THIS_FILE[] = __FILE__;
    ) f) A, M  ]9 f0 S' T
  22. #endif
    + r* S4 G8 ^  i
  23. #include "SkinResDef.h"6 i" }4 ?7 y) e6 j2 |3 b" T
  24. #include "ChangeBG.h"
    ; _7 K, Y) Z/ k0 g# ]9 S2 j
  25. #include "AFXINET.H"
    9 @/ S) s; R# l6 J" m

  26. % ?4 t( t1 g' H' N
  27. #define TRADITIONAL_CHINESE 04 u3 C' t6 w; a4 m3 ?) l- U
  28. #define SIMPLIFY_CHINESE 15 g; V- N" h& ]8 v* q
  29. #define ENGLISH 2, m! T' ]! Q5 e  J9 b  M. |
  30. int m_iLanguage = ENGLISH;2 Z. D/ E, O; t8 J" T
  31. /////////////////////////////////////////////////////////////////////////////8 k, O$ m* }  b9 k" j& Y6 p/ B; W
  32. // CRevAppApp! N# A9 g; s0 j6 z. p$ Q
  33. * g0 P. B( c( y% {# J3 M: N
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 h% t" w# B% H3 G$ G" L" t! n
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    - _/ X6 y0 b% `( }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( g% W0 s8 U" U
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) n8 N, s- R( R. p
  38.         //}}AFX_MSG
    ! [" v; R( n) p( ]* O' v! \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    5 Y% k4 V6 d! Y9 O9 z+ Z
  40. END_MESSAGE_MAP()8 P3 t  Z  c2 o% \. [
  41. % X( Y& n8 a8 ?2 t; j' B
  42. /////////////////////////////////////////////////////////////////////////////% A* Z+ ~6 q5 ~/ `! F% J
  43. // CRevAppApp construction
    ; _3 C! X9 N+ t8 Q2 B% o

  44. * m, U# a1 k5 e/ `
  45. CRevAppApp::CRevAppApp()
    ) r. y& o- S& N: J
  46. {
    * C! k& s: g" P) y6 \
  47.         // TODO: add construction code here,0 Z; @* H* W$ X+ g1 {9 h- s
  48.         // Place all significant initialization in InitInstance
    - p- l9 M: [  M; O) t) {/ V
  49.   bDisplayIsBig5=FALSE;9 a% [% q8 L. n2 ~, _
  50.   bRestartUpdater=FALSE;- D5 B, C  @  ?3 c3 H
  51.   bFinishUpdated=FALSE;
    ! N; M) g9 |; p4 w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;. H4 i1 g/ U  D, k. `7 H- A6 f
  53.   InitChangeDataBig52GBKS();
    ( _' h+ A2 M/ K: ?- [
  54.   InitChangeDataGBKS2Big5();
    & O) J7 G( d8 V$ v* J/ z
  55.         //  R3 m& w" T5 r
  56.         bClickRunExe = FALSE;) l' p' e2 x% |0 A% O% e
  57.         //* [! G8 ]" P: ]/ X- |! T- |
  58. }5 v; E0 E% ~2 E! ^8 f
  59. 7 T# ^0 z/ P# f& m
  60. CRevAppApp::~CRevAppApp()& C# Z) p% t$ @& W1 F4 @/ D4 K
  61. {
    * F4 U# k+ n" t3 W4 _) j  j
  62.         // TODO: add construction code here,7 C  i- T; l/ W+ L3 T
  63.         // Place all significant initialization in InitInstance
    : h$ U1 a6 j- j& K# A0 v& d0 k/ A' v
  64.   EndChangeData();
    $ x* C6 \$ N5 d: S; D% |
  65. }2 f0 C; ^! E! F5 S( u' j' c

  66. ) T9 T) X, Q: b% E3 z. @
  67. /////////////////////////////////////////////////////////////////////////////; C# I' r. Q" v/ b  ]! T5 f
  68. // The one and only CRevAppApp object
      s& Q7 `/ _. R/ e/ G& ^- ?

  69. 1 b  I# B/ R1 t! o" U
  70. CRevAppApp theApp;
    / n4 D6 O. i9 i  S! m2 U. I
  71. 1 t& i1 H3 ]- P- D% x
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " V3 N! u% {  M6 |0 z
  73. {
    ) v+ ^/ `7 A5 c) M6 z9 P- v1 C
  74.   int iEOF=0;
    7 n. \+ }$ k9 F  V
  75.   char szTempName[MAX_PATH];
    7 `8 j: t/ B2 H" s. y, ^0 ]' u: K
  76.   *szFileName=0;5 F1 ~' z" B- M* L/ v  L- Q
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 p; ]7 N- {; P/ ~; S3 H9 @
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    . e- s* m7 n/ b& K+ B; Z. T# |% v
  79.   {
    4 \$ _$ Q0 C0 _$ U
  80.     strcpy(szFileName,&szTempName[1]);
    " j2 e9 p- r2 I7 Y6 y1 K( _1 k3 v/ ^
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    ( K7 o+ C3 L) X! v* s9 C# {
  82.     {
    # m; n% n  X1 w6 J8 G& P4 T; F2 y
  83.       iEOF=fscanf(fp,"%s",szTempName);
    & \- y# z# o9 d/ G# M8 W6 N- h" l: ?
  84.       strcat(szFileName," ");
    & x* T. ~0 [$ a) L+ {; p6 o* }* b
  85.       strcat(szFileName,szTempName);0 a: l( E! X+ L( U0 x- E5 H7 q
  86.     }
    ) H! p0 M/ B+ }5 C
  87.     if(strlen(szFileName)>=1)4 D) a: U+ D* [4 J2 w) h; p
  88.     {+ y; v( `: Q: [. Y: T8 E. ~
  89.       szFileName[strlen(szFileName)-1]=0;' _9 U, r& n6 @& K/ b
  90.     }
    ( W( L+ W  D9 J/ ~. o
  91.   }" _" ?) W& i7 o  q* \$ [
  92.   return szFileName;
    * P2 t8 }2 q6 ^" f$ w
  93. }
    7 s' u4 o. J+ v- F& t. [
  94. 9 U0 a" N+ M9 r6 ^1 Z1 V8 @/ E" P9 x8 T8 V
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    2 @) i) q% y: Z2 B  E- N4 u' n5 z
  96. {% X/ V+ p/ a# @0 Q
  97.   FILE *fp;$ ]7 J5 y: o9 n$ X6 s1 |8 c
  98.   char *key=NULL;3 h/ Z2 g4 X' q
  99.   char version[MAX_PATH];/ H/ J" @2 I0 }# m2 h  n) h
  100.   LPUPDATEFILE file,olds;
    4 R! ~/ U7 p9 w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ' Y, T- j3 `) j# f! G! |

  102.   p% L4 L) r; B& O5 d8 j) M& t
  103.   UpdateList.clear();$ k+ U' p! t9 @0 R
  104.   UpdateFile.clear();
    " n9 ?0 y3 g. l3 I: T% n  a
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 R: w; X, E- e% ?' G% n$ c
  106.   if(!(fp=fopen(filename,"r"))) return false;0 y4 }2 ]3 V) m- d8 U: T# ]
  107.   fscanf(fp,"%s",version);+ u& `  w" H2 }: e
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" F; }6 n: Y) }' I
  109.   while(fscanf(fp,"%s",version)!=EOF)% q0 n: x% f+ _' i
  110.   {
    & [/ ~. o' ]& y: J4 F% q6 @8 ~5 y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 O  _# C7 R/ Q9 N
  112.     fscanf(fp,"%s",file->path);7 X0 o5 t# k  P
  113.     ReadFileNames(fp,file->file);
    % a+ m  s8 D& P' V1 V0 q; ]  P9 T
  114.     strcpy(file->full,".");! c1 Q2 N8 W- `: b. a7 _6 L8 y8 n4 l
  115.     strcat(file->full,file->path);
    4 I' C& R* }  [# y6 @
  116.     strcat(file->full,file->file);
    ' ]- L( m$ j8 ~' b( Y. c( [' C5 S
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): s. V) \' H' y
  118.     {
    + j' v% \( A$ E& F: A3 R
  119.       file->vers=(float)atof(version);( g9 w$ c5 N3 _/ g* \! a
  120.       UpdateList.push_back(file->full);
    ( o0 y- P4 p( [4 @! p& _
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));+ n9 z9 \0 L5 z) M
  122.     }
      g" w  k9 Z4 n. O. }5 p* Y( @/ @
  123.     else
    + q8 b0 X! {4 |8 W/ O
  124.     {- \" j5 y2 L# m% H$ |
  125.       olds=(*p).second;
    0 L  O0 l  z* ]9 k
  126.       if(olds->vers<(float)atof(version))1 I+ B( @! o( \3 u4 [$ g: N9 `
  127.       {; K9 U3 D; `- |: m% p& d5 Z8 S
  128.         olds->vers=(float)atof(version);/ h5 Q# }( k, m# k) v. K( j( n: Z
  129.       }
    ' Q8 o) c0 ^- _( b
  130.       free(file);
    2 a% q  q- ]* v
  131.     }1 o- w. ~3 P7 y9 ?
  132.   }$ |. k% ]# ]1 O
  133.   fclose(fp);
      v0 z+ l6 z: o8 H0 ~, C
  134.   return true;" l' H: S/ F" h' y  F
  135. }
    3 ^/ s+ n9 X% L1 M9 W, x
  136.   w# i9 y( T  f4 W) y" }1 g$ s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    2 U) S% b+ c. i
  138. {
    0 a+ T7 A, l" U* B; R: z  @$ J7 l5 O
  139.   TCHAR  szFull[MAX_PATH];
    ! p( h7 a: H  w) T. k% J' h
  140.   TCHAR *token,*inter;
    $ M7 G6 w8 `, I7 s6 `. b# w. c! T
  141.   *szPath=0;/ i  c3 f3 ]2 ]# @0 Z2 v2 V% J
  142.   strcpy(szFull,szFullPath);$ K' d8 J9 ~! e" n5 A4 _9 N, O
  143.   token=strtok(szFull,"\\/");3 N* K: r! _, V; u$ e
  144.   inter=token;  t% G9 w7 N& I. ^
  145.   while(token=strtok(NULL,"\\/"))
    ' O" ]+ P: r7 t! d# a' {
  146.   {, x+ C: T0 R4 z- Y6 T  j8 R
  147.     strcat(szPath,inter);. L* t0 }1 f* E
  148.     strcat(szPath,"\");. f- z8 C# I9 m: p/ ^7 @
  149.     inter=token;' {) [. Q1 q4 T5 [0 Q9 Y
  150.   }5 s4 C/ S# T: X- [( Z
  151.   return strlen(szPath);
    : E# X; P3 q  l  {4 D. k0 j
  152. }( r- T/ I) e1 H  A  [
  153. 7 \" K2 R( l8 T: e7 C( ^+ p& U
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)# t# \% W: M! M  y  v# n
  155. {/ z2 G  r- Z# i& f& {1 K% t* E
  156.   DWORD attrib=GetFileAttributes(Target);
    - @1 _! n  b. B* }% `+ |; r
  157.   if(attrib!=-1)
    2 O) s; k, Q2 B# u
  158.   {
    $ t6 V% D. X' z; e0 y  D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    # |0 ], Q" f2 u$ q
  160.     {
    $ `' t. A6 C: B# ^
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % c, u) r0 L4 e$ e- K/ Z% Q  t
  162.       SetFileAttributes(Target,attrib);
    % @: {4 d8 b( r0 t8 U+ b
  163.     }
    $ O6 m' g/ ]* v
  164.   }3 `1 l3 J/ F$ |4 \
  165.   CopyFile(Source,Target,Erase);9 z' w; ^, f" H
  166. }
    7 ~) z! I! G" x* f% v

  167. 2 e7 f1 B9 s7 s( R: H+ z/ g
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ N$ r% M; _% \* _3 I
  169. {1 X( V: s$ o* c& `2 W
  170.      FILE *fp;7 v- ~, q5 R3 V9 i9 J7 q
  171.      char  szBuffer[8192];6 P# |9 `' g* }2 t, F& t! u+ I" X
  172.   va_list  argptr;
    7 q: f% E0 g% _" d! u0 [, n7 Z8 Q

  173. 1 d( o3 S5 V: P9 D5 p' z/ z* T
  174.         va_start(argptr,message);
    ; k0 _5 d! R6 T4 K! e" [
  175.         vsprintf(szBuffer,message,argptr);9 P% O6 S% ?& U. x/ V
  176.         va_end(argptr);6 J! Z! o& x+ y
  177.   fp=fopen(FileName,"a");
    # E! G: K- U6 V( P# q7 F
  178.   if(fp)( _9 b, h; Z, T6 O0 [7 v1 E
  179.   {# e* }; D  [8 D7 D- f6 ^+ P8 {
  180.     fprintf(fp,szBuffer);! F5 j( {3 t3 c1 w& \/ ]
  181.     fclose(fp);7 `6 {# D# p  @1 g
  182.           _flushall();
    / O" O, \2 O$ L$ |; p
  183.   }
    6 _) C! q! y7 y
  184. }- K% j0 z0 f$ j) A
  185. 5 z2 \1 Q: {4 m* h; T/ t
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 A( g, f% ~3 V/ q5 Z' @
  187. {5 ~% ~4 ]+ N1 h
  188.      FILE *fp;' q* i4 H8 N6 L, M. b( i- e# o0 J: l
  189.     DWORD  attrib;
    6 ^1 @$ h# W% R9 S8 |3 |8 a' \
  190.   attrib=GetFileAttributes(FileName);; q# K9 X, X) g+ S* m+ l
  191.   if(attrib!=-1)
    % k& C" S9 d1 l! w" O' Q3 @
  192.   {
    0 l% I8 G9 o+ w3 ^" l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 d# ~  s2 E  v# |9 A
  194.     if(!SetFileAttributes(FileName,attrib))7 ]& B5 t3 r7 C: F) u* r5 q' P
  195.     {6 _" ^- Y. s  d) m, b( i, W) h. P
  196.       return FALSE;
    + G3 R2 p7 O8 V; x6 b1 a6 p
  197.     }1 @8 ]3 z. o7 Y2 g: g# b" r, w( c/ \
  198.   }
    ( V  ~: z: J( t; h+ m" }% L
  199.   fp=fopen(FileName,"wb");' a5 l' u( y9 i% C# [' b. ~# t1 `7 A; @
  200.   if(fp)
    / ]  y6 u; [1 |- x
  201.   {& X/ @0 Y" [+ R8 ^) ]; D9 m
  202.     fclose(fp);
    1 k0 i' a8 k5 t# ^3 L
  203.   }
    0 l$ Z# Q7 v) v' x$ Q. D4 T
  204.   return TRUE;
    7 g* }8 x7 f5 `4 `3 W& F! ?  R
  205. }, W% z$ b: t0 z& N( P

  206. + G: q2 l4 ]% X% u; X
  207. BOOL CRevAppApp::UpdateLocalVersion(void): u& j( U. X2 n+ ]3 W  q* C
  208. {" o  g5 n: _" x- _* W  H6 t
  209.   char filename[MAX_PATH];
    & R: X2 n! i5 y& r* S/ i/ T; n, F; q
  210.   LPUPDATEFILE file,olds;
    / K: V8 k% f) B5 o$ @# ?
  211.   std::map<int,CString>::iterator i;
    3 E& n& }3 ?' [) p) @0 `
  212.   std::map<CString,LPUPDATEFILE>::iterator p;1 I0 j, h. Q" q3 @
  213.   std::list<CString>::iterator l;
    5 _) }- r. S! K3 B
  214. 7 ]3 h4 q$ h- e
  215.   if(bFirstUpdate)
    * G* e1 b" F5 c8 t/ @" o! T6 a
  216.   {, a# D7 x0 U. Z) o8 p8 p9 x4 ^) O8 h8 o
  217.     dwCurrFile=0;; X8 X$ m! J1 d8 T' F/ t2 `
  218.     bFirstUpdate=FALSE;( Z9 J3 W+ d1 X9 i$ o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ E2 A& Q: t' C1 N. \( i
  220.     {
    0 E8 Z- B) V, Z1 j3 N! X8 c  ^
  221.       dwTotalFiles=UpdateLocal.size();
    " a) J# A/ U' Z0 J. |0 ?/ F' S
  222.       dwDownLoaded=0;
    , Y( D7 {* m* G6 k) v
  223.       bSilentStep=FALSE;
    ' u) O  T& l- u
  224.       bCompressed=TRUE;) ^, |0 o2 [% n7 h3 d& R* F
  225.       strExtLocal.Empty();- W7 j" P3 y7 Y( a' o
  226.       strFullName=(*i).second;* S9 B7 n. e7 l+ E
  227.       dwProgramState=AP_CONNECT;
    - l! b4 B, r  c% M
  228.       return TRUE;# @! a; l9 p0 r  F3 a, S9 G
  229.     }
    , l3 W6 ?9 a, {4 f1 N& {! r
  230.   }/ N. q& N/ V3 N
  231.   else if(bRestartUpdater==FALSE)7 r' E9 X8 R- S- J
  232.   {
    5 C9 F& U2 b: \1 F$ K4 E
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), X0 R, K, W* {. z( g: z" G
  234.     {
    : w" E8 f. J& p/ ]' i9 N) |
  235.       file=(*p).second;$ W* t' J0 F. m# m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())+ K( _" W5 B+ ~  W& f
  237.       {
    . \# K; ~% F( @6 x2 d+ c
  238.         olds=(*p).second;! w% _4 b( l% P0 q7 Q
  239.         olds->vers=file->vers;* A/ F! I6 {2 d1 \' q
  240.       }* ]8 O' B" c# l5 m2 G, N
  241.       else/ O- [% h  P7 k  U+ |: n, r. H
  242.       {% G0 j7 t. v6 [* F" x; B( c
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ Z7 i) @& }# g, G  Y
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ( X7 u5 p0 I' Y+ ~3 V, q8 q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* k, Z; S% c; }1 z6 a# X
  246.       }
    % \( \- m2 g' A/ P
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    & C9 e4 U- \* ^. P, U% x2 O* u9 w
  248.       sprintf(filename,"(%s)",file->file);0 Z9 {* [: e3 J, ?: C+ _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);6 d& `+ `3 g6 G! A1 H; v
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & j9 C" u6 n3 W! E7 d9 N
  251.     }
    - h$ C0 L3 Q1 Q! G$ o/ G$ a  i1 z- G
  252.     dwCurrFile++;
    $ g* O3 T4 H3 ~
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    $ U; P* \- r# Z5 ~% M7 I1 o% `
  254.     {
    * }& h4 q+ ^, ]/ z. @7 n( u6 e
  255.       bSilentStep=FALSE;( {- ^: s/ N1 ~% r5 k7 t1 F5 O6 M# e
  256.       bCompressed=TRUE;
    " ~+ w' n- V! M( I+ L& `
  257.       strExtLocal.Empty();* ^  x8 l% \' N5 F0 Z. X
  258.       strFullName=(*i).second;
    2 u8 H, a: e5 {0 R
  259.       dwProgramState=AP_CONNECT;: U0 L. y2 u1 n8 ]
  260.       return TRUE;: q! {+ p1 ?7 `
  261.     }8 K3 A. f1 J0 Z; P
  262.     if(!bRestartUpdater)
    8 K+ o0 Q: q! @( U) |) f8 r6 G
  263.     {; G( ]% `0 N/ l+ @' L/ u
  264.       int iCurrSize,iFileSize;  n/ ^; m1 l% ]7 q# b: j
  265.       iCurrSize=0;9 w' q, [) {% ~9 W8 g
  266.       iFileSize=UpdateList2.size();  `* t, y5 V% t1 o: Q5 F
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    & v, Q" l$ ^; _" e8 m5 A6 v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; s% H5 ?7 x* `. N" I
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & C  b0 T$ W! _
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , u$ ?/ [# u$ y6 Y+ _
  271.       Fclearf(".\\update.dat");
    $ n7 c4 ^! B) |6 q# f
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ) ?2 G8 h$ S2 W
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++); Q' s: J1 q- S* s
  274.       {
    # P  Y6 V" r' f3 r
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())6 R  v4 {* j  F0 D' L
  276.         {6 a- E+ W1 @. b5 |: r% {
  277.           file=(*p).second;5 \3 t0 b& ]8 J) i
  278.           sprintf(filename,"(%s)",file->file);( R8 H* }; J3 j1 l: `/ @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( {* P$ |9 g1 v( \6 p
  280.           iCurrSize++;
    2 q- `& X3 Y  A
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));6 i" N9 b0 ]! h9 P8 a* e4 @" m- ?
  282.         }
    ! _! {. Q0 x, M' Y5 V8 g
  283.       }
    * R6 @4 u: ?, v
  284.       unlink(".\\update.txt");; Q4 u+ P; _1 C
  285.       unlink(".\\update.tmp");
    , D  y, @) E3 u7 N+ m& W2 v* r
  286.       Fclearf(".\\checkversion.dat");$ P" e/ f( ]( _! g( s- j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);! e1 J( f' Y. D5 e4 |4 d& W8 q. \5 f
  288.       if(UpdateLocal.size())1 }. m* s4 u1 J4 y$ B. h# N
  289.       {/ i: @5 H: {% V2 x( H7 J6 w
  290.         UpdateLocal.clear();
    7 |* a$ g) k& E3 R  U) F; }3 S
  291.       }: Y1 I5 v/ y5 ]* }  R9 C# i, c
  292.       if(UpdateFile3.size())
    ! _4 A; ^5 @4 G8 R; c: U$ g. g2 u" e
  293.       {
      K1 Q% C( N2 @- }; S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    0 C5 U# _. `2 k7 R
  295.         {) R  w' Q* d' }7 A. B3 q7 y/ P
  296.           file=(*p).second;
    " M. j0 Z, v5 ^, K2 J2 w+ D8 E
  297.           free(file);4 l3 w, ^3 [# g8 l0 n
  298.         }% C' F9 `$ c: \
  299.         UpdateFile3.clear();
    5 n8 j) {( b9 w( ?8 j6 K
  300.         UpdateList3.clear();+ l- s, s+ p5 X: j/ ?
  301.       }
    ! R) h9 w* `& d5 z: t
  302.       if(UpdateFile2.size())( h: K  b; B5 a8 O6 `
  303.       {
    * s0 h' l( a7 A+ x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    , [7 U8 Q' |, ^+ \5 D% t9 h+ v
  305.         {  I; p9 O$ s- M
  306.           file=(*p).second;
    6 L/ r" }5 ~8 ^
  307.           free(file);
    2 n" F" f7 |& n2 @6 A% d: x
  308.         }
    & f2 I6 e( o: ~$ p& L, c5 }% e* s2 _8 B
  309.         UpdateFile2.clear();% {/ X* O2 W! ?  ^* E6 w7 R6 m6 G3 b
  310.         UpdateList2.clear();& P9 e. s! V' w( h
  311.       }- p1 ~; z4 _5 Q( F
  312.       if(UpdateFile1.size())
    3 P0 O3 Y9 y6 n" ]
  313.       {
    6 p8 @8 m" x* D7 B
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% x. ?% S# y3 v2 C
  315.         {7 m& g5 C, Y- b. J. _2 z
  316.           file=(*p).second;
    / c+ }: {4 @3 m
  317.           free(file);# Q3 ?; s, e7 u. K1 X) @2 V. t
  318.         }8 P0 O" T( q* b8 {; q3 X( P
  319.         UpdateFile1.clear();
    2 d+ R' g) w9 }5 a) Z; |" U
  320.         UpdateList1.clear();
    ( z5 W9 m- o7 y% i/ h* s
  321.       }
    0 W4 S& z/ X8 s& f0 W* ]% Y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));& d) U/ s  _4 h; Z9 I8 d" {+ @
  323.     }
    0 s# b! N: S: ^1 m. c; n+ d1 m8 l
  324.   }
    9 w, {6 q& M$ m1 o6 U
  325.   return FALSE;9 `" t+ _. m* t$ U+ C
  326. }
    2 D, i% T1 n1 R5 w! ]
  327. 6 Z2 n# q7 i2 v
  328. void CRevAppApp::ClearAll(void)
    ; N: J# J: I/ h( i( F+ v+ E; ~
  329. {2 |) r, F1 K1 y0 _' e! e0 L. x
  330.   LPUPDATEFILE file;
    / H9 K: s  I$ b+ O; V' b* d
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 ?1 C  x7 F/ r
  332. 4 a4 {( y3 n/ H
  333.   if(UpdateLocal.size())
    " s8 D2 j3 c8 a$ c  ^
  334.   {( L% L6 H. z% Z+ ?. x: _1 y+ S
  335.     UpdateLocal.clear();
    9 O5 D4 s- L+ M2 u. F
  336.   }
    1 R$ L. h8 d2 c# u) F
  337.   if(UpdateFile3.size())
    % ?, H$ s7 g2 t* K. {" H
  338.   {+ K& I, j+ T# ]3 v- r
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : S* z) s# E1 A/ \/ P& |; b1 w
  340.     {
    : K* a1 ^* ?# I9 R# X) C5 m5 O
  341.       file=(*p).second;% `: c. n6 o5 f; _# ?: D7 N3 J. W
  342.       free(file);
      k: k# I: u! }! p6 r
  343.     }. G( E, ^9 w2 Y0 k
  344.     UpdateFile3.clear();) D) y# d2 u' ]: \
  345.     UpdateList3.clear();8 q' [- |  z. h9 X3 H6 K4 m
  346.   }
    8 N4 O$ j4 @& b+ O
  347.   if(UpdateFile2.size())% c7 U7 U& h8 p1 M1 S) g* J6 w) w# i
  348.   {. r3 w" y( M, N+ y. n( R5 \
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    . O4 Y7 g; @0 E, E5 n4 o6 }1 m
  350.     {
    5 i5 t* t4 c" J3 a# U
  351.       file=(*p).second;3 [$ @( @1 c0 A" B( Y0 \/ {# r9 B
  352.       free(file);
    : {& C* ~: O. O
  353.     }
    & y* F+ ^3 ^, E' j! c, Y
  354.     UpdateFile2.clear();- ?, Y, O8 l0 @& i
  355.     UpdateList2.clear();
    4 m9 V9 w$ ]$ x5 Q8 s% {, X$ `5 c0 l
  356.   }+ B) G6 g5 n6 C; u0 Q, K6 n( U
  357.   if(UpdateFile1.size())  [8 O. k9 v' C" m3 a0 B5 n
  358.   {
    , V  `9 ]& @/ x. p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - b" p  w3 q2 Q6 u+ O
  360.     {4 x( H# U! R' v6 o2 p8 [5 R
  361.       file=(*p).second;
    , V3 E8 I* n0 ^3 H' U: N% s
  362.       free(file);
    ( p1 [% |" ?& `! C6 A' q5 q$ b% v
  363.     }' a& _5 P. o- _
  364.     UpdateFile1.clear();
    , u3 _* i7 f; O, q8 ~9 b
  365.     UpdateList1.clear();9 U: H' O' b, c
  366.   }' x' j& H$ |5 H7 a* i4 ?
  367. }  & a( z" ]) n( r- ~) i+ f5 n) H' r
  368.   : s' m3 |9 F. m- c/ ]7 h& y% m
  369. BOOL CRevAppApp::CheckLocalVersion(void)+ F/ c! p) s) ^# T
  370. {9 g( l5 {" t- `. t3 R( B
  371.   int c;
      m/ O% S4 Q8 M! J& B1 D7 M
  372.   LPUPDATEFILE file1,file2;; S1 Q; ]! V# S! h4 ~+ ?. G
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 O  w  b2 s! U
  374.   std::list<CString>::iterator l;0 J- g* ?& A7 z. J6 u

  375. ! ]" y( W# v6 H/ Y
  376.   UpdateLocal.clear();
    8 t# E2 y  v, d* r$ |
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - j5 L6 H* z; V2 c9 C, ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ; N$ E* A+ @& C0 f( J
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 V, p, g6 X5 D. |/ e1 Q4 O+ o5 e
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    3 C( J8 T5 B$ G6 K1 V5 b
  381.   if(UpdateFile3.size())5 h2 J9 U( Y9 l' A
  382.   {: Z" H- u) G: v2 j9 w
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : U; A+ H# v& `- n! U0 T. W
  384.     {6 J1 M1 f2 N8 \% V% n
  385.       file2=(LPUPDATEFILE)(*i).second;
    7 w0 n/ @- V. F
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 k/ G0 U" d" q; b( _- U1 ?
  387.       {
    , n# Z6 F3 G- P; H" A! D# L
  388.         file1=(LPUPDATEFILE)(*p).second;
      G- b, ]- h. [$ r* S( U
  389.         file1->vers=file2->vers;
    ) r' k2 o/ P  `+ N
  390.       }
    ; }! s5 I8 R  c- O7 X
  391.       else
    - O, B! i4 T) X8 T( K' u6 X) h  R/ }+ o
  392.       {( F  r7 p: ?8 i, h+ C. o! s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) z5 Z9 M4 u1 `$ ~% T2 l" \6 O: j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      G7 T  Q+ f0 x/ e% V+ ~) W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));  u, f- N: L+ R0 z3 v! \& ?
  396.       }" K. e4 a2 A3 Y9 w1 x7 ~" X
  397.     }( i/ C) ?, j# R3 T& @# v8 @1 {
  398.   }% T4 N- t' w+ \" z" b3 L
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
      @! ?. V! Y" s. b
  400.   {; j0 G* ?! e- O. r! E5 a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())- e0 B- B5 N% T3 U6 f
  402.     {% w" ]% w1 `1 t3 o% j8 n
  403.       file2=(LPUPDATEFILE)(*i).second;
    ; W$ b+ h4 b6 }, F* x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 E- e9 S  N" ~; P0 Q
  405.       {
    4 K  G8 K0 [9 }  L8 Q6 a3 S4 \* V
  406.         file1=(LPUPDATEFILE)(*p).second;: s3 S/ b3 l0 r( I
  407.         if(file1->vers!=file2->vers)
    ; f3 L5 T+ _* M! A" N  U" E2 \+ y
  408.         {9 B6 {" M6 p" U& m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));2 A* b/ H" k+ `# `% |3 y. h
  410.           c++;
    ' N2 |% K' F+ y
  411.         }& _) z% {& f: H0 P" U% E
  412.       }0 \2 B( o( u- D* n  h
  413.       else4 ]2 E6 [2 o* \/ y2 G! d" K/ n
  414.       {
    & a  E3 {* W% j2 r9 s
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) c5 f7 }/ T% g. n. ^5 }
  416.         c++;$ T0 q% w6 x, t6 p/ J+ l( s  d' W
  417.       }) D7 Q& \) x* [% H- j
  418.     }
    ' i! w2 U* E4 g0 Q
  419.   }* q$ ~, h, E4 [! k8 i/ i3 i* B6 J
  420.   unlink(".\\DownLoad\\update.txt");$ f& O9 E) Y" q. {6 A
  421.   if(UpdateLocal.size()) return TRUE;" L- l4 p+ ?$ C/ [/ {$ X
  422.   else                   return FALSE;
    . D6 N( s" }: A
  423. }
    9 c$ ?$ G4 p8 r( T' Z

  424. ) t" R* ]1 I7 ~% A4 J" K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 `: r/ a& p9 _% g( @# {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"2 h; T, F( i: ^1 ]% o

  427. 3 A; i  a6 W4 o" {
  428. + e  T4 A2 d, n  L$ P! z
  429. ; H3 ?, t. x3 H- {' x( \5 G
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' z0 i! u5 O3 g  J
  431. {+ |1 l# L0 J) q* E6 s
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;# G! i8 k+ k2 f. u: q7 T' x/ r9 S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; I; H2 T8 X3 X2 B( E% h7 ?
  434.   {
    4 ]% y; F; F2 Z9 X! D4 L, k
  435.     char szLanguage[50];/ `6 t2 E' z3 ^9 d# y' I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");# z6 }6 h* ^: W
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;5 C6 p8 ]5 m) y5 ^
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 F( q$ w4 ]. w1 O" u! F; t. g/ Z
  439.     else                                   m_iLanguage=ENGLISH;+ J" K" l2 h3 N4 W  Y7 l# c
  440.     char szRegister[100];4 y1 Z0 L  @- D1 B/ r5 X& [; r* K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 B$ ~% {4 Q7 m6 b% T( S/ U
  442.     strRegsName=szRegister;
    * }: `* v! U) e/ C6 t! h% j8 o
  443.     char szPatchURL[100];
    & [7 r$ |! u) |1 k& ?$ e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' S$ B) v+ D% @0 I$ d
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);- t. M3 w% `/ q. j% w) a  M# B
  446.   }3 m9 d* n8 h" p& R
  447.   else; t+ Z" }, G/ W* H& t, ~& ^: ^2 d
  448.   {
    9 |# S$ B) M9 w' S3 ?" f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 L: S" w2 _+ y) S! r4 `
  450.     strRegsName=DEFAULT_REG_URL;
      P& Y1 E" O7 s& S  ~  g: D$ ~
  451.   }
    " M6 E& _7 g' N6 e
  452.   if(GetFileAttributes("hosts.ini")!=-1)- ^, Z' U: _- G/ ~
  453.   {7 B9 R  k. G; q# S
  454.     char szIP[50];
    5 j* w0 W$ S' ~% T
  455.     char szDIR[300];' S7 X$ B: C" ?" a1 c8 j  c& o2 S1 u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    8 x5 a4 y% c5 t+ F" |3 q
  457.     {( i9 J/ v3 d- Y0 ^5 R9 F# ]
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");) z; K, ?. ~7 v, k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 V4 N4 ]. p: D7 F: @1 c
  460.       strHostName=szIP;; j! i4 {# ^4 j% @6 {+ \2 ^
  461.       strHostPath.Format("/%s",szDIR);
    # ?( z+ Y' g, a: d
  462.     }
    4 Y$ g  s- x- G
  463.     else2 B3 O& S# A$ V7 Y8 s
  464.     {7 l5 Y* w$ s' ?/ ?: m' {% o
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). r# l4 E2 s/ G/ n+ j; B
  466.       {; ]# o" T( n/ h4 k6 N/ s. p
  467.         char szLanguage[50];
    4 E+ Q! U; c8 G+ |: u, M  ~5 `) v
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 j3 ?1 S' I& S' b5 L0 r" R9 g' b
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  z& @1 E" U# J3 V: O5 e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;+ [+ }: v, w# N6 F. P( i. Y7 h; {% E
  471.         else                                   m_iLanguage=ENGLISH;
    5 @$ f. ^% l$ m7 B$ j- x: j
  472.         char szRegister[100];5 h/ b# x- A8 w- ]  O3 x2 r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 N: V7 x% V8 V/ m; T1 Y
  474.         strRegsName=szRegister;$ R' y0 p# O/ U' w! ], V
  475.         char szPatchURL[100];
    2 y) f% \7 I. B8 _- G
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) u4 Z( @$ y6 E3 N3 E! k( o# Z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 C, w4 L" D( z/ [: A8 e- j
  478.       }$ E/ H* H# u6 e( q8 h' b( n4 T$ ^$ o
  479.       else( s2 x- Z( G; k! v5 }& s2 z: ]
  480.       {7 h1 d7 l/ z2 W- _! J
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 z3 I  ~2 f3 m$ a; K# a
  482.         strRegsName=DEFAULT_REG_URL;9 f5 n+ V! ~; z
  483.       }5 x9 y$ W: D1 F# D2 a; a
  484.     }
    - B! [( _9 @+ `/ Y7 q0 l* x; {" x
  485.   }9 R7 T" f- K4 t$ B: i
  486.   return true;: U0 u4 g$ I1 o  ]9 ^7 B+ J- k
  487. }6 S4 e- o+ X' j' B0 O1 {" c' v! D4 D% ^
  488. # c3 e* I" i8 ~! C
  489. #include ".\ZLib\unzip.h"2 K  g7 }7 `" ?1 y# @
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    * d2 d- x* r" q- l/ C% C) e
  491. /////////////////////////////////////////////////////////////////////////////
    , J! R3 h) ]- M2 v
  492. // CRevAppApp initialization
    ' u2 S# I0 e$ \  W

  493. # C, N8 o( N# H& h9 T2 f
  494. BOOL CRevAppApp::InitInstance()
    $ h: P9 b  T: k6 D/ v- U" {
  495. {4 W5 U3 r  R( W8 S- i* \1 a8 Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];# ?% I9 D. a4 P) F" ~

  497. ( f" m4 F- M$ y0 H/ F7 i
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 [& G( o7 c! E' v  \
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    3 I# F3 p- ^6 |5 E- R3 D2 S6 k2 p6 S
  500.   {
    5 r9 L# a( `8 a3 [& K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ ~9 w1 H/ Y4 N
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      E2 @7 o, G& a  G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    $ n- F! k4 m  x  L
  504.     {5 |. l; W7 w+ f3 x8 Y7 u4 o
  505.       strcpy(szPath,szPathTarget);
    + x% a0 h4 V) w0 g& o
  506.       SetCurrentDirectory(szPath);' `, `! P# z! C
  507.     }
    ( A' M! N. s. W/ z- k$ P3 u
  508.   }! _, s3 i% i( l7 S: \
  509. #ifdef _DEBUG: S8 f" y. j/ j6 R, q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& g) K- F0 d4 v3 ^1 a
  511. #else4 S. O5 n, U) K( f% L0 L5 d6 ~
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 J# n0 a9 ^5 q8 D0 V3 s
  513. #endif- X0 G- M9 o+ L1 D% z7 C/ m
  514.   {  A7 A& x. f! T- C
  515.     char tempFileName[MAX_PATH];
    2 q$ P* v* s% T# u3 O, p
  516.     strcpy(tempFileName,szPathSource);
    " n- G# J& \7 P
  517.     tempFileName[strlen(szPathSource)-12]=0;% c+ s/ G' o, w4 V! G4 _- M
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " ^. R) @$ z% p# F
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ! I9 T0 X" ?& R6 y/ f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    - z2 @. k, r4 {, r* ?
  521.     return TRUE;7 n4 d- I0 m5 @8 v4 t+ x4 L
  522.   }
    $ w! p. {# J3 Q. n, l$ A- Y
  523.   // Nuke 0118: Delete run.exe  g& Y( \2 \  V- v' ^4 n
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 G( B& x$ S* l3 Q3 k
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    . X" Y. }& @8 S2 E
  526.   if(!ReadCfgFile("Config.ini"))3 j$ J, j6 ?, K5 W; [
  527.   {
    ' H+ U9 c% h# _* h: {. J
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 G) g: m% l$ x$ N! J3 M8 J
  529.     return TRUE;1 h: V! ^8 N" {$ u5 K
  530.   }
    + A# w$ g2 S+ i5 V: _* w) }
  531.   HANDLE mutex;
    ' L  D( Z3 ^4 S- u" o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    + l$ P) q4 p" P" A, ]4 A
  533.   {
    8 A& E4 L& [# g$ s; ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)* S; ?/ Y' o% A5 Z
  535.     {
    - R" e' @) t- @
  536.       CloseHandle(mutex);: ^, Z5 D+ f, M& ~: Z4 a0 ?8 U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( `* ~9 h8 J# s, H( U! _+ j2 a9 t# V2 R5 z
  538.       return TRUE;- U' b5 w9 e! `' ~# r
  539.     }3 X1 j7 r+ c: `9 C
  540.   }  ; l$ u8 F/ v! o; a
  541.   CloseHandle(mutex);
    . L# M* V" `- Q

  542. 7 e; L, \8 e% y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);2 Z( y& R% x: J9 c% z* M% |; j! `

  544. / `& m6 p( r& q- S# K* O4 E  l4 i
  545.         AfxEnableControlContainer();
    . Z# U" x& X1 p" o. Z& U) r
  546. ) H( S: }; J9 a  v6 O# j5 I$ H
  547.   bCanUpdate=FALSE;7 _4 [* M/ z- t+ `1 p( X* _: L) n
  548.   dwStartUpSteps=1;
    & y0 ^; S; b% i1 l, O; z
  549.   dwProgramState=AP_NOTHING;
    4 w9 t4 x, c% y' ]( R' t5 U+ {
  550. 9 {' s5 R) x$ O4 s  m0 I
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    + y- t. @( E( p
  552. ! P2 _7 v, n  X
  553.         // Standard initialization
    + T! `' r( m$ |- R' p2 Q
  554.         // If you are not using these features and wish to reduce the size+ @5 q7 J# s1 }0 T- o
  555.         //  of your final executable, you should remove from the following% f1 ~( A; L$ Z2 B5 \7 y" I* w
  556.         //  the specific initialization routines you do not need.0 P+ W; [: E) H& V
  557. ! @1 g: z) ?4 |3 e1 Z$ Z9 }
  558. #ifdef _AFXDLL, L2 P5 @: L. G7 w- N! E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: f; l3 Y! \9 b
  560. #else
    & L4 d  g3 O* O( ~6 _
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    3 o4 S3 e% o: f: H7 Q
  562. #endif( z. j( D' g  Q( z1 D
  563. ' P! ]2 f. f# i3 W7 `
  564.   dlg=new CRevAppDlg;
    $ L( ]3 e2 I# H; K& Y
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! {; R  _. B9 X! ~# e/ @. k
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . V* [. {' U% |
  567.   m_pMainWnd=dlg;" ?8 q0 l, |' S6 O, v% f! [

  568. & E' k' J7 A: T: G
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    1 V6 c" Q4 Z" \+ @8 Y4 U
  570. ) @8 l/ E- X* H4 Z/ }/ O
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # j  E4 G" ~- e4 C* k
  572. //  ULONG_PTR gdiplusToken;
    . q; G8 U  O5 }) j  P" c- y" Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);% ]3 }0 _. A. b: e  q
  574. 2 @- ^! z; F: E, W
  575. //        CRevAppDlg dlg;
    & q# c1 D, j6 y6 y
  576. //        int nResponse = dlg.DoModal();$ U: ~! Q# b3 F! L( M
  577. //        if (nResponse == IDOK)2 e  Q" B+ B9 f0 a3 \% R* K( y
  578. //        {
    ) Z! B9 J2 C: J$ {6 e
  579. //                // TODO: Place code here to handle when the dialog is7 D8 o& q3 F4 U+ h) U) N* z/ U
  580. //                //  dismissed with OK
    ; S- W6 Z7 v. _, r" V2 C
  581. //        }
    . o7 t. r5 ^& j3 r# t% i
  582. //        else if (nResponse == IDCANCEL)9 {  y7 {: l* e! O
  583. //        {
    * z7 o* W0 j1 U
  584. //                // TODO: Place code here to handle when the dialog is1 t0 W1 h  @4 o, ~3 X+ M
  585. //                //  dismissed with Cancel
    . P5 i: }5 Q8 j9 B4 L/ b6 r
  586. //        }' ^. U: D; s' x, m; D* q

  587. 7 n/ i- j" M( _8 q5 D. N4 S4 O
  588.         // Since the dialog has been closed, return FALSE so that we exit the2 _# p' j$ z0 r: j+ |8 T1 c% {. f2 ^- F
  589.         //  application, rather than start the application's message pump.
    $ `. J* |: l' \6 p3 i* V, i0 B
  590.         return TRUE;% v& X. S' P8 t' A3 f7 f) ]" h
  591. }
    7 E2 H4 Z. _0 ?

  592. ( u  ]  u, o, H+ u& a; @. f' X
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 L9 A( U/ x3 b. S$ _) I; ?
  594. {
    / \# K* l/ T# A! \; S8 T
  595.   int i;
    & w) n. g6 J( J% V
  596.   char *szRet;
    7 R7 e& f4 _% h1 W) ?  Z  H" M4 `

  597. 4 O0 S7 U& e1 U1 q# p
  598.   if(pSource) { itoken=0; sztoken=pSource; }( l+ R+ i/ V  F6 @3 ]
  599.   if(sztoken)8 F5 \* h0 D( T) g6 G8 P
  600.   {
    + w+ i' L; E0 Z* E- \( |
  601.     szRet=&sztoken[itoken];
    + D$ h' H2 i! n) a# U3 m; H7 \- t
  602.     while(sztoken[itoken])6 i( L& b: C# W2 e4 z3 V5 n2 G
  603.     {! Y, `9 _3 B/ k+ K! i* R( H, S; _0 q
  604.       for(i=0;i<(int)strlen(token);i++)6 I) |, K! ^2 ?: v0 d4 U/ X
  605.       {: d. `1 P7 T* l" w' S# j! d
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    % r6 f( O2 l+ h# _- b
  607.         {
    7 y" z; I+ K. X* v6 V
  608.           sztoken[itoken++]=0;! C  G9 G( I; w- K' r8 \1 h
  609.           sztoken[itoken++]=0;4 g$ a% [8 N: }, s( M
  610.           return szRet;
    ; b; I) u: ~& ~5 U
  611.         }
    9 k' y# }. N$ m: ~5 y
  612.       }0 _$ k# v+ d/ Z# n/ e
  613.       itoken++;! q- W7 ^6 ^' V$ j7 A" ]' j
  614.     }/ @3 X% T; l: w1 o
  615.   }3 I# X; q( Y! ?6 ~
  616.   return NULL;
    : w8 V4 {, U. G* q% n7 D8 C  t* m
  617. }3 ]4 y' y3 y7 Z3 }+ y
  618. " H) Q2 y% q/ A, o( v4 [
  619. void ProcessProc(long Total,long Current): b  _6 `$ K3 A2 V4 v' v5 \8 F
  620. {
    1 Y4 d( \9 X" A/ L' Y
  621.         MSG msg;: }+ Z$ M& c* M8 w: r, I
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);, q/ l! ?$ D7 t. a- E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ S3 v& i$ u* F  R# _
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' G" U5 f! Q  J% B
  625.         {
    1 o& A( \' A$ ]3 S
  626.                 if(!GetMessage(&msg,NULL,0,0))$ F4 t# P# Z! W
  627.                 {% N: B9 r& H* Z# x$ u
  628.                         return;
    5 W% M+ u& n* W/ r9 ]. B
  629.                 }% O$ T8 r$ E) o4 k0 C5 s
  630.                 TranslateMessage(&msg);
    / n2 N5 F  F8 [$ I. }& _" g' N+ g8 H
  631.                 DispatchMessage(&msg);
    ! c: |# L7 Z* W: @6 P
  632.         }       
    - w7 s! N, Y) D! G
  633. }
    1 M/ m! u5 K1 @: U& N2 d2 f  K- T
  634. 2 U+ z6 H! M5 ^
  635. BOOL bFirstChar=TRUE;& ^1 ?* ~5 l) I# `0 ^" z. {& l2 i

  636. " e- n$ E  a4 X1 E8 Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)6 A* B! B; W" d0 J$ o" f, z" s
  638. {" U! o, {, O2 c; N( K1 a; u; n
  639.         // TODO: Add your specialized code here and/or call the base class9 ?' J2 L6 f  F9 u
  640.   switch(dwProgramState)
    ( M6 G( R$ A4 C8 U7 \- P: ^/ Y
  641.   {% l) m; y" w0 }% c# O. ~
  642.   case AP_NOTHING:
    * ?+ k1 R0 a3 h
  643.     switch(dwStartUpSteps)/ D; z% k( z. l+ V
  644.     {! e3 J+ C' F/ Q" R( n; ^
  645.     case 1:1 s8 U5 Z, g; U% s8 `6 X: [2 j
  646.       {
    * N; b7 ~5 }0 a! P( o' @7 U
  647.         int i;- ?6 \3 K5 z' \" v
  648.         CDC *pCDC=dlg->GetDC();5 a0 l& I3 K. c
  649.         HDC hdcwnd=pCDC->m_hDC;8 M3 X' V% x/ _6 x, J' a$ T
  650. //        Graphics graphics(hdcwnd);
    1 O0 h) X) W. g% i! \1 ?( M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ' J7 m9 M3 n# z$ ~- e
  652. //        INT iWidth=bitmap.GetWidth();% ^$ K3 B& G. @( G+ ]  Y
  653. //        INT iHeight=bitmap.GetHeight();
      }0 B& W. r$ j8 l  J6 i
  654. //        Color color,colorTemp;
    7 n- r4 Z! B) O; H) B; T$ B" t8 e+ J- X" E
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    6 c. b6 s/ D. v* F5 b: }
  656. //        {
    & R9 g* L4 J/ J/ P. |, H. V4 {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) B+ X7 |$ K0 M( o& W3 _
  658. //          {
    ' l; v# g; q- l- T# I6 L+ Z  R: h
  659. //            bitmap.GetPixel(iColumn,iRow,&color);/ T  \; e* ^; ?( c2 A  U. S
  660. //            colorTemp.SetValue(color.MakeARGB(- B9 U9 z" Y1 Z! p& |' n; E* `' D
  661. //              (BYTE)(255*iColumn/iWidth),
    * _" P; C% M8 {5 |+ Z) p5 X
  662. //              color.GetRed(),9 H$ o- v# Q/ q% F5 C
  663. //              color.GetGreen(),
    ( D2 b( q! t5 T
  664. //              color.GetBlue()));
    ( i, ^! a3 R2 a& A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    5 m6 L# c5 A! C; Y
  666. //          }* Y4 w; w! X. s& n6 w
  667. //        }8 }( v" I) l9 J& {2 M1 _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 o# @6 T8 M( ?. u/ T) v9 A
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* m. t2 k. l& I6 V, m# K8 N0 q
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");+ R: U4 p6 _. c1 X* S$ }& u9 r
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; t( ^7 c8 ]" {2 \' A- v8 n
  672.         for(i=0;i<240;i+=8)
    5 Q* n0 n$ \2 j/ A! E/ H& Q+ F# @
  673.         {  _/ Q( ^- G4 ^0 g" o8 t
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);7 M$ k) L7 I5 W7 W; g1 N! H3 m: D+ ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( Z' O. k7 k' K* U. g
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 I" Z% l8 B1 _% I
  677.           Sleep(33);. f( U  y6 v% ?' \0 r
  678.         }
    5 i# K/ a0 b. }* [( O! U
  679.         Sleep(1000);
    % [* z7 }7 l6 a, _0 j, y$ ]
  680.         for(i=240;i>0;i-=8)1 k; I* y# Q) |
  681.         {: k# R& T4 T9 o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 m" A4 @/ T4 U7 }8 X' N  F
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ ^! Y: m! F' Y& d$ o4 Y" l7 \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);  G/ v- j8 A: x4 u# _; I
  685.           Sleep(33);
    9 M5 S' k$ i7 ?# _, Y0 c' n% U3 Z
  686.         }( Y2 ^9 d5 Q3 o  `# n
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);) z! k% f2 f, I5 X7 s" H
  688.         dlg->ReleaseDC(pCDC);
    ' S/ l6 _3 c" w7 q/ h. q& [+ h
  689.         DeleteDC(hdctar);# W. u0 G  d4 h5 j( H0 R
  690.         DeleteDC(hdcsrc);
    # U& H$ W5 \( L0 T: }
  691.         DeleteDC(hdcorg);
    & z( f- ~; i" T9 |, C! e/ e
  692.       }
    7 M& `/ N4 ^) H3 Y  [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    8 t5 i/ `0 U+ j8 A
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    8 k0 D2 U6 x- P, E1 f; P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    / k( ~4 s' P' K1 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    . y. Y; V+ E2 Y1 \! O* C. g( \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 C& G3 f' Q0 d# N. L& l
  698.       if(!Dn.Connected())
    ! O+ U# ]( y3 x5 D4 @; B, r
  699.       {- m7 K$ y8 O! g+ j
  700.         dwTotalFiles=1;( ~% {. |: x: |  d9 n4 ~  S
  701.         dwDownLoaded=0;* Q8 S' j9 o2 y. ^+ p
  702.         bSilentStep=TRUE;
    5 ~; L, b! D# m) b7 O7 w1 d( A
  703.         bCompressed=FALSE;  S+ Z1 H4 C% |/ f
  704.         strExtLocal.Empty();
    ! y* u; r8 x; y& k; n6 C" V5 k1 _) S
  705.         strFullName="readme.txt";0 h9 O* I+ O3 U/ u( o1 j
  706.         dwProgramState=AP_CONNECT;
    7 b8 Y+ H- t& Z% D) {9 W' n* f* ]
  707.       }
    / ?9 N, m7 @: x7 [) i* Y7 x
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& j6 }) |( T# h& S$ L
  709.       dwStartUpSteps=2;( e! h. n. a, F. U
  710.       break;
    - k4 O- t  w8 _+ @
  711.     case 2:
    ! K1 Q  m3 o2 E$ c9 {' n
  712.       {$ O; G& U) ~3 f8 f
  713.         int iEOF;2 a8 `, a  q0 C  [
  714.         FILE *fp;
    + b, C" }$ {/ I8 A
  715.         char szString[512];# F2 L' e2 k. p% e& U( I
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");8 |  Q" p  q+ h" X4 [
  717.         if(fp)
    . k5 @4 ]; D4 o
  718.         {/ N$ i3 A" ^3 X2 e1 O  H
  719.           do9 Y+ y3 ?" P% y
  720.           {9 [0 j! i4 \9 g, q, R; P4 m. K* L
  721.             iEOF=fscanf(fp,"%s",szString);
    , g% ~) K( V$ A$ V, O* I; o  q; b
  722.             if(strlen(szString))
    $ ?: D  [' T% t7 T2 `4 |8 d
  723.             {8 V9 f$ p5 n* K* G
  724.               if(bFirstChar)0 _/ \8 P2 |: s9 V
  725.               {' J! U7 x( t) X) a
  726.                 bFirstChar=FALSE;# W! I* Z+ t+ {
  727.                 bConnectIsBig5=FALSE;
    % W) e' k' i; E( c  [  e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " ]% |/ v/ R2 `5 `* D
  729.               }
    - O0 ~" u4 f; {/ A
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : V3 h2 P, j% L" h
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) Z4 v% [& P5 T* f
  732.               dlg->m_ListText.AddString(szString);
    3 p2 I$ w$ F8 N+ }
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 g" F: C; B1 N* w8 M* e9 K- L
  734.               *szString=0;
    $ Z* l7 o* u- P: e, a
  735.             }0 N- B% a& F- k% z. x) A4 x
  736.           } while(iEOF!=EOF);" w9 m$ @' n, X
  737.           fclose(fp);
    2 o7 e5 S  Q0 Y; c
  738.           unlink(".\\DownLoad\\readme.txt");
    3 |  ^, q& r1 S. x& E4 C" a, g
  739.           dwStartUpSteps=3;$ W5 D9 ~6 e& f' L+ Y# y3 _
  740.         }# s0 D, i) X3 u' N, W$ Q3 M  |
  741.       }' U& E1 E8 c" N9 t  R
  742.       break;' ~/ f1 U8 Y& x0 P* n/ B
  743.     case 3:
    & }2 [- X7 A( i: L
  744.       if(!Dn.Connected())% k1 e( A( [4 z
  745.       {
    ; m; u. q! c! l! W
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 F4 b9 r4 g6 w; a
  747.         dwTotalFiles=1;
    1 h4 }* M( C  e* g' s- G& z  E
  748.         dwDownLoaded=0;
    , S* Z* J; p- Z+ V! D' w( \' j  I
  749.         bSilentStep=TRUE;  n0 \: M$ H+ v+ b% J7 Y* g
  750.         bCompressed=FALSE;
    : N6 A) x3 z7 F! o) T; R$ C+ D
  751.         strExtLocal.Empty();
    2 Q0 M" h8 ~, m
  752.         strFullName="checkversion.txt";7 d/ [! ^& M3 x. J
  753.         dwProgramState=AP_CONNECT;
    % o8 b" `$ a, F; F* B: b& p3 E9 E
  754.       }8 `6 N: n9 Q0 D; {- y
  755.       dwStartUpSteps=4;( ?$ }$ ]' V. @- z# w% ?
  756.       break;. b* q# b6 B  |; `  v: `
  757.     case 4:2 L, F' c) n4 D$ Q/ s7 M1 l
  758.       {% v( R7 G- n$ g; m" i, f& [9 f4 {6 E' c
  759.         FILE *fp;
    / ?5 n3 V# `5 Z  M8 z, E6 q0 t& E
  760.         char szString1[128];
    : P' n* {5 \4 S, ]4 S5 U
  761.         char szString2[128];$ s1 N7 i' V2 h* Z6 X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # `' Q# h' I5 J
  763.         if(fp); @9 F3 y0 _  X; H4 E
  764.         {2 j  c; |5 t- E% O% Y0 V8 ?- K
  765.           fscanf(fp,"%s",szString1);2 N/ M* ~7 }+ ~! M
  766.           fclose(fp);
    & q  r' q2 W7 s( k6 @
  767.           fCheckVersion=atof(szString1);
    2 h% T4 ?) R  L# ^3 R. z! \
  768.           fp=fopen(".\\checkversion.dat","r");: g4 E- G7 d& ^0 S
  769.           if(fp)
    / ^: t/ T4 C6 ?0 V0 h8 M
  770.           {1 r6 `+ R; w" o9 \4 o) A' K
  771.             fscanf(fp,"%s",szString2);) p3 E8 H4 \' p5 s. j$ |9 z% V4 s
  772.             fclose(fp);+ _' z% w; H. j& h& {: C
  773.             if(atof(szString1)!=atof(szString2))
    . f$ E- b7 [' v
  774.             {
    ' \8 W2 E  M  [  R
  775.               if(!Dn.Connected())
    7 h: ]! W) ?7 E* M4 W: \6 I
  776.               {1 P9 h4 Y- I( P9 t
  777.                 bFirstUpdate=TRUE;
    ) y5 A. I  O% E" t
  778.                 dwTotalFiles=1;
    + M7 S# c. @; K- C( M- q: _3 d
  779.                 dwDownLoaded=0;0 M! C# ~6 \% F, g
  780.                 bSilentStep=FALSE;4 x6 Z+ X$ e0 P% Y
  781.                 bCompressed=TRUE;
    5 R- Y& [* G# ]: M. |
  782.                 strExtLocal=".\\DownLoad\";; O: z" T5 \: j- s4 k. y; {
  783.                 strFullName="update.txt";
    3 u: ^1 `4 [# |8 ]# j4 d
  784.                 dwProgramState=AP_CONNECT;
    1 _! h; T. E- I, c! O9 i, A, k0 y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* ]. c, u& m2 \9 N& g+ c/ |
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 B" J2 [1 k# p% W" A# S* b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; n6 R  q7 y2 P0 K- j6 x- g
  788. ! A# ~/ ?/ {# k7 E. p" [
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 C3 n' l1 e. n" Z
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    $ h2 y7 P0 ?( S2 E4 f0 R2 C
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)2 ~  Q2 V1 b- H& I
  792.                 {
    , z+ W& j5 N6 D( J; ]' ~; t3 _! x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");5 v: A5 s. ^) u* s( h* E
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");+ A9 T5 ~5 _1 k# U- I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");3 B  k5 A. p8 {, X& R
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # s& L4 H' U6 U1 f7 z3 G7 a

  797. 7 E. `0 l  S4 g
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 r& a6 x2 B1 K2 B  [8 B/ n4 Z5 Q
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) l/ m4 f5 L; l' c) q' g
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : l! o9 R. P- \+ e+ R  H, e
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; D/ J5 }8 z: ?" x0 f4 t) b
  802.                 }
    8 F7 _3 P5 n8 A3 J* D0 w& O: L
  803.                 dwStartUpSteps=5;8 i3 d7 q" Y+ a
  804.               }
    " s( z: q1 W4 }* T1 G, @
  805.             }' O6 q" e. o2 w/ i/ Y
  806.             else' a& _& a2 F/ s: Z4 l( z$ Q
  807.             {4 O, B. a. L# A1 P
  808.               unlink(".\\DownLoad\\checkversion.txt");- ?2 u4 A! X+ ^) u  w2 ?( T/ @( U; M9 F
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  ~* M* V0 v* g$ }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 x0 N4 ]- U+ r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    " _! e. i; c7 F) E) n

  812. / G( |% b0 G3 R1 }/ ]
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 M- ~% _4 a! K: q
  814.               dwStartUpSteps=99;6 ?- t- P& x+ V
  815.               bFinishUpdated=TRUE;
    , Z* y. C' X. Y. S$ A" T1 y; x" x7 W
  816.               bCanUpdate=TRUE;; s) u& e" D5 _: U# g9 |6 ^5 Y; ]8 z% y
  817.             }
    1 l; M. w& F! v9 x! e
  818.           }6 K- C6 a2 e5 a9 M( @7 L5 D. }& |
  819.           else+ a3 g8 t$ E$ w8 L4 z
  820.           {7 p3 f5 [+ D: C% {5 V5 _/ f
  821.             if(!Dn.Connected())
    . s) ?$ b$ ~( \( D3 x7 e
  822.             {
    : ^. L/ R! D) m: G3 K. O' X
  823.               bFirstUpdate=TRUE;) x' L' y1 Z3 G( G+ o# d
  824.               dwTotalFiles=1;
    7 M1 v9 @- o8 V* _$ N3 y$ k
  825.               dwDownLoaded=0;  q$ i  p$ e$ V% t$ `1 Q. U
  826.               bSilentStep=FALSE;( Y% S1 E7 T  E5 Y- t7 ]
  827.               bCompressed=TRUE;+ U5 J* o# ~6 R4 j# d9 z
  828.               strExtLocal=".\\DownLoad\";2 B0 v9 E: g; O5 n7 Q2 Z0 B* w1 d
  829.               strFullName="update.txt";( @1 d$ D7 i" j. i" M, k& v
  830.               dwProgramState=AP_CONNECT;; l; m9 r8 N0 x& F
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 A% v( |- K8 X
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' e8 x" R8 f3 a, v
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");7 \9 b. s/ K) T' G2 v- p. ?. W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % B) l7 W) q' T, D; e0 G
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 a! L# M; d5 a( \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1); V, c5 G4 h7 b
  837.               {
    , {0 y, S6 x: N2 Y3 N) B# G. G
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    + F- C) O! H: E( W2 ^
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");9 a( \4 U& c1 H/ x2 o$ \5 y
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% b1 X2 N. j" W( [$ v  [
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * f' ]& m5 Z3 O
  842.                 % r. R& O* |1 x2 J" D. C4 i
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! B8 K7 V) J# t$ l
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: B8 j3 S  z/ c/ q) ?! {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 M* y9 m: o8 {! l/ X2 W
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 }& q5 _/ A6 Y& y0 z
  847.               }8 W2 w& l3 R( g, p/ _% q1 S+ Q
  848.               dwStartUpSteps=5;
    . Q+ B2 d6 q8 g$ H7 K1 ?
  849.             }
    - Z: @  X: v# d( f) k
  850.           }- \, F0 T2 @. I  t
  851.         }0 _- p1 F* q$ v" C0 D! K& A' ?
  852.         else- ~* k3 B3 A6 t# B' L" ~
  853.         {: |% v9 ^* h# t. |7 ~
  854.           dwStartUpSteps=3;
    % g( Q- P9 q& n3 v
  855.         }& {; F' j+ x+ i9 E- |7 ^# f+ c  o
  856.       }0 |/ g! X* T2 l9 X. F0 u
  857.       break;/ h1 H( N% X& v/ M- X: o
  858.     case 5:
    / G, ?0 D! k4 f! T
  859.       {
    % w/ T) E! [- c; L. m7 v1 w. D
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): U; Z0 E: j6 e  t0 y  Z- p! P
  861.         {
    " g0 Y1 [" i( y. x' H: z/ [
  862.           int opt_overwrite=1;
    2 x# r3 _5 `6 Q* `: s% e: N9 I
  863.           int opt_do_extract_withoutpath=0;
    ' A, G% C+ H  X
  864.           unzFile uf=NULL;' `  ]! Y; u, C/ V- F6 A
  865. ! v' e, a. J9 A) X! Z" `6 U
  866.           uf=unzOpen("Wsa.zip");
    8 b" z6 S/ m0 ~: ?
  867.           if(uf)
    # I4 h+ k3 U% L) w. X$ M
  868.           {# ]  B0 M* z; u. {& J
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);" V% B; X( N8 i4 a: A1 G% V
  870.             unzClose(uf);
    3 n0 Q: U$ M7 j' Y  o: K
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ) J: g1 x! I: g2 B! j, @
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ! T+ g- x+ y2 v+ P
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    1 U6 i& |3 L$ {+ F  z+ T
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % H& ~7 z  h7 u& _  u; O
  875.           }/ _3 N1 ~, k( k" l7 t1 _
  876.           DeleteFile("Wsa.zip" );
    ! {8 I2 D. T! `) D  S7 C
  877.         }
    - O7 W, X/ O) k3 Z* Z' y$ [2 t+ b

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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