CSUpdate.exe源代码

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

" M2 g1 h5 `3 d& N6 p" _
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' V: Z$ ~+ ~2 f; n$ _! Q* ^  t
  2. //
    , Z% r- B9 g' {: ~

  3. - f' K) r9 q4 a8 ]
  4. #include "stdafx.h"
    9 @. h$ Y5 R/ T+ I- o, T5 n

  5. 3 G  j3 d% l& S( v5 {
  6. //#define UNICODE
    6 {" Y; |( i  Q6 w" B5 E, ?# Y
  7. //#include <gdiplus.h>
    2 a( p4 R- h7 H* x+ ]
  8. //using namespace Gdiplus;
    ( i$ b/ _" F6 \
  9. 2 |. u- i) J, Y( F! _% T' u
  10. #include "RevApp.h"3 K( E4 W) o! }
  11. #include "RevAppDlg.h". M& B0 e0 _3 M$ X" u# {

  12. 2 _6 I4 }- K. x+ V( t( `) [8 l
  13. #pragma warning(disable:4786): \9 `" a5 |2 t& o; ?' k- G$ r" \
  14. #include <map>5 _) X7 G3 X& b' a
  15. #include <list>3 n& v9 |  X2 t5 }2 J) m7 C
  16. #include <direct.h>0 I1 N* v; [0 ?

  17. ; r- W( w+ }: ?5 v/ n' a
  18. #ifdef _DEBUG
    ! T# _: b, J% ]7 q! H% R7 [
  19. #define new DEBUG_NEW
      u  n$ [+ {( z3 Y7 H# v; G1 ?
  20. #undef THIS_FILE% _9 F1 D% U1 J* h6 f
  21. static char THIS_FILE[] = __FILE__;
    % C# G$ d5 v" Z0 o3 Q2 j. r
  22. #endif7 x* [) i( y- b: n7 h/ a
  23. #include "SkinResDef.h"
    ! u7 G0 Z. F1 X3 j# t% x) s
  24. #include "ChangeBG.h"4 F& V! [$ m) i9 s# {4 b( [
  25. #include "AFXINET.H". F& E5 X* f: W( E
  26. 7 V( X; ^" i% Q# N
  27. #define TRADITIONAL_CHINESE 0
    3 k! _" n' B: o4 Z1 ^% ^
  28. #define SIMPLIFY_CHINESE 1
    & U& m8 C4 t( W
  29. #define ENGLISH 2
    4 t# q' Y  J! N, {" Z' d' v; x
  30. int m_iLanguage = ENGLISH;9 O3 g5 Y0 C! D  c2 J
  31. /////////////////////////////////////////////////////////////////////////////7 K' ~9 w0 X4 h5 a; r# h
  32. // CRevAppApp
    9 h6 w: P! _$ Q% g! A

  33. 5 T( v; [" e* o( L6 n+ s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    2 b) |' o' T% w2 ~5 A9 s$ O; F; t
  35.         //{{AFX_MSG_MAP(CRevAppApp)! {1 `8 e: A( e7 k
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( U; ^: e5 \! O" {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ) |( y/ y9 |9 h0 ]* g# E
  38.         //}}AFX_MSG
    , r, t  I8 X" N- ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ Y& v; E: T/ t; L/ s; X
  40. END_MESSAGE_MAP()
    $ D+ B9 ^/ C. k9 L3 x3 w  X4 Q* z
  41. - R. O+ L" i; o+ g6 }9 w
  42. /////////////////////////////////////////////////////////////////////////////
    ; M# i) _+ s: B4 b
  43. // CRevAppApp construction
    . y: H4 P1 o( b% }4 ]
  44. 9 u" v: u  o/ s9 h
  45. CRevAppApp::CRevAppApp()/ |5 |, y5 G: [* W/ X6 h+ `- g
  46. {
    & R8 Y! n% U% M
  47.         // TODO: add construction code here,/ r8 N1 c! I. V. L- X$ h
  48.         // Place all significant initialization in InitInstance
    1 Z+ x% `; z" g
  49.   bDisplayIsBig5=FALSE;
    * ?$ Q; b- t2 Q0 J/ p
  50.   bRestartUpdater=FALSE;
    . ~" Y2 x/ U" U/ H! G
  51.   bFinishUpdated=FALSE;6 o0 j+ d# a8 J% E) D
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 A* D1 h+ S3 S; ?' c; e' v
  53.   InitChangeDataBig52GBKS();
    8 d  n) {0 j4 o  [( ~; Y: C
  54.   InitChangeDataGBKS2Big5();
    ' c& L4 h, g$ Y
  55.         //
    * c% H1 [! |4 e5 p3 {) ~3 l' s
  56.         bClickRunExe = FALSE;# m/ c/ U! |3 N% ]8 u& B. @& j. }
  57.         //
    2 A$ i. Z% o( S. O# w& |
  58. }+ |5 \4 K- J9 }9 r; I. z
  59. 0 y5 o. ]6 _1 H6 O. p
  60. CRevAppApp::~CRevAppApp()
    ; V! a+ j) G5 @  _. I
  61. {8 L4 u5 |+ {0 A! T; C
  62.         // TODO: add construction code here,8 b0 [! b! B6 D) t1 k+ D* J
  63.         // Place all significant initialization in InitInstance0 r* c+ |9 ?% B. T7 \* [
  64.   EndChangeData();% N4 Y% L, f8 v- Y% w! Q" X
  65. }& e3 m/ _3 m$ E. y4 E& P
  66. 1 I% u% Z* L# k3 P
  67. /////////////////////////////////////////////////////////////////////////////& M9 }5 I" ?' U
  68. // The one and only CRevAppApp object
    4 O9 T! O( }! t0 O/ }& q0 g

  69. : c7 x- g! M! F( b9 P
  70. CRevAppApp theApp;
    ; q& G! [. ?  n0 n% L

  71. : F1 N. c/ x, Y1 E2 [, }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)% m9 o( G9 j5 K1 N+ O+ J
  73. {' P) D! u$ ?) ^+ w5 I
  74.   int iEOF=0;
    * I2 k$ F  t& _: @  w: }3 t+ s
  75.   char szTempName[MAX_PATH];. [) y" t. g& d0 p
  76.   *szFileName=0;6 ^' R  b. }5 X( \
  77.   iEOF=fscanf(fp,"%s",szTempName);: U1 S6 j5 F/ i: }" Y5 b2 X+ w
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( t3 d/ J. F4 n6 |
  79.   {
    * D: J4 f7 ?0 ~( T: N( v5 L  y' f( R8 q
  80.     strcpy(szFileName,&szTempName[1]);/ T3 D3 q; N# r6 B" ?3 n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)* K) S" p9 }: q0 a8 ?
  82.     {
    ) w' z2 ~/ }9 ~$ }; w4 `: r) T
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' D4 X3 r9 K/ m& ?( }
  84.       strcat(szFileName," ");& O+ z, z+ O. B% }2 O  L4 ]# v
  85.       strcat(szFileName,szTempName);: S4 q* v( K/ r9 p* t
  86.     }
    . g# x9 h8 a- b6 E8 Y
  87.     if(strlen(szFileName)>=1)
    ; W$ M; E* Z9 {, i' \0 T3 V
  88.     {
    ( n8 X# b# w8 {' i! v3 F- E  C
  89.       szFileName[strlen(szFileName)-1]=0;+ I( i# _' {' q
  90.     }
    " N  w+ D, h: M6 U+ I& c. U$ N. P
  91.   }
    , m. x/ Q0 g3 u+ Z) V
  92.   return szFileName;7 w! R8 O3 H5 E) V
  93. }) A3 X, m- f1 S: s: J
  94. 0 x7 t' @5 i% N4 O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 C' E( S* l6 [9 f& L* C
  96. {
    5 e% @2 ~) E- J# g9 I, v( E
  97.   FILE *fp;: h6 K) y0 k% L! ~+ ~! n5 t
  98.   char *key=NULL;( N1 A) f. T0 n$ I0 J2 z1 L
  99.   char version[MAX_PATH];6 V+ `) r. N" y1 G, ]$ k  s
  100.   LPUPDATEFILE file,olds;
    $ K0 o) f4 Y- T# }, i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) C- n% H9 Y1 }: G8 g0 {" {
  102. $ F/ L& D& w3 A6 X
  103.   UpdateList.clear();$ _5 G  _0 p3 n/ g! B# v" y' Y
  104.   UpdateFile.clear();% B! c0 R3 z& R7 x1 |8 h
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 N; t0 v0 q( c- y' ~0 ^! V! b6 a
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . @! ~- Y5 I/ R! H* ^
  107.   fscanf(fp,"%s",version);) C# q! I% d! {' S+ c6 n: Y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }, D7 y& E2 v, H9 ^; h) `
  109.   while(fscanf(fp,"%s",version)!=EOF)5 n8 w$ j7 ]# D+ g  ?4 x
  110.   {5 E* l# |1 X1 R
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 }8 b) X. Y0 ~, a
  112.     fscanf(fp,"%s",file->path);
    % }2 _& m4 M& e$ K& x
  113.     ReadFileNames(fp,file->file);
    ; q$ s+ u- J' K) u
  114.     strcpy(file->full,".");2 r+ y2 @$ C8 V6 v1 ^. [
  115.     strcat(file->full,file->path);
    ) f) p5 p* O/ m2 w
  116.     strcat(file->full,file->file);' m& n$ `: e( u( |7 u- @" T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())' e7 x5 y' K6 I1 d( o
  118.     {6 ~1 l+ |0 T- }$ `% t9 R
  119.       file->vers=(float)atof(version);7 V# ~/ V4 z# U, r# y
  120.       UpdateList.push_back(file->full);$ b6 v$ {; Q) P) G4 Y2 ^
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));+ T7 |( @. ]& V% B* i% s2 t+ e, v
  122.     }
    $ C5 o# I, U% @9 O4 T" y2 D
  123.     else
    " z9 p" [& `6 R& R1 |
  124.     {. z" @7 E# M! `# s) @6 [
  125.       olds=(*p).second;
    0 A3 t6 @; S/ x7 l, x. B
  126.       if(olds->vers<(float)atof(version))
    . W& F) B' I% ?& z" G+ `) I, R
  127.       {' ]# F; g3 _& h  T6 |) z1 s5 V
  128.         olds->vers=(float)atof(version);
    ' z. o  |8 G8 o8 F+ K7 b
  129.       }2 `, F: M* J7 o1 J2 a
  130.       free(file);
    ! Y+ C) ^" v" u( n
  131.     }; p$ r; N7 o, P( ^5 n8 N. m# C. o
  132.   }
    ) _3 V+ K3 N- F0 ^8 A9 d+ `
  133.   fclose(fp);
    & y) ]1 x; ]$ m7 U, P' U
  134.   return true;
    * ~- ?9 u: B( m+ L8 }
  135. }
    $ N1 ~- ?4 ~5 _: c2 Y' r' L& q
  136. 5 K3 s5 p) D; ?$ _: f' m
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : g6 y; O# g+ Z, C, Y
  138. {
    + z1 q: T3 W3 L: u
  139.   TCHAR  szFull[MAX_PATH];
    $ M# u" W/ V1 k: c
  140.   TCHAR *token,*inter;
    - o4 J7 j% K- s/ U  j
  141.   *szPath=0;# S( I# h0 c* H( j7 B- z
  142.   strcpy(szFull,szFullPath);
    ! ^, O" o( I0 i& d
  143.   token=strtok(szFull,"\\/");
    ) S5 a9 [. Q1 t1 l3 z) W: X$ o
  144.   inter=token;
    5 M, S, \/ G& y; ^6 y
  145.   while(token=strtok(NULL,"\\/"))
    / ?8 z, R+ p6 `) j
  146.   {% n$ q" u0 V2 Z6 N
  147.     strcat(szPath,inter);
    ( G' o; g7 B9 O! r
  148.     strcat(szPath,"\");0 J3 ^2 Z# j& X7 m
  149.     inter=token;
    0 H5 v+ C& O$ _
  150.   }4 q1 K; z5 T+ _0 F" `' Q. ?
  151.   return strlen(szPath);" F+ d" m7 }8 B+ f3 h3 [
  152. }
    & l% R- D+ J8 N9 c& Z" |% @

  153. 5 \* C4 m1 W) o5 J/ y: r
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    $ S1 w$ G: u' C7 W
  155. {
    % Y0 W* L( B+ s, ?) I1 d% _
  156.   DWORD attrib=GetFileAttributes(Target);
    - T) O' |$ u) g! L) e
  157.   if(attrib!=-1)
    7 L# J/ J* ^+ ]5 Y8 J
  158.   {
    # q. E% D8 m; p$ C. V) z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    & q! H& U) [. }9 [4 l: x  B# O9 g" |/ [
  160.     {
    ! f: ?+ A/ P9 K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    + X! L. k1 E; S7 g- k# v8 G
  162.       SetFileAttributes(Target,attrib);
    . C$ X9 [  |, k+ J2 {0 V
  163.     }* u9 r( O8 C0 U. z8 i* t/ q
  164.   }" o! M! p* v3 R
  165.   CopyFile(Source,Target,Erase);
    5 y1 t& I! W! {0 M1 C8 k* e
  166. }
    4 i8 A- L6 S/ o
  167. $ l( U0 ^1 Y; X- d. {# j( x1 y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)8 |1 h( U- h: f
  169. {, q5 q7 v. A, C! @
  170.      FILE *fp;
    0 a- w& V+ C5 r  p( g' [
  171.      char  szBuffer[8192];
    / S1 w( z: l3 Z& o% v& g
  172.   va_list  argptr;1 S2 U- L; s" e$ T  R  U
  173.   _5 h5 i8 N9 U) H' z
  174.         va_start(argptr,message);. I+ H5 p5 v3 z# t$ s* S7 v
  175.         vsprintf(szBuffer,message,argptr);8 A3 C8 A3 y" C9 ]
  176.         va_end(argptr);: ^5 I: U' l; P$ `+ G, ?
  177.   fp=fopen(FileName,"a");
    ( y: n) Y1 z# r/ Y
  178.   if(fp)
    % h0 J" o' H# s1 e2 E* s$ Y5 Q" g
  179.   {
    ' o# J, C/ ]: r% w8 n
  180.     fprintf(fp,szBuffer);
    ; ]) }* H$ R& e% W+ G
  181.     fclose(fp);% Z) r* s! e' W$ v* b
  182.           _flushall();
    6 S5 c" V3 a* E9 S2 y
  183.   }
    + _8 h+ M2 q& [" ?$ U2 I
  184. }6 i# J! A  C+ s1 i

  185. . _7 O/ k" z. G& i( ^* H9 U
  186. BOOL CRevAppApp::Fclearf(char *FileName)4 x) S" @5 S( i& ~- u( |! R0 `
  187. {
    ( }5 d, q, L4 s& Z: T, I
  188.      FILE *fp;6 }$ x% h  I' C) H
  189.     DWORD  attrib;
    2 d! X3 A: m* f" i# r4 T; F& W
  190.   attrib=GetFileAttributes(FileName);
    ) I0 q1 S2 p0 K9 J; z
  191.   if(attrib!=-1)
    4 v, }% Q" b7 p- ^
  192.   {+ R* J+ p6 T6 ?6 v, f5 w4 {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 K6 }9 [# B( U# l3 l; a5 R
  194.     if(!SetFileAttributes(FileName,attrib))5 K, A/ N6 t; M! r: C
  195.     {
    ' @3 {- n: N  r+ |; ~8 s7 N
  196.       return FALSE;
      ?  I- v/ L% r- Z- i2 ^
  197.     }
    " h$ J1 p" z, `8 x, J
  198.   }
    ! `! A, H( }6 l, i! c
  199.   fp=fopen(FileName,"wb");
    3 e( t! n* G; W) s- J0 Q$ Q
  200.   if(fp)
    9 b. x4 c/ ?% l0 R0 [1 x& _: i
  201.   {
    4 ~/ F5 V" _+ j6 j; v- s
  202.     fclose(fp);. @. m5 H! k* U- C! Z/ I- k
  203.   }
    : ?8 G# E8 R& X9 o/ V; E
  204.   return TRUE;& c0 W& ~$ O* H, f
  205. }
      j0 d/ d% u) Z, [8 [! \
  206. ' z4 H* w) x6 T
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 i. t% Y- x: e2 V( V0 s% k
  208. {
    ; a6 M  V7 d0 [. [" n' Q
  209.   char filename[MAX_PATH];
    8 D9 {- {7 C" A; A! j; m/ o) F5 O
  210.   LPUPDATEFILE file,olds;
    $ t, M( _, n! I- g+ E
  211.   std::map<int,CString>::iterator i;
    ! x" y" h/ R; q1 X# S; N. f) ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 P1 M& d; F9 p7 b0 w" a
  213.   std::list<CString>::iterator l;; t4 G7 \; t2 i' Y! [$ _$ N

  214. - Q% l& R3 t* G& L7 e! Q. b3 u& e9 S
  215.   if(bFirstUpdate)- k$ n: P2 }3 I+ o  K3 y, p/ Q  T" n
  216.   {: m) H5 H. K4 n
  217.     dwCurrFile=0;
    2 p* r! g  p  a% I, G7 L
  218.     bFirstUpdate=FALSE;3 }" n: M- a5 y, p" m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- V: q# t/ U, f3 J+ U
  220.     {" S, S0 G8 O8 d! c" ?  L; A! ]
  221.       dwTotalFiles=UpdateLocal.size();
    0 h6 d' k, ?' \7 ^0 h! \; s# `/ S# P! Z
  222.       dwDownLoaded=0;# c, ~4 I: a. i' ]; V
  223.       bSilentStep=FALSE;' d5 @% M" u* e, E
  224.       bCompressed=TRUE;
    - C8 a8 B, h3 @( G! m
  225.       strExtLocal.Empty();/ T  h( f& w/ f, h5 S6 G+ b
  226.       strFullName=(*i).second;
    ! m- {% @) n  o5 N
  227.       dwProgramState=AP_CONNECT;
    % p/ F4 a$ @+ k1 d7 b3 t5 W' K
  228.       return TRUE;9 L, b: Y2 D2 C
  229.     }
    1 ^4 ~; H; c8 `& C
  230.   }
    * ~- @4 T* `$ ^
  231.   else if(bRestartUpdater==FALSE)& P$ D1 }2 c$ M- r4 Q. K
  232.   {
    2 N' }& I9 G, v9 ~: h/ b
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())* U0 w$ G" J0 P  P, N2 G
  234.     {
    * F- }5 J" E0 P& d
  235.       file=(*p).second;
    3 S6 g- p% u1 y7 Y- U) m* z5 _
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 g! m' {& k+ s5 ^2 Y% r
  237.       {
      V# `+ e& R& D
  238.         olds=(*p).second;
    4 r; Z* Q" k. B( V: S
  239.         olds->vers=file->vers;
    + K, _5 U& Z7 M" U% z  w( C1 F& W" u
  240.       }
    $ N9 O5 Z9 t: s) v
  241.       else
    5 e' {% g$ `: f: v6 y# e+ `: T9 b
  242.       {
    7 `3 b6 h: l! w1 \
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 r5 L4 Q. k+ O4 y! s- c* O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));2 x0 Y1 N6 e! }! |8 K; H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 N4 Q% H! I+ k" T6 i. q
  246.       }
      ?; M. X! B) w6 }) @5 B
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");6 f, T' @3 V0 m) c; n2 e8 V3 K! j, R
  248.       sprintf(filename,"(%s)",file->file);% p3 L; G8 P  Z- ^/ d$ M5 D9 v$ [/ Q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    1 ~- L2 M+ ?. ^8 p8 P
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / Z/ K* ?/ A& k4 m. D
  251.     }
    ' i  G6 ~- O5 z. A+ g
  252.     dwCurrFile++;
    5 K6 W- ~2 `" ^3 B' c+ ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 h; K( q$ {; o0 A% x5 u
  254.     {* ]7 B# O& P% @6 ^
  255.       bSilentStep=FALSE;, x/ M1 T8 J% U8 }
  256.       bCompressed=TRUE;
    # x# f  m! n9 ~1 l. C0 S
  257.       strExtLocal.Empty();6 O7 Z5 i8 x: c0 p/ R
  258.       strFullName=(*i).second;9 n  \5 _, y4 G2 I: b
  259.       dwProgramState=AP_CONNECT;
    & ^; J5 c8 G1 i' e! z
  260.       return TRUE;7 M" K% U$ @! D. x" n3 g
  261.     }' @9 H; d, {- _( [' R: j
  262.     if(!bRestartUpdater)
    " U3 j- [/ g9 V- P$ u/ b% ]6 \6 t  p7 x
  263.     {% ?- @& h  z! W- o# B& |
  264.       int iCurrSize,iFileSize;4 p1 R4 S# S) P7 w
  265.       iCurrSize=0;' \5 e+ G; V( V+ q
  266.       iFileSize=UpdateList2.size();
    : _( e% D# u0 x* N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 i( l9 l2 k/ {, C
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");/ z! Y# B+ r2 L" a/ F5 W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      T9 v2 ?' `- d, |5 I; ]& `9 a9 ]
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 Z6 Z* }) }, F3 Q9 ^( J
  271.       Fclearf(".\\update.dat");
    . `; a# T3 P6 l: j6 U
  272.       Fprintf(".\\update.dat","Bloodyf\n");7 b( _: ^0 C9 x9 A/ ^5 @& D
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 ~0 ^, a5 d6 r1 E$ o, b; \0 u
  274.       {4 q0 v2 t6 _" u+ W$ |& T9 Z$ H7 l6 Z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 t& \1 o. n) X- K4 W, @
  276.         {
    7 }8 |' ?. L! D6 I# e# d6 s
  277.           file=(*p).second;
    5 g6 w5 J# I9 A9 ]1 l" W; K/ ~
  278.           sprintf(filename,"(%s)",file->file);7 U* ?) ]9 R/ Y# K- C3 h; l/ P
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& T( z7 }' C$ _! E3 K
  280.           iCurrSize++;
    - g! x( J7 ?7 Y- Z9 e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" A+ E, G* |  Q3 N9 i
  282.         }
    ) p9 v; P+ {/ g! ], c. b
  283.       }
    2 N3 C. g9 e5 ^! T& N1 D
  284.       unlink(".\\update.txt");6 B5 h' y5 n# K0 C
  285.       unlink(".\\update.tmp");
    ! p9 Y% o( b- B" p- Q
  286.       Fclearf(".\\checkversion.dat");
    # N' S: d( [' t. v' @1 ]
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ s1 ~: ]3 d+ _( [7 f
  288.       if(UpdateLocal.size()), W7 x# Y# f- O9 l
  289.       {
    : v7 I3 v; h% k/ ^5 h* A
  290.         UpdateLocal.clear();* P* B, }3 |7 w3 |
  291.       }5 A- ^# X) f3 _1 Q% r. a8 \0 l; y8 a
  292.       if(UpdateFile3.size())/ t' c' s! k& A& u$ G
  293.       {, V4 b8 z7 _9 ^: \# {% o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    5 w3 G/ g! ]; h
  295.         {9 o, R: D2 W  \* e* ]% p5 P1 g
  296.           file=(*p).second;
    + R, p5 j) X" ]) e$ J9 G
  297.           free(file);% i; @6 I; x" S7 j- R/ \" {3 x% l3 q
  298.         }
    0 N3 V# }$ V* F! e; y1 Q8 L0 |, D
  299.         UpdateFile3.clear();
    ( `' |" ?& K' t) B) s7 Y
  300.         UpdateList3.clear();
    7 r& l* O9 N' y& `
  301.       }' E3 j/ T; v" y3 P4 [1 o
  302.       if(UpdateFile2.size())
    3 d$ J9 |; `1 o/ A
  303.       {
    9 P: h9 c6 v: M; `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - [3 t% ^  V* @" h- S
  305.         {  [6 a8 r/ t) o2 R
  306.           file=(*p).second;
    $ ^/ o3 a/ v  ~& w. g) {
  307.           free(file);
    , U( U) T, Q# I4 k' h
  308.         }9 S' D$ P4 ~. c4 k8 u( y4 \
  309.         UpdateFile2.clear();
    1 C& d7 W; E0 A- G- m' w
  310.         UpdateList2.clear();. m+ n3 A, |# s% Z5 ?. U/ x
  311.       }
    , u7 f; q; y/ Q2 E3 i7 r8 I
  312.       if(UpdateFile1.size())3 N+ t- F0 f4 G' q' v0 z2 R
  313.       {
    % a6 Y% O) j( l9 a( [
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)! D  }% {1 M: U
  315.         {% A$ `% W$ e5 R5 h
  316.           file=(*p).second;
    2 B6 k2 r  A: F8 Y( M! @2 c
  317.           free(file);! [4 H9 p* H" X" e8 E8 @* A; {  c* c
  318.         }, d2 |+ v4 n( n+ W+ U1 \
  319.         UpdateFile1.clear();9 T5 V( u4 y! p& m
  320.         UpdateList1.clear();
    3 B5 d+ T! T0 I$ f8 u$ T
  321.       }
    ) j# A, l( C8 Y4 @4 j5 p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 |9 n6 [( \5 A, }1 a( r
  323.     }- G; @& ^7 y( \4 |* T6 t
  324.   }! n% b, N) H+ L9 n& E
  325.   return FALSE;. k$ F: J' v) c$ N
  326. }; Z# \: T$ `/ O# _3 N

  327. & J# ]* t' [2 X; I
  328. void CRevAppApp::ClearAll(void)* U7 A& B3 k* I* R
  329. {7 e$ R$ I" z7 P6 g* Y6 W
  330.   LPUPDATEFILE file;
    - l: I2 C) c: R
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      g* C8 W8 e7 U1 y& O* f2 `

  332. # r: q' M: \( ^- X4 _
  333.   if(UpdateLocal.size())
    . ^" Z/ _! N, H
  334.   {
      i$ U, F+ b) G
  335.     UpdateLocal.clear();: H  U: x4 C7 v, Y
  336.   }2 ~1 T! c6 D+ {5 Q5 L
  337.   if(UpdateFile3.size())6 T9 L& m% z: V% A5 u: T9 ]* A8 J
  338.   {9 U4 O1 L0 A4 X/ b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! }# a  j' n. Z
  340.     {2 r0 L: N/ l! c) a! c. _% S
  341.       file=(*p).second;5 C5 G! k7 U, q  w, `' X
  342.       free(file);
    ; t* `+ D0 p2 H1 {8 i  Y, J' R& ?! C
  343.     }3 q+ g6 |. ?$ c/ L  Z+ [
  344.     UpdateFile3.clear();! m% m5 b& u5 X* a% ]+ Y& L, }
  345.     UpdateList3.clear();
    4 c' O, V, j6 p9 B7 t3 X
  346.   }$ D, f7 y  N4 L
  347.   if(UpdateFile2.size())" @0 u' {2 k, Q& j) {  [0 ]
  348.   {0 g- Q6 f  ~( T+ g
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % t& ]3 b% J4 R3 A. X# \' }
  350.     {
    ! S( h3 V, s* ?) d' J7 R
  351.       file=(*p).second;6 G5 m0 n. ?% X4 s9 _7 n5 M
  352.       free(file);
    % n% `% F4 U3 N
  353.     }
    6 m, x# ^# B1 e) u# A7 D
  354.     UpdateFile2.clear();. ?3 U$ D: O, Z  O6 O; O
  355.     UpdateList2.clear();
    7 U7 Z1 e" s- C. w1 g
  356.   }
    , w0 Q( C0 x$ g0 J' n$ |
  357.   if(UpdateFile1.size())( C- }4 f9 ]+ [4 B
  358.   {
    ; \+ C' H5 ~3 ^. g& [
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" C; X) b1 V% {# e& i$ o, d
  360.     {( ]* F  }  O' n. a7 D: _
  361.       file=(*p).second;% j# a7 @3 ~" _9 x; g
  362.       free(file);
    ; Q$ R4 @) X$ m3 @
  363.     }8 n* |- k% Z0 g, r! ?5 d" u! E
  364.     UpdateFile1.clear();$ g" z/ `; I! O& C( C- J. e7 `  f. T
  365.     UpdateList1.clear();# M9 K$ M8 n0 o5 y
  366.   }1 e# a6 H3 u& q& V  t
  367. }  ) X( ~8 z; j  z
  368.   9 W/ K3 K( N, P6 f: a
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    , M+ s& g$ B& F! A
  370. {
    2 h+ S: V9 [# ]$ V9 V" y) f& ?
  371.   int c;
    $ {7 _8 U. X4 f2 }- P9 }
  372.   LPUPDATEFILE file1,file2;
    " y1 y1 W: @1 w; L0 e2 v$ L! L
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;5 _( v+ Z# T& J, a+ Y6 w& @
  374.   std::list<CString>::iterator l;, t) ]# O3 k- U0 u% s' }9 D* Q; u
  375. : @: i! e5 D6 O( w6 }) s/ m$ a% Q
  376.   UpdateLocal.clear();1 T, d" R& z& }7 {0 I
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 Z4 |" n. F* e7 H' D; c
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, j9 q$ v4 S* N2 ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    8 D& |+ |1 ]4 T% Q, f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ! |- l* ]) r! d& C5 n
  381.   if(UpdateFile3.size())
    4 _! v, F2 o; o: C0 g
  382.   {
    " e( T: Q# R. [4 A3 b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 [6 d1 ]% W$ [2 b
  384.     {
    ) |) i/ v' D& I9 _# @
  385.       file2=(LPUPDATEFILE)(*i).second;
    # q+ o  T/ y# E' Q, ]5 r6 R( @6 O  e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ; p: l$ J$ K5 P- @' Q& P
  387.       {- s$ D6 N& E+ ]
  388.         file1=(LPUPDATEFILE)(*p).second;% j. y6 v& }& @! |$ ?0 \  g
  389.         file1->vers=file2->vers;
    ) _; _- c5 P  _
  390.       }
    3 `9 f* G+ Y0 O3 j# d5 y' N3 W
  391.       else
    ( H4 M, f+ J( s0 {8 j% V. i
  392.       {
    ! ]6 p" @2 S+ e4 x5 f5 Q5 N3 @8 g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 b/ L3 j+ Z* J, ^' D7 s( ?4 {- g- R
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 ~; R8 e- F7 j% n1 }0 a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    # h2 Q% L- m1 |4 k. H- ]
  396.       }! }2 J' _$ ^7 o
  397.     }
    $ Z% \/ }  _5 q) J
  398.   }. Y* B9 ^7 B& i
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % u3 x5 z. z5 [: E. L& k9 T# o* A
  400.   {1 F2 e) v4 v% M1 a$ Z) o. m) l; j0 Q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    % {5 Q# p* e" }, o
  402.     {
    / y7 g8 Z6 r5 S$ c
  403.       file2=(LPUPDATEFILE)(*i).second;
    + ]& o% R+ j8 |, }5 O  C* p1 h0 N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" ?  c3 w$ K& B) I; e8 S, P; M
  405.       {6 l% J- s" a. n: C' x, F
  406.         file1=(LPUPDATEFILE)(*p).second;3 _! W( Q" f: I- y  Z$ X) |- K; e
  407.         if(file1->vers!=file2->vers)' X0 v0 e* o$ ^- u0 X0 L' W
  408.         {
    , r. w5 }) H( y5 J) b0 ~3 i
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));0 I( }; S6 p1 B* R
  410.           c++;. ?5 n  Y' S* I. o6 M8 [" B
  411.         }3 r+ T: N, Z; G$ u" u' y
  412.       }5 T; X; q7 s. g2 ~2 g, ]% h7 z9 D
  413.       else  ?7 W* B# y; u  Y" b
  414.       {. b6 j/ M- f5 z" a. A, _( }
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! H4 v- l( ~+ J- q! \. v: @' _" A
  416.         c++;
    # X) P) c& `# E' }
  417.       }4 c; @" x; o9 ~4 @3 o: K" M7 @
  418.     }, d  G2 V: |4 [3 J
  419.   }
    9 W# ], E' s- N. N' ^- [! p
  420.   unlink(".\\DownLoad\\update.txt");
    ; ?( Z# X: q& S( A- M
  421.   if(UpdateLocal.size()) return TRUE;- L* {* r/ W1 \9 S% b# H: x1 l, z7 I
  422.   else                   return FALSE;; B+ G; j- E4 f  d" y% Q. m
  423. }
    : Y- c+ O, z/ q6 {% n; n
  424. , q& @2 l+ P1 v! }
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # L9 X, I) |. u, _  B, D
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    : ~0 G& W, }0 @- ?

  427.   P4 c) T( ~  Q

  428. 2 [# d) c! o( C1 _* P! B/ s
  429.   d! e7 S9 r! {1 Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 ~" b6 }8 v5 p/ |5 x0 {
  431. {
    % b0 x$ T6 Z9 }- }2 v0 |: d- [
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    * x# T: U8 y* F% M8 X9 c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / z* T) g9 s/ m) B/ J  k
  434.   {
    * A5 G$ e. \& V
  435.     char szLanguage[50];
    7 y* t5 A8 E% a+ o% s9 l0 f$ ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% [  B; j' _" O! `+ i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 U2 S* f, H; W
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, s; X9 U* G; X3 N" ~
  439.     else                                   m_iLanguage=ENGLISH;
    + s6 H7 f2 ~4 ~. z9 S5 u6 ]
  440.     char szRegister[100];
      M) c$ y; H; y6 e$ z, H# |) ~
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");$ |! C2 [- b( |+ ?& M4 ~
  442.     strRegsName=szRegister;
    6 [" V$ v+ j. `0 B: t2 V
  443.     char szPatchURL[100];
    8 z% e5 J# p6 |' a
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * v8 o  H6 X: C0 x7 A0 H2 V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    6 \7 i& H+ p& Y; D
  446.   }6 o" m: _% a  B9 [1 {: ~. H
  447.   else' l- [, v& E$ I8 V0 U) n/ K! G
  448.   {
    # y3 }. z7 U: d: Q% ?
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 u+ w& N# {9 Q% j
  450.     strRegsName=DEFAULT_REG_URL;
    & E" U" i* r3 L) j" Z5 l
  451.   }
    / f( X6 [! i3 \, Q' f. H7 c0 S+ t
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 h. g' U' d" Q4 }, {5 Z. @# n+ D! ]
  453.   {
    9 M5 A* O" N0 H
  454.     char szIP[50];
    ; o0 V& Q* J' |. W
  455.     char szDIR[300];1 z6 b$ V/ \$ D8 o
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ m0 c, y2 i: G+ S
  457.     {
    , W8 S4 g' n. r1 b
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");9 `5 n% y) t5 R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! N  ]. A6 Z9 n" \! n  T
  460.       strHostName=szIP;, y7 t6 w! k; O0 y% Z# A
  461.       strHostPath.Format("/%s",szDIR);% p, \& V9 a0 I6 @( z5 f% z
  462.     }1 X' _2 {8 I( W: S
  463.     else' ?' l9 w% e3 W
  464.     {3 _  q* ^# P2 k5 R. W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    , w, {# r$ B# P" S2 W
  466.       {3 S) W2 Z2 h, l/ ~" p8 \0 L) ^
  467.         char szLanguage[50];1 b" g" D! G0 P$ L" k
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 z0 B  _1 S/ v. {
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 `/ r' ]3 z! X; Y! K
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 o7 B' j$ x4 H( U
  471.         else                                   m_iLanguage=ENGLISH;( @3 b/ c# A8 Y" h6 [( e! ^
  472.         char szRegister[100];
    3 d; v" p$ ]4 C6 {- \3 i& M
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 V/ x1 Z4 Z( C8 c( U4 f2 Q
  474.         strRegsName=szRegister;
    2 j- X' o& g, x& `1 T9 Z" T% d) A# D
  475.         char szPatchURL[100];- J/ @0 m# }: n$ U! C1 V
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) {/ ^# _, I/ j& D5 ]2 E; \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 ^% v# H" u8 c& j6 r# _8 I$ r- a. E
  478.       }0 g: c9 p, i0 K* e, v+ ?) w
  479.       else: w: o1 [3 L  ^- s. K( p8 ^$ [
  480.       {7 y9 h9 v6 j$ n. V& N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 b" u6 ^; Z6 F2 t( q) q& R
  482.         strRegsName=DEFAULT_REG_URL;/ a. }+ T% T' Y# E
  483.       }( n  E% \3 J8 P# X. J8 X
  484.     }
    8 t# ?" L+ X1 _
  485.   }
    " k/ d; _. i( r4 P
  486.   return true;
    2 i5 H# @9 O/ Y
  487. }
    9 X  z. w3 R+ f  {0 V: o) M! H

  488.   I- G( u: k0 u' g
  489. #include ".\ZLib\unzip.h"
    ! O) h" q% x8 }0 X) g2 \5 s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);$ L) z3 E! ?' Q; B+ c& e
  491. /////////////////////////////////////////////////////////////////////////////
    5 I# [5 G& g7 J. A! g8 e
  492. // CRevAppApp initialization
    6 X9 S: I1 l, ~( O* [  \" c
  493. 4 @1 T( a8 r: @2 j6 f& o& f: U* K
  494. BOOL CRevAppApp::InitInstance()
    9 }8 v: p: ?) M  ?; ]8 b
  495. {
    0 i$ [/ l8 U, P5 ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : U8 E* C6 }" }, k/ i
  497.   u6 Y  m3 N1 T4 i3 b: p  ?. I
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);  b& o$ S) x5 c$ T( U
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))8 u' p3 n! ]  ^4 ^! @) {9 ^2 d, L- n
  500.   {, i+ C0 c" X7 _: G$ D. }
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
      e+ S0 O# B1 `) V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);/ q! j- a# Y' i# j
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 V  l+ n- H3 j1 r/ g! T8 z! W4 L
  504.     {
    6 l- ?7 L* P- R3 d" }2 a% @
  505.       strcpy(szPath,szPathTarget);
    6 j; v6 n0 K9 P( f
  506.       SetCurrentDirectory(szPath);# V" V0 |, s2 t! ~- `) e
  507.     }1 j9 F5 T5 W4 ?
  508.   }
    7 v3 M# t$ n: ~. V
  509. #ifdef _DEBUG+ M- L0 Q5 z4 F, l
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 g! }% O1 r. S# J
  511. #else5 F1 D  F/ M9 c' O! }! F+ L( J3 N
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" k- ?" v  a7 ]/ o& n7 ]
  513. #endif! f$ T, \3 M6 B& C5 M* D* W( o$ S( X5 h- ^
  514.   {; K* J# ~/ X( e2 @& N' F7 W
  515.     char tempFileName[MAX_PATH];
    3 o9 Q% u$ j/ V- i
  516.     strcpy(tempFileName,szPathSource);, W7 s) \$ x7 d5 x/ l+ Y) g2 i
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % t, h4 Z) c/ l' h5 [( I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");$ R# G# `: G9 m) Z5 [
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 c, L0 I5 z$ k9 F8 q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);6 n; Z" `: k# q1 Y4 L& O  J' L
  521.     return TRUE;
    % w2 N3 o3 K" Z) g! V8 t, M7 y
  522.   }
    % ^6 b0 |2 w6 L* @9 ]8 x
  523.   // Nuke 0118: Delete run.exe1 }& d; s4 p4 W3 E* f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % _& d3 v$ \! G0 _5 V- p& }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");/ U3 Z  Y, R9 L) P$ y
  526.   if(!ReadCfgFile("Config.ini"))
    4 p5 f+ l" @! A, S! b" Q" d
  527.   {  }- U8 s0 B& v( n
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 P, x9 m) [& I3 `
  529.     return TRUE;+ k9 w6 E% x" {2 E" Z# K# W( T
  530.   }
    - j& E8 l' O2 O8 y; Q
  531.   HANDLE mutex;2 u" K' P9 G. J7 X
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))$ q9 B( D# ~6 p
  533.   {
    . L, P/ F; J1 {0 s5 W" f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)& j2 N) E! j; B% R6 ~# o' p5 W7 u" e
  535.     {
    ) c, p* U; L# X9 k3 c- d
  536.       CloseHandle(mutex);) T' v6 N5 \  L7 }/ R$ q( _4 S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* D$ [: H7 m  R: n( T7 [
  538.       return TRUE;
    7 w# I# w6 H, A' f& A* f9 X1 m
  539.     }
    5 Y( y7 |" g! Y# G$ I
  540.   }  
    $ B& J, {/ P9 T$ U1 q
  541.   CloseHandle(mutex);- b7 V. K- j; B

  542. 4 ?$ D& t7 m( q( i8 F
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);6 P. E8 R+ }" a3 l0 Z
  544. ' m" r% F6 N* A; t8 Y
  545.         AfxEnableControlContainer();# b+ m4 F$ B3 ~

  546. # Q, s2 Z: t* o$ |$ S
  547.   bCanUpdate=FALSE;
    1 g0 H$ D8 \1 f- r) R) j4 Q- t
  548.   dwStartUpSteps=1;
    " N- _9 q1 t; F  v8 \8 E
  549.   dwProgramState=AP_NOTHING;5 {* N% t8 B" O& s* t$ S5 G
  550. 5 h7 a2 n7 D( {0 R3 B+ n7 I, |% A
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    3 x5 }& O+ g# \* W; T" C
  552. : W. t/ t) w3 f* G) ?
  553.         // Standard initialization
    % G& \# I$ i' @" v2 _1 U
  554.         // If you are not using these features and wish to reduce the size! n" z, j' n2 I, R5 s2 w: R
  555.         //  of your final executable, you should remove from the following
    / `8 r) P5 g+ E* C) @+ c9 {
  556.         //  the specific initialization routines you do not need.
    , R$ |4 l- Q; q

  557. , n% I  U: U4 U+ L7 @# }
  558. #ifdef _AFXDLL! l  `; t% t- f. h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + W9 R( s# Z: _) `, A7 [( {
  560. #else
    * c: B" _& y$ Y6 R( [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    & U- [/ U2 j/ V1 x8 |
  562. #endif
    1 T& R/ ~* t) b
  563. - q1 l) W, L/ u
  564.   dlg=new CRevAppDlg;6 v/ ]7 D0 s5 t; k& \* \9 x
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    3 Y8 X5 |+ S" g4 E! h8 J& ^6 ]6 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);  s( G- u( z  a1 Y
  567.   m_pMainWnd=dlg;! T6 I4 i. {" j- K

  568.   y; Q, }+ J1 _: f& j2 M
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);# D. [: W7 @2 O+ u+ w

  570. , J# L5 C1 K: N/ \1 g
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ; v9 k, q& x  \5 q/ W
  572. //  ULONG_PTR gdiplusToken;
    " Q, @, s- {' ?6 v' l4 r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);0 M6 v! s6 d! q# D# A; Q

  574. ; O% T0 h3 {! j1 C7 {2 D' _5 o
  575. //        CRevAppDlg dlg;: \' G: c' x( ?1 w3 w. M8 [
  576. //        int nResponse = dlg.DoModal();
    0 Z1 |, _. q1 y  [
  577. //        if (nResponse == IDOK)
    6 {  U$ W$ c! C  B0 F8 d! V& l1 F7 j
  578. //        {! p! J- m* R6 `: T: A2 I+ i* Y+ z. T
  579. //                // TODO: Place code here to handle when the dialog is
    ! d7 ~" Y. \  X( R) k9 L
  580. //                //  dismissed with OK
    9 N0 M9 y- l; I2 e
  581. //        }
    & Q" D6 s* E6 Z' u! F
  582. //        else if (nResponse == IDCANCEL)7 j/ U5 ~- ^0 o* ?3 x$ F
  583. //        {& ~, S9 j# s+ b4 l" S
  584. //                // TODO: Place code here to handle when the dialog is
    + X9 c7 m+ z/ j1 u; q" t& K7 ^
  585. //                //  dismissed with Cancel8 c& n! E0 G, _" R2 v' g% n
  586. //        }
    7 y4 H- {* v! m; f
  587. / j* m# }$ l+ ~
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - B) Z. B& ^8 v4 q& M
  589.         //  application, rather than start the application's message pump.: q) E# T+ T' W
  590.         return TRUE;
    $ f$ {% F  T  m+ K4 M
  591. }
      K# i3 d+ a( g. N  E
  592.   D# b: Z9 Q1 y" q  V# r& O
  593. char *CRevAppApp::strtok3(char *pSource,char *token)7 F5 a& w) {7 G  t  J  f9 g3 O
  594. {
    % d9 \9 n6 P6 r, z; m3 N
  595.   int i;1 \, L4 K6 Y6 F- k6 v* s* Q
  596.   char *szRet;
    7 F$ P! O0 c) X/ c( [# _* C" a
  597. / q: v$ V& j! X. _# W# p! }6 [
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    7 y3 M6 X* @& `6 ~% g
  599.   if(sztoken)  I; j2 @* F" S$ ]7 d: I
  600.   {
    3 g: Q/ R; y5 n0 w- E+ S5 ~4 @7 J
  601.     szRet=&sztoken[itoken];/ V8 A% B" Z+ F4 i
  602.     while(sztoken[itoken])
    & x" X& O1 [, a! I4 Q& e
  603.     {% {# v' `* W+ o7 R- q% G
  604.       for(i=0;i<(int)strlen(token);i++); I' I% y4 A' X7 a( a' ]+ m1 `
  605.       {2 p0 D, g4 T. a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    2 W0 c- [! d' q! i
  607.         {- Q  N& _, {1 Q( e
  608.           sztoken[itoken++]=0;
    / P" u6 M% P/ C9 i+ j. w
  609.           sztoken[itoken++]=0;2 O2 D( H/ L: w; r7 r
  610.           return szRet;& {- P; c: z4 w6 q
  611.         }. Y, {% }, I% D+ n7 p. r- S6 a
  612.       }$ F# ]: Q: h# t( S
  613.       itoken++;
    - |* {/ H& ~* w. q) ]
  614.     }
    - }' f: Y3 L. P' D6 k/ U6 U  d- u
  615.   }
    ! H5 s/ A! \* `# Z. }/ N  @9 ^% c
  616.   return NULL;, H4 p; [0 O/ A. j" F: o
  617. }# W$ G0 N/ y- A" J

  618. ' V/ H% o! S% {
  619. void ProcessProc(long Total,long Current)* o0 G  A8 k1 \: ^. R( Q$ P& R
  620. {
    2 L8 ^% C% j# F  D2 Q$ V/ v
  621.         MSG msg;
    # i/ |4 f, l1 V/ @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 F0 g8 M" Q* O8 \' K7 g
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));! i: G1 `+ ], K
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* e1 k: J  L6 ]
  625.         {
    2 [8 Z% H' L( j- U6 y9 q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    7 V" O5 q' o. X" ]
  627.                 {- N" O: a& C: ]- s$ x$ i/ g" E
  628.                         return;
    3 }0 p! M( `* S& v/ H. ^" a+ N' j0 Q
  629.                 }
    6 e  Z3 i/ h- E, y$ n" \7 T
  630.                 TranslateMessage(&msg);6 g% c' c. o: w# E1 D, o
  631.                 DispatchMessage(&msg);
    ! N* R* r/ o. x% H# r5 }- Q
  632.         }       
    % U4 }6 M0 w8 S
  633. }
    2 _) I. W8 M: v! q* M

  634. 1 O& S) R' V* r7 K# q
  635. BOOL bFirstChar=TRUE;
    + q" E! j$ \* N
  636. 9 Q: u" r2 x+ N+ s5 v
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' x) n- ^2 q2 o# J" V% q1 X
  638. {
    . _# D9 F1 D1 f/ c. \
  639.         // TODO: Add your specialized code here and/or call the base class
    * X( F7 ^0 o  m/ E+ j* z) G4 L
  640.   switch(dwProgramState)
    1 o* V( |9 K4 Q5 {5 q& A! p
  641.   {
    & f0 ^. U4 v) H. k
  642.   case AP_NOTHING:
    ' _* M8 B( l( L1 i8 X
  643.     switch(dwStartUpSteps): j, {9 e- L# `4 o' ^, L% Z
  644.     {
    : O. {, w! u6 R5 K  f
  645.     case 1:
    % ?1 ]8 I3 |5 W
  646.       {
    3 c/ `. y$ \9 [* {1 T
  647.         int i;
    7 Z+ V. N8 v5 W' I
  648.         CDC *pCDC=dlg->GetDC();
    1 a& Y- Y" ]& ]3 Q3 o
  649.         HDC hdcwnd=pCDC->m_hDC;
    8 F& N1 T' d; I8 T9 t# i  e
  650. //        Graphics graphics(hdcwnd);: C( t0 N% _4 \
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 i2 I) [: m  `
  652. //        INT iWidth=bitmap.GetWidth();2 k2 ]' C$ N6 s- C0 Q
  653. //        INT iHeight=bitmap.GetHeight();
    8 s( f7 \* G4 W: }
  654. //        Color color,colorTemp;
    2 Z0 ~( n, u  `* @$ J, d4 u3 b
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + W) C& O% O0 B+ e
  656. //        {
    $ R, M! L0 i( V1 L# B
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    . e7 S7 ^5 F. k3 n4 D
  658. //          {
      G# ?6 f/ _) E( u* t- w
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    . k; v& U, ?. A+ M  Y* n
  660. //            colorTemp.SetValue(color.MakeARGB() g; C& Y. Q1 |$ Q. k
  661. //              (BYTE)(255*iColumn/iWidth),
    * t9 r+ k) J9 L9 ?; [  _
  662. //              color.GetRed(),9 d+ ]1 F2 f: ?; W; Q6 O+ ^# Y
  663. //              color.GetGreen(),& a% t& I+ A$ {  C5 ~
  664. //              color.GetBlue()));
    ( n  D) b, p2 h% d0 n# G
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    0 ]4 i. A0 r; o  p0 o( P9 x
  666. //          }( u& h0 t  ^; C9 \4 l4 h8 |
  667. //        }
    ) t1 \3 x- Y) c+ N, F0 P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    - H( s) e$ j; ?9 N+ C& V
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# a, H" D0 H- G/ S4 T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    2 J/ k: k5 M( a2 n# p/ U: f6 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 x; p$ e% }) F6 Z1 L1 I9 y9 n( I
  672.         for(i=0;i<240;i+=8)
    / P( C% E8 M( M) k( }  _
  673.         {
    7 a- N7 r9 `% A  b: t
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! Y2 g' E. A6 u/ y
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);: x* o3 }: B. G9 D( J; _# G& }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    # S: B5 u' X7 @; B+ ~
  677.           Sleep(33);
    4 Q0 A3 O$ T* b9 G6 o0 y
  678.         }3 s. O! O2 T* G+ @4 J: k0 A8 d+ w
  679.         Sleep(1000);1 f/ U# e) C: @5 [0 `- W
  680.         for(i=240;i>0;i-=8)) y% ~  n3 f! Y  }3 v( h
  681.         {
      x5 x6 Q' `) [% N& |+ F$ i# t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    % `0 E) o/ Q' J- y/ D; Q2 v. G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& x4 i5 P* L) x% W& [; w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% e1 X9 d) N! B% G* |  G* ^  l8 y
  685.           Sleep(33);
    ; @$ t! `0 a3 y$ r1 {1 o
  686.         }
    5 I" G. {# ?2 T& r# @* f1 \
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  ^) A) b2 S; f" }
  688.         dlg->ReleaseDC(pCDC);
    5 r( ^, s! p: l9 h" Z! _/ c
  689.         DeleteDC(hdctar);) C: A8 J2 j( Y0 o7 V4 L3 x% Y
  690.         DeleteDC(hdcsrc);: |( Z6 E- h* z
  691.         DeleteDC(hdcorg);9 t4 p+ O7 M: a9 p+ }3 P
  692.       }- U+ ]3 x4 g* i( T; n; P4 H8 c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);% Q$ M, K/ x- @0 H! ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");6 M6 {2 t, Q3 v' A% N. [
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : @) c- _* i: g: d6 R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    % R& y+ w6 {/ U0 J
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " |! a/ D8 [' w: h
  698.       if(!Dn.Connected()), e4 i7 ~9 {% S
  699.       {! G% I8 \* ]) U* p' a) b7 ?/ k/ q
  700.         dwTotalFiles=1;9 ~+ _. H' N. j; {# c6 F% F; _
  701.         dwDownLoaded=0;2 F  }% Q" y. \" j, E- _' T
  702.         bSilentStep=TRUE;
    5 K$ t& {/ t$ \
  703.         bCompressed=FALSE;) X, F. G- a2 z" f4 r( u0 h
  704.         strExtLocal.Empty();: _9 g! I7 c0 i# f
  705.         strFullName="readme.txt";
      j* ?6 \, R& R2 C
  706.         dwProgramState=AP_CONNECT;0 d6 g6 h5 Z: \, ]& \9 }; G
  707.       }, N  R6 g% e3 v$ ^. p% f
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " G! |6 G5 z" q- J
  709.       dwStartUpSteps=2;
    : a% I! Y" x& U/ i0 ]' y
  710.       break;/ X5 n/ ?. y& }" m6 A5 z# @
  711.     case 2:
      N+ g# y' n8 `5 Y
  712.       {
    4 S- _; s4 H) g! w/ o1 f) X
  713.         int iEOF;
    $ r' b9 W6 }, v; H+ K/ l; e. W
  714.         FILE *fp;
    2 c- \4 ~3 ^' u$ j: j1 K# P" x
  715.         char szString[512];
    2 h+ @! u5 s, {
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , n" t* `. p- L2 \5 ^
  717.         if(fp)
    " t/ Z# x3 ?, e' z( a( Q6 Q+ h
  718.         {
    ) Y5 E) x( b+ m' q1 y' f
  719.           do
    & T) ~$ I) R! u' ]) [
  720.           {2 t! c$ H- c3 k0 @% p: q
  721.             iEOF=fscanf(fp,"%s",szString);
    5 i& ~% O4 }" q3 p
  722.             if(strlen(szString))8 f. P% o8 k, z3 w/ H. ?1 J' }' B
  723.             {3 P: ~" _9 u2 e0 E8 M
  724.               if(bFirstChar)
    ! Z2 B; w& O( Q. |
  725.               {* j6 \( \8 v7 B, g
  726.                 bFirstChar=FALSE;
    $ B1 x7 Z" M, H  `) ]' I" j3 B' O
  727.                 bConnectIsBig5=FALSE;/ g5 q: K/ n$ D$ ]6 R
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 L  h, }6 L6 N
  729.               }
    1 R& z( K3 n( J$ G: V5 j0 [% c
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ' O* \/ `+ i0 Z9 A- x$ N! }* d/ ~
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    1 n' H! T* ~" B; P
  732.               dlg->m_ListText.AddString(szString);
    ( Z2 H# H2 \2 K1 @! R$ u
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 E$ O. O; s9 q! d, }
  734.               *szString=0;
    ' J( o8 M. t2 |/ r) U
  735.             }* w( H% a' B- A! j  D2 o8 n1 B  m* _
  736.           } while(iEOF!=EOF);' B  @+ {$ S: T9 m
  737.           fclose(fp);
    7 Y$ A" i4 F+ ?3 u8 n
  738.           unlink(".\\DownLoad\\readme.txt");9 @6 U' A$ R6 c4 F
  739.           dwStartUpSteps=3;
    3 Z7 D* W9 ^6 m8 X4 H! j7 s
  740.         }
    4 `$ a# ~; n& H
  741.       }* u: {0 P* p/ i$ i( h$ I$ Q
  742.       break;
    ! g( ]& u  ^4 J$ D5 A
  743.     case 3:
    ( b. w: k$ c, t. t! m
  744.       if(!Dn.Connected())
    : s" C# I2 h/ w+ f
  745.       {% `1 B2 e1 ]- \" W) D& _; @8 p& ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 O, e' V+ X' S  o* E  w8 z
  747.         dwTotalFiles=1;- O. Z. F% B& \4 ^1 H
  748.         dwDownLoaded=0;
    $ O- s+ f' J& k5 E
  749.         bSilentStep=TRUE;8 a7 r$ F6 C+ A$ {- B  X. T
  750.         bCompressed=FALSE;
    ) ~" X  u' t* z0 z( Y# U
  751.         strExtLocal.Empty();
    % i" z7 C2 ~: H; s; U( B' M( g
  752.         strFullName="checkversion.txt";+ g  X6 m' Q0 i$ q% [% g# H
  753.         dwProgramState=AP_CONNECT;
    3 M7 F' c+ S1 G% L+ h: ]
  754.       }; b  w8 f2 h/ k% ~( x8 B
  755.       dwStartUpSteps=4;
    1 i( x% M. K* J$ x# U1 p
  756.       break;% X$ Y' q4 f( d: ]- S7 o6 q
  757.     case 4:, A) M. P+ ]- N; c
  758.       {
    ( E! S; G8 U) J5 m5 {* Q- k
  759.         FILE *fp;- S' b9 t; x- S: M' X6 {
  760.         char szString1[128];
    # U& v% K. S) c
  761.         char szString2[128];
    " p% \. M! r. M7 \
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      r+ ]0 x$ ?$ f* o% s9 u, F
  763.         if(fp)
    ) H  ^/ u  H; e8 s- }7 }8 ]$ A5 N
  764.         {
    ; S+ W8 I* ]  h% T5 J
  765.           fscanf(fp,"%s",szString1);+ Q* z2 E3 |' ]) h/ u) T- g0 L
  766.           fclose(fp);  o, c% F& |0 b& \$ p
  767.           fCheckVersion=atof(szString1);* r8 u8 ~$ Q8 s. x9 m
  768.           fp=fopen(".\\checkversion.dat","r");+ P+ E. `- {4 Z+ z9 @
  769.           if(fp)6 x1 `* P; R& t# a/ K( ]3 Z
  770.           {0 D/ p1 b) c5 @4 T) I1 h
  771.             fscanf(fp,"%s",szString2);2 L( p8 K3 K# C0 o
  772.             fclose(fp);& ^  J) ~3 U% [; }4 J$ e& Q
  773.             if(atof(szString1)!=atof(szString2))
    & e" d4 Z! N, L
  774.             {
    ( B3 q& R4 p) V  L+ l
  775.               if(!Dn.Connected())1 v' Z, |- n6 |1 q
  776.               {, c$ H# o8 i5 S* D( Y0 y$ \: W
  777.                 bFirstUpdate=TRUE;5 {1 |( K* T# ~: u$ F
  778.                 dwTotalFiles=1;6 z5 o' s. y: q- p* u
  779.                 dwDownLoaded=0;* t1 c! F, `7 G' s+ |
  780.                 bSilentStep=FALSE;
    ) _8 F6 @* G! O" l% H2 F
  781.                 bCompressed=TRUE;# ?  [# h, E1 P  k6 Y
  782.                 strExtLocal=".\\DownLoad\";% y1 G- A: r7 E! n6 e0 y  I8 g7 p$ M  u
  783.                 strFullName="update.txt";, P1 Q( P- q& S$ ?: b, F
  784.                 dwProgramState=AP_CONNECT;
    + m- X* l  g  B' L0 i0 o* a
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # Q+ N) R1 H( o' \7 u1 [  g/ K, H
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * d* m. C3 F1 e+ {% q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% B1 y7 }' u6 d3 m
  788. / O# I% M, j; O0 C* b' w! u
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 _" B8 D; k7 d# L
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , u8 G! @0 ?7 b' m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; Y8 @% {2 g1 m8 `
  792.                 {$ F6 ?+ z. ^( X+ }, i
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 l7 ^+ V/ e. i  C9 f3 h' N- G5 O
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    3 Y. k/ a! H0 @: k0 @/ a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* y& N  C9 ^4 Q; F' Y9 F
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . H% ]& W( u4 C9 Z3 l2 N  p
  797. 6 u4 m+ W* J1 S- `; m6 c+ h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * m+ B' o9 {) q  M3 c, N9 G. V+ w" o
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: I; W) w9 [* r6 N9 ?5 {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& G* H: Z" g: T- |0 o0 {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 f  y) x9 c. M% G, l
  802.                 }* Y6 q( p6 ~8 |) n+ w: s1 k
  803.                 dwStartUpSteps=5;
    # J0 r' D' M' R1 V8 O0 M5 b8 r6 a
  804.               }$ p* E8 l, x# j4 ]! C* G3 _: p
  805.             }! L; y% }: W7 y# t" J
  806.             else+ F  A- X; |/ D" P
  807.             {$ @9 V. ^5 h9 |' ]9 I* U
  808.               unlink(".\\DownLoad\\checkversion.txt");3 E2 |) w$ c  v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! E8 d  j' ^& I2 S% G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    , v& F5 D5 z' c+ I+ s
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % Y5 v0 r' A  z- }- v# i* q& l- E

  812. 3 v% ]; c; x( w, l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 B8 ^6 J/ X/ S' r$ j  I' n6 m: N
  814.               dwStartUpSteps=99;
    6 k8 R% C) C) W7 O6 A+ V
  815.               bFinishUpdated=TRUE;
    1 ^: [6 s$ w: j7 Y% q' z8 M/ B
  816.               bCanUpdate=TRUE;
    ! o) N5 y/ g5 ]& _' u. T7 }2 f+ }
  817.             }0 d0 b/ O! ^; f
  818.           }
    * [( c& c, x4 D7 \6 Z+ F6 L+ L" ?( n# {
  819.           else; d0 L- |; |2 @* {
  820.           {
    % w5 u: h* a1 B2 X; U$ V, O- V$ C
  821.             if(!Dn.Connected())
    3 F# I# K$ Y6 ], e4 n
  822.             {
    ' _$ g' n8 d1 f' R8 H% h6 l$ Q
  823.               bFirstUpdate=TRUE;
    & n- {3 |, G! F2 h) |" d/ F
  824.               dwTotalFiles=1;
      y$ L9 O7 j  f5 K: E
  825.               dwDownLoaded=0;# w% X) N4 y0 D% l4 E
  826.               bSilentStep=FALSE;. H$ F) [7 i9 i" k" ~1 u8 z$ e
  827.               bCompressed=TRUE;5 H8 V+ j( y& `, Z% }4 ]: ?
  828.               strExtLocal=".\\DownLoad\";
    4 Y' e) R% G% Z9 X
  829.               strFullName="update.txt";
    " s% `! @/ n9 Z& Y* D
  830.               dwProgramState=AP_CONNECT;* j) Y- W' g& S# p; ?, [. ~9 a
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ `" O% e5 M, f' P- q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");/ G. P* C! P" ^3 ?8 U* k# M/ `1 \
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");! J; ?3 e8 S* h( @! H/ N# Y' f% J3 E0 l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 ~' J, M: b) F
  835.               unlink(".\\DownLoad\\checkversion.txt");2 O' R) r6 o1 i: ]( Q/ O4 Z* \
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    - i' a5 x! B2 T; x* v2 W
  837.               {
    * P+ O% I" l6 O- I" `' y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ p; H' v* R1 z; ]( `% \* m1 p
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( R4 Z% X- |+ r& R# O8 `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 X# s0 i% \2 i6 @
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 u3 f$ \+ {( Y, _# H% t, g
  842.                
    & E. ~$ k0 l* Z' r8 J7 G
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - A( y) @. q3 T( I. C
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! z. D) Y9 R$ ^6 _, n( W
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    & T( Q  I4 A1 ~. K* M9 [0 F
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 f! W2 N# M: b4 s- ?. `
  847.               }' z! Z% j: P& O7 C
  848.               dwStartUpSteps=5;
    * x# ]) {( G* H. R7 d
  849.             }& O1 G, z7 i, P. j1 L- h1 f- Y& m
  850.           }& y7 o; K& ?$ b" r* e( ~& j& G8 V
  851.         }
    0 j3 ^2 q/ c4 T9 ?- _  r: Q
  852.         else
    7 `" U. X/ U7 O6 S  Q! G6 k
  853.         {
    . {9 F/ k* x+ ?* S+ t' Q
  854.           dwStartUpSteps=3;
    ; N: ?7 [, D3 q* W
  855.         }6 }1 Y% \1 z7 y, F' X, c
  856.       }
    1 c- D" j: i5 b1 D2 Q: [
  857.       break;
    2 I6 U8 h, A3 b& X7 @. N) `
  858.     case 5:" B6 f/ v4 a0 U* y( @  k4 S& e
  859.       {# g2 ~% K% M' J$ ~* j; V
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)$ @! s! M5 n+ s( f
  861.         {
    5 B3 H3 h6 H! h8 E* g. k
  862.           int opt_overwrite=1;, _" M0 `% b* J4 q
  863.           int opt_do_extract_withoutpath=0;
    * ?0 ?( X+ {# S4 A
  864.           unzFile uf=NULL;
    ! Z3 }; V* n" {3 I" ?$ c; `
  865. * Q" b8 i4 e. p  x/ A
  866.           uf=unzOpen("Wsa.zip");  s# |' S# P' z. J
  867.           if(uf)
    ) Y& Y0 ~0 T! ^# y
  868.           {7 U' P* Q* n( Z5 r2 h' [% [
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    " e- i/ }8 m0 o  q
  870.             unzClose(uf);
    - a' \) V9 s/ g+ A7 s1 ?
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    5 @* X3 W; P( x1 G) [9 i) i
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 L% P/ g1 }- V7 K; l) g
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ' h; x8 ]2 T0 G5 B1 d8 d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ]8 e3 i+ B9 Y8 o! ~
  875.           }
    $ x& N# T! @" h' U; ^! ]  P( l3 e
  876.           DeleteFile("Wsa.zip" );
    . y; d9 S6 t# C) r/ }& n+ s( @; X
  877.         }9 }6 |* S4 T% j: L

  878. 0 Y1 W0 v" T. G! G+ v8 n
  879.         if(CheckLocalVersion())
    + z5 h9 d  O/ c' \5 `* G4 g
  880.         {- k5 f/ j7 z( G3 K, V
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    9 F0 `. J( z0 \' ]# _$ T
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");! E, E+ P, E; W, Z- z8 R) a
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    & ^# C- x( X5 R6 q# R9 G
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! I3 l& v0 C- j8 E' m2 w
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    * p. W7 D, S' H
  886.           dwStartUpSteps=99;6 j2 K/ S4 }9 V6 U
  887.         }
    4 S2 O6 |5 U# ]5 r  c4 f- q* O; o5 h: i
  888.         else# g; U5 q- h) @, e( L2 T  P
  889.         {" E+ T* d# `4 T) F
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * A! }* j. b  w3 |* P
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 y. m+ A$ X: q& \! q% h/ V
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 T" [/ w* p- F/ B

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

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回覆

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部