CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, E/ q! l$ V# R; w
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , b  c+ ^$ e: f5 W1 o) F
  2. //2 j( N$ P7 |; U) K, K9 S3 z4 d
  3. # ^% E- x. k+ M
  4. #include "stdafx.h"1 e8 M- c( n  h! e/ \! G  E% Z1 ]
  5. - q! l$ R& T" E
  6. //#define UNICODE$ N8 A' |0 Y7 H8 t6 A2 s/ y" W
  7. //#include <gdiplus.h>
    ( E  z" L. Y. W% B6 T
  8. //using namespace Gdiplus;+ O6 x$ o9 L% Q7 U1 f* K$ W

  9. $ v( \" o1 w9 ~% A
  10. #include "RevApp.h"
    # o; W+ @2 C+ ~. Z+ X2 _
  11. #include "RevAppDlg.h"
    8 m  H7 i2 p8 _. C

  12. 3 t2 E, x! F9 W, R0 G7 ]
  13. #pragma warning(disable:4786)
    ) i2 Y0 y- W  q/ u$ y' E
  14. #include <map>: r5 j" f8 K9 u/ w/ [) ^
  15. #include <list>
    0 d5 [0 b* M1 }* M# f
  16. #include <direct.h>, _! W0 X+ S/ s- t4 @' V

  17. . d, M4 J% }* I5 v. c8 C
  18. #ifdef _DEBUG
    9 ]5 d7 R$ T) ~  d/ w( C
  19. #define new DEBUG_NEW
    ' G2 P, E& t& ?0 j$ A
  20. #undef THIS_FILE6 r6 m/ l1 n- r. h# f. l' f
  21. static char THIS_FILE[] = __FILE__;' l1 ~. f$ V- ^* \1 r: n4 G5 G7 I4 Q
  22. #endif& T8 V8 O. U; ]; P6 q! ?  {
  23. #include "SkinResDef.h"; ~7 D* L9 t( c: B
  24. #include "ChangeBG.h"
    * `2 r. m+ g# q, }/ P
  25. #include "AFXINET.H"
    2 @  t4 W( m* n9 {; W& g

  26. . B$ ~) V: q# @) v
  27. #define TRADITIONAL_CHINESE 0
    * a8 P3 }& T! l. s  h/ S, F4 \- d
  28. #define SIMPLIFY_CHINESE 1
    / w: k% d' I8 C( g3 G# ^
  29. #define ENGLISH 28 Z4 B8 M9 |/ _3 T! l
  30. int m_iLanguage = ENGLISH;
    ' R. i$ i  L: T, i4 E/ ^
  31. /////////////////////////////////////////////////////////////////////////////
    7 I6 J  H2 C& R, Q* h/ U3 M7 B! b5 C
  32. // CRevAppApp
    : a% x- ]9 c( A6 Y1 D
  33. 2 y- \# _" W, v/ L5 L+ F* p. P& c$ r1 V, S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! Q" S9 B- J/ H
  35.         //{{AFX_MSG_MAP(CRevAppApp)8 D7 \1 v- C  V% y7 o2 V
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% L: i, S0 w2 ^$ }7 R
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!8 y' j: Q7 |9 q7 X4 e
  38.         //}}AFX_MSG! r) u. E; v. m/ J4 I
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)3 U5 F6 q+ r* c& |8 i  S* J+ M
  40. END_MESSAGE_MAP()
    3 k1 t3 y* ^/ w" g- K( Q
  41. 9 v/ I' D$ Y, b. O$ H
  42. /////////////////////////////////////////////////////////////////////////////; I7 \/ }5 H, x* L' ]
  43. // CRevAppApp construction+ d6 }3 F% N% d. u3 p3 _1 ^6 `

  44. 1 r& F) r7 P. e: y' }3 n
  45. CRevAppApp::CRevAppApp()# N( o3 `/ V# G% ^
  46. {
    ; w- C# D1 A/ H6 T
  47.         // TODO: add construction code here,
    7 T: O6 ~0 Z8 I! z: g
  48.         // Place all significant initialization in InitInstance
    4 E' g$ n7 n& v: H7 z$ k. U$ m
  49.   bDisplayIsBig5=FALSE;: }+ `2 x' B* u3 a
  50.   bRestartUpdater=FALSE;
    : G6 E; @' J5 w% b0 r0 ?
  51.   bFinishUpdated=FALSE;  E0 R5 v- [* A; P5 O. o  U
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;, F/ S+ t* o2 D' H- z
  53.   InitChangeDataBig52GBKS();0 p/ L% ~" U, G& g4 J; \
  54.   InitChangeDataGBKS2Big5();
    & {; ?: P) n% D
  55.         //
    5 b0 W! X+ B" w. Q% t* ~6 V
  56.         bClickRunExe = FALSE;
    / E1 `' M7 t4 S$ H) S. s
  57.         //
    . r' Z" v$ k7 G+ V
  58. }
    " m0 G- R3 i7 u8 _6 G' \( m3 V6 w8 D

  59. $ v7 R3 l2 W$ k, X: [( @
  60. CRevAppApp::~CRevAppApp()
    + b( S8 s0 [: O, w3 ?+ z
  61. {& P2 _: P- g. {; B3 n9 N& n1 ^8 U
  62.         // TODO: add construction code here,
    ' P5 {' g4 j1 D4 t$ N' L8 r
  63.         // Place all significant initialization in InitInstance
    5 b0 X! N  ?: }. P: G' O
  64.   EndChangeData();
    3 ]3 Q9 q# j) \# Z+ k6 M
  65. }+ O) F2 }  a; f1 s  z; g4 p( L
  66. ) _0 i/ h$ D5 @( Y/ ^2 ~1 R7 [
  67. /////////////////////////////////////////////////////////////////////////////
    / R& W. f) N+ r) d0 c
  68. // The one and only CRevAppApp object
    $ l# b& w  r/ ~4 l

  69. 5 f' j8 V6 [  E! v5 S+ t& j
  70. CRevAppApp theApp;
    : b  c9 ^2 Q7 j3 J
  71. - I3 H8 ]9 [7 M( V7 o6 U
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 E1 L$ p& x$ u0 I9 J: N' C
  73. {
    * |5 J) {0 P6 X  D8 T* I6 I
  74.   int iEOF=0;
    % L4 N. W5 D2 m7 u. W2 I
  75.   char szTempName[MAX_PATH];! l' q6 v' F6 P4 w
  76.   *szFileName=0;) w0 W1 ^8 P6 \- U
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! g: C8 M/ r: X8 ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')2 y0 u4 R( v3 l6 w- h6 n
  79.   {
    ( Q* }; L5 A/ u. h1 ?5 f7 T0 X
  80.     strcpy(szFileName,&szTempName[1]);: j$ |# C& s+ o; ]
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & Y. L! _7 d  x) x9 n8 o$ D. b
  82.     {% h' r$ B) N6 O3 l/ }7 V6 S+ o
  83.       iEOF=fscanf(fp,"%s",szTempName);0 j# ^; J! c: Z3 c: r& S; S
  84.       strcat(szFileName," ");0 y& L! M# H$ _' s
  85.       strcat(szFileName,szTempName);
    6 f: P1 A) b: M  z7 [: Q3 i! f' f
  86.     }; e3 z. x, S* L
  87.     if(strlen(szFileName)>=1)
    ; m/ k% Q$ a$ x
  88.     {
    1 j$ \* h& R2 `
  89.       szFileName[strlen(szFileName)-1]=0;7 R6 {/ \( P1 ^( h9 q3 x
  90.     }
    % d& ]( z+ V  N# ?( y- {
  91.   }
      Y3 U1 ^9 q5 B8 f& m
  92.   return szFileName;! E" c- k. T- {, _9 |' X. k3 X
  93. }
    5 C8 B; K% o6 b9 \5 V

  94. : n( q* W! R& r  [" ^2 O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 J# T. I' z% N' s, U
  96. {/ X1 ^7 Q, f1 ?2 M
  97.   FILE *fp;/ o# r) s  A3 g! f
  98.   char *key=NULL;* c8 F( C( S* G0 [! e
  99.   char version[MAX_PATH];
    2 J. ~; r7 i8 v* G4 a7 |
  100.   LPUPDATEFILE file,olds;
    - z+ q, N% Z. }2 r, n% R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , D, _4 K  K& [  @
  102. 4 X" @  T/ U5 i
  103.   UpdateList.clear();" ?# ?! Q4 F% w( T0 N" Q3 A1 k
  104.   UpdateFile.clear();
    , W3 i$ D3 `5 k! H& u; B
  105.   if(GetFileAttributes(filename)==-1) return false;+ n% l, h$ q# K+ H
  106.   if(!(fp=fopen(filename,"r"))) return false;& ^5 d& f9 P. P- \, [! p. ?
  107.   fscanf(fp,"%s",version);
    3 b' B* H/ E) b1 x' F, x& o' p
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    " Q3 j, L8 Z+ R. A. `$ J
  109.   while(fscanf(fp,"%s",version)!=EOF)+ q8 }+ ]: L5 ]' [" |
  110.   {
    2 o6 \' t! V& w( ~; ]4 E
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 ~: h0 Y& t( r  m" v( Q% k
  112.     fscanf(fp,"%s",file->path);
    $ Z3 I+ ]& h/ f! C
  113.     ReadFileNames(fp,file->file);
    4 u' i# m6 q& ~: v; N
  114.     strcpy(file->full,".");
    9 a' y  J0 K' t; j2 f
  115.     strcat(file->full,file->path);
    3 [( y# n9 u1 b" g9 \! z* }
  116.     strcat(file->full,file->file);
    ; o2 C6 i4 D! X  x1 b( x2 T! ?5 b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% d: `, D  D% C% D. a
  118.     {5 k: f: m2 h  p1 w$ r
  119.       file->vers=(float)atof(version);
    & G8 B, T! P- V3 f2 T
  120.       UpdateList.push_back(file->full);0 \0 N& _4 k' y1 T9 j
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));' {* p9 W, \, M+ _
  122.     }
    4 X: I6 X  Z8 f
  123.     else2 O$ P9 N5 ^6 q7 D- b
  124.     {3 t! G$ q, U' ~  ?5 M
  125.       olds=(*p).second;2 l; O2 {0 I& @! u/ A$ O7 ~+ Y0 A! f
  126.       if(olds->vers<(float)atof(version))6 z( V. C) E, Y5 `$ b" ~
  127.       {8 q% O9 [( r! L) e8 c
  128.         olds->vers=(float)atof(version);2 ?& I- N! h5 w$ M+ M/ i
  129.       }' W# y" e2 Y$ f1 f. u
  130.       free(file);
    1 t& ~  s, O: D1 U( S0 @* U; S& g4 M
  131.     }" S! k/ Y! E: J3 O/ b
  132.   }
    ; N4 c' ]- f" u  A1 ~
  133.   fclose(fp);
    1 c  I9 ^0 L, @( L1 i" E
  134.   return true;8 J) u4 p- |$ ~
  135. }
    ! ^% ?4 f& H6 h7 t; ~

  136. ( L  T4 M1 k& j$ `& a9 r  K) S6 B
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), T5 e( _3 h, g7 w
  138. {
    & k! [! Q; Q& G
  139.   TCHAR  szFull[MAX_PATH];, w) X/ S- G, z+ `; R3 o
  140.   TCHAR *token,*inter;
    9 l) q. k) }. |/ Y; \
  141.   *szPath=0;5 W1 V, |/ M* K% B+ d! c
  142.   strcpy(szFull,szFullPath);
    ) N' l" d% @8 E! |4 P
  143.   token=strtok(szFull,"\\/");1 x0 o1 g, m& s7 Z; a: [. m
  144.   inter=token;2 ], z) M5 D- T' @0 J+ _
  145.   while(token=strtok(NULL,"\\/"))
    / q/ [" R$ W% z, O4 }" t
  146.   {
    $ o* q# `/ O& R, `1 d. j0 p% z0 w
  147.     strcat(szPath,inter);
    / Y1 e* _  F9 s" p2 h) W
  148.     strcat(szPath,"\");
    , |  u; z/ a- D0 {
  149.     inter=token;% u1 E. p) r# H
  150.   }
    % R  }( I9 Q+ g' ?
  151.   return strlen(szPath);  V9 H& ?1 {+ f+ v1 j3 G
  152. }
    0 I' t' c! A9 F4 n

  153. % H& K9 S0 w* l/ Z; O
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)8 X7 b% ]  d% l2 l# N# C
  155. {
    9 [# P1 D; z  B. t* q( V; k
  156.   DWORD attrib=GetFileAttributes(Target);
    & w/ `' A! {0 Z0 ?+ g# e& S" r: y- k
  157.   if(attrib!=-1)
    - t: `/ A& ]& T) z" a
  158.   {
    9 U+ B  c3 F: F3 m
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 y: z" _- z' C0 n; h3 X8 @
  160.     {
    5 `8 G# h7 g, p' X' _- d
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    . R" I$ l4 K8 o9 ]1 N) h
  162.       SetFileAttributes(Target,attrib);
      x3 M- X/ n' U2 B0 m, f. g
  163.     }
    ! ~1 H' x6 }0 D% r
  164.   }
    5 S% L. L. N( G# j9 O
  165.   CopyFile(Source,Target,Erase);
    " s4 O( ~  x% L0 |
  166. }1 r# v3 K' I6 U' n; F
  167. 1 K  ?# m; F7 d5 }3 W  _" ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ W4 h  m3 {0 A/ \
  169. {
    & p* h8 S+ ~: P% z7 |2 C
  170.      FILE *fp;1 P/ h% F% r' ?' W0 ~6 Z8 B6 `* P- S
  171.      char  szBuffer[8192];7 n: x1 d% R' _
  172.   va_list  argptr;. p8 D# h. S, T& v& B) T1 H0 K7 {

  173. 9 j, x# i- I: Z/ W' G$ k
  174.         va_start(argptr,message);( D- G0 e, g  M# l1 d1 r; |" x: ]; q
  175.         vsprintf(szBuffer,message,argptr);
    " a/ V6 i$ C+ V  s- T# ^
  176.         va_end(argptr);6 ], J2 \( T' N$ I$ P
  177.   fp=fopen(FileName,"a");
    8 |) M. ?% y/ V) |: ~9 U
  178.   if(fp)# H4 z" ]# g: @$ m* a& u; s
  179.   {+ Z* W% }* B8 g, I  l6 i
  180.     fprintf(fp,szBuffer);- W3 t! j2 Z5 K# t8 `+ M
  181.     fclose(fp);
    : [  q2 p/ Z, C- Y/ F
  182.           _flushall();
    , t7 y" [% l4 X* z0 z" a. U
  183.   }
    + r  |, h8 K) n$ {9 V/ N: F! s
  184. }
    + s% t) q! _( Z$ }
  185. # }. J# p+ \" j
  186. BOOL CRevAppApp::Fclearf(char *FileName)& l2 k" r9 t/ J4 Y% `. ]4 Y* c$ S
  187. {
    - C' [, n3 B3 j, c4 C! Z/ T  j
  188.      FILE *fp;* \, I3 L$ S/ m, c& p. f
  189.     DWORD  attrib;- D* c6 M; p% \9 ]- f
  190.   attrib=GetFileAttributes(FileName);
    ; f. a- C$ }" C/ ^
  191.   if(attrib!=-1)" N2 U1 w  t! F# O2 P% M  k
  192.   {; N" n  K* v# G2 h; `. n9 K" A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 e" n6 y3 m9 U8 p& Q3 e
  194.     if(!SetFileAttributes(FileName,attrib))
    ) \0 Z/ W0 X+ c: @; o& w/ x
  195.     {, c0 K+ w+ C3 ^, G, u, [
  196.       return FALSE;1 K4 O; {* F$ u; m+ B: W
  197.     }: \  g+ f3 g! l' I) ]4 x% m
  198.   }
    + I* w+ N- f2 c2 V7 p
  199.   fp=fopen(FileName,"wb");( I4 p6 h1 I: w/ o  L3 d* O4 H
  200.   if(fp)
    9 g" D5 y* c+ r, f/ H4 u% n8 }
  201.   {
    ( g+ \6 v1 Q0 Y, ]) z& G
  202.     fclose(fp);
    9 x5 K; \5 H8 C" ?
  203.   }
    8 Z7 E% N1 h  W( s" q4 o! S
  204.   return TRUE;4 l0 {$ @6 C  |% Y( t* O3 n
  205. }
    0 O) A& N4 t0 H# O' C

  206. " S/ a! q. O! L5 v- v; {
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      R( ^" Z. `2 t
  208. {
    ) D3 _8 f. N. Q
  209.   char filename[MAX_PATH];
      A6 H' ?! X( a& {
  210.   LPUPDATEFILE file,olds;
    4 Y# X9 X6 F( L" I- T: d
  211.   std::map<int,CString>::iterator i;
    ! d$ T( q$ }4 w* e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 Y1 z1 [: b) E2 z$ u$ [# a/ p8 [
  213.   std::list<CString>::iterator l;
    9 f, d5 Y5 f( y% G
  214. 2 F' R) e8 o/ v5 t4 p- J
  215.   if(bFirstUpdate)& H! a# F  }# q" T- R% }
  216.   {4 V7 |  K/ o: q" c' H2 h, I
  217.     dwCurrFile=0;
    + o$ f1 }% x& P' [
  218.     bFirstUpdate=FALSE;3 A/ C+ l4 ~. [" b% F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      n, F) r7 C5 e
  220.     {
      Q' z& X) R6 k) D( _/ U, Z" q
  221.       dwTotalFiles=UpdateLocal.size();; l2 y2 p+ N; |/ a5 Q0 M+ w
  222.       dwDownLoaded=0;
    . `  u' E+ J+ Q) s6 p! T
  223.       bSilentStep=FALSE;% }0 r8 B; F3 E
  224.       bCompressed=TRUE;
    ) D/ B4 s% r7 i+ M' h3 q
  225.       strExtLocal.Empty();
    5 E" X, n: `* U- n% f% |% B  |
  226.       strFullName=(*i).second;& K% }7 [/ }6 m, M
  227.       dwProgramState=AP_CONNECT;
    4 W! g* T8 a5 S" X! {+ R5 ]
  228.       return TRUE;' ~1 @" J3 M0 a5 h* C6 O
  229.     }
    - O- R. U$ ?8 ~$ s/ r6 a
  230.   }' @7 u/ C+ m2 L1 T
  231.   else if(bRestartUpdater==FALSE)+ L0 V. l7 s+ g
  232.   {
    ! R/ Q! P0 t2 }* S$ q$ [6 U
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # I% v! a7 r# u9 h' I$ {' N' n$ v
  234.     {
    % N2 R6 }# ]0 w6 J  p: B6 k
  235.       file=(*p).second;9 a: S6 Z( r1 n7 n3 @' K
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 y  c; d" [& ]1 J6 c. u
  237.       {
    0 d% T! p* `3 \3 _: c
  238.         olds=(*p).second;
    - k8 s; f- g7 w- G
  239.         olds->vers=file->vers;
    ) D! d7 c: v* G% R) M
  240.       }6 m! H3 ~  Q/ ~- n1 v8 H' J8 {. g
  241.       else+ p8 g, I& b5 S4 Y
  242.       {# `- Q) ]0 W. Z& Z* g1 A8 b
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " S" d/ K9 B, \( N; V/ u0 \
  244.         memcpy(olds,file,sizeof(UPDATEFILE));9 K5 L5 y0 Q, T8 V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 Q0 L& r% z! f) |3 o2 C, W
  246.       }9 D& o" g" }- W' N; O7 T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    0 Q6 x# Y; o4 `
  248.       sprintf(filename,"(%s)",file->file);
    1 W' @% Y& ]9 B  R+ t1 k3 [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) c0 @7 R- \0 @4 c0 M( a" s. X
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! g/ K. s( `$ P' h. u
  251.     }
    ; H" H0 D' r/ C- G
  252.     dwCurrFile++;9 J2 m5 g4 D% B- ^/ w' m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    / K, r9 f/ x  n4 |8 G' ~8 }
  254.     {
    3 b* A" i5 C5 a, J% e* J* O
  255.       bSilentStep=FALSE;( ~4 J/ J7 V9 |' Y6 v: P
  256.       bCompressed=TRUE;% N+ S8 w! o/ K' p  F2 x
  257.       strExtLocal.Empty();
    9 z7 ^% y5 k; c8 _5 ]. o
  258.       strFullName=(*i).second;( \7 a. Q7 Q! }/ b; r4 Z: c: d8 g
  259.       dwProgramState=AP_CONNECT;
    * c; |8 L5 h2 }5 A" @
  260.       return TRUE;7 O- E( t1 ]- ~
  261.     }
    . y  d  x7 j; a) y- R
  262.     if(!bRestartUpdater)
    ; j) O  d7 T, t* Y" |
  263.     {
    2 b7 n: h' P( ]7 u  R8 T& r. }
  264.       int iCurrSize,iFileSize;" m0 t  S. h! I
  265.       iCurrSize=0;, n' c' f1 o# m- I7 I
  266.       iFileSize=UpdateList2.size();. ^& y2 x% h7 n' R) Y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ; M. r+ H- R* ?. r6 ]2 W( r+ U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ) _! b* D( t, f) `) m6 S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + ~" r' d1 }. ]2 p$ ^2 k. ]- D
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# ?2 P* ~# v# d! O9 X
  271.       Fclearf(".\\update.dat");% ~# |2 {) w. c* n! l
  272.       Fprintf(".\\update.dat","Bloodyf\n");) ~& {  O0 y/ b! {. g* z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 Z# N* F: L' J; R/ I! d& n, ~% n
  274.       {, b1 E9 f0 X2 q  W+ a
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())) t3 J7 i; M# s! \3 D
  276.         {
    % f' E& m* q9 [0 L- k
  277.           file=(*p).second;
    + C3 i8 N( b- R% |& I; H) x
  278.           sprintf(filename,"(%s)",file->file);
    . \) B$ k* i* |" i- q. L
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' f3 F8 r8 h! D0 u: C0 F
  280.           iCurrSize++;
    ; n0 D+ ~7 f7 ]9 Q7 c6 m$ Y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));+ }, V- ]: b" \/ j: C; `
  282.         }8 ~  G6 O0 T9 e1 h6 C  C3 H  b! j$ C  `
  283.       }1 [  A3 l" f6 F0 a+ t  E: D
  284.       unlink(".\\update.txt");
    1 h) {: c- D! K7 X* q
  285.       unlink(".\\update.tmp");5 {, n  ^, Z1 V% ^2 D
  286.       Fclearf(".\\checkversion.dat");3 g" {. Q0 B8 A
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ k# f# j  Q5 @
  288.       if(UpdateLocal.size())0 l) f( j( O3 L% N7 K* @- T
  289.       {
    ! i" l5 c4 Q  {" i' R
  290.         UpdateLocal.clear();
    + y, U5 J- K! s1 A2 k& [' i
  291.       }
    ' w# Y4 d& e) k9 k
  292.       if(UpdateFile3.size())4 B; N& ^1 J' ?
  293.       {& _& a, S$ `; Y4 R& A' V2 F& x
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ f/ H; Z5 `- O0 _" [  U
  295.         {- r5 i: Y* N7 m( q- X
  296.           file=(*p).second;
    + S# y) I8 Z- O$ F9 t
  297.           free(file);- _% d+ z- k0 L
  298.         }
    ! }# e) Z3 `1 I) ^) L
  299.         UpdateFile3.clear();
    ' P; z% s1 s% l; v  Y2 V) O7 {
  300.         UpdateList3.clear();
    5 O. y* U; @- A2 B$ g/ M
  301.       }
    - O1 o3 r3 e" t/ y8 w# x3 t% k
  302.       if(UpdateFile2.size())
    2 `9 v. [8 H3 u  x8 X# i- q; E
  303.       {0 ^% S% V- s" m3 R9 c9 n1 n+ F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      f2 m8 h3 s3 v1 O
  305.         {* {' N( i6 ~* ?& `% n
  306.           file=(*p).second;: q4 c: P! A; i% F" D5 |1 ~
  307.           free(file);
    & W; {, c4 E6 M
  308.         }
    ) a& j, P8 j5 ^; j( R+ F2 q; _9 T0 M- `
  309.         UpdateFile2.clear();
    " Q' |+ P& W# w" i6 X, G
  310.         UpdateList2.clear();9 _- I0 g. |( G. @8 o9 P
  311.       }
    " \! e, S, @, b# H: T
  312.       if(UpdateFile1.size())
    ; P5 n0 J# z6 c
  313.       {; p  K2 a6 E8 t  z6 m: K, t1 F6 Z
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : f  |" P$ Y( Z0 o$ k! M
  315.         {
    / G' s1 a7 R/ W5 p+ F; e
  316.           file=(*p).second;
    - ]  \/ u0 s8 a: }! q" V! h* C3 K0 s
  317.           free(file);
    & R+ R/ K4 {) J# H6 k- R2 ^
  318.         }
    8 b! L: Y& s8 ~* |9 ]7 c' {
  319.         UpdateFile1.clear();# y9 j- }" A; M& p$ Y1 c
  320.         UpdateList1.clear();
    3 `# `) n& A9 E
  321.       }
    " a, G/ P1 K6 X! j2 E
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & s4 G; _# P5 ^9 |
  323.     }
    ) p& W* F. b: G" b7 {3 C& T
  324.   }5 V1 ~+ T! a# Z
  325.   return FALSE;
    ; m, v) v: j# H# H) k
  326. }  T  l1 `3 T2 S# n! ~5 B7 r2 w

  327. 2 w) [0 M0 a! @. N# e
  328. void CRevAppApp::ClearAll(void)
    ; c! D: w1 W9 I* i. ?- _
  329. {4 z2 C0 P8 H- o6 p  k! F, F
  330.   LPUPDATEFILE file;
    ' b. N: p4 G  y# {5 O# N
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 P- U2 V0 `3 g$ V5 D$ ]
  332. 6 H* G6 @3 j( `" l
  333.   if(UpdateLocal.size())
    ! P* v3 g( J3 ]) w" d7 {$ a  r2 y  H
  334.   {
    2 n9 z) J$ v4 R9 _  W8 R
  335.     UpdateLocal.clear();' u0 m! P) g: K! E4 U: I) U* l
  336.   }
    ; c* s. X! a( h8 A& e  q
  337.   if(UpdateFile3.size())" g: C- S, w2 t2 _# l& ~
  338.   {" q% `- G: |, x2 H) C) M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . h$ z7 E+ z8 g- p
  340.     {
    * h5 s5 U/ \+ T# {. h- t
  341.       file=(*p).second;; f. \& k7 V- |+ c% Q5 C
  342.       free(file);+ B3 C$ x7 q( ^/ U, ?; y) ~. |
  343.     }
    ) ~; h6 n1 P/ v, r  ~2 `2 W& O
  344.     UpdateFile3.clear();
    ! `5 z! w! D" N! {
  345.     UpdateList3.clear();
    . i/ B& `* H) \7 p: {; N8 f( V
  346.   }) R0 w$ V0 ~: m) W& o) ?) x
  347.   if(UpdateFile2.size())% X4 k3 M6 p+ L, ~$ d
  348.   {7 e3 T" S, i2 }# @. c. \9 X0 d: l
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * G. w8 N2 ?4 w! D0 M- a. ^& h
  350.     {9 x: T; @. J4 A/ g2 g# v
  351.       file=(*p).second;$ E+ S2 w$ L$ f- k/ T) J5 ?
  352.       free(file);5 E" Q. N4 n; G& p
  353.     }
    & @5 N. }, G! h
  354.     UpdateFile2.clear();
    1 q- [7 e& l/ X/ c6 B, G
  355.     UpdateList2.clear();
    % v& P7 Q4 Q# Z* F9 Z4 X8 M
  356.   }# i' T: ?% m" g/ j- o: F1 B7 p$ o
  357.   if(UpdateFile1.size())
    8 N% T* [9 n/ _, c
  358.   {
    3 ~4 M, ~! l' D0 H: O4 E
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / x; Y; q# I/ \6 B8 @
  360.     {
    : v% b: u! }& D: h1 Q
  361.       file=(*p).second;
    3 {2 z* w: C3 I, f9 D) E
  362.       free(file);+ ]8 r$ B8 C) a4 L
  363.     }2 Y& @" P  _/ I
  364.     UpdateFile1.clear();
    / O5 {) C# U+ u9 e
  365.     UpdateList1.clear();' e  ~1 T+ }; H) e
  366.   }9 b4 F& R6 O3 n8 ?
  367. }  
    2 L7 |3 e" }' }! H$ A6 r
  368.   0 G! K7 V/ w! j9 y0 ]! c) H- Q0 q
  369. BOOL CRevAppApp::CheckLocalVersion(void)% p3 i! M' j1 F; a* Q4 }7 S
  370. {
      j8 n4 Y, {. ?" S& R6 X
  371.   int c;
    ! \1 L, {6 q! u" |- [: H
  372.   LPUPDATEFILE file1,file2;/ P. `3 |! {$ `& o5 s: o! c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , x2 t& A$ E& H9 d
  374.   std::list<CString>::iterator l;) H7 ~3 V) Q& d) B

  375. : ~) s9 _( }3 f7 o( K- Z6 q
  376.   UpdateLocal.clear();( k- l- |! ], Y+ C: f" S+ C" y1 W
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    2 b7 x& @) }, u3 ~% R! U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 x& {9 v1 j1 N, `* i
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    6 a: I( I5 d' o1 Y1 x
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" q4 B4 X8 f2 i" K9 r) D; \2 r4 T
  381.   if(UpdateFile3.size())0 q% Z5 ~) v, e: B- x4 U0 U
  382.   {
    ! _  u2 o  Y, ]# [
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ V0 B/ e+ k$ O. T
  384.     {
    " e, w, h2 m8 w% ^6 w- I
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! ~" z4 Q% Y& V3 [' b
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ e9 {* K& b+ D
  387.       {# G; y) z0 z; b2 m
  388.         file1=(LPUPDATEFILE)(*p).second;; ^! W" g6 r8 \- ?- l& X" f
  389.         file1->vers=file2->vers;
    ) {! X- v0 p$ d/ S" J
  390.       }
    % D  y3 B5 A- [
  391.       else" L5 k' x/ a" F' Z& B6 p& [7 ?- D  T
  392.       {- x: T& d8 t9 E, I
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ B; H  x2 o0 u- c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: }& ^2 m7 N' `" q0 P+ E  W% M, v- m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - x) v" |/ Z& Q3 P
  396.       }
    3 r3 a5 s. n5 m7 |' y6 |
  397.     }
    + P0 W! A' e3 S, K9 Q
  398.   }, G1 p* d5 j' F1 R; @- Z: ]8 }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)/ m0 T0 P* j& @  R' j
  400.   {; D& r% @0 }" \  X
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())+ K* b- L9 ~: t0 I5 L$ ~
  402.     {2 ]2 \+ N' z6 c5 ?8 v
  403.       file2=(LPUPDATEFILE)(*i).second;
    + H2 o( Q, L8 t, c% c  j7 @2 U3 N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * ]! Y: O- |5 j. m7 p' b* M7 |9 R  X
  405.       {
    ! {4 J, A, Y6 E# c
  406.         file1=(LPUPDATEFILE)(*p).second;/ K) b! X1 ^# |; f) {8 z- M
  407.         if(file1->vers!=file2->vers)
    : J$ U" o1 Y- [' e3 l# H
  408.         {8 T. G7 V! `* l
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 Y: U7 S8 R$ H0 _3 M. g
  410.           c++;
    , A% g+ W  B+ s5 e" e! }4 X
  411.         }
    3 M* \: R) F9 o4 x
  412.       }" U3 I0 u& G  {; M2 F
  413.       else
    ! o" S2 ^1 f" ~. Q5 K2 t1 G* |4 B
  414.       {
    - W+ u8 N$ U, q4 _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, f2 G3 n; K% [- j
  416.         c++;
    ! w( v7 C; R6 ^  e0 M" _" \3 a0 J
  417.       }. y  z# x0 h. C$ S! i
  418.     }
    3 l1 |5 I0 Z  \% y  V
  419.   }
    1 S; G$ r. G. }% b
  420.   unlink(".\\DownLoad\\update.txt");
    # Y! P& J9 [: Y, }0 c$ h0 H) T) y
  421.   if(UpdateLocal.size()) return TRUE;- @% e) T) x3 V; u2 i  R
  422.   else                   return FALSE;+ }' O8 d. t! c1 V  T' j
  423. }
    : @+ v8 z: O2 u2 I' S

  424. - U) I; _, P6 \- {
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    - e! U; R) r) h, h* V
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"/ b5 B  x: n; Y8 O% }6 B  i( I0 R: z% C

  427. 2 {& e, p7 v1 m
  428. # K2 R: o+ q$ N

  429. 7 B7 Z! r+ ?& D6 l5 r6 ?1 c; ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 `" \, T# w! s2 }; v2 P  g; t$ Q
  431. {
    " d4 u1 ?% ?0 @& N2 [
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;9 b* A  c( x+ p* {
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 D9 @8 Z5 a3 B9 C/ j
  434.   {3 r8 X/ o. }, `& K6 F* C3 i
  435.     char szLanguage[50];
    . \0 @" q0 H% ]5 n$ k' e2 i) H( L9 H
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% o$ k9 {# w/ R( ]' X/ j3 {
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
      a+ s- K7 H) L. _8 |& g. x6 B: z
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 {' H4 v. P. J- W, m
  439.     else                                   m_iLanguage=ENGLISH;# u. ?% n' B8 C# M
  440.     char szRegister[100];1 V5 D* D6 Y0 Q/ L1 M  p: W
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");% [1 v/ g7 C  l" `. t
  442.     strRegsName=szRegister;1 P7 w( n6 S$ E9 ~# D. b$ C) d2 r# y9 Z
  443.     char szPatchURL[100];
    1 N3 k# H5 {, ]
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    * r5 v9 ?* }+ d1 K4 e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, V2 n" ^$ ~+ t
  446.   }
    8 @% Q9 M" g6 ?* O" Y& Y
  447.   else! Q* L; K9 C7 u1 c# M
  448.   {% [+ S# {1 v( S2 s8 U/ H/ D
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    # I7 L2 v* O6 G2 m2 T7 ~0 j
  450.     strRegsName=DEFAULT_REG_URL;
    " m' i5 b: P2 q; k! q
  451.   }1 A2 [! L6 r* Z$ J/ C' M' ^
  452.   if(GetFileAttributes("hosts.ini")!=-1)& F) q4 I# i0 |* z3 r9 G) o) `
  453.   {
      `. C) c( V. s9 a  Y7 O) d! Q  ?
  454.     char szIP[50];
    5 ^, q" v, V8 J$ P3 Z+ d. C( I
  455.     char szDIR[300];
    % e. J; h5 x  a0 x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    $ a5 g* s" r) x4 r% h# K
  457.     {
    $ n2 f' B& G7 k( G5 R: _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");) y. R- a# k  ]% r# z  \/ R
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; u% B7 v0 [0 N
  460.       strHostName=szIP;
    # H8 P+ z8 o. }' n' Q
  461.       strHostPath.Format("/%s",szDIR);6 g1 [8 `$ C; ?, H  t
  462.     }
    2 y  r, @2 s1 l! H
  463.     else
    6 ?2 @& f6 |; q
  464.     {1 I- s& J# ~9 |% \
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 v1 [1 ?! t, u
  466.       {* A4 i! G& o$ \+ x. @& r
  467.         char szLanguage[50];; ^# o0 ]$ h& l  V; b( {
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 P7 g' s8 K( |5 z& r
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ I5 N, x1 m6 V3 c
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + n) M# g% Y9 T9 J0 Q) ]% f$ j
  471.         else                                   m_iLanguage=ENGLISH;; u! [- |. V/ K' C+ k7 X2 c
  472.         char szRegister[100];
    & x7 O. D9 b/ ]$ |, y3 Y: |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    8 `; \% I; w( l2 ~5 w& c9 P/ g
  474.         strRegsName=szRegister;/ }) w! f& i4 l3 {2 e; g3 q
  475.         char szPatchURL[100];
    7 S7 a) L7 q( I: y0 @$ @, b# [
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 k2 Y! R$ s  ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 V; p( [( ]7 a4 Q
  478.       }! m3 l+ {/ P+ k$ Z( E, p3 s( J
  479.       else
    $ {6 p, p8 }  x$ a9 \
  480.       {
    6 j% m8 ?1 l) h( Z, g3 O* N
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);' S+ r( w, q( p! i+ f
  482.         strRegsName=DEFAULT_REG_URL;
    : u5 V1 {5 _4 Z" d' F1 v
  483.       }* z+ F2 K7 _. `# D4 i3 Z
  484.     }
    / y% |4 G4 z- t$ A) M- w
  485.   }( o( y& [' Y; o, ]+ z, R# H
  486.   return true;; B0 x. E; g$ i0 N( r
  487. }/ ], }  `# }* o1 N+ ?- ~2 E  Q) i

  488. . L% Y! ?2 h, m7 v! T5 s
  489. #include ".\ZLib\unzip.h"
    8 ^( h6 k) U+ z  \; t6 u6 f. k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' x: v- ~+ W& A' o2 K9 P
  491. /////////////////////////////////////////////////////////////////////////////
    $ z( |& F! w& _- s9 D
  492. // CRevAppApp initialization
    & I4 p# s1 L" b3 c$ O

  493. 0 x/ V/ k$ S, j6 E/ ^: D" j- u5 s
  494. BOOL CRevAppApp::InitInstance()7 s. ]; [0 }8 v: w" q. n& H
  495. {3 [! d. X  L. t; s- W5 }: l
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 _9 f' w7 N! s6 L3 X

  497. " y% y9 _* Q9 P9 i1 P
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 g; v' D' R- y* g: L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))7 k0 p# d1 g; b% n7 Z
  500.   {
    # m' r: f. z) q0 @1 N- o1 Y+ G9 U% [
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 `! S2 [! Z& U4 Y/ r7 P5 c+ o1 W6 R
  502.     GetPathFromFullPath(szPathTarget,szPathSource);+ Q* m* ^$ {1 N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))7 c: S8 F. ~8 p& @5 L9 }
  504.     {* ~" ]8 ]- \9 V8 W# W9 E2 e
  505.       strcpy(szPath,szPathTarget);6 p- H0 c; `' p
  506.       SetCurrentDirectory(szPath);9 x; y# f6 Y3 ^3 F6 y( @
  507.     }
    2 Z; V! V- w3 a  X2 {5 }( R
  508.   }
    % c$ U8 r0 l. o: d* d
  509. #ifdef _DEBUG' U$ n; p0 |# z) W$ }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))4 x! h  U' K/ `
  511. #else: {  Z& W$ o, _' z) g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))' }  i2 V: ^6 P. h9 c7 Y
  513. #endif
    & ?( p/ Y6 @- |1 x- [
  514.   {
    4 `8 D8 x- F0 J8 b" V: e2 n% p
  515.     char tempFileName[MAX_PATH];
    ! E" j: X* P, P% q
  516.     strcpy(tempFileName,szPathSource);4 D! c6 o8 J4 g: B! O; t
  517.     tempFileName[strlen(szPathSource)-12]=0;0 l& |& L! Y4 b! T2 B( B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    $ Z3 T$ ~1 X7 K7 z& f7 C
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ l* x# g6 i# a4 n: d1 T- u
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / n/ f' j- K0 G! c6 p
  521.     return TRUE;
    6 R- i5 {+ c+ j
  522.   }3 {; P" u& Y6 z2 c+ f+ P# Z
  523.   // Nuke 0118: Delete run.exe4 O5 I! x% y: p+ X4 h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 ^7 g6 @* K9 h7 Z0 Q; J" D
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");+ U& L5 m" S, b( v
  526.   if(!ReadCfgFile("Config.ini"))5 S4 H5 P7 \2 }
  527.   {
    # y6 e+ N" V0 E! b; S& p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);' g1 D3 _* d1 b/ G
  529.     return TRUE;' m3 ?) D: d$ ~
  530.   }6 ^, W6 Q5 n* }* Y6 Q5 s
  531.   HANDLE mutex;  M3 e' G9 W( T0 ]
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 _4 U! g: o7 I) H7 s/ W
  533.   {
    ' O; E: h9 ?" I% t+ A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) U) E! m, U$ t6 l) |( y4 J2 h
  535.     {
    # `2 A6 V1 ^% l  N$ q3 j
  536.       CloseHandle(mutex);/ _- a  v* L0 l
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 ]( R. e( ?$ X8 h5 ]
  538.       return TRUE;% y% u+ w) J+ P5 R8 H1 L
  539.     }8 p- T& ^$ k( K
  540.   }  1 s9 w6 c9 r! `
  541.   CloseHandle(mutex);
      e8 R- i. [( F6 l9 p- j9 h& T
  542.   y3 ^$ z( E" V6 [' x( g' S
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; C: `- n3 i% d% ?  q/ T3 C* |- E
  544. ; e. P# w4 Y4 s* L& U
  545.         AfxEnableControlContainer();
    # x' {3 g! a% g5 j  r% i* K: v
  546. 3 |5 P' |; y8 Q, _7 M0 N: s% T
  547.   bCanUpdate=FALSE;; B/ e, ~6 A5 x% N5 Y
  548.   dwStartUpSteps=1;
    " m1 D3 A: |: w" W8 k" E
  549.   dwProgramState=AP_NOTHING;
    3 ^' `+ F. e% W: J# V
  550. 3 W1 o% q2 d+ W% i
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; X0 ~2 T& r, }  h6 B" v  m) Y' [
  552. ) O' Y8 U& w  F* I" \" o  q# I0 v
  553.         // Standard initialization
    1 T1 ?; H$ {, F) ~. Z" b4 v
  554.         // If you are not using these features and wish to reduce the size. m0 _$ j4 w( h9 o) M+ y1 ~
  555.         //  of your final executable, you should remove from the following+ }7 V; i6 N) N' f
  556.         //  the specific initialization routines you do not need.! u# C- i; O, |0 [% |; q8 H
  557. : C( W9 r: f  |) X' k( G
  558. #ifdef _AFXDLL
    / J6 C$ k* z. N  h4 v+ \
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' A. Y0 u! B) {$ O! w
  560. #else2 n8 S% W: {2 x1 |/ i8 c# z7 z6 [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      t; S7 F3 L- K  q* n+ d5 s
  562. #endif
    % f4 o! k/ w( ^) e

  563. " F0 ?; W- E% q0 x  T5 L
  564.   dlg=new CRevAppDlg;
    " f# T. D, K. w  F
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    , P2 {4 x, k5 P. B  w2 l1 ~+ M) W3 H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ @& _& r1 Z+ b) o8 {
  567.   m_pMainWnd=dlg;% X( f  R9 g, @0 O% w

  568. ) K) }; P0 j. R# O9 V. a+ a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - W5 `% e# F0 i4 ]4 \  |
  570. * P7 ^+ g& ?2 Z0 O) T( C
  571. //  GdiplusStartupInput gdiplusStartupInput;" V; U  g% ?) K2 }$ i
  572. //  ULONG_PTR gdiplusToken;. Z! Y  [7 a3 B! y. w  R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);# L& ^: Q0 x$ ~% U2 C3 m" x8 D

  574. ! N/ T  g0 d( ~- ]
  575. //        CRevAppDlg dlg;
    . ~+ z- i: a7 H
  576. //        int nResponse = dlg.DoModal();/ u3 w: ?% c; @9 Y
  577. //        if (nResponse == IDOK)4 ^- t. f* ~2 q" l& j4 g6 {) |. D) z
  578. //        {
    * Z+ J# R: i$ o% a' E4 r* i% m# r. u
  579. //                // TODO: Place code here to handle when the dialog is& U- L: X" ?2 f1 }
  580. //                //  dismissed with OK
    5 t$ F; C8 l9 [9 ]. k* w
  581. //        }/ ~0 p6 Y) f  i# N) S- j
  582. //        else if (nResponse == IDCANCEL), R, X8 A+ T8 q9 A7 z) z: h
  583. //        {2 e) g: |4 z2 W& I  j2 b+ |
  584. //                // TODO: Place code here to handle when the dialog is
    9 t4 Y' Q/ p+ Y) D7 u' M
  585. //                //  dismissed with Cancel6 x" Q2 c: V& m
  586. //        }) }9 f" d% ?5 k! J
  587. , c& l2 a' k0 r( {
  588.         // Since the dialog has been closed, return FALSE so that we exit the: u# A( v) U6 G3 l+ i6 A
  589.         //  application, rather than start the application's message pump.8 \5 X! n3 k7 B7 _  ]/ ], s
  590.         return TRUE;
    , ~8 Y2 u9 \* i. l7 c2 o
  591. }3 n! A6 x- B( Q5 |/ G1 G: _
  592. 3 p: N# g' }! s7 N- Q* X  Q+ s
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* V# A7 t% f9 A
  594. {
    " m+ O9 s+ ~0 a. j
  595.   int i;8 H( z7 @" w) _) E: ^& S" [; g8 g
  596.   char *szRet;/ `# A5 t- w2 d% e( G
  597. 4 b$ Z/ P; P. k8 a7 W
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , U% X/ v( K2 E, K
  599.   if(sztoken)' {: ^6 z, a( c- C2 I: r* }1 m0 U
  600.   {
    * \- P: w  d2 R
  601.     szRet=&sztoken[itoken];
    - U1 \- w0 {: w; U; K5 C
  602.     while(sztoken[itoken])
    " v* a3 M8 Y% ~+ A  A5 b
  603.     {+ F+ S" y' Q  {- f) b: W, @
  604.       for(i=0;i<(int)strlen(token);i++)$ c3 E  K2 ~" c5 E5 l0 T9 I
  605.       {
    7 y! M# v; O& i6 I" @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* M  Z& }3 O8 W* ^$ k' h! L" ~
  607.         {/ p! _( r2 d, {  J) ]
  608.           sztoken[itoken++]=0;. e/ ^6 e0 t$ o
  609.           sztoken[itoken++]=0;
    1 S/ L- x: ~; Z1 y& C
  610.           return szRet;3 o, I9 ~2 ]/ X' D
  611.         }
    - X  n0 \! D6 l. O: V& l
  612.       }
    9 V! B, g" \, O3 X1 S
  613.       itoken++;
    + l- k6 X! A9 x5 i* X, p0 |
  614.     }" D1 y9 t9 [8 e) Y& z
  615.   }* h9 D8 f3 v+ n/ g% b/ y3 n
  616.   return NULL;
    ' P, g+ s+ k! }5 Z) |* N7 G
  617. }. I: {, y9 C% H! g

  618. 3 G. r0 B) W4 {' v8 S0 P4 i1 w- u
  619. void ProcessProc(long Total,long Current)/ R# w# [* g: e" `" ^
  620. {2 g! S6 g& i& K1 l4 D; `
  621.         MSG msg;
    5 A& M' g2 W- i' v2 ]  \9 r6 k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    . n/ }- }$ m- t( a( d! h$ X
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " O1 J5 {9 F# ~$ U8 ^
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" |4 O# A& g0 K# `7 i
  625.         {
    + u+ O* F6 U9 @& H
  626.                 if(!GetMessage(&msg,NULL,0,0))8 }. y) I2 Z7 b* v6 F0 n' s
  627.                 {, z0 A" a; O  C3 P/ m0 H1 r
  628.                         return;
    . {8 @4 m. ^( `* }4 \
  629.                 }
    5 s3 V7 f  V- F4 Y2 |7 ~+ @! d% ?
  630.                 TranslateMessage(&msg);6 W  W3 S$ g8 S/ {
  631.                 DispatchMessage(&msg);
    * M. p& y- \+ w2 p1 H
  632.         }       
    0 `$ n+ v7 Q  @3 D
  633. }
    ( j- q2 q( ~% ]7 m5 u0 F
  634. 6 D; S9 x. P( ~% Q
  635. BOOL bFirstChar=TRUE;
    % d! C' z/ O* e- o. q' `' Z2 |

  636. - q- L( i2 f& H
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 n$ N  ?) z6 x  z9 u/ w
  638. {
    6 L5 D2 A- H" \, Q/ }. o
  639.         // TODO: Add your specialized code here and/or call the base class6 x' B% P0 D/ w- b' ?/ ^
  640.   switch(dwProgramState)
    % q" B* v$ T9 y% l, j6 Q) R! C. q
  641.   {
    2 p! e/ |; d& d( n, m- G  f
  642.   case AP_NOTHING:
    4 {/ F- ~  O2 _! K; I; B& U, O' |
  643.     switch(dwStartUpSteps)/ f$ o' ^" [7 |
  644.     {
    ( W/ _$ h* t: k) z
  645.     case 1:) L8 Q0 _* @7 ^  g4 K7 _
  646.       {7 ~& n5 f+ k- V7 w1 N' p8 K2 F- `4 ?
  647.         int i;
    9 a; q% N& j2 g& S$ x
  648.         CDC *pCDC=dlg->GetDC();* D% _' T4 K+ B2 W+ y' F
  649.         HDC hdcwnd=pCDC->m_hDC;
    . _8 R. Z+ f4 q1 e5 m1 @& C
  650. //        Graphics graphics(hdcwnd);7 I* N6 L1 J! f5 L7 b8 m
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");9 \2 s3 }% j, q/ t
  652. //        INT iWidth=bitmap.GetWidth();
    / X1 w4 t- p0 l3 B4 ?+ Q: U# I& u
  653. //        INT iHeight=bitmap.GetHeight();- e1 P3 d$ P- S4 I3 j# z+ T0 T6 r: J
  654. //        Color color,colorTemp;; t1 a) Z) P& E, K1 n0 O* H- z: ]
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)0 F8 `5 p  g+ B
  656. //        {# T5 y1 S+ z, T+ D0 [/ p
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)! M* |, r. j3 L0 K
  658. //          {
    $ u, E+ V% `7 v. i5 J: j, j2 Z% V
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; d' ]4 T9 l! |# w+ |& K9 h/ Y
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 r6 ~7 X  J" o1 y- D  g# s
  661. //              (BYTE)(255*iColumn/iWidth),! r3 M5 i: [0 [3 M$ F
  662. //              color.GetRed(),
    7 V" a8 k8 F& K" v
  663. //              color.GetGreen(),
    1 Q' }$ D& W! m. k3 a6 ?
  664. //              color.GetBlue()));) }: Q: H) ]- B* d( k  U: R
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* ~0 @) |8 ]- y* s
  666. //          }
    2 }5 G) G; \+ x; Q" q
  667. //        }8 i; _+ X4 |( S1 G1 T1 r
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    , \  o) d/ B6 ~9 B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    4 b  `5 t0 s; {  d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- |8 F1 H" n8 f1 O, l& z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    % n9 Y  m% o# Z8 Q) X
  672.         for(i=0;i<240;i+=8)
    4 w1 h3 l0 {' J' L, u; R
  673.         {
    + ^& t' |3 s( R: ^
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 Y7 W4 z8 v& [
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 _' J3 }: F4 C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; z+ e( K$ c$ |' z5 @
  677.           Sleep(33);
    - p% l* F; \! ]
  678.         }
    2 ~. s3 ?4 M9 _- X; g
  679.         Sleep(1000);
    / y1 f! L2 l' I, B
  680.         for(i=240;i>0;i-=8)
    + t; c6 E% @0 K% z- a
  681.         {2 Q) h$ C+ Q% n3 u' H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 m. }+ b1 Z* P. e$ ?/ Z/ P5 c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 R; p$ F. i0 n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# c$ \4 z# W, [8 P6 b* @5 n* n
  685.           Sleep(33);0 d  P0 U, Z8 m. r
  686.         }. u2 G. j" A1 A  M/ B1 U! _
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    : Y9 K3 ?6 |) X6 \0 u5 Y
  688.         dlg->ReleaseDC(pCDC);+ ~) S8 |  n2 n# z) u2 ~
  689.         DeleteDC(hdctar);2 G* l0 g  L8 u9 M/ r1 l0 J. T; q
  690.         DeleteDC(hdcsrc);
    " B2 m1 X: F" X: `
  691.         DeleteDC(hdcorg);
    1 ]* O& _% {$ c9 L1 Z' i3 \) k
  692.       }+ I+ y, L" \0 P& r& v% F/ I3 y3 U2 M
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 G' W0 [* q. B9 M* o8 L0 b/ o
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    / `2 X8 C( i' `9 C
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 Y% q5 d. B' D0 r. Q
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");) c2 E: o" G( @8 w# H( z- s* Q9 ?
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 _3 G8 }& E8 W6 F. E  b
  698.       if(!Dn.Connected())! q  i1 K6 k8 L% o# O
  699.       {4 b$ q& M- b- E  u: H6 T- T3 _
  700.         dwTotalFiles=1;
    ! A2 ^8 B# m, O9 s0 K# l
  701.         dwDownLoaded=0;
    5 E# t/ y( Z! ~* Z
  702.         bSilentStep=TRUE;6 q& c  o) G: `- [- W0 C2 P
  703.         bCompressed=FALSE;  N8 J2 @3 |6 z; J; }$ {
  704.         strExtLocal.Empty();
    6 P" @8 {/ @; V% H9 u) R
  705.         strFullName="readme.txt";
    8 i6 R# E# n0 o& O/ s
  706.         dwProgramState=AP_CONNECT;
    ! h  K6 u+ \2 S* b& o
  707.       }
    ( e0 u5 S4 m+ B! m5 L5 S0 b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();+ ^5 M8 g$ J" w6 r1 X
  709.       dwStartUpSteps=2;! a' E  ?2 ~3 U; B" K7 i. N
  710.       break;0 t5 Y) N; y' K/ d
  711.     case 2:1 r  j$ _8 ^) L& S
  712.       {+ e* W- k8 T: ]
  713.         int iEOF;9 z1 n- V9 k# m8 [2 r3 {% ]2 ]
  714.         FILE *fp;
    # Q6 m" U, B6 m* w4 T2 Z+ S
  715.         char szString[512];# s/ w% N3 I* ]: @5 A0 G4 `8 I% C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! S; F2 P4 }: \5 k
  717.         if(fp)
    : z) M# n, I$ L1 P( x* Q5 c
  718.         {! B1 V2 ^8 N8 _; [4 t; U# l# m
  719.           do  O' G! A, O* ~$ i* O
  720.           {/ Y" X9 |$ L: Z/ g
  721.             iEOF=fscanf(fp,"%s",szString);
    ) i. @# L* V5 k4 X# k; r. Z$ g: r
  722.             if(strlen(szString))7 c; j$ C0 M" f4 x& N" @2 r
  723.             {
    ; V$ Y* r; V& y3 b, G) q. D& r$ w
  724.               if(bFirstChar)3 m# ?+ j& R7 L5 N+ q
  725.               {
    , a/ p; O6 k: ^2 ]) \" e+ d
  726.                 bFirstChar=FALSE;5 F' p/ k% n6 M
  727.                 bConnectIsBig5=FALSE;5 e- l* X3 t# [+ c3 G, S5 R) v
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ v* _& T+ O* U! R( _0 Z
  729.               }2 p+ A; H; N2 m8 c
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 Y+ h* @6 t% \% o' k5 f* V4 z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + G( h! K/ S% O
  732.               dlg->m_ListText.AddString(szString);# }! b: Z! ~0 T" T; L/ S+ w
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; C6 s. F/ K% P
  734.               *szString=0;+ B9 W% _9 f, ]- U" ^
  735.             }
    & ^* I. b; ~  N% H- i( ?
  736.           } while(iEOF!=EOF);
    4 k( K% [4 v- `" K+ Z5 z
  737.           fclose(fp);
    # l- O9 r5 E+ M6 m' J, G% O
  738.           unlink(".\\DownLoad\\readme.txt");  ~2 r# {0 S* o6 m( s  ]
  739.           dwStartUpSteps=3;! [% f/ i8 j  Q9 I2 i
  740.         }4 o) H$ d- L' b: q5 y3 ^  u
  741.       }
    : @. m! x+ g$ [
  742.       break;& U* k4 z' |: E7 ]1 u6 X6 z! \
  743.     case 3:' E5 z! B  Q+ |1 n* t& y! c6 }
  744.       if(!Dn.Connected())
    , i1 P; }8 J4 R* J2 ]- ~  v
  745.       {9 \- C& F# K$ X2 B( N
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    % M: R% r5 `8 m/ {$ K/ _% g
  747.         dwTotalFiles=1;
    4 i  a/ |) C. q2 }+ R0 j
  748.         dwDownLoaded=0;1 n7 g3 V7 y# u
  749.         bSilentStep=TRUE;8 R8 a# [  E* c4 {3 p2 v- P
  750.         bCompressed=FALSE;5 m* W, q: N/ |# p
  751.         strExtLocal.Empty();  n: A- W4 E6 C. O
  752.         strFullName="checkversion.txt";" `4 h$ R5 |7 v
  753.         dwProgramState=AP_CONNECT;
    + r# x' ^& T2 [5 s' }. P
  754.       }
    ) i* U6 W, z, g+ D; L
  755.       dwStartUpSteps=4;/ \/ u- v/ F! ]# ~8 r: [
  756.       break;
    # y) `( b7 Q: r9 K" _5 K
  757.     case 4:" q+ x* Z$ D" ~
  758.       {
    9 R4 S% |& p7 |' U" Y. k0 k' b
  759.         FILE *fp;0 G3 X; S& }4 f3 J8 v  g( U9 i" F$ u
  760.         char szString1[128];4 S7 E& l9 W5 ]0 `0 P5 C: M
  761.         char szString2[128];& n, ]/ V  @. b- l, N, Q/ H
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");4 x: W. e$ O' l1 Q2 s/ y' d
  763.         if(fp)1 a7 J8 B1 a" w* c
  764.         {
    9 y9 o/ H. \9 N: ]% L( H5 Z1 n& H, `
  765.           fscanf(fp,"%s",szString1);6 N2 v- k  p2 p) ^  V
  766.           fclose(fp);
    3 q/ r7 U$ S# N! i: j4 ~% I" x
  767.           fCheckVersion=atof(szString1);
    1 B5 P  t, o% S& F0 ~* H* n
  768.           fp=fopen(".\\checkversion.dat","r");/ C4 @# r* N9 W3 ]; W
  769.           if(fp). r/ G* C& A5 t1 [; C- O
  770.           {  D2 S3 ~3 L1 C+ E
  771.             fscanf(fp,"%s",szString2);
    + V2 Y* f, ?7 h% u% ]& s  K
  772.             fclose(fp);7 B0 j6 ]; b. C/ ]
  773.             if(atof(szString1)!=atof(szString2))! z2 {4 @! W2 P4 x6 N
  774.             {9 g# F; ?9 o- T! m
  775.               if(!Dn.Connected())
    9 I9 k5 p" n' K  \; t% Q
  776.               {2 B: ~. H# F+ e2 ?0 D3 d1 r7 U
  777.                 bFirstUpdate=TRUE;6 l, H" ^& ~: R, N, B; R4 Q
  778.                 dwTotalFiles=1;
    ; F2 v1 }/ w7 X: M; i- h
  779.                 dwDownLoaded=0;5 X- g; q" Z! s) B
  780.                 bSilentStep=FALSE;
    & y1 h! b1 N2 ~. L8 a5 o$ M
  781.                 bCompressed=TRUE;
    , C' r3 a1 a! T8 y4 i$ D5 E8 \
  782.                 strExtLocal=".\\DownLoad\";  p3 i& }7 W% J, ?, O2 [5 N
  783.                 strFullName="update.txt";) u! Z0 W8 |0 |  R( d6 A6 K! y1 F
  784.                 dwProgramState=AP_CONNECT;- s/ E/ X; s" Q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - H& b: b$ w$ ?0 c" e
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - x5 A* \. B' n( L
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");% s: ?8 u' D3 J+ A: P" U
  788. 3 s3 w9 H+ F3 @% \
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + ]2 n$ a6 n7 h! f/ k3 Z, p
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    6 p4 k* a( F3 @9 j  D1 l7 I
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; b5 ]# N9 @) _# U6 E
  792.                 {
    6 a( [3 g3 T/ |+ `, a. G' C) y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( U, t) p4 ~; x6 z, E
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");% B$ B# }: N& B7 {& F% d
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");& Z( D4 ~1 k; \& `; j: a: O( v
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 ~& q" ?( ]* k/ H4 G* ?* D( ~
  797. ) b3 g7 b& s" W  h; r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / {$ N6 X0 C5 e( H% G; y8 E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 A: h! F/ {. u, [
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    # y% r; r) r3 j  _5 |# d
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, [$ E8 G5 L) O( x' u
  802.                 }0 ~" @8 q: G, t$ @
  803.                 dwStartUpSteps=5;& @# `, a4 D  }3 l8 y' `* E
  804.               }
    # D' W7 O( Q- d# z' C; D  |9 i
  805.             }7 w$ z+ ?: v& k; [$ K  ?7 m7 ~
  806.             else
    , i5 `, A# H) C6 R
  807.             {) ?2 Q$ k3 s4 e* F6 w; d
  808.               unlink(".\\DownLoad\\checkversion.txt");
    4 S/ h0 P  S# n' |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 ~2 V3 d2 L& q/ G% }; h
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . \* B: a. p0 _3 g
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; X4 P8 t5 s2 u/ P: z8 ~
  812. 6 A4 v6 H) W- K+ p
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 L' J: H% g/ P3 c
  814.               dwStartUpSteps=99;* U; V  K) ~/ r6 l- `& b  ^( u8 U7 f
  815.               bFinishUpdated=TRUE;
    / |3 F. I; o4 F/ J* {2 k4 t
  816.               bCanUpdate=TRUE;4 ~6 p6 A! u2 j" F+ B' S
  817.             }# C# }5 O1 o* {. F( ~! {0 g( ^
  818.           }! T4 C' x& Y: r6 [+ p% d2 V
  819.           else
    3 I9 i% V$ L$ d' n, D4 l0 }
  820.           {
    ) N, c7 z" ~$ M- {# b9 v
  821.             if(!Dn.Connected())) H7 c) H/ M/ Z+ g
  822.             {4 t& ^! A% T1 n
  823.               bFirstUpdate=TRUE;/ I3 E5 N4 L& ^7 K$ @7 I
  824.               dwTotalFiles=1;
    " Q3 m4 o4 G2 P+ w
  825.               dwDownLoaded=0;) t& g/ f) Y# ^# _
  826.               bSilentStep=FALSE;
    ) \1 j2 K1 N) V) n4 r
  827.               bCompressed=TRUE;
    ! `% V6 C# u6 e( y: g5 @7 a7 z
  828.               strExtLocal=".\\DownLoad\";
    7 |- C0 V" I; W9 m
  829.               strFullName="update.txt";$ }, x# g# a! Y: G4 P7 I
  830.               dwProgramState=AP_CONNECT;
    & u+ E; z3 X5 o% g/ V# q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / @: Y2 y; }, w
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 ^9 s. D+ y! B5 f0 `% L) a
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  m/ A2 e  o2 ^6 E
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 E4 y" z+ R/ Z* g& t* w) ?- V
  835.               unlink(".\\DownLoad\\checkversion.txt");/ Z9 v$ D' Z& U* T3 z
  836.               if(GetFileAttributes("Wsa.zip" )!=-1). `. C) S0 K# O) G. y
  837.               {
    : j0 c6 {6 k7 [4 X0 m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");( |6 a5 ], e. y- ^; }
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    % d6 l) X9 ]$ p% C4 U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ! V, ~2 C; j- Z
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ V3 Q4 Q# y: _, z. m  }1 S
  842.                
    ) R/ Z1 t" O1 P" y1 h5 q( c7 R
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. p7 t. C2 |0 F8 C
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & s0 Z8 f& O! y6 h* r2 v- ^
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");4 k! k9 ]5 i$ \  E) h3 m$ V5 x
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Q/ c" M3 `5 j6 j3 O- w
  847.               }( N$ b& C9 ]+ R
  848.               dwStartUpSteps=5;- T+ [2 p* F; `
  849.             }
    * v4 M- M! J+ c; T
  850.           }% i0 U" u6 A6 A( v( Q0 w5 ?
  851.         }2 p( x9 H2 T: |. f7 R  T& }: U) m
  852.         else4 \; U8 I! V4 ^1 k  e* b& K$ E
  853.         {  Z, m) H+ `  S7 F/ ?- ?$ c
  854.           dwStartUpSteps=3;9 F( S# k* w7 ^# K
  855.         }
    ; g8 U+ K$ s, O. t8 ~' C
  856.       }
    2 \; D) i: v/ F9 k  w) ~8 c
  857.       break;; v, J2 A  V# j
  858.     case 5:
    , x, T: y" `. r* B  y
  859.       {; f! g# l# v- H4 ?' h
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)' \# j! ~" [' r+ r1 j$ y3 h. w7 q5 O4 d* b
  861.         {1 X# D( i2 T/ K/ Q( z0 _$ O: P
  862.           int opt_overwrite=1;2 F. T" q  k" r& \& n
  863.           int opt_do_extract_withoutpath=0;
    5 N7 [4 \7 I6 u9 g
  864.           unzFile uf=NULL;
    % I& J$ W6 R5 t1 _9 o
  865. 4 _# ~: C. D& u2 ~- u
  866.           uf=unzOpen("Wsa.zip");
    ' Z/ a9 y$ u3 N4 e% D+ C, |! k
  867.           if(uf)
      W- n( A9 ^+ _0 X8 o  E
  868.           {
    8 h1 N8 k" w) K4 ]3 V
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);( {# A  a' U' Y! n/ y
  870.             unzClose(uf);8 W/ E2 H! a1 N- M/ z
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");7 @  n, n5 ~, g6 j$ D& c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) s( A; c% P# P6 y' N5 _; U2 h5 I
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % Y- ?8 ~2 s/ h3 @! B9 ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 X% Y; z5 B- S" N& H
  875.           }0 S; d8 e% @2 ?! J4 Y
  876.           DeleteFile("Wsa.zip" );
    # `, r% X$ V2 `& ?, n
  877.         }
    9 P% J8 H9 m3 G+ ?; }# O; e
  878. # G0 P4 a9 Y' k" t4 v/ x5 S
  879.         if(CheckLocalVersion())
    : e) s/ h  i, N  W+ h) @2 V
  880.         {, J; T) w$ }4 V. x0 O1 x
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");0 s9 x0 ~2 w, H7 S- s! X! E
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");( L8 `; ~: a) G' h, `
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    0 l' \- o6 Q- ~! Q- l; Z7 I
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " v+ D9 L0 D) G7 W7 n7 v
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    * K- s3 p  \. w3 q1 [
  886.           dwStartUpSteps=99;6 [. Z. ^* i- @! x, C
  887.         }1 v, ?/ P( N! V! ~$ d+ O
  888.         else. J- _/ F9 g5 r1 T: v$ Y3 X7 K" ]* V
  889.         {
    $ F4 p0 M: o; A, Q0 H- `
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    4 C$ t  H' [; C9 [# z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 L/ f  O4 _% \- s/ a
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ [8 `& w: L- q+ a
  893. " }  m* G$ F9 c' K6 T- G
  894.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 G$ q1 }) B3 g: z! X! e
  895.           dwStartUpSteps=99;
    8 ]4 ?2 s4 b# o$ G4 L
  896.           bFinishUpdated=TRUE;7 N* N7 e! k& k2 N
  897.         }* M% k1 {; `! h- N* D
  898.         bCanUpdate=TRUE;
    8 J' |; @2 K9 ^# a: e
  899.       }
    - R, l+ B2 O# i1 f# W
  900.       break;
    6 d/ {4 a( c+ C# X9 ?0 q4 Z
  901.     case 6:' d1 x' v; _* i9 d3 Q- m3 |
  902.       {/ g! g' m4 M6 @0 U2 j5 @! A" z$ w
  903.         if(!UpdateLocalVersion())
    ( I. E9 F! E; `' J. X, k
  904.         {
    , O% |6 d/ X4 D6 Q# Q& R
  905.           if(bRestartUpdater)8 C  n8 ~. h+ E9 L0 q
  906.           {2 H: S& U: A# C+ B8 m  ^
  907.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);1 ^5 P# A  {; C7 A  c. b
  908.             else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);
    % h( j* q+ I) D
  909.             else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);
    ; K0 \, H3 p$ U* y
  910.             DestroyWindow(m_pMainWnd->GetSafeHwnd());1 `* W2 S  ]) m- q9 v. L3 `
  911.             dwStartUpSteps=99;
    : N. _' ^6 H$ f0 T/ c
  912.           }
    4 O# @/ u/ C4 W/ k
  913.           else9 J+ H# x* Y- V
  914.           {
    0 z" }6 P- b0 i4 w% s, X3 @
  915.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈竒ЧΘ.....");# w/ A5 C  u* v; d: f9 z
  916.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新的资料已经完成.....");, Y9 v: h8 i- ]
  917.             else                                                      dlg->m_ListText.AddString("updated file ok.....");
    / {+ b% z* u( v" U, P3 w9 j
  918.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( X/ e& p3 l6 ^7 V! b
  919.             SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,0,0);$ s3 c# z3 @, Y) l0 `: z
  920.             dwStartUpSteps=7;& Z! @$ n# u1 H1 b* }' M; k
  921.             bFinishUpdated=TRUE;
    . K& c' _2 ]( H- X+ Q9 h
  922.           }
    , A3 w4 R5 B$ V  H; X
  923.         }
    ' |8 o( ~% R0 X
  924.         else
    9 f/ y' \3 J# ?6 _; ?' W& M5 v
  925.         {5 p+ M, U5 }6 [
  926.           if(bRestartUpdater)
      Z/ R9 V5 y7 W" ?4 ?, U
  927.           {0 F' F; c  F/ P- X
  928.                                                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             MessageBox(GetActiveWindow(),"叫穝磅︽穝祘Α.....","Elysium Updater",MB_OK|MB_ICONERROR);
    . o5 `. {2 k4 ^1 ~
  929.                                                 else if( m_iLanguage == SIMPLIFY_CHINESE )                MessageBox(GetActiveWindow(),"请重新执行更新程式.....","Elysium Updater",MB_OK|MB_ICONERROR);/ Y+ {: t& Q; b: A3 }
  930.                                                 else                                                      MessageBox(GetActiveWindow(),"Please Restart Elysium.....","Elysium Updater",MB_OK|MB_ICONERROR);3 ^. `5 y: H) W/ k! y# C7 a
  931.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());0 o* v* b* k. w' v5 _( p
  932.             dwStartUpSteps=99;4 l; D# w5 N. L6 ?0 l* y
  933.           }
    , P, u: r4 Y" n" X5 c
  934.         }$ a5 z1 ]9 X- d
  935.       }
    " g0 d+ F  E: ^9 T9 n) m
  936.       break;
    . y5 g2 a; n! ~7 O( K& _$ q
  937.     case 7:! E  R8 H' C! w* X5 M" a( Z
  938.       {
    3 }  ?% B$ b& V- i) {
  939.         char szExecuteFile[14]="Bf_Client.exe";! H: r) J4 j  p: i0 Q$ U! Q( B
  940.         if(GetFileAttributes("Run.exe")!=-1) strcpy(szExecuteFile,"Run.exe");* J% |" ^' g, o/ |8 \+ }& w
  941.         if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
      T9 v3 R5 E* Q# S1 h
  942.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open",szExecuteFile,"updated2",NULL,SW_SHOW);2 E0 D5 X& h( s8 a+ r5 D1 |
  943.         else                                   ShellExecute(NULL,"open",szExecuteFile,"updated" ,NULL,SW_SHOW);
    1 }, }, F+ c. g; J4 Y$ y6 P
  944.         DestroyWindow(m_pMainWnd->GetSafeHwnd());
    - c) n4 f/ t3 W
  945.         dwStartUpSteps=99;
    9 `' z' h9 M9 x6 v6 Q
  946.       }
    0 j1 T" f1 o" [
  947.       break;
    ( h* W; D1 Q8 F  U
  948.                 //add by cece
    + h' }3 U1 Z: D. {# u( Y) }
  949.                 case 8:- a) g4 G7 U( B! [: r8 ?
  950.                         {7 G8 E0 O8 o" z0 I& G  c6 N
  951.                                 if(!Dn.Connected())
    2 ?" E& F6 w) m5 ^
  952.                                 {# ]4 w0 ~6 e3 b' p9 O# j
  953.                                         dwTotalFiles=1;7 F' D& M  K# d* {
  954.                                         dwDownLoaded=0;0 x$ i3 Y3 [- v( f& ^; o
  955.                                         bSilentStep=TRUE;
    ; p3 p; B8 l9 i: a7 o  u& z
  956.                                         bCompressed=TRUE;
    : ]& K3 q5 A7 ?3 c
  957.                                         strExtLocal.Empty();- U5 B/ N  r/ N/ m2 Y' M* V
  958.                                         strFullName="download/CRCTable.txt";% I/ t6 w9 h; a- x" F: [4 G
  959.                                         dwProgramState=AP_CONNECT;
    ) \9 Y$ Z1 O7 f7 c# h
  960.                                 }
    / V' `  d2 y' O' q
  961.                                 //
    ' D5 z  L, ]: V9 h+ c9 N
  962.                                 dwStartUpSteps = 9;: ]* H8 S8 T% g2 ~' F( U  n
  963.                         }, d0 j: c$ u9 F- l" {0 j
  964.                         break;
    % d, A' k: D- o( N% o
  965.                 case 9:
    % T2 c6 r" r, D$ i
  966.                         {) z3 P) I$ @+ H5 m$ R
  967.                                 if(!Dn.Connected())3 l# ~6 K+ A! N1 a
  968.                                 {8 _5 V; d, x# k2 W% J' u4 }
  969.                                         dwTotalFiles=1;) C; q# c  l2 n
  970.                                         dwDownLoaded=0;2 M8 [- `# J: X
  971.                                         bSilentStep=TRUE;
    . U" H, ^; Y4 A6 J/ Z  _; R
  972.                                         bCompressed=TRUE;; _$ Z8 J! B; o8 I1 G! i
  973.                                         strExtLocal.Empty();
    - y. M$ @9 T6 Q- h  t8 u7 i
  974.                                         strFullName="Run.exe";: z' B+ ^) h5 \: M; C0 x) Z
  975.                                         dwProgramState=AP_CONNECT;
    . Q+ n4 n9 w7 z! B6 x
  976.                                 }* p% p* Q# O, i! O" ~9 R
  977.                                 //4 B6 c* d& h+ k+ j* f
  978.                                 dwStartUpSteps = 10;% C# V" {$ K( w  x9 {/ ^
  979.                         }3 D! O4 `+ t1 ?! m; g# m
  980.                         break;& c) u1 |& g& F  C  M/ B! D# K: ^
  981.                 case 10:. H8 }# D/ _: t6 m8 k
  982.                         {
      N9 F' ?) S2 y- q4 E
  983.                                 if(m_iLanguage==TRADITIONAL_CHINESE)   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
    # t; J& f3 k, S' i0 I7 ^/ Z2 J
  984.         else if(m_iLanguage==SIMPLIFY_CHINESE) ShellExecute(NULL,"open","Run.exe","updated2",NULL,SW_SHOW);7 O& ?4 D2 K/ |5 k) E
  985.         else                                   ShellExecute(NULL,"open","Run.exe","updated" ,NULL,SW_SHOW);
    # d. ~! l6 t  n1 ?
  986.                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    . B$ f; Q5 M" q2 [
  987.                                 theApp.bClickRunExe = FALSE;
    ( |+ `1 h) U8 D  c1 `8 s
  988.         dwStartUpSteps = 99;
    - t7 ?( U/ a9 t4 }' v
  989.                                 //$ I" G8 l0 g5 `8 x+ Y$ o) v) G
  990.                         }
    % C: q: X; A5 ^- N+ q+ [, N3 O
  991.                         break;# Z3 l  {$ W- R1 u/ j6 \
  992.                 //  h3 x# Q5 j  Z5 I* @2 E' ]
  993.     }
    ( Y: [" M$ p3 l3 v* U
  994.     break;/ a7 E1 I  Q4 F" O2 J% @
  995.   case AP_CONNECT:/ p; v4 s  z3 ~0 m7 k0 m4 r2 `
  996.           if(Dn.InitNWSSock(4096,4096))8 j$ w: a! B: ~+ w3 W8 C& H  @
  997.     {. m/ z1 k' A5 y8 Y5 C9 y: {. h* P4 V
  998.       char szPathName[MAX_PATH];
    + w! L6 b" M( T3 Q$ v
  999.       dwLastSize=0;9 v" |! f/ h2 A
  1000.       GetPathFromFullPath(szPathName,(char*)(LPCTSTR)strFullName);( z1 H! Z3 ~2 r3 ?
  1001.       strFilePath=strExtLocal+szPathName;: n* r! K& I4 ^" x# [4 P
  1002.       strFileName=strFullName.Right(strFullName.GetLength()-strlen(szPathName));: {0 b& `- b2 J( ~2 o: F
  1003.       dwResumeNums=0;
    * |" E  }' S' n  n2 G5 w
  1004.       CString strTempName;6 C: h2 f# L9 F3 x! w' a  O0 X' @
  1005.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);2 i) v' |9 m* ?, T% D) j
  1006.       CString strCountData;
    $ u4 V5 r+ I* Q9 m( i' S8 X
  1007.       strCountData.Format("%d/%d",dwDownLoaded+1,dwTotalFiles);' Q- U' Z4 ?) c7 s
  1008.       dlg->m_FileNumber.SetWindowText(strCountData);
    0 u. V) i' j1 c; y; u) E
  1009.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    6 n/ ^  G8 }5 x# _2 j
  1010.       if(bCompressed)
      n0 n3 ^2 ^9 H+ W3 m
  1011.       {
    ) H& s4 G+ L2 {6 l* R  u
  1012.         strTempName.Format("GET %s%s.zip HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);9 [% k4 L8 T) l; s8 U
  1013.       }
    / r9 H: j& [9 _# \7 ]4 `& [; q2 ~1 D9 P
  1014.       else
    3 W- ~$ `! q, f0 n* a! R
  1015.       {
    % J4 p, D9 u3 l0 T' s5 n
  1016.         strTempName.Format("GET %s%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",strHostPath,strFullName,strHostName);
    0 ^( K7 @! [0 X$ S
  1017.       }
    - S: U0 u1 i+ e
  1018.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);
    2 T" w- v1 ~( l' D' W
  1019.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());2 q% s4 B* V' V7 s
  1020.       LastTickCount=GetTickCount();
    - S1 q& u- ]* i
  1021.       dwProgramState=AP_SENDING;) ~( ?) g6 c. g+ o. P) P
  1022.     }
    % D# ]7 f+ H8 l
  1023.     else
    3 c/ i( h& g& \. B% R3 r
  1024.     {" j' w0 d6 }' W* k- {
  1025.       Dn.QuitNWSSock();
    2 _2 |9 ], n: \- h& u
  1026.       dwProgramState=AP_NOTHING;3 M5 O( x. z5 M! `, R+ p
  1027.     }1 D8 Q: u: X3 F5 B
  1028.     break;5 I/ Y" ?; G7 M6 G  @
  1029.   case AP_RESUMED:
    9 O. f# o. M8 G4 Q3 Z
  1030.           if(Dn.InitNWSSock(4096,4096))
    # e- k4 G" Q# s2 T% I' q* X" q6 H
  1031.     {& J' {% h4 V7 v
  1032.       dwResumeNums++;
    9 ^( h, P; B& Y' s2 `
  1033.       CString strTempName;
    0 i2 e  {( U: `( j0 B' U  s6 q
  1034.       if(!bSilentStep) dlg->m_FileName.SetWindowText(strFileName);* y3 Y5 x6 J/ l& ^
  1035.       CString strCountData;
    8 ~' F5 f" }& @- L/ t6 \
  1036.       strCountData.Format("%d/%d",dwDownLoaded,dwTotalFiles);, q8 t$ ^# S( W$ W  f, v
  1037.       dlg->m_FileNumber.SetWindowText(strCountData);4 P3 e4 ?8 m1 K
  1038.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    0 F: E- h" n, Z$ w3 _5 u2 P6 O
  1039.       if(bCompressed)- \) o0 P. K; W7 A+ j
  1040.       {; o# P; O2 w2 v, r5 p
  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);9 k) F+ |) c, s+ w! d4 B; z" V' [. f
  1042.       }% d, _3 K7 r0 t
  1043.       else
    9 t, `! g2 r# a/ T) G5 t, Q- h
  1044.       {2 h& I9 l0 q# `! q' C; Z3 a
  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; s% q+ _. ^& u) ~4 p
  1046.       }/ t0 q4 L& _) g
  1047.                   Dn.Connect((char*)(LPCTSTR)strHostName,wPort);9 B' Y1 K/ }- G: _
  1048.       Dn.AddSendData((char*)(LPCTSTR)strTempName,strTempName.GetLength());( m# C4 k4 P! ~& }; T/ ]
  1049.       LastTickCount=GetTickCount();
    % @! g) N+ ^/ M8 M$ N' C) j. y
  1050.       dwProgramState=AP_SENDING;. o7 y9 N" Y( H2 V1 W
  1051.     }( \' q" X. C# N
  1052.     else
    . G4 y7 H( \( g3 N" D$ u
  1053.     {
    9 {  `: n6 ?/ y9 k. F0 u
  1054.       Dn.QuitNWSSock();
    " f! ?* m4 ?/ X
  1055.       dwProgramState=AP_NOTHING;* D, u: d/ g9 @. s
  1056.     }
    : I; V& P- W6 I+ {) y8 u4 r
  1057.     break;
    6 P" E  Z: h; N
  1058.   case AP_SENDING:5 S# @0 E. k/ Z
  1059.     {
    / o7 e; H) ~. w9 u" ]
  1060.       DWORD RecvLen,SendLen;! v& M! r5 h) L- d: p4 I; `
  1061.       if(Dn.NetworkLoop(RecvLen,SendLen))
    - G' s3 D4 Z: F5 J! m4 ^
  1062.       {
    . X. U% [: E1 \4 w! Q8 t
  1063.         LastTickCount=GetTickCount();) M" U' z6 e0 y! P& K1 l: Z2 j6 b
  1064.         if(SendLen)' J7 O3 f0 V1 h' t0 r4 Y
  1065.         {- n# q" k0 k: e; s- p! J! Y0 S
  1066.           bReadHeaders=FALSE;
    / S4 k1 y6 n0 m/ i9 j) X1 T# {
  1067.           dwProgramState=AP_RECEIVE;
    - b8 l0 H# }. R9 k  f8 u
  1068.         }
    , k$ w/ r& Q/ J7 G6 ^1 |$ x
  1069.       }
    5 @5 a/ m) L# u% J0 g- X% `
  1070.       else
    2 K- k' D: n6 M1 e  l; b% k. H1 j! G
  1071.       {
    / V, I+ c* L7 s- k7 P% X
  1072.         if(GetTickCount()-LastTickCount>3000)
    , N3 U8 _4 \( I& O+ |
  1073.         {% \1 O0 s2 h1 |) a4 [! n' N0 F
  1074.           Dn.QuitNWSSock();/ n* j& m. g* @4 E  Y
  1075.           dwProgramState=AP_CONNECT;2 u" T+ a6 z8 p  A8 b  D
  1076.                                         //
    % L" s9 p2 J) G2 I. Y/ ?
  1077.                                         static DWORD s_dwCount = 0;" A) [& B: k+ x6 G* ?' H5 a
  1078.                                         s_dwCount++;* M" k$ f# ~7 E5 @" H( }  u
  1079.                                         if( s_dwCount > 10 )
    * j  [( ?: e* r3 [& N
  1080.                                         {; ~% o: |6 \; E/ `, X* I7 ^0 Y
  1081.                                                 if(m_iLanguage==TRADITIONAL_CHINESE)   MessageBox(GetActiveWindow(),"硈钡穝狝竟ア毖叫浪琩眤呼蹈砞竚   ","Error",MB_OK|MB_ICONERROR);! J; {  z6 C; X
  1082.                                                 else if(m_iLanguage==SIMPLIFY_CHINESE) MessageBox(GetActiveWindow(),"连接更新伺服器失败,请检查您的网络设置   ","Error",MB_OK|MB_ICONERROR);
    ' M, Y# K) q8 h% Z* C+ H6 ]
  1083.                                                 else                                   MessageBox(GetActiveWindow(),"Connected Error, Please Check Your Network Status   ","Error",MB_OK|MB_ICONERROR);; ]2 b" s( k8 k8 R7 ?
  1084.                                                 DestroyWindow(m_pMainWnd->GetSafeHwnd());
    1 C1 Y. A! t; l, V* ?- k8 ~
  1085.                                         }2 v4 L1 [$ O, f8 T
  1086.         }
    : Y( E6 b, Z2 R0 b! A
  1087.       }
    8 p6 a8 p$ r# H/ c% o
  1088.     }9 x) J' i+ k# I4 Z4 s
  1089.     break;5 Q0 O% x$ o) J8 f$ V& L
  1090.   case AP_RECEIVE:7 w$ Y0 m) _! z* F1 C+ }6 @* G
  1091.     {
    . I# Q( Z% }  c6 _
  1092.       int Count;( j; C& }" Y$ e4 \% \* l: i
  1093.       DWORD RecvLen,SendLen;
    ! h5 ]  s, T' H& M  ]9 i
  1094.       if(Dn.NetworkLoop(RecvLen,SendLen))
      e! ~' E/ ]+ Y! x( f/ M" T
  1095.       {
    & d: v; F3 D. y! c5 {, o2 I
  1096.         LastTickCount=GetTickCount();% g) r3 ^! j2 m6 Z
  1097.         if(RecvLen)
    ) i3 ^( S; H: v+ j3 J  o5 v1 \
  1098.         {( w1 i% ^' W  k* e1 V2 q
  1099.           if(!bReadHeaders)# e1 k; m" n8 Z
  1100.           {
    # O& h" H0 y" i. ]) q2 N% g7 ^
  1101.             char *token=strtok3(Dn.szRecvBuff,"\r\n");
    / D5 L3 I8 v( U. s
  1102.             if(token)
    4 V1 Q  P6 Q" k1 q2 x; C$ Z1 P
  1103.             {, ^2 j4 L& Y- Y* w  \+ N
  1104.               dwFileSize=0;
    2 X1 a; _2 g6 a
  1105.               for(int i=0;i<(int)strlen(token)-3;i++)
    + f/ g1 S% U+ C: e
  1106.               {, k: e  `  a0 [" q
  1107.                 if(!strnicmp(&token[i],"206",3))
      N# o- l! J8 F) h$ C
  1108.                 {
    0 I8 V# B, @7 L
  1109.                   if(!bSilentStep)
    , q! H, j( L0 m1 _
  1110.                   {4 ~1 `' c. B! G4 T) j/ h" H1 ^* b
  1111.                     CString strTempName;/ R; n0 w1 s; g
  1112.                     strTempName.Format("%s.....resuming(%d)",strFileName,dwResumeNums);( m4 R9 u; i; ?5 ^( i; B
  1113.                     if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    . S( g) z7 K! v3 O2 {7 Z
  1114.                     dlg->m_ListText.AddString(strTempName);
    $ [" `7 V0 G. U7 r+ C: j/ y# G0 w
  1115.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 c- E% j% T' R) {, e, P* |% I- n. N
  1116.                   }
    - A6 n' K, @: _/ _7 F6 T" j( |
  1117.                   bReadHeaders=TRUE;1 }: ~: |% T: n" z6 A
  1118.                   while(token=strtok3(NULL,"\r\n"))( U8 T# ?3 y. \8 {. u9 o
  1119.                   {( G/ F8 J/ A5 x2 ?, a3 Z
  1120.                     if(!strlen(token)&&dwFileSize)7 [, k) W/ `: d* {
  1121.                     {- {: v0 C# c! \
  1122.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;
    ( v  U0 `+ L. O9 i9 a- u3 a6 p
  1123.                       if((int)Dn.dwRecvLeft>0)0 g0 J8 l" |+ _* P7 [' N/ H
  1124.                       {2 f0 U8 R% l1 L& ?6 b/ T" \
  1125.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)0 K: f/ Y0 u7 _* L, x7 f  u
  1126.                         {
      ?9 @8 q  A% r7 P& a7 c
  1127.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    * Y$ N; {6 C9 A4 x9 V6 C
  1128.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);( p  k) m% E+ T' t: U3 S1 G
  1129.                         }* Z5 ]! l* \' W0 I* O3 b
  1130.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);
    ' \3 u- s% J# p+ h0 T( \2 Q( t
  1131.                         dwCurrSize+=Dn.dwRecvLeft;/ N3 E4 e' s7 ?' i
  1132.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;
    $ m' n) P9 N7 H1 A' U0 A# X% {
  1133.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;. g" p) p& g& W3 O
  1134.                       }4 f: H6 w- C2 y$ S* e; [
  1135.                       break;
    6 V( l/ f% n2 T* x+ F
  1136.                     }
    ; c# ?+ E% v2 f6 R' d; N0 M
  1137.                     else& y" P: ]2 k" W+ A
  1138.                     {% k# Y. y$ l7 ?$ t! W
  1139.                       if(!strnicmp(token,"Content-Length",14))
    , N' B# }  D  F3 Z
  1140.                       {
    3 ~% B9 F7 N3 T% k9 M
  1141.                         if(!Dn.szCompBuff)
    8 j5 q; G! H$ {, n4 e+ a
  1142.                         {8 d* m* d2 x1 C0 G
  1143.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;4 Q8 Q8 E. o+ z* o/ b$ w0 ~& l
  1144.                           Dn.szCompBuff=(LPSTR)malloc(dwFileSize);+ D, Y- @! I; j9 q' y
  1145.                         }
    % o" P3 G& [+ K. ]; L
  1146.                         else if(dwFileSize!=dwLastSize)3 B1 y6 Z, i/ [8 q+ P
  1147.                         {
    - d3 p3 \/ b0 J4 }) A
  1148.                           dwLastSize=dwFileSize=atoi(&token[16])+dwCurrSize;
    + e5 [( f$ A: V8 I# F* L
  1149.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);: J; V- `* O5 N* |1 P1 S0 w8 f
  1150.                         }+ Z% M4 z4 ?" b  _/ ^: c  Q/ {
  1151.                       }1 S" ?, v  |! R
  1152.                     }
      ]+ X3 r2 H7 K) }* P5 V% B
  1153.                   }
    - V5 M$ I9 t& @8 K$ p2 N, c, `( x
  1154.                   break;
    $ v( ?# I$ p/ k# c* D$ s! u' ?5 P
  1155.                 }# r+ m5 T" k# n/ q
  1156.                 if(!strnicmp(&token[i],"200",3))
    ( u: _+ A9 s' m/ E+ s
  1157.                 {
    ; Y" k2 q2 n% Q* o
  1158.                   if(!bSilentStep)( z( u( N9 V; f( F: K) A: a/ c: y
  1159.                   {
    $ ^6 G9 e4 V. ~
  1160.                     dlg->m_ListText.AddString(strFileName+".....downloading");
    3 r4 h4 p5 k& S( }" s8 F
  1161.                     dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( z0 J  t7 K0 }8 ~5 d" Q
  1162.                   }
    + L& I" @, H: |
  1163.                   dwCurrSize=0;& s$ r. |' d4 e3 K. x; [
  1164.                   bReadHeaders=TRUE;
    ) W2 s! `/ p6 g% l0 ?
  1165.                   while(token=strtok3(NULL,"\r\n"))/ G* t$ [% w) F" `6 u: p( n
  1166.                   {
    ; T; H$ j; C) u0 c7 M, y
  1167.                     if(!strlen(token)&&dwFileSize)$ Q( w6 q( R  {6 J' p3 b
  1168.                     {8 M$ `! ^; V) z$ j/ P
  1169.                       Dn.dwRecvLeft-=token+2-Dn.szRecvBuff;9 Q) e, T" _5 a" K0 N: r
  1170.                       if((int)Dn.dwRecvLeft>0)! K, P6 c5 `3 \. k( D
  1171.                       {1 ^0 P. z  R6 _
  1172.                         if(dwCurrSize+Dn.dwRecvLeft>dwFileSize). F5 F$ j3 F: X# X$ {' g% s
  1173.                         {' w- x$ s8 R4 R6 l; ^
  1174.                           dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;
    & x! w( i$ l4 e! t
  1175.                           Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);
    9 S7 \, e5 B, K$ t. F% t
  1176.                         }6 c. A8 o7 m/ v% G/ m: @/ X
  1177.                         memcpy(Dn.szCompBuff+dwCurrSize,token+2,Dn.dwRecvLeft);' C! K$ d7 x6 p! R9 N' [9 m
  1178.                         dwCurrSize+=Dn.dwRecvLeft;
    ; p7 Z: a9 w7 a5 v3 u, Z
  1179.                         Dn.dwRecvLeft-=Dn.dwRecvLeft;! s8 A0 W0 O' p0 A5 J
  1180.                                                                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;, T0 q! k$ F$ n5 v$ |
  1181.                       }
    ( ~0 H3 Z8 z* R2 a/ u7 V
  1182.                       break;
    9 {$ Y/ X5 o9 {& B# S' R
  1183.                     }7 ~* u/ e! V: P* D3 e; `9 N$ |
  1184.                     else
      B( z. j, @% x3 }4 A
  1185.                     {
    7 O* q  b( u, b$ Y+ d, U0 f# ]5 x
  1186.                       if(!strnicmp(token,"Content-Length",14))
    ; n+ V. ]& v, [! U/ h9 ?
  1187.                       {5 _( t  w. e0 E
  1188.                         if(Dn.szCompBuff) { free(Dn.szCompBuff); Dn.szCompBuff=NULL; }
    3 Q- ]% F( Y! z+ K5 k
  1189.                         dwLastSize=dwFileSize=atoi(&token[16]);
    ! k) S; N) H* a! e- x
  1190.                         Dn.szCompBuff=(LPSTR)malloc(dwFileSize);8 q5 `  I5 A: w, g6 f: s6 B
  1191.                       }( k6 K/ v$ `6 @+ F
  1192.                     }
    ) `3 o$ w6 X8 A4 t# ?2 s& N0 F
  1193.                   }
    : M) ~6 @9 z" C
  1194.                   break;
    4 X- T( C+ D3 C0 ^6 `4 [( J
  1195.                 }
    # ?% q- _  K/ v% b, w' M- u# i) |" y
  1196.               }
    ! K& U$ E- [0 z% B( Y: \% ]
  1197.               if(!bReadHeaders||!dwFileSize), _5 r9 b. C! S* s, R9 p6 C. _' \
  1198.               {
    0 x! X& v) D" z: V, U+ T
  1199.                 // Wrong Header or Reading File Size Error+ `# Z* z. [3 M
  1200.                 Dn.QuitNWSSock();
      \3 ~0 L7 N) \
  1201.                 dwProgramState=AP_NOTHING;; Y' G) i4 E$ k7 g4 T- V. I" {; u' R
  1202.                 CString strTempName;
    ; g4 {6 e* [- ?. L! |" K; G
  1203.                 strTempName.Format("Navigate %s File Error !",strFullName);2 C# a  h  @: Z# D1 {# T+ q  `8 {) `
  1204.                 MessageBox(GetActiveWindow(),strTempName,"Error",MB_OK|MB_ICONERROR);) Q# f. P8 k" n6 ]7 u0 `: W
  1205.                 bRestartUpdater=TRUE;
    8 q* r* V8 P, Z/ X
  1206.               }
    0 X: W3 @- q, Z! S0 H2 t
  1207.             }
    , n$ [: e# ]3 {
  1208.             else; f, T2 s0 p5 b0 U+ _" {
  1209.             {& z; }9 e$ y! x- c6 x
  1210.               // Have No Header( z. a; e$ x: P% l5 _3 t; u
  1211.               Dn.QuitNWSSock();5 X/ r# p2 Z+ B3 u0 Q! ~
  1212.               dwProgramState=AP_CONNECT;' x0 U) b* h4 m# h8 V! e! k, U
  1213.             }  r! n( B/ e5 r; \5 P' Y
  1214.           }7 r0 ^5 J: s' }( f% m/ X
  1215.           else
    " g5 Q3 w0 D  s5 \. P
  1216.           {
    6 C+ ^$ K2 }5 c9 |7 q- {
  1217.             // Reading File From Web% j& k9 L, j* }0 f4 e
  1218.             if((int)Dn.dwRecvLeft>0)
    % U- s5 Y" K- ]9 n( M! u4 ]
  1219.             {
    2 R6 `4 `  g) ~+ E& d
  1220.               if(dwCurrSize+Dn.dwRecvLeft>dwFileSize)4 ~! ~2 N+ q: h* V7 o$ |
  1221.               {# i: F: a3 \- b. v; b: B5 f/ |4 x
  1222.                 dwLastSize=dwFileSize=dwCurrSize+Dn.dwRecvLeft;2 K: i2 F3 f' R; Q
  1223.                 Dn.szCompBuff=(LPSTR)realloc(Dn.szCompBuff,dwFileSize);; v4 F1 M! \& b
  1224.               }% q) W  ?9 @: e  W% A6 k3 F9 @7 ^
  1225.               memcpy(Dn.szCompBuff+dwCurrSize,Dn.szRecvBuff,Dn.dwRecvLeft);; P. C, Z, [% F
  1226.               dwCurrSize+=RecvLen;$ P6 S0 P1 M! ~' m9 ]
  1227.               Dn.dwRecvLeft-=RecvLen;
    & C7 y, C- |  a  L, ?
  1228.             }/ v# a- U; f0 s* m' j5 W! M1 U
  1229.                                                 dlg->m_Process2.SetPos(100*dwCurrSize/(dwFileSize<=0?1:dwFileSize));
    % A. y& D& j# p8 I" J
  1230. //            int iRate = 100*dwCurrSize/(dwFileSize<=0?1:dwFileSize);1 |& E  [& Y/ t
  1231. //            dlg->m_Process2.SetPos(iRate);
    # U+ C4 A% n4 c( }* T
  1232. //            if(iRate < 0)   iRate = 0;1 j4 q$ V9 u" w# N0 O: V9 r
  1233. //            if(iRate > 100) iRate = 100;
    - H0 b4 a4 M7 |  Y  _. w# ?! c7 B
  1234. //            char szShow[5];& l9 W+ D: p- [* Y; h
  1235. //            sprintf(szShow,"%d%%",iRate);8 f; v; q0 T6 j0 e' T; e( E9 ~
  1236. //            dlg->m_SingleRate.SetWindowText(szShow);
    / _1 `' }  d$ D* c
  1237.                                                 if(dwCurrSize>=dwFileSize) goto SaveFileJump;
    : |8 \, q; t2 H  B
  1238.           }" p# f6 `" X' K" U
  1239.         }$ T1 X4 o$ N4 W
  1240.         else if(dwCurrSize<dwFileSize)
    . g+ E; Y4 [1 ^0 e- e. @, E( g
  1241.         {
    , D% {4 [8 Y, p  |
  1242.           // Disconnection But Size Error
    4 E, k) h0 Y- Z; b( S, d* {
  1243.           Dn.QuitNWSSock();
    5 v) O% Y, k7 h  z# @& X- o
  1244.           if(dwCurrSize) dwProgramState=AP_RESUMED;
    ; R9 z# x3 ~1 v
  1245.           else           dwProgramState=AP_CONNECT;& h  G: x1 d5 d, M( m2 P3 `
  1246.         }
    * @# E! z, [3 W6 S2 _) N" g9 O9 p9 Y
  1247.         else- o: c; S- F: P& y
  1248.         {5 ^+ Z& A; j1 R
  1249. SaveFileJump:
    + a  Y: P' A/ d# g# @
  1250.           // End of File and Disconnect
    3 B9 ^, m( R5 j# T
  1251.           FILE *Fp;1 g5 D4 Z: _8 k
  1252.           char szTempName[MAX_PATH];
    8 q4 q' ?  B& \
  1253.           strcpy(szTempName,".\\DownLoad\");% }/ c5 P( _1 L# V
  1254.           strcat(szTempName,(char*)(LPCTSTR)strFileName);: [- i% Y5 \: E, y. w
  1255.           if(bCompressed) strcat(szTempName,".zip");% ]. C3 f! T) U/ j9 O- Y  ]. n7 e
  1256.           if(dwCurrSize)/ E$ |0 k& M4 v4 q1 i
  1257.           {
    , V2 }; M* ^9 ^, D$ A1 t
  1258.                   Fp=fopen(szTempName,"wb");
    + l. _7 A6 C7 h* [  G( B) f% I
  1259.             if(!Fp)3 k+ G$ J  u: E
  1260.             {& T6 I, n% w& a! S5 D  o
  1261.               _mkdir("DownLoad");
    6 B, N$ X% Z8 k& U
  1262.               Fp=fopen(szTempName,"wb");% ^; d; Q* R- s0 T# u
  1263.             }
    & w9 z+ J$ W9 q# l" X* P9 B7 Y$ q& U  Q; ~
  1264.             if(Fp)$ K7 f& Q( r3 J$ X1 W+ X. ?. j
  1265.             {
    9 z, D$ Z  M9 U, `; M% }
  1266.               fwrite(Dn.szCompBuff,1,dwCurrSize,Fp);2 [* G; o# T* B4 c3 t8 f2 n% r
  1267.               fclose(Fp);8 _1 h$ @5 _, k' I2 F7 h( P" a
  1268.             }
    * j! d7 c+ M7 F% c7 Y1 @4 y+ B* }3 c  P2 ?
  1269.           }, v3 }+ C4 ^7 o$ b
  1270.           if(!bSilentStep)  p) g9 v7 {' Y4 s4 q! J  H0 C
  1271.           {
    ( T' d" T; ~2 k7 d
  1272.             if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);! K. w* v& c0 c! c9 y3 @! n$ p- }/ b/ `
  1273.             dlg->m_ListText.AddString(strFileName+".....saving");
    / Q# n( N& @5 E9 K
  1274.             dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 s$ T4 `2 _7 N# p4 t, A3 W7 f' b
  1275.           }
    , c$ Z: W5 ]! l! f/ L  D* r
  1276.           if(bCompressed)
    * L; N4 o/ q( a. R
  1277.           {
    % I, p- g' I" j2 p% A! k; z" P
  1278.                    int opt_overwrite=1;3 |' X& O8 \% S; r* G6 Z9 r
  1279.             int opt_do_extract_withoutpath=0;. }' v* B5 @5 e! O5 ~7 _: l
  1280.                    unzFile uf=NULL;
    2 L+ H# e- T6 I( y* T
  1281.                          uf=unzOpen(szTempName);
    + X2 [  V" ~: G7 V
  1282.             if(uf)
    / M3 d( J! |  P5 U9 p
  1283.             {
    2 ^* U! s$ |, m) n( J# O0 B" V
  1284.               if(!bSilentStep)
    % z3 a% i  [- G  ^$ S" r
  1285.               {) d" G# {& c: {( e
  1286.                 if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);
    / `5 G; F0 w+ @1 }; L  M; e8 Z; g
  1287.                 dlg->m_ListText.AddString(strFileName+".....extracting");2 i7 h4 _1 b4 k8 f, m- Y( {6 f
  1288.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 B3 e$ s& W% F: f: I# N
  1289.               }
    $ R: w0 D  o6 w) A; N# u: F
  1290.               if(do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,(char*)(LPCTSTR)strFilePath,NULL)==UNZ_OK)
    1 N7 A- e" k+ C5 a
  1291.               {7 }% c6 Z- ^+ h; a
  1292.                 if(!bSilentStep)
    ' O1 W# D7 q% u6 Q% w
  1293.                 {( m+ H1 ]2 I( d2 F% t& T' E2 J
  1294.                   if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);; C' F) Q' O) w' A/ k. n( B
  1295.                   dlg->m_ListText.AddString(strFileName+".....done");  Z( J/ l3 h" G: q# k
  1296.                   dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Z2 U1 [# i& W( [* `5 V+ I6 x4 N
  1297.                 }
    ' z) K1 |6 [+ q4 f3 ^! R
  1298.                 dwDownLoaded++;
    1 Z$ `* g8 t$ P" g
  1299.                 dwProgramState=AP_NOTHING;  i1 D, A2 M$ f1 Q) }! _
  1300.               }
    9 C# |* {. o; h3 f& L
  1301.               else
    ( }4 h( N% Y, w+ [# Z
  1302.               {
    2 m; a. e4 _5 |/ k
  1303.                 dwProgramState=AP_CONNECT;
    - w- d* L# O" v: f3 L( D/ }
  1304.               }
    " y4 P7 x3 O' Q
  1305.                     unzClose(uf);. ]8 i8 S+ N/ N; s1 p, M
  1306.             }
    ) O/ a1 {! g7 a. F! L* g
  1307.             else: ^; P6 ?' s8 L. u2 i
  1308.             {0 g! S- d: E4 J* V
  1309.               dwProgramState=AP_CONNECT;: P9 y# H: a/ j' L1 q8 o0 m4 }6 l& A5 b$ S
  1310.             }
    0 J6 U$ \. R1 Y
  1311.             unlink(szTempName);
    4 Y" n, A! S: \# I4 t# B
  1312.           }8 V6 S5 q& C9 P5 l( C8 Z
  1313.           else
    ) h/ N8 ~0 i4 Q# @! z
  1314.           {
    5 D5 n: Q1 f) y3 |  M/ L9 s+ r
  1315.             if(!bSilentStep)
    # n2 R) {  L! I; ~  R$ U6 F
  1316.             {/ b& k4 }% V+ L  g, ?
  1317.               if((Count=dlg->m_ListText.GetCount())!=LB_ERR) dlg->m_ListText.DeleteString(Count-1);! h% b: Z) }+ P
  1318.               dlg->m_ListText.AddString(strFileName+".....done");: `* m/ A9 Y  @; K
  1319.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , ?, j, v9 ]& q5 g" ~5 u3 i; a
  1320.             }
    3 [* T0 l: W% c5 O# r) y, O
  1321.             dwDownLoaded++;
    + P' c& f. g5 F" S" y! L
  1322.             dwProgramState=AP_NOTHING;
    7 C* H! Q. M, J# g! [
  1323.           }7 x/ v: X, @& B. F
  1324.           Dn.QuitNWSSock();& y3 v9 D5 u+ }0 N9 A4 {
  1325.         }% I9 W, H4 @# a4 g4 l. c
  1326.       }6 O5 V9 z" E) v2 T+ K; Y
  1327.       else$ `1 Y. f& q' X6 t, C- i* E5 Y1 E
  1328.       {- n. T* E: }: `$ v: ^, x1 x
  1329.         // Connect Timeout
    - }# h- b% t, Q
  1330.         if(GetTickCount()-LastTickCount>30000)
    4 l1 s1 M( @# w9 C( y
  1331.         {
    3 `4 S& n5 m6 a: c
  1332.           Dn.QuitNWSSock();
    0 `& j, N" v9 E3 |, e# M# x, w
  1333.           if(dwCurrSize) dwProgramState=AP_RESUMED;1 r& ]2 [0 c8 ?. M' ^" F; E# G
  1334.           else           dwProgramState=AP_CONNECT;
    - ^% M/ N3 B0 N+ B: g# Y
  1335.         }
    ! X$ t9 |: f/ C- f: R' l& X2 `
  1336.       }" a% v2 g) v. S* t$ B
  1337.     }
    % }- K1 F5 v4 n8 K: Z4 x1 e
  1338.     break;
    % w3 }. C; I1 c+ y
  1339.   }" Z/ J4 t: y1 g$ `" a8 f) c
  1340.         return CWinApp::OnIdle(lCount);' T9 m8 h5 P" g: n7 t
  1341. }
    6 @8 A8 @: _4 I! p2 b9 @
複製代碼
其实登陆器也就是这么一回事儿……
4 R& F6 A/ y3 ]' ^3 T& Y; t) f9 r附件有编译教程和源码
; |: F$ X; Q/ y' }' p' }
遊客,如果您要查看本帖隱藏內容請回覆
3 s: N: T/ L7 |, l
. {0 V, C3 h: t8 U

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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