CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
- R( v* l  @3 a
  1. / RevApp.cpp : Defines the class behaviors for the application.
    # O) t/ O! ?( m( q2 w0 X5 n
  2. //) _) I0 n" d4 Y( H8 _. Q( u
  3. ! U8 ]0 C! T# ^4 ]" t
  4. #include "stdafx.h"
    0 R. X$ c- `9 b% o
  5. # ~" s$ G! {: l
  6. //#define UNICODE7 |6 F" |/ {& n
  7. //#include <gdiplus.h># N" Q5 }$ a0 K! O7 Z3 k: F8 f
  8. //using namespace Gdiplus;0 a2 n/ T2 Q7 y( s5 d
  9. 8 M* S0 x6 Y) ~- M6 p
  10. #include "RevApp.h", m8 w: o% N* o% w/ `" T+ O4 H( R
  11. #include "RevAppDlg.h"$ `7 [$ _; m3 W3 S. c9 ~/ R! c
  12. 1 j' W( p1 o5 z1 m
  13. #pragma warning(disable:4786)
    , @9 p) `! n7 h, g
  14. #include <map>$ I: I& \1 n- U5 G4 a2 g
  15. #include <list>& `9 l4 n4 v( e4 L
  16. #include <direct.h>- H( p6 v' g2 W  E* T5 h5 y5 j

  17. 1 f4 e" D- {7 i
  18. #ifdef _DEBUG
    6 ^* j" i; P- X: n8 @
  19. #define new DEBUG_NEW
    2 t! ^* L5 l% q" W
  20. #undef THIS_FILE
    4 l' ^' Q* I0 n( F. x6 x1 S
  21. static char THIS_FILE[] = __FILE__;( L: b4 J8 y+ G3 h' D
  22. #endif
      [- Y. U0 `& W8 i! \2 d
  23. #include "SkinResDef.h"% d2 E" Y( d$ E
  24. #include "ChangeBG.h"
    1 X7 ^) b7 G* C7 A; N( D
  25. #include "AFXINET.H"  C8 w) M7 b; Z9 ~) R
  26. - I2 z* n) Y+ e3 j
  27. #define TRADITIONAL_CHINESE 0
    4 _8 `: n2 p1 T
  28. #define SIMPLIFY_CHINESE 1
    + W6 e  |- L1 w
  29. #define ENGLISH 20 A& l, R/ o/ j2 A& A# s5 ~) }
  30. int m_iLanguage = ENGLISH;/ V# w, a/ P# L8 h
  31. /////////////////////////////////////////////////////////////////////////////
    8 k  M1 e/ B3 f; _2 _9 O9 R* i  ~
  32. // CRevAppApp8 Y( e: s0 w  L" S: ?. ~
  33. ! N9 G& |0 O  ?, `8 O# J; K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# w! u' h2 a2 w% r/ j3 y. K! K  x/ h
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      i' A9 ]* t) Q7 V$ g0 w" j  R5 a
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    # q$ _' B* e3 T- K0 N+ o! K. f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 v* _# S0 _' R! T" ^9 S
  38.         //}}AFX_MSG
    ( C* R" k* Y3 ~# q, S! T
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). G. }9 _9 y" d: t. n# ^. k
  40. END_MESSAGE_MAP()
    / Y8 Y3 `6 L5 A+ w  E2 k
  41. ; G+ U  T/ `# O
  42. /////////////////////////////////////////////////////////////////////////////
    ) A9 x! `, E9 ?; l
  43. // CRevAppApp construction
    : q* x: q1 d) d( y" F8 Q- Z) R
  44. 3 Z' ~! |1 \; j% {" [5 |5 J, N
  45. CRevAppApp::CRevAppApp()
    4 e0 J4 K9 U* K: B
  46. {
    5 d- _5 A$ J. r% e
  47.         // TODO: add construction code here,& R2 B+ f9 N" A1 W5 }9 T& |
  48.         // Place all significant initialization in InitInstance& e9 q* D; h+ Z0 x: M
  49.   bDisplayIsBig5=FALSE;
    + o3 _7 \; T  [1 Y
  50.   bRestartUpdater=FALSE;/ r: J& r+ d. T- h9 o  |+ e
  51.   bFinishUpdated=FALSE;
    6 v, `+ H/ ^5 K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    2 F  u1 }) Q4 z7 a. ?
  53.   InitChangeDataBig52GBKS();0 D1 k! U! G! M+ {$ q
  54.   InitChangeDataGBKS2Big5();, I' c; t' o' W) k3 a
  55.         //% n2 E$ V& B' L& b
  56.         bClickRunExe = FALSE;+ u+ c  n! t2 G# w% r* E1 a0 D9 z
  57.         //2 b8 j9 i( {! c+ ^& ^5 V( A7 r
  58. }; Z) O+ N* _. u5 o. t6 ?* {4 B; n3 L

  59. $ v) ]- W8 o. k  X
  60. CRevAppApp::~CRevAppApp()
    # g9 |' R- l, y4 q8 ?! H1 ^) O
  61. {
    , M2 z! z# Y/ k3 U
  62.         // TODO: add construction code here,
    0 ^& l+ o. B8 r' q* {' O/ R+ O0 v* m- ~
  63.         // Place all significant initialization in InitInstance
    0 L( c6 Q. a5 }4 h% W& @8 A6 v, S6 V8 x
  64.   EndChangeData();
    9 S( I& p/ |  g2 @: b
  65. }1 L) T2 ]; G! `. Q! |) J
  66. & _9 S: D6 J; b  J4 c& x9 _' I0 C
  67. /////////////////////////////////////////////////////////////////////////////
    " Z) t6 d: D6 |" E* ?+ E
  68. // The one and only CRevAppApp object
    , f, u. ^9 m. T" A4 u- b

  69. % C4 _+ S0 L! X" _( f
  70. CRevAppApp theApp;) W  M6 \) ~! _: x

  71. 1 E# {. h* }' k. m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    6 `& {9 A$ V7 q* m& Y( `, _7 f# [
  73. {" k( S) h& R5 Q8 V, R$ Q
  74.   int iEOF=0;
    1 E0 m3 L8 f, K
  75.   char szTempName[MAX_PATH];
    $ p6 Z( @* {* J  {% ^6 p' J
  76.   *szFileName=0;: d" k& t& \3 [$ W) J" f
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ u6 m0 c+ h9 @+ n( U
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 p/ @& m; S! H3 \1 _
  79.   {7 h" d* P& A7 z2 ~. \3 g
  80.     strcpy(szFileName,&szTempName[1]);! Z* l' N" O( h" u" E
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)! m5 S& g. ^2 M5 E
  82.     {
    ' `+ h- a3 B0 z3 J3 Q
  83.       iEOF=fscanf(fp,"%s",szTempName);- _( h9 `3 [  _
  84.       strcat(szFileName," ");2 j0 l! p3 |+ z9 v1 l2 j3 W+ h
  85.       strcat(szFileName,szTempName);+ h+ J6 _4 e5 ?. _$ j+ Q. n
  86.     }
    3 F; D. c4 E& ?. J* ^8 [% y- g1 h
  87.     if(strlen(szFileName)>=1)% }2 [7 \: {2 @
  88.     {
    2 A1 O$ Z' R+ O* l3 Z
  89.       szFileName[strlen(szFileName)-1]=0;. {% g! e3 }; T) I$ M  d
  90.     }3 t5 }' ], d- }6 ?
  91.   }  u0 T6 c7 {( W4 Y3 a
  92.   return szFileName;$ J! o! P" [3 d8 y8 m3 }5 i
  93. }
    1 g4 O! E" k3 n! ]: o6 g; G
  94. + }) y. {/ a) F5 i* i+ f& T7 Z8 P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
      _* o- I( Z! N/ ]" y" D7 M9 f
  96. {
    ' @; W8 s$ Q: Q( b
  97.   FILE *fp;
    1 W0 w+ X! g+ }$ N
  98.   char *key=NULL;4 C# p0 o. S! ]4 R
  99.   char version[MAX_PATH];
    , F0 s: B+ P. @4 b; y2 w) e- m
  100.   LPUPDATEFILE file,olds;) k1 \! b  ~6 m3 }
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" K# s& E6 C* c1 \- x
  102. 7 j% w$ h+ e; P6 J" O
  103.   UpdateList.clear();
    ) i5 t/ E" }6 W1 Y
  104.   UpdateFile.clear();  @  w( l$ j# b& i+ F' m5 t* B
  105.   if(GetFileAttributes(filename)==-1) return false;
    - ]4 r1 f: I( H2 E+ }
  106.   if(!(fp=fopen(filename,"r"))) return false;0 J  F. D7 D% W) D# V
  107.   fscanf(fp,"%s",version);
    % \0 F; X) b& u+ c5 V
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ w; F% J2 j  R( C
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ( X4 `' p/ s2 W+ E  v
  110.   {
    $ B" |% Z: O+ L3 k7 L* s7 P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& m- R2 H1 M7 r! X9 [: K; z# v
  112.     fscanf(fp,"%s",file->path);0 H3 c' F' }7 ^: l& M7 Q  i8 t0 U
  113.     ReadFileNames(fp,file->file);
    * R. ]; [  {+ h& b
  114.     strcpy(file->full,".");, s! E- O, K8 ^: z+ W
  115.     strcat(file->full,file->path);4 o2 X8 o0 v* J$ n
  116.     strcat(file->full,file->file);
    4 Y# q1 N& a7 e- a/ p3 p+ d+ Q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): x; j9 f. M' W& O6 |9 s8 {# `
  118.     {
    ! l1 |; S* t' P) Y
  119.       file->vers=(float)atof(version);
    ! v  C' c5 \/ i
  120.       UpdateList.push_back(file->full);* S8 i& F/ U5 T! J: E3 S2 m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));) g- g6 o* f% t3 [" x
  122.     }( X6 v& b3 Y  z- p
  123.     else
    2 |$ u  E: I- `' B* a
  124.     {
    2 G9 L' C8 E4 u9 ~  ], D* c
  125.       olds=(*p).second;
    1 m8 w$ [1 _3 L: g, T& i! c
  126.       if(olds->vers<(float)atof(version))9 Z9 n1 S1 ^, d6 n. M; G# h
  127.       {) W' D7 v* Y5 g: x
  128.         olds->vers=(float)atof(version);
    5 f& P+ ?; z1 {- S; m. B
  129.       }
    8 f$ e4 X! v: P( K* L: {
  130.       free(file);! y$ h0 \5 S" J' j3 d" x
  131.     }0 O5 [0 K2 G( U: E; `
  132.   }9 `0 t9 u% u# R0 n& g/ W9 w
  133.   fclose(fp);# G9 [. c( J& P" |0 y
  134.   return true;3 a3 k# u: ~/ M8 {: D
  135. }
    - e" O" j, E  G- l4 U
  136. ; u7 k. `, `! n/ H: H; Y1 o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)5 O" M* S2 w7 g* Z
  138. {
    ) `  G+ l# R6 P2 N! x1 J2 K' g
  139.   TCHAR  szFull[MAX_PATH];+ c  \+ a$ E3 x( s* Z
  140.   TCHAR *token,*inter;* [; W& }0 q  e) [! g
  141.   *szPath=0;- B* I6 q% I' f# a3 t; g4 [
  142.   strcpy(szFull,szFullPath);
    1 g( T2 J1 o) ], G
  143.   token=strtok(szFull,"\\/");
    & M3 r: A! [* O8 r  h- G6 w5 u& s9 _0 w
  144.   inter=token;5 [4 d- J% u! ~* S. Y; @! Q3 v) W
  145.   while(token=strtok(NULL,"\\/"))
    9 W3 _0 d- D; j  z
  146.   {0 w9 @1 `* ~0 U( f% j
  147.     strcat(szPath,inter);
    1 U: {. J" ^, i; |
  148.     strcat(szPath,"\");. R6 g7 t9 e9 P4 b: G
  149.     inter=token;
    , T% d$ D% l) m$ R9 G* ^! v6 j
  150.   }# w7 b* g  p  H7 O
  151.   return strlen(szPath);
    * S5 M, t" S( U
  152. }
    8 _  R9 o8 l/ U
  153. ( I; _/ {7 \7 v/ o7 K( a
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)$ _2 A# I5 n. u* P6 @; X
  155. {: h# u- m  W' k+ n0 T; v! K0 q1 }
  156.   DWORD attrib=GetFileAttributes(Target);$ w5 ^( h9 L# r. u
  157.   if(attrib!=-1)8 l2 p$ _+ o: _! @9 r2 w& j
  158.   {
    6 x$ C4 c0 l; ]3 f( V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))( k5 P& a0 _7 I$ m1 ^0 @" {' }9 |* m
  160.     {
    . u  s. c0 M, n- s
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) L. J! m+ h6 k+ c" s  G
  162.       SetFileAttributes(Target,attrib);9 E0 c1 G- P+ ~- n& J
  163.     }! c; I2 R7 V! v$ ?& w* `5 u/ a
  164.   }+ Y  |% D& q" Q& {* U7 X9 p
  165.   CopyFile(Source,Target,Erase);
    9 ]) t% [- R* X0 [# e2 @8 X
  166. }! b% @3 B& t+ I% G9 U5 y1 H

  167. ; J* K( ?( M: l; @' O
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    4 q) V( P7 e2 `: C. x; v
  169. {9 g# @4 P( Y0 Y+ ^' j: n& u7 B
  170.      FILE *fp;
    : P: e+ N9 N6 p! ~
  171.      char  szBuffer[8192];5 c# k5 I1 a2 [2 P# o
  172.   va_list  argptr;: w& b3 S, }) S: k& @
  173. 4 T5 `; s  p7 l
  174.         va_start(argptr,message);; X* I% W- r" x9 A" W0 E
  175.         vsprintf(szBuffer,message,argptr);) K9 Q+ M1 w* |* k: F' O! f
  176.         va_end(argptr);
    5 J* A+ C2 e' S1 U$ j. d
  177.   fp=fopen(FileName,"a");
    - Q* ]. ^; G: u3 S9 {
  178.   if(fp); t6 u( `9 N: g/ E; C
  179.   {
    / P) @; j& [9 E+ P
  180.     fprintf(fp,szBuffer);
    $ [/ a2 v8 p% x- i5 }0 O' j5 Y7 T2 s
  181.     fclose(fp);8 j6 O8 j2 q! _) A: v- M
  182.           _flushall();
    % a$ a# p9 U" x% Q9 ^4 K% J) U
  183.   }, p( c" |; d/ Y! V. R
  184. }
    1 b6 Y" U; @; a1 q5 j0 R' _& w
  185. ( g2 \4 u" k1 U4 C$ b4 w9 C
  186. BOOL CRevAppApp::Fclearf(char *FileName). p1 m: i: ]0 r! j
  187. {. d5 @/ X0 j: E+ i  C
  188.      FILE *fp;
    $ L) N$ q. ~" G
  189.     DWORD  attrib;; W/ |# D3 w5 k: `$ E$ m- R$ q" U
  190.   attrib=GetFileAttributes(FileName);
    9 M! E% f; E! ^4 y* c; T, ]. [
  191.   if(attrib!=-1)
    ) X4 x, G, n" ?! `
  192.   {" \$ ~. E- o) U( F  F
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);* Q; F" |# i: W# D  j
  194.     if(!SetFileAttributes(FileName,attrib))7 ~, W; F: F+ f$ G2 k; C: E
  195.     {9 K( N! r1 O+ U: U2 V
  196.       return FALSE;! b7 \/ z/ j6 k- v
  197.     }3 ?( V- s8 k3 T' q  }0 \6 X
  198.   }
    1 N; c1 r7 i' t" B6 L
  199.   fp=fopen(FileName,"wb");/ f% _& ?& g1 J" d1 V; M6 a  \
  200.   if(fp)
    ) L1 Q3 m* Q& Z
  201.   {
    8 G! X# O+ a! h- B0 k
  202.     fclose(fp);
    ; {0 `! J6 H8 I
  203.   }5 t' n  ]1 N9 P( E9 j2 V5 I  H$ J
  204.   return TRUE;
    , `' q4 I( O- u. K
  205. }; N% ^5 Q9 F6 E; T: d" H- v: H

  206. ' u8 J2 y9 ~) ?* J* j6 \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + t5 I" ^: k4 H' y2 M
  208. {
    & p" S, i8 v4 X% |0 R
  209.   char filename[MAX_PATH];: J3 a! ~9 }- h( M; m
  210.   LPUPDATEFILE file,olds;
    2 x) R, j5 y( d
  211.   std::map<int,CString>::iterator i;
    / M! I/ J& c3 G! M
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 }9 M/ P5 I- O- q% {+ D$ _6 h
  213.   std::list<CString>::iterator l;7 k) j* f5 C- Y7 D4 R, d
  214. / A) O; R+ h+ g  e; L* i' N
  215.   if(bFirstUpdate)
    1 G" \: A; z! F( Q8 R) B, m
  216.   {2 \! ], v/ @: D, X7 E6 r3 p0 ~% h
  217.     dwCurrFile=0;
    8 n# m6 k5 A% a
  218.     bFirstUpdate=FALSE;
    # ]8 B) b8 I! f$ P3 ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % {/ J) ^5 e4 s, u6 a9 `
  220.     {  g0 i; I; D+ v: I8 e/ S0 Z
  221.       dwTotalFiles=UpdateLocal.size();+ _& ?- T+ G/ {- k9 V$ R7 N3 @
  222.       dwDownLoaded=0;
      P0 g8 w' P  t  i) y0 P
  223.       bSilentStep=FALSE;
      R! |4 o' R2 n( d3 y
  224.       bCompressed=TRUE;
    0 v% y" T: x1 V
  225.       strExtLocal.Empty();; R+ S8 u8 j5 T1 b3 X9 h5 h; Z( B( @
  226.       strFullName=(*i).second;
    9 M& o( Z5 h" n% i  S9 O0 X, W
  227.       dwProgramState=AP_CONNECT;8 ~2 O: K( f" u( u
  228.       return TRUE;
    + F" Y2 y9 U: d8 G
  229.     }
    ! H& U. ]: i0 F1 @  |' j* L
  230.   }
      x5 `4 |3 B! S; A# c
  231.   else if(bRestartUpdater==FALSE)- F/ N" x  q1 a% X$ D9 [9 p
  232.   {
    5 O/ U* R2 Z$ E4 ~% P% Q; z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      R, p/ R1 m1 o1 d" G( H  |* t
  234.     {5 K; b" a6 q) a8 c4 R7 `  s
  235.       file=(*p).second;
    2 R. f: B  ~/ S( {4 \$ l% l6 d5 S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    # A% c6 d2 m/ s$ L8 }* A
  237.       {$ c+ g4 E! Y, q2 P; T* `8 `
  238.         olds=(*p).second;
    " b! \2 T8 r# k/ N; i& L. ?1 j
  239.         olds->vers=file->vers;% ]5 h4 W% z" T1 p# y
  240.       }0 w9 X8 ]$ X" H" }& w3 M
  241.       else
    ; b$ S. ]4 F0 K9 K& K9 G& H
  242.       {
    2 ^% v; x, ?' M& F* p: c* z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( v9 f0 o5 x% m  c% `1 `7 _8 G, g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    2 p4 \! Q2 U0 V. D  j' f( ^
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));4 U! |( D! H( g- G
  246.       }& s1 [/ X* u* N) {5 N$ T4 l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 ?  R8 }0 a" D5 z
  248.       sprintf(filename,"(%s)",file->file);
    + a7 c( b& U9 h" E
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);7 f1 p3 `0 d+ L
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ `0 ^0 T+ y: v; j/ D6 X
  251.     }
    0 f; t5 ~+ u$ F, P, t  C0 p+ o) @
  252.     dwCurrFile++;+ m6 |- y5 {  F$ L" y' J
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())5 k% E" e1 ^6 F: v) C- h
  254.     {
    : R* j7 O# k: z. j) ~$ D2 d
  255.       bSilentStep=FALSE;) L+ w, z, d: k6 ]0 j* f
  256.       bCompressed=TRUE;; e# V, U: T2 C$ }
  257.       strExtLocal.Empty();
    ' _$ K5 R1 C3 B! o
  258.       strFullName=(*i).second;. U3 }; ^! M) a* e% I' W) ?) d8 f
  259.       dwProgramState=AP_CONNECT;; Y4 \  J: Y' I+ a6 K
  260.       return TRUE;
    $ U$ g" I" l6 M4 o
  261.     }8 e. J" ]" v6 D( {" p0 e. d
  262.     if(!bRestartUpdater)
    , c8 `+ {9 r' Z  b# @0 D6 f$ p
  263.     {
    2 h$ s7 S2 w# L8 @' v
  264.       int iCurrSize,iFileSize;8 z6 X- M& ~+ ^
  265.       iCurrSize=0;
    * W' S0 S& q4 ^+ W- Z4 ]
  266.       iFileSize=UpdateList2.size();
    - W4 g5 r! C' ^- K1 J' j7 \' ]
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ l9 n  ]! S( s# h# \: m6 {  h/ {& a6 B
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; q2 w% I1 `% U
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");: P( |& K3 C, F% J
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . w+ A. M) V: k9 O, L8 \
  271.       Fclearf(".\\update.dat");
    ' c) `( H2 f9 o( `% M
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - F; u7 {5 u6 J% p
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 H  G) [( d8 f0 m# C# U5 S
  274.       {: r9 ~% K! f! V1 T; B0 V( e  X
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    9 m  c4 ^" e. {; Y+ E- r
  276.         {& t, B4 S. `" `' [7 r7 [
  277.           file=(*p).second;
    3 A! p% d5 R( O+ W0 }; [
  278.           sprintf(filename,"(%s)",file->file);
    + b6 f# [) J- ~# ]6 L6 e
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% k  Z" x6 }2 V3 O. b' b) d" _4 R) e
  280.           iCurrSize++;7 h1 D5 v7 L: a: A
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 B- x; A# G( ?9 U$ Y$ C
  282.         }1 b5 X7 O( {: r3 b( b; @
  283.       }
    ! [/ l" x2 N, C2 j: r( Z
  284.       unlink(".\\update.txt");5 u; ], G1 X* f' S9 \. W) z
  285.       unlink(".\\update.tmp");
    ; P* \( q4 D: X5 A
  286.       Fclearf(".\\checkversion.dat");
    5 L! q7 s: i; W( F* O
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);7 y. l9 V- o2 o4 x8 d3 h; O( b
  288.       if(UpdateLocal.size())
    / E# w5 F/ U# s  O4 x
  289.       {
    2 G* `% M1 N3 j: U% s& @4 H& W6 b
  290.         UpdateLocal.clear();. A% K6 [2 Y3 x4 l! g! s% y
  291.       }% p) d! W! v1 l) W. g8 p" I
  292.       if(UpdateFile3.size())  a4 I! k# }6 o
  293.       {
    0 Y) Z- v8 c$ x& G/ R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). Y# \$ o6 \& `" I8 C  V
  295.         {4 @* N9 s8 A5 ~' f* E3 S% E) L
  296.           file=(*p).second;
    - {7 W7 s) j" A3 p$ H
  297.           free(file);
    ( G9 Y! ]( y& m
  298.         }
    8 z5 `" W# A5 N* l, F0 Q3 ]
  299.         UpdateFile3.clear();
    " B8 P7 y. l) Z5 s
  300.         UpdateList3.clear();
    % i9 H5 @- D3 a: ]+ G  W, ]. |6 n
  301.       }
    " h( L# M) N0 e) x/ F+ k
  302.       if(UpdateFile2.size())
    " A+ ?+ |  m5 E7 ~
  303.       {% s8 ?( s/ r5 \' W+ i" a7 [. t
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 e1 [: {% S4 Q. H
  305.         {
    " `8 r4 w* X' Z  V: [6 i- B3 ~2 v# _$ S
  306.           file=(*p).second;3 T0 n6 [( u7 Z9 C
  307.           free(file);2 X3 L- ^. ]9 {$ D
  308.         }
    6 |" P- g4 i2 R; [( c# ~
  309.         UpdateFile2.clear();
    + f/ V3 _8 {3 m- `3 I% F4 q
  310.         UpdateList2.clear();0 c: Q. `$ {' \. v
  311.       }! e( f: u- L  V
  312.       if(UpdateFile1.size()), e- V7 j) J' y6 `/ Z
  313.       {! \8 Y, R, W; I# V, i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 y0 D5 B& s* _( p0 ?
  315.         {, f0 U+ h5 S! F. U
  316.           file=(*p).second;
      z' q" ]( C& F5 _1 v9 t
  317.           free(file);) C# |6 M# D5 t6 m; Z
  318.         }5 ^2 E5 c$ t, C) Y6 l
  319.         UpdateFile1.clear();
    & N( E/ w, x% y% j$ ]- `
  320.         UpdateList1.clear();* ~: g1 Q* h$ A2 S; \8 l- p
  321.       }
    & b; t. l! k# Y  M/ D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; I! @! r% c# {) h# v' b
  323.     }
    0 D8 j0 p( G( L+ }
  324.   }
      F/ L, |& {% R9 N
  325.   return FALSE;. v4 t, L- r/ j  ?
  326. }5 K; E2 t6 F+ Y8 k8 r
  327. 8 B7 h/ j, ?. f3 j) X, [8 G& ^
  328. void CRevAppApp::ClearAll(void)
    # @* W% t+ x" f1 ^
  329. {8 j8 U' J2 g- x6 Y3 X
  330.   LPUPDATEFILE file;
    ! q* c' _, ]0 ^) H7 I/ F" C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 n& S- ~; m; j1 k
  332. 6 B  y4 _8 H3 p+ R- |+ }6 Q
  333.   if(UpdateLocal.size())
    7 q2 J8 G" k( I
  334.   {. o5 v: r/ w1 h+ u8 {, n# U
  335.     UpdateLocal.clear();
    " [7 H; H# _! P, W* A' `
  336.   }
    % {+ N% u; L/ H% O# G, D! O2 E
  337.   if(UpdateFile3.size())5 c+ m9 ~! x6 `' Q. {$ l& I
  338.   {
    6 j. `4 n" k6 y9 N7 W9 u
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 b. @/ m, ^. }( z6 J. M1 a
  340.     {
    9 o8 P- v" X5 ^  C- h* o# I
  341.       file=(*p).second;% X' f# g# Q5 p7 Y, p9 z+ I) g" Q
  342.       free(file);
    # i$ D# A' B# Q) j6 ]
  343.     }5 `3 X( o/ d  Z3 E* X
  344.     UpdateFile3.clear();! W" Q' J8 A* D
  345.     UpdateList3.clear();
    # R& V/ E3 g4 v; o6 c2 P! ?* ~* H
  346.   }
    0 P2 D+ _$ g- m- c$ [! }1 c( V
  347.   if(UpdateFile2.size())( t, H! M+ H! e" Y& |
  348.   {
    9 |' o. U* o  v6 v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)' X! N) f! {' g* [! v1 e3 a( P
  350.     {
    ( Y2 o3 P' Z9 L* H7 \
  351.       file=(*p).second;
    * D5 z0 {2 {& j
  352.       free(file);- v* N: `5 u, Y( k$ T
  353.     }% E# v: f& ^: u9 N( K2 ~5 B0 s4 V7 G
  354.     UpdateFile2.clear();6 V, c- X0 A- M% p0 c
  355.     UpdateList2.clear();, H0 v4 A$ S2 @+ N! F1 q; d
  356.   }
    7 b2 x+ ?. h, l+ y( s& O
  357.   if(UpdateFile1.size())8 s; N. G5 P# ?5 q3 o1 j
  358.   {
    1 y4 B$ @1 V# |1 I
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 q* _; U8 {( Q( @4 ^
  360.     {
    8 Q, \  d4 P. n5 J, U' e. T
  361.       file=(*p).second;
    0 a' B$ s; k& Q5 P) K
  362.       free(file);5 e6 j8 s+ R) K; E
  363.     }
    ( J0 Z3 G5 l9 F
  364.     UpdateFile1.clear();
    0 O: _/ |+ C( F
  365.     UpdateList1.clear();
    ' |  i% i" @$ q  [4 b
  366.   }5 X( A+ b! i# m: e4 }3 M5 P
  367. }  - `: V5 C/ ~) C# B) [; X; ~4 W" w
  368.   # `& p8 D/ H, T
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 B' O( f9 J- T4 E# ~
  370. {
    $ N, M% d4 R: |% g* `6 r" w
  371.   int c;
    5 b: X1 E& {/ U' _" K' `
  372.   LPUPDATEFILE file1,file2;5 F9 w. y- `( u- c# D( ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% h' M5 f0 E$ G8 ^' d1 t+ ~% e" F, |3 I
  374.   std::list<CString>::iterator l;
    0 \# G* s5 }; f  u" |9 R1 ~

  375. 0 e6 H+ ?8 t. o6 c! a
  376.   UpdateLocal.clear();
    , e3 d, g4 j* q$ e' X5 L. X
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : t- x2 ^( k5 r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, P) |2 i" _: q& ?5 G, V  D
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);0 N! s7 ?* i" j' V: A% X5 L+ C
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    7 R6 a/ l* ^2 p, V* f+ W2 E. H
  381.   if(UpdateFile3.size()): F- g5 g% E; g) s- T2 t) _( ~
  382.   {
    1 e, m! v. b* l8 {! ~
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 N3 F' m, e7 V% c( ^) u0 q
  384.     {& i7 D5 e7 ~+ Y3 Q& Z& J
  385.       file2=(LPUPDATEFILE)(*i).second;. z1 [$ M$ l) c: W. S& |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 H" I+ N* B% C7 f( R
  387.       {
      B0 ~$ ~# m# E0 V4 A
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 \/ q' o, T! N- Y
  389.         file1->vers=file2->vers;
    5 O: b7 T" Y2 T! Y8 o
  390.       }
    ) ^2 i, P9 i# s7 F" a
  391.       else3 ^& }4 F  P, k
  392.       {
    0 g( i3 {" W9 v4 W0 g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: c% J) D. Q7 ]0 p; B" X+ F
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - O2 }  Y# f4 `7 A( j. ]) C9 g
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));7 Z( u! k; Z  R8 C0 m* ^. S
  396.       }9 _! P5 h; C# @3 _
  397.     }
      [  Y$ `1 w! k. B# k: k4 S
  398.   }
    9 m# O2 c; u% F. I9 l8 R" a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! e$ t& V' f& S. F$ o
  400.   {
    # I0 W2 L* w8 m( H  y/ b. _( E
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())# m1 X' n& X3 d* c
  402.     {$ {( v7 B( L" N' a" V7 Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    , E0 ~- u5 v/ c4 g% K6 W
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    2 h' N) J6 U/ @
  405.       {' ]: I/ P& G! w' Z
  406.         file1=(LPUPDATEFILE)(*p).second;1 l8 p9 e: ?7 \9 y' [$ D1 t
  407.         if(file1->vers!=file2->vers)% m& Y7 r5 @% P$ j( Z
  408.         {
    5 ~2 B+ }/ P. G. a6 k$ D- p. |' D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* F! h8 A4 c0 d" E- x
  410.           c++;
      ^& l$ h3 D0 f: h/ W2 j) ?
  411.         }$ P# N) T5 K0 E
  412.       }
    + }$ v9 s2 I' G7 |, x) A2 Q" e
  413.       else  G/ K3 ]- I  C3 y0 g* {3 X2 [7 X8 w
  414.       {8 I0 D( E9 B; j. F, |$ k  Z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    , `& ]# I2 V/ z- c& C  j- f* V
  416.         c++;% K' O* l" K# N4 W) [" J" c. L3 L
  417.       }, ~* T( k$ h& F  I1 F4 ?/ O
  418.     }: u4 l  N4 E' Q. ]! C+ e0 s
  419.   }
    6 \9 x9 o3 G. j/ Y: e. G8 P- h
  420.   unlink(".\\DownLoad\\update.txt");. K# F1 T( ?6 ^
  421.   if(UpdateLocal.size()) return TRUE;
    3 c8 @4 v8 P0 z4 w/ y: S
  422.   else                   return FALSE;
    % \9 E' M- F( R: {0 f$ n
  423. }
    " O, k. }( D& W7 H+ F# ?

  424. ' s% R9 ~! F" J9 j9 k4 D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"3 b) B2 h, [) j: T9 `& J- f% J
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"% `, w- y2 z& R. c2 H
  427.   B( s) S  V8 `1 X7 f
  428. " B1 U1 S3 f) V8 h

  429. 8 M2 h$ h! y2 Q# o6 n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ W' E  m( [0 v# V0 j  o; H
  431. {, p# S& ?: K0 y2 R9 f% A
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    3 I, [! \7 m5 }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " D! O9 P' g2 E/ x$ q" j5 B3 ~
  434.   {
    2 k+ q# \1 v4 d& Y. j/ @
  435.     char szLanguage[50];3 ]( ^& b* t9 O! h# h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / C5 Y0 S. m# b0 J
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- L! D4 @- {# D
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 x+ B/ }' z  o9 \  C1 Z% s
  439.     else                                   m_iLanguage=ENGLISH;
    # B. S/ {8 E& r( _# D' y
  440.     char szRegister[100];' _6 O" f4 \- W) Q* F
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");! S0 b5 ~1 O0 x$ P  h; g) U
  442.     strRegsName=szRegister;7 b1 ?' R7 w4 H. M" ]
  443.     char szPatchURL[100];4 Y/ N* @: u2 S( L
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    - M! f( H+ |( K& p: w! M4 H- V  V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 L4 X4 C! Y9 O
  446.   }; j. X" o9 [5 M/ e! N
  447.   else
    0 v/ m. y/ n& f& w1 B
  448.   {- S1 X/ k* m, p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);3 G# n) M0 ?5 x, m. t' N
  450.     strRegsName=DEFAULT_REG_URL;
    3 ], s1 u6 `( e  E" ?. w  W& F5 v1 N
  451.   }
    * f) D/ f2 \5 E. |: A
  452.   if(GetFileAttributes("hosts.ini")!=-1). d- J+ k' F7 M: a
  453.   {/ b7 s6 f3 _2 ]+ ~* W% I
  454.     char szIP[50];
    1 L! Y. S/ y& J' B" W
  455.     char szDIR[300];# @2 c' v0 Z/ g4 H0 x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    # i6 G8 Q2 \9 O+ c
  457.     {& u; w! x- ~8 ]9 R, ~" H9 Q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" E/ M2 [( j$ l
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 M9 b2 w, h7 z9 |0 V- I7 U
  460.       strHostName=szIP;  p, ?0 r8 g" e7 ?* ^
  461.       strHostPath.Format("/%s",szDIR);. R. \( c+ [9 P
  462.     }
    ' T% _# N2 _6 ~) l
  463.     else
    4 i0 U- S2 p7 @6 s* E7 c
  464.     {
    + [; u0 Q6 w  c8 Q
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). ~; F9 g3 d8 K  M% p
  466.       {
    0 I3 t- a* c$ R! Z9 U3 v! q4 ?. _
  467.         char szLanguage[50];2 u9 V$ `& P+ u5 I8 q. a
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 Y5 [* F5 @1 O) D
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) t0 u! z' @3 o; [" Z7 F* P
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 i" _' G( T0 e4 j6 b
  471.         else                                   m_iLanguage=ENGLISH;
    : G$ `1 H! Z8 q  ~5 ]  Y& |& o  d
  472.         char szRegister[100];
    2 p7 Q8 {2 y+ j. {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 C& c! Z( |$ i! S1 a; O
  474.         strRegsName=szRegister;% Z* y% H+ q2 J6 z6 @) b$ R
  475.         char szPatchURL[100];" ^; f, L* w- k! o7 u: Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ E  a" i( k/ m* [) ^( a
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 Z. ^% Q# `* p& j8 y3 P
  478.       }
    ' |  f4 Y$ q+ \8 }. h
  479.       else
    2 z- n% C  w7 b0 ?! B3 r
  480.       {: m% `; y" S/ D% Z% Y% ?9 r. B) f9 \
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);. r( H9 T0 Z9 ~
  482.         strRegsName=DEFAULT_REG_URL;
    & W$ r# }( ^" r( G( A0 i
  483.       }
    & V. ^. ^) a; u$ u8 S  U
  484.     }) X  e& p, l" q  j% N
  485.   }; C, p5 h4 r8 A) L0 x
  486.   return true;
    6 V0 a2 m1 y% b! j4 @2 ]- S
  487. }' y' J# t' [2 z9 @
  488. 1 P( {) m( O' i8 H0 y
  489. #include ".\ZLib\unzip.h"; [2 n  Q: {2 J8 ^0 [: `* V: ?
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / _0 ~8 [! a! T6 g# a4 }
  491. /////////////////////////////////////////////////////////////////////////////- N7 [7 J8 @4 _) R
  492. // CRevAppApp initialization7 @9 T# b3 d9 E6 J6 k: b8 e

  493. : y/ D/ f0 Z' C, c0 U
  494. BOOL CRevAppApp::InitInstance()
    * Z. t% j& e6 _: Y5 y8 m0 W+ A) @
  495. {
    2 z: h. X- w* g) B* o
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 o0 ]7 d8 I6 t+ a2 \9 c% p/ h
  497. 9 L: i; }. x& U* H9 v6 e, x& B0 [2 S/ R
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    6 Z& P6 q, v  w9 D+ i8 e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! c: Q1 _7 Z5 r
  500.   {/ y1 Z( U& ]& x. y2 i  T* M, ]- G9 F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");$ |" B3 S3 m5 }# ^0 Y: I
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % M$ Y, H( E2 B/ U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))); P* O6 P# h4 M# t  u
  504.     {
    , ]9 c* I9 K9 P. @9 {0 E& P
  505.       strcpy(szPath,szPathTarget);) e6 x' V" V0 y( {# b. \! f" r
  506.       SetCurrentDirectory(szPath);8 g) F8 z; X  h, F
  507.     }0 e( \. V8 u+ N8 M( d! K
  508.   }
    & c8 x; }5 Q- |# o2 n) C( _( y
  509. #ifdef _DEBUG
    2 K8 U: s; J/ ^$ F
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 [8 o0 ^. |2 ~1 N9 J  c& @- U
  511. #else! w& j( t1 z! U7 F
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    4 Q% Z2 X. V* J4 C2 {
  513. #endif9 s4 ^" u: \" I( V
  514.   {5 r4 {9 q5 L5 k& s- W& t- S
  515.     char tempFileName[MAX_PATH];3 t/ Z+ q0 z+ M" r; R4 t
  516.     strcpy(tempFileName,szPathSource);
    7 g7 g9 {3 P0 Y- J1 ^
  517.     tempFileName[strlen(szPathSource)-12]=0;
    & Z! r; m# \1 T# H. J& F
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- g% Q4 F+ E" e: N  L* C& M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 A$ c+ q$ }8 L4 d" u& b" w
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);8 |  P* ?7 w$ {0 C: Q
  521.     return TRUE;9 W# N- A* ?$ j
  522.   }1 R2 E  t6 n$ }: E$ g1 J7 B
  523.   // Nuke 0118: Delete run.exe+ T' e0 R% ?. ?+ @- m
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );8 N' {4 A7 \4 g/ x3 c, B1 b
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ F* u( D9 o; [& X, `+ J
  526.   if(!ReadCfgFile("Config.ini"))
    0 J1 z8 m( K7 b- [& E
  527.   {
    7 \% v6 q# s- q# f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ; a6 o! ^0 Q6 c2 y9 N3 y; O0 `( w
  529.     return TRUE;* R, b" i$ }( V+ s  `9 h
  530.   }1 _( W; c# h& L- v2 @* P
  531.   HANDLE mutex;- [  P- a/ B, g: M
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). R6 L- ~6 s; D# A) \  t: F: E
  533.   {
    4 o$ L* C$ t! ~
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) Q8 H6 s0 E/ C2 n5 C9 W2 E2 U
  535.     {
    ( J2 b  D" d: \' B1 A; d( W$ {
  536.       CloseHandle(mutex);
    ) c  q% `: p7 y4 R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. L5 G7 d/ G0 s$ y0 }5 R
  538.       return TRUE;- ~1 S- l+ N' s) w  O" L4 D
  539.     }, a: ]2 Q: S1 [- C
  540.   }  . t+ x3 R* K0 e' ^
  541.   CloseHandle(mutex);
      a) K3 S& D1 R

  542. - k, E3 ]& j% b! d7 t8 R
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);( N6 f/ `& n$ S) D# T
  544. : [5 o6 Q6 L7 J% ?
  545.         AfxEnableControlContainer();1 C) T0 Z3 H/ y; N
  546. 3 ^7 ~" z* G- r+ s% N; @8 z
  547.   bCanUpdate=FALSE;
      H: o9 r. g  }. ~  S8 B; H
  548.   dwStartUpSteps=1;: B9 ^) [& Q2 R! `6 z' h# }
  549.   dwProgramState=AP_NOTHING;: D; p- ^( W2 G# U

  550. 4 u  S" C/ u1 _; H
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);6 a: l# O8 B% D% A

  552. : I/ s* j0 G1 g& K- @
  553.         // Standard initialization
    ! m% w: j' }) A- K: ]" f
  554.         // If you are not using these features and wish to reduce the size
    7 S0 t% L$ G4 q1 M1 \6 |
  555.         //  of your final executable, you should remove from the following8 m4 L7 P- ]4 q) o- {1 D: q
  556.         //  the specific initialization routines you do not need.
    0 o/ y+ V, I5 x% `7 A4 V0 d2 o
  557. " {, r" W  J, _; d; w( i+ r* H6 V
  558. #ifdef _AFXDLL  q7 Z6 m5 E: K  d& x' J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL' ], r: i8 }1 H/ h" i5 O3 C" v" M
  560. #else
    % H" I5 e1 c! U- O: O& N/ h  M
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# b% Y" a% M2 E( r4 T
  562. #endif1 u' H4 B0 P2 k- e
  563. 9 P; ?. A, D9 z# \
  564.   dlg=new CRevAppDlg;
    % u6 x! b$ b" S5 \: l  d+ c* E( F
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , C( _& [# J0 C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / k8 S- I: n6 i  _" a8 j0 D5 |
  567.   m_pMainWnd=dlg;3 v, h6 A% J# g; h& r4 c' ]1 Z

  568. 4 p4 f% E# _4 B1 q9 m
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ Z) F# H4 ^7 b7 t- f- Z" x

  570. 3 ]8 m: f6 m4 _3 _- w  _2 K7 D( A
  571. //  GdiplusStartupInput gdiplusStartupInput;
    / \/ C: A8 ?6 H6 C! v
  572. //  ULONG_PTR gdiplusToken;
    8 C! v6 F. R; f$ W, ]. X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 n, z, ?: \9 B8 ^, |1 s
  574. # O  m* C1 r! U; o
  575. //        CRevAppDlg dlg;
    7 H  l5 K1 R: @4 F! I) `! W
  576. //        int nResponse = dlg.DoModal();
    / ~1 y& q  k7 n- \; y4 b
  577. //        if (nResponse == IDOK)
    % Z* d4 W- X( Q3 ?$ x/ C
  578. //        {
    + v6 t- E) Q% A8 P  W( x  k1 e
  579. //                // TODO: Place code here to handle when the dialog is
    * T* |$ R5 \1 J
  580. //                //  dismissed with OK$ L6 q& w# V) B7 D1 ~( `
  581. //        }
      e3 z* A4 b3 _& F' |0 w1 Q/ c+ M
  582. //        else if (nResponse == IDCANCEL)0 ^3 M6 w2 z7 X; h
  583. //        {; i  q3 d5 U1 u+ m
  584. //                // TODO: Place code here to handle when the dialog is. w/ W  l: Q- T- [0 m. i: {9 m9 a
  585. //                //  dismissed with Cancel
    , ]: v" N0 A% W% z5 k' W" u) h
  586. //        }
    / Z) c/ k9 m8 C

  587. 4 v: f9 D- Z; ~" R/ ^) @) O
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    2 |4 }) S7 t. t
  589.         //  application, rather than start the application's message pump.! |5 B5 \" h3 Y
  590.         return TRUE;3 \& i+ {7 h( a# G1 ^% |
  591. }
    # R: I( J6 v. h4 S7 S

  592. 0 p4 u. t* y  s4 `1 x1 {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 c* Z* }. k* |
  594. {; ]3 Z+ n& _7 z2 V
  595.   int i;4 l4 M! o: @- v
  596.   char *szRet;; M2 {4 k! f4 c! ?1 l
  597. : D' F$ t7 T& L( M" y) d
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) H3 l, \% T% r1 K
  599.   if(sztoken)
    ) C  H# \8 M. X: S  E
  600.   {. M8 |/ O5 n8 v
  601.     szRet=&sztoken[itoken];
    0 N( M4 O" I0 |" U. B+ t- B) D
  602.     while(sztoken[itoken])0 y9 @. s, ~% i3 q( P% s
  603.     {, A  Z0 y# M3 u6 w
  604.       for(i=0;i<(int)strlen(token);i++)
    9 p* A& N# g% D8 o
  605.       {
    3 e& b* E8 q* l0 j6 C/ o+ j0 R
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 c* J9 f* M4 Z3 O
  607.         {
    ; C) K/ B5 O% Q
  608.           sztoken[itoken++]=0;! O" }+ A9 }' G0 F
  609.           sztoken[itoken++]=0;, D: B1 [5 O  D
  610.           return szRet;
    3 X" v0 b2 l' z/ T
  611.         }8 c, T* _4 u8 d: n  F: D4 M
  612.       }
    , y( @5 S0 ]+ Y% l8 G% e
  613.       itoken++;
    ; N! S% K5 d+ a
  614.     }% q* H+ @1 y6 r, K0 Q) @3 b. \
  615.   }7 j6 B/ S( U+ W% E
  616.   return NULL;
    8 Q2 t% I6 u0 |# D& U9 S
  617. }6 i( Y, a; M2 K( Q! ^. {4 c

  618. 5 P) E7 K! s& \2 T( _8 l
  619. void ProcessProc(long Total,long Current)" o) e+ n2 ~* S0 H: i1 C* C
  620. {
    ( C& v4 c* m  I+ K- l
  621.         MSG msg;9 d" r+ j9 Z. b- [. d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 K7 U. |# a4 `8 G" f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ f" p" C6 f8 h4 Y+ X% D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 S; L7 @; U1 m
  625.         {: _7 q. B+ v. U- ^$ \
  626.                 if(!GetMessage(&msg,NULL,0,0))% z" G5 A* ?& ?+ T- W9 |9 Y+ {
  627.                 {/ R% ]* S4 c( V0 E' i
  628.                         return;
    8 V1 g( ?; q5 C- ^  R# q8 \0 O
  629.                 }
    * T; i" c" ?- ]7 E  Q
  630.                 TranslateMessage(&msg);' z, ?1 |% V9 b5 m0 V
  631.                 DispatchMessage(&msg);/ G  `; v0 L! b5 e' m4 _5 p
  632.         }        0 ^! Q' R5 ?# c: l  t( u+ n
  633. }
    % W! p9 A' }; d$ e$ O5 q4 V

  634. 5 ]& C) m! ]/ c4 j; c8 `5 [  ]7 n
  635. BOOL bFirstChar=TRUE;
    ; D  O0 z! N- ]" B$ f3 g# P9 ~! n( D
  636. 5 L: K: V: L/ ^% h2 U
  637. BOOL CRevAppApp::OnIdle(LONG lCount)) a' b1 j, P( r2 L' J' ?
  638. {
    ' K! w; L7 X: y3 j
  639.         // TODO: Add your specialized code here and/or call the base class
    $ o' S7 T! A2 E; i- @1 J( x6 [2 r
  640.   switch(dwProgramState). F( W( E$ r7 x# C
  641.   {
    0 y3 b6 [2 [1 c+ B' \4 {
  642.   case AP_NOTHING:
    ' j: Q5 W- _  M$ C
  643.     switch(dwStartUpSteps)
    / D% h( K$ {; Q" G2 j8 K: n( O7 _
  644.     {+ v7 p0 d' D7 B" M: p
  645.     case 1:# p& D8 o  J! M& s
  646.       {
    * ^7 [; d5 L" J! }# R
  647.         int i;
    ) C) r: _% D( a+ b# a6 `
  648.         CDC *pCDC=dlg->GetDC();) c  K8 i( D. O# x' E8 N
  649.         HDC hdcwnd=pCDC->m_hDC;/ S$ B2 u$ }4 s. q" @
  650. //        Graphics graphics(hdcwnd);. I* S# A& x; o! u+ P0 q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");5 d; p( ^* I- H5 k1 `" a
  652. //        INT iWidth=bitmap.GetWidth();2 E: j# U" W2 L
  653. //        INT iHeight=bitmap.GetHeight();
    4 L, X$ p7 t$ O& p2 Z, O" T
  654. //        Color color,colorTemp;: z% T3 \/ |2 _: W" z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 m# j# ]( J$ P7 O
  656. //        {) ~- \$ r1 _) ~: F3 W
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)* H: _. @* k! u2 s
  658. //          {$ O' ~% M; a) m+ I* \' N2 K
  659. //            bitmap.GetPixel(iColumn,iRow,&color);0 k& ]1 y; J3 ~- h
  660. //            colorTemp.SetValue(color.MakeARGB(# e8 G/ x5 N( i5 b0 a
  661. //              (BYTE)(255*iColumn/iWidth),
    - _: q7 ?. k5 w( d: D% `
  662. //              color.GetRed(),
    1 m8 ?" x/ M& j- r8 a
  663. //              color.GetGreen(),, G* C3 f% c0 y9 A
  664. //              color.GetBlue()));- q$ r5 K: X' n, L) W6 \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    - O! Z- ~% V6 k7 _
  666. //          }
    : N/ L8 w% g  g, e/ n( e4 a: y" ]- Q2 Z9 F
  667. //        }
    # h8 w+ ~- C+ O; M6 C" S
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);" h4 k9 I* I2 {8 B3 q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" Z1 R* @- ~5 g, x+ ]& j
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    # ]9 c/ z* T  }  f% G/ P7 c
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");9 ~5 q$ C% U9 @! ^1 n
  672.         for(i=0;i<240;i+=8)
    & x( H% |. v3 K4 m
  673.         {" K6 s: @, `  g: |7 K7 A" g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 l$ l- ^4 K- w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 K* ]' h" {+ Y9 w" m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- i% U# J  e: K" ]) U/ S2 T; \
  677.           Sleep(33);, W/ M1 I7 r  W5 w: s
  678.         }
    - @4 |9 E" a3 w+ d2 o
  679.         Sleep(1000);$ ]; R! ?3 ]) s' y/ \
  680.         for(i=240;i>0;i-=8)# p# N' J( N! ~* G
  681.         {6 M' q  Q5 w6 J
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 x. x) K+ T# b. ?0 U2 ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 s8 R2 F% c" i$ s
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " a% Q) O2 G, C( f6 y& u$ _
  685.           Sleep(33);
    . m" b. E5 {; s; Y" s3 [, P
  686.         }
    . o9 e, w1 ?3 i& ]" X
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);6 X  B+ n9 i" K. V
  688.         dlg->ReleaseDC(pCDC);7 P4 s7 f2 q# P* g( F# r* L' ?
  689.         DeleteDC(hdctar);
    $ H6 [4 f+ _& t  A* a; q
  690.         DeleteDC(hdcsrc);
    4 T, V/ ~1 F& C2 R, E
  691.         DeleteDC(hdcorg);! P( Z1 f' @" ^
  692.       }
    . T+ @. I; O# R0 o8 i0 I6 B& T
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    . A/ V# ]$ o/ H
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 |& t. \$ k! `& N* ]
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: H* }% K' |* T2 W% f7 D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    - N% _0 B% Z% g6 v. l
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! X! K! @  Y  _9 o) j- I
  698.       if(!Dn.Connected())
    / G6 z$ w: z# R5 p6 J
  699.       {
    9 ?# j+ e9 q1 C8 y
  700.         dwTotalFiles=1;4 z+ s5 ?. W' L4 c( a) i; O
  701.         dwDownLoaded=0;
    % u3 Z# h$ _3 f' B* q' v
  702.         bSilentStep=TRUE;
    9 |- p, w# Z5 P# n9 h* ]& s% F
  703.         bCompressed=FALSE;
    # u$ p% L4 C/ G# Z3 S5 q& f  [
  704.         strExtLocal.Empty();0 B+ z* D5 h, I: l4 H' L
  705.         strFullName="readme.txt";7 |6 U! e+ b3 R5 _
  706.         dwProgramState=AP_CONNECT;& E- ^" }# d( @- o
  707.       }
    9 m/ P$ O2 A  U0 B: K
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 K2 K9 l/ I) N# p$ B' D- }
  709.       dwStartUpSteps=2;
    + \4 m0 A$ H6 y, Z
  710.       break;
    - A0 \2 e9 y: p$ s5 e# s% e
  711.     case 2:4 f, Y1 V4 J8 e: U
  712.       {
    " [) `. Z  c9 n3 u3 K2 X
  713.         int iEOF;
    ; ]) C% ^$ @- h$ }
  714.         FILE *fp;
    * o: m! v; b9 f: `; a& @% x
  715.         char szString[512];
    # s0 \; T+ k% d- ~5 q" Q) f% P
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");2 H( t9 ^$ z. m, l8 J/ ^$ L
  717.         if(fp)
      J& @- D; R/ o  \* I+ V( Z3 o- N* N
  718.         {4 a3 i" x( [1 l- n5 k+ B; ~
  719.           do9 _4 z8 V& v# c+ G& n
  720.           {0 \% o6 V9 d* T, v  S3 K# |
  721.             iEOF=fscanf(fp,"%s",szString);
    + z* ~+ A0 x9 B
  722.             if(strlen(szString))- |+ O) S9 t) H6 M. V+ b4 `7 Q  ]
  723.             {
    * z6 r* @+ \# G
  724.               if(bFirstChar)- }; {% ]- k" W6 A! g. f8 {: g! h
  725.               {5 z6 D2 i( l! r$ z) K
  726.                 bFirstChar=FALSE;
    4 ]& H4 X1 ^2 i; \, n2 p
  727.                 bConnectIsBig5=FALSE;' E& D8 Q9 y8 u" \: w+ Z
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ T8 O- ?/ D6 q0 ~8 |/ m
  729.               }& D, z  `% `+ w2 B
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 d' h, y' e: Z# b! y& ~
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( w- y$ i! n! R( y. F% Q$ L- P
  732.               dlg->m_ListText.AddString(szString);
    % t- @+ e0 i' R8 O+ F6 D% {- Y
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 E7 j( T$ L& u; J* ]
  734.               *szString=0;! R7 _0 R! |( d1 ~7 F1 `/ q
  735.             }0 r) u& d0 o+ Z7 {% J+ J
  736.           } while(iEOF!=EOF);
    % g) [6 o, G& N% _% M# c
  737.           fclose(fp);
    ' H: {, E- ]; `* n3 I, s  U
  738.           unlink(".\\DownLoad\\readme.txt");9 q6 E+ z5 f4 E
  739.           dwStartUpSteps=3;% g% h; H; t/ S4 ]& |# X
  740.         }
    - [, {8 U4 x9 Z% y# R- ?
  741.       }
    2 O: i/ u$ A' A5 o1 X( s
  742.       break;" |4 V# t/ d% ^+ Q
  743.     case 3:
    ' i1 d2 N& W6 b
  744.       if(!Dn.Connected())
    5 H, {! |4 h0 [: p/ H7 T
  745.       {
    $ d# i3 E8 U, @( L( e8 ?9 i( X9 N
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 E7 e  T* Q4 s4 ]  ]
  747.         dwTotalFiles=1;, X/ s' }: ]9 n
  748.         dwDownLoaded=0;
    8 V/ c& c, X& K0 ]: Q( e
  749.         bSilentStep=TRUE;% C$ N5 h  m& F) O* X) c. s
  750.         bCompressed=FALSE;
    4 K1 \: s- s3 q$ {: A
  751.         strExtLocal.Empty();7 t3 j: A# ]8 _$ t
  752.         strFullName="checkversion.txt";: B" H: G7 @2 [" i; i
  753.         dwProgramState=AP_CONNECT;- N# }% b! t/ f9 L2 K
  754.       }
    / k3 z! H1 S1 W4 e, j1 I# q& l
  755.       dwStartUpSteps=4;
    + K. [- {& O; T1 A
  756.       break;
    , N- x+ E; {" ~4 |; Q* V4 M% o0 C- d, h
  757.     case 4:: C6 \) D: Z4 Q. \! x( t" [6 Q
  758.       {
    2 o+ j: g  B/ {! J
  759.         FILE *fp;
    ) M, {/ h$ r1 ~5 {
  760.         char szString1[128];
    " J  |" C; R4 H2 }; T4 X0 b
  761.         char szString2[128];/ ?+ D7 n" G2 s0 i3 ^2 l+ G
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 y2 I! P$ k9 u0 ]  U0 h
  763.         if(fp)0 t( T9 L. d. g
  764.         {
    ' x- K; c% Q# D1 I% V& h- z' H8 N
  765.           fscanf(fp,"%s",szString1);
    : Y3 t) ~. M' Y) Q+ [9 O2 S
  766.           fclose(fp);$ W% s3 |( z! ~2 N- D1 Q
  767.           fCheckVersion=atof(szString1);
    5 J) D7 P) [  x7 T+ f/ W
  768.           fp=fopen(".\\checkversion.dat","r");
    ! P* q' n- o+ c% o  z+ e1 i
  769.           if(fp)% Z- x" q+ q% L5 x
  770.           {; O- g4 h! s* r. }1 M. n; y' M2 n
  771.             fscanf(fp,"%s",szString2);% h# l$ H9 O; [' v
  772.             fclose(fp);
    ) u5 o; i( B  n5 P) ?/ r# {# s
  773.             if(atof(szString1)!=atof(szString2))/ D+ D( N% u3 E( C$ Y3 }' [% m
  774.             {
    % C* r$ \& _, E  @
  775.               if(!Dn.Connected())
    # g/ p1 z5 @5 D" v# o% Q8 L; b
  776.               {
    ! i; W3 l" G: [, B: R* q6 T
  777.                 bFirstUpdate=TRUE;
    * }7 D* z; T6 w0 K( _6 ?
  778.                 dwTotalFiles=1;
    / A4 {! r, c7 n, Y0 I5 B$ `1 g
  779.                 dwDownLoaded=0;$ k/ x" B1 N2 X$ T- J
  780.                 bSilentStep=FALSE;7 z6 R8 ^7 |) D3 i5 V9 @, \& b) `
  781.                 bCompressed=TRUE;2 b( \/ X- U% J- Q- p. I$ S8 @
  782.                 strExtLocal=".\\DownLoad\";8 K! o& B! n& K4 D# O# `
  783.                 strFullName="update.txt";2 U6 ~0 r: j0 @( v: K
  784.                 dwProgramState=AP_CONNECT;
    , o7 ^0 c# }: q0 }" z. R: o0 @) s- w& z
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) J8 m" L7 S5 c, G$ k. v
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 b: l2 x% W! Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");1 n2 c, ~0 I/ K

  788. * L' M. I) o! _0 S( F7 B
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( ]0 v+ b+ H8 V5 W7 ^0 t: U9 D
  790.                 unlink(".\\DownLoad\\checkversion.txt");( \" k. D! R2 }4 m7 V
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ( n+ u0 z' k/ b
  792.                 {; i# y: K( y5 z' X, A5 U
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 c( a# j$ a) b9 v; }$ }& M
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    6 w; {& S* R; ^% B% w; p
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    / v. Q0 i, |7 O* q+ J6 ]7 _
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & S  l- y/ V3 n- a( y

  797. 6 f; ?" R2 g: ^; k7 g3 P6 `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # |  J% @+ Q: v! J' F" n
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 }" p  d4 O% d* S! E" V1 \9 G
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 k: u5 ^$ U: c4 Z2 E! B6 X3 O1 l- Z( ^5 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 O4 o! Q- h8 b  M4 e8 l4 @! b
  802.                 }% y3 ?$ S" @/ L( _- E) s
  803.                 dwStartUpSteps=5;: F1 a$ y9 [2 C- p: z! |  _; J* y
  804.               }6 h+ `% S" F! m
  805.             }% f+ _5 e4 @, A) W
  806.             else: ]' p7 K  ]" N; b* J
  807.             {; p* z6 J" Z9 s2 R! A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    1 h, d2 L% T; J* \0 }* V8 w( y9 m6 E
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" X2 x. O( ^  i" X
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 s% ~0 b8 y+ X! ~3 o
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    . w$ N; @, R" Y  W0 R" Y( r; Z

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

! q. z' Q: F  W6 u! c& t0 v

評分

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