CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式

' r6 e6 h* |2 z; W, h
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 v6 `  j+ h. o3 v$ N
  2. //+ q! x) P) Q, N- C6 l! d
  3. . S2 l8 u  ?( @2 U2 G
  4. #include "stdafx.h"; S8 d/ ?5 L) d' z" s; g- p
  5. $ v2 o& z; Y, ]0 @+ A1 y  C( B
  6. //#define UNICODE
    , Y- |$ ]8 f- q
  7. //#include <gdiplus.h>
    ( P2 E3 d1 G% n0 i
  8. //using namespace Gdiplus;# V) m- _( l1 j7 ~$ F* g

  9. $ m* U8 T5 _( |; V0 y
  10. #include "RevApp.h"
    9 Y7 x  k( w! ~
  11. #include "RevAppDlg.h"
    & u, D" M# k+ f, @
  12. ! R" k( q6 K# E, Q+ x* V. z3 U
  13. #pragma warning(disable:4786)
    + {: y, {' c" y; |! v8 k
  14. #include <map>. I% _% K1 X/ R' O! H
  15. #include <list>( M2 y2 u, z' v% Q1 R6 G! s" T
  16. #include <direct.h>+ o$ y! p2 l9 \

  17. * B. |5 P; N, j& D/ W7 V" s' q3 {
  18. #ifdef _DEBUG0 `9 c! n; L) i% _4 d4 W
  19. #define new DEBUG_NEW$ P" X& M( i) m
  20. #undef THIS_FILE' O) M( P) _3 _' D9 J6 d
  21. static char THIS_FILE[] = __FILE__;3 g! D9 T5 n# X2 Z8 h2 r
  22. #endif0 m) _: W: @/ U$ d7 C+ W) }5 `, ~
  23. #include "SkinResDef.h"" p  G& _. E7 U% _* r! @
  24. #include "ChangeBG.h": [: p2 {! o' K$ M1 Z' f  Z2 B; ~; }0 t
  25. #include "AFXINET.H"
    - z0 [) ?* [9 T( x+ ?# H
  26. # ]% S5 s  a8 ~
  27. #define TRADITIONAL_CHINESE 0
      a' }$ A7 w, F& ?4 P+ m7 W
  28. #define SIMPLIFY_CHINESE 1
    % t( W3 U9 G  Q2 h/ t
  29. #define ENGLISH 2
    & y( W: g2 {' n" s  w# B& l
  30. int m_iLanguage = ENGLISH;1 V+ N/ t4 v: l5 ]
  31. /////////////////////////////////////////////////////////////////////////////) e/ \- a0 f1 d0 }2 d. C9 z
  32. // CRevAppApp
    ( c. B, q0 g% |: X4 _) |

  33. 4 R  s; B! Z8 a9 f; Y% t: L+ e& S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    & h; N' U  h- t3 p
  35.         //{{AFX_MSG_MAP(CRevAppApp)7 R# ~" W& B+ x1 j8 F+ g
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    0 j3 D" R# q1 |
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ' ^9 o) s8 F# j  n3 l" W4 Q5 p) n" u
  38.         //}}AFX_MSG
    1 {: G- r6 W4 s/ @5 t) a/ a3 x
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' R; w  S3 f6 e5 _# k# s
  40. END_MESSAGE_MAP()' d% z, k% }) P4 G5 d4 }
  41. ) |% l- B8 a! B! B
  42. /////////////////////////////////////////////////////////////////////////////
    5 i, R0 b) U/ X+ e
  43. // CRevAppApp construction# J0 |8 b+ A7 }- E
  44. 3 p; B2 N7 @& ^, ^/ D
  45. CRevAppApp::CRevAppApp(), b  i0 X. X$ J3 K# c8 r
  46. {
    - w+ x) K" T: X2 b' M/ j4 \7 v# E
  47.         // TODO: add construction code here,
    0 M2 c9 w$ N7 _4 d% R8 @
  48.         // Place all significant initialization in InitInstance  h6 A; b  V, E$ |
  49.   bDisplayIsBig5=FALSE;1 m5 g3 Z% {; A  K8 b6 L
  50.   bRestartUpdater=FALSE;/ X1 L# M7 I4 Y5 b5 ^5 Z
  51.   bFinishUpdated=FALSE;
    7 A6 P- ?% n: d5 G! F# c
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ w' J5 H9 k7 F& C" o0 E
  53.   InitChangeDataBig52GBKS();" ^0 l* Z5 c; _) _; ~
  54.   InitChangeDataGBKS2Big5();" r6 K# _4 D. P/ N% `0 v# l
  55.         //
    1 r3 ^  Q4 b- e9 m
  56.         bClickRunExe = FALSE;3 h/ N/ l6 I6 j2 \4 f0 e7 s* n' B, C
  57.         //
    & w* p1 R4 E: O) ]* i: x3 X
  58. }; ^! Z8 j% l9 I* P/ {& t- X
  59. + z) C/ X; r. i/ `  v
  60. CRevAppApp::~CRevAppApp()
    + _- @% J' e' y' f
  61. {; G* H, f; A! S: w/ j" V
  62.         // TODO: add construction code here,
    * u' I8 p' I. U: D) e6 j8 I
  63.         // Place all significant initialization in InitInstance  N9 [8 k& ^* C: b
  64.   EndChangeData();0 |) |# K3 N/ Y
  65. }
    % S* y2 E8 |# ^. y# n5 e  A
  66. ! P2 c* t) V& F
  67. /////////////////////////////////////////////////////////////////////////////( @& \( `8 J3 R9 y
  68. // The one and only CRevAppApp object
    $ o8 U2 G! j. T5 o0 h

  69. 6 l9 h# k7 R! J. m
  70. CRevAppApp theApp;
    # h7 j+ ~- o1 w! U
  71. 7 K9 y) L1 r% f
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    , R! L0 E; [% @, j# \1 P  `
  73. {
    % _9 k) g$ w# s" ]3 e: T/ b
  74.   int iEOF=0;: m* b% a3 F5 `6 W' h
  75.   char szTempName[MAX_PATH];' H: t) z, J* ~; g: J2 H$ Y
  76.   *szFileName=0;
    ; M9 b+ T# \. H" K0 S3 ?" K
  77.   iEOF=fscanf(fp,"%s",szTempName);
    : \4 k7 `: z$ s4 b
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    5 l  f* F" O/ p! \/ A0 l! s5 G3 V) `5 K
  79.   {. J. k% e4 O2 T( t
  80.     strcpy(szFileName,&szTempName[1]);
    + Q8 K. ]/ O! Z5 b
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 o) I2 r0 ?$ x" \
  82.     {' |. Q. _4 a( x
  83.       iEOF=fscanf(fp,"%s",szTempName);
    + s$ y6 C; A" x! w% S4 r0 ~, ~
  84.       strcat(szFileName," ");$ ^% c7 R0 _; X1 d
  85.       strcat(szFileName,szTempName);
    5 g9 N# W6 ], E. R2 x
  86.     }( ~7 }* l+ a- T' x  ~; j
  87.     if(strlen(szFileName)>=1)9 ^; d8 a$ T7 m5 f+ A7 A0 h: ^! U# A
  88.     {
      r) P+ N% ^+ r
  89.       szFileName[strlen(szFileName)-1]=0;* U% R- w3 o. q
  90.     }
    . o; o& ~! B4 H" c# p, \+ t+ s
  91.   }, g' |4 F* W3 c0 N% l) {  u
  92.   return szFileName;
    3 y* T* _- ?9 H& d0 f7 z
  93. }+ m% u- X' Z3 ?
  94. % n. l7 Q  N5 i2 M$ C
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
      `: ], {& \% B& R
  96. {
    ' c8 r, Q4 p. n+ s. x
  97.   FILE *fp;
    ( T" F' d+ P- D# s0 H) i
  98.   char *key=NULL;9 i$ x5 i4 G+ O1 t5 n$ m# F8 c
  99.   char version[MAX_PATH];2 |' \1 T; B  [
  100.   LPUPDATEFILE file,olds;
    3 P; l! Z* X& R) w
  101.   std::map<CString,LPUPDATEFILE>::iterator p;  J3 W' ~9 Q1 Z8 v2 q1 _) ~
  102. 3 ^7 ^+ n; c) b/ E+ C7 N
  103.   UpdateList.clear();0 a3 k: H& f) A! t7 A
  104.   UpdateFile.clear();
    8 o9 D5 q( V* B: |3 X- @, \
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 n; v* M6 G% k% ^7 A9 f
  106.   if(!(fp=fopen(filename,"r"))) return false;$ b* H3 w# u) y3 |9 a
  107.   fscanf(fp,"%s",version);. O" R9 _2 W5 @1 ^
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" W. w9 Z, h# z- t; f
  109.   while(fscanf(fp,"%s",version)!=EOF)' A+ C; ?0 F+ ?0 V
  110.   {& q) y# e* h. A' K; P. w
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ; t- [4 A0 X5 Y$ K* s- J3 y
  112.     fscanf(fp,"%s",file->path);( u5 p. c# m( Y
  113.     ReadFileNames(fp,file->file);' H+ u# y% C, q" @
  114.     strcpy(file->full,".");
    ( j3 ^5 y1 [( K4 e. J- {' a. G
  115.     strcat(file->full,file->path);8 l( N2 d' K# d" l
  116.     strcat(file->full,file->file);  W) i$ e( L5 L: W! o7 `  n+ D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    3 [1 ~* R$ ?1 U3 `
  118.     {
    4 [7 b, g  h' c- f8 X4 F8 j: }/ \
  119.       file->vers=(float)atof(version);0 h/ N) J1 @( F: f3 [. }6 F
  120.       UpdateList.push_back(file->full);3 l9 [( ~- ]7 K' Q  A! ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; Z' h, T; b8 m8 K1 A' O  e6 H4 o
  122.     }( v0 T% U; g$ P: z& Y
  123.     else
      l4 R: [5 E; ]6 a! u: _9 z; `
  124.     {
    + x4 }5 D7 m( Z4 }6 e
  125.       olds=(*p).second;
    % I! m7 N  ~( W) \$ o; Q/ ^
  126.       if(olds->vers<(float)atof(version))! N! O/ ^" z. m3 _
  127.       {' r, x( q2 }+ _
  128.         olds->vers=(float)atof(version);3 S" }% f2 r% _& Y3 c. N* V; T6 K
  129.       }
    7 g( P) G# |! a2 S- m
  130.       free(file);
    1 |; k- Z2 M% h/ ~, I$ m
  131.     }
    & H- j* O) I1 l
  132.   }) i' _# ~9 e7 ?$ V3 y  `
  133.   fclose(fp);6 B9 m* ~0 z# i  J, [& F& `
  134.   return true;
    " z' S7 C  E7 }- S; r
  135. }' {# S. Q9 V/ H: ~/ N. B: t
  136. & A, v# l, a) E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' o# N2 I+ m6 d2 m" |
  138. {) y0 }+ Z: {2 Q5 q: w' e1 S
  139.   TCHAR  szFull[MAX_PATH];- v5 R0 C7 A) h- U, @8 k" i: W
  140.   TCHAR *token,*inter;' |2 w/ d- }  F6 t
  141.   *szPath=0;% Z( C8 g% A% ?- m
  142.   strcpy(szFull,szFullPath);$ d. o: ?/ e* N! i7 ?  Y
  143.   token=strtok(szFull,"\\/");) L+ J* b  ~6 Y4 J
  144.   inter=token;
    0 n6 L( f8 h0 ?% w2 Q( _
  145.   while(token=strtok(NULL,"\\/"))2 F7 q* b0 X) W
  146.   {7 `# u, U0 R6 v6 I7 Y! Q4 S6 p
  147.     strcat(szPath,inter);: c1 G; H- Q6 a3 }" e+ X
  148.     strcat(szPath,"\");
    ' i1 b* X- o1 ^& h$ G0 h
  149.     inter=token;) o. K0 Q+ R9 y0 o1 i3 o* U" ~0 w
  150.   }" C8 n5 c# ?$ [  T* [; N
  151.   return strlen(szPath);# W$ T* f5 e& Z$ ]) D' \
  152. }. P" y7 }: \3 N2 T8 v, ^
  153. * Q0 t0 l' T! h4 A- V" s) X2 t* j
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 n$ D* U5 E1 G, y7 n* b$ C# {
  155. {
    8 I, r9 W& r" u! {/ _" _! @, ?
  156.   DWORD attrib=GetFileAttributes(Target);# l. o1 ~: K4 h  N5 x' `( [' P
  157.   if(attrib!=-1)
    * ]* G1 E7 u7 N+ v
  158.   {
    : q% G. N3 y5 h7 D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % {! [7 H0 G. g& q
  160.     {4 R& e, i8 j& C% T" e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    # J" a" S, `( w
  162.       SetFileAttributes(Target,attrib);
    1 o0 k& y, a4 t/ g( H+ j5 E
  163.     }
      y  j7 h; Z" g0 v! O2 }& B
  164.   }
    - \' O* V* W" q7 _; q
  165.   CopyFile(Source,Target,Erase);
    " r* D1 U3 v, O+ N( H
  166. }
    5 H$ D( p$ ~- X& Q* z

  167. 4 \7 p  j. x6 B+ P. g' M: V+ i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)/ G+ `7 v; E6 Z: e# o
  169. {
    ( i3 V4 {2 X  e
  170.      FILE *fp;! [( Q: l3 b9 ]' {: A, l
  171.      char  szBuffer[8192];
    : O4 j1 u# h  M4 I5 z3 @# f* {
  172.   va_list  argptr;
    , M6 x. }& _" k

  173. ; K: s* F$ O. O
  174.         va_start(argptr,message);& U& K& {7 ~% K2 q$ u
  175.         vsprintf(szBuffer,message,argptr);, O' u( J* c) I+ a1 g$ K3 `/ S
  176.         va_end(argptr);
    9 \. V* }- V; b! W5 [4 N4 P7 z
  177.   fp=fopen(FileName,"a");  B" A# h! ^6 a0 H5 i
  178.   if(fp)
    $ k5 F& z* a$ ^( P7 n) ]2 G. ~& T7 K, R
  179.   {
    ! W' U. e3 X( r: T+ e- `3 i; n
  180.     fprintf(fp,szBuffer);
    / [4 }0 m) n7 x' b9 b/ f
  181.     fclose(fp);8 G, m' z5 |5 _% O* }' |4 N
  182.           _flushall();
    0 a1 l0 T9 n6 l1 D# E+ X6 y  T
  183.   }
    3 b( @& k  z0 t$ c% U5 V
  184. }% Z* |) j% x! u
  185. $ k* E8 s7 p# ~, n' p* o% [
  186. BOOL CRevAppApp::Fclearf(char *FileName); G, `* J: x! L/ s+ `0 j  ~
  187. {% s2 |( x, |; Y5 ^4 \2 z
  188.      FILE *fp;7 v+ p' W* M+ w- z. q( j. R# d  y
  189.     DWORD  attrib;
    " ^9 `: {8 U8 n7 ~, r' _2 L7 _* h
  190.   attrib=GetFileAttributes(FileName);
    1 g' H& l) X0 I) f  V
  191.   if(attrib!=-1)
    % L- w5 ]. u  b3 O" Y0 I  P
  192.   {
    ; G! ]  O7 Q( o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);5 N' a/ X5 d7 H: H& d0 n" c
  194.     if(!SetFileAttributes(FileName,attrib))5 i( A1 I8 y8 @7 Z% f+ U5 s: C
  195.     {
    9 J' C/ @. `* o9 U
  196.       return FALSE;! g& p' l% L; W3 X" z
  197.     }
    ! f- H% G6 B2 y, m, {
  198.   }. `9 c, m) _2 h5 m9 j
  199.   fp=fopen(FileName,"wb");
    ) w/ v  x3 I0 x7 s+ P' H' }
  200.   if(fp)
    * ^! y5 p; `  W/ k# |
  201.   {
    ; |8 u$ z2 C/ ^
  202.     fclose(fp);8 M* q8 ?. {! a' }5 A; d/ m2 s
  203.   }2 G+ m: }8 W, p8 j! ^* m, p
  204.   return TRUE;, q' l# @& ?( ]; v2 x4 p6 n
  205. }
      p, D( z; d/ |4 q; k* Z; O

  206. * a0 I! L, X, E# K1 A
  207. BOOL CRevAppApp::UpdateLocalVersion(void)  m1 {& d. ?7 s( Q% k7 T
  208. {
    ( \% m- ]8 ]; {- Z- d$ s
  209.   char filename[MAX_PATH];
    : |& q/ D8 z9 w6 ?3 c" T: ]
  210.   LPUPDATEFILE file,olds;' {* b4 D& V( i* ]$ |
  211.   std::map<int,CString>::iterator i;
    / t( _: Q! v7 O) N: H
  212.   std::map<CString,LPUPDATEFILE>::iterator p;; |" [5 f9 M$ w% U
  213.   std::list<CString>::iterator l;% B: O6 T, r  x4 l( u
  214. 2 M0 K2 R* J5 L& H5 L6 r
  215.   if(bFirstUpdate)5 w/ w/ @' b: ]- e* e) F4 w: X( |
  216.   {
    8 w: [, X! c6 l4 _* {- s4 `% T
  217.     dwCurrFile=0;
    . p3 _$ o7 ^& n5 ~! E, x+ M: K2 n
  218.     bFirstUpdate=FALSE;# B, H. a8 I" v; Z
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  J. V' y+ m9 ?, S' N
  220.     {3 i, e1 v# `8 h2 t7 ^; y- H' l& B
  221.       dwTotalFiles=UpdateLocal.size();
    6 G; U9 A& `1 Y2 h; v' W
  222.       dwDownLoaded=0;" P7 t' {/ p1 ?( W; @
  223.       bSilentStep=FALSE;
    " S. O3 g( O8 l! h2 g" _0 Y# y) e: o" L
  224.       bCompressed=TRUE;% U3 n* `& t/ e
  225.       strExtLocal.Empty();- R1 J  N: I- w3 o* z  L/ m
  226.       strFullName=(*i).second;
      e# s, d7 i9 A; g
  227.       dwProgramState=AP_CONNECT;/ @- b3 D8 c, E3 c& n& s7 A! O
  228.       return TRUE;
    + k/ Z& O; B0 K2 m
  229.     }
    9 G2 P2 h. r+ d( w
  230.   }
    8 x7 x( [, H9 b7 ^: q
  231.   else if(bRestartUpdater==FALSE)8 s* H" n1 Q' I/ g/ v9 G) q" {& U
  232.   {. p) R, G% J# M; D* A( C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- ]. \2 [4 v8 Y1 @
  234.     {
    2 I0 ]% F6 G3 h3 f8 l
  235.       file=(*p).second;
    7 R  m; {3 p. u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())% X! u& \8 y8 C3 Y1 s( O- e
  237.       {1 F( k2 q" ~1 H$ t. {% |6 u
  238.         olds=(*p).second;! s% F4 M8 Z% w* g
  239.         olds->vers=file->vers;
    2 |1 z. O# S% L4 G" A
  240.       }1 ?' P2 y! n# |
  241.       else
    - P! |. T6 d8 o
  242.       {% f, e7 P! M1 ~$ e, w
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( D8 _& K3 F8 i6 P$ z- e! o
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / g3 i1 ]. w* ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : d" Y# i/ O# O2 f8 X
  246.       }( c5 Y+ S5 ]6 g2 T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
      ]! W' v# \( H( {2 v. k
  248.       sprintf(filename,"(%s)",file->file);. i% G- G1 A  [9 I* u9 Q( C0 H
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    5 j: @7 \8 D, a% }
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    - e" R# n; ?+ Q( V$ |% p
  251.     }
    ) u& E+ o8 U. j/ I! l5 |
  252.     dwCurrFile++;
    8 E) c1 }  _. ^7 g* E0 W. i( E. G
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - |8 v! Y2 u0 V
  254.     {% H. R$ i& N$ L$ X# ]0 y2 l8 ?) [# _0 g
  255.       bSilentStep=FALSE;5 q- ]+ H- P: s
  256.       bCompressed=TRUE;
      F5 G; F; u6 c3 M
  257.       strExtLocal.Empty();
      H* {, H% n) j  B" |$ _! B
  258.       strFullName=(*i).second;
    ; ]8 v2 q. e# j( x
  259.       dwProgramState=AP_CONNECT;
    0 J4 u9 A% P+ U2 `1 c$ p
  260.       return TRUE;
    ; V( r5 e6 j0 M7 W1 F' B5 A
  261.     }- V# y) ~3 ^9 u8 G& E5 A- ?
  262.     if(!bRestartUpdater)
    ; i2 t" c; o! V1 f* \
  263.     {( Y" ~) x2 [5 Y9 y" [8 i5 ?5 M
  264.       int iCurrSize,iFileSize;
    ( J: Z2 r1 p' t* l
  265.       iCurrSize=0;
    # e# |3 W* w8 I& y
  266.       iFileSize=UpdateList2.size();
    " \4 W# L' e# t- D
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 w' E+ ]5 n2 N$ p4 m. U: U3 t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    - ^: A/ z$ t! G( B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    0 y% a2 k. e2 O& c2 @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ q* |- _+ B4 t. }6 d  f
  271.       Fclearf(".\\update.dat");
    9 U& }, S+ F: u( V
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ I* L) I9 d2 Q9 K8 a) |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( V% w: n/ P" k/ I8 E8 C/ B
  274.       {
    , G' j: r, C/ g8 I! ^4 k
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    7 n0 _9 I9 A9 d* Z8 \) n- `) z
  276.         {
    . z' p! E; L7 @" E. [8 t
  277.           file=(*p).second;0 T! P5 q2 S" y9 G- y
  278.           sprintf(filename,"(%s)",file->file);
    0 K) O9 S/ V/ L5 ?% }  a6 D3 \
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) v' D9 I3 O" V3 m9 q& u  E( x* |
  280.           iCurrSize++;8 b7 l2 m( c6 W
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . S, E" P2 T, ?+ K& {3 G
  282.         }- I' P- {3 u4 J5 H6 M
  283.       }) \/ p! m, b; ?% F, w2 x
  284.       unlink(".\\update.txt");
    & _) j8 n9 |7 a
  285.       unlink(".\\update.tmp");* D* B' O$ w8 H" T; \0 c" ]6 v
  286.       Fclearf(".\\checkversion.dat");3 d, r; Z! U) ]+ d& U0 ~+ i* k# X
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( @! a& q, S9 h3 {& _1 t% S6 u' _
  288.       if(UpdateLocal.size())* U% V! W  ~5 f- }3 e
  289.       {  ?1 r/ W" L2 n* }  `% B& g$ H4 d  n
  290.         UpdateLocal.clear();
    " B3 @' f5 l2 m1 [* T
  291.       }' F: y! z- K' j& L* C" k
  292.       if(UpdateFile3.size())5 Q/ B! R- c- M; Q5 d* `
  293.       {
    ! u* |4 g" L8 c: f0 g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 B+ X- k; k: K; M, A& J: ]
  295.         {
    2 M4 K* R3 j$ s: c: H; k' y
  296.           file=(*p).second;0 i' E0 }8 u, K9 v( D
  297.           free(file);" ^) E) c) x3 a
  298.         }7 C9 g. e0 v# U; u7 R" V, r
  299.         UpdateFile3.clear();; Z% @* l' `( ~7 [6 C, t' y
  300.         UpdateList3.clear();
    . @' U- z5 o# [# Y
  301.       }
    0 O2 s  E0 |4 M: m( I
  302.       if(UpdateFile2.size())
    4 g2 J' E0 Y1 c- F2 _% H0 S- w
  303.       {, E! @# o1 t( m7 ]' Q) N% |1 U
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      t# D; T4 @5 a/ j& i4 @
  305.         {
    , D; [: Q$ u2 Y, U
  306.           file=(*p).second;
    5 u. M2 [# L( b* H
  307.           free(file);) i$ s* \( \. ?6 ^0 d6 Z
  308.         }
    " D  v8 `& d3 }4 i6 _  s6 h- B
  309.         UpdateFile2.clear();
    : y) ^& B+ j7 |0 L" H% D% B* O/ m
  310.         UpdateList2.clear();
    + n4 Q4 ^: v- w9 G  s  T
  311.       }4 Y7 u; F, N. z9 e
  312.       if(UpdateFile1.size())
    + E, m- y/ w/ Y+ v
  313.       {# M% w/ D0 T" L9 O+ Z. L; R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 V9 L( e1 g9 R" d: B7 V9 M
  315.         {
    6 O$ x$ s' h. e+ {
  316.           file=(*p).second;9 u% r$ S6 k' N
  317.           free(file);
    0 w" K  b: ]0 j% y( ?
  318.         }2 Y, V+ p7 |5 ?' D
  319.         UpdateFile1.clear();, `8 d8 t- J( H5 q6 D( L; X4 D
  320.         UpdateList1.clear();
    0 h$ ]- Q3 g- |- P. F1 M" Q
  321.       }% I# J" L& a& n$ k: [
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));3 K4 i. A7 P' q- q, z5 a- P
  323.     }
      {: K0 Z; L. ?2 a$ v- C5 `
  324.   }/ R! v9 t. s+ c" Q9 S0 f
  325.   return FALSE;
    / F- r2 z/ ]* n. l+ {1 m/ q" R
  326. }
    8 ?1 N) X7 l8 u$ S! G6 |
  327. 7 T2 j; `; @. S7 y9 i( c
  328. void CRevAppApp::ClearAll(void)3 M) I; Q  J  G$ S  f
  329. {2 `$ D5 r% R) i4 n( }/ p
  330.   LPUPDATEFILE file;
    & a8 o* m% }" Z6 v
  331.   std::map<CString,LPUPDATEFILE>::iterator p;: Q: e- G' n4 ^& ]9 z" ]

  332. ! L4 z7 w& j( X% t6 i8 L
  333.   if(UpdateLocal.size())
    / X- E9 i3 W6 ~6 \( U
  334.   {8 `9 ~: n5 u2 z
  335.     UpdateLocal.clear();+ C5 n% Z+ C$ \. W- E" `9 J
  336.   }
    % u) E7 s3 M* ?) m0 t" y4 r
  337.   if(UpdateFile3.size())
    2 Y( A5 A$ i$ C4 ^! X' t
  338.   {7 J, I$ S, {/ E; ]2 W
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 z* }, y& Q' I0 L8 H/ V
  340.     {: L' `% K7 T& Q# p6 H
  341.       file=(*p).second;
    $ l6 O2 S& S$ k0 b3 A$ ~4 i5 a
  342.       free(file);4 P6 v- J0 q8 b$ I
  343.     }
    - H# N; {7 A0 ~0 I# l
  344.     UpdateFile3.clear();. M+ [: B3 h% ^. Q5 a
  345.     UpdateList3.clear();
    ) Q. o4 V) y  s& M- D
  346.   }
      E2 b# m; @: h$ A$ L8 v8 a
  347.   if(UpdateFile2.size())
    5 G6 N6 R6 {  \% h; e+ I! c
  348.   {# z: {1 Z; c/ h6 g* ?  r1 y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" c8 u1 [0 H' W1 f  a# z
  350.     {
    & c! u: ?2 o* I# E1 f" ^" E* V! L
  351.       file=(*p).second;
    # d* W3 W) z& g: L1 J  A
  352.       free(file);
    4 R! p; k2 l( K% i* [' l1 a$ Y
  353.     }
    & k( a$ l# d! B$ }
  354.     UpdateFile2.clear();
    & g+ l# ]; b# d( [
  355.     UpdateList2.clear();
    ! F# L1 A/ a4 n/ H% ?
  356.   }
    + D! _" O1 S0 R( E: S% \. D5 e
  357.   if(UpdateFile1.size())! d* E$ u" T1 D
  358.   {
    6 X3 J; }9 g; F7 `+ N  i( B
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 D5 }2 J  s+ C, x3 o5 {  u
  360.     {
    # `, i( R7 L2 b  \: y
  361.       file=(*p).second;2 ]0 P! K/ Q+ o3 f! r
  362.       free(file);% S0 g8 M# n% ^* O5 }; t1 i
  363.     }5 b3 A0 B4 l3 s
  364.     UpdateFile1.clear();
    8 y; j6 L3 ?# H! g: Y
  365.     UpdateList1.clear();& n, ]6 m. S. m  R( b( A
  366.   }
    + I2 W- L4 b: y  L
  367. }  ! O  [5 s' h8 m" W8 S) t" L/ Q
  368.   
    2 @5 L& a+ Q8 E( m: J: |
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 ^; O$ l! V% L
  370. {
    3 f6 z% A. B, C9 [& T
  371.   int c;. J! j+ [# g3 K. I* f
  372.   LPUPDATEFILE file1,file2;$ L( Y/ q3 M) y, G4 S3 I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;7 \  S+ P% Z6 h5 E
  374.   std::list<CString>::iterator l;
      Q' k# }0 b! Q: R8 N% W+ A6 z
  375. . ?3 j/ J7 L1 K% s; [4 r& K
  376.   UpdateLocal.clear();/ `7 S& ~& N" K% E6 O
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 n: G$ X; L, h9 u2 c
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ g, `# O: l9 q4 R* T! y3 ?
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* H/ W# D$ r4 l! P8 G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 D: m- ?: [) E9 {, @; A3 c
  381.   if(UpdateFile3.size())  A" T* [0 o3 o- x% Q
  382.   {1 W2 `+ [' r3 C; A. X' k8 `" ^: G
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " @  J$ c: b3 V  t9 M+ K
  384.     {/ [2 G. B, n: y3 P! C% U
  385.       file2=(LPUPDATEFILE)(*i).second;
    & c) r+ t3 o# D5 P1 i7 t
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 k$ ?% a- n/ U8 o5 A
  387.       {
    ( D% i( {. n0 ?0 y3 U
  388.         file1=(LPUPDATEFILE)(*p).second;
    0 @$ V' D7 z7 f% w" _; X) j# @
  389.         file1->vers=file2->vers;
    ! W" x' G2 o/ H# b: q! [
  390.       }3 h/ o) Z% z; h, r* L5 A9 a
  391.       else
    ) Y) w4 P" T9 a# h, G6 {
  392.       {' J3 W# R. F5 f3 _, ^
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( [. U/ |; w! c
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));" s# K! s! ~% g0 }: ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    7 O/ w) a' F$ }, C
  396.       }
    7 x( x8 V8 j; T: p2 m
  397.     }6 C1 |2 |9 b1 J$ P
  398.   }
    ! r: H  e! n  @/ c, T7 Y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)2 |3 N3 H. ?' @: _# l
  400.   {
    % U' T' |! {/ J7 o! S+ k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / U$ M, \: |0 q2 p
  402.     {
    7 V% o' y2 v; C7 u8 P
  403.       file2=(LPUPDATEFILE)(*i).second;; X2 Y; u/ M. v1 C
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()): q$ I3 M. h5 e* M9 R* H6 C
  405.       {# W8 N: {, M+ r  p6 p' n- w2 w
  406.         file1=(LPUPDATEFILE)(*p).second;
    : \8 ~) q; D* d- c0 d% A
  407.         if(file1->vers!=file2->vers)$ F2 d! y% X, Q/ v
  408.         {
    0 c+ ]" |  G8 K# W  l. i3 T/ y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 e6 k8 Z+ G" F+ K; h  O$ C/ ~
  410.           c++;
    + E9 z. }! X; {4 B7 l
  411.         }. E( z* U2 C( {7 X& B
  412.       }
    + k" l) U* a; Q6 K
  413.       else
    2 J8 p) r( u' s/ d- [" l1 G
  414.       {* i4 |! o( r+ Y5 \3 d! h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & X, _! ~7 n' ?- H' x, ^
  416.         c++;
    $ p7 ?' h' t2 e: J, `4 y. {
  417.       }; z6 L3 }/ f3 r. J9 h. k
  418.     }
    5 X, Y: L# f2 P& p# a( {
  419.   }
    ' i2 v+ {- p. I4 F5 t
  420.   unlink(".\\DownLoad\\update.txt");
    , [( ]8 p& |/ ]/ i0 Z. e& U4 e; |2 N) h
  421.   if(UpdateLocal.size()) return TRUE;4 Y  e3 D. C$ }' A: r% F
  422.   else                   return FALSE;, Z: z  V* G, f5 _8 E( `' V$ s
  423. }
    ; T; e, T6 X+ q; i2 ]* C

  424. 2 M% L$ u- K2 ]
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    & k- c4 w* p5 _: w( w
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"' }: \) @! u  k6 b
  427. $ |6 C+ A  }$ j* x
  428. ; j  u1 _  l* {, O: u3 N

  429. $ O! j4 A. E' Q- z8 D. P7 ^! ^
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 F+ s. h1 t1 b4 ~
  431. {  g# D2 K7 G; Z  Y% |/ B
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    0 q% W; |- {. k) w( @" e0 O
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 U+ H! F0 G. ^+ s! L/ D4 a% E8 x
  434.   {8 ]; }: D, X: W& f1 U; E% z6 v
  435.     char szLanguage[50];
      p/ r! j2 F1 m( ~1 L
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; l; s+ E0 |) i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;% r: X' M# f( X) _6 B1 y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 n2 K; G9 |4 x" @, f" k# S$ `
  439.     else                                   m_iLanguage=ENGLISH;
    6 K  a$ m2 g( t3 _4 h
  440.     char szRegister[100];
    6 P0 n' a5 T$ @2 d8 L% _6 K# q8 D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) H  H; D9 Y& G" B& h' @
  442.     strRegsName=szRegister;
    , T3 T) d& V4 P2 Z
  443.     char szPatchURL[100];6 o1 s6 @; T3 \% G$ O' M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");  I: A) G) t* e, W1 y* \- V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 x6 q9 p7 H0 L+ C4 b
  446.   }6 t7 Q* Y- A2 b4 ?( w
  447.   else
    # m* R& T; `/ c) ^7 t# I
  448.   {9 _) @) _1 m( v6 J; e
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 B4 P1 a; |" y3 L4 f7 [! j5 {
  450.     strRegsName=DEFAULT_REG_URL;
    ; |6 z- H# v+ q
  451.   }  b/ {+ [; }. H7 o- r; O
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 @' h0 p4 d5 r% P+ C1 g) z' l
  453.   {8 d6 s2 n2 L) E
  454.     char szIP[50];
    1 ^; @4 L+ B% P+ H
  455.     char szDIR[300];$ g7 ^7 Y, ]5 E1 |; N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    - |! u' n8 C2 E1 v
  457.     {& I1 _/ z" _6 y+ L- C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & p! R* u) A$ y% C
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");' I7 f& @/ s/ Z+ C4 N$ N6 H
  460.       strHostName=szIP;, N! K7 b8 R6 f4 V
  461.       strHostPath.Format("/%s",szDIR);+ L3 H0 H0 Y# `5 \( ^2 l" ^' B% ^
  462.     }8 f8 r. |: }# E+ q" {$ o
  463.     else
    * J2 w7 N6 {3 A$ w, Z( G( X
  464.     {
    , {8 u! R' }5 y& ?& e
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): b" n+ [7 E1 [/ f* q- \. x
  466.       {
    - R1 p$ p0 f$ l1 l; J/ k0 b3 ]+ p
  467.         char szLanguage[50];5 @; g% S" X/ j# H! Q! L
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 H4 j& o7 N8 C& s7 Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 w3 I6 v* ~7 n2 B8 s
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! k2 E  {8 r* ?) ]7 Y1 d9 p+ R
  471.         else                                   m_iLanguage=ENGLISH;
    ) e1 s- j* s7 S3 R+ M- J: P/ h
  472.         char szRegister[100];! D, x" @8 H) q) D& k
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : l. [2 f2 K" y# j( y; S
  474.         strRegsName=szRegister;
    0 [' |( l7 k+ w5 P$ k; m
  475.         char szPatchURL[100];
    * d* @7 t4 [2 m
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    6 S$ [6 p- R5 @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 S4 S7 H: W9 E
  478.       }
    . U# `% N7 N) z( _; k% ^
  479.       else, S+ j' g* ~; E) I$ N, w! d; b
  480.       {* a: J! t- a3 p0 Z. S8 D, D9 J7 x
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    9 ~% K5 ~+ q: [- j# U" [' p6 ~
  482.         strRegsName=DEFAULT_REG_URL;9 n' Y' p% X# n% }' o' R
  483.       }2 X/ Z$ r2 X; t+ Q
  484.     }1 U# `8 H8 z  o5 M6 y% x
  485.   }! z/ N8 c; f& ~* F
  486.   return true;: W+ @8 m. C2 j+ d4 m
  487. }
    ! G0 w+ E. W' h7 A$ f" @

  488. + v0 k3 Z2 Q' U, P% f
  489. #include ".\ZLib\unzip.h") u) b+ H7 J$ l4 H
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' r, G, a4 o% M0 C
  491. /////////////////////////////////////////////////////////////////////////////- [$ x* E, i# z
  492. // CRevAppApp initialization5 d3 k) [( U5 P% l2 Z' N$ n

  493. 9 r/ Y" D+ W& v4 m% s! k. ~
  494. BOOL CRevAppApp::InitInstance()6 M' ]4 `. T' ]+ k
  495. {) @9 _4 b/ L" e1 W* w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ( h8 y! L2 d8 g/ g; @4 G
  497.   ]: z1 F+ p% O% B$ B0 z; V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    - I9 R* P6 g( X$ p- n' u6 Y
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))0 _, j8 C6 Q9 o* m' D: z  [
  500.   {
    3 p" m( U* j( \( F- j2 `
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");0 f6 e& y8 w6 x+ ^! p
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ' ]8 D2 P( ?. f, p, R2 v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))): k1 E% ]5 v, K# w& @+ k
  504.     {& i4 B( g3 {' x. I) C9 B! H) ?& T4 `
  505.       strcpy(szPath,szPathTarget);; b  M+ ]9 z1 c+ A* `% ^
  506.       SetCurrentDirectory(szPath);
    $ E5 W% E% K" g( ^9 M
  507.     }
    # r- N# o6 u# x0 p. K- E* F+ Q
  508.   }/ Y  g! P6 ]. K6 `1 ^6 z
  509. #ifdef _DEBUG
    4 |7 c1 U3 z8 ^1 S' h+ R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# j  N7 ~( M* }4 U$ x7 Y6 o  ^, u
  511. #else9 @4 W/ R$ v! P+ _# p0 U
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 s% ]1 k/ A" }& x# T1 {/ h6 Q
  513. #endif
    ) |) Z7 x: R" w% w( [) v
  514.   {; m( H# Q# L& f6 P3 T# l
  515.     char tempFileName[MAX_PATH];) I' j$ P: B, M( T
  516.     strcpy(tempFileName,szPathSource);
    + t) ?# F, k6 _8 J
  517.     tempFileName[strlen(szPathSource)-12]=0;7 `5 f' e8 `5 Z3 m' s! U8 D2 L6 C
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ S0 D, s* o/ g, s) d( J1 m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- N" v" S! T$ t5 N' z, Z! K
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);2 D) j0 r1 `7 y9 M: v
  521.     return TRUE;
    1 i+ x$ ]; z+ H4 p
  522.   }7 M4 r- _# g! q! ?
  523.   // Nuke 0118: Delete run.exe
    . y3 S; R0 L8 W. T$ p
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    * M) _5 Q: O) D2 s0 K( L8 N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    / L* S1 g* A( L8 |$ q: Z
  526.   if(!ReadCfgFile("Config.ini"))
    ' }% t1 u3 F2 n) q# |6 K
  527.   {* ^; l# j3 G! h/ F
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);! _! Y( L9 L( V& v& S0 i3 U
  529.     return TRUE;9 J6 r$ ~$ l1 R7 r& K" O5 ^
  530.   }
    : W# c8 t+ A% ^- B: C4 K
  531.   HANDLE mutex;
    , T. b7 F# F8 ^/ B- h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ j) w- J8 E9 f
  533.   {) O1 b; w3 a$ ~9 b, M
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) z! a: r0 S* j5 D% k
  535.     {) J2 Y# t0 T& ~/ m! F
  536.       CloseHandle(mutex);1 A# K, _0 R0 Y
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);2 V9 {! q! o) H/ u8 E. q
  538.       return TRUE;8 V: x/ q6 D" t/ m" j1 J
  539.     }, Q6 E0 |( }$ F' p' {- j7 H
  540.   }  6 ]4 o! \) H. ^  W/ w3 I6 }! I
  541.   CloseHandle(mutex);
    - n" f4 J9 t# \

  542. 8 e2 a8 D: c! A8 z9 h
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    6 ?/ s) `; m! c) o. X' \

  544. , [: k2 U, Q: c0 X; Y$ l' J5 `
  545.         AfxEnableControlContainer();- g" K' [  f8 L

  546. ) D4 W0 I3 s( Q$ L1 ^
  547.   bCanUpdate=FALSE;
    0 W2 n2 [! a! U4 q: Q0 Z: U) R/ @
  548.   dwStartUpSteps=1;
    ) W2 D9 c( `- H0 ]1 _! j$ e
  549.   dwProgramState=AP_NOTHING;
    * G  P* _( [0 j* \4 v
  550. / t" o$ R. \9 n' t) t' f1 m  i5 ?
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);4 Q  h/ C% A' G3 ]. K6 N

  552. , ^+ h6 e2 r' Z/ ?
  553.         // Standard initialization0 u( v7 `' Z$ ?6 J3 G
  554.         // If you are not using these features and wish to reduce the size
    * a4 G" t: S9 R$ o' m9 ~" W
  555.         //  of your final executable, you should remove from the following
    ! \! B+ l. F' U4 X( `! I( Q
  556.         //  the specific initialization routines you do not need.$ c* G- T( O; R  V+ @) b5 A

  557. , t2 U4 J8 E( E
  558. #ifdef _AFXDLL
      {( |  M% a9 ]
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL: i; V$ L0 x# s* L
  560. #else
    " v8 t! K$ Y4 C* F& n! \
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * \, c# o" Y' ^. P" ~
  562. #endif4 b4 j; V% N. B) g. ?8 j

  563. ! p4 \5 m% }" o" J- u5 x6 y) h
  564.   dlg=new CRevAppDlg;
    ( J  I( f' T0 ^3 X9 z
  565.   dlg->Create(IDD_REVAPP_DIALOG);  E# Y/ o5 X# D! D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% P. E: I" q7 _$ X
  567.   m_pMainWnd=dlg;5 Z0 K& ]$ M2 Q: \& v$ ~
  568. - }; \" K) S' P1 q4 ^# Q4 D
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);3 A( e% U) R$ S
  570. 4 G, P5 Y7 a$ a' C
  571. //  GdiplusStartupInput gdiplusStartupInput;1 [2 p- A5 _6 A) `' W8 b! R
  572. //  ULONG_PTR gdiplusToken;
    . J) G6 H2 P! Z6 D+ ^7 V+ C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ' N2 r- p0 Z8 |8 S
  574. $ [7 I4 Q2 p$ w9 h* _
  575. //        CRevAppDlg dlg;! z0 {1 _4 J8 t  r  ^* z$ j
  576. //        int nResponse = dlg.DoModal();/ m* k* D" w3 O
  577. //        if (nResponse == IDOK)
    2 P7 |! _% J8 @5 [% P9 ?
  578. //        {% `# H  m' H: X2 C
  579. //                // TODO: Place code here to handle when the dialog is
    + M, d) u% ?5 p5 |- h
  580. //                //  dismissed with OK
    & z( K2 q; Q+ M
  581. //        }+ @8 a, F4 l/ ~
  582. //        else if (nResponse == IDCANCEL)
    ; |% z) N; v. U; z3 i3 R+ q) G
  583. //        {& R6 m& o/ L% O  W0 {
  584. //                // TODO: Place code here to handle when the dialog is- `' X0 i; C1 m& C' y/ x
  585. //                //  dismissed with Cancel
    , }* \9 r2 S$ _
  586. //        }3 m7 b( I' D% |7 ~

  587.   ~; T, X+ W9 E( f
  588.         // Since the dialog has been closed, return FALSE so that we exit the9 o. S! Q7 \9 z2 V# g( [" z6 ~% n
  589.         //  application, rather than start the application's message pump.
    ) n3 w8 z' B" _- j2 f# D9 k
  590.         return TRUE;
    1 [5 t1 u. f# d3 o2 U
  591. }% n# G( H' U! v/ N) u- v

  592. + V" Z1 y: P9 `) g+ P, G
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    : Z* q6 _: m: x( o
  594. {) B( D; ?4 U4 K5 T
  595.   int i;+ {" u% J: J4 f4 u; G$ ~; ?
  596.   char *szRet;
    1 q+ }6 k: m: {7 M% x

  597. * Y4 R7 Y6 k. H7 z* [2 C# R3 S8 u
  598.   if(pSource) { itoken=0; sztoken=pSource; }) k8 t, u( \# M
  599.   if(sztoken)& B3 A$ D2 A4 v
  600.   {$ u0 \: K! |- c( p; `
  601.     szRet=&sztoken[itoken];) \4 }0 ^: Y0 {4 Y. b
  602.     while(sztoken[itoken])
    2 {/ A! b% P' h- y! }# @
  603.     {' g" }+ z1 I7 }, v) M) x5 k( z% F
  604.       for(i=0;i<(int)strlen(token);i++)& a8 j) l1 h. t2 U
  605.       {
    , n4 Z% Q% B( i7 B- |- N
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])+ `" |8 @7 i- c& u# k& I
  607.         {
    % x% V: t" w2 L4 R
  608.           sztoken[itoken++]=0;8 O# g7 f: }0 H) c2 l! Z
  609.           sztoken[itoken++]=0;
    / G6 \9 J8 h- \) I
  610.           return szRet;2 c& Q7 ?( O: g% `, F9 J2 T5 N$ B0 l
  611.         }, V# b2 b8 j; e' ^& o" |3 M
  612.       }5 h* ~. z4 ~  Q& X3 e
  613.       itoken++;
    9 _/ ~: ?) K) o0 o+ }
  614.     }3 U) m. F9 h" U# u- X- j. T
  615.   }
    0 u9 x2 ?, G3 B4 i, h' m) s
  616.   return NULL;1 p: z' Q8 ^$ j  A' }
  617. }2 p. |, h1 N$ ~6 W

  618. 7 R# r9 C. S1 S; W
  619. void ProcessProc(long Total,long Current)
    0 m. p4 k; y, u) ]; S: X
  620. {
    . N. l! B! v! I
  621.         MSG msg;
    & ?1 _$ l* {+ s( ]& N
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);9 A; I2 Z$ K/ ~6 z' _- w
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));/ E1 b! U: G% k
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))! S8 e+ w4 G! {9 T9 z, N6 F! P
  625.         {
    * w$ e( l4 M; R, Y, l7 G
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ' C9 [  O' i& x* w% S+ @& _. n( |
  627.                 {
    + `) N* [6 ?, Y3 b. \
  628.                         return;
    & Y" h% v+ S& I' Y1 X* D3 U# y
  629.                 }
    ' L+ N* a) T0 z, }6 J8 l
  630.                 TranslateMessage(&msg);: m  F/ V( G- E# U
  631.                 DispatchMessage(&msg);7 K& q! x0 |; l9 `8 h: o
  632.         }        - @( {" b% Z+ `& J2 f$ Y, R+ L3 U; e
  633. }
    3 |' h, O) |7 j2 K
  634. : [4 h$ \* c4 A! a2 f) @3 B* f; d
  635. BOOL bFirstChar=TRUE;
    + r3 e$ J- u* s: t$ Z2 q) e$ x

  636. 9 N0 K4 K& w1 ~* V# n
  637. BOOL CRevAppApp::OnIdle(LONG lCount): i' F# w$ N" p
  638. {
    4 c5 ?1 i8 C0 g% E) O
  639.         // TODO: Add your specialized code here and/or call the base class1 K, r7 M# H/ }: u+ O. L
  640.   switch(dwProgramState)- _* c* s8 j( m/ l* F' w* {0 y
  641.   {/ A, A% \' g7 J) j4 u3 R
  642.   case AP_NOTHING:
    / N1 @; D2 Z- [1 S, y8 E- L& N
  643.     switch(dwStartUpSteps): H% u( m" n4 r3 l0 [% Q2 U7 A
  644.     {
    , o: g; P% |3 g- i  ^/ c
  645.     case 1:& P( s6 e, ?; m, ]! ?' S$ }
  646.       {4 L: M" S: U  M: C* y* b+ z* U
  647.         int i;5 U; Y' _& B7 J1 E
  648.         CDC *pCDC=dlg->GetDC();
    0 N0 t1 G  z. Z' D$ A: i
  649.         HDC hdcwnd=pCDC->m_hDC;
    9 g, ?; w  z. I% v
  650. //        Graphics graphics(hdcwnd);- S: R6 e4 Z4 H4 i
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    # Y/ W; O7 V2 w, p
  652. //        INT iWidth=bitmap.GetWidth();
    5 w8 A5 s. X  f, h8 S1 m8 Q  ^9 F
  653. //        INT iHeight=bitmap.GetHeight();2 B1 [, P+ [# q7 X5 Y0 Y5 u
  654. //        Color color,colorTemp;& I/ m' _9 O$ ~; C2 b% f
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) ?+ c, }; g4 ~! [8 M( F
  656. //        {
    $ j) B4 g5 `. t( P; v
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)0 H; Q" M- N7 c0 v8 C2 ~! w
  658. //          {
    " o. k& \9 r, t
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ) l2 Z5 T8 C0 I% k/ W
  660. //            colorTemp.SetValue(color.MakeARGB(
    , I6 u! d" s9 V( K6 M8 I
  661. //              (BYTE)(255*iColumn/iWidth),) U7 P5 @- F; z+ }* I
  662. //              color.GetRed(),: o- Q/ P9 z- @# W: x0 n; J9 |
  663. //              color.GetGreen(),
    ) e  v/ s4 `0 Q$ K
  664. //              color.GetBlue()));3 J- x# J7 q6 a9 l3 Y  l
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ) n$ D: I  A, K. y$ e* h, T
  666. //          }% s' l9 R+ ~  t% Y: y; r- |) }3 R
  667. //        }
    5 ?" z9 C1 j1 O, [  H
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 J4 n9 O5 z3 S
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : l* o1 I( G6 {, }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");( [( c& u$ b: w# e3 F  S' P6 ]* q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + l1 }# J, f& O6 m2 D
  672.         for(i=0;i<240;i+=8)9 A; S" N0 s$ j: e$ \
  673.         {& E% p% a+ d& o! M
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, f& ~6 a' P$ H5 [( h7 a
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * }$ C- s# \: `" x: z4 ]; G$ ?' ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" D. M) w6 R* x+ ?2 Q" I/ U$ M+ f
  677.           Sleep(33);
    : h$ E& F5 b4 _' X2 f/ T6 m
  678.         }
    1 e+ u7 a6 t& @2 b' b, d
  679.         Sleep(1000);1 C3 i$ l" B0 H, i8 N  d+ u# g
  680.         for(i=240;i>0;i-=8)
    # v  i& b! B# |$ W
  681.         {3 k7 W, y. v) r
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);6 x3 n5 V# U8 t4 C" V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 s/ c' o' M. n1 F. }
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ O0 k! H9 p, R' R$ C
  685.           Sleep(33);% B* w, X9 j8 X/ y) n; p( |
  686.         }
    / z4 G# b- k* W
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) F" a' U8 ]% |- i3 i5 s, N
  688.         dlg->ReleaseDC(pCDC);0 v  B0 h6 M. Y4 O! N! z# C( R6 y
  689.         DeleteDC(hdctar);
    8 z& j) J1 n% j* q# `
  690.         DeleteDC(hdcsrc);( {% h) B0 T/ `1 |
  691.         DeleteDC(hdcorg);
    7 l' F: D: r# L. z7 R( y- v6 l' I
  692.       }/ M! w5 ]! @% I: \: r" h
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);! y# ^' `$ G0 s7 a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + k3 o' G" j* z% M. c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: p% G1 N9 V' M( I! M# M
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");; i" j. e, ?2 C# q- z4 X
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 B  h% f0 H5 u( ~$ `0 N8 y- C6 n
  698.       if(!Dn.Connected())
    ( @  J' l9 H  G4 G+ k. K5 S% D2 Q4 g
  699.       {# |5 t8 N' s0 l$ T& [+ |# b' n: ?! `
  700.         dwTotalFiles=1;5 Y! N/ c8 d, A
  701.         dwDownLoaded=0;
    * v# e  l+ g4 t9 M0 N; S- A* A- w8 M4 O. v
  702.         bSilentStep=TRUE;* L  O& w. N7 q% ^+ f
  703.         bCompressed=FALSE;- I) V3 O. M9 W' H
  704.         strExtLocal.Empty();
    : }0 W& `4 D/ ^( m7 l; t- r$ s
  705.         strFullName="readme.txt";8 B5 b+ C( g7 q1 }
  706.         dwProgramState=AP_CONNECT;
    ) P% M( M1 J( ~# U7 u) r3 f; P
  707.       }
    ! K4 Y* a0 Z' C! v0 M$ I; L
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& c% T$ C6 w) N0 k" x* {
  709.       dwStartUpSteps=2;
    5 X" v) C/ y4 p9 H8 f9 d
  710.       break;
    7 ?% j* |$ b7 r: d" l# \2 [: \
  711.     case 2:
    . P! o* h/ j) E% M* z) O- @
  712.       {
    4 H& r1 e! u( [! v5 ]+ l1 G% a5 D
  713.         int iEOF;
    2 g, D' q  B: E5 @2 X. a2 W- d4 ]1 P3 Q) o
  714.         FILE *fp;5 x/ G- ?  j, s+ t/ C
  715.         char szString[512];
    6 G$ s8 |) \$ S# D; ^$ c
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    9 R* o! X8 K7 G7 R  L' e
  717.         if(fp)
    8 h( t+ ?& w4 ~1 z3 ?# o
  718.         {
    % q9 c( ^; B2 t4 W$ _! _( g% |' X1 Z! f3 I
  719.           do
    : u& q0 j" h# `. ^1 g
  720.           {
    8 G' G9 O/ y" {, N& {
  721.             iEOF=fscanf(fp,"%s",szString);& f9 I4 ^4 A6 D* j) N
  722.             if(strlen(szString))
    4 L2 _5 y4 a3 A# a% {: Y! x
  723.             {, P9 ^  L9 A( \/ v+ w# k
  724.               if(bFirstChar)
    9 v9 `' B  O& J% I4 U( R
  725.               {
    ) }" t2 R( R) |+ c
  726.                 bFirstChar=FALSE;; M: b1 ~8 c9 j1 O# n8 d
  727.                 bConnectIsBig5=FALSE;. Y% M% {. B+ I+ N7 T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;) [' c! }7 Q$ A) O  V- X; K% N" X
  729.               }: }0 [5 h! n' _. H8 p, B; Y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& y) @8 D( j" k: Z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    - n: s7 R" A, b8 M, n
  732.               dlg->m_ListText.AddString(szString);
    , b) S5 b! v* k" L. O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      k, |- s( n* K9 R6 [9 k/ B; {
  734.               *szString=0;+ V; v. D" I0 I6 V( A
  735.             }
    . C1 T& e' k" d9 i; ?9 Y
  736.           } while(iEOF!=EOF);
    * k9 S/ f) T+ N& q- {  \4 j9 v8 W7 c" W
  737.           fclose(fp);( K4 y' r% X  j6 t9 ~" ~& P
  738.           unlink(".\\DownLoad\\readme.txt");6 S# ~4 @; s3 i- Q& i0 ]
  739.           dwStartUpSteps=3;' _" C& R' T+ {% v
  740.         }
    ; c5 ]6 E& |- g0 ~  j9 e
  741.       }
    $ M7 k$ [: [3 R  J7 n$ b# G/ G
  742.       break;
    : @" C* s- {0 _' ~
  743.     case 3:
    * B/ q7 R8 z9 z
  744.       if(!Dn.Connected())
    2 O  {4 L1 m5 `  k9 b9 @: p+ b
  745.       {
    % k% }$ p: L1 T  f* Y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    $ d5 E& k0 J6 z+ a& \3 m+ F
  747.         dwTotalFiles=1;
    & E. b' t- V1 `, a* ~
  748.         dwDownLoaded=0;1 Q% s% b# K" U# Q$ {
  749.         bSilentStep=TRUE;
    / c% O! j, b- t+ x+ J- {
  750.         bCompressed=FALSE;
    , ]2 u8 F7 C) `) o( i2 X
  751.         strExtLocal.Empty();
    2 M. T) I0 c; ?/ K
  752.         strFullName="checkversion.txt";4 \: o/ R2 N; Z) D* Y
  753.         dwProgramState=AP_CONNECT;+ c7 ~# G4 v' Q/ f
  754.       }: [! N. [( C8 u) T8 u$ L; r
  755.       dwStartUpSteps=4;& ?- D% o) _2 [
  756.       break;5 V1 a8 @: t' y* L8 n* ?; t$ d2 z3 z
  757.     case 4:* T. t! Z$ \1 c
  758.       {
    $ G& e/ Z5 I( Z/ k: n; p5 t
  759.         FILE *fp;
    0 @9 A1 s: N8 _3 v7 D: w8 a
  760.         char szString1[128];
    9 O4 [& ^2 _! T/ W! \; Z+ K6 A
  761.         char szString2[128];: {+ a) |0 i3 F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 T6 N& u: F  X7 l7 Y
  763.         if(fp)% L, W6 z" J0 {5 t, O
  764.         {' J- f" b$ I/ x4 j
  765.           fscanf(fp,"%s",szString1);
    $ V* H1 N" r3 O9 `% U" p5 Q
  766.           fclose(fp);
    6 Z$ N8 H; _5 w; O
  767.           fCheckVersion=atof(szString1);: O" Q' b; i" C8 X( c: ^8 T, J
  768.           fp=fopen(".\\checkversion.dat","r");
    % y" \( h4 a! r) k: I
  769.           if(fp)0 ^9 H& F$ A% D
  770.           {1 z3 Z, ]1 m) {, j' @
  771.             fscanf(fp,"%s",szString2);" g7 s! Y& \4 F  @; H
  772.             fclose(fp);
    ' \; ?9 `9 p- }
  773.             if(atof(szString1)!=atof(szString2))
    * }2 g" A% h. `$ ?) m8 _7 o. f" [
  774.             {$ j4 x7 b4 f9 k* E  G
  775.               if(!Dn.Connected()), j: A# W/ |6 b  J) E$ f6 _
  776.               {
    $ u" V- n. x5 ]; i/ ~# K
  777.                 bFirstUpdate=TRUE;
    . {; w6 T: N3 s% Z/ {) Y
  778.                 dwTotalFiles=1;" p* o8 r) u: w5 d% K  R1 [
  779.                 dwDownLoaded=0;
    . ~/ U5 C' |0 A
  780.                 bSilentStep=FALSE;
    6 }( K/ b1 F7 x! D: P! U
  781.                 bCompressed=TRUE;
    ) M" U; ?2 ^8 [; s( n
  782.                 strExtLocal=".\\DownLoad\";
    / u/ G. u( u: S, L. D$ _4 C# S
  783.                 strFullName="update.txt";# U. e; M$ n: ?5 b
  784.                 dwProgramState=AP_CONNECT;. e4 J, Q# t1 Y5 l$ h
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    + @- U0 S% e  ?& y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. u* j% A; C- Y* u! Q6 i3 i* L
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' |# G: U5 O/ j

  788. & n2 ]% u" z# c% [0 b) t+ O' J
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 u  o# ?* Q/ ^5 A2 R3 Q3 X2 W
  790.                 unlink(".\\DownLoad\\checkversion.txt");) V& ?# m' ?3 G: R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 @5 z/ [8 Z3 f& i% X
  792.                 {
    4 x. O( b. @/ `: ~
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " n* F( \  r, ^2 |; a& k
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    4 ]. k+ h4 [# k. P, x8 a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 l, Y7 ?7 E& d; |, x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) F9 y2 O1 s: ]" ^. c% G2 r! z! h
  797. 7 `$ P+ r2 F# A+ @1 c
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");7 V: A9 l" ^/ w6 V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# Q4 ]( p1 H& w2 i$ H5 n9 ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    " k5 u" {2 N- V& K" q6 X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 o% p' b; c, s/ ~! ~9 v7 s% @8 d
  802.                 }, f8 k: A6 d, x! n1 J
  803.                 dwStartUpSteps=5;; P2 t0 s( E5 h
  804.               }
      L: g+ H* c0 [! J" X9 L0 U2 W( ~
  805.             }. V' p6 c9 P8 d1 a) D4 Y
  806.             else
    $ d# j! R# `4 w9 ?" n% Q: r
  807.             {
    7 c; i5 e( i& C% H" x: v
  808.               unlink(".\\DownLoad\\checkversion.txt");. q( f! S1 E% Q" t- ~+ r
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ d9 B2 w, t# i! J+ ~4 b
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    - S$ e1 y2 E. b* G# N: e! @
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , X0 s, @7 \% M- m& a

  812. & W' U8 s3 N7 w5 D- v8 U
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, x. M  s0 g* O# m/ m
  814.               dwStartUpSteps=99;
    - m/ R, G1 o/ c. L0 @
  815.               bFinishUpdated=TRUE;
    6 [; e' N: U9 ?/ A4 }
  816.               bCanUpdate=TRUE;
    ! h6 Y, [3 l! j+ q) l7 i; r
  817.             }
    4 C' z1 V) w; z
  818.           }8 _3 z' L6 b5 A6 `$ g6 Q% u
  819.           else
    7 H+ l# z1 g* T8 O
  820.           {
    $ z* z9 Y; D7 t9 K
  821.             if(!Dn.Connected())
    5 Y# Y6 D3 J0 k' O( ~7 {
  822.             {
    . \; d+ Q% a% u" z! f  V7 `
  823.               bFirstUpdate=TRUE;
    5 ?" G# x9 n4 b) N9 c) L4 K8 a" P
  824.               dwTotalFiles=1;5 {1 l3 ?7 e2 o1 r5 S  h
  825.               dwDownLoaded=0;
    0 i2 X) o) {6 R
  826.               bSilentStep=FALSE;. q6 P; V8 m  c
  827.               bCompressed=TRUE;
    9 z+ Y$ l0 o, }& y9 E- n
  828.               strExtLocal=".\\DownLoad\";
    : P. w: Z; q! r1 [; G2 x
  829.               strFullName="update.txt";
    , C- f' I3 Y5 n- ], b
  830.               dwProgramState=AP_CONNECT;/ C. V% O5 L0 R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 o) t- q1 h* d) r* [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");& |& j! |/ i* l3 B9 }
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& D5 M# m- L3 @- W( F# X/ ^% N
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% C! q5 b5 \2 i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    " _) V4 T& r  A" {# o/ a8 }+ V
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- S' ~/ n2 `/ i0 b" @+ E
  837.               {( p* \9 V) T- }4 c! ~
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    * u: c% l) g. Y* m( z; [) ^+ Q7 m  m# c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    & l4 Y" G0 d  w% g& N
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");9 t) {+ |1 O8 o6 U9 d. p/ ?
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 b+ O; V# {5 j& K. l
  842.                 7 i/ B" w1 w' T$ H& ]  N
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 c- L  e5 |  W; O
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");' _/ [4 _" E! d" j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");; F: @# |  l$ L6 b, ]7 |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - ?5 j, v1 {8 m5 Y9 V
  847.               }
    / Y  P! o! e4 o& _( j: D
  848.               dwStartUpSteps=5;$ }. Z! ?* c, I7 o( T
  849.             }- M2 D: f# Z5 @4 Z
  850.           }" M" v; W, E4 h# e6 |# a
  851.         }4 R' m- ]5 M1 P2 y
  852.         else! ^7 t/ h0 [! v8 C
  853.         {3 N: `6 ]4 Q4 L' g
  854.           dwStartUpSteps=3;' H) h: S& c9 r! ?% u8 I
  855.         }7 S5 \! j0 @; N
  856.       }
    2 n( ]4 Z* C1 p& V2 p# y
  857.       break;( }3 [* i: s3 B4 R" V
  858.     case 5:, F9 R9 K0 @: ~1 |9 ]/ F
  859.       {
    5 T# B; }! N: b* W$ q' T
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)" f. A! m' N+ Y$ e; R$ e2 j
  861.         {
      h& M* F% x5 {/ }& c
  862.           int opt_overwrite=1;
    " O  o8 S4 I0 {1 X0 ]
  863.           int opt_do_extract_withoutpath=0;
    , [( m8 L' K( ^% {+ I* d
  864.           unzFile uf=NULL;" J' a  q/ Z# L% a9 X

  865. + Z' w8 R; X- ?2 ~1 v! Q
  866.           uf=unzOpen("Wsa.zip");
    5 o3 l: a3 K3 ]& O; d
  867.           if(uf)8 o, x$ Y2 ?. K$ x: K" q
  868.           {
    ) `/ V# j1 {6 I
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - z. x( O% d! q6 F0 S
  870.             unzClose(uf);: [% M8 a8 }3 S& A- k% z% m  A
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");- E* ~; Y: p0 g# X- ^0 r
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    2 U2 {9 E  E+ z- @
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");9 a: P& F) V4 b0 f7 j2 e1 I
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! r/ E  f, e$ M
  875.           }
    . P( }# R' x  `/ m: I, t7 d
  876.           DeleteFile("Wsa.zip" );3 h- I) S8 e( R  y
  877.         }7 {/ l" s$ H- [6 L4 u: {) j  `
  878. 1 o; B% h( j9 r" z0 q
  879.         if(CheckLocalVersion())7 O6 n1 Y3 Q; T2 o; U( G
  880.         {! ?6 R9 {  T! j2 s, O' F  G2 B
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    6 A7 f' D; v% u; n* Y1 k' [
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");5 D+ s0 f; _: v0 I7 F+ W* Y, }/ h
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");2 D3 H1 H1 @2 c  c4 ]9 @( |
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, {% H0 u  j3 x- q# |
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 e1 O# h& X5 }+ R8 p
  886.           dwStartUpSteps=99;6 k) r5 s0 l2 X8 I1 R
  887.         }# l# K/ V" g0 x/ r  d2 l* \: @
  888.         else  h8 Z. }+ k# h. R
  889.         {. H) w! j* R% w
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& k* H! a" s! k' U, {
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 g2 n- Q; y. ^0 o0 P) m8 J8 B
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ' x6 p' L: w  K

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

評分

參與人數 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客服返回頂部