CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
) I+ L. z) f9 Q" @5 y3 l) s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " Z4 R/ o; A& M
  2. //% _( E. x& }6 s, t6 G+ _( d. r' n
  3. - B! B- l8 g. \" X. ]
  4. #include "stdafx.h"* `5 q, ^7 {/ p* m2 L
  5. % o) h5 \$ G& ?! |" |1 r8 \
  6. //#define UNICODE# c2 D8 S6 J2 a$ }2 f4 \
  7. //#include <gdiplus.h>
    ) i- {$ W1 [, f1 l
  8. //using namespace Gdiplus;" R* c" f5 s# G% `) A( ]! M

  9. * k6 `1 t4 s& |* i3 K5 |, B  \
  10. #include "RevApp.h"
    ! m6 d" ^! Y8 L1 u. l" F2 c. `1 I6 N
  11. #include "RevAppDlg.h"* O, w$ X* W7 F3 L% q: ]- b; M
  12. / X  W" x5 a: E8 A  D2 ~
  13. #pragma warning(disable:4786)
    ! A+ p: V! c6 b/ |) F
  14. #include <map>2 c( j% |) p8 h% H; q8 b
  15. #include <list>
    ; U* }  L1 R2 b9 H2 k8 ?) T
  16. #include <direct.h>
    / p6 H6 P! }" U, C* y$ M& ?4 [2 y
  17. : \3 I* [3 n7 Q/ k, V
  18. #ifdef _DEBUG/ }; J+ H1 c: s! H" f  T9 l( ^
  19. #define new DEBUG_NEW
    9 L& v6 P* `) J2 N, Q0 A7 u. a
  20. #undef THIS_FILE' C. T* U5 \& k' K" u
  21. static char THIS_FILE[] = __FILE__;1 O1 l$ c& k; w. a7 ]5 |3 {- a1 V5 O' w
  22. #endif
    % \9 W" }; t. E' F/ [- p
  23. #include "SkinResDef.h") M$ y) p" f7 J! H5 U4 l
  24. #include "ChangeBG.h"! B5 k+ F2 v7 q- P
  25. #include "AFXINET.H"
    / O; b/ L. f# _" o" I6 W

  26. 7 i/ j5 e- P! p9 z
  27. #define TRADITIONAL_CHINESE 0
    1 m# Z+ j5 q& J
  28. #define SIMPLIFY_CHINESE 12 ?7 K6 N8 M; ^2 w5 M
  29. #define ENGLISH 2
      r* ?, S, C& M; a5 y, j, e4 i
  30. int m_iLanguage = ENGLISH;/ ~/ C* C) M* z! {% h
  31. /////////////////////////////////////////////////////////////////////////////
    8 x! o3 k3 i  \, i8 m& G
  32. // CRevAppApp
    0 `$ Z  ]8 ?) s( Z  [0 u

  33. # u1 r! O& A2 H; i7 {6 h: h4 H
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    / ?, h0 p! |! {) l" C
  35.         //{{AFX_MSG_MAP(CRevAppApp): H0 v$ s! S* g' O9 M7 r  P
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% Z" k! N& c6 @  I$ @
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    2 _# Q, B! ]# U0 h; {/ S) T# J
  38.         //}}AFX_MSG1 |1 Q  j& r  t9 v% O2 m
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)6 F( S& v2 z/ s# S  A) \+ ?" D
  40. END_MESSAGE_MAP()8 d* i9 U. e" X
  41. / u) d. G4 |: j  o! K% t; f6 o* c
  42. /////////////////////////////////////////////////////////////////////////////' c. G2 T' _! ~" a0 `
  43. // CRevAppApp construction
    8 Y: _8 v' R* e1 m' t" Q2 H
  44. 2 v9 c0 o- f# p! d: q. p
  45. CRevAppApp::CRevAppApp()
    , ?! Y  K' X( S5 j
  46. {8 P/ O  u3 _6 C9 A9 W
  47.         // TODO: add construction code here,/ J, ^* V" G) |5 v. |% X
  48.         // Place all significant initialization in InitInstance1 ]+ d! s/ q! V! S
  49.   bDisplayIsBig5=FALSE;
    - W  t/ _0 i* c# }# M; ]
  50.   bRestartUpdater=FALSE;% H" [# X* x& I0 b  N6 K0 N0 n
  51.   bFinishUpdated=FALSE;2 B1 v! V7 u" v- b) f9 {$ N8 S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;! Y2 U, O& h5 w# T* x
  53.   InitChangeDataBig52GBKS();7 X& Z% W+ g1 Z7 G4 Z
  54.   InitChangeDataGBKS2Big5();3 o2 j$ d. t  G" R+ g( e
  55.         //
    . D% D/ z, t2 t+ p' x( ?
  56.         bClickRunExe = FALSE;
    6 u5 X* j/ d' o
  57.         //
    7 O' F5 V# {* z/ `' y7 C  e* L3 i
  58. }
    6 R5 z0 g$ L1 p' T' t
  59.   O0 N# G) n! f; G# y; j) B
  60. CRevAppApp::~CRevAppApp()' {7 z- ^3 f; @: A; P
  61. {
    0 R+ P5 \! h+ A" s( q' E
  62.         // TODO: add construction code here,
    : l' R$ x  ~6 x( b' d% w9 u3 I
  63.         // Place all significant initialization in InitInstance
    ' t- q. D- Y# s& m* c
  64.   EndChangeData();6 g/ n) |+ Y* Q0 x* q- G. u" |8 ~( v
  65. }7 n+ z' ]* |# K2 o

  66. . n' ~! Q5 R% y/ f$ g2 [# N
  67. /////////////////////////////////////////////////////////////////////////////
    : u: g8 M9 K/ B: B6 P( r
  68. // The one and only CRevAppApp object
    ! Q; v9 B' g2 m6 U

  69. ) ^- |# b8 k3 ~8 W! K3 |) U7 W
  70. CRevAppApp theApp;; G% @+ m+ N6 t- U
  71. ) @# w4 Y; X! z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      Y" s0 g& f' M7 Y- h+ C- `- V
  73. {
    5 P( z! `$ _# j% I" p0 S/ Q9 k
  74.   int iEOF=0;' H/ N4 f6 ?" W8 K6 n; `7 {
  75.   char szTempName[MAX_PATH];
    2 K. o) L- r8 r
  76.   *szFileName=0;- h' p9 m' m1 |* `- x) y
  77.   iEOF=fscanf(fp,"%s",szTempName);8 Y0 y% R7 q7 L" Q$ K% y( ^
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')% t( f" Z- F$ @( N) \' C4 }5 g
  79.   {- H( [- ^6 V; ~8 e
  80.     strcpy(szFileName,&szTempName[1]);: I! y! m5 q* C$ g) O, \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& g! }& h+ v9 s$ f" X
  82.     {
    + q& a( f# B. u% g, m
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + }# e0 Q0 U; D, e. P
  84.       strcat(szFileName," ");
    3 B( ]$ C9 B' m1 X
  85.       strcat(szFileName,szTempName);$ [0 U8 u$ ]) E. I% M
  86.     }! x3 B( q( j! [7 G1 T4 b
  87.     if(strlen(szFileName)>=1)
    + h9 F* X1 x" \7 C
  88.     {
    0 B+ D8 u9 d+ p' @$ s0 @, C4 n7 ?
  89.       szFileName[strlen(szFileName)-1]=0;1 i& C( k0 `7 H, W/ L
  90.     }
    6 ]  `: U; r, Q7 i
  91.   }
    1 ~" |0 }: u5 ^; {
  92.   return szFileName;
    * _; ]! V  ~7 m# {
  93. }
    3 \- s. B' a6 K' H
  94. ( y; s1 m/ v1 \: c
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile). a" d) ]+ V/ o5 e- t
  96. {) C4 H6 h1 V$ s/ S+ \
  97.   FILE *fp;3 l# |1 y1 M/ H* S& V5 a
  98.   char *key=NULL;( `+ K. R, v! ^6 m* Q
  99.   char version[MAX_PATH];! y! C, w1 W! v% q3 M9 `
  100.   LPUPDATEFILE file,olds;1 y5 M  A  M' p9 r3 k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 z1 W* `1 |+ q
  102. 3 m2 b2 H: |% K% T8 C* W/ J/ H
  103.   UpdateList.clear();
    ! _/ E4 b( y0 Z$ R9 l7 z
  104.   UpdateFile.clear();4 O+ U% s( f" q% R& }' M* F
  105.   if(GetFileAttributes(filename)==-1) return false;
    - D3 l" \* s4 |5 Q2 y$ h
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) t' J  _. Y# `+ t" _
  107.   fscanf(fp,"%s",version);' D0 c7 d* u1 i. g* e' r# r
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ c* d/ I/ Y. A- b1 q# r" b* j
  109.   while(fscanf(fp,"%s",version)!=EOF)$ l  f! c7 G9 f8 W) P
  110.   {
    & e9 M+ B& x9 K8 g. o6 {* \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' X$ Z9 ^7 Q, ]& f+ Q8 L0 Q
  112.     fscanf(fp,"%s",file->path);
    # o% n2 }4 v: h& R- t
  113.     ReadFileNames(fp,file->file);, F6 f! C* b. n9 X  ?5 b3 a! N2 r# c
  114.     strcpy(file->full,".");
    7 ]7 w/ u7 s7 g
  115.     strcat(file->full,file->path);% Z' U2 s0 k1 g) Y
  116.     strcat(file->full,file->file);# x$ F5 r5 M& F% Z7 e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())- J6 ~' s! N& N/ X
  118.     {0 T1 i& G+ Z" l- P! z3 c& T5 m/ R
  119.       file->vers=(float)atof(version);
    $ n. p  t* A; ^; F
  120.       UpdateList.push_back(file->full);( F9 h, v, d; M$ @4 B. G
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # Z' m" d/ v; b- r/ I0 |
  122.     }
    . }& ~) X& g' {
  123.     else; L3 h& l8 Q  r/ @5 q; }
  124.     {
    4 ^: u1 S8 `# c* Y
  125.       olds=(*p).second;3 A/ |1 d! e. |! |2 e9 b
  126.       if(olds->vers<(float)atof(version))
    ) B& [& F  e9 z; f3 r1 L
  127.       {
    ' S$ r+ [& q( c9 L/ s5 Y
  128.         olds->vers=(float)atof(version);( }! h$ a, s2 Q8 ^& p
  129.       }
    & o+ M3 C3 t2 _" ?- S' H& m
  130.       free(file);# f. ~  Y; g! i
  131.     }0 G; H. f/ h. N6 l; \. f: z
  132.   }
    ; f! P7 k7 U/ ]; N  g; |! Z
  133.   fclose(fp);: m3 ?: l' I( D' r3 I9 Z
  134.   return true;
    5 ?  v; K& @: g9 f
  135. }
    # Q7 n( y% ^: M
  136. 3 @' R. }" A- \, H9 p# K7 Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# D8 Z; W# y3 r' E* `
  138. {
    9 a+ c' t' ?$ H! M" r; |7 `
  139.   TCHAR  szFull[MAX_PATH];
    # _, I) h" t* l
  140.   TCHAR *token,*inter;% N$ b" O0 R3 Y, _
  141.   *szPath=0;! [( @- ~* T$ B. @" w7 O
  142.   strcpy(szFull,szFullPath);1 X; ^* ]- G( W6 X* e5 v3 I
  143.   token=strtok(szFull,"\\/");
    ( u5 T$ }, V8 O1 k: u
  144.   inter=token;
    ' I& I2 L! X7 w% y5 i9 F
  145.   while(token=strtok(NULL,"\\/"))7 ]/ t6 j, i2 G. e
  146.   {1 q) a4 A+ f; i& U) R; C
  147.     strcat(szPath,inter);
    9 [3 d- n- F! i3 S; g
  148.     strcat(szPath,"\");/ t/ q. ]% M- L( {/ q
  149.     inter=token;5 x6 y, D$ M# R
  150.   }
    # l" ?, ]" J$ G
  151.   return strlen(szPath);
    : d2 \" ~/ C, w3 N" w" @8 i2 t& ^
  152. }
    ; s6 W( \! l# B: Q# K* Z5 V
  153. . y! m9 i/ _& ^6 A: s9 q
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 J, l) h, j3 Y; q
  155. {
    # {9 ?8 ?. U, B2 z( _6 [
  156.   DWORD attrib=GetFileAttributes(Target);% n5 f# J3 b8 Z
  157.   if(attrib!=-1)/ q8 r! @; H# c, U* F  j
  158.   {1 D7 |2 Z- }( }* n$ K+ u% u/ ?
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))) Y  I2 d2 z/ H4 O% i  n
  160.     {6 v: D/ M6 A  }# P$ A) o# f
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);% V% H( W. J' }5 d* I
  162.       SetFileAttributes(Target,attrib);7 M+ k& |+ @3 H- ?; b
  163.     }
    + M7 i/ r6 O* x' h& d3 N. r
  164.   }" c! e% h6 `) U- O+ `( T* h
  165.   CopyFile(Source,Target,Erase);9 M; o7 m  w& t# I7 u$ U
  166. }0 g+ Y  c7 {8 s; t4 o: ]
  167. 3 _2 C$ C$ V1 |6 o( P# @2 ]( S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; M8 Y4 ~* _5 @: R4 x8 o* c
  169. {
    5 d# G5 @% K( c* T" @8 e
  170.      FILE *fp;
    ) o  ]3 W6 i# A! U2 N# r
  171.      char  szBuffer[8192];
    / Z- w. a6 K2 Y; k1 I
  172.   va_list  argptr;/ w8 ?4 ~) B5 y+ n8 }  @& B( m! z. x
  173. + y' t- H! L& _7 ?) ^
  174.         va_start(argptr,message);# k5 k, k, V$ q, F
  175.         vsprintf(szBuffer,message,argptr);2 s/ b5 P- [) L$ Q
  176.         va_end(argptr);
    6 c+ f+ G; g! \
  177.   fp=fopen(FileName,"a");1 o; d" x7 l' [' b2 [5 K
  178.   if(fp): \' d( K, ]! }- A* n& q
  179.   {* v% J! F. @! j
  180.     fprintf(fp,szBuffer);
    $ Z/ S9 i6 n- N$ D+ S5 m$ L
  181.     fclose(fp);0 d( f1 `$ I8 p0 e6 y5 F+ g8 ?
  182.           _flushall();
      `) e# j: K3 f
  183.   }7 G: n' x+ }$ P+ c
  184. }
    , `# \! ]6 J" M" b- h0 p* l9 a
  185. 0 Y" Q+ X; d6 Y9 d) [  `3 O
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ u! ]) ~1 d5 L' B  [9 {
  187. {6 f2 \6 x- H+ r% A" D
  188.      FILE *fp;" B5 I0 x! u0 {) @0 z( R
  189.     DWORD  attrib;- _) G% e: U, m: T) H+ r3 ^
  190.   attrib=GetFileAttributes(FileName);
    5 k' V! Y) D  y: H# g# ~7 X- h+ R1 n
  191.   if(attrib!=-1)
    . [( `( W7 N, }5 X+ N
  192.   {
    1 J6 ?) I- `* Q: G: @7 I- `( _
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ I: H& y: O$ d* j
  194.     if(!SetFileAttributes(FileName,attrib))& `* J* S" Q" |4 E1 h( s( f# U
  195.     {
    ( X( X$ W" \% u) ?( X
  196.       return FALSE;
    4 z0 }3 i! t1 V6 h) W8 h: H
  197.     }
    7 V! w" k( j& f6 h4 r
  198.   }  A# t6 Y) o( m) B" s
  199.   fp=fopen(FileName,"wb");# _  C) k+ [' q0 q: U
  200.   if(fp); Q5 a1 J* F; b* T
  201.   {! l* n% U. A4 p# i! ]" q
  202.     fclose(fp);# J+ d5 M( ~0 `! v
  203.   }
    / R8 Q; M4 J$ \1 r$ j  b6 q
  204.   return TRUE;: ~+ n* H: S( v/ M' S; p/ B
  205. }! d2 d! f$ k8 Q, e- y9 D5 J$ p
  206. 4 c0 _# Y, r2 F% w5 p# f
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; u; z8 T# x/ E
  208. {
    + U3 v/ w! c9 E/ G8 R2 S8 ~3 M
  209.   char filename[MAX_PATH];# y* g! f" u, K* Z
  210.   LPUPDATEFILE file,olds;
    $ o, g2 Y0 s. b$ x
  211.   std::map<int,CString>::iterator i;
    ! g' E# P% n4 _0 m! r9 m
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, ?4 Q7 b/ p! D! f* y7 ?. I1 ]# ^
  213.   std::list<CString>::iterator l;+ @0 }9 h& o; V4 B
  214. # Y$ B( O3 A* L/ |8 X5 ?. G# a
  215.   if(bFirstUpdate)0 `" C( k/ N$ K# i0 g% H- K9 B5 z1 E
  216.   {' H% b. p. H4 s  E' w
  217.     dwCurrFile=0;
    ) L# x' o, r6 v" h
  218.     bFirstUpdate=FALSE;0 X0 i, {4 U& [2 i2 _+ q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* g2 ]. O; H- ~. W8 M, S  ?
  220.     {
    ( I/ \. B% d$ k6 J2 S
  221.       dwTotalFiles=UpdateLocal.size();: h9 J, ?& o' D7 w0 H- k
  222.       dwDownLoaded=0;8 ?! R, W+ T0 n, ~$ j3 ]1 Y4 L8 x
  223.       bSilentStep=FALSE;* \7 V% l: F8 J8 T3 Y
  224.       bCompressed=TRUE;
    $ T0 ]# W/ R! P3 R0 w& P; U
  225.       strExtLocal.Empty();5 y4 o7 p: @( b) q; B
  226.       strFullName=(*i).second;* v1 c0 a8 u9 B8 d! h8 l
  227.       dwProgramState=AP_CONNECT;4 w4 U! A3 i. q" L1 `9 {3 A: @5 \8 O
  228.       return TRUE;1 b! R5 i7 M+ m3 p' j- Y! N
  229.     }4 r  x; z  ~2 `8 e( X1 q( z, G, x
  230.   }
    & T5 X3 f8 t; s" h3 z
  231.   else if(bRestartUpdater==FALSE)
    ( \" {7 S% c/ |5 {+ z( ^! L  k" h/ \
  232.   {* ~, O( r! y% T2 @& @9 t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; `: U6 h4 t8 h+ P. \) w2 R* n# P, q* C
  234.     {+ R" c* B8 k- F: S. M
  235.       file=(*p).second;
    & g% ^& B$ I8 [( H  T
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())  j7 p! ~& I0 N" y  X
  237.       {
    - r5 R, t% q0 a5 t, E3 P
  238.         olds=(*p).second;
    . Y% Y6 c0 W$ `6 K, v5 u/ A
  239.         olds->vers=file->vers;' i, V: x$ O' V+ T8 x' K
  240.       }+ }& A/ y+ W/ s( l- W( o
  241.       else
    5 \' i, [7 O+ p! l5 o$ b
  242.       {* Y% P9 ~$ _  ?8 j
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 k" H' J0 \$ C- @- Z$ H$ {
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) S% p0 i: i; u  A! x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ \6 R, s* _! p1 S% J+ p1 K; V6 ^0 |
  246.       }
    2 W6 l8 [& J% b0 O* I
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");4 c% r! R# L/ T, m; n
  248.       sprintf(filename,"(%s)",file->file);- d1 ]" s$ a) O: O" l8 T
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  u6 `  F8 @' c: Z3 @1 V! M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    + V, H# w/ g6 t0 N: D
  251.     }
    8 P/ l" ^: ]# J
  252.     dwCurrFile++;
    1 s( E  ]" Y! [2 j" C  G' X( f; o2 r* Z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()), i- j( f" D0 r, v6 Z
  254.     {
    2 `" n1 a& y1 r* {1 U+ C! ]
  255.       bSilentStep=FALSE;/ \. R0 k5 ^4 c3 ~% y
  256.       bCompressed=TRUE;9 O( r6 H8 u5 q: \( U! b+ m6 Z! T
  257.       strExtLocal.Empty();4 @' c6 N% r7 `4 q9 t) E% R
  258.       strFullName=(*i).second;- ]) M! r3 V+ D
  259.       dwProgramState=AP_CONNECT;4 ]! _) [  Q. T4 r% Y
  260.       return TRUE;3 ~4 y6 d9 v- F/ t
  261.     }
    9 f) z4 N( t+ v
  262.     if(!bRestartUpdater)
    # X1 o7 g; {. F- ^7 e! r9 p
  263.     {
    - k& y' n0 ]$ f7 u
  264.       int iCurrSize,iFileSize;8 v& u! F7 Z" }/ ]# R  U
  265.       iCurrSize=0;
    7 V/ D$ ?$ J9 P1 e% i. q
  266.       iFileSize=UpdateList2.size();* ]. P* e) k" D# W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    4 b  L; N8 s! G6 a' H) E
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  @) Q, T* o# O1 j% k. z( f
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 S/ }; \$ u9 X- W" c
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 K2 ^8 |: T/ K& N* r
  271.       Fclearf(".\\update.dat");+ b! y+ x0 b8 Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    & `& q  Z- R* u! {6 V& }
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " N4 y8 [% |8 K/ U; Z4 e; G$ f
  274.       {6 U: ]4 `% ?, I# H! Y6 K4 o: f1 ^
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) b; g3 M4 d5 N: Q
  276.         {/ U% L% r5 P; @5 }% L2 z
  277.           file=(*p).second;, p" j+ x7 K( a; h
  278.           sprintf(filename,"(%s)",file->file);- V; T' d/ ]: f. Z) U  i
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ i' @1 `+ J' Q3 H0 {  x
  280.           iCurrSize++;
      [' V$ U# y$ g5 d# |+ b, R
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));8 Z6 b# G- o& d& a+ G1 B
  282.         }5 ?, o9 m  D9 J' _# y1 m1 g5 j
  283.       }
    8 r+ t5 b: X4 q' O3 h9 x
  284.       unlink(".\\update.txt");' f+ r( X$ t9 R: k2 t# N
  285.       unlink(".\\update.tmp");# Q0 M3 S& R* l% A: G
  286.       Fclearf(".\\checkversion.dat");
    : d# D8 q$ b. M0 C2 |
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( ?: [$ r2 {) z$ e) H( X7 K+ D
  288.       if(UpdateLocal.size())
    & Y" f" B1 Q+ M
  289.       {, \% g4 x  q2 d7 T
  290.         UpdateLocal.clear();# n5 ?5 v6 u5 Y8 ]' N4 A
  291.       }
    + M9 c% |2 l  v
  292.       if(UpdateFile3.size())
      j* m& a% q: Q% o" V1 {
  293.       {
    # \- P7 v1 {/ N% F0 o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ |0 w, _3 ]% R3 w: p* j( o
  295.         {9 P1 W2 X" l1 o3 k+ W2 \
  296.           file=(*p).second;
    $ G0 h, q; y" o- p
  297.           free(file);: y' w' S! i9 }" G$ I6 }( M
  298.         }
    ( r0 ^0 J# O1 l1 O- w: ~
  299.         UpdateFile3.clear();
    ' _# j& ?% l& E) g
  300.         UpdateList3.clear();6 ?2 ~  k' @2 Q8 }6 W7 K! v
  301.       }2 ~' c/ z+ y! z8 D  Q, k. `, {
  302.       if(UpdateFile2.size())* @. h- ?# w* I) s' V
  303.       {6 e( S9 g8 X! p- n/ e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - \% ]% t! T# A, I0 {- m
  305.         {
    % x3 V+ d: j! F% c! D7 P, m" n
  306.           file=(*p).second;1 K, Z" h4 Y. B
  307.           free(file);
      A) S6 W+ G5 ^( ~, k
  308.         }5 f3 I' f3 b+ O) D1 L* E! l
  309.         UpdateFile2.clear();
    & N2 Z$ Z+ Z3 c$ p1 S
  310.         UpdateList2.clear();
    5 q0 ]( _; m6 A. h
  311.       }9 B/ ?) ~& u5 s1 g% d6 r
  312.       if(UpdateFile1.size())
    % E8 Q' Z' w' s, ]9 c! t; U
  313.       {% l7 ]% ^6 L0 X' ~* j% z- v
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * C+ J. t2 f5 `. L9 B0 z8 a
  315.         {& J/ I& |9 }# y# t
  316.           file=(*p).second;  ^) e( D. `" ~
  317.           free(file);
    8 W" _: `$ x3 q  z1 P
  318.         }
    & z7 n+ [* b' T% A! Y/ @& W
  319.         UpdateFile1.clear();
    + g8 s' ~9 c% ^* C
  320.         UpdateList1.clear();& s8 @9 {9 S( o* {+ B- n+ O
  321.       }7 g( d& M4 l( e0 c' W9 F/ o
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    # j: u7 E. @0 _3 Z/ `: A5 [7 S
  323.     }
    * p, s7 L) H5 c& t
  324.   }
    , ?, x9 h# h* y2 }3 b0 b
  325.   return FALSE;
    - g! j1 A9 A4 Y; Z& u( [
  326. }- }5 K' ?5 U6 M
  327. 4 J. G8 p: G5 G* P5 Y
  328. void CRevAppApp::ClearAll(void)
    9 M' k  l6 ]$ A5 i- E
  329. {
    0 ]/ \. H# W7 u+ U- j9 X
  330.   LPUPDATEFILE file;
    + q% _  e; U9 ]. \, e7 K
  331.   std::map<CString,LPUPDATEFILE>::iterator p;4 x# {3 [& ~5 t1 D/ @& C" _
  332. ) D2 ?: y$ |' w
  333.   if(UpdateLocal.size())% a3 H, z  _/ R  W) n$ J5 L
  334.   {
    , Q; ^% U! d9 d5 ~* T4 L
  335.     UpdateLocal.clear();
    9 R  k& E' W, K2 X- V
  336.   }
    8 U1 N$ g. t  @* X; S9 A
  337.   if(UpdateFile3.size())
    $ o) c6 i8 ~' C* k4 q
  338.   {3 c- c. @2 D7 ]$ h- {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . t: j( `% I  K1 [' g6 b
  340.     {
    1 Y9 S0 }( A4 z* f( p
  341.       file=(*p).second;
    9 T0 ]* f4 S# ?9 w' ~7 z9 [8 @
  342.       free(file);
    " P$ q4 N) z& E( f( P
  343.     }
    ( P' @# I- |6 g- }
  344.     UpdateFile3.clear();# L2 _+ x# `6 {6 h5 V
  345.     UpdateList3.clear();* N/ ^) R4 c7 T/ E# T9 k
  346.   }* e/ a% _( X4 l  Z
  347.   if(UpdateFile2.size())
    . |) g/ n) t6 K8 }$ K- {9 v, s0 U
  348.   {6 O. t/ k; v) [; w' ~& ]# j/ d, s
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / M: f5 U$ Y# A+ j2 x
  350.     {- V+ l0 U$ A4 Q3 i& o7 q$ h: J( w
  351.       file=(*p).second;$ t0 H7 u: o5 {" M. ~) T- N5 I
  352.       free(file);8 l5 u0 o& z* f( C9 u0 L# e/ D' S- c0 ]9 I
  353.     }
    ! W; P0 ~  ^) P1 u
  354.     UpdateFile2.clear();
    1 G; |6 J4 }. r* ~# v# [+ w
  355.     UpdateList2.clear();
    ' [3 l) L1 S& @
  356.   }2 }4 K4 p( o6 f. k3 k9 k
  357.   if(UpdateFile1.size())" {" m  U* E& E' d
  358.   {( b$ X# _8 x8 _0 M
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 k+ F+ ?6 O/ l. n8 r
  360.     {
    9 E$ J- ^2 E5 g4 z
  361.       file=(*p).second;
    0 Y0 n1 |# l. A+ A+ P, x. u
  362.       free(file);
    9 t7 O! l5 w+ `- K  d; o5 V" P3 ^1 p
  363.     }( S4 W! B+ N9 H' l
  364.     UpdateFile1.clear();1 E# O: Y; Z$ ~
  365.     UpdateList1.clear();
    ' ]! ~. w3 p, T3 z1 O
  366.   }" }" {7 a0 z( Y+ w  r
  367. }  
    3 }( o- w( X, R" r( _
  368.   % ?- @1 _2 w: }* j: N/ Z
  369. BOOL CRevAppApp::CheckLocalVersion(void), @3 S; k; U. {+ j7 H. u. L
  370. {
    % ]& [3 m6 @$ C) d# h' r! S6 A# A
  371.   int c;4 p2 y9 ^! ~; y$ X/ N8 l
  372.   LPUPDATEFILE file1,file2;. k. W+ A. T2 X8 E9 O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 r' Q0 X6 r' X: g; _
  374.   std::list<CString>::iterator l;
    ; T  A% q9 y& @6 Z1 e$ p
  375.   V' e( {9 [6 L  }% u/ Z
  376.   UpdateLocal.clear();
    1 K2 I! U% ~2 E) w
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);& x, W5 x/ b0 f7 U7 W. p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; U7 }" T7 ~, w4 u  z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    , v+ s0 \) Z; t- G- t4 x) b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    / F4 c% ]% P: K6 R
  381.   if(UpdateFile3.size())
    ; I) n5 |9 @! e/ p8 t
  382.   {: |; U) g, L" @6 `: d) M
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    7 [, T& j8 X& b2 F( B
  384.     {
    4 D  E: }2 ]# k( L2 {: k  v
  385.       file2=(LPUPDATEFILE)(*i).second;
    6 g8 S& ^5 d. [$ C- h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 N  i) t- u& ^" O
  387.       {+ X1 M1 @/ n2 M1 Z. q
  388.         file1=(LPUPDATEFILE)(*p).second;' ]5 E! g/ t) c. s! P" H
  389.         file1->vers=file2->vers;6 L9 H; V) G  v4 d
  390.       }
    . x9 F/ d2 C+ Z& _+ b+ n# z
  391.       else
    : n3 m- c8 n: I( y' f6 q/ ?
  392.       {: m: _, f/ ]" {+ w  P# n
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 [* m1 ^) N7 p% J, D1 {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    8 u; [5 H! C" c8 d1 \2 g$ ?" G
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    8 P8 q5 [+ c7 ~2 I5 `9 Y. C
  396.       }% J7 H+ Y1 \8 Y
  397.     }
    4 a* ~! D) Z9 d5 n& \
  398.   }) K; U5 _2 i0 j: P
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    8 S2 I1 e0 S$ p1 t( ~
  400.   {4 d! E5 C: a# H" g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    5 N, m% s6 i: Z) Z
  402.     {
    0 w4 k( {$ |  J. j. N2 C4 F/ G
  403.       file2=(LPUPDATEFILE)(*i).second;3 ~% H: q! ]  R1 o( v5 w# Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 `8 g; c; D6 M, K$ A: w; a0 J; x& |
  405.       {4 s: \3 ^0 s7 Y8 M
  406.         file1=(LPUPDATEFILE)(*p).second;3 I  k4 F& b' Y' N; \9 w; u
  407.         if(file1->vers!=file2->vers)
    & U/ `3 e2 W" }
  408.         {7 U+ l$ d1 R  Q6 l+ r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " Q1 s; R" v! c& o
  410.           c++;0 t" O* A( `( z7 O2 D3 R" i0 J$ K
  411.         }) O" a( f, U" G  i
  412.       }. `, Y; @) Z& D
  413.       else
    # N/ E. L8 e* Y& G6 w& p8 k8 {
  414.       {
    3 F8 H9 Y6 ~1 I4 r8 {/ I
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' D4 t/ ]+ q: E+ R( \
  416.         c++;1 C1 d3 S' P7 i6 b" m8 Z
  417.       }
    % h8 s4 n: _3 O3 z6 _, F6 ?- E
  418.     }4 H6 l& j2 P9 H; Z9 A6 |
  419.   }) |! n3 T7 F% o, @- v7 c% t8 C( U
  420.   unlink(".\\DownLoad\\update.txt");7 l+ E0 b+ _# [! r# x1 \
  421.   if(UpdateLocal.size()) return TRUE;
    6 h% G+ l; @3 W
  422.   else                   return FALSE;4 n; i" S$ _2 h( f
  423. }
    7 n$ C/ G, I, G; C+ Y

  424. , A3 v8 @9 F7 |' ?* B" E3 l
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/") S6 P* r! M5 q0 ~' h- X
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"  K- j- H7 O4 h+ ]3 X% p

  427. & T( b0 B* L( `) M$ G- \

  428. $ G0 x2 |' Z5 U( k+ G* x
  429. $ w' X+ M* I/ `- ~3 v4 g) B! B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 F1 C' N. D0 \5 d
  431. {
    / K! o4 d" W  z# P0 @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;% ?! y" A; l+ s/ `6 k# _+ Z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 z# x# O+ }# U9 Z) @0 l4 k
  434.   {
    9 p( F6 @. w+ Y' n2 v
  435.     char szLanguage[50];) B; o' z) q" L, ~: H( B
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 w" I* Z. k5 N# C
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;; I4 v" A$ @) h4 a# n* [- N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 X; t) V  m9 W
  439.     else                                   m_iLanguage=ENGLISH;/ u" i9 h3 m7 c" M2 j
  440.     char szRegister[100];
    3 \5 |. A$ e' R; \1 t9 n8 {% }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  J/ V+ O2 P* |# _! S
  442.     strRegsName=szRegister;0 m' I0 f, U& E2 W$ O
  443.     char szPatchURL[100];. }  Z( i% e5 A7 m- ?# f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! s3 D3 q) B9 f. A% |6 @
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);7 U: P5 F% P# e6 e: [
  446.   }, _4 X) S# U) K7 i6 d, p
  447.   else
    # ]2 K5 t) K7 {: _5 b% h. a1 X
  448.   {0 H3 y8 _+ s9 _" o2 M3 a
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);0 q6 \! ]5 q7 j/ b
  450.     strRegsName=DEFAULT_REG_URL;
    * M% B/ k* b( G5 `
  451.   }+ M  k, u  L; P0 h0 C) g1 V
  452.   if(GetFileAttributes("hosts.ini")!=-1)& r" t/ R" w( i/ U4 o
  453.   {
    2 {3 i7 @' u. l( m4 M. m
  454.     char szIP[50];1 c- Z, g" x* D+ Y0 X
  455.     char szDIR[300];5 y1 ]" l# p2 r2 m( D- n
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))  N9 U2 L5 B9 ^* t; s
  457.     {: W  H3 x+ T3 o  ]' y1 }; t7 x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");# F% i. c9 a7 r. x0 [& |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ t% ?1 B4 _1 ^$ ~
  460.       strHostName=szIP;
    % q: X9 w) s, \, l* v3 l% K2 C! A
  461.       strHostPath.Format("/%s",szDIR);
    - L- w4 }+ w+ @, v
  462.     }
    * C# Z3 c6 k: ]
  463.     else
    5 u" L- N+ [+ x  h- x5 M
  464.     {
    0 b! X7 ~9 L) D) q; P
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * z, J3 k) z/ B3 B
  466.       {
    1 d( n7 }- H6 O
  467.         char szLanguage[50];
    $ `; Q* M4 M4 a( _! N  t1 B
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 A/ m; h6 I; f7 ]7 \7 E/ q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' i. |6 u- g& [/ a. x& }/ \7 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 N4 \/ D! ?5 L: |# M
  471.         else                                   m_iLanguage=ENGLISH;
    ( [  }: q) U+ F1 l0 b) u" _, h
  472.         char szRegister[100];
    ' X! _+ ^) |9 v- C8 C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . k. L3 U8 o2 M: A$ v- j
  474.         strRegsName=szRegister;
    % f7 c, k9 ]4 w% v
  475.         char szPatchURL[100];
    & b2 T) O8 u3 }9 w  G, [3 W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 j% E$ N& R( q9 i/ m
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: h2 e! l0 D9 y& L& j
  478.       }0 U& o: B! l; H
  479.       else
    - E* l# n, K+ a% f4 Z$ K1 C6 Y
  480.       {! }2 `3 {  B: H& s+ n% T0 |
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ k7 e4 y7 {0 R- V% v" b# D
  482.         strRegsName=DEFAULT_REG_URL;
    ' _* W* A/ M& ?, w4 o- N5 W" s
  483.       }4 ?% A) G0 z8 T" f; S0 s$ d2 N
  484.     }
    + v3 [" N( X2 a! I, A2 A' x, ]& d, ^
  485.   }
    - N- d+ |9 C4 w+ K- {6 |
  486.   return true;; r. Z! M2 f/ f: K+ l
  487. }
      E; u) F$ V+ y0 a$ W

  488. % F; d) M4 T- M& o5 `" ~
  489. #include ".\ZLib\unzip.h"
    , I4 Q/ Q2 M7 z' K6 k$ }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    8 j# z4 w- p5 N4 b2 ?  _
  491. /////////////////////////////////////////////////////////////////////////////; M! m' s$ i3 k6 ?; v! L
  492. // CRevAppApp initialization
    0 d+ b. u4 ^  [- R; {6 @% H

  493. 8 {& w9 ~! h: |) s+ Y
  494. BOOL CRevAppApp::InitInstance()
      I; I4 o2 F1 q, c; E9 W/ b& }
  495. {0 t4 g: F; t2 i* p2 N: M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # B; @( V! v. w; m

  497. 7 l) n3 F1 v, p$ L1 {/ I" ?$ j
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    $ x4 G5 e( C2 k: p1 M' A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 O) r- l" F5 Q* `4 I' T
  500.   {% s# J  T5 D2 X3 H# V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");) ?, w4 `3 C/ Q( b
  502.     GetPathFromFullPath(szPathTarget,szPathSource);7 R0 {9 {. a. A2 h1 H2 p( M! B
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 g9 @8 C' P' J2 I2 N( J0 H0 V
  504.     {2 X' I- w; Y2 i$ h
  505.       strcpy(szPath,szPathTarget);% I# Y3 s, b! g$ f% x  c8 }
  506.       SetCurrentDirectory(szPath);8 a: f& |+ C0 W+ l5 o
  507.     }
    , n' T6 U9 u& }- D  c7 n
  508.   }
    ) H# Q# z) x: U5 G
  509. #ifdef _DEBUG
    & ~* A. |% a/ s' N9 y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! b1 S8 I. E; z
  511. #else
    2 }; I8 o/ X% I0 M, w3 Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 g7 ?. u* M" q
  513. #endif  s" U2 D9 P7 h; w7 A' h
  514.   {
    . T' a) ^1 b$ p' N# [% U, r
  515.     char tempFileName[MAX_PATH];$ A* v, K* Q. ~7 }  _9 k
  516.     strcpy(tempFileName,szPathSource);
    8 I* i0 [& q( i2 `
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( J# z. T2 c/ N7 z. x0 s' ^& ^
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    % B, u( |$ Q5 O* \. y0 v5 t
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; S7 M2 t  x: U/ Y1 W5 t& ]' K& \+ m
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    " n) n& F2 B9 X9 b; M: Q5 p
  521.     return TRUE;, R6 n6 @$ N  b; V/ ]
  522.   }
    3 `+ z  `3 n. g9 F' m
  523.   // Nuke 0118: Delete run.exe
    ! ^5 D, d1 Y9 ?  a0 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );; c8 _9 `) G. N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 Y- {* g3 b0 T
  526.   if(!ReadCfgFile("Config.ini"))
    $ d& k8 H7 ^9 [# p2 Y  k
  527.   {
    & q" x. r1 @3 G: M
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    2 p7 J, Q) ^' L, Z, K+ x
  529.     return TRUE;
    . O4 f6 X" X+ P
  530.   }
    9 v) g' K6 E! n! ~' j1 o2 J" L
  531.   HANDLE mutex;1 l4 u5 w  n" Q3 h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))& v% g4 A" _/ Q6 o0 U5 {$ @' z  n5 t/ E
  533.   {
    - t" s; I" I5 C, X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ p7 r! a( v( ^0 P/ S2 q2 G
  535.     {
    5 w- F; n( w( G. m
  536.       CloseHandle(mutex);  u9 k5 K6 x8 D! K
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * K: A3 _# C# A7 M* v
  538.       return TRUE;
    7 \( W$ j5 J+ h7 q+ Y1 T
  539.     }3 K$ i$ J  k* ^) t+ m5 E5 w
  540.   }  8 L9 o* c8 a7 U# N
  541.   CloseHandle(mutex);
    ( }2 v3 y: ^) b# ?
  542. 5 d6 g5 r+ o( o, l9 {, `5 W
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    8 k* M1 O! X, a7 f& W
  544. 7 m) j/ G2 ^  w3 y& d* A$ ?
  545.         AfxEnableControlContainer();
    ! A! l: k/ {" l

  546. + ^: w1 h0 `9 j4 R% u5 j0 u
  547.   bCanUpdate=FALSE;4 _3 T; D0 c' H9 Z" g: ]' s
  548.   dwStartUpSteps=1;
    2 `8 l% \% L7 n
  549.   dwProgramState=AP_NOTHING;
    " O& z. |1 U& M- w
  550. 0 t) Y2 X0 ?4 n3 d
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" C" ^; f7 l+ z
  552. / r6 \, J; A9 w# y
  553.         // Standard initialization
    3 j: Q: v. z( m* d; z. L
  554.         // If you are not using these features and wish to reduce the size; p& c& S$ F% [, E0 C, \% Y
  555.         //  of your final executable, you should remove from the following5 @, E' x% z5 r! \  Z3 D2 x
  556.         //  the specific initialization routines you do not need.
    0 m2 K/ F8 Q: G8 B( u" E

  557. 0 x: j: C$ R* k# k* F
  558. #ifdef _AFXDLL
    ' U) ^; A: g4 K( X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ c, q1 E" n0 V3 H) m: D& }
  560. #else
    5 T! _* }0 ?- H1 R
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! j; C6 N7 l/ U8 T* C# M; G! c
  562. #endif
    : }. i& J$ o$ r! ~! |

  563. 0 Y+ x5 w5 ?5 `$ R% J0 b/ u
  564.   dlg=new CRevAppDlg;; s* v. k$ y# \; H) `
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    : @' r& ]% O: q8 P) X, x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / \! e9 r( M/ S* G
  567.   m_pMainWnd=dlg;; r" e. e9 i) G5 G. [" _
  568. % x7 C. R: e. g9 F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      S5 F" s# t* w( E- o# E
  570. % O1 D. U) P+ S& E
  571. //  GdiplusStartupInput gdiplusStartupInput;" m% ?' r9 R: g0 ]- m
  572. //  ULONG_PTR gdiplusToken;. t- s' M* R! y+ w$ `# @6 X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ |1 |1 I. R5 ]; F# C
  574. & C7 O# S0 L- `' h9 t& O3 M
  575. //        CRevAppDlg dlg;
    ! d; h) e# _! j: X4 G# |/ }
  576. //        int nResponse = dlg.DoModal();
    * i5 a0 a4 A# M3 [& j% p6 I, D
  577. //        if (nResponse == IDOK)
    0 O4 x: T* ~. @5 C. r5 [; i2 _
  578. //        {
    & a7 z; @* ]! W8 F
  579. //                // TODO: Place code here to handle when the dialog is# T9 q# ]% V* I) ~( D8 H9 D+ @/ l
  580. //                //  dismissed with OK
    , H* Z( Z  k$ \! f
  581. //        }
    & T$ P# S; A, s$ Z
  582. //        else if (nResponse == IDCANCEL)( R5 Q' l2 o4 O0 a1 {" k+ C
  583. //        {
    ( _8 W6 b- z, ?# K: y
  584. //                // TODO: Place code here to handle when the dialog is6 Z* _+ _' e9 [/ q  t, \2 j. [9 R
  585. //                //  dismissed with Cancel
    2 R7 l/ u9 G8 [* q' |
  586. //        }
    8 T% p$ U( o' m
  587. 6 t3 R9 C' t& r; q. m
  588.         // Since the dialog has been closed, return FALSE so that we exit the6 ~1 E- P: Z; C4 }- i' _
  589.         //  application, rather than start the application's message pump.
    7 t0 S6 X$ W+ A# W% ?" R/ l7 {# O, B
  590.         return TRUE;; p5 Z6 c& A* X1 U1 R3 a
  591. }1 f6 @& n$ G1 U7 ]& ?. R
  592. % a8 |/ i& l$ z1 \  E6 G
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ! R, |7 B5 H) b5 h% q) A# T# n
  594. {9 H' Q7 ]$ F7 _. K7 Q
  595.   int i;
    ( W- d# s* y" h3 a$ L8 }
  596.   char *szRet;
    8 C6 h1 s7 n4 `
  597. " N; c, z1 n/ G- b4 R
  598.   if(pSource) { itoken=0; sztoken=pSource; }2 L: H, Y$ O, v0 ~/ `* `8 I3 E+ f& y
  599.   if(sztoken)
    , ]( m) ?  ~3 G9 l/ l) z
  600.   {
    ( d, ^7 g1 K5 f. y7 j8 L8 A
  601.     szRet=&sztoken[itoken];
    ! V! Z3 {& q$ L% j! N: E
  602.     while(sztoken[itoken])
    & N" i$ H5 ]; D- G* r' g7 t! n
  603.     {% N* ^) Z: T/ S# c- u+ `
  604.       for(i=0;i<(int)strlen(token);i++)
    4 K; B$ h9 x2 e) e
  605.       {
    ' r  l' s2 K& M1 ^
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), w0 Q- k+ M$ W* U( K0 x
  607.         {8 A& L- f  L1 Q# n5 L) ~
  608.           sztoken[itoken++]=0;
    * V1 H! W, Y! ]" B; ]! b1 G
  609.           sztoken[itoken++]=0;
    + y" ?! o7 U  I+ B0 e
  610.           return szRet;- L* ^/ R& P" h* E5 P$ n
  611.         }$ ~/ X% }* I7 U* \3 @
  612.       }
    6 ?3 J; D) B9 i
  613.       itoken++;
    : `7 _0 R, H* j2 P6 d3 \( L$ |% N
  614.     }; h1 P& h" v7 ~$ h- {1 I
  615.   }* u0 M' i5 v# r) f
  616.   return NULL;
    / Q- x1 [* _0 Q- t: P, F& w: _
  617. }. x  g' ~" [2 S7 d5 R; N
  618. ; G$ ~  W, X" F% X
  619. void ProcessProc(long Total,long Current)7 e; h! f. p7 S5 y1 Q$ A. K
  620. {8 F# [" Q- C( _6 H9 e
  621.         MSG msg;
    3 L. J7 y( X, S) d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) O" I+ B) q, I9 e- l
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));& F+ R/ \8 A5 H$ S4 l, |! z6 s" B. D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)); K0 \" d, I7 y# Q- }( i
  625.         {
    * p4 o' N3 Z7 w; k1 y/ P; T
  626.                 if(!GetMessage(&msg,NULL,0,0))  B* i2 g: f5 F
  627.                 {& G; j" {/ L4 g, l% V* }& }
  628.                         return;- h2 Q" v3 s, g, C
  629.                 }
    ! A* Q2 V  [# y  y: D& z
  630.                 TranslateMessage(&msg);# n0 h9 n# t! [" `$ {
  631.                 DispatchMessage(&msg);
    ! B7 |# V* ^' y( V$ \0 o; R$ f
  632.         }        : Y8 f$ b: z( \* _
  633. }0 {' N% d+ p: @! I, Z: P9 D

  634. , v( O; d6 S2 v( A& U% J
  635. BOOL bFirstChar=TRUE;
    + G4 m" i, S+ f9 f" g

  636. 5 }1 h, e" Q2 N1 _! q8 u7 l
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" Y1 _, @1 b3 C( D) `( Z
  638. {
    " N2 }% U# J/ j
  639.         // TODO: Add your specialized code here and/or call the base class
      N3 j3 X) s+ A
  640.   switch(dwProgramState)8 t  F. D6 l$ a5 t+ m
  641.   {1 z" T" M5 l& d% n! E" I3 d
  642.   case AP_NOTHING:
    ; w9 N6 s/ S0 l% f% i8 ~( i7 S
  643.     switch(dwStartUpSteps)
    7 X( |: _5 ^/ O, R- n1 C$ D% }5 N# ?
  644.     {
    ! e( }5 H1 \  z
  645.     case 1:" Z: X6 W9 X! t/ H  k2 _
  646.       {3 Z5 S  u& n: ~! b! ]* r
  647.         int i;
    $ Z+ n4 l: f, }& J' {; h$ S# R. C
  648.         CDC *pCDC=dlg->GetDC();; i# K( \# o* C8 Y# g
  649.         HDC hdcwnd=pCDC->m_hDC;
    % n3 `( Q- v, f8 C. k4 J
  650. //        Graphics graphics(hdcwnd);
    ) z: o, }) z9 W( s1 d- }3 @
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 u- E9 N' L+ x
  652. //        INT iWidth=bitmap.GetWidth();
    0 p, ?0 M! ^1 Y0 u5 [, y" ]
  653. //        INT iHeight=bitmap.GetHeight();
    ! q: ^$ M2 a- L6 w
  654. //        Color color,colorTemp;' }4 {6 ^3 }$ ~6 M# b6 R0 \
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ T  d: y! T3 K: b
  656. //        {
    5 u3 {- o) F8 c6 L+ U$ }1 K8 D
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 Y8 }" K( P8 k# Y- b2 l/ N
  658. //          {4 i* c# C) B6 a
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 M, U( n7 {* `; r
  660. //            colorTemp.SetValue(color.MakeARGB(7 ]* x$ B6 C0 I% ]
  661. //              (BYTE)(255*iColumn/iWidth),0 Y% E" ~: E4 K4 C
  662. //              color.GetRed(),
    ; H5 j" ]* h" [' Y" P# k% w- t5 u6 s
  663. //              color.GetGreen(),+ J* W( O3 l2 l2 b
  664. //              color.GetBlue()));! e% {$ ]+ @) }) D$ V  D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' V7 ~9 a* i. P2 M, h. \
  666. //          }
    9 y* O' r9 I7 R. y( D5 R
  667. //        }
    9 `3 ^6 T: g: A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    1 e: W3 s5 r9 X( K
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 l  M& a+ C' y" O
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ b" |! N/ d/ ]( c) L4 `) y5 a
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 _5 j( S6 X% `* ~" Q: B4 s
  672.         for(i=0;i<240;i+=8)7 k2 p" [. W( q
  673.         {
    / b( Q& _- A/ L* Q. L5 X
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 j+ ~4 C5 Y; y6 \! E) f, E2 ]" s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 Y& H) Q* M# V( c7 |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ ]; L* E+ b; ?. G
  677.           Sleep(33);
    / G/ `" k& v" y. V5 v
  678.         }
    , S( X4 p# n9 ^) Q
  679.         Sleep(1000);: c0 t' S, G) T1 U
  680.         for(i=240;i>0;i-=8); U& g6 ~; ~0 L! }+ y/ v' J$ W+ V
  681.         {
    3 n& j+ b& q8 S8 J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 e( K: i) q/ d& D) t
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + }+ s: j, t% ?9 C/ h* a5 p3 u
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 G/ F; Z. m- X7 _
  685.           Sleep(33);
    7 \' F9 Z# Q! g- O; V4 m8 n! W' O
  686.         }
    3 @: \5 O) x4 S
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);' N! P: Y* S. e9 [7 w& y
  688.         dlg->ReleaseDC(pCDC);
    6 r. [1 o9 V/ g0 I5 ?* y. D: H
  689.         DeleteDC(hdctar);/ h! ?# Z4 P4 V0 L$ B0 R( a! `1 M
  690.         DeleteDC(hdcsrc);9 q$ h! W+ m1 f& ~0 f
  691.         DeleteDC(hdcorg);( y  {0 s3 {. h6 N0 r  J
  692.       }1 c. j$ d0 D6 i( [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 w2 c7 M( h$ k" O
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 v7 x, x2 I' s6 J( i
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    + H9 Y  {, C7 y9 W4 i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- G3 w6 G1 V$ W; k7 t! G+ K
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: G- y/ P% ~' M) \% i8 F
  698.       if(!Dn.Connected())
    7 f0 W& G& @$ E% U
  699.       {- i( n0 c1 p* v0 C  S7 `+ G
  700.         dwTotalFiles=1;# |% q3 Q9 a- d+ U
  701.         dwDownLoaded=0;
    1 C; @: G" Z4 V4 {2 Z
  702.         bSilentStep=TRUE;
    5 y) }2 Z) S6 l2 O$ m
  703.         bCompressed=FALSE;9 H% L( |8 u' H8 l  _
  704.         strExtLocal.Empty();; v5 V" M0 B9 b1 a
  705.         strFullName="readme.txt";3 K( F% Y8 Q: E: w9 Z7 _
  706.         dwProgramState=AP_CONNECT;
    5 E8 R3 v0 Y, z6 g1 B* d; X" m+ K2 h
  707.       }
    9 d- U1 z5 x4 a4 e- w  V
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();" d: d% C4 _3 }* `  a5 y( o
  709.       dwStartUpSteps=2;
    " Q4 G1 @/ l8 l- ~7 \5 k, j( |) y4 _
  710.       break;
    & D: C" H4 G2 _6 w' M0 L5 v
  711.     case 2:
    # }2 ]0 W7 h6 ]0 m; q/ r
  712.       {
    , ?! r* p# Z  t; l# ^
  713.         int iEOF;
    $ X5 g2 h7 h- k% e2 [+ T
  714.         FILE *fp;8 [* h$ G/ N( f' s- D% N. z/ c; Z
  715.         char szString[512];- z* }' U( a2 O' E4 s7 Z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");; n+ M! X+ k$ }4 ?5 e2 q
  717.         if(fp)
    * c' `7 }, O7 A. n$ s- q
  718.         {& c1 e" W) V9 d/ G9 U
  719.           do  c+ \# M5 ]2 k* ]. d) ]3 |* E
  720.           {- L5 `3 y( t0 b- _: W) o( n
  721.             iEOF=fscanf(fp,"%s",szString);7 w$ @$ u. ^$ o3 @
  722.             if(strlen(szString))( I9 S, X! q& F8 h) a
  723.             {
    4 i2 B  y* e, f# C4 B
  724.               if(bFirstChar)6 D. u& Y* e; K/ F+ ]. V* T5 ^# F, x
  725.               {4 X% C% U; l% R/ H9 P
  726.                 bFirstChar=FALSE;! J3 o. u9 f2 G) O7 b
  727.                 bConnectIsBig5=FALSE;8 M2 p+ L: s$ z! R. |  F$ O2 ]3 |
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;! Q) a# c5 l5 Q# f4 ^# }' M
  729.               }6 K; v' \3 n- r1 Z9 @# `
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    # Q( G( x: b0 Q9 N
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! |, g- Q/ s# v* Z7 u9 a, Z
  732.               dlg->m_ListText.AddString(szString);- M8 r0 e( q4 x  u- b! ^
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 ~& C- D* d/ ]
  734.               *szString=0;% ~  w2 A& A& K" R/ ~; E
  735.             }2 V% P1 M8 V8 P/ H, v5 N
  736.           } while(iEOF!=EOF);
    5 b+ l; L) J' H3 Y% Z
  737.           fclose(fp);
    ) J5 h, m2 C. |, R5 r+ _
  738.           unlink(".\\DownLoad\\readme.txt");1 K$ f9 R  G: m
  739.           dwStartUpSteps=3;
    9 P4 i& X* Y) I; K
  740.         }4 h# F% H7 C$ f  @; y9 x* M8 \7 I, j
  741.       }0 J/ r# z; _; l( |3 j4 i
  742.       break;$ r9 n' o& j9 j9 Q2 S$ E
  743.     case 3:* ?& R9 A- g! j# \' c, \
  744.       if(!Dn.Connected())
    : _& v+ [1 E  T
  745.       {
    & Z9 n3 D$ e( n6 U- t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ; Q5 T* l* b, a. e1 e
  747.         dwTotalFiles=1;  G. {# E* l: H. L
  748.         dwDownLoaded=0;
    & {: v0 {' `) Y3 o6 M; d
  749.         bSilentStep=TRUE;
    6 u- I8 P. z8 S" @8 u
  750.         bCompressed=FALSE;- O# x; p5 [# h1 f
  751.         strExtLocal.Empty();4 B, f5 h% Z& R; u$ X  `
  752.         strFullName="checkversion.txt";
    7 L8 `! Q$ X4 j9 g- y; q2 }
  753.         dwProgramState=AP_CONNECT;! W) F) A+ Y1 D- y; g# M
  754.       }
    6 ~7 h. S$ f: i: n( D
  755.       dwStartUpSteps=4;
      O) W; x) M* C! J5 J4 j4 m% M
  756.       break;) x. ?' k  K# ^: Q0 U+ t
  757.     case 4:
    2 E  c, C0 W6 s( I8 u' h0 F2 P0 }* s
  758.       {
      u+ G1 `5 F% P0 L* n& [& n
  759.         FILE *fp;2 {% k5 U% I/ I3 \
  760.         char szString1[128];4 ~1 h- p& P" s, w/ E8 v. v
  761.         char szString2[128];
    - S2 k; m! H' C+ {; S
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    0 b6 T% j0 o* G# @+ h; x# z
  763.         if(fp)5 ~  z$ _4 d3 r  z6 l
  764.         {
    9 y9 c( ]& C9 }$ a# _( B
  765.           fscanf(fp,"%s",szString1);+ x! R- O+ H  T9 g8 q1 r1 S4 x$ t
  766.           fclose(fp);
    & l8 h% p1 C/ j) I$ n4 Z
  767.           fCheckVersion=atof(szString1);
    3 n0 Q: U9 C* e% m9 U  ?; Q
  768.           fp=fopen(".\\checkversion.dat","r");
    + a' X  b5 _4 e, f; y! q
  769.           if(fp)' Y9 u) t9 a* h, b2 z6 a9 L4 _
  770.           {
      k5 A: O; E6 `7 O& R! X7 g% y
  771.             fscanf(fp,"%s",szString2);
    # ~$ o- x+ i* {  Y5 g! F) ]/ k2 u8 n
  772.             fclose(fp);
    + T( q8 R  p4 I) p4 a" E* @( i
  773.             if(atof(szString1)!=atof(szString2))( m. o; X/ I3 y  L
  774.             {
    8 S# ^4 x: F8 b
  775.               if(!Dn.Connected())
    8 m5 ^+ I5 _2 E8 s! v
  776.               {1 c9 o8 Y) x$ v7 |* N8 ~! t4 O
  777.                 bFirstUpdate=TRUE;
    . `) N5 [# x% i  S
  778.                 dwTotalFiles=1;
    $ b+ Z, H6 O  l( w& C
  779.                 dwDownLoaded=0;
      ?* o( Y% Q0 A9 B
  780.                 bSilentStep=FALSE;
    4 W3 b( X  V1 n! ^' K5 d  `( D) L
  781.                 bCompressed=TRUE;+ @' N$ S/ d% Q) ]6 e2 c
  782.                 strExtLocal=".\\DownLoad\";. _/ e1 G3 q& |. k4 z
  783.                 strFullName="update.txt";
    ' `9 Y2 J! u) O- t3 g
  784.                 dwProgramState=AP_CONNECT;; U6 i! ]3 j0 i. A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" s0 c2 t; @/ I9 m3 }# V$ N0 k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 n5 s( M, t. p: i& L0 Z5 }" M) Q) o
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 z% V0 X1 Q5 ~

  788. % D  {" }+ N6 I+ T/ `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 d+ s  [6 [9 `. Y8 Q7 p
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 r% T* U: b1 B* h
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 ]3 G% D6 v3 ^# _) N! p/ y' y
  792.                 {
      }# x# |( P4 P) D, j; d2 y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% _% h" ~2 L0 S4 N+ E
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    3 j% k9 I! m% w
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");: E7 K( x: M# ^5 x- \4 U2 q+ @  Z  L
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 z  n7 l3 y% D$ p. |: k& X

  797. 4 k) {! n( D5 g& p% }: T2 k$ o
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' g2 n; G3 w8 G; c. n
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ t, m4 W( S, ^# m, D; D
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  x; z9 I  l- E- i
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& X" {# e  d4 D5 b0 S1 w2 v5 @
  802.                 }
    1 {9 i/ T. p/ Q( z, e+ O( s6 G
  803.                 dwStartUpSteps=5;) Y; g7 B& a% G* i, h2 Q) d# Z3 h+ C
  804.               }
    : _/ G) p9 @6 W+ b3 s2 N  F
  805.             }& d0 F/ b) L2 G7 o6 I6 U  Y
  806.             else
    " O9 l4 `2 Q: u" T+ N6 I+ `
  807.             {7 Z4 B  o  C- t! |+ o* ]( p' s: Z
  808.               unlink(".\\DownLoad\\checkversion.txt");  W& a  X6 e* t: c/ A( g
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ u$ u; X# W9 V/ W
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - O+ W8 u+ Q) L/ d7 u  |- F
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");5 D; d  f3 q! H5 T. }5 T
  812. - d7 C) j# E1 `5 c
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 }6 ^2 l9 E$ g$ Z5 t" a. F" _9 M, F% D
  814.               dwStartUpSteps=99;9 Y+ E: L$ q1 J- v- {$ E
  815.               bFinishUpdated=TRUE;
    - z% l% V0 Y, b* |0 P# @! \' ~
  816.               bCanUpdate=TRUE;
    . B" E' x- ~1 l
  817.             }1 I1 k0 Z  Y) C. D9 |+ y$ @+ B
  818.           }7 N4 ^' q/ G7 {# W3 [
  819.           else! q) E) O3 r. {% y- J3 I
  820.           {
    . w9 Y1 S, b$ ^4 a8 s) o* k
  821.             if(!Dn.Connected())% j2 z( }! @: U* l8 Q6 b& _+ k
  822.             {
    8 @/ E  R2 b) L
  823.               bFirstUpdate=TRUE;6 U5 @) V" x9 g
  824.               dwTotalFiles=1;
    / ?& V) K7 C0 p2 O# I8 I
  825.               dwDownLoaded=0;* j* R4 `9 @" G, K( q' [3 e
  826.               bSilentStep=FALSE;
    ' ]) B9 ?( U: O1 Z6 p! c$ K
  827.               bCompressed=TRUE;
    * E+ L" _1 U! u% \7 L$ `1 V; X
  828.               strExtLocal=".\\DownLoad\";
    , S3 Y8 |+ l7 M5 K! k! U  I5 k1 \/ ]/ A
  829.               strFullName="update.txt";$ t5 l; ^, g9 R7 ~0 \
  830.               dwProgramState=AP_CONNECT;
    8 z& {/ }2 ?: z$ M$ h# e+ [6 E
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * R& D1 O, w  H3 b& ~- C
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- s4 I- ?$ s6 [  g
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; m) F! q, |( G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 ]4 v/ M* S* u" T$ ]. a4 d
  835.               unlink(".\\DownLoad\\checkversion.txt");  B9 ~( x* n5 N/ V" ~3 E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . Z7 r( r. @& [# n( [6 l: x, T
  837.               {
    4 x% b$ d9 f1 v
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");# _- ]+ M( V& ], ^
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");+ X3 D7 _) h( {& f0 @. I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");8 G7 {2 I. w, M5 c1 P- X) c
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 K4 j7 a# g. h2 n0 O3 `
  842.                
    " ?% X# M  n# d: V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : b+ f9 o' j8 ?4 N4 I
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      z- B: l; O" ?+ _
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");' [2 M1 W" D  U( J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 W3 A9 v" H8 h- _* m
  847.               }
    - G, X5 U5 w# x' X; r! p4 t" `, {
  848.               dwStartUpSteps=5;/ x- o( w; ?5 Q+ h8 s6 A: m3 O
  849.             }( j, E# C1 O, c9 Y
  850.           }; C( H8 X! ]! o+ |6 V# I1 z
  851.         }9 g3 G" h4 s+ {1 P. ~
  852.         else
    ) V* O& C2 T+ b5 l( g7 o/ F
  853.         {9 J! {9 e& h) i% Q/ c
  854.           dwStartUpSteps=3;
    * e+ m* N  L; X7 A# B: z% Y
  855.         }# X& Q  o: u/ \" o. e# o6 S' l  ^
  856.       }0 Z0 D" O" C) s/ O; `! d8 }& w
  857.       break;% h- G. ~$ A( J
  858.     case 5:
    - q9 R$ Y  Y7 [& B- y8 o2 |
  859.       {
    * L  K% X/ T6 A. g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)$ }: k5 O3 G6 d& K# O5 q0 k) F3 J
  861.         {
    : u7 ?- K* J' u! Q; T$ V/ ^2 a
  862.           int opt_overwrite=1;
    ; I( c/ q2 k+ R  V6 d
  863.           int opt_do_extract_withoutpath=0;
    9 V' z7 s5 @( i9 ^% ~  V
  864.           unzFile uf=NULL;4 ]' B: I) D& w3 m# h
  865. . s. M* H8 y+ O! |) v
  866.           uf=unzOpen("Wsa.zip");
    & X# I& B) R/ ~6 |: ?
  867.           if(uf)4 A; a( a  j& R# N4 y
  868.           {
    " m- m2 P- t' C8 y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 S& w& J0 Q4 x
  870.             unzClose(uf);! }8 L  Q; `% w# k3 k4 V) {7 r
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");: X$ u- \: Y+ N+ U5 f' u
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");( S! @2 c+ [  k% n# }. k
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ! X- I. ~# {# I2 t' }. R9 H
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 t8 ?$ }# u- |4 z, g
  875.           }7 k6 S! R; ^/ o% C2 p3 o0 T3 \
  876.           DeleteFile("Wsa.zip" );& Z9 g1 |. \; F/ E/ [# C! \
  877.         }
    4 S, j0 j5 _/ ~6 k- W

  878. $ G2 |- _) A; Z9 z' l) ?- @
  879.         if(CheckLocalVersion())! Z9 F1 N2 O( N  v% S0 ]8 Q2 H+ G  S
  880.         {
    6 T( K( X+ E2 F% M( d* l3 M
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    7 T# r9 ?" s" e/ B8 i7 T
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / r2 ?" T4 F$ ?1 ^
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    3 l) G3 S' d- G0 W9 y3 X* X
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + C# D! q$ J9 g0 j+ K  Z5 @
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);, C( P+ c( t; E" a1 U
  886.           dwStartUpSteps=99;9 S$ _: L9 G. a* p8 D
  887.         }$ d0 j& o0 Y- d) R- w7 f
  888.         else
    1 e* G1 G, {. G
  889.         {3 s) j  Q. v0 A4 ~) d; J) e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");. M% K3 Z9 ]  N" I! f
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- K( X  {: b& H/ _1 }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    * \& D4 z2 L( q

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

4 O; u! W- {' A/ A$ C+ A  l) S- v4 N4 ^' ^5 n2 J$ }- A- f

評分

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