找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
- a* e& p. C3 c* V
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' U# m6 h. \. u6 m# X
  2. //
    ( f+ j& i0 O" R  T

  3. ( h1 P1 c" k6 y5 K6 G( l9 U
  4. #include "stdafx.h"7 m& f7 v7 M7 ?4 A
  5. , I% X: C  ?  ~
  6. //#define UNICODE3 [; l8 b* {. f: S, h7 V
  7. //#include <gdiplus.h>4 T  ~- M$ F9 G% r' F' l
  8. //using namespace Gdiplus;
    3 u8 P1 K. ]' ]' `$ R
  9. % X3 s1 W- j4 k0 y* k
  10. #include "RevApp.h"
    $ X. b7 r: A1 n8 Q: j  p
  11. #include "RevAppDlg.h"
    ; \! B/ v) @. j) E$ z, \! g1 i

  12. - A% r+ ]* R6 @
  13. #pragma warning(disable:4786)
    0 i3 N: T$ R: e$ o2 Y
  14. #include <map>: Q7 N$ K- R& `
  15. #include <list>
    8 W6 h/ e% ^! `2 d
  16. #include <direct.h>  {$ z# C& f5 O$ z' e4 h6 E8 p
  17. ' C& F( Z$ f+ c1 y3 E
  18. #ifdef _DEBUG/ b& z' G! I  N' E% q4 h: M: T
  19. #define new DEBUG_NEW
    , e% a' g, I; s: ?* J' f9 B
  20. #undef THIS_FILE$ }0 r8 ^! C0 o$ ^& h# g: ~8 ~/ m# F
  21. static char THIS_FILE[] = __FILE__;' K7 B/ H+ ?8 V8 S$ N( l
  22. #endif
    * U! k/ `0 {& a) C
  23. #include "SkinResDef.h"( H4 x' n/ ]5 U$ x+ D, J+ L
  24. #include "ChangeBG.h"
    6 ~0 G+ Q1 K* L. N7 W  m
  25. #include "AFXINET.H"9 v; ~6 N5 G  v! G3 f, D

  26. 6 j4 X6 f$ R7 Y/ C1 n4 w
  27. #define TRADITIONAL_CHINESE 0' V' d: u4 e% ?6 J( _+ {- ]$ F
  28. #define SIMPLIFY_CHINESE 1
    8 H- D& J9 L' Y  l# O  ^
  29. #define ENGLISH 26 j0 @# v9 C9 u9 F' G) a/ Z
  30. int m_iLanguage = ENGLISH;8 j. ?: ~1 h& b. i0 H, E* ?; R
  31. /////////////////////////////////////////////////////////////////////////////
    6 K% D: Y; |3 J9 W
  32. // CRevAppApp$ Q$ H+ N/ a+ E5 C4 @. X7 M" [

  33. 3 e# b6 _% N0 G% `* L  V$ ~  K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)" {2 q. K5 Q1 S/ K; F) Q
  35.         //{{AFX_MSG_MAP(CRevAppApp). W) H* C6 D2 X8 R& ?8 C% n
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.6 Z+ r4 @( E% U! v
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 |7 |1 t' h" Y3 K
  38.         //}}AFX_MSG' c3 O( C3 |& N5 z: M" Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 }5 A9 p/ z3 R
  40. END_MESSAGE_MAP()
    + I5 a. d5 W0 ]+ l! s5 V
  41. ! ^# s; h& G5 v) H9 Y% T
  42. /////////////////////////////////////////////////////////////////////////////+ @/ N0 ]& m; F( E+ ~2 R/ g! ?  s
  43. // CRevAppApp construction( [9 Y  E7 z* w( C8 J
  44. 1 E. C9 k; [, I9 [
  45. CRevAppApp::CRevAppApp()
      B- @3 ~* T7 l# o) ?  d* E
  46. {
    4 l0 N' @! d; G1 Y- _" q
  47.         // TODO: add construction code here,& S4 g* x: F* S
  48.         // Place all significant initialization in InitInstance8 i2 F! C* m- R; S0 `
  49.   bDisplayIsBig5=FALSE;6 L; ]9 X* m/ i6 F: U6 e, K
  50.   bRestartUpdater=FALSE;5 q/ p# }$ I  B. J. h) d( T9 i) \
  51.   bFinishUpdated=FALSE;
    9 f6 o9 S0 Q  V/ Y- M
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    " c9 N7 p" d1 |6 Q6 g! ?
  53.   InitChangeDataBig52GBKS();
    4 @$ E2 p, Q9 W' J3 Z5 ~' p7 V" h
  54.   InitChangeDataGBKS2Big5();
    6 m7 W! K5 Q* v4 l+ e
  55.         //' C. {% b; ~' k1 K  o7 `
  56.         bClickRunExe = FALSE;
    ' a6 e  g, ]* B9 g" {. C" w: [
  57.         //  {4 q+ M# R1 g# @
  58. }, d: T* P0 _* E% {. n2 z8 Z5 q; Q
  59. 2 F+ W) x" t" p$ C9 E
  60. CRevAppApp::~CRevAppApp()
    6 R* B6 h9 s& e5 B7 Z$ p
  61. {' |  l9 }* Q5 y( o3 i
  62.         // TODO: add construction code here,
    # Q! e/ D; }# \; w8 I" Y% I
  63.         // Place all significant initialization in InitInstance) G5 U" N1 H, ~, c
  64.   EndChangeData();8 J& E' X( ~) M7 x9 v
  65. }  S* P- N* q7 x; ?& H
  66. 4 d* C9 y4 _* K1 t" h& m
  67. /////////////////////////////////////////////////////////////////////////////
    ! W* t* B# g) k/ ]
  68. // The one and only CRevAppApp object
    " f$ {: {( U2 i/ C# ^# v* t# X* r
  69. 6 F5 G, K. h  L% d4 E: r; y  [
  70. CRevAppApp theApp;
    ! z3 v- M2 i% g
  71. 1 h4 h, ^8 k( ^0 }
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName). l! U& T: x" Y& S
  73. {/ |' }. t7 F; ~7 x7 `" [7 w
  74.   int iEOF=0;
    & e% X9 t( y4 p2 |7 p% \2 r
  75.   char szTempName[MAX_PATH];. P# s6 S* A# {% T: |
  76.   *szFileName=0;# N- g5 N+ Y, M
  77.   iEOF=fscanf(fp,"%s",szTempName);4 b5 T# u4 x, x
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 ~2 u' w3 q, k8 {
  79.   {
    6 w: z$ f8 w5 E" @  j$ g# _
  80.     strcpy(szFileName,&szTempName[1]);% ~, |: o$ K9 q% \2 u
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF), Q" `( U3 |3 g8 K1 F+ o
  82.     {' M9 |. B' p* U
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! }% S# u9 S1 b$ t, Z; `4 f' ^7 K
  84.       strcat(szFileName," ");4 F+ ^7 K2 Y: M* ^
  85.       strcat(szFileName,szTempName);. D. k0 K! S6 U7 ^
  86.     }
    6 D$ h& R: m) e* V
  87.     if(strlen(szFileName)>=1)& ~$ o, J8 ?+ Q0 ]
  88.     {1 n& M" U% r' ]; o
  89.       szFileName[strlen(szFileName)-1]=0;
    ( c  C9 z! a1 ?
  90.     }2 L( s1 L+ {4 e8 h' z% M
  91.   }
    ( r: d5 S  r0 r* A- v
  92.   return szFileName;+ ]# n2 k0 b! D7 Z# d
  93. }
    9 _" _, }: g2 T5 k4 Z0 z
  94. 2 ]- o* U; \9 g
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    8 a- [$ X. J3 ]: o6 U  B
  96. {6 t. x! x. b- b$ X
  97.   FILE *fp;8 B5 x) @" \1 p) h$ Y
  98.   char *key=NULL;
    3 `0 d7 a$ ^$ \: w, P
  99.   char version[MAX_PATH];
    $ V7 [4 z6 ^0 x/ `
  100.   LPUPDATEFILE file,olds;
    % ~7 ^! P. I0 Q0 j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;. t! q; R: ^1 S/ T5 k
  102. # s4 r) S( x- ^; B
  103.   UpdateList.clear();
    $ R) m7 {; s; q* b9 E! q
  104.   UpdateFile.clear();
    ' w7 G0 D6 v8 K
  105.   if(GetFileAttributes(filename)==-1) return false;# \6 C8 j( [1 Y# k
  106.   if(!(fp=fopen(filename,"r"))) return false;
    + v4 s  N& p# e# }
  107.   fscanf(fp,"%s",version);# `+ s/ c( i( }9 v/ m9 t& Y  y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ' b1 u4 z6 G  W  E9 t
  109.   while(fscanf(fp,"%s",version)!=EOF)0 W" X" e, Q% x3 D; `( ~
  110.   {5 C$ v6 p& g1 |  v
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : q) g) Y  ]. Z" `2 a4 U
  112.     fscanf(fp,"%s",file->path);  l1 s/ j1 y2 r& k8 S
  113.     ReadFileNames(fp,file->file);
    " L' o* K7 ~. j$ z2 L
  114.     strcpy(file->full,".");
    " s9 J) J8 O; G5 J$ |* d
  115.     strcat(file->full,file->path);  w, C3 N7 P& N/ q1 B+ R# x. ~
  116.     strcat(file->full,file->file);- I5 c. N, X0 @$ C8 {9 m- x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    * T% w# M! }) Z! q
  118.     {
    % a: e1 u' |1 ?* J  }  v7 ?7 W
  119.       file->vers=(float)atof(version);* J- L9 D1 i7 C* s% A6 y9 e% G  B6 `
  120.       UpdateList.push_back(file->full);
    3 D9 l7 B3 ?- w; Q* `. ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    + P# y8 u$ u7 `8 {% j
  122.     }/ m% ~7 j9 o6 T
  123.     else
    1 ^7 |  r; |* j: w
  124.     {
    % R! _% r1 W2 ~' v, `
  125.       olds=(*p).second;9 |7 N1 B. @  U7 X" r, }, Z) y
  126.       if(olds->vers<(float)atof(version))
    5 I; |6 g/ N! e$ P; R  }5 B7 w3 t' P
  127.       {/ u0 n+ T$ I- X5 l" Y+ F
  128.         olds->vers=(float)atof(version);
      V* n; @- J# Z, r" v- f; R. q) C  a
  129.       }
    ! j! V2 m: l3 i6 ~+ K; f1 |! E  j+ A
  130.       free(file);
      G" {6 B# B# J
  131.     }
    0 @4 N0 i8 u4 b$ n, A( m7 }8 ^& G4 y
  132.   }
    ; p1 z' f6 ]: b9 o) r
  133.   fclose(fp);' Q; k9 w) r' i( j$ w5 q* Z
  134.   return true;0 n5 `( U% G; E% ]" ^
  135. }
    0 y6 d" }1 ~3 m# k

  136. 2 W0 l* l8 d* M5 v) O1 P2 v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ z2 y8 V! ?$ r& D
  138. {( u6 u7 Z( ~, C! R# X/ x
  139.   TCHAR  szFull[MAX_PATH];
    ) c! N" [0 v  u. g+ x. Z
  140.   TCHAR *token,*inter;! g& p5 C7 R6 V5 [) |! s
  141.   *szPath=0;8 n: Y7 s0 r0 q3 |( Y$ ?
  142.   strcpy(szFull,szFullPath);; w2 T- y* v: T
  143.   token=strtok(szFull,"\\/");" L' L  {8 j3 ^" T- k6 J+ }
  144.   inter=token;% }; W) [2 ~4 o- j) j! y
  145.   while(token=strtok(NULL,"\\/"))
    2 {9 k7 |; e2 u3 o  J; M, \
  146.   {
    ( x7 B! j7 k7 a! Q
  147.     strcat(szPath,inter);
    / X3 f, V8 z. W* l! s- C/ i$ g
  148.     strcat(szPath,"\");
    ( p. d5 T; l! z" U7 A
  149.     inter=token;4 [; M$ O; M8 Z5 C) m3 F
  150.   }
    / D; d! `' G7 F& e: [  q+ t% h5 q: V
  151.   return strlen(szPath);6 R3 U: ]6 j  T# h3 \9 [
  152. }/ M1 Y3 _; k! ]. c' t. Q0 x0 ?

  153. ' t, o4 s. B* B. [7 Q. U! p
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    # U- A% P- r. `, N! P" i3 r
  155. {
    5 [* d& G! E2 y1 v: I  |) ?
  156.   DWORD attrib=GetFileAttributes(Target);
    ( c. j- ^" K8 o7 I$ e- F% D/ i& r5 p8 n
  157.   if(attrib!=-1)
    : V& C& S6 r, |7 C/ u$ D, R
  158.   {
    9 l) w( c9 m8 ^7 `7 V" M% a' e
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    + e/ r* r1 O* {# U! S/ g* L
  160.     {
    % A& W" z3 p+ Y; m; _7 }/ y3 X
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);( }1 d. g3 U5 P& w$ J1 k$ b. v
  162.       SetFileAttributes(Target,attrib);+ C5 p! }. W& P0 B" P. r$ a% `
  163.     }
    4 D, z% \8 p$ _+ F8 g$ o
  164.   }
    8 Q3 g5 J0 J2 A+ c+ _& c
  165.   CopyFile(Source,Target,Erase);
    2 k+ T0 |) D0 v# C- }
  166. }0 `+ i) P4 k4 M( j* g

  167. % z6 a9 \3 I9 ~5 |- m6 T: a. G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ l. I# h. X1 z' l: J& w
  169. {& i- c8 |' C6 ?  D6 {% v. O8 f
  170.      FILE *fp;
    ) H/ [2 {4 w% r& y- _  i: l
  171.      char  szBuffer[8192];
    ; j  N- B3 U3 }" c9 t
  172.   va_list  argptr;; U0 S$ ^1 B0 X) z

  173. " ^% I  a+ B# ?4 I* }  F: I
  174.         va_start(argptr,message);
    . L7 ?6 j8 E' |3 d% K
  175.         vsprintf(szBuffer,message,argptr);9 s7 |" c# G& ~; m- \. X/ G, F0 p  j
  176.         va_end(argptr);% B8 j: l4 E2 J) ~, E( Q
  177.   fp=fopen(FileName,"a");
    8 u! r" P, W% V- Y! D4 c' K
  178.   if(fp)% x) g2 C; @, ]. p& k
  179.   {' M& p1 x, f* [
  180.     fprintf(fp,szBuffer);0 k5 X1 L2 y/ b/ r/ x! h% l) S
  181.     fclose(fp);
    , M6 t+ a. q& v! r. f( B" s- k
  182.           _flushall();
    * M6 b) S" M$ k" k1 d. A
  183.   }3 w  T+ D* B- C) n
  184. }- m* T" T' z$ O1 d

  185. , P$ d$ X1 U' U+ H0 [
  186. BOOL CRevAppApp::Fclearf(char *FileName)" h. o9 J1 h* V1 p
  187. {  \5 X2 k5 ]8 ?( M& `% u/ w
  188.      FILE *fp;
    1 {1 {( o! n3 s6 |
  189.     DWORD  attrib;4 k2 A9 o: D& T
  190.   attrib=GetFileAttributes(FileName);
    - f1 H& U0 y. F' X6 o) T! J: z! T
  191.   if(attrib!=-1)* O, N6 S" g5 T2 p% ]) X) |, U& n
  192.   {, A% Y3 c/ l9 K1 R
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    # y+ F! k6 t: m' Z3 ]5 K" `
  194.     if(!SetFileAttributes(FileName,attrib))
    ! h' l1 @! u6 u$ q; N" x
  195.     {
    - j3 D- K+ Y. l- r7 B8 ^! Q
  196.       return FALSE;9 O. ~- `, L+ X, f, n7 C
  197.     }
    ) B/ {* r. E; m
  198.   }$ z! c) Q8 _+ o# @8 j% O/ k
  199.   fp=fopen(FileName,"wb");7 Y; d$ ?4 _/ c+ ?
  200.   if(fp)8 D( s$ J+ L- ~1 D% y) _0 J
  201.   {% F0 t  `+ {- B/ _! I4 e- ~
  202.     fclose(fp);& q  g% G6 u4 v: s, Y- D4 R
  203.   }
    / M0 B- J% m: [# E) ]; K- m7 n
  204.   return TRUE;8 w8 H3 k$ p! ^% j
  205. }
    ! g) W5 }2 F' P. F9 Q2 m% E
  206. $ B  Y# _( Z" ~' n' G' Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' c8 @5 [& I4 k: f
  208. {
    % u& [; v% }4 {7 W% h9 ?8 ^. _) H
  209.   char filename[MAX_PATH];  N" f& p( V; y
  210.   LPUPDATEFILE file,olds;
    7 Q" V1 ~  c( o+ d3 V! x& l
  211.   std::map<int,CString>::iterator i;
    " @/ e) u2 c; w! ?# G/ }) q
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 ?2 j! ^! V+ v
  213.   std::list<CString>::iterator l;
    8 k  W/ y1 w7 ~* U) z

  214. 3 p8 N, l) e  h5 I# G  [8 R9 k
  215.   if(bFirstUpdate)3 B) K; A1 a, P
  216.   {
    7 K! R4 s" V- s( F
  217.     dwCurrFile=0;
    1 E1 z# M. e% G3 L2 i1 U  C# R/ B3 z
  218.     bFirstUpdate=FALSE;5 d3 G1 V1 D: z+ f
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & |3 w& v; l: E- p" f
  220.     {
    2 ^5 }" B# q% c- @0 Z
  221.       dwTotalFiles=UpdateLocal.size();
    # b* i) _8 v- V1 j$ N
  222.       dwDownLoaded=0;
    3 M* w3 ^6 a0 W& C; G5 L
  223.       bSilentStep=FALSE;3 P* |8 a" ?# U6 ?, y1 L6 }
  224.       bCompressed=TRUE;
    / U- ^% k9 N1 S% x. z
  225.       strExtLocal.Empty();
    : i) f6 Z5 b, A' l( h, j
  226.       strFullName=(*i).second;
    $ g/ ^% k7 T& m
  227.       dwProgramState=AP_CONNECT;
    . S* u$ p2 r4 K1 g( `9 p* g1 e
  228.       return TRUE;
    6 }2 G1 l9 T6 l
  229.     }& j3 g' `# Y2 U- W
  230.   }
    0 h; Z, X) v  Y# t0 C
  231.   else if(bRestartUpdater==FALSE)
    ) i, @* {" `0 v7 ?
  232.   {
    8 v7 e) P$ i6 t. T9 @' y) a. Y( p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 q1 `' T8 x& c( k% M% @# ~2 }
  234.     {
    , @) x. e) B8 Y
  235.       file=(*p).second;7 [& j) e' D8 T  t, e
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + t  I& W8 |8 b; G
  237.       {
    ( x& _$ Q) f- g" T
  238.         olds=(*p).second;; |, ]5 ]0 C9 n) D4 K: u' g; z( h
  239.         olds->vers=file->vers;
    4 D" b) u# _9 i7 Y( L
  240.       }( T& a( S. f# C) R
  241.       else
    , ~) {* L! D, [$ X0 ]# k4 u
  242.       {
    " t, c2 O- r/ U$ y: O+ x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 z3 X, {$ a! C. y* b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  F  m2 W) `; }, w" Z  `+ H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));. @! v6 ]3 O( W6 r& l
  246.       }
    % Z, }, X' \2 s4 |" S! Y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! `& e$ P# H. v
  248.       sprintf(filename,"(%s)",file->file);
    3 Y: d9 M# ]& n) L6 Y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) v) H+ G6 U6 Z& d" X$ ^5 Q5 w
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    / M9 t8 c5 v3 Q8 s
  251.     }
    4 w7 Z" x* n# Y3 n: |- o3 @
  252.     dwCurrFile++;
    7 P2 R, s! i# {/ h& V1 e
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ) B' ^! d8 A3 C  ^
  254.     {1 A, g  K2 i& I8 |' ~% Z9 _
  255.       bSilentStep=FALSE;
    / [/ E% a" f9 o0 C( f
  256.       bCompressed=TRUE;- v1 b$ O, T. ?
  257.       strExtLocal.Empty();3 K: e+ H7 d" V9 V; R# K
  258.       strFullName=(*i).second;$ T+ U+ R" \1 h, O! r
  259.       dwProgramState=AP_CONNECT;2 S1 i* l, X2 J2 g5 T6 s! N
  260.       return TRUE;2 q. s' V2 x) _/ _: O: f% h
  261.     }- W% d+ g0 M, ^+ [+ C! j
  262.     if(!bRestartUpdater)
    5 F& M8 ^2 w- `* e( I( b: C
  263.     {* a% W( Q! `  s4 B, |# u
  264.       int iCurrSize,iFileSize;
    9 @3 G9 @( u8 y# B: B' C) G
  265.       iCurrSize=0;3 b. d$ R  y" r) J
  266.       iFileSize=UpdateList2.size();
    0 @% t9 E/ S) O6 q/ {* B
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 e* v1 o1 j$ }. b6 |" @7 G
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");% y- _# I1 V8 s" o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( |" e0 D, q' ?& Y: ?
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 e' u$ }& E" r9 u
  271.       Fclearf(".\\update.dat");
    ' L, h" w* {1 L/ u* \
  272.       Fprintf(".\\update.dat","Bloodyf\n");' `3 X, P9 n' w5 W- ]6 {  g* }) f
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
      L1 Y- z' B0 @* c* Z
  274.       {
    ( ~5 `0 {# O! M# C
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()); D2 v" x1 ~& |( k
  276.         {4 F! R! Y  l3 K9 v& g* A
  277.           file=(*p).second;. c- n: L/ U; P3 H; i$ G2 i
  278.           sprintf(filename,"(%s)",file->file);9 U, ?1 O) s- h" J5 f. q7 T5 w& h
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & q1 N+ U7 C8 a! M( K* R, v/ b
  280.           iCurrSize++;  B6 U+ T" I- ^  L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    9 s8 D, M4 B/ H7 A* s2 J
  282.         }, v" V; t8 z/ S
  283.       }
    2 t7 {/ n& t0 n2 g3 s6 m- M
  284.       unlink(".\\update.txt");
    $ ~5 G0 t9 U% e: d. U0 {
  285.       unlink(".\\update.tmp");9 _2 s7 u. V0 m+ l& M
  286.       Fclearf(".\\checkversion.dat");
    0 K3 O7 k2 N9 C: |6 l% ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ! b" O. F# m, m- D) {  I3 h7 \. H( u' E
  288.       if(UpdateLocal.size())
    : b/ Q' Z$ c: L3 M/ x9 L
  289.       {
    ' u) X9 u+ R" N5 |
  290.         UpdateLocal.clear();+ Q, v. e( e# Q7 g+ @+ H5 b
  291.       }
    3 ?. z  @6 v) i+ v4 t7 {2 ?
  292.       if(UpdateFile3.size())% X" ~# T" T% `/ P9 t1 V9 U
  293.       {
    4 J: N- C! R0 E5 O1 U
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  p/ l! c" U4 K. a& E% K
  295.         {, ]/ z) @% n1 V6 e7 ^2 p
  296.           file=(*p).second;8 Q4 B7 g& c! B' b9 Z! M
  297.           free(file);6 h$ k9 Y- x8 o
  298.         }
    ! P) Q4 Z+ ^5 w
  299.         UpdateFile3.clear();
    6 z0 u- N  r: A9 m. Z9 j
  300.         UpdateList3.clear();
    5 O8 O5 K, F# Y* G
  301.       }
      ?( E. q5 f" s& H+ r
  302.       if(UpdateFile2.size())
    0 G. ]" {; x( [5 \" B+ d9 M# m
  303.       {
    $ p9 ~* I4 E% h) r3 O# M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 m  H* p$ ~& p
  305.         {1 G4 i% F! `5 ~. V: e
  306.           file=(*p).second;) I% A; S6 `+ Y* N' S
  307.           free(file);- i/ z* x' r/ k5 w- I
  308.         }
    3 R- x+ c- S9 I, [/ A
  309.         UpdateFile2.clear();
    * ]% A6 i+ _  h7 g% @) e+ `- a
  310.         UpdateList2.clear();
    / @& _6 s* t# u  D0 y
  311.       }! h- ]2 D! Q, j( E. X9 r8 c6 d7 ]
  312.       if(UpdateFile1.size())
    $ I* k9 g7 ]) r0 |, k6 O; W
  313.       {- M) n# D1 N" W' @/ U
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ l2 n  v/ x% N: {0 f$ N
  315.         {
    & [3 m" ^1 h: l/ D2 I& a, r
  316.           file=(*p).second;1 d0 p: |# Z3 V0 N4 w- K  Y' L# ^4 f( L
  317.           free(file);
    % j: D  e  w% L7 j
  318.         }
    + l: m" D3 d6 t( u0 p$ P* p& Y
  319.         UpdateFile1.clear();
    5 j" [* }6 x( O  _# F
  320.         UpdateList1.clear();
    & U7 Q. f6 K+ N9 v5 ~' ?
  321.       }
    / Z, g* X/ A& x# J  |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & M; M5 d% T4 |; Y7 V
  323.     }
    ( F0 U' ]7 \; P$ D8 k0 a5 U
  324.   }
    $ E3 }4 c' X7 G+ F, N$ r3 q0 ~0 J- j
  325.   return FALSE;
    / j( I) p* B1 r. {
  326. }
    % t- c! T5 H+ ~, _$ A  b; O1 Z

  327. # n* V# h1 ]; U( o, K$ Q
  328. void CRevAppApp::ClearAll(void)
    8 [. O" U5 s  X6 o7 s
  329. {
    : G5 t5 J, x# p) n& d
  330.   LPUPDATEFILE file;
    9 a1 f% D$ I& i9 X2 b/ T
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    8 e0 N% x. }) f5 }) K0 r2 {2 i/ X7 i
  332. 8 L7 b+ S/ ^' f7 h7 E
  333.   if(UpdateLocal.size())
    0 A# B# w  ]* a0 F" ]( H
  334.   {2 I; v+ n. }5 w% d+ |
  335.     UpdateLocal.clear();
    + L! c; r8 o9 A
  336.   }
    * s, {9 j" Y+ {! d* d7 u- |
  337.   if(UpdateFile3.size())" B4 c* y& f+ c- K; N5 F+ f
  338.   {
    & q  c  U( b& S7 m
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ P+ {4 _) x# h  d4 z3 O  G; u/ t
  340.     {
    # j+ @9 b9 ]- Z+ j. N3 T
  341.       file=(*p).second;- q0 s6 r4 b! l. l
  342.       free(file);
    / Y- y1 h6 X' X! P  V& S7 ^% @6 m: [
  343.     }; F9 z+ K( `9 r7 c& w& w
  344.     UpdateFile3.clear();
    - @/ s6 K  Z) @/ ?
  345.     UpdateList3.clear();5 u# e. ?+ |5 U$ I& U
  346.   }
    7 P  C5 _" p  Q- S
  347.   if(UpdateFile2.size())9 g! P+ H7 V7 d, D# }  H0 Q
  348.   {
    ! ~! u+ e1 k/ f
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  G$ H" w8 Q! `" v! a9 z; v
  350.     {
    % a- ]5 X, h0 {) X
  351.       file=(*p).second;
    3 x# Y  d; T7 t% y
  352.       free(file);, B+ K: ]8 n+ E
  353.     }- N- p/ P5 ?9 a0 `9 V
  354.     UpdateFile2.clear();
    ; l3 U/ e5 T1 z% d6 K
  355.     UpdateList2.clear();
    1 Y; ?$ p) `& @3 s; P' ^
  356.   }
    * `' \8 |9 T# X. H5 V% B
  357.   if(UpdateFile1.size())
    ; a! E3 ?; P  s0 S/ Y% G
  358.   {& y% P7 N4 O' I5 M% k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)" ~9 y) y0 c9 n5 k, f6 b" H; l; h
  360.     {' E7 [) u4 o- r  q/ a/ f
  361.       file=(*p).second;" @7 b3 u2 B. `5 _) L
  362.       free(file);: Y2 u% L3 z2 e5 I2 I) ~
  363.     }
    , i9 b: Q# O& g' b
  364.     UpdateFile1.clear();
    3 |2 W/ q: [* [* U" _7 w
  365.     UpdateList1.clear();% T: ?1 G. D( A' t; V
  366.   }: ^" O' ]! L. x8 J7 L3 q
  367. }  
    0 X7 Z' Z; t5 a( ~* N$ @; g
  368.   
    . M, J- r4 S. v: M; [) L2 [0 k" v/ O
  369. BOOL CRevAppApp::CheckLocalVersion(void)1 H  A, u3 O% r+ [7 I( d' h
  370. {# ?0 B) I! N" D: R; }
  371.   int c;
    5 @( O& z6 c/ q" H* m. `
  372.   LPUPDATEFILE file1,file2;+ e% Q; G5 b( S$ J" R: U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . B- Y2 X) l2 N2 ]% e
  374.   std::list<CString>::iterator l;
    / b2 g) g7 K& r# @

  375. ; F  B# T) y3 p- O& i
  376.   UpdateLocal.clear();
    2 P; J5 [! q! Q" ]2 e' T
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    : V' _/ X4 q5 B2 E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * L8 i& w, C6 o0 Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 G' C1 _; x, ~* j5 x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    3 J0 S* a# g) I$ `/ d* l8 [
  381.   if(UpdateFile3.size())0 C7 J- o/ P6 N# c4 k* ?! S! R
  382.   {
    $ R1 L" {  ~# @! U
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++): n) W( k4 C) m# N3 P
  384.     {0 E5 b7 l% E* n8 u% K
  385.       file2=(LPUPDATEFILE)(*i).second;+ T0 R$ |' ?* Y( [& H5 H
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 N. c7 [8 {2 L: `, z8 ~
  387.       {! z' H0 E: J; v8 K0 o
  388.         file1=(LPUPDATEFILE)(*p).second;; D9 O: K3 _# I- Q
  389.         file1->vers=file2->vers;7 j, c) @; t" L3 t7 ^# U
  390.       }+ y" A* X5 v, t: J; B7 s' \1 d
  391.       else
    2 Q( u$ u, V- L) f; \5 ?( t
  392.       {* R1 R1 t# m2 T/ e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));5 v( t: C, [' h
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ! Q! _5 t' j/ {
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    & u( T$ w6 F. Q% I+ [: m
  396.       }; B. ~" n  l4 m4 Y, V$ e
  397.     }
    0 ]8 g. n6 x( n% o. q8 J/ ?
  398.   }) `( y: U& P+ H7 z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); U8 L5 t' v7 V" I$ ]
  400.   {( [" R+ c* t- Y  q+ s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 Z% S8 z' l0 v1 y# l
  402.     {
    9 ?* y* M6 y  i: W" B
  403.       file2=(LPUPDATEFILE)(*i).second;2 Q/ Z, A% ]; V6 d
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# m' n: B) h& C: ^# R
  405.       {1 d; j9 v/ N# }# t% V4 c2 B! E
  406.         file1=(LPUPDATEFILE)(*p).second;7 _$ |1 p3 Z6 \& k( \
  407.         if(file1->vers!=file2->vers)) j! n! ]- W  ?5 o" d: A& w' s+ i
  408.         {! o* ^8 K  {" J: v3 }; }' U
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));% N( A, O- P0 p1 ]
  410.           c++;
    ( n1 h, M: `; m, `
  411.         }% W* A- P# M* X. G8 T) [$ U* d6 r# F: L: J
  412.       }3 {( L" [9 N  J. Z
  413.       else
    ' @5 ?$ o7 @/ F
  414.       {
    & T! h9 n1 H3 X' B# _$ t
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * c3 f7 C( I+ v' m9 f2 M
  416.         c++;
    * d% y  Q! V/ ^0 A+ b5 G7 ~8 h
  417.       }
    # d& N7 v  r% B) t* e$ h  V
  418.     }
    0 }+ {5 T, ]" A9 H  O3 v
  419.   }8 Y  G$ h( M" E" ?' t/ A  g
  420.   unlink(".\\DownLoad\\update.txt");
      W* b5 S" Y. U6 M
  421.   if(UpdateLocal.size()) return TRUE;5 a/ b4 C; e! v1 ]0 R2 N6 C1 a
  422.   else                   return FALSE;  s  P. j" l5 N$ h5 P! r
  423. }
    ) b8 f& \: Y# e7 B

  424. : j( }5 h; ~, |2 A
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"! E1 A  c/ m3 z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn", A0 D5 ]$ M, k, E: V- K
  427. 3 z# j+ h- w/ [$ \: [* q+ }  S
  428. ' l$ ]% g; O0 _, n) ^7 w- B

  429. 7 d1 H3 V  g  z9 I/ R# L3 H* t
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): ]8 S- k; q* h, I8 R. J9 W
  431. {6 s- D! Q7 u6 o- V& c; A* V
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;' P  ^! A# I9 R/ V  ?$ C* {: f
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( ]% x9 Q$ P) U) X
  434.   {
    8 N4 A, @2 F9 |
  435.     char szLanguage[50];% k- U* K' S) |& H9 R- T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      w9 U( h! l8 E& u
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ) d. H0 p. K/ e9 `  l
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, n4 s9 s( `: r- w( n5 e; E2 s
  439.     else                                   m_iLanguage=ENGLISH;
    & o1 T" `4 j2 ^, r( m2 l; U
  440.     char szRegister[100];+ F8 w2 q) f+ s2 U: h0 G) ?
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + u- W4 M) V5 C- w
  442.     strRegsName=szRegister;
    6 T# Y2 e# |0 y# B; [+ _( k
  443.     char szPatchURL[100];+ f$ c4 x  P' q. c% r
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + Z% c. ^2 m! M/ e, C- g$ k" j
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# w* C# ~' T# E) |+ d7 L" L
  446.   }
    ; u6 d- H, G! t2 R2 |7 F/ P  [
  447.   else
    6 N$ x, \0 j! T
  448.   {
    4 I& u9 P/ V1 N* S, a
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);* U- q$ v5 B% M0 H8 ^
  450.     strRegsName=DEFAULT_REG_URL;
    % w/ N; ~; @0 {% q
  451.   }
      m# A& g7 W1 N2 C8 B" @# r
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 l% a1 q- z3 p9 m
  453.   {
    3 P6 v. d( I1 N1 R8 H7 i) Z' Y% v% M
  454.     char szIP[50];
    7 s  ~2 y8 |! |, \3 w8 D
  455.     char szDIR[300];
    4 M3 C7 R2 U4 G1 ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))! i4 Y1 C9 I# F- _$ V8 t. Y
  457.     {
    " z5 Q  @  \- n- G
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");' J/ M* G2 ^3 V' I  Q8 F, M
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");# M) y" V2 V% Y( a* y* C4 Z3 p0 u
  460.       strHostName=szIP;
    1 x# L) T, P. K$ n3 t# g- ]$ A
  461.       strHostPath.Format("/%s",szDIR);) D2 l( H% M% _# ^* a) E# N
  462.     }6 g  p" w: M% h2 D( k
  463.     else/ U) |3 I+ P, z
  464.     {  k" M# U( [: ^
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " F$ E! q' T5 n/ U( U$ a! D* j
  466.       {' C" |9 }5 ]! f  u6 ^$ n" v' q
  467.         char szLanguage[50];
    5 m- B$ L) ^1 u) N0 T# n1 `
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    3 O& g" B5 R% {5 y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 L1 U! z. d; a' F9 N8 p9 ~( `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 _0 ^. x. P* V0 l0 e  H
  471.         else                                   m_iLanguage=ENGLISH;" U0 R- T6 N5 M+ t
  472.         char szRegister[100];; I% e8 i4 }" ?6 _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 U6 i: L/ b: o: u% P* x9 C
  474.         strRegsName=szRegister;$ Z& M  T# C: d! O8 O5 b5 r- h
  475.         char szPatchURL[100];( V2 \; r% B( D2 W
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) t3 T) V* e0 n8 ?0 {$ H
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & d. z7 _9 ~+ Y$ r- B  u6 x9 b' F
  478.       }
    " t7 ?5 }- }* @& k& Y! [8 z! Q7 s
  479.       else  a* [" {( m( Y4 u
  480.       {
    4 u3 b! p: P* a' h' \
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ F$ H/ \: i5 W! p  Q8 b
  482.         strRegsName=DEFAULT_REG_URL;
    $ s* ^7 `& j2 h
  483.       }
    ' u& e; ^/ [. q7 k& \" W: u7 v
  484.     }
    6 m3 p, h) r- G$ ?
  485.   }8 Y! a, ^% ]3 H  O( \6 J4 i) S. Z
  486.   return true;9 D9 @& D2 m4 G+ {, g
  487. }) D+ c* w3 m+ D/ O: ^. E3 h5 u

  488. 2 H; C. E6 t* O+ w) f  y& ]
  489. #include ".\ZLib\unzip.h") ^% G8 Y: `( C; S8 e& u6 A( J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 F  g% u* q" e. q+ W1 ]
  491. /////////////////////////////////////////////////////////////////////////////
    ! K/ N7 W/ g* Z% M/ x* x2 G2 {
  492. // CRevAppApp initialization! G. o* }! L! d) n6 Y+ _( g

  493. / Q9 g, ]7 U2 h- Z" N7 I
  494. BOOL CRevAppApp::InitInstance()  _/ p6 N* n, E3 d: S" q! n
  495. {
    . n9 G) W) B( J6 H
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];$ a* R; M9 p7 f$ j  X) Z# G6 f

  497. ) L8 _* S9 R  ~3 I5 j7 I  W" l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    # q. D" M- G1 Y) I3 l* \+ `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))5 e3 H( O5 \: f6 x3 t9 X
  500.   {  g1 Y+ K  Q. V. T" j6 v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' @# B. y5 I; z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    % H3 O, f% x1 g7 R8 n% V3 x
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ `) Z, Y$ Q( P8 [! ^
  504.     {$ ?; ~- q/ {& i! ?* J9 n
  505.       strcpy(szPath,szPathTarget);0 _0 \; z, ?% s5 q, Z% i) M
  506.       SetCurrentDirectory(szPath);
    % Y8 Y( F- v, `4 w( J
  507.     }
    * c4 I- G" p& E4 U  Q1 A  ~
  508.   }
    + i/ j: U) ^: G
  509. #ifdef _DEBUG
    4 x- W7 y" a! z7 G4 c. ]& O1 V% O: V
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 j% N9 F/ w# |
  511. #else
    1 k5 ]8 q2 f  ]" e' M% l: T
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 r: G0 D- g& y, K" R
  513. #endif0 q! C" ?! y( D6 O9 l
  514.   {! F! d/ ]# k% D1 N1 X
  515.     char tempFileName[MAX_PATH];
    # }& o7 V# }: n) K, i
  516.     strcpy(tempFileName,szPathSource);
    7 k. L* }# S- x0 e
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 b! E5 C' m  K& G
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    + H4 V9 R8 k8 `3 c3 Y, q9 y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    8 L* k2 D; y& c# f2 s
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    . S4 W0 {$ e1 w9 d! g" S2 N8 u
  521.     return TRUE;
    " m. V9 y$ `- m/ E) W! i
  522.   }$ K7 d+ f% G" U; N* J3 l
  523.   // Nuke 0118: Delete run.exe
    ' l7 u; C/ w! s6 n" b0 _% l# h! g
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );* ^7 Y/ G, d+ A" m' }5 ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 n: Y2 O+ u3 k" E
  526.   if(!ReadCfgFile("Config.ini"))
    / ^" x6 G' j7 C  G9 [5 e! H
  527.   {
    " R# u- S2 F# S$ [% G( P2 m& E/ u9 U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 ^; N$ X) B3 M% n0 F# {
  529.     return TRUE;/ f& y5 A0 M( |  y( U' l# l
  530.   }
    3 b' R& c0 \3 f% ]& R/ \
  531.   HANDLE mutex;- O* k' t* v! {3 \$ K. ]5 f8 J  Z1 Q
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    5 |' A3 V7 Y6 ?* b( _+ R8 h% I
  533.   {
    9 ]% e0 s4 ~1 T+ [: `. A' Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( M$ p& i* l: m" s, I# x
  535.     {- R* ^5 P- c. k3 p
  536.       CloseHandle(mutex);& }1 Y( N7 J7 R
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 Y. I2 t7 n  }. V% n/ }' w/ u
  538.       return TRUE;/ V- l# Z! W5 J
  539.     }2 e0 O' W2 i# Q, [* R
  540.   }  
    ! r0 u# t( R" d# F4 |# J: t- b7 F! A
  541.   CloseHandle(mutex);6 k! }6 L- b5 f5 M& T7 t: Q
  542. 3 B. W  z: A2 [) _
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    . i) B$ t9 T6 h( {

  544. ' B! I; z. q  H# e3 x0 A% U) L$ ?
  545.         AfxEnableControlContainer();3 y2 T0 s: y1 U$ v, V& p9 M

  546. 7 x( i2 k" L" @  d
  547.   bCanUpdate=FALSE;& L0 ~8 \3 z3 t" {7 o+ s
  548.   dwStartUpSteps=1;' X$ ?0 p. [, b5 d# J$ a% x
  549.   dwProgramState=AP_NOTHING;
    - b- v. \8 h7 A; a

  550. 2 x! U0 U: f$ T7 E$ @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);) g- ~7 Q  E' z3 Z! E9 z0 T" T

  552. , a, s: Y/ e' O6 ^7 P# ^7 z1 l$ z
  553.         // Standard initialization+ K; U2 V% T. s4 N5 V
  554.         // If you are not using these features and wish to reduce the size! W8 _+ z" l% o) @
  555.         //  of your final executable, you should remove from the following2 q3 C9 `5 r7 l8 q6 ~
  556.         //  the specific initialization routines you do not need.
    ) E" E4 ?" g; N) G4 {1 E

  557. + d# J  O. [8 F5 R
  558. #ifdef _AFXDLL1 N2 }2 ^3 p/ B% K3 Y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    # y. ]" ]- w8 F+ i: T* r
  560. #else& r/ B" e/ Z5 P) n, x5 k, d0 Z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    9 |, z5 `8 b. E% D  k% `
  562. #endif
    & b2 V) \+ g% G6 g, z
  563. 9 f+ A' O* [& ^2 ~$ l* w
  564.   dlg=new CRevAppDlg;
    5 ^* q- X. V# h* Q. b3 Q
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 K9 ^" B9 ~1 y% S
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ) k  X8 L$ w6 m6 e. E; ]
  567.   m_pMainWnd=dlg;% m- g1 d% f5 D1 t+ L1 {, L1 [$ m

  568. & F4 s) S8 w# [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    / K( q0 K5 D2 f& `

  570. & F& ?9 J7 M: e7 \% h+ h  p* J
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' p3 _, `+ A( }/ G6 Q5 q7 G
  572. //  ULONG_PTR gdiplusToken;, ~7 j1 Z) S% C) e) u3 Y& z2 O8 l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ) X! ~( L5 W1 X& P
  574. / R, I6 l' I  g9 Z  O" S8 A
  575. //        CRevAppDlg dlg;: v- p. w, D& K  p
  576. //        int nResponse = dlg.DoModal();# J! b* `6 V1 J6 e: w# r. }4 @/ N
  577. //        if (nResponse == IDOK)8 e( A( b/ t( Y3 n
  578. //        {' w/ [( e: a* `, r1 g
  579. //                // TODO: Place code here to handle when the dialog is( q: C5 @) \' B' ]( B  O" }
  580. //                //  dismissed with OK5 q# W& o4 ~: N/ i+ y& C
  581. //        }! S% s( r. i8 o. ?8 ~
  582. //        else if (nResponse == IDCANCEL)/ D6 x& E6 @' I, z
  583. //        {
    + Z9 f( h* E/ q8 l$ X
  584. //                // TODO: Place code here to handle when the dialog is
    + k) o) C5 K7 P6 d% d9 o+ c1 t
  585. //                //  dismissed with Cancel
    $ @. C0 `5 m5 v' L9 V! I0 y. Y
  586. //        }
    * o, u  ^$ Q: ?5 ?+ @7 V/ F! u
  587. 4 k5 j, b5 y; o4 O4 g
  588.         // Since the dialog has been closed, return FALSE so that we exit the" L& e9 o8 f8 Q& v; Z& y
  589.         //  application, rather than start the application's message pump.
    2 o6 {8 ^9 q" m) k: d
  590.         return TRUE;8 ~0 P9 H5 H9 M8 l: _! m
  591. }
    % B7 @0 H  [  l& A+ d

  592. + V0 X0 u% M3 I% y5 {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 f2 g3 {* u: n5 L9 U$ Y
  594. {
    / |- f; f" _3 e8 j( v+ F# S
  595.   int i;! P$ R2 {: o4 I. C. h1 |
  596.   char *szRet;
    ! x) h) o8 l9 ^: A2 [+ a0 L8 P. q
  597. 8 E3 a  L1 r. Q/ E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ' u+ q. B6 ?5 O0 X! Z
  599.   if(sztoken)
    & Y1 u" ^8 `. Y7 [
  600.   {
    & R0 [5 U% C* P. M/ L
  601.     szRet=&sztoken[itoken];
    2 X$ D4 J% U: D
  602.     while(sztoken[itoken]); r, G$ W* F8 H6 M. r* V5 V" B
  603.     {
    3 U; F) f8 d" X$ t# c- M
  604.       for(i=0;i<(int)strlen(token);i++)
    / f. T% g7 Z8 V/ G- q. S- S+ m5 I) b
  605.       {
    4 {) @* q' v! T. y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    8 G# s. O, |$ E9 ~6 X
  607.         {; {2 ]" C3 I, A. P
  608.           sztoken[itoken++]=0;1 \! v" {& ~0 n$ ^; t
  609.           sztoken[itoken++]=0;! v( J. G+ e' K$ v* H
  610.           return szRet;7 W& W3 m( X, G, Q& m
  611.         }
      L  f' Q$ p7 o9 S; B/ S; G
  612.       }
    . `- V  X8 `+ {5 H9 H
  613.       itoken++;
    $ Q! p# h8 R6 u
  614.     }0 L0 S: f$ ~* x! C/ J8 n7 x6 m
  615.   }
    6 H  ~7 q" P: o' }
  616.   return NULL;
    8 s6 j" `0 V; u( Q1 y: x
  617. }# u# n* d' @9 X5 @9 }0 d/ j9 Z1 ?

  618. ' E* o( {: [2 \  y4 @
  619. void ProcessProc(long Total,long Current)
    ' N! v# t7 v& u2 L9 Q
  620. {
    1 h8 E" C) a$ l3 v# u6 }$ ]8 q
  621.         MSG msg;& P4 }& C, a4 g( Y- h8 S- A9 y
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);- w; `8 l3 E- j# E
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ; z  @9 x+ C$ L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % B/ C5 N& |  M" I7 f
  625.         {
    4 d8 a5 i  \& N7 f' w  _  a3 i
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 B1 u0 P- p" M. u) g: Z2 V' M
  627.                 {
    3 A2 I$ C3 \! p4 q1 N9 {) J
  628.                         return;. L' u  x# C0 h- I8 `
  629.                 }  ~, r8 ~  ]( F9 o1 }( M  J
  630.                 TranslateMessage(&msg);( n# ~3 @8 y4 ]' ~- o! S0 Q  G
  631.                 DispatchMessage(&msg);: _: \. W3 w  m7 Y- I* Q
  632.         }        ; m& B; [7 F& F  U) I9 U
  633. }
    . ~4 r4 g0 \  ^" _7 z
  634. . E5 z2 @' l2 p7 P
  635. BOOL bFirstChar=TRUE;
    + r8 _3 `/ h2 H% q+ ~8 x
  636. ! T' K. E* }: n! S
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    3 B3 K( @- r+ G' @
  638. {
    ! s9 A5 U# f4 A* G: L8 d( t
  639.         // TODO: Add your specialized code here and/or call the base class
    ; l! D( ]0 K8 ?4 w6 X: o
  640.   switch(dwProgramState)
    # o/ s) r: [% L) c* H, t
  641.   {4 {, J2 e8 ]  d# X3 k
  642.   case AP_NOTHING:
    ! q1 H+ p2 N1 W& a# ]
  643.     switch(dwStartUpSteps)* z+ x$ o3 V# ]& X3 r
  644.     {  j! q7 Y: v1 i4 L9 R
  645.     case 1:
    " T7 ]+ I% m% J3 K- i" Z. c9 ?
  646.       {1 f/ e5 t$ k( M8 w# B& O/ _1 T' |4 E
  647.         int i;
    9 ?) Y; T* q* G5 O) ?/ a
  648.         CDC *pCDC=dlg->GetDC();
    ! D3 A: W. d% t3 \& Q: F! }( L
  649.         HDC hdcwnd=pCDC->m_hDC;3 f9 j; v' M# H/ l
  650. //        Graphics graphics(hdcwnd);) A/ D+ f5 }/ {& l% c9 F
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 @+ P# h$ Z/ e' z$ Z. U+ D5 \' J
  652. //        INT iWidth=bitmap.GetWidth();
      K! b, G0 Q. w# n% y5 T7 O
  653. //        INT iHeight=bitmap.GetHeight();- M0 y' f& J6 m/ p/ p
  654. //        Color color,colorTemp;
    " x0 h4 N& _% o6 _/ h  F9 P( J3 }1 k
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    : G. N/ ^, Q2 W$ X. b7 c6 |
  656. //        {
    ! K5 e( t$ V7 i  F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). J2 q% U" k+ ?2 h9 ?7 g% r4 Z
  658. //          {
    ' \- Y, I- {, _/ s2 W+ m
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    2 b2 o( A7 G* |7 v2 O$ R2 ^8 _& {3 a
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 r- n; `6 v4 f! g
  661. //              (BYTE)(255*iColumn/iWidth),
    3 a1 m) Y: i' n$ k
  662. //              color.GetRed(),
    ( K; ]" t( m1 ^% F, _
  663. //              color.GetGreen(),; d9 h1 l9 w7 F
  664. //              color.GetBlue()));
    7 ^4 ]# x% J% k) U
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ H" K- Y* d0 a& a1 |$ S
  666. //          }
    # o& O7 \0 q' B4 L+ r3 V3 |
  667. //        }& \- n5 N$ w' v  F
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    - J- G. w( E. ^8 x) P+ ]
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ a+ Q( Q2 \7 d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");0 t3 [+ l/ }& [0 D  J) [2 S$ s
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      o. {6 z3 ~; t* o+ Z* U
  672.         for(i=0;i<240;i+=8)
    $ }0 p0 J# V  y# V% x# ]( V
  673.         {
    ( `* g- ?4 c9 H
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* q; ?* }  d0 J; w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ; d, I* O) E; E: {! i$ j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 `5 o/ O- ~" ^4 A7 F4 b1 ]
  677.           Sleep(33);
      _9 ~# Z6 Z" j# x3 t
  678.         }
    6 G# }- |( H, K) Y+ A! c. u! Z
  679.         Sleep(1000);
    ! u/ _, G3 ~& M! u% B9 D
  680.         for(i=240;i>0;i-=8)
    $ q- l' T, ~7 v7 q7 y6 F: W
  681.         {
    4 i7 K' h: k$ ^
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    . B3 E" w+ |3 P, j6 i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / X0 _* \* X* J1 X# h' X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: d6 \1 a. X1 T  R8 w" r8 s
  685.           Sleep(33);
    # D% T2 p3 g2 V6 k( g$ I
  686.         }8 }4 l* A' ~8 |0 T; B, k/ t5 ?
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    4 l; P9 o% ^+ j. C
  688.         dlg->ReleaseDC(pCDC);% d- M9 K8 G3 S- a; G
  689.         DeleteDC(hdctar);
    $ o) E0 F1 I1 t
  690.         DeleteDC(hdcsrc);
    ( R# x7 _7 C% |- }
  691.         DeleteDC(hdcorg);7 S1 @% X- X6 ~0 c3 G# \
  692.       }
    6 I+ j& ?# B. ~3 t! T# z3 J% F2 Y, u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : J6 k. ?2 r! c; d* X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");4 C, B0 C# ^3 v) B( A6 f- K3 z
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");, e" g& T/ l: D7 b9 m
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    8 a2 g( J% V# _& O8 X- i4 L/ E
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- x! p/ E% J! O- D3 J/ D+ _
  698.       if(!Dn.Connected())
    ) V5 M6 W3 }; f1 Q  X
  699.       {  n0 o2 }) m- d, f
  700.         dwTotalFiles=1;& h: q2 F( o' ^5 U$ O
  701.         dwDownLoaded=0;; ]' w! N! E; y3 j: O5 A
  702.         bSilentStep=TRUE;5 ~* R% f5 o0 ^1 L* l* O: @: W+ y. f
  703.         bCompressed=FALSE;
    4 v  @; L7 B0 Z
  704.         strExtLocal.Empty();1 C! g; L( L: f; }7 ?8 {0 g
  705.         strFullName="readme.txt";
    ) j* e( S; E. M
  706.         dwProgramState=AP_CONNECT;% x6 r* Z6 V  J0 c5 l
  707.       }2 a' l2 W# @7 @; `# t
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ) ?3 y+ m/ L3 Z) @% j8 W+ l3 F
  709.       dwStartUpSteps=2;. s9 ~' b! ]% ]/ n
  710.       break;$ U. B& \6 Y$ S
  711.     case 2:
    & P/ w' _# o# |$ u* C
  712.       {
    ) u3 z) _2 L) l/ U! x4 V
  713.         int iEOF;$ V# m: x* n6 f# V; l0 h
  714.         FILE *fp;0 p) u0 B% [3 I) ]* j6 u0 h1 S
  715.         char szString[512];# v( d3 t7 [2 e: N& ?
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    4 Y% F4 C$ g% p4 x
  717.         if(fp)
    ) P5 V1 m# P! V; j8 K$ G! H
  718.         {0 L4 m* d; |( ?! B  q, y. ^
  719.           do; q7 x/ m3 X* D6 M4 X. S  t
  720.           {$ ]8 q* s2 h/ Z
  721.             iEOF=fscanf(fp,"%s",szString);- M& ^7 a* J6 i8 d" z$ Y- H
  722.             if(strlen(szString))7 Y  a6 z$ S! L2 C3 t( J/ u% `& U7 K
  723.             {# e3 g4 B- U. H  k+ f, t1 \
  724.               if(bFirstChar)2 r2 d- v6 [' I' m' c
  725.               {8 c! _/ E3 F- M, e" T3 c% d
  726.                 bFirstChar=FALSE;
    - r; o4 B! w. B+ ?9 T, N% f
  727.                 bConnectIsBig5=FALSE;
    & V0 ]. T; `  n, e; r; M  k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    6 |/ n5 B4 D/ G* H2 H
  729.               }. K) d' o7 V( z. m
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    1 s! _+ q* f9 m* c$ {
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 {+ m- Y1 C6 |  e- m
  732.               dlg->m_ListText.AddString(szString);/ `% Z* @6 ~& d. q' F7 [1 N
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 N. a- G, H. ?5 Z. {- [4 ]
  734.               *szString=0;9 q- F" h% ?' w8 Q- K6 K
  735.             }
    / h* Q- W% c9 \/ c3 o
  736.           } while(iEOF!=EOF);( i7 _. O: p/ E8 q
  737.           fclose(fp);
    8 X6 K) l" i6 t: X9 K3 o
  738.           unlink(".\\DownLoad\\readme.txt");
    7 `5 {+ Y- Y) g' L
  739.           dwStartUpSteps=3;0 Y' [1 W$ g% N, i- \* {. l9 p
  740.         }
    - ^" I7 f- i& E
  741.       }
    / u9 F9 c  I- R: {1 A% s
  742.       break;
    / O5 o2 K4 V* d* e- P
  743.     case 3:
    3 e" z! N) f) ^8 m$ y" D7 ^
  744.       if(!Dn.Connected())
    5 ?6 P, {3 q3 `" {
  745.       {
    . e, y& Q6 v! l8 ~  b9 I
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ) M$ G' I" Y+ C: B$ R- m4 O( A2 h
  747.         dwTotalFiles=1;% c% k  H' v1 q8 e. M1 R
  748.         dwDownLoaded=0;$ l) F! {1 C) }' g: |) r6 |0 P
  749.         bSilentStep=TRUE;) I& V5 H' p3 p4 E
  750.         bCompressed=FALSE;
    # p3 s1 b1 l/ A3 Y, s' g, J4 V0 g
  751.         strExtLocal.Empty();
    2 m- `7 s4 T4 b/ L2 Q- t/ @2 q
  752.         strFullName="checkversion.txt";
    ; }3 D6 N0 }5 H9 U7 b
  753.         dwProgramState=AP_CONNECT;
    4 d5 w; i) i4 o/ l( N, [2 Z# a) H
  754.       }
    6 Z9 ?- Y8 A% ~
  755.       dwStartUpSteps=4;
    + K0 i' h* G. o2 x5 {' Q3 ^
  756.       break;: u+ Z' o4 ]- r. [' G, t9 @% a, `# C- S
  757.     case 4:, P! i8 c! M, R
  758.       {
    * b  Y! M- ~9 w5 S: X) X
  759.         FILE *fp;
    ; g8 Z, O  N( J; d# c
  760.         char szString1[128];( S( N4 U2 ^0 g# I0 r6 c
  761.         char szString2[128];
    ! C- v: ^4 a4 ?9 S/ K( y/ j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , Y7 q% m3 x0 K* V! l
  763.         if(fp)
    5 [4 m* J) O; i# @+ G, c' P' |
  764.         {- s  J3 A- r( J# W( [2 l# n0 z
  765.           fscanf(fp,"%s",szString1);7 o3 c  L: E+ H; @% q' I1 N
  766.           fclose(fp);
    & B6 k/ V6 j) m! V* u9 W
  767.           fCheckVersion=atof(szString1);2 l& T" L. F! v2 z& m
  768.           fp=fopen(".\\checkversion.dat","r");
    ; k3 r& O: J2 }" i' _. O
  769.           if(fp)
    " W' W+ M4 S5 J; u* k
  770.           {
    0 t' T" P% l1 `* z/ z" H
  771.             fscanf(fp,"%s",szString2);
    / M" _, ?& l' l" N) p# O' t
  772.             fclose(fp);" m" F5 @* T$ N) E; F3 U3 u! ?
  773.             if(atof(szString1)!=atof(szString2))% ~# |# a7 _7 _" ^% m
  774.             {, [$ N, K' U+ c7 ]
  775.               if(!Dn.Connected())
      I( K% [: S) J
  776.               {
    ' u/ K" ?3 h" R
  777.                 bFirstUpdate=TRUE;
    + f" K" H$ O5 C+ M; c! ~5 J
  778.                 dwTotalFiles=1;' R6 c, y, l- t! P2 R7 U  n
  779.                 dwDownLoaded=0;
    $ ~) a* C6 R+ ?8 P" @
  780.                 bSilentStep=FALSE;/ D: C* B6 }" t" e  q" f
  781.                 bCompressed=TRUE;
    7 [  Q. N) h7 M5 z% Q! N2 I
  782.                 strExtLocal=".\\DownLoad\";
    / {; g! G. M/ c2 r, C% {, T
  783.                 strFullName="update.txt";4 m& F! S" Q: E$ A+ M) n% n1 E+ m
  784.                 dwProgramState=AP_CONNECT;
      c4 ~7 ^" l+ x4 S
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 K4 a4 n3 t2 D0 }/ f' U% O4 |8 O5 a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. y2 }: l6 t) v  Z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 B  ^/ C$ D0 q- T0 }) V
  788. 4 G: B! C$ ~9 L/ h/ R9 g4 Y% T4 j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! @+ v' O9 g( a; Q& t% l
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , D& R+ H6 Z* K9 f
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)# K& K6 w: p! {: k9 i( e
  792.                 {( M. G# G3 X" b1 k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");% L) m1 Q- `+ b* V" c3 |
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ( m+ V4 {8 I- o) U# x$ u. K) P* [' P
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 B; p3 y  Z& @" Z6 @
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 K8 u4 H6 s) F' k2 t# M" }) v
  797. ! l: W, N  a  }- u7 x
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& q" {/ s. E8 x: O' F: Y  h4 {- _" p
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) |0 Y; L3 l6 t# z3 s
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 q5 o) Y$ w' l# I9 L7 j0 j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      J/ b# z* h' {1 e2 f2 d& ]" N
  802.                 }
      W3 g/ p( H% l( M" z* W) N
  803.                 dwStartUpSteps=5;+ H' @7 Z/ _7 g
  804.               }5 C9 _8 Z+ W! I# B' |+ s5 _/ @0 L
  805.             }' H( S  n" U; w- ^  W
  806.             else, ?7 ?: {: W9 Z0 A% P! b: {# R6 ]
  807.             {
    * s) ?9 p2 v, R/ ]- Q
  808.               unlink(".\\DownLoad\\checkversion.txt");5 T( C0 M0 C3 c. t# |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , ]* `# U; m. c$ c7 P
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ( {) ~& I- S. k. k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");% k+ Q$ |5 k6 ]5 e, F

  812. 5 z& w; N- x( u7 w& {% g7 D9 _7 C
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: @9 b$ d+ E3 W+ V0 }
  814.               dwStartUpSteps=99;6 o- S% I8 V+ K) A. X$ J$ s; k* W
  815.               bFinishUpdated=TRUE;
    1 V' }9 `4 R6 y2 |" s1 y3 ]9 A0 T$ G
  816.               bCanUpdate=TRUE;9 x  L- ]7 ?3 f$ Y$ n, |8 ?
  817.             }+ Q8 l: ]7 ]" T1 D5 h8 |
  818.           }
    ' U. p5 i  C- t* v! K( z
  819.           else
    : I/ g% y& ~5 W" c0 w. F
  820.           {
    , U5 i" x: L+ _0 K5 w1 {6 @) Y
  821.             if(!Dn.Connected())7 a: ^9 ~# ]) R: W3 s; w
  822.             {
    ! d9 @) i. a) b( I3 h. n% S/ X
  823.               bFirstUpdate=TRUE;  V" j2 d, Z# k
  824.               dwTotalFiles=1;! Y* [4 v7 @) ^' t( l2 Y5 T+ k& c
  825.               dwDownLoaded=0;$ c1 ^! j+ i) `, u/ f) P6 [3 ]
  826.               bSilentStep=FALSE;
    ) A: T% c* n! H6 G" y/ F
  827.               bCompressed=TRUE;
    ( x8 L: J! v7 B6 G, n: \/ ^, i/ k
  828.               strExtLocal=".\\DownLoad\";
    ! S$ o4 K# F* U
  829.               strFullName="update.txt";
    . V& u$ d+ K/ i. V) M" i9 |" |) q
  830.               dwProgramState=AP_CONNECT;# L. o8 L/ w) X3 J
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / b, t$ a4 ~) n) o5 i
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    * {5 {9 Z& y& X& u
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    % B4 T. j# w/ w4 F. D: s# U0 R
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * s# r3 ]6 T, H- i5 `4 w  E
  835.               unlink(".\\DownLoad\\checkversion.txt");! E5 r# F( ]/ ^% i* D0 ~9 P
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)1 G2 u  k" U5 a( T6 w
  837.               {# o5 G$ l; w! S* j
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    7 |" X: g: \  ~- P7 j7 d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");! k9 T; {& Y5 \& m
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ! ~/ {, j( \6 j% b
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 f7 B" X2 r* n! g) i# k) q
  842.                
    / v7 c: S# t- w, |0 e( r
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / l( [" R+ ]0 w8 a( O% V" Q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    2 N' E+ `1 O( c: v, G
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 D: R' R  x  X& [
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* I4 ?) x# Z% v% X
  847.               }/ _/ Q; g3 E8 G- {; F
  848.               dwStartUpSteps=5;9 f9 r- b% W7 ]: T) a" C! ?
  849.             }) \8 U2 r* ~" q) H; @  ], }$ h
  850.           }9 d3 x; R4 |: I& U  H- \0 [4 O% ^
  851.         }
    % g: x( ~* H' D
  852.         else: {& }2 E9 Q& z2 U7 q+ Q4 `5 W
  853.         {
    ; Q9 `" {3 \$ m! m
  854.           dwStartUpSteps=3;
    # k& |4 `: d  \. a& L% B
  855.         }
    & n6 R* F" I% U
  856.       }
    4 u4 D* T+ ]6 X0 B
  857.       break;( G- i* W7 I& o5 L: @0 I+ G
  858.     case 5:. ?' Q7 y* z3 f1 G* g7 T& \) E
  859.       {* r" }; B" b9 [* b' x4 L8 C# ~8 W
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    % W2 D. `, M/ W( a" ?+ \2 F
  861.         {1 ]' ]: p; N: N; k" @
  862.           int opt_overwrite=1;4 i7 }2 g: L. m4 R3 ]
  863.           int opt_do_extract_withoutpath=0;/ c  p- z% t7 X  P' X0 c* k
  864.           unzFile uf=NULL;
    ) v3 v+ b0 b: ^$ ~* n% U

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-11-30 02:02

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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