找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
& m( \. O& R$ m. O
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , p! L% M' b! @, k/ e
  2. //5 v: e0 M- z' g9 H  ~

  3. % M7 [5 M' T+ b" J: \# a2 g
  4. #include "stdafx.h"  k; X% m" m, Y% Q* _$ B' s" r/ l

  5. 4 O3 U* |+ F/ j& U' m
  6. //#define UNICODE% A' f: h" B8 N5 S2 C% ]
  7. //#include <gdiplus.h>3 n. I! ]0 k5 E/ s: U
  8. //using namespace Gdiplus;
    * x8 C1 n. T: t! {
  9. . U7 i- M) k1 D* [5 C. o
  10. #include "RevApp.h"/ q% _2 I; n* V9 q) V" b
  11. #include "RevAppDlg.h"3 \# [4 t9 h( D6 }

  12. & N) S; T% K1 H+ M2 N8 o1 O1 g
  13. #pragma warning(disable:4786)
    : w1 N) s- i  \5 R
  14. #include <map>' @# L  S2 n$ ^% i0 W! a( B
  15. #include <list>
    : U/ g0 f/ N' q' ]3 u2 M! N
  16. #include <direct.h>0 }) N3 G) t, [- k6 I) m

  17. ; @7 h& \* d5 N) J+ ~7 S
  18. #ifdef _DEBUG
    5 b* o: p! H" Q
  19. #define new DEBUG_NEW
    # I, r) D/ \3 h; H3 Z& ]" P
  20. #undef THIS_FILE
    / R4 n* D  s! [& q0 e# x" U
  21. static char THIS_FILE[] = __FILE__;
    2 w2 y, |/ M% R& C
  22. #endif, @! r% \* q) E' N: f
  23. #include "SkinResDef.h"
    2 H9 U7 e3 j6 j( g' w1 Q  ~
  24. #include "ChangeBG.h"
    $ D9 s  Z; v' U: h
  25. #include "AFXINET.H"
    7 S$ q2 y+ w& l/ e$ H, r. O

  26. , s+ T! s" O% O* m0 D
  27. #define TRADITIONAL_CHINESE 0+ B- H( D6 b& A9 D5 L0 }  x) A
  28. #define SIMPLIFY_CHINESE 1
    3 e/ g  m- Y: h" p2 O
  29. #define ENGLISH 25 l, I4 g# R* V0 U, V8 l
  30. int m_iLanguage = ENGLISH;
      n* W9 f; m# l& {' K* W
  31. /////////////////////////////////////////////////////////////////////////////
    / F' B7 D3 {7 n0 l" x) A- k
  32. // CRevAppApp
    1 a  v5 g+ K- W5 e

  33. ! R! ^7 U+ Y( @6 s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)$ b9 T/ o) [  B1 r2 q6 p2 {* \9 m' w
  35.         //{{AFX_MSG_MAP(CRevAppApp)" z5 }! R, N+ [* b2 H
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) U2 v/ B& i* W$ S' M4 h5 M! j3 p2 V
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!( U* _' o/ {4 I
  38.         //}}AFX_MSG
    0 T2 c+ Z* M: I& C% ^
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ! T& q2 r  b* a/ S; l. \
  40. END_MESSAGE_MAP()) x7 u. S7 K4 M1 O. i. P& B

  41.   }7 h* X# M& b; K
  42. /////////////////////////////////////////////////////////////////////////////" N) A) }& I& F- M6 x) b
  43. // CRevAppApp construction9 n" t' M; o5 y' R, @
  44. 7 T) U2 l8 k( `$ |6 H3 K
  45. CRevAppApp::CRevAppApp()
    - Q6 N/ [8 Y+ o7 Z3 l
  46. {
    : I0 ^  N+ [  [: G
  47.         // TODO: add construction code here,
      D" i# D, t5 p
  48.         // Place all significant initialization in InitInstance
    & u% }0 G6 e) F  ?
  49.   bDisplayIsBig5=FALSE;
    . R* @# m9 U6 l2 `
  50.   bRestartUpdater=FALSE;0 R6 m; x4 p8 i; g4 E
  51.   bFinishUpdated=FALSE;4 j: Y' f% G( }/ s9 N4 t" w$ W5 y
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 V- |5 R% Z' M/ z2 ~
  53.   InitChangeDataBig52GBKS();
    ! E* p0 T% N8 N2 K. l7 i/ }; K
  54.   InitChangeDataGBKS2Big5();
    & b# p& O1 M' s, S
  55.         //% r9 p; ?% f, y
  56.         bClickRunExe = FALSE;8 S8 e( B% p8 A: a( R3 n
  57.         //2 y3 f; H5 d- o  g% {/ X) T
  58. }8 C* t; o9 `/ l2 q( t; ]8 ^+ o
  59. 9 N. s2 H" ^% L5 A% u
  60. CRevAppApp::~CRevAppApp()1 s/ f2 z4 R) N7 F* q
  61. {4 ~  |. N4 z: U! C) _
  62.         // TODO: add construction code here,- z4 ^5 D3 _, x  c
  63.         // Place all significant initialization in InitInstance
    3 Z5 j9 w3 m% w8 j4 Y* L' ?
  64.   EndChangeData();, y, R* W* ^: S0 \$ [2 v& s  G
  65. }$ l" n4 z% V7 y$ J( k

  66. " n3 G, y1 ~9 J4 f2 s" |( `
  67. /////////////////////////////////////////////////////////////////////////////: M9 U9 Z, V4 _# L6 l8 [( |
  68. // The one and only CRevAppApp object
    . H3 W) x2 J% K3 v! {
  69. % U& q% v) R% }) F
  70. CRevAppApp theApp;
    / E0 K. B0 G5 `! ?5 T, M

  71. 2 P, N! \( p2 b% b! y8 t
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' ^( o5 s* @# S' Z
  73. {
    + ]# W9 g# u# Z- G# P
  74.   int iEOF=0;8 V$ k3 t! G: N, X) J) T6 E
  75.   char szTempName[MAX_PATH];
    8 T1 z% Q0 R$ Q  N4 ^, ^, a
  76.   *szFileName=0;
    ; x3 J( G( _! Z! ~2 q& h
  77.   iEOF=fscanf(fp,"%s",szTempName);2 E8 n* }, U. h, |; H) L3 u
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    / W1 F7 C, A7 S/ |/ V! W2 d
  79.   {
    " H" _1 G) {& ~, x7 F9 e# [
  80.     strcpy(szFileName,&szTempName[1]);  i; F- q% F- ]: y6 X8 x
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 A' i: J6 \' V0 i% f
  82.     {% C; p" P! d8 a" h: P
  83.       iEOF=fscanf(fp,"%s",szTempName);, N+ [1 \5 W6 U4 G- {5 D6 m
  84.       strcat(szFileName," ");
    ( @' x  x7 u; ^5 i5 e7 I
  85.       strcat(szFileName,szTempName);
    ! z" [; I: Y4 Z5 R/ }0 [3 g
  86.     }
    6 Q+ b4 F- _. |0 K' ?  l: D7 u
  87.     if(strlen(szFileName)>=1)
    / H5 ~; a% P3 S; |. S; w
  88.     {$ Z! o2 X. o7 h# o: q8 ?8 v( T4 l- X
  89.       szFileName[strlen(szFileName)-1]=0;7 B! h+ b! ]6 ^  Q6 z
  90.     }, C/ G0 X# W% X8 r# ~
  91.   }, F) W; c- b6 o3 C) g% R( z4 t
  92.   return szFileName;
    * o/ ]2 S' Y8 w( ~+ k# ~
  93. }0 j2 t5 t+ U& W1 |

  94. , x* T' w" R! {4 [! V( ?1 }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)6 Y; s' ]9 R: o$ _2 @1 y# n0 V
  96. {7 m  T- p  y% {% L9 P! |
  97.   FILE *fp;
    1 D7 Z$ g5 D9 L4 l
  98.   char *key=NULL;7 W6 D0 r  W( T! ^% o4 G" f4 o
  99.   char version[MAX_PATH];5 a1 |& f: k  E& E2 P
  100.   LPUPDATEFILE file,olds;8 }" i% A4 Q0 S
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    + y$ @5 t% K+ c& b5 t

  102. & r# v/ p4 Z; Y. P9 ]
  103.   UpdateList.clear();* W1 Z; w5 q' i; w% `
  104.   UpdateFile.clear();9 J4 ]+ [3 e2 {3 `7 v! P3 e
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' Q+ w- M; Z/ h' A6 N0 z* X
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 P# {' K3 O* Y
  107.   fscanf(fp,"%s",version);! Q8 l) p5 U6 Q/ ]$ z. Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , O% Q% Z7 k* g# J! q$ D5 p
  109.   while(fscanf(fp,"%s",version)!=EOF)6 C! S  _( j- N9 T' ]: [
  110.   {- h" s0 p9 q' R) q. n/ B) q' [  L
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 D1 v  `# v4 T( h
  112.     fscanf(fp,"%s",file->path);+ Q5 _9 ?+ l$ s) e: r
  113.     ReadFileNames(fp,file->file);  v9 E7 `* D* i
  114.     strcpy(file->full,".");9 J! ~0 w5 z# s: L3 \9 y
  115.     strcat(file->full,file->path);4 q- T# s) X5 y8 T) T" u+ V
  116.     strcat(file->full,file->file);
    " T; A8 t  u' V2 o5 g; i1 j
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    , R  D9 }) |+ F1 w3 L
  118.     {- D+ K9 H) J1 M0 A+ r, v
  119.       file->vers=(float)atof(version);/ m# C/ y, x0 `% D; u1 t: C7 a& C
  120.       UpdateList.push_back(file->full);
    / ^1 G& t6 l7 w: ?' b; g
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & G( `) _5 P8 \2 z- O* z' s/ b
  122.     }
    5 Q3 j1 o7 x5 U( n8 p: c
  123.     else3 v6 p" k2 j; V
  124.     {" P+ S) T! n5 a8 O8 i( r
  125.       olds=(*p).second;* m) x) Y) E2 j7 S( s
  126.       if(olds->vers<(float)atof(version))! y: p5 Y, H" F; U* i3 V
  127.       {
    , d) w# y2 m  Z4 Z. x
  128.         olds->vers=(float)atof(version);
    & Q8 ~- m* u1 a3 v# i1 s
  129.       }. t- |, @& |/ v* u7 \
  130.       free(file);
    0 r* w9 s5 ~9 A. B9 F0 v
  131.     }
    8 G: K; o! n# O# o" O- F
  132.   }+ r$ N% D- w1 x" V' N. D
  133.   fclose(fp);! h% @# F5 E, H
  134.   return true;6 d$ p* q4 s+ Y8 V! G) k
  135. }' y/ a0 L$ [& \; m' n; _3 x/ Z

  136. " z# v3 S# k; X8 |! A6 e
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , A/ _$ L, u2 h( ^0 Q/ ]) [% r. P2 E
  138. {+ k( R# B0 w6 q& z  i
  139.   TCHAR  szFull[MAX_PATH];
    2 T6 @( s; G+ j: Q1 g7 D
  140.   TCHAR *token,*inter;5 Y1 n, }8 w2 ]% A( ~
  141.   *szPath=0;
    8 i# z% ?# l# W  G( r& M8 s
  142.   strcpy(szFull,szFullPath);: N+ D5 w' ]1 K: u/ n+ m
  143.   token=strtok(szFull,"\\/");3 Y! U3 B& j' Q! W% S! x% P0 J
  144.   inter=token;' }9 W+ N7 ^0 w  M0 D
  145.   while(token=strtok(NULL,"\\/"))' V. D# i+ M" K7 V4 W+ F# [0 n; d* o6 r
  146.   {
    $ M) Q! W8 Q+ e3 j+ o
  147.     strcat(szPath,inter);- U1 a& j; E8 x0 R* j0 M
  148.     strcat(szPath,"\");8 ^7 {+ m9 {% W7 t9 E( k  H
  149.     inter=token;( \3 l  P4 I8 o) n$ x4 `: P8 M% ^
  150.   }
    % q  o( n; m# [6 u: T# F7 X
  151.   return strlen(szPath);, Q5 i7 f/ Z4 T+ w5 @: q5 h( n
  152. }
    7 h) A' H" ^. ~3 v$ ^6 m

  153. : A7 w: ^2 k1 \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 f8 p$ c9 l0 [! g4 X0 w
  155. {
    " W9 @# ]+ }  {8 O7 c. F; O; k* E5 e
  156.   DWORD attrib=GetFileAttributes(Target);8 Y. o% X5 w, a% j
  157.   if(attrib!=-1)
    # n+ M3 y5 f# ]/ p6 S
  158.   {: O% p, B$ C( m9 G9 t7 e
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). n* X5 A4 ]% i, C/ O
  160.     {6 ~4 _) s# q9 K3 o" |& ^' a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ |" T9 t" c6 @5 @
  162.       SetFileAttributes(Target,attrib);" Y  `/ y5 k. @; }: f4 E
  163.     }( M& ?5 ^; E/ Y: S$ l# l, N
  164.   }
    : B, v* k9 p& h. d
  165.   CopyFile(Source,Target,Erase);3 ]' o, `) ^/ \. z9 J6 B
  166. }
    ) u& g- |, G5 n

  167. 9 U+ y2 B3 x. R- U- _% c
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)7 Q( B6 [9 J4 @) P" w. }
  169. {' R' D0 X& F& s& I
  170.      FILE *fp;
      _- i% Y* z- w3 l9 Q; r
  171.      char  szBuffer[8192];# v: S: Y9 p' [1 a
  172.   va_list  argptr;
    - L  X) L7 c: L1 G4 [

  173. - a4 }. T" G" r7 A' D0 d6 g
  174.         va_start(argptr,message);
    " ^. S' h; l& ]. G( _1 A
  175.         vsprintf(szBuffer,message,argptr);2 b* t& e7 O" ^( |9 ?/ Y( E
  176.         va_end(argptr);$ r' y2 H4 ^2 R# [# \# ]; h& f- {
  177.   fp=fopen(FileName,"a");5 o+ u# R$ Y+ @& F$ \, R" Y
  178.   if(fp)
    " \* f9 {. f. N6 m5 ]
  179.   {0 T6 T: c- r: k2 l" c5 [4 Z+ f
  180.     fprintf(fp,szBuffer);
    2 U% j4 ~$ v" P; q1 [8 d( i+ W
  181.     fclose(fp);
    4 q- k9 T8 F, n0 C
  182.           _flushall();. x4 D  h) L' G  c
  183.   }" \$ U8 I* g. G& }) S: q; Y
  184. }
    0 _  [! i! q$ \, Y0 @

  185. / C, k' [* @% {. w$ y  i( z
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 ?, s* R) j/ Z3 s& T
  187. {3 u0 L1 j6 n2 d
  188.      FILE *fp;7 R# B3 C- ^1 |! o
  189.     DWORD  attrib;
    : q$ R5 N/ o; e
  190.   attrib=GetFileAttributes(FileName);# Q3 F" E! F+ G
  191.   if(attrib!=-1)  r; F- \$ w6 \: a) M
  192.   {
    / U- m( l- ]+ Y' p* Q- r# [
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 f  D' A" f  w
  194.     if(!SetFileAttributes(FileName,attrib))3 O& z7 I, A& R
  195.     {
    ( H( V0 F5 k, K, |( V
  196.       return FALSE;4 Q) F- P8 ]2 t, ^# m$ v7 Q
  197.     }
    3 P! g( [* d4 X* O: f
  198.   }" Z8 g% d% H0 \2 H! X; k7 t' `
  199.   fp=fopen(FileName,"wb");* `! F9 L0 x; x0 Z4 k8 W; j" b
  200.   if(fp)1 D: \% n6 Z- T# Z7 q
  201.   {2 Y6 L" C! J0 e
  202.     fclose(fp);
    % u- j% q% W5 O+ A4 c8 m3 T$ v
  203.   }
    0 x( ?6 d- B6 p2 @% U
  204.   return TRUE;& D5 Z* k( ]1 {0 T2 l% A7 P9 ^& _
  205. }( o1 P( o3 \7 n+ a- c) z8 w3 q
  206. ( A: [! F7 R! X- l" b$ D
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    + o7 A2 V  N; w6 s  }: X1 X
  208. {3 n3 u  o, ~) {; a4 r) `4 @
  209.   char filename[MAX_PATH];$ K2 @1 h# C3 g3 R+ |+ \
  210.   LPUPDATEFILE file,olds;- ^5 D6 ^% Q* `
  211.   std::map<int,CString>::iterator i;
    , \4 L2 K) H$ d* a
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; j  Z8 u4 P" Q8 [# z( ]
  213.   std::list<CString>::iterator l;
    ! i& M' h+ j- E

  214. 3 b! p5 q) a' s1 p6 F
  215.   if(bFirstUpdate)
    * M  C2 B1 ~/ d2 d0 k
  216.   {7 r9 b5 U0 c9 ]. s( \/ B, J6 U
  217.     dwCurrFile=0;3 r8 U0 J( v; f: w1 [5 |! d7 y
  218.     bFirstUpdate=FALSE;
    * r9 |  _, ], N9 E3 [' {
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())& `# A9 T: D- a0 i8 R* Z4 p- d7 F. @
  220.     {
    : U6 F, x/ r& f2 c( w% W: q2 {
  221.       dwTotalFiles=UpdateLocal.size();% U# o# n& \0 x% q+ @4 y; [# Z1 n
  222.       dwDownLoaded=0;
    5 x: P8 V/ \5 L0 @( a, A8 L
  223.       bSilentStep=FALSE;
    , x6 [/ L3 h& z! t% j5 w) d( y; ~8 A
  224.       bCompressed=TRUE;
    8 f: g% @- T5 f7 a" g4 U; O, Q
  225.       strExtLocal.Empty();
    . u( n+ ]% M5 u1 N4 u
  226.       strFullName=(*i).second;! T1 K/ _0 d8 e. ?- V/ p
  227.       dwProgramState=AP_CONNECT;
    / k( A/ p+ }9 {+ Z* z  B0 |3 S
  228.       return TRUE;
    , b# j  k% e/ h3 a
  229.     }$ o3 ^; k5 L! S* l' K  @0 a& k
  230.   }7 R7 S( f: W) g- Y3 D: H
  231.   else if(bRestartUpdater==FALSE): g  C/ h/ c" h
  232.   {* E& _6 j# U5 D4 ~2 r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
      Y2 G; S: [6 e
  234.     {9 F3 }8 U1 J: e! E+ V
  235.       file=(*p).second;" u) O. @5 k; o, [3 W! t
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())! s  }& f( U+ B7 y' n9 T1 `
  237.       {; t; U# a3 ~' o
  238.         olds=(*p).second;
    ' Q" q+ L0 C- r6 i3 d& n
  239.         olds->vers=file->vers;
    % U# _' R1 j# Z2 z/ L
  240.       }
    4 |9 l' s5 j" X; M! e) m% S9 r, I
  241.       else" t% X/ t( \# b" ?# [
  242.       {
    0 U! \' v5 ^6 n3 V9 ]
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));3 L2 u$ s3 @- O4 q/ I) _
  244.         memcpy(olds,file,sizeof(UPDATEFILE));, X) O7 i+ r2 V/ ?5 E# X' q
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));: v1 }, \* b# s8 f
  246.       }* h$ W; g$ }/ Y( }$ g; i7 E
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: j. g7 m8 n0 ]* B5 M, Z
  248.       sprintf(filename,"(%s)",file->file);
    ' v. d4 y5 V8 N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& q, x" Y% q0 b4 Q% e
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    , }# Q/ D2 y" o) P0 t% O
  251.     }
    " I( ~2 @' X8 T7 p( Q7 ]" _3 v) m0 d
  252.     dwCurrFile++;- r% D9 ]  o& T2 q2 A: ?9 x
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 d) |5 F; F- l
  254.     {6 v+ Y2 t, `" c# f" _3 u
  255.       bSilentStep=FALSE;
    : N3 S+ k, q* O, Z* u9 m9 B% L
  256.       bCompressed=TRUE;9 I; D# d4 [' ~7 u$ E; J' C/ I
  257.       strExtLocal.Empty();! p: ^/ l" G9 O% ]8 n9 I
  258.       strFullName=(*i).second;
    # R, _% m# [2 m  g1 v
  259.       dwProgramState=AP_CONNECT;& R* ?6 Y5 [( t( j) A1 T% C+ i
  260.       return TRUE;  c/ o6 _3 |- o  f2 f( G' p2 M
  261.     }: ]  ^" p$ `( T* H% M3 u/ d
  262.     if(!bRestartUpdater)# S) C. F1 K7 P% {9 J+ F5 \. b& r
  263.     {6 B. n7 l5 O+ n9 o4 g
  264.       int iCurrSize,iFileSize;1 Z$ t) V$ j* b+ n, l) k
  265.       iCurrSize=0;
    # [2 ?' N- A( Q; r  R% {
  266.       iFileSize=UpdateList2.size();+ M) }- R' o3 H( M& x$ ^5 u8 ~
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");! n, F+ S, h9 K, g; d& a  W& i0 O6 I
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  U, U" r8 X) r# o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");$ P! k7 X) L3 z: i: q; Y' W2 ^+ o0 J2 }9 |
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 G* _! e) X5 J; P
  271.       Fclearf(".\\update.dat");4 f; w  M. F7 Q. \
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 k/ ]* C( \! A. D4 J% b6 d
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 ]9 V6 i8 J# W/ f( u) s/ J
  274.       {
    / N4 ]0 a/ S9 p- s% e
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 d, @- _7 c" ]+ f' D
  276.         {' g$ T' h" H- J% W4 b
  277.           file=(*p).second;: V: ]% ^' p: G0 e  J0 W8 F
  278.           sprintf(filename,"(%s)",file->file);
    5 D, @9 u' f3 Y7 X9 w4 A7 r
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. U* ^9 v( v" Z# v
  280.           iCurrSize++;1 n6 `+ M- k3 @4 D
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 d. D. c. }* |/ P. K8 F  j
  282.         }
    6 V2 f0 N4 N- M: R
  283.       }
    9 ?' O" {3 }! l' v
  284.       unlink(".\\update.txt");
    ; E7 }. ^7 ?2 ^
  285.       unlink(".\\update.tmp");
    7 L# r$ ]" U# G$ Q
  286.       Fclearf(".\\checkversion.dat");8 F% s* R2 N) h, q% f* t
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 K. v) @; l) g* s
  288.       if(UpdateLocal.size())
    8 \: [* q6 ^0 f# O. m9 v, t) V2 t
  289.       {4 p) L& C; D& u+ C, v& k$ G+ d. L
  290.         UpdateLocal.clear();
    ; O+ p) R! F! O* m
  291.       }& r2 E1 O+ g( J
  292.       if(UpdateFile3.size())1 @/ T5 e7 H' P1 m& B
  293.       {( t$ Z! q' T* ^# n5 A
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! D$ R' w9 E$ ^& Y& K; C; l  M/ J
  295.         {
    ' ?- n( p0 {) E. ?4 D; }) W. L  P
  296.           file=(*p).second;& I* m/ e( @* `  \; h6 p
  297.           free(file);
    6 _3 T. i/ l- y- J% r4 v( g
  298.         }2 n1 k4 d, L% D" v& Z8 [5 S
  299.         UpdateFile3.clear();
    / E  k" u2 ~: g: C- ~; R
  300.         UpdateList3.clear();
    4 E( b8 m  A+ P6 T; G; o) h6 n
  301.       }
    . N5 s% g6 y' x- y7 r
  302.       if(UpdateFile2.size())
    ) W& |* \* G/ p8 B: \$ S7 @+ ?
  303.       {
    * d+ U' |/ Z0 |% y$ S2 e" b
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 p- L. M. X  q) L0 T% a+ ~" ~
  305.         {( N1 X2 C4 Z  U3 Y) M8 r
  306.           file=(*p).second;
    8 v+ g- m+ j  W" m+ N/ y
  307.           free(file);
    & v* k  v+ R, j% D: B$ ~7 Q
  308.         }4 Y+ A+ K0 T3 _% @+ t( o4 ^: s
  309.         UpdateFile2.clear();
    " ?) r0 v4 {2 p/ B/ ]
  310.         UpdateList2.clear();
    ; [- c/ `& P' p) ?
  311.       }& B/ W; R3 ?# V" A+ [
  312.       if(UpdateFile1.size())
    + ~& R. z2 \* Y3 r- z/ u
  313.       {
      m' T1 c0 M- z+ n; {
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      k0 @- }; b8 n+ n' X
  315.         {$ A! ~5 U! R2 k8 w
  316.           file=(*p).second;5 H3 ^' x8 O: E8 m% `
  317.           free(file);. s* a' Z" l4 i) N5 ]" Y
  318.         }
    % F+ p2 g6 }3 p% c* ^2 f, ~. t
  319.         UpdateFile1.clear();( H5 h* |! s% G0 v0 `( A( q
  320.         UpdateList1.clear();* K  W* Y/ R7 Z2 g& X/ l4 ]
  321.       }
    8 g9 R4 Q+ f0 I: A! @8 L% `& G
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    # k6 |) t. Q' o6 K$ _' p) L1 G! G6 E
  323.     }
    + n7 [2 C3 W4 B8 i+ Y4 O' F
  324.   }
    . Z5 l$ Q& @4 y2 W/ h5 C$ @5 v
  325.   return FALSE;8 |8 C( y+ i7 b0 V- ?1 W5 P; h
  326. }( j* m% c+ A1 l' a* W+ Q

  327. 2 E0 J4 _; z) \' Z8 z4 d8 t- q
  328. void CRevAppApp::ClearAll(void)3 g- `* C6 x* [( Z/ r: _
  329. {9 e# H: u% V* D. i
  330.   LPUPDATEFILE file;* b' ]+ h2 f* \7 f7 H6 _/ x; @
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    + G9 e1 Z1 E8 M* F- }  k

  332. % ^6 s4 w4 K! s/ E! T& ]4 M
  333.   if(UpdateLocal.size())
    % R( D# Q- R3 }, D9 B
  334.   {
    1 H4 J# r" ~6 Z
  335.     UpdateLocal.clear();8 b- o2 k' I7 d  r
  336.   }& F/ w% X* S4 r+ R4 z. }
  337.   if(UpdateFile3.size()): F5 B8 @" S/ A+ k+ h% {
  338.   {* ?( T, j# D- p7 T' |; b# V, y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% R3 b3 [! `! i7 G2 t5 R
  340.     {% j( E3 V7 b1 K
  341.       file=(*p).second;
    2 S4 j, ^4 J% o- U. ^
  342.       free(file);* c0 C% r2 l) |
  343.     }
    4 W' E4 F  ~: o3 ?5 r( l
  344.     UpdateFile3.clear();4 s3 Q. K5 x7 z- i3 ]' M; d
  345.     UpdateList3.clear();/ y$ ^4 [# C# y8 \/ i( b- F
  346.   }
    - a$ W6 F, }9 n/ F/ [4 J
  347.   if(UpdateFile2.size())! T& m6 R" n2 h' l- A9 i3 K3 J) g
  348.   {
    ; x' L+ c# g' p7 |
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), g* q% L* W+ V" J# }8 z: A
  350.     {
    4 ]" C; Y( R# b; w' O9 z. i
  351.       file=(*p).second;
    " m6 c! J5 I7 T0 B/ ~6 t& S
  352.       free(file);
    . n+ a$ S6 {& ^+ x
  353.     }  O: n+ c: H1 H
  354.     UpdateFile2.clear();
    4 ~; f2 S8 ?" ]- L$ v( j
  355.     UpdateList2.clear();. w  g7 `+ ~, K. H& X$ j
  356.   }' k+ `' n* B0 ]2 `: z+ h) A  v+ {
  357.   if(UpdateFile1.size())
    ; u8 T  G1 }/ h: U; E+ V
  358.   {! H. {: K' s  e( u: ~- v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 ^( p, y9 \  I. h
  360.     {5 v. X& F5 x. Q% E4 o; }) x6 p
  361.       file=(*p).second;
    - F7 W9 Q( m' o+ l5 c
  362.       free(file);6 c  ]3 f  \, h( ^; E& X
  363.     }9 z0 d% a5 p) N% [* z! s
  364.     UpdateFile1.clear();
    4 e' L8 K" S& _* n$ i4 k
  365.     UpdateList1.clear();
    ; z$ x5 q' W$ w4 u% _
  366.   }2 A  ]% {& z3 W- Z' E# Z
  367. }  ! P1 b3 y# W! C* `/ J
  368.   4 @  y0 W! r7 _' \
  369. BOOL CRevAppApp::CheckLocalVersion(void)9 e# j$ B5 a; z& Q) C
  370. {
    7 ^6 Z: T; w- T; ]7 |. B
  371.   int c;
    4 S: f( V3 H# G6 m
  372.   LPUPDATEFILE file1,file2;8 q) F. H% [) u, V& [0 @, r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 s! L7 c- `; f  N" f
  374.   std::list<CString>::iterator l;2 Q: h; y; }* R; }
  375. / q% \+ R& o& q8 F
  376.   UpdateLocal.clear();
    6 @# l1 H9 o; _0 [0 a; ^9 t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; [, m% ^1 S; m- w6 T; i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);8 [$ l0 R" Y& b+ q8 x5 M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + Q6 F; e* f4 \( }7 |, i1 |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 g- r, a9 g9 y2 C9 C. A
  381.   if(UpdateFile3.size()). T8 a# B2 Z1 J* I7 Y0 z
  382.   {
    0 m+ s: K+ }" ~3 F
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' Y7 l, G, \0 V1 u+ }( v
  384.     {
    5 d/ E% n- C# v* Q
  385.       file2=(LPUPDATEFILE)(*i).second;
    - T; c- ?  L- K! v2 M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ |5 m7 p8 m3 t  l+ g9 s# A
  387.       {0 K, g9 s  F- |0 l2 U+ N& L
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! d$ i1 a. D3 \+ {4 {
  389.         file1->vers=file2->vers;+ V+ s% W% y! B2 k% k2 F+ {
  390.       }0 E% j+ V* n. j$ i% h* @( t
  391.       else4 l' P7 e+ f7 j& Y% z+ f
  392.       {
    ) A4 }/ f4 x/ K1 ^. _- A1 U& ]
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 e, F1 |; N5 ]2 t5 Y" ]5 O; E5 T
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    0 [! W* x" K3 Q) t* s6 J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));: `1 ?8 J  J2 X) m
  396.       }
    " C0 f( ?% D+ d, T, y
  397.     }, Y- n' M# a4 v5 \* b5 p. ^' }9 H
  398.   }2 p  p+ S8 W/ H$ q8 e0 {
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)# |6 e2 k' \$ ?- B' A  M& h4 J4 b
  400.   {
    - M1 Q$ Q$ M& J. v5 w# z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 }2 T" {# H# R) r) R  F
  402.     {
    ' l5 `/ w+ a: I
  403.       file2=(LPUPDATEFILE)(*i).second;: G& V) _+ Y4 N2 ]0 t
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 [0 p* b5 a) w0 J( ^( d
  405.       {$ {# S7 ~: F$ r
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 t; v. s* C- X6 I, k7 i0 Y. m7 h
  407.         if(file1->vers!=file2->vers)
    3 e/ c  c! _, J4 ^) z  u
  408.         {
    9 X* ]+ i9 `- |: k2 _, Z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" F/ z$ q; n% [7 \/ H
  410.           c++;
    5 T0 j5 z9 E- V
  411.         }, P+ o8 X. j! C% c/ _
  412.       }9 k8 x0 {! n$ N$ e2 D+ y. b3 H
  413.       else
    0 d7 ^, _+ U% k6 X4 e+ T, k
  414.       {
    % I3 C0 Y3 i1 ]! J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));" v, a& C, T5 ~4 k2 a4 w* g
  416.         c++;
    ; n# L6 {# b, n  m% L# l  T
  417.       }( B: D8 t& ^& S; t! a4 c
  418.     }2 C$ `3 v$ ?3 V8 {( C& B
  419.   }/ }' x( n7 g0 @+ M
  420.   unlink(".\\DownLoad\\update.txt");! E! n  `. S% i! G
  421.   if(UpdateLocal.size()) return TRUE;
    + c- n6 |/ e* _
  422.   else                   return FALSE;
    0 C8 j% z& J' T! l" B
  423. }8 `/ p, C) ?/ c7 F
  424. 1 i% T, O8 E8 b' w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ z5 B4 \6 D9 o, c2 {# P. A
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ R* O: \0 Q& a' J* O

  427. , d3 Y6 p+ I1 e3 g. p  u

  428. & \" L1 G5 l4 P$ T( }

  429. $ w9 E' t( s8 U+ ?1 J; d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 Y: S' m0 d5 V4 ]: Q
  431. {! y4 C: G6 r) G  J# b
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;: q) \7 U) o# j5 s! @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    3 r2 O) G% `. r+ h
  434.   {3 C! B# W$ ?  A5 G- ]* P6 j& K
  435.     char szLanguage[50];9 ~$ D( Y, J# ]/ v; l4 o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    : b4 M$ V) N. O2 V
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 W- e7 x8 w( Y; w: H! v
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( X, I2 ?, X9 H4 r1 ^( N
  439.     else                                   m_iLanguage=ENGLISH;' d; l3 ?9 S8 ?6 p- m. b
  440.     char szRegister[100];" V: Y6 `& v1 d* Q# K! ^7 T* E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . x) u5 e4 I0 t9 {' ]5 H3 p  \
  442.     strRegsName=szRegister;
      x; a! f6 U7 I4 p4 T; @
  443.     char szPatchURL[100];
    ) [+ @/ c% j1 i8 p' |+ ]5 B; a/ e
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; j- t* x6 i6 h+ p1 f. a  c- F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / D# i9 [1 P+ @& n0 {
  446.   }
    ! A; @2 q% N9 c' y" y# w/ }
  447.   else+ `! ]+ }0 i4 c( O: i( b1 J
  448.   {
    % d! U$ Z3 L' Q- J* l: P
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / J$ K2 n4 ~! |  O
  450.     strRegsName=DEFAULT_REG_URL;
    $ z: w0 s% y7 v4 ?1 e* L
  451.   }
    - w# G/ }3 V; e
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    2 I+ a5 X" l/ [* Z' d" P
  453.   {7 \  R+ \' Y. a# Z7 t, i/ h" V, V
  454.     char szIP[50];
    ) x/ u# y( X, |+ b
  455.     char szDIR[300];, u3 {0 q% r7 d7 |9 N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! P/ V' ?! C" q' U/ \
  457.     {
    * k$ p4 [' u6 t. g7 a" X- @- v
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");3 ?: k7 H1 O' J/ W- w9 u9 p
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    1 t! f0 D- |! ^0 |0 X$ o& ^0 X
  460.       strHostName=szIP;
    ' O, N% ]8 S) ^2 e( K- r3 s
  461.       strHostPath.Format("/%s",szDIR);$ `7 w: x: L1 b+ b5 s. s
  462.     }
    $ x( P+ [, K% [/ N9 ]5 Z; a6 _
  463.     else
    : Z, D  G  r, @$ p: I
  464.     {7 X) H5 _# {! h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)1 c5 L: E6 ^2 G, F4 |5 ~" V7 I
  466.       {
    . \# _6 w% |- q* [1 W0 P
  467.         char szLanguage[50];
    ' \7 ~' n$ j3 c$ c. t, m$ R3 A2 t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 b0 Z) H& R# o$ R8 Y9 E+ \+ k
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 I- f" x2 {# V$ E3 P8 Z% m4 b
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;! h) ?- Z4 Q2 D2 w% d, [
  471.         else                                   m_iLanguage=ENGLISH;
    8 H3 c4 k. i: N$ `
  472.         char szRegister[100];
    - y- e- n6 y$ z: o; N) F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: l2 ]5 _7 X, k( G+ a! \5 m
  474.         strRegsName=szRegister;8 T* M4 p# Z" E6 m, X+ C
  475.         char szPatchURL[100];: w, {' J$ U2 G$ F% _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");+ l' m/ \% A' n7 C* _/ @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # E# J; j# s+ D0 G* e6 i
  478.       }8 }: [2 ?8 O! I2 m; @
  479.       else: B* s1 M+ C% o3 b2 H# b
  480.       {  ~# k( m( U: Z( a5 a  r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& A) Y2 H8 U9 u: z0 I9 o2 M+ a/ g3 C
  482.         strRegsName=DEFAULT_REG_URL;
    7 x/ o& Y/ @8 r/ i4 V& [
  483.       }- e! h- i4 t0 a6 G+ p& \3 _4 Y
  484.     }+ A8 T- Q4 u- v5 L/ h
  485.   }
    * w- |3 V, k& z8 D4 j  _' F
  486.   return true;
    # l8 b  l$ N' Z
  487. }
    $ H0 g# M# ~+ V: D& I/ P! G! m  \

  488. & y/ J  E' T1 d8 Q2 {
  489. #include ".\ZLib\unzip.h"
    # G9 l6 e- P' c- C0 f+ W4 }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);& q& ?/ h8 t# _. B
  491. /////////////////////////////////////////////////////////////////////////////
    7 J4 k  l. n, r7 ^3 M
  492. // CRevAppApp initialization" K! B% B0 B3 I5 m
  493. ; r) d  \5 k4 e: u2 c; G. `) N: R
  494. BOOL CRevAppApp::InitInstance()
    * ?, B' l9 k2 E1 m" ]# f  Y/ S
  495. {$ z: _  U4 Z0 Q" ^+ Q" F  n
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( u: `, n, c9 O9 k2 p# L

  497. 6 b% S' A2 L1 Z
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& K8 N$ F, }, O7 W: g" ?! a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 z9 W# x; y7 a4 A  L; L
  500.   {
    0 |6 Y" K* A8 q* t  V7 e9 C
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    % Q5 P) f, h8 ^, K
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ' s" z, g- W( x! g+ b+ K
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))0 ?2 ?( ~( _) }
  504.     {, H  c6 b% y5 R( ?7 x
  505.       strcpy(szPath,szPathTarget);% }  t, D" C$ H! k( y7 w
  506.       SetCurrentDirectory(szPath);
    ' W$ V) D/ p) E9 Z5 w1 y$ V
  507.     }
    . B& g9 ~* W, W6 b2 P% e! I
  508.   }
    3 c: P3 q% ~8 D
  509. #ifdef _DEBUG" J9 M. k0 C9 i  C4 u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 f( p% a0 `( t3 h% X
  511. #else
      Q5 y2 M0 [7 v  t, p
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 f6 ~/ O' I7 s7 Q( ^; g( k# r
  513. #endif
    ) E" {. E% ?9 G4 u3 K% K
  514.   {4 I6 X3 |' T8 F; W$ ~" }
  515.     char tempFileName[MAX_PATH];/ i$ w5 e/ S6 ?1 R% e3 V$ V
  516.     strcpy(tempFileName,szPathSource);; _, o$ h* o  s! a. b9 D' ~3 D
  517.     tempFileName[strlen(szPathSource)-12]=0;/ B! H# K7 M+ p6 \3 P
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( z! D2 h. q: S$ c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 ^' i/ B0 Q& O1 f
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);- Y+ B0 z" c1 [$ {% V) }6 L9 x7 C
  521.     return TRUE;
    ; T0 B  q# A3 ~" o7 A
  522.   }
    8 K  V8 x2 l, w& C$ K
  523.   // Nuke 0118: Delete run.exe
    ( f$ K! |1 `7 B
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ r$ l1 e9 h+ q: c2 w1 E
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& B$ M* Q& [/ ?- O5 X2 \
  526.   if(!ReadCfgFile("Config.ini"))) i! `2 E2 ^1 r% T: z7 b2 H
  527.   {, l; j/ M+ z! }4 C
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);9 }' G& u& B7 _$ k4 R2 U  T
  529.     return TRUE;% b* M  q/ v4 D6 o: ^4 ]1 J
  530.   }( d3 ~/ X  t, O' Y1 ^* S' X
  531.   HANDLE mutex;: D) q% H  }& J4 @
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    2 r" g2 u: m/ d, o8 g. {% o: i
  533.   {
    2 x* F3 o4 E# Z/ t. ]0 L9 o
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! B8 I: ~3 g6 N
  535.     {
    ' V2 B  B% W, B5 |3 M0 k
  536.       CloseHandle(mutex);
    # ^8 m3 y* y; r6 n) Q; A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & K; W3 q, l+ q1 b/ `
  538.       return TRUE;
    5 m% Z" @) q+ n' W; |- F% n9 z
  539.     }
    ; r2 n0 D: n4 r+ R8 c) X
  540.   }  
    $ F4 L% Y" |  ^' J9 X
  541.   CloseHandle(mutex);) f! g: ~, n1 Y" O& E

  542. $ k8 f! I$ u7 v% d/ `) r+ t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    4 G' P, N  W, G/ N% m

  544. 1 \) z8 c- R$ G. x: g8 ]' Y
  545.         AfxEnableControlContainer();9 H) G2 F9 B. w! q0 I1 }. E

  546. " |7 H4 p2 w2 L! R/ Y
  547.   bCanUpdate=FALSE;
    5 f& M+ r! [" O/ |
  548.   dwStartUpSteps=1;& S6 w- ]+ A' w; ~$ \
  549.   dwProgramState=AP_NOTHING;- X4 J1 j1 J7 l) G7 D* ^
  550. / j* j( R6 ~( E* y5 g7 o9 G
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; c3 D8 g+ i( r4 b
  552. ; w( \5 ~( T! P9 p3 G) p
  553.         // Standard initialization
    & w. f7 e* F8 t' u/ K6 @  [
  554.         // If you are not using these features and wish to reduce the size! E/ f* G! |% O( |+ C& K- x
  555.         //  of your final executable, you should remove from the following
    1 P/ P) q* ^5 r8 L! a3 P0 ]
  556.         //  the specific initialization routines you do not need.
    4 P. s2 {# G, t2 Z) g( O

  557.   X: N) X2 E/ k
  558. #ifdef _AFXDLL
    8 I% F+ K' B) L# R( n/ D* |
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    - H% o9 p% Q4 Q( r6 }
  560. #else+ t0 ^3 _+ a* K7 E7 R1 ~
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    & h, k! a: o( a' ^. F+ f9 f' d+ n
  562. #endif
    8 d8 r3 d- y- g( M5 Z  L& @, V

  563.   ~5 C" [* B+ E  y; Y$ h# I5 q
  564.   dlg=new CRevAppDlg;& T% M) J( A; ~
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    $ F5 b- q6 e% ^6 E' b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);5 n6 a% B. y& l
  567.   m_pMainWnd=dlg;  A7 N4 q8 t( {
  568. 9 I) r% N- j1 c) v
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);& D2 M* p9 q% o1 z& p0 E
  570. , g) O3 R# L: C- F7 [$ ~
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - b3 u% C! [) S8 g7 V
  572. //  ULONG_PTR gdiplusToken;
    . j& A8 W- N/ J/ h9 ]; d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 k6 J1 v, e& }  @% d6 e, e( }  }' F
  574. * ]3 t9 T  x& b! w. G
  575. //        CRevAppDlg dlg;# E  X& E" _1 k7 z
  576. //        int nResponse = dlg.DoModal();
    : N# b5 \! ^0 I8 M( E5 Z8 t
  577. //        if (nResponse == IDOK)+ m. t9 t) u- K3 d0 w/ R
  578. //        {1 V7 Y5 z- Z; u- E: _% y) a
  579. //                // TODO: Place code here to handle when the dialog is# S: n: w% m  H) h( |: v  m
  580. //                //  dismissed with OK# ?+ {. y" K# D5 X. u6 r
  581. //        }
    6 t- ^7 o7 m# \9 w3 ?$ F, I0 s) P
  582. //        else if (nResponse == IDCANCEL)
    8 ^8 ^- p" j7 N0 L
  583. //        {
    ' T: |7 D/ c# M/ M3 Y$ d$ s0 P# W4 S
  584. //                // TODO: Place code here to handle when the dialog is
    9 [$ _6 T8 w" `  _# `
  585. //                //  dismissed with Cancel0 m) y4 M$ P+ m
  586. //        }8 m3 u! M4 H7 K4 t
  587. 4 |2 g* D& S8 f3 J/ W6 k; j
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    5 _4 q5 }$ {7 Q+ L% u9 m6 n, X
  589.         //  application, rather than start the application's message pump.# `: w1 M& W9 `; [4 k: I  H" M- o
  590.         return TRUE;
    # Y& H  ~. `7 c2 J% j" k  T
  591. }
    & @- p  H) w! t1 l: Z( `! X9 J

  592. & {( n4 C8 e7 u
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / ^8 |( N6 z# N* C
  594. {
    - Z" i" n& D, W0 K; X9 b& L
  595.   int i;  C7 M0 T2 R( J1 o: Y, ^0 J# a( E
  596.   char *szRet;
      a/ S$ y' R+ I

  597. / v5 Y- J5 @0 Y8 L3 h4 V
  598.   if(pSource) { itoken=0; sztoken=pSource; }: {) C# U2 t2 t! S+ Z1 d
  599.   if(sztoken)5 M7 e1 k$ S! K" \
  600.   {
    7 m/ [/ {6 {2 C. k0 n
  601.     szRet=&sztoken[itoken];
    4 ]3 ^* O6 m3 d1 e7 f; R
  602.     while(sztoken[itoken])/ L& C( d7 a# m! h
  603.     {- Q( z5 b1 Q4 w" T& b! ?; I! F
  604.       for(i=0;i<(int)strlen(token);i++)
    4 M& M, [0 N& r+ z
  605.       {
    0 m5 u' T9 R( U) B7 ^! g& E6 |1 r& x
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 y0 Y* A; M% r6 d% e% z- u$ P. [
  607.         {
    ; _7 D% P1 O% k
  608.           sztoken[itoken++]=0;
    7 O' w, P: T+ l7 {  \
  609.           sztoken[itoken++]=0;9 C8 P- K8 E2 z5 u- H* _
  610.           return szRet;
    7 z# G' Z9 i( Y# U. P# r" N6 C
  611.         }' K4 K, E- e3 c1 |' {
  612.       }1 G4 j+ F3 S! I9 o3 X3 M. K
  613.       itoken++;
    ) M, z3 m  h  \1 V/ K2 C$ b% `0 P
  614.     }' C/ k8 V, q4 Q# m5 N
  615.   }* |; R& V6 y: Q
  616.   return NULL;
    ) P: i2 R5 k. y' z
  617. }
    , {" V4 P7 G2 P7 K2 `( y1 j4 W* t
  618. 9 C% R9 Q& Z! a0 n" m. G' G
  619. void ProcessProc(long Total,long Current)
    , ]3 o# z+ A# |! f; C
  620. {
    9 x* H2 Z$ R; M
  621.         MSG msg;
    : _" D0 E1 T4 @4 t/ u4 e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
      J- ?8 d' R% {5 b( f: h- L9 ]- m
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 \0 ^# D; I) k1 S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))+ N: K$ o9 W( Y% n, L
  625.         {$ t: {( G) I; U+ @! @7 D, X7 X8 s
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . E$ x: @- \% H2 Q7 O+ Z+ [2 ?
  627.                 {
    / x. g6 X2 Q8 z( v+ ]9 P  N
  628.                         return;
    $ R8 T, m' S0 n5 y+ D4 @0 C
  629.                 }
    ' z8 Y7 D) z; z$ Y% ]
  630.                 TranslateMessage(&msg);" P9 y, k" g+ P, q7 g
  631.                 DispatchMessage(&msg);
    5 O, A0 O4 o; u- h; N2 W
  632.         }       
    1 q& `2 ~- \; e7 A$ N
  633. }
    , `  K" X8 B1 W% N) e# S5 [4 q

  634. % ~' d$ D0 ]- O2 b6 D! w
  635. BOOL bFirstChar=TRUE;
    + U2 R9 x* ^3 f
  636. : I4 j7 R- D0 V; t& r. o6 _
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 @! |6 M, q1 m' i
  638. {$ g! Q$ |, d  x5 ^* j$ E
  639.         // TODO: Add your specialized code here and/or call the base class
    , @2 H% Z: l3 }8 g: g  c  |' i' a
  640.   switch(dwProgramState)
    9 B) A  J& b! r) ^
  641.   {
    " I( e/ k: E5 Z4 P2 @/ v
  642.   case AP_NOTHING:
    , x/ Y5 y; W0 m) i8 c
  643.     switch(dwStartUpSteps)
    8 h3 w$ D4 U5 W
  644.     {" G  ]# @$ F* [0 i4 B7 G8 Y9 z
  645.     case 1:
    : z  f1 J+ c4 q
  646.       {7 O8 c7 z9 S. z9 \1 p
  647.         int i;) s' x5 d- W3 ^# U
  648.         CDC *pCDC=dlg->GetDC();# F  Y* L! f8 `1 ?  G& A
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' X9 V) C& }2 T( b6 s
  650. //        Graphics graphics(hdcwnd);
    - G" s5 J8 O* [5 Q  W: P, S9 t
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");' K7 l9 o0 C7 V
  652. //        INT iWidth=bitmap.GetWidth();
    1 P% w' G4 ]6 Q1 C6 [8 ]
  653. //        INT iHeight=bitmap.GetHeight();
    # d; U5 v! I# J5 ~7 v0 w; M% U
  654. //        Color color,colorTemp;1 w! p+ }: S2 y5 O+ U( u9 Y4 `/ q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . q3 H( q$ x; ^# f; [" m8 E6 X
  656. //        {
    ' h6 @; p2 r8 c8 O6 f- K
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    $ f1 ^( J7 W  f, s6 \
  658. //          {8 J2 r. Y7 Q$ {: g: W; _. R
  659. //            bitmap.GetPixel(iColumn,iRow,&color);, D6 X4 P7 Y4 n" `5 N1 o
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 G* b( y/ a+ k' ?
  661. //              (BYTE)(255*iColumn/iWidth),6 s! j% E) y. K
  662. //              color.GetRed(),
    3 f6 ~! j; K, U! f) {% u
  663. //              color.GetGreen(),( {8 y/ s7 ]( Q3 F
  664. //              color.GetBlue()));
    / ~: q3 t% l3 g# [8 X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ h( K$ ~7 E0 D" y8 o/ h
  666. //          }1 D& C* c8 i, s( h
  667. //        }
    5 g) {9 Q! S" |. E" `1 M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! |7 \, h9 F! r) P3 V% v# p
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ g2 P* X! d5 ^. U% N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 i2 O& Q/ [+ S2 @
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # |/ E) I1 p$ @$ U. [1 E
  672.         for(i=0;i<240;i+=8)
    , B$ X! l. c1 H/ h" `% j* R3 n
  673.         {
    7 n  i6 G3 ^' E2 |& _) u2 I+ Q* _) o
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 c6 I- K+ }  g% I1 ~  N3 O
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 d9 b3 A; d/ X6 k$ K. J
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( b1 a, @1 u; f) x* {
  677.           Sleep(33);
    3 ^; m0 u6 f; _6 P8 R5 j, J
  678.         }1 j' [2 C1 P' |5 ~) w$ m& W: \
  679.         Sleep(1000);) q7 T) c" Z6 d4 y2 M) ?$ S
  680.         for(i=240;i>0;i-=8)% K* i( |6 X! n  H  u
  681.         {
      x" O, F8 o7 c  e- `( d6 N( ]$ U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; \0 e: }+ T, _
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. I) \& T( Q% c5 e$ Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" _$ v; b+ r9 P  ?6 G9 E& {
  685.           Sleep(33);
    - ^; A& q% ?: W/ X* p3 x% H+ j4 ~# E
  686.         }
    & w( a# [- w! u4 d9 R& [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    1 j% J, n& C6 V4 i
  688.         dlg->ReleaseDC(pCDC);+ n0 C; {0 H( ^6 H7 V% k
  689.         DeleteDC(hdctar);
    5 K; j5 I5 e( ?) a7 @
  690.         DeleteDC(hdcsrc);
    : }% O3 D+ s& ~! |! O
  691.         DeleteDC(hdcorg);
    ! X$ c4 o9 s" T; o* t0 d) A
  692.       }
    9 U# d9 t2 {' Q$ C9 T- {) n
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 R/ a, I: D( B, M$ Z& k* [
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    4 g# `4 ]9 j9 m9 L5 ]# O# G- e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    * X/ j* C; n4 q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    3 ]  w1 @7 e) S3 E* P
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" s0 C9 y. W$ Q5 ~. b+ F
  698.       if(!Dn.Connected())8 v% N* y3 S& X, N% q+ n
  699.       {
    7 E6 T' n( H. ^- _
  700.         dwTotalFiles=1;
      x3 \: p1 ?) W" r4 u
  701.         dwDownLoaded=0;
    ; U' c4 b2 J% s- v8 U, `; A
  702.         bSilentStep=TRUE;
    2 n4 Q* Z* f* p
  703.         bCompressed=FALSE;
    $ h1 ]" c3 {2 q$ Y% u
  704.         strExtLocal.Empty();
    6 U2 o/ [; ^% u8 p
  705.         strFullName="readme.txt";
    * T' V) q) E0 y! d1 D& Y
  706.         dwProgramState=AP_CONNECT;& }4 I4 j" w+ Y* p2 ]8 Z
  707.       }
    3 s. m1 {1 U8 R2 v) B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 X1 V1 f$ ^5 `9 {) {( a, F4 H
  709.       dwStartUpSteps=2;
    8 l6 C) R; A! |5 z) E( W' K9 q' L
  710.       break;( _+ Z* j7 a# s! U+ `
  711.     case 2:
    2 T" ~' [! j6 e5 c7 S1 P' q: b
  712.       {
    * U7 A. [1 h0 r  F4 H
  713.         int iEOF;
    5 G+ T( Q2 S5 ]. O
  714.         FILE *fp;
    . x# f1 {$ |8 u" k! j7 A! y
  715.         char szString[512];
    ) m- ?; T4 x6 w7 D9 t
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");, {9 Y  D+ f# P; Z7 I# a8 s
  717.         if(fp)1 X5 {3 p; B' v
  718.         {
    . H' t$ b" _" U; i# B" @; {' o- P
  719.           do3 Y/ u; b' |2 p# x' Y0 t
  720.           {+ Q$ ^5 `# j2 l8 _
  721.             iEOF=fscanf(fp,"%s",szString);5 M" U1 p/ E- o) q) K
  722.             if(strlen(szString))
    . {/ }% A/ z  L& p6 u9 F0 n' G
  723.             {
    3 Z+ s$ b' ]9 c+ A+ x" m. _! \
  724.               if(bFirstChar)
    . z0 s/ z: ]4 q6 E% b2 V2 k
  725.               {
    : M! K* R$ d, l6 G
  726.                 bFirstChar=FALSE;$ e( H* j: b" M4 L: G# _
  727.                 bConnectIsBig5=FALSE;
    ' [# ~0 p3 `. M3 Q5 [- l: P
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;' M  V7 h# P1 B2 x( n. D6 p# W
  729.               }4 Q6 v' [8 R( V/ }5 f: q" x
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));" f; J6 S/ O' z1 V5 c# n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));; @4 w  l! S* w5 x7 V
  732.               dlg->m_ListText.AddString(szString);
    8 S- \( k: D. }9 f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  h' f% a# S) {; {* p) t7 ~
  734.               *szString=0;- s1 `5 |' x- _/ O
  735.             }
    ( W$ Q( v/ z! u: Y$ C; n, ?
  736.           } while(iEOF!=EOF);9 s* O  W" o. U  K0 ^' `6 _- @' s, z9 j
  737.           fclose(fp);7 Z/ z$ f6 n, J
  738.           unlink(".\\DownLoad\\readme.txt");4 o! \1 s1 ~" J; U! ^
  739.           dwStartUpSteps=3;
    ( O; E  b# R6 h6 ?
  740.         }
      T* {3 Z1 `( o$ `
  741.       }5 z5 P$ ]( B4 \3 Y* @
  742.       break;
    + c# f- E# y: l
  743.     case 3:
    ; S. o' V/ \& p9 M) u! o9 V0 r" t
  744.       if(!Dn.Connected())! ], J2 N- K1 ?, B' p' h! Y$ {- v
  745.       {
    : e& P: ]+ b& V
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 o7 ?% r% a$ h8 Z, g8 n# d1 ?
  747.         dwTotalFiles=1;
    7 x, a5 q8 P; s+ q
  748.         dwDownLoaded=0;' D  a5 v# X8 K; s2 |" u& T
  749.         bSilentStep=TRUE;
    - X8 I) }: t" W
  750.         bCompressed=FALSE;
    & D3 `% L# e1 U2 s2 L0 ?3 t
  751.         strExtLocal.Empty();
    5 G; w* w9 a8 k2 m
  752.         strFullName="checkversion.txt";! X, D9 v! O! s1 F" L
  753.         dwProgramState=AP_CONNECT;
      I4 ]9 x7 @+ \7 y0 ~* I8 J
  754.       }* D: T2 J7 E3 c# y
  755.       dwStartUpSteps=4;. z: J; F, R5 v# X& R7 x
  756.       break;, O1 Z5 I$ W2 C: Q) B6 |
  757.     case 4:
    - f) k- D" s6 I1 z" M
  758.       {
    6 f" w" N9 h' t) ~) K8 y
  759.         FILE *fp;
    , V: V: B' l* e- Z7 r, q
  760.         char szString1[128];
    9 D$ u7 M; q7 M9 |; q+ j! R2 Z% r
  761.         char szString2[128];
    / L: U* o0 k$ @) X# r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % e% [. L, V3 l) Y
  763.         if(fp)
    8 I# \+ o% F. f0 v% b5 Q
  764.         {
    $ h( t+ d- s) m. q1 r
  765.           fscanf(fp,"%s",szString1);& n+ W9 Z5 E$ x$ `; Q
  766.           fclose(fp);" n+ J& O% E; R; h; t0 x
  767.           fCheckVersion=atof(szString1);8 K, \- U+ D6 D* {
  768.           fp=fopen(".\\checkversion.dat","r");
    2 R: d' B; E1 c2 k( |# _8 o: N1 Z
  769.           if(fp)
    6 ]' g' n) U2 R" ]0 k
  770.           {
    ; X1 C! L- c8 C$ Y
  771.             fscanf(fp,"%s",szString2);& N7 Z/ K: i9 A( P
  772.             fclose(fp);
    & R3 w7 f, u4 K3 J6 l9 x
  773.             if(atof(szString1)!=atof(szString2))2 r! e* ]" F& w; H+ G6 X8 m
  774.             {
    + R4 A. m' ]. n( ]
  775.               if(!Dn.Connected())
    ; t; v% {2 A# z, w# k( ?* r* _
  776.               {
    ! p% N  Q$ r% F6 }
  777.                 bFirstUpdate=TRUE;
    0 b5 `2 b2 [* S- j9 n* M
  778.                 dwTotalFiles=1;
    3 a% B, z' [! b6 ]8 M6 ]( y
  779.                 dwDownLoaded=0;) w! _& R2 A9 ^6 r# C
  780.                 bSilentStep=FALSE;
    # @! O) K  G# S4 Z$ p5 Z- y
  781.                 bCompressed=TRUE;+ v9 Y% [+ W! d% M, m/ I7 o9 ^
  782.                 strExtLocal=".\\DownLoad\";
    % O( h: d$ j/ b% u  f+ D7 V
  783.                 strFullName="update.txt";
    & h( E# T* F5 l: j: f) g
  784.                 dwProgramState=AP_CONNECT;
    . ?4 `6 j2 B; X, ~3 P0 E& ^; \, {
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  a4 P9 m1 M+ Q
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 E, t) @7 O9 |) ^
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * M- a; Q7 _7 s7 O, j% ]
  788. + q3 j0 ^7 N2 ], v6 ?1 ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ ~) Q/ F( o, y$ a
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 y# B! c" s& K* y9 R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    + _9 _8 Q" r4 N+ ]4 C
  792.                 {
    $ A# P; Z5 d9 R2 [+ p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    , b+ D8 e/ B: {& v! [, j
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ; H( X$ Q( Y# A+ Z  s
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ; k; y# J& f' I: k$ v
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! M& M' L+ g  D* d2 z9 G3 e
  797. + r( }8 ?4 X! F6 V4 j. j) Q3 S
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 j7 f/ G1 J( g* l+ P9 @/ r3 _
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");! V8 ?' ]7 T7 G) t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: |0 l: d/ G) P$ d/ L$ X4 F( [) I
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      x  ?0 I5 q$ G. D$ ?1 Y; r- K" j( r% a
  802.                 }
    & ^) J" \9 Q* s, r: `& d
  803.                 dwStartUpSteps=5;  q. V/ b/ H$ t
  804.               }
    3 B1 m1 y  F& {9 r% {' f7 F/ C
  805.             }3 d. ^0 J! w3 i
  806.             else9 c+ r8 w/ ~8 }* q/ T
  807.             {0 P9 s# Z6 ^9 i6 O* P" j
  808.               unlink(".\\DownLoad\\checkversion.txt");
    5 R+ n& Q2 n0 ]1 m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");2 i& s3 p, m8 s* n" @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & O7 k! [8 i* A( M+ {/ }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 s0 Y8 W! j" s( i
  812. " m/ q$ X  ^  s0 H0 e
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      l5 s) q1 ]! P; \8 y$ J( s
  814.               dwStartUpSteps=99;# u  A% H! p& J+ V
  815.               bFinishUpdated=TRUE;
    % c# A' T0 d; w. A  P  P- e
  816.               bCanUpdate=TRUE;
    ; G. h& }; j' ?6 G5 n% p
  817.             }! t* r* _# ~4 K1 m$ M3 M
  818.           }/ |$ B9 u( a5 i+ q
  819.           else
    , s, q: B& V0 ?/ i7 M  _$ ?
  820.           {
    8 q. C+ b+ c6 d- g/ j
  821.             if(!Dn.Connected())' z. s4 q# ^4 N: w1 q6 `& p
  822.             {
    6 M. N* R4 f6 q
  823.               bFirstUpdate=TRUE;
    % D$ a, [" ~3 N$ U; F! ~
  824.               dwTotalFiles=1;
    ) c5 d: ^7 W+ h5 N" I
  825.               dwDownLoaded=0;6 w8 w+ x& w, v' B- e* x
  826.               bSilentStep=FALSE;$ v$ c3 Q8 a6 [' G2 s$ z
  827.               bCompressed=TRUE;2 f& M$ E4 A' L, E
  828.               strExtLocal=".\\DownLoad\";! P. t9 U# p$ u" E# n# h
  829.               strFullName="update.txt";
    4 u) T6 L3 K7 k: D
  830.               dwProgramState=AP_CONNECT;
    ! Z4 m, e- i+ j* q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! p3 T) x8 ^# |
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 Q5 r3 E6 ]1 j: D1 K
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");$ {; q5 C% r; {! g8 r
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 P" ?; v9 F% D( x
  835.               unlink(".\\DownLoad\\checkversion.txt");
    7 z* `8 Y, O( y6 }' P9 Y
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 S( r% c/ S2 S6 L! D- G
  837.               {
    1 y- W5 M5 c8 B: z" u
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 W3 o. M0 P' w8 z! I7 }  O8 p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' x1 e& c/ X$ K( P- Q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ Z; c- O! d# C# E. \6 s
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& D: y/ t3 q% d5 Z1 ~2 @8 b8 b) `
  842.                 9 Z2 @3 a7 L- u7 O' y
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . F* n6 N# ]3 v7 _+ K7 n& F( X
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 h$ c1 s( ?7 {; L# v
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    / n" I( X) M1 |. @3 |) s
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' c! p8 Z2 E4 Q8 F* C0 C5 c
  847.               }
    - l# B* z  o5 ~6 [% I- h8 }
  848.               dwStartUpSteps=5;, P6 h' S) N2 n# Q0 ~- W
  849.             }
    4 E6 z0 B6 N1 o5 G% J
  850.           }; ]- X6 c* g1 l3 ?  J5 c6 m/ _
  851.         }
    * k& Q4 ]7 K& ]; W+ G9 a
  852.         else
    6 X/ _* `  \6 s* a; x4 b0 J
  853.         {
    . A/ p9 t9 P9 p% m+ ?0 n% x5 Z5 U( y
  854.           dwStartUpSteps=3;  \* h, P! O7 L# o+ `+ S- w
  855.         }
    ; C8 E1 S2 G% V/ v/ H' r. `  M+ H
  856.       }. m% f7 q) u6 i  s- f
  857.       break;0 o4 I  X4 `: W/ F' I1 ?% u
  858.     case 5:
    2 Z$ w2 R+ x3 P2 Y0 B8 k
  859.       {
    ! c5 y& V& r) O# ]8 @( r& D; I
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    % V. R- g, q; E: P- R! M
  861.         {* i; R% ~; f6 c& ^: b) v2 a
  862.           int opt_overwrite=1;8 M1 Y/ ~" W8 p! f
  863.           int opt_do_extract_withoutpath=0;, R, Z# U, @! x. s% i3 ]( n/ ~3 F
  864.           unzFile uf=NULL;  h6 G& u: [7 @+ a9 N% c; W

  865. , F5 m* Z& v' _
  866.           uf=unzOpen("Wsa.zip");4 |& x( z9 ~" B, ^1 ~- Q
  867.           if(uf)
    9 ]6 z. R; n" ?+ E3 G
  868.           {$ ~( n1 a5 X2 N+ f
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);- b& }1 ~8 t7 ?: x
  870.             unzClose(uf);
    1 N6 p8 j" G0 E, `
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 U9 Y) G' x3 q# }
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ) I) [* k$ H0 q3 R6 a: Q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");5 v( W% z5 `* ~0 X5 `4 R% k
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " e' j" U, {8 e; c
  875.           }
    5 |1 g* ?, C2 P# F: d2 Z' ~
  876.           DeleteFile("Wsa.zip" );$ T, l0 t; s1 f( ~
  877.         }- f: `% `+ [0 G* I5 G( q" r

  878. 0 q8 W, g6 v  I# ~% D3 w
  879.         if(CheckLocalVersion())
    ; ~- p/ D8 e% \7 T+ c! \9 Z! ^, f
  880.         {
    & K4 N* e' A' i1 s  K/ C1 l* b
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    9 w" F- e! k! P" W8 |1 z  n) C" l
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 @: b" I: E9 ]" P. ^; S4 `
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");# E1 X6 u$ v' u5 y* |6 T: h1 K! Y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- X$ M# h3 z" L; i1 T; s6 A3 r2 h
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);% U8 p- ?5 W2 L- j5 ]
  886.           dwStartUpSteps=99;
    2 _. |5 o; t, l! I2 t9 f& W
  887.         }* N3 p5 |" F$ ~7 r% Y7 o6 W9 G
  888.         else( X' \# i5 r$ U3 \
  889.         {6 {7 Z/ L9 U* I5 h* p2 ^, I
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 E. R7 W+ f: K  \; ?! a
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- \$ j4 x* F# W) D/ H8 X, A
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");, X% @4 c8 v6 a7 M' s% e) ]

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

7 f4 m) _; h% n, P* ~% C( f6 [3 l+ P2 r. s8 q: B: U: l, g

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-2 09:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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