找回密碼
 立即注册

CSUpdate.exe源代码

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

# m2 I* M0 w* @# E: l, ]% u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    : z( F5 k9 g1 f
  2. //
    ' ?* Z/ \4 F: F2 M3 @  l8 U
  3. ' K1 {3 B( G" A& `3 M6 u
  4. #include "stdafx.h"
    9 K( R, x; K& [, ^* q
  5.   Y- E" L4 J" l. a( Q$ _
  6. //#define UNICODE$ q1 L* z2 P7 k/ Z0 x" z" `
  7. //#include <gdiplus.h>) ]& `, V+ j7 F+ `, @! ^
  8. //using namespace Gdiplus;% r1 P- p  x) j- _0 {
  9. 2 l* Y- s! Z0 ]* l1 J6 [# n/ `* X
  10. #include "RevApp.h"- s+ W: U! y6 k3 @8 p, ]8 }1 L- l
  11. #include "RevAppDlg.h"
    . x3 D: v. w" S; X- h6 @" p: G/ Y3 O

  12. & s' G- j6 M3 U- }$ A. ]9 y" J
  13. #pragma warning(disable:4786)
    . U0 H& `+ e1 x3 n: j
  14. #include <map>1 D3 Q$ e6 V4 d
  15. #include <list>; A2 e' i# ]% t/ X0 e6 t" U
  16. #include <direct.h>
    / x$ [7 j8 e) f+ w$ t0 o! {
  17. * D2 U& e4 E' O3 z' `
  18. #ifdef _DEBUG1 z; @  @% r0 e) b0 b; K, j
  19. #define new DEBUG_NEW9 c+ q* A. U8 M! E
  20. #undef THIS_FILE
    * G1 A; S. T1 l4 ]( K
  21. static char THIS_FILE[] = __FILE__;
    : m, i( m0 `8 s, }
  22. #endif, r, o$ w$ Y; c9 i. f9 D
  23. #include "SkinResDef.h"  U% g; n8 s2 v1 z' z
  24. #include "ChangeBG.h"+ p; f, r- y4 z- b" B5 P
  25. #include "AFXINET.H"( o5 G. ^. P$ J+ R4 }! m  A" g

  26. 4 B8 z& U& ]3 Z4 Z. a
  27. #define TRADITIONAL_CHINESE 0
    ' Y- t3 u. `# Y+ `% x
  28. #define SIMPLIFY_CHINESE 1* t' ^! r+ d* _  v
  29. #define ENGLISH 2
    % F; \4 C8 T! ^  n6 H3 t
  30. int m_iLanguage = ENGLISH;
    . T6 u* l5 E0 ?7 R
  31. /////////////////////////////////////////////////////////////////////////////
    1 Q" X+ w9 K  m* u2 M7 r& D$ p. X; Z
  32. // CRevAppApp* ]3 M1 H& l  @
  33. ' z) f& ~) P8 p8 ~$ q) V! V! M1 `& K, Y
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! r5 J: t0 @' Y( S
  35.         //{{AFX_MSG_MAP(CRevAppApp)& T2 [( Z* Y3 o6 p' O$ x5 C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ; j  T" d# c* i* n# g' j2 d# ?
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!. \' i+ k# Z/ O# E0 J
  38.         //}}AFX_MSG
    5 Z; g7 T" o0 T0 u$ D8 Z  Q$ I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)6 m* [" h5 W. X4 t
  40. END_MESSAGE_MAP()) p/ j) g2 ?5 ~  P+ A& n$ P! o
  41. 9 Z( o/ S2 x6 I4 t& P! x
  42. /////////////////////////////////////////////////////////////////////////////
    " h" h: v8 I4 E2 s1 Y, D  `' b2 A
  43. // CRevAppApp construction! r3 s% f9 @" N0 a& L5 @) z
  44. 8 [) c; |  q8 D
  45. CRevAppApp::CRevAppApp()
    3 G: m/ i8 }% G% e1 Y3 u
  46. {0 I5 D. ?- {: U
  47.         // TODO: add construction code here,
    & w9 f6 n# ]: t/ c
  48.         // Place all significant initialization in InitInstance& Z) D) \2 ^  m9 Q) x, Q8 }0 n
  49.   bDisplayIsBig5=FALSE;
    / @) ]  v- W( o/ }8 ^
  50.   bRestartUpdater=FALSE;4 D) K! S4 g' h6 F& q# {
  51.   bFinishUpdated=FALSE;4 C8 I/ ~$ R1 Z/ T- c4 h8 [$ f; V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    4 M$ e. w4 M0 M/ j6 s$ [
  53.   InitChangeDataBig52GBKS();( ]9 j' n3 D  k  g
  54.   InitChangeDataGBKS2Big5();
    5 ~5 K. D9 i9 G; y0 ~5 \' c
  55.         //8 b  |( d1 a9 l4 e
  56.         bClickRunExe = FALSE;3 M9 Y8 x3 y0 l& c  G0 p* S
  57.         //
    $ E6 o+ u0 ]! ^+ u, i
  58. }% C- D8 e$ N* A* M  d
  59. 8 g  F3 `: K, p4 _! l% m) A7 S, f
  60. CRevAppApp::~CRevAppApp()
    $ C7 Q* ]5 `" [
  61. {
    % ~! g; s: b6 |; @2 I( F' F
  62.         // TODO: add construction code here,
    5 M7 o  t! N6 ^* M
  63.         // Place all significant initialization in InitInstance" c+ a* P& X& ?
  64.   EndChangeData();
    4 p# e2 M+ ]5 |7 h, l; B
  65. }2 g* @- {8 t" V8 p
  66. 9 h2 C" l( o5 ~) t9 V! u
  67. /////////////////////////////////////////////////////////////////////////////
    ; M% R5 t. U+ b& K* p
  68. // The one and only CRevAppApp object
    9 Y9 }; m. s$ _! N& ?
  69. 0 S+ g$ m/ Z+ K& `; e/ j, t
  70. CRevAppApp theApp;& U. p# S) q+ x3 }
  71. 8 t& z$ Q7 R* a
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    $ W- C: t6 S  M8 n$ k9 t/ M- n% `
  73. {
    2 O% u/ `0 d0 J
  74.   int iEOF=0;' l* i2 q$ g- T9 O& K$ F- v
  75.   char szTempName[MAX_PATH];
      f+ D. G6 n* ]  R
  76.   *szFileName=0;7 K% }: R0 y6 n/ z0 W" Y( Y
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % z2 b3 C9 [' v6 z" e+ E
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ' ?- _4 Z: y0 \4 {# R" R
  79.   {: l7 Y" a" a4 ^5 t
  80.     strcpy(szFileName,&szTempName[1]);
    2 h' Q7 e) L- a/ H
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    0 a. A8 V# \: E4 `# m
  82.     {* s% v$ r# Q: y9 w* ^
  83.       iEOF=fscanf(fp,"%s",szTempName);0 h7 }2 ]* B* ~. t. s. u2 \
  84.       strcat(szFileName," ");
      T! j& L4 J4 R) C) h
  85.       strcat(szFileName,szTempName);# V1 u6 z9 U0 E# E, L
  86.     }
    4 H. H* F8 t# _8 j1 S
  87.     if(strlen(szFileName)>=1)/ m2 N' E0 @+ f5 G; L+ U  F& c
  88.     {8 \' g4 O+ |6 _$ I9 a' Y
  89.       szFileName[strlen(szFileName)-1]=0;
    3 F* d8 L% X' B3 C4 Q2 z. n3 W& W
  90.     }& N* ?" B, r5 P2 {
  91.   }
    * b9 F' X+ v( k
  92.   return szFileName;6 ~! o( D6 D$ k
  93. }
    # L' M6 _/ ]6 ]9 w/ ~
  94.   {' u8 C* |7 E8 i1 G
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : |7 K/ j2 E4 R) g+ ]3 L- J) y
  96. {3 f$ d5 Y' W- q% ^& E% L
  97.   FILE *fp;
    4 G& ]7 c5 g- j' B0 P. A: Q
  98.   char *key=NULL;/ D$ H! X1 E& C  N9 u' i2 s
  99.   char version[MAX_PATH];
    - `, b. B& ]( M. t, Z3 T& {! L6 _
  100.   LPUPDATEFILE file,olds;
    0 z6 V- @* w1 h& T5 t" G  U
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- S, j! P% S" g/ x) z2 j6 x0 I
  102. # J& m5 ?0 f0 T3 w4 X/ \
  103.   UpdateList.clear();3 F& r. z4 K& [# {# D# y
  104.   UpdateFile.clear();
    ) p, s5 B  P3 j. v9 O
  105.   if(GetFileAttributes(filename)==-1) return false;! f* W: D5 k4 e+ g2 H8 a
  106.   if(!(fp=fopen(filename,"r"))) return false;
    2 d0 V0 H0 }- l* d) ]+ B
  107.   fscanf(fp,"%s",version);
    ' s0 f8 ?" O. r1 ?/ r9 i4 G0 A
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' C# A* A& V0 \0 |) ]" R
  109.   while(fscanf(fp,"%s",version)!=EOF): I5 W  W  p' }3 B
  110.   {
    " n" @# _# @* a9 H& g2 j1 F8 ~
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % Y) X) P+ K2 K6 e! m+ P4 T3 |) x* {
  112.     fscanf(fp,"%s",file->path);
    ) i% C. W! c9 b' L3 R6 H
  113.     ReadFileNames(fp,file->file);
      x; D1 {2 A$ q8 D
  114.     strcpy(file->full,".");! y' N3 \8 B1 ?* e" X& e
  115.     strcat(file->full,file->path);: a6 C/ b" H* S
  116.     strcat(file->full,file->file);
    3 g4 a% U8 W) e" x) ]8 ^" e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), U0 Q7 y# m& p! M% q
  118.     {) l  \& }7 u0 V5 y
  119.       file->vers=(float)atof(version);
    / \! d: [6 t# ~+ o) S; N1 k
  120.       UpdateList.push_back(file->full);- z8 j. l& z9 C. e
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));+ `: F9 Z, i. J' ^0 g7 ^. ?- u
  122.     }# a5 n0 T8 U0 H7 ]# c7 i& }
  123.     else
    ' f* B( {& X0 v+ F1 ^( Q/ [, D, x
  124.     {; `4 Z" b3 Z% u5 |4 f4 |& f0 \
  125.       olds=(*p).second;
    1 ~/ y  H' |. F0 c( \5 B' K; K
  126.       if(olds->vers<(float)atof(version))
    : r5 t+ f5 P, Q) _( r
  127.       {# k, O* E! ^; s  k4 L
  128.         olds->vers=(float)atof(version);
    * M, A" h" @' \: h: [* e
  129.       }
    " A& D+ c2 {" Z( Z% ^/ p3 ?
  130.       free(file);
    + C7 i3 d/ g, m
  131.     }9 x2 I; g* C0 a- N+ F7 J& v2 J) c
  132.   }
    ) v5 z. S' n; Q) @7 _6 h
  133.   fclose(fp);. c* r& r% Q% I; m$ t$ x
  134.   return true;+ w0 w" l" a2 D$ [: K. \
  135. }, p; K% S8 K9 |& C" v' L0 s: p. ~

  136. ; i2 D8 w* x# k6 }! K
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)# ]; j% u7 J9 T( [
  138. {
    ) |2 S) d! s4 @( `# N
  139.   TCHAR  szFull[MAX_PATH];/ c& A; j' u' F3 U3 e
  140.   TCHAR *token,*inter;
    2 L4 s# u6 P* l( E4 {6 ~
  141.   *szPath=0;
    / ~& Z; Q+ c2 N. x$ L
  142.   strcpy(szFull,szFullPath);
    ' F- i4 A* r- I1 o6 s) E% L" g
  143.   token=strtok(szFull,"\\/");$ R0 d9 {+ ]/ R1 D
  144.   inter=token;( N$ [5 H8 q' j3 _6 F' L
  145.   while(token=strtok(NULL,"\\/"))
    $ n# d8 F9 I& p8 K: ^3 u6 J$ ?
  146.   {+ F/ D$ A" X& h! i% t  T
  147.     strcat(szPath,inter);8 a- |5 B5 ?. @' Y6 Q. Q
  148.     strcat(szPath,"\");! L/ w. U  j/ b
  149.     inter=token;$ p' |/ L. ]4 a: v0 |+ Y5 i( T
  150.   }# F; @" R- C) s4 N
  151.   return strlen(szPath);8 ]* Y8 C) m$ `' E* Q# F! ]+ U
  152. }
    : e1 d  a7 K2 G, a& k( t
  153. 3 F: x2 p: ^8 o& I! A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)  v4 M& |* e, ?! Z7 B6 s
  155. {
    $ Z9 C% {" y. p0 l7 x
  156.   DWORD attrib=GetFileAttributes(Target);9 c, l8 K, k3 _" F& G; I
  157.   if(attrib!=-1)2 o$ I) v5 ]) _8 k7 m1 \% h, ~7 n
  158.   {: M  F2 N- s/ _% k1 J0 U6 _
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))& N% l  E! R+ [: }- Y8 T; [$ r
  160.     {0 _* I8 B# e/ `& n1 }6 W' i
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    # |% F% I1 W3 K3 w9 v* r
  162.       SetFileAttributes(Target,attrib);
    $ ^+ @- ?$ m/ O) L' Q# g! o9 ~
  163.     }# z2 n1 k5 f6 b1 m( Z  x. x
  164.   }
    & t, a9 z4 P" |" q: p& N; `# B
  165.   CopyFile(Source,Target,Erase);
    6 f. t2 |  M0 L. P8 H( h
  166. }6 }- k8 B1 |' e- ~& ^8 f. |

  167. 1 b4 S% X0 a% V9 I1 `% }( ^' E
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! q9 [3 L9 {7 v' i/ E9 |1 J2 A$ V  Y
  169. {+ h$ L5 \: v$ ^
  170.      FILE *fp;: D# f* [& U7 O0 s
  171.      char  szBuffer[8192];  J" N4 r8 N1 m  N2 T
  172.   va_list  argptr;, \' F5 _2 `. [) Z" E6 N2 H) u6 `

  173. 3 b. g( z, _. d5 ?
  174.         va_start(argptr,message);' ]4 I) y4 Y2 N! C4 i, E9 i
  175.         vsprintf(szBuffer,message,argptr);% E$ l& b/ [, G% T$ n
  176.         va_end(argptr);
    & {; M- x- E/ I! C  z
  177.   fp=fopen(FileName,"a");( S) M3 K, b# F) v5 P
  178.   if(fp); D- g3 @, [  v
  179.   {
    $ |6 c7 n, w* r, m) D+ N# s7 P3 P+ w
  180.     fprintf(fp,szBuffer);! \5 d# |+ d9 }
  181.     fclose(fp);
    . q, W" [) H! h5 X% A; q8 h& e
  182.           _flushall();
    & J( b& q9 r2 n* n+ e5 ?! T
  183.   }
    ( u% q( L+ Y- x3 I8 I1 s! a% Q
  184. }
    . V" B! q' h% c% z4 d8 a/ P$ {

  185. - i7 I( C; a3 r# y
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 X  e; j9 n# l$ p# l
  187. {
    & w" v1 I$ z' h; _7 @7 Y& P- s
  188.      FILE *fp;
    " l) J/ J- J) Q' U- a) g; S
  189.     DWORD  attrib;
    1 [0 M5 A6 d% r! y4 j0 p
  190.   attrib=GetFileAttributes(FileName);
    ! G1 u5 O) e* }, `& X
  191.   if(attrib!=-1)
    * q; K. ?9 ^# |+ e5 ]4 I% R
  192.   {
    + T& `% i1 Q* X/ |* D+ L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ V4 j; I- L' T/ P( [1 c7 D9 C( H
  194.     if(!SetFileAttributes(FileName,attrib))3 W0 Z+ b5 N1 b! {
  195.     {7 E; n! j$ B9 A# a
  196.       return FALSE;
    & R" }! ~8 i$ x# j! B
  197.     }
    ; ]7 b3 p/ `% C2 j
  198.   }
    ) `: y& J* G8 p! [
  199.   fp=fopen(FileName,"wb");
    5 {7 J6 B0 G9 `' V8 ~2 c4 ]  N1 C# s
  200.   if(fp)( a6 M; x% p8 {9 u
  201.   {) D7 _+ t* {( a- }) Z( L$ A
  202.     fclose(fp);
    ( P- Z  ?* x( d8 Q& ~
  203.   }$ m0 N# F$ ~3 u$ M6 u' j
  204.   return TRUE;
    8 m) n" }$ R1 D( a2 P, c
  205. }" D; L  U( G5 ^# a% M& n+ T

  206. * S2 k, `" t  }) Y/ W+ x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    5 b9 k3 b* y: D  W/ i! g
  208. {
    0 J- z- _2 T! O1 D0 h
  209.   char filename[MAX_PATH];
    " W! i+ x" k$ D6 Z- \- h  K: b) I
  210.   LPUPDATEFILE file,olds;! G$ Q( K; |7 s; M* W( W$ n
  211.   std::map<int,CString>::iterator i;
    : I) G8 H. R) v$ B7 [" W
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 s  p1 }; f' L' ~$ Y7 k
  213.   std::list<CString>::iterator l;/ a: _+ J) E$ v: C
  214. " @2 |) m2 R! B" B% g( ^4 T- L! G
  215.   if(bFirstUpdate)* |- k. G) P' r# V
  216.   {
    8 G* }, Y; \4 X1 N3 S7 |
  217.     dwCurrFile=0;0 _: c. D# z+ f" g8 f+ ]
  218.     bFirstUpdate=FALSE;+ \+ L& K& E/ X, I/ ?) ~
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 K9 }3 ?8 ?6 K. @, `: W- E
  220.     {1 d& t: W1 J$ F% u% x
  221.       dwTotalFiles=UpdateLocal.size();# N% R' U& m- I1 s: h7 Q
  222.       dwDownLoaded=0;! M2 t& z" e* I; {% G' Z
  223.       bSilentStep=FALSE;) g, W# G7 G4 O$ Z
  224.       bCompressed=TRUE;" ^- ^+ J1 P- Y6 ~+ @
  225.       strExtLocal.Empty();
    ! B. S: x6 S# e9 R" d2 w$ K6 a1 L
  226.       strFullName=(*i).second;  k1 ]: p' j$ q
  227.       dwProgramState=AP_CONNECT;
    $ m0 ^  c6 `# O7 l
  228.       return TRUE;
    , Q, b& L7 t+ v4 d6 m, F
  229.     }
    . r' T) |" w8 \" R+ g& e
  230.   }7 g+ W! U# Z( t0 W1 V
  231.   else if(bRestartUpdater==FALSE)' T; |. v5 b6 y9 a4 c2 Q, O
  232.   {1 N: B7 L! K8 x
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    . r$ V/ b' s8 h6 U$ u) G
  234.     {) W/ a; B8 K5 ^( N1 x
  235.       file=(*p).second;. o+ l) \" ^  }" R: k" y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    " i0 J% n, `, T/ |2 V
  237.       {
    / _9 h5 }: H) ~
  238.         olds=(*p).second;5 X) T- d8 m) x$ l) g3 P7 V
  239.         olds->vers=file->vers;: i% o1 A3 M! d+ p- d
  240.       }. U% D" s9 w. u$ I9 ~
  241.       else  t, o( s* S9 _
  242.       {
    ! t$ A+ s6 C. W( x% v& y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      ^, [# F" ?5 F/ A' i. K
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# }# V4 m0 l, [7 s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : W' x" b# `1 L  Q
  246.       }2 y) \- V& g3 _& `0 i% y# B# a- Q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( v: t2 @/ `( y* \& E6 ^' E/ A
  248.       sprintf(filename,"(%s)",file->file);1 H: `! Q0 D5 {$ A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);, V) J9 o; X8 g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }  m! r% ]) \1 i* l; i+ c9 v
  251.     }
    % v& y; V( m6 y5 J
  252.     dwCurrFile++;6 K0 q% R* Y- Y9 u9 I! M
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())( P" C0 U9 c7 b; A9 M- R
  254.     {' M' w9 ~, T" E- v7 B
  255.       bSilentStep=FALSE;( e5 s- j* [/ `, m6 F" A' I: _
  256.       bCompressed=TRUE;4 `  E6 T; C" D7 o3 J2 L
  257.       strExtLocal.Empty();" L3 I% n7 A; H
  258.       strFullName=(*i).second;: ]5 E" I# E! d% l
  259.       dwProgramState=AP_CONNECT;0 P" X" r2 j' i$ g2 V
  260.       return TRUE;* c4 u/ j1 z7 `8 x% h( J: `& i
  261.     }
    # I* d. }2 T, o. w1 `6 L* C
  262.     if(!bRestartUpdater)$ r& @& d" I) ~) u6 m
  263.     {
    ; o4 e! J7 t0 a; x
  264.       int iCurrSize,iFileSize;, r7 q6 _+ W, n1 b" `
  265.       iCurrSize=0;9 G9 }  l" o: j3 P
  266.       iFileSize=UpdateList2.size();
    0 D7 a3 b4 {* ^. Z* X( ~% o
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : g3 ?5 o' ~5 t1 v8 c6 K( F
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");! j# A2 u/ l% h% k* I. x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    9 C; ^3 k) X# r0 c( \( n4 L# R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) P- g! ^9 I4 O( a( r
  271.       Fclearf(".\\update.dat");
    3 Z5 A# v) K& ]4 A# I6 S7 U$ O7 R
  272.       Fprintf(".\\update.dat","Bloodyf\n");# z' D# O( x7 x. M
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ ?) o2 Z5 W1 }8 u
  274.       {, s# r) p1 x8 {) B5 t# z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    " c" r2 T% O6 \1 c$ b+ c2 I
  276.         {
    / n) {- w: K* H% O( Z$ c7 X8 c- S0 y
  277.           file=(*p).second;% H5 H5 t! M9 i. o% {- T1 ~3 a* j
  278.           sprintf(filename,"(%s)",file->file);6 |7 z: d- d- J+ b, w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) x# a& @: g( ], a% [5 t1 \
  280.           iCurrSize++;
    " I: u3 F1 u1 s* q- y+ E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / H6 Z/ D. ?+ [1 S  r/ P3 p- q
  282.         }$ g7 E$ @2 A& f7 ?2 {
  283.       }
    . d1 N+ }, E2 R5 K& m6 N
  284.       unlink(".\\update.txt");; ]/ O" G4 q% L
  285.       unlink(".\\update.tmp");4 v, p* u6 Y4 e
  286.       Fclearf(".\\checkversion.dat");
    " p7 H" C' s/ G9 V7 ^8 @9 E3 ?; W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ; h! u& L& N6 b9 u! B7 }
  288.       if(UpdateLocal.size())
    1 [4 W% {3 c) f; b1 Z* h6 X
  289.       {1 k; w2 W0 B$ P3 O  z# J' q
  290.         UpdateLocal.clear();
    " L( O* F& ?( u9 e# Y2 a
  291.       }- g* \" Z1 N3 i, o8 d+ o; F! r
  292.       if(UpdateFile3.size())% z! N! p% O! Q# @6 g0 n
  293.       {$ j1 A' d* Y4 p7 o/ @  x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : V( G4 u4 E7 x- e/ v
  295.         {
    3 t7 V: |# |: [5 a9 m; q1 V6 a  T  R
  296.           file=(*p).second;8 N0 I1 |0 G' }7 m6 P
  297.           free(file);
      R- K$ P( ^+ D& }- _* B1 s* s
  298.         }
    5 S' _2 @0 [1 Q/ X* S0 b
  299.         UpdateFile3.clear();
    " S- Y. n. D* t; y( Z# q( ^
  300.         UpdateList3.clear();
    3 L. h5 ^! r1 S
  301.       }  D/ k$ b8 T/ ?4 c2 P
  302.       if(UpdateFile2.size()). N  b: c/ i9 X" ~
  303.       {- ]" h4 ^# z. _4 c/ d
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' N: z. E* f  C' O
  305.         {6 E8 U6 [2 o' H9 V1 O
  306.           file=(*p).second;
    # ?% `- E+ s" N2 i
  307.           free(file);
    $ s( O  y# g% V7 m1 w
  308.         }, a- a& v" c8 o+ Z" G  N# N9 V  @
  309.         UpdateFile2.clear();
    ! o+ l. R& [4 O3 C5 r! z6 Q
  310.         UpdateList2.clear();
    ! _' _/ w8 i! q- H0 v
  311.       }
    + M$ ~* N9 b3 |! r
  312.       if(UpdateFile1.size())/ Q0 _. s4 `: K4 S5 B' Z% b" Q0 k* X
  313.       {
    0 c( X' j: @$ o$ z$ \
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 P7 p8 v- ]2 E' n! |5 O
  315.         {
    5 K: E* k' c) H- q
  316.           file=(*p).second;
    ) a3 B. ^8 u7 d5 k7 I6 e( j
  317.           free(file);
    " W  t7 s3 i9 p: Y* y* l7 Z1 |
  318.         }- W9 h' y4 T/ e% P3 t
  319.         UpdateFile1.clear();3 W8 ^+ O; ]* }1 @4 m4 Q
  320.         UpdateList1.clear();
    # K1 I, Z9 F1 \! G5 H7 n
  321.       }
    ) W& x+ @, `( `* T: `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));; S9 ?- o; U' F9 q$ l
  323.     }8 O% V+ D/ C1 ?
  324.   }
    ( S6 L9 P3 F$ r) A- n9 y3 z$ q
  325.   return FALSE;
    6 Z  ?$ t1 o: U. M- f
  326. }
    - |8 q4 D/ }% c( R1 n

  327. : `* m! {+ N* A9 y: u: Z% I
  328. void CRevAppApp::ClearAll(void)
    & i" C7 _1 y' s* L
  329. {
    8 z8 H% L7 o) a% J- g) R0 k
  330.   LPUPDATEFILE file;" F% {9 S5 U/ q8 ^7 y/ f5 ^" C
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    : U9 g3 n' O/ h( _& ?. @) `9 X. p

  332. " w# {! Y1 w" f/ m  L
  333.   if(UpdateLocal.size())6 `/ N* _( ]9 h# Q
  334.   {4 l' H8 v6 s3 u
  335.     UpdateLocal.clear();
    % H" o  u/ O5 j+ N
  336.   }* g5 q# p4 q- E- k& f
  337.   if(UpdateFile3.size())
    & t1 n. }; P6 W7 s- [% l# B5 t4 ^4 L$ l  A
  338.   {/ `0 w: I9 ]. x3 u& Q
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # a1 z# T2 h# _' L" E2 d1 m/ ]
  340.     {
    ; o) D  z6 M3 z! [; M# f
  341.       file=(*p).second;
    * N! U1 J: H& E) r; v/ b" _
  342.       free(file);  I" z; e/ ]0 l4 D# v- F" T' k
  343.     }
    % V( y8 F1 O6 P# t' r
  344.     UpdateFile3.clear();, |0 {/ B4 A" m2 P/ p* O
  345.     UpdateList3.clear();% Q" ?8 ~6 I9 r
  346.   }* Q8 L' c1 t; \8 i1 k
  347.   if(UpdateFile2.size())( l- H" g/ Y+ U; [: ?, N
  348.   {
    " G% M8 m. \" R
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + c& z2 j) b( t9 N
  350.     {9 E' l3 [) G) p6 _6 B2 x' J7 T: J
  351.       file=(*p).second;
    # M, h' S. g- v- n! H8 g
  352.       free(file);5 t1 a7 R& `4 q
  353.     }
    $ R; y5 U3 {1 ?2 r5 y
  354.     UpdateFile2.clear();- J* h" L0 O, X' w
  355.     UpdateList2.clear();
    8 E* ]2 [* h$ P
  356.   }! D6 i" B: D9 [4 Q0 l8 q: L
  357.   if(UpdateFile1.size())1 l6 ?% _7 _& x
  358.   {" [7 y, h8 T  Z( j' q5 x4 ~$ X0 R
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++), \) U* J7 n/ h8 P
  360.     {8 N/ T2 S& p; a" m* T0 X
  361.       file=(*p).second;. e, ]; j6 ~% ]0 S& E& Q* u5 L; a# m
  362.       free(file);4 k8 G8 H' f" b' o9 o! S
  363.     }
      j, x; b& f' W  C3 ]7 i4 s$ f- @3 N
  364.     UpdateFile1.clear();; c5 a! X# ]" V
  365.     UpdateList1.clear();
    $ z5 L  j& r# m; }) ^+ r0 G
  366.   }1 W( ?- v3 J" z$ R6 E& q) }+ @- a
  367. }  
      i' c, a3 X& g' D# r$ Q# f! P
  368.   7 q5 ?& H1 D- F9 y% d
  369. BOOL CRevAppApp::CheckLocalVersion(void)) J, M' m9 Z+ U& E/ X  y
  370. {" P- |7 e  v) j1 W4 W9 O% a
  371.   int c;8 Y  `/ w9 L  r0 M5 Z
  372.   LPUPDATEFILE file1,file2;# V% s6 E3 X! \: L+ {! e( u
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 j# h3 [1 E  M/ c1 R, o
  374.   std::list<CString>::iterator l;6 m2 R; _/ @: |2 a
  375. - K+ }* l8 ?0 R6 Z
  376.   UpdateLocal.clear();$ H! K! B% X7 H% [2 q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);( q+ I7 H4 G3 O* V4 y: D" h0 a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);! y/ T& m1 K* ~9 y0 U
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' `# E" V2 `0 r. j
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 h; G4 W4 l6 v! [. g
  381.   if(UpdateFile3.size())
    * \6 ^4 i* j8 L& A7 p- @! [* @' O
  382.   {
    0 o, a# {  x% ?3 A  ?
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 i8 J1 Z& s* f9 b% x( p4 N" R
  384.     {* t; L1 m. \/ B% f/ G
  385.       file2=(LPUPDATEFILE)(*i).second;( @3 Z7 s7 J$ L! |: [. B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ i5 N' {' v; k4 {
  387.       {$ L) a. E' O/ l/ s( c" V7 M
  388.         file1=(LPUPDATEFILE)(*p).second;
    7 E: O$ m, B3 T6 d' U" G
  389.         file1->vers=file2->vers;4 D; F) y, F1 J/ @# F2 s
  390.       }
    , O* b& ^4 o+ g1 G# \5 B6 T
  391.       else/ @& D: W8 W+ B
  392.       {& [6 y" y+ o$ R2 w; |* T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- {, @. M! P5 X! B9 K: C  `
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    8 I6 W0 ?% _# r2 k
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));8 A3 X( x( r& |; I5 |* [# I+ y
  396.       }
    - u% [( R% ~$ K( P7 w( t) L
  397.     }- _! b9 a, ?' j& I" g
  398.   }& L; j9 A6 N, X' r7 J
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" {, {1 x, k: W
  400.   {& f. K2 B# _+ C- r5 L8 f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 ?* Z/ _. L- O# s& y
  402.     {
    / P5 H1 X8 X  ~6 O& O. @$ i/ b8 R
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ P( r$ D! s# B
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) e% ^8 O" \; z, l$ f0 W- s
  405.       {
    % u' a. g! O! W3 e: n
  406.         file1=(LPUPDATEFILE)(*p).second;
    ; S& J" E6 i% L7 ]  r$ I; t* `
  407.         if(file1->vers!=file2->vers)8 P" s, j5 n# ^1 N* p
  408.         {5 v9 H5 a7 K8 t) D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . F1 L% Q9 t7 @  X6 o$ _/ c
  410.           c++;( `2 I& }) q/ e" z: E
  411.         }
    8 [& B! |7 l( R, j
  412.       }9 Z3 X1 y* N, a& Q
  413.       else
    7 ^( h2 z7 u- B1 _
  414.       {
    ( S4 t0 i! B# B) p. w' A
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));8 A, j; n. J2 f& i) s7 [
  416.         c++;
    ( e, U; {( X8 s. \0 c2 \
  417.       }
    ( K# a8 c9 ?1 s+ o6 D' `1 b/ n
  418.     }
    9 f+ @0 M4 R0 u! ]6 d
  419.   }
    / f4 j" z7 J7 p
  420.   unlink(".\\DownLoad\\update.txt");
    1 y/ K: C& e( I7 W. T- @) y
  421.   if(UpdateLocal.size()) return TRUE;
    7 L% L& e7 X1 \! b- f1 W
  422.   else                   return FALSE;
    7 `$ s) n$ M& f6 E) i
  423. }
    , X) s2 I' ~9 x# p8 O

  424. 8 ^$ l3 m) O7 Q9 M2 O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ B* ]4 ^/ m/ z, _( d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ ~% B/ W# ^% G% N

  427. ' V' b$ D8 v1 A9 X+ e: J+ V
  428. ' k  ?/ ~  e* {( i" g
  429. ) M' y1 @% n4 f6 l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( C" K$ k+ i$ n  s" E; N- H' v
  431. {
    " q* T. P0 j5 A3 G1 |3 \2 W
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / z) h- ]3 s6 e9 Q! z  y5 b
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 o8 t0 r" O5 b
  434.   {
    ) r& C, e; r) O& V
  435.     char szLanguage[50];8 ^# P& k; a' }7 W6 J; V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 ^6 q: c2 @8 L8 Q' Q! D0 i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 r" k' p- i1 Y8 i  T* K3 j9 ~" D2 X
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . @( o" K$ s5 G5 Y4 A
  439.     else                                   m_iLanguage=ENGLISH;* ~& L8 I9 s1 l) M
  440.     char szRegister[100];" [! Q2 T, z: }
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 q0 d1 G# ^5 ^! o
  442.     strRegsName=szRegister;, Q$ H0 Z2 I. l0 R
  443.     char szPatchURL[100];' Z4 t$ V5 ?; r) i6 `5 F& T
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" t* x2 q, P3 ?- K
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);8 h4 e+ B, X/ o" J5 b) m5 ]6 x4 F
  446.   }
    0 w! y& x( W- e6 S9 O' A
  447.   else* y: t% ^7 Y& j; i
  448.   {$ K% _- w: R% B4 ]7 y8 Z7 G. s
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 E) T( d# c# D4 O: o5 Q
  450.     strRegsName=DEFAULT_REG_URL;
    + u: z2 f- F. L/ J
  451.   }; x, T# Z2 q$ }) g3 G
  452.   if(GetFileAttributes("hosts.ini")!=-1)' O4 X8 L% M% J0 i' A8 L
  453.   {0 t+ T. y: C" e
  454.     char szIP[50];
    9 f6 z+ _3 P, {# Y0 t
  455.     char szDIR[300];- k6 z/ t" a. l4 x' G5 C  u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & V0 |! {  i( x& a0 Z6 w5 Y
  457.     {, J7 i& S; f' O" G) k! |  ^
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");$ s, U; J+ j* Z0 O6 J
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ' C+ G5 F; v: e7 K2 Y0 `
  460.       strHostName=szIP;' c2 Z$ o, L7 }. S7 }1 \# X" w: U
  461.       strHostPath.Format("/%s",szDIR);7 |7 ^+ |  L' m  z7 R
  462.     }
    6 G6 Y+ J! F4 S5 r; l& ]" X" X
  463.     else% V$ u4 S8 w0 O* m+ n  P
  464.     {# ~' x+ w( g, G8 ^/ Y
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* T- {( C% [3 x- }- w
  466.       {
    , {$ p0 O7 ~* O9 F* g1 c  ?3 P# w) W
  467.         char szLanguage[50];6 Z, e! ]. Z9 u' c/ v* `
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");/ {; Z0 A7 v+ T! V
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! ~; N* C: O4 r5 A/ D4 P! A
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 Y$ T" v9 e+ G* D# j! ^3 K0 d8 k
  471.         else                                   m_iLanguage=ENGLISH;
    * F0 @4 [! r0 i6 A; F7 |  ^9 M
  472.         char szRegister[100];6 o' |/ v4 W8 d. Z, g  [% x
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, L3 Q$ k+ h" j' y) v# `9 G
  474.         strRegsName=szRegister;  Y' r, n. \/ Z" d3 ^% G, H  D
  475.         char szPatchURL[100];( U" ~1 Z; y2 ~6 W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 v- R  k+ }5 ~+ N% `* }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 ^% z4 ^" U$ l0 v
  478.       }
    " Z& J% Y5 ?1 k) n' p. q1 r4 z
  479.       else
    - r" X; {/ `: I3 X
  480.       {
    1 @# D4 s/ H# `' r. z9 ?
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& I/ P  }$ i# h" Y
  482.         strRegsName=DEFAULT_REG_URL;
    ; ^: h) S" S4 b. w) N, r3 y! R
  483.       }
    * z4 b1 \0 M( W+ y$ x
  484.     }
    ) \- L: r$ z7 p3 t9 {6 y
  485.   }
    * _$ M  b+ @0 o: Q8 E& s4 h
  486.   return true;, R6 g2 J1 _" e, T+ {
  487. }
      F0 I3 X' _. D" G. e  w7 T
  488. " J  }+ x- ]9 w8 a; G, w, g) M, h
  489. #include ".\ZLib\unzip.h". U3 Y/ P& ?% y8 H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);2 j6 S7 ]7 d" C. b- E$ k- T% h( [
  491. /////////////////////////////////////////////////////////////////////////////0 J2 G. o: b& x+ k. n
  492. // CRevAppApp initialization
    * ^4 F( U+ A3 ?1 V% H
  493. ! [" {) u3 q, J+ S5 l
  494. BOOL CRevAppApp::InitInstance()
    % ]# V& O4 d8 \- V
  495. {1 \; n+ L4 d: U+ I( i1 O: D
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 y6 J) @* k( x# V. j9 p4 {' z
  497. $ T9 E5 [' t' O7 z  F0 H' f) H5 `( K
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);4 y( o! G/ K- i% v6 G0 N( a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 E( _6 Y% H, F2 c( H5 u# H! M
  500.   {
    & I9 ^3 G2 _! l4 V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    3 v; c3 @: p& T: r% |* Q. x" @
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ) r* l# z6 r' R
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # e$ ^( I5 a1 c3 u, q
  504.     {
    2 t  O5 Z$ u& H* a$ c3 h; `
  505.       strcpy(szPath,szPathTarget);
    7 H& r5 ?$ t' y5 f* D5 S0 {( K
  506.       SetCurrentDirectory(szPath);6 Y5 Q& r# V! k! Z
  507.     }! Q4 Q( G$ l- ^4 I
  508.   }
    1 D0 ^3 `4 M/ n: m7 |- W
  509. #ifdef _DEBUG, e1 T) t% b' ?" S5 X8 m9 p! o1 a
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))/ s, n! b3 T2 O9 N! ^
  511. #else6 r6 Z; C) ~! m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    7 X" {( i! {0 F  Y7 z) X7 U/ J* g
  513. #endif
    # U3 o7 w1 h# k; p
  514.   {
    4 @4 s& s; k# {4 [- q/ X% @
  515.     char tempFileName[MAX_PATH];
    * b; _# f% C3 K, J- p8 |2 T! _% y* ]
  516.     strcpy(tempFileName,szPathSource);
    : z" M  B8 `. q% t
  517.     tempFileName[strlen(szPathSource)-12]=0;
    4 G: x3 s( ?# q% n1 U4 j; t' F3 q4 [
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    & J- q+ w# _1 |: g
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);$ b( M0 K$ U: j! g5 h  y
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    2 K* H) _& ]+ V
  521.     return TRUE;
    / R8 C& ]/ v* n. u8 p# Y/ R
  522.   }
    ) n. A  E3 z! G/ V0 I4 @* x. g
  523.   // Nuke 0118: Delete run.exe
    # ^& ~1 b+ A3 r' ^# n1 C
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    " g  |2 ?5 }4 L4 @7 r- U/ u& |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");3 D2 O$ Z7 Q* D3 i! v9 v" Z
  526.   if(!ReadCfgFile("Config.ini"))% w0 _$ E3 x$ }; V5 L* o: E5 P
  527.   {7 \# h9 [1 b  v  z& _! L3 v6 I; i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 w, m& g9 K& o) H
  529.     return TRUE;
    9 d' ?0 L9 `" N4 r5 T
  530.   }
    7 U* V) w- z" f3 ^* i  ~5 H1 e
  531.   HANDLE mutex;
    / S' ?8 P$ }# e. ^! m
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))5 ?4 ^  N/ t0 W' x9 K
  533.   {6 r8 K+ y, {( Z4 [$ N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS). a5 F9 [$ P) v0 |0 @! E( F
  535.     {
    4 |5 n' ^1 ^" z- _: n9 s
  536.       CloseHandle(mutex);4 P4 L' H3 t! G( ]
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , R: P2 ^+ z) q+ n  [) Z1 R- C
  538.       return TRUE;) n* ?: m5 m8 c
  539.     }
    8 w6 ~8 p$ {# q* Y) ~4 E/ \+ x" D
  540.   }  
    9 f$ e5 I4 e1 b9 q7 ?
  541.   CloseHandle(mutex);/ N6 ]8 D( c. m! n" _: c6 v
  542. ' e$ j7 z5 y4 V9 m- ?: w
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    . B( \3 ^( y5 u! g

  544. 8 v, a  O% A8 G- Q8 r" E) A% U
  545.         AfxEnableControlContainer();
    5 x' B) I% J0 B6 F8 {4 U
  546. . K) j, ^* A  n# w5 ]
  547.   bCanUpdate=FALSE;7 H! k+ K* S' e. M0 `) H* S) C
  548.   dwStartUpSteps=1;; f5 \) l5 K/ }* G+ {- x# d
  549.   dwProgramState=AP_NOTHING;- y/ k  [8 `0 _6 V
  550. / M  `/ X; r- D9 R7 K) d3 B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    . F! P3 t; p3 [- _$ D- T4 R4 Z% i
  552. + Q5 W5 K, z) U4 U2 z
  553.         // Standard initialization
    , b; z, Q/ E- ?4 b" m/ G* y
  554.         // If you are not using these features and wish to reduce the size
    ; z$ G# V2 W- {: r# ^  P1 P' r
  555.         //  of your final executable, you should remove from the following) Q' m* B) S, k
  556.         //  the specific initialization routines you do not need.9 Z0 C# c! B" E' @( q

  557. * D. l  \! X: r/ n
  558. #ifdef _AFXDLL8 u4 C  C; K3 x+ B3 y2 P  X
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ |- ?2 ~# x5 a" N) n6 ]
  560. #else
    7 `' s" Y7 p$ D6 s3 t# @
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ ~5 P2 D; I/ }; u: d( |
  562. #endif
    / z; t) T8 V) [

  563. 2 R% |7 w: n1 q4 _
  564.   dlg=new CRevAppDlg;
    7 ^  C3 S! z0 ]9 V/ {$ n
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 m* [! Z2 n" P. p
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & C: e8 h% x1 M' d
  567.   m_pMainWnd=dlg;
    8 Q5 k: a. Z' \7 a

  568. # B& }# \* [7 U: E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) B) d0 m  [  M/ }

  570. / {7 g/ [" D7 G. X) f
  571. //  GdiplusStartupInput gdiplusStartupInput;7 [9 R- ~  g& \8 S# A" |2 d7 j
  572. //  ULONG_PTR gdiplusToken;% a$ O, ~  d; _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);8 A, T% x  |/ n9 @" d

  574. 8 ]" v1 {+ \5 U0 E5 i7 P" m
  575. //        CRevAppDlg dlg;' \8 H. _, T3 ^. V* O0 I
  576. //        int nResponse = dlg.DoModal();3 V3 j9 k% i( [% c- R
  577. //        if (nResponse == IDOK)
    % ?) Z1 M! n* q; o- p0 d
  578. //        {
    # B* [0 d1 E! f5 _7 b. {
  579. //                // TODO: Place code here to handle when the dialog is
    8 g* S5 ?- |! n7 O
  580. //                //  dismissed with OK# O9 K0 L2 e% f9 m' l* d
  581. //        }
    & S+ x( P+ f/ x  Q. v& \
  582. //        else if (nResponse == IDCANCEL)
    $ I) A+ W2 x5 B5 t# ^* g/ ]
  583. //        {
    5 X) L/ Q9 s# ~8 E+ q& w
  584. //                // TODO: Place code here to handle when the dialog is6 J1 [( }2 c& f7 u. X3 s5 n
  585. //                //  dismissed with Cancel
    $ Z" V# p. y$ Q9 n6 Q2 V
  586. //        }$ A2 c* N: n8 [' K
  587. 3 p# S# N6 R, o+ N' B! Y8 t
  588.         // Since the dialog has been closed, return FALSE so that we exit the" G0 E; i% x2 f) b
  589.         //  application, rather than start the application's message pump.
      B! ?( @2 s7 N* r# f1 J
  590.         return TRUE;/ m- |" F- H( u8 l3 s5 L
  591. }
      k' o! n3 a6 R3 ]2 K( A6 U
  592. 1 n& x) {3 \9 S* A7 j2 H
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 c) N/ r# `$ G) n: y) N6 S
  594. {' @, y7 ~; r& p" W) i' A8 E
  595.   int i;
    " l/ g& l; x& _: s4 y
  596.   char *szRet;, z' d# e# j8 X0 V

  597. 9 m" D. N6 Q& x" G3 s/ |
  598.   if(pSource) { itoken=0; sztoken=pSource; }* F5 u/ s6 f/ R( T" y( |# P
  599.   if(sztoken)
    ' G) C6 ]& A6 {5 q
  600.   {
    & A1 A" K: x' v* ?2 V
  601.     szRet=&sztoken[itoken];( h" X/ s- G* L& V7 I  b+ I& o! L
  602.     while(sztoken[itoken])
    7 T; [+ `: R) Q; l- {' m
  603.     {  k7 n# J4 A: p' M* A
  604.       for(i=0;i<(int)strlen(token);i++)' U8 @: e' ]4 |0 b
  605.       {
    ' s$ u' H2 ^/ D) t
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 [: t8 Q9 N# b) h: g2 }
  607.         {
    - v. z3 a% {' B( N# p1 ]
  608.           sztoken[itoken++]=0;
    + S" Q1 L; a. x% Y1 A- ^
  609.           sztoken[itoken++]=0;' U  U' P5 T  m& W7 l  ~  w. F3 C
  610.           return szRet;
    1 X/ Z4 M$ J2 E( M8 k$ n* I
  611.         }
    9 \7 ]  q' V0 V6 e' ?. r# W0 h
  612.       }
    % t6 D( r9 F/ d5 k& ~8 z) E
  613.       itoken++;
    ! x3 k6 q4 E) X7 u/ j% o$ J0 R( z$ w7 g
  614.     }
    & {! ]# E' F- d% k: ^! \
  615.   }
    8 e+ X) r: {; L
  616.   return NULL;
    ; [9 X$ f8 h5 W, q0 x" c
  617. }
    9 `& b* p8 W# H. w4 ^; l2 h
  618. 6 I  z4 c" D8 N8 ^( l( S* }4 R
  619. void ProcessProc(long Total,long Current)
    8 l! u  }. b% G& v6 L* z. Y
  620. {/ b) b! n# U; w/ G) _5 i
  621.         MSG msg;
    2 q1 u' c$ h0 t3 R% L
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    % r* x$ X7 F, N
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));' F/ ]# u; \/ c  g/ m, E/ r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * H6 L  s' `0 f7 h+ g
  625.         {) _/ n4 {: T& ^; ~, P) w6 v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 f$ L) P$ O& W; u. `+ K
  627.                 {  Y. a4 W7 F, d4 M* L% q
  628.                         return;
    1 Q# |0 \# }: s& r8 u
  629.                 }
    ! U6 Q3 ~" c+ R+ f- `3 Y
  630.                 TranslateMessage(&msg);; E, g5 d& k2 y4 B% ?( c
  631.                 DispatchMessage(&msg);
    , w, S3 h* S) Z, b. o8 A& x7 D8 i
  632.         }       
    3 s6 S' Z  |4 v  _1 i
  633. }
    . ~7 q8 T" N6 Q: V2 a) j) ~
  634. & T) b4 g# ~) J  ?% v
  635. BOOL bFirstChar=TRUE;  X$ V+ _4 W( y& y6 |" t

  636. % m5 A9 [9 p/ ~3 m8 k9 p6 x  T1 {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)2 I/ j9 V7 t0 H( a+ ?
  638. {
    4 v& A  X# B) X7 B7 M% o5 T' l
  639.         // TODO: Add your specialized code here and/or call the base class
    ' b9 N& U& }( t9 t% u1 j% i
  640.   switch(dwProgramState)5 m' e& ^& U" d% F
  641.   {' V9 S/ F4 f* b6 J, ?6 E
  642.   case AP_NOTHING:" l& g0 c3 M; i  Z4 f$ x
  643.     switch(dwStartUpSteps)% c' ]2 _8 O/ [7 ?3 s& I7 \
  644.     {4 f% u+ c3 x1 _/ [' Y8 [! Z
  645.     case 1:
    3 {" p- W$ r; `+ |
  646.       {
    . D; c. z5 H& n9 w6 d7 t% t
  647.         int i;
    / f, E+ B/ d" A9 c/ H
  648.         CDC *pCDC=dlg->GetDC();
    8 e$ r; ?) m4 L5 y7 g6 `
  649.         HDC hdcwnd=pCDC->m_hDC;
    / e8 w0 n; i. H0 Y7 [
  650. //        Graphics graphics(hdcwnd);, P! W  ]+ v: Z9 G
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    / |7 P' q: c% g
  652. //        INT iWidth=bitmap.GetWidth();  o1 i  I; [  C# S3 l- Y
  653. //        INT iHeight=bitmap.GetHeight();
    ( h8 B' I! m& L5 c) j
  654. //        Color color,colorTemp;
    2 z5 c/ j) K; Q' ]9 T' G! M* H' F- Z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 t- n8 W5 V- ~% y. G% u
  656. //        {
    ; x% r1 E3 J1 b& q- \! v( r4 J
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ a- S: R* X- H# G* V+ \
  658. //          {& M+ i% V6 U  {! i% c+ Q2 h( b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    * E& B+ z6 u- Y( _  }9 c
  660. //            colorTemp.SetValue(color.MakeARGB(5 E# Y5 {: V8 |, U% M- s
  661. //              (BYTE)(255*iColumn/iWidth),
    & D2 h# r  \) V8 s; b% D- M9 ~
  662. //              color.GetRed(),
    * R) h3 L4 F+ k8 {! S+ f% g1 G$ d1 D
  663. //              color.GetGreen(),& e9 a" M( Y3 S. m
  664. //              color.GetBlue()));
    ! z+ z% O/ H' U) a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 C/ D* ]7 A3 b7 h. R# n) i! I
  666. //          }
    6 Y0 y* ?% b/ M; s$ l1 j
  667. //        }$ B& p6 S$ w# O1 o* }. t
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    $ q1 b& O$ I( g5 i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - \7 p7 z- j7 W, t7 ]7 H; Z
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! O: k" e4 B$ w3 Z$ ^, q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");% t; t# V" g2 ]& s9 T8 p3 A
  672.         for(i=0;i<240;i+=8)! X9 g- n" p7 p: t# L
  673.         {1 }# }( X& c0 z  ^. A/ G5 f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ G% p# @4 y( m2 V
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ }4 p9 Y2 D8 E, R" l+ s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);+ x% M  d1 a$ t( [
  677.           Sleep(33);
    1 A3 I* g+ H3 c' i3 [9 J9 s
  678.         }3 R- E' S3 t2 J, r, Y+ U9 a: t% p) x7 \
  679.         Sleep(1000);
    2 U1 ^" Y4 l4 P6 r
  680.         for(i=240;i>0;i-=8)3 X  s8 L/ E) g/ y5 c
  681.         {' K* K* k7 q* @
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : Z/ t" J- X7 O; E* h! w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    0 {! Q& R3 ?5 ?: V
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + h: M$ y7 D2 n! C  ~0 v- ^7 }- G
  685.           Sleep(33);
    9 D7 C* u0 g: t; b* _' J  }, e) P
  686.         }
    $ Q5 n* g( w  n4 z% ]9 R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);/ i! J3 D+ c3 l# m7 u
  688.         dlg->ReleaseDC(pCDC);
    : l' K3 w1 Y: h) o; [2 a' `* r
  689.         DeleteDC(hdctar);
    # h" A* U7 n) Z8 }4 [1 h1 A  m
  690.         DeleteDC(hdcsrc);& l0 _" }) f9 Y, k
  691.         DeleteDC(hdcorg);
    ' v8 w& l- `3 w& C3 {" e
  692.       }' g' Y( w* `3 }5 L; u" T
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);6 M6 I( D8 {" s
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' N- L( ~8 K  g. X
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 F6 S$ @$ N5 }4 Q5 f3 r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");, I+ W' Y7 F5 ~6 g9 A
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. [$ M3 o4 D  Y$ P4 Y7 |" w" w: O- b
  698.       if(!Dn.Connected())6 L$ G9 L) m% Y7 O) l! z
  699.       {3 \( T. o7 ^) h$ ?
  700.         dwTotalFiles=1;+ V7 @  w2 W, T, ?& H( ~
  701.         dwDownLoaded=0;8 g. x8 }9 |4 s4 I& C+ t
  702.         bSilentStep=TRUE;5 M0 Y) M. @2 g; b
  703.         bCompressed=FALSE;! L* G* U  _' y  k
  704.         strExtLocal.Empty();! B2 M3 t2 T6 ~( A  e
  705.         strFullName="readme.txt";3 Y7 ?5 m/ A) M& S
  706.         dwProgramState=AP_CONNECT;6 K7 S, q5 }$ ~$ L( y
  707.       }
    $ V9 i3 S$ A( D7 ~& ]
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 s: u/ V1 @. }. p* j; ]+ y4 F4 u
  709.       dwStartUpSteps=2;
    7 ]& G' w! b' _8 T4 P' R
  710.       break;
    4 f  S( F& @7 Q# H% W' v
  711.     case 2:8 x/ ~* d# {' e4 x; B7 v5 F: C% }
  712.       {3 q: u/ c2 x2 \8 ~3 W  [% F
  713.         int iEOF;2 J9 B, b6 C' @; K+ O
  714.         FILE *fp;( e6 L* b5 n" a( X- q: l, d9 E
  715.         char szString[512];
    1 l- n. [9 M7 c4 q  k. A8 Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    7 E% y5 p; b" ]3 e
  717.         if(fp)
    & x  z/ ^5 ^; D  q
  718.         {
    : I1 C, Y& R, c
  719.           do
    ( X: L* z+ H, s9 l" r3 l
  720.           {
    0 G  b/ L2 b4 P1 W# \
  721.             iEOF=fscanf(fp,"%s",szString);+ Y# @0 B* o* V3 K, Y, e1 K
  722.             if(strlen(szString))2 Y5 A# D* f5 R. R
  723.             {
    " `3 _- {5 [% t4 d
  724.               if(bFirstChar)8 V% Q3 q. a" x& }
  725.               {
    / q$ M: s' f, v* R+ z8 j$ M/ j
  726.                 bFirstChar=FALSE;
    & K( d& a5 ^# `5 O
  727.                 bConnectIsBig5=FALSE;
    ) i' {' x5 L! j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( p+ m( D  ~3 P/ B. g
  729.               }
    8 m" a3 o2 L  x9 Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    9 a3 z' d0 M1 B& ]  o
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ) u5 I2 h& X' [1 p
  732.               dlg->m_ListText.AddString(szString);
    1 B+ c, G+ q# Y$ A1 U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & z  m  d* p8 V) J$ h, A
  734.               *szString=0;$ _( Z2 Z" o' p
  735.             }
    % I: h, L5 q; _5 i2 @5 G
  736.           } while(iEOF!=EOF);
    % E. K9 h3 _0 r2 T* Q8 p  f
  737.           fclose(fp);
    : Y, l  Q. Y+ E. v, H9 ?
  738.           unlink(".\\DownLoad\\readme.txt");
    + d, M0 {6 W1 A3 l/ z
  739.           dwStartUpSteps=3;
    # Z% _1 Y5 @3 e. j
  740.         }
      f' A( c1 \8 n' M
  741.       }
    ) K3 o- q/ {0 {
  742.       break;7 M8 m% N) z5 q- P& O
  743.     case 3:
    ( q1 x2 b  G6 r; y
  744.       if(!Dn.Connected())
    ' \3 N8 x4 t6 F
  745.       {7 p, ^( d5 q  c$ z- E/ _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 @! T& a  m$ K  j
  747.         dwTotalFiles=1;! c( e8 Q7 G* o; o* [
  748.         dwDownLoaded=0;
    9 H% `  d; A+ S7 z& N% L
  749.         bSilentStep=TRUE;* i& x8 m" a) A! b6 L, K. n
  750.         bCompressed=FALSE;
    : {) @, O* `2 j/ @# b5 I; W
  751.         strExtLocal.Empty();/ [/ a% ~4 t- P3 q7 \7 R
  752.         strFullName="checkversion.txt";
    - T7 P+ k8 c# E& I+ k5 h
  753.         dwProgramState=AP_CONNECT;
    7 M1 |; C6 e$ Q4 t2 ]$ a* Y
  754.       }
    4 \- _# Q4 Q, Q4 i2 {
  755.       dwStartUpSteps=4;
    : D, ~$ j; W2 P' Y% y
  756.       break;
    , u' [1 G5 @8 `7 Q
  757.     case 4:
    / U7 z) p7 B1 r' k) v+ P8 l
  758.       {! j% b3 z6 i5 M7 ~
  759.         FILE *fp;
    / c% `: O8 R0 F9 r  z! P
  760.         char szString1[128];3 ]% a4 {# f6 i
  761.         char szString2[128];; f% [0 [  s# c8 y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      x" Z# a- h3 G' u$ D
  763.         if(fp): O; d( p4 ^( a4 r( J' U8 y2 c' ~; Y  d6 q3 j
  764.         {
    ; l7 o2 }/ ~5 F# R
  765.           fscanf(fp,"%s",szString1);% u$ y& c% @" R; K
  766.           fclose(fp);) I, J8 m  m" o
  767.           fCheckVersion=atof(szString1);: }. I: N5 I; A' I: g: C
  768.           fp=fopen(".\\checkversion.dat","r");3 N1 Z. W- G. s' E6 w  r
  769.           if(fp)
    4 N* P$ a% L6 H! ]* Q, L5 p
  770.           {1 d* r; v& {2 T6 M
  771.             fscanf(fp,"%s",szString2);
    6 f& ~' e1 D6 M
  772.             fclose(fp);
    & {. ]4 _/ N! O
  773.             if(atof(szString1)!=atof(szString2))
    1 _2 l9 u# K, H6 c1 [7 m5 T; p+ a
  774.             {
    - h7 B0 S# q6 T7 T
  775.               if(!Dn.Connected())
    # O/ z$ @: g% y4 a( `9 X& Y0 ?7 k
  776.               {
    . P& a7 t( p  {" Y2 @/ T- O
  777.                 bFirstUpdate=TRUE;
    ' P( b" N. |1 j: S. K+ p
  778.                 dwTotalFiles=1;
    & ^1 y% x# C5 R' J
  779.                 dwDownLoaded=0;& z6 S6 r( A. S
  780.                 bSilentStep=FALSE;: N" @- X6 P& b; A* Q  |
  781.                 bCompressed=TRUE;& L; a- j8 Y/ h4 u2 T
  782.                 strExtLocal=".\\DownLoad\";
    # \2 G7 ~7 B( G7 P# _
  783.                 strFullName="update.txt";
    ' g; y4 I3 s1 a
  784.                 dwProgramState=AP_CONNECT;
    * o* S$ V8 j( Q5 N0 O" U9 y
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * G6 v" c4 H; W* a6 ]% V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    + O! [& y9 x7 J$ b1 J
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 f; j% b! M& m' \* {
  788. ! `' H3 F9 z& B2 U7 s: _
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 w! k7 e9 }, ^
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , y6 G# ?- J4 ?" ~8 W
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" a, d- |( I2 K
  792.                 {
    " v9 S$ }- K5 X: `% X  u
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - n" h( C# P* h* i& S% R$ a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: F2 d' B# I9 F* O5 g9 q6 ]
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    $ t0 U0 Z" G; i
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 B/ Q4 u# S5 J
  797. # b. x$ U3 f1 b" m
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 x4 I8 Z+ N$ o1 A$ W* }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      y0 E$ A& S4 u9 P
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    7 U6 L" ]! |1 v( j2 Y0 W
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" Q4 A  _) t) D, s8 ]% o, H
  802.                 }
    2 B1 i* Q5 c! \- p+ r0 X
  803.                 dwStartUpSteps=5;
    ( y/ u! X; A3 N7 Q/ c' s9 c
  804.               }
    - g( \9 J6 h$ V- N: [1 [# x
  805.             }
    6 n) K- Z, f4 s/ S) Q$ N
  806.             else
    % O( I. n- ^7 K; N
  807.             {0 Z+ O% a$ a4 R3 L2 t0 z+ p
  808.               unlink(".\\DownLoad\\checkversion.txt");3 {: ^. a) G7 j# [0 q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");7 _4 ~: s; C3 _8 C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    3 ]1 }* V; ?- ^& i7 s1 t3 \7 y, e
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % }0 I5 z( _8 F( R
  812. $ C$ E- P, ?. E- m) E
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( y3 P* z( c* ?) O9 h% _& C
  814.               dwStartUpSteps=99;
    6 {; ?6 T$ N5 U. ^' _) U) J5 b
  815.               bFinishUpdated=TRUE;
    1 _1 z& O1 V% Y9 x& j( J+ ~
  816.               bCanUpdate=TRUE;# M. O$ T  Q& }/ x- X" n( ?& \
  817.             }
    1 ^7 i: U- f; d( S3 R: n" Z; A
  818.           }
    ; `0 `) j+ Q; R: l
  819.           else
    4 ]5 F5 C' l" Y& ?
  820.           {1 Z0 I" d. L% T' U. x0 j. \' G7 P
  821.             if(!Dn.Connected())
    / f' M  r" D/ b$ l
  822.             {) d. H4 i3 e0 D& U" `4 B0 m1 j
  823.               bFirstUpdate=TRUE;
    ! d, x3 G0 [/ g* t6 q
  824.               dwTotalFiles=1;3 k: q9 T8 D6 D- ]# N
  825.               dwDownLoaded=0;
    4 V$ R' P6 {$ i1 ?+ h% _
  826.               bSilentStep=FALSE;6 b  Z2 ?; D9 ]- ~" Y* L7 u
  827.               bCompressed=TRUE;1 d$ {3 C) ~; W
  828.               strExtLocal=".\\DownLoad\";
    : z( g* ]3 v; Y3 @/ Q
  829.               strFullName="update.txt";
    " O: d$ x' s0 E- h' }1 d
  830.               dwProgramState=AP_CONNECT;
    / Z( r, J' o! U. V
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * r; g! k# V: Q3 v% e
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . z; A. D3 t. Y# }9 p+ Q3 W
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 T! ?0 E$ q6 X9 W* S
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : a& C  i1 {4 e$ u; q! Q
  835.               unlink(".\\DownLoad\\checkversion.txt");) P* u0 z+ y1 U* I# l% b# a+ M
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). S6 U9 l* ^/ B' Q9 t/ N& J
  837.               {  Q2 h3 P4 l7 J3 e  _1 _
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");4 b+ v& y2 I6 l5 q8 E
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ) Z: T5 u9 F) k+ i5 E8 W3 Q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # _2 P6 o; y2 c+ Z' ^! B9 a
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , b2 `3 {* m7 x' [' z# K
  842.                 7 |5 ~: f& o7 _* j  B
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / H% a1 @: y! x7 R5 d
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & L8 [' }. S( |5 v* N) r
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # ]; Z: x# `' j, z. q9 |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 N& }6 B  [+ M) c. K3 L
  847.               }: d2 |" a# Y6 E) t+ l5 }+ T
  848.               dwStartUpSteps=5;8 Q5 J- o& t8 n/ f! M/ T
  849.             }
    ! Q! J4 v1 _& L( i0 t
  850.           }( [2 b5 W* H3 q5 B0 d( l& \2 x: ^( K
  851.         }- [  h4 J8 P( w8 H" q4 B  u  y
  852.         else
    1 s2 G' m/ x+ e1 {
  853.         {1 ^$ r3 x$ B1 l% Y- c: U; T
  854.           dwStartUpSteps=3;& L# p% p, {: x5 @
  855.         }
    6 t+ ^5 h' [* I& D* W  `
  856.       }
    4 Z3 r- |2 S4 H8 p" c5 r
  857.       break;1 V( L" s/ r# U+ m% B
  858.     case 5:
    4 ~, `7 u# t# ?" m; A# _! `
  859.       {
    , ^3 t- k* w- }: T# \# F  U
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)7 s5 O+ A, ?. @/ a# r) K/ F3 D
  861.         {
    ; B: F7 u; g+ P& _! k
  862.           int opt_overwrite=1;/ Q* V6 P9 r& @/ O0 o( B# r" b
  863.           int opt_do_extract_withoutpath=0;
    & `5 M9 @! n; b0 w. `6 R$ ]# W
  864.           unzFile uf=NULL;1 w# ^. t  m3 g: `$ Q! b& L" H

  865. # k8 @* N$ O% r6 F, K
  866.           uf=unzOpen("Wsa.zip");( i, a4 I+ l8 f& A& `
  867.           if(uf)' S3 a$ t0 \; h, s& ^+ {/ k
  868.           {2 [; I9 a$ f+ w* p% R
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) O2 |0 ~$ x* y6 O0 F
  870.             unzClose(uf);
    ; \$ t! ]* m) u# U/ p6 a/ {0 z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    * C) A% e! x2 p7 A& H3 M- }0 z  o) Q) A# _
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    $ d1 E# x6 M) N$ s5 o! g; h" g- ~0 F
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");) Q$ y0 B+ `6 i
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 S' E- @9 C5 C
  875.           }
      z3 b$ W) d. X. A8 c
  876.           DeleteFile("Wsa.zip" );
    7 j5 @2 R, b1 I7 K" W8 Y4 i
  877.         }" o: P  U4 N8 a; B7 w7 e9 S

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

& v4 l3 K$ j* z" X+ g( z# C. f" L: J4 z8 N4 v4 {4 h

評分

參與人數 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-2-28 18:53

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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