找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
/ m5 m  p" i: v) v8 k9 O
  1. / RevApp.cpp : Defines the class behaviors for the application.
    " L* k- _) R( W- J- j0 N
  2. //. s7 O# q! U$ p4 C  O8 ~

  3. , }* J# c8 Z. d2 k  X' N. t' U( a
  4. #include "stdafx.h"" u  S! Z: C7 `! h

  5. 1 a9 f# |, j" O' Z" b
  6. //#define UNICODE
    , J% ?3 a$ x4 S6 }' b( A2 W
  7. //#include <gdiplus.h>
    : z; U, D0 [! k" A9 K
  8. //using namespace Gdiplus;
    ! J5 ^! E# B2 l- S- J/ H9 U
  9. 6 o0 Y1 S: K. M" j" V( l
  10. #include "RevApp.h"
    4 }, ?, a6 x) b' V7 \) `
  11. #include "RevAppDlg.h"
    ' `0 [$ ~9 p1 V; b9 ]
  12. " v# d' T4 {1 Z' l9 z
  13. #pragma warning(disable:4786)3 \% T9 a, c: L  m" [
  14. #include <map>
    ; P& M% l# a% z# z2 S
  15. #include <list>
    4 P( |) _! O8 d4 c9 H
  16. #include <direct.h>
    5 V4 S( L( ~$ G) a( ]$ `! C

  17. 1 w1 D1 H+ I- |- J7 p
  18. #ifdef _DEBUG2 V) H- u% y3 g! m  V& B1 i1 h% ]
  19. #define new DEBUG_NEW& }5 e7 |3 [. H$ {2 x, i* Q4 V0 |
  20. #undef THIS_FILE  A5 I1 ~9 a1 g+ v
  21. static char THIS_FILE[] = __FILE__;
    $ R* [; Y$ o  X5 e4 p" |& n; a0 j
  22. #endif
    7 q; E" K6 M3 F5 ~! Z/ W! W, v
  23. #include "SkinResDef.h"
      f/ E2 r5 f/ Z1 n$ S! f
  24. #include "ChangeBG.h"' q- m0 j+ f' H) S4 A
  25. #include "AFXINET.H"
    5 Z, E, R' g) v2 q
  26. % _' E( v& C4 A# I
  27. #define TRADITIONAL_CHINESE 0
    + R) u( H+ A( b' L# B. u$ ^! D
  28. #define SIMPLIFY_CHINESE 1) o* I5 w9 k8 z2 Y
  29. #define ENGLISH 2  w$ w; U) }; u, x; U
  30. int m_iLanguage = ENGLISH;
    3 y, t8 A) Y4 ?/ L: x/ F. N: T6 A
  31. /////////////////////////////////////////////////////////////////////////////& K. a  t" Y/ t4 Y' y/ a+ C* n/ @6 N
  32. // CRevAppApp6 h; z! z! Y& L+ J
  33. ; e/ @& b1 }) }5 q/ l5 a; q6 q) a: s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    9 Y% f$ {8 p! O- O/ \3 S0 k* w
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    * p! T6 S8 A2 x8 b$ z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ u8 N. ^9 x  |' P8 j) u
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!  v3 A5 |8 P; Z  O- j) |2 d
  38.         //}}AFX_MSG9 A# X' `$ Y' [( M: n
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    $ k0 r8 J( X( m3 w
  40. END_MESSAGE_MAP()/ Q' e7 C/ |2 b9 `3 K

  41. ' A$ {6 o  v, F% ?$ Z
  42. /////////////////////////////////////////////////////////////////////////////
    8 [/ L5 f9 @8 e( {8 E& n
  43. // CRevAppApp construction. c, ?' ], g, ^

  44. ; P9 ^' O4 O" j& `2 ?# A  M% |
  45. CRevAppApp::CRevAppApp()
    # i& g' t2 h" a+ F
  46. {# W, s8 t* L0 x$ B
  47.         // TODO: add construction code here,
    9 Q9 E, L6 o! l, {: i
  48.         // Place all significant initialization in InitInstance
    : E: U; m7 |( i4 r3 i
  49.   bDisplayIsBig5=FALSE;- J" ~4 ?$ r" Z
  50.   bRestartUpdater=FALSE;
    2 E2 w1 s& l/ c
  51.   bFinishUpdated=FALSE;
    1 r2 q! {3 w. F% W0 X0 c* |3 Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ! E: W$ N8 r- {
  53.   InitChangeDataBig52GBKS();
    3 u5 @3 P2 i8 D! v& S
  54.   InitChangeDataGBKS2Big5();
    . ^" e; C+ L+ S: L& S
  55.         //, Q( H7 ^# ?7 S" D0 j3 F
  56.         bClickRunExe = FALSE;
    ) f3 V, Q( [& m
  57.         //+ ^+ f( P! i9 ~* P( b( M
  58. }
    : d- ^- l+ o1 Z2 y/ Q- B# k( X7 Z
  59. 6 V0 K! l1 |7 _3 y: m9 C& z) X
  60. CRevAppApp::~CRevAppApp(); \7 D5 o9 `: Z
  61. {0 d- k: w3 J$ O% {* M$ n. p6 p+ c
  62.         // TODO: add construction code here," l" {! }# ]- y& M. R7 A  ?
  63.         // Place all significant initialization in InitInstance: U. Z% K* w$ q5 B
  64.   EndChangeData();+ _; r- n) L) M
  65. }1 H: r, M# T0 o8 {: N/ N6 O

  66. ! ]$ D( A6 o  d5 O( b
  67. /////////////////////////////////////////////////////////////////////////////
    ' N, ~! W1 g* {& ]" j/ _
  68. // The one and only CRevAppApp object) H5 _$ T6 h6 v# x

  69. 2 a* n3 O2 y# g1 C5 U: ?% v
  70. CRevAppApp theApp;& ^& ?5 F/ ]- i$ P

  71. 9 y9 X3 N1 }, e" Z$ i0 r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 @) ]2 c6 ?6 O6 X" j( ~  V3 _
  73. {, [, [( Z, w" H- p/ O4 X3 K& [
  74.   int iEOF=0;
    2 V6 Z* W, J$ R3 R! r
  75.   char szTempName[MAX_PATH];
    ! Y' w2 t0 B2 W0 w" L+ @& _
  76.   *szFileName=0;0 ]- V+ J! Z/ |
  77.   iEOF=fscanf(fp,"%s",szTempName);
    - n; W9 b$ j7 m0 [& q4 H' t
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 q) l4 U9 g1 ~- ?& t' a
  79.   {, M0 l% p7 K0 O- Y6 [
  80.     strcpy(szFileName,&szTempName[1]);5 X( |# X+ c+ `
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 E1 L" q  {' j3 {
  82.     {  ]" r7 G7 @& r9 h
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ) {+ |1 I( X1 {1 L7 `' b2 o7 E* e
  84.       strcat(szFileName," ");# L, ?5 r& R$ i' A& Y
  85.       strcat(szFileName,szTempName);, u; t  F$ F, E
  86.     }
    ! ~/ ~( A, i4 k5 Z! O# g
  87.     if(strlen(szFileName)>=1)5 U1 m- N0 P- s6 n, l8 v" ]. C
  88.     {+ S: y+ z& P( n( W
  89.       szFileName[strlen(szFileName)-1]=0;
    0 g6 U$ v$ N; K$ s
  90.     }
    4 U& ~# I. T+ Y; ~
  91.   }
    $ X4 i; u% i) x$ [6 K( S% x* p
  92.   return szFileName;
    - o2 @  ^& v& Z- Z3 o0 P" z
  93. }8 C5 t# O: Y) w
  94. - A, U( J2 d- a1 h
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 s' L/ v6 p+ Q5 o
  96. {
    * l$ R5 W0 `( }- o& ~. u5 t
  97.   FILE *fp;
    * k$ b$ z, S: L& s3 ?
  98.   char *key=NULL;: ^. i6 P/ V7 o% S# y4 O
  99.   char version[MAX_PATH];& R, q5 e$ U3 Y+ z
  100.   LPUPDATEFILE file,olds;  s8 Q6 t0 U8 d6 ]% X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 t4 H4 j* a, T/ O/ o
  102. / `+ D1 C5 f* H4 d' C, h( x* |/ t: O, W; D
  103.   UpdateList.clear();
    / w0 V( O9 o# i4 p2 C8 g; c
  104.   UpdateFile.clear();" }( I5 ^, L1 s: a4 O1 c
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 |4 U3 q6 V5 @# _& h, r
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 b5 E& b/ }! A8 W
  107.   fscanf(fp,"%s",version);
    ; O! z- S% t1 K7 o% J5 T& d
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ L, _( B( Q0 F7 D  U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + Y& c+ M' p* t" w  h; n/ _
  110.   {
    + M" v; g2 }; I" K7 ^9 Y  t
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, F' y/ D6 j# Q( p
  112.     fscanf(fp,"%s",file->path);
    ; }  j9 b& w, O
  113.     ReadFileNames(fp,file->file);
    7 D1 M# w# a9 S3 W; a7 o3 }8 H6 T
  114.     strcpy(file->full,".");
    % u& S! Y! a) S* L$ {
  115.     strcat(file->full,file->path);4 ~7 e- l1 R* y, u- I( R) _
  116.     strcat(file->full,file->file);
    ; X5 o* G  _1 U0 `) i9 \
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& B5 M; w: C+ M1 @
  118.     {) Y2 F* a0 X% i
  119.       file->vers=(float)atof(version);  k7 v7 h8 u+ k" D: h) P* g* _
  120.       UpdateList.push_back(file->full);( e( X8 w; c' o3 q% a
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));5 ]' Z% F& l9 t1 C9 A/ f/ N
  122.     }8 v5 u; [2 }$ U' b" u: ?
  123.     else
    / s# u' f) G4 ~7 ], B1 L4 S1 k
  124.     {6 g5 j, D' A3 T0 a1 B- y) T1 p
  125.       olds=(*p).second;
    ! [0 `2 p4 X% J; w8 J$ W  F
  126.       if(olds->vers<(float)atof(version))
    + g) Q' X& j  x4 D
  127.       {7 u: n7 ^/ g3 d0 C" ~4 N: [
  128.         olds->vers=(float)atof(version);
    0 J5 K5 x3 Y/ J7 T- u; x
  129.       }2 u% [; ^8 W/ ^/ W- b  _! ~9 i( O
  130.       free(file);
    # n# l( ?" }9 a3 A2 d
  131.     }
    1 P8 K1 G& W, }. P7 S- _
  132.   }
    6 [4 A9 k* o2 g0 T8 U$ g5 z) ]$ V
  133.   fclose(fp);) k0 a+ j$ B, ?- m, ^0 S
  134.   return true;
    0 {$ n4 u# s: E0 q: |
  135. }
    5 w& R7 x4 L( V
  136. 4 O; G2 M( a% ^! d% `% Q4 f: N
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ( b3 |2 p; d4 J9 Y! j* g5 Y/ _
  138. {
    3 K0 A+ y3 @5 _0 b; N
  139.   TCHAR  szFull[MAX_PATH];
    9 V& f1 ^$ B; d" _9 `0 B+ N# G
  140.   TCHAR *token,*inter;5 g1 c! I  a% Y
  141.   *szPath=0;. r9 R1 c8 X! V+ P" S/ b4 T9 F
  142.   strcpy(szFull,szFullPath);: ]2 I0 o% ~1 w$ O, Z) a8 p
  143.   token=strtok(szFull,"\\/");5 H7 y: W  O* {' B" t
  144.   inter=token;5 d7 u: F5 _% h8 j
  145.   while(token=strtok(NULL,"\\/"))
    1 R1 ?9 ~$ m: c% N, b
  146.   {, Q& E0 r4 C6 P6 q0 _7 v, P/ [4 u
  147.     strcat(szPath,inter);
    8 i/ N9 c0 d- S' ?
  148.     strcat(szPath,"\");
    ! r5 d& s# Q' T
  149.     inter=token;
    ' O+ Y$ J/ Q, U
  150.   }
    5 C; V8 m# j3 H. T
  151.   return strlen(szPath);6 U8 c$ b4 c. P
  152. }
    1 u& m* X# O; U
  153. 5 _: F( w' a2 Q7 A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 k, E' O; s! U6 n5 I! i
  155. {' [  T# y. d7 d! Z5 O8 t
  156.   DWORD attrib=GetFileAttributes(Target);
    8 @0 Q' {. ?7 {+ u
  157.   if(attrib!=-1). l( n: B! u$ J& q4 h( U
  158.   {' g8 A9 t3 j8 T& }# l$ F
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))& l( w( r( \  `: q  w$ o$ v
  160.     {* c0 h7 G. ]( ~3 c- O
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 d( L6 X, x+ `& P9 [4 q
  162.       SetFileAttributes(Target,attrib);& Z0 |* x0 T% w. S) X( N: L
  163.     }
    - L  i5 z8 j6 c, Y' C0 g8 S
  164.   }, q: }+ G- i! d8 Q( u
  165.   CopyFile(Source,Target,Erase);
    ) x/ b7 m( P- \+ U6 f
  166. }6 u( e  ?6 U9 K

  167. 3 K* ^7 C  u! l9 j% k0 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 G1 x# i3 h# l7 M1 K
  169. {
    6 d( [/ N; Y; D7 H
  170.      FILE *fp;
    5 A. `, e! @3 }" y
  171.      char  szBuffer[8192];
    4 r3 \) `# l' E3 N. t
  172.   va_list  argptr;
    $ C. f( W$ u2 E0 Z/ {, J
  173. # n+ r, i8 b7 f3 `7 [. R
  174.         va_start(argptr,message);
    + l) k/ u: G/ @
  175.         vsprintf(szBuffer,message,argptr);
    ' f) J+ w, @/ h5 U# Q
  176.         va_end(argptr);( F6 y; k1 d, u( d: d* {6 Y
  177.   fp=fopen(FileName,"a");
    , ~6 i  W( R3 ]' ~3 H8 J
  178.   if(fp)
    / X6 r) s6 [+ R5 j
  179.   {
    . Y* ^; g: k& I9 F$ c5 v' e
  180.     fprintf(fp,szBuffer);
    + O( ~$ o" X' r
  181.     fclose(fp);
    " [' G" W* n$ z5 Z% Q+ M+ I
  182.           _flushall();
    2 ~0 d5 s. y- `6 S
  183.   }
    6 `6 Z; w7 u" _- {. A. i5 @! B
  184. }$ t5 W/ R, q7 D- i5 V
  185. - A; ^" A1 s5 ~2 v
  186. BOOL CRevAppApp::Fclearf(char *FileName)* w) `# }0 N; Q/ V
  187. {4 \7 s6 o, S( P6 G
  188.      FILE *fp;
    ; G% l1 a8 U) y: |
  189.     DWORD  attrib;
    9 j- s! M4 l  J$ O9 R* f+ r$ t
  190.   attrib=GetFileAttributes(FileName);
    - S2 V( z5 ~. E3 d( N0 J7 k
  191.   if(attrib!=-1). o  `" W! J. c. \
  192.   {
    ) ?  `" k6 s( G6 [+ J$ r/ y  C1 `
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    , P( b- ~4 y7 ^4 s) ?
  194.     if(!SetFileAttributes(FileName,attrib)); X) \" w# z2 t$ K* X
  195.     {
    ( ?$ y- h3 I1 X; {4 f, y
  196.       return FALSE;
    5 B$ y! S6 c- _3 N% E
  197.     }
    5 l" _0 K8 _7 P
  198.   }' T% {1 ~: R7 B
  199.   fp=fopen(FileName,"wb");4 Z' D2 h9 P8 E( C6 Y. n
  200.   if(fp)
    $ T, G& L5 m8 G# N, N/ j3 o8 H, `; {
  201.   {' D% b' M- R, ?) n
  202.     fclose(fp);
    - `% Y& d' H5 |
  203.   }! I* V2 N* j; w/ o& }8 k* S
  204.   return TRUE;
    6 p  f- V& |8 X0 c7 X6 ^- F* k
  205. }
    ! l% m$ ~/ e7 P% I

  206. 0 [! b( K0 v; s
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 u7 \# E3 d8 q0 a
  208. {
    9 @/ H; ]. x1 L' L
  209.   char filename[MAX_PATH];1 m: g8 W9 D" ?: F
  210.   LPUPDATEFILE file,olds;6 x* D$ X8 x4 ?+ P" Z5 n6 U# N4 W
  211.   std::map<int,CString>::iterator i;2 A* }2 v& |$ H  Z" u8 \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 o9 R) [+ A! W+ c5 M( T0 K
  213.   std::list<CString>::iterator l;
    . {2 ?9 H$ T: [0 E3 D
  214. 3 ?& Z; o8 K, s- d8 n5 _4 D
  215.   if(bFirstUpdate)
    ; `8 |  q! S/ n) H& _
  216.   {
    ( E" s: X! F) [) ]5 e/ Y9 U3 T
  217.     dwCurrFile=0;; A8 G7 s$ t" g& {# u5 F+ N
  218.     bFirstUpdate=FALSE;/ F+ Q5 Q7 A) l1 i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())) @7 V1 _% g  L6 c6 e
  220.     {
    " O0 a$ T, m0 K
  221.       dwTotalFiles=UpdateLocal.size();2 F8 v5 B/ ~( c6 P
  222.       dwDownLoaded=0;
    2 U: l$ k9 l3 f) e3 d) |8 }
  223.       bSilentStep=FALSE;  q5 g) j' n- T8 l3 A
  224.       bCompressed=TRUE;
    ( f8 M6 n. X- ~2 k0 `2 G2 t
  225.       strExtLocal.Empty();: j2 G- m% m2 O) s4 q  Q- W( j* t& ~
  226.       strFullName=(*i).second;
    6 j4 {: m7 K. ^* x& {( d3 B
  227.       dwProgramState=AP_CONNECT;- D7 r3 y' o& @3 K
  228.       return TRUE;
    # n- Z* S. y2 Y& y# y
  229.     }
    - k4 E4 L7 ^( t6 K  t9 M
  230.   }9 J# [! {5 w% U) {* n
  231.   else if(bRestartUpdater==FALSE)' D3 a/ {4 F+ ?( Q4 v& _# c
  232.   {: ?) U' K$ q6 O! M& j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 J0 h. a9 ~8 `" m9 l7 I
  234.     {
      w: `9 B  G3 q: f1 S3 p3 \
  235.       file=(*p).second;
    5 L7 `) a$ P7 u, p: O2 A5 x
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())# b* G5 t5 \; q4 l4 G9 O' e2 a% j
  237.       {% `1 U, Q) R' O  e4 \  A
  238.         olds=(*p).second;2 w& y; z4 e9 `4 r/ j
  239.         olds->vers=file->vers;
    2 |7 A+ c2 F5 r+ M
  240.       }
    # A, Q( N# t" I9 l; L+ C
  241.       else
    2 G/ z$ ^! ^' j
  242.       {! Y. {: J6 n5 v% M  e* P0 m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 h! W" H% e) W, A& L+ @0 Z
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - ^, g6 B- c6 w4 T4 [# s
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    " {* F' x3 |) y9 Q# \
  246.       }6 F# a- Y- Q: B( E6 a) r
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");( _' B* W  M* l
  248.       sprintf(filename,"(%s)",file->file);% [: ^8 s2 ~$ Z; |' o+ H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / K9 m. [. S2 g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }; N( o* s1 H. }: C
  251.     }' ?5 B& [3 J3 e
  252.     dwCurrFile++;
    ( P9 `3 u  ^8 e8 y3 e- h
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 y% x. B) b% o  n5 m
  254.     {
    2 A+ C* e4 M/ q, W( R0 `: p
  255.       bSilentStep=FALSE;
    9 z+ u/ T* l* h0 a6 `7 |
  256.       bCompressed=TRUE;7 o  q' Q2 v, |- t8 r/ \( m/ K
  257.       strExtLocal.Empty();9 K8 W$ M- p6 C; \3 p9 e8 F3 a
  258.       strFullName=(*i).second;( j* f8 Z2 ?7 K4 }- p& @2 u+ _. _; J+ O
  259.       dwProgramState=AP_CONNECT;( ?9 R5 Z0 S( e2 E" \$ i% h
  260.       return TRUE;0 W1 d0 {+ e* _+ |9 Q
  261.     }
    ) T+ d+ d* W9 \8 ]: Y* Q$ T
  262.     if(!bRestartUpdater)
    7 R5 a) F+ |9 j. Z2 O4 A- D" t! `
  263.     {
    * h% \* U; F6 l; K8 g
  264.       int iCurrSize,iFileSize;
    + g% h* O% u: W; r1 S: F
  265.       iCurrSize=0;
    & s; ~) N7 E& z: A* \4 y1 w
  266.       iFileSize=UpdateList2.size();
    3 Z$ k8 r9 ^( D3 N5 s: |* \
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) W* ^* k+ N8 H# |8 d: z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");$ f4 {8 A  Z+ N0 ~* l
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    % P0 P4 A! G; \) q0 `
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- `3 @1 x3 [% T4 A, S
  271.       Fclearf(".\\update.dat");5 @9 G3 s# r2 Z$ k
  272.       Fprintf(".\\update.dat","Bloodyf\n");. J6 [' P9 T: r1 b8 p% S: g  @! {( H
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 B. L0 q$ O0 ~7 q8 J. N
  274.       {
      v9 f3 s% n) F- m  h' w
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 O) W& W/ h3 f% I
  276.         {
    . B1 j7 e& P( |- ]  K/ ]/ ^2 x
  277.           file=(*p).second;
    ! p# Z9 v3 E; U) T! |, ~  q9 G( E
  278.           sprintf(filename,"(%s)",file->file);
    7 `' P6 B' {4 e& U" s
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);* h5 {4 @9 m7 C0 F" @
  280.           iCurrSize++;2 S: Z- P3 f) w! O3 z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / d' {: K, d. M7 s  G
  282.         }" |( d& A" [+ R3 R; B
  283.       }
    ( }7 r5 ?$ G3 K# _1 g
  284.       unlink(".\\update.txt");
    9 X! y2 s/ D9 O# y( Q4 n! n
  285.       unlink(".\\update.tmp");
    ' v' F- F/ U  N; Q3 p
  286.       Fclearf(".\\checkversion.dat");
    % h; {& z1 G8 T) `
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    9 t$ _4 G+ P! E4 o2 G
  288.       if(UpdateLocal.size())  p' Z& e, }. y) |3 Z0 @& ~; u2 U
  289.       {
    . K1 i  j3 `" l0 `* n
  290.         UpdateLocal.clear();2 T4 z6 t) U2 {: G/ H, D/ [, U
  291.       }
    - |8 U& v* n# r) H# }' s5 J
  292.       if(UpdateFile3.size())
    1 Z6 _: ]. f6 Z3 q2 c
  293.       {/ b' v1 W8 y6 }5 n2 J
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 M/ @& q: [5 D1 s( W9 h# @2 ?2 S
  295.         {; V5 N0 u/ _$ h6 F
  296.           file=(*p).second;
    / ]1 L" p5 [2 r
  297.           free(file);* k+ }, {3 H/ _2 M
  298.         }
      g! e  E/ J& p# I/ x
  299.         UpdateFile3.clear();
    6 ^. C/ @9 K/ y
  300.         UpdateList3.clear();' h& l9 z  K5 K2 E" F0 F
  301.       }
    - f3 Y* |4 E: M3 A' @7 D
  302.       if(UpdateFile2.size())9 {2 J. Q* N4 |( n$ X
  303.       {
    , J" ~9 W9 X( h4 M! r) f  j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* Y) F7 S2 U* h. a& G) [1 j7 l
  305.         {
    - W+ N  }5 A( F( B, b2 p  k. g8 _
  306.           file=(*p).second;
    9 d) ]9 i  o; {) z0 i  L
  307.           free(file);
    0 z9 |6 W+ s( Z
  308.         }
    ! s  c  E3 B9 H
  309.         UpdateFile2.clear();
    ! c2 X3 L& V% @( w5 K7 E0 l' f
  310.         UpdateList2.clear();7 T6 L1 y& N' u
  311.       }
    5 h) j' B4 |: s$ p* ~
  312.       if(UpdateFile1.size())/ N0 m; w9 S" m; M& |' l& s
  313.       {
    ( P4 Q" _1 q7 Q1 ^% f0 y) r' i
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 y! d+ v5 E: |3 T* b* r
  315.         {
    5 o6 E: R7 Z& U* F2 }7 |& Z$ d
  316.           file=(*p).second;
    . [/ C6 Y& M' T' e6 y4 d; N
  317.           free(file);1 }3 X* K4 p2 B
  318.         }
    * i" P$ \3 V$ O
  319.         UpdateFile1.clear();
    " D' D7 n( b0 |% b* B& t" o
  320.         UpdateList1.clear();
    & y7 P2 ^5 o5 l& c
  321.       }
    ) j. i7 F. s. B. M) P3 v5 Z5 A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));: X  U) E7 g; q( n
  323.     }: N8 D( S5 u% o. `( d+ V9 A% {
  324.   }" y; A) W) b. T8 R% M
  325.   return FALSE;
    0 u* c, W7 W) D
  326. }
      l2 V' j$ V+ S& U/ Y% j
  327. 6 f: }  J! X* L5 z7 J' I5 ?: k
  328. void CRevAppApp::ClearAll(void)
    4 m6 E9 z: v4 w
  329. {. M' n+ U# Z/ m& k8 z% s' n
  330.   LPUPDATEFILE file;6 H& O& D: c) `) T, o" u: b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 T; k$ V4 |* w- U; n! r
  332. $ I9 r8 w3 q& M' P
  333.   if(UpdateLocal.size())0 }& W4 ^  H  U1 k5 K
  334.   {; \# ^6 H- n$ Z9 S
  335.     UpdateLocal.clear();% z4 [7 t! @6 `+ @
  336.   }
    ) t) N/ {2 G! p+ U) ~! J
  337.   if(UpdateFile3.size())
    " B) l2 h6 ~1 V: k. T, Z! U
  338.   {# O( J$ v# i3 p  E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 Y+ K1 T' p/ W6 d9 [) x3 N
  340.     {
      n/ z( w; |. ^# L
  341.       file=(*p).second;
    7 L9 D* P. V: m% Y
  342.       free(file);
    , T5 }: m; e6 f, o, f$ r, H
  343.     }8 K, v" V/ Z) x: E4 Z
  344.     UpdateFile3.clear();
    - l& C4 R! S, J$ E+ I, p
  345.     UpdateList3.clear();7 l* {( G' T/ F+ O; R: B; [, u
  346.   }
    * X) U# l2 \3 I0 ]  I# B; x
  347.   if(UpdateFile2.size())
    % I% _; v; s7 \
  348.   {
    ; U* G/ \2 m1 X' h6 L
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # X( [# k. ^* H7 Z' A6 T
  350.     {, I6 u# V4 L5 T6 b2 U- m8 [
  351.       file=(*p).second;
    * z  i2 h: I3 n
  352.       free(file);
    ) v6 S. }! D% N' L
  353.     }
    0 t  c' {/ L# e- R- U( ^
  354.     UpdateFile2.clear();
    & r- E- P9 _6 }; ]. b& ?7 w
  355.     UpdateList2.clear();) W3 x* y8 a! Z5 O5 S
  356.   }
    : i1 u: ]5 f8 ^2 ~% y7 g* m
  357.   if(UpdateFile1.size())( S8 H6 E4 e; Y4 J
  358.   {
    * R$ ~# O8 S! y. R+ I# s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : C7 A- s* }# B4 W" B5 m
  360.     {
    . |8 B- U8 P4 C8 E/ ?
  361.       file=(*p).second;
    8 m  i! m0 Y. v2 T. E! G
  362.       free(file);
    ) k0 }  N, N0 f; [% d$ p
  363.     }+ a9 A# d5 A& }6 [7 i* `
  364.     UpdateFile1.clear();$ ^6 n, D* N! [% [
  365.     UpdateList1.clear();0 ^/ d& N+ A. T5 y" c1 G% O
  366.   }  O" k1 @  g! I1 Z( S" h& L8 p
  367. }  
    3 m; \- ?/ O, k
  368.   
    ) S7 t1 ?% [* E; g) @
  369. BOOL CRevAppApp::CheckLocalVersion(void)) N9 t2 q* F6 |: `2 m- n, ^3 N: |# W5 x. |5 A
  370. {
    $ Z0 u( @: b; G/ j8 g6 E' M
  371.   int c;: W: g% H- l0 u
  372.   LPUPDATEFILE file1,file2;
    : ?2 q& O0 o' }+ `# W5 ^
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    4 l  q# x& l3 f
  374.   std::list<CString>::iterator l;+ R% Z/ \1 F% B* `/ J0 U% R
  375. 6 ~' t8 e' `  l6 ~: C9 a
  376.   UpdateLocal.clear();" k0 x2 J7 {! w- @5 s5 s5 O6 D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. |3 V' [( _; r& N
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);' M' o8 I# ~. W+ ]( ~8 [4 v4 p
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' z( h6 z' p% B8 \" ^) f, i
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    + l3 Z7 r- p. [8 B
  381.   if(UpdateFile3.size())# x6 S* m; m- o  S* n) @
  382.   {
    : \' ~* B) j/ ~; _
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)' R: K- m# W2 c1 P- Z$ f$ G
  384.     {
    / E# y# n* S: L4 d3 I' Z& \
  385.       file2=(LPUPDATEFILE)(*i).second;
    1 t, D, k! R: p" ^# w6 d7 |
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# p/ b$ s4 l+ ^$ h6 `2 Y3 |. C% ?. i
  387.       {/ [+ Q; s: A' ^! |) Y) Q5 Z
  388.         file1=(LPUPDATEFILE)(*p).second;4 `  J: V( {  M$ g
  389.         file1->vers=file2->vers;
    2 M1 j. e/ S# t* }
  390.       }
    / d! e4 _3 m; y6 l; f' D- R
  391.       else
    # Y) {5 i9 ]# x, f+ a' z
  392.       {
    4 t1 b/ x3 n, X5 W8 X. |- Z( a
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * E1 M, v& X/ h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! G! m- d: a1 Q! F
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));+ a% y6 W' y( S
  396.       }
    ( c, h) c% G* N" x! t) y: Y
  397.     }1 C7 d/ t- S2 I. Q
  398.   }
    6 N4 X, s  B+ m; w
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 B1 Z2 [' {& I! p
  400.   {$ D, }% Z' H: }: L1 N" _9 U1 g
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    8 l* k7 U' Z, x7 p# h
  402.     {& _( E3 e7 U& x, v4 x
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 F0 A& X7 q4 p% v4 t$ {  }6 I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* I2 `$ S* I6 k, ^- j. e
  405.       {
    $ @- {3 V' T3 y/ Q
  406.         file1=(LPUPDATEFILE)(*p).second;8 C& f7 q  S5 d6 b( E
  407.         if(file1->vers!=file2->vers)" Q; w5 _  Q0 W) J3 {9 \
  408.         {
    ; z+ R  \1 a9 P# ~* A
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# |" T# |) ?+ W
  410.           c++;
    - v* I5 G7 v% a& @2 ~
  411.         }
    8 b3 A+ K1 f6 I9 V8 h2 `3 x
  412.       }
    " j! v1 H2 y" s. T, v- Q( k
  413.       else, Z8 e- K( i% P0 k3 b% ~
  414.       {
    # M0 N, _, t9 S" x( P1 p; o
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 ~8 Z& d$ W$ f7 ~
  416.         c++;! O7 {+ Q0 g0 Q
  417.       }
    6 W  j  B) X2 r9 n- h1 s
  418.     }
    + d3 F+ c+ `: b" [: |
  419.   }
    9 ]- R# v" l! ]9 X. p+ ]
  420.   unlink(".\\DownLoad\\update.txt");
    0 ?$ _" H+ n; n/ f/ ^
  421.   if(UpdateLocal.size()) return TRUE;
    7 ]" `6 W( a4 x$ M7 _! f; `
  422.   else                   return FALSE;  W: a! U! h$ e, q% K, T2 B
  423. }
    2 u% T) Y7 v( }1 o9 s1 v$ V

  424. ) E6 x/ O) x1 C9 J4 \% M& Y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 e  I; R/ K% J2 D0 s5 F% s
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"6 i( l3 ?0 {0 N: L3 q: G
  427. + v7 W: y% J4 N7 {6 U+ A2 C

  428. 8 R. \* J  A* W; i. k

  429. ' ^+ n& O5 L9 Z( W. u" S8 _5 w
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" n4 g. V  E5 w5 t* M+ d; v5 L0 ~$ \
  431. {" R. ]! M, \2 u+ ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    + h: u' B" Z0 S5 _+ M2 T# O; C
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 _9 g$ ]; ~5 V; {3 V* J" p
  434.   {: b8 I" h- ^( a$ f2 [
  435.     char szLanguage[50];& y5 f! p1 z/ D& A) q: z
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) U* j! L7 h; e) Z" C/ J7 H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;0 ^, z' N6 S) z6 g0 g( ^' F+ E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ' a5 V0 w) A/ g% h4 `
  439.     else                                   m_iLanguage=ENGLISH;
    2 A9 k1 J, M, {, ~& n' y7 v
  440.     char szRegister[100];
    6 i  ]4 @! N5 @) m
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 v6 x" o$ N. H: c
  442.     strRegsName=szRegister;+ y, S- A; ~/ `( o2 t
  443.     char szPatchURL[100];
    2 {+ G+ M8 h% N$ O4 X& X  ?5 G
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( R5 _1 T1 s. g' R  o, Q1 E
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);: s6 O  D! M* S! Q8 s# v
  446.   }
    ; L0 {; Q2 B& j; @& p: b5 d' e% R0 I9 I, D
  447.   else
    ( u' ^1 {) y1 a9 |* v6 O3 s9 U
  448.   {
    4 k, O( N9 H) h# d0 I% x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 p, x3 s% Z  g8 {
  450.     strRegsName=DEFAULT_REG_URL;
    1 Z$ t+ A! H! `5 k( ]) A  y' l
  451.   }
    * ~$ J+ |6 ^8 |  r& ^
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! M2 `4 Y' v! m# i, {
  453.   {
    , _! g, F9 P% z+ U
  454.     char szIP[50];- w8 Z3 ]5 {4 a; |
  455.     char szDIR[300];: X' A( a) l1 }. r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))3 k" L/ s$ A3 \( j! G- n
  457.     {* r+ h% H8 T2 ?
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");% t; h! H! C9 [  ]
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * @/ [: T9 Z6 }' J# e7 h
  460.       strHostName=szIP;  m" H( ?6 _  N8 F1 O
  461.       strHostPath.Format("/%s",szDIR);4 W3 C4 D% t5 z5 n2 U, Z: ^& V9 A3 _
  462.     }: g& r" `, `9 Q8 p0 q( C, Z/ @4 y+ S! l
  463.     else& y$ A0 a( G) I# I$ [% \
  464.     {; a( G# a0 X" V. L. R6 V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & c+ S% S  W- h/ \! h
  466.       {
    1 k9 P% l$ S7 u) I  s. A
  467.         char szLanguage[50];3 L6 N4 a: P" I$ J, Y3 c+ Y2 A
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 h! K0 W' w+ M
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 \0 Z- B. q, v
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( x& L# b8 X6 v. Z' n
  471.         else                                   m_iLanguage=ENGLISH;
      G8 g9 u8 S: R) [
  472.         char szRegister[100];5 v& N2 D2 n6 B3 N8 G
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" E2 q& ^8 n/ }) x* W
  474.         strRegsName=szRegister;
    " t8 I; x$ P' d. T7 m
  475.         char szPatchURL[100];# g- ~* r- X. w* _* \8 h: N
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");" ?$ z0 O2 b2 @! ~; w/ Y
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 D6 B- W0 Q2 A( L1 v+ v
  478.       }4 i6 g0 _* U( y8 G2 l
  479.       else2 @+ {- j1 ]! D( |  j. M
  480.       {
    1 \$ U" @6 T( f  l! r0 `$ n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 L  @* c) Z8 ~- R1 I" I/ n# r6 y
  482.         strRegsName=DEFAULT_REG_URL;
    / x, P) g/ c# x2 D! l! B
  483.       }
    5 E. g, C, A" V. o, {: o
  484.     }
    6 j- X* P8 X; T
  485.   }
    $ ?- G. f& R- p+ Z7 T
  486.   return true;
    ! r9 z5 j9 ?% [! L3 t# X9 G7 Z
  487. }3 P% O$ f; w6 Y+ _3 a

  488. 5 |, D4 J  n! G( @& z
  489. #include ".\ZLib\unzip.h"
    4 c% d3 l3 p2 s  G* a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    : @8 \) t( @7 d7 P9 I5 X) z* i
  491. /////////////////////////////////////////////////////////////////////////////. U' g+ m7 F' Y0 k0 O5 T8 {3 p; A* b8 q
  492. // CRevAppApp initialization7 t# V& W& C3 C, T) J% v- ^+ A

  493. 5 {6 T% @5 g* l$ j# q& p$ A0 ^
  494. BOOL CRevAppApp::InitInstance()
    ( j, a: b3 M( w& Z8 z9 X
  495. {3 I6 _" S4 s% Q+ I0 t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];) b) }0 b7 l8 o

  497. 8 L* q  ?4 X( d. o. b. t
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) ]- _+ s, _) O+ j, y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 l! J+ F( U: r8 o/ j9 ]
  500.   {
      G2 @" @' p' N+ G
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");% p- U4 o6 y6 W$ @) g$ {
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      `7 }2 k, @5 T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % m/ t% q8 ?8 o7 x/ L
  504.     {
    $ O# U  `/ w2 m5 B+ Z
  505.       strcpy(szPath,szPathTarget);
    " y2 L" d2 U. a% Z
  506.       SetCurrentDirectory(szPath);
    , `% {7 I* g: I) j0 u" u+ Z
  507.     }/ S# r% a' h: d9 |
  508.   }, y! m) L& h+ L8 ~+ X5 K9 a# ]: |
  509. #ifdef _DEBUG
    $ {9 c; f! s+ }5 H4 I
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 U) G2 j/ u0 u; h2 ^: k, _
  511. #else/ E4 E" P# C3 @7 X* r  ~8 y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 s; G! h; o( _$ ?% q( |% \7 q: N
  513. #endif
    & m9 z0 V) X; V7 p4 H
  514.   {3 X" t9 M  ?# X
  515.     char tempFileName[MAX_PATH];
      }- N: ]2 A- Z; _, c! W4 k, |0 L
  516.     strcpy(tempFileName,szPathSource);7 ]* F' Y( Y5 a7 B( h
  517.     tempFileName[strlen(szPathSource)-12]=0;
    , e/ ^0 F4 r# l- |+ M2 O2 {
  518.     strcat(tempFileName,"\\$CSUpdate.exe");  z4 B7 f# K8 s5 a9 `9 X
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % V$ [( P% p1 n' n8 V7 k
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    5 r; u8 S' S4 H9 z  S/ F& H
  521.     return TRUE;
    % d# G( Z& A5 T
  522.   }6 I5 q, J$ _, X1 \. [4 Q9 w$ Z: T
  523.   // Nuke 0118: Delete run.exe
    5 p! w* _, ~1 f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. b) z+ n. Z/ z" H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");- y* Q* @/ s; U$ d* m; n5 V. u
  526.   if(!ReadCfgFile("Config.ini")). d  N. ^8 Q% j9 V
  527.   {7 g( a" m4 \9 H  g6 ]  V/ S
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    % Q! S. `- X+ H. V0 ~/ U4 M0 \
  529.     return TRUE;; m% y+ @/ j# ]% d! J" i
  530.   }
    , \. J3 I: K, p, Q
  531.   HANDLE mutex;8 t1 _2 T, \8 i, E$ M6 t7 q4 y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))# \) F& T* Q0 {5 \1 M8 u
  533.   {8 s, E8 m  @) t0 Q" z1 [! I
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)5 b% M/ C% X$ s6 b8 s4 _: X0 Z
  535.     {2 a# n1 u( I8 N3 G$ F$ y
  536.       CloseHandle(mutex);
      H& E* ?2 Q  x3 P! f% `$ s
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    5 b; b$ v( S' e1 }% c" H  r
  538.       return TRUE;, `# j" H3 Y: F
  539.     }6 {$ _+ _3 e3 |1 _
  540.   }  ) F$ C$ g* F: F6 m. X6 I
  541.   CloseHandle(mutex);0 S" W; K; E, \, O
  542. 5 Q3 C; d' [9 A0 r+ }  i2 T
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    % \% P) I- B1 j/ a
  544.   K' O$ F8 {( G
  545.         AfxEnableControlContainer();4 N6 ]7 T0 `3 I: K* i3 g/ T

  546. % X; G6 ^2 @, Y$ I& t$ k" d  i
  547.   bCanUpdate=FALSE;
    , ?% c: K" N8 O- v" F: p
  548.   dwStartUpSteps=1;
    + d" v0 |2 c+ A. L7 C2 B( E
  549.   dwProgramState=AP_NOTHING;' X# Z( ]: b5 e) Y1 T0 S

  550. $ `* o% g1 C7 g( F! G1 k
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);* Z1 t: e' f: _0 a; ~. U
  552. ) m2 y" p( s  _1 Z+ b) v  _9 l
  553.         // Standard initialization* O: A+ [( g! \
  554.         // If you are not using these features and wish to reduce the size  }2 T5 z$ z/ @
  555.         //  of your final executable, you should remove from the following/ |; O# ?2 |) P( d
  556.         //  the specific initialization routines you do not need.1 D$ Q+ P, N( ?7 M# Y

  557. 2 a- b6 t2 i- ^/ [* t2 X
  558. #ifdef _AFXDLL
    $ ~( G- T) a$ G! |* h
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    1 A5 |+ l9 D1 B- q: x
  560. #else
    . R( O, s* B4 m" j5 j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    + y( \- s6 f" A+ p) ~/ e
  562. #endif
    $ n) e) D. j3 G  v
  563. 8 f, h: l- N* l2 @: r
  564.   dlg=new CRevAppDlg;
    + O; q5 T# Q8 G$ i
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - l9 ^& T: Z8 O9 u( `5 T" U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + L' R0 i! p$ X1 w% E0 P8 A& L
  567.   m_pMainWnd=dlg;" r0 k  A5 ~' V5 [6 F# L' P

  568. ! i4 P, M4 Y; z' z' `2 m" }% c1 ?! P
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);( |1 F: f% u$ r0 _: R' q
  570. ! {- i) x( x% j+ w2 @% }
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 y) Y( |. ^1 |1 G8 }
  572. //  ULONG_PTR gdiplusToken;+ Y0 w9 p- _$ t% d. Q
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);# {! K  P" g+ Q% z! ]3 k, H
  574. # c7 S/ N+ B3 d- R4 e
  575. //        CRevAppDlg dlg;
    : k) V2 `1 G$ U$ I
  576. //        int nResponse = dlg.DoModal();' l( @  a9 m4 C+ d& U& p, E1 [& H
  577. //        if (nResponse == IDOK)( u( X" r& l* ?
  578. //        {
    ! [* |& h- Z) h
  579. //                // TODO: Place code here to handle when the dialog is
    " I2 F9 i  r7 {* Z
  580. //                //  dismissed with OK% p- e) U5 i/ p
  581. //        }
    $ y4 S1 B  o* q& ^
  582. //        else if (nResponse == IDCANCEL)
    / s7 d0 Q/ T/ Y: }3 U( \  I: D& h* T
  583. //        {) N$ K6 q* N' G- U3 a4 G' X4 y
  584. //                // TODO: Place code here to handle when the dialog is( ~9 |5 j6 L! a. U+ n8 h0 j
  585. //                //  dismissed with Cancel8 O2 y/ r; H0 M
  586. //        }1 b1 q) [* f7 j6 d8 _
  587.   A# }: G3 N7 o( D3 i
  588.         // Since the dialog has been closed, return FALSE so that we exit the( h8 z$ j* N) \2 {# G* l: d# A
  589.         //  application, rather than start the application's message pump.5 S' l. G  f) e# v+ r3 M
  590.         return TRUE;0 ^) H& b0 v9 X' l; ~* w/ a
  591. }
    " e) F5 P5 ]4 z
  592. ; K; P9 F. X2 S/ ]* }0 j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)) P$ m8 W9 E& O7 c: Y
  594. {9 d" x2 [( G" g  a5 h3 A1 f
  595.   int i;
    1 o- J% D. D  v% Z2 @% l
  596.   char *szRet;2 f( n0 q8 f% o+ L  J; ]6 c$ M3 R

  597. $ r4 r! F$ _' f7 T: g
  598.   if(pSource) { itoken=0; sztoken=pSource; }8 o2 |( [9 G! y$ S6 i2 V
  599.   if(sztoken)# s4 g' M; H+ T
  600.   {
    5 Q$ @" L5 y2 {
  601.     szRet=&sztoken[itoken];
    4 g; v, D$ t( W4 \; t3 p8 z
  602.     while(sztoken[itoken])- e5 l& `. A! C! h
  603.     {
    8 B3 A0 a+ t* z+ ^) f" M
  604.       for(i=0;i<(int)strlen(token);i++). a, o& |. R( F& P. s; a2 ^$ Q& Z
  605.       {
    " M5 l& {( D4 P2 I! k7 Z, M5 P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 x9 \! M% ^8 w6 j; e) U  E
  607.         {
    & l  F( g/ m1 v3 q% e) I
  608.           sztoken[itoken++]=0;6 N: M2 ?% U$ b8 f
  609.           sztoken[itoken++]=0;
    7 T* u0 i8 ^/ C# o1 \9 D
  610.           return szRet;
    " d3 s: O8 _: z! ^" |
  611.         }% C7 d; o0 b4 J* J6 t3 L
  612.       }5 n& A% S7 C2 v! S6 v8 S. J
  613.       itoken++;
    * ]* f$ O. o' Z9 R& D/ s: p7 T8 x
  614.     }/ `9 ?0 `  X% j; Q& s
  615.   }
    , _8 u/ f# U+ @& f9 h4 K) `
  616.   return NULL;
    $ B0 }6 y3 Z% O5 E8 }! Y1 \5 w6 [
  617. }8 |  b: @3 i& O% y
  618. 3 \) ~, U( _" c" x& R
  619. void ProcessProc(long Total,long Current)
    2 Y7 y) l$ [" n
  620. {
    : k/ f2 s8 ^" F0 J3 g0 T' V
  621.         MSG msg;
    4 i, z, u8 T+ x" k+ ^8 ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- e2 W. L4 K" o# K* e
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- k1 N/ F3 J% H8 ]
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). J! T, a% X" n% b9 W# ~1 L
  625.         {
    5 T+ R- X! t  J/ C! R% p% }
  626.                 if(!GetMessage(&msg,NULL,0,0))" ?2 [6 W1 Y6 Q$ i9 I) @, _
  627.                 {; T9 [9 z$ a$ @* }) r/ J, v4 r
  628.                         return;
    " |; j* L, E" s% a1 }' F6 S
  629.                 }, @- J# Z- I2 ]0 p
  630.                 TranslateMessage(&msg);
    8 @! f4 C8 r& q% {
  631.                 DispatchMessage(&msg);7 u; I- O$ ^- V3 C/ k6 f9 [
  632.         }       
    ! L- ^) f  }: W: O" y6 A
  633. }7 W$ c0 w- _/ _' [
  634. 6 u& Q4 J5 ^% G! ]0 a# A( g; r
  635. BOOL bFirstChar=TRUE;
      R2 s( d# [6 q5 T' `4 {9 u
  636. ) ]+ l6 d# K7 v( Z3 P
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ c! m4 O, E) U& w3 ~2 d
  638. {$ I. o8 x, G0 |3 K
  639.         // TODO: Add your specialized code here and/or call the base class5 e% `7 a- C# a5 c- A
  640.   switch(dwProgramState)5 \9 I* h; w( V, Z
  641.   {
    8 c: K) L; B! T/ o% W0 j+ o
  642.   case AP_NOTHING:
    ' f; z; }+ m9 I5 F$ O2 w8 [
  643.     switch(dwStartUpSteps); T' q- M  n9 z  H
  644.     {. }. s; P8 @1 C1 Z0 k3 a$ }$ e
  645.     case 1:
    1 p3 e9 \! I/ V4 i4 A
  646.       {; j5 H2 ]3 A& J1 W- x( `
  647.         int i;# U: b0 \6 p! @2 O. K0 f" M
  648.         CDC *pCDC=dlg->GetDC();& J# l& m9 {+ e. M; u
  649.         HDC hdcwnd=pCDC->m_hDC;% h' F% T7 q5 y3 G9 C/ w
  650. //        Graphics graphics(hdcwnd);# w+ a/ i; e9 b# t$ v+ R$ V" u! Y4 o1 Y
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    - b/ T. @1 p' d0 F, |
  652. //        INT iWidth=bitmap.GetWidth();, g- {& V4 g9 I8 U+ y$ \1 @
  653. //        INT iHeight=bitmap.GetHeight();0 D$ R: C: X: D/ x3 k' G) x
  654. //        Color color,colorTemp;
    * Y' z/ C& Y1 b0 ]' k: j' O0 {- h
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    5 ^/ F5 K( F# c1 i% {/ V" t3 o* L
  656. //        {* t( O! z8 t( R# O& u- k1 t  ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * y# T4 F4 Q1 M$ [2 l; g, ?
  658. //          {
    6 B1 ^. S$ I7 |! f- Q6 i
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* a; x6 N( H2 P' b! }! ^7 k
  660. //            colorTemp.SetValue(color.MakeARGB(
      g( }( o& q0 u( X
  661. //              (BYTE)(255*iColumn/iWidth),0 g4 s' \' s! d: t# X4 \7 G) O
  662. //              color.GetRed()," c* r; V/ `% t0 Z2 f% m3 e9 a! T
  663. //              color.GetGreen(),
    7 N1 L8 W/ Y% }1 W+ ^& |
  664. //              color.GetBlue()));
    - h( M9 P. c! N
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , W8 |  r1 |5 w; P
  666. //          }% l. T; l  R/ n8 v9 Z6 Y& ~
  667. //        }* C1 p) A( ]0 E- e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    6 o  a1 k* }9 u8 k2 [/ v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ I1 r6 c- X/ Z# j6 i4 x) Y" }: j+ k
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + w4 F* [) I( O" o+ o6 T) o5 R
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) n$ N; B5 D( o* \8 ?
  672.         for(i=0;i<240;i+=8)0 S  A5 k6 x0 N
  673.         {
    & K7 u6 Y' W- }* x8 ~
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , ^8 E+ |( P# b  q4 K
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 ^/ }% |; [0 k- t" `, H) h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / l/ H, _. V9 l
  677.           Sleep(33);$ K; o, p- v: v  q) X9 ^; p0 `
  678.         }' M) D9 X  h1 q/ Y; ]3 {9 K
  679.         Sleep(1000);
    ; s, c1 h! |" y2 Q: a1 \
  680.         for(i=240;i>0;i-=8)
    7 I1 E) f" n: ]- E. p
  681.         {
    - f. A- n( e0 U* d! K  S# i
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; a) e, P: _; E/ ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ m! i  }  `% _0 M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / o4 c' S$ X8 a3 _' U1 ~( v
  685.           Sleep(33);
    & W; G6 u9 t7 B0 s6 y0 g
  686.         }
    . s0 f  T7 y0 U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);2 A, Q1 K; z" [8 X' i- J1 r
  688.         dlg->ReleaseDC(pCDC);
    " r& N" ]2 g1 G% f# H* ^: V* ]
  689.         DeleteDC(hdctar);
    4 Q+ y, N$ m; ]9 H9 k
  690.         DeleteDC(hdcsrc);% x! C: ~! |3 r: k4 D% h3 K
  691.         DeleteDC(hdcorg);
    $ [' b; z) r* Z& O
  692.       }3 S0 T: z2 |* |7 L4 b, P/ }$ E7 g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    5 P6 p( B* y9 Z+ [8 o+ \
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ h1 j) @- I6 u& Q" |+ G  V; K
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 ^7 Q" z/ j4 |! {( B8 {3 h
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 r# X2 X: s3 P# r8 z/ a* ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ {$ C2 r- a5 h0 }
  698.       if(!Dn.Connected())
    7 R* K9 X4 E8 ]7 \- X& A* U
  699.       {2 i6 j6 d6 L! X  O9 \6 s
  700.         dwTotalFiles=1;8 N  d5 {# ?+ ]" P$ L8 L# R
  701.         dwDownLoaded=0;
    5 N; C! _: T" o0 q8 J' W( I
  702.         bSilentStep=TRUE;
    ( ]3 ~) U  e$ P; B/ f5 o
  703.         bCompressed=FALSE;
    5 S% }5 i( J4 }& o/ Y
  704.         strExtLocal.Empty();0 {) b8 J( W0 j+ T  X! v/ W  P
  705.         strFullName="readme.txt";
    * W+ L% g( X" i) U* Z4 l
  706.         dwProgramState=AP_CONNECT;5 a1 I& b/ ]) m0 r7 V
  707.       }2 S2 H0 S  |. d. k
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();) K( ]" L! h& O4 E
  709.       dwStartUpSteps=2;
    0 M. h. |9 t+ i1 k/ ~: \/ v
  710.       break;
    $ m6 c" o6 S- a0 s& i4 g
  711.     case 2:+ {% J0 s: Z, T( A
  712.       {4 C" q$ R9 n, z  u. y5 C5 w9 g
  713.         int iEOF;
    % u6 ^+ L6 l% ?. p5 V7 w
  714.         FILE *fp;, ^8 e. U+ _0 J4 X4 X% }7 W
  715.         char szString[512];0 t! C! z6 [  `  \9 R
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! d2 x  R5 T5 w5 d8 e( h+ N
  717.         if(fp)5 {" g- \. u/ ^$ Z3 m  i( t
  718.         {4 g! i1 K3 k1 q+ L# m
  719.           do- Z, r9 z/ Y2 ~2 P$ z7 J( V! k0 m" O
  720.           {' N. _9 W; a) R: q
  721.             iEOF=fscanf(fp,"%s",szString);
      `6 a+ |& L; i- T( F' y
  722.             if(strlen(szString))  x: B" A3 z8 H8 d, j" F
  723.             {
    % R: _  I; |" J
  724.               if(bFirstChar)* w6 _5 [. x$ M) ]
  725.               {9 R$ W; W+ g( i0 W) f+ p# F$ Z) I
  726.                 bFirstChar=FALSE;
    ) E) o, h) |; r4 ~- Y8 {* k  e% B
  727.                 bConnectIsBig5=FALSE;/ j2 b, s; S9 v& G( f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ! p& W8 Z( _2 O. S0 v
  729.               }% X' C! Q5 _7 b1 S$ W! `! y% `0 Y" j
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - i6 V: C! ], q* W  B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));& c" e* V- }+ m6 J9 n+ g, |; C. d
  732.               dlg->m_ListText.AddString(szString);
    ' Q. S. k, I2 q" B0 K$ e
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / L' T- ]- q/ r* {  D
  734.               *szString=0;
    ! d; A* {7 u' ]0 T( t0 [0 P
  735.             }" _( A& ?7 Y8 e! b3 I+ N
  736.           } while(iEOF!=EOF);2 N2 u$ t, ~2 b
  737.           fclose(fp);# g7 `& `; \+ Q4 I$ c* Q- l$ Y% n- V$ U
  738.           unlink(".\\DownLoad\\readme.txt");
    ( Y: [6 T$ K, {9 e: W- q: J
  739.           dwStartUpSteps=3;6 I+ f9 l( r- N
  740.         }* R# ?5 w+ ^, i6 ^- [2 S" M
  741.       }  ^7 f+ e7 @7 u/ A, m, ?
  742.       break;3 u8 j% ?" Q7 U) R1 X
  743.     case 3:
    0 A# Q$ ]; D& Q9 C6 T8 z
  744.       if(!Dn.Connected())
    % }/ @; J5 {5 ?/ [5 F
  745.       {
    % o5 d% [7 ~- ]+ A, g
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);" A  W0 x, k, h  g, u
  747.         dwTotalFiles=1;
    8 V  P1 X2 p* m* F" E' p
  748.         dwDownLoaded=0;8 l: k! R( p0 }7 R9 f( ~" f1 D- Q
  749.         bSilentStep=TRUE;
    & T! ?) }0 `% t0 ^+ w8 ?4 ]
  750.         bCompressed=FALSE;
    7 i3 s3 _# D8 N$ |2 ~1 b
  751.         strExtLocal.Empty();; e+ `( S5 K4 P1 m9 f1 U& Z) Z
  752.         strFullName="checkversion.txt";& b8 A) z- ~8 Z
  753.         dwProgramState=AP_CONNECT;! s! [' \! g# H' k+ Y# v' H
  754.       }& ?& N/ o4 i0 w- L
  755.       dwStartUpSteps=4;
    / z0 G) X9 |# N# R
  756.       break;$ `8 g" s# s% d6 H; |
  757.     case 4:
    6 U+ W/ ~" ?0 F: Y6 E
  758.       {
    5 \6 I: a$ d, ]4 x8 f5 J, F
  759.         FILE *fp;
    1 X& R  y4 j, }. r, t$ `& W
  760.         char szString1[128];
    5 z& n4 s8 m! e
  761.         char szString2[128];0 \+ @/ _. @- C
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % V* R3 ]1 R  G7 A1 d
  763.         if(fp)9 m) u7 S6 ^' p/ u
  764.         {
    + ?4 X/ R- e/ h8 i
  765.           fscanf(fp,"%s",szString1);9 B/ i+ }" V: B/ x9 w7 a5 y0 B
  766.           fclose(fp);
    $ ]6 e( ?7 g- \* e/ O( p" j
  767.           fCheckVersion=atof(szString1);
    9 _2 V% }5 j0 |8 {: B6 d3 l, c
  768.           fp=fopen(".\\checkversion.dat","r");
    9 p: o. R) ?4 C! v
  769.           if(fp)7 k0 @7 k! I! Z8 l2 V  J$ E/ I  c
  770.           {
    . \! M/ h# L% {0 Y& P2 k  T* [
  771.             fscanf(fp,"%s",szString2);
    + e$ ~" s6 e0 O2 ^
  772.             fclose(fp);8 i4 o/ f8 K2 i2 p+ j5 P; \: ~( I
  773.             if(atof(szString1)!=atof(szString2))
    1 O% c! ^% f, Y" n. @+ q7 w
  774.             {0 X$ Z; P* S# g& t! o) G
  775.               if(!Dn.Connected())
    ( W+ i# I! @/ R6 g$ }& {+ L% X
  776.               {2 p1 _6 ?% k6 a7 W. t  R  x! w* h
  777.                 bFirstUpdate=TRUE;) B0 a9 W) y1 J9 k" u
  778.                 dwTotalFiles=1;4 J# k- t: M% @- m* K0 u9 n8 O. d) i+ o
  779.                 dwDownLoaded=0;
    , M  J$ b# j9 _& h2 J3 z
  780.                 bSilentStep=FALSE;  y" S* @6 X! t$ n* _9 [
  781.                 bCompressed=TRUE;
      b& `9 E. G$ A, t
  782.                 strExtLocal=".\\DownLoad\";  }: i, [. u+ t* r* X( E
  783.                 strFullName="update.txt";4 A2 B1 E; i7 c, X/ k1 f
  784.                 dwProgramState=AP_CONNECT;; P* ]7 a9 \9 o. t8 T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 s* E9 Q' l8 m8 i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& N, ^( W$ a3 v$ e  h4 z$ N9 `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
      e! H" v2 B+ Y# F, Y9 E8 F! P

  788. ; j: m% u, h0 C, Z8 A% P* O
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: C9 E& b  g7 {6 ?' J6 w6 w7 c
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    * C) {' d( y) P2 o7 Y& Q7 [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# q- n+ X& A/ o; m% ~
  792.                 {
      m, r+ j6 {+ w) C3 m- q8 R9 }
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! S( X3 F6 _: g+ O! r
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    & r" S  [$ p0 Y' Y( l" d! m
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");5 n: ]2 |; R0 ^3 d
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . M+ Q+ @; @* |7 ]& k. h- f
  797. 4 @! f% Z2 V# n8 }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * P9 @6 I$ h" L" b/ _
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    . n% x2 H5 P! d! n; \& E  A3 T# F% q
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");9 q$ f# ?; D9 V
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 r3 C( p' V1 p' l& F$ t0 f
  802.                 }
    ' a; Q2 m7 B5 U- M& ]/ v" g
  803.                 dwStartUpSteps=5;
    5 q0 J3 e8 N( T; w3 b( S
  804.               }4 f6 Z& T8 {* K5 j+ [
  805.             }
    0 D: G5 h% b4 V! |/ R0 o! T
  806.             else2 D, u; C1 c" D( ^# F& E/ Q7 j% U
  807.             {/ ?3 e2 A0 H5 |) J5 _, _
  808.               unlink(".\\DownLoad\\checkversion.txt");8 B( @  D! A0 Q! Y! x& y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- Q8 A# v$ b( g  D) v) D
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! C' m; g# s" p8 f1 k6 L; y9 _+ A+ _9 @  @
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 ^7 M9 O- m4 I. z
  812. ! L) ]" T9 F3 W" V
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' |1 r3 N5 v3 K; s# i. h
  814.               dwStartUpSteps=99;
    % H% Y6 f9 J6 D7 C) L
  815.               bFinishUpdated=TRUE;' X8 G. S2 {. m
  816.               bCanUpdate=TRUE;/ J7 u3 v! |' y# Y2 i
  817.             }
    . }, E; u% I5 T, f$ r( @
  818.           }. _) J" D4 m: l& R3 J8 ^
  819.           else
    5 M* P( A$ G7 c6 K% \* ~
  820.           {9 @! z& x$ \& R# E3 y) k- ?1 ]
  821.             if(!Dn.Connected())7 M% Q" [) I& {8 O8 j% d
  822.             {' Q4 s" U. O7 B" {3 [! x( o4 ]
  823.               bFirstUpdate=TRUE;* j% c5 y' g* u! @
  824.               dwTotalFiles=1;
    . w( y7 V- ~2 z: P) g7 }% O8 c
  825.               dwDownLoaded=0;
    % E- r: [2 l% Z% z+ u' J' m" t
  826.               bSilentStep=FALSE;& A; p: R) F) c, V4 B4 g
  827.               bCompressed=TRUE;4 x: |, B- w, j6 T- ^
  828.               strExtLocal=".\\DownLoad\";
    $ D( f, P" r- S5 `
  829.               strFullName="update.txt";
    4 Q5 I5 |5 W7 L! D9 C
  830.               dwProgramState=AP_CONNECT;1 G' f% r1 O: A" k7 l5 Y9 G5 C' Q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! w: S8 b; s4 G4 p6 p' P* N
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 E1 h& s7 w/ Y' _
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 h% P3 h( t- c: p1 V2 p
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' ~( N( m+ S; d$ q
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ! U- r3 e& @" Z% `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- O, ^3 Q+ w1 F6 C$ d/ W
  837.               {4 y: ]5 X' G9 U+ K) ]
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; V; C8 V9 o3 b1 l
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");& X8 j3 f1 T5 A0 [: s
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * W( {% d3 Q7 y# s8 A5 V( C* T
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 M, w  b! J2 x+ j. W1 j  L
  842.                 # L- \/ u5 y3 \' k! ~* `* g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ Z) q& E" z/ j  p9 t+ t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! _+ W+ r% L. K5 D! N; n" X
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");$ r/ O8 F* U2 m" `! Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, J) a0 f9 _2 h" L. J
  847.               }
    1 u* r8 A' B: G0 U2 e' \% Q( w0 F( {6 a
  848.               dwStartUpSteps=5;
    * K" ?5 w) Y$ L0 `9 G* h
  849.             }) J! o( h  o  T3 K1 p: @6 J
  850.           }! ~6 ~: V( t# w9 W2 @+ K
  851.         }
    . l5 _$ J1 w6 l8 g
  852.         else6 _6 H& R, [1 Q- g/ g
  853.         {
    / o, D9 m, m% S+ {& |, d" n
  854.           dwStartUpSteps=3;9 ^- x% g: N* S+ V
  855.         }4 p# G, _5 P$ V6 J% w$ k4 W
  856.       }
    & R$ B4 P, G% g4 ^
  857.       break;
    + x: Q' T4 V" E4 p
  858.     case 5:
    0 p7 e( J9 h, h# x
  859.       {7 ^; Z, P( ^: F/ S9 B3 `' m" `+ `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)2 m& l$ [' @8 W, C, j
  861.         {
    ) ?, p: ~. Q. t
  862.           int opt_overwrite=1;& R& ?) B  I& V+ h2 H
  863.           int opt_do_extract_withoutpath=0;
    + \$ ^4 F2 E1 l9 h% n9 y: u% i; u" J
  864.           unzFile uf=NULL;* z( U' Z% _' c" `

  865. , ]( `7 [& c& ]
  866.           uf=unzOpen("Wsa.zip");
    6 h5 |/ L" a9 r/ ~
  867.           if(uf)" V6 t* ?' A% H
  868.           {
    # d+ B! u/ E: {' P# J& |4 {& V% t
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    6 K; k9 v) ~# |2 C" w( f7 K
  870.             unzClose(uf);
    ( ?' M  }3 b$ L4 c9 c
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");' [5 A4 q  j4 |2 u/ G) U! m4 ~$ J
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");# b6 s6 c  |. R* i( b4 o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");# n. U6 }# y: K5 A3 w$ m. L2 b9 b/ F  L
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , w0 \7 z8 ^; a; T; I( x) m
  875.           }" o/ C; y- x' j. T! ^  M
  876.           DeleteFile("Wsa.zip" );
    4 J2 S' w4 k6 I* W9 h! D7 |7 n3 `
  877.         }
    % U8 W) L) E9 V9 o/ h: G# p; C9 Z

  878. % {7 n6 \: ]1 Z7 H5 y5 {
  879.         if(CheckLocalVersion()); j7 C5 @0 J) G& c+ n$ V- y8 s
  880.         {
    + y2 v- ~* @3 A2 i' t& v
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    6 \  Y+ u- l$ c7 |
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");( y4 G) E. s! O6 Q! x
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");1 d: v9 W6 x' i! ], a0 c
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) G* p: D) y$ z/ P: `$ w( ~
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);& Z; D8 h4 ^  x- P
  886.           dwStartUpSteps=99;3 y: r4 k2 P4 I; h  z" d9 D& @" e: P
  887.         }8 `/ s& {. g! f! e
  888.         else% R8 S  B: l$ S' d' x  o
  889.         {
    " X( H( b3 a, I
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) V! [1 R' U  O! O+ B
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    2 \: d# d) \' C  y% H3 V3 a
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");/ v8 f: }% w* ?) a% b# A0 u; u

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

* e( T5 H3 L: ]$ k2 X

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-30 18:37

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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