CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
+ A3 V" F* a1 Y2 \
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 D" d7 y4 O; E  `; v1 \7 v# i
  2. //
    + A; T! ]) E' [, p  k. K* F
  3. / U+ Q# Q% x) B1 f: ^. Y* H
  4. #include "stdafx.h"7 a: I+ Z) q/ I' @- i# R
  5. ! M+ q7 L& q! l) S- G
  6. //#define UNICODE
    3 p; W: A8 r2 l2 G3 E3 W
  7. //#include <gdiplus.h>$ z; {; l3 F$ H7 |
  8. //using namespace Gdiplus;) H) g1 e, j9 D$ L+ a
  9. 7 O- }/ b+ {0 i' H
  10. #include "RevApp.h"
      G" b" ~4 s5 w, h1 O
  11. #include "RevAppDlg.h"6 F8 i, `( g2 o1 d8 h

  12. 9 W; S+ \, \) `8 v
  13. #pragma warning(disable:4786); X$ ^- `9 M( a) F; }
  14. #include <map>
    ; I- ~0 j- d7 v" s" C8 ]1 I
  15. #include <list>
    / \' M) K4 v2 l5 }) S  K
  16. #include <direct.h>1 K7 O' [" _* s5 ?9 h8 ^, ?4 F

  17. 3 m! ~3 p, v+ j& S! d  b
  18. #ifdef _DEBUG
    . M/ H2 c0 Q& e
  19. #define new DEBUG_NEW
    . F: X$ m( L4 K$ d- r" o
  20. #undef THIS_FILE- J& F3 ]8 i: R9 n
  21. static char THIS_FILE[] = __FILE__;7 ?) B, k4 V! _$ c! E: X
  22. #endif  N! ~+ U  X  `$ ~# H$ ?0 b
  23. #include "SkinResDef.h". }/ U" v) b6 t
  24. #include "ChangeBG.h"4 |4 h. F3 ?8 K6 ?8 ]7 X1 b
  25. #include "AFXINET.H", l' M' \4 K% u! A# m
  26. & `- X! N' G+ m6 n
  27. #define TRADITIONAL_CHINESE 0
    - @8 Y8 s4 }% T$ q
  28. #define SIMPLIFY_CHINESE 1
    # q/ K! R: O: ?7 g
  29. #define ENGLISH 2. Z, K0 y' K! w1 D
  30. int m_iLanguage = ENGLISH;  d9 ~3 s. q6 z  M, r1 G* e  T
  31. /////////////////////////////////////////////////////////////////////////////
    $ N0 h0 ^% d- l) _5 ~( h& ?
  32. // CRevAppApp
    + ^$ f; C7 c7 o- s
  33. " j0 H6 N2 r4 v7 H8 \2 h- y9 |2 c
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)% C8 O  f" W1 G
  35.         //{{AFX_MSG_MAP(CRevAppApp)0 P$ C& n; R0 m/ S' g2 {
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      P5 Z- Z& ~0 r& L, h* M
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 Y& \0 Z8 r6 G
  38.         //}}AFX_MSG' [6 u. F7 g$ p1 B9 w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp). T, {5 U' O0 q+ ~: k3 Z4 y9 w
  40. END_MESSAGE_MAP()
    9 }2 f$ }- \( q+ B  q0 F; D

  41. 8 I; U0 ]6 A7 S7 S' ~2 S
  42. ////////////////////////////////////////////////////////////////////////////// ^4 l! J7 C; H* _$ u
  43. // CRevAppApp construction
    - Q9 [) ^" |! @8 k# P2 p
  44. . ?/ f7 V8 @2 c
  45. CRevAppApp::CRevAppApp()
    ( O) @+ |: d% d0 }
  46. {+ ^2 D! T4 e1 ?* q7 F
  47.         // TODO: add construction code here,  j: Q$ B0 A3 l* R
  48.         // Place all significant initialization in InitInstance
    : d' I0 V- d' @% D5 B5 G1 G1 |
  49.   bDisplayIsBig5=FALSE;
    & W2 u% M' x7 h' @, \. U; {8 B
  50.   bRestartUpdater=FALSE;9 {% J" ?& e1 ^. V, F* ]3 U9 e
  51.   bFinishUpdated=FALSE;
    4 X, j1 v9 I" h8 W. V+ x
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;: C; z! t) O; y7 y( ^( j
  53.   InitChangeDataBig52GBKS();
    % c, ^% v6 ]- k
  54.   InitChangeDataGBKS2Big5();
    + B' z- R1 W' N# C
  55.         /// i2 R: h& o( C( k& Z& b% l
  56.         bClickRunExe = FALSE;' }, R7 ]0 f  _
  57.         //
    8 r. f9 o+ Q" e
  58. }% N- y7 a" E  d0 D

  59. 4 _9 j( d! T& }/ p
  60. CRevAppApp::~CRevAppApp()3 B  G8 E1 v- `$ _1 G% q" G
  61. {" J! ]/ j8 W) K% J
  62.         // TODO: add construction code here,
    ( f  u8 `/ J, L
  63.         // Place all significant initialization in InitInstance* [( G" ], S, E' N2 T# \. o1 x1 O( x; _1 ^
  64.   EndChangeData();
    $ {% |. R, @9 ^) w, J8 V* c
  65. }
    0 n% A+ b' b9 z! t

  66. # ^+ M  ]5 H% P7 P4 y
  67. /////////////////////////////////////////////////////////////////////////////5 s( }% }* g# n: |; A! ~
  68. // The one and only CRevAppApp object
    ' H- _+ N6 ]2 Z/ _) q  V

  69. 6 `. o5 Y  H: h" y( w
  70. CRevAppApp theApp;# g& z; b* ?; u2 b  R6 f0 ^) c2 K

  71. + |: @( }) [4 q7 a+ O+ ?
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ( O$ E+ s$ j) y/ L) I2 i- z; T( l
  73. {
    8 w# @( i; d+ }/ q9 L3 b
  74.   int iEOF=0;/ \3 [' s% F# }' L0 m1 M
  75.   char szTempName[MAX_PATH];) }. J# @9 X# m
  76.   *szFileName=0;0 A* o5 [/ X- X0 w3 _* b
  77.   iEOF=fscanf(fp,"%s",szTempName);
    2 r- k9 f6 U6 A6 j9 @$ v6 S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 Y9 ]/ k+ L4 a7 {. a9 {
  79.   {
    , a1 a3 q9 J2 m  }! \
  80.     strcpy(szFileName,&szTempName[1]);& z9 T; H) _# p" Z5 K2 ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)8 X# c; M7 y1 S# ~
  82.     {( y6 r$ V  \7 s; c' n* S+ E$ G
  83.       iEOF=fscanf(fp,"%s",szTempName);
    * l! D7 R1 B$ P, n. u% w
  84.       strcat(szFileName," ");
    $ j0 q: ?6 ^' h0 N8 ~
  85.       strcat(szFileName,szTempName);& i9 n. X7 l. k! I3 d& F% g$ h7 u
  86.     }! U0 f! g; a2 F- [: g
  87.     if(strlen(szFileName)>=1)
    : ~5 V7 {/ c! _0 P& {: a
  88.     {
    / j( H. ^2 n5 d, f
  89.       szFileName[strlen(szFileName)-1]=0;
    + ]8 N+ a" v; Z  r- q
  90.     }+ [+ O" ?  Z/ g1 S5 ]( g# @+ [
  91.   }
    : |, c" {4 x- Z4 I2 i
  92.   return szFileName;* S/ Y4 q' h, O: |; g
  93. }  \0 V) u  B3 x3 L

  94. 3 V# H: u7 g" B% n" G* O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # M$ A! {2 q6 N
  96. {3 Y; _, w7 ~' l0 P) \
  97.   FILE *fp;
    0 e+ {7 p( _9 p  }$ H* q
  98.   char *key=NULL;
    : h, l1 _: q: }* a3 B; A( V/ O, _
  99.   char version[MAX_PATH];' M7 @- B4 ^+ v: r. t8 ]
  100.   LPUPDATEFILE file,olds;
    ( z9 Q- A3 o3 r2 ?' e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    # R9 ^* k0 g8 ^0 ^9 c

  102. . V3 G: G, C: ?- G; e
  103.   UpdateList.clear();
    ' \& }: F1 t9 j, z/ n
  104.   UpdateFile.clear();
      C5 o! o) G7 M0 w: r
  105.   if(GetFileAttributes(filename)==-1) return false;% J% i0 v! C7 U' o# x
  106.   if(!(fp=fopen(filename,"r"))) return false;
    8 @- P; v' {# G& y& C
  107.   fscanf(fp,"%s",version);/ @( r! o- P6 h+ |
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) M5 |/ w4 R5 K: ^1 i. L+ k0 F
  109.   while(fscanf(fp,"%s",version)!=EOF)! M" P+ ?. K( M3 _
  110.   {# z- P: C0 y6 b6 D* W
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! \; |, a! Q2 f3 |$ [
  112.     fscanf(fp,"%s",file->path);
    7 Q! g$ W4 D1 g
  113.     ReadFileNames(fp,file->file);
    ' G' l4 c' _+ C2 _/ `! t. L
  114.     strcpy(file->full,".");3 p2 B& e$ o% l( R/ v1 g; g
  115.     strcat(file->full,file->path);
    . l5 j/ |# x* m" j. z% {* x
  116.     strcat(file->full,file->file);
    & r: Y% Y; O' |( x3 N4 E9 v+ G
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; F$ n) _! H- G% g% [, Z' _
  118.     {
    ( H9 I- o" [* @
  119.       file->vers=(float)atof(version);! x( {3 F7 D! A7 _* _/ R
  120.       UpdateList.push_back(file->full);. b1 `6 G; o) U: \$ y( F: e- [
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));) D* E0 P5 E) ~5 {0 v) ~
  122.     }
    " m; w6 h$ f, a* w9 Y4 R6 F8 n
  123.     else: c0 a$ [% z, P- k+ R
  124.     {
    % p5 G4 L& X+ p6 L2 D3 G0 e
  125.       olds=(*p).second;
    * c, c# H( W6 i, }& z  {6 B' p2 w3 P
  126.       if(olds->vers<(float)atof(version))
    " P: Y! ^* g, ^# @; A/ n; l4 v, p
  127.       {- e* r8 t! N% e: v# G0 I9 @
  128.         olds->vers=(float)atof(version);
    / u; p7 m% O- h: {; j* z/ K
  129.       }
    $ i+ a6 G- m- W- ?* L& V" M
  130.       free(file);! P" h- h) L) m0 n" l
  131.     }
    6 R4 V& P/ n8 g) b6 C
  132.   }
    4 X# q+ Y5 U4 f
  133.   fclose(fp);( T9 a/ s8 d( N( ^
  134.   return true;5 S; x2 B7 h5 |" a- p5 b9 Y+ k
  135. }4 U1 O+ V& Q1 I' |6 Z# g. t
  136. % L9 k& \: A6 z' h3 w! ?: F$ T, v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    * L( r" x/ N/ U( P) }6 i
  138. {/ o* a  p' ^. @; n6 J
  139.   TCHAR  szFull[MAX_PATH];
    . f* L0 l* G; b" [
  140.   TCHAR *token,*inter;3 L5 p; \% M% A, U0 |; C
  141.   *szPath=0;+ e' W, q- l& H" S' M0 G6 K' \3 |5 Z
  142.   strcpy(szFull,szFullPath);
    - c9 S, y" t) y; T' _, E; F
  143.   token=strtok(szFull,"\\/");
    8 E  e5 |( A! B3 E9 N4 z; D
  144.   inter=token;
    ; X; b  m: J  t* Q% c) r/ t
  145.   while(token=strtok(NULL,"\\/"))8 y6 j  g& y9 d" c
  146.   {
    ; O3 E% d& U. t2 u8 i# K& V, n
  147.     strcat(szPath,inter);8 g. ?+ k; p' |2 y: Z9 ]
  148.     strcat(szPath,"\");
    ' j! e" z' u& H. e. t' X$ g
  149.     inter=token;
    , b$ o2 l/ V8 V8 M
  150.   }
    * H8 f* }5 X- m+ f% K* i4 j$ a
  151.   return strlen(szPath);
    / j9 M1 G& _0 d0 g& b7 r; B
  152. }
    # v. B+ R: S9 h5 m

  153. 7 ?! c) g$ \2 @# ~- Y6 ~
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% Z/ E1 r- X; u2 J0 g1 f" F
  155. {3 y: k8 G- F" x( b. u
  156.   DWORD attrib=GetFileAttributes(Target);
    ; ^* C0 g, g; r* K, P- _, i; M, E; z
  157.   if(attrib!=-1)
    6 h" J4 j" j! J( I; A5 j
  158.   {
    $ |; J  ]3 n/ l% p( T( B
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ `& @) A' C9 ]1 R
  160.     {
    2 ]- c4 v7 _; K+ I% ~+ m2 n
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);5 }2 `* V0 D) L' T; c0 R
  162.       SetFileAttributes(Target,attrib);
    2 S' R  V- b6 P
  163.     }
    1 r$ |7 m5 ~! S6 H% m8 |6 _
  164.   }
    4 [# V2 u, Z  M2 y; C! z' B
  165.   CopyFile(Source,Target,Erase);
    5 Q7 k) m% P4 F6 p5 `! C3 g! y# x
  166. }
    - G3 C3 A: l& w0 N

  167. 2 c) X. u5 C. K2 I( H- W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 k( V6 E& Y) g
  169. {
    4 f$ ^- O0 @7 `+ e8 C2 X
  170.      FILE *fp;; Q8 w/ Y2 v$ z8 q
  171.      char  szBuffer[8192];
    & Z4 q7 n% Z/ u# W' k
  172.   va_list  argptr;; }% E- j* H8 P1 o

  173. : Z7 q/ n7 P- j4 `  p2 \' E2 v
  174.         va_start(argptr,message);1 o% {' w, `9 V) {) G
  175.         vsprintf(szBuffer,message,argptr);7 n" f/ c6 Q( k: Z& z' o% a6 ?: }
  176.         va_end(argptr);
    2 O& \4 J- b! d( q" D. ]7 X- r& g
  177.   fp=fopen(FileName,"a");! _( D+ v" a- r7 v3 P: P) @
  178.   if(fp), T! M0 p; J2 E& B
  179.   {* l% a& z# d$ X6 k$ [
  180.     fprintf(fp,szBuffer);
    ) k  N' |; z" s5 H6 W1 p  M: C! }% H
  181.     fclose(fp);/ [" `' y  C2 a6 B
  182.           _flushall();2 l, I5 \$ ?2 q: l# g$ y* i
  183.   }9 J  t6 h0 `, @3 x9 g; ?
  184. }' C5 J6 I' O! y" ~1 ^/ K
  185. 5 v+ b( d2 z/ K/ T+ u, W8 I" D4 G2 M
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; a( Y% }5 e: Y8 g
  187. {
    2 b4 V9 M% [4 V4 x) y- @" I
  188.      FILE *fp;3 l2 Z! D7 @  i& A, h1 {, ~
  189.     DWORD  attrib;; E* X# w8 Q/ m4 N: j* s# J) s
  190.   attrib=GetFileAttributes(FileName);
    6 b5 x! U3 {7 a; M8 T/ J7 ~& V# `
  191.   if(attrib!=-1)3 T* u9 L/ P3 X4 Y% L$ q
  192.   {
    ) b5 a5 C. J1 i3 f# }. V; }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);7 w* \0 h. \7 C  ?( X
  194.     if(!SetFileAttributes(FileName,attrib))
    ; L6 ]( t  a! J9 X
  195.     {
    8 j: s* }. b: L/ \
  196.       return FALSE;! d4 v$ B3 o; y: R
  197.     }
    ) q. I! S0 t: D
  198.   }( r: g1 g, {" j  m4 k: q
  199.   fp=fopen(FileName,"wb");$ U) i6 w. ^) i% x* I0 z/ ^+ O
  200.   if(fp)
    " u- @9 X4 X$ j
  201.   {, Q0 o$ y9 G# m" h1 O. n& X1 d
  202.     fclose(fp);
    : k* l; }2 T1 F' r
  203.   }- f/ C* p+ J7 C( }& {& O
  204.   return TRUE;
    - C: W$ N" o: s- Z6 X
  205. }. N% l2 `5 s: t$ m
  206. % I2 v4 {) `8 D: H* ^8 W
  207. BOOL CRevAppApp::UpdateLocalVersion(void)9 L2 S; |8 [; _) _$ Y
  208. {
    3 R2 l+ `7 o5 N/ }
  209.   char filename[MAX_PATH];' E/ E, ^, f: x% `; C1 C
  210.   LPUPDATEFILE file,olds;! u5 Z# o8 @4 D5 ^5 G
  211.   std::map<int,CString>::iterator i;
      @4 E2 a; r( h3 v- H/ B' M% l0 V
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 ^* k8 a# L( p" ~! u, k
  213.   std::list<CString>::iterator l;, N9 O* F0 ^$ r% Y3 q
  214. ; o6 ~9 W, ?9 R  c0 O
  215.   if(bFirstUpdate)
    3 Z6 Q) O5 _/ E7 r0 S0 @/ \1 {
  216.   {
    + T3 u- e7 j# c5 O- D
  217.     dwCurrFile=0;
    9 N% e8 h$ h( h* Q$ O. |
  218.     bFirstUpdate=FALSE;
    & R, A) n5 i4 y9 G0 f/ G2 M& o
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! s. p% p9 f- t- R6 A2 y0 {
  220.     {
    " ]; s* M7 |) G
  221.       dwTotalFiles=UpdateLocal.size();+ `, P' f8 T) l3 y& w6 p; N
  222.       dwDownLoaded=0;
    & c$ ^5 X& |! v- m+ V7 I
  223.       bSilentStep=FALSE;
    $ w0 L, l$ S/ i) e1 j
  224.       bCompressed=TRUE;6 B: G" C3 Q5 K
  225.       strExtLocal.Empty();
    & s( b0 N* m5 {3 w2 v
  226.       strFullName=(*i).second;
    2 f+ z% n4 P2 t& G% g5 @
  227.       dwProgramState=AP_CONNECT;
    , H2 Q# I' D7 @# B9 [4 d7 e
  228.       return TRUE;0 q1 d# Z; Y, M" _% ]* O5 V6 W
  229.     }% b) F: V! |3 U! H
  230.   }
    " t( L' G% T, n( r- o. |7 N6 g$ W+ n% l
  231.   else if(bRestartUpdater==FALSE)
    , i* {5 X/ m' H9 j; H/ o1 p
  232.   {% t/ P: l1 h2 S! p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- A4 D7 n/ B& M2 C
  234.     {: q' \8 s) o. C0 A+ w; l3 E. s
  235.       file=(*p).second;
    6 t( R/ R4 T: e9 `4 G; Z6 P" I+ O& f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' r4 U3 T# v8 T# i* U
  237.       {
    3 p7 [1 R# i, R! Y( _5 c8 j
  238.         olds=(*p).second;
    ' w. f" O8 b0 z* s! O0 i
  239.         olds->vers=file->vers;  v( P2 T) Q6 `7 \$ f5 B
  240.       }
    3 ~! l, |# i5 R6 C7 a# q) J; |; A% N
  241.       else
    . [- H/ @& u5 x! B, M* E( F
  242.       {
    % I/ ~/ P, [# c. M( }" Y- V2 w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , p* T1 H, L: _  I8 h' e1 Y( b) B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* l& j' G+ \2 A: S: r8 Y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 a. ~6 G  S5 }- L. w* n( O
  246.       }# h& F1 ^6 p! r, Z6 s& \+ o: X  x
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 J' J. `3 W' l; H6 \2 W& R! r
  248.       sprintf(filename,"(%s)",file->file);# z0 Y' l+ p+ f4 y! x
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 R( S( X1 s& n9 j$ m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }: ~8 l% k. Z, p+ k: n2 p  {, c
  251.     }
    % b$ D9 E" j& }4 d% ?0 o' ?$ Y- v: b2 J
  252.     dwCurrFile++;+ ^7 Q' |" D+ B, {
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 u) G& Q. v' }8 }2 e
  254.     {6 k* H& ^9 ?7 _7 E' J& I, g% v
  255.       bSilentStep=FALSE;- O. X' b& T2 R+ u  ]8 T
  256.       bCompressed=TRUE;5 r7 l0 }/ l% M  A
  257.       strExtLocal.Empty();
    : W( x+ r& S' @* A  @
  258.       strFullName=(*i).second;
    0 {2 `! h+ `% |  ^/ D
  259.       dwProgramState=AP_CONNECT;
    3 i& a: @, A0 Z9 ~/ h# P( |6 V2 @, Z
  260.       return TRUE;6 ~6 k2 N  Q- |/ g
  261.     }- g, ~4 A0 Y3 ^5 s5 m! F: C& |# {
  262.     if(!bRestartUpdater)
    1 E: b: r, U6 T  l. i
  263.     {4 Z0 ^( V9 r* `1 J9 I3 M" B! V
  264.       int iCurrSize,iFileSize;5 C' i6 X, w- E0 p1 j' o
  265.       iCurrSize=0;2 R  V7 _1 ^& {: k6 b6 L
  266.       iFileSize=UpdateList2.size();
    , o: A8 Z' Y/ x4 u9 T* v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");5 y  T8 ]' a. x0 t6 k$ t7 [  y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");, t( s; n5 ?' x
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");3 }2 Z2 B; h4 F: o# k& ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ n& W$ t. r6 F; C( c+ [
  271.       Fclearf(".\\update.dat");
    % @9 Q; ?$ F9 Q5 D, s( l, t% S
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    - J- j; U% x& @+ g  V8 F3 ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 r; Q/ J8 A# u1 Q. N8 Z
  274.       {
    ! P! [5 [& L% [' d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    2 E0 ^2 L- Y. i0 y6 J1 x) o9 B
  276.         {" S6 B- [5 e8 ]
  277.           file=(*p).second;  S- Q% r( }* z6 ^! m/ W8 R
  278.           sprintf(filename,"(%s)",file->file);5 J1 I) }( G$ b9 Z* |" D5 p
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % c+ F$ m- g& D, ?2 g
  280.           iCurrSize++;) R! f4 O0 d. ]4 P8 m
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    # H0 a: C2 g6 k* E/ X( W( Z
  282.         }/ _/ W! f4 Y( P, Q/ S4 \
  283.       }6 V3 K2 }) E, W3 N& N8 N$ d" [3 v, U
  284.       unlink(".\\update.txt");
    1 y5 {1 l' y$ h" R' A# g8 }
  285.       unlink(".\\update.tmp");
    ! y! I7 o) m  Y
  286.       Fclearf(".\\checkversion.dat");
    9 \6 u( U) C, a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* a+ H, `5 j$ `2 u
  288.       if(UpdateLocal.size())" @% b: W# n6 Y% D/ w/ X! f
  289.       {
    $ @  W3 h1 \, B8 J, ]
  290.         UpdateLocal.clear();- N% |' m" i9 \4 v& e2 I# V' S
  291.       }' W+ a& K5 u+ G" f- r$ V
  292.       if(UpdateFile3.size())2 a7 ^! G, P: v0 M& [: q9 |
  293.       {! t8 z$ r8 Z- b
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . [; L! X: Y0 H
  295.         {& P0 B% \/ S' [& E- y& ^2 D$ a% M
  296.           file=(*p).second;
    6 D! \2 n$ s' x% S4 G
  297.           free(file);$ w" y) a6 Q  e2 w& K  \
  298.         }
    1 g* c3 C& P) L# m
  299.         UpdateFile3.clear();9 h6 [3 y9 w, k6 U8 F
  300.         UpdateList3.clear();' d, @  F6 f& H9 N0 V* @
  301.       }
    ( n5 B  |8 z" `; x- E6 g1 V
  302.       if(UpdateFile2.size())
    : A% i8 S- f' i) A
  303.       {
    ' o0 W! T4 ?8 v0 @
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' q  T4 O9 W  \: ^0 B; n
  305.         {
    & d- p8 j2 ]9 C) f
  306.           file=(*p).second;
    . ]# q) w9 q7 F$ t; P% b
  307.           free(file);/ h* ]+ y+ Y& I; b0 x! U& V' c- {
  308.         }! a+ z* U: i( [/ y
  309.         UpdateFile2.clear();
    2 q6 P. _  `& O  w" t
  310.         UpdateList2.clear();
    * r' \' G; @: T$ C- r% o' R
  311.       }
    2 x# Z4 Z( v: I8 ^, |
  312.       if(UpdateFile1.size())
    ; D2 x8 ~0 u* V, e' U3 P+ ^
  313.       {7 d, \- y/ o9 D5 ?
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 h1 }# e7 D+ B  U
  315.         {
    / k3 t! N4 _/ q  {1 }! {( d
  316.           file=(*p).second;
    : b0 e) b- p/ b; k5 n3 s" J9 q
  317.           free(file);
    : q: E) m4 k' g1 U3 W
  318.         }' j( R9 u+ ~4 ]- M/ B" A
  319.         UpdateFile1.clear();
    ' Z( U  ?. l$ x  _& K1 Z3 R4 X
  320.         UpdateList1.clear();
    6 Q  x5 S, e) D! S
  321.       }
    3 C( w9 v/ [  o' S
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 M$ g; v5 m3 B( Y8 T: O* l
  323.     }  O% q" f+ Z- U1 ?
  324.   }
    ' l8 j5 z; _6 U% ~" Y
  325.   return FALSE;
    7 g& |8 {& J6 ^6 U' d* b' I5 A
  326. }# n# F9 h) n7 Y7 d" A- i

  327. 8 b( m" Q/ H1 g9 ]$ }7 f5 i3 ]; b
  328. void CRevAppApp::ClearAll(void)+ P- O# Q+ M1 I- s8 r
  329. {
    # `. v) S  X+ @, `  |- f
  330.   LPUPDATEFILE file;, A# `: E4 u" N% i* [$ t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 C* H# s! F! H  I
  332. $ N$ y. m2 ]- D7 |8 e: f
  333.   if(UpdateLocal.size())
    7 t- r5 z8 @0 }4 N' V1 N
  334.   {9 L8 J( h: {4 x* O' }
  335.     UpdateLocal.clear();. Y) R0 c& j8 |- R% t- A/ m/ s) x7 ^
  336.   }' c* D7 O6 i+ \
  337.   if(UpdateFile3.size())
    5 d! A( A2 _+ E
  338.   {. ?+ b& `4 o9 G: D" R0 p
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); A  l( d5 r% K
  340.     {9 D5 o" E  F  m7 j# F9 o
  341.       file=(*p).second;. {. e8 X5 P: H" I4 q
  342.       free(file);
    + ~3 w, P5 [- ^# E+ C
  343.     }- u! t* y! g7 K; ?3 E
  344.     UpdateFile3.clear();
    9 D! S, b: i0 O8 K
  345.     UpdateList3.clear();* E* ^4 Q+ Q( q/ H
  346.   }3 J$ {8 o  H0 A) _' B
  347.   if(UpdateFile2.size())
    2 ], ]& f! E& {. ^* X. w
  348.   {
    & C: J! I4 v6 f8 d  H! S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 u: O% A# v3 `  W: w
  350.     {
    2 h; x2 @- @2 V- M7 f' |' K
  351.       file=(*p).second;
    % [" [& w) w+ {5 d
  352.       free(file);: I: _$ d* ?) r* V  I
  353.     }# T% B8 O, o* }1 O+ l. q2 V
  354.     UpdateFile2.clear();
    ( q+ M2 A, `) m. j! `; W: y
  355.     UpdateList2.clear();% }! W- a6 O, ^. B2 O! C4 c
  356.   }; d/ f2 ]6 Y% ^+ t; y
  357.   if(UpdateFile1.size())
    * q4 s. F0 X+ S1 K" {" w- z
  358.   {4 w; M, n6 ~9 q( X, N! ~
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ G1 ~/ w) z* Q( x. u4 R& w
  360.     {) A; v! K( i! \( @6 v' e
  361.       file=(*p).second;
    6 H3 T5 r+ n, F, }
  362.       free(file);6 S4 n" l/ d4 g% @; o) ]) A: x
  363.     }# ^! U0 }% E! S( G+ A. q1 S/ Q; [( x, X
  364.     UpdateFile1.clear();
    7 \9 w0 \, \+ m. M7 v0 p5 K
  365.     UpdateList1.clear();
    . A- W- `# j" n) e1 w- h
  366.   }
    ! s- l- L/ a6 J) E5 a$ q: `6 N
  367. }  
    % x# r& q& s/ k+ b
  368.   ' p) S9 [4 x/ q, \! V9 V, B/ S( I
  369. BOOL CRevAppApp::CheckLocalVersion(void)0 {, g0 R1 z, G: S
  370. {* T) j. s  G" A0 P0 K
  371.   int c;3 j5 k' D5 S! I4 M" W. F6 C! D! _
  372.   LPUPDATEFILE file1,file2;" M% ?1 e$ {" @% Q
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ; {8 W2 a' w! |9 n; j
  374.   std::list<CString>::iterator l;* s2 F( w5 B2 P. f# G2 t& _

  375. ! h5 p( y  _- W8 O% S& N; l% S
  376.   UpdateLocal.clear();
    ) I" L( S! ]1 _  C5 |1 G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);6 b! i# G7 x$ b* b3 J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ) I2 h  |1 @& ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ) h) T0 R8 R' K- \) s) _
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# b" s4 h  ?/ X7 D& o  x
  381.   if(UpdateFile3.size())# u9 p/ R$ \2 R" P: @) G" I
  382.   {( W8 \4 l1 x  h/ B& W
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    / i, n$ H% c" N- I5 y5 Q
  384.     {6 H5 a* S1 Q' H' f
  385.       file2=(LPUPDATEFILE)(*i).second;
    4 I1 H1 Y/ S+ d* K! _0 ~; Q( p
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" p+ S4 R/ ~& G& E# J' |! M
  387.       {
    - g9 v2 E; `, [
  388.         file1=(LPUPDATEFILE)(*p).second;
    - M+ M% u. i; Y( g; |! t/ |
  389.         file1->vers=file2->vers;" I5 V) Q/ k2 C, R3 L8 I
  390.       }) ~  I9 Z" O$ A7 d, O% Z' }( A
  391.       else2 r: c4 r% @+ ]& q
  392.       {& ^, B, N6 ~3 \2 ]" `& o$ Y- l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 i4 a8 i6 Z! ], t
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( V0 Y" z! J% ^; _, \% o3 F3 P8 B
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    . l! r* d9 F4 |- ^
  396.       }2 i6 H1 D1 b3 a) P# N7 j
  397.     }
    ; {# Q  j3 B1 K! z! l+ I
  398.   }% F4 c, E+ t, E6 n7 {8 s& @
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + h# ^1 X: r7 l7 T
  400.   {9 `) w7 [9 `2 z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 n. g; K" k& }$ D
  402.     {9 r% r. `+ L# |3 o( _8 `# v  [8 \( |: }
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 }2 j: i! j/ s, K6 [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : E2 G- b% L* ~) r4 Z+ ~
  405.       {
    & J0 V1 }5 n6 M5 D$ N8 j/ R+ ]
  406.         file1=(LPUPDATEFILE)(*p).second;
      O2 E$ [: q* n
  407.         if(file1->vers!=file2->vers)
    6 @$ S$ g, O9 S# W
  408.         {& t2 t8 z" S+ M( p" {# N4 ?5 w2 ~
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 _6 G( }+ L/ ?9 i
  410.           c++;! R8 D4 Y6 A+ H3 ^0 r
  411.         }
    8 ?- h. d# e( u) ^0 c8 k, {
  412.       }
    ; n* f  R, f2 {. C$ b, r
  413.       else
    : H7 W3 F- R3 d. j. c4 P! ]$ M
  414.       {
    0 I1 Z# ?: |* }; Z! |$ V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 f3 K8 |! \. B- v
  416.         c++;
    ; p  S5 i/ E, G. L3 Q6 s
  417.       }
    $ K# q7 B7 j6 s# K
  418.     }
    9 y- d+ [5 }( m3 H
  419.   }- @5 c  T( y1 k0 _( M' h8 ?) E# i
  420.   unlink(".\\DownLoad\\update.txt");5 X: Y. q; T' c$ c
  421.   if(UpdateLocal.size()) return TRUE;
    ( v2 ^( ^5 u2 B2 p. }2 [8 y- N
  422.   else                   return FALSE;) g* D1 L/ L/ a! [
  423. }
    & S4 j3 N6 g9 S' C8 B- r1 Q

  424. ! x0 {1 U9 P' Q, D7 j
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 c, H$ D: J5 c3 u- Z6 \
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( h6 P& M  T# E  i9 v) _# D1 J8 L3 Q

  427. 2 [+ |' m+ E% D$ [( B) X: D, a
  428. 8 |4 d9 ~+ L) D$ J7 T- i2 M

  429. . e# L6 b& k! O) ?3 t& s
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 L" x7 x5 @! u& A4 M' B3 i+ l
  431. {
    9 [1 d, F4 C" Y8 k: e4 Q- C" o
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( M" o  P8 q6 q
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " p5 A" z5 ^5 Q' j# s4 Q: m8 ?$ h
  434.   {# @* q. w, s3 c, u1 d& C- ~, W/ V
  435.     char szLanguage[50];# E% ^. W$ h8 K
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    / ^9 W( V0 L+ z3 b
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ a( b  {9 T& V' S
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 d* ~3 X: k4 @& p
  439.     else                                   m_iLanguage=ENGLISH;* k9 L. X/ S7 t
  440.     char szRegister[100];
    4 q3 d+ p5 S/ B7 x
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 I1 R; C; X, R" X2 S, u% _( ^3 F
  442.     strRegsName=szRegister;$ |; q6 t& {' C( W6 R
  443.     char szPatchURL[100];
    ( S# y6 ~0 P& I. s/ Z0 Z
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 ~: m* }/ @" u) g! l5 d: I% E* t* N
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - [+ U. V' e/ d0 H( K5 w
  446.   }
    6 S4 o" o! q3 M4 E  @- i) d. m
  447.   else
    : L, h% Q& @. W, G: m& F+ W0 |
  448.   {, d( F" D5 |8 q8 u
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . W! L3 E) I) _6 ~* P# ?, U- d  L
  450.     strRegsName=DEFAULT_REG_URL;
    ' u+ b0 B" r0 p
  451.   }* f0 ~/ E9 R) j; p
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    % ^# j7 N; B  T# _; J
  453.   {
    : K. a: b; D! {  ?3 x
  454.     char szIP[50];
    ! y" U9 I5 a4 H8 [' t
  455.     char szDIR[300];5 k' ]6 t" E% M6 t
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))1 Z5 U! E) B* K1 R( n4 _. A
  457.     {; K0 |3 z+ }2 I: h7 C: Z! ?5 c
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");0 |* w# }6 M7 N, H  ]0 x) Y& ?! T4 J
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 ~$ Z4 L+ G1 J
  460.       strHostName=szIP;$ O' G9 R/ I6 }1 d/ P' `; Z
  461.       strHostPath.Format("/%s",szDIR);
    1 \1 ?1 d: g0 t6 }
  462.     }0 C0 `+ Q1 I/ `
  463.     else" p* l# b) `* w6 x
  464.     {
    7 U0 y' B, P4 b; V# }- b- h
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& e% y" \- C% A+ i$ d% z9 @1 M
  466.       {
    * I6 J) m. F+ F5 E3 Z6 o
  467.         char szLanguage[50];$ C' v! q: i7 U( n, L5 ~/ ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");& @) M  d' [6 i, }/ d$ @3 b+ P
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! ~: Z* a' W6 X4 L! L
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 z* e' K  T; @4 N6 z
  471.         else                                   m_iLanguage=ENGLISH;% b$ P0 [- V# `9 O. D
  472.         char szRegister[100];' f% X+ P" `! {4 q
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + b- A$ ?7 g) O% Y. D
  474.         strRegsName=szRegister;" I% b- t  r, @: B3 I, _
  475.         char szPatchURL[100];
    7 \" u8 g9 \: }( R) H3 `
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
      P+ q* k8 @6 R- {5 ~, Y6 U( }' ]& i' _
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 Q% \6 G  @! L1 B$ S2 a4 [7 g
  478.       }7 x' j& `: U  m" {$ T% n, P1 \
  479.       else9 @9 j, p' G7 N. u1 @) @' }
  480.       {1 x! ^6 e# A, s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . g. e( G2 c2 b& P
  482.         strRegsName=DEFAULT_REG_URL;! o* v7 O4 k+ M8 I! G9 T- r
  483.       }
    7 S$ K+ d: s$ C! M( M: S
  484.     }
    ; t4 q: Z$ w* O1 e0 z' K1 ]
  485.   }8 l6 q4 N( Y3 n; T. M2 i
  486.   return true;4 W) A7 u  E! _" r/ b
  487. }
    + B! L2 w* L2 y) I

  488. % w8 R+ h5 P' g& ]6 ?
  489. #include ".\ZLib\unzip.h"
    5 T; L7 m' J! a9 r$ M* J( l7 J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ k! I( p' L# [- l1 u$ l% ^* q
  491. /////////////////////////////////////////////////////////////////////////////! H- ?+ V7 _3 c2 x$ A; A
  492. // CRevAppApp initialization
    0 W! D6 v/ k* F: I! I
  493. 3 G6 G& z% I4 k" W) Z5 _, z
  494. BOOL CRevAppApp::InitInstance()  s+ Q2 }% D* I
  495. {3 A3 m& D) r% r
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : Z7 e& h" `8 @/ K( p% e

  497. 9 L" [: m9 u& O' L4 o; F! ]+ m! f
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);/ s2 y# ?! U, q
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))6 M1 w4 K* t3 E; ~# f
  500.   {8 P$ R" ^) m/ t/ J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");3 h. d- @" A! {, ]0 M7 k5 R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& K8 k* @/ u+ {
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). c  H8 k# `4 h) W$ u4 T. S
  504.     {  Z  k" [: U6 N- _8 R4 B9 T3 D
  505.       strcpy(szPath,szPathTarget);0 o* b8 ]! j; A% Y( P& k$ B9 c
  506.       SetCurrentDirectory(szPath);% G+ u: J( l  H0 ?+ ^4 V
  507.     }7 N, ^: w& q# m" U7 n' W
  508.   }
    7 X5 T2 y3 ^/ C4 g! m
  509. #ifdef _DEBUG! k5 q3 k, K( s
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ; j3 ^4 ?" g1 N! T
  511. #else- G, n! d9 \* V( u: b
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      }7 U; U( S% F
  513. #endif4 k( F6 Z2 u2 ~! r3 p
  514.   {4 y/ B" Z3 e, B# m/ p3 n3 \
  515.     char tempFileName[MAX_PATH];
    & [: ?8 R7 Z, q. w6 y
  516.     strcpy(tempFileName,szPathSource);
    ; \* j# n1 V. ^. G8 M& [# a3 z
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! Q5 o; M* v& o
  518.     strcat(tempFileName,"\\$CSUpdate.exe");* Q1 K( ?# F9 }1 w8 k* {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: O4 ^4 L/ a' ^, |0 b0 ]8 z2 c
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 \; ?' U- i7 Z' p, z
  521.     return TRUE;: f9 d5 c# S: I6 Q% w: s! e
  522.   }
    & }3 I7 Y, v$ O0 \4 C$ u! u
  523.   // Nuke 0118: Delete run.exe
    1 P. e! j4 ]4 f4 E4 V* F% h2 \
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    0 I( m: u' l5 |+ [1 _" P: p/ Q; w
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 d9 |! r2 y) A- k
  526.   if(!ReadCfgFile("Config.ini"))
    ! f& u* w- y8 d' D3 m  Q7 }$ h
  527.   {9 X" e1 Y0 |6 G+ L. j! N# s
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    , W8 m2 M, {& U* k$ n$ K2 b  k: J9 M
  529.     return TRUE;
      Z0 L9 g5 q- j5 a* u% L
  530.   }
    ( z/ e$ e6 c+ r
  531.   HANDLE mutex;
    3 S: h% {& E# g% P0 f
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ) o3 I# o) h% A$ E
  533.   {
    $ G/ |* H" n7 k: e$ N
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    9 ?2 w5 {3 I- c. t2 [& o- O) R7 X
  535.     {
    ; C! o) S0 s5 R) L2 U/ u+ n  c' i
  536.       CloseHandle(mutex);% X  y  H' f2 a* U
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);; Y3 c4 w/ I$ S  K& M4 l
  538.       return TRUE;
    " q0 a& F$ U# K8 x& e  T& M
  539.     }
    8 u/ W" b3 Y$ Y  ^1 D
  540.   }  7 z% x% f. Q# g
  541.   CloseHandle(mutex);* o8 K' _7 t$ u% G8 K1 V

  542. - I# i. o& u) X3 f% W0 Y; l: q' ^& j2 K
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # T8 v9 r" a4 s4 z" E" K* y

  544. # `! E6 B0 Q8 I$ c- F
  545.         AfxEnableControlContainer();
    ( }% C, N, I1 H) Y6 f, B% j
  546. ' h# m$ t8 D' H5 r0 E
  547.   bCanUpdate=FALSE;% i* h5 K3 H$ c' D+ L' m, Z6 W
  548.   dwStartUpSteps=1;& }7 `  }3 f  g: |
  549.   dwProgramState=AP_NOTHING;
    5 }6 e0 K0 ~( T5 M' I& D

  550. + ^& h  s  }- A! F2 W3 A& h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);% B1 S; V2 ~0 k' R% D

  552. : {7 n2 b# h6 i% g) @3 d
  553.         // Standard initialization
    . `6 M- I6 B, f2 a/ C4 O" e" I
  554.         // If you are not using these features and wish to reduce the size
    + N- M7 J5 T' [6 m. S3 t
  555.         //  of your final executable, you should remove from the following8 |/ w3 }6 b4 r8 E
  556.         //  the specific initialization routines you do not need.6 Q7 s9 h- F3 X) p% y

  557. " h/ B3 x; B7 b% K) H9 {1 y
  558. #ifdef _AFXDLL) `: P, D6 X  s! I/ Q# P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 \9 M& p/ ?+ ]  h
  560. #else9 j' |5 [# Q/ V) D( G* \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically8 P/ ?  D% t7 N( L- P- V; |
  562. #endif
    8 _' G" S5 j& H  c, ?1 j
  563. 8 S3 P7 [6 Y- k1 Z' w
  564.   dlg=new CRevAppDlg;/ d3 q: ]# C. W+ e
  565.   dlg->Create(IDD_REVAPP_DIALOG);2 ^  v+ w4 Y9 ?8 o7 d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" s6 V. Q3 B" M
  567.   m_pMainWnd=dlg;: v+ e4 T  L, r: d) L; x, s

  568. : g  [+ H1 q" r$ B5 S
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 R( B/ L( L1 T) w, d2 h

  570. & {2 q, D8 ?- G( b7 h' t- E
  571. //  GdiplusStartupInput gdiplusStartupInput;7 H# R# ?$ E# U, e  X, A7 c
  572. //  ULONG_PTR gdiplusToken;
    / w5 V; |- T8 U, t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);; \4 I7 G4 {- h2 M

  574. * B) d6 X7 v3 x7 Y, B9 e
  575. //        CRevAppDlg dlg;
    9 T4 K% K: A" h- t$ T
  576. //        int nResponse = dlg.DoModal();
    ! h0 x) m, M* r6 e' g4 \3 C7 c3 n
  577. //        if (nResponse == IDOK)& O. A3 W* p% P2 c2 ?/ x/ Y4 E/ e
  578. //        {9 n8 k2 }. k5 ]2 R8 u7 q
  579. //                // TODO: Place code here to handle when the dialog is
    4 w8 _! R; g. ~9 r: c, t( q
  580. //                //  dismissed with OK" K' p$ m' Y8 E; v" `
  581. //        }( l! {, E# x0 t& w- h0 ~: k1 ]
  582. //        else if (nResponse == IDCANCEL)2 |& n% Q3 e* M7 s' f
  583. //        {+ p- f$ c# q9 I2 `* l. z9 V
  584. //                // TODO: Place code here to handle when the dialog is
    % [5 q$ J' ]. s# D
  585. //                //  dismissed with Cancel, A3 {3 t) m' F3 H, P8 x& e: k7 N
  586. //        }
    ! q6 D- g$ H5 M) G  E7 Z4 I

  587. ' ^4 v. a# A! s0 R- M
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . |% @/ J) W0 a
  589.         //  application, rather than start the application's message pump.& a* ?) K3 `% S/ c1 J6 `9 P2 q
  590.         return TRUE;
    4 ^* t! t0 z" |1 a6 _: I* O
  591. }
    " |9 x/ ^" D5 R9 y& }- D: Z1 {

  592. 3 Y# }* V$ N. ?7 o; v
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' G# l( `7 e7 Y2 x; N
  594. {# I  ]; ~) t* b+ I; n
  595.   int i;' c) D" w; {8 @  u
  596.   char *szRet;3 \- k3 \0 K- {

  597. ! Y8 f- a) {6 N1 C  G0 g, \+ n# w
  598.   if(pSource) { itoken=0; sztoken=pSource; }- T! @( ~7 a& O# U! n$ G
  599.   if(sztoken)8 U7 t# Y/ V: O0 _
  600.   {% ]0 c" m& g9 g, r% B4 ^5 o
  601.     szRet=&sztoken[itoken];6 x9 @( c! i3 p
  602.     while(sztoken[itoken])4 D$ |5 _2 T6 g6 c' [/ p( R# i4 a
  603.     {
    4 {; O. `; d8 w, L# h
  604.       for(i=0;i<(int)strlen(token);i++)
    * U3 }% M1 i; G# _) u* ~& {
  605.       {1 b- A; X3 g% T
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    4 N7 e3 O; h, ?" `) l. w+ y: h
  607.         {7 S) M/ q1 T% \8 p
  608.           sztoken[itoken++]=0;1 J: u- n2 M7 s9 a+ x
  609.           sztoken[itoken++]=0;
    + m" |' g9 N# L. W- |
  610.           return szRet;
      K4 m% j# |" c3 v6 f# Q5 K
  611.         }, Z) q( H# Y5 }9 K' g" z: V- y& r
  612.       }
    " f3 q6 x" W$ e' N, N* `2 M
  613.       itoken++;
      f/ r" I5 ~  e( i# p6 m3 P, F2 F
  614.     }. ~, _: {  D% n
  615.   }- R+ c7 V9 m3 V( w+ e
  616.   return NULL;
    " T) z# M' J9 p, E
  617. }
    / K4 t: T% a2 K/ q  r9 E5 [) ~6 E& K

  618. 9 g7 n, O( s4 V$ B3 N
  619. void ProcessProc(long Total,long Current)
    " T: L* ?0 E$ P  F# M
  620. {
      n8 V4 C$ w4 v- A: P. M
  621.         MSG msg;3 u/ P) `. J$ }% J& q* N' ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ j& C8 }8 y4 D5 f5 G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));6 x  A4 L% I; q3 H7 L# a" Q* D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 w+ {* s  j7 `. n8 P7 ]
  625.         {& U4 p7 W, A7 Y9 g9 C" \" B
  626.                 if(!GetMessage(&msg,NULL,0,0)), K0 ~6 W7 t5 U8 T
  627.                 {
    ( a7 T3 `: E9 y) _, T  F6 D
  628.                         return;
    - x3 c5 w. I' y! d1 j3 n7 }4 Q
  629.                 }$ ?8 m( {; e. x4 z/ U; w
  630.                 TranslateMessage(&msg);
    . |2 {6 J6 m5 _( w( W( K
  631.                 DispatchMessage(&msg);
      l0 P7 `- W$ Q- \7 _& F4 ~: g
  632.         }       
    9 m$ I! f+ c# {5 v  t
  633. }
    ' L# O, o2 B# {; }1 @/ [) c

  634. 5 Z1 ]8 w4 s( S  k. j2 g4 K
  635. BOOL bFirstChar=TRUE;
    2 A  @$ U, e& e

  636. 1 W& t+ w6 C  d. S
  637. BOOL CRevAppApp::OnIdle(LONG lCount)2 S1 M3 l" i$ x1 R8 t, ~, r
  638. {
    3 `, Y  E  W0 _  Z8 a5 \1 E, o
  639.         // TODO: Add your specialized code here and/or call the base class2 p2 Z5 f! b. i' i
  640.   switch(dwProgramState)
    # f) T! Z& X0 \; [
  641.   {
    6 G- q6 [- S8 r4 }' Z+ X
  642.   case AP_NOTHING:$ ]/ o6 A( |. D
  643.     switch(dwStartUpSteps)
    ; I  U  [# B$ W( K+ ]
  644.     {
    ' q: s* [2 R# n! e  f
  645.     case 1:
    & {/ d: e. h( }# x
  646.       {/ O; i. r7 F, W9 c1 d
  647.         int i;
    ' Y) p9 A" |6 g. Z( `% q& E) M
  648.         CDC *pCDC=dlg->GetDC();
    1 ]( P/ ]' q: J3 c
  649.         HDC hdcwnd=pCDC->m_hDC;6 ^  J+ D# J0 `) c
  650. //        Graphics graphics(hdcwnd);8 O. P8 j4 R6 b- q0 p& T% N0 Z! Z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");* ?; n* v; I, Q; e
  652. //        INT iWidth=bitmap.GetWidth();4 @3 t  Z) V0 x4 g& a) z
  653. //        INT iHeight=bitmap.GetHeight();! U4 S5 x& W- T: X% Q
  654. //        Color color,colorTemp;5 v! p" `  ~. g5 c/ e
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- T  y  [$ m& e* `
  656. //        {$ ^7 B+ p# S% i% r/ {8 V1 G8 }7 h
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)) F8 J# t7 a5 c! L# p
  658. //          {- A8 ~2 R- J: J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 |) f% H7 g+ e" H' S& @- I
  660. //            colorTemp.SetValue(color.MakeARGB(* y' W" C( L4 }& M: Q! H) O. L
  661. //              (BYTE)(255*iColumn/iWidth),) ^' }+ X2 c0 m) z
  662. //              color.GetRed(),2 ]( d4 w3 F9 b3 U  ?; k
  663. //              color.GetGreen(),
    # h% M  u2 N- n6 ~$ W/ X( S8 B
  664. //              color.GetBlue()));
    , h7 {2 Y0 ~3 F  I1 [3 M. I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. y- E2 h8 S+ z; S
  666. //          }+ @+ z$ F1 H  ^, G# T" c! |; l* Q4 Q
  667. //        }8 D- H% r0 H1 f# h" ~: {1 y
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    $ @- [; c) [- k) _
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' n3 q/ ?: }2 N# s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");* r9 w9 I, ^/ K: J: U+ k! g; Y
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- ~( [8 _* N3 P; p
  672.         for(i=0;i<240;i+=8)0 A" l3 D$ y* E; E
  673.         {$ O3 B( F( Y% r4 _; t: M# p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& k7 f3 l* P% j  M! @1 T3 v
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);3 U- i) z* K- O. v* d  d7 a5 L
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 m, B1 e6 X6 S, G- a
  677.           Sleep(33);
    / N; a2 z$ g7 Q+ |
  678.         }" V: Y, r1 I' V5 t) N! J2 B. L, r3 p
  679.         Sleep(1000);
    - G$ R4 z' Y" i- V6 F0 ]
  680.         for(i=240;i>0;i-=8)9 H& ?) H7 `; R8 C7 s7 W( ~7 X
  681.         {
    ! P- W: m" h4 A6 m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. B- V  ^7 v% {( d5 G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);9 `. y% H. Q5 I# D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 e; L2 x, V, d( ]1 t9 _' L0 Y
  685.           Sleep(33);9 B" w) {  U2 p# M5 v6 ]
  686.         }: J& Y$ h! h/ C& s% J/ J
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ( S7 H/ f* v! }) C0 s: J& P8 }2 l4 P
  688.         dlg->ReleaseDC(pCDC);
    ; m; P, {% k+ E* s8 ^6 d6 ?
  689.         DeleteDC(hdctar);* }7 e* ]+ ~  {% `4 h2 N1 i6 y
  690.         DeleteDC(hdcsrc);8 t& D3 q- T8 B  a
  691.         DeleteDC(hdcorg);
    # Z$ y. L8 Q# x6 M6 U
  692.       }
    8 ?, X% ]+ U' g2 }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);+ j3 ]; c, R2 `/ p) ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");# [6 a' i' v; y
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");" Y& Q/ L' S! f8 a  B6 Q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    & O0 I  X7 A6 s1 d+ k+ Z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " Y3 y0 v* |$ w) }2 h7 D
  698.       if(!Dn.Connected())4 G2 t. U, r. g  n5 ~, x5 r" F4 R
  699.       {
      Z+ U! c/ E: }! |# K% h% W9 N
  700.         dwTotalFiles=1;; _  j* r: ~: m% H6 Y) b
  701.         dwDownLoaded=0;) l4 b0 s/ q0 w. F1 D" w
  702.         bSilentStep=TRUE;6 [/ @# j3 e2 a2 U6 s, g3 L" A
  703.         bCompressed=FALSE;
    ! Y. I9 a. q& T. {: y5 p7 j
  704.         strExtLocal.Empty();$ b& M6 x& i7 g
  705.         strFullName="readme.txt";
    0 Y* ]* K1 n$ N
  706.         dwProgramState=AP_CONNECT;7 j1 D9 I+ o8 N8 ]* O2 f8 [9 z
  707.       }
    1 d* W% D+ ^0 v& t
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();% T% K' i: s- e7 h: A/ L8 G; |
  709.       dwStartUpSteps=2;# o: K' c- {, ?7 J* B8 g
  710.       break;# L6 V! p! V( B) L, \- S( T
  711.     case 2:4 u. W! i1 A7 O: L' P
  712.       {0 a- e2 ]( M/ @: @
  713.         int iEOF;
    - u% R1 Y# k% m9 _
  714.         FILE *fp;# G% b3 `, e( }" c
  715.         char szString[512];' I0 k0 U( a8 _8 ]4 }
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 h( R9 `" ~5 X3 C* e$ X8 O
  717.         if(fp)
    ) r0 s) R4 a; g2 P- m- O
  718.         {
    4 l$ |1 Z; a& X- g
  719.           do3 p/ e% S' s2 k, G- l$ Y) n
  720.           {
    % D" [8 ]" o& l( U) `( J2 Z, i# a
  721.             iEOF=fscanf(fp,"%s",szString);( }% F# \: e1 O6 }# D% j) ?
  722.             if(strlen(szString))
    : a3 I' ?- }1 N  w+ N0 _5 f
  723.             {' }. ?3 E" N, a" ?
  724.               if(bFirstChar)
    : V1 D& A5 D# k: z0 _
  725.               {, \, H4 T5 m2 v) T/ y& B  }5 X8 w
  726.                 bFirstChar=FALSE;5 i! Y: T' {/ x2 S, ~
  727.                 bConnectIsBig5=FALSE;
    3 @* L8 g* E( A; t
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    / q, A7 Q. B3 p: P* d& M1 v& _# o
  729.               }  E& [$ {' I$ A. }& ~
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    0 @) |5 p. D. L: o$ v! g& i: J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 S. G7 l1 l& D6 D' j+ ?- S
  732.               dlg->m_ListText.AddString(szString);
    , x+ H7 T  V3 e7 `( W: H  B2 ^7 I6 R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) X2 w5 [, d$ `+ T$ a9 M6 S) I, m, O6 \
  734.               *szString=0;  h& p! S9 p0 n. l/ J  m5 a
  735.             }
    : P$ [, ^$ |& ^. `
  736.           } while(iEOF!=EOF);
    1 @$ Y" t$ o/ L! n5 O
  737.           fclose(fp);% }$ _# b  |. r" k8 n5 s
  738.           unlink(".\\DownLoad\\readme.txt");
    6 q$ C, b+ ]6 @& f# s
  739.           dwStartUpSteps=3;
    ; ~7 `/ Y! X" H0 v3 ~6 S% \0 O
  740.         }8 Q$ L3 O# m  _8 Y- P0 \& e
  741.       }" N6 T8 n: R0 i3 l, N
  742.       break;
    * Z* r; Q% O2 w; k) E. b
  743.     case 3:5 w# o8 p& u: Z' w
  744.       if(!Dn.Connected())& ?+ _7 i& r. v$ o! Q5 m: Y
  745.       {
      K) W4 n8 w- H2 \! t) [' x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 ]9 j3 r8 Q% ~. ^
  747.         dwTotalFiles=1;
    3 K0 i: `: q0 T; N
  748.         dwDownLoaded=0;
    2 v/ t; H( D& `7 l
  749.         bSilentStep=TRUE;0 l8 y* G/ Z3 y7 I5 V
  750.         bCompressed=FALSE;
    3 D  |& \! |+ [8 q" w" D# c' @
  751.         strExtLocal.Empty();
    9 m( k* L, J) [6 w- h
  752.         strFullName="checkversion.txt";1 e0 D" v" z! W/ z( P
  753.         dwProgramState=AP_CONNECT;3 ~, S+ l2 K" G3 n
  754.       }
    $ S8 E! [/ x* I, w0 _. \' s; ^5 w. e
  755.       dwStartUpSteps=4;4 u8 U" ?' |% t1 H
  756.       break;
    6 W9 ], m6 \/ U5 ^2 y, n/ o
  757.     case 4:& [- Z1 |, u1 v# j( C% @  h" L
  758.       {
    ( B6 F% x/ {: y0 N, M
  759.         FILE *fp;9 }" R! e+ n3 k, R
  760.         char szString1[128];+ b) @' [+ f5 c3 |
  761.         char szString2[128];# B; p8 {7 g& f) ]( I. @+ [
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 k7 M4 w: O5 l3 }+ k7 V
  763.         if(fp)
    / h9 O% j6 V7 G* ]
  764.         {
    - G8 W& D( e/ F& `, Z8 j
  765.           fscanf(fp,"%s",szString1);1 h2 _* V; C. Y
  766.           fclose(fp);
    3 j: E; \0 y+ W- F1 q& Q( c
  767.           fCheckVersion=atof(szString1);9 G, l* y' W$ Q) W
  768.           fp=fopen(".\\checkversion.dat","r");
    3 R' m# h, O& ^: B( A$ P. M
  769.           if(fp)  ~# ]1 m3 l1 G
  770.           {) u5 Z' m- }, a* q, B
  771.             fscanf(fp,"%s",szString2);
    3 ]& k/ z' t% Y3 V/ s
  772.             fclose(fp);
    & N( P  j3 h2 b4 o/ ^7 J; ~& {
  773.             if(atof(szString1)!=atof(szString2))
    : d3 j0 \5 q; b0 M. S3 b5 }
  774.             {# r4 z9 i+ A0 `4 ~/ b) P) r8 ]* g
  775.               if(!Dn.Connected())+ k, z% M& b' ]$ D0 I5 f& M" t# }
  776.               {
    * c3 J& M; a3 e& R5 M" M) E' w' @
  777.                 bFirstUpdate=TRUE;
    8 T4 P0 k5 x6 p1 ~. h" h2 D
  778.                 dwTotalFiles=1;+ }9 U) F* D' l: G- [
  779.                 dwDownLoaded=0;0 u  ]% G$ E8 N
  780.                 bSilentStep=FALSE;: N4 h5 S. {' e+ S! F* u8 c2 U9 ~
  781.                 bCompressed=TRUE;. k$ C$ p" g' G# E& @) j. l9 B
  782.                 strExtLocal=".\\DownLoad\";
    8 c3 \5 J: q0 T) l6 `  W; T
  783.                 strFullName="update.txt";# N+ i3 U. c! Z) b
  784.                 dwProgramState=AP_CONNECT;
    ' ^: T* }3 A% m3 X
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ P# j- A6 F  L
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" ]( S1 v: f. v9 Z) g
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ P, G! P! I: a; H+ d

  788. + H6 S& L) M+ G4 h6 a& `
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 `  L# a8 n0 @! h6 M) I$ a
  790.                 unlink(".\\DownLoad\\checkversion.txt");& [; Z+ v- U2 I; F% q) `
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    , s$ j4 V- B4 {4 R5 T
  792.                 {) y  V/ h5 i  O  ~0 c. v' V
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    # E9 ]! ], ?0 E6 R
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    7 k. L, h5 _- m0 u$ J& m2 I
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");* ^, K: V( X8 j+ M: {
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . B, V" f1 y2 ~% V

  797. $ j) c: z; X1 A' ^. A) P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# X8 t$ b; G$ t1 i+ Y+ ?
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : N( M3 y* @, Q: [8 }
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 E$ Q' l/ z' w$ \
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      D# y" C# k- R2 \: Y
  802.                 }9 ?( D8 N  w' K6 d+ v$ W- }: N
  803.                 dwStartUpSteps=5;
    ; J+ k# G8 }* O
  804.               }
    - @- Z: Q% d) `5 _# ?
  805.             }
    ( W4 u- D9 `/ Q4 I: m" c
  806.             else
    8 ^  P; s; d/ E/ m6 Z& g$ H
  807.             {
    ) C  x: Y$ S6 s) r$ _) g
  808.               unlink(".\\DownLoad\\checkversion.txt");$ I4 ~- {( W* f8 N0 a4 q
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");6 J, G# V2 C% p1 c) M+ X+ L
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ' T2 c! G0 R3 Q% w1 N
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, \: r3 G" c& q
  812. * p# w7 ~4 B5 y* E: {
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 V& n8 a( {2 y: y$ t/ F. f
  814.               dwStartUpSteps=99;
    ( _/ J6 t& w  l" h( Y" |
  815.               bFinishUpdated=TRUE;, _. j- T! M( h- M- w3 n
  816.               bCanUpdate=TRUE;$ n' Y! v# H  ?2 }! O7 E, R
  817.             }3 x% F( _0 a- _5 H% J
  818.           }/ `% o0 |* n" k
  819.           else5 T: N# R, ^' T2 i$ k5 M
  820.           {* o( t+ K* r+ h
  821.             if(!Dn.Connected())
    4 T' U* w2 c4 Z1 A' W" v6 X, O
  822.             {
    % i# b9 f1 G& t/ u& b/ U. |
  823.               bFirstUpdate=TRUE;
    : e9 J2 V5 Z8 d6 u# d6 K
  824.               dwTotalFiles=1;# s  k% m2 y* x3 `
  825.               dwDownLoaded=0;* n! P' J. h0 }2 s  r" ]1 |
  826.               bSilentStep=FALSE;
    : p* w5 L8 y# |8 ^, \9 m
  827.               bCompressed=TRUE;
    ( @9 o. q+ d! y3 X* [0 ^
  828.               strExtLocal=".\\DownLoad\";
    - l/ o# T0 Q& \) z7 w( @7 j% E
  829.               strFullName="update.txt";
    1 v$ i9 `- j9 V3 R- p. J& i
  830.               dwProgramState=AP_CONNECT;8 o' F: D6 K+ F, V/ Z% m8 B
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    0 a5 ^4 ~' I- V/ q5 L9 n
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    # M$ I& Q1 o3 Z# i+ y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");4 w4 s3 E) T2 L1 t  `
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& z/ }! v) Z" ]0 o* u' r% \
  835.               unlink(".\\DownLoad\\checkversion.txt");
      X1 ^  C* F6 E9 ]3 x+ m3 f
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . ]. ^- [  a3 ~6 p. G
  837.               {
    - \* s4 S5 \- W  D7 }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" n  Q( p3 S# Y7 @
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( S" m/ i' [# O
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");* r- `: @. o5 C
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & G0 l& `, A6 C' Y5 J' b
  842.                 1 {! _& u4 O- \) H! h' z6 v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ' F6 K7 X; Y1 P' F- F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " \8 g: D9 w9 @) m0 k6 c
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 y* i- r  Z/ T; R6 j& T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 |4 m3 g5 _6 J( |7 I/ o2 J0 O0 o& M
  847.               }
    % l/ K- Y, }/ ~9 d
  848.               dwStartUpSteps=5;+ S; |+ L! y$ N+ ?* S
  849.             }
    ' p; H# c9 {* o! L
  850.           }3 u5 s; ]: m6 J4 [# o' V/ f6 B
  851.         }
    3 j, w. J; |( v7 |" U- x+ f( L9 _
  852.         else
    9 ^. F* Y7 @& d- f. x4 o  V
  853.         {$ M9 |6 Y* _% @- w9 b3 q
  854.           dwStartUpSteps=3;" }) y/ X1 A/ d) j% [' L$ {& j
  855.         }7 h4 i$ D* e* R' b  D* r! ~
  856.       }! _# j! v+ S) B3 J% J
  857.       break;
    + a( C7 M: }' m* o. y* i  |* e
  858.     case 5:
    7 H2 _, I" \  z8 G
  859.       {6 ~5 t1 F1 W# E) O$ s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). t5 }) X9 C! t+ q
  861.         {! [& N, F( q9 O
  862.           int opt_overwrite=1;$ [* p4 }; u. N: |, k! C
  863.           int opt_do_extract_withoutpath=0;  I# |9 Y8 Z# t' l" |6 l" w+ a
  864.           unzFile uf=NULL;9 x* t7 |9 m# X4 B8 r

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

. e" L" ~( e3 f/ @" f- j: s+ u) a

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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