CSUpdate.exe源代码

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

4 y/ j% c% m2 \5 ]4 X
  1. / RevApp.cpp : Defines the class behaviors for the application.
    & }2 Z# O$ a9 I( k9 s
  2. //
    % _* o4 L7 T/ h1 F0 z2 S
  3. # F2 S& j/ N& j4 f2 p' c
  4. #include "stdafx.h"
      {8 Y! E* x( m4 |4 H: a
  5. ; O5 V( {7 ~( H- f# j
  6. //#define UNICODE) c( |% C! p  p# _7 D" z  u
  7. //#include <gdiplus.h>! h+ b+ Y8 J; N$ {! W
  8. //using namespace Gdiplus;3 J/ c9 D6 P" {

  9. 1 |9 u* k8 ^4 I  J6 k; L
  10. #include "RevApp.h"
    % d  G7 m& T9 W$ E; f
  11. #include "RevAppDlg.h"
    ' ~: K& }' z2 d0 O* l
  12. 4 U+ p* c  ]. R6 o! W5 O
  13. #pragma warning(disable:4786)
      o7 x5 R, o  j7 S% ^- s
  14. #include <map>
    % X+ `( u& n! u2 l) u
  15. #include <list>
    0 ?( I  W' |$ k' |4 e
  16. #include <direct.h>! ]/ R  k$ X6 l: [

  17. / i9 ?3 K: G0 [+ q3 H- M
  18. #ifdef _DEBUG
    + Y1 O( D, ?$ R7 y& K
  19. #define new DEBUG_NEW9 N: }7 x* M5 H
  20. #undef THIS_FILE8 M3 f4 r0 ^6 ^$ M  c# s
  21. static char THIS_FILE[] = __FILE__;- i$ {; M6 K* t1 h  R) H
  22. #endif
    2 }- l9 T4 A/ H. P0 X
  23. #include "SkinResDef.h"
    . E4 D" |8 L# v0 J8 ^- E2 R
  24. #include "ChangeBG.h"( @. k' S! c/ G+ k- x, |4 t
  25. #include "AFXINET.H"
      Q! m/ N& @) r5 D& ]( o' M' ~: B

  26. 8 Q& }! v+ c2 B9 V8 c5 v! O
  27. #define TRADITIONAL_CHINESE 0) R' T/ _) D9 r) V3 R, Z& z
  28. #define SIMPLIFY_CHINESE 1
    9 x* ]  d2 w$ w, Z
  29. #define ENGLISH 29 l; i. J. [- W& d) t; P. j
  30. int m_iLanguage = ENGLISH;
    & g. [% g3 F5 V" \
  31. /////////////////////////////////////////////////////////////////////////////; k7 _7 _$ n4 ?( k5 ~& }
  32. // CRevAppApp. ]0 u5 D  p+ G+ l" ^

  33. ; R( c  o$ B5 m
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), C, k( M+ S3 d& w& J
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    + y9 a0 W4 Z0 q7 f0 T" `' n; e
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' Y! b* e  Q' `/ s/ ]0 g  C0 j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!2 e* R/ A, b( d
  38.         //}}AFX_MSG
    8 W5 ]5 u: H* i* ?- _
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 i/ b$ F4 F2 q4 X/ g: d  C% }/ k
  40. END_MESSAGE_MAP()
    ) e1 w4 g. l* I- f5 v& G

  41. , |- I+ P5 z5 j
  42. /////////////////////////////////////////////////////////////////////////////
    + H, u7 k4 S* x4 _/ P7 X
  43. // CRevAppApp construction" @( K5 @' Z7 B7 j( ~
  44. ' C) x( y6 F: `$ _" W) ]8 ?1 o
  45. CRevAppApp::CRevAppApp()
    + }6 h+ s; m6 v" n1 A3 G. V$ J
  46. {; R8 M, {. V. k: c+ q2 B+ r
  47.         // TODO: add construction code here,
    : Q+ w* h' e- n
  48.         // Place all significant initialization in InitInstance6 _$ u( P* {3 l0 B0 ]  W4 c
  49.   bDisplayIsBig5=FALSE;
    $ }. S5 e& D5 _% ]$ P
  50.   bRestartUpdater=FALSE;# I& c( o! P! H
  51.   bFinishUpdated=FALSE;
    " I) G' y7 o( D8 o( {
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;5 s, Q4 \- o- C9 g$ q; @: V
  53.   InitChangeDataBig52GBKS();
    ( J* [+ s4 I, k" }" b
  54.   InitChangeDataGBKS2Big5();3 D7 t3 V; @: X( c+ C3 w1 H1 m
  55.         //. n' W1 r/ a9 T. E1 r
  56.         bClickRunExe = FALSE;) S4 p* I9 P: o
  57.         //
    3 B# e; ^  ^5 {4 T: E: P
  58. }8 D. J. I% W( u- A0 P0 A
  59. * y5 _7 ~) }! D% J
  60. CRevAppApp::~CRevAppApp()
    ) \! p3 \) e7 W, C3 K
  61. {
    0 n0 d/ U$ Y2 A3 O# N
  62.         // TODO: add construction code here,) U  Q: R$ ~6 K' L/ x/ u+ ^
  63.         // Place all significant initialization in InitInstance
    9 ?9 K8 g+ c  [* B
  64.   EndChangeData();
    - E, h/ U$ _+ e  j- d* T
  65. }) N8 h; E1 j  t. F3 f( f/ B
  66. 3 v; i  g; U0 }+ |9 V, z
  67. /////////////////////////////////////////////////////////////////////////////
    : c% Y& s/ E2 G: Y+ b( H  Q. x
  68. // The one and only CRevAppApp object
    8 |4 t9 F/ Y0 j* e' p- o' S' A

  69. 0 V, s7 k, l; P4 n  n. L# F1 u; |
  70. CRevAppApp theApp;( Y( {6 Q4 {: `! n: V
  71. 1 ~* G% |4 Q* K$ c( \: e7 u
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    & `  Z- }& Q6 P  ~/ @
  73. {) E& a$ P: t9 U! S
  74.   int iEOF=0;
    8 y/ O0 s3 g4 \" N7 E6 i
  75.   char szTempName[MAX_PATH];: @- M( b' L# {8 c" `
  76.   *szFileName=0;
    & E6 N$ T/ V! D& }# i/ P+ M) s
  77.   iEOF=fscanf(fp,"%s",szTempName);
    * U( T. p9 E* K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    8 z% {2 l* E, e7 {
  79.   {
    ! X1 n1 w9 V. j4 ^# \4 e0 Z' e7 v
  80.     strcpy(szFileName,&szTempName[1]);7 s( x  D7 j+ t- T5 S6 @
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    0 h4 j; Z& u% e1 g9 O
  82.     {
    ' {7 H; m) A1 i* p7 A  u! U2 m
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * h0 ^4 p, n3 y" d( Q
  84.       strcat(szFileName," ");
    8 b* w6 }8 v. @9 K
  85.       strcat(szFileName,szTempName);
    - w/ G* i: L5 b9 U# o* M2 R
  86.     }
    2 f6 g) m1 R/ e% H* D4 k
  87.     if(strlen(szFileName)>=1)+ \0 P6 F) ?) ]- o
  88.     {
    " P5 G; g8 M8 Z
  89.       szFileName[strlen(szFileName)-1]=0;
    8 P0 [8 h, l7 D2 d4 G) r
  90.     }' X. K6 U1 O$ X0 a/ M7 V* S$ l
  91.   }5 v) T0 O4 q8 `3 q, [. b8 t4 y
  92.   return szFileName;
    4 E4 E6 p/ H' b/ {
  93. }8 d* Y- A' [) V# D  p7 t, x" Y

  94. , s$ P2 k" [. R& T' A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 C/ ^/ D  I4 [2 Q. T
  96. {4 O9 R3 X9 G$ u0 W+ `8 p! |
  97.   FILE *fp;
    0 Z: f( F1 ]3 M( Q1 |9 @
  98.   char *key=NULL;$ W$ o3 L! `- [  x6 {
  99.   char version[MAX_PATH];
    0 ?# V0 g4 A/ b; D: i
  100.   LPUPDATEFILE file,olds;
    / U' v" v6 S' g( e& n' U
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( O6 F6 J" F2 b( a
  102. . ^/ N. A* I3 E6 t% Q
  103.   UpdateList.clear();! L# j6 T$ {( k8 d
  104.   UpdateFile.clear();
    5 z. R" @. c8 w4 A4 K! k% p
  105.   if(GetFileAttributes(filename)==-1) return false;9 }' {( @( x$ M) S! i
  106.   if(!(fp=fopen(filename,"r"))) return false;
    3 X7 U6 W, W  ]
  107.   fscanf(fp,"%s",version);) O. X- z3 ~* K; u0 ?  S  P0 a0 [
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ) W5 L( l% H. E# Q8 @1 k
  109.   while(fscanf(fp,"%s",version)!=EOF)! B  q1 N/ X& o- Y
  110.   {. z7 V4 E, U! ]: t6 R  {
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : E/ K7 I1 d) x
  112.     fscanf(fp,"%s",file->path);
    6 }0 P" [& o' T1 w0 {& N8 t- _
  113.     ReadFileNames(fp,file->file);
    - L3 \* {) f- T* `+ v' n" v
  114.     strcpy(file->full,".");/ ~, Y/ o- O( q: V+ y( r: q
  115.     strcat(file->full,file->path);3 n4 C+ N# d1 i
  116.     strcat(file->full,file->file);/ Q* i+ y8 D+ W! z/ C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 x& Y/ h2 q7 i( o3 N9 b8 d# k1 `
  118.     {8 i8 K! l6 P" L
  119.       file->vers=(float)atof(version);( K8 f+ P; w5 S/ B4 C
  120.       UpdateList.push_back(file->full);# k- B% l8 `# W" J4 \2 X
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! r' `( R& s. Q$ w; R
  122.     }
    . r7 d+ v$ D3 A  Z+ u  y
  123.     else
    " X& I* j' x$ g( Y. H  U) Z
  124.     {$ F5 q- [+ e+ r
  125.       olds=(*p).second;
    / a  K; p0 s1 j# U
  126.       if(olds->vers<(float)atof(version))
    7 k2 ?9 _7 s7 I3 I& x, L0 ~
  127.       {9 P% ~$ Y9 E: x* v
  128.         olds->vers=(float)atof(version);
    5 V) a! g  g- c+ O1 L
  129.       }
    ' M8 f! g: y* Z( L$ q' b& |4 I
  130.       free(file);
    ; {$ c, Z" u0 P8 U) r' k; f
  131.     }
    1 g5 d' t$ o% H; e9 q% L& }3 X
  132.   }: C& v; I0 e8 B
  133.   fclose(fp);" Y& {3 K4 _# I
  134.   return true;
    % S; ~0 m/ w0 n& U
  135. }
    5 K& {3 P/ z0 N. @/ W8 M3 k

  136. - U- R% z  t# l6 \7 W
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)& A' g: O2 z+ d' l8 L
  138. {
    4 e# f. `1 \, W4 x$ J/ O4 s: V3 {
  139.   TCHAR  szFull[MAX_PATH];" T; ~6 W; v1 x: `' k% \
  140.   TCHAR *token,*inter;4 M* R- K8 L$ |' |6 u. Q2 D
  141.   *szPath=0;
    . M$ E) n9 R" K/ V6 z
  142.   strcpy(szFull,szFullPath);
    4 x; V. S/ Z: p, A
  143.   token=strtok(szFull,"\\/");7 ]4 _! A1 j  K: M
  144.   inter=token;7 R; M( L0 @& y! x( z* E7 b5 ^
  145.   while(token=strtok(NULL,"\\/"))
    $ _& p8 o0 x& }+ ?
  146.   {
    ( |' B3 J+ }' m0 O- q6 D& D
  147.     strcat(szPath,inter);' B# y9 I: G; N$ t% ]" ~) w' }" Q
  148.     strcat(szPath,"\");% M6 T5 M7 [# O! v
  149.     inter=token;
    2 \) s4 g  Y. A2 W1 ?) l
  150.   }2 e8 e/ u0 D8 H- L
  151.   return strlen(szPath);
    : s3 q: w7 J. q9 z( {( X) i
  152. }
    3 ^! d5 i! S" s! G7 b

  153. , B7 W0 u, w7 x2 N) F6 X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ l/ _8 Y/ Q: U7 i( h0 _; \7 `
  155. {- f! j/ a5 M! h, _# U- ~' t
  156.   DWORD attrib=GetFileAttributes(Target);/ s. @5 Y/ ?0 u  _4 ?
  157.   if(attrib!=-1)" N/ R$ ^/ R; ~* z* M% S  }
  158.   {- S8 s; P% l+ R; D  [
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 i# d" i: v4 S$ c  b
  160.     {
    9 m+ Z7 w- t# a5 j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 t5 ?# O* {- r9 W" {
  162.       SetFileAttributes(Target,attrib);7 U* E1 T9 M) ]
  163.     }
    8 b( Y* m8 w, a: k: n/ Q' c+ }/ i3 {
  164.   }
    * \# i# A6 F# ?% f
  165.   CopyFile(Source,Target,Erase);
    , o+ A- y6 d/ B5 S3 J
  166. }0 b0 k+ a' B! P9 a& |' U1 @
  167. - W  ?3 ^( z. s1 T3 ]( ~& ^/ h
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 L; T! f0 k$ w! u6 t
  169. {
    + n0 e8 U2 V6 V) f% l5 B
  170.      FILE *fp;" h% X* B6 Y  Z
  171.      char  szBuffer[8192];# ~7 Y1 ?$ A4 [8 E" j( }
  172.   va_list  argptr;
    7 e5 `& Y3 t6 |
  173. 8 R8 C/ b8 d# H* d6 m
  174.         va_start(argptr,message);
    5 A3 F# r: o  W% E5 y
  175.         vsprintf(szBuffer,message,argptr);
    6 m4 g1 {+ o7 X5 K% a
  176.         va_end(argptr);% Q: p' G6 ^/ c
  177.   fp=fopen(FileName,"a");, o: ^' a8 Y1 U/ V
  178.   if(fp)) l1 S; n  B, s
  179.   {
    ; X7 W) T/ S% _- u6 j- o7 x: f
  180.     fprintf(fp,szBuffer);
    2 O+ ?- ^: D1 t1 N
  181.     fclose(fp);9 e9 h4 h4 M2 r8 |" s( u2 ~
  182.           _flushall();
    % n9 d" p. p9 j0 K
  183.   }' ^% M; {/ w, g- P, J: a
  184. }
    $ m/ S5 Y6 J% E; f( [
  185. 7 F, Y' O% d% ~; _. O( [5 s
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    , f( j' K, W) Q0 f
  187. {
    " s( D9 |) C( G" K# b
  188.      FILE *fp;
    * H$ o7 C, [5 R' r" m
  189.     DWORD  attrib;9 _7 y; o. w6 D* f2 X
  190.   attrib=GetFileAttributes(FileName);( i; w% N/ ~2 D# r; L+ d
  191.   if(attrib!=-1)
    " c, s* ^0 I2 _3 b8 Z, y9 j
  192.   {
    % K* M# g; c" Z: U" H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);( F  ?/ z( M9 G9 N3 w
  194.     if(!SetFileAttributes(FileName,attrib))
    . l! q" D" r3 R. w) a2 v
  195.     {9 {, E* K9 v- _+ |1 n
  196.       return FALSE;. @" c% m: L* T# w' ~( t: j6 I
  197.     }
    0 l5 m' n5 I  T
  198.   }: }* T! U: u1 c# S
  199.   fp=fopen(FileName,"wb");) E( q( \. _( v, `$ z' E, o/ T
  200.   if(fp)
    3 R# g2 Q3 Z% e. d* Y6 F( S, [4 Y
  201.   {
    : E2 j# g; M* Q( v* }
  202.     fclose(fp);) W& L1 [6 ?+ J0 K! A7 q$ E
  203.   }
    ! e2 c# X' v4 U5 N% `4 O4 T4 v
  204.   return TRUE;
    ( r" Q1 u& d0 A1 h/ u( E
  205. }
    + o( ^- K2 A& t; z' r
  206. % C4 y3 a) `3 [7 B/ m4 V
  207. BOOL CRevAppApp::UpdateLocalVersion(void)7 D' m% V6 ~2 z$ Y& J3 Z0 R; h
  208. {7 x7 i$ A& d) J$ E
  209.   char filename[MAX_PATH];
    ! l: G4 |3 z& Z
  210.   LPUPDATEFILE file,olds;" U% H% Y' i5 H  N
  211.   std::map<int,CString>::iterator i;: |1 U! M3 B: k' r6 [5 a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 g& o( _2 m$ m$ q5 Z+ O- z7 V" `
  213.   std::list<CString>::iterator l;3 I1 T2 i+ i% u2 c) E
  214. # r  w# o) T. y+ T# b& x6 O& P$ p
  215.   if(bFirstUpdate)/ G' T0 T! o+ i1 _0 G. f
  216.   {
    # Z/ E- |/ t2 O. v, F
  217.     dwCurrFile=0;; c: V- n0 P, q! s5 @* ^
  218.     bFirstUpdate=FALSE;
    : Z% y3 ~! J; L& B' `
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( A2 r  O: ]9 `/ B( `0 N9 \
  220.     {
      }+ N0 f- N3 H4 G6 f3 \3 S% ]
  221.       dwTotalFiles=UpdateLocal.size();
    9 ^, H. t/ o9 M7 A6 ?! x! ~6 N
  222.       dwDownLoaded=0;
    0 y4 h' y9 T* W+ g
  223.       bSilentStep=FALSE;- x: S! B  ?! Q6 N. j8 \
  224.       bCompressed=TRUE;: c! ^- h9 O" F0 O
  225.       strExtLocal.Empty();
    8 W( @; k* i% H) ]2 q! B
  226.       strFullName=(*i).second;
    ' [2 h: @  r3 `" S3 D
  227.       dwProgramState=AP_CONNECT;. _  s% n! w: i2 u3 w
  228.       return TRUE;# [* l+ O0 T! C) u, Y
  229.     }
    ( t" @8 ?) {7 C; t& L$ q
  230.   }: J: k( d* d; d0 O* ^# T6 d0 b5 C+ |  A
  231.   else if(bRestartUpdater==FALSE)  G: c* u6 T0 G  C% ]: ~, u" j; j
  232.   {
    ! r# i3 U# g0 S* T* V) a" \3 |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())6 v; }6 J& N! j5 ~! {0 _8 }
  234.     {
    3 `( l8 @* q0 V; b* R% o! l. U0 F
  235.       file=(*p).second;
    # Y9 o4 F2 B" O. G% X
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())0 Z) }) E3 L! v" w
  237.       {7 @# `. w) c/ g0 F9 j
  238.         olds=(*p).second;
    5 Z; Z1 e5 b# L
  239.         olds->vers=file->vers;
    / h  E$ _7 R0 p+ n0 n# X
  240.       }
    ! j  w! U" ?5 G. n5 D: D
  241.       else
    6 G% H  C# A) g" u/ a' i0 L
  242.       {
    - n* A* b" J0 S6 F# J
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" Z/ Y  v7 t# L% z6 Y" d5 |
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    5 l. u2 l( q$ T( E) w, X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));" Z3 A! R7 ?5 B* G2 B( M- B" g
  246.       }2 P$ d: g" b1 E+ W  M2 i+ @9 K
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    7 I1 E% n6 i1 K! F) n
  248.       sprintf(filename,"(%s)",file->file);9 }9 D9 g; c4 I( Z, P5 z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: U: F& I' q5 `0 {9 X+ ]( K1 n" [3 N
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }7 A! w4 L" Q/ Z. e. P" m# ?, k: L
  251.     }- c9 X4 |. g# S- D$ k
  252.     dwCurrFile++;
    5 i( j" C! M( x  k1 o
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" ]- o4 a5 P9 d! R! F- T0 `
  254.     {) Z0 C1 O( O4 K: }$ L" ?7 B8 b
  255.       bSilentStep=FALSE;+ K9 C' ~$ B! p6 l# g1 i
  256.       bCompressed=TRUE;- b8 y; o. b$ t' x4 f/ [
  257.       strExtLocal.Empty();% K6 d$ @. [( d
  258.       strFullName=(*i).second;4 F9 g$ \, {! l1 G! l
  259.       dwProgramState=AP_CONNECT;
    % r8 f5 c5 i7 c5 g2 ]
  260.       return TRUE;
    ' R( J! m, H, f/ S' P4 c. b
  261.     }! @- w( i; X6 E& c* v* C5 p# u  g
  262.     if(!bRestartUpdater); V$ C$ ]: g/ _0 m: S  `/ V7 c7 q
  263.     {8 a, c) b2 \! _  A9 R
  264.       int iCurrSize,iFileSize;
    # b& A9 U" {3 J' i
  265.       iCurrSize=0;$ z9 X- M5 Q6 _3 j
  266.       iFileSize=UpdateList2.size();
    $ R5 z& s( o; Y8 Y) F& E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / w- h2 b! e1 i" i, B9 _
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");3 j8 I3 i! s6 Q3 T/ w( [
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");/ U! Y+ c* V- ]
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, Q8 v% C( |/ y( r  ]2 a0 G
  271.       Fclearf(".\\update.dat");
    ( ?& u$ N1 p" E
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    . O, Q! ]/ C% z: J
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! f; B6 {! Q) D+ d* t) v
  274.       {8 u/ e6 n3 ^, }9 ^& s' k( E: ~5 N
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())* J% g! B" d. d; O& E! L
  276.         {# v  _/ P" }* ~% |
  277.           file=(*p).second;
    & b1 V. m! D; d9 ~+ r
  278.           sprintf(filename,"(%s)",file->file);: n) v$ Z7 Q1 H
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! Q4 P5 a  s) \) V+ E: H/ ?
  280.           iCurrSize++;' {4 D% l' n( z5 ]$ D& ^7 V
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / n7 r2 l* @) y% G" w# p; [
  282.         }9 _) e# Q( W; x  \) n
  283.       }
    ; K  Q; {1 V' j
  284.       unlink(".\\update.txt");
    ' k# A7 w. f# s3 f. V( e
  285.       unlink(".\\update.tmp");7 i+ A/ n8 S* }# A8 d
  286.       Fclearf(".\\checkversion.dat");
      Y1 U5 F8 d+ j$ K  Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 q! J6 m% k, P1 D+ g5 ^: I- W0 \
  288.       if(UpdateLocal.size())
    2 T. \$ g1 W" X$ S" b
  289.       {
    ; U4 J( Q2 a% s) B$ C. X( g
  290.         UpdateLocal.clear();
    0 D# _( |6 D/ ]! F( g4 Y
  291.       }/ c- b- E. m& G- p6 A
  292.       if(UpdateFile3.size())% Z1 d5 r$ B: R1 H
  293.       {2 e  Z! N  U* }2 B$ N+ s, W. c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* g+ m/ C7 Q# q) I# u. B: @4 h
  295.         {
    9 ~& ?/ W  S: v9 u6 ]
  296.           file=(*p).second;
    " C# \+ m/ H) z+ L# x
  297.           free(file);
    0 R# s. b' `3 I/ s" X8 _/ x
  298.         }
    $ l( s7 G7 Z- j* g* Z; s
  299.         UpdateFile3.clear();+ R3 }/ T* A/ T" _) i; D! j
  300.         UpdateList3.clear();
    % z& F: x" X6 j0 h/ w, ~
  301.       }8 P. X: H3 N# o0 B
  302.       if(UpdateFile2.size())
    2 `7 J* v6 u5 {7 j7 o* G
  303.       {. g4 U9 A) k/ ]1 X( C1 P4 E
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 t+ q, D. Y, ]5 j: d1 k- u
  305.         {7 ~& i/ @: f1 C5 ?
  306.           file=(*p).second;4 @, m/ x$ _+ s: Z1 }9 O4 E! m5 y7 A
  307.           free(file);) K$ X2 }2 ?3 E( _  X! A
  308.         }
    0 @; |$ c( v* N2 ]. l
  309.         UpdateFile2.clear();1 T: U: Q, P: `! Y6 @
  310.         UpdateList2.clear();6 b% p4 {6 E3 H; \
  311.       }
    ; G+ E3 m5 _* J+ H- ^5 v
  312.       if(UpdateFile1.size())
      o# r7 o, v5 [) g0 P3 D3 d7 I
  313.       {
    ; H8 e- W7 [' @, R5 ]2 V- ?
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # R! |% K$ B" R- p9 |6 V+ k
  315.         {
    6 k! W; ?  Z6 ~0 y
  316.           file=(*p).second;* X6 |. B+ p2 z2 t
  317.           free(file);
    ! B; U% Z4 k# S% V. `7 d9 W4 q
  318.         }
    - @9 r! s0 a- C, p  X' t5 S3 R# }5 G
  319.         UpdateFile1.clear();
    / j1 w  M: a  N8 z1 x  W; ~6 W9 ?
  320.         UpdateList1.clear();! Y( i% I8 r; {
  321.       }! w, B* Z. T- o
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    * O; U; {) b( S# i2 U
  323.     }
    2 k! R. ]4 g: y" t; o. g  {0 j
  324.   }
    3 ^& `9 _( Q) E
  325.   return FALSE;- i- A( z+ X) J( _# i  w) U- N
  326. }4 R4 W# I" V6 I# |4 q+ P

  327. % W0 k" H1 _+ p$ F) R
  328. void CRevAppApp::ClearAll(void)
    : W4 R% t, I/ z# b% p) }& h
  329. {4 l/ D% k, _% r, `' B, ?: v
  330.   LPUPDATEFILE file;
    : W7 X" f( b; Y. o. ?/ z0 R6 o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    % w. b. B5 w0 }: U
  332. 0 L0 r: M% `. G$ y
  333.   if(UpdateLocal.size())
    : {# O1 }1 J; [( }
  334.   {* M& i' P2 z7 W  Y. ]' i0 C
  335.     UpdateLocal.clear();& R- n4 |( S& U1 V& z7 c
  336.   }
    8 @4 ~- H) I+ p+ u5 @( L- |
  337.   if(UpdateFile3.size())- n/ p3 G, F5 T* K3 j% [1 X
  338.   {0 q8 U  \$ ]- S" o
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  [2 _. s  F& }1 N: O. y
  340.     {$ w  X2 R3 _2 N& `
  341.       file=(*p).second;/ u( {" U2 b" S7 D  S6 X" O
  342.       free(file);
    + N3 P, [. p9 L+ V$ f
  343.     }
    . W& ~: f6 a/ e3 L) s0 I
  344.     UpdateFile3.clear();) x3 _- z7 H' V6 y# W$ ?6 H5 j! @
  345.     UpdateList3.clear();
    $ o. A) x* H+ J; L- |+ T" Y
  346.   }
    1 y; I4 ~+ M: Y$ H9 b! g3 f
  347.   if(UpdateFile2.size())4 _. L% [9 b5 A8 {0 h) t
  348.   {
    " w  B. ?6 [0 g* k' ~% k+ X9 [
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) P# t. ^& a( ]( M
  350.     {* n5 B' _. B, D/ |# b
  351.       file=(*p).second;
    & }3 \: d( @# Y  n3 S
  352.       free(file);
    " ^) l7 s: X0 G% w
  353.     }4 m$ b9 N; L9 e! ?6 R3 J
  354.     UpdateFile2.clear();1 ?2 h( d' h2 ~7 C% D
  355.     UpdateList2.clear();
      Y3 z, B8 Z; n7 P- G) h
  356.   }2 w( k2 K/ K" a9 x$ c* A9 m
  357.   if(UpdateFile1.size())" p4 j1 O, }4 ?
  358.   {' P1 z7 A2 ~) Y3 C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! W; Q' e4 x) q& c. ]
  360.     {
    4 A2 I, u4 v! a$ ^  g: v
  361.       file=(*p).second;) q7 y" @" z6 ]7 c
  362.       free(file);$ T" G" e( ]* `
  363.     }
    : b3 e! t) }2 p2 S9 `
  364.     UpdateFile1.clear();( Q/ s1 i; v6 m( z  Y2 F
  365.     UpdateList1.clear();! F6 L+ ^0 B# r" `6 P3 e
  366.   }
    7 h; z* y! Q: [9 n. D4 o% l; F
  367. }  3 U$ w7 B1 O% [- b0 N# B
  368.   ) f7 ~1 C; M" l
  369. BOOL CRevAppApp::CheckLocalVersion(void)3 Z( g/ g+ f3 ]7 I
  370. {$ P9 t& r; y/ V, d, j$ J/ o
  371.   int c;& Q& O0 {: u. W  y7 \6 ?/ G
  372.   LPUPDATEFILE file1,file2;
    2 R! T7 c6 e; _7 p; y% K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 Y2 i2 L% Z# d: x7 C
  374.   std::list<CString>::iterator l;' J( I& h) e# Q3 B7 I, [$ n6 Y/ v
  375. 4 ]) B; H) i) i5 u5 P  Y
  376.   UpdateLocal.clear();
    $ F6 ~3 N% q& b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);5 T* I9 z, f4 r) v6 z9 K
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ }' P+ X( V0 U4 N4 ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # r8 n1 |* b2 T9 @
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    # {* c/ \7 K* j' U8 H! n
  381.   if(UpdateFile3.size())
    7 R9 Y' u- c9 a% H
  382.   {
    , M( H* U: q5 s/ l  U# O) `/ @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)$ ^  k; l0 G7 `6 T* F% p
  384.     {$ Z, F) z- K- j! ?' r7 O- ^% Y6 \
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; ^" z0 F8 |4 [8 D! q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! ?8 _9 ?& i' O( R/ ^; k
  387.       {
    * p$ T- n# U( O" R: u1 J
  388.         file1=(LPUPDATEFILE)(*p).second;
    / L. h: k5 k$ d2 n% W$ E+ u) h
  389.         file1->vers=file2->vers;2 J2 b& }) u# C/ z7 i
  390.       }
    : |. |0 ~/ `* ?9 S5 [" f
  391.       else6 _, }0 h6 X& a" I, o8 [& s
  392.       {
    , \; C6 N0 `0 h0 l; N- \
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 |* x0 @! P$ h; ?  U
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ( @9 Q; f9 R, d
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 X& @) _1 Y9 e, ?* p
  396.       }) \" n- O4 C) m" w) ?) Y
  397.     }
    0 E/ n# k2 d# k
  398.   }+ [0 O! b1 j- i. C' x7 a* K3 f
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + K% k' b' M3 Q+ d
  400.   {
    * U1 w  n& q7 I/ D6 A
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())! |# Z! t1 o7 u
  402.     {
    ; t4 q/ O1 w  q" p, T; p+ B
  403.       file2=(LPUPDATEFILE)(*i).second;' {+ [' ?9 X6 e
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ Y0 c+ u3 n) k9 W+ A* L
  405.       {
    ) Y6 ]' _: Q9 z) Z
  406.         file1=(LPUPDATEFILE)(*p).second;) c/ [( D; @' [4 i& @9 Y3 x
  407.         if(file1->vers!=file2->vers)
    0 ?2 u/ F! B: P6 Z
  408.         {- [0 E2 ^/ d$ U4 Z# v* J; T6 J  j0 `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 }8 V+ [7 s' I3 F, ^6 h* S( w
  410.           c++;: ^" J7 ?/ W1 z' q* _' j
  411.         }, p3 h7 D6 i7 ]: `& l
  412.       }
    . p$ C' _$ n: o! v& P* H
  413.       else
    . u9 v' x: w* ~$ S( @3 z& O
  414.       {
    4 f6 {1 @+ A) R% j( P, D% {6 D+ j
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " x4 I5 V: b" G8 e8 A8 p' d8 i
  416.         c++;
    ! {3 Q' W1 t/ U! F& ?7 |4 R
  417.       }( A# }: w! E+ g. E
  418.     }) @# s% v# f- y* _" ], L8 W
  419.   }
    - H" E; N7 A5 @. k9 ~
  420.   unlink(".\\DownLoad\\update.txt");5 b2 d7 B- |9 p
  421.   if(UpdateLocal.size()) return TRUE;
    # K' S; I  }4 R: c) O
  422.   else                   return FALSE;
    : `# u0 m) z. v  E! a8 X' f
  423. }4 r- v4 e1 ?. W: {7 I/ J
  424. . X& J8 J, |. q+ b' `; _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! [: E( Z; m7 p- q+ c
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ; {2 s( s: t! W6 j1 `0 k, U
  427. 5 L  t! x* n0 w8 n9 B+ X/ {# _8 g, c
  428. + N9 P# }6 `8 g0 z. I
  429. 9 P% C# X$ x, b4 S6 c7 K2 M
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)% S4 _/ |6 [! w4 J% w$ g
  431. {$ p! v9 _) F. f: p: q6 _
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;6 g9 w: v( F  G" s. B( }" L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 b8 j1 @& F; @; X
  434.   {5 {( \, Q* [3 R. j% V
  435.     char szLanguage[50];  s( o% k" a! n' L) M+ X5 P2 |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" \  q7 D+ R, n( u2 t. [# h
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ' f4 n$ T/ f. O
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; X) h" s& T/ H  J- M- c* p
  439.     else                                   m_iLanguage=ENGLISH;' m& q* S: t  K  Q2 L0 A6 V
  440.     char szRegister[100];; B8 N+ R9 T9 ~% u) r' H9 P3 Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& ~0 d# V: w# P2 H- t
  442.     strRegsName=szRegister;
      L/ |- K; i; e, M$ x
  443.     char szPatchURL[100];
    : p1 b- F% W2 I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - m" o- e; b( e7 s
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - Y! H4 f7 A! C% i1 Q, I& R
  446.   }$ r6 Z% C% c5 u' C* ~. a; [
  447.   else- g7 u. Z# u' Q9 m3 B
  448.   {# F0 b* C9 I! Z* J1 ]0 Q2 ?
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    3 y" M: H( ]$ u- H" v1 I5 j
  450.     strRegsName=DEFAULT_REG_URL;+ H  M! r& R' F% {' I
  451.   }
    * B$ r8 [) G- C8 _6 S5 A4 F% j
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ) d; ^: x4 Q1 }& C5 Q8 V  N2 R# z
  453.   {
    ) Y9 Q& p2 m2 N
  454.     char szIP[50];
    7 l' |2 w" ?( I+ w+ T
  455.     char szDIR[300];
    - |4 ]) h* U# p
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 x9 D% R. }' z: T  `! s
  457.     {
    1 K& F8 X7 n4 d  k" B% L
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ; H3 K5 i- v0 m1 Q4 T
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 D0 c, U* x7 N# q( e5 E% i
  460.       strHostName=szIP;! Z- N- Y% m" p3 `$ W
  461.       strHostPath.Format("/%s",szDIR);
    2 L9 E. }+ G: E# @! o( i. X
  462.     }
    2 G" d2 S8 g( ~- N6 G  c  z
  463.     else
    3 B8 M" I) P: M# a" r' |
  464.     {4 P5 ^  g4 h! N' `9 F; O7 H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- w$ u) X7 ~" m( x! o# U$ Z
  466.       {" \! \2 r+ G+ b% p5 x* A, m7 S
  467.         char szLanguage[50];
    ! j" M# l3 o/ S2 m& k: z# r0 w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 W1 H5 V7 Q3 z# D& U; v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , q; G& @1 O( g4 X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" \' K; b" d( q: |, L
  471.         else                                   m_iLanguage=ENGLISH;
    ) F( J+ S2 K1 S) O
  472.         char szRegister[100];
    ( a$ _1 Z) Q. \" M' @# z$ j% d! m; _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( f. }2 |$ ?! ]8 }' [3 p
  474.         strRegsName=szRegister;
    : @! ]! r2 L% y
  475.         char szPatchURL[100];
    + W9 z& ?7 i  X% t% s% {2 I
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! A4 v( p. F6 y! V
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* L; J0 N- U2 F2 U
  478.       }
    5 v/ T; s  K; t- g2 G
  479.       else  a" {, Q- v+ L
  480.       {
    ; u( j+ i/ @# m1 L9 z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 F9 q9 ?& f2 ~, r+ o6 C
  482.         strRegsName=DEFAULT_REG_URL;3 L, b/ i, F) V6 c0 K5 }, C% M
  483.       }
    ( O2 U6 E7 C# Y$ f1 z4 O
  484.     }
    ! ]$ s2 ?8 {8 q3 C
  485.   }
    / R6 J$ d/ a& h3 U7 O7 U0 A; U
  486.   return true;
    . b8 [" h% p6 ?: ]. v
  487. }
      v8 I: N6 ?4 d* l5 O3 g8 R5 o
  488. 8 U0 U: L( F/ D7 C2 j( D
  489. #include ".\ZLib\unzip.h"% V" W! I. X: F/ K. i4 c
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    6 [3 e; j, J' w! v
  491. /////////////////////////////////////////////////////////////////////////////' J6 E: `3 E' C) ]' |8 ~, u9 D
  492. // CRevAppApp initialization9 y- y5 V( G% Q7 b2 [$ f: A3 t. A
  493. 9 Q# G/ v. o: d
  494. BOOL CRevAppApp::InitInstance()
    4 Z7 q% `' W' f" g5 G! V; j; W
  495. {, x' y% ?3 K* m/ v9 w' |. s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . K4 G: F+ Z, O; z! r

  497. ! Z* ~% y! E& A' K: X" G/ v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);: F0 V/ n: C; t  s
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ a5 E: H4 E' t1 p# J! {5 |3 g
  500.   {9 C- z" J7 e% @' M3 C
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");; h2 k( z+ f: C' G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 i8 M. k) g: B2 g3 i
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    . ]/ y. f+ }4 h
  504.     {
    5 [( n& _, I$ u
  505.       strcpy(szPath,szPathTarget);3 Y, Z. G& T: C- `; r
  506.       SetCurrentDirectory(szPath);
    - b5 `; n+ a1 {3 z# c) d
  507.     }5 a) u) d! W9 T" ?  G# U9 g5 B
  508.   }
      m# p6 K& m- `. w9 s' v* p) I
  509. #ifdef _DEBUG. t, P3 o5 e7 h/ l* J- G9 f4 _
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* X) p1 D* z4 v! j
  511. #else3 A4 R8 U0 \) a; M2 n+ g4 G6 n; j1 K# M
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( y6 O  P' y4 P( U7 s9 Q5 Y
  513. #endif$ X, p" t4 G! t' I1 _
  514.   {
    9 Z& Z3 Y7 ]8 k  s5 f0 l$ U$ A
  515.     char tempFileName[MAX_PATH];/ S- P! D$ z# E5 b) \  Y
  516.     strcpy(tempFileName,szPathSource);
    1 T: v/ u3 e/ K4 Q; p& Y
  517.     tempFileName[strlen(szPathSource)-12]=0;8 n# T- j  a3 z, M# v- u
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 _5 A7 E( ]! [  M2 f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    3 Y) e; c1 \2 t1 T# k; w( ^
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ( {+ O+ B' u9 \3 \9 ~7 ?
  521.     return TRUE;
    * ~6 ]6 e( _; o$ o) q: q
  522.   }' Y# e4 F3 e4 X
  523.   // Nuke 0118: Delete run.exe
    : `6 x+ |  t- c1 X* {  Y
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    , Q2 f2 @+ y" l  ~- N. _* p
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ o) R+ x4 H- K. `- u
  526.   if(!ReadCfgFile("Config.ini"))
    ' {3 B5 ?' ?: `
  527.   {5 J. N# G4 b5 e' o9 Q% p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: a/ |% X; A5 H1 g
  529.     return TRUE;
    3 o2 B$ C& z& t6 S. r# G
  530.   }
    : o! g9 `  Z! \; T2 e; t" H
  531.   HANDLE mutex;% m. p& B( ~. Z# S$ T) i$ R
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 F7 {: M: V  ~8 `* T
  533.   {
    % U! s6 `7 \* S
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    4 w" h5 M4 R( B: G( N# n% R  y
  535.     {0 [! O( T# H1 Y
  536.       CloseHandle(mutex);
    ( g5 P/ j8 V. H" P& ~7 E
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" L$ A& D+ {2 K- E$ y7 U
  538.       return TRUE;
    6 ~  Q" S6 R; q: U
  539.     }
    ! [8 N5 p; f9 x8 i* Y
  540.   }    R# f7 W& |5 X; ^( {; P( N
  541.   CloseHandle(mutex);
    % U& b) s0 A' S3 V
  542. 8 W6 U1 y, U* r# K3 S7 {* }# ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);; m- U2 M1 Q- ^! `& f/ S
  544. % r  Q  Y2 R# m  k/ }7 r
  545.         AfxEnableControlContainer();
    + k' p1 e: E! X

  546. * s/ H' j0 C- R3 t6 l
  547.   bCanUpdate=FALSE;
    + `5 [, ^! p7 {( H
  548.   dwStartUpSteps=1;
    0 r, V0 P0 P# Y
  549.   dwProgramState=AP_NOTHING;
    / k5 E! C# d7 B- h; G& P
  550. & E2 e9 O6 `7 Y- W" K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 W4 Z# Y- ?% S" o

  552. 4 Z( T+ w) h2 F' O, p) n: M' U
  553.         // Standard initialization
    9 H' O4 ~$ Q/ v; K' K
  554.         // If you are not using these features and wish to reduce the size
    ) P1 [% {  A# z; [
  555.         //  of your final executable, you should remove from the following: R& J# x/ l8 Q" v
  556.         //  the specific initialization routines you do not need.
    & }, M* b/ t' W

  557. 0 ~# [9 ^" f1 b" {
  558. #ifdef _AFXDLL
    & f. @& m0 L, s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL6 W! d% T# l% |0 Z7 |0 Z( Z
  560. #else
    1 |: \6 F1 {4 c/ e$ ~1 F
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ( R( c/ w. K9 a2 b& p5 o$ H
  562. #endif
    " N8 C* M; W1 U1 I4 A# R
  563. 1 j! J  b5 K1 D0 R, q, u
  564.   dlg=new CRevAppDlg;
    # m$ h) [0 e( s- P( [. p" L
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    % T0 W, M# v: \' P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( Q# u: J% J% t9 s9 l
  567.   m_pMainWnd=dlg;
    7 u; A% B6 p" s, [7 h

  568. 2 B( `' b2 L3 H9 l- u$ G4 i+ y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);  u, l& x' d# B7 w& p

  570. . T5 ?8 t7 G+ c5 e5 i6 c7 p
  571. //  GdiplusStartupInput gdiplusStartupInput;" Y1 V# U$ l# D2 Q7 H# Z
  572. //  ULONG_PTR gdiplusToken;
    2 k( r/ s# F1 ]5 V& l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& U) M. _$ H7 H# E

  574. # D" Y/ [7 J* M+ N7 p# V
  575. //        CRevAppDlg dlg;
    ) [, N& w. m. v
  576. //        int nResponse = dlg.DoModal();& `, P# i5 @' {  q6 Q1 J! e; }
  577. //        if (nResponse == IDOK)! W1 O* _. b9 O7 P* H# G0 \
  578. //        {4 X! C6 s4 x0 j: _$ H
  579. //                // TODO: Place code here to handle when the dialog is5 x6 [0 T/ S' x: g( h
  580. //                //  dismissed with OK
    8 ]8 m7 c$ ^% [0 h4 `* j
  581. //        }; h+ a% z6 x4 }4 E  `  n: Z0 Q" ~$ u6 m
  582. //        else if (nResponse == IDCANCEL)
    + Z6 k' C+ T  K, N
  583. //        {
    ' p: s' n( R! F, |+ {
  584. //                // TODO: Place code here to handle when the dialog is
    0 ^- h' l5 E$ L& E5 y
  585. //                //  dismissed with Cancel
    : u" o6 _8 U! W$ o7 j! I( Q
  586. //        }: s+ H% Z) Z/ U" @( N) ?$ |+ `  q0 e
  587. 3 D% r, f  v! w) j; E) [# w" E3 X
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , r4 y& N2 ^8 D6 x
  589.         //  application, rather than start the application's message pump.. \) H0 C3 Z, [, X
  590.         return TRUE;, g: G2 j, Z, L3 k, z+ a
  591. }
      y8 F5 e' K/ f9 t7 |$ F. o

  592. - c$ W2 S8 [5 f# o, q. O6 n3 [
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / O/ t9 s8 _  ?4 H% N" k
  594. {
    ) _. U' C/ ]; w2 r
  595.   int i;
    6 S$ {/ V7 D# J: j& w/ c& f
  596.   char *szRet;
    7 N9 k, i* [( M" r' |" i1 R
  597. * m% c' v; H( B; U7 F
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ O# p/ E8 \, e* }
  599.   if(sztoken); i1 ^) q" d- F1 c# X+ Q/ k' B
  600.   {# l! f% [4 b+ A. M# @# h
  601.     szRet=&sztoken[itoken];  C1 K: P4 c8 Z/ b, _6 [
  602.     while(sztoken[itoken])
    ! e0 z. Q# X- w& p2 A( D. A
  603.     {
    0 P9 c; V! {3 L; L/ b# S: H
  604.       for(i=0;i<(int)strlen(token);i++)
    & @' R2 k# a! j) n
  605.       {
    % q3 O) X4 L5 q+ L) w$ i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ R( C- w: x6 `
  607.         {8 {- [+ i5 G& J+ A; x' I
  608.           sztoken[itoken++]=0;
    & L4 o8 j- H0 A& ^" G( A; g" x  z
  609.           sztoken[itoken++]=0;
    * q2 t$ J5 O5 u
  610.           return szRet;- [& p( \- v; \& h# a% p6 {
  611.         }( S& R( U$ N, d6 B* K* w# P, _5 j
  612.       }
    1 V4 N. R! y. Z7 y( W
  613.       itoken++;2 i4 p$ d2 g1 v; s0 v) _& h) v1 M
  614.     }
    5 Y9 a% y% j( q" ^1 h* Q& \
  615.   }
    3 q' \, D$ b6 ^! L* r/ F
  616.   return NULL;
    $ d, m& }: I3 ?6 s' A( }) h
  617. }
    & s1 H0 N; [, h& U4 \2 d
  618. * X+ w, \: c. c$ G' P. C, _. v
  619. void ProcessProc(long Total,long Current)! X: h' o) Z, t% h2 S7 E/ h
  620. {" f) ?  H% x- {1 I/ z, ]  |/ }
  621.         MSG msg;
    3 Y, _5 B' f, U9 h# t
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ c" R3 A7 T+ m
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 n7 p- n3 S1 B
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 s, j( X( s; k% t; t; g
  625.         {( N6 H4 B  E! M/ T/ K) V/ F* j
  626.                 if(!GetMessage(&msg,NULL,0,0))+ E. {6 i' p- _) q6 O6 Y4 x
  627.                 {
    * d  D1 r4 t4 Q) j$ t/ M
  628.                         return;
      Z; f7 |% p2 j9 x* D" E
  629.                 }7 Y; e' F1 \2 j
  630.                 TranslateMessage(&msg);
    3 C  s3 }3 O0 d, }% z( w5 A
  631.                 DispatchMessage(&msg);" T' D( a* X/ z/ Z3 G5 M$ k
  632.         }       
    / y0 W  e0 t, X  z# Q
  633. }
    # g& g* M1 b1 _6 m) J

  634. 3 f% V/ c) y9 N: m
  635. BOOL bFirstChar=TRUE;
    0 Y4 Y/ ?* |- Z4 i. z
  636. 7 o! Q( L( W8 `2 \/ w
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 C9 Z  C9 F( D, ]. Q
  638. {  h; L+ x/ G7 e9 g2 u( J  ?
  639.         // TODO: Add your specialized code here and/or call the base class  t9 ^' G7 K) }7 q- ^# H
  640.   switch(dwProgramState)
    ' {9 G6 Z0 F) Y4 {; h
  641.   {
    " w+ o; e+ G- S! T* D% i2 z
  642.   case AP_NOTHING:
    ; ?* Q+ c* [) v5 z3 d/ p
  643.     switch(dwStartUpSteps)
    / k, C+ Y& X5 t- E+ e! v
  644.     {
    ; x# G; V4 L0 |) b
  645.     case 1:. f% g4 s  D3 p
  646.       {
    . C" n: Q9 O2 s  \
  647.         int i;
    1 q) W3 c* y, x' S* r+ H0 N
  648.         CDC *pCDC=dlg->GetDC();1 }6 Q) N" f$ z9 i
  649.         HDC hdcwnd=pCDC->m_hDC;
    0 \% t6 B3 D9 S; Z
  650. //        Graphics graphics(hdcwnd);
    ' V" w" g/ C/ P6 ]$ @: [
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" b( q) U+ {+ L8 r3 M
  652. //        INT iWidth=bitmap.GetWidth();
    $ g9 @6 Z+ @* Y
  653. //        INT iHeight=bitmap.GetHeight();
    * O, d' O6 w- |
  654. //        Color color,colorTemp;
    , S+ u5 c, `! F1 \# {
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & R2 L* V% \% ^2 I6 q" s/ X
  656. //        {. A" V, ?) n# C2 n, [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    / z, ^2 z2 q; G1 V' M
  658. //          {
    $ W2 h  n: Z7 m! Q5 F! h" _+ @
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 `+ ^+ c# L) C. A
  660. //            colorTemp.SetValue(color.MakeARGB(- j- \) Q0 k; R! V$ C8 s* w* w* S
  661. //              (BYTE)(255*iColumn/iWidth),
    ! y: z+ d% b; d
  662. //              color.GetRed(),# K& m7 ]' ?7 U0 b' w, F3 r+ C; c5 e$ q
  663. //              color.GetGreen(),( Q; C# z0 p8 U3 R7 |- F
  664. //              color.GetBlue()));
    ; U* a# p, w; i9 ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    # Q1 q, a& s3 a8 n4 D( b% c$ q
  666. //          }
    * K2 Y" w# P( r( d: B. D& Z& i& a; N
  667. //        }$ s' R" x3 K/ [2 y3 @" d
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ( ~+ K% _- {/ B6 P0 [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & h+ w6 U$ i6 u5 a. f  w0 x
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 @# s8 d) B/ {5 T5 Q5 b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 U* M! p: o9 x8 X2 V
  672.         for(i=0;i<240;i+=8)
    / O  Z! H" ?" O3 R1 s5 v2 E! h
  673.         {
    ( f2 U! d' }  o+ d
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      ^8 ]& f) ]* U, G4 L
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ H' {& I9 N7 H/ q  }$ v0 [1 v
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " Y( ?3 \/ m7 U* d3 k/ p" z; Y
  677.           Sleep(33);4 }0 O- }; o0 _# m  F+ E
  678.         }+ ~& U) o" @3 T) V+ L; R6 V
  679.         Sleep(1000);
    4 A2 x( s7 U) n" @! Z' V; u
  680.         for(i=240;i>0;i-=8)
    " f, j$ G$ x7 d, _- y
  681.         {
    + Z, ?0 c% C6 u/ m8 a
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  R$ D& u* N. Z  v! }$ o
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, L7 _3 H: M' l% n4 S! }: \& p
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. g2 Q6 n6 i; ]) f  H6 G
  685.           Sleep(33);
    ! ^, Y, ]. f9 E  [
  686.         }
      R  s5 `. m/ ?7 {- g) [0 \0 K& Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) y1 O. G. y7 Y' D3 W$ u
  688.         dlg->ReleaseDC(pCDC);
    " K0 I& _) l, h6 E$ k5 T  G
  689.         DeleteDC(hdctar);
    ; C3 v6 M. U& E7 l/ t, J1 S
  690.         DeleteDC(hdcsrc);
    ( ~4 S. n0 J9 S! C& a9 P0 t0 l, a6 F
  691.         DeleteDC(hdcorg);; z% ]) Y2 ?5 g) `% x
  692.       }, Q& t: h! S7 a3 Q: j
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    " b5 G  v1 `  d! F7 a9 e
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    " ~) Z1 k: `" |6 u( }
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: |( B+ B$ P' @2 `
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");! L7 F1 \6 R0 @1 K
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ q( j1 y2 D1 q
  698.       if(!Dn.Connected())6 `) z! D4 B5 K* M( _) B% Q0 z; _- x
  699.       {
    & o" X) ]( v5 W9 f. ?8 o- o
  700.         dwTotalFiles=1;8 ]6 L# G. V, b) r5 Q
  701.         dwDownLoaded=0;
    ( C! p8 v, b1 F! p; ?# v2 w
  702.         bSilentStep=TRUE;
    ) {3 G6 ^; F9 h1 T  Y
  703.         bCompressed=FALSE;
    * H# U1 c/ _( G7 C4 q- L( x/ P
  704.         strExtLocal.Empty();. U7 K6 f' ~# V6 E/ h4 J5 P
  705.         strFullName="readme.txt";9 W* C7 d4 X% U. `% f
  706.         dwProgramState=AP_CONNECT;
    " L; h1 ]) r7 {$ y$ _. I+ k
  707.       }: h0 S% ^. l! t- C
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();, v* `2 Q2 a6 k& N
  709.       dwStartUpSteps=2;& w% w; C1 O4 Y9 i. G2 X/ k' @
  710.       break;, t2 w# j# j* \0 e* p  Y2 \
  711.     case 2:
    / X. I- \( R9 x
  712.       {8 B0 s" N/ J3 f0 r* o
  713.         int iEOF;1 V$ j  @. Z5 j  ~" S7 _* H
  714.         FILE *fp;  N' l9 b. \7 o$ T
  715.         char szString[512];2 B" I, l+ u+ }2 Z* P$ A8 i) k5 I
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    * P' w$ N( q- Z  E  [+ p: |* i
  717.         if(fp)2 q* Y/ a) z  P7 t. a
  718.         {" V: B* W3 W% X, M
  719.           do" D* z% _" W. z. _3 Q/ a
  720.           {
    : w8 u$ v; @. Q- L/ g% Q5 m( W
  721.             iEOF=fscanf(fp,"%s",szString);2 A$ C. W9 `; `4 G# C& |" X8 q7 E8 i; n
  722.             if(strlen(szString))0 o  I- Y: l$ f! q3 O
  723.             {0 Y' g- z" h7 g( l1 T
  724.               if(bFirstChar)4 p+ H+ _8 |7 ^
  725.               {
    : t& e0 B! v. n  `
  726.                 bFirstChar=FALSE;
    % K: Q7 j6 e; g
  727.                 bConnectIsBig5=FALSE;
    7 t( K$ {6 c" A  {7 j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 ]0 V+ z* h# c9 c4 K5 a
  729.               }
    3 H! \0 ]- [8 |
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 S) f; Z* K2 _, V' Q, h, v- [3 h$ q
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ( G* |' ^% Z& ^+ I$ M' b+ a
  732.               dlg->m_ListText.AddString(szString);9 i# y" X% e5 V$ t
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; @, @, ?! K5 K. f( E
  734.               *szString=0;6 H2 k7 D1 T8 P3 n$ J) M4 Y
  735.             }& g5 E$ F/ A% r* F$ c
  736.           } while(iEOF!=EOF);$ u+ {7 Z* D1 ^) |' Q( Q" @; D0 G
  737.           fclose(fp);: r* s$ b: v0 R% w
  738.           unlink(".\\DownLoad\\readme.txt");' A( }7 A- {2 K& M# V
  739.           dwStartUpSteps=3;$ ?5 ?0 L( |( n/ h! ?4 I8 S
  740.         }- Y/ i* X% g2 F* H
  741.       }
    1 m0 s2 y" t7 B- S/ r" A' S# e
  742.       break;4 L8 E1 {2 D1 b/ g$ y) o6 Q0 p% I
  743.     case 3:
    0 u7 d2 {9 z/ D! m
  744.       if(!Dn.Connected())( K: F- d; w& w8 ^  r% o; ?
  745.       {5 C9 l5 s, N7 |6 }. z- ^
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    8 U% f) Q' g3 P8 L5 d, E. X& ~* ?
  747.         dwTotalFiles=1;
    / w7 h1 K- I, J1 R1 @  g9 e
  748.         dwDownLoaded=0;% R0 a+ s, ^& p
  749.         bSilentStep=TRUE;
    2 m6 {  I8 h( `7 E
  750.         bCompressed=FALSE;1 [% Z4 E; i, N$ Z- M$ N: f
  751.         strExtLocal.Empty();) ], l% n# J2 H5 ~  w
  752.         strFullName="checkversion.txt";
    3 M1 o' e& s) W* t9 O
  753.         dwProgramState=AP_CONNECT;
    $ b' w0 r7 f: s. d5 p$ ]
  754.       }- d  [  V7 m' Q
  755.       dwStartUpSteps=4;5 u) |( [" W0 L' g; {1 c
  756.       break;3 _! A$ O$ [6 h
  757.     case 4:8 c$ f: P/ A" Z2 }& [5 V
  758.       {2 s- @/ \) T0 ]9 ~9 F
  759.         FILE *fp;
    2 X/ J2 k4 Z  ~7 z4 k3 q
  760.         char szString1[128];8 _& L) |5 u# H. P6 Z
  761.         char szString2[128];4 `/ w$ `9 G2 V3 f6 G( s" V
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");; z' v( r1 R& d5 Q! R" Z. E
  763.         if(fp)
    : g9 O" T8 d0 G  t- ^2 Q( w# I7 f4 {
  764.         {$ L$ x) S6 O6 U# x
  765.           fscanf(fp,"%s",szString1);: L, j' M3 G/ g  u' Z
  766.           fclose(fp);. {8 B. X/ k& @2 u) p" y9 @
  767.           fCheckVersion=atof(szString1);
    & r8 z7 g. E' l( h( e- ?1 t9 E4 Q  X
  768.           fp=fopen(".\\checkversion.dat","r");
    4 H9 z8 B& m. G6 k5 q7 t
  769.           if(fp)
    % F6 b9 o+ v) g- j9 S2 I) \6 w
  770.           {: _* @: Z9 Y7 `2 R
  771.             fscanf(fp,"%s",szString2);
    2 X* }+ ^1 |2 z" Q6 b
  772.             fclose(fp);  I# {( G, p) J" x
  773.             if(atof(szString1)!=atof(szString2))' u! t, C! [) t" \% e
  774.             {
    5 O# f4 y6 @/ `
  775.               if(!Dn.Connected())
    * V* u9 c' R1 I3 I7 M
  776.               {/ H6 Z9 Y+ t0 T' z
  777.                 bFirstUpdate=TRUE;
    / Y" O+ c( R+ v  S
  778.                 dwTotalFiles=1;( M) S, }* @  W6 V2 T
  779.                 dwDownLoaded=0;% O2 i% ?  |" W: l
  780.                 bSilentStep=FALSE;$ y7 G: l1 H1 N) Q% l" y& Q7 j
  781.                 bCompressed=TRUE;% L2 d# c: H" k( P  L$ b( j6 c, m
  782.                 strExtLocal=".\\DownLoad\";9 \' i: A- |1 [' e7 n
  783.                 strFullName="update.txt";
    ( f+ l4 f) b! X) U
  784.                 dwProgramState=AP_CONNECT;2 Y0 _7 P( k7 m# g- V& D7 Y7 L* u
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 L5 k' [' g( n4 J$ G
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 X4 {' @; |1 R* A6 ?+ }9 Y7 X/ J
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ z" A) a$ z3 S
  788. ( c1 f9 x* z, P1 z- B& N' e6 A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 o) e. [* f. \$ T& S
  790.                 unlink(".\\DownLoad\\checkversion.txt");; h0 v! o0 l) }& ^% w" [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 m* |1 c7 ?2 n6 h0 |# q% ?. G9 B
  792.                 {+ U2 f( Y4 v0 [; ]  o" l, [8 }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 f/ z' t7 R! n
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * K4 @- R5 z- D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 I$ v! }0 R2 p. I* M
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, r" Y4 |4 f' N! P6 @$ q& ^* L
  797. - s  M+ w& r* E( T; }% G% b
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 o2 p& r6 `% J! L3 ~
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 M7 H  V% @( ]  B) z& W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    / u: o$ m. j+ z# Y2 p
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & _7 d3 r4 E* u
  802.                 }& N) o, d; S( {' `5 k( f4 X
  803.                 dwStartUpSteps=5;) V$ l, j$ W! L- E5 [) ]$ a& x
  804.               }
    % {$ u) z' E: i2 O5 D
  805.             }4 C  W( c. ?0 j. I6 n/ s
  806.             else& p8 l; I6 F  H1 }6 M) k
  807.             {
    . g& p, ?* z' r( \# X9 Z
  808.               unlink(".\\DownLoad\\checkversion.txt");  x; e& O) J4 ^2 \; h
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% ]$ t! c* @( H/ Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : ~: f9 Y, y6 L% h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");9 O) ]6 S% `+ N4 N9 I$ s

  812. ! D2 S4 n7 |+ e0 y( U  n) p7 u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* E  q5 t8 q2 V
  814.               dwStartUpSteps=99;! p, ?) o0 e  Y! |6 _0 u
  815.               bFinishUpdated=TRUE;! Y1 L0 ?7 Y8 b2 ?5 v" T2 ]
  816.               bCanUpdate=TRUE;
    6 t  q/ R4 n! T% ^
  817.             }( [2 V0 Q! d: p9 ?9 V4 s3 x3 \0 T( n
  818.           }
    $ s  u$ F3 N& K1 i
  819.           else
    ; N+ f* r. }  b
  820.           {" Q5 Y2 b( w0 U7 B  O8 b, U- M
  821.             if(!Dn.Connected())9 M6 D0 E% V+ ~7 I5 {5 E
  822.             {
    ) Z  _! F/ n- _
  823.               bFirstUpdate=TRUE;* k( k  b+ f6 w/ B: ?
  824.               dwTotalFiles=1;
    / A& {  g) v) U( Y& {
  825.               dwDownLoaded=0;( U6 X9 }) J; k% P7 _
  826.               bSilentStep=FALSE;
    ' m" d( f4 K1 Z5 i+ L
  827.               bCompressed=TRUE;- j- W# j: x5 a) C! B
  828.               strExtLocal=".\\DownLoad\";
    1 j: R& {! @( M' g0 F
  829.               strFullName="update.txt";+ U4 q/ D$ p. r; b- B
  830.               dwProgramState=AP_CONNECT;
    5 ^; k  s4 V1 _
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; K+ p& Q" e& v# L: b3 v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ f9 {6 z4 ~- _# c7 w5 e* I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * N4 I6 S, r: E$ W" ]
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 f# Y$ c6 W0 \* s3 g& Y
  835.               unlink(".\\DownLoad\\checkversion.txt");
    " Y, o9 s2 y% ?9 S3 Z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): S+ R- `" d* B9 r1 u0 X
  837.               {
    ' C2 I6 ?1 Q% s! ]' v% `. l7 L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 h! Z# v& A0 u9 s' T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    9 n3 b4 L1 [5 l
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: J% j' F0 p1 S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * N$ J* `, q0 ]8 H! C: n# ]
  842.                
    " O' `% N* h5 U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 V  x, G+ g8 D1 E8 t6 @( {2 C0 b
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: }! u0 u; i% p8 y. k8 I* k5 t
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");1 H9 X4 ]8 ]9 E9 I3 N: w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 K5 C; f7 j7 o  }/ G
  847.               }
    / ?+ R8 O: R9 ]3 ]+ E6 z
  848.               dwStartUpSteps=5;7 W& y1 p$ f! w: I$ d; z
  849.             }
    6 G3 I0 F: ~) \
  850.           }
      \# h& z; G; j. Q
  851.         }1 F. k1 H% c' O2 b/ _$ p
  852.         else
    0 m1 t% Z' A- y
  853.         {/ P% p+ Z+ P: m+ X' e5 a+ K% _
  854.           dwStartUpSteps=3;
    1 D; g6 M: ^  ]5 _' Y2 F6 @
  855.         }9 o; @3 p/ e2 t  D
  856.       }$ V4 |: t$ B# W6 }, e  N
  857.       break;
    & o# m: F- `3 k4 k  l
  858.     case 5:: N5 R4 ]4 x* I4 i& c8 ?
  859.       {
    . I1 V  U& H# p  H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    1 M2 t; N8 p# J: a: h! ~2 ^
  861.         {+ E$ C" M- F* G  S) c$ h2 D/ j
  862.           int opt_overwrite=1;
    4 ~3 n; H# }0 P; H; w0 ], z$ o% E8 e
  863.           int opt_do_extract_withoutpath=0;% t. q  z$ _" V* _7 F2 B! u- B1 |
  864.           unzFile uf=NULL;
    ' P# n% [0 p2 I7 R2 r  v

  865. " T% P3 p' J2 V& p: c# d
  866.           uf=unzOpen("Wsa.zip");' L$ U$ i+ T) ]8 j3 c5 \) n) I
  867.           if(uf)
    ) u$ x& l/ c  v; ?1 Z$ I+ P
  868.           {6 S3 X; b6 N: C  ^  @# H
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - |2 c9 V, a1 L/ ?1 u
  870.             unzClose(uf);  K& d4 P$ ~/ W8 ]2 x0 |
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");) d) w" Z0 Z7 ^) L8 w' ?0 M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, i+ ~( ~6 Z& s& ]' s6 I0 C
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    6 F* c2 s3 M% l
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 ?+ f" o' i; i) O6 V" c
  875.           }$ H1 ]' y0 M/ T0 T
  876.           DeleteFile("Wsa.zip" );
    3 S& n0 n0 t+ u( w
  877.         }+ x9 _1 T, o. R/ a* a3 ]6 m
  878. ' y# v& b# ?( X1 f% u, ^8 C
  879.         if(CheckLocalVersion())
      J/ F3 [4 [) a% d' \
  880.         {+ I; x/ ?0 Q& g7 F
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");4 u& s7 Y: y- ]3 l# R: _' E& J) b
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    / V; P# D0 b; P. B9 H8 `$ |% ]
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");8 y# W# }( z) n3 T$ v8 y0 K% t/ ?- c
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 Q5 M* Z0 c. U0 s6 j; v, d8 c$ N. l- r
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);( @9 z6 v  Z/ S7 I' f! }0 x! \- T
  886.           dwStartUpSteps=99;
    4 Z" ]1 ^3 v$ L2 L1 f
  887.         }( W3 `0 h. R8 b! Q/ q7 x1 S
  888.         else2 X+ P- P7 l' g- d. M
  889.         {! T) ?& e" f: N1 Z- v2 p8 A
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    6 b& S. @  O6 {5 T+ A3 e
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; P% k2 t7 g3 l$ h3 z
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");: F! O  y* ]4 v0 E0 T3 _1 L

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

. ]& P& j8 r+ P! t7 n! ^% n

評分

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