CSUpdate.exe源代码

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

9 v6 m2 D/ W' V6 y/ o
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) f7 T$ T9 Q( c4 I( c
  2. //
    1 h- x  n% u/ U2 ?7 I# g+ a" u

  3. , k4 S# c, Q# Z
  4. #include "stdafx.h"* Z+ \& `( V# y: i
  5. . b. ~" r' X) G- H9 b1 W
  6. //#define UNICODE: G/ b$ m1 i& ?5 y2 Y$ S( B
  7. //#include <gdiplus.h>/ S- B4 r9 o$ }' L
  8. //using namespace Gdiplus;6 J/ N! g+ l9 i; l6 Q! |$ N! R
  9. + h$ g/ [% F: q
  10. #include "RevApp.h"8 j4 d$ B/ v$ N% ?7 k$ k
  11. #include "RevAppDlg.h"
    - |- D% p' L+ W7 w2 A9 p+ Q
  12. + T2 v8 p8 ?/ A% L
  13. #pragma warning(disable:4786)
      V7 w$ O# d, X% U# H: s& {+ i/ q
  14. #include <map>) |7 L( Y3 v  {5 v# ^, {* U/ }
  15. #include <list>5 i& R/ ^: g9 f$ d/ G
  16. #include <direct.h>. f# Y' p8 c" I- r
  17. 1 C2 o+ ]4 _- X$ o
  18. #ifdef _DEBUG: s4 u* U: _8 E. O! n7 m; @
  19. #define new DEBUG_NEW
    ! ~* Y0 N# @/ m7 _9 T6 @) w' C6 o
  20. #undef THIS_FILE
    : p( B9 }) q: ?! |6 k! b+ q
  21. static char THIS_FILE[] = __FILE__;
    * \$ ^( j7 a7 N$ i1 A" f
  22. #endif
    $ U, ]9 p( C+ f1 X$ Q' v3 a
  23. #include "SkinResDef.h"2 F) M- L; Q! Y6 I# H0 l& I3 k
  24. #include "ChangeBG.h"6 J7 C- s$ R; h& O# v6 `
  25. #include "AFXINET.H"
    9 g! }3 I+ A8 K1 }

  26. 3 j8 l  m# F& w7 `1 V+ t5 w( D: M
  27. #define TRADITIONAL_CHINESE 0
    . I' n% F! r9 ?6 P) P1 y- z
  28. #define SIMPLIFY_CHINESE 1
      _' R. D# N3 O: N1 f
  29. #define ENGLISH 21 z7 M1 i4 P  d) x! s
  30. int m_iLanguage = ENGLISH;
    ) ]: M9 p7 B: m
  31. /////////////////////////////////////////////////////////////////////////////8 ]: l. G2 e9 ]) s5 L
  32. // CRevAppApp1 [2 y& L  T( e' z1 f5 p+ R

  33. % e& F, G2 b4 e$ r+ f1 i! P- C7 s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" _" F/ W1 w7 _( P( v( d
  35.         //{{AFX_MSG_MAP(CRevAppApp)3 a, `6 Z* o$ x4 q9 a" q  ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    6 Y& l8 u# @6 K
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!5 q: t/ p( i9 g) D! g+ Z
  38.         //}}AFX_MSG
    ! i% Z6 \; A* o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)0 x7 v- h6 N7 T. _
  40. END_MESSAGE_MAP()
    1 W/ r  Z2 n! z2 t/ m1 K/ b) p

  41. ( @$ q# {5 @3 f* c
  42. /////////////////////////////////////////////////////////////////////////////
    ( k- r' @1 \9 P' Y9 x0 l
  43. // CRevAppApp construction
    # r3 T! j1 Q- C" K. T+ A* M
  44. " R4 m* Y( c8 U; Z# e  z
  45. CRevAppApp::CRevAppApp()
    " G1 _4 L5 ^5 A8 ~1 H
  46. {
    $ O7 Q* Q$ x1 k' D& B
  47.         // TODO: add construction code here,- v% ?7 q- G4 n9 ^) R# C; `3 }
  48.         // Place all significant initialization in InitInstance
    - J7 {! F( x4 s3 p& O0 b9 m# x
  49.   bDisplayIsBig5=FALSE;
    ! @* T& ]" }1 Y  F5 A
  50.   bRestartUpdater=FALSE;$ F& k2 U0 K/ [) H: L, `8 k
  51.   bFinishUpdated=FALSE;, X( B& b; \4 j1 s& [2 d+ n  m1 w! B
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 a1 I" O* {: Y3 m5 s
  53.   InitChangeDataBig52GBKS();
    : j; G: g3 A4 \, @2 }9 ^0 K
  54.   InitChangeDataGBKS2Big5();
    - G: r8 s/ ^# i8 [
  55.         //
    - W' A0 P$ t( C, @, |
  56.         bClickRunExe = FALSE;
    . W7 h! `+ ^% \/ z3 f+ u8 E$ q! M
  57.         //0 T# {" e# c- e( z( e& A, }2 N
  58. }- L4 X% m# b# b2 \$ b

  59. + V$ H9 W- ^& S, F1 x6 J: _  G% |
  60. CRevAppApp::~CRevAppApp()
    ' U( a4 O$ p( H9 C9 d3 H: W
  61. {6 R( g* C8 R+ @" W
  62.         // TODO: add construction code here,
    1 i8 W7 c) a/ C" I
  63.         // Place all significant initialization in InitInstance
    3 s# G7 }6 W, i
  64.   EndChangeData();& o0 L4 M! t4 \( ^! g) E% K
  65. }
    5 e: m' d6 c5 k& e1 P) J
  66. ! c5 P# J- [. |/ z
  67. ////////////////////////////////////////////////////////////////////////////// f3 E# |6 ~7 X- e) j
  68. // The one and only CRevAppApp object7 }& {. \" j7 ]  N( y

  69. ) J( s& N* V: k
  70. CRevAppApp theApp;
    ( [" `+ A9 b. L, v
  71. # F* X' F4 n) z' E; b
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)/ ]6 }' {( c2 a  D$ [: |
  73. {
    & ^2 o' h  R# T0 x6 ^: _( g0 n: m
  74.   int iEOF=0;
    6 c4 C( x% k' t$ a' `/ p' c
  75.   char szTempName[MAX_PATH];% b7 j( ?8 t  m8 I$ g7 Y
  76.   *szFileName=0;0 x0 o7 Q+ t9 D3 V. m  ^2 h( s/ ]
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 D( m# m; ?" Z8 p$ B0 ~+ J2 X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 J# j8 j$ D8 U4 Z: m! G
  79.   {
    2 g6 X+ K* {2 h5 @
  80.     strcpy(szFileName,&szTempName[1]);
    9 ~% T1 W& @' M( J6 z( b+ ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 y* L" \3 Z+ _4 B
  82.     {
    # x+ f% k" D- I; P! |+ W
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 `8 X) j- Y8 `. w# x
  84.       strcat(szFileName," ");7 _/ N: H2 H' n4 H
  85.       strcat(szFileName,szTempName);
    # G$ C% m. b7 ^- `
  86.     }
    7 y0 z6 ?: p( ^8 E
  87.     if(strlen(szFileName)>=1)
    3 p7 i) @2 J$ y# ~
  88.     {. T9 C  {' r# l4 o) T
  89.       szFileName[strlen(szFileName)-1]=0;
    & ?! `1 D8 t$ G: t
  90.     }, x& c7 k' Q! X. \0 y" W
  91.   }
    ' Q  T" }. l1 |" Q
  92.   return szFileName;
    2 W6 m/ f" u; ~/ K5 b% h
  93. }% M  ~* u8 `4 r/ {

  94. 5 [# ^/ E4 R5 S$ R$ h; e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)& C  B' L' p0 E
  96. {
    ) k7 o4 t3 E/ B4 r" G
  97.   FILE *fp;$ o1 o( |2 g9 D% e% E
  98.   char *key=NULL;. h; B' J3 t1 Q6 I( O3 T, I! f
  99.   char version[MAX_PATH];8 j& T5 Y( L* `% }( [4 ~
  100.   LPUPDATEFILE file,olds;1 q! ?  k  x' d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( s% z, ]5 E2 g+ `5 C: P
  102. % Y' e- Y; ~+ U" m; [
  103.   UpdateList.clear();2 M  j- u: f7 K( R3 d/ K
  104.   UpdateFile.clear();
    5 V% x+ R3 o/ K6 d) x
  105.   if(GetFileAttributes(filename)==-1) return false;
    4 n2 v! D8 }4 C( e/ a
  106.   if(!(fp=fopen(filename,"r"))) return false;3 s2 N3 f  B; S, z) f4 Y1 f+ k, _
  107.   fscanf(fp,"%s",version);6 L# I! r9 Y. b; o
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    - w6 [1 F. I; c( s$ p4 p
  109.   while(fscanf(fp,"%s",version)!=EOF)$ e+ N& u( E# W; @* ^
  110.   {
    ; c/ Y' V; t" X9 z3 _1 W( B' [9 j5 _/ B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: x' y( x( {% Y+ \6 x/ W
  112.     fscanf(fp,"%s",file->path);+ {) I* t2 `/ }4 A2 T1 f0 n
  113.     ReadFileNames(fp,file->file);- L' ?/ D( o9 J. p
  114.     strcpy(file->full,".");. F# F3 u& H# j# R1 [
  115.     strcat(file->full,file->path);
    7 H$ l" S2 F2 H0 h
  116.     strcat(file->full,file->file);& k# D( ^/ x! q
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())0 M8 e1 u  I; @) L# Z6 V* h
  118.     {% u- s* a+ j8 \
  119.       file->vers=(float)atof(version);! B; K3 N) V8 b, f/ [7 C2 i* E
  120.       UpdateList.push_back(file->full);$ P, `: W, k7 t' o5 I8 ?+ E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    3 }3 N0 J7 y$ n, R. j
  122.     }
    & q. _8 f- ^, d3 t7 q
  123.     else
    % J. x9 @- G9 r2 G& R+ t- O1 G0 e1 P
  124.     {8 Z. z: ^0 P) F% P9 r5 ]7 A
  125.       olds=(*p).second;
    2 c7 x; z  _( A, }' `: d% F2 Q
  126.       if(olds->vers<(float)atof(version))
    - i2 Y# G& a$ ?/ ]3 D& f' q
  127.       {
    ( K7 g$ y0 p3 o# h7 b
  128.         olds->vers=(float)atof(version);
    6 l; s( {5 n2 [* m. m3 `2 Z
  129.       }
    ! k; }4 ^* b5 ~3 r* g7 b3 l( P, r
  130.       free(file);
    # H! L- @7 q" ?) ]+ l  _% b' T; Y
  131.     }) ]) w. I8 l- `5 B8 l
  132.   }
    0 j' A5 `1 q( i- \8 z
  133.   fclose(fp);
    ; }! t/ @% V0 S( T1 m* K. X
  134.   return true;% k! T  ?& N  P; b, C& ~
  135. }% j$ z5 b% N: x- {0 U

  136. 2 f. g2 g# v0 e/ y( n, Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ' U: f: z/ `; E* r& L
  138. {
    ! g* ~4 m. q4 I  F. D
  139.   TCHAR  szFull[MAX_PATH];
    ( h6 p0 g2 f9 I( i/ E& `
  140.   TCHAR *token,*inter;
    % h4 F) H1 s1 w& `) P' W
  141.   *szPath=0;
    ! z) T) `$ G, W
  142.   strcpy(szFull,szFullPath);
    + }/ G+ d/ n5 i$ \( k" _
  143.   token=strtok(szFull,"\\/");) ]' _5 L) K3 r5 O
  144.   inter=token;
    - P2 V7 u; M' A( N3 L0 K; J
  145.   while(token=strtok(NULL,"\\/"))4 \; G- k9 H: }- B" ?3 X6 L$ D
  146.   {
    8 W5 F* @$ N4 P5 g
  147.     strcat(szPath,inter);9 K3 r! D8 X6 x* G
  148.     strcat(szPath,"\");
    4 U/ S! i" n9 L" f! X  H
  149.     inter=token;- v8 J) s, {* ?' Q' m8 f; K* K
  150.   }
    ! g/ q; D; D" \# j5 @5 H5 G- I
  151.   return strlen(szPath);7 |2 U- X( B9 [' l. u3 n
  152. }
    # |6 C4 u5 Y" D" P
  153.   F' C, c+ m/ i, |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 U! ~$ {5 l. i; Y  |4 Q
  155. {% k5 k! a4 `- p  \7 i- J' Q+ Z' ^
  156.   DWORD attrib=GetFileAttributes(Target);* n/ \% Y$ g* ^5 `1 s
  157.   if(attrib!=-1)
    , Z$ T2 f6 B( {+ S0 t4 C& }8 b
  158.   {! L! A% T  w. D, M7 ?: _. s7 G
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
      `% P# L% [1 o: I
  160.     {
    ( h& y; E0 y& _9 J; [/ p5 ^) o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);. a- R% q; R0 g) h: w* k! T
  162.       SetFileAttributes(Target,attrib);
    # o. @" O) L7 z0 N6 J
  163.     }
    % x4 B' v. W4 B
  164.   }
      u2 Z& Y6 \2 `3 S
  165.   CopyFile(Source,Target,Erase);
    : X6 {7 M+ Y5 i/ Y: h% H' e
  166. }3 v) L: B/ h6 T9 A
  167. 6 @# i4 p3 A/ Q5 P& M
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & L; t( W$ Z" C) J( K" J: d* {8 U
  169. {3 x7 Y( ^+ b# u
  170.      FILE *fp;
    ' y" Z9 B' F7 A) P$ @* _
  171.      char  szBuffer[8192];5 ?5 E1 c8 x4 U  U; z9 R
  172.   va_list  argptr;+ C1 W$ U6 q$ K& n; F

  173. ( c" t5 G8 N8 E6 l4 m- }% c
  174.         va_start(argptr,message);
    6 c/ r+ V( _* X" Q8 ^
  175.         vsprintf(szBuffer,message,argptr);- n4 T$ F6 T: r" U' _, @9 v
  176.         va_end(argptr);
    % Y$ ?  [1 R9 P9 |% @' [
  177.   fp=fopen(FileName,"a");$ y& u' c% d% |. P8 `
  178.   if(fp)
    & ~; z& p! _, A5 v
  179.   {- j4 ?9 ]1 |- i  I4 b
  180.     fprintf(fp,szBuffer);# O  F) f: [  ~: {- F$ v3 I' j# N
  181.     fclose(fp);  m9 y# M: s& t5 S. \) g. {1 a
  182.           _flushall();1 H; Q8 V' E* w. L4 I' D! U0 I& \
  183.   }
    2 F4 a  U0 v% |' l* S$ M, L
  184. }
    9 S* K1 y7 ^; {! i
  185. 4 N9 R, d5 t; u& B
  186. BOOL CRevAppApp::Fclearf(char *FileName); L" v) ?9 O$ u$ L
  187. {* m  s+ u( y2 f1 }
  188.      FILE *fp;
    6 v6 K% X- I" w( o9 u( L* y# R4 D7 Y4 h) I
  189.     DWORD  attrib;
    7 q: g' [' a  B
  190.   attrib=GetFileAttributes(FileName);
    * ^$ L: G  M# E) J) J1 r3 q2 [
  191.   if(attrib!=-1)' i  Z4 H$ C- N# F0 }
  192.   {
    3 x+ {1 Z5 s& S" O, i3 k: S  `3 d
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);! `3 L0 A. J1 H% i: ?
  194.     if(!SetFileAttributes(FileName,attrib))
    ! X$ a" w  ^: ^( S' s
  195.     {1 I  H9 k4 ^$ c) Z1 k+ o
  196.       return FALSE;- @+ o1 B( V! s  x. e
  197.     }
    * {: _+ G, }' A9 J0 W( x8 Z7 [
  198.   }# M5 b& |3 z4 A' W' @  O; e
  199.   fp=fopen(FileName,"wb");
    # J) v+ Y$ M* }8 m
  200.   if(fp)( D$ @0 y" b! m! D: {  ^
  201.   {
    7 a% I  G, x7 A% M8 J6 S! b/ d
  202.     fclose(fp);
    ; h! x; E& V. I" H
  203.   }
    ) ?0 h) d$ ]  ^" M0 a
  204.   return TRUE;
    7 V& \0 R- s! j; n: T. X& e
  205. }
    / k9 ~" Z8 ^2 l( u

  206. 6 J* w& X* z6 w: J) J1 j
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ D& X3 o( q# v& x! T* t' g
  208. {) F" D4 h5 e$ o. u* q3 W: d7 h
  209.   char filename[MAX_PATH];
    - M/ K! L1 x( d) {) q
  210.   LPUPDATEFILE file,olds;4 h1 I9 @" ]7 v0 J+ d  V
  211.   std::map<int,CString>::iterator i;
      A3 |, P" V* \' ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;# H2 b  `/ `  N' ~/ I
  213.   std::list<CString>::iterator l;
    ' o$ t# x9 H7 N7 t

  214. 8 H& c1 n; q% L9 L
  215.   if(bFirstUpdate). t: {! F( d0 ^5 T
  216.   {
    % n' s( ~# K2 r6 x0 j0 E
  217.     dwCurrFile=0;
    ! z6 _# r5 a0 D- r3 X) L1 ^3 m! ?& G6 f
  218.     bFirstUpdate=FALSE;
    . Y6 M1 |, O6 @8 |7 y- F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())* J: }; l7 z5 D/ j2 m/ i( g; U
  220.     {( C# H0 h2 t- Z5 z% J5 d
  221.       dwTotalFiles=UpdateLocal.size();
    % ^# M8 Z( b4 c, q% B
  222.       dwDownLoaded=0;# E. v5 O8 q' D; y3 ]1 K( r
  223.       bSilentStep=FALSE;$ G1 G8 [+ r  r' v2 |$ u
  224.       bCompressed=TRUE;  J6 ~0 a2 f* t& P; ?/ E
  225.       strExtLocal.Empty();
    . f0 r2 m; t+ m
  226.       strFullName=(*i).second;. F1 h- H# f- z3 l1 X( [* `
  227.       dwProgramState=AP_CONNECT;- W% v: }! Y& y) G- c
  228.       return TRUE;
    # |6 c  S% _1 a; I4 q, X0 A) w1 N
  229.     }
    ! Q, |4 ?; e) j$ A" ]/ v
  230.   }! J8 c! @0 E6 {' s9 N- Z! W
  231.   else if(bRestartUpdater==FALSE)
    ' E3 u; ^, k- \& V. Q
  232.   {& Z9 E0 b6 I4 P0 B' }
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 I* _! \6 ^$ ]& C& l8 @
  234.     {
    5 N: S# q5 S3 o: {1 t' t
  235.       file=(*p).second;
    9 a' H. E" i" O: W) P1 U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
      N# |( n2 H* ]) h: |
  237.       {
    ' n& F: A8 H0 }6 Q/ r: V% i  n0 P
  238.         olds=(*p).second;0 P) g" O) X* Z, b
  239.         olds->vers=file->vers;
    3 x& s% u. ]1 K( ]. E$ U
  240.       }6 A% O+ ]; u4 y4 s
  241.       else; |4 N  p6 i! h- Y/ O
  242.       {! {* Q* E4 r8 g- _! S: q$ m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    - |* {& A. k8 j! j2 [
  244.         memcpy(olds,file,sizeof(UPDATEFILE));% I# i# |  ~( X, J' m1 p% G  P
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));# |, g4 j' w9 ?
  246.       }
    * `1 }7 J& B' \$ C2 Q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");0 B; u! e! ~9 L
  248.       sprintf(filename,"(%s)",file->file);
    ' e& k$ I$ S! g1 C1 T
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 k( s& w/ {1 ?7 p# U$ m" |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }, u  x/ E1 Z# w8 h, H6 y  n
  251.     }
    0 q# X- `0 l+ b, i9 E5 a
  252.     dwCurrFile++;
    1 _% U3 u, ?# t2 c2 V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); J0 d% t( f  c8 @3 V3 F6 k: c
  254.     {* S+ |1 X/ {0 L) ]5 ~5 ?
  255.       bSilentStep=FALSE;$ l5 ~8 g1 O1 \3 |. u7 [
  256.       bCompressed=TRUE;
    1 p, q( r9 u2 z4 Q- y
  257.       strExtLocal.Empty();
    9 J8 D8 \5 N# T& t5 \
  258.       strFullName=(*i).second;
    : d2 G0 ~2 p3 U" e7 t9 W
  259.       dwProgramState=AP_CONNECT;; [0 [( `4 `8 h5 n  v2 N- ?
  260.       return TRUE;6 m! Y' z2 s1 I
  261.     }" L& U9 y3 [/ _9 D! E$ D6 x
  262.     if(!bRestartUpdater)
    0 B5 h+ T# c- g( k) V
  263.     {
    * l/ Q+ |! J6 N( Z# V
  264.       int iCurrSize,iFileSize;
    : C2 x& x% S9 O( D$ Q3 \% Q
  265.       iCurrSize=0;
      R3 V! ]$ B* F. F# J- O
  266.       iFileSize=UpdateList2.size();
    # h0 T% H3 u/ r' s5 k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ) F+ E/ ~& U9 M, x* o# G% T
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ) F- n/ A9 k/ Z* ~1 R* Z. P/ H. p
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");9 d4 f0 Q: O( F6 V
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : y; V" e2 Q6 A3 c
  271.       Fclearf(".\\update.dat");% n9 H5 c; C9 `- t2 W  V8 J6 m
  272.       Fprintf(".\\update.dat","Bloodyf\n");* P/ x5 a1 ^; ?
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)' I! c, z+ [( b7 W% ?# a* t
  274.       {: ?, v$ x$ @3 P- `
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ( u1 @, v6 E4 P, M6 j1 G
  276.         {
    6 O2 Y0 Y( H5 k; B
  277.           file=(*p).second;
    3 w( J9 m5 x( R- _8 d. K
  278.           sprintf(filename,"(%s)",file->file);
    . e: }2 c# T# l5 D2 [; b
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; q* Q) C2 D4 y0 u5 U4 \
  280.           iCurrSize++;
    " w0 x  ^( u1 r! R8 g
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    2 u' x: J) I1 z% x1 t! I3 d% |
  282.         }
    4 W" G; w. d; {/ X/ r
  283.       }* i0 x+ q" f6 q: A9 I0 E% r& N
  284.       unlink(".\\update.txt");1 @3 x9 Z% u3 ~/ P4 @
  285.       unlink(".\\update.tmp");% [9 \0 M; }9 H8 i, u7 ]
  286.       Fclearf(".\\checkversion.dat");
    9 j1 m4 X) y3 b) w  }# R, o
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);9 {6 ~4 }# @  i! @" f4 W
  288.       if(UpdateLocal.size())
    8 q7 U: B% e  e. X
  289.       {
    ! `" C9 W5 Y, V
  290.         UpdateLocal.clear();
    " X# u5 K1 T5 V" H3 o3 O
  291.       }- n& }+ M7 G0 K7 P6 h1 k! Y
  292.       if(UpdateFile3.size())
    . e, i- F2 w$ J
  293.       {
    ( ]1 H7 @" a" w* n) W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ( l& g, l  y4 {8 x3 l1 K
  295.         {" u/ \4 Y" I* h
  296.           file=(*p).second;
    ( @( u( U, z  a. N% h6 @+ _4 V" S
  297.           free(file);+ W, u# U" T! f2 U+ p" N
  298.         }# R: _) _+ U7 N6 i: _
  299.         UpdateFile3.clear();
    ; h% Z; n* m- H7 o& z9 I5 f
  300.         UpdateList3.clear();! ?- z6 ?7 G/ A$ _8 n" x3 A
  301.       }
    " m. s: e9 r; X3 V, ?" }  ^/ T/ m
  302.       if(UpdateFile2.size())
    + b8 M6 F2 p1 q. X4 q8 P* {
  303.       {
    , f& M: \) {9 W5 F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    2 ]6 Q. Z+ ?4 i. G1 c) q. V
  305.         {0 w6 @/ p, l6 v. y6 S& P( Z
  306.           file=(*p).second;+ I" Q. T: B/ e1 f, `
  307.           free(file);, j! p2 u2 t% W! q5 `5 G4 }6 r
  308.         }. v. O) Z+ ~% b3 }/ ^$ L8 D" H
  309.         UpdateFile2.clear();- ~9 _, z% o1 E, T* ~/ h
  310.         UpdateList2.clear();& p0 L0 M. k6 ~( c5 g% g* L3 ], y
  311.       }! M* r6 d8 g! D' W! _- b& I5 P4 O
  312.       if(UpdateFile1.size())5 G. |' y7 ]* ]8 A
  313.       {
    / N- @& S" K, p4 F: H
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 x4 r" L. O$ ^3 W
  315.         {2 O! T% l" ?  D% N# K$ T
  316.           file=(*p).second;! c+ ~  l( z8 S( m" u  H# O8 G: {
  317.           free(file);
    2 P6 J1 _4 B6 c! d& k3 Z% m3 J8 ?/ ?# q
  318.         }
    3 L0 s: \: E+ M2 ^
  319.         UpdateFile1.clear();7 Q( _6 z- G3 U. e
  320.         UpdateList1.clear();
    * ?% P' f+ {1 @7 E
  321.       }
    & I) b$ v2 |4 i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & C4 }) q- H% P7 y# J
  323.     }
    % Y' [8 `. U0 q, b  q! O
  324.   }! c, }2 w0 c# H9 f5 b% H4 K" g
  325.   return FALSE;" ]# |" B* f% ?. K6 U3 k
  326. }, v( [  q# y% \  B( k$ h( m
  327. ' }: P4 W5 {& g. |5 u* G- |
  328. void CRevAppApp::ClearAll(void)+ P% H3 i" u6 l
  329. {
    8 I0 G7 q) E# }" S
  330.   LPUPDATEFILE file;
    9 f# K- R3 W* S) ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; _+ ^8 |- H" H9 f/ v% y
  332. # E2 O( O) \, O# w. f# ?
  333.   if(UpdateLocal.size())3 O4 y9 K- P1 l' g
  334.   {
    2 B- f+ j* b* z/ T" w5 M/ D! f
  335.     UpdateLocal.clear();
    & D( |, _' Q! s
  336.   }
    1 A) t/ o; w/ d8 ^% \3 c, Z
  337.   if(UpdateFile3.size())
    : u! G3 D! _9 Q4 _% I
  338.   {
    / b: f8 H: `3 ~- }. C
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ v* a: }3 z# S9 F" ~2 P& U& N) G
  340.     {
    2 s3 h4 v! g9 _7 y; d
  341.       file=(*p).second;
    # w- X/ y. c4 \( f" v+ D$ o
  342.       free(file);+ c7 Y6 v7 z0 @7 [3 a  ?+ |
  343.     }
    3 v; P5 ?% `. i2 }  j+ \5 b
  344.     UpdateFile3.clear();
      n4 p0 b* @0 ?2 o
  345.     UpdateList3.clear();  c# r# s' i$ B" |7 p# D
  346.   }
    3 D3 r" R7 n% H+ w* ?9 N$ f6 _
  347.   if(UpdateFile2.size())
    ( `" M' B) o: A5 ]8 r. X1 ^
  348.   {2 b: L5 S( K: a
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! l7 u- Y  Z" M* t& Q7 ^. v
  350.     {4 u: w: d' v6 ^$ b
  351.       file=(*p).second;2 k$ z/ M) G% K! W. o" y" Z9 i. j6 K
  352.       free(file);
    0 l, c7 r7 }! e0 F0 R
  353.     }4 R9 k7 K8 o3 k3 I. q
  354.     UpdateFile2.clear();
    , _' l* D. J1 T
  355.     UpdateList2.clear();: M- O0 H! E# |7 B, t3 |% A/ y8 F
  356.   }
      c! h" q3 S8 [! W6 i
  357.   if(UpdateFile1.size())# W' l! ^0 I/ ~( m
  358.   {' {2 F) [1 U' M- Z" N1 K
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : B) s, O0 x/ v( l/ ?8 Q
  360.     {
    $ U6 j/ H6 t/ F- t" ~
  361.       file=(*p).second;6 `9 ~% C# H* F' V$ J
  362.       free(file);9 {* {$ H+ _6 h& R
  363.     }
    ' g& p6 z8 A2 W' E. @. n) G3 n
  364.     UpdateFile1.clear();8 z: v6 y1 L- h! i  n. Y
  365.     UpdateList1.clear();
    % h2 S/ D, Q( X
  366.   }
    ) W) ]* m: M1 [$ A* L+ P9 s; I9 W
  367. }  0 q0 a. U0 i9 a: W
  368.   + h; x& T1 |' A$ t0 C. l3 Y1 ]  b
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    - E% O; N; W1 ?. j8 C/ k
  370. {
    ' w2 `7 L" L; v5 J) i
  371.   int c;
    ! \! m, B/ {* b2 |) s
  372.   LPUPDATEFILE file1,file2;- ~/ }3 i) P) |$ y5 E( B  h* [& V
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , b) j9 f) Q$ }( e
  374.   std::list<CString>::iterator l;
    & v' H6 ^8 A; g9 w0 ^; H+ B. c

  375. $ M- {1 Y$ N4 i: R) _
  376.   UpdateLocal.clear();) N0 d% D$ N- Q7 a9 _: |
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ K! e- m* H, P- C
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ' @0 F7 i! ]( ?# A2 c
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . C9 b/ Y; t( T
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* `: |# w. z( E
  381.   if(UpdateFile3.size())$ |9 r7 S/ z( Z9 O3 a$ Z8 R
  382.   {" E2 Z# g3 O8 w' J! X) G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - S. z1 A, H$ @8 w1 ~$ X
  384.     {
    ) e) H0 Y" |) e1 G5 r8 E
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) ^  r* D, F) e" R; i0 }# D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & M& W. {; X9 C+ ^2 \: M
  387.       {7 h( W' s. B* K7 o$ L
  388.         file1=(LPUPDATEFILE)(*p).second;
    & r1 \- G) \' U! B  }$ S2 k3 E
  389.         file1->vers=file2->vers;
    , y  d+ x1 F! Q6 I! d* i: {5 I# W
  390.       }  q  W% B) F" p1 b" b6 p# i
  391.       else
    / g0 T7 j* {. \- C: I. ^+ y
  392.       {1 @6 W7 ^- g9 W2 T0 Y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 V6 t( l( G6 \! S' z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    5 k) [" ~% c) i8 ~0 a
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    $ r+ Y/ O0 t7 Q& O! }" H( [  g
  396.       }
    / Y/ n: x3 c8 E) c6 h6 j- S
  397.     }; t$ h# U' I, M3 Q# @8 V1 {- R
  398.   }0 u- O# a7 R3 W% N" g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' B) [( }. B( o& s
  400.   {/ `% V5 ?; b. A2 l: e
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())4 V+ S, A8 l: \. o0 S* W
  402.     {. C  [/ L/ G9 C
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 B) U$ Q. J! p3 D# Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * L& j. V" {% T6 R) e' d
  405.       {
    % K% c1 L; W/ D" E0 u) J, g
  406.         file1=(LPUPDATEFILE)(*p).second;& A9 T+ u  v2 v8 o' w9 T6 f
  407.         if(file1->vers!=file2->vers)
    - [# r9 U! y9 n% \8 l( b- B
  408.         {
      t: @% l0 [: T; J! y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    + {% S$ P" i9 m9 j
  410.           c++;
    7 u& r% P; ]  G
  411.         }9 ?+ c1 a, h0 @/ j5 X4 Z" P( K
  412.       }5 m4 S$ U3 j! a  {) _
  413.       else! v% l) L7 |7 |$ i; J# W
  414.       {) e. x. }, _, |1 F
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 B/ W! V0 P3 Z+ n
  416.         c++;
    ! A1 y2 [- M: U, F0 [7 b, U
  417.       }. u' f/ V% `, o) b+ _
  418.     }
    " B2 a* X  A; D2 \5 n& \  M6 J2 }
  419.   }. E) f# L9 a5 g6 Y
  420.   unlink(".\\DownLoad\\update.txt");
    & t0 V6 C% j3 W
  421.   if(UpdateLocal.size()) return TRUE;* A! g( [1 @3 y5 C- H7 d
  422.   else                   return FALSE;! i) X' S5 ?4 s* \( i$ A
  423. }! M; e4 v5 e1 P9 P. ?
  424. 3 i+ s# ~. c# j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    1 _7 f9 I- |8 F3 f, b
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn", {/ z5 C8 }; Z* o2 e8 m

  427. 9 t, t$ n+ s1 B

  428. , ]+ b5 t5 P$ k  m0 T+ y

  429. % n2 y% Z, ?- w1 Y0 [
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)- h; F3 ~) E+ s  h7 f/ m
  431. {
    - }# W: ~5 Y7 L1 l* n5 ^* ^, [
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    2 \. X6 u6 y. [1 R5 p! E
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 R4 \: `: M9 {8 m/ Q/ x/ J: D/ I
  434.   {+ Z+ S! a4 A5 X2 X' ^  v
  435.     char szLanguage[50];6 i7 d; V8 O( h! b
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) x% h( v" I" ^% |4 K9 d  l7 y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    1 }( j! s: i( r. e, @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 [. `) _) y4 C& M) U- w. Z# z
  439.     else                                   m_iLanguage=ENGLISH;
    % x7 S' L" O8 ]
  440.     char szRegister[100];
    6 A, e% D5 X2 J4 s2 @  Z& y
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 Z& P) x  B1 F$ X1 ^# k$ J
  442.     strRegsName=szRegister;; `- a! q7 k1 l+ F# S
  443.     char szPatchURL[100];. W4 C6 V/ n* J1 E& ?  {1 M' x
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  E0 o& i1 G' L- k% S" Q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 n( G& B2 M( C. O' j. s7 I+ I
  446.   }6 S4 Z/ w0 I9 j& r; m) q
  447.   else
    & F+ \0 v$ L  M2 H
  448.   {2 ^) S/ V9 g2 d) |0 k
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ j' i) v3 t: U1 W! H
  450.     strRegsName=DEFAULT_REG_URL;, n+ n# c5 J! y$ |3 u/ P
  451.   }
    6 X$ W8 t0 A& T. U# E7 d
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 o1 W8 [5 o& n) ]3 a
  453.   {$ N) T  X2 j$ I: q9 F6 }& S- H
  454.     char szIP[50];
    2 Y% O- r& `; f4 P( m0 v2 O; L
  455.     char szDIR[300];7 }5 ]( f; t% Y! k. [3 b  ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; A3 a: d4 h# V
  457.     {
    * ]3 \' L8 M; o, ]+ _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. H1 Z6 A/ l- H- d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    : S+ L6 g6 y  i  J+ g2 |
  460.       strHostName=szIP;1 F/ b9 C4 y1 D! I2 X% b9 {
  461.       strHostPath.Format("/%s",szDIR);) k( P( s2 P5 n, A: t: I6 g  E$ z
  462.     }3 K9 O2 `" Y8 X. {1 \+ P- \* O
  463.     else
    0 J/ }# N8 k2 v
  464.     {0 ?! p1 m6 L4 Q5 P( c  F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& Q' H1 P2 S. W( E# B
  466.       {
    3 C2 W4 k5 m1 J) D4 M
  467.         char szLanguage[50];
      @6 k. L2 O$ y$ c9 t! g( p
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    4 I3 K: `6 A! w" y2 h
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / t/ Q& Q% H! J# p, q, L' N+ \
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; T1 R- Y: b7 _4 H3 D
  471.         else                                   m_iLanguage=ENGLISH;$ P( T/ k9 a, q
  472.         char szRegister[100];
    & l1 }6 {4 H; A0 A
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . b+ B8 }" S) x; N( z' n
  474.         strRegsName=szRegister;1 k% \% U6 b# ?( b1 P1 P& |
  475.         char szPatchURL[100];" W$ Z6 \; h* _, S
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 O+ M) Y6 V# }
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + W8 {7 j+ v# t7 n9 N/ p% Q
  478.       }
    9 X% O$ i8 t: H* K4 ]- l2 f# u
  479.       else2 f7 S1 z2 Y( q; u9 Z1 G1 F
  480.       {
    $ i9 i" E" [6 }) n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 U. y7 ]2 e$ J. c! }" o
  482.         strRegsName=DEFAULT_REG_URL;
    6 u: K' h3 c5 i* s. F
  483.       }7 D. y# o" {9 G' ~* k
  484.     }' Y' p8 `8 ^/ F
  485.   }) _! I: d6 J# u1 a2 E5 d
  486.   return true;
    : o: K. s7 x1 v: L% O
  487. }
    ) |$ G7 _0 L4 B2 S- q/ {% k

  488. 0 i1 x- d% M$ @0 k; G! [
  489. #include ".\ZLib\unzip.h"
    ( o( \8 |! r- w+ m/ u+ f9 v
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    , V7 l2 [2 K7 ?
  491. /////////////////////////////////////////////////////////////////////////////$ R6 \2 u0 ^" Y
  492. // CRevAppApp initialization
    ! G" o8 P: |, l

  493. 4 ]9 K5 y' d; i8 P
  494. BOOL CRevAppApp::InitInstance()3 @) {2 O- l, [8 o
  495. {& h) @  I5 s3 d* l% R
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];. X! Z* L6 b, {1 ^
  497. # F5 N* t: h9 c5 f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);% t+ S) J3 @- Q: ^0 o8 H, }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))" R2 }, ~7 q2 M
  500.   {
    ) q+ ?! z2 E. r# |- ~
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");4 w5 |# o8 m& R4 ~7 t2 O9 E( c
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    7 I3 E: P6 S# E  `" |# z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))( W. I' C8 S6 l; l" I: U9 `
  504.     {
    . a/ m$ L9 j2 J3 _4 U4 B
  505.       strcpy(szPath,szPathTarget);
    . l8 s( Q5 E. V+ j- S1 R  m
  506.       SetCurrentDirectory(szPath);  W1 S" G7 ^2 e5 v" K3 _
  507.     }  A4 R" k5 K( H' S
  508.   }7 L1 Z7 {5 t4 K& X) f
  509. #ifdef _DEBUG
    0 l  U3 L+ g2 `4 {5 }9 |
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 l4 h! b: t) i. X  s3 A" e& `
  511. #else# Q: o8 L9 X1 a  Q% @& b; j8 R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)); t% c' X  l7 D. W! d; y- k) {4 f
  513. #endif( b' ?; R+ ~( G0 f
  514.   {
    $ ^% O; S5 B+ b# y: u
  515.     char tempFileName[MAX_PATH];% a8 a6 \6 t6 c4 Q
  516.     strcpy(tempFileName,szPathSource);9 ~2 Z4 M9 V  z& F$ U6 k/ v
  517.     tempFileName[strlen(szPathSource)-12]=0;1 b) b& _" M0 U1 U+ `  v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; {$ m1 e+ d+ R: ^8 ?
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);3 e# h6 A7 @' ~* X# j$ I$ P7 \5 v
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    9 F7 u8 F6 @5 `0 x; u' D5 p! n
  521.     return TRUE;6 b4 O! Y) ?$ j0 T* ~  T
  522.   }
    . s0 v! t. N/ e2 c3 Y
  523.   // Nuke 0118: Delete run.exe) k% [7 A. l% n2 u. T3 U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ; Y6 r. T; _, g) p# C2 n. S' q7 }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ) E/ L9 ^4 J0 ]! v4 m
  526.   if(!ReadCfgFile("Config.ini"))) z8 {7 n/ O/ K- j, f
  527.   {
    ) Q- G2 k! _) Y0 {. v
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , b( I/ Q3 w; |# ]; J  b
  529.     return TRUE;- _6 v  N$ f9 r  w/ `
  530.   }4 c8 Z/ f# I2 K) f' a3 z8 h# l5 }
  531.   HANDLE mutex;% d: F# a; [0 M  O. p4 o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))8 I( D9 X. Q3 R  X+ Y1 u! ]) ]8 C% T
  533.   {
    3 Q: |9 T0 l! M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): o& r. w# T: L: C9 B% c! v3 j- S
  535.     {
    , E7 X* n5 B* e, X3 b* e# ]9 c; S
  536.       CloseHandle(mutex);
    / E( `/ f' ]! r, {/ V3 c
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , I+ ~; P) n6 z& Q# {) ]$ E
  538.       return TRUE;
    * h( W4 J4 B: y' \; p1 |( R6 d
  539.     }
    / `' H% ~$ n! s6 p8 ]
  540.   }  . u9 U* F7 R: N+ H4 C2 N
  541.   CloseHandle(mutex);" D6 O; s  o4 L* u. ~0 ?
  542. % m2 q& c1 q- Y" d
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);1 j2 |8 h) w" D4 X' V( F0 ^

  544. , z  r, K6 c3 B
  545.         AfxEnableControlContainer();
    + s+ j4 O4 z' O
  546. 0 O- z; C1 C- E) U9 n1 d- t
  547.   bCanUpdate=FALSE;
    & z9 R9 R6 ~5 z# A/ j: X
  548.   dwStartUpSteps=1;
    ! h1 A5 r' ]7 t: C/ T! u
  549.   dwProgramState=AP_NOTHING;/ B  t) B! Z: c5 }+ E( K
  550. + t) l6 M9 H8 n- t& a$ G0 Q
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; C% r: o% t1 o5 e# @9 ]2 [% d
  552. : c9 U" ?/ v/ a% I% G1 P8 x+ x
  553.         // Standard initialization
    3 ^% F! t4 r; R
  554.         // If you are not using these features and wish to reduce the size" Q' J% g' j' f2 I2 B
  555.         //  of your final executable, you should remove from the following( G. I+ |9 ]$ h9 r0 m; ^; S
  556.         //  the specific initialization routines you do not need.' J7 T! L5 b6 @: h" `: e0 P: ?

  557. % e+ F! z) ?% V5 W! Q9 C/ s! k
  558. #ifdef _AFXDLL6 y9 @# p" ~( ~! r/ Q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL( g5 H; J1 @+ s
  560. #else
    1 e4 [, D1 W4 n: O+ P
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically5 a: b2 s; S+ F: k0 B  z0 l
  562. #endif
    9 g8 o0 G' G. l, w0 i& U

  563. * G* P* o* U' v, S9 ?" Z
  564.   dlg=new CRevAppDlg;7 _, c5 ?' ?/ l" S
  565.   dlg->Create(IDD_REVAPP_DIALOG);
      @5 R( Q/ z  }. r) \
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' h3 s! E8 I' V" D3 h* s8 _, F
  567.   m_pMainWnd=dlg;
    . r" F$ H* d( r$ W- U
  568. # W, S( ^4 I) \1 U7 |$ ?" a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);- \2 z1 m/ M' N+ E
  570. 9 A4 u- S9 f% f- j3 I5 v* v4 E. m
  571. //  GdiplusStartupInput gdiplusStartupInput;
    - r; v' @  k  a9 D& w  V
  572. //  ULONG_PTR gdiplusToken;0 M/ A, e: m! f( M& T& x9 V; Y) ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    6 N# N1 n% Z2 d/ m$ v9 {
  574. 7 y- q& Q0 D5 u0 g1 H  F
  575. //        CRevAppDlg dlg;4 p2 A  L2 g- W2 n- M" @. `
  576. //        int nResponse = dlg.DoModal();
    ( G% ?, B7 X# _# c* [  {. g2 Q5 G
  577. //        if (nResponse == IDOK)0 I1 \$ ?: {! H! v/ W5 L2 I
  578. //        {9 d# ~( A: k* B+ w
  579. //                // TODO: Place code here to handle when the dialog is
    3 L, `( P6 m. n& W1 v
  580. //                //  dismissed with OK7 g# `" K: H8 i) e! P8 v8 j/ g: i4 `
  581. //        }
    ; W" X. G) D( N# ^0 [' z
  582. //        else if (nResponse == IDCANCEL)
    ' p  y# [" C" r' ?: O
  583. //        {5 B) Q" C. ?" _3 ^% S# W( M
  584. //                // TODO: Place code here to handle when the dialog is
      Q( M5 F: D7 F9 f7 }/ |( c
  585. //                //  dismissed with Cancel7 k# s* c9 B8 N3 E. O6 Y6 l
  586. //        }
    . }( k% K! m: l- J3 Y6 V

  587. ; P7 n: E9 C! P* ?$ M
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    % Q/ X8 r3 s2 O! l* J( n& T
  589.         //  application, rather than start the application's message pump.
    6 g  p3 f' k: @6 u6 ?
  590.         return TRUE;
    6 U7 M" Y* Y. m- \7 N
  591. }( F1 i" y. Q8 F! @

  592. - P3 Z3 t; _' T3 o
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 t8 C( C  u$ z8 f4 p; n* q
  594. {
    , j0 O0 p8 j" M8 B- F5 c  E/ |
  595.   int i;
    . e) k& G  T, z* \
  596.   char *szRet;. R' ^% h+ ?* J& A% I# ?8 \' V; {- s) N
  597. 0 Y% R( E9 \! E6 _/ t6 u! M! F
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    * ]1 h* Q; I- E+ h  {% f
  599.   if(sztoken)3 P6 T) P2 s- ]7 ]! }1 u2 f
  600.   {6 O6 H  `# U- ^* a" u- l" c7 S
  601.     szRet=&sztoken[itoken];
    8 E$ F" v8 R" J9 }& A8 B/ ?& t1 Y* z
  602.     while(sztoken[itoken])- c6 C; v& f8 M3 s# A4 L
  603.     {$ H, k4 k% F0 ?! J# l- b# J$ @8 C* x
  604.       for(i=0;i<(int)strlen(token);i++). \  T* d! h' `% u- a; L
  605.       {7 w1 H- ?1 \; o' j0 {$ l2 m! k5 V
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 D/ ~) V% r' Q
  607.         {
    3 I, n. m: g) q0 Z/ B
  608.           sztoken[itoken++]=0;0 H) J. @. x+ O+ a- d# E
  609.           sztoken[itoken++]=0;, f0 `! K3 T  o( y2 T, N
  610.           return szRet;) S1 A* V% F: B) g5 `0 r' H
  611.         }
    + l/ N6 h+ z' `1 v  b  V! S, U
  612.       }
      i9 W) H6 k  K+ [- A& _# G
  613.       itoken++;
    . \+ h) @" q; x8 H0 `# V4 S
  614.     }
    2 Z! X' g% d1 k* v! l' n( s2 t
  615.   }5 s8 J: K0 ?* t" ]
  616.   return NULL;" e$ A2 s% G8 w8 k, l1 V3 h
  617. }
    ' m8 R# k5 i3 @- E5 w) o' [. c
  618. + z4 t7 T; e+ J
  619. void ProcessProc(long Total,long Current)6 O" E, Q' ^4 Q* ^  I1 e
  620. {  @( d9 I. K) D0 C- t$ {2 s
  621.         MSG msg;
    ; d4 T; `1 @' t- i5 q) {
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    * X& ^2 x! x8 s! R" O
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 L- k" Z: [; \! R
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))- i; Z; L' j- @9 L5 Y
  625.         {
    ' J! K1 f/ H0 `
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & E+ l+ b2 J8 Y$ l( f( \
  627.                 {
      s6 V- q2 Z5 `' d# o8 b
  628.                         return;/ k+ u# J9 V( G2 ?5 }- B
  629.                 }
    ' L6 W- \8 `9 G0 O
  630.                 TranslateMessage(&msg);; [" R4 T, Z. M- U( S4 A2 ~
  631.                 DispatchMessage(&msg);. a) Y$ s8 W6 U. \5 m7 Y
  632.         }       
    5 u! t; |/ [- L# J) @3 c
  633. }
    - q* o' ^" o9 g* y+ f

  634.   g9 v! n$ y! ~, R+ F5 K
  635. BOOL bFirstChar=TRUE;
    6 d# ^1 D8 s1 r) C* m
  636. " l) ~6 T0 Q8 I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)# _9 f- Y8 ]( |$ n
  638. {
    5 A8 T5 Z' H9 E, U1 ~; q
  639.         // TODO: Add your specialized code here and/or call the base class2 A. ?' j4 z6 [7 z( b4 p" J7 a, f4 O* Y
  640.   switch(dwProgramState)6 V8 |5 i: I5 Y8 p
  641.   {
    ; R+ M- S# W8 \) t1 z  V) K3 u
  642.   case AP_NOTHING:1 S4 T. @# h5 e
  643.     switch(dwStartUpSteps)1 ]- m6 E. z! a3 s' F4 R9 p- U  @
  644.     {7 Y) t/ R( v8 d6 p2 U) t
  645.     case 1:
    4 ?7 W8 X3 f" h- M, j9 d
  646.       {
    7 N: p. T4 @! p4 {& `
  647.         int i;6 W# e& @7 c# x- d8 n) T8 C1 j
  648.         CDC *pCDC=dlg->GetDC();
      D8 [3 S3 N) m- b" P* P
  649.         HDC hdcwnd=pCDC->m_hDC;
    ) x. C* s6 b' o3 N( g/ t
  650. //        Graphics graphics(hdcwnd);  E7 y5 T) o4 Y" F  e! r) P
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. E# Z( C9 u0 l% q
  652. //        INT iWidth=bitmap.GetWidth();
    " N8 \0 B3 ~: _* A- [
  653. //        INT iHeight=bitmap.GetHeight();) c1 B- J0 f0 u% o% [! i
  654. //        Color color,colorTemp;
      P, U# ]. b4 H9 Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)8 o3 u( l- s( ?+ A9 y
  656. //        {, [/ M( Q/ w, t% Y5 w
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), a% C6 k4 ]9 s; N" i) j% D6 R% \  h
  658. //          {
    . h6 Y/ r" s! Z7 F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);4 S( I+ u& }! P- P; W# w
  660. //            colorTemp.SetValue(color.MakeARGB(
    # A& W0 p! j7 g0 Z% I2 V
  661. //              (BYTE)(255*iColumn/iWidth),
    + Z# T2 s1 o3 U3 ]. q, L
  662. //              color.GetRed(),
    6 c$ ]( [, {2 T
  663. //              color.GetGreen(),
    2 ]: I$ a! W  e0 r9 m
  664. //              color.GetBlue()));: M( k, y9 o. @3 O2 Y6 J1 y; I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; x2 R! V" v& X. v; t5 t9 g
  666. //          }
    1 s) R3 K9 y+ d( F: e
  667. //        }; d* p2 x+ n1 I) Q" N, |+ D6 ]
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 J, i: E) @! q/ N4 u" j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& Q1 A% T- i0 g! l7 Q9 U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ( ^+ x6 `# x4 ]9 L( {
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 C$ k* j- W# H
  672.         for(i=0;i<240;i+=8)
    4 O! P5 w. ]" w! T# h9 K
  673.         {7 }0 h) v/ |; _& T5 I
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 N" i# m6 M( B+ s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & q4 d; a" V8 C% g, }: [
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 I" X6 ]" S. ]
  677.           Sleep(33);' i5 E/ }* F4 Q% r. }
  678.         }
    , A* E. e8 D( h+ u# R) ?3 @1 `
  679.         Sleep(1000);9 n( ]8 b$ x- N! {$ A: ^; C
  680.         for(i=240;i>0;i-=8)4 u" D$ H# F) s( \2 E( P3 ]) V
  681.         {5 b$ ~. A; U; ?9 Y# a
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) A4 d2 ?- [: B" e4 r
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) |' Z5 A1 Q2 ]4 H, L0 }- Q4 c
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 G& y5 w* Z0 I: B. k; O; C* C2 y9 Y
  685.           Sleep(33);2 j& P6 [" H+ S4 i5 W
  686.         }
    * B- X5 }% o* z3 [. C' f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 `. w* i; q! i" u$ {; V6 ~( A
  688.         dlg->ReleaseDC(pCDC);
    , w1 v5 r/ k/ R+ Z0 c8 T
  689.         DeleteDC(hdctar);
    $ Z& F. \% k) s4 f& ^
  690.         DeleteDC(hdcsrc);5 h) F5 s7 L* {# k; V3 M& |- r& Z
  691.         DeleteDC(hdcorg);
    + n; m5 i2 ~% L/ k# l. \0 A
  692.       }, ^7 D, e3 K  k, I7 y! M( o
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ K2 e# c3 q  [* i) H( G
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");5 o1 }, h" Q: @1 A8 J2 _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) v, o. g) P2 M7 S' b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");2 }- d! Q" ^( k) x! T( L7 H6 c4 b$ j4 R
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 A3 d9 v' m0 L
  698.       if(!Dn.Connected())
    6 E, }% m: _' ~
  699.       {0 R) u& r% N; A5 _
  700.         dwTotalFiles=1;
    # o! [0 r7 h* e3 k
  701.         dwDownLoaded=0;
    ) I; F' G9 |# U
  702.         bSilentStep=TRUE;
    3 H0 ~  G# e0 ]! k0 v- _. _
  703.         bCompressed=FALSE;5 M$ j) i7 t/ M& k' l
  704.         strExtLocal.Empty();0 a! c' ]0 N3 G
  705.         strFullName="readme.txt";
    ! j% x$ b& G0 d, n
  706.         dwProgramState=AP_CONNECT;
    + g: @, E  D& }# n4 x2 h
  707.       }
    , s: _' T0 F2 X3 N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    $ R7 H$ U) f* R2 I4 N
  709.       dwStartUpSteps=2;7 S& M2 ^) w  m6 ^; x9 a% }
  710.       break;- [/ ?3 A! q* o# c
  711.     case 2:2 Q- Y$ ]- n2 @( v2 u7 s* l
  712.       {$ X0 G5 O+ G; U; s3 }6 t
  713.         int iEOF;5 r* @" A& `0 N) Q; Q7 d
  714.         FILE *fp;. m; c* Z- a6 X8 Q( ^
  715.         char szString[512];
      \4 T0 n/ g+ o5 v8 Q' k0 l# F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* T0 [5 V- n0 |2 M
  717.         if(fp)# V0 q$ Z+ M" L+ d% u+ T: Z& L) F1 B
  718.         {
    - q7 Z2 u7 j: w% E( t
  719.           do
    % e/ `/ a; U& N( j* d. ^) F
  720.           {
    # l: K& S' {4 z3 H
  721.             iEOF=fscanf(fp,"%s",szString);
    2 {( {/ f! A3 I& {! J
  722.             if(strlen(szString))
    6 c1 I  x' b; T' m' a, f. j0 e
  723.             {
    # k5 W( N% n3 P
  724.               if(bFirstChar); W* R/ A2 }  M: H+ f5 \
  725.               {, N7 B+ q/ J5 n8 |4 m, @
  726.                 bFirstChar=FALSE;1 n6 \# V4 C- T( C. o3 o! [1 ~- x
  727.                 bConnectIsBig5=FALSE;; n# ^' W0 B5 _5 E( D( h9 \
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;! D8 A. @" `& S; W" a& Y
  729.               }
    $ S& m) ]" S* g& [% t+ ]* L9 P1 T
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));0 E. A" }6 b4 f+ a2 n" f- J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 W+ E( k1 {( C
  732.               dlg->m_ListText.AddString(szString);' }! Y; ?- P2 E) l4 g5 H. I6 X
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- }* x, U, F1 ?7 A+ w% y
  734.               *szString=0;5 u6 N; m# q! G- d# b) W
  735.             }
    9 @; I7 B+ R) G* s* n
  736.           } while(iEOF!=EOF);, g$ k* @+ j* x# u) F, o
  737.           fclose(fp);1 Z7 l0 ]' a$ d
  738.           unlink(".\\DownLoad\\readme.txt");( l+ x& Q3 G2 [
  739.           dwStartUpSteps=3;6 T$ n( S2 U) n# h& z- m
  740.         }
    3 L* U7 Q: R5 e; m
  741.       }
    1 X: [/ J/ M: o, U- O- I: G
  742.       break;
    . }- l, e0 M1 X- j0 N
  743.     case 3:4 x4 C; w! s/ l4 u" u* l* }
  744.       if(!Dn.Connected())# Z" Z- L7 r& }
  745.       {& x. i+ \8 J) W5 }5 ?
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# [  x$ g7 N1 I/ ^/ `6 N$ @9 _
  747.         dwTotalFiles=1;( }" Q: e" {9 Y8 f
  748.         dwDownLoaded=0;7 |5 Q, ~" t& a7 _0 L0 p
  749.         bSilentStep=TRUE;
    4 z; p6 g3 Y" E9 V1 W$ ^" B! |  A' l0 }
  750.         bCompressed=FALSE;
    6 f) G# Z" P" I& D) A
  751.         strExtLocal.Empty();
    * t& g% D, |  F' \* v  X
  752.         strFullName="checkversion.txt";
    ; h  {- K- D7 h5 z7 X" v
  753.         dwProgramState=AP_CONNECT;
    5 F, M' q& q- W* b+ c8 f
  754.       }
    5 @0 p+ [+ o, D5 W# j  t1 W/ C
  755.       dwStartUpSteps=4;
    & E, ?( J' S3 E
  756.       break;
    " V2 Y6 Y* ^: V% |; D5 c6 E
  757.     case 4:% w* h" |- L0 ~# b4 R/ a
  758.       {$ b1 l6 U# n" A/ Z5 H
  759.         FILE *fp;% R% v5 W6 [/ S0 w
  760.         char szString1[128];
    ! s7 ]( a% Z: j$ D$ T$ g; e( e
  761.         char szString2[128];
    4 r9 \% t+ V' e8 v/ I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 C6 F. k4 I  B
  763.         if(fp)
    ) f# g! l9 Y: E! B3 G
  764.         {! G* d* v% V% |" u
  765.           fscanf(fp,"%s",szString1);2 R4 q7 e( M6 j5 L  i, m
  766.           fclose(fp);
    - C2 u0 z/ g& q. I0 v
  767.           fCheckVersion=atof(szString1);! m( H( z8 b% `
  768.           fp=fopen(".\\checkversion.dat","r");/ z! H% Y3 h$ _
  769.           if(fp)9 S4 F+ P) ~: f! L+ H; `2 ]
  770.           {
    " H+ s. f! M$ w4 |
  771.             fscanf(fp,"%s",szString2);" A6 @, ]- ~0 H( [" M6 i
  772.             fclose(fp);
    ) ^9 o% C4 d2 k0 x# _
  773.             if(atof(szString1)!=atof(szString2))& M; u, M7 T4 g
  774.             {
    ' m' |7 V& _" @: l( F$ g
  775.               if(!Dn.Connected()). @* V) m$ d. k( F
  776.               {
    9 v# C. i9 ]3 K' u/ }+ s5 p4 E
  777.                 bFirstUpdate=TRUE;& {1 q; w) j" [8 n  J
  778.                 dwTotalFiles=1;1 ?# b/ P4 D; B6 k! c0 M5 R- ?
  779.                 dwDownLoaded=0;
    # O8 D8 d0 u- l. |" \
  780.                 bSilentStep=FALSE;
    . d4 k4 t$ y' ]. b4 S
  781.                 bCompressed=TRUE;
    ( ^  X; Q+ S% B  @9 u
  782.                 strExtLocal=".\\DownLoad\";
    4 V' ]  Y, ?8 L$ Z  a
  783.                 strFullName="update.txt";
    ' a2 n/ K1 ?( S& L" u
  784.                 dwProgramState=AP_CONNECT;, n- F, W0 R$ \
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# o  W* O0 i' R% q7 S) S( U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 A% N- r- r: E+ a3 E# b2 C, s
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & f" v4 [( |8 `/ t3 e+ U1 o' w, {
  788. . A, T2 \# N$ p( \: {9 L7 o( b
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) r& K! s! T/ L+ z8 K, F
  790.                 unlink(".\\DownLoad\\checkversion.txt");( L" a9 @" K4 ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)% j: E9 Y! u0 E! f0 D, i3 d
  792.                 {
    , V& H' p+ A9 P  o& N. @
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");2 ]4 w( G. h/ V0 k1 X. h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : t$ z3 p& H& `- x; t( X$ D, f% K% m
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");; R6 m3 S; _/ R/ K! N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! U/ W3 U- n7 W. S: ^5 {
  797. ; w% z, `: |, A, ?/ U9 ?
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 B" t- w4 X0 o) k( F
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");/ b2 w4 r+ `3 w
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: Z6 @; T$ Z$ H6 h& j; J% Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) m, B( s* |4 p! d
  802.                 }$ i8 D/ d3 {4 o8 w
  803.                 dwStartUpSteps=5;
    6 C0 A8 i. z- @, U3 j& @: o" e
  804.               }
    ! i) ]8 E9 l0 h: H& O
  805.             }
    3 Q% e- O- N: Y, D& D6 Z
  806.             else: `( U( A1 y+ v) u* i; h; g
  807.             {
    4 V' D; ^! H6 o- C6 ~7 N# C8 u/ s+ a
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * ]; @# ?0 l3 W
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* K0 Y, n$ P3 }; X) M
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ) V$ \7 e1 Y1 Z% F% _1 i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    - z( X5 n! u  c. g% m& a& M

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

# _1 F* r6 j; W$ b! J# ~* c

評分

參與人數 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客服返回頂部