找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
7 Q! i* A; i/ |+ D" |3 M- {' [
  1. / RevApp.cpp : Defines the class behaviors for the application.
    * U3 z1 [4 Q! b3 G, {' W
  2. //
    ( O" U) O7 H' a4 Y

  3. ; w6 R' F, K9 A1 q
  4. #include "stdafx.h", }$ `. b2 @$ f; ?7 P3 H

  5. 4 P- l8 @9 e! J- A, d" s4 ^7 A
  6. //#define UNICODE
      M, H& H3 a) w1 W9 M
  7. //#include <gdiplus.h>/ k, s  R6 K/ C0 O; P( m
  8. //using namespace Gdiplus;* N1 g% u: e+ n4 I

  9. 3 I3 W, W: C$ P* q7 i& a8 }! M& w
  10. #include "RevApp.h"7 W6 ^7 V, L. h# z& S, U' a
  11. #include "RevAppDlg.h"  M5 O. t/ f3 E( o+ {# E
  12. & ?8 A0 m: H2 R5 K3 `
  13. #pragma warning(disable:4786)* }) J% C5 x1 k6 a* t) y; b
  14. #include <map>
    ( `* D- |; a9 u  g" G' H* F
  15. #include <list>
    ! n4 g# U' B! p7 h( _
  16. #include <direct.h>
    ! ~. {5 H7 A6 A5 b- g, D0 ?
  17. * {8 X+ {( h4 }; H2 T. n" o5 m2 S
  18. #ifdef _DEBUG& @. @. L2 u. ]  a! j
  19. #define new DEBUG_NEW8 j+ q7 @! E; J, ?  e' h* R+ d
  20. #undef THIS_FILE
    - f4 l# Q. n. M' L4 r$ o
  21. static char THIS_FILE[] = __FILE__;( P; F* x2 G/ S$ [6 k' u; |& V
  22. #endif
    0 m7 }+ _5 f* \( S
  23. #include "SkinResDef.h". C. W# {: ~5 ?  W1 h" Y9 v; M+ Y8 ]
  24. #include "ChangeBG.h"
    % A3 R; r$ b- E! H7 A
  25. #include "AFXINET.H"
    9 T) e- f: X0 f- R: ^
  26. : M' Z% U  S; Z' G; i9 Z# G
  27. #define TRADITIONAL_CHINESE 0
    4 @" @4 d: f$ Y5 E
  28. #define SIMPLIFY_CHINESE 1) A' i$ @  G! `1 q
  29. #define ENGLISH 2
    ' G( C. ]5 n: Q+ Y4 e
  30. int m_iLanguage = ENGLISH;) J/ o; g: t2 v  W
  31. /////////////////////////////////////////////////////////////////////////////. R8 }& E) i) }, h- F+ e0 x
  32. // CRevAppApp% H: O7 Z- M: N- A
  33. 1 r/ W9 g" Q" B6 x, M# e0 c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# J% S- [2 F# j$ w/ C
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    + `+ L7 Q6 T: R. O9 L/ L+ Y  E
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    - y  q' |7 B5 R) A  h$ g, M
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 Q9 |6 ?+ i) c2 {( p& H
  38.         //}}AFX_MSG
    $ I9 |3 K6 s9 C& ^1 p& ^3 w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" g! {3 D! v: i3 v/ Z
  40. END_MESSAGE_MAP()
    0 ^3 f; I# H: V9 V; U$ T
  41. . q- s" ]: ~/ L5 i3 r) v
  42. /////////////////////////////////////////////////////////////////////////////
    : J9 T% _0 T# a3 a7 a# j
  43. // CRevAppApp construction
    3 {1 G4 Q! J: l2 S" O

  44. + W6 |, O1 a2 D6 f* P& P
  45. CRevAppApp::CRevAppApp()
    1 V1 x8 a9 Z4 |* F/ o
  46. {
    + H  \5 r: w, j+ @, Q: P. S# g2 e0 a
  47.         // TODO: add construction code here,
    . ^1 J6 G* `. I
  48.         // Place all significant initialization in InitInstance7 m/ M6 i4 {. r( u: H" ^% R, M& ^0 H, t
  49.   bDisplayIsBig5=FALSE;5 Y, E0 [4 W% T5 f% S6 L2 [0 @
  50.   bRestartUpdater=FALSE;
    ' d& n: `' b7 K) @
  51.   bFinishUpdated=FALSE;* Y! E- N, q+ P% D  a1 h5 Q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    1 E+ P( h) N2 o  @3 l1 J8 k
  53.   InitChangeDataBig52GBKS();
    2 R' c, N6 S! A* [, p
  54.   InitChangeDataGBKS2Big5();5 D, {; a0 }! u) Q  a2 }- t
  55.         //" \$ i' e# ~  i
  56.         bClickRunExe = FALSE;' n8 A% \. _3 d8 u4 X! L* S
  57.         //
    2 q( D% |0 |+ Y" N' W8 x; V  v  h- Y  Q
  58. }& v- Y2 D8 b. V- o/ M- ]. E
  59. * O( O: B% y! J1 K; J2 X7 L
  60. CRevAppApp::~CRevAppApp()
    " S' s8 b0 X9 P
  61. {6 v9 F* X: `2 X
  62.         // TODO: add construction code here,
    6 b! I5 x3 J- }  D+ X2 Q
  63.         // Place all significant initialization in InitInstance
    5 I! h6 N7 i# e9 A7 e9 \
  64.   EndChangeData();5 _- [9 M( A+ s9 T
  65. }
    & K8 Q# c4 c7 y! p

  66. 9 }$ X( x7 Y7 P( L
  67. /////////////////////////////////////////////////////////////////////////////. ^. h: C1 s2 U
  68. // The one and only CRevAppApp object
    6 M* O, ?; i' _' V- u  m# t( q
  69. 7 D0 @# w. U: L. t/ C4 q+ U1 s
  70. CRevAppApp theApp;
    7 `6 {& k6 A0 M# J; k# o3 I
  71.   |; L: x/ e# p/ d, G! d, _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)" ~& }9 E8 |3 ^6 r
  73. {
    3 r+ o2 {( A0 r
  74.   int iEOF=0;
    ; k6 e) ?9 h6 r7 e4 G5 D6 w: Z6 N4 E
  75.   char szTempName[MAX_PATH];
    . J3 y6 B  a3 m2 G* i% h2 H
  76.   *szFileName=0;! ]# y5 x, t+ z4 ?6 s- f
  77.   iEOF=fscanf(fp,"%s",szTempName);
    # ^. p- Y+ t. |, v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! z  k$ G8 ~/ z) d
  79.   {
    - b$ H# w9 `) E; {+ }
  80.     strcpy(szFileName,&szTempName[1]);
    - s4 ]3 u! V' H( M! |( e
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)& v& z. J5 p1 O1 H
  82.     {
    ( G' V$ J- N/ s
  83.       iEOF=fscanf(fp,"%s",szTempName);  Y. J9 Z1 m" E# z" L" i: c/ S
  84.       strcat(szFileName," ");
    + o7 `& a5 B" W, p/ [5 D
  85.       strcat(szFileName,szTempName);
    : |! D% b: N; y: p$ w
  86.     }
    / C% _3 l* G2 X# ]- m7 d' m
  87.     if(strlen(szFileName)>=1)9 y' w9 h& K2 }4 c8 o9 u2 t, B& s
  88.     {
    3 \0 }: W* l8 C$ e* {. e
  89.       szFileName[strlen(szFileName)-1]=0;+ }; q+ k0 I( V# Z+ h4 B
  90.     }
    . F# H% S$ [$ c6 g- H$ C2 V- V
  91.   }
    0 w" A0 {( ]6 r: N2 \
  92.   return szFileName;
    . ]* D8 Y# L) S2 O
  93. }
    9 A; R5 ?- ~. W1 R7 H. j

  94. 4 k; C8 b3 d- G3 a0 _- B/ i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , b% \# j- w" {2 c$ E0 n1 A
  96. {
    : K3 a7 l" G$ O7 f$ `
  97.   FILE *fp;
    # s" i+ d8 O: J  r. ~+ y+ k
  98.   char *key=NULL;
    + }8 M/ {6 t& a% `
  99.   char version[MAX_PATH];
    " L# s( G: M5 D! v7 s  _
  100.   LPUPDATEFILE file,olds;5 e( g5 O! b- h% z9 Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; B- y7 k- {% \: h# h1 M

  102. ! l5 Q3 G- \( J" O: v1 K0 }
  103.   UpdateList.clear();
    + w/ Y8 E- p) K5 v
  104.   UpdateFile.clear();
    + W2 |) d* `1 r" D% `
  105.   if(GetFileAttributes(filename)==-1) return false;
    " d1 {$ M  v9 \$ T  V
  106.   if(!(fp=fopen(filename,"r"))) return false;# _! M! l4 f$ U1 f0 J/ U! D
  107.   fscanf(fp,"%s",version);
    : O+ v' j- \5 R1 Q7 t, o9 o1 X
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- Z! }! T' g& c' H% z! x) ~3 \
  109.   while(fscanf(fp,"%s",version)!=EOF)
    1 b  X, L8 C. F% s
  110.   {9 x6 i& U2 m& O8 p% V# c
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' k; }7 W$ q0 o. J& I
  112.     fscanf(fp,"%s",file->path);5 G+ c0 o6 J. O" Z, ?' ^
  113.     ReadFileNames(fp,file->file);
    ! u; T' D8 @5 w7 y5 ]: r/ e
  114.     strcpy(file->full,".");  E' ^" R; i, J, ~; h
  115.     strcat(file->full,file->path);
    . v- P* f  j: S! p1 K! l7 K( r0 b
  116.     strcat(file->full,file->file);9 W# T$ \- l/ b3 W" R6 Z; e
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())+ q% v: l2 v1 b6 t+ Y4 N
  118.     {) y) X5 k- ^& B& n+ w
  119.       file->vers=(float)atof(version);4 m& m8 c& O/ @
  120.       UpdateList.push_back(file->full);
    5 B  A( D2 [' o. l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    2 H# ?. v' V/ ?
  122.     }5 S# ]. a/ c9 l# Q% V5 |6 v2 }
  123.     else
    - `, A7 u- c6 ^' z6 Y* T
  124.     {" \5 P. J, B( {! J  X3 d, V
  125.       olds=(*p).second;: m* O, }  F" Z/ r
  126.       if(olds->vers<(float)atof(version))
    * Q$ A8 ~7 Q% v( l
  127.       {
    ' N+ ^5 G3 {# q! K
  128.         olds->vers=(float)atof(version);% b& Y( c( i9 n: E$ [$ c
  129.       }$ p* `+ x. ?& z7 O
  130.       free(file);: }$ s2 g1 L: i) {0 B
  131.     }/ F( D, Q. @) T# G
  132.   }
    5 v' p8 M8 M/ h
  133.   fclose(fp);* G1 E3 W) ]) c* J( {
  134.   return true;8 E0 C# e# R. [5 R! g/ W
  135. }6 x/ d0 {0 n" k8 G, i5 q

  136. 3 u. l4 G2 k- _8 P3 j& m: D9 U0 ^& `
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)! D1 l$ w/ l! }3 k9 G; A& W
  138. {) W" l: O+ p) @: s$ B8 u
  139.   TCHAR  szFull[MAX_PATH];0 J( n; M  z0 v. k7 w
  140.   TCHAR *token,*inter;
    2 ^1 ~7 J: \  ?6 b- X' `& N6 n. R
  141.   *szPath=0;$ Z2 [8 l' j' O; B3 g! O5 F
  142.   strcpy(szFull,szFullPath);/ X! a( O+ g& d% w3 S
  143.   token=strtok(szFull,"\\/");
    ( K7 ~/ p: }2 \4 W* p- g
  144.   inter=token;2 J# Y. o. V! h
  145.   while(token=strtok(NULL,"\\/"))0 n! m, i* G% N8 G0 n( Q  H: G
  146.   {
    5 o+ X  U: x3 X* q. _
  147.     strcat(szPath,inter);& \, I8 n/ l4 _7 @9 i: }6 M1 ^
  148.     strcat(szPath,"\");+ i% }6 W  B; N+ Y+ }
  149.     inter=token;7 S' ~! r0 |/ W& Z! \3 ~$ }- d
  150.   }2 r' X- r$ ^5 D
  151.   return strlen(szPath);
      z5 w! A( e7 @) l5 Y0 y; l
  152. }1 k2 S! q2 \/ C+ V7 l

  153. ' l! `9 m5 }& P5 e& r& g4 F& ^/ K
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    / x0 S/ T  A" e# h7 d9 Y
  155. {
    * @4 f5 f/ U( k( M
  156.   DWORD attrib=GetFileAttributes(Target);
    5 S+ R/ S1 N3 G* ^0 d! J3 p/ m
  157.   if(attrib!=-1)
    " c$ u. y+ D$ p& G& M
  158.   {
    8 T( V' C0 ~' ]# ~, M9 ~
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ; K: z, O3 G+ ^2 _  ]
  160.     {
    3 b2 W7 x+ B6 d& |' @& P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : Q% X! k9 f0 F0 l5 X
  162.       SetFileAttributes(Target,attrib);& \5 t# ]0 \5 ^% l& f9 P/ k# o
  163.     }5 |8 o1 w# T0 E3 R9 O1 a
  164.   }
    ! B7 @* U/ i1 ]. K- c
  165.   CopyFile(Source,Target,Erase);* @! {4 E6 R5 Z
  166. }: l, r. o8 A) r" d7 {# w5 U# k; ^+ b

  167. 7 ?/ h+ F7 U& A7 [3 z! j& W7 A1 ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ' q3 l9 i# V0 Y& i: S
  169. {
    + W8 C* v- z1 W( _! F
  170.      FILE *fp;4 Y% x: t' O' D2 s# }5 \, h% ~
  171.      char  szBuffer[8192];
    : [, N& z5 V9 C3 V: H7 S
  172.   va_list  argptr;
    " V, s% F  E) N6 s, S
  173. 1 l2 z1 Z* a; b. j5 b9 o
  174.         va_start(argptr,message);
    $ p1 l# m& O. P
  175.         vsprintf(szBuffer,message,argptr);6 K3 V' c, A, H$ p
  176.         va_end(argptr);
    $ Y* V9 y4 o( @3 B" f4 d* M
  177.   fp=fopen(FileName,"a");
    ; Z" b' K& h7 \$ P( A1 E6 D$ J
  178.   if(fp)
    0 x( t8 ^0 H6 y1 a
  179.   {
    : m0 J5 U4 J6 O* U1 p
  180.     fprintf(fp,szBuffer);. H3 I- W  V) }% M: z& ~: w7 s7 z5 V
  181.     fclose(fp);
    " w1 e8 w$ C& s7 @6 B
  182.           _flushall();
    " A& I/ m5 j) U+ x- W
  183.   }8 l: s& v% M. W  ^- y
  184. }
    9 S7 w( X8 V; n7 E! G! P
  185. % ~; o! k; k& W" V- [
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ k; ~8 E; u  Y% X
  187. {  p! p7 Z" b* D: z6 T6 m# P2 `
  188.      FILE *fp;5 I" e- w+ Y9 t+ [( r
  189.     DWORD  attrib;7 V! a$ g& m; v* U+ A, @* Y
  190.   attrib=GetFileAttributes(FileName);
    6 Z5 P) v* u! Z: D
  191.   if(attrib!=-1). k+ O# l; U5 z: M4 m2 x
  192.   {
    % L& ]9 w# N( o( {8 b
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);9 o5 S' b% O4 x0 J, R
  194.     if(!SetFileAttributes(FileName,attrib))# U* v1 Y6 ?4 K$ C, i
  195.     {  ~/ ~, V: z( ]/ V& \5 `1 v( E
  196.       return FALSE;  J! g! B0 _# H* a0 [' @6 T; S
  197.     }
    * n. D7 }/ w. U" ]' F
  198.   }' ~/ \4 q; M5 R5 Y5 z. V
  199.   fp=fopen(FileName,"wb");/ o4 ~: W' @; s" ]" E
  200.   if(fp)
    0 j7 U" B! @- q4 ]# M) W5 }& w: ~
  201.   {% d) v! H! Z1 o  G0 z
  202.     fclose(fp);
    ! w% G& v0 o$ t) W1 ~
  203.   }0 ^4 n1 f* u& S  m) m& O
  204.   return TRUE;: |; E3 M6 @: Y7 Q3 k; ^
  205. }
    - t# V5 g# w: K- A* |  E

  206. ; |: R% u" y( ?+ d, b) U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)1 Z4 h7 h6 t$ _1 Y
  208. {. a% E/ g! m9 i# K( I% L
  209.   char filename[MAX_PATH];
    ( i( x, Q0 i# n& O
  210.   LPUPDATEFILE file,olds;" p' ^2 _# C9 a6 G4 \+ S, I
  211.   std::map<int,CString>::iterator i;
    ; n* g/ O( z/ \+ ?6 g0 x9 Y
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    % Y9 L3 p: i; j7 M& M7 U3 P
  213.   std::list<CString>::iterator l;
    : w1 j8 G: E. ^$ _7 k
  214. 7 i; k+ Q" |9 \. L0 ~/ u
  215.   if(bFirstUpdate)
    ( V% s2 d' I3 l( |
  216.   {
    1 g' }6 Q8 w; Y. J7 v
  217.     dwCurrFile=0;
    3 b8 n" x+ R) A( K; u9 @  I7 n& x
  218.     bFirstUpdate=FALSE;( L9 t4 X  ~( H$ J0 R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); s9 F9 ?# v4 f+ w' g) n
  220.     {& f! w& s) X! v! q$ V5 F
  221.       dwTotalFiles=UpdateLocal.size();4 ^2 f7 _# c/ k0 q- m
  222.       dwDownLoaded=0;" x2 R8 y# D. O4 M3 ]
  223.       bSilentStep=FALSE;
    6 \* I$ c: \" [/ K
  224.       bCompressed=TRUE;
    ' i! D  o2 n* b/ y0 T
  225.       strExtLocal.Empty();
    + l' n4 W3 ~  j0 f
  226.       strFullName=(*i).second;$ b; _" [: F7 S6 p  D2 Z) B  j
  227.       dwProgramState=AP_CONNECT;2 w6 Q, j  G- P. t2 G) E
  228.       return TRUE;
    6 `( J/ z/ g' h" [4 M: O& Y
  229.     }
    # b% c6 d5 _) b) j( C2 ^2 a
  230.   }- O( q/ r8 f9 L4 B8 U/ E8 h
  231.   else if(bRestartUpdater==FALSE)5 R! b$ S! V' r' Y
  232.   {  T$ b3 l, W  X2 V
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())& x4 H. K' Y1 R- o, \
  234.     {5 F6 n9 ~1 @6 W1 g  x1 A
  235.       file=(*p).second;
    8 E4 V. b  j: |2 v, O, C
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * b, ^/ P& [6 s
  237.       {( Z$ x3 v  v5 c* ?. @$ f! G  a
  238.         olds=(*p).second;( t+ b& |! |+ A3 L
  239.         olds->vers=file->vers;
    ) c% j* L% X$ ^2 ]
  240.       }
    $ `, S9 B! D; v4 X, ^: j' M6 A
  241.       else
    & v# v  ~" U) `+ @1 w" F2 A. o
  242.       {
    2 h; ?# }. @( A7 V9 b* H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ P/ Q5 _+ P% u" f) e) X7 Z/ B  J
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ d) c) O: }. U
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; ]) b  z, ^5 w6 ~1 p9 t
  246.       }
    7 o) ?$ _" x+ W8 @3 Q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    5 [  }# {2 r$ a! R+ W
  248.       sprintf(filename,"(%s)",file->file);# C1 k) G  S& a; C- ~% H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # V; _6 K$ F# O* g& [1 F3 J% V
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }6 Y% T2 _! D( N3 A' J
  251.     }
    6 l9 _) J. F( C# C7 w5 q* J
  252.     dwCurrFile++;
    4 R3 B4 D" K6 X. Q* a$ {+ q3 i
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 v& |6 _* \' u, ?9 K
  254.     {
      j; c0 i) Q0 X. t: w/ Q0 Y7 ?
  255.       bSilentStep=FALSE;3 K- {0 b# G8 J
  256.       bCompressed=TRUE;
    # v5 V4 ^" O9 K+ y
  257.       strExtLocal.Empty();
    ' R6 Z0 d, ]. Z3 i& X0 h
  258.       strFullName=(*i).second;
    + g8 y) m  q; `( I* n' M
  259.       dwProgramState=AP_CONNECT;9 H3 _$ x1 _9 g
  260.       return TRUE;# S2 p# O8 {3 X  w  r
  261.     }
    " [. [$ _4 i6 d6 \; `; l
  262.     if(!bRestartUpdater)) k; N& j* a/ Q2 |# e
  263.     {
    : x4 W' g7 N2 Q, ?0 S
  264.       int iCurrSize,iFileSize;
    0 U1 Z5 c+ ?' X3 x: @9 @& U
  265.       iCurrSize=0;0 i0 W( d" |# G. M% }
  266.       iFileSize=UpdateList2.size();. d4 m6 Q3 I1 g6 p* K2 o8 W
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    1 g5 Z2 V) N- g/ Q; E0 t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; q, V0 _/ S$ [3 ?( g1 w
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " w$ f4 u% Z1 M' I' y6 o
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& F, s8 Q; ?1 w
  271.       Fclearf(".\\update.dat");
    $ Y% y0 L$ {$ ]5 b
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    / |/ J2 l5 V" i' t# E6 i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; }% x( `; w7 G# }) R+ U! J
  274.       {, ]# [" q7 O  T6 [/ Q
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & J3 a0 t( D0 |7 i0 F
  276.         {4 l; R0 @6 b- ^. o2 a1 n
  277.           file=(*p).second;
    ) r3 C6 Q# r! @" [
  278.           sprintf(filename,"(%s)",file->file);
    & L9 n: q' ~  D, N
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ! [! g8 g! x' \" D- H" A2 y
  280.           iCurrSize++;4 s& b# m  u: t1 f  Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));- |1 M2 I$ x% `  N* R4 D
  282.         }0 Y) G* I* N. _3 K1 c' T' K! U
  283.       }7 Q: O! ^' P7 G5 ^$ {* R4 e
  284.       unlink(".\\update.txt");
    0 _! c9 B( [$ y" ?
  285.       unlink(".\\update.tmp");
    / K$ m: t3 D( w1 p
  286.       Fclearf(".\\checkversion.dat");
    # G8 a0 k+ Y) d1 {; I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% |2 i( B- Y- T; o
  288.       if(UpdateLocal.size())
      s/ j, d( ]$ v- q" `/ f
  289.       {
    , N, N4 g9 ~) O! L' g) }& Q
  290.         UpdateLocal.clear();
    - o, I/ m  T5 r8 y0 ]
  291.       }; M$ r  K- }- H1 f0 r
  292.       if(UpdateFile3.size())6 @8 @, Z( |( o" N
  293.       {$ Y2 e. d; u4 ^1 Y: k" S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 H" A  l* L: B1 V7 y
  295.         {
    5 O: @- r1 E( I+ _
  296.           file=(*p).second;
    " a, v2 s5 w9 J0 W% j
  297.           free(file);
    4 y' W. F+ V3 Q: L( p
  298.         }
    ; P$ y- N6 }# w- L
  299.         UpdateFile3.clear();
    " [) u$ l' p# |$ W, I8 z  _
  300.         UpdateList3.clear();
    0 B8 @2 M& {1 b" f. h. d
  301.       }
    ! E+ [2 e1 z: Z; D; p7 t
  302.       if(UpdateFile2.size())
    3 S7 H& r7 j  `5 y( o, u; i; y7 L3 n6 s! U
  303.       {
      k4 ^# \6 R: R, x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      q0 L, ?1 n; O" o/ P. P  g- p
  305.         {  s7 m" T/ h# i0 |
  306.           file=(*p).second;
    / I$ g4 i% l2 ?+ ?1 X3 U
  307.           free(file);
    4 Q6 D8 T% p  t2 D. Q
  308.         }
    ! [! n, x$ x. s- [. n
  309.         UpdateFile2.clear();6 \' [6 ^  P( d4 @
  310.         UpdateList2.clear();& D' Y* k6 V/ O' g4 w7 J. G
  311.       }2 k2 G& G( x7 x! J0 M" B
  312.       if(UpdateFile1.size())
    + _' K% h! X8 d) R) W% D0 n8 E) l
  313.       {7 f6 p1 t1 B% V
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 x: P" r) P. ?7 M( g; M
  315.         {
    0 M8 R, M8 i8 A5 s
  316.           file=(*p).second;$ h# @  K4 ?" Q, o  A1 i/ M
  317.           free(file);8 x9 b( s$ x& L8 Q8 N7 v
  318.         }
    9 `% ^2 x/ y( B; o4 ~) I
  319.         UpdateFile1.clear();( u. B6 C; J* z! w9 B. l+ I6 ]
  320.         UpdateList1.clear();
    7 Q2 h+ q% a8 e- f2 p' M2 a9 e: V
  321.       }- a% s& Q- |* X$ Y7 I! q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 M5 w" C8 b5 B( L. j: g. H# J
  323.     }4 Z7 n0 Z3 h' p2 [- B9 ~3 b/ ], W( \
  324.   }  g5 g4 y) C8 _
  325.   return FALSE;
    2 g. t# v: C- x& V: ]* c
  326. }3 g4 F) |+ X1 A5 ~- m/ L

  327. . k1 |! d3 `0 a2 ^: ^: q9 n
  328. void CRevAppApp::ClearAll(void)0 j4 w6 I$ l$ i! c
  329. {
    9 M+ |/ M3 |2 @+ Q) G/ l. {
  330.   LPUPDATEFILE file;
    6 ^: e& d6 Y4 X2 C2 f  R8 d
  331.   std::map<CString,LPUPDATEFILE>::iterator p;( B; \3 {4 [- s! O: R

  332. : ?$ l5 C9 a  h" Z5 r$ X
  333.   if(UpdateLocal.size())
    6 }0 N) D6 f) x+ z4 O) w8 j% L/ o' L
  334.   {
    1 x& Y5 y+ H/ c
  335.     UpdateLocal.clear();
    6 |5 r/ \, m; ]- J
  336.   }
    , p" {9 W! X5 t
  337.   if(UpdateFile3.size())& Q1 n9 a5 @' U
  338.   {; F3 d' Q/ l  B& b, K- j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 P$ }7 K% M$ R9 P+ R: E
  340.     {
    6 z* ]- D$ p$ w2 Y' V" l" f
  341.       file=(*p).second;
    - `1 O. n3 E! o# `6 n1 s% T$ Y6 {
  342.       free(file);' h' V; Q, d) r# n! s+ T2 d/ r
  343.     }1 Z- j, n; K! `5 a* p5 d
  344.     UpdateFile3.clear();
    / O8 P* i+ _( z) l6 b0 v# `8 U
  345.     UpdateList3.clear();5 n" F1 ~/ D( x6 }& r
  346.   }
    0 s: `+ Z# _9 p% z5 O8 L) n/ ~
  347.   if(UpdateFile2.size())
    / }% b8 {7 r: V: a2 U
  348.   {
    : E- a% P: f' ]) @2 O1 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    9 _) S' S* V0 ]! i  ^
  350.     {- T0 P& P, U1 H
  351.       file=(*p).second;9 N$ k# j  F$ A& p5 Y" H8 ~3 @
  352.       free(file);
    7 d: Z$ h& M" M5 |
  353.     }0 [! \" L$ w# [9 A2 c0 t
  354.     UpdateFile2.clear();/ P/ z$ t5 x! b. q+ Z
  355.     UpdateList2.clear();
    % k* U: ?. v0 X4 u0 f6 M
  356.   }
    0 `8 n; D; r: `5 s4 N% u2 i: D! k
  357.   if(UpdateFile1.size())3 E* y! |+ G8 F2 }; U
  358.   {* |4 f8 F$ N% A: ^1 s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): g* {: ]: Z. c9 o; i6 {. i
  360.     {" V# _, f1 V/ w; ]
  361.       file=(*p).second;. r; z" {) S+ w) M) ]  E( x
  362.       free(file);
    0 b0 }' |* b+ g1 N/ ]
  363.     }' s& y! o6 l9 b" k
  364.     UpdateFile1.clear();
    0 T) e: G+ o" _& J  I7 k
  365.     UpdateList1.clear();* L$ [% z/ |  s9 D, ], R  n8 ^
  366.   }
    , P0 l1 ^7 S  V% [# Z! }
  367. }  8 E; T* f% {5 I5 w6 W
  368.   ' l+ @2 Z8 f0 u# W' Z/ j
  369. BOOL CRevAppApp::CheckLocalVersion(void)2 h" @# o  E( n* k* V2 `
  370. {
    9 e! H. x. O1 ~
  371.   int c;
    5 ]8 v( }5 \3 k! R6 ~
  372.   LPUPDATEFILE file1,file2;
    " t) B% _: @  b& |
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! u+ y; G3 |0 W! P' s6 ]% ^
  374.   std::list<CString>::iterator l;  C. ?% c% s# U4 c

  375. 0 V) l; ~* U3 @% t/ T. b% \& ^
  376.   UpdateLocal.clear();
    8 A. z3 X, k9 G1 i7 [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);. J3 c4 K8 E8 p; H& M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    , K' b  @- [1 J; h+ T. f* |
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 j0 h  A' L# j+ F( o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " c9 T/ ?8 g2 I1 [0 l9 E
  381.   if(UpdateFile3.size())
    3 z' j# ^. n* n$ w
  382.   {
    6 C' B* Q% @' K" {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / {* F9 O0 \* S# W- d
  384.     {
    $ C0 x$ w0 P  |+ M$ q3 @+ F
  385.       file2=(LPUPDATEFILE)(*i).second;* f: S  M$ C6 m$ U0 C) e+ e* o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 b/ \* v+ R: m. B) U( y0 v
  387.       {* Z( _( O; ^% |) T
  388.         file1=(LPUPDATEFILE)(*p).second;* w. |2 K& j$ p+ a% S/ Z6 H) }! b
  389.         file1->vers=file2->vers;
    3 ?5 J2 T: f% w
  390.       }' ]2 N" F+ \: |  Y
  391.       else6 a' @1 q4 P) U, ]+ e! B# [( u: B: z
  392.       {
    8 L% v. @9 N9 P, j- y  g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! `% f! r! c+ o1 F! O3 e
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));; L: p$ U3 B" u( N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 ^* E& L7 r1 E; h7 i
  396.       }
    - ?/ U* I: H# d/ b( k
  397.     }
    * Y! y; ]4 n$ a2 @% e. b1 i
  398.   }) ]! ^( V$ D8 ^- _) e; J! ?0 e7 p* g( k
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 H# f" e- ]; l0 M# C4 Y
  400.   {
    3 }; ~6 |1 m7 ^: |6 {( n
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    " X+ H( w( s7 h$ h- Q
  402.     {* L* L5 O* i6 [" N9 ?# l7 t
  403.       file2=(LPUPDATEFILE)(*i).second;
    , Q) P. B& k8 \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 P* p+ [5 I, u- N4 l
  405.       {2 n9 @/ F# c. u" W; B: ?5 |0 i
  406.         file1=(LPUPDATEFILE)(*p).second;
    6 n$ x. D  U. G: x! r! S
  407.         if(file1->vers!=file2->vers)) B% S  z% @; I+ Y! A& X
  408.         {
    7 W! I: @  t! {3 S; b! n0 L
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 w! j8 W) w5 ?
  410.           c++;, |7 k. Q1 q( r8 c
  411.         }3 ]1 p. q& P* P8 i
  412.       }1 I( ~2 v5 g& B0 ]5 n
  413.       else
    - L! v$ n+ b* M" {2 ]5 M
  414.       {
      s1 B; }+ i- j9 Z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    3 W; m( r% [- l4 x  u. a* R) e- h" f
  416.         c++;! P0 t3 ~. d! V9 v
  417.       }
    - s, k) n1 M$ U) q9 R
  418.     }
    ; l! y/ d! R2 [  s/ i; A6 [( s
  419.   }
    # P7 L, q* u% ]' ~8 l
  420.   unlink(".\\DownLoad\\update.txt");) H! }' g7 K  \! s4 `; J
  421.   if(UpdateLocal.size()) return TRUE;3 J) G+ b, z6 U9 o5 W
  422.   else                   return FALSE;/ B; |/ I4 a1 o
  423. }
    5 X; }* l2 k! r# X7 Y9 [7 c, N

  424. + g+ X9 A/ v2 |6 c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 N: J, |' V9 y! U& b9 n, d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    / e: ?+ {- O& I9 [" {
  427. & j# P' S' A3 _. X; ]! Z$ G
  428. & p. j# I& c5 r, k' a4 e
  429. ! N% [, `  r! |* J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    * U3 p: e$ d" @/ Z* I2 l* Z: \& W
  431. {
    8 B9 M4 d3 F3 U6 Z' `" @3 y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 p4 f& K5 X) {8 K+ a( A, T% @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      i2 h3 [* g/ ^
  434.   {' f5 B4 K) x( ?
  435.     char szLanguage[50];
    ; Z. y/ r* y- b  }+ T2 {" |
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 U  w" ?' i7 a6 a9 }: {3 [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 c2 J5 C& {8 L
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + f3 ]$ Q* ^9 G8 X( n
  439.     else                                   m_iLanguage=ENGLISH;
    4 _" [, ~& Q: M2 `8 p& N7 j
  440.     char szRegister[100];$ u) q" M+ V" |8 w7 t
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
      W, W. f2 b% l' C
  442.     strRegsName=szRegister;
    9 r* c$ [/ p* y
  443.     char szPatchURL[100];" q( L) c/ p6 |& {* u' w3 b+ t
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% P  P5 o6 f# i0 a1 h  V7 R* w; X
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' d- M  _2 B2 I  H
  446.   }, G( _. C/ d% ~4 P
  447.   else
    . g& _! b2 }5 p* V6 O
  448.   {
    9 o: z' s. X1 r$ I7 M) c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 p) Y) A5 l" m! J( S' S
  450.     strRegsName=DEFAULT_REG_URL;$ g( v+ f( [8 d* W2 G* E" d
  451.   }$ O: a5 t+ c3 o
  452.   if(GetFileAttributes("hosts.ini")!=-1)2 d6 Z" T% y  Y2 M  d
  453.   {
    % J* k" e( T+ L9 B4 D+ T7 Y
  454.     char szIP[50];
    : h) p, H; M+ C1 j
  455.     char szDIR[300];3 ?9 _; B: M7 f9 O
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ k* r/ X+ i3 P7 o/ H. Z9 B
  457.     {) V+ C- [& ]  i- h- r4 R# i3 Z( Q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 s* u7 w: C! K0 y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      x, {: |) O6 x! I. X2 K
  460.       strHostName=szIP;
    / Z6 w# P5 S* Y3 o. v7 R6 `1 m
  461.       strHostPath.Format("/%s",szDIR);9 H- J' g  u. A6 s) q0 [4 k
  462.     }9 r; E* j4 j/ _
  463.     else# F" u" I1 ]7 k! l
  464.     {8 K, u8 z' u, q; K% e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' d! h5 V5 E5 o6 _- u$ W
  466.       {* ?3 {/ f( ^. `
  467.         char szLanguage[50];
    8 @, |2 Y6 p. |. J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) D5 c4 `1 k! m& @3 A7 q
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 N, Q) O1 P' Y1 e9 f  u* s( v
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ) S4 ], J0 Y8 q# l
  471.         else                                   m_iLanguage=ENGLISH;1 l/ O5 x, X+ l) w, `
  472.         char szRegister[100];
    ) W* B3 i9 Y/ W. r7 l8 f, H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " D4 Q; q5 X' W$ W
  474.         strRegsName=szRegister;8 v+ n3 @7 o/ t4 h
  475.         char szPatchURL[100];
    4 x) u0 m; l; i5 L+ L8 F
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 c4 b: u$ ^* s' \8 P8 {
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , f! i4 y% s# n% j# p7 n% Q
  478.       }
    4 X( ?* n; K( @) K# i
  479.       else; _$ D' G: _3 S9 _5 O
  480.       {1 X& Y, ~) H4 R1 Y& `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& a' Y7 |& {! x1 A! M3 d0 O! q) u) s
  482.         strRegsName=DEFAULT_REG_URL;% b2 L3 X7 l( i: J
  483.       }# h9 F! N" ?  N2 C' ~, f. K  [
  484.     }
    : @/ [+ L& K( R- j/ p3 A( G
  485.   }, m5 B; T' x( y4 _! v! j
  486.   return true;9 j) H* e* e6 d( Z3 g6 m# j3 Y( J8 J
  487. }
    * X+ ?6 W! G3 ~6 q7 v# j- o) L: D

  488. 0 x& r. [% `) W0 k6 T( W
  489. #include ".\ZLib\unzip.h"
    % w9 f( B) I% w, R' A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, u  [0 R$ ~. K: z" W& w
  491. /////////////////////////////////////////////////////////////////////////////
    ( e& u; C. X/ C" R
  492. // CRevAppApp initialization$ `; z; L# X8 [9 b$ y6 v: g

  493. + s9 x: V& \! |
  494. BOOL CRevAppApp::InitInstance()
    " D0 Y. P0 B$ o+ ^
  495. {
    6 Y, z# Y& t8 ^5 }$ A' V9 m8 }
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];6 ]3 B" L% @9 Y7 I* u4 y3 i0 k# z
  497. 3 ?) z9 w; I6 h  {" i4 [0 \+ a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 }; K1 v0 m1 M+ X$ G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ) I' t# X  [; }) K; [5 }7 F
  500.   {
    ! C7 V! v' |* q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");! ~" C: y, f4 {- P
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! _% u! {/ H2 B  j. C
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))  x* l+ ~& ~3 [! U) G, j, O
  504.     {- x- T! Y5 l% [! j! Z/ y$ c- U. C% I; Q
  505.       strcpy(szPath,szPathTarget);* K1 K6 N, k. a6 R
  506.       SetCurrentDirectory(szPath);; d' c/ u8 v' x9 W( h& P2 c5 J
  507.     }; {) i% l9 g/ E  ~* ?
  508.   }" o1 L! S! f2 \! I
  509. #ifdef _DEBUG
    4 ?; f( O. G1 Q8 Q/ S' s) o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). d: X; t, I" `8 I3 S& D2 C3 k
  511. #else$ s. T- r3 v  f8 ~! c6 f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 }, s2 T8 z8 U* `
  513. #endif8 w8 Y2 s5 @) W$ K2 Z% z
  514.   {
    3 s  m4 p" F: K0 ?3 t- E/ N1 t
  515.     char tempFileName[MAX_PATH];
    $ }: `4 M/ M3 y/ x
  516.     strcpy(tempFileName,szPathSource);
    * \( G7 i1 l. x- a: B* W
  517.     tempFileName[strlen(szPathSource)-12]=0;
    5 y2 p5 B# w) _* x2 F2 ^: j; ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    . s; |/ ~; ?( N
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 T% e4 x# |2 C$ Q3 x7 d7 K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' x5 c7 o. L0 a1 l) I$ L
  521.     return TRUE;$ q8 G, O. T# |$ @" j( G- O4 l
  522.   }
    4 F7 E  X9 k! v& B
  523.   // Nuke 0118: Delete run.exe
    ; i  W8 i% Z7 f
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  m/ g- w# N4 b5 D  x
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% E/ B) E# N) c  f- d/ t3 o
  526.   if(!ReadCfgFile("Config.ini"))
    8 F. b0 C; }% H9 S# R5 Z9 _) \
  527.   {; ]' d. ?* A, A* d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. C' g, J% ]" D2 ^" J* \2 S
  529.     return TRUE;
    & B7 t# ?  w" ]" Y- Z7 u
  530.   }% u% h! j7 ]7 E, Z
  531.   HANDLE mutex;
    ' Z% R8 y) F5 ]" ~9 U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% i7 G! O" T1 Z8 |, [
  533.   {
    " _% \0 n3 S( S+ C1 B, ~' T( F" B; N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ I  }' Y4 L7 W  i( Z% j, `
  535.     {/ h/ Y) r; m- D! l: @
  536.       CloseHandle(mutex);
    8 U" B+ R9 h. Q+ A. n& @
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ; \8 u+ t2 i6 z
  538.       return TRUE;
    6 ]. X6 K, |" \2 i
  539.     }
    2 C! r! c" F8 }- Y. e' M1 j1 O
  540.   }  
    % c% u- }. M2 O1 z2 ?: U
  541.   CloseHandle(mutex);" Y: k3 [  R+ O" j7 ^$ T5 Y
  542. 7 u; D. F: @$ d8 P8 P+ k0 m' O% ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% K1 p3 E9 V% r; Y0 s+ k4 _
  544. ; \- e/ i# T$ f: k
  545.         AfxEnableControlContainer();
    ' Z9 r6 v+ d& P' G

  546. + |( V0 f$ P5 O' r- u4 x3 g
  547.   bCanUpdate=FALSE;
    5 \: N# `0 H6 R3 z- M
  548.   dwStartUpSteps=1;: D' J4 }6 X! T1 C
  549.   dwProgramState=AP_NOTHING;3 N) g) Y9 I4 e+ b
  550. 2 a' ?* t+ j0 d' F! e( I% h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);$ }, W& E6 \( ^
  552. 4 X- m: t* y7 l1 l# v  p
  553.         // Standard initialization
    , Z4 l. e  |- R' d
  554.         // If you are not using these features and wish to reduce the size& a3 f% w0 _& P3 G: e
  555.         //  of your final executable, you should remove from the following# q- `# A% A/ z
  556.         //  the specific initialization routines you do not need.7 s2 Y* T% _2 T( U% a" W# K
  557. & C, X9 B5 \6 U0 Q9 ^
  558. #ifdef _AFXDLL3 G! `( f7 U4 r/ h6 }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ! f/ R0 _) J. O  q6 V, `
  560. #else
    7 Q6 d  |  C/ P0 T4 \8 f$ W
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    7 F  @8 m. v* ^+ x  L
  562. #endif
    6 {4 @9 y3 q! I

  563.   c5 m" K/ A' Z0 b9 `9 `
  564.   dlg=new CRevAppDlg;
    / E( t" u! [- P
  565.   dlg->Create(IDD_REVAPP_DIALOG);# j! R0 I- K1 t. P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; W( q& N- ^. l
  567.   m_pMainWnd=dlg;! f5 u0 ^8 M3 R4 m6 M  Z: L/ {0 Z
  568. ( C, {' c- @" |! X- W
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ( w: g( O  x- u/ v) Q4 y3 u3 |

  570. ! ]$ S1 m4 l4 h! l' j, p* @
  571. //  GdiplusStartupInput gdiplusStartupInput;. B! d; T  ~; D" k% j" G+ y
  572. //  ULONG_PTR gdiplusToken;
    * b  L: K+ H/ F7 _+ j% a
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; O/ n; u$ X, Y. q8 Y, R' `
  574.   G% q/ y. r' _, R
  575. //        CRevAppDlg dlg;2 v, F; e7 w0 _; I
  576. //        int nResponse = dlg.DoModal();7 U) w/ d8 B/ n! U, c- V$ d/ L
  577. //        if (nResponse == IDOK)
    4 ~( L1 W3 [" i
  578. //        {8 l$ ]3 E  m0 ]& p+ G3 G5 r
  579. //                // TODO: Place code here to handle when the dialog is. l& [6 N4 H6 D0 l) s: @
  580. //                //  dismissed with OK( r' Y, e. @: F6 b
  581. //        }- T, \: ^# I4 S! G5 ^
  582. //        else if (nResponse == IDCANCEL)
    # |( H8 |9 _$ b$ z9 g2 D$ T
  583. //        {
    * e* O, w. l# V3 M
  584. //                // TODO: Place code here to handle when the dialog is5 k0 b9 v6 O, N
  585. //                //  dismissed with Cancel# f5 W& x% V$ w$ v( ~1 h; S
  586. //        }7 v( I/ N  j7 j6 ~! Y
  587. / C0 ^( x, u/ z/ N( M
  588.         // Since the dialog has been closed, return FALSE so that we exit the& U( P4 T& A( G& g3 l' G
  589.         //  application, rather than start the application's message pump.8 m. ^5 B; P- a; K
  590.         return TRUE;  C( W9 B7 w/ O3 q
  591. }8 M; Y, t  l% i- j# E! r) j
  592. - ~- }# O' g& y1 L0 A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ J& Z% A3 v6 Q. z( ^, x
  594. {
    5 e7 Z0 e8 E/ n2 V& l
  595.   int i;
    $ f6 R% \5 Y# Z2 G4 O* b  R$ d
  596.   char *szRet;7 D! o9 L; {! b( ]2 H9 j2 h
  597. " x. J) _9 t* S; p8 A
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    0 n. f  t( [7 w$ U
  599.   if(sztoken)% e0 _  {! R1 n( [' ~* b' o
  600.   {
    0 p' n9 o9 \" [$ s0 N5 x% E
  601.     szRet=&sztoken[itoken];) z( u7 d9 \" l% w
  602.     while(sztoken[itoken])
    . d9 M2 w! {+ j& C/ G" `( e
  603.     {& Z( D$ t6 y. {& q+ m
  604.       for(i=0;i<(int)strlen(token);i++)# q% v; c; a: |' f2 I( m+ ?
  605.       {
    % x/ b( |# u# c/ z  `7 W
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), i9 g' i  F! F+ j) Z
  607.         {. j: I8 X. t! ~: o# ?- j( E4 S2 e
  608.           sztoken[itoken++]=0;: \9 |; ^9 @5 Z
  609.           sztoken[itoken++]=0;
    4 l+ f5 F* }8 _* b, P/ f
  610.           return szRet;
    7 G: }2 ]) ~9 Y4 o
  611.         }
    % a& U1 f, o% H6 Y
  612.       }
    * m% |6 z4 Q- q. s/ c' _& A
  613.       itoken++;8 j7 R; D7 M7 j# N" h
  614.     }
    + Y' h! a* q4 i/ M  F# i( F
  615.   }
    # _$ J) c" z  h2 n9 F  a
  616.   return NULL;# _% i/ p! d- ^/ u  s
  617. }" i- F5 G) O5 D1 R
  618.   z$ ]9 Y# z. g6 d9 ?" `* a
  619. void ProcessProc(long Total,long Current)
    : Y( [! e2 ^2 n* q: Y+ T
  620. {1 M8 k" y: w, R( Y
  621.         MSG msg;
    ) ~4 |: x! c* f/ n& A) u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);$ e! |) R. b1 x' a& `! g5 p2 y: ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));; O8 F0 H7 J' F9 x7 \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' F8 A0 p: p3 ~2 w7 G' I4 ?
  625.         {
    % W' M! v1 L- j% q
  626.                 if(!GetMessage(&msg,NULL,0,0))% q8 p4 V" L6 {" ]& c! P* k
  627.                 {
    $ X) A# w, w+ c) a% j
  628.                         return;3 @# e/ G4 y! i& `) u5 k
  629.                 }: z4 A. i" L. [3 J# G, u2 D
  630.                 TranslateMessage(&msg);8 n! m# I8 u8 a; e0 w0 r5 {
  631.                 DispatchMessage(&msg);' M. Q5 k0 ]- l' V6 S/ S& V* }* ?
  632.         }        + i  Q4 b0 b( u# `3 V  F
  633. }5 m2 y0 S4 s/ O6 J2 o

  634. 6 z% s/ Q; ?. S* A* P' m# f: s: P' \
  635. BOOL bFirstChar=TRUE;
    - e. f* P/ H1 C: m2 G9 [

  636. $ E$ w+ _3 p: }) ]0 ?% A
  637. BOOL CRevAppApp::OnIdle(LONG lCount)7 f: X0 W/ q  M1 v" M/ d1 p
  638. {. S6 f! e0 }0 g$ A/ M
  639.         // TODO: Add your specialized code here and/or call the base class
    ! g5 s- s; |0 D* `: d) ]  G, }3 p
  640.   switch(dwProgramState)/ Q0 {( F: \: l% z  M+ J2 A
  641.   {
    ! I7 e5 t) v  l5 v+ \
  642.   case AP_NOTHING:
    + [. K2 A: S1 l. E
  643.     switch(dwStartUpSteps)
    3 q, S) j+ k+ c) I0 x& Y. V, ]
  644.     {
    0 y9 ]5 j# r; y  v7 R* e2 s' t$ a
  645.     case 1:) g  A8 X- p6 s
  646.       {. E; P$ {& [: E3 u" p
  647.         int i;6 f5 L! I4 H# U  L; L
  648.         CDC *pCDC=dlg->GetDC();
    ' n. r/ P5 Y0 ^8 D. n
  649.         HDC hdcwnd=pCDC->m_hDC;
    ; g- t* o' j% p8 }8 k- V
  650. //        Graphics graphics(hdcwnd);
    0 [3 a* Q% [4 P% r
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    3 h! r7 d/ o. Y, x/ p" b4 |- y
  652. //        INT iWidth=bitmap.GetWidth();+ x4 j, t1 B7 u5 S4 e8 }1 c- g
  653. //        INT iHeight=bitmap.GetHeight();
    + h) @# }$ q3 b
  654. //        Color color,colorTemp;# _7 C6 C, U# ^) N& |' W3 G1 c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)% U& e3 K9 I0 B9 s- A
  656. //        {
    6 J1 h+ o2 a+ ]1 N( ?
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    7 x5 n" r5 p7 C! v4 Y0 J: U
  658. //          {
    7 a, Z1 s6 h# f: ^2 Y+ B
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 X7 f) @! B! D
  660. //            colorTemp.SetValue(color.MakeARGB(0 a( P% ]! H9 S; e0 N" h, `( a
  661. //              (BYTE)(255*iColumn/iWidth),: h; `, L4 J! K' \
  662. //              color.GetRed(),
    ' \1 z/ w: u9 @/ Q! o* {* i
  663. //              color.GetGreen(),( b7 A" {2 B, z9 H
  664. //              color.GetBlue()));7 [, |0 ^- k/ G9 g! I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    1 Z) x8 f+ Q& H
  666. //          }/ x: k$ U# d& K8 D+ p  p
  667. //        }# `0 q9 X3 Y9 u! a' |2 M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    2 e4 H" P) q( z4 s" H1 m. X6 K: C! \
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# C4 p) m- p+ P$ N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 r! Q6 x; ~( v6 t# l
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 J+ n: U7 I, b" O" R
  672.         for(i=0;i<240;i+=8)0 g7 k# v8 C! R9 y# a# D
  673.         {
    0 p% @* K. {% i1 A8 u# i' {5 _& s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);( g" A8 u) l: p
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) A2 Q. L6 g7 X# f& E1 ?! ^" Q
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . S! @0 Y8 Y( ^. y4 A- Z1 j
  677.           Sleep(33);
    ) n) E7 {$ p. t
  678.         }
    ; N6 {2 x1 ~: [
  679.         Sleep(1000);$ A( B+ x. k9 U8 _
  680.         for(i=240;i>0;i-=8)4 c7 c3 |  L+ c6 U6 C1 o
  681.         {* q- b5 B' _* I+ j3 Y& W) p
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , C- s+ |2 {9 A- q9 k, w: \6 z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! q% D; z) ^$ G% k! b
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + G+ _5 ]7 W  T4 a$ b0 b$ U* ^. n9 x
  685.           Sleep(33);( w$ [# L& C9 C! d
  686.         }1 M6 t* Z  X2 [- u9 ~" y+ Z
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);* a* b7 m: t8 v6 K- ]. Q
  688.         dlg->ReleaseDC(pCDC);
    ( m( X) n2 m5 |' a
  689.         DeleteDC(hdctar);
    3 G  R* `1 o6 B9 N. M! B
  690.         DeleteDC(hdcsrc);! T8 c6 b. g- A! W
  691.         DeleteDC(hdcorg);
    6 |0 @( C1 n; j
  692.       }
    , Q" l% M, ^2 q3 u, X: O; [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    , I1 p! O& M. A3 v2 J  J7 F
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");! K5 F* G$ V9 @
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # a" w# A6 V1 Y! L' G, R7 d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 C9 u1 P7 s: x$ d- H
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% X  S0 e3 K0 s# x9 u4 C- H; p
  698.       if(!Dn.Connected())
    " r% W: q( J- j" Z, `5 q
  699.       {; y. ~; ~8 S$ v" z/ r
  700.         dwTotalFiles=1;1 ^# C7 r' j0 ?) V/ n" O
  701.         dwDownLoaded=0;- A* i- x' A6 W( D' b
  702.         bSilentStep=TRUE;
    $ Q) b# Z- ]* B, ?6 w
  703.         bCompressed=FALSE;
    8 {7 M0 G( W9 S7 A% ~
  704.         strExtLocal.Empty();. U% d( y+ Q$ z' f8 q% x
  705.         strFullName="readme.txt";
    3 _; [6 b! x) {* I0 T- c: b
  706.         dwProgramState=AP_CONNECT;
    : S) u2 W0 `6 Y* X# w$ M( O. Z/ G
  707.       }. x) Z4 V$ [! d* F4 ]/ c  D' r& F$ e
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 ?5 x7 r/ k8 l; g2 K! ~
  709.       dwStartUpSteps=2;
    , z) F0 K$ T# u8 X7 v7 w
  710.       break;
    ) O( X+ a5 v; R$ _5 n
  711.     case 2:# R0 \4 k0 z  ?2 J
  712.       {+ N" n) g% d: `
  713.         int iEOF;3 p2 u, m& n% n' m
  714.         FILE *fp;7 ]: |- T7 W- L! D% k3 t
  715.         char szString[512];
    & c( T+ |& ~/ {1 K
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ; l* u3 ?) Z2 a/ B  G# @1 g
  717.         if(fp)
    # {  s& K- T* r* x  s* \! `& a. U
  718.         {' i) y6 z4 J" g3 {1 ^# n
  719.           do" N5 z* I6 c  T* O
  720.           {
    . w. ?, K" j  T. {1 h" I$ ]
  721.             iEOF=fscanf(fp,"%s",szString);
    8 C& U6 _! t& H  r4 l
  722.             if(strlen(szString))
    7 b- f5 F* d" Q+ a% c. d4 i0 g
  723.             {
    $ N' @% I9 n2 h% K4 B) S0 q8 y3 g9 @1 F
  724.               if(bFirstChar)" S# ~& C* E; x& e
  725.               {
    ! l- v- R5 W5 o9 p, U/ w) w# j+ f- r
  726.                 bFirstChar=FALSE;
    8 A2 p" C& f% m6 g& t  p2 Y
  727.                 bConnectIsBig5=FALSE;4 b$ v- Z* r' Q# i# M; a
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ) }9 ^; }5 @+ [$ b8 b1 Y
  729.               }
    8 o; ]0 }0 r$ E! o) e
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));, I. w0 v3 T0 n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ' g; L& S* Y4 {/ `
  732.               dlg->m_ListText.AddString(szString);0 S' b: Y0 G; T; S, E
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * u4 ?, h* Y+ n: Y4 j1 s
  734.               *szString=0;) n+ L4 R9 R* Z3 ]+ u# H/ L" ~4 l: s" q
  735.             }
    " }6 g3 H6 Q$ p2 S: p# w
  736.           } while(iEOF!=EOF);
    ; l' K7 g  `# T8 e2 s4 z7 Y
  737.           fclose(fp);
    % g+ ?; S- J0 L9 Z0 u4 P
  738.           unlink(".\\DownLoad\\readme.txt");
    2 z: R. M1 g4 N0 e
  739.           dwStartUpSteps=3;
    # V. h! Q+ B) Y; j
  740.         }1 A$ J2 k7 A- D  c7 }$ k1 z
  741.       }
    ( R, v5 r1 \7 m5 r1 J
  742.       break;
    3 n% W: H1 F4 M3 \" S: e! U
  743.     case 3:
    $ G# b5 d; h' S8 {6 O: |+ S! j+ l
  744.       if(!Dn.Connected())
    - r. Q: C3 D# R
  745.       {
    1 U" u4 |% U: o7 n0 V. y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    0 f* X1 ~- S1 v4 b2 A$ `
  747.         dwTotalFiles=1;
    : m  z! v1 f9 o
  748.         dwDownLoaded=0;& x  i% ~7 B1 d- E& f: I
  749.         bSilentStep=TRUE;( G+ Z2 n9 N, o; ^7 }4 O, L! Q
  750.         bCompressed=FALSE;
    $ A1 J0 Z$ r5 l" s, n2 X; {. v5 k, m
  751.         strExtLocal.Empty();: ~9 W$ a' {9 _% ~  l
  752.         strFullName="checkversion.txt";
    2 @, f: N2 [# U8 A% ]- i- X/ M- q
  753.         dwProgramState=AP_CONNECT;
    # y4 N; p6 y9 v( p; W
  754.       }% i5 `, C0 A) e. X) F
  755.       dwStartUpSteps=4;3 ?2 r$ K9 X$ N
  756.       break;
    " w1 U' J" [7 h9 R- {2 \
  757.     case 4:
    / j$ ]3 k* q& f& d- F0 p
  758.       {
    3 T/ r$ y, u5 J- [1 @! x" p: e
  759.         FILE *fp;
    5 P- U2 h9 E, C! B2 H
  760.         char szString1[128];& e1 k- x. r9 |- q; L: M
  761.         char szString2[128];
    9 _# W  n. X" ]  J" o0 ~* v& I7 D
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . e( ~$ n2 {4 D' h0 D2 _3 ?" e+ P
  763.         if(fp)
    1 Y- b% H2 _. m& `, F
  764.         {4 V% R4 T  ^  {/ }. I" I% \  I
  765.           fscanf(fp,"%s",szString1);5 w, R" Z6 U5 k0 J
  766.           fclose(fp);
    7 `+ t( D9 }7 B8 D. l
  767.           fCheckVersion=atof(szString1);6 ^3 s" d* Q/ t% w
  768.           fp=fopen(".\\checkversion.dat","r");
    3 S: |2 B+ j% P
  769.           if(fp)
    1 B  T, B9 _' o; q+ z
  770.           {
    , _0 y1 W& E8 b/ N, s
  771.             fscanf(fp,"%s",szString2);
    % C# }; U. L  x
  772.             fclose(fp);0 I. f6 ~( f8 _/ }) [
  773.             if(atof(szString1)!=atof(szString2))
    ! Q7 B8 D; [. B$ O
  774.             {! @, g4 Z, z6 @& d! x: S0 q, o
  775.               if(!Dn.Connected())
    - Z4 g' b  v) `' V7 \$ }
  776.               {8 ~* n" ]1 a) o
  777.                 bFirstUpdate=TRUE;0 P# I9 i. ^' q2 o/ S% I
  778.                 dwTotalFiles=1;
    , M5 s& B/ C( S7 j) w% f3 \
  779.                 dwDownLoaded=0;. }1 G+ u, `  U1 E/ t) f
  780.                 bSilentStep=FALSE;- ?  s( D' R* |" \0 T' _
  781.                 bCompressed=TRUE;; D* e$ y, g' H( G( @$ J
  782.                 strExtLocal=".\\DownLoad\";! ?1 S) o5 m1 N- h( D) w
  783.                 strFullName="update.txt";
    3 z. o6 t0 o: W! T2 F5 c
  784.                 dwProgramState=AP_CONNECT;4 [$ O: w# j. L% V3 x5 B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( \9 \- z/ [( \
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");- n6 \0 y" H* u( Z4 Z  A
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 D. }0 V  S; D# K; N

  788. 3 }. H2 D/ E  \2 X! z. {+ E  L+ \
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- J8 \' G& E5 A, ^6 T
  790.                 unlink(".\\DownLoad\\checkversion.txt");7 h2 V5 p- O& Q1 r7 U: g0 D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1). x9 v: P' v" [6 _: }1 A' S* ?2 C
  792.                 {2 v* H% ~0 t5 i' V4 |2 h
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");  v: a& v( L( H5 |' F/ }+ i5 L  x
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( Q* z% t3 k( A, R3 Y. X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");" l$ Q: g  Y: n! C$ q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # q# C, w) v! e+ u$ U
  797. & n& I, ~8 i8 [7 s
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ a) h0 p* x1 h& B0 p6 }/ z
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    9 z2 v/ `& Z9 S
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");/ u) n5 L& h$ g! i5 d
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - u' b6 c" o% C0 @0 s" z. e
  802.                 }
    , k, V# |8 E5 u1 I1 W8 d! P
  803.                 dwStartUpSteps=5;
    ) b+ H$ a) a+ V. s9 {& A
  804.               }
    2 Y2 |6 q+ k4 z6 {
  805.             }
    ; }9 b3 x  `  Q9 {/ d: g+ v4 n
  806.             else
    , q* ?; _' V  n: c% H
  807.             {6 X& x# T2 h* A* P, F4 M. ]% M
  808.               unlink(".\\DownLoad\\checkversion.txt");$ V3 y( F$ ]9 R; @9 K  u, X
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% h( _- r. w- F, h2 x
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    1 O! G* |$ R3 B% ?! o
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( {, H9 O( E. B$ ?! d, `& ^2 w

  812. 6 A# S1 c' N9 O( Z. @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 [  G' C; o3 R
  814.               dwStartUpSteps=99;
      \# H, N. c& u' A7 n
  815.               bFinishUpdated=TRUE;
    " U) B& Z' N& k
  816.               bCanUpdate=TRUE;
    3 m. ?) `% t. g/ q9 A3 a8 ~) c
  817.             }
    & n% B6 K! L+ d# [, o7 v
  818.           }2 G/ I5 \5 C2 I. ?3 X
  819.           else. p# H+ W- a& r* e0 Z: n, p) r
  820.           {
    ( J9 [) N# A. A+ z4 o/ C5 F
  821.             if(!Dn.Connected())
    ' `5 J) E' q* M/ ~" c1 H2 r3 a; Y: h
  822.             {
    ! V& Y3 h6 I0 X/ v, X. w
  823.               bFirstUpdate=TRUE;: c, R  y! [* Q) V5 l+ Y8 y
  824.               dwTotalFiles=1;
    , B1 f/ P  I0 E' i0 V
  825.               dwDownLoaded=0;
    % A9 {9 V) K5 I9 G& g
  826.               bSilentStep=FALSE;4 h( s, X) U1 ?
  827.               bCompressed=TRUE;8 D* {  n6 b( T
  828.               strExtLocal=".\\DownLoad\";
    7 b( Y/ E8 T0 g
  829.               strFullName="update.txt";
    1 H2 R: h8 b! g& d, C/ T7 `
  830.               dwProgramState=AP_CONNECT;
    3 ], r  N: Z3 S2 ?& J0 l- h1 N
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 {. ~9 _" {$ V3 _$ X" Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");) B, [. u# f1 _' ~$ x
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");- t; X. O: a" B7 o" W: \
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + V& F( T; R2 @6 Q
  835.               unlink(".\\DownLoad\\checkversion.txt");* ^* l$ [% C' T5 W
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 Z$ L' o% Y* j. @
  837.               {: H0 S+ V! z0 h- h. `) \( D0 D
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");% ~4 e4 [( k' _# Z# f
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 y0 W0 E1 P" e" {# F3 X/ r9 S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");& m9 k) F+ ^. J  m- h
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 B/ K9 o, E/ }2 U/ A$ D9 b
  842.                
    ! }7 u9 Q- o& _9 H3 ^5 {, \8 z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ i9 N: Z0 t% T8 x- U% S8 t
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * o* n0 u& T" `. H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");$ i- P# v' }: L# ^7 h: b
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( c- v# p' \0 B% N# M4 Z
  847.               }
    1 ]+ j1 R' g5 ]( }
  848.               dwStartUpSteps=5;& S$ z- @" C, N: ]6 X. T4 B
  849.             }
    * f  [% ?6 i' W$ z, k
  850.           }
    ( N, x; E3 U6 l  J0 K
  851.         }
    , A5 Y6 m# s9 y
  852.         else0 a# m1 O3 ]2 |' j/ _
  853.         {
    6 c" u  t* {$ ?, E7 _
  854.           dwStartUpSteps=3;. ^) k8 U) d" `- J' `: a
  855.         }4 [0 o8 p4 T7 P; @( v1 Z5 [
  856.       }* `- ^7 f! Z! N2 W, \- j6 h7 n) L
  857.       break;* i7 b( e# F! u+ ?0 m
  858.     case 5:4 E' y9 n/ [# M8 a
  859.       {3 I4 E& V# D5 B! ^+ [2 B
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( B( {' B8 [( V2 y7 w
  861.         {9 c: @5 ^& d5 S- b4 t  d
  862.           int opt_overwrite=1;
    3 M' K4 ~2 F2 \# }7 D1 \1 c. J
  863.           int opt_do_extract_withoutpath=0;
    " z0 A. M7 T) ^- R
  864.           unzFile uf=NULL;* y8 B, Y* m! l1 t% b

  865. : Y( G4 T& }  z9 i& U
  866.           uf=unzOpen("Wsa.zip");
    ; o: L( T7 u, E3 I& J4 r" J
  867.           if(uf)
    2 q8 n% D7 M- n5 `* c
  868.           {
    ( M( A5 T8 |4 t& Y) ?
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);7 ~( h' ~1 t/ N: [5 D8 P
  870.             unzClose(uf);3 @" @' `  u* ], n4 e
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / f. x0 ^1 {: z+ k9 w7 U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    0 _1 @) e: V& x( ]: |9 Z
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    : A& i( f2 {1 h# A
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 o, o7 J4 v8 `1 A/ W# S& W
  875.           }
    ! n- W2 g7 H9 N) G1 Z: ?7 ]
  876.           DeleteFile("Wsa.zip" );7 s/ z6 P! }3 k' M5 U
  877.         }
    9 |* y- v, S0 K: p

  878.   i6 }7 z* D9 M. d7 u0 v
  879.         if(CheckLocalVersion())- B. {4 I6 e: a& w7 r
  880.         {
      G( |2 D2 N3 D2 V
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
      V' d4 t8 N4 N- u% B4 H8 C
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");- N+ u! d: c5 @1 x
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");  @( ]3 O+ z( X* k1 \5 A
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 N( N4 L0 R) k9 O  X
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);( h6 S  o/ w. }' M2 ~; P
  886.           dwStartUpSteps=99;% d/ F; x, N* n. I" k  H+ G
  887.         }6 c; C" N2 l4 ]7 h: I$ |; x
  888.         else
    : t0 l' X6 Z4 X2 r4 e8 M( @5 ~. ~: D! a
  889.         {
    . i: [' E" p. m' _+ k
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" F* A9 q; V1 Z3 I  b
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ x7 @$ t8 f& h% `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' i0 s" i$ U1 f

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

% y% \  D4 }$ b7 w% t% r: F

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-31 16:34

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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