找回密碼
 立即注册

CSUpdate.exe源代码

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

% S# I/ @- N; U0 B
  1. / RevApp.cpp : Defines the class behaviors for the application.
    + s$ Y% U0 I0 b, }- [
  2. //! d! D! _& E  S7 |# J7 T

  3. # d9 [6 t5 k6 _5 U# F2 U
  4. #include "stdafx.h"
    ' C; R8 E( i  n) O
  5. 9 `+ P" E; T" F
  6. //#define UNICODE) n& u% C- D2 q4 _) r% |9 c5 ^: N
  7. //#include <gdiplus.h>& A% r4 m7 ~0 N) H7 @: Q% r( y$ [5 e
  8. //using namespace Gdiplus;
    2 M6 t4 i5 f8 ~  `

  9. % O9 L! P, _; f. d4 w
  10. #include "RevApp.h"5 n% Q# E& W* c# V
  11. #include "RevAppDlg.h"/ v" B7 F9 @' m5 Y+ P2 D

  12. * K  M% d: g- ^6 \+ D: P
  13. #pragma warning(disable:4786)
    / D# ?* D- j  H4 V6 d! `! ]9 G
  14. #include <map>
    & O0 R4 V. e( w' Y( w  R3 h2 |) Y
  15. #include <list>
    3 _& s  p5 T; q* n9 L- ?
  16. #include <direct.h>
    % {3 F3 Z* L4 e6 J

  17. : h! [$ J5 t6 U
  18. #ifdef _DEBUG
    ' C) {) F1 h% _! h
  19. #define new DEBUG_NEW' D# Y0 j6 L, ?3 ~  i- ]
  20. #undef THIS_FILE& _9 f% V( O5 S: D" m5 [% l
  21. static char THIS_FILE[] = __FILE__;
    , ?% L  `' K+ H) Q
  22. #endif
    5 y" |$ y* P6 ]; b8 x
  23. #include "SkinResDef.h"
    ' ?, J/ u2 W" Q
  24. #include "ChangeBG.h"
    $ f# ^0 v  T% N) v7 j- |& b# _
  25. #include "AFXINET.H"
    ( n+ X' y: D  J. [+ v$ K3 V

  26. & v8 Z% I2 F. F4 Q/ g  ~0 b4 Q
  27. #define TRADITIONAL_CHINESE 0
    . O. y  y) Y' W+ P- o
  28. #define SIMPLIFY_CHINESE 1) A4 q! \; x9 ^* L+ v
  29. #define ENGLISH 2
    - v. _/ w- ?; _" @& t; X: n3 S! r+ q
  30. int m_iLanguage = ENGLISH;1 m, h* I+ w. @8 c
  31. /////////////////////////////////////////////////////////////////////////////
      _. k7 w4 C/ z4 P/ A# w
  32. // CRevAppApp! \$ V% g% B5 y6 ]

  33. 8 f/ ?; g# j- m5 R4 \9 n
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) h$ i& z' k  c  o
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    : W7 p; l+ t- {4 t; ~  v) S
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 A( }: E0 F7 P/ d# y* B# N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!7 U, X0 K/ n% {1 X7 {& `
  38.         //}}AFX_MSG
    2 Z8 y9 y7 E7 ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ( P# y1 F% n5 N0 C4 o  d: T
  40. END_MESSAGE_MAP()6 L( z4 t* f. m9 L+ W% v* ^
  41. $ I/ m" \! B& a9 H0 t# b* f5 p
  42. /////////////////////////////////////////////////////////////////////////////
    ( L! o4 p) y" W  Z  Q) B
  43. // CRevAppApp construction+ Y# Z9 S) @) U* M+ X

  44. # T% t0 k& J$ [* e, b
  45. CRevAppApp::CRevAppApp()! U- N& `; L. B
  46. {
    - I* O7 ~( u4 E
  47.         // TODO: add construction code here,% E5 Z" M: c( Z2 T% c1 {1 c# a+ ]
  48.         // Place all significant initialization in InitInstance
    : ~2 J9 e( h; [% h/ `. T; \9 X
  49.   bDisplayIsBig5=FALSE;% U  _8 r# {1 m( Y: ?
  50.   bRestartUpdater=FALSE;; W3 p8 `/ F4 t
  51.   bFinishUpdated=FALSE;
    1 F2 [1 T: L& Q% Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    $ B' E! Q. `$ V, I$ U
  53.   InitChangeDataBig52GBKS();
    # B6 L7 F& h4 A8 S
  54.   InitChangeDataGBKS2Big5();
    & e: \! ^$ g2 \$ K3 L. f2 {( M, a
  55.         //* V2 |% k% n" Y- ~# h5 g& _
  56.         bClickRunExe = FALSE;
    - p2 D! l/ K& n0 \! r! C
  57.         //) h, ~- @$ d7 d! d4 a4 O1 E
  58. }" A. I+ B) v; k) A. {
  59. ' S+ ~) Q) n8 `3 F; d. f
  60. CRevAppApp::~CRevAppApp()* \/ |/ b8 K8 P' v0 g7 }8 t, a+ j
  61. {
    : ]0 }) o5 o& t- ]) ?
  62.         // TODO: add construction code here,' }8 v1 X8 w% q0 O
  63.         // Place all significant initialization in InitInstance
    6 f+ A+ c( {, V' X
  64.   EndChangeData();
    9 ^6 z; J  h# S# Z1 r
  65. }" ]/ V  D, r5 q

  66. * K% D8 C$ U) I9 p9 u. H- ]3 P
  67. /////////////////////////////////////////////////////////////////////////////
    ( e% r. L/ Z8 }$ B& R& J& S) S
  68. // The one and only CRevAppApp object
    ' j, S0 a" w1 G: o' d
  69. ! r/ T; S6 U* ]) i! Y3 \
  70. CRevAppApp theApp;
    ! S$ ?' t7 w9 H- I. |

  71. 4 y* I7 g& Y2 y( E; ^, X& t4 Y# Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ G! T7 @1 u$ E; Q+ A. a% R3 h
  73. {* y. l4 Z' D% O' c3 Q3 I4 H8 \
  74.   int iEOF=0;
    9 {7 B! a* L' Z- y2 b% k
  75.   char szTempName[MAX_PATH];- |6 |- ~* `" ~3 [
  76.   *szFileName=0;5 b/ o/ u8 a1 U. r
  77.   iEOF=fscanf(fp,"%s",szTempName);, c+ F/ O' P; ~
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ w+ x9 }/ h& h5 e# i
  79.   {
    ! O/ P- k( M$ U& K" X$ q% I1 `
  80.     strcpy(szFileName,&szTempName[1]);
    9 B' }- l2 Z. T- a0 K
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 _( M1 o" A9 M& w& ~# N4 c
  82.     {) r3 |* r7 \+ Q1 e
  83.       iEOF=fscanf(fp,"%s",szTempName);
    % J" c# q, p  a8 ?/ W/ T$ r( W
  84.       strcat(szFileName," ");
    2 R) e+ n+ U. L+ D9 w: J9 j
  85.       strcat(szFileName,szTempName);5 `- @/ T7 ]9 E  O# N2 }
  86.     }1 C! N, u, z& r# o
  87.     if(strlen(szFileName)>=1)
    - J, P/ G, C, k7 L1 `4 \
  88.     {
    1 e; L$ F4 a: B% y  W; g
  89.       szFileName[strlen(szFileName)-1]=0;7 L- Z2 p3 l; H5 B* x( u
  90.     }
    & g5 N- l9 z3 ]2 J7 Y$ y1 \+ [
  91.   }. M3 e6 B2 g9 g9 d
  92.   return szFileName;* [9 I# O7 S- S% |6 I5 b8 r
  93. }5 Y8 b$ n% R* k

  94. + ]3 X: |. f# F7 V9 ?
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)/ Y7 F( n( h9 W
  96. {
    + m$ \/ x% F, n3 m, w
  97.   FILE *fp;
      h5 }/ S+ S- x" t" x4 I, n/ D
  98.   char *key=NULL;0 ]; g, n& C  M+ N6 Z7 }. N
  99.   char version[MAX_PATH];
    4 v. N: A* n  `  Z" q5 p' z
  100.   LPUPDATEFILE file,olds;$ ]: g4 b* n- }1 M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;+ w' c* D9 M& D" N- r6 U

  102. 3 X9 Q: X" ^0 m* Y" Q- U
  103.   UpdateList.clear();% O% C' Y+ i/ K5 V9 ?2 k; v
  104.   UpdateFile.clear();( Y( ^2 E) V3 k2 z' A' ]+ V
  105.   if(GetFileAttributes(filename)==-1) return false;6 }. U* X8 ?; @' M. _* ~! c4 `
  106.   if(!(fp=fopen(filename,"r"))) return false;2 Q5 p2 c& H0 {' M, l$ R
  107.   fscanf(fp,"%s",version);9 k2 P* l* t- c' J# m! a6 c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* K% ^4 }$ ?% s  K4 r5 T* f
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 p* F/ s1 T8 q, G
  110.   {7 N1 D; C- ~4 `
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % B$ i" m" @) i; }; I& U" j* ?8 g
  112.     fscanf(fp,"%s",file->path);% i) J4 z2 _$ I: _8 v
  113.     ReadFileNames(fp,file->file);6 Q2 p( j. R6 ~% K4 k
  114.     strcpy(file->full,".");
    0 @, @0 @: q: j6 o& D) Q3 }- z
  115.     strcat(file->full,file->path);% t: }, c9 ^2 D% r/ l
  116.     strcat(file->full,file->file);
    ( q0 P9 X9 }, {" R
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 D0 z5 m9 A8 }9 u2 d7 j
  118.     {) c1 k' x$ N1 \$ o1 H' |$ J+ E8 @
  119.       file->vers=(float)atof(version);
    - P/ x  ?8 A* _% o, z
  120.       UpdateList.push_back(file->full);
    # ^: d8 R0 P4 ~& q2 O
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  O" i& r6 O8 g
  122.     }* g' z& E" E- R0 n; T2 ~1 ^0 x1 p
  123.     else
    & d7 Y" t. e! I$ ^0 B5 P6 J% V- R
  124.     {
    9 w9 Q- q7 \4 m; l! O
  125.       olds=(*p).second;0 j. {0 ~, u9 }* J' _, M
  126.       if(olds->vers<(float)atof(version))
    7 g; g  Y/ h6 P" [
  127.       {
    , d, ?# M2 D8 H  l" W3 q
  128.         olds->vers=(float)atof(version);9 q" F2 t0 t, z
  129.       }
    $ [9 ]$ @8 d, z
  130.       free(file);
    2 ]: n& e& N! x" r+ y/ ?
  131.     }0 P# {  J: V7 x' q8 x
  132.   }/ F' K2 u+ C2 ~! N; R5 |6 N
  133.   fclose(fp);
    ! @8 w/ P+ }2 n% z2 R5 F
  134.   return true;# k0 h; }) z3 h8 \. k1 h( @$ h
  135. }( u% b% e$ u$ A6 |# n, `$ d

  136. 8 @8 K3 h/ }8 Y7 }# S: K% M5 o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! i" Q' ^8 m: O! l  [
  138. {
    ' I& O& X% m- B
  139.   TCHAR  szFull[MAX_PATH];
    3 k9 G: Z2 {" o- ]0 p
  140.   TCHAR *token,*inter;- o$ ^' k! A; C, U$ P
  141.   *szPath=0;
    * D) @9 U* C" e5 `  i7 ?1 d$ k
  142.   strcpy(szFull,szFullPath);5 H' [. M0 H& ], T7 C& K/ d
  143.   token=strtok(szFull,"\\/");$ k; J* n# u" z8 b& n
  144.   inter=token;
    / m* n. T9 b# y; o7 l3 E
  145.   while(token=strtok(NULL,"\\/"))! w* ~" k6 E$ b) c) n
  146.   {: L8 Y0 w$ }+ G( [* G+ V) R1 t
  147.     strcat(szPath,inter);
    # ^; p! j1 p7 m8 G6 \
  148.     strcat(szPath,"\");
    ; k( _0 H5 U' ~' Q" t  D- q
  149.     inter=token;
    / Z$ ^" O1 i% [3 f
  150.   }
    ( m! x% f, \) g% _. z& t
  151.   return strlen(szPath);3 v% P# P; N8 k) `1 a" S4 T
  152. }3 L3 i% z/ M/ e8 m& R( |

  153. " L. u  S$ g# n7 l- r  T8 w" \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ) _8 u, O0 J5 q0 e  h2 R
  155. {8 D$ o4 C* h3 I2 ^% f0 H9 ^8 L
  156.   DWORD attrib=GetFileAttributes(Target);) j! z! l4 m( T5 j" w5 K
  157.   if(attrib!=-1)
    0 m4 J+ Z6 F6 F! @1 W- @& X$ |; O
  158.   {9 C8 X" r! W7 e8 ]% s8 ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 O3 p& R; B7 U5 \& ^6 F- I  V
  160.     {2 t  f# r  ?( d3 h( {' L6 u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + e2 R4 D; z! X  z$ T
  162.       SetFileAttributes(Target,attrib);( \1 Q( X4 ?( ^! P5 S4 _! W
  163.     }! K  g, u! l& y% G2 l# `
  164.   }( ]/ m6 ~' x: Z( [. b" q- Y
  165.   CopyFile(Source,Target,Erase);' i# |! S/ Z% J1 N6 ^# v( M1 O0 g
  166. }
    ! [2 L- s/ F6 H: A

  167. + i7 ]* I( ~1 ]
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ! `; U) a- G! T# g
  169. {  ^' g6 L7 Q) C; H& B! e
  170.      FILE *fp;
    % H8 _7 F* \5 l3 o9 O- E; T, M  F$ Z
  171.      char  szBuffer[8192];/ T( p& D# ?' J, y" k1 s( R
  172.   va_list  argptr;. |: M7 d6 b: n% M5 y, g4 p3 g  g
  173. 8 w! w5 ^) g/ V$ |( z
  174.         va_start(argptr,message);% m7 t5 y+ V  e; N
  175.         vsprintf(szBuffer,message,argptr);8 k' S3 u/ g2 `! o, c
  176.         va_end(argptr);
    ; m/ p9 g- o/ N1 O! k4 ^% r
  177.   fp=fopen(FileName,"a");
    7 S0 V6 v1 U$ Z. f; z9 N- g
  178.   if(fp)
    4 f7 }+ I2 N2 F% W% K
  179.   {
    , N" A' r( [4 Q% @5 K
  180.     fprintf(fp,szBuffer);% z% M. ~5 H$ y
  181.     fclose(fp);; M! f$ Z, ^5 p* K9 S/ z. ]
  182.           _flushall();
    % K: g( q% g/ ^5 v% A, m" `( K
  183.   }- l6 c$ M6 _5 _/ [
  184. }' P$ }1 e- z  e* S

  185. , X* T7 H+ v, ~* B0 ^2 M1 l* a
  186. BOOL CRevAppApp::Fclearf(char *FileName)0 u. `0 s1 N4 p2 m" o1 S& h
  187. {
    9 w  o- e6 k6 h5 g/ @& l
  188.      FILE *fp;
    3 R% ?( U' u0 m# y
  189.     DWORD  attrib;- i8 q* D! ?- s+ V
  190.   attrib=GetFileAttributes(FileName);: Z7 y) m& l# y# u  J. L8 Z/ I3 {
  191.   if(attrib!=-1)
    1 ?: L; m  P% n5 |
  192.   {
    $ B4 A$ W& h4 e5 [" E& I
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);' _- G2 S* k2 C+ b
  194.     if(!SetFileAttributes(FileName,attrib))# V) G) C" S  V9 H- m
  195.     {
    5 g4 `7 j% S6 W
  196.       return FALSE;
    : h) j: \) N1 A$ Y, A7 ~
  197.     }9 B  i8 H3 s2 O3 [8 _$ x& i0 f+ k
  198.   }5 [- |2 A( D+ b3 c: o- \, {& q# i
  199.   fp=fopen(FileName,"wb");  b. v; @. _% X$ _: V: j% w
  200.   if(fp)2 x, T9 m* E7 l* U; t* @1 ?, V
  201.   {
    ! L0 g$ I9 m# t/ |: m! Y1 c& S
  202.     fclose(fp);
    ) q8 i8 |! f" z" H4 G
  203.   }
    # H, {- ^1 N+ c4 Y
  204.   return TRUE;
    6 S1 F3 g% a" [; y) ?% O
  205. }
    3 [" c( @* s( _! i( D" J+ }  z4 V

  206. & s; \( {( P1 P; O2 j( f' b
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    8 B/ b  `: G- Z( ]! D; m9 x
  208. {
    8 l6 j2 \, n0 x; j  X
  209.   char filename[MAX_PATH];
    / I0 E# z8 D2 C! f" D7 M* Y. e) R; {
  210.   LPUPDATEFILE file,olds;& c" p% r/ f$ q0 b
  211.   std::map<int,CString>::iterator i;
    & d# k/ m$ Z) ?' f! \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;  Y9 Y' R! b. e6 t
  213.   std::list<CString>::iterator l;
    6 R8 x: t# }, ]' B1 C5 |# k" p

  214. . d/ S  l) V% a6 x, D1 {+ D
  215.   if(bFirstUpdate)! c* M, G+ J. _
  216.   {9 n5 G; h# l* f% l6 H7 |9 }! `
  217.     dwCurrFile=0;
    ) a" S- g! Q+ m, t; N
  218.     bFirstUpdate=FALSE;, q0 B( C$ G$ m  @$ z1 H' C
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 {* U# S3 p9 t3 G/ E
  220.     {# J0 b. x/ T. W; L, d: W" y
  221.       dwTotalFiles=UpdateLocal.size();
    8 \) }, P& ^/ V: P( B7 D7 A2 v7 {
  222.       dwDownLoaded=0;& }% v; {) g5 l* Y& c& M8 k
  223.       bSilentStep=FALSE;
    0 H3 [$ B5 o1 t" n6 s. e$ i+ x
  224.       bCompressed=TRUE;9 [- K, B( F5 c+ z- t
  225.       strExtLocal.Empty();
    0 s+ \: U9 D& {0 q9 y( ]
  226.       strFullName=(*i).second;
    # b, l% Z( g1 c% M: c. Q# D
  227.       dwProgramState=AP_CONNECT;1 E( ]! K- c2 z1 k
  228.       return TRUE;1 e5 [7 X5 Z! V  P
  229.     }
    1 z7 J  l6 v9 H& P( Z& z; E4 o
  230.   }
    ( {+ t& }; l8 w3 F2 O5 f0 F* j
  231.   else if(bRestartUpdater==FALSE)
    : e3 n3 ~" V: R" _
  232.   {  V5 R+ T# n$ O9 x( @# D' d
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" b* e, u+ J) ~9 _9 L$ u
  234.     {# L6 r' w/ z5 L9 M
  235.       file=(*p).second;
    4 ^" j8 R0 M7 }# Q, q+ t0 C( G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 z* L7 N! K( Q+ Z
  237.       {/ x* A% H6 o; I4 e" f5 u" F# _5 h, z6 R! W
  238.         olds=(*p).second;/ U5 s8 w& L) T, X
  239.         olds->vers=file->vers;: `5 f( H9 D, t2 E0 E
  240.       }; `* V4 S* U5 \" ]# X7 T
  241.       else
    + I& t7 ^6 b# Y6 T( i" }0 _
  242.       {
    : K$ k% `1 N$ [! X' G
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    & `7 Z% {3 [6 S) D! R
  244.         memcpy(olds,file,sizeof(UPDATEFILE));0 B2 A0 L2 H# g  h$ m2 V) Q: ^9 V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 ]: k7 a) k; e: y0 F
  246.       }
    # g/ |4 J; o- b$ ~5 |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * l2 c# O& m; M
  248.       sprintf(filename,"(%s)",file->file);
    0 N: Q. K0 F6 M* v2 N! O8 M& r
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) w" a. D- i7 p6 c4 |7 t6 I
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& P! [9 T' [, b9 D7 p
  251.     }. h& a1 s9 D8 r$ S7 V  ?! C
  252.     dwCurrFile++;7 r3 z, k& c$ |9 m# `
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ N0 N- Y7 O5 m; d2 v" ?* U+ k* J
  254.     {) l* i+ u! y3 e
  255.       bSilentStep=FALSE;
    5 |' A& t7 s) x- ?
  256.       bCompressed=TRUE;7 G0 E9 U4 }6 m" I# d5 E7 V
  257.       strExtLocal.Empty();
    % G  w, v" O! K5 i
  258.       strFullName=(*i).second;% r& D  e' H: c( e
  259.       dwProgramState=AP_CONNECT;
    - Z, y5 ^9 p% ?. D$ q$ X. S
  260.       return TRUE;
    * \6 j% G( ~! _: h. k
  261.     }  D: W6 ~% S4 h( W
  262.     if(!bRestartUpdater)' G$ o  `( }# v0 L' R8 f
  263.     {/ ~5 |  C, ~& D# m& u' K- X& Q9 }
  264.       int iCurrSize,iFileSize;
    ! @$ T4 }5 ]- s7 ^; b7 S
  265.       iCurrSize=0;
    7 d1 G& W5 `& D1 Y! p" l
  266.       iFileSize=UpdateList2.size();
    3 C# _* I6 z- c/ Q. p. \  t' w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");$ F1 @  q3 a/ ?9 U7 C; J) o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " H! q9 P4 U# C1 Y+ z: `  O. x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- Y- }0 y- G7 I( x2 Y5 D- Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . y! I& l) C. K& B4 w7 Z
  271.       Fclearf(".\\update.dat");
    7 I# x6 h  A8 p' x8 G! s
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ) H8 o9 S/ n5 G- ~1 d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ Z1 C& }6 S1 x0 p/ Y
  274.       {0 w' W. _+ g$ K6 }1 W
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), Y: Z9 B. {. Y3 Q
  276.         {
    9 f! |8 `0 j( Y  c: c. J6 t
  277.           file=(*p).second;
    % _) K( U% z/ ^0 j, u4 y1 \
  278.           sprintf(filename,"(%s)",file->file);
    $ z2 L/ }% f, i1 \9 N* c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 K( d6 b- E1 a* c& c& L2 k( A7 e
  280.           iCurrSize++;. [0 b9 R! h' y5 Z+ ^/ B9 ~
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ d/ k5 o, E3 k1 X' @' O+ I
  282.         }
    1 i4 K5 z5 K  R( |! g6 |) P
  283.       }/ C' O3 U% U) |% Y( j0 b0 p* u
  284.       unlink(".\\update.txt");
    4 r3 }$ {/ m4 A3 r! O
  285.       unlink(".\\update.tmp");$ i4 j- S7 o6 w/ r- y+ C3 v
  286.       Fclearf(".\\checkversion.dat");
    - Q' g9 q3 H2 {# q3 s) w
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);# g7 J$ ]; D0 J+ S, {9 q
  288.       if(UpdateLocal.size())
    ; V# ~, \9 V+ Q7 b$ N
  289.       {. n/ q) r, ?4 r% \1 \5 u/ x# B. B
  290.         UpdateLocal.clear();
    " L# v9 q# t8 `( v; @7 u
  291.       }
    ) |0 r/ K0 f0 [4 q
  292.       if(UpdateFile3.size())
    - ^% i: w; y9 I* E8 k
  293.       {
    ! N8 @' i3 h5 U9 O, c8 |1 D1 z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 K9 u6 N" A5 ~5 O" x
  295.         {9 i- a) j) P' a- H. _7 L' {
  296.           file=(*p).second;
    5 O1 I; {5 A+ h" {5 y+ c8 t  i& s
  297.           free(file);7 C) S9 h0 M' E$ `" ]: A6 p
  298.         }+ c' m; Q$ [2 N. J# D$ F
  299.         UpdateFile3.clear();. Z+ n$ A' x8 E' V7 a
  300.         UpdateList3.clear();1 [3 e$ K% O5 s" c& e8 e
  301.       }; c$ R9 K) I1 U
  302.       if(UpdateFile2.size())# N3 I  ?* M# U: ~0 ~9 ?' d, j- d
  303.       {3 O8 B# x6 d/ i5 \/ m
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 C& z2 f9 h5 T% H9 H; K! z
  305.         {
    " X2 v$ e2 i: p$ [4 v/ ?$ a
  306.           file=(*p).second;: g' ?" `# g* U: d
  307.           free(file);! y8 p/ ?5 p4 T0 [2 w1 F
  308.         }
    8 k- C5 f) a  k( D
  309.         UpdateFile2.clear();
    / l1 X7 h5 }3 B
  310.         UpdateList2.clear();1 ?* ?  L* n3 G( y. N$ I, |" J$ x
  311.       }
    ' T* f5 t) l* P  m% v: `
  312.       if(UpdateFile1.size())8 Y. u$ `  p: u3 W
  313.       {
    8 y7 g* o+ V- N* |) |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 D2 c: w( e. L% d9 x9 f
  315.         {
    ! l" t2 M& e+ q$ J& D$ B' @" S" T
  316.           file=(*p).second;
    % D. n' N# h2 l; U% z: e# G5 ]- d
  317.           free(file);# W  S, r- t! o" z
  318.         }
    ; `  K- f, d. d8 v
  319.         UpdateFile1.clear();. B! }7 K9 S. |0 L* |9 T
  320.         UpdateList1.clear();6 o0 [& v0 @# @3 M+ `6 H# F  f
  321.       }+ |: `1 E7 {9 f, p. \) _1 L- w
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    4 f7 I4 f0 h& z- R" y
  323.     }
      x6 x, H' p) m+ N
  324.   }
    . ?2 f' @5 c* ^! G# q
  325.   return FALSE;6 r  a6 T9 n9 a  c8 _  E1 z+ g
  326. }6 ]+ `' \; b6 t' g  b  b

  327. % S0 X  A2 b0 {7 d
  328. void CRevAppApp::ClearAll(void)
    " d+ F* [" j! t/ w
  329. {
    ; H* {3 a" \& B5 p* |
  330.   LPUPDATEFILE file;3 s; h% \5 d6 j! ~# C, L7 ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;! P1 b+ q9 x) e: t/ |

  332. / V9 {, t7 J' Y2 ~7 u/ d" O2 w
  333.   if(UpdateLocal.size())
    , x& ?" k+ E% w3 k" _- D
  334.   {" l4 ?7 Z! g& V5 s! [
  335.     UpdateLocal.clear();. s, N- Z$ j2 O; j0 Q( R. r
  336.   }
    + ~/ t$ k8 d3 C! G
  337.   if(UpdateFile3.size())1 N4 X$ {( h. y9 a9 X$ z+ L
  338.   {
    ' ?. _# F4 V7 T( m5 D& k6 \. f
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : t2 r5 L( h, t" J$ Y$ `
  340.     {
    ) A0 K3 X& _  k, a
  341.       file=(*p).second;
    / p: g& {6 E' P1 H2 g: B4 h' n9 ?
  342.       free(file);2 x7 Z, h% j5 D* t9 V: I* }
  343.     }2 P2 I! Y7 u6 z  Y" J
  344.     UpdateFile3.clear();
    3 ~9 D# V; P; q' D8 ~+ h
  345.     UpdateList3.clear();
    + n# p4 F. j7 y: J# \2 U/ g0 a
  346.   }7 l( ]) _& B; Z% j' P0 V! J
  347.   if(UpdateFile2.size())
    ' G& }6 J2 m" V. o& H- O
  348.   {1 N8 j3 Q/ g/ F
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# v( D; T  P7 ~8 s8 r
  350.     {
    5 Y& j; p) I  ^9 p# U2 y8 V8 ]
  351.       file=(*p).second;
    5 ^2 L! g7 a+ X! m' Y4 i: [
  352.       free(file);+ e* n# \5 [! u/ w$ o
  353.     }9 I; S5 d5 Y2 M2 V& }% u6 }
  354.     UpdateFile2.clear();4 Z; c" t2 y1 R# T
  355.     UpdateList2.clear();
    2 T5 r) Q1 m+ h- V. v7 h0 v! c
  356.   }
    # i. f; q3 ~4 l: G! |
  357.   if(UpdateFile1.size())* S  e6 R# C! g( n" i* y
  358.   {; i! m7 e$ Y; R, S4 [- H7 _6 ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & A- k/ E4 F. E( Z; R4 B! v
  360.     {
    5 m# `; l- M" f5 f1 m
  361.       file=(*p).second;
    7 V; E' Y8 s8 j& q3 r
  362.       free(file);
    ) c+ f/ Y: X5 W  r
  363.     }
    9 h3 h8 ]' C- @: U% E. R7 T
  364.     UpdateFile1.clear();
    ; N1 i: N. v  V
  365.     UpdateList1.clear();
    4 s- n) ^' b  i% G* A
  366.   }
    . V; V2 V/ X0 x* s; a7 a7 q
  367. }  % `: m& Z- ~; M9 B0 S1 ]8 }1 n
  368.   1 C9 e1 l7 |3 s
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    # {3 a7 ^3 o8 L  _: e
  370. {" ~) }2 I- P0 w9 V8 M, d1 w0 [
  371.   int c;6 b4 h% D; q& b" Z
  372.   LPUPDATEFILE file1,file2;2 E6 |+ |6 U& R$ S3 B2 Y; O
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    0 N4 q$ @% _9 W. E0 S0 S
  374.   std::list<CString>::iterator l;( ^9 E$ w$ o. Y

  375. 4 u$ t. r$ t/ c% {+ c5 U
  376.   UpdateLocal.clear();
    & e& Q: z2 _' b( q4 J+ {+ q  z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    5 R1 K  l5 A$ @- ~- n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);5 z7 k; e1 D' [: U
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    # t/ l+ w! j& Y1 l& G8 A
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( r2 s, e$ D& ^8 m  x# F, Y
  381.   if(UpdateFile3.size())4 `) `7 m' k' K! ~- ]5 K$ a
  382.   {
    3 \& C4 t6 D. S7 S! t- X8 q" w5 B
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , i- P8 m8 G8 v5 F+ ]/ V  B0 T
  384.     {9 e! Z) k( M! S
  385.       file2=(LPUPDATEFILE)(*i).second;! p2 V7 Q  B: O% d, Q! X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 b% D6 u4 Q2 o5 _8 ?
  387.       {9 \+ V, ^' t. s. G1 X$ y
  388.         file1=(LPUPDATEFILE)(*p).second;
    9 Y# Q% M/ Y. g, @: p9 ]7 ~
  389.         file1->vers=file2->vers;
    ) o4 o1 U' y7 f- A, Z0 n
  390.       }
    ; m) U* x3 [  n5 i+ i, j
  391.       else  s# i  _: P6 P$ [
  392.       {" g4 o6 ~3 n+ ~. s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ _* a7 A* U3 Z3 b- N
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));8 y0 e) ?: A0 L
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ w) w8 g' ?0 ^: {
  396.       }
    ! B6 t6 c7 K( k* D; F1 E
  397.     }" L) `# D  u/ C; ~
  398.   }! n6 u3 M& i, Y- @& g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ z1 S2 _$ o. M5 r$ H$ l
  400.   {
    - N: l9 C. o9 t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()), P& B$ ]( N4 q
  402.     {
    0 g8 c; e; \- [1 E, q: q% q
  403.       file2=(LPUPDATEFILE)(*i).second;
    5 h- B9 |% e( q: i& q* ~4 Q# }
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 s- n, E6 z/ Y% g$ w" l7 O
  405.       {7 H" ]# O8 R8 P4 s
  406.         file1=(LPUPDATEFILE)(*p).second;$ l2 n: _0 Y! \2 i3 J; S+ A
  407.         if(file1->vers!=file2->vers)5 ]6 @$ C0 z& P" z9 o. _
  408.         {, Z1 m6 S! B$ z; s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    " M  L: p2 b: _! ^" P4 U2 R
  410.           c++;1 ?0 O' R4 U( w* V+ ?) r
  411.         }
    / R: q' D' y' J" [% b" e6 v
  412.       }$ ]- \7 e! v  @; ^
  413.       else
    * S1 D& d9 y! |0 R% R
  414.       {
    7 C9 J+ ^* j0 E: e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 w. @# n  K: S( U  f
  416.         c++;; p1 `6 Y; G: e: q& V
  417.       }( ~; j# e3 a9 e' I8 J7 Q, g7 ^1 `
  418.     }
    . w8 T+ H, z* I# \: \- R
  419.   }0 S' }( J* F! k; q. `
  420.   unlink(".\\DownLoad\\update.txt");3 S2 {! u9 V% y# L3 \
  421.   if(UpdateLocal.size()) return TRUE;
    - g/ _, S  K0 W% {4 ]! u% k
  422.   else                   return FALSE;
    ! Y1 G9 y0 f$ k5 j; F/ X
  423. }
      L- W' t; J! o# y+ @0 i; \

  424. ! a, O# ^2 K; }* H6 L- S5 z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , j$ m$ n5 y! d, {& e6 y
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    3 t" ?. h2 r9 n. G( |; y* _& _2 e! c
  427. 2 L8 z  X3 n( u! |
  428. 9 _/ f) m$ ?+ Y7 l/ F) g
  429.   H- s) u+ F$ b2 n4 |
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ Y% ^- W8 y/ N1 {7 o3 _9 _
  431. {! |9 J' U* E- O
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ D6 O# \* F6 T; L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / ], c* c8 X" {1 p7 P8 {8 d
  434.   {! \0 M2 J9 W+ u# B# w6 Q, q
  435.     char szLanguage[50];
    , u. c  S+ W; i% H. ?' z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: r* Z! _& [/ u3 L, D% n
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * d/ Z$ [) h8 k/ [: X- d1 V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 F; s: j) h  n5 E; s1 ^6 n5 t6 u
  439.     else                                   m_iLanguage=ENGLISH;
    9 B7 T  B9 e8 x
  440.     char szRegister[100];
    ( \4 f3 U2 Z& ]2 G3 T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . J6 o# q: C8 }4 ]
  442.     strRegsName=szRegister;
    % A5 l- B* G* m- o+ Y. d
  443.     char szPatchURL[100];/ @1 Z7 @! P, k
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 l. I( u) O! T/ @+ c& ~
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( v& i  Q/ B8 Q9 o
  446.   }
    ) X, ?) V7 A! m5 h: j
  447.   else% P! S5 o! B1 @0 s7 F3 `& t# c
  448.   {
    # D. z! P4 M( u+ p" k& {# M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: i( a. C- c. w% o8 N
  450.     strRegsName=DEFAULT_REG_URL;( E% h) \( L2 h. v
  451.   }
    4 w- V" Q: j* Z, o) H
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * k) E: r. _* u3 ?' ~
  453.   {& r, q& Q' j6 S1 @) y0 {2 R
  454.     char szIP[50];5 U5 X0 q4 O: g& k
  455.     char szDIR[300];
      h+ W. i3 c2 i$ ~, S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% o5 }: Z5 f" L: k3 @
  457.     {
      q1 B8 H, K) m, [7 ?
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ' M# y4 r3 ~8 \% {: v, w  ]
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: Q, N# o1 x$ k
  460.       strHostName=szIP;/ A6 M. v) e5 n$ b
  461.       strHostPath.Format("/%s",szDIR);  x  K$ g) u& v+ {$ e4 n! U1 _3 ^
  462.     }
    . h& E0 G9 d* L' I, @
  463.     else
    2 R: ?+ i$ v+ i3 D8 {
  464.     {5 K9 ~5 e" W/ p  K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ G  Z7 z' t$ P5 ]! R
  466.       {# h1 Q: _$ S+ l, v8 _
  467.         char szLanguage[50];- X4 n$ ~  F/ Z3 G' u6 A5 U6 }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 x- g' e. @' O' C' m* Z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % Z9 \% k( z6 _3 S& n
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;- g) A7 v+ T% F" ?. z; q9 E
  471.         else                                   m_iLanguage=ENGLISH;9 n) j. ]+ `: b' q# y( Z4 v
  472.         char szRegister[100];' x3 @2 `6 @) A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , l( G: L8 K- X3 \
  474.         strRegsName=szRegister;
    ) H- u. M0 p5 G& E4 L" @3 b& c
  475.         char szPatchURL[100];1 a2 q# H2 e$ s* [! P
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' |- |9 ~2 q5 D* Q* M
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, i$ r7 K. O* S% f) R
  478.       }$ B8 N0 E# V8 f0 P
  479.       else
    ' Y$ ?% Q( L  q6 K- G( t
  480.       {5 U3 o; v- H9 d9 E3 f# M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , m* }9 g; s9 \8 n4 j1 \
  482.         strRegsName=DEFAULT_REG_URL;! P6 U/ k1 E$ v, y
  483.       }
    ) x; W8 F3 T7 Z: t  I3 b7 ?
  484.     }; s- n! w2 S3 a, L. {) `) D! R
  485.   }
    ) t) l' H" B1 n. B
  486.   return true;" F4 E8 C! c% w
  487. }
    & U. `9 `0 e" m8 L- g
  488. & i& Z0 N2 l, _3 p& L
  489. #include ".\ZLib\unzip.h", Q' Y7 U& G1 A* }( F* ], z1 Q
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( q/ g% _7 t7 a( S6 u
  491. /////////////////////////////////////////////////////////////////////////////
    4 G* a; _: Q, }* ^
  492. // CRevAppApp initialization2 j, I1 i1 h+ a* R! C7 h# o/ l1 V

  493. 2 Z- T9 v5 R$ U5 D$ }6 v, D' z
  494. BOOL CRevAppApp::InitInstance()% x6 j8 x( ?4 c6 O
  495. {3 o) ?; v0 `6 a) T6 k8 c
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ' X6 L. p* W' H' q7 B

  497. , W5 G2 H6 Z9 F$ t5 _  T4 R( H/ F
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 h% h0 ?. l& g" v  Q1 |
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ' W: v- C3 L* H, ?
  500.   {
    2 K: S4 ]% Y" x
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: r- K/ u( a9 m. u5 ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);" N: K& P3 h0 c  L2 a1 m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    " |5 O' q6 h: S, n2 z- U9 W9 K
  504.     {
    5 U* }7 U+ r& c% V7 G* X& o
  505.       strcpy(szPath,szPathTarget);" y, ~, F# Z- P0 f6 `0 T
  506.       SetCurrentDirectory(szPath);8 u6 _7 K/ l) s
  507.     }4 i8 e7 \  W7 J& u
  508.   }
    4 D# N3 }' Y; q( q$ f* d
  509. #ifdef _DEBUG
    9 V. l5 F0 @9 U5 X
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 a( }, G! u5 X% B5 k
  511. #else
    8 V1 k) z" h. k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) Q: l& J+ T' s- \1 R4 g+ j7 T
  513. #endif
    + F) r0 O) O# C7 p8 j3 c) W' v6 S
  514.   {
    7 j; b. z5 U6 U- t: t
  515.     char tempFileName[MAX_PATH];  j6 U% U6 K4 |
  516.     strcpy(tempFileName,szPathSource);
    % i# j# ^9 g& s5 R/ C
  517.     tempFileName[strlen(szPathSource)-12]=0;" G3 Z7 q& G; J: u7 O9 O
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. |4 K4 i3 C. s* e/ p7 H2 i$ [
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 i* _1 s) g$ M1 P9 N0 ~
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);# Q& b! Q) }6 ]# m
  521.     return TRUE;
    & \- ~* O  O  D. b' J* }: a0 x
  522.   }
    2 j/ p0 A7 E  ?8 x+ I1 T% _
  523.   // Nuke 0118: Delete run.exe
      J' o7 x& x3 D, F; Y1 P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );" F& ^6 E% Q8 ?  K' I# y2 Y- h+ ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    + ^5 i; \; n$ k$ N8 u- {$ T
  526.   if(!ReadCfgFile("Config.ini"))4 [& u: O+ e1 Z$ G
  527.   {
    4 B+ X/ Q" R9 d3 s* }8 p0 `+ K
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 {  z' K( a* ~
  529.     return TRUE;4 p+ o! J0 c4 M8 ^
  530.   }
    4 i" L! y* o1 p) h
  531.   HANDLE mutex;* C# ~7 h  _0 _% h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))! I* O9 a& J+ |. }7 @( F4 M3 V
  533.   {- g4 L4 i4 y1 @3 t. L& K7 p. ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) A  X% o/ C# B+ U
  535.     {
    % U+ s7 l. E  E' p& g
  536.       CloseHandle(mutex);
    9 O- d+ {, x0 J+ m  \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);) S8 b6 {- ^; L
  538.       return TRUE;6 n6 l8 S3 ~! c: D6 U" R! g8 h
  539.     }/ }, D( @; E9 [; I- ]
  540.   }  ! ^$ A. ?* l3 s5 o' u/ E* k
  541.   CloseHandle(mutex);' T" ]; m, {% I

  542. ' r3 P1 `4 _4 u9 c: u+ i
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    % v( ^" t8 O7 b" k# _8 ?

  544. & U( R/ W) }. {) m8 ?0 n9 `$ {
  545.         AfxEnableControlContainer();+ M4 Z2 o( x: p6 J) F5 w4 Q: ]
  546. 9 r$ G2 g3 f" k9 V
  547.   bCanUpdate=FALSE;
    ) Y2 p2 H( \. t! X4 I+ o: C
  548.   dwStartUpSteps=1;
    ; D' p9 s2 [! ~$ j- [% t4 L
  549.   dwProgramState=AP_NOTHING;
    / d; y7 I; D, k. n7 H- s2 j

  550. ( W' _6 }0 s3 i1 L9 b
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 d* d) C3 W1 k* E$ N  X  V

  552. $ }! E1 }6 O! }' ]6 j9 ]( m! v' S
  553.         // Standard initialization
    + T0 g% V# h- q! L$ j7 c. m2 |
  554.         // If you are not using these features and wish to reduce the size( Q# x4 R+ r' Y" P
  555.         //  of your final executable, you should remove from the following
    $ ^" R; m% C" c  W
  556.         //  the specific initialization routines you do not need.
      n* m$ ]9 E# |6 \* X5 ]6 r- d

  557. 3 G- F* N7 {* N; E; Y8 Q( d
  558. #ifdef _AFXDLL
    $ J& e1 ?; |, N' z) b
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL+ {: C! F: ^% \1 b: y
  560. #else
    8 J7 c$ D8 f* n. y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    1 r5 n" |( B$ V
  562. #endif5 ?: s0 p7 L7 p
  563. 6 g, v- \. p9 Z1 T
  564.   dlg=new CRevAppDlg;
    ) l0 h% H! A. M
  565.   dlg->Create(IDD_REVAPP_DIALOG);7 A/ A' J2 M+ C: _! N
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    6 p8 Z  e& z# _, M! E1 U5 i0 d
  567.   m_pMainWnd=dlg;9 ~5 G4 e  B. d
  568. & l. N0 I; j& B: S7 b
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);% r& q- [6 y9 L' q& n( }! X( G

  570. + m2 Y7 v5 }" Z& T1 e9 w1 o1 e# [
  571. //  GdiplusStartupInput gdiplusStartupInput;
    3 }! Q' y: w' I/ l
  572. //  ULONG_PTR gdiplusToken;4 i% I' [$ b5 x: {: W4 b, r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    , c, M. J9 i- B7 x& A( D- k

  574. - @. U% |, t7 ^
  575. //        CRevAppDlg dlg;
    * }$ f& `6 |4 a. p% q- G/ i
  576. //        int nResponse = dlg.DoModal();+ ?; z: u+ g- m" G( [
  577. //        if (nResponse == IDOK)
    1 Y% O! I# @/ Y7 Y
  578. //        {
    % Z/ {' h2 |: F/ N$ p
  579. //                // TODO: Place code here to handle when the dialog is
    ( I/ ?; I) y/ W, I* T" i- `
  580. //                //  dismissed with OK
    ) l4 k  p5 T  l) h4 j
  581. //        }
    2 b1 M0 `9 \2 A
  582. //        else if (nResponse == IDCANCEL)
    2 j4 k/ @5 F) H7 b2 A! w* A1 A
  583. //        {
      L/ |9 q8 n1 x$ `5 O
  584. //                // TODO: Place code here to handle when the dialog is
    9 r) m: ?" f9 R4 f) n; m9 d
  585. //                //  dismissed with Cancel) h5 V: \8 m5 W4 L( A7 q
  586. //        }
    4 U4 k' t  \. u- T/ s+ d1 W
  587. 1 h3 H5 ^: ~0 O# C  g
  588.         // Since the dialog has been closed, return FALSE so that we exit the& a) C# }$ l- t3 v+ \
  589.         //  application, rather than start the application's message pump.0 K) G& y: X6 K1 T/ R, k
  590.         return TRUE;
    " i$ b8 x" H  B0 q' S# {) ]
  591. }- C2 i# H+ t1 U% ?  u4 U( N

  592. / p# R' C$ u/ B: v
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    - {9 P+ |% y) h1 l- t& I
  594. {
    - ?5 x+ ?/ ?0 [% O1 L0 m
  595.   int i;
    $ q% D- t+ z/ Q1 v6 ^7 z
  596.   char *szRet;& Y9 @, t; F6 j# ]

  597. ( d/ p4 g3 g2 ~' g  A. m
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    . W4 D- q2 T+ j  S, h; b) A
  599.   if(sztoken)
    9 D2 Z, ]5 [& Z( h+ Q
  600.   {
    ( y( o- }6 i- R+ E
  601.     szRet=&sztoken[itoken];
    8 ^* ^" f( {9 X9 e; x
  602.     while(sztoken[itoken])
    ' ?& |4 \# w! t
  603.     {3 f9 O( U' F2 {" J0 f2 e7 }0 D, `1 Y2 K
  604.       for(i=0;i<(int)strlen(token);i++)
    ( B! h5 y7 p$ @' C/ J
  605.       {
    ' H6 V) g2 x% j/ X4 H( P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 {( ?& k0 G* }( O2 a; Y
  607.         {9 [, _8 n% c: L+ C1 b! ^4 w5 N
  608.           sztoken[itoken++]=0;: k. n& z) f) `5 G' b0 x7 _
  609.           sztoken[itoken++]=0;
    + _* W! ]$ G( B% G
  610.           return szRet;
    5 g+ A& w& c" x4 ~
  611.         }
    2 v2 _9 P! A5 p
  612.       }
    ! U) l( {! M# L# e3 Y2 `, S" ~" W/ u
  613.       itoken++;
    ) {; N" i( `. E
  614.     }5 }) _0 O- x( A% i  N  Y& u
  615.   }
    1 A" ]" i: G% y' D- y) F7 g. @" f
  616.   return NULL;6 U/ a/ @) ]0 v# w# f
  617. }9 e& Y6 z1 M# w+ @8 ~- o. u
  618. , k% O* k/ T+ n2 Q' F! F  i
  619. void ProcessProc(long Total,long Current)
    2 M& N/ |; f$ Q" F( @9 w6 D0 b
  620. {7 A5 P, d" \% d( y
  621.         MSG msg;
    ( m7 Y- F! P$ m8 q" M2 X% C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);$ |2 T, w2 h, P" D7 @0 e, _7 Z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 W8 ^/ R1 _; Y
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    4 ]# j/ c1 E' ?$ F
  625.         {4 X% f; g1 r( R: s2 L
  626.                 if(!GetMessage(&msg,NULL,0,0)): E5 O5 }) c% }  D# k# T: L  G) Y! ~
  627.                 {
    1 n- F( D* ^& o) z
  628.                         return;* ^# f; h$ t4 @; k
  629.                 }
    8 `0 Y* s$ x$ F/ L3 a% A$ V& F! f
  630.                 TranslateMessage(&msg);' @. |& [0 m/ _- q/ e3 ?$ y/ z
  631.                 DispatchMessage(&msg);8 {( X. F. D: s
  632.         }       
    ; H' C/ T# H& E4 h4 k+ _3 c
  633. }1 J. P3 J! [  z. x* l9 x( m# R5 N! S

  634. $ v- U9 ~1 M7 z% N/ j" }: O
  635. BOOL bFirstChar=TRUE;9 L) [. B5 O1 R5 v+ F; o7 ?
  636. 8 a- }% q( [. }+ d
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    " X' E6 Y; V, B& w! A% F# V- U1 G
  638. {
    2 Z* L; U7 V; ^
  639.         // TODO: Add your specialized code here and/or call the base class
    " E( s8 x$ J; e2 Y( `9 L
  640.   switch(dwProgramState)6 `8 H3 S1 m. D
  641.   {& O/ Q. m; x: n
  642.   case AP_NOTHING:
    ; L4 _8 b& w) b/ N
  643.     switch(dwStartUpSteps)
    6 G  n  d7 |: ^7 L5 S. z& k
  644.     {
    3 D( F8 r7 ~0 U9 L: e
  645.     case 1:
    0 K/ N' c. H5 X2 U' U
  646.       {: b& `% ?! Y" E- g! x
  647.         int i;
    + P# Q5 }9 F/ @4 s
  648.         CDC *pCDC=dlg->GetDC();# v6 h  W% x# g  g" S' t
  649.         HDC hdcwnd=pCDC->m_hDC;) z3 h: i( L! y/ B3 e$ h( Q
  650. //        Graphics graphics(hdcwnd);
    ' \$ R# O; k8 q* P5 O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");4 G) R' v" [+ v2 i; V
  652. //        INT iWidth=bitmap.GetWidth();
    % D+ J+ u& ]% Q, N; j* j  D+ z
  653. //        INT iHeight=bitmap.GetHeight();9 c# M5 H1 G! l% U2 d, {" F
  654. //        Color color,colorTemp;* M3 C0 i$ A( m+ o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ; X# _( j7 l' Z3 n
  656. //        {
    8 n* w- b8 W' b* v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ; _" C# K+ i) @. Z
  658. //          {1 \/ r# J5 R; E  c* _
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    3 E! ~4 z1 ^5 A6 Y3 f
  660. //            colorTemp.SetValue(color.MakeARGB(! g2 E4 f7 i: A8 v
  661. //              (BYTE)(255*iColumn/iWidth),
    8 H, K2 H0 ^) v1 |
  662. //              color.GetRed(),* a+ j# D" j# z' I, \( S
  663. //              color.GetGreen(),- `! t/ t3 k, `- n3 U
  664. //              color.GetBlue()));5 `6 j9 \( {4 |6 V0 H; o2 n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" N; d6 @4 X  K- Y- Y+ R
  666. //          }  x4 N" y4 {/ E4 g& ?
  667. //        }) t. g' [9 j! ~- W! s, _' x* S
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' f' ]& k  D& |( f/ ]( ]
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; }/ o- C. ~1 ?5 _4 q/ j$ \
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " g% o* a( T+ b# a$ f- L
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# [% y- H* W+ u( ?% X
  672.         for(i=0;i<240;i+=8)+ c" U) G. T) o/ q4 Q! x5 x
  673.         {
    $ o  r4 {; D+ p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " Q$ k6 x7 a' w- C2 d
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 L. f, T% w: e! Y- l/ v3 C0 d1 _
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    9 z6 \5 B3 W+ d. Z% R  o
  677.           Sleep(33);
    % t9 f6 v9 m* D. [# }. S( m
  678.         }
    $ V! M2 h$ A/ z) H. |! L
  679.         Sleep(1000);. ~& t9 O( Y+ p; i6 {
  680.         for(i=240;i>0;i-=8), Y) b% \0 H. V7 r2 Z8 d% j# B
  681.         {& r& D0 y  |+ d+ p; N% A" t4 }
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + M3 c9 P( f1 f! D- E( M1 G8 e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * D+ y* f! u( y% l& @
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, j6 u! U8 w4 L3 H
  685.           Sleep(33);% |: ?5 R6 k$ }  |! z# }4 V
  686.         }/ C, m: y, x; P* v
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & b/ ^# z" e6 c; W  \" ?# w7 ]8 T& t
  688.         dlg->ReleaseDC(pCDC);
    9 D' e" O0 a! N& Z5 v5 M5 N# l
  689.         DeleteDC(hdctar);. J7 ~: P, p  ]' a2 b1 v
  690.         DeleteDC(hdcsrc);
    0 O4 c2 V9 v, ~; l4 A
  691.         DeleteDC(hdcorg);
    3 U9 H& U3 M1 z: `
  692.       }9 y& ]$ B5 Z" g5 g4 d. E
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 q  B  S1 U3 A2 J2 m8 l
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 `. ]7 J+ R; J; @: [1 W( E
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' j8 Y- ]' b* j
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( g/ G( i$ G/ |
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" V$ {" V$ F9 G5 c
  698.       if(!Dn.Connected())
    1 n9 W8 h2 I! p9 b  `( Y! N* W8 _" {
  699.       {0 p* C* q, e$ Z$ u3 l
  700.         dwTotalFiles=1;
    5 w* X5 ?! d' B- F+ s+ p
  701.         dwDownLoaded=0;
    * H, F2 |5 Q- Z4 \5 P& u% C
  702.         bSilentStep=TRUE;! v/ z+ Q; I1 u- @: }" i2 k3 E
  703.         bCompressed=FALSE;. B8 |  [/ Z* B
  704.         strExtLocal.Empty();4 }( t$ x9 T  f: B2 M% C+ @$ q
  705.         strFullName="readme.txt";
    # K8 J# K4 L" z, D3 M1 e
  706.         dwProgramState=AP_CONNECT;0 l+ X, i) Q, a! f
  707.       }! f: `& f/ `. i2 O
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    & z; g% I# Q; s0 T: n: W
  709.       dwStartUpSteps=2;
    " N/ a; o+ i, c3 S+ }% N
  710.       break;
    ' \# h6 V0 z1 s5 t2 l' I
  711.     case 2:
    ( b) i* B9 Y3 p+ B
  712.       {
    % u4 D9 B0 L6 ?# ?2 Q
  713.         int iEOF;+ c/ _& J' |. w
  714.         FILE *fp;9 Z  a) Y) ~4 V0 U9 Q1 F# j5 c
  715.         char szString[512];
    & P$ J0 T, x( `5 ~
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & w+ h; K  Z3 }4 ]$ q9 k5 y5 {# U6 ~
  717.         if(fp)2 Q' {( w) V# q
  718.         {
    , ^; }0 Y) a! U: j5 U, P
  719.           do
    # `5 U% O" s5 p# k8 S" ?
  720.           {
    " F* `8 j4 d, C. @9 r# E
  721.             iEOF=fscanf(fp,"%s",szString);
    % s( N( p0 |1 L) l8 S
  722.             if(strlen(szString))
    3 @& M" c" t0 \3 D. m( W/ l7 ~
  723.             {
    ( ~+ h9 e4 d& f" W$ a) E9 t
  724.               if(bFirstChar)0 p, J5 P$ f3 |4 J9 _) b$ o5 L
  725.               {9 g# i9 `1 E1 J7 _  |- B
  726.                 bFirstChar=FALSE;
    . G0 A7 C& Z3 o" }9 p
  727.                 bConnectIsBig5=FALSE;+ u9 P5 }& Y# l9 h# o1 ~4 O# @
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( g& _, [6 u+ f. B
  729.               }
    ) U5 O, l+ |3 g) E4 }" w+ c3 ?
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    4 m) P* s. X5 ^4 }6 e5 ^9 s/ I
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));( U! A) r" V: h% R- p/ K3 m: K9 _
  732.               dlg->m_ListText.AddString(szString);
    + q9 _3 W' B) P: r0 T" R: `2 I$ i
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 ^; R. p# V. V# f% P5 F' Z
  734.               *szString=0;
    9 e. G. P4 }8 L  x; p% {0 G
  735.             }6 Y, G6 i8 [# o4 R
  736.           } while(iEOF!=EOF);8 }7 C4 t: O, r+ [- k
  737.           fclose(fp);) W& \: a9 `+ `' F3 ]5 u+ C& F
  738.           unlink(".\\DownLoad\\readme.txt");0 w. n4 @, {# e1 l
  739.           dwStartUpSteps=3;
    5 Y: o2 h8 ], v
  740.         }
    ( O3 S. |2 d( L, n$ Y$ [
  741.       }2 K4 q+ X) e2 k
  742.       break;
    ( [7 v5 k" a% K0 n4 J
  743.     case 3:
    - @/ x  v8 B7 y8 t5 N! j
  744.       if(!Dn.Connected())
    $ \0 d( }. I7 }5 q. O
  745.       {: i# E  j9 O" V$ i' @
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, l) Y- Y) q1 j* u. F7 S
  747.         dwTotalFiles=1;
    ' o, U7 f# u$ |, P0 d4 h
  748.         dwDownLoaded=0;# V$ b" S4 l  h9 r2 M
  749.         bSilentStep=TRUE;0 d3 Y6 ~) U, T$ `7 @' Y
  750.         bCompressed=FALSE;+ c! S: ~5 q! b6 T4 x) a# U! Y
  751.         strExtLocal.Empty();& i" P$ F* L' E- l& x" o- g
  752.         strFullName="checkversion.txt";
    ! ~& y4 y* z/ f* k
  753.         dwProgramState=AP_CONNECT;
    6 L- v: E, d( k3 Q& V# C* s9 K, k
  754.       }
    ( D' D: O+ H* A+ Y( j1 i' Z3 o! Y
  755.       dwStartUpSteps=4;0 t* ~, u) F! Q. I: y5 Y
  756.       break;
    * t. p' K) e( W. z- A+ j
  757.     case 4:
    2 [: _, F" ?. b) k
  758.       {
    $ _: C& S" u" L$ z% b0 \
  759.         FILE *fp;0 ?0 V* m* A$ P  n
  760.         char szString1[128];
    5 h$ B2 R) L* x3 B
  761.         char szString2[128];# c$ ^3 y" m0 G
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( \0 d5 z# m  a. P  K
  763.         if(fp)
    % U: B2 P8 E8 q! v+ U. K9 h
  764.         {8 x! ], n' C8 ~+ T- u- W
  765.           fscanf(fp,"%s",szString1);0 R8 S& F& E; s4 E. I% `( _# t
  766.           fclose(fp);" H; J1 B8 [% t
  767.           fCheckVersion=atof(szString1);
    6 r: D- B! Z# W
  768.           fp=fopen(".\\checkversion.dat","r");* z8 j5 k0 A; u" f: F
  769.           if(fp)3 l* O0 `$ U/ d' U& Q8 W- @5 _3 r
  770.           {
    + i+ ^5 u6 U, T
  771.             fscanf(fp,"%s",szString2);
    ) J$ n+ q6 D, h5 X
  772.             fclose(fp);( k' \( g4 }& g, |! y) T! Z; d9 e
  773.             if(atof(szString1)!=atof(szString2))
    * [& u: }' y7 u( ~9 t. O: K
  774.             {8 t' l' J6 d$ k! w* E0 h
  775.               if(!Dn.Connected())8 C& n9 T/ t; O/ @
  776.               {
    8 L* w( z; U1 G3 q4 c
  777.                 bFirstUpdate=TRUE;
    ! Z' @; ~$ z' c
  778.                 dwTotalFiles=1;
    : C; R1 `9 e3 i0 }+ C( d
  779.                 dwDownLoaded=0;
    ( y$ A" m+ x( Z1 D. _+ r
  780.                 bSilentStep=FALSE;" d% P( k3 x; I
  781.                 bCompressed=TRUE;1 i% E" [: \3 |6 U2 D8 `5 C8 y
  782.                 strExtLocal=".\\DownLoad\";. {3 F" j2 I/ K2 `) @. t, o
  783.                 strFullName="update.txt";
    9 `% u& o% G: N
  784.                 dwProgramState=AP_CONNECT;
    , E8 G! ~) {" S% W$ J
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* ~: D5 ]) d8 L& W
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ S  {% _6 a: O5 X# O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");+ U# n8 ^8 p+ [
  788. 0 S  D8 i% r3 C. U% B7 y6 F- E5 Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * v" X& {1 _. `- ^; Z; T" K7 i. H& o
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    8 S' ~" v3 d  l; _  L0 d) X  J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    8 d+ L4 y- O% F2 y; \
  792.                 {! ]" L' K0 A3 i3 R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");3 d: c: z0 O2 D$ t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");: O7 i5 N" \1 V( b& A% G4 A9 w3 W
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 ?+ I3 H0 A2 [6 j3 x" I
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 ~5 d) [4 S# \2 e1 b
  797. 2 a  _8 {! t) N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 M) I, ]# F9 I: @8 y3 M+ v' r7 _
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: A8 F5 z+ D$ l0 K
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: s5 K2 L/ M; _8 p3 }+ l7 |) X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% j, O. I- l% `; ^
  802.                 }/ p+ B( N. Z5 W$ s+ s
  803.                 dwStartUpSteps=5;
    4 {2 x  n; Z& w
  804.               }
    4 I( v6 D6 G; i/ |. @* h( s# J
  805.             }9 g8 M; h7 ~: y+ u; Y* g1 D9 w
  806.             else$ `2 d! g- ]/ ^* B1 ^* z  [
  807.             {
    6 \# B2 j7 y7 G2 y6 E3 D  d9 Z
  808.               unlink(".\\DownLoad\\checkversion.txt");
    4 W/ }" Q9 v3 R: ^  k( M% }: r
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");; |1 G$ s8 j4 @8 w
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, A( P; t' J! O) ?6 ^5 Q2 g9 k/ x
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    # b7 [8 [1 v  u

  812. & h3 K7 b  G* k: ^$ a* F" z
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      A) a8 e" H  V$ [9 H0 o
  814.               dwStartUpSteps=99;5 W2 Q* f; h8 I5 C& Z
  815.               bFinishUpdated=TRUE;
    : ^2 x6 X5 H2 L/ E. _9 ?$ Q0 z
  816.               bCanUpdate=TRUE;
    % l* X" p3 k2 F: [
  817.             }
    8 e: V; G1 x- Z3 y$ ?8 F! h
  818.           }
    / F3 Z9 V% l4 @5 }' H5 [
  819.           else
    / `- `2 ]# d) @! x" a& J: w
  820.           {
    " _3 _2 N# [1 v. Z- o( X, }8 t
  821.             if(!Dn.Connected())2 H8 `. a( Q8 H- n
  822.             {
    8 D0 T, d  D( `  j* T& u2 {
  823.               bFirstUpdate=TRUE;0 t4 e  H: S7 b2 r2 \' |
  824.               dwTotalFiles=1;0 S$ ?4 G+ c7 _
  825.               dwDownLoaded=0;
      C' ~. t  _/ ]" g( |2 J
  826.               bSilentStep=FALSE;* ~% e0 @7 i  R% f9 l) u3 ~
  827.               bCompressed=TRUE;
    ) ~( @0 E1 l4 h2 E* {: Q8 s
  828.               strExtLocal=".\\DownLoad\";
    ! {/ T4 e( h" C5 ?
  829.               strFullName="update.txt";) H& y) ]5 V2 s2 q1 [4 X
  830.               dwProgramState=AP_CONNECT;+ p8 g2 ~9 K! m" n8 n8 Q0 H
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& v& A! B1 D, n, Q7 h
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ s+ l9 Q# a% z9 e0 E
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 \6 U$ {! u# O. h) b# j, L
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 X" n& I8 o5 G& a9 U' q
  835.               unlink(".\\DownLoad\\checkversion.txt");+ A, Q, Q7 q( t) ?7 X& r! ~' v- h
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    & Z7 k5 T- c2 m
  837.               {
    6 @  r5 I/ R2 k) R
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");2 {# C7 `" d- s! `& ^2 C% z/ X
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");4 [9 R: R! I) \& I
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    : u8 R2 G0 _) ~' I9 O6 }
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " m  @" ?  r& y* h, K" a
  842.                 0 J, D/ j( R1 e5 B, t- K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 w* a; Z; I7 R$ u1 X" l2 e
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % Z4 I- O, X* V% Y( g9 T" m6 U
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");, F# k, w4 y4 J0 R
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 l' ?* A5 v0 @7 R! H" C1 V
  847.               }
    ( H% E  T0 F# o8 a" |7 S
  848.               dwStartUpSteps=5;
    ! [6 q( k' p5 ?# v/ D! A- q5 k
  849.             }: Q( e  R/ V# Q  N
  850.           }
    5 K9 e& ^+ [; `, d8 v
  851.         }
    7 p4 z* E0 b: U0 W* k) j6 U
  852.         else. @2 a' I. s; P6 c3 V9 d+ D1 n
  853.         {+ _5 H8 f6 v2 f3 i
  854.           dwStartUpSteps=3;
    8 i2 c- m9 G/ L) n
  855.         }
    3 i! V+ E1 i6 b$ _
  856.       }% a! N. k2 a5 L) I( n' b
  857.       break;" d* {' C  n" {- c  W
  858.     case 5:
    4 d8 d) E3 [6 p8 M2 J! o8 w4 V
  859.       {
    ; ?4 A$ V: c9 \# [; U8 H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    9 ~+ \+ e( n7 s& T+ L5 d
  861.         {
    $ Y2 v# }7 Z4 q% c0 _
  862.           int opt_overwrite=1;. |; V1 j/ U& B' _" e
  863.           int opt_do_extract_withoutpath=0;. Z6 R) I' k1 R$ |$ y1 }3 b/ R
  864.           unzFile uf=NULL;$ D1 u6 N! Q1 g' n' C4 X, ~1 W- \
  865. ) J/ R" n6 M6 B4 _5 R
  866.           uf=unzOpen("Wsa.zip");3 x! c$ @4 @" F8 \' Q0 X) X) h
  867.           if(uf)
    : r5 d" a8 p2 W0 R& U% j9 |0 b" ?
  868.           {  U) @) D" q/ i1 Q8 ?( G
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);( X7 E- [0 t9 j9 z5 S( U+ m  j
  870.             unzClose(uf);
    ; K% D) i! m' y. V& X6 \
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");6 S+ p! H3 G( g, q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");1 e4 h* b0 K# b8 ~% `
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    9 R( u" T7 |0 g0 s: k6 }. H0 Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 j0 C. x' u' v" A# o
  875.           }' W1 X1 o( ~6 e- N0 }
  876.           DeleteFile("Wsa.zip" );
    ' l4 E: Z  P2 K% e& k; k7 ~
  877.         }
    1 e, i0 G7 a. Z. n2 B# }

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

  R) K  w# x2 ?6 G
( D3 {. m  N; U6 z  V0 G

評分

參與人數 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-20 15:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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