找回密碼
 立即注册

CSUpdate.exe源代码

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

. w9 v6 a9 \& u/ m3 p
  1. / RevApp.cpp : Defines the class behaviors for the application.
      S+ Z( K6 R) C& X. F( [
  2. //
    # @( m% g: K  K  c
  3. ( m& M' Z. H3 U, y: ]
  4. #include "stdafx.h"
    1 ]5 \5 U. N! Y
  5. ' L' X; |* t& P% n, u1 ^! n
  6. //#define UNICODE7 B. C, V/ E/ x' A: H
  7. //#include <gdiplus.h>
    $ v: }% _" j  T/ N( ^6 X
  8. //using namespace Gdiplus;! D3 F+ k" s4 [5 f  _5 Y

  9. & o0 |2 i6 D( G# i  ~; O9 ]$ G; b
  10. #include "RevApp.h"2 }. M! c: }" N( B% P
  11. #include "RevAppDlg.h"
    8 L0 h( q+ f5 Y! Q

  12. , I. @! F: F  u7 y! H+ _1 r
  13. #pragma warning(disable:4786)9 ~# R) |& o3 E% ~& w- e. Z0 ~
  14. #include <map>
    & d% U5 `. t6 v* y
  15. #include <list>  M* m1 s+ z( f; L/ H7 ~% {
  16. #include <direct.h>
    ; t+ K( N, U5 j2 r

  17. 5 G; P( q; v# Z: @; w
  18. #ifdef _DEBUG
    3 _! t# f" _5 Z- V
  19. #define new DEBUG_NEW
    ! A' d( g' z2 `' A; K1 H' ?
  20. #undef THIS_FILE/ I! C/ T# N( m3 H8 _! x
  21. static char THIS_FILE[] = __FILE__;
    8 K2 L0 C, E) q1 J  C7 s, f
  22. #endif
    + ]6 E% Z# a; Z' C. i
  23. #include "SkinResDef.h"
    6 J3 x. s  H6 C* d9 Q" b) O
  24. #include "ChangeBG.h"9 |! M% w' |) u1 P* i) A
  25. #include "AFXINET.H"& D, c: o+ k6 W% n

  26. - n- F/ M- T8 H8 @. S3 ?9 t
  27. #define TRADITIONAL_CHINESE 0
    8 v3 H, c$ z) v. v
  28. #define SIMPLIFY_CHINESE 15 n6 O; ^2 [: o7 S1 e/ v; L5 M) k
  29. #define ENGLISH 2
    * ~! Y, t4 H; p: J1 r8 a- |: _
  30. int m_iLanguage = ENGLISH;) E% \& ^# o3 F
  31. /////////////////////////////////////////////////////////////////////////////8 H3 T( h+ F+ s6 J) {" S
  32. // CRevAppApp2 b' `# }' E% O( S/ O. V7 X* Z$ j
  33. 2 ]2 W) K6 G+ n- k* w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    7 t8 [& U7 I" O4 V
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % M6 F) x1 P4 |5 g0 y, b$ e- D
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.* [3 V2 V! P) ?+ k% _1 m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ( k* C, D5 ^# t
  38.         //}}AFX_MSG
    8 A, b1 @8 Z$ o' o) r
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 L5 J: L" z7 L& I1 y0 m
  40. END_MESSAGE_MAP()5 M5 H5 c) [$ g2 j. A' H

  41. 2 _  V0 I) r7 g
  42. /////////////////////////////////////////////////////////////////////////////  x, {3 B) e0 C1 j% b2 n$ O- B
  43. // CRevAppApp construction
    5 v5 v" ?0 ~) v+ q$ x

  44. - l: W+ z# x& W- l5 Y
  45. CRevAppApp::CRevAppApp()
    : v) A0 P9 G! }2 c( \' ]( X4 W
  46. {
    $ D; w, y  y/ h- U
  47.         // TODO: add construction code here,
    6 f% l+ A% i4 w! l
  48.         // Place all significant initialization in InitInstance
    6 v( v( S& e9 V: P$ L
  49.   bDisplayIsBig5=FALSE;
    , u' l$ ~5 ^9 M+ K
  50.   bRestartUpdater=FALSE;
    : o/ p2 D  s4 ?5 e; x
  51.   bFinishUpdated=FALSE;
    ; a0 d: Q5 ^. [+ ^4 _* F- |0 G+ S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;8 i: @# I. R8 F1 j
  53.   InitChangeDataBig52GBKS();
    . |) e: f0 Z; M0 `# h5 k/ h  o
  54.   InitChangeDataGBKS2Big5();
    & y, Y* [/ u+ I" M$ i8 ~. s
  55.         //
    8 [+ q& \' ~) ]! x0 ^- ^! t8 A
  56.         bClickRunExe = FALSE;  M9 ]- e- ^* y, A9 q5 m/ o
  57.         //
    + E2 E# @- e9 A& f
  58. }
    & _7 L8 n" x' ~. M

  59. % o# E  _: S! b4 C; N
  60. CRevAppApp::~CRevAppApp()
    9 Y2 ?' p5 N8 K8 q
  61. {
      o7 `/ G2 X! G
  62.         // TODO: add construction code here,! A; [% x/ p/ c/ b9 A2 |  S
  63.         // Place all significant initialization in InitInstance
    9 z3 U" }( _# F- h
  64.   EndChangeData();
    8 R! X  v7 P1 b' {$ l
  65. }4 @$ t$ j% d1 a, t, a

  66. # ~. \) ^. [* J. X$ B  l! F6 @
  67. /////////////////////////////////////////////////////////////////////////////1 H- r5 ~  `- ?- u' v
  68. // The one and only CRevAppApp object
    4 p  l; J" H* d  B& V0 V

  69. . t  w" F' `* S; Z+ U( q
  70. CRevAppApp theApp;
    # M% T! d& w5 z, F6 i* A
  71. ! Q4 {" E! b' K2 l( Q' L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    & c4 _# c! }$ R2 w- R
  73. {: N$ d9 n1 G) _1 I# B
  74.   int iEOF=0;
    % t- A% u$ [2 M4 q8 w4 }5 K
  75.   char szTempName[MAX_PATH];
    " E  [" m0 K, w# M5 y
  76.   *szFileName=0;
    6 X4 K% U4 m$ H- D
  77.   iEOF=fscanf(fp,"%s",szTempName);. a, G% [0 ]" i$ `* m! n
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 @8 x2 F) {6 W) N
  79.   {
    ! h$ M" z9 f8 T( S5 e. B' [, D% y! U
  80.     strcpy(szFileName,&szTempName[1]);
    1 _* J. j; S5 r3 [4 V
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 J7 {( Q( M( L# C9 l3 Z, m
  82.     {
    : a; v  n8 O; b" o: R( W7 W' k
  83.       iEOF=fscanf(fp,"%s",szTempName);2 s- H, ~( |( f4 ~; K/ o
  84.       strcat(szFileName," ");* C& R4 M# L. C* A9 q- I/ l0 c
  85.       strcat(szFileName,szTempName);) l' @* o# Z, h* r+ j
  86.     }1 a: c4 C. V& I9 c
  87.     if(strlen(szFileName)>=1)% T" O) O* [3 F( n
  88.     {
    " [: X5 t7 C3 I% }. z, L0 w
  89.       szFileName[strlen(szFileName)-1]=0;1 ^9 N& b& U. M. T, h9 @4 a4 `
  90.     }
    0 E" Q& B. q5 K; @
  91.   }
    & l! J* f  L! Q  s% I% M% E
  92.   return szFileName;
    % C3 e) _! a/ ~) s. ^
  93. }  ?& p/ n$ D$ t+ A8 {7 d$ F

  94. 9 d, L2 n  u1 v. i, t# C% T
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' p/ X. [) a+ w* G/ |3 g
  96. {
    - A0 l7 E: r$ I  X, Y
  97.   FILE *fp;
    : m- S% z% Y0 k1 X3 [* Y* Q9 C
  98.   char *key=NULL;
    1 K* f% t6 i- v9 G4 w
  99.   char version[MAX_PATH];
    / U, t# Q0 v; U* A. V3 H7 a* v
  100.   LPUPDATEFILE file,olds;
    . @; o! \5 M+ _* d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , I4 r4 [3 a! Q/ Y& Y+ O

  102. " i2 e  p' u8 o7 u0 X/ E
  103.   UpdateList.clear();
    . C* P( T* B% K# m2 e' R
  104.   UpdateFile.clear();
    ! @: k- N8 t  ^+ J) W+ P
  105.   if(GetFileAttributes(filename)==-1) return false;
    5 q/ }7 n! O" x1 x
  106.   if(!(fp=fopen(filename,"r"))) return false;* R* @) K% N4 V& U  o7 h) d5 C' V+ b
  107.   fscanf(fp,"%s",version);  E4 l* Z! a) W: d5 d) D: y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 t, m2 W1 G" c
  109.   while(fscanf(fp,"%s",version)!=EOF)5 c$ d; z& K0 L+ q6 G: J5 E7 s
  110.   {" W+ n/ m. b9 _! O7 }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      z% P5 v- X/ u3 e1 A+ S
  112.     fscanf(fp,"%s",file->path);
    ( r) X$ [5 U2 p  {
  113.     ReadFileNames(fp,file->file);
      f( y/ e/ y7 |+ S- B
  114.     strcpy(file->full,".");
    1 G( ?1 O1 L" C
  115.     strcat(file->full,file->path);4 J5 T+ v3 Q! H  {4 f
  116.     strcat(file->full,file->file);& _2 k! i: A9 R- v* J: _- Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ @+ o% a1 v) A. s+ T: x* K
  118.     {/ h+ X8 V7 ]& T6 A, Q
  119.       file->vers=(float)atof(version);  v& P# w" i7 |: \1 H
  120.       UpdateList.push_back(file->full);
    . ]& X8 X5 f: r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));5 p2 s7 R3 [2 i0 N
  122.     }
    ( O: Y, u# T6 h% \  S- K9 `
  123.     else) E& \& Y" @9 `- d( _
  124.     {
    % H0 t- A( H& @: I% S; W
  125.       olds=(*p).second;
    # D! A  h5 u7 u0 Q
  126.       if(olds->vers<(float)atof(version))
    , H" e( Y" m. G+ I) b. [* B
  127.       {3 @, s! ^0 t- e! }8 J9 P
  128.         olds->vers=(float)atof(version);* o: y; @* `) t0 G, f
  129.       }
    9 v' w; D& ]3 ], E% \; d) u
  130.       free(file);
    2 u% v" M5 U  g
  131.     }
    " D. a& a9 a. S  k
  132.   }# y; o0 O$ j) N6 ?3 @
  133.   fclose(fp);, m; F3 u5 W' i! N$ P, }
  134.   return true;; A# m9 ^9 F. P; E% @
  135. }
      ~& D0 N8 h" i4 M) O% K: v/ [

  136. # n  t3 V/ H3 N  U8 W: p
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)( o/ B# Z) Q7 r2 V; m
  138. {
    7 k6 {+ k! B- u3 ~+ M$ [
  139.   TCHAR  szFull[MAX_PATH];
    0 X% e% K. x  c3 f6 g4 ~
  140.   TCHAR *token,*inter;
    . b# a* w, j% S) ^
  141.   *szPath=0;3 d3 @8 D2 v& E5 r3 }" y& C3 @' e
  142.   strcpy(szFull,szFullPath);; P" K+ `7 T+ t/ H4 H5 f  x
  143.   token=strtok(szFull,"\\/");4 V  H- I! I6 `. J* l$ h
  144.   inter=token;/ W9 P, v* _9 D* y9 Q
  145.   while(token=strtok(NULL,"\\/"))0 x+ s$ }# J4 Z( i$ y
  146.   {/ {1 _+ a9 {; c. g% s) [2 a/ f2 ~
  147.     strcat(szPath,inter);
    " D: o/ X( _! F. j  z" c
  148.     strcat(szPath,"\");
    ; a. b8 T# m- |' m
  149.     inter=token;" h2 A. ], N$ h3 F4 q9 C
  150.   }# A3 X' T9 U/ j% Q
  151.   return strlen(szPath);
    & J) k5 V( m3 \, n( g6 \- V5 B
  152. }
    , X( q( n0 X: d/ W
  153. ( Y0 r/ K  i0 ?% P- _: v
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)2 H' L, G  N7 M9 J
  155. {
    2 y* p2 M* u3 N) G# G! [
  156.   DWORD attrib=GetFileAttributes(Target);* \% E7 w6 h2 j" [" w
  157.   if(attrib!=-1)4 M, M% n9 H' K' Z8 b3 E
  158.   {  V2 i& ~5 Q# ]3 F9 Y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ! i3 f6 l! e6 g. |
  160.     {( K& }( v) {+ r! V, a. a6 P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : S0 M' V6 d. B$ ?* h+ l+ [4 c
  162.       SetFileAttributes(Target,attrib);
    ( V- I  q" H) k  }) m
  163.     }
    - |) P" e% g8 k: Q( ^  t: u
  164.   }; C( p( a  z. K+ C4 b) v
  165.   CopyFile(Source,Target,Erase);8 F) J4 ]# T6 b% j4 c
  166. }
    ! `+ u; h$ h5 C$ R

  167. + C2 Y! M1 v$ \' A: \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" n: f  H, i- d  Q4 @
  169. {
    ! {2 k4 K- ?1 {1 y
  170.      FILE *fp;4 w# W" A% M' w% ^+ [. _
  171.      char  szBuffer[8192];& o: {" g! B1 t$ [
  172.   va_list  argptr;1 ]; J' c) v$ p7 A8 ?

  173. 8 E& Q9 ?0 v+ N/ U$ }, v  f) l$ V
  174.         va_start(argptr,message);/ z2 c, H, t) W* m0 _' R; F
  175.         vsprintf(szBuffer,message,argptr);5 f( E* t8 n1 p: L9 T3 Z: _
  176.         va_end(argptr);* ^% ?. S1 A; l# e# N: U
  177.   fp=fopen(FileName,"a");
    2 C$ s8 `$ c  ~/ ]  _
  178.   if(fp)
    9 m* x2 K$ y: o) U- N% w: h
  179.   {
    ' Y# O: S9 ]/ {7 c5 W
  180.     fprintf(fp,szBuffer);
    + V3 T4 T$ j7 c$ U- H
  181.     fclose(fp);3 y. Y0 d2 J1 B7 N1 _7 M# |4 y/ X% T
  182.           _flushall();( T! x- q& J* y( X( T( Y! m9 f1 n
  183.   }
    6 R2 \# A  R. b' `" Z- N% X
  184. }
    $ J- G2 m; v- n/ ^7 `# j

  185.   d' Y" A1 l5 `9 ^9 t0 W
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 H7 k' c+ ^& H& R$ J  W  I
  187. {
    2 y! F2 [+ \, J( S
  188.      FILE *fp;2 F* P* c& c! ^" C
  189.     DWORD  attrib;2 p$ b) B- ~% S5 m3 n
  190.   attrib=GetFileAttributes(FileName);
    0 g: J& C& z& a0 d- T3 j* C/ T
  191.   if(attrib!=-1)
    - Y# m; l, Y$ c0 F
  192.   {0 R) }( ~0 V9 S! o0 n2 O* Q
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( X- a# u& c8 S9 d5 y$ z
  194.     if(!SetFileAttributes(FileName,attrib))
    * e9 K$ R# w$ F$ s! F9 S
  195.     {& O6 [  o3 C1 C, g9 i, K
  196.       return FALSE;
    5 ?' V* U' n4 O8 |( H
  197.     }3 Z0 \  G# [8 W4 F  I/ Q
  198.   }
    " U/ ?) q! U* f1 Y% M
  199.   fp=fopen(FileName,"wb");" n% ]1 k4 u# q+ `
  200.   if(fp)
    1 x$ O; D! u* c0 ^; X$ t( s
  201.   {
    - G8 k( t5 ~" }, [2 G, I2 c/ c" d
  202.     fclose(fp);$ e+ v4 b/ |8 H' v* \8 h5 t, k
  203.   }
    % R' J4 c; R; `# |: {
  204.   return TRUE;
    % A, _, C7 I1 P
  205. }
    1 C4 s# e# C- v! v+ M

  206. 0 I, U; r6 J4 Y' o6 I. v
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    5 }0 o% O. V. A
  208. {
    : w/ W, t- F" f! ~. `; C/ ~4 f
  209.   char filename[MAX_PATH];, |$ t$ T& `3 t+ y/ ~7 N
  210.   LPUPDATEFILE file,olds;. @. s  @- l! r& t- x/ d
  211.   std::map<int,CString>::iterator i;
    4 e7 W9 o, y3 a3 V# w
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    # C0 Y: E2 k- S* s4 t0 s
  213.   std::list<CString>::iterator l;# G! k; F8 r" \9 q" D- V; t8 I# D

  214. " P  J5 W: q& y. a! d5 B2 c/ u
  215.   if(bFirstUpdate)+ [: a% x0 T& s3 M& j+ h
  216.   {
    1 p; w9 Q* X- S& j$ u
  217.     dwCurrFile=0;1 B" F5 [7 E, u
  218.     bFirstUpdate=FALSE;# Q2 ^/ y' [( X0 ], ]1 J) p/ s/ v  z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ( m' b& ~; q- i$ e
  220.     {3 g) R$ x3 [% U$ N( }2 r% D/ `9 q
  221.       dwTotalFiles=UpdateLocal.size();7 C7 ^* y- v/ y
  222.       dwDownLoaded=0;
    2 Y% Q" k% N- |2 O
  223.       bSilentStep=FALSE;
    + H1 b  M) e7 o+ V1 O$ F
  224.       bCompressed=TRUE;& d- n: Q0 ?! J' N0 c, I% V4 s; |( i
  225.       strExtLocal.Empty();
    0 H$ C4 ]; v# |* n! V& P
  226.       strFullName=(*i).second;, ~$ J# H# ]0 x; U+ e9 H. ?+ c
  227.       dwProgramState=AP_CONNECT;
    : d& [% ~: z+ E9 z9 G7 }: R7 r  m
  228.       return TRUE;: q$ b# k% d0 B
  229.     }
    & V" ?" R6 d6 w  O1 v
  230.   }
    9 `3 J1 ?! ~! s% C/ O
  231.   else if(bRestartUpdater==FALSE)
    4 R; o0 @- I& Z0 o! i" k# ~
  232.   {
    # b4 v2 m& Z* c$ j1 [3 |# b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    $ G, d. W# h! T+ u& t& Q2 A  G5 t
  234.     {6 ~  i4 y, p9 E+ @2 ]/ q
  235.       file=(*p).second;3 D& L6 ^' E# X- B# u- `4 S! P1 z5 W& ]3 m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ |5 }# m! w* s% H% Z
  237.       {/ l$ [1 G6 {6 }; m0 @5 q7 \( E
  238.         olds=(*p).second;) C$ g6 e! o5 w, ^% i- g
  239.         olds->vers=file->vers;
    . ^* m: Q6 T! i3 ~# g8 U  {
  240.       }; l. w+ T: @5 Q* {5 L9 I+ [6 S
  241.       else
    7 {/ O) K+ k# i' A
  242.       {$ [0 H1 W3 V8 }4 i  g8 r& S2 G4 K
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 P/ K$ w. u) Y  w/ Y( G" L$ x
  244.         memcpy(olds,file,sizeof(UPDATEFILE));& Y7 T3 ^- U3 t/ \6 E4 p9 a; b
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    7 t( B$ M0 y' u% p9 w
  246.       }
    # |6 j% m  d8 W4 t( e; J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # }& i0 L# D" n& ]$ j/ U- G1 a
  248.       sprintf(filename,"(%s)",file->file);3 {# E6 i; ]5 u. j  a4 A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 v* I9 {4 N# l% G
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    , K  {9 {! s$ x% j$ c' w! [5 b
  251.     }& T: a4 [/ r- }5 q8 U% v% \
  252.     dwCurrFile++;0 {* T: L) L: ?' n7 o+ A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " b& l  q: a% N! u7 q  [- n
  254.     {
    ! n! ]7 S: Y. Z* r% @
  255.       bSilentStep=FALSE;4 f" @0 ]5 f/ ?$ u
  256.       bCompressed=TRUE;5 z$ \- X6 x$ e1 o0 i9 d3 {2 J& s0 `
  257.       strExtLocal.Empty();
    . c; X! C; V, \; W; ?' d
  258.       strFullName=(*i).second;8 Z; w3 ?% f2 W3 U/ p
  259.       dwProgramState=AP_CONNECT;
    # h5 j# X6 T' W- Q1 @
  260.       return TRUE;
    6 [* s& }3 O( B2 |/ }% I; ]& I" C; Z
  261.     }: |9 x5 z$ P4 N8 i
  262.     if(!bRestartUpdater)  A" q* E0 j# V0 E" E' `
  263.     {$ b' {6 H1 T8 o" \
  264.       int iCurrSize,iFileSize;. X8 ^3 o" s+ r
  265.       iCurrSize=0;# r$ U7 z, e* Q! q4 r
  266.       iFileSize=UpdateList2.size();1 o/ ]2 [7 |" k; `$ [( ^. v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: J4 V6 @5 T4 m2 ^. o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    6 G9 t6 Y& K$ E( T" y9 s/ t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    , I4 J" a, [) }9 k+ c/ k0 a. |# V7 z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) ]1 g$ C2 E8 T
  271.       Fclearf(".\\update.dat");
    4 k& g5 u4 I. B& g  p5 t; d; ]
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 |3 l; T! R! z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)$ i% o+ D2 b2 t; h$ c5 l* s+ g
  274.       {
    ( J/ q  X* j* [' Y3 p4 N
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    : p! t/ ]; d: h) B, G
  276.         {
    + q2 s2 x9 G* y0 t% m  k: k8 u
  277.           file=(*p).second;
    3 G9 p& n% Q; ]3 G/ B4 w5 H
  278.           sprintf(filename,"(%s)",file->file);6 p: M0 G, v' O! k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : `' K3 }2 b8 Z% C5 b2 v' ~: b- f2 w
  280.           iCurrSize++;
    " B, _6 M! f$ I/ S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    $ X0 }* G$ t4 Q9 d
  282.         }
    & P( f. A  o! o1 E
  283.       }
    & @! C& V+ w6 w
  284.       unlink(".\\update.txt");
    ) Z" J8 `" g9 V4 K) ^* i4 Z
  285.       unlink(".\\update.tmp");. u. ]9 t+ Q- {# b
  286.       Fclearf(".\\checkversion.dat");
    6 S- `; w5 K7 e& E# g+ _- @) w; z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    " P1 A; O- c( K. t
  288.       if(UpdateLocal.size())
    + t0 M  `* d5 a8 E
  289.       {
    $ D7 J3 R7 h( M
  290.         UpdateLocal.clear();
    : `- N; i) t9 G. i9 R' i6 A
  291.       }
    8 I7 b" S$ }& _* f* o' S( T2 n: x5 ]
  292.       if(UpdateFile3.size())
    4 Z, z( ~. S3 p% U! j! S! W5 ]# e$ o
  293.       {
    ) n8 W, u% ^; K) m' d9 n
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)* a" Q4 J4 c1 E( r8 G
  295.         {1 Q1 X' v& F* R
  296.           file=(*p).second;2 L" L( |3 `8 u: H( s% T6 V
  297.           free(file);
    7 u) e: k7 n7 @7 I" Z
  298.         }
    4 v4 m6 c5 f% w6 i
  299.         UpdateFile3.clear();
    4 e# z3 Y3 _. _& a+ S/ s! f& d1 |
  300.         UpdateList3.clear();0 ]4 J# C& C+ h2 r. V. H' w
  301.       }! n& s* Y4 y3 A- s
  302.       if(UpdateFile2.size())
    # u: ~9 j' y) x
  303.       {
    ; r; _) n+ }; n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    3 P- @6 s+ C/ i3 S, i
  305.         {
    # {# z; Y' s  v
  306.           file=(*p).second;" h; I" V) \. W  g
  307.           free(file);
    ' o: C8 s6 r9 M' U, z
  308.         }
    $ i2 i1 o6 i/ t
  309.         UpdateFile2.clear();" ?$ m: Y5 O! S$ H
  310.         UpdateList2.clear();
    : X. ]( e8 i- U8 |% ?5 y& f
  311.       }1 T8 P- F3 A& g& f7 Y6 b
  312.       if(UpdateFile1.size())7 j5 j+ s) E. ^- w9 v8 R
  313.       {
    ( V: Q, C! u2 `) j" J8 Y( _! s
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! T& V$ M4 |+ G, e: [
  315.         {
    4 m6 `+ a( l! t, O2 b- H, G
  316.           file=(*p).second;
    5 |& N* ^" o9 i3 p, C+ X% G* P1 |
  317.           free(file);: u( m) a' g8 E# q% ?
  318.         }
    4 O5 @4 p! Y  F& s( |6 @( e
  319.         UpdateFile1.clear();
    ! V" [4 S  M0 x3 d9 F0 e+ m
  320.         UpdateList1.clear();0 G. u8 J" A8 p  r+ h& s
  321.       }, Y" W; Z. e& u& |4 ?* d& R# k: i6 O
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; |% G3 ^# W: B5 b7 i
  323.     }! b5 I/ V! X; v# \" p- `6 Z& Y* ]/ `
  324.   }/ \! p/ F' j& n# K1 P
  325.   return FALSE;
    5 S5 c+ y5 i8 D3 l
  326. }! N6 a* Y7 ]7 q2 x0 F. U4 @
  327. 9 Z9 W" Z, j* t5 Q& f: H
  328. void CRevAppApp::ClearAll(void)0 [. f( T) Z8 l3 h- W) h, b8 v
  329. {
    # _: s( w; ]. [5 h6 d, e/ y- P
  330.   LPUPDATEFILE file;
      j+ Z/ a! ]6 F- v5 y, ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;& W1 n" o3 a1 S
  332. * `* T4 G. G" t% ~% f$ E' I
  333.   if(UpdateLocal.size())
      ~7 j8 R, u( {! M' [2 Y
  334.   {
    ' J) P+ B, W5 ~% c7 A4 h* W
  335.     UpdateLocal.clear();
    & y# f: _0 T  t4 v% Y* y
  336.   }( Z7 ~) ]4 y# s5 ]
  337.   if(UpdateFile3.size())
    + Y, N2 s( C: Q- ?/ J, j
  338.   {
    9 w4 t) |2 l% k; x
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)0 C; K3 L( T5 ~, J, ]- e( N" C- y
  340.     {- ^; H( R$ X: Z0 E# `6 D) b
  341.       file=(*p).second;9 o  M, {) O1 }5 w0 T- Y
  342.       free(file);
    . N8 \' c8 k3 h
  343.     }
    8 C4 L& x/ ]2 _7 T
  344.     UpdateFile3.clear();& v- z* w% s- E4 m
  345.     UpdateList3.clear();
    0 ]7 v& g) L. P, H. ]. `
  346.   }
    $ ~/ L$ [$ ]* S- a/ b
  347.   if(UpdateFile2.size()), {3 b$ r7 k1 z8 e
  348.   {
    * c* S; Z6 o9 o" j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* o0 f/ W5 x6 W" v5 Z5 t
  350.     {/ a" }% G! L1 |: ?/ z$ A' `" V
  351.       file=(*p).second;5 c* q; `8 O% K) ?7 L' m( P7 T
  352.       free(file);$ S7 h: ]  ]8 G
  353.     }) J, Y+ Z; D  T" K' i7 o7 j
  354.     UpdateFile2.clear();, t7 `, T* {: S( u% X7 Z7 W! W
  355.     UpdateList2.clear();5 o& c* H. ?9 M$ Z1 w% Z8 f/ H
  356.   }
      S/ U" g7 h, Z
  357.   if(UpdateFile1.size()): @( \: |% h9 j' ?) H2 l  {
  358.   {
    8 a8 Q& q0 m% ]+ k& g/ _  F
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      J5 W+ h; }( K7 ~/ C
  360.     {
    7 C+ G9 g2 a: e, c, q
  361.       file=(*p).second;$ k5 s0 \: M+ K! U  x
  362.       free(file);: n& l% K! F7 K- H# t$ V4 Q  U
  363.     }# }6 r! z5 Q% f% V) w
  364.     UpdateFile1.clear();8 R6 [7 k! E  X, r( [$ r
  365.     UpdateList1.clear();# r/ M* ]" M6 w, a; g3 w- C
  366.   }" _  r9 n% Z: j- p/ ~5 u
  367. }  
    1 {& j) x) i: O; v0 S6 n& Q. n! D6 ~
  368.   
    ( E: t. a1 a7 A$ T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ; H( S$ ~/ M1 |; @8 a* A' H
  370. {# C0 B& W0 H1 E/ y3 D, T: K
  371.   int c;) T- i# _- V4 D7 V% _  \
  372.   LPUPDATEFILE file1,file2;
    ; c* z1 V9 _# ?, k# ]* d
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& K+ j" x  n( v5 n3 i
  374.   std::list<CString>::iterator l;% n* X2 o1 J& w1 o9 a6 w# f

  375. 7 ]3 s* W. o9 u& X* k4 F, d
  376.   UpdateLocal.clear();
    , u# N+ l2 h4 o& |8 h$ U/ D6 K  J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . F$ D0 X4 `2 V$ l: r) g0 j
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + w0 F( }, @8 I( |  k4 g& d3 x
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ! I/ Y" J5 P' K
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);6 w8 `, Z, r& u3 R. [7 m" C* A
  381.   if(UpdateFile3.size())! h- @/ E0 c" i1 ?
  382.   {  X0 C( B& F! b# T9 D
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++), ?" ~+ Y2 b! J4 r
  384.     {' B( {# V7 X- S1 l4 [
  385.       file2=(LPUPDATEFILE)(*i).second;
    ' ~4 }& ~* T* `: [8 U
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    5 x5 S0 m- [# N$ W% [
  387.       {
    : ~2 ^( R; X7 ?2 {
  388.         file1=(LPUPDATEFILE)(*p).second;: b" f: x8 z% C- S
  389.         file1->vers=file2->vers;" u( L; l5 f; R+ @  m
  390.       }
    - J4 y$ f0 S3 O( I" K
  391.       else
    7 _) p/ @+ v& X3 s% e
  392.       {
    7 H2 i4 H$ P+ R% B9 K; y' t% n4 @
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: F; a- u4 e7 S; p5 Q$ _
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    , ]: B. p# _" p/ b' c" e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 u) V8 l: E7 A) g
  396.       }
    6 a! `3 L  Y. o! }% z
  397.     }2 o; l  f# u7 a0 `5 a- G! `! |
  398.   }
    # I' {$ R) o3 T- E/ `% T
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)7 `& m; ?: z. a- P
  400.   {2 q% ?, {" h2 b  S; {7 e  n
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())% n1 S5 [1 x+ P& B% {% V% k- r' l' N
  402.     {
    * M& p; ?! ]# o8 i9 ]8 E
  403.       file2=(LPUPDATEFILE)(*i).second;; H2 g7 H; R$ s) T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " Q6 x8 u4 x" |+ x$ u8 F0 K
  405.       {
    6 ]0 W/ q7 [" l# J5 E! c' M
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ b* L3 T% Y) W6 q
  407.         if(file1->vers!=file2->vers)! W) z$ A! G5 z  \4 w
  408.         {
    ! [9 i9 f% b( e, y" X4 |9 Z" m
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 b. Z9 J% y" @* y) e
  410.           c++;
    & R( p! X  n( g9 ~9 O
  411.         }3 b, S1 m- J7 p  g
  412.       }
    ' j4 f% q; `& x9 }" F
  413.       else# R" S3 K4 t7 p  M! ?. I; u
  414.       {
    9 P7 Q* [; F. j; M# l
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. ~$ H3 }6 K7 B$ z, L. F
  416.         c++;- K; H5 m# u, b3 F1 |
  417.       }9 F* ]! D3 x2 X. p
  418.     }, ?) V7 a- u4 W: l: u1 f
  419.   }
    9 X# @7 n( K/ @( M! `; b
  420.   unlink(".\\DownLoad\\update.txt");+ r$ O$ L. v3 x0 l2 f
  421.   if(UpdateLocal.size()) return TRUE;
    ( W" J1 d/ ]1 y1 ~- d6 {8 i
  422.   else                   return FALSE;  c5 k: |9 u; f: v6 L9 Y9 j7 a
  423. }% ^1 ?, g% |2 v+ b

  424. ) B# Q7 t9 ]  d3 {$ g' N9 i
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      v8 e' l0 a4 r6 y9 G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"; j% ~( o) y% r

  427. + J* O, ^: R2 c  U+ Z

  428. % g" L6 W/ l$ W3 n
  429. - G$ n8 \' c, X% S9 V( p
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 n& m6 v3 c' f- v/ M# w
  431. {% p+ `, c/ w( P: {1 E0 C2 i
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;( q, X- L. d7 E$ h  @/ _
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); `+ j4 q6 D% A3 M- _
  434.   {
    # C% A7 O# a9 I9 y* n
  435.     char szLanguage[50];# q3 O, i/ f6 h9 G
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 d% }7 h: b5 u4 O: G5 y9 A9 R1 N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 [$ `8 J; J$ v) I
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & O$ i. B' W1 @: q9 K% N- T
  439.     else                                   m_iLanguage=ENGLISH;+ B5 ~9 D# P' Y+ w7 G4 R4 z; ~0 A: x
  440.     char szRegister[100];, E2 e7 _' O1 J( g$ m% x7 \5 h# ]
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 R$ @0 F; ~7 G+ F
  442.     strRegsName=szRegister;
    * H) ^' j3 C, s
  443.     char szPatchURL[100];
    7 r( T; |; Z3 @% R
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # W( }/ ^- L. a+ D+ H& `, Y. ?
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# r9 d# X! W; k. h1 L0 u  x6 J1 @3 Y
  446.   }
      y4 ]& {+ F8 [3 a' ]
  447.   else
    : B( a: F# s/ }4 K
  448.   {! K) S: m5 g+ Q6 K! t
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & ~, ]- [5 w( ?; K6 ]! s6 V  P' x5 Z( ^
  450.     strRegsName=DEFAULT_REG_URL;+ E" |& d' i8 v' A; l& P) r, m
  451.   }' A( A1 q2 l1 C+ P4 T( u
  452.   if(GetFileAttributes("hosts.ini")!=-1)/ K2 s4 t, U7 k$ M# v6 B* r6 j
  453.   {
    + m% R2 N2 t3 d4 U7 j; z! G
  454.     char szIP[50];
    - W) N8 u0 Y' C' {: a2 u7 L$ S: B
  455.     char szDIR[300];
    ! ^  l3 ?" S- c0 P7 r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))% s, X0 i/ q* F" W9 S/ l
  457.     {$ N3 c4 T6 D- ?
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");5 f! C2 W: {" Y/ i0 F
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! j* J' i/ ~8 @5 m& _6 o* z
  460.       strHostName=szIP;) ?, x9 _) G& [7 m, }
  461.       strHostPath.Format("/%s",szDIR);
    5 z/ l( j1 B7 U+ r( T3 e. A
  462.     }
    9 x2 U9 M$ Q+ _- y! v* \
  463.     else4 f! ^  L" D! I# I/ w
  464.     {6 @% g7 K" N: E8 c1 D- u# n
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # {5 p% e0 p3 x0 e8 \
  466.       {  V: w+ [& `0 U
  467.         char szLanguage[50];7 }5 ]/ R6 M* d( I8 I3 D; l, \4 V8 v/ b& h
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 ]8 W5 z1 K$ x4 ?
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    " Q$ H+ v4 W2 _% M) R
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % u& l4 P- e, P" V
  471.         else                                   m_iLanguage=ENGLISH;$ K. g8 W) `4 Z" n
  472.         char szRegister[100];4 Q! N7 D; }9 E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 T9 `& b0 @' x' }
  474.         strRegsName=szRegister;
    9 u1 F7 E. R6 |# C# O+ [* ^
  475.         char szPatchURL[100];: t: ?5 e0 X: Y" l9 r
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 w. I  g# e3 |% s8 K; q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! B# w# W# [* W4 S# ~
  478.       }
    - _$ ?  e, |# k6 M! {6 x& K  d' |
  479.       else
    $ C8 b/ I+ n: i- I* y
  480.       {
    " @- W0 X0 ~3 M- f$ Z/ l
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 `1 ?9 b0 C) S5 i' S% _
  482.         strRegsName=DEFAULT_REG_URL;0 s- {4 y& Z* m5 e; ?5 H
  483.       }
    5 Y  Y- ?/ g, Y7 A
  484.     }
    % v- C/ i# k2 f
  485.   }
    ( p0 w: R- W$ {, Z" Y* G7 _- N0 l3 L
  486.   return true;
    9 J: p$ m/ W! f0 l
  487. }1 G9 s8 C$ p7 z
  488. 5 {  g& T( K6 t$ g' A/ C# V- E7 |
  489. #include ".\ZLib\unzip.h"
    ) s8 [7 v6 H% `8 E8 J- y& Q8 ]
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);0 K, h9 n. d! J
  491. /////////////////////////////////////////////////////////////////////////////
      D. X1 ^7 S: C4 E/ t1 i/ i
  492. // CRevAppApp initialization
    ; B4 c. ]& Q, m( m; J
  493. 6 N" C3 A# U8 F* r8 X# X7 w' u3 Z* A
  494. BOOL CRevAppApp::InitInstance()! M- d, Y6 I7 {; |
  495. {
    ; Y/ ]$ D, w8 S# _* l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    1 `4 G3 [' a4 k2 G+ c; ?& i# y

  497. ' j5 O# A- E  U6 H& ^( I( z" K
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    % |+ R5 T. p8 X6 P1 b0 Z- ^
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 _. @9 A) _" v7 e1 x4 W4 {6 |
  500.   {  b% f# r& v8 }0 D5 D
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");" ^% P7 Q4 M5 e1 @# z  {& e; K
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    3 J5 l4 l2 m! P6 J" l4 ?/ A3 l7 `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 I3 |) ?  ]7 S$ @* G
  504.     {
    ! q# v" ?8 _$ U
  505.       strcpy(szPath,szPathTarget);
      b  U9 m% Q$ l
  506.       SetCurrentDirectory(szPath);* {& R* ?; D- {/ m3 E2 X2 T
  507.     }( ^1 w" R+ z/ K. g# ~$ m( L1 V
  508.   }' G7 j+ l3 Y+ j* A7 V( [1 y. V
  509. #ifdef _DEBUG
    . ]2 \& Q+ N: I$ V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)): j9 y* V% ~& _2 [0 U
  511. #else
    5 a$ I. A) L9 v, r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 C1 W" o- y# S& c1 R2 }
  513. #endif: o" @0 K3 j3 A- A
  514.   {  j" @8 W5 D+ J( l& d! @% X
  515.     char tempFileName[MAX_PATH];* }  k* G& D, {, d  y
  516.     strcpy(tempFileName,szPathSource);% u  Z2 U; @  l- z% \  I! h/ v& G
  517.     tempFileName[strlen(szPathSource)-12]=0;- H# q4 P' B/ K7 U2 w$ C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; a( P2 X  q1 l" k
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    & g6 r" J6 r9 N+ }4 p8 i7 j' m
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    , z. `% ~( M$ e1 }5 n
  521.     return TRUE;
    " y5 |7 w7 a: o2 \
  522.   }9 Q2 l: w1 X, }9 {  e. F
  523.   // Nuke 0118: Delete run.exe( l% y4 k1 b3 |2 h2 L, I# M3 c6 U, x7 r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 \& R" o0 H& ~
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 W# F' r. q0 i. k0 S% E. A7 G/ C
  526.   if(!ReadCfgFile("Config.ini"))
    5 W' ^; Q8 E6 ?, @
  527.   {% X" s. K) {  d9 U8 C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);4 V- j4 X3 @# g1 u( G! d& P( _
  529.     return TRUE;3 F* }1 Q0 ^, t& T" _3 [
  530.   }
    ' O1 f( ^% m$ Y  B
  531.   HANDLE mutex;+ L( v, O, B! Z5 Z) t; E7 h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 c3 B/ n- T! {% k( y  E, @9 @. O
  533.   {2 }( a% b$ y2 }3 K2 X1 I0 A5 J' i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    & f: W% x0 j% D- Y
  535.     {$ ?0 X$ K+ j0 f  X( ]
  536.       CloseHandle(mutex);
    3 y! i4 b, v  G' Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);: K2 @( J" b- S+ F+ T5 M! {
  538.       return TRUE;
    6 q' {& o/ Y+ L0 Y
  539.     }( y& y$ U1 k6 k! O) w) F
  540.   }  * J6 p3 z7 k, r* P  ^
  541.   CloseHandle(mutex);
    8 I: C$ j0 S& O. c( u
  542. ) _: `5 A+ F) }) d7 w+ K/ M
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);! O) ]9 `& {: O% h6 R$ l

  544. % H0 U/ ^7 e+ F" ]: {
  545.         AfxEnableControlContainer();
    1 i6 [# e0 u8 W
  546.   j7 [  W+ ^' I5 Y+ ~! h
  547.   bCanUpdate=FALSE;
    , l( Y5 U' P+ D9 D& d: c
  548.   dwStartUpSteps=1;( \  [9 [# b8 a9 L
  549.   dwProgramState=AP_NOTHING;
    " s: `* N: R- _& O1 M0 e$ c
  550. 4 l! _+ x: C2 w, b: i6 n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);* C. X+ s. f) b) s# F

  552. ; k6 {  H- k4 h# g6 f
  553.         // Standard initialization
    9 c9 U4 E# D, ^! W$ M0 ?
  554.         // If you are not using these features and wish to reduce the size/ j# h: I$ D/ |" r
  555.         //  of your final executable, you should remove from the following
    4 Z: A. `; f) l; d
  556.         //  the specific initialization routines you do not need.2 @9 k! L5 s( l

  557. " t3 p& W( \' Q
  558. #ifdef _AFXDLL6 J# X( i5 m% F; y  ?5 a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 S' ^/ z) C6 a% i6 Q- }# e/ i
  560. #else
    9 [  T' L* z; ^) }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    5 b2 t3 m" E6 f. ~
  562. #endif+ |" i& L" _1 {5 N
  563. 0 l) M0 T) |4 Q  T/ H. y8 o3 y
  564.   dlg=new CRevAppDlg;# y0 _1 ~9 O' Z
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ f% v; [- f3 k# K
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      r2 j2 \* A4 \% d! ]2 Q/ ]
  567.   m_pMainWnd=dlg;
    2 ^  f) X3 n% o/ `/ K

  568. / K' ~9 R8 i. `+ o; K( ^
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    : ]+ I& n* |! `) f$ T' h# [' C8 K$ z

  570. ( B1 |; I* T) D' J9 ]
  571. //  GdiplusStartupInput gdiplusStartupInput;7 n# @& a: ]1 P8 o2 S) }- \
  572. //  ULONG_PTR gdiplusToken;
    $ O8 F3 G$ y4 ^4 }" R  C) O! T7 U
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 v$ T  r3 |  r0 k

  574. + L8 G7 [4 a% J9 Y" S+ O! x: x
  575. //        CRevAppDlg dlg;: x$ j7 q! A  R/ T2 ^
  576. //        int nResponse = dlg.DoModal();
    " x0 }  i9 J3 e0 o2 ~- t9 e
  577. //        if (nResponse == IDOK)2 X4 t. V3 o  [4 J
  578. //        {6 b0 y( ^' d6 A" A
  579. //                // TODO: Place code here to handle when the dialog is
    , f; i0 l% _& e4 w- d/ }
  580. //                //  dismissed with OK+ k1 P+ `9 |2 F# Q2 N- M4 ~  s
  581. //        }9 r& s- O6 O  x5 \5 S
  582. //        else if (nResponse == IDCANCEL)
    4 d+ p1 y7 x% d; C4 Y+ |1 c! X
  583. //        {
    / Q- j  D9 w( I% {/ ?& t1 x' J
  584. //                // TODO: Place code here to handle when the dialog is- p4 i* H1 U  T7 s
  585. //                //  dismissed with Cancel
    6 Z6 y- G# V, P/ A
  586. //        }
    ! J. l% x( a" D
  587. , T! A8 d( M% Z1 E. f: |
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ! V+ c: V2 l( E( ~  `& L1 W, P
  589.         //  application, rather than start the application's message pump.
    - A9 d! w* y8 f4 Z2 Q) o
  590.         return TRUE;
    ! i! }1 ~+ H. K/ e* h& r1 r% V
  591. }
    8 s3 K+ W$ A+ T: A! I+ ^
  592. % V  |  T' l' O; ^2 Q+ Q" |
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + u8 |0 r5 y- M* [; |( w) y7 P
  594. {
    " K. B$ V# i9 A" W; i
  595.   int i;
    6 I' w" \. Q+ X; R# {# `
  596.   char *szRet;
    4 ]" M; W) j  D; m. J
  597. 8 S( p2 |. N- k. Q0 ~3 n: E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    5 P1 Z7 o3 d( m: G) c
  599.   if(sztoken)
    6 k8 i+ S5 W7 v
  600.   {  r2 M' F% i% @0 ?
  601.     szRet=&sztoken[itoken];4 L$ T$ \$ Y5 {! z( a* m
  602.     while(sztoken[itoken])
    / d6 s% l* M! t7 |
  603.     {3 z) V7 ?0 D) L5 b0 A$ c
  604.       for(i=0;i<(int)strlen(token);i++)$ K' o4 h% ~: b7 B; s
  605.       {9 S5 L6 @0 r9 k- I
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) u% W0 f2 q( n# t
  607.         {$ r' W9 a! l; R% Q6 M* J% o% a$ o
  608.           sztoken[itoken++]=0;
    2 R) V- \+ g  p. T0 c' Q3 p% x* d; N
  609.           sztoken[itoken++]=0;7 }' S; u# g/ a% D1 H
  610.           return szRet;; Q" b. J/ ?7 W
  611.         }
    4 K) L! i* w: N, o2 ~6 l
  612.       }% j# ]- b0 j) N& |, `
  613.       itoken++;: W( X+ p8 `2 F* z
  614.     }
    ; y/ Q  c' X( B9 k
  615.   }3 }9 Y1 t  V( ?) }% k, A. T+ Y
  616.   return NULL;  t6 y9 ^3 x( ]/ p9 f! a( w/ |
  617. }
    4 a* `) O! K5 |! ]  Y* z& S7 ~

  618. 4 f$ |8 f( N5 s: H
  619. void ProcessProc(long Total,long Current)
    2 K3 h& ^3 o, }; x
  620. {
    + {' _0 O& b8 w( n1 y) S% h% o& ^6 M
  621.         MSG msg;
    3 ~  S# v& Z- L7 E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);( {6 [$ O! D4 w. r
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ; L( O8 m7 o1 U
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) |! E2 y2 }* ^# z5 P& a
  625.         {
    - I  d/ |# ~  A+ r1 b8 u2 a
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & L; U: e; n; [: L( b4 }' k3 B: R
  627.                 {
    . b9 C7 C! R* |8 Q" W
  628.                         return;
    / E: o1 e/ Z) k9 n
  629.                 }
    2 S/ _* r) Q7 m& W0 J; w6 H
  630.                 TranslateMessage(&msg);
    ) L# I- e2 a3 P  J" e
  631.                 DispatchMessage(&msg);
    * r* h; }/ @0 A# F
  632.         }          y( [* v; {, P$ u& U
  633. }8 P! \8 t; x& |  x4 E* }
  634. 4 T& D5 e6 W8 B! u* _
  635. BOOL bFirstChar=TRUE;
    3 j0 |2 J: w# e( P( A; r/ n; D! P

  636. 8 R2 ?  R6 T8 A
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 j( P  R7 B& t2 k& S
  638. {# @* e4 F  _3 l0 R+ {8 Q
  639.         // TODO: Add your specialized code here and/or call the base class
    9 ]3 O. C. Z9 Q+ h2 q8 E+ D4 D* b
  640.   switch(dwProgramState)
    - B; @3 O8 M% g8 A, N9 H/ a' U# w5 t
  641.   {
    3 s8 D' V/ @) \+ I  t' T" Q
  642.   case AP_NOTHING:; h! c0 s* l( [  _. q; m3 }
  643.     switch(dwStartUpSteps)
    - R% {' K( ~, w! `$ Q3 z' L0 u
  644.     {8 A. x. \3 y% `
  645.     case 1:
    3 u" ]* c! T, P2 u& s
  646.       {
    6 G( b7 j) M& s! \% j
  647.         int i;
    5 |. t1 L( z% s( f
  648.         CDC *pCDC=dlg->GetDC();% @! b/ `6 H! w1 u' i
  649.         HDC hdcwnd=pCDC->m_hDC;& ^3 C' h9 V- p' Y
  650. //        Graphics graphics(hdcwnd);& r5 e% r2 e; F) j) g
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    $ B( |1 Q8 o% W$ H
  652. //        INT iWidth=bitmap.GetWidth();3 ~( m  v: {+ \3 I7 k
  653. //        INT iHeight=bitmap.GetHeight();* I& i# k  D! R' l# B
  654. //        Color color,colorTemp;
    6 W* d" D- _$ `' f, V" C
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . x/ s% _" h2 d1 U: \8 E8 I
  656. //        {
    * q& V* X& Q, ]8 i# n
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( c$ o( n( T1 C4 C
  658. //          {* N2 M; B) `' j7 D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    / m7 G2 d7 c& p: s2 f
  660. //            colorTemp.SetValue(color.MakeARGB(. [9 T' N4 v5 g9 ?1 x4 f
  661. //              (BYTE)(255*iColumn/iWidth),- p5 P5 t9 i7 u& x; s/ j9 ~1 i/ T
  662. //              color.GetRed(),
    4 E# Q2 s6 h1 G* m$ M
  663. //              color.GetGreen(),/ r9 N5 J" [# y* \
  664. //              color.GetBlue()));. i  E( Q5 D; g# O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);) q6 O. z8 H) R/ ]
  666. //          }* D$ \2 p! w9 d8 @0 r
  667. //        }/ L% Y+ M: C! a  _0 R& _
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);6 i' I) Q) d9 g3 U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( Y0 r4 V' `" N0 J* ?/ [
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " z& v$ h; V0 Y+ p& M
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");( e" S" C4 G+ p( R+ {  n; g' F* A
  672.         for(i=0;i<240;i+=8)6 v9 m& }' X* E
  673.         {
    * y$ E$ K- E& I' E6 z( M7 S
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 j! y8 p: S$ ]9 b$ e
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 T6 o; I2 E: _0 V! _, c% J1 ]& \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " [# ]5 m3 ?3 s  `2 [
  677.           Sleep(33);) }* o1 y. }& ^
  678.         }$ V- }8 s' T8 ]7 ^% o% n. g% b0 c
  679.         Sleep(1000);
    ! h" |" r5 P( G9 J6 n
  680.         for(i=240;i>0;i-=8)/ b" q2 l. {$ y
  681.         {
    " [. O2 A& r1 P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ F  s7 v' R' {7 W* ^
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 E6 m  c/ H/ h* M; q0 ]5 q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # w" W; i6 i- n
  685.           Sleep(33);7 o3 d  c- I4 e/ n0 z
  686.         }' L3 c9 k% h! B9 @! j$ V1 U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 V* E+ p5 |8 z4 Q) ]2 A( u& Q  t
  688.         dlg->ReleaseDC(pCDC);' G, s, k+ `7 A' U
  689.         DeleteDC(hdctar);$ [5 {5 M1 v. S" r/ E7 \7 q
  690.         DeleteDC(hdcsrc);6 V" u0 Z( b2 [, I  F/ A. m# ?
  691.         DeleteDC(hdcorg);  \5 j$ k+ ^. {& F' E: U! F* o" c/ m
  692.       }& `: M4 t! L2 b/ ?2 V7 i, t
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    * D3 T1 F2 |# _+ A3 X) B$ `
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& ?4 v$ L, b# P# A7 y$ j! t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 g0 w/ ?$ b3 i* Y. p- X1 m
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * R% T# R; j3 _% M7 _5 ^
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 x0 ?! s0 q' ^
  698.       if(!Dn.Connected())7 l. J' z  i6 g, N
  699.       {
    ' _- H; Y  j2 U
  700.         dwTotalFiles=1;
    5 w: N* }; ^% k0 \" w! T
  701.         dwDownLoaded=0;
    $ V+ C5 T1 i$ b- S( Y
  702.         bSilentStep=TRUE;$ B9 O* F  m: k  }. y
  703.         bCompressed=FALSE;/ z" W+ t9 V0 h
  704.         strExtLocal.Empty();
    7 {/ _4 Q% B; i  Y3 l' Z" e2 H" O
  705.         strFullName="readme.txt";9 l7 r% M3 E9 C# d- }* `: E
  706.         dwProgramState=AP_CONNECT;" |# l( G& M& t- n& ?) h
  707.       }
    % b. v8 k4 C" M7 x' t% j
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ) U  j1 a! l1 @. Q. Z8 J1 k8 i% ~& V
  709.       dwStartUpSteps=2;# L* }6 \. y4 z* w
  710.       break;
    , @$ b5 r$ g+ Y* S' w
  711.     case 2:
    5 E1 M2 W5 g& }
  712.       {
    ( ]7 Y& d) p& Y! x
  713.         int iEOF;7 G) h* B2 n! |: I
  714.         FILE *fp;' C$ m# A; C! k  x( [$ r
  715.         char szString[512];! d4 n6 |1 y" R! p8 C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ D' J6 V2 s$ i- H# O, x0 n. k
  717.         if(fp)
    ; S1 _, u& p5 r  W7 D3 \
  718.         {" F, Z6 ]9 r. J; D6 `% M9 K
  719.           do* w7 R3 |/ P  o1 m
  720.           {
    # X. @. a/ y4 s$ O4 d
  721.             iEOF=fscanf(fp,"%s",szString);7 f  T7 v: t# x! m" p
  722.             if(strlen(szString)); ~4 {! K) O- U9 r
  723.             {
    ' W8 h4 ?. g6 |; W4 c$ u
  724.               if(bFirstChar)
    : q+ Z% o) }) l0 \
  725.               {
    . j6 [5 g: W& d2 ^& T- n
  726.                 bFirstChar=FALSE;2 n# _- x1 U) S8 N, w/ u
  727.                 bConnectIsBig5=FALSE;& Y" s/ z* k4 i& z! K
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    3 d) d0 |) h3 L
  729.               }
    ! c7 K4 `- l0 j2 [/ N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));4 U5 ~: P- S( q3 d, @% m$ D" a
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));- u& t: e1 X3 B) c' X
  732.               dlg->m_ListText.AddString(szString);& @2 U; Z& I$ `- g* s$ U. W& f. l
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  S7 l- p3 {+ u2 B
  734.               *szString=0;9 i# |( H. \4 E$ ]9 c! Z) v
  735.             }6 e6 ^$ O; r! r7 i$ [$ A1 t4 K& ?
  736.           } while(iEOF!=EOF);# B0 J6 V! f$ n1 A- O. {- D" |, a
  737.           fclose(fp);
    ; w$ |) w2 t7 ]
  738.           unlink(".\\DownLoad\\readme.txt");* q, Y4 f& @2 D+ x1 Q$ K! e1 P
  739.           dwStartUpSteps=3;
    : D6 Y% r" R  i8 K+ P! A( E1 [
  740.         }
    ) |1 v( i& t0 u5 t+ l
  741.       }9 r$ [( f. d$ B) n& k& P  N- o7 p
  742.       break;
    ) t0 O# _& K6 X* a+ X1 X
  743.     case 3:
    ' `, r' x  f9 d/ u
  744.       if(!Dn.Connected())
    6 m' k% h' j3 x
  745.       {: t1 c% P2 w# [& P, Q4 n: m( R9 c$ t
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" M- R9 K( k& T$ d$ O
  747.         dwTotalFiles=1;
    " d- J$ n& R+ P) g: d
  748.         dwDownLoaded=0;. k$ O2 E+ {7 g! {# Y9 ^+ L
  749.         bSilentStep=TRUE;
    6 x* o% r$ [% |* z& b
  750.         bCompressed=FALSE;# W& W4 u8 Q+ c& s: k
  751.         strExtLocal.Empty();
    5 {4 s! R: E; X  R- ^
  752.         strFullName="checkversion.txt";
    : T6 ?% o! M5 N% v* Q% q/ x
  753.         dwProgramState=AP_CONNECT;0 R+ r  {! N! l/ c2 m# {, U' t; n
  754.       }6 S6 t- {, g% s" t
  755.       dwStartUpSteps=4;
    1 H' }! x5 F% H$ x
  756.       break;
    " [# d0 S. Y1 r, X1 |
  757.     case 4:: V  H1 [- S* ^# x, n6 x
  758.       {* D5 g9 Y" G- f. r- W" a) A( W
  759.         FILE *fp;0 w8 ?. p6 s1 S7 N5 N
  760.         char szString1[128];
    & o, B- b! B, z
  761.         char szString2[128];
    : h4 u$ i6 x3 W  ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ a- A- J0 t1 r2 e1 E. b# [
  763.         if(fp)' E1 R. g# W2 B
  764.         {
    : U* x: k, M+ J* ]# d6 ?
  765.           fscanf(fp,"%s",szString1);% C* c& G0 U6 y$ L
  766.           fclose(fp);
    ( V2 b% }2 y6 x  L
  767.           fCheckVersion=atof(szString1);; S: C7 a- y* {' h( V) D: Y
  768.           fp=fopen(".\\checkversion.dat","r");9 g2 ?0 m) S. K. f7 |8 S
  769.           if(fp)! }* u* n' a6 s# ]7 q4 _' z
  770.           {; Q# Q) Y- N% r5 [' ~
  771.             fscanf(fp,"%s",szString2);( p" @! _/ o- e3 K
  772.             fclose(fp);6 W8 x- _4 C8 x2 g
  773.             if(atof(szString1)!=atof(szString2))" U3 L8 l& a. K
  774.             {# d2 X3 r9 O! G: I" s" L7 n9 ]
  775.               if(!Dn.Connected())
    / i4 @. [6 `" X+ ]9 l6 ?
  776.               {
    4 e8 I  U4 x& n) ~$ t. I. Y
  777.                 bFirstUpdate=TRUE;0 L2 N8 R% y  P+ r& ]+ ?$ Y) r0 D
  778.                 dwTotalFiles=1;1 V" K* {6 y. k) X0 Z5 Q
  779.                 dwDownLoaded=0;! j. h/ U. ^: I  O$ ~+ F% r- B
  780.                 bSilentStep=FALSE;# |& p& [! U/ G* C- B4 O: d- C
  781.                 bCompressed=TRUE;
    - Y# H8 I! V, x  V9 q" K
  782.                 strExtLocal=".\\DownLoad\";
    . `3 b+ Q0 k6 P3 U' J
  783.                 strFullName="update.txt";
    + d0 g- s$ T2 n. ~  G1 Y, c, _5 n- a
  784.                 dwProgramState=AP_CONNECT;
    - L# [& T) ~! r& i& t6 V% m
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 p- r: ~9 o3 J$ J5 L  k
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
      e. S( q2 S9 }6 \# F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' l& R+ T% e+ m1 f6 i2 n9 Z$ @% t
  788. , l+ _' V8 x6 b% S
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 f. J" x4 [( h
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ f  H0 ]6 n& J/ r
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 D+ `+ X: i5 j* W3 F' T. N
  792.                 {
    5 y3 w% \7 }, [3 o6 U) u4 J
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 s0 f" a6 R3 g& {6 h0 Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 x/ g+ E5 v' a( M
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% o0 V3 {5 U$ r) S; Y8 a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. _! |4 X# K" H4 d5 ~6 q; ]
  797. , U) s/ o( ~0 w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% U- @/ j! k- |& ~8 Y+ ?: l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) c" g- _7 c0 f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! [) ~8 Y) P# D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ~  D2 C- z6 g+ h* J6 n
  802.                 }
    5 `$ j2 V9 P* c& L) S! \, C
  803.                 dwStartUpSteps=5;) v# z8 c3 m$ _( Y) r% x4 @
  804.               }
    % y4 P+ M0 f4 P+ |
  805.             }+ ^  X, S% q3 S& \. P* r8 J
  806.             else+ s; W3 H6 R+ S5 p$ x
  807.             {
    , t* I- T' G3 S% C4 i: y8 v) T8 [
  808.               unlink(".\\DownLoad\\checkversion.txt");- y* z- Q# \0 \# `) Y: Z9 p; n  t% h
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    % ^7 z3 Y5 n8 P9 Y, k' H
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");/ H6 T. P2 K1 P8 M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    / d8 C* P1 i  ~3 h. K& j

  812. % _& \* p# W: F3 M  P* S0 m
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( U2 B5 n/ U, f$ |/ x
  814.               dwStartUpSteps=99;1 O# S" x$ g* o' Y% C
  815.               bFinishUpdated=TRUE;
    & i1 R' X5 w' u
  816.               bCanUpdate=TRUE;1 g; i- G' P, R0 V3 J
  817.             }4 a3 b  Y  R0 i" ?/ w$ L. i
  818.           }, f6 r6 b* c/ ?, j  i* Z! Z
  819.           else
    3 e1 {# r* `1 |# @+ b" t5 d% K8 ?
  820.           {* q# @4 L) j+ G% _, S+ s
  821.             if(!Dn.Connected())
    " U9 M4 b4 A0 F0 B
  822.             {
    3 }- N# F1 g0 ?' n
  823.               bFirstUpdate=TRUE;
    % C' P4 b7 [. t: k
  824.               dwTotalFiles=1;" b1 z! T6 d" E( O+ K/ f; x
  825.               dwDownLoaded=0;
    3 }) ~8 _) X+ a$ @" \
  826.               bSilentStep=FALSE;
    & p, a: E5 l! }) y8 \! I7 A7 E) L
  827.               bCompressed=TRUE;
    & Q0 }! g4 q4 k/ }0 B
  828.               strExtLocal=".\\DownLoad\";
    . L; S0 ~2 X. o7 H7 M3 u
  829.               strFullName="update.txt";
    & E+ |7 ^# `+ A. d4 Y7 m& ?1 D/ w. y9 ?
  830.               dwProgramState=AP_CONNECT;
    * R* g) R. I$ q( v
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  n4 v+ T" _* N
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% O' c& \' |; b
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    2 _( H9 H3 {7 e- r$ q. D! Q
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + @+ ~3 A+ K6 d! V
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 \7 H9 ]4 U. \( p( r
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ; U  Q: c- x) C
  837.               {' F+ ?0 ^0 I# O) \  \2 Z. E
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");: g- D& e8 [* h2 l5 x3 n
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; p' f6 `$ c1 g+ X: t8 ~8 _
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: q# y- j! u- I# x. U3 ^( V$ Y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: v! }  b" A5 F: [$ b
  842.                 - L2 ?; ^/ ^- L" @# G
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 U1 w% s* m2 ^5 @
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " f$ i; C- D! \8 I, x! m0 p
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 |- z' Q; C& c! I& ?( A
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * y0 w8 n& x8 O$ O* x, y
  847.               }
    8 U4 U. \5 f& ]& B2 \* l$ A
  848.               dwStartUpSteps=5;
    7 [* k$ K9 _! J
  849.             }
    2 I! O1 c9 `1 x# l1 T( R
  850.           }% S0 |- H5 k5 L( }; _' L# Y  E! y+ P
  851.         }
    6 q+ B& }* i. s6 O3 S- E
  852.         else& k: v0 e9 H& @, z3 g0 w; U
  853.         {
    , _3 t7 I) b. N  r4 b- Z
  854.           dwStartUpSteps=3;
    " q1 N5 ]5 U0 J1 S  X4 p
  855.         }
    3 s% f3 j/ @* I, }# m& J% M+ G
  856.       }
    : J* c/ x# A1 e: H. e
  857.       break;
    $ @1 [$ i. z- C- Z: M' W
  858.     case 5:' Q; N7 E! L& C0 ~( S7 U9 N5 l9 P
  859.       {, |& b" c! s1 ]2 B
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    4 k) [- l9 g, f* e/ _
  861.         {, R5 a; N4 K# n* _# P
  862.           int opt_overwrite=1;9 y6 U' u8 ?9 B4 A5 y) c" o
  863.           int opt_do_extract_withoutpath=0;+ O/ O, f% D% E0 A9 p; ^- R
  864.           unzFile uf=NULL;. }; n3 l/ j( |

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

3 t, q1 g8 Q: k6 G6 g& D0 m0 M6 \: M7 S

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-26 12:44

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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