找回密碼
 立即注册

CSUpdate.exe源代码

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

2 q) Y* c$ }# |, |5 Z/ I
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 b8 u' z5 @; [5 g
  2. //, _) Z7 O) [. ~# N+ |% R2 V

  3. 2 b; `4 a/ Y+ y
  4. #include "stdafx.h"( l/ Y) [" F, a  L  \

  5. ' J& M7 R; _. N: o# p: g
  6. //#define UNICODE
    1 C+ L8 {" ~( i7 H9 ~
  7. //#include <gdiplus.h>
    * |0 q/ E: @4 u
  8. //using namespace Gdiplus;
    " Q& a$ \7 k( w

  9. 9 z+ y: b3 p( R% t
  10. #include "RevApp.h"
    : l* U2 _0 R/ s+ B
  11. #include "RevAppDlg.h"
    6 r/ \% o9 n; R* t4 }9 I0 N* N

  12. % C. ~* I/ C! @
  13. #pragma warning(disable:4786)
    7 o; t) E$ a: P7 b" x) O( B/ d+ S' ?# }  ?
  14. #include <map>
    0 Z0 Y) ~& K2 h- M3 f* Y
  15. #include <list>
    ( z% X4 w" H$ R4 s
  16. #include <direct.h>
    , ^( T8 \6 ~& w1 p* _$ |6 K
  17. * [6 v2 E* m% O' }
  18. #ifdef _DEBUG
    / {. B. M$ X! J% W6 G9 U
  19. #define new DEBUG_NEW
    / s) l3 ~" f" c  r. _) O
  20. #undef THIS_FILE
    2 g5 v- w; _- F, B4 |
  21. static char THIS_FILE[] = __FILE__;
    3 o. f6 T; b: s, |0 y) E9 {
  22. #endif. Y" B: L! s% y2 w( R* d' ]3 @
  23. #include "SkinResDef.h"% `8 t& f: l2 B% d# Q, G( N! L3 \
  24. #include "ChangeBG.h"
    " A* v# Y8 y1 l2 z0 n& F
  25. #include "AFXINET.H"& V- K/ j6 B& @( b" P# A* b# `+ m
  26. % `( ]1 w3 n" ?* W) p( ?
  27. #define TRADITIONAL_CHINESE 0% F5 L% u; c# i" P0 t
  28. #define SIMPLIFY_CHINESE 1
    ) Q3 C: }  G' l& ^, o
  29. #define ENGLISH 2- F& [+ q, V- i0 t1 m7 C3 }  G; M
  30. int m_iLanguage = ENGLISH;+ ^- B9 ^- _% h) P
  31. /////////////////////////////////////////////////////////////////////////////
    ; Y# f' M' i6 p* D! W$ ~0 b
  32. // CRevAppApp
    $ k7 ?/ C0 X/ y  y2 K

  33. & y  w# @+ B3 A9 M
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & U/ g- Y" x* d; W0 |* y
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    " W+ r% F# C3 O$ p( M
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here., _5 N) B4 _" ^6 }- R
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! }% e" `  y* [- z" `/ D/ a, O
  38.         //}}AFX_MSG
    ; ^6 }" H" c- y5 \5 q( \* S
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); X0 [% i. e8 y* x
  40. END_MESSAGE_MAP()9 n& f! u! h/ Z9 S( a0 a
  41. / D! ~3 y# p8 i+ I- b
  42. /////////////////////////////////////////////////////////////////////////////# u$ F, K% z0 ^2 i: w( |" w
  43. // CRevAppApp construction5 N& E1 |6 ~/ G+ u4 H4 F
  44. 0 T% r, S6 u( G5 K% c# m# }' ~
  45. CRevAppApp::CRevAppApp()9 H- a, x( ^6 e! j3 W
  46. {
    ! W& a  q1 Q, ]- A
  47.         // TODO: add construction code here,5 ^' x( m- h7 v- J' i
  48.         // Place all significant initialization in InitInstance
    * |' y0 V, v8 Q
  49.   bDisplayIsBig5=FALSE;
    1 [" `$ [8 k' ]2 B" z( ^
  50.   bRestartUpdater=FALSE;7 B2 y+ V1 |: i& Z& K
  51.   bFinishUpdated=FALSE;, l0 \  b( ~& {+ `$ N& H
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;8 y* X5 U3 d1 E( f) _) `: e. S
  53.   InitChangeDataBig52GBKS();
    2 J3 p% Y; W. y: O7 }$ K
  54.   InitChangeDataGBKS2Big5();' P% }' ^) v* J6 ~7 n, m  s
  55.         //6 D  m" ]4 |' v) Z1 j& Z1 H
  56.         bClickRunExe = FALSE;
    ' w; g- a0 a, H9 f0 M
  57.         //6 {  x' y5 _* p. B
  58. }
    0 ^0 q8 l4 J7 u) n) Z6 a. _" |$ f

  59. * l' y4 n+ G5 @) V4 x7 L: l2 k) f+ J
  60. CRevAppApp::~CRevAppApp()+ o) w; {0 w% i
  61. {
    : b8 m" d' ]9 K$ U. d2 r
  62.         // TODO: add construction code here,
    : [. R, {+ }1 |, Q, Z: x
  63.         // Place all significant initialization in InitInstance
    4 v2 T4 [2 u( l; L+ k, F+ m
  64.   EndChangeData();2 M; L* v2 S( m/ e& p/ [: ]
  65. }
    5 x$ K0 A4 C" l% M

  66. - Z9 P  v7 B! G2 D) p5 J
  67. /////////////////////////////////////////////////////////////////////////////
    + t0 P' W5 D' Q+ l& ]6 N+ F
  68. // The one and only CRevAppApp object2 m  f9 U* M' K" M

  69. 4 n' M9 t* M# d6 F2 n
  70. CRevAppApp theApp;) X0 s+ w7 F; n' p. i% E
  71. - X3 U$ N% Y* p) r& U; o6 G, }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)4 r  |" I. k$ z3 a
  73. {
    & b) G- N' `8 {, B. Q
  74.   int iEOF=0;% U/ D+ _- {( l8 ^! j
  75.   char szTempName[MAX_PATH];2 F. ]2 Q6 \" O% b. ]/ w0 C
  76.   *szFileName=0;
    . I4 ?& ~4 [6 S6 E. K, [! k
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! G. c+ i# u. y) m. e# l9 `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# z' P2 h" Y1 m1 R
  79.   {
    1 C1 E$ d/ f* j7 `  {) S
  80.     strcpy(szFileName,&szTempName[1]);
    - k  y( \9 z6 N! y' D
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): q8 V( `+ w" D3 X0 `; i# p
  82.     {
    1 e' q& j6 _" l  L3 ?- H7 o
  83.       iEOF=fscanf(fp,"%s",szTempName);/ z) Z$ ?3 Z: k% s
  84.       strcat(szFileName," ");: X* D3 {" f/ H9 \/ q' C
  85.       strcat(szFileName,szTempName);
      }2 i1 i* p: }# r: |
  86.     }3 R" [0 M* u) f
  87.     if(strlen(szFileName)>=1)
    . q( L! v% k4 z& r; z7 q- M; [, c- |
  88.     {
    ( [. I& Y1 D" @  k6 ]3 n( i
  89.       szFileName[strlen(szFileName)-1]=0;
    9 T* P: }- [+ t, {' w- s! F, p
  90.     }
    3 k: v/ G5 Z/ m1 I( e" @4 j. L
  91.   }
    + e# O4 j) k( g6 y9 o( {
  92.   return szFileName;
    . ?6 a5 J3 g- d. u
  93. }
    1 e7 O9 R' T4 |- V
  94. : @5 r6 F8 L, n# R( P
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 x4 W/ K  o# R! x
  96. {
    , L# b5 D* r0 |/ [4 a4 m
  97.   FILE *fp;
    5 P! P5 v0 K; i- y3 m
  98.   char *key=NULL;
    7 x8 D7 Z/ |/ `# e) @  K& E
  99.   char version[MAX_PATH];
    * f& s, U0 X8 g+ x8 _! \
  100.   LPUPDATEFILE file,olds;
    ( p$ t; n! N1 Q& F  j! N6 \% D
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 [' D. C6 P, g: w* u. ~

  102. 3 r+ c- n% R; k$ i1 ~- ~
  103.   UpdateList.clear();
    * G' m* c- d1 i, r
  104.   UpdateFile.clear();8 f' m$ W- R  m6 d: l
  105.   if(GetFileAttributes(filename)==-1) return false;" J( c0 `; M& B2 {2 t  Q
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! p8 M0 e- o1 J3 H$ j+ W" F5 Y
  107.   fscanf(fp,"%s",version);" M/ U4 A9 t) W' [
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    + S6 V( K. w1 m3 o% U' U8 T- B  g
  109.   while(fscanf(fp,"%s",version)!=EOF)8 ?& V- ^% ^+ s3 Q7 R6 d
  110.   {
    + e0 g% v* v( p6 [) L3 Y5 R9 K5 N
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, G3 n  g+ y0 {) n- H% M9 }
  112.     fscanf(fp,"%s",file->path);4 Z7 u  u: b. d7 F
  113.     ReadFileNames(fp,file->file);0 q: `- ^. h) F; q4 v4 g
  114.     strcpy(file->full,".");4 L6 _/ k4 t% T2 T
  115.     strcat(file->full,file->path);
    ! f1 @! G2 V, x4 u
  116.     strcat(file->full,file->file);
    & Y' M1 m8 n, z) ?% i8 `4 ?
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()); ]5 a( X, f* X: d0 P# q9 M+ P
  118.     {
    ) h9 b! A: w) `
  119.       file->vers=(float)atof(version);9 g9 V! a, X2 B2 d
  120.       UpdateList.push_back(file->full);( Z2 x2 F6 ~* W3 b+ b5 R
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 _3 N' u+ w. v7 `' p6 i' n
  122.     }
    ) D0 B& j' m6 u' E
  123.     else! I# Y2 z0 q) q' i/ q
  124.     {5 K9 {! R$ B" Z$ C  J$ _4 r
  125.       olds=(*p).second;
    / I; d% c" y# k$ O
  126.       if(olds->vers<(float)atof(version))* l/ K2 Z( u, @
  127.       {3 M9 Q0 n# s% U
  128.         olds->vers=(float)atof(version);; @+ I3 _( G7 [0 J* {& a1 r$ |
  129.       }
    8 U( L7 x/ W- A$ f8 m9 X
  130.       free(file);
    , V* [* @6 U+ N- K) X: l" w
  131.     }
    ) I- W/ [) \7 T% x& b0 x' B
  132.   }8 R( y, g1 X1 _/ E% N# _
  133.   fclose(fp);
      L9 S1 r# X& R" w! O# ~# m! v# ~
  134.   return true;
    4 f  n' |- W: }+ d& |/ L( c
  135. }
    6 D6 Q( |, X$ ~: k. i/ I7 J- v

  136. - @; B# I/ M" R7 {; J6 N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    & ?! J- H# G, |* q9 D
  138. {/ `  N0 ~7 Q8 E0 N
  139.   TCHAR  szFull[MAX_PATH];
    7 {8 R$ q* U8 c3 Y$ f; i* S
  140.   TCHAR *token,*inter;
    7 S; w! ^! C6 p
  141.   *szPath=0;* j8 w+ m+ p+ a& x' S# @
  142.   strcpy(szFull,szFullPath);
    8 |! }) u% B; l) W& B! k2 J4 W
  143.   token=strtok(szFull,"\\/");
    + r2 x, U8 X8 d  n1 M
  144.   inter=token;
    % o& `* N1 f+ y% L' [
  145.   while(token=strtok(NULL,"\\/"))9 v3 t$ P7 W1 x  G9 j  @5 m
  146.   {
    / f# _& i' W& v3 @5 v$ A! ?
  147.     strcat(szPath,inter);; Z. Z: B  s$ q% r
  148.     strcat(szPath,"\");
    ' z. Y! ^! {# B7 u6 b, t. g
  149.     inter=token;- H/ g, u- G9 M/ H0 \8 |0 ~; X
  150.   }
    % t+ c: r; b; y6 V; r! S
  151.   return strlen(szPath);
    0 l: f5 Y$ `' f8 p+ q
  152. }
    3 c' D2 {  K/ w- ]; @0 V) B
  153. 0 T* W, V$ _- W9 x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)1 F2 B/ d1 m: Q4 \5 l
  155. {5 o% G) C5 R% q2 N
  156.   DWORD attrib=GetFileAttributes(Target);+ r1 y; Q+ P! ^! z9 W' U
  157.   if(attrib!=-1)
    4 O5 h$ s! ^1 m
  158.   {( Z$ Y; R0 _7 v
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , N2 ^0 M% V% y0 F% _" B
  160.     {
    & E( Z% W  r( h+ ]; N5 J
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ' U* u' Y( ]4 m$ v' N5 j. N
  162.       SetFileAttributes(Target,attrib);/ s5 H8 S% F) y3 }
  163.     }# {3 x1 Z* E# X7 e( O
  164.   }
    0 [. U. d2 i) o/ q+ M4 N
  165.   CopyFile(Source,Target,Erase);
    7 l" \% E3 C3 |( M; d
  166. }
    4 v: r# J1 Y  l! S
  167. 7 z& c6 v5 B% h0 e, |& y1 G0 ^
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 |' i. `- h0 ?
  169. {$ J5 M! C, w! X$ {; }
  170.      FILE *fp;' f1 u$ E! \+ g+ |2 r) ]
  171.      char  szBuffer[8192];
    # N! W9 o  D0 l0 F
  172.   va_list  argptr;
    $ Z9 T' m. {& M6 C% o$ z
  173. $ x6 z; k5 g! P- {1 w
  174.         va_start(argptr,message);8 ^7 h9 d! E, W+ h9 r
  175.         vsprintf(szBuffer,message,argptr);* w/ F* B0 A, }! O
  176.         va_end(argptr);2 X2 z; C* v+ P. v2 [
  177.   fp=fopen(FileName,"a");' |4 n+ o( A! E5 e  H! \- O( B& b9 t
  178.   if(fp)
    / C; ~. {: x  T& X8 t
  179.   {1 a/ o. D3 K: c
  180.     fprintf(fp,szBuffer);6 q% f! k) {- T4 X# L6 E: y) E
  181.     fclose(fp);
      y1 T$ B: ~) o% p5 I
  182.           _flushall();+ T. Y! X# d# n1 f
  183.   }) W* Y8 _( \, e& R9 H
  184. }
    * Y( D- D& m* I8 U7 D8 S4 J- n
  185. 4 i! B' R5 o& @0 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    / e" d/ T4 i8 _  l9 F& K! R) b
  187. {% T+ X6 O% {6 s8 ]$ }1 |" Y
  188.      FILE *fp;
    6 t2 Q. N5 f2 h  |  {
  189.     DWORD  attrib;
    : R* G/ `, E% l9 {' Z8 e
  190.   attrib=GetFileAttributes(FileName);
    3 q2 n8 @( [  E, ^! L. p7 a
  191.   if(attrib!=-1)" m1 S( z/ L) j4 H- d) @5 z
  192.   {
    + A" G( R0 u* h) s" r3 q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);3 g6 }. \5 w. O
  194.     if(!SetFileAttributes(FileName,attrib))
    6 g& K- e1 o+ w' @7 d
  195.     {
    5 U) A' V% E, ~1 ?% T
  196.       return FALSE;; t" _3 F% H1 p2 H- o+ W& v+ ]- J
  197.     }
    $ w" t7 l8 j! k0 x
  198.   }) @% h3 Z* g: o2 o% X2 M/ D: x
  199.   fp=fopen(FileName,"wb");
    ( @8 g& D" H7 g( S! t! `
  200.   if(fp)
    , W: I5 f0 z: s$ c7 \, U) q+ X
  201.   {
    " M7 P- w9 k0 S: p
  202.     fclose(fp);
    $ l* \5 U  M+ W' |$ J2 y
  203.   }# Z5 P( d5 @+ Q4 F" d
  204.   return TRUE;
    * x. U7 t/ O3 ~) o3 o, z' k
  205. }
    3 G2 c, N$ O- [, J

  206. $ v# L- J/ n' O; z: z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    " @  i3 Z* c$ O9 o
  208. {
    1 z# g5 H5 I" B: H2 z
  209.   char filename[MAX_PATH];# s: Y! n, P1 A( a
  210.   LPUPDATEFILE file,olds;  R7 F" s+ F' R' s2 k- D
  211.   std::map<int,CString>::iterator i;+ J/ r  H2 L: l9 K
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& h5 p& j9 J* P' @
  213.   std::list<CString>::iterator l;* c3 X* m. }" a+ @4 J2 {' S

  214. . @4 V  Q- R5 \0 @
  215.   if(bFirstUpdate). e) y2 c8 T- k$ U: `; A& k$ T
  216.   {
    $ @1 F0 a9 s7 j* B7 z, q
  217.     dwCurrFile=0;
    - d) R7 v5 M: b7 G6 ]1 u: m
  218.     bFirstUpdate=FALSE;
    5 g& `  h  l$ w/ Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    . [% n1 V. e" E; @& s
  220.     {
    8 C! Z! z) O' s) r- ^. D
  221.       dwTotalFiles=UpdateLocal.size();" w( i7 Q: ]( X2 }% u( a, |$ m* o7 h
  222.       dwDownLoaded=0;
    , v( |. x9 U; F, L% C
  223.       bSilentStep=FALSE;, T. c( e: @4 [# q. V$ }
  224.       bCompressed=TRUE;
    , O* M8 _" k. j2 ?4 {! F
  225.       strExtLocal.Empty();
    8 [0 a8 j$ d, {/ P
  226.       strFullName=(*i).second;9 @3 C9 J1 b, n0 a# j! J
  227.       dwProgramState=AP_CONNECT;8 v) B6 d6 H, `, Z7 N6 I) p. Y& S
  228.       return TRUE;
    ) g7 _1 m# {  ]/ x+ f# F3 H0 M7 \
  229.     }
    ( |) d/ ]+ H  M9 \* F# x
  230.   }6 h4 `% X3 H1 t2 ~. H  H; U7 [0 \
  231.   else if(bRestartUpdater==FALSE)# z' ]9 f. V% p/ ?( l
  232.   {9 s7 K8 |2 o. Q  `; z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % r8 |5 J; O1 V6 @6 G4 \
  234.     {
    2 Q7 N& {5 ~5 \& y* s/ _
  235.       file=(*p).second;
    % g. n( o' b% k) ^
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& d1 r) C, r- T" h6 s1 n- @
  237.       {
    8 \6 z" n2 F" ]6 n% F8 }, G; {+ i/ K
  238.         olds=(*p).second;
    4 E: t/ G$ T: E9 y
  239.         olds->vers=file->vers;
    * {! T4 O8 O' k9 O9 O; x: T# i( ~
  240.       }
    ; m. T8 n9 K+ U1 G/ l, `
  241.       else
    ; b( s: b: J" ]* N
  242.       {
    6 w0 Q8 G4 U) z* W! U
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; g. H# c# E) |) Y+ @
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
      B* o6 L# W& _
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& v8 q5 U; `( @: x
  246.       }9 J. v( ~" }3 b/ E) u) g6 Z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : o$ {" W/ R8 r, T1 E) m/ P( Z2 C
  248.       sprintf(filename,"(%s)",file->file);; k  V; I# C4 u# e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. z4 c6 x) x6 L# }/ P! O
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 y6 L/ h# f" V% y* p/ z
  251.     }
    6 y, J2 M2 e5 x5 ^
  252.     dwCurrFile++;. ?; s( T( V" T0 V! `
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  ]) k" s* G, o, H! {
  254.     {
      t. u+ Q6 |- s) i
  255.       bSilentStep=FALSE;
    7 R# `. N% @/ f" Z# I0 n" k$ A
  256.       bCompressed=TRUE;: r  U8 N" F5 \4 e
  257.       strExtLocal.Empty();
    ) A! ^; u9 o+ v7 ?7 D: u6 O
  258.       strFullName=(*i).second;
    + [5 g' F3 @8 {/ d( B8 X
  259.       dwProgramState=AP_CONNECT;, l0 a$ E* h- d7 N' n
  260.       return TRUE;0 L# j5 W" {, {; p9 R
  261.     }
    $ E: V6 [4 e/ W3 i. V/ x; k
  262.     if(!bRestartUpdater)" |' s# k9 S* _0 V9 x' ]. ]! ^) k7 r
  263.     {
    . [$ }- K# a0 Y( `' V: D) [6 d5 [
  264.       int iCurrSize,iFileSize;
    . A  B. q  N1 Q6 O& X3 T" L( j
  265.       iCurrSize=0;: Z- G" g! b* `
  266.       iFileSize=UpdateList2.size();. H" d* s$ I2 W$ [7 h; \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . g4 ]& K& `0 y4 T, F. e6 u. s
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( W/ t7 H/ H9 D7 b! q5 j
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! x4 ^1 ^& G) Q& I7 ?* g
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 p3 @! O- c3 H  S- [
  271.       Fclearf(".\\update.dat");
    # B! Y2 H% K  F2 u0 c
  272.       Fprintf(".\\update.dat","Bloodyf\n");) M; C/ Y2 w$ W* s# ]
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 E- i2 |2 L" l1 I
  274.       {6 D2 r7 u, C0 {
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 D3 V1 O$ B  Q4 M" j% `
  276.         {; Y0 h' {$ s' k  [# J$ q5 N+ ]
  277.           file=(*p).second;
    7 @$ q. F1 }2 T) i! D! x2 x
  278.           sprintf(filename,"(%s)",file->file);
    # q/ z1 b: i% q8 j; F# g9 W
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : k' k9 H8 U& ]
  280.           iCurrSize++;$ w) D0 ?  P0 `! n  a% H6 j
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ) z" Z# p; \+ S% Z4 z8 C
  282.         }
    + w) G1 h' w7 T
  283.       }
    ( S: Y, u6 _+ B# H4 A8 C
  284.       unlink(".\\update.txt");
    & f2 ]( ~& K6 P, a( V) U7 d
  285.       unlink(".\\update.tmp");
    ( T9 G* C9 \0 @7 U# D) _4 i7 C
  286.       Fclearf(".\\checkversion.dat");1 a( G$ P9 D/ P+ C
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) }5 i  q6 v' M7 g
  288.       if(UpdateLocal.size())
    . X# t5 @& ]* a/ P, k8 @0 ~4 O8 g( x
  289.       {
    1 Z8 L7 b6 W+ P  z$ K
  290.         UpdateLocal.clear();* ^% J8 a5 Q* y; s! @/ T/ X8 ~: s
  291.       }
    & U7 t' L$ m% U- ?$ l* {' b$ g
  292.       if(UpdateFile3.size())
    + d' y$ v: u$ M" X
  293.       {  g; Y9 }* d. i3 c! L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 n. m& x* ~/ V  o8 p3 q- j
  295.         {" @( _' q, a5 ~7 J- j+ K! X
  296.           file=(*p).second;( M$ r+ S" l" ^0 A" R
  297.           free(file);/ V/ \8 m  s/ g0 U! n! b. ^
  298.         }5 ~& h1 i. I- D0 ]6 K/ z: D$ m
  299.         UpdateFile3.clear();! d  B# T0 b. O
  300.         UpdateList3.clear();0 l. K8 b+ ?  h( _6 ?
  301.       }
    # P; Q& L# U+ {' K  |! e
  302.       if(UpdateFile2.size())
    8 T- ?( r9 N: A) O7 ?- o
  303.       {% k+ d+ @# N! E3 c2 F4 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    6 i7 ?3 j( d6 _( T& U
  305.         {
    . O' c# O, v2 \9 x) e
  306.           file=(*p).second;  g$ P3 u% m  c) u1 D
  307.           free(file);& `' s( i% }) ]' a
  308.         }$ j, F+ i7 Z! B5 z" G
  309.         UpdateFile2.clear();5 t4 O2 o2 e1 f9 Y+ ?) @+ R
  310.         UpdateList2.clear();' ]2 \( A. J& q- e& M' O7 B
  311.       }# D; F" |" D! T4 C# ^9 W+ m
  312.       if(UpdateFile1.size())' f# N, y; c9 b: @3 w
  313.       {$ F( o/ H  h% K0 d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    . h4 B6 r6 [  G; Y
  315.         {5 r( y- f/ h/ A; v4 H
  316.           file=(*p).second;
    4 ^7 r; Y7 _8 l) j  |' [4 N
  317.           free(file);
    - ]$ X; s" w0 q" T
  318.         }* n7 q9 H+ S1 B0 m% {
  319.         UpdateFile1.clear();
    ! m( }* t3 C  r8 y& S% K7 g
  320.         UpdateList1.clear();6 V! F  |# M% z" E7 _( C- i
  321.       }
    ' d6 Y2 o' L+ l7 C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 A( _; c- |0 b" c3 H) d
  323.     }! |/ R; E" i# ?+ f: G/ ^6 n
  324.   }
    9 l1 }! x! V, ]
  325.   return FALSE;
    ! c5 y3 W: M9 c' a( J$ o
  326. }
    9 F. t# \3 e  G* u

  327. " Z7 ^/ m6 c# t: T* E
  328. void CRevAppApp::ClearAll(void)
    6 n& Z' p( x5 @' K: O1 ~
  329. {+ N9 M4 `0 l7 O/ C/ [
  330.   LPUPDATEFILE file;
    4 M8 w1 B6 I: Z: S( b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 z- B% X6 ?* C! x

  332. # L. q0 F& k, U7 ^+ l2 ~
  333.   if(UpdateLocal.size())" s3 d; |4 s" u' Z* Q4 m% t6 V* |
  334.   {
    0 W6 O2 V5 |+ f
  335.     UpdateLocal.clear();* I$ b) W5 l. d& [
  336.   }
    3 u$ }; V. w; g- O, K' v
  337.   if(UpdateFile3.size())
    8 J! E$ c2 Q% d0 H6 N
  338.   {: q8 B3 G! a. \5 `9 E2 j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ' w6 q( j7 M0 `$ i
  340.     {
    ; f, M  g* L7 B; ]3 _8 q' p, C
  341.       file=(*p).second;0 K) s- h" B$ X4 b" S8 U' `
  342.       free(file);
    " K1 z9 f( u+ K* a9 _. z4 d
  343.     }
    ; x+ u' o/ q* T( T0 G- s# O
  344.     UpdateFile3.clear();
    : L- N% S5 i) M2 G2 V' P
  345.     UpdateList3.clear();
    / h/ F' e) t4 I; x
  346.   }
    7 k$ ]% V1 ]3 D) ]
  347.   if(UpdateFile2.size())
    . }6 d% }0 L+ j2 t3 F  F
  348.   {
    1 g( [) i% A3 k; n, G8 F9 a/ h
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 P8 f. F2 z; m" j! p0 i
  350.     {
    ; d* T) S1 ~: c: L
  351.       file=(*p).second;
    6 F( M+ k* q3 @3 Z6 W, m
  352.       free(file);& w( W- }0 y5 F" b
  353.     }# A/ |  X( W( z/ [. S
  354.     UpdateFile2.clear();9 @, r' z( J% f/ B7 e/ H; M
  355.     UpdateList2.clear();
    - n1 O( E& v6 T2 q
  356.   }
    5 I- T1 a+ x6 Q$ t
  357.   if(UpdateFile1.size())
    1 ]+ y7 t, N2 N( Z+ n- `8 D) k
  358.   {0 ?) j9 Z/ B" S- v" P  a  m
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 ]% n0 d' J9 x+ y- Z' i4 i
  360.     {" H+ F4 [) B. Z$ C
  361.       file=(*p).second;
    , U/ }7 B2 Z( L2 ?
  362.       free(file);
    ( s3 T/ C! k0 s# g; P0 C7 z
  363.     }
    ! G5 G# b" z: @! g# N" l7 Q
  364.     UpdateFile1.clear();( [" B' P+ q( C( E. _% C" z
  365.     UpdateList1.clear();
    . ?6 j# m# c: \3 r* c
  366.   }
    ) F7 r& t% o+ Y
  367. }  
    6 x* B. E" c7 f' Q6 n0 [! a% e7 f1 O
  368.   
    + r0 {- x8 p1 Q$ ]! }5 F
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    / V+ l' }* d/ F+ b. y$ a
  370. {( P( o# g- v  |4 H) S
  371.   int c;
    4 q4 n  c% P' H& ^7 R7 \  ~* O: D
  372.   LPUPDATEFILE file1,file2;
    $ F6 D; l9 d! L3 b$ c+ F$ B( x  M) h8 l
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) t. j# @+ q- w4 }
  374.   std::list<CString>::iterator l;3 n* d3 ?( n0 V- G" h. |4 K( }

  375. ; v; M7 v9 K7 M" l" v
  376.   UpdateLocal.clear();/ R' G, W, D; k) S1 a. ]1 ~% l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / D: d6 }3 o: Y) S; l3 C' H
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 I& P" ^9 A2 h& ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);, X2 q. }9 H% I8 s2 [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    - d2 i5 M  ^- u3 M; g
  381.   if(UpdateFile3.size())/ f/ V% O5 M0 A1 G
  382.   {
    : o' e* m2 j8 l7 ?- T$ D& q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' c, h4 A6 R/ w5 j2 ], i
  384.     {
    0 w) M# p3 T4 @' ~: g
  385.       file2=(LPUPDATEFILE)(*i).second;# H8 [" V$ U4 \* @1 s
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# I9 [& z. R1 }4 T
  387.       {
    ' I. k3 l* l3 n/ {5 z6 Y
  388.         file1=(LPUPDATEFILE)(*p).second;" y, s' s2 P$ A+ P# X6 ^
  389.         file1->vers=file2->vers;
    ! K! H- g& k2 W$ O9 B% }( I
  390.       }
    ! G& V" j, Q' _' W1 z7 A& Z7 g+ ]
  391.       else  L0 ?$ P1 C9 u7 v
  392.       {* p6 n9 g" }0 P6 o
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) Y2 }/ N0 t4 V1 u* S, }9 ~
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));6 Q  _: w1 `* r; Q  P7 C8 ~; f  [! p) {
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ) m- Y  J! k& k  V% s
  396.       }: h$ i: d* u: V, Z/ K4 Y5 G  E
  397.     }) k) ?8 o& c& \$ [4 q
  398.   }
    6 w) a) M( i2 F' o& ^5 z6 P
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 N7 s' v' @8 I4 @8 [. R% K
  400.   {
    : M+ u, D3 R. \0 {+ v' o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  r# c. \0 w. u, z* z- _
  402.     {1 {& @8 u7 E  t1 E: a
  403.       file2=(LPUPDATEFILE)(*i).second;+ k* s& l8 j! i0 y( b9 p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 }9 }" f$ J( Y( }- \6 M
  405.       {
    3 O( u! a+ x* }) z! b/ T
  406.         file1=(LPUPDATEFILE)(*p).second;
    # i; o6 b6 R2 @, b$ j/ `
  407.         if(file1->vers!=file2->vers)0 x# |& x% }; F1 v
  408.         {  n; |* O0 y& T8 @6 z" p/ @
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ K7 G7 W) P$ z* C1 I+ g$ S
  410.           c++;* J" ~- P' }: @& f% [4 c
  411.         }
    ; f  F) D( s( C/ ?
  412.       }: u8 |/ S' B4 S* v/ ?, t  P
  413.       else
    ' j8 y# b* k# x; ?
  414.       {
    8 p2 w( M  L4 k
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 C. T* N0 R) W7 I& @9 o
  416.         c++;
    % E6 U* c6 _3 ?6 y! Q+ J- Q) D: U
  417.       }6 I6 z6 i+ B+ ?; l
  418.     }# k$ d/ N/ D* h5 L& n3 y- u/ C
  419.   }
    * d, o, L$ D5 ~$ U- d; U* c
  420.   unlink(".\\DownLoad\\update.txt");6 [. _+ `& p1 G7 u
  421.   if(UpdateLocal.size()) return TRUE;0 g/ p6 }! U. l3 |2 o: t5 {. q
  422.   else                   return FALSE;
    8 c  ~# Y" v( C% @5 J- s
  423. }
    % Y! F5 G" N  r; [3 z1 u4 k
  424. " {5 \; b& r  a0 A/ z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 Y# Y9 P& }6 f& s0 P/ u" K# G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"" l+ C! N+ L' M0 v) k) g. I9 |1 Z

  427. ) K7 Q4 Z2 o0 `& @& O
  428. # ^& |# E, ]0 O, i0 z- {+ O
  429. ! ?' ^+ U$ X- G: d7 n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  k$ T4 V0 q6 U. T7 a
  431. {
    : A9 D5 S$ C0 ?7 F( `6 ]& J1 w
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( S# L% t7 c4 k. V
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ R" f# w+ W$ ?2 h) `# R5 O
  434.   {' a' G3 o2 B9 y, q4 h" m
  435.     char szLanguage[50];
    * u+ n& n: i: U' T9 _- }+ @/ ?( P# @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    + I6 i# I6 N+ i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 I; |6 M% O, X& p) a
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" c8 T. ]1 j8 t1 n" N, F; _8 M
  439.     else                                   m_iLanguage=ENGLISH;
    % C4 C& t$ O& R8 p2 V; c1 u7 t  J% R
  440.     char szRegister[100];1 i# s5 M, ^7 e* N1 X
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " V  l/ J1 \: Y7 W1 x  v5 _( E% C( Z; }
  442.     strRegsName=szRegister;
    $ C* l* h: z4 K4 W
  443.     char szPatchURL[100];
    2 Y: ~5 x0 H) A, S
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " n- E7 m$ h, {5 P1 I, Y1 v
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 p* F9 h) x* e3 q/ Y
  446.   }+ ]4 p8 t  z, J/ h- p' o0 q  g, S  _8 W
  447.   else4 I4 c" g) f0 m5 _1 T8 r6 l0 E- Q
  448.   {$ z. `" q( n$ S% G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);5 A$ ^8 [( @$ |' m
  450.     strRegsName=DEFAULT_REG_URL;- y& z& P$ A9 h' j$ w) S
  451.   }- r6 V* w2 t: [! p. s( `
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ' m- ~$ w  \0 J: ]8 ?, O
  453.   {
    # E' [8 l( ?8 b) ?2 S& L* h9 b  }  l
  454.     char szIP[50];
    + d) y' s) H/ b2 j
  455.     char szDIR[300];4 U" ]; b, w& Z- j- f  U! |
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    5 y# T9 j/ e* r
  457.     {
    9 {9 I$ y3 J' w  F# r5 m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ) T; o8 H+ m# I# w3 `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");4 d1 h+ ]& e+ _
  460.       strHostName=szIP;
    # B! k1 P6 j! L' [/ W% B
  461.       strHostPath.Format("/%s",szDIR);, e' H0 c+ W( V$ \  {' T/ J7 }
  462.     }) V5 ?; |4 A( A: Q
  463.     else4 e# g+ @. z! r2 f  u
  464.     {4 U" s8 K6 J8 T0 d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; k9 X& T7 C2 x9 p/ ^
  466.       {! k$ l% G0 A! ]; l+ s- h
  467.         char szLanguage[50];
    4 r& l  ^; S; J5 e4 G
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 P% a7 l$ ]) B8 A4 R3 i, X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , ]# ?& h5 \% u
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 c/ m& B, E. L, \# w5 r! b* c
  471.         else                                   m_iLanguage=ENGLISH;
    * ~% B7 R) q" ~. X+ O
  472.         char szRegister[100];4 j! \6 O% d* g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 }2 ]  R" ~2 o% Y
  474.         strRegsName=szRegister;* ?( o8 Z$ N" x( }4 V( M+ `  F
  475.         char szPatchURL[100];) v( F/ d* k. y9 s4 w0 M  X
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% D9 h7 W+ P  x3 }) A0 `* e3 t
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
      Y& f( ^- y+ d9 ?
  478.       }
    % D2 r+ ]5 g2 K) H, _6 s
  479.       else' ]9 y. w. O6 ]+ M1 F  v5 R/ s: a. s
  480.       {& ^2 [: d+ \  l2 _, |7 V! y0 s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* V5 {2 G" t' }" W# {3 i
  482.         strRegsName=DEFAULT_REG_URL;
    - U' n5 [. V0 Y1 L- u
  483.       }
    - q8 Y5 P+ o$ L( j! P
  484.     }/ }) _9 C' k% N8 ~, p
  485.   }
    6 |1 |) m5 U5 Q9 D
  486.   return true;
    9 P" X8 a' l* c4 y7 v5 E
  487. }
    ' B" w$ a( [/ O9 x
  488. ! j, A  R: Q: C, P& j
  489. #include ".\ZLib\unzip.h"* Q2 H, {. e6 ?, L% L6 v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, j; ]$ A4 P/ w: p5 r2 B3 |3 s
  491. /////////////////////////////////////////////////////////////////////////////
    & {4 |- W9 y% c5 A2 w
  492. // CRevAppApp initialization. M/ X! T3 C' `/ K6 C

  493. 5 k: H& I' N) T/ `" C  X0 p
  494. BOOL CRevAppApp::InitInstance()
    - a4 k. q  m9 n1 O& J! U5 c
  495. {( P& G0 [, o' ~/ E! ~3 F. Z
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];  }4 s/ ^! |; b; k/ Y( O
  497. 7 h( A9 ]. j5 F9 k
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) |; g$ e6 S0 B, M" m1 [
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))' u; ?9 Q2 X; D% e8 ?
  500.   {
    . H; \* u* t) |) J: J  U% |6 @1 [
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: B9 \6 o7 m( o4 E, u
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( Z4 u! R  m7 x: D# g, n( O: l- `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    : V7 U- |# o1 p( I' O9 r( D
  504.     {
    ' T9 ^' S" u+ _" i6 k
  505.       strcpy(szPath,szPathTarget);$ [$ N  m% L. t6 p! O8 l
  506.       SetCurrentDirectory(szPath);
    ( K9 z) v7 Y! _4 K$ E' \
  507.     }
    9 p; L/ f4 d- ~. `) S. i4 l
  508.   }  o: G7 o' ~# g! x' C! M
  509. #ifdef _DEBUG
    - m( G+ F4 `. z* y. l5 X( d
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- j3 l8 @, w" \; H# |8 c( \& Q
  511. #else
    7 D  v2 \& }3 z2 K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). q& b: i! [9 Z! e5 i1 S/ v
  513. #endif
    1 Y8 c4 O, ?  Y' W2 z7 g
  514.   {
    + o' e( X3 ?9 a# W, a* C
  515.     char tempFileName[MAX_PATH];9 `7 e2 \: Q8 v+ a( F
  516.     strcpy(tempFileName,szPathSource);
    $ _# t4 O4 J, ~- s5 c9 |
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / m1 O* ]4 d0 X
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    , o1 r8 O- ^7 j' [- w
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 v: f/ `& N3 p3 q) x. i! G/ _$ Y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 V4 ?8 N) Z& n1 M( f9 l5 \6 N
  521.     return TRUE;4 E$ Z; T0 [6 n5 i+ r& p+ A2 C+ ]
  522.   }
    # p* y4 t0 q: r$ n, Y/ ~+ v; f
  523.   // Nuke 0118: Delete run.exe* N4 a" k9 X7 |9 o4 t3 ], w
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    8 P# [: n& l- Z0 ^/ P7 M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
      E* J) ^1 |) P! j* R% r& r$ k
  526.   if(!ReadCfgFile("Config.ini"))
    # o9 s' @$ D5 w
  527.   {
    ( v& h1 |# J$ C& W- [# `! Z9 u8 B
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);1 I& w: _# Q, ^, D  D
  529.     return TRUE;1 |. o5 ~& `* ?6 _
  530.   }
    ) U0 r7 U4 }( J2 T" g: q2 y
  531.   HANDLE mutex;
    - `+ U: i1 U1 i8 y! `" G1 v, h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    1 r" O  T) H0 r" H
  533.   {
    / k) q  o- w1 Z& L5 O) T' m
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), G6 s, I/ d* o2 F8 K, F
  535.     {1 c2 B0 X  N- v) V' Y7 x2 i9 F
  536.       CloseHandle(mutex);9 c6 e1 i! \2 f) L9 [
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);3 ~8 d3 N1 R* V  L9 }0 f1 N
  538.       return TRUE;
    5 p( R& n5 a/ T' `
  539.     }# i3 r% w& [$ e% @9 Q( r
  540.   }  7 y# ?& H2 @  O) J4 `. K2 F6 N* N
  541.   CloseHandle(mutex);8 J5 a( D& i3 _: }5 x

  542. * l- w% R6 H7 N) n. I# \% e
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. l0 E, c$ c) X4 p
  544. ) r0 N; ]. E" m0 T
  545.         AfxEnableControlContainer();
    1 ]1 y3 H% P# Q" f
  546. * x1 b3 n2 f& V
  547.   bCanUpdate=FALSE;* l$ v1 f5 \9 }( |/ A# i4 q4 p
  548.   dwStartUpSteps=1;
    2 \0 t8 s2 y( w$ b/ `
  549.   dwProgramState=AP_NOTHING;( d, h. X6 b+ F" O; E
  550. 4 U& V; @3 l/ m' w
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    5 S0 d+ }) F/ U; Z& r# C& V
  552. 8 [" d2 W9 i* B3 i
  553.         // Standard initialization/ h/ @) q8 E3 Q, R4 P  w- t4 l
  554.         // If you are not using these features and wish to reduce the size0 j, h- ]: n0 Q4 a! C" B
  555.         //  of your final executable, you should remove from the following! d% W& c3 h% G/ Z+ Y
  556.         //  the specific initialization routines you do not need." X, y! z5 @  u: G0 a+ {

  557. ! w% l: g0 O" d% u( g0 z
  558. #ifdef _AFXDLL
    / F- d( @8 T: o! H2 N" R( g; T
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL% @. H; K3 A; {5 m4 j
  560. #else% [! a) z; S( o& R( o7 @
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      t+ ?0 y1 n7 G  I6 u9 i, ]5 Y& p
  562. #endif; L' t& O; n' L/ i; l& ]* Q0 e# V

  563. + R3 R3 H- y' r8 K1 C
  564.   dlg=new CRevAppDlg;5 A; K" p) h2 m7 O0 |
  565.   dlg->Create(IDD_REVAPP_DIALOG);/ i6 Q9 w" f) a1 `6 B
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* N6 S& H# R* {* x
  567.   m_pMainWnd=dlg;9 G( u0 W: |8 J' X% ]/ ?) q

  568. : }% G6 ~. [; Q* Z0 y, }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    * X4 R- q5 d0 X
  570. 1 n# j- p- [, h& h# W. B4 I
  571. //  GdiplusStartupInput gdiplusStartupInput;( O: ?1 Z7 h# \( x( W- u6 r4 h' [$ w
  572. //  ULONG_PTR gdiplusToken;4 q" X3 `0 b4 J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) K2 G! H/ J# C. H8 j

  574. 2 E+ a. B" Q1 z2 B. e0 \1 T
  575. //        CRevAppDlg dlg;  c' @# X' N. N" O: }  f  u
  576. //        int nResponse = dlg.DoModal();
    6 y# O; @' g! A2 l$ _
  577. //        if (nResponse == IDOK)
    / M# `7 G: e. U& J. k/ c4 D
  578. //        {
    8 V9 y5 \# Y, d: r( B! L9 X
  579. //                // TODO: Place code here to handle when the dialog is
    ; F: P6 r1 t' t1 G$ i
  580. //                //  dismissed with OK' ]& c' p- ?; A
  581. //        }
    1 Z1 Q/ `' ^! Q" w! u2 `; ^) e. z- R' _
  582. //        else if (nResponse == IDCANCEL)  l6 c. ^, ]% k  ~
  583. //        {
    2 D8 F( S; j$ \6 K3 O+ J7 d6 L0 F
  584. //                // TODO: Place code here to handle when the dialog is8 j: W3 N% Q, j9 @/ t; c
  585. //                //  dismissed with Cancel
    - m# A9 w" I- z0 J, T7 k* G+ n* S
  586. //        }. z2 c5 s4 l0 B7 h( z5 k

  587. ; y- R1 M2 c: v* |  Q+ j% E% `
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    & G6 e9 f5 `/ r& ]! m
  589.         //  application, rather than start the application's message pump.
    : }7 z- y& B  q# l) l8 E! j! R
  590.         return TRUE;  p# X- x: |6 }: l
  591. }6 B5 l! O; d4 i& ^7 p$ h7 ~

  592. ) b. O7 Z- T0 Y, f) @
  593. char *CRevAppApp::strtok3(char *pSource,char *token)/ i% H( l1 i0 i* v6 B- y
  594. {* B4 p. o3 u# x
  595.   int i;: T2 E/ \6 B1 Q8 P$ m+ _# x- k! c2 t
  596.   char *szRet;/ y( r' O& M. k
  597. # o+ E  l- k5 ?4 o! s7 K& Z
  598.   if(pSource) { itoken=0; sztoken=pSource; }6 T+ E+ f: n' s6 j
  599.   if(sztoken)
    + ?" o. K0 W/ c2 [0 y/ [& B
  600.   {
    5 Z; c) u4 j+ m2 L& W
  601.     szRet=&sztoken[itoken];3 _$ U! |0 ?& w4 Q/ Z% C+ b
  602.     while(sztoken[itoken])$ v) g3 v6 b- u6 P3 ^/ Y
  603.     {
    7 @1 J9 i& ^4 H5 Q' o
  604.       for(i=0;i<(int)strlen(token);i++)8 x/ s! X( C+ r3 t) j
  605.       {/ m! o/ y6 W$ F& a6 N4 p
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
      a' i( X1 s0 V1 Z6 }7 h8 S, J
  607.         {
    # o* U2 l. G( [# G( N
  608.           sztoken[itoken++]=0;3 r; ^3 E4 e" n$ Y3 n; m
  609.           sztoken[itoken++]=0;( m' d+ n/ J$ g" Y6 ^
  610.           return szRet;' L5 Y0 S( {8 V3 J. o
  611.         }6 G! Y' [: P9 m& _
  612.       }6 R. z+ r3 n* S: N/ j
  613.       itoken++;- d# A0 t( ]0 `) y- _
  614.     }
    ) s. u+ m0 R& Q! z
  615.   }
    7 z: L& k: Q/ Q5 S0 T7 I
  616.   return NULL;
    0 m# W* O) M3 Z5 s0 L
  617. }
    3 \6 k7 X, N+ w; ?' B8 f/ E& W( K. z

  618. 7 x8 c+ j' u1 a) Q! ^& Y  m
  619. void ProcessProc(long Total,long Current)) r8 g4 z* B4 O& r3 i+ W
  620. {
    ; x1 E  y+ ?, v: ^
  621.         MSG msg;
    + j  K8 r) U& m2 ]
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    : M' B2 b) I5 l$ f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));) A8 p+ }* L( k2 F$ Q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))6 h- F% N  R- d3 N$ z
  625.         {6 |( y) v8 _9 g8 G1 Q0 y9 ]7 R
  626.                 if(!GetMessage(&msg,NULL,0,0))  a: D$ {* }2 ^9 ^8 O
  627.                 {
    1 y) B# q# B% C( K
  628.                         return;) N* q  Z3 p2 J8 e) r
  629.                 }
    9 S0 z% |/ ?9 Q; t5 _6 W
  630.                 TranslateMessage(&msg);
    ! U9 H! v0 x( R
  631.                 DispatchMessage(&msg);- S( H' y6 {* z8 M: P0 s
  632.         }       
    ) t7 F8 n* x, R/ j5 v$ `
  633. }
    ) }% F  e% |3 d
  634. + Q/ k6 h' f5 [5 E6 S" @! E
  635. BOOL bFirstChar=TRUE;( |0 ]: `9 O7 n8 m% P# \% o
  636. : `) Z/ I6 P% X6 J# c
  637. BOOL CRevAppApp::OnIdle(LONG lCount)* z$ }% y$ n4 e$ g) A: q
  638. {
    + T: a- G$ Q# p4 {! T6 A5 B
  639.         // TODO: Add your specialized code here and/or call the base class& g4 e( T: g# x& g6 q
  640.   switch(dwProgramState)3 \7 ^$ e& @. c0 a" H
  641.   {
    / N8 f! s  o9 X0 d( V+ i
  642.   case AP_NOTHING:
    $ @5 \' a4 E6 R1 q) ~
  643.     switch(dwStartUpSteps)
    2 k6 q, E* k2 e& n
  644.     {
    6 Y7 l5 D9 c* j7 X
  645.     case 1:. b. y, n, _; R
  646.       {( S1 s) I6 {# ?
  647.         int i;
    1 {6 l/ E: h; i' I" a* O8 V
  648.         CDC *pCDC=dlg->GetDC();/ J: V$ d1 m' T  t
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( H% n9 P: Z. t/ y
  650. //        Graphics graphics(hdcwnd);
      B% h7 p3 M4 R, g. j
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 D2 q$ W7 O* K7 h* K: o* D$ o) {
  652. //        INT iWidth=bitmap.GetWidth();/ T$ b. U; `3 ~6 g
  653. //        INT iHeight=bitmap.GetHeight();2 m2 h$ ^; [0 T3 N! T5 |" X/ A3 l
  654. //        Color color,colorTemp;: Q2 h7 _' D' R9 A) }
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    4 t4 L0 Y4 q' r, [- x, V4 N7 k/ ]
  656. //        {$ V( i' U* a; Q( t+ `5 W' m
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % ]6 I7 @: B* T/ o
  658. //          {
    , Y2 l4 B+ U3 R% }7 ^; H4 O
  659. //            bitmap.GetPixel(iColumn,iRow,&color);: [% T" B0 E  i, G2 ~& b" l7 T
  660. //            colorTemp.SetValue(color.MakeARGB(. Q6 ]1 K( E6 o
  661. //              (BYTE)(255*iColumn/iWidth),
    ) D# ^- F2 V: t. o6 b# O2 a" T
  662. //              color.GetRed(),9 X+ |2 ^+ J1 l: G3 D* O' K6 G6 z
  663. //              color.GetGreen(),2 l7 W+ O/ S! R" F
  664. //              color.GetBlue()));
    ' b' p9 i  O9 R! Z
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);9 n5 ]7 t: d0 i
  666. //          }0 r% G, T  i$ ?- @- f" E
  667. //        }
    ! {4 Q! ~! `4 e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);- `  ^1 d- d! j5 S3 y3 y$ Z: e) |
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    * V9 e9 m; N* I8 g: N+ S( V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 M: J1 z& d2 I6 G
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % e4 f% x- p5 w2 P% l# M7 ]+ x
  672.         for(i=0;i<240;i+=8)  ?! E( K* r# `! U+ d* |! t1 d
  673.         {
    $ E. x0 v( ^4 I+ e1 Y: l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ ^8 s8 a1 O% h1 L; n! `# A# }+ h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    7 W2 _- J8 N7 @$ ]
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" |' m6 d( u" g2 v6 w" Y7 n
  677.           Sleep(33);
    1 \7 P( {# _7 b" a) }# \
  678.         }- G5 s# j* ~$ R+ x
  679.         Sleep(1000);, P4 g, y& r; r
  680.         for(i=240;i>0;i-=8)! k) C+ J8 i( N9 c7 i
  681.         {" r7 ^3 {# u, H, H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ V  A& c# j& C! A; W! L" y( L
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);# z# x/ }2 ]) W6 e# k
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. K, O: S) L  t+ @
  685.           Sleep(33);
    + w7 R: a: d4 B( @, k
  686.         }
    ; D, q. L* H( f3 p, r8 [1 u
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( Z7 I  c9 s' Y: u5 z
  688.         dlg->ReleaseDC(pCDC);+ e2 X) G6 y7 J1 C
  689.         DeleteDC(hdctar);
    . I8 r2 J: D: y! c- U# s
  690.         DeleteDC(hdcsrc);
    8 |) A9 v0 U6 ]3 p' H
  691.         DeleteDC(hdcorg);' a2 ^9 M4 n9 Q
  692.       }
    + b/ |" L0 d* L1 D( [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);, t& ^: Y$ Z6 Z3 j4 s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    0 d8 k6 L' p3 p/ G) G. N( ]6 [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' c  @7 u% d4 _8 l" r# D) N5 V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) @, Q# o$ _2 Q' J  S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # \2 H* j/ f1 W  I' d1 y
  698.       if(!Dn.Connected())/ y6 k* F( ?5 p* ?0 D1 V! |
  699.       {' j6 ^6 h0 X5 U& M
  700.         dwTotalFiles=1;8 E, c- X4 ~* a' \  ?3 Z: T5 t
  701.         dwDownLoaded=0;- F4 j" t" A/ v4 l
  702.         bSilentStep=TRUE;2 Q5 l) B3 F: p: s
  703.         bCompressed=FALSE;) w) d; @8 H1 F. L3 r! Q
  704.         strExtLocal.Empty();
      V* p; F( R- |3 t
  705.         strFullName="readme.txt";; K) w; N- p# B3 ]& @8 }+ y
  706.         dwProgramState=AP_CONNECT;
    - V6 K. ~; {6 Q. m. Z7 [1 ]$ @
  707.       }8 F7 j: u2 w! s9 X/ |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ; J& s  G+ |: o( W: n
  709.       dwStartUpSteps=2;
    - Q; \- f9 G: {, J' K1 N! h" l( T7 l
  710.       break;
    9 }& I: X: r0 z9 j0 Z1 s; Y7 C
  711.     case 2:
    ( L4 R" @% y& o( a! d
  712.       {" A- `+ J: I# F# ]$ `
  713.         int iEOF;
    ) ?; c; s* V, W" w; f
  714.         FILE *fp;
    4 f" q( T4 e! a3 s  @( N9 Y
  715.         char szString[512];
    4 b2 ~, Y6 P, t, W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 F9 r+ M! a( S# j# u' e4 }
  717.         if(fp)
    3 e* o4 g: z5 e8 H. E& b% b% T: k
  718.         {
    ) C4 ?- d$ {, P& S3 w6 {  _0 j
  719.           do
    - i1 V. g- s, J4 \
  720.           {
    % c. k9 r+ B5 A
  721.             iEOF=fscanf(fp,"%s",szString);  v/ c3 W  Q! V6 B5 f/ j& c: B8 r
  722.             if(strlen(szString))
    2 e  W" o  x' C+ m  F! Y
  723.             {) L: b% e/ I  s3 W/ z+ F
  724.               if(bFirstChar), t! e+ j: L! e7 [8 R/ h, W
  725.               {# g, V# I' j8 q! T7 \8 q" j
  726.                 bFirstChar=FALSE;
    ! g1 G% q* [9 ?0 B4 q2 W* M
  727.                 bConnectIsBig5=FALSE;" E! C1 W' M, Q2 r; P# ]/ R3 G( v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( k8 J$ n& N+ J5 K) _
  729.               }% Z6 {6 Z7 w& V0 c' v
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    + f7 L$ u! |. {! h3 R
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - `# b; l; i6 e  }0 p
  732.               dlg->m_ListText.AddString(szString);1 I5 r6 K6 o& q/ K
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 G0 E3 ^  l- h% W5 Z& |9 z
  734.               *szString=0;, ~6 q' U- [2 ^6 ~  a
  735.             }6 Y* Y' M- W' s! ]5 Q5 \
  736.           } while(iEOF!=EOF);
    ! F7 @3 `+ U% i2 F  b% n
  737.           fclose(fp);" {/ k# b3 w9 U6 T5 a% G
  738.           unlink(".\\DownLoad\\readme.txt");/ b0 Y& |' R% p1 G- M( W* g
  739.           dwStartUpSteps=3;
    5 S  H" n6 A/ Y9 L: P
  740.         }
    " _8 {- i' s1 x6 \- ~7 x% W
  741.       }7 ?, f; s' m' L
  742.       break;4 K; m8 [' K7 b) @
  743.     case 3:9 D7 I- d9 [7 P' b" [' L# j' b4 H5 ?
  744.       if(!Dn.Connected())
    % a3 M& k, s! k1 E4 `" d2 Z
  745.       {
    # b2 V: \: {3 C! b, \+ \" B8 t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - [4 \# Q- u8 `
  747.         dwTotalFiles=1;) o  u: R0 H0 _2 G, x/ i4 k, Z
  748.         dwDownLoaded=0;$ F+ n% A& J0 U. X' m- O* m
  749.         bSilentStep=TRUE;# \/ I: l! t; T
  750.         bCompressed=FALSE;
    7 M  o, U- T5 U- U/ c! p: |( y9 R
  751.         strExtLocal.Empty();' @; v' w4 A) b
  752.         strFullName="checkversion.txt";! L* ?$ O+ b+ y4 Q3 p
  753.         dwProgramState=AP_CONNECT;2 d  [" D* v% u" s% V
  754.       }9 D* p+ h9 X( |6 D
  755.       dwStartUpSteps=4;7 C! d1 L7 l' ]: o6 u& {9 H
  756.       break;
    2 D0 ^0 |8 G- d
  757.     case 4:+ _6 F, [7 O# Q  u( l9 L1 O
  758.       {
    . j- d. H2 z/ B3 y+ V$ W9 \
  759.         FILE *fp;
    3 f, @4 }: Q- o% k" W# e9 d# P& @
  760.         char szString1[128];
    / v- }; p# g7 C* R
  761.         char szString2[128];( e# Y5 U  X# l: ?1 Y6 l/ g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");' F9 B6 Q: u- c5 I4 ^0 T1 K
  763.         if(fp). ]8 w+ \0 F2 \. i8 R4 ^
  764.         {0 o- n! }+ k# U/ r! _! e, R: ?, j
  765.           fscanf(fp,"%s",szString1);
    * p9 c9 S0 }! y9 W) T
  766.           fclose(fp);. f# V1 ]. B+ a( q) H" y+ @
  767.           fCheckVersion=atof(szString1);9 E: I( C! ?0 p- S& g: h! {$ u
  768.           fp=fopen(".\\checkversion.dat","r");3 [9 G6 K) e4 V* Q) Q0 h0 Y8 N% b
  769.           if(fp)
    . k1 Y0 O2 [( u, e1 E
  770.           {' T2 t7 F; _; n, Z  \
  771.             fscanf(fp,"%s",szString2);: B+ J$ o% p; b# t! C
  772.             fclose(fp);
    6 j4 G# ~- \% j+ h
  773.             if(atof(szString1)!=atof(szString2))! t0 e" z# w& C2 i/ s" c
  774.             {
    , N$ M$ j" R( M+ p
  775.               if(!Dn.Connected())) K! E- Y7 X5 d+ Y
  776.               {
    9 c; y9 N; |9 T- i* o
  777.                 bFirstUpdate=TRUE;: W- R# E# v0 S/ W) Z7 {
  778.                 dwTotalFiles=1;
    $ a! A$ w( T: l$ n  h" o6 I% K# w
  779.                 dwDownLoaded=0;' W9 J: d$ F9 _. D6 d
  780.                 bSilentStep=FALSE;
    . i; d% G/ {5 T& ]" E* b; ^
  781.                 bCompressed=TRUE;! R6 K4 ]% d& S, t, D! d" Y
  782.                 strExtLocal=".\\DownLoad\";
    : J) }5 s3 D$ f# }
  783.                 strFullName="update.txt";
    " ?" {/ o# b6 G- B
  784.                 dwProgramState=AP_CONNECT;% g; w" x* O4 r) W' }! V& B& ~# A
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 N  S2 E, o3 H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) @+ S! W7 b' a! O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + R0 y4 v" n: R" ?! q2 s7 j
  788. & n1 A: c" p- h0 S4 A. T0 z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 u) G( D: y6 z& O& q4 k
  790.                 unlink(".\\DownLoad\\checkversion.txt");- Y* O# ~& a  u( n# c8 y! Z+ f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) Z. w6 L+ C5 x  S
  792.                 {
    0 h0 i' q/ C6 v4 h& a
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 o; ]3 N7 W& v3 l& Y, h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    3 R3 t; R7 f4 c6 @$ ]3 a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ( d/ ~) o1 f' J# s: ]- c
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( Q0 ^* R. t# S+ @; k% z' }

  797. * W1 O' U  @" v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' g4 D" |9 W" w  g8 P4 c
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ( N3 i6 M! `# }' G
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* i1 i8 ~, ^% s
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! c% H) E3 ~+ H* K6 j$ Y7 Z8 p, _
  802.                 }
    ! W, u6 l2 r- s9 y# `
  803.                 dwStartUpSteps=5;
    - g5 p% `4 y. }! w8 q4 K6 ]  d  l$ E
  804.               }0 E% \5 E6 y4 C
  805.             }' H0 Q7 {# U0 ?) a
  806.             else
    , f# l5 M) G7 N
  807.             {1 ~0 q- D! r9 F5 Y" U( P9 K( C
  808.               unlink(".\\DownLoad\\checkversion.txt");  a6 w# E- g) ~( a2 h- M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");3 t" {4 c; Y5 L* q" Y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");3 K& A3 Z' G8 V0 }- \  L5 P+ s' y; p
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");) _" n8 A4 \3 b7 v& [" V; |
  812. 3 |  _9 P$ l' }0 s* a$ X
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / J6 R6 a$ Z4 s9 S2 j) P" U
  814.               dwStartUpSteps=99;" e8 M! p3 l* Y- @
  815.               bFinishUpdated=TRUE;' p1 v# U" t& Q! \
  816.               bCanUpdate=TRUE;% s, \$ S4 c! w$ C3 S
  817.             }& W9 `) ]: V$ i* w' J
  818.           }
    6 j0 W! I1 l  S5 W* e) a  v
  819.           else
    ; b/ ?2 y9 M9 s; V5 ^+ Z! z; R
  820.           {
      |( ^9 |# O" p3 \  A1 w
  821.             if(!Dn.Connected())4 g3 S; j' s$ @. x3 i4 y- Y
  822.             {
    / r6 [* A/ [4 ~3 x! t
  823.               bFirstUpdate=TRUE;' q( |4 X# _" c
  824.               dwTotalFiles=1;: }* m: j1 J( {/ D9 m& Z, u
  825.               dwDownLoaded=0;
    1 Y, M+ C! ]* r# P/ o8 B7 G
  826.               bSilentStep=FALSE;
    0 n1 r9 h4 {  Q9 I
  827.               bCompressed=TRUE;) l0 N% l2 q& [4 F# Y3 r
  828.               strExtLocal=".\\DownLoad\";
    ' o. L6 |/ z6 ]
  829.               strFullName="update.txt";6 w0 I$ E0 l8 U' {" j
  830.               dwProgramState=AP_CONNECT;
    6 T$ y8 o# X" g% ?: H! u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, A5 k# v4 ^" K) m) ~+ W% Y# o/ ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , V' k- `* N0 V5 ~
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 _2 y3 j& Y. @$ l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " p$ x, I7 T, d( t
  835.               unlink(".\\DownLoad\\checkversion.txt");% K1 T( ^3 U* w  q1 L9 y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    # [5 ?0 f5 j5 F  V3 g
  837.               {
    ; [. Z% l6 b6 P% ^5 A- G' U1 ]/ v: @
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");) j& S5 b- ~8 z% T, Z9 k0 z  h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    4 c7 c: K# B- X5 U5 j' O6 E* x
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");  t8 k8 q3 j$ u4 {+ k7 {) s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 T4 l4 F% Z# A4 I* h9 I1 M9 I
  842.                
    4 `! N* X) H/ w, s; G
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");( l* ^9 ?9 S3 Z( S
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . r$ G' b& O* K( |6 v$ J
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - `0 X, c; S  r/ g7 x
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( }0 U5 Y$ I" r
  847.               }" m# p7 U5 w: ?, k
  848.               dwStartUpSteps=5;
    & K; o% i/ A8 O3 |6 m
  849.             }3 ~2 K5 s% Z7 Q2 R
  850.           }
    8 X2 B7 N& |6 R* z( A$ |8 r
  851.         }9 {; a5 k6 d$ X% N9 F" {
  852.         else
    3 V* D* A; s+ A4 J/ W2 i" D
  853.         {
    ! x/ G$ _4 S; k+ O" \
  854.           dwStartUpSteps=3;
    / R$ }  g6 j. s/ O! A
  855.         }
    0 b6 V4 S* d. ^. [0 |. b
  856.       }' V* t$ ~+ x+ b- N% m6 z
  857.       break;
    3 n. G/ a, E5 \4 t( O- w
  858.     case 5:
    0 |1 t: T. R8 `) u  J
  859.       {' h2 J/ x& b' w
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). _/ Z. o" e( {* @* E
  861.         {9 v+ a$ O6 i8 z* p7 d
  862.           int opt_overwrite=1;
    & w9 V. X# B5 S) u
  863.           int opt_do_extract_withoutpath=0;
    & f* n6 u: N' V% `6 i
  864.           unzFile uf=NULL;
    / ]  i! m# d9 P2 w' G( B; L$ M: `

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

2 o- y# v/ q/ T4 T5 K* B9 G
5 \7 v) y3 k# u6 t2 V6 X( z( j

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-13 20:34

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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