CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
/ z- T# a! l9 i
  1. / RevApp.cpp : Defines the class behaviors for the application.$ E7 A5 W/ G9 B) w: I" C" h
  2. //4 e5 x" W( v6 i5 D) I
  3. / @4 M% @! w& m$ Y4 _0 j: R
  4. #include "stdafx.h"
    8 A- q# r9 n4 f$ [, E' l

  5. % ~  ^! H9 j7 l/ l, Q$ Z/ e
  6. //#define UNICODE! c2 A1 d& i* v1 v4 u+ j
  7. //#include <gdiplus.h>0 c8 C1 u3 a5 {1 n5 c
  8. //using namespace Gdiplus;3 E9 @- m; h7 G8 k- z* X# G
  9. ! Z. `) L# h: @/ H2 m
  10. #include "RevApp.h"
    9 J/ }! f: g' o
  11. #include "RevAppDlg.h"- S+ X$ }* s" ?6 s
  12. ) T' e$ p. z3 s/ `0 s% l
  13. #pragma warning(disable:4786)5 I9 s) n2 T1 A! c- g
  14. #include <map>
    # q; `0 r- S6 N' [
  15. #include <list>& B! V8 p4 D2 w4 k/ e, k/ V' E; |! M1 d
  16. #include <direct.h>& [0 ^) @& G* p% X4 t

  17. 6 h! J+ d, i8 f  h: u
  18. #ifdef _DEBUG& A* N/ @9 Z( R1 X1 r8 e+ }
  19. #define new DEBUG_NEW
    ; z: e" @6 j1 C' `% r' I& y
  20. #undef THIS_FILE
    4 W; `# |) b) T4 h
  21. static char THIS_FILE[] = __FILE__;: `  X# J* i  }8 A% D% T
  22. #endif( F: o, R( J8 s
  23. #include "SkinResDef.h"& T  X, [8 U( l; j
  24. #include "ChangeBG.h"
    & R; T) k7 u& ^' o* S
  25. #include "AFXINET.H"+ O( ^' d$ ^; I. h( V% t

  26. * _* u1 E/ D1 X
  27. #define TRADITIONAL_CHINESE 0
    ! J! Q, \5 V$ u: L
  28. #define SIMPLIFY_CHINESE 12 Z( t0 C; y2 t/ G# W0 k
  29. #define ENGLISH 25 _8 W" G  z, B5 B
  30. int m_iLanguage = ENGLISH;% K2 p) _+ b. i! K
  31. /////////////////////////////////////////////////////////////////////////////9 w- V- \5 `" }4 b
  32. // CRevAppApp
    1 |9 K4 Q; i3 q# f

  33. 0 R+ \) l; m$ `
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - U3 C. @  h) Q+ |7 h& j9 _7 h3 x
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . @3 c. l% q/ y' l: ]
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.% U5 f8 @' }+ }% c, p
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % F* I+ k, z' W0 x/ F  R7 j% l( {
  38.         //}}AFX_MSG
    % c1 M' s* P4 p  V: w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    7 \2 d3 y. Q5 v; {
  40. END_MESSAGE_MAP()
    % s$ I2 M/ i: \$ {' U
  41. ) G7 K: X  M4 I
  42. /////////////////////////////////////////////////////////////////////////////
    - }1 ~1 d4 P, v) r- e# N$ v
  43. // CRevAppApp construction0 D. u  z8 \! }* O7 a& k" C

  44. 0 P) O6 {! n; N* R
  45. CRevAppApp::CRevAppApp()0 L8 R% d% l9 b" I+ B
  46. {- ?. I4 [- r& F9 U# i
  47.         // TODO: add construction code here,( O! C; ^) k$ f8 S( a5 b. o
  48.         // Place all significant initialization in InitInstance
    8 F0 i) l9 E4 F! q+ U2 k2 t
  49.   bDisplayIsBig5=FALSE;
    ; L+ G; h+ k3 o% Z
  50.   bRestartUpdater=FALSE;
    " Q' ?, f% w: w  ^9 q
  51.   bFinishUpdated=FALSE;
    - H$ w% Z. L" o( n8 w3 ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    / T9 g3 ^: Q! Z/ Y* A
  53.   InitChangeDataBig52GBKS();
    ' ^9 J9 D- J' h1 L
  54.   InitChangeDataGBKS2Big5();6 ]. c2 V% a# ~& b  N# W3 C
  55.         //
    8 r6 m/ H& i* \% @; U# ~
  56.         bClickRunExe = FALSE;) m( A- n+ C! Q7 d; ]
  57.         /// m2 H7 H# ?: o: H* F
  58. }
    / P; W. e: z: o
  59. / t: \. P1 M6 J; T5 U8 ^
  60. CRevAppApp::~CRevAppApp()
    9 }; {! j; \* G+ P
  61. {
    2 I( q! K: T/ v; N" r0 y" `
  62.         // TODO: add construction code here,/ \3 s9 ^" K: D  u
  63.         // Place all significant initialization in InitInstance
    1 n# ~+ q% ^& i( P5 R
  64.   EndChangeData();
    6 U6 U1 ~$ Q5 f  V$ R
  65. }9 K! p' b% t' u& s% F; X3 y
  66. ) }/ L' z; d% g) e  D
  67. /////////////////////////////////////////////////////////////////////////////, n0 y* w# l9 c) V* Q: E
  68. // The one and only CRevAppApp object4 U9 B, \6 w; A, J, p
  69. + N5 O" t) K# J7 n" g" Z+ Z6 y
  70. CRevAppApp theApp;# X: i' Z# W! `

  71. . S. y6 z5 G: X, C9 d; I. Y
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    2 J& K4 a8 _4 e, h
  73. {  r  `1 m8 ?$ g9 K; }
  74.   int iEOF=0;
    ) u, S8 r/ q7 T) X
  75.   char szTempName[MAX_PATH];
    2 g; s& g$ ?; Q! G" l, b
  76.   *szFileName=0;
    3 ^- k& e7 F4 i+ \0 K
  77.   iEOF=fscanf(fp,"%s",szTempName);
    % \  |7 l6 e8 a' n: Q$ r6 O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 ]6 o, h. i9 ~9 N+ a
  79.   {
    9 h7 P$ @2 H( W6 |
  80.     strcpy(szFileName,&szTempName[1]);
    4 J+ o$ y3 X/ O
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ R, ~& z+ h. T3 i
  82.     {
    4 H/ D7 s; W' d. t
  83.       iEOF=fscanf(fp,"%s",szTempName);3 {% M1 v9 F% D6 L6 z. Z' y& Q8 |; a
  84.       strcat(szFileName," ");
    2 }+ B7 X6 i) q/ q' c
  85.       strcat(szFileName,szTempName);/ u9 Q+ b7 K/ J1 e* P- k3 j4 z
  86.     }
    : z, o5 {3 n' X3 B+ A! t) I8 ]
  87.     if(strlen(szFileName)>=1)! g2 i7 ?! P% o( I  @" N, P
  88.     {% q1 t& k# n! x
  89.       szFileName[strlen(szFileName)-1]=0;( U. r; Z5 n% n! B+ X. L( H+ ~
  90.     }
    ( G$ `- p- [) P, p5 h3 E
  91.   }
    : j0 w, _7 Q# h) H% o3 s" e' ^
  92.   return szFileName;
    - y" _9 l! x( S) p$ |- O$ e+ C
  93. }
    1 i% q, t4 {9 y2 H" y; F/ n

  94. ; c1 n4 y1 U0 W; h; r- C+ [( n, z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)( |( G" m# Y1 z  t: E
  96. {
    ! Z+ Y6 u+ a* @2 l( }
  97.   FILE *fp;6 g" x) b" v  b9 b5 F
  98.   char *key=NULL;1 U) {. Y! W; c: T
  99.   char version[MAX_PATH];; e+ g- L# [5 l& _( \
  100.   LPUPDATEFILE file,olds;
    1 C# y* y/ _/ i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 v; `. U3 E3 M' t) k7 u

  102. " D- n5 p3 }6 x4 o- P1 K; X" K: g1 w
  103.   UpdateList.clear();! e0 G8 u4 n0 e6 N
  104.   UpdateFile.clear();
    , f( C+ D- c) Z# F! B" q
  105.   if(GetFileAttributes(filename)==-1) return false;
    " i  p- U. |7 {0 G
  106.   if(!(fp=fopen(filename,"r"))) return false;( g6 G  [. t( w9 J( ]
  107.   fscanf(fp,"%s",version);
    , s. L" d  t! I6 _8 ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    ( c9 D( }& u, j/ f3 R5 L
  109.   while(fscanf(fp,"%s",version)!=EOF)! U2 \& `+ i( v- a  ]) s, s
  110.   {
    & E; N7 {1 {6 [( o5 I1 G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! Z* c( K/ X* r- q7 ~/ H* M# v8 G2 v' d
  112.     fscanf(fp,"%s",file->path);& B7 p) C8 E+ v0 I
  113.     ReadFileNames(fp,file->file);
    3 R: y' J) q5 ?: ^& @$ W2 L/ O
  114.     strcpy(file->full,".");
    $ E1 k2 W! |+ _7 [
  115.     strcat(file->full,file->path);
    3 ]" d1 s9 O; n1 ?5 s4 M8 \
  116.     strcat(file->full,file->file);
    . T: J7 o& U' i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())# w+ U( Y+ ^# F' @: [
  118.     {
    7 ^7 d( }% L' `; ~  t# I4 C8 P
  119.       file->vers=(float)atof(version);& W) L  \; m: @- t, o
  120.       UpdateList.push_back(file->full);, P( N* z: Z, a3 _, n% O. K1 N7 \
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 {& P2 {  ]+ W" `! G6 y, F
  122.     }
    . Z0 B4 |8 w, O
  123.     else
    , v7 Q# s' E8 f2 z, y
  124.     {
    ; A( {2 T! F% T; z0 o. \
  125.       olds=(*p).second;! P" r. b7 ]: y% ~) g( Q+ n
  126.       if(olds->vers<(float)atof(version))* s2 z' U& `/ J5 e
  127.       {
    % O7 ?& w; V9 ]9 q5 g
  128.         olds->vers=(float)atof(version);7 k; o5 d7 L$ F0 n
  129.       }
    / G2 k7 R- n; b: ]3 ~
  130.       free(file);" O& T0 {# I5 w% G
  131.     }
    8 z8 O: H' I3 w8 k6 H
  132.   }2 X# c  J. b, M; h3 c
  133.   fclose(fp);
    4 h( N3 V% z, D) y
  134.   return true;2 i% T+ ^1 r1 s
  135. }* H: h- e* z& V# N4 o

  136. , e/ D: b6 V4 b) g+ a! Q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) s2 l0 M' b) E
  138. {
      X" [) r8 X+ ?7 K
  139.   TCHAR  szFull[MAX_PATH];/ q: t: O. P" l% b2 P
  140.   TCHAR *token,*inter;
    4 h# m' l3 V, @8 y3 C0 U( a" H
  141.   *szPath=0;1 V: x/ a3 k- \& W4 R& n
  142.   strcpy(szFull,szFullPath);- q6 x( `4 p  X5 n
  143.   token=strtok(szFull,"\\/");! L" g2 F6 f+ U' w2 q  _& m& q
  144.   inter=token;
    # c/ C5 A0 h4 l* r7 j
  145.   while(token=strtok(NULL,"\\/"))+ g/ d9 u2 Z4 b9 O, H3 w5 L9 y
  146.   {
    : G) ~* S5 Z# \4 g& i9 q& ~  S
  147.     strcat(szPath,inter);
    / h6 {- Z* F0 T) t8 F" ]- Y& }# b
  148.     strcat(szPath,"\");
    2 n! r7 l0 C# Q; M; m
  149.     inter=token;
    6 Q! q. [2 Z+ m$ y0 _6 C& c
  150.   }
    3 M; j/ f# S5 L1 W8 z
  151.   return strlen(szPath);7 A( t2 l* S. ^5 z! J8 @
  152. }5 q( O9 |% M- ?+ ~1 f: i
  153. ( H6 Z$ T6 e8 i3 W$ k2 U9 m& V+ t
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); r8 P; h  f. e; B( L$ _$ |3 m
  155. {" C: t5 D' z& ]2 i" Q) }4 m2 i: d5 V4 ~
  156.   DWORD attrib=GetFileAttributes(Target);9 |' p$ A1 d& i0 \
  157.   if(attrib!=-1)( F) O) U0 y" d! B( o! W5 ?
  158.   {
    2 n9 X+ _% P6 ?4 Y
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    # _& D5 K% P, i7 g
  160.     {# l) ?9 q, D5 r! P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);8 z5 p+ T1 ^& t& f) L7 f
  162.       SetFileAttributes(Target,attrib);
    - B  \2 v" D+ s' d3 n  ~/ [# ?/ S
  163.     }' V4 u. c8 B6 Y4 S8 j/ R: P
  164.   }
    4 \2 N; I6 ~. H( a" X/ J2 O
  165.   CopyFile(Source,Target,Erase);+ T  u; I8 }2 C
  166. }) _: L- P7 ]* A4 v0 [' g

  167. 2 O) S$ S  l( B! X, ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)- E2 y1 |+ B4 L7 @
  169. {' U. O7 O2 V/ g, U8 g- \
  170.      FILE *fp;0 W. d/ A, Q- @, Z
  171.      char  szBuffer[8192];
    ( _# e* O; S4 U- X& s' Z
  172.   va_list  argptr;
    8 n. g$ f* u# ?1 c8 p' i! [0 n  T" _" |
  173. " Y6 U; F& ~7 f
  174.         va_start(argptr,message);2 k- n% C9 Y4 ?  _: J
  175.         vsprintf(szBuffer,message,argptr);% Q( D5 x% h$ E
  176.         va_end(argptr);+ J4 _6 O0 z9 T7 {
  177.   fp=fopen(FileName,"a");! Y1 b  Z' s$ _- w. o2 E2 O
  178.   if(fp)
    0 ]' N+ T! V& L
  179.   {
    $ z4 A( f9 Z; @4 T
  180.     fprintf(fp,szBuffer);$ \! `# x; \& w& g
  181.     fclose(fp);
    4 s% l: H) P7 u
  182.           _flushall();" R, H; U( r& L7 N* ^
  183.   }
    " W( j: w1 `/ |
  184. }" R; I4 `+ C4 j- C. z" c( I

  185. + ^% \; ~* U8 C& |; A2 t
  186. BOOL CRevAppApp::Fclearf(char *FileName)* x$ A: t- G0 K0 w5 {& D/ c7 d3 i
  187. {( k& X3 S: t! J! I# Y
  188.      FILE *fp;
    % E$ F9 N. }8 P5 p/ c+ Q8 W$ |
  189.     DWORD  attrib;  P0 Z8 a6 L: @) v* f; L
  190.   attrib=GetFileAttributes(FileName);9 p' \) F$ h+ V3 Y& e
  191.   if(attrib!=-1)8 \  K1 H/ D2 @# o
  192.   {
    $ N2 w: ^; D$ @) i9 B$ \
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    / F! s4 Z  J+ E# F6 _1 F
  194.     if(!SetFileAttributes(FileName,attrib))/ _* E/ X) m6 y7 ^+ n' ]3 h
  195.     {
    ! V0 w4 G8 B3 h# m
  196.       return FALSE;; u& Y" }& p/ B
  197.     }
    : n. q! G) Y9 I, y) ]3 C. I) b$ T
  198.   }3 w3 L% ]! {' `5 ~7 q4 m7 E& f
  199.   fp=fopen(FileName,"wb");& n. M; f9 w$ P' {3 U' F
  200.   if(fp)
    " ?# X9 j8 r5 I+ p( G) N5 t
  201.   {
    , \; ^, |8 v' G" L! l. `# ~; r
  202.     fclose(fp);
    . b8 n  \6 A, |8 \# \, J8 j
  203.   }7 j: U/ X% [: ^# y# G$ G  M
  204.   return TRUE;
    . K$ N1 x6 K6 R9 A1 ?9 F
  205. }% R7 c; M- a2 }
  206. 6 w2 K5 m9 b# r% D/ c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 r& f* C" r" ~  n" W
  208. {
    & e4 m9 `6 A1 [" E5 H( [* p
  209.   char filename[MAX_PATH];
    + Z# R& R! T7 u! T/ o
  210.   LPUPDATEFILE file,olds;9 R7 M( M9 s6 L
  211.   std::map<int,CString>::iterator i;. \6 X& \; w' I, R2 {3 D. X
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 Q5 H) ?% M3 G( ]0 Q# q
  213.   std::list<CString>::iterator l;
    ! v% O1 H4 v) M8 Y+ F
  214. - d8 w- M0 j$ j2 r
  215.   if(bFirstUpdate)
    - [* E2 ?* }! B) b0 g$ y+ l' ?4 N
  216.   {
    5 p4 E# U3 O. [: j7 }. C$ C
  217.     dwCurrFile=0;
    * v  R$ i. o+ y# g7 H
  218.     bFirstUpdate=FALSE;
    ' ^9 C7 k* ~/ H0 G$ T) c: Y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ P( q( ~( e0 M0 e0 l
  220.     {. {0 s( [7 K- ^; L4 \
  221.       dwTotalFiles=UpdateLocal.size();9 B3 y9 {* c1 ?$ i4 l
  222.       dwDownLoaded=0;
    / N1 e% Y( x, J* F/ O* ]2 i  K3 F1 c
  223.       bSilentStep=FALSE;) r! D4 s% `7 }1 X' q: c& |6 n
  224.       bCompressed=TRUE;$ [7 ]2 I/ D# x7 g/ `. A
  225.       strExtLocal.Empty();
    5 o. {2 N2 \0 {
  226.       strFullName=(*i).second;2 ?; u& s6 v3 z. k0 K& c/ L( x; ?
  227.       dwProgramState=AP_CONNECT;
    , }/ L- X$ m3 x; {' N2 P
  228.       return TRUE;
    4 R  U8 r+ A+ @- v1 D
  229.     }: Q+ [: Q3 o5 [: F  P) p
  230.   }
    * V) }0 m# G* ]+ ]3 `8 {9 ~
  231.   else if(bRestartUpdater==FALSE)/ J2 x- S' z) o
  232.   {% w3 B1 z  Y4 [  y2 b' W
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), ]" K1 `7 v* z
  234.     {
    7 f. m  P' x# A5 C& u
  235.       file=(*p).second;
    9 A2 Z# \  `  V% ~- v6 t
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    ' p) K1 @! J6 S
  237.       {
    - V: r6 v+ B" ~# a5 n: A
  238.         olds=(*p).second;0 T- h2 p% h4 J5 f) M; ?
  239.         olds->vers=file->vers;3 j2 K0 N3 _  N- F
  240.       }
    % x. V+ L( ]; ^/ m' F( y+ W
  241.       else
    4 Q1 v% k0 J# r, r5 m
  242.       {
    ; \4 ]( z: E, Z$ [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% t0 j8 u6 N0 V( d, o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    9 V* }' h$ B9 ?1 n$ S
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 j( h; i; K7 Y# j  Z( O
  246.       }
    " R4 n; r" O9 ?' O
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 D4 A# I' u) ~0 y, x
  248.       sprintf(filename,"(%s)",file->file);
    , ~7 ]" P# j: F, }
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 W/ ~% x3 p8 z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }/ i5 V* U8 y. `) \' m$ F5 a2 a: ~
  251.     }0 @3 g5 K* H, C% `! {8 {7 q# |6 d1 V
  252.     dwCurrFile++;5 i0 c9 C2 V( G$ S
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 m7 M5 s( A' _8 E
  254.     {" H1 q1 k, l& x# v; W. W- i
  255.       bSilentStep=FALSE;
    " {2 N4 A/ \' Y- D1 v! k5 e; [
  256.       bCompressed=TRUE;3 g$ b) u2 I8 R; u: D7 j
  257.       strExtLocal.Empty();, Y+ V  ?5 N) U8 ?
  258.       strFullName=(*i).second;* U$ W  t- j4 q! d
  259.       dwProgramState=AP_CONNECT;
    ; `8 g+ {4 d7 m+ D! t/ p. O
  260.       return TRUE;
    # C9 ~5 y6 j  D! M# Z0 Y& H
  261.     }
    ! E" A% o. @, z- J, @# D9 K' R
  262.     if(!bRestartUpdater)
    2 M  {+ P% N/ r. y3 U
  263.     {4 N* f! F8 I6 g6 H# d
  264.       int iCurrSize,iFileSize;- p) O$ x0 r0 S% }
  265.       iCurrSize=0;
    6 M# Z7 W! }5 d5 j8 v
  266.       iFileSize=UpdateList2.size();
    * V$ r4 B1 h5 I# m. z6 R! j
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ _$ ?, F3 x- o  q8 o$ F: l$ o
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");- V* p5 B5 A. s: Q; M( ]4 ]
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    / e2 m3 B0 D3 ?2 q, V. c! f, N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 Z& N$ g8 M  K$ j4 M
  271.       Fclearf(".\\update.dat");, e( u& H; B# i( k. [
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    : O; c" W$ D6 K$ I6 }( o
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++). B; ^+ B2 q, [4 _/ i6 q
  274.       {; C/ H; g7 d  M+ M. ^. }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())5 B" {) S7 `) T
  276.         {
    ( Y3 ~" x$ S5 i6 N- X3 w
  277.           file=(*p).second;( U. W& T; C- _1 ?+ k- Y! p
  278.           sprintf(filename,"(%s)",file->file);7 ?- u& N/ y+ @4 L5 S  Y% `3 [9 w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - x* T% L& ~* b3 M0 D, G
  280.           iCurrSize++;* f4 B: G, T) M7 I+ t7 T
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    * S' B3 e7 h4 k7 c' `! D, x; k
  282.         }
    - J8 }4 n. J0 \! s/ U& L6 e1 h
  283.       }6 o: A4 U4 {4 s/ O
  284.       unlink(".\\update.txt");- n+ \# t9 q. {3 ^" k# \* ^: T) G
  285.       unlink(".\\update.tmp");
    5 ?0 Z- A/ Y% c1 N4 ?  R6 Q' R
  286.       Fclearf(".\\checkversion.dat");
    6 h; P1 D6 ]5 T2 J2 c! A1 O
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + J9 ?. x, |, H2 u7 I, M; j
  288.       if(UpdateLocal.size())
    3 P7 X9 A# P! H% }% Y0 {
  289.       {
    ' c% z. `6 y( `! s8 Y6 D. T' |* F
  290.         UpdateLocal.clear();, U# Y/ G9 i( l2 t0 P
  291.       }
    1 U( i& p: m% ?8 O) x9 M# [. o
  292.       if(UpdateFile3.size())
    ' L4 c: _; ^! G5 ]5 `5 W* Q9 c
  293.       {& y: O0 G2 w; P, ^0 E( V$ [- V! Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): a8 v7 M- ?6 B; [1 L4 G
  295.         {
    # S4 V* A1 W/ u' Q" F8 I( S
  296.           file=(*p).second;1 N% h% ?1 C: w* N3 n6 s
  297.           free(file);0 B: [) S' y& N3 X
  298.         }
    : z$ {& Z8 q5 F3 z5 ?0 ?/ c$ Y/ P
  299.         UpdateFile3.clear();
    $ u, m* W2 ^  K, G2 t) z- X/ s
  300.         UpdateList3.clear();0 |4 B8 W4 ^& }# }7 W( d
  301.       }! `# t( C! e  ?
  302.       if(UpdateFile2.size())
    2 x; H' @: O* h/ F! `/ ^
  303.       {
    5 I' H* a6 \1 r/ O" k
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ O: Q6 d$ I/ T) l3 B
  305.         {
    7 \. U, G2 b5 ?" t6 J' b
  306.           file=(*p).second;- z3 ^; l+ k0 B+ I- A
  307.           free(file);) s4 U8 C2 ~% E0 b$ X1 z0 S
  308.         }( {9 U# a. ]' Z7 F% T, G
  309.         UpdateFile2.clear();5 b- y  H) f6 Y7 h9 X3 \
  310.         UpdateList2.clear();& X2 b' c5 v. a9 a6 p, ~5 h1 j8 J
  311.       }& {$ t' L! N0 m4 ]! A8 l" k! F
  312.       if(UpdateFile1.size())
    4 n7 W' e' e3 ^! ], u! O
  313.       {
    1 D4 D7 x9 Q$ g: \& H9 G  g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; `" h2 R" p1 c. i' y$ l
  315.         {3 S/ O7 t' q. ]4 G; C
  316.           file=(*p).second;
    5 {- [/ A" P2 _$ q4 j  F6 ^: Q+ Z
  317.           free(file);
    . m% |* E  K6 P4 q% ^
  318.         }
    % ~5 r, W" s- W! h
  319.         UpdateFile1.clear();0 G: L7 Z4 q& u# N# G
  320.         UpdateList1.clear();
    8 E1 i+ h" j1 [2 e( n+ y
  321.       }0 W% V' C2 C% J
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    9 U& n) W5 r1 M6 a
  323.     }
    ( G) Y- l% U- i" Y! F: O
  324.   }
    2 K6 X2 U& P9 \, W
  325.   return FALSE;, i5 ?* K9 p2 e1 m; Q/ q# v
  326. }3 v: g8 n- B  G2 s! A
  327. / d& R0 ~4 W1 f. P- G
  328. void CRevAppApp::ClearAll(void)8 F( T7 q+ u* C1 X2 U
  329. {- N% l& D5 |- i( }3 [5 m; ]' r
  330.   LPUPDATEFILE file;
    1 w; W6 L! R1 `+ `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      D; I) a! n! z; a: O
  332. 1 g5 h) y9 X. h; N+ q! `
  333.   if(UpdateLocal.size())
    2 i& i9 }  Q/ [6 b! a8 N
  334.   {: L. T4 u0 z) ]7 I; c
  335.     UpdateLocal.clear();
    1 s0 g( Y. @/ V4 A
  336.   }0 O  X& A5 z. ?1 [1 G; o
  337.   if(UpdateFile3.size())
    7 |* ^$ K6 ?! m- @& h5 i! x' C# [
  338.   {4 t' U6 V3 q/ ?; M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ) Z' E) X& z  z! B6 q+ n/ ~, K4 N
  340.     {/ {) }0 n6 o! B, b+ q
  341.       file=(*p).second;* c4 E9 U5 l% z8 _5 s" L
  342.       free(file);; I" K; S" Z& g& E: Y
  343.     }/ K8 z, W) J2 n8 o1 e3 f- J
  344.     UpdateFile3.clear();
    - Y3 e6 \/ a$ M% e, w
  345.     UpdateList3.clear();
    3 j, e8 C1 F. I! K' Y
  346.   }
    / E+ T! g3 K6 Q+ U! q* S
  347.   if(UpdateFile2.size()); T& W0 T& G2 g, o. w
  348.   {
    # r: e) j  H8 J- x3 N5 ]7 Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% Z; ^3 s  p  c) ?* A9 {- t7 X* v
  350.     {, n% y3 ]4 q  Y" B/ |  j  L
  351.       file=(*p).second;3 ?: X. v& P% G; S7 x
  352.       free(file);( U& e/ r5 [& P* e/ v/ O  E, e5 j+ H
  353.     }5 ?2 l2 L3 K; X& _% Y1 a/ Z
  354.     UpdateFile2.clear();
    * w. I+ X+ U3 u' T7 G8 X8 f0 k
  355.     UpdateList2.clear();
      c1 g6 Y# W* Z
  356.   }
    5 h" d2 v& ]0 }" p( b" ]6 R
  357.   if(UpdateFile1.size())% z% Y" n! L% j& r5 \; S' |
  358.   {
    9 o( k8 a8 ~1 s# |$ x6 v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( f& t2 Y: s) Q& C5 @$ T0 c
  360.     {
    8 B/ _' c3 ?% z; }) e7 ^, N3 |
  361.       file=(*p).second;- a, S7 u- N/ }
  362.       free(file);
    ' E5 E3 c1 K9 m8 b
  363.     }! x! g1 ?: r, F7 e- c
  364.     UpdateFile1.clear();
    % ?7 J" I, T! z' R/ t# C
  365.     UpdateList1.clear();8 p  h( G# W6 u5 {0 H
  366.   }
    - j3 \3 R( P" h( ^, Z# M  Y  ?
  367. }  
    * a; [" e1 ]3 K' m, r
  368.   
    6 o: j9 ^9 ?! ?8 X2 c7 E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ( S6 A8 L* Z& V9 N
  370. {3 e; G* y& a0 c) U) q
  371.   int c;  ^0 g6 C1 e' e+ ~+ p# C- b
  372.   LPUPDATEFILE file1,file2;
    : H- D8 l2 ~! ^& M* M* N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    . _6 ^. s; E+ l* p! t, G
  374.   std::list<CString>::iterator l;
    6 T. v/ D) M7 R' o/ r9 Q* [7 A9 |
  375. 3 o5 f' N9 {0 r: }& K( D
  376.   UpdateLocal.clear();
    7 o0 l) S/ @9 T1 K) G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ; L+ K0 I& f7 t! S+ u$ I( L
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    * u. E0 j# P+ q$ \2 ^1 T8 }
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    2 t$ G/ Z) p  {8 ~0 K8 Q5 ?+ z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    : J; E! L8 e/ c( ?
  381.   if(UpdateFile3.size())4 _8 t0 X, j2 d1 T/ x# W+ C
  382.   {$ m# q& i9 C& _- L* d& _7 x* @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  @5 m: M( g5 f* W8 N
  384.     {
    + o5 L1 ]9 L1 ^% C+ {1 X; ]
  385.       file2=(LPUPDATEFILE)(*i).second;
    + F5 L3 k6 W3 F- d% G/ t" B
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())- \  [& |- P3 i4 i
  387.       {
    0 u) k8 H  K7 F. a2 t  y
  388.         file1=(LPUPDATEFILE)(*p).second;2 k4 d0 p5 d/ M& f7 M
  389.         file1->vers=file2->vers;& @! G( N- L! j  n3 M. \' `
  390.       }
    / s3 r2 M0 |4 F7 {( k
  391.       else
    6 A* F, f& [) l1 P
  392.       {
    ! M5 v( J1 i3 R
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      `% t. P/ P. t8 P3 Q6 O
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    7 m" b1 @% e* b3 \- e
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! ]  n" p8 [( s3 T) ?
  396.       }! v8 t! i9 l( v
  397.     }0 e7 F: v( H5 |7 a
  398.   }
    9 P  B: K: K0 f" d0 q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)3 C. k0 k0 z3 O0 A+ @+ I/ ]5 v
  400.   {& Z2 y, ?  H5 a! e2 ~5 U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ; d+ L' L( U7 y7 b$ U5 F
  402.     {
    ) {1 `& ]- f5 v8 P5 w+ p
  403.       file2=(LPUPDATEFILE)(*i).second;* \' B% f9 ~% Z2 l1 e: x! z8 v3 L
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ' r5 o% M* \  `/ y5 s* ?: P' q! @. @
  405.       {
    / ?- t  b- D8 X. a! v6 J" K
  406.         file1=(LPUPDATEFILE)(*p).second;
    ! l0 W$ R- `1 d. H; W1 F
  407.         if(file1->vers!=file2->vers)
    9 |8 U; B) \  q- ]: T
  408.         {
    1 Z# k7 L% X( r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* R, X; V4 m/ r$ R
  410.           c++;- H$ d, m+ F' f4 `; M
  411.         }+ ~- \- M! G3 L: \& ]6 ?
  412.       }
    ; |2 k0 R9 l' z0 H: q$ p
  413.       else, W. }- E4 s  R* h- q
  414.       {
    8 l1 Z6 D/ r. M2 `2 B0 K5 y* m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( x& d% w" y3 {/ b
  416.         c++;
    & h$ U9 G- `/ m3 o; V7 K
  417.       }$ j- [, c* y, Z6 f$ L
  418.     }
    5 f3 L5 V9 b' b
  419.   }: Q6 h: k+ {4 X0 z# {, r7 T
  420.   unlink(".\\DownLoad\\update.txt");
    1 U7 a4 ^4 a1 R
  421.   if(UpdateLocal.size()) return TRUE;
    & |# v7 b5 Z9 H! `- o2 o0 P
  422.   else                   return FALSE;
    4 ?7 K4 n' H! L0 ^/ s
  423. }; K: T5 e, }! c' m7 C. Y: b

  424. / o8 S4 K2 {7 }! p( B& C2 J; G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"" d; J! A( V0 T1 M8 a/ q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' }% N0 x4 V+ v- ?. u. \
  427. & B& h/ t/ e! v% D, I" F8 u
  428. 2 K: R& Z, I6 \) ]: E* P$ H# v
  429. 3 x' ]0 c! Q/ r; M. }
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    9 W1 M8 @9 b7 l% k# }0 l
  431. {- [$ T; M+ g' D3 y6 s
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;2 b, W: A- l: T* v# Z
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ; P# }. p, T, `/ B3 M0 l' [4 e3 ]
  434.   {4 K9 K# B  t  i5 k
  435.     char szLanguage[50];- `0 J: f) W8 w7 o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 ^+ z4 e5 I1 Z& r% I
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! J5 z! n9 t; N+ t5 R: D
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , q& l9 ?) h. J# o
  439.     else                                   m_iLanguage=ENGLISH;
    % y+ C1 s( H5 n3 L& S3 @- l
  440.     char szRegister[100];; ]7 I' K. L9 u3 C7 M4 o1 O2 R4 h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& e9 i4 I$ J5 _/ X- L
  442.     strRegsName=szRegister;) \3 K6 p  X" |1 P3 k! `$ s
  443.     char szPatchURL[100];, J0 I$ d. ~! {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% D; _8 _: _+ j. d- j- N' a) n2 h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);  X  {6 @( @* Z' s
  446.   }
    $ U5 w, u: _  ^8 {3 ^$ |' Q6 B2 X6 ^+ o
  447.   else
    7 O4 N0 d4 e( J" B6 q
  448.   {
    # r. {! t0 M& i( H& r8 R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * L: V( M1 W8 m1 ?- ~6 r; ?
  450.     strRegsName=DEFAULT_REG_URL;
    3 N0 Z+ h) ]! B& `
  451.   }
    3 |  v1 `  }; S
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    $ _. E. I! S# X8 s3 V
  453.   {
    ) I1 g* N! U/ m
  454.     char szIP[50];4 p2 `: d+ R  z* z( r0 R' b7 K
  455.     char szDIR[300];
    ) P. ]2 D5 V+ H0 `* [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    - B8 s1 B0 o7 w5 o" \! O
  457.     {) o, p$ h, x% B0 m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 \8 @4 T6 f" c6 L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      K; R9 w9 w- e% W: E. K) K4 C
  460.       strHostName=szIP;4 a$ o4 w8 h" X) Y/ h! r! k+ l
  461.       strHostPath.Format("/%s",szDIR);
    2 \; ]4 Z. B& k
  462.     }
    9 G, j! c3 i5 B0 i
  463.     else; G) e, l, b  s* O
  464.     {
    ! y! E  `4 W2 w- {1 B
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ ~: `+ C8 t' [0 f! R
  466.       {
    . s2 W% |( T5 o+ D/ e5 H1 ]9 o( N
  467.         char szLanguage[50];
    + E* x  @; k  Z0 p! Y. O
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
      ^7 V2 `* u. x) V4 w  j% W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; w0 O" `9 L) u' P5 c
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 ~0 W8 R4 J: ~" D
  471.         else                                   m_iLanguage=ENGLISH;, |+ \8 s) U% ^& b. N1 f2 n
  472.         char szRegister[100];
    2 [* C, G# Y. H# [7 C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");6 L2 }, z5 A/ G- @9 A
  474.         strRegsName=szRegister;" Q) T% M7 X! p/ Z1 `1 V
  475.         char szPatchURL[100];/ ~% i$ R1 p$ V6 K9 g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 ~( _' X1 \% t, a7 \/ h, I! \% ?$ v
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! n/ u7 a4 V) s# L7 V# O
  478.       }+ k& w# G6 G6 G' k
  479.       else5 [7 q& F/ p. \! t4 V
  480.       {% w, e6 b3 r. O) Y+ y4 a2 p
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 ^) ?& D1 w; y, x; x( e8 `6 Z' v
  482.         strRegsName=DEFAULT_REG_URL;
    9 m0 k( d2 B& @, f
  483.       }+ b4 A$ q" S5 ^
  484.     }. _$ Q# B* |% z$ F& k
  485.   }
    " b9 {. E" k2 l
  486.   return true;  h7 s! n3 ?. k+ P
  487. }
    ' R, J6 X% O8 x
  488. 4 F; d# I/ Y/ G8 {& E+ E& Q
  489. #include ".\ZLib\unzip.h"' w$ G6 j% m. P& R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# s8 C% p8 |, Q$ e
  491. /////////////////////////////////////////////////////////////////////////////* i2 `7 K, P9 L* ~7 x
  492. // CRevAppApp initialization
    : @6 D. l1 g# L; e
  493. 1 h4 O# b+ y5 H6 A5 f8 L4 ?* v! p
  494. BOOL CRevAppApp::InitInstance()
    + e- T  |# K; q6 b8 [8 P
  495. {
    2 U: z0 o8 G$ i) ?, L
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( k* x4 m5 d  |' o1 _6 F
  497. 3 K1 r0 s+ T/ X4 j7 V9 U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    * B% Y3 q; Y. ]: h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    9 ?5 u3 g3 C* j; m1 P% F, G7 S
  500.   {- {  B5 r- A8 H6 K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& m# K$ ~7 {5 n2 C+ I5 H1 g
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ! H+ b/ f) J( j" W! _6 q9 N
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))). T  F, W5 D4 K/ m
  504.     {; q9 b' @8 O$ p
  505.       strcpy(szPath,szPathTarget);2 ~+ Y$ z8 f) @! Y0 s
  506.       SetCurrentDirectory(szPath);
    , u7 d3 B. F$ ~# W# y: m
  507.     }
    ' H/ G: W* q9 L6 i. C% }
  508.   }
    7 O1 N! k6 o& `: P6 z
  509. #ifdef _DEBUG1 Z5 I, {4 h) \+ `! i2 G7 D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " M9 K5 e0 q6 J* r
  511. #else
    7 D6 {9 h& |' A5 z# t  K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! t; t. V  [8 u" V; w: f
  513. #endif
    ) h& ~6 s/ k; [5 B9 e  i$ W
  514.   {
    9 i) d& g) t, T
  515.     char tempFileName[MAX_PATH];
    " M! k' Y% @. o* S5 V3 ]% ^: `3 ~
  516.     strcpy(tempFileName,szPathSource);) x* k8 ~3 [2 D
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ) E1 a: Y0 _! @* V  b4 u; J& ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");. B9 E. j5 d$ X. {
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % x4 _% ]& O1 X  t* D
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);1 V4 }, F3 D0 @3 V" L6 a; Q
  521.     return TRUE;) D4 y. I4 t4 B7 h" M
  522.   }' o; N& n' X6 m1 V( p
  523.   // Nuke 0118: Delete run.exe
    ' E2 j5 _5 W5 ~9 ]) h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) D0 @' l$ U+ }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");  N4 d8 B, n7 @; n) A
  526.   if(!ReadCfgFile("Config.ini"))& V, C: d8 T. U% U6 H
  527.   {
    . U! f: O" d# c8 m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    + F( d- o% I; [- Z$ Q/ }! f
  529.     return TRUE;& |$ y- ^: V7 g
  530.   }: r1 r- U/ W: G  J' F% i  b
  531.   HANDLE mutex;' m2 D+ {- F1 u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ! ]) x- i0 h. i  w  F3 I
  533.   {
    8 `0 w* b9 k" _) Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)  j& u+ h* i" g& Y8 g
  535.     {
    / B2 |. {9 i; S9 R
  536.       CloseHandle(mutex);
    5 }6 K. q+ `% O1 M
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 w2 _9 {! {: \2 ^' q/ D
  538.       return TRUE;
    ; ^8 Z; l7 r  T9 p
  539.     }; l0 v- `& f1 S) ^# B! C4 V
  540.   }  
    : J! ~! ?1 F" L$ D% L
  541.   CloseHandle(mutex);
    # f% d# d0 I! N4 k1 ~3 }  j3 L2 f8 r

  542. 0 S# a7 |. s7 z0 o8 \
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( s/ E9 L1 O( O5 g, U

  544. ) i% |9 M/ p( x
  545.         AfxEnableControlContainer();
    0 X  v5 p% u/ Z( _% }9 Q# V, i

  546. 6 E9 \4 U8 R: G
  547.   bCanUpdate=FALSE;  w- y' y6 P' M; T1 b# ?$ c
  548.   dwStartUpSteps=1;
    % R2 }  M9 b/ _
  549.   dwProgramState=AP_NOTHING;1 Y: q8 Y9 c( L8 ]* w3 }5 S5 F
  550. ( r7 n2 Q, Z- s1 V% X6 T
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - f$ n: u4 A+ l, p! G! [3 E
  552. 3 g2 @  |3 K* m  Q( h
  553.         // Standard initialization
    $ V- t3 d- D2 U2 r7 M8 j3 A8 j8 d
  554.         // If you are not using these features and wish to reduce the size" b7 Z  f# o6 X& u" g
  555.         //  of your final executable, you should remove from the following; r* w7 l4 s6 k; E5 h" B
  556.         //  the specific initialization routines you do not need.; f. W; b' G- N

  557. % \+ j7 @; ^3 A* u
  558. #ifdef _AFXDLL
    ( _1 V! ~( F% e1 w3 J* O
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ; ~1 T. S. D5 v- m
  560. #else
    1 j9 G- {. D+ \2 l  }! r$ E% P4 t# |
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    $ N4 G$ @$ S* d0 [6 q0 \
  562. #endif" @4 Q0 p( O5 ?- y
  563. 5 x, [# M0 d# H6 N
  564.   dlg=new CRevAppDlg;7 A, C9 x! n4 I; H
  565.   dlg->Create(IDD_REVAPP_DIALOG);# S: A# Z0 {, G# t2 \+ s, [1 p
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + q6 M7 }& ?- F! V% M- A
  567.   m_pMainWnd=dlg;% C! a6 @2 ?( j
  568. # p5 N* X0 {- n* z$ r( e' V
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    7 S4 g9 s& \0 b

  570. ! _5 L7 |+ Q5 Q% n5 u" }
  571. //  GdiplusStartupInput gdiplusStartupInput;$ f! r' ]# @2 k- F8 N% O
  572. //  ULONG_PTR gdiplusToken;
      L3 T5 J2 A. k" S4 r
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: ^! T; H, P8 E  P! g
  574. 6 M4 n7 V  Q5 w( U. V  Z: A3 |
  575. //        CRevAppDlg dlg;$ P2 P" k' W# m$ A/ u! s$ `
  576. //        int nResponse = dlg.DoModal();
    0 p' }5 B9 }, ^0 }' {# W
  577. //        if (nResponse == IDOK)
    0 t/ M1 b+ d1 z( ?
  578. //        {. E/ R% z4 j8 U* P# S8 r% E% t
  579. //                // TODO: Place code here to handle when the dialog is, P! d7 |7 `: q4 x$ X' ^; O
  580. //                //  dismissed with OK
    8 J9 c! r1 j( X
  581. //        }
    * M! D; [( s1 v, b+ z" L1 t3 O0 Q
  582. //        else if (nResponse == IDCANCEL)
    " A6 _0 E$ |' y8 ]7 q  w% |1 ~! r
  583. //        {
    - ]; e* w- r2 o1 C- |
  584. //                // TODO: Place code here to handle when the dialog is% f" a; m! I$ e6 d' R% T8 |
  585. //                //  dismissed with Cancel2 r9 W* j: L7 y+ c% b
  586. //        }$ M. ]4 D% r8 a3 V; j" e
  587. . K1 n! G4 Y7 R3 }* b- V9 t% E
  588.         // Since the dialog has been closed, return FALSE so that we exit the' z8 r$ o4 s4 B. l7 l- L
  589.         //  application, rather than start the application's message pump.* x) D' Y1 F3 A+ u5 Q4 u
  590.         return TRUE;
    & |2 D0 B+ Q; e8 Q8 o& N# r
  591. }
    2 `% q6 |" `6 f% X4 D

  592. # [% C8 O8 y: C  m
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    # Z# _1 A+ t9 _" t5 L$ ]
  594. {! l# B! k$ f  ~9 Y0 K+ `5 c
  595.   int i;8 z: o" U7 _9 z: u6 X4 G4 d
  596.   char *szRet;
    1 n4 b' w8 M! a
  597. ! d  ~' t4 P0 r! L
  598.   if(pSource) { itoken=0; sztoken=pSource; }  D6 T& ~) `' {5 I
  599.   if(sztoken)
    * b  z( Z, Z8 o9 {+ F: N9 k" Z* g
  600.   {
    2 b0 H6 `2 d( y/ _" U3 R& H0 M# U; b
  601.     szRet=&sztoken[itoken];9 F% M5 R/ T" K' k, z
  602.     while(sztoken[itoken])0 `2 o/ u( S' }! B& i9 ?8 }
  603.     {
    , u/ o1 k$ m: m0 L
  604.       for(i=0;i<(int)strlen(token);i++)
    5 S) Z+ ^6 @5 h
  605.       {; G' J% L/ V6 Q- }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ l$ R5 h; B; t/ H4 p
  607.         {# v; w( Z- v: h# Q$ [6 p+ M; ^
  608.           sztoken[itoken++]=0;- A1 v. V& K, j: K" p" K
  609.           sztoken[itoken++]=0;
    # F) U: H# z# r- |4 Z9 O
  610.           return szRet;( V& N/ Q+ _. i  B" {  \/ E. i' _7 A2 a
  611.         }" g) ^2 s1 B7 H. K, q
  612.       }
    ( M( [$ T, X9 _6 u9 l- n6 d1 _
  613.       itoken++;
    3 u9 c7 U3 i, ^+ m0 L; B
  614.     }
    % h; L& B" w' W# N0 M2 f
  615.   }
    . F1 v4 v8 n( M5 x9 \* X5 k- A
  616.   return NULL;
    ) ?' e& B  _$ n  b0 L. ~' o
  617. }
    - R# n" ^+ Y2 s9 h5 C1 M# L3 p

  618. . Y0 N- G! k' P0 F/ T5 i
  619. void ProcessProc(long Total,long Current)
    * i) l) E/ a9 V, i
  620. {
    & K* M' B& n# _
  621.         MSG msg;) f: b7 q5 |2 m4 [1 K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
      v3 F: m- s1 E, Y) s+ l) T
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , w$ S6 y% }. o  X  O! }
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! x0 ?+ X  R: l3 h6 M6 X! z
  625.         {
    1 g: ]' T4 ?% U
  626.                 if(!GetMessage(&msg,NULL,0,0))
    9 j8 Y, u: _8 a7 @  A
  627.                 {) d# p# J5 N: }1 `! j/ p) r
  628.                         return;
    ; s/ G- r2 `3 i. g
  629.                 }9 H+ C& r) x+ t) P  a3 d/ ~9 i7 N8 T
  630.                 TranslateMessage(&msg);
    3 Q  @$ N; i0 ~7 O
  631.                 DispatchMessage(&msg);! m6 V& `2 ?9 Y  c0 l$ l
  632.         }        & Q# I! M4 x5 R2 @
  633. }9 [5 j- i- r* J/ E* {3 R
  634.   e. l- W" j# ~4 y: i1 x
  635. BOOL bFirstChar=TRUE;; J9 |+ w; G! ^. ]4 S5 F  F

  636. + \' Z6 g% g( e- j# J
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    # p1 r% o/ t. i! S. n; ]$ o
  638. {) a% [2 l: B0 t* P; _
  639.         // TODO: Add your specialized code here and/or call the base class
    ) i6 E, v% I. L  v2 o9 p
  640.   switch(dwProgramState)
    4 P% e- K" p9 \
  641.   {
    % D9 ^) K( b1 _' n, Q" }, B' K
  642.   case AP_NOTHING:3 o2 Z( V- b% @' x& s! f
  643.     switch(dwStartUpSteps)9 n( R  u$ c2 k) T
  644.     {
    4 W) w6 J: h/ Z# o8 n( c: {3 B
  645.     case 1:
    * u% L) W3 H8 z* z3 d
  646.       {
    - U" }6 I" ]: c
  647.         int i;, v' j  Y- M+ G  F4 @
  648.         CDC *pCDC=dlg->GetDC();
    % ^) S" i% ~" J8 A! w5 E
  649.         HDC hdcwnd=pCDC->m_hDC;7 X0 A! E8 q1 C/ j
  650. //        Graphics graphics(hdcwnd);
    $ s: a/ z: {2 C/ R
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    6 S: s; h! d+ h( m1 ~
  652. //        INT iWidth=bitmap.GetWidth();7 d& [- e4 W. N) j$ z. ]
  653. //        INT iHeight=bitmap.GetHeight();
    - E+ E) B% w: [$ Q1 R
  654. //        Color color,colorTemp;, h/ }$ `: [" \% p: a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 g7 p, ~$ n; B4 {
  656. //        {; i0 f$ X, k  ~& t1 C" h8 J5 Z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 _) K: Y0 O: B7 d6 f
  658. //          {7 N/ c8 f+ c; r% I9 m
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    8 D4 H% @) |8 N0 k4 a. W
  660. //            colorTemp.SetValue(color.MakeARGB(
    * q3 Q9 b& _# D9 v- ?" o
  661. //              (BYTE)(255*iColumn/iWidth),
    0 W9 P/ k) W9 @* q
  662. //              color.GetRed(),  W& m5 b4 s5 |7 n  `! i
  663. //              color.GetGreen(),  u2 g0 R/ h- y
  664. //              color.GetBlue()));# }3 R) |, g$ O2 D7 W7 T3 b" f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);; F2 C. Y0 {7 P9 {
  666. //          }* p! p" T+ K) E& V5 ?$ A
  667. //        }8 w: V+ [; d3 d4 h5 M# h- M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 l  N2 f; O( W5 E& H/ x; L
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ j. {3 X# ?! W3 I5 t5 M
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    - A7 Z! M, ]/ }) b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");: I! f3 M, i2 K  d- [! [. B
  672.         for(i=0;i<240;i+=8)
    7 W. i' K" Y1 F6 e. @
  673.         {+ e! |# a* O' X% l6 g  [  |
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - f5 a' C" n$ i; [( v
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , o7 d1 W# ]' L' z( m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ) `$ ~2 h& q" ^1 q( N4 T
  677.           Sleep(33);
    # a; M, C, r: p8 ?, N9 I+ l& b
  678.         }' R! z6 e/ K3 a/ r
  679.         Sleep(1000);
      e0 t/ b1 _+ C1 w' V, J
  680.         for(i=240;i>0;i-=8)
    ( p* S  m, D+ N+ r
  681.         {8 j0 i) w8 D9 m, m* _9 v& U5 g4 I$ X
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " [" E+ r: c" c0 C, W& l
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % W! N( g7 J# ~  f7 P# \# }( d
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! ~1 G6 Y7 P3 Z3 c* [9 N
  685.           Sleep(33);
    , B* g! R) E/ |) q4 n! L$ t& g% Q- b
  686.         }: @( k0 g0 E, v& {2 B
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);& [  K, B) q' l4 g# o  c7 s
  688.         dlg->ReleaseDC(pCDC);
    & c5 h! c% `) _) B9 p$ q  J8 k3 d
  689.         DeleteDC(hdctar);
    % @9 t) L9 _* D, H. a
  690.         DeleteDC(hdcsrc);" `7 E- C9 z2 ^3 ]" x
  691.         DeleteDC(hdcorg);
    3 O, {9 v( x0 L& U
  692.       }$ a' d$ @3 j- m; }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 W! V+ X6 A7 r6 Y8 }( |  F! g
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");3 C! _" w! N& l& H
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    $ |: P; I- ^  [( G8 X- i
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");: I& j: d( q3 x) f
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 a( W6 R8 A( I  I
  698.       if(!Dn.Connected())
    ' P! G6 B) T% {1 A; D
  699.       {
    " K5 `% F6 M* Z0 U; P
  700.         dwTotalFiles=1;1 P. p9 M' _$ ]/ `- C  C/ C, }
  701.         dwDownLoaded=0;7 q) w7 R! O: C! ]" W! Q( a
  702.         bSilentStep=TRUE;
    : m, N% ?9 A1 m1 S+ H" U4 i
  703.         bCompressed=FALSE;  g8 Z+ z# B9 U! Q/ b' {! J
  704.         strExtLocal.Empty();
    3 _2 @, P8 p. ~9 B9 J! k6 i6 S
  705.         strFullName="readme.txt";
    ' T4 T* `9 l& `. g- J6 ?: a
  706.         dwProgramState=AP_CONNECT;, Q. K3 k& N- ]' x+ t
  707.       }
    8 }% R6 J0 ^. t4 t8 u( T: f7 B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 v! B4 W  f/ A9 F
  709.       dwStartUpSteps=2;
    " @8 j2 c% n! I* c/ `" ]
  710.       break;
      U! o4 P2 ~: _' K
  711.     case 2:& Y8 M7 t, e, m3 f
  712.       {
    , k' c: ~& W$ _: b# B
  713.         int iEOF;
    & e3 Y6 Q8 `: g, z) s
  714.         FILE *fp;$ j" S/ c0 H0 |+ P/ u
  715.         char szString[512];3 S( n. w" y3 H5 c; l
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");% m* `* c* u* ?/ N3 _
  717.         if(fp)2 n/ i$ S5 O6 M* S
  718.         {
    ' ]/ n! M' t: J" `5 L9 w2 K
  719.           do
    ! \; H6 c. p0 j) s
  720.           {
    8 z/ H, b: L$ a$ p0 h# f
  721.             iEOF=fscanf(fp,"%s",szString);
    / N. T4 n6 }4 O
  722.             if(strlen(szString))) O& s* v" ]  o/ o5 w; j7 Q& Z
  723.             {
    0 R% C9 ^* B; W$ g1 a; t/ ~3 \( X
  724.               if(bFirstChar): g: |9 C+ J/ n7 @( N
  725.               {
    9 o) P' M. d: H9 q, G& L6 ?' y
  726.                 bFirstChar=FALSE;+ D3 b( c; {% p+ z+ a- j
  727.                 bConnectIsBig5=FALSE;
    2 ~# ~" h. j$ [2 V5 C5 q( D
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ E! c) n* Y1 S! N/ E0 m
  729.               }# M, B% s7 C- b, e2 N4 Z9 P8 @
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));$ u$ l# ?+ `7 G& N$ i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));/ ^8 {5 E8 M3 i: F; r! a/ Q9 \# Y
  732.               dlg->m_ListText.AddString(szString);
    2 C. U# W: u7 V) a& A1 J$ z
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * U; r! e  ?2 J' Q& K2 S2 }
  734.               *szString=0;5 G! v2 x) _9 M3 Y; U. ]# J
  735.             }  c  c' N1 [* z7 y
  736.           } while(iEOF!=EOF);
    4 _# b  j3 ~# ?9 f- \7 X
  737.           fclose(fp);
    6 k8 s& v3 R9 F( K# e. f, h
  738.           unlink(".\\DownLoad\\readme.txt");
    ' H+ L9 Y- Z/ X1 @, |% _
  739.           dwStartUpSteps=3;
    ' A: t& Y# R! |, ~6 d- E
  740.         }9 l1 o' G$ d/ _% X# p; X5 K
  741.       }
      d' M8 u% ?3 G
  742.       break;
    - x$ B; C, Q+ P" Q
  743.     case 3:9 X2 i% D' H/ g3 K/ c0 ?
  744.       if(!Dn.Connected())
    ( f+ n, \3 n" U6 h4 t4 k( l. R1 a
  745.       {
      z* c2 u4 Q5 j3 m' e
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);  B" a2 o: n- o* x3 p  p
  747.         dwTotalFiles=1;
    5 D7 n1 I/ f. a# X0 N" h0 Y
  748.         dwDownLoaded=0;
    ( W# x& l2 |8 L
  749.         bSilentStep=TRUE;# k, M, ^6 Y- t& B" k# C
  750.         bCompressed=FALSE;" G5 {5 ^9 @9 C
  751.         strExtLocal.Empty();) E8 q: ]6 D, r
  752.         strFullName="checkversion.txt";
    $ N( [4 Y* S7 W: b' E
  753.         dwProgramState=AP_CONNECT;6 F$ K/ l; f, j2 A
  754.       }+ P- O+ L$ c9 l' A& H$ [
  755.       dwStartUpSteps=4;
    - c. r( c9 t! A( v2 h
  756.       break;
    3 ]" o2 S3 @/ C9 V8 S
  757.     case 4:6 R4 b( M0 u$ ?
  758.       {6 q+ m- j- g+ F7 ^
  759.         FILE *fp;
    0 m& {) O% m3 u0 u) x
  760.         char szString1[128];0 O- l1 I* T1 P: x5 ^9 a- m
  761.         char szString2[128];9 q: k5 ^' ], y  P3 Y  x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");. D# J7 i! X' o$ n9 X
  763.         if(fp)  K4 U+ @$ n0 I# U1 a
  764.         {, R2 c( }- |8 k0 |
  765.           fscanf(fp,"%s",szString1);
    8 B, K. X; U2 w, x+ i2 c
  766.           fclose(fp);
    3 o5 B6 Q  S; H- \& f
  767.           fCheckVersion=atof(szString1);
    # {$ g7 H6 w1 S4 F, d* [1 S4 F
  768.           fp=fopen(".\\checkversion.dat","r");& A1 i, G& v& o% P3 Q* w
  769.           if(fp)
    : Y/ B. F6 v# K1 _+ y
  770.           {
    " |( P; y7 g3 f7 M: t* Q; m% A
  771.             fscanf(fp,"%s",szString2);
    * x9 X! c, z/ ?8 \. y1 g1 U
  772.             fclose(fp);
    0 R1 O# [$ _2 m
  773.             if(atof(szString1)!=atof(szString2))
    7 l5 B% X! Z. W; [  C7 {3 G+ V
  774.             {
    2 Z" {) n8 z0 t, R/ B) e
  775.               if(!Dn.Connected())0 y7 A9 M  l6 O! V2 r4 a+ ~; Q0 }
  776.               {
    , d0 ~3 R2 b& x+ @6 X
  777.                 bFirstUpdate=TRUE;" S5 M1 W& a4 j; I% {4 _
  778.                 dwTotalFiles=1;
    ; W0 O  [. h! o- P/ P+ b: }: d6 L
  779.                 dwDownLoaded=0;
    . l2 a" T6 X, }
  780.                 bSilentStep=FALSE;
    ) {" F9 ]& j! i* O$ F3 o
  781.                 bCompressed=TRUE;
    " |' l# c" k" j
  782.                 strExtLocal=".\\DownLoad\";: o1 M6 c& p+ }4 t9 f8 h! }4 P3 |: Z
  783.                 strFullName="update.txt";( |3 @9 s6 H5 e/ r
  784.                 dwProgramState=AP_CONNECT;
    0 l! S% _3 `/ u" l( t3 o: B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  U8 e0 D9 Z2 m. a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 ?+ u3 g/ @( Q+ P( h
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    . d! o, k2 g4 Z, y7 [) l

  788. / ~0 Y6 i( D6 F# c  \4 ?, Y) s6 C0 @
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ~$ E7 C6 U* S  v- v: ~
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % ^$ B) n3 s7 X
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    % ^2 w* @3 r3 Y. ]
  792.                 {: h! ^& Y$ n0 M" \6 E1 K2 ^7 ~
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");7 W2 Q/ ~+ o* A" d% o( e2 s! w
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");3 V. O' a0 e, o& X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 \; e$ ]  x. @6 b" r+ d+ D
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. m) X: T% \! P; ]. s6 d- B  v
  797. $ Q; f; S5 ?; ^) v. k" K
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' l: ^( H/ w& E7 I1 g, H- k) x
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: `6 J: g8 T' @# A, @/ _+ ^5 y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ H# n) p6 {0 S
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - {% f8 T8 o6 S. }8 y/ R% P
  802.                 }; j7 J3 P7 i2 v
  803.                 dwStartUpSteps=5;
    ; s1 K/ q( E6 R/ t  j% S
  804.               }' H5 i8 ^( D( [+ x. o
  805.             }
    5 j0 ?) o. h0 F
  806.             else& P; b$ q- O. N8 C& N# u2 O
  807.             {
    ! i: |( Q3 b8 D0 B/ v- J5 ?& s. C$ F
  808.               unlink(".\\DownLoad\\checkversion.txt");
    1 V6 S; v  V4 `: D& r- E5 S
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");- ?: H2 E- ~* P! ?
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 ~. N& O7 B9 Q9 ^$ F+ W
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 U0 W" y* v0 D  @
  812. 8 f9 K9 J6 `6 B6 S8 }
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 N- T' A2 ]2 x; M9 Z
  814.               dwStartUpSteps=99;
    ; D6 w) G6 q9 `0 i
  815.               bFinishUpdated=TRUE;
    " K2 N1 r0 _6 F
  816.               bCanUpdate=TRUE;
    2 _8 T7 k6 L" R
  817.             }+ D+ j6 ^$ o0 W# h
  818.           }% N+ U% A. @+ n1 i, j% r/ \6 |; X
  819.           else  R, R6 s. ~' {9 x$ n5 \& g2 V
  820.           {
    8 u  }7 U+ l3 q: p
  821.             if(!Dn.Connected())  V# d9 \; u3 U' \  b" B+ E
  822.             {
    - U# j$ @, X! s
  823.               bFirstUpdate=TRUE;
    & e: r! t+ g( E1 R8 x& W
  824.               dwTotalFiles=1;
    ; ?$ Q0 {* N/ r8 {# ~
  825.               dwDownLoaded=0;  k3 L+ |) V2 D  c/ w4 J
  826.               bSilentStep=FALSE;
    ! U+ I5 o$ e; X4 @9 {3 V/ F
  827.               bCompressed=TRUE;# x0 }) ^- l' ]0 r9 }
  828.               strExtLocal=".\\DownLoad\";
    % m" E0 F0 W' A: O- ]3 L7 w; J
  829.               strFullName="update.txt";6 ]9 `2 T/ B2 }9 \
  830.               dwProgramState=AP_CONNECT;
    + e8 R) Q: `4 R# x7 W  y8 t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; e6 M" d8 L2 ~* E8 T% M# B6 q
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% ~% K/ o& M2 i+ M7 D3 O. L% \; H" p
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");; {5 \4 A7 j6 X0 X/ ~4 `
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) e& B# w/ U1 \$ U9 ~: P3 f
  835.               unlink(".\\DownLoad\\checkversion.txt");
    , g: A; c" o2 ?3 c) K- B' J
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 y* U+ W: l# O' w% b. O- c
  837.               {
    8 J- v2 [9 U# U# w6 S! g+ B" i7 ~3 g
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");  x: Y/ m5 [0 g9 G, y- j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 D$ ]9 F% J) v7 o
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");/ L% M: E9 Q0 n3 p4 f" I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( @' Y' E, `# R
  842.                 5 J- r7 P# [+ A5 [. F4 N& f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");4 P) d" e4 B: R8 R- S- M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    , g$ G3 \+ W1 k. s1 ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");3 M8 H: ?" s) {$ c- k* W+ b; i
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' ^: u  S$ k. n% [- ~( U, g
  847.               }3 p$ U& B  y9 f/ L9 w# F8 w+ v4 ?
  848.               dwStartUpSteps=5;
    * a) Y" R6 n/ b, _
  849.             }
      Y) W* C& r9 `1 y. D1 y+ i1 n
  850.           }5 f  J3 ^" f3 I: Z7 X
  851.         }8 a% e7 D5 y+ p, B0 m( d
  852.         else
    4 _# _4 Y! j  C( I8 q
  853.         {
    % }7 w. S# F8 t' X% X+ Z
  854.           dwStartUpSteps=3;
    0 n9 g4 R# a1 I( B) M; X; e" ~1 \  D
  855.         }2 m+ H% c. ]: U) R6 b0 a- p
  856.       }
    5 _, ^' R; ^: B4 i, k
  857.       break;. W& P' C( T* i/ t- J/ D9 A
  858.     case 5:
    : B' i; z. i, a+ C& ]5 K2 Z3 C9 ]
  859.       {
      q+ \' Y5 Q; K+ o
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ) m, V! O9 v$ r& p, H& e
  861.         {
    1 B5 m0 U2 d4 ~. P$ X$ `
  862.           int opt_overwrite=1;
    & M( X, F8 x3 t. \
  863.           int opt_do_extract_withoutpath=0;8 ?6 l( N4 l+ Q; c' c. t
  864.           unzFile uf=NULL;
    . {* e0 P. W; B/ x/ v

  865. ( x' q( y) g# L1 K5 D
  866.           uf=unzOpen("Wsa.zip");) u5 w4 i, Q- v: w
  867.           if(uf)
    9 n# h* O. g0 P- w# B) V
  868.           {9 ]8 A7 O; W* Q. q2 e5 a- @8 R
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - d6 @/ i! _* o. C
  870.             unzClose(uf);
    $ P- c* s( z* M% C& m5 s4 g4 _$ e
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    ) p4 o0 ^4 W# A4 q& p/ I& F8 x& X
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    & L7 `. V' W; _
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    % D; U) [- L& c% p( t: \9 A
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 Z( D% z! k" a- E" R4 E
  875.           }6 q( d8 T( y' L) H
  876.           DeleteFile("Wsa.zip" );* z" S3 h- G* m" s# R: K
  877.         }4 |6 b  M( U( J1 |# o6 R. C
  878. 6 g/ M5 U+ ^! ?
  879.         if(CheckLocalVersion())2 m1 I$ e$ H; T3 }# |; @4 P
  880.         {
    + T4 {9 W. m2 e. Z' {/ r
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    & `3 B5 [/ O$ G" R+ ?) I
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");0 l$ H9 ?/ ]) H8 Y% P& p7 v/ H
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");) t! Z4 T" P3 z% A7 M! V' v" B
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) }" z9 w* }* R7 V& H
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);0 g5 F: N9 Z8 b, @
  886.           dwStartUpSteps=99;) z5 s7 s+ {7 o9 w" t1 w! U
  887.         }* C7 c: j" R4 ~8 {$ \* T" C7 j. Q
  888.         else3 T9 g- n5 B0 p! Q7 P
  889.         {
    6 u7 L3 n+ {: t2 Z8 F
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 S8 |( T: U# V& M: z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ {1 K+ K8 p7 p% q! {
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    4 b% _3 W6 q- e0 n3 |9 O

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

) p1 U3 f7 H1 s  `
- Z. s1 k/ I, @8 y! O! M1 f

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

寂寞在_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客服返回頂部