CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
, k: Q6 w+ u' s
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ M5 V1 a& {4 E4 w9 b0 A
  2. //
    1 O- X! v% G( m

  3. : u- k% @0 `  j1 `0 u7 o! K
  4. #include "stdafx.h"
    0 H- c2 z: o8 [% i' }# C% _
  5. / K% K8 ]* g$ w& ?. f% W
  6. //#define UNICODE  X) ?- _# O' v* e- _& ^' X
  7. //#include <gdiplus.h>( V- p  U2 W9 @- e
  8. //using namespace Gdiplus;
    , z0 D# X; H( R1 k; |& `

  9. 2 }7 t$ O5 E$ e9 |  ^' n
  10. #include "RevApp.h". _% t4 Q! B* R+ q. Q' Z+ J' k& G
  11. #include "RevAppDlg.h"
    9 x- k  W; g% F  F2 |2 T6 _
  12. ; F4 g- u0 Z% f3 H9 o, v
  13. #pragma warning(disable:4786). W. g+ v% Z. o; M1 \2 G
  14. #include <map>; ~, C5 p; U  ^, O
  15. #include <list>
    % r" w4 e; R$ O8 J) `
  16. #include <direct.h>; E" R% x' N+ b: E' j

  17. 2 g7 M9 _  X9 j1 y
  18. #ifdef _DEBUG
    & C8 K7 y5 t. E! L& {+ ?
  19. #define new DEBUG_NEW
    4 V4 X" y0 W( t9 C
  20. #undef THIS_FILE
    % j- _! z2 ~: f. N2 q
  21. static char THIS_FILE[] = __FILE__;
    - p: u( t' ~1 \6 P: n  y" w6 r' m# H
  22. #endif
    % }) _- L/ V1 Y6 {) T
  23. #include "SkinResDef.h"2 B: ~" @8 U1 Z& M% N
  24. #include "ChangeBG.h"
    + @; s+ V! Y/ G# W* o0 L
  25. #include "AFXINET.H"
    * N6 E! L' Y* h+ b, L
  26. " w6 R1 H4 S- ]; B
  27. #define TRADITIONAL_CHINESE 0
    9 S7 |- E% D5 g$ X% d
  28. #define SIMPLIFY_CHINESE 1
    3 D8 ~- ]6 L0 Z# y# x) u; j
  29. #define ENGLISH 2% z; ?' N: O: H9 Y
  30. int m_iLanguage = ENGLISH;
      p; r  m5 i% F
  31. /////////////////////////////////////////////////////////////////////////////( j, {+ g! b" ?* O; N# E3 Y( y
  32. // CRevAppApp
    * t, J! h! a$ S- p9 o
  33. " \- V& I5 g; K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    - ^4 i! Z1 [* i2 ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) P+ L0 H5 j- c+ t* S7 t0 Z* N' R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.! R6 _( I' |# s
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , j+ h/ r, t! W% X2 s
  38.         //}}AFX_MSG
    " C+ x0 X% u2 r% b- W: K
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / h3 l6 v) O* T0 U" o
  40. END_MESSAGE_MAP()
    1 F* b8 p  ~7 u; p0 N2 B

  41. 5 x2 p' o! U0 T' s# J: M/ @
  42. /////////////////////////////////////////////////////////////////////////////3 G# O3 U" _; D! c7 h5 {+ `: D
  43. // CRevAppApp construction
    ' z# @' L3 [! N6 P: m
  44. 4 y6 q6 H* |. _& r4 l. J2 E
  45. CRevAppApp::CRevAppApp()
    - k6 R7 {! ~! }; h
  46. {
    3 ]: c0 D0 r$ N6 e, v9 X1 M
  47.         // TODO: add construction code here,
    $ g, ^8 K! o1 ~0 M, \- U4 U
  48.         // Place all significant initialization in InitInstance
    * r  D+ W2 g- X1 C' j5 R. |1 `
  49.   bDisplayIsBig5=FALSE;1 P+ V( `. X+ H1 C( m8 j
  50.   bRestartUpdater=FALSE;& r2 A6 j. ]+ [. \8 C% J% S
  51.   bFinishUpdated=FALSE;. H, R- H! T1 I( T3 A) u% S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 H! P1 t7 g& b  X; `0 W! p% p6 o! O
  53.   InitChangeDataBig52GBKS();7 L/ P" W( l, t2 Y# c$ l3 O3 |
  54.   InitChangeDataGBKS2Big5();
    . J4 G8 w, ~* P8 P/ E; X; G; y
  55.         //
    " Q/ k! d5 D' ^* B4 m3 V( v
  56.         bClickRunExe = FALSE;! R2 Q% u' r' G! j. Z& \2 F
  57.         //
    1 X$ |, d) W( @( C3 K. x( L% k: t% ^
  58. }0 \& \7 S' S9 e8 |4 s& ~8 O
  59. 5 D( e' n! a% e/ e) e$ H& J
  60. CRevAppApp::~CRevAppApp()
    + V+ r! |+ e9 i0 ^4 o* P, V
  61. {
    9 @6 }2 a" Y* Q* r) K+ G( z, n
  62.         // TODO: add construction code here,
    3 d5 h" {6 C: e4 V
  63.         // Place all significant initialization in InitInstance
    ; t) j. ?+ J) c
  64.   EndChangeData();' K, H$ c) c; x+ M7 N
  65. }/ _- O) S  A& a0 Y5 e: G; K
  66. 7 d" {3 A+ @* `
  67. /////////////////////////////////////////////////////////////////////////////
    7 b% ]( _! |! P9 ?$ X& W1 i7 P
  68. // The one and only CRevAppApp object
    * w5 K9 ]; b4 A

  69.   }7 l0 F9 f1 J& b* }1 s
  70. CRevAppApp theApp;/ e8 ]5 i9 c+ N( N. O- b

  71. 9 W- b  [; z. {' l' N; w% U9 N
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 ]5 S) u" B% U# T
  73. {( L6 W: e+ P$ n3 x
  74.   int iEOF=0;) q# d6 A& x  S! Z
  75.   char szTempName[MAX_PATH];
    " i, N6 v' H/ D% {0 c& X  I
  76.   *szFileName=0;
    & l+ Y# v5 n# |* \. [1 n( s
  77.   iEOF=fscanf(fp,"%s",szTempName);) ?1 ~- h8 A8 g9 M; a; v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    3 b5 D8 n" e6 J
  79.   {3 W" s" |0 l: p1 L, m7 C8 u
  80.     strcpy(szFileName,&szTempName[1]);1 m* Z4 k% E. L, L) w8 k
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF): Y* B: I8 U* c/ o
  82.     {
    7 @% q/ y$ n8 H3 _
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " ?6 h  c8 K" W4 W
  84.       strcat(szFileName," ");
    " x) g! M4 m& d# r
  85.       strcat(szFileName,szTempName);
    : \$ G' h+ J2 V
  86.     }  N& [$ b5 d/ n1 G0 B  D
  87.     if(strlen(szFileName)>=1)
    7 Y/ `5 W9 Y+ u: K8 U4 G/ k$ W
  88.     {' H. D: l/ P0 n! q& \4 f8 S/ V
  89.       szFileName[strlen(szFileName)-1]=0;
    ; p, F0 D8 T5 w3 X+ a! ~" W6 ~& L$ D
  90.     }
    7 O' n* S, G9 Z/ U1 C
  91.   }
    7 V7 k2 i1 ?7 E% F" b
  92.   return szFileName;
    : p5 H) L5 c! y1 i/ C* `
  93. }
    & G; ^- p, {  m- V8 H! _) B

  94. 4 z# t6 L- `/ A
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)% s3 V- P; E1 r' ~. U
  96. {) `7 `- b; e  G2 F5 l
  97.   FILE *fp;; {. }" L! P+ P4 x6 [  |% Z
  98.   char *key=NULL;$ V% s- d" P$ ?; n
  99.   char version[MAX_PATH];! m* C! T: ?7 O6 m
  100.   LPUPDATEFILE file,olds;
    , S8 M3 N7 \) X5 f- L* J
  101.   std::map<CString,LPUPDATEFILE>::iterator p;1 _# I5 k5 b& b, }( U- D) Y
  102. ' C8 H0 |+ ?3 w! Z
  103.   UpdateList.clear();
    4 r/ R( _% Y) G8 |, K
  104.   UpdateFile.clear();. Q' [3 a9 ?$ t1 o' x; P
  105.   if(GetFileAttributes(filename)==-1) return false;* t% u' H1 |5 s- ]" V& }3 e2 t
  106.   if(!(fp=fopen(filename,"r"))) return false;
    1 l7 Z' q1 J! S. x1 n3 K; ]7 S
  107.   fscanf(fp,"%s",version);
    7 U! u. J4 E2 z" S0 c, b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    1 V3 \  Z: t6 ]( }& S' N5 n5 Y
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 w1 k: Y9 I. {6 Y+ F, ~; `
  110.   {" ?; ^! o( v7 P# n6 R  ]8 M# g
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: [9 v$ [- S: `5 u- V  K
  112.     fscanf(fp,"%s",file->path);
    & l. h9 C# W3 p9 l" X
  113.     ReadFileNames(fp,file->file);. h$ C4 `( _$ s
  114.     strcpy(file->full,".");' x- K0 E$ x' ^9 C5 a/ i
  115.     strcat(file->full,file->path);
    0 W  R% b2 d8 n( K
  116.     strcat(file->full,file->file);
    % r  S% i4 L! |% Y8 f1 o
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 i7 d0 S- M; P. ?& {$ ?9 D
  118.     {
    $ g/ c5 r0 g; j& |) H
  119.       file->vers=(float)atof(version);
    1 i# u: O1 d# H, c& |" C$ h) x
  120.       UpdateList.push_back(file->full);
    : }" F, s8 ~/ {
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; W4 x4 V3 j- ]" z: `/ Y' w' Z/ M
  122.     }8 ~* H% ~" \  e( i; {- C
  123.     else! s, U$ m( d+ X  ^( Q6 d: O
  124.     {
    . M3 G, k! S) q( m" X) o; g: I
  125.       olds=(*p).second;
    0 M# ?8 X) l# P# l9 L
  126.       if(olds->vers<(float)atof(version)): o1 `: x" I0 i0 M
  127.       {! K7 d9 I$ ]1 ~$ s) Y
  128.         olds->vers=(float)atof(version);9 d$ z, w% n6 F' h5 c/ L# T
  129.       }, I4 E+ U- h8 E$ n. I
  130.       free(file);. B- r( I5 I+ n
  131.     }
    1 P/ ~' n8 y8 D) g
  132.   }
    $ L! C. f) H# W- c# @
  133.   fclose(fp);3 S- ]$ s' F* L. d) G& G% g5 P. X
  134.   return true;
    * w1 w% H* \! n0 \" T- W
  135. }9 p( ?! E3 f! ^7 m# \" C% \
  136. 7 Y' o( F. ^1 h3 e. Z' M# @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    6 {' i) p5 p( z4 m2 u' G
  138. {
    + a- k) s6 u3 e! l* E
  139.   TCHAR  szFull[MAX_PATH];- A6 ~# w) q# _# b" m
  140.   TCHAR *token,*inter;
    * B: _7 [7 d/ }
  141.   *szPath=0;* Y" T; M1 h0 Z, H1 p
  142.   strcpy(szFull,szFullPath);8 r3 a& P' g5 N7 e
  143.   token=strtok(szFull,"\\/");
      w, a- O( l' s) \# w
  144.   inter=token;/ e4 I$ g$ m+ a! Z3 {3 h* \: X7 G
  145.   while(token=strtok(NULL,"\\/"))3 r9 W$ {0 U/ U( H. f
  146.   {' h5 P7 B. v0 |7 {: I- F
  147.     strcat(szPath,inter);. e! T1 `& G5 U2 n# K
  148.     strcat(szPath,"\");
    % P' R5 O2 D& d' }% j
  149.     inter=token;
    4 D# Y0 y+ T3 X5 s* ?' O' x& B5 w
  150.   }
    5 e9 s1 \5 ?9 k8 M- \/ P2 r6 c1 H' O
  151.   return strlen(szPath);
      w, w+ m' U0 n2 u* M% p* g
  152. }; a0 J6 L' w9 Y2 \3 D' @0 ?
  153. # }/ o3 f& Y1 P; Y5 _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)2 I. N3 v* B4 a  m9 G5 V* i1 |2 }/ t
  155. {, u, @' n: s  \; }( v
  156.   DWORD attrib=GetFileAttributes(Target);
      p1 A% }- ~& X) _9 o. |3 B$ `
  157.   if(attrib!=-1)6 @; ]9 C- B& c1 a/ o, W
  158.   {
    : c* U$ N" U/ R: w8 Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    1 ?/ q' v1 k3 o5 ^/ I$ R3 N
  160.     {0 F* `& s. u( e/ ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ I5 ^9 i& h3 P/ [8 K4 l' u
  162.       SetFileAttributes(Target,attrib);
    5 J- Q! x" Z. }2 B& W5 W1 {
  163.     }
    , U  _( i6 R: H$ J5 h
  164.   }7 _4 P: O3 \8 \# E. u
  165.   CopyFile(Source,Target,Erase);6 d: X; h  B5 u- ~% v, ]9 Y8 `
  166. }6 L* F5 y( O6 T/ n/ b6 c6 m

  167. : Y. _- Z, |; j" b
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)6 g6 D3 E) z- t# k% G
  169. {
    . [( t& G# {% C
  170.      FILE *fp;, \, w6 `, G; Q$ s  {$ }3 N
  171.      char  szBuffer[8192];0 `$ h3 L7 g" M5 W
  172.   va_list  argptr;/ n- s% Q8 r) c, J+ u8 o0 ?

  173. . D4 L2 x7 F8 L# }: `7 u2 N
  174.         va_start(argptr,message);! A) a: ?; U) L
  175.         vsprintf(szBuffer,message,argptr);
    2 E* i. [. u$ l0 ~, D9 L
  176.         va_end(argptr);
    - P9 U+ H; V  ?. o
  177.   fp=fopen(FileName,"a");. b$ ]+ a5 o+ a( I
  178.   if(fp)
    : ?* L+ S. J' L, L3 ]
  179.   {
    ; Q/ \& @( A0 k2 i5 C3 o
  180.     fprintf(fp,szBuffer);
    1 h* N& G( b$ m/ ~; Y
  181.     fclose(fp);2 x* h# T& H5 B% K/ i/ Y
  182.           _flushall();% T* A- h# b+ u' k" M
  183.   }  V6 e. [1 C$ q* @& u" ~
  184. }
    5 i! N% H' m( E

  185. ) a2 N( r- l: j6 P1 P# ^! D2 s
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 r* o" P0 j, Z+ U  m) T& M$ e( _
  187. {. z& v/ d0 i+ r- F; K
  188.      FILE *fp;
    $ F3 l6 s& F2 j  k4 B' ?
  189.     DWORD  attrib;
    , |: ~5 ^' _+ X+ J6 v
  190.   attrib=GetFileAttributes(FileName);
    1 J7 B7 \3 q- {1 r
  191.   if(attrib!=-1): t1 {- W4 q* P- Y
  192.   {5 y: @; U/ l8 i
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 v) s8 b- l3 ~
  194.     if(!SetFileAttributes(FileName,attrib))+ E* n& R" W" s  L
  195.     {4 h. w% X- @; L: q
  196.       return FALSE;& U; j3 S9 V; Z5 J
  197.     }! U6 k3 u4 J2 l8 I+ M- _5 I
  198.   }
    ( N* @9 R+ J' J# a5 B& R, b3 o
  199.   fp=fopen(FileName,"wb");
    / P! J# F& q+ \6 @. m" W
  200.   if(fp)& e- B- x3 c. r9 u4 k- W- [4 W
  201.   {
    ! B% e& V: W* N. p5 j
  202.     fclose(fp);
    & ^: }  G$ {0 E
  203.   }0 ]1 U/ \% D8 B) N" p
  204.   return TRUE;9 i' M* t+ i0 b" I/ y! @! N
  205. }
    9 @# u! }1 q7 Y

  206.   v  [$ F  W& r- _2 r3 \" ?
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    6 a* @; @5 A8 k1 R. M. g
  208. {5 O5 c+ _+ W* \' G+ N2 ?' d
  209.   char filename[MAX_PATH];
    3 T. K1 z9 E1 J9 [, U$ b$ Y
  210.   LPUPDATEFILE file,olds;- ~  b6 a" ?* r
  211.   std::map<int,CString>::iterator i;2 ^& \2 e' i8 C# e5 E  Z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    / Z4 [) b1 ?# t& E! u. C
  213.   std::list<CString>::iterator l;8 W! c' u6 Q  j" S" H# e4 ]. n
  214. ! J) a& H5 ~( d# a; B; z  u8 g! S
  215.   if(bFirstUpdate): \* c! j1 _' p) j# W* y+ y: h+ }" C
  216.   {
    + K! J' W( i& i2 m4 P# U
  217.     dwCurrFile=0;, i5 M4 Q; [& }
  218.     bFirstUpdate=FALSE;1 S# {0 V" _! D
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % L' ?: A0 o% G: T9 Z
  220.     {9 \5 q& k/ E+ d* M
  221.       dwTotalFiles=UpdateLocal.size();
    # y5 ^2 V4 b. d+ _# E3 [0 T* \
  222.       dwDownLoaded=0;, A' e% k, @" z7 j/ u& H4 @1 z
  223.       bSilentStep=FALSE;
    3 y& G8 H" y' H! I, g
  224.       bCompressed=TRUE;/ m3 I3 V! \3 H2 \; |* v' Y. z' G( P
  225.       strExtLocal.Empty();% c- q$ W6 w/ t+ X
  226.       strFullName=(*i).second;
    & D0 E' d0 U7 f5 t& r. o
  227.       dwProgramState=AP_CONNECT;
    9 ?# f; U# X+ Y! P
  228.       return TRUE;2 U0 l( m& p  q4 D  \4 j
  229.     }
    # ?2 B5 f  Y% p4 u
  230.   }
    - ?" E: w/ g, J5 O! A! |2 G7 m
  231.   else if(bRestartUpdater==FALSE)# q8 h+ \; U+ @( h
  232.   {/ u2 ]0 }( s: D9 \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; C" _. B. U! a) x, J( Z
  234.     {
    ! q5 L# I0 t2 W0 S. C) |2 p
  235.       file=(*p).second;
    1 {/ v9 q' ?5 V0 o8 H
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ l, C9 g4 b" t" u8 q& Q
  237.       {
    ) T- Q* A) z" Y7 O( b
  238.         olds=(*p).second;
    * V5 D1 p$ V1 v4 Y7 j5 @- r8 E- U7 \
  239.         olds->vers=file->vers;
    : l9 g# m) n7 J5 D/ B7 E
  240.       }
    0 q8 g! i8 ]1 I% q& r. r8 e( q, I
  241.       else
    : k9 l4 r- R# [, S) y; X0 f
  242.       {
    * l' |1 q2 w* R
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) N* G) ?3 g! v* l
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    1 c; Z0 m, A& D% ?( M2 d+ h
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) R8 [: j4 F. B
  246.       }- e# C3 v3 W- d3 M
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");& {& X+ a5 D8 G
  248.       sprintf(filename,"(%s)",file->file);
    2 I  j, L' Y8 ], {
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; S5 O% M( R/ G! L+ l6 W
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 V5 C9 |: O" K4 \6 b
  251.     }% @; u( M- g$ S7 D7 ^* c
  252.     dwCurrFile++;
    0 r' @& j- x) k1 y) P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 I5 R  U3 B/ v3 H. Y  b& D
  254.     {' q; d! U% e# b5 w6 e
  255.       bSilentStep=FALSE;
    ; g1 |. m1 q0 _' Y
  256.       bCompressed=TRUE;$ Q6 b. H7 O" x' _" {" @7 `
  257.       strExtLocal.Empty();3 [6 g# f$ O; T& M( y2 \
  258.       strFullName=(*i).second;( Z1 q8 O- i9 b+ R& Q& n9 v6 Q
  259.       dwProgramState=AP_CONNECT;3 |2 `, F7 V0 @
  260.       return TRUE;
    4 f$ E9 y" I1 C: A
  261.     }
    5 i& c; H0 y% g
  262.     if(!bRestartUpdater)$ f3 F* S9 P$ v; H1 p# n
  263.     {
    * |$ R+ _; f7 u) f( A- [
  264.       int iCurrSize,iFileSize;
    # V& J1 J) {1 M" {3 C
  265.       iCurrSize=0;' M' s/ z2 d; f% k+ e- E/ J8 S
  266.       iFileSize=UpdateList2.size();
    $ ]) {; O1 X" @2 S. K8 E. @
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      q" J* `2 {) h5 U4 H5 t0 v
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");+ c' t0 e% c$ q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    2 f' _: Q' z" }# E9 z! X
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # _6 `+ y! K4 Z
  271.       Fclearf(".\\update.dat");
    6 d( l4 k# U8 j$ [6 J' A) @$ `
  272.       Fprintf(".\\update.dat","Bloodyf\n");* K0 P  G4 O, r0 k# [5 v
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)! L6 k/ w/ {  c0 E/ y, _, R/ b) @$ w
  274.       {
    ' H+ g" G/ `# H3 O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 X' v! |. J. J" B% k. b5 F/ z
  276.         {+ o) s5 N. |2 G0 A' u# _
  277.           file=(*p).second;
    5 R; g3 r+ _" H( v
  278.           sprintf(filename,"(%s)",file->file);
    , W6 y" Y4 x* Q7 M1 g5 ]
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);' {4 J( l- }8 t- A
  280.           iCurrSize++;9 N4 u$ ~- R* @& E. i* H- D
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 y; M5 S& a! d/ \
  282.         }
    ) n7 f' _. N* s0 u/ f$ i
  283.       }
    : M$ I6 i2 e: q: ~- F3 j2 W
  284.       unlink(".\\update.txt");
    7 Y8 x/ j7 S# f( h
  285.       unlink(".\\update.tmp");
    5 q, Q) w+ W4 z( f' W- i
  286.       Fclearf(".\\checkversion.dat");
    , O/ O1 d  R( X- K* ^9 T) |
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
      s" c4 K3 X0 x2 P/ j
  288.       if(UpdateLocal.size())
    : l' K1 H  B/ K# @" y5 O# j$ o
  289.       {
    $ K# w3 T2 J& D3 ]6 b
  290.         UpdateLocal.clear();$ T* |) S: w7 m) @
  291.       }
    ) Y7 \0 N7 _2 A
  292.       if(UpdateFile3.size())
    1 P( S3 s9 U& p0 y# _& _5 D
  293.       {
    8 p9 G8 o4 q# J1 S
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)  Q6 C  z" u! T6 Z+ i! D- C+ k0 P
  295.         {
    " j0 V7 ^. X4 R' q2 l, @& D& @
  296.           file=(*p).second;
    6 M% y. S  J( Y% ~+ m
  297.           free(file);& _1 i1 M: x2 x( W( d4 G# Q, p! J
  298.         }
    + V0 @% Z4 D, N% F. o. _. ^
  299.         UpdateFile3.clear();! y( K' W5 \# m( [
  300.         UpdateList3.clear();
    ' X/ [* V1 P% z$ T& d' q
  301.       }
    * G. F8 i4 ]. g5 l! y: q/ L
  302.       if(UpdateFile2.size())
    + ?; d1 e; x% E0 N: J; \/ w/ R
  303.       {( g+ ~  H7 u4 W8 y4 p+ g! D
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' J0 n" k+ g# j
  305.         {  _9 H5 r  q* k) ?5 p! Y
  306.           file=(*p).second;% y, H' b1 S' I: C: Y- K
  307.           free(file);6 |9 N+ g: T4 s2 O9 w
  308.         }. P3 m7 l# E0 q0 i( ]
  309.         UpdateFile2.clear();
    4 ]! Q( M) q& o: [
  310.         UpdateList2.clear();
    - W( _5 a6 T' y; z* U1 J
  311.       }
    - Z( O6 s, `4 r5 I: y+ G- n
  312.       if(UpdateFile1.size())
    / K. q- i0 D+ l! s1 v
  313.       {3 ^  B. \* \; a: G# V* O
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). ~; Y" y$ w* U$ {& l5 ]
  315.         {! S3 L% R; I: p, J" C: f
  316.           file=(*p).second;
    3 M* |( j' F! H0 ^1 U0 q
  317.           free(file);
    : X) ?" p8 m. r2 k% d$ o* r" `
  318.         }7 s6 ?, s' ]/ V/ x, ^) A
  319.         UpdateFile1.clear();
    4 q5 J4 A! h3 o/ K8 j# [
  320.         UpdateList1.clear();  @: G7 f# ]: Z- A2 P! d
  321.       }* ^& \) M6 d1 S6 q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));% S4 Q% g& F* N* P
  323.     }" W5 _. G- H; _% S2 H1 E* o
  324.   }' h% l0 x; e6 G/ G; S
  325.   return FALSE;
    8 [) ^+ ]1 E# k% V+ U; |
  326. }
    9 }: I% ?6 p# r/ j& `4 y0 x
  327. 0 \! o: o$ e6 C# G2 ]
  328. void CRevAppApp::ClearAll(void)
    - Q' ?  h8 i$ o8 x# @$ T# |
  329. {' f; d5 k& s0 `- ]: ^
  330.   LPUPDATEFILE file;
    * o! l' h  t; q8 o$ ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 T  B& v& D5 V- d" ?5 n- p
  332. & v4 _) T8 a) O; {( I, e- S
  333.   if(UpdateLocal.size())
    # `( W9 {2 g9 \0 e
  334.   {1 H  j" j4 \9 V: |& g6 k3 l
  335.     UpdateLocal.clear();) ^. X7 G7 |; y" b0 D" X, g) _$ x
  336.   }8 o3 {  v( B% ]. r# A& Z1 d
  337.   if(UpdateFile3.size())& H, h3 C3 l$ O% }$ o
  338.   {
    & u" V# w! H4 n  I" a- z; ^
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : Y$ G/ h' e5 A  y' e
  340.     {5 G' R, V0 P/ ]: f4 X% V0 l
  341.       file=(*p).second;
    % o. q  ?: c% W8 z
  342.       free(file);0 f' M# A% O$ u* v4 D) _6 M
  343.     }8 m6 \, _" e! R4 a% [/ Y4 M
  344.     UpdateFile3.clear();
    3 A+ a& y' v% w+ Q- W
  345.     UpdateList3.clear();
    * w9 q3 \  ~3 S* E! c1 U
  346.   }& s( ?9 ^5 s1 `/ p- q, g. y
  347.   if(UpdateFile2.size())2 a3 t2 d( Y' `% g9 m; w- N: Y6 i  C
  348.   {
    . U; e( a( z$ G( w: L) v0 I& Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    + v# `% ?, D$ t4 g* D/ W
  350.     {
    4 Z6 }1 _/ a/ y1 H
  351.       file=(*p).second;. D; p4 I& f/ k7 P
  352.       free(file);
    # D$ s4 c7 P/ o' A1 J5 ~! s) t
  353.     }& I! X0 Q+ p% D1 J9 T8 C2 K
  354.     UpdateFile2.clear();4 i# x  ^, n4 P3 e
  355.     UpdateList2.clear();
    $ E0 ~4 }5 y. l0 x8 E9 e
  356.   }) N; F# S, y9 W& m' t
  357.   if(UpdateFile1.size())+ v$ p" _' q' D
  358.   {! ?$ A  s% f' W6 T
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)2 k' i8 p3 W- @% @) s/ z
  360.     {
    * b7 ?; r/ f. x
  361.       file=(*p).second;& ~4 c: R! I2 q. p, {+ l& @5 J/ u
  362.       free(file);
    ; x- k, R. \* w% l  Q/ o2 _
  363.     }
    4 S8 U  `* b+ h! L6 `, Z
  364.     UpdateFile1.clear();; e8 Q& e6 P9 m/ G
  365.     UpdateList1.clear();
    4 }5 {, f# u7 l
  366.   }$ a6 l. U, Z3 ?2 Q7 X
  367. }  
    " O% b$ ]7 p1 i% O* W- a: R
  368.   $ l+ a# R8 U8 |4 `% X
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    3 M- g' ?7 `6 h5 W$ [0 L8 c# F9 F
  370. {
    0 ?3 @9 T1 h0 L; K
  371.   int c;
    & t- W2 D4 b# ]8 q
  372.   LPUPDATEFILE file1,file2;+ \7 @$ r: o! z1 S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) \9 f/ W5 l" }( Z, i! u
  374.   std::list<CString>::iterator l;9 [% t( H' e8 {1 c( J0 b5 L

  375. $ y% r! u! o9 n9 e* o3 I' F4 c2 L
  376.   UpdateLocal.clear();
    + s2 v! L) O7 |4 ~6 b9 G
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    * G# j2 B9 M/ B7 ^, ^/ g6 n/ A
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. y6 F$ l  `/ ^. a/ ~8 F
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' o" J8 f) a: b
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * X3 {2 P1 K1 ~" S1 t$ F# \6 a: \) Q
  381.   if(UpdateFile3.size())& l. d* O2 G  ]  W0 k, o
  382.   {3 B/ ~, V& q" g* Z! g9 W
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 R5 g  v* Q9 Y* l- [, I- B. A
  384.     {' |  o# X# L0 k. K' e: l
  385.       file2=(LPUPDATEFILE)(*i).second;
    * s. E  S2 N  p8 y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 R# e; m' p$ f% m6 V6 F# W
  387.       {+ H0 s7 T0 m  x! z% ?; ~4 p2 @
  388.         file1=(LPUPDATEFILE)(*p).second;
      l4 q5 F# L( Q# u$ e4 [
  389.         file1->vers=file2->vers;! v0 @/ b" Y+ }8 \
  390.       }
    * C2 i* L2 q5 a: t1 B( v
  391.       else2 r- u/ X' C, t# s. G& }2 ^, c  h
  392.       {( U4 k! m7 \$ M
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 ]. \/ \2 S+ p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    & _" z; ^8 P% z# U. b+ D! v4 J
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 d( g/ Y  W9 m
  396.       }
    % c5 t) q7 v0 k# q
  397.     }! \7 {1 l( |  f: H3 h  [! o
  398.   }9 Q1 ^  P  f8 E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 d. [3 f/ d+ x5 N! U
  400.   {
    ' {) u  [: b* N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    % i+ \. s. [, h3 d0 O
  402.     {
    3 _$ p0 d0 q! k2 q6 U6 I4 a
  403.       file2=(LPUPDATEFILE)(*i).second;/ F! Z2 L& N8 n. v
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    3 q( K- b8 O) ~( z- x
  405.       {' i* a; ^# ?+ }- t
  406.         file1=(LPUPDATEFILE)(*p).second;
    % F5 C6 k. ]! S- E  B+ U  L  E
  407.         if(file1->vers!=file2->vers)+ r& M: B. X5 m( V* I' g' q1 {; }
  408.         {& ?- b: _1 D9 X# d
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' N$ ?9 L6 i% Q
  410.           c++;; s% M2 ?" v, z4 o: o. [
  411.         }
    $ K$ o, P8 N* n* h+ K
  412.       }8 f  f" b$ ?0 o  t& q
  413.       else
    2 n+ {4 L' h" X2 W
  414.       {
    " n/ x: E8 @" P8 v
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % a6 g- e- f3 G, `  p* S( n
  416.         c++;
    ' J. a- }% V) g4 j; s, L
  417.       }
    2 v$ j4 s; H! P
  418.     }2 x3 c; m. k: F
  419.   }: y; k% ~, Q% {# \) j1 E. }# m
  420.   unlink(".\\DownLoad\\update.txt");0 t2 {4 o) Y+ w. @2 P4 X
  421.   if(UpdateLocal.size()) return TRUE;$ ?) l4 U, H8 j! g1 E. ]
  422.   else                   return FALSE;
    # B7 Z0 W- Y$ q! Y0 u2 N2 F9 R
  423. }" i/ I0 I6 i9 j% v3 b" w
  424. - I. t; }, Y' p9 w5 o' }0 b
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , ]# P1 d+ M- ?; P7 F" r1 l
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"! ?. o% j2 ~& B" {
  427. 1 J$ b" K" o3 k, g( ?
  428. 4 _$ i5 E4 F& V$ c

  429. - h) @" s% J) Q4 I  I$ P
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): [% D$ s/ {3 Y! d. @+ I
  431. {- r& z# t+ ~8 ]+ c( z+ v/ j" S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 a* B! S+ Q. e6 y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " Q& Z# g+ E( C$ z3 Z% q
  434.   {. n& @+ X+ \' c- D6 ^" G5 V
  435.     char szLanguage[50];; @/ N' R6 @) \0 r5 Y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; r. g( A# F! N! B. \2 ?
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: V) v* G8 J5 X! V6 o
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;; A* q% z9 f8 M# _  t# J
  439.     else                                   m_iLanguage=ENGLISH;
    ' d3 A: T2 b% \% B
  440.     char szRegister[100];: j  Z8 k  t( z3 u! J, h- N0 z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 x! k- @" t4 z8 `3 [/ t6 g
  442.     strRegsName=szRegister;
      A7 _8 d+ C( P' v( I% a
  443.     char szPatchURL[100];
    # s' ^  s/ Z' B0 f) r
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / Y+ m7 u- a2 q4 A
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - J, L, x, o" V% O6 C
  446.   }( g+ @% T* h- D" f7 Y9 `8 a
  447.   else0 E% V* P2 i0 l) Y% Z
  448.   {  C; M- k9 p. x* U% G- q2 F
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ w$ @2 H- }, n4 I" l3 }
  450.     strRegsName=DEFAULT_REG_URL;+ y  w; {6 _  M" {
  451.   }
    / r" }+ P5 h# G$ Y! m8 n' j
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , `. c5 G" g) w+ r9 A# j* S0 Z
  453.   {
    - O% v9 W& S; b
  454.     char szIP[50];2 w2 D+ x" U8 [2 ?* p
  455.     char szDIR[300];
    & j# }% I. F* B+ |, x1 ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* J( l* V* y" }. }6 E
  457.     {5 c8 h0 @" ^% J) B7 G; |
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");6 D* f' k7 N. e5 S* W8 m0 q
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ( X5 ?& u( W) V+ o5 z  K% @% h
  460.       strHostName=szIP;$ c( \0 a( y1 E7 w2 m( i+ X7 ]
  461.       strHostPath.Format("/%s",szDIR);
    2 D5 b0 {* p( i
  462.     }
    8 Q; B8 f- j. m. g7 T
  463.     else
    9 R' A9 g& n; D$ b; M, b6 b
  464.     {
    / c& f$ y( `. t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 u" M' v+ w7 N  ]# m7 H
  466.       {7 c, t3 ^( n- m1 |$ K
  467.         char szLanguage[50];) `0 e0 t6 T4 R8 @+ v; |  X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 m0 ]( o) n5 d" j: d
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 W$ m5 _) H' `8 \: _0 \. ]5 r
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 ~, x+ v7 v$ Q- @! u+ ?
  471.         else                                   m_iLanguage=ENGLISH;, z! e* R% Y( b7 p/ N. H, U
  472.         char szRegister[100];8 F+ U- R& t4 R0 o; A3 b( W5 X
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) q7 m! [  }" ^9 \  r
  474.         strRegsName=szRegister;# S1 k. ]; f7 ?
  475.         char szPatchURL[100];0 }5 g: c  b: t" U
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 e. y+ ~1 \1 ^) w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    7 v0 U% J  G/ R+ I4 \
  478.       }9 y/ Z6 s5 U5 K
  479.       else
    : C" Z. J* s" E
  480.       {6 g+ W# E* y7 H7 v/ z8 j" s" y& H
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, ?9 \0 w1 |; j% K
  482.         strRegsName=DEFAULT_REG_URL;
    4 e' j0 `; }1 x) G" e% e
  483.       }
    4 A  X, `. R9 ?, I
  484.     }
    % k5 I' \. C, j$ u( _! ^
  485.   }0 }5 @) j3 q/ V2 ]" Y
  486.   return true;
    # a# g$ b( n3 H6 _
  487. }
    % z6 A- Q5 u1 p. {' E5 O$ H" D
  488. + V8 g4 Q* ]% z* {! T
  489. #include ".\ZLib\unzip.h"
    - i4 @2 d6 b' R' X2 s4 @4 G( s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' U! X1 i/ @( ]4 C0 D( @5 q
  491. /////////////////////////////////////////////////////////////////////////////
    . b1 R1 a0 s  W% s
  492. // CRevAppApp initialization
    ) e  D- }# @  S6 r

  493. 1 `/ s  q  ~/ J" ]
  494. BOOL CRevAppApp::InitInstance()
    : _! H4 D: O7 y$ p2 ~% Y
  495. {- a" X3 B. W  ~+ ~" A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 H8 A+ J% _3 q: p' H6 e7 T

  497. ( O$ |0 M1 |* g
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);. P" D! F: ?0 m$ `
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + e. ^# M) Q6 v; j$ |
  500.   {
    1 \8 Z5 j: r7 F/ o; V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    & O5 Q9 g* b) X2 ^/ A# N9 C( U
  502.     GetPathFromFullPath(szPathTarget,szPathSource);  R  r$ ^& ]5 o( r2 ^' x
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ p' t8 `/ ?; t: A7 k
  504.     {+ A0 c' P1 i3 p, N; y
  505.       strcpy(szPath,szPathTarget);+ B: v# W8 i" [# M# d
  506.       SetCurrentDirectory(szPath);6 o) D, N4 w) p
  507.     }
    , M+ |# x% h' d
  508.   }# P2 ~# Y2 K* }+ ^3 i, f
  509. #ifdef _DEBUG; W; ~! i6 G4 P: Y' u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 \0 V7 h2 x3 f: k
  511. #else
    * y, s( r" ]6 A- A' {  x1 X
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))3 `  |- d* O' I- D# q7 s: S
  513. #endif) p& I. S; C1 X, A
  514.   {
    4 e) E& m& b7 ?0 G4 U" F/ V4 u
  515.     char tempFileName[MAX_PATH];' K1 y4 u( U; ?$ B
  516.     strcpy(tempFileName,szPathSource);! F7 d3 Q) h3 u) L  `3 G2 T
  517.     tempFileName[strlen(szPathSource)-12]=0;* q6 Y0 _4 o/ B& J3 X  G. ^, }, H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");5 t3 ^  x6 C  E! c6 a
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    3 ~/ F. Y! S7 v# z- l, Q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ! Y# w/ |; X7 u6 X4 d5 l3 `8 h5 Y
  521.     return TRUE;- l$ |; m; b* E% n
  522.   }
    9 X, B' t: b3 E" P& O4 Y: J
  523.   // Nuke 0118: Delete run.exe3 y2 V) t5 g# _/ ]8 V+ @* u
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    % T8 r4 n/ H7 n# ?) k6 F; r, H
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    1 k# D& m5 g- u8 f: X% T
  526.   if(!ReadCfgFile("Config.ini"))
    2 i/ M- X# s  l/ k9 d
  527.   {
    ' O' r" O$ |5 @$ I- ?3 i& ^( f7 c' m
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : m6 A4 q, V5 F+ y# V/ b9 v' ]
  529.     return TRUE;9 v1 t! q: l. h/ p
  530.   }
    ( q' j( X# n1 m- f
  531.   HANDLE mutex;* H4 D1 ], L3 q& }. B
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ) \# }' J& B0 R  Z  g4 K: H3 b9 b
  533.   {3 ?1 P+ g4 N6 u( N. e- j; w9 a1 o# g
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( z) m  {! ]# o! @7 C7 l" p. g- x$ z9 W' r
  535.     {7 [3 P8 n6 M$ Z2 K9 J  J( G
  536.       CloseHandle(mutex);8 K+ Y9 L+ B: A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    # H! D- H/ b- g0 M" A/ x! ?" X5 \
  538.       return TRUE;
    8 A# Y8 }; V& {0 V
  539.     }
    . |& G2 ^/ \) R
  540.   }  ' `8 c* ]4 A/ f- U
  541.   CloseHandle(mutex);
    " h- U3 d1 I3 a( ]8 G. O

  542. : c$ b: X1 A1 |8 v9 Q% ?
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    / E* e5 U# T* r, P9 p
  544. $ P9 L- f8 V+ G& H7 I7 A
  545.         AfxEnableControlContainer();
    8 n5 T9 Z( r9 R1 w4 d
  546. : C3 r5 v3 e& l+ o, b$ D/ c
  547.   bCanUpdate=FALSE;  g( s! z% z4 U' d, U" s$ t
  548.   dwStartUpSteps=1;: y/ c/ z# |& c. f1 G3 A
  549.   dwProgramState=AP_NOTHING;& u2 n& y* d# O! @9 o
  550.   k* j2 @! _- V- P( h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);  |1 P3 ^' @+ h+ w* h) t2 Y7 J
  552. + s* P2 g* Q6 g) |
  553.         // Standard initialization3 T6 t$ T3 V$ B
  554.         // If you are not using these features and wish to reduce the size
    ; F& k: x; G- ~
  555.         //  of your final executable, you should remove from the following( c& F' ~9 K0 m+ b. z! K
  556.         //  the specific initialization routines you do not need., V( n1 S) h8 Q, `' d7 H

  557. ! P( e$ |5 S6 z! S# i" W
  558. #ifdef _AFXDLL
    : u, d# W6 n* ~* N  \7 G
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 s& ?: ~1 l4 s: A! I" G
  560. #else3 P+ j% W2 e- i
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* O) e3 D2 c. J$ f7 n3 k
  562. #endif
    & k# P. e8 F* m# E
  563. # q) C. J1 B8 e5 u- r
  564.   dlg=new CRevAppDlg;
    5 F) L7 r8 y* u# e2 ]; {4 g
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    8 A1 t! W- {) |  q8 b' s: b
  566.   dlg->ShowWindow(SW_SHOWNORMAL);; C" L; j/ }) E5 V6 h' c" p9 J
  567.   m_pMainWnd=dlg;' i7 _0 I6 d- F# L/ z
  568. 6 N$ {# Q1 g" n0 K% s/ c
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 A/ z  e( W5 `0 t
  570. ' t3 K4 ]; z8 Y
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) d7 }# _6 B  c
  572. //  ULONG_PTR gdiplusToken;3 I  w8 x# h6 L( _
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);% i3 j: s& p4 k/ d3 p8 k
  574. # |( d& H& D4 e4 B5 \$ Z8 g6 x% m
  575. //        CRevAppDlg dlg;
      d9 b' o2 D) Q! B
  576. //        int nResponse = dlg.DoModal();
    ' s" S( \9 o4 V0 p) ~& R
  577. //        if (nResponse == IDOK)* T9 l+ i2 r  [( i2 I
  578. //        {  z& I/ D7 r$ I$ @  \
  579. //                // TODO: Place code here to handle when the dialog is4 E% g) c2 P/ Y5 @& u! T3 Q
  580. //                //  dismissed with OK
    + E+ Z4 N' M9 R" I( l: f$ v* d
  581. //        }" B2 e- c, l1 y% b2 ?
  582. //        else if (nResponse == IDCANCEL)
    * M7 F2 A% `% Z$ O7 x/ g$ C
  583. //        {: D, g8 k, C  \2 m; S$ `. o
  584. //                // TODO: Place code here to handle when the dialog is* Z6 N# j) S+ h7 ~, M2 j( }
  585. //                //  dismissed with Cancel( D: Y& Y+ g+ }/ z. ?
  586. //        }8 ?# L- d3 @7 h4 ^  g) ]  G' p" M
  587. 5 K; k! a( u! K0 O2 k" |  X
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 ^& r. E2 n# W4 y/ |1 q# e
  589.         //  application, rather than start the application's message pump.
    " i& R$ s9 Z7 v6 l& f! h
  590.         return TRUE;
    9 Q. B6 n. v5 y5 ^% X$ l
  591. }  G. f& f  w& x/ V' o

  592. " Z3 @7 S# \7 C4 R
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    7 y1 K8 Q& u+ T2 T0 r
  594. {
    + H6 ]9 Q. B; w# m
  595.   int i;
    % _4 d- K8 n5 J4 m
  596.   char *szRet;  b$ Y$ m1 o; v6 z  R- n
  597. : W- y) p: [  h
  598.   if(pSource) { itoken=0; sztoken=pSource; }: u6 p# e& o) `6 o/ L+ k& K9 {8 e" U
  599.   if(sztoken)  O. h9 M1 @3 Q- o7 [* Q% W
  600.   {/ ]0 Z$ S; B( U6 B5 j
  601.     szRet=&sztoken[itoken];9 w  j5 N8 l, P/ k0 {
  602.     while(sztoken[itoken])8 {+ f! o) @/ u9 d+ Z
  603.     {: L8 k; Z* H4 v% o4 T, i$ ~0 i
  604.       for(i=0;i<(int)strlen(token);i++). ?5 Y) E! j6 M) O" I; h. m4 m
  605.       {
    2 q3 J( x) H4 _+ [' g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' e, v! F6 _9 f6 f
  607.         {/ w2 z5 ]; x/ e' |. W* h
  608.           sztoken[itoken++]=0;
    ) {  E) k( g% J) h+ G+ Q3 v
  609.           sztoken[itoken++]=0;4 Y" u# S* a  P
  610.           return szRet;0 s( \8 `; d% N% f2 E+ w
  611.         }
    : p0 y9 k' J* @' Q' n! D" T* O
  612.       }
      u) K* P: G: Z" _7 o2 l- I
  613.       itoken++;/ \) h3 Z4 O$ {$ o6 A/ H
  614.     }
    ) h1 P; y) U5 o5 X4 q0 Y" X
  615.   }0 V+ \7 z5 a" b& n4 s
  616.   return NULL;1 z7 B% ]3 A( A2 o0 ^& F- s
  617. }
    1 i( }" z; [7 @% _

  618. . {1 S/ Q4 }8 [' q/ Z( o
  619. void ProcessProc(long Total,long Current)
    ! E8 M+ f& @/ X" e' {9 {2 B0 N
  620. {9 C9 S: t' }% b! N  x3 V
  621.         MSG msg;
    2 q6 a% T; l/ \' `! r
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) x6 F  D0 u" p) c' ]
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ) V/ A# _7 H7 C1 Z! c
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))1 F) e9 w5 q, h0 j! [* a
  625.         {. ?3 S0 G3 N# X1 [# B
  626.                 if(!GetMessage(&msg,NULL,0,0))
    , Y, x+ A( L) _. X" o: E
  627.                 {
    ; K1 h3 N' p% X6 U9 Q6 a
  628.                         return;
    - |6 X- f. i1 Y" }% L5 [9 m: V
  629.                 }
    ! w1 P4 t! |6 W" I3 ~
  630.                 TranslateMessage(&msg);8 S3 S* h% ?" n: E7 f
  631.                 DispatchMessage(&msg);
    0 K' ]- X& F+ z/ `' l
  632.         }       
    & w* R  o& ~3 k2 t% N6 N( \
  633. }1 ?/ |! O" t, P4 ~" d% y
  634. - d/ m' Z! E$ ?# ]* z) i7 c
  635. BOOL bFirstChar=TRUE;3 u3 P# L4 u) W5 x6 o
  636. 0 `6 e8 L. G1 H) T
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 |* H' [8 T+ l1 h0 b
  638. {
      K8 `) Q% V. `0 A8 H3 @
  639.         // TODO: Add your specialized code here and/or call the base class
      {6 a+ ]" e# S; K" @
  640.   switch(dwProgramState)
    4 t5 G1 D, X, T. d/ C6 N
  641.   {
    $ S( k9 C9 ^% T8 k. b. a
  642.   case AP_NOTHING:) P: Q* B. `9 r5 X
  643.     switch(dwStartUpSteps)! b8 Q+ q! |, `
  644.     {
    ! Y" T4 n6 c  r! ^) g8 O' T
  645.     case 1:
    " X, U8 c% [" N
  646.       {
    ; s9 A1 ^) O+ k% g' A0 I$ a
  647.         int i;% |5 ?. j4 i8 B# L
  648.         CDC *pCDC=dlg->GetDC();. n" o7 s( Z- q. L7 X/ h
  649.         HDC hdcwnd=pCDC->m_hDC;
    1 h6 P( G' C& \- V6 H) ?
  650. //        Graphics graphics(hdcwnd);
    8 @6 Y5 _( Y: w1 E" F' {  M& h
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! I# ~2 m7 g; W: @8 L' u1 Q
  652. //        INT iWidth=bitmap.GetWidth();& K; K0 U+ p" n1 e! \9 K
  653. //        INT iHeight=bitmap.GetHeight();! y* k( I( N( t6 }7 n
  654. //        Color color,colorTemp;- }! L0 l9 i7 e6 c
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- J; z; H1 t3 M
  656. //        {* \" Q1 P6 [' `6 j3 x
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), B2 c! U% X2 K- T% a$ n" i, {. j- }
  658. //          {9 O) |+ Q7 n- }% {
  659. //            bitmap.GetPixel(iColumn,iRow,&color);; B3 c- B# U& ^4 `7 _8 {% ?
  660. //            colorTemp.SetValue(color.MakeARGB(
    3 z1 v% `# N5 V  K6 C
  661. //              (BYTE)(255*iColumn/iWidth),
    3 w0 x+ P- x1 _- {
  662. //              color.GetRed(),9 h0 [+ Z: O* @# ~2 O
  663. //              color.GetGreen(),
    & H/ y# A  a" i* J3 G% M3 Z& Z; z
  664. //              color.GetBlue()));
      A' `  d# N8 D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- I) I* s* `. d  D1 S9 }8 Z5 f# H
  666. //          }
    1 ?( c" ]: N0 G: \6 u' ]
  667. //        }
    2 U3 W& z, L% O; b7 A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);4 n9 J/ Q. Z3 E4 |: K- q# M1 i
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! w7 U1 t( s, `1 G
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. P* Q; ?: [  y! m* g, p
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    : U9 k/ s3 {9 E7 g3 `8 v) _
  672.         for(i=0;i<240;i+=8)0 P" h& d  U6 }8 X
  673.         {
      [+ ?, j+ [) r3 B9 K1 [+ u% `
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    $ [6 s3 L% {+ v2 ]1 F
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ N% P) O) z4 |. O8 P+ t4 B+ b* |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & b( R9 r2 k2 q: x
  677.           Sleep(33);
      _* X2 [0 m6 }1 f  l6 d; @( g
  678.         }
    $ @- P6 E1 @1 @( A' _# v* b
  679.         Sleep(1000);
    , ?- F' F, ~* X
  680.         for(i=240;i>0;i-=8)
    2 b8 C# Y( E+ f( [
  681.         {' l2 _' Q6 p$ [: c+ z: `+ t
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. @* f: Z; w, v
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 t2 ~! n, H. g
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& a2 N4 f, C6 ~3 U) F
  685.           Sleep(33);. T2 e# t$ D( T% j8 _; `( n' O9 ]
  686.         }9 J* B" `, m5 w2 o) |2 U
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);7 K  u5 u+ Q& d3 G' T1 n* }7 }
  688.         dlg->ReleaseDC(pCDC);& ?0 I9 D% C* v# `+ Q2 `
  689.         DeleteDC(hdctar);! X- c) M( b/ P
  690.         DeleteDC(hdcsrc);
    * A, D  _, D# U! e
  691.         DeleteDC(hdcorg);% s7 V- z. C9 Z  K4 g2 @: w1 |0 q) |
  692.       }
    " @$ ~' @9 k% Z  g1 ?7 ?6 }
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & ^3 E# _: k. O2 |5 t1 z0 n9 o2 @2 E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");- H5 s! @5 {8 _9 v/ _& z! D9 Z+ ~# h  _
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # T! S  C  H/ H- W( z6 o8 u: o& s
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ) G' b- a% Z9 m
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 ?$ Q/ j7 ^0 y3 \% l& K; H$ p
  698.       if(!Dn.Connected())3 _5 E: f9 a- [% ]# `3 t
  699.       {
    6 f$ V" U2 `( A( k4 Y: [; @* F
  700.         dwTotalFiles=1;( N7 v6 i% O* X. h& U$ {
  701.         dwDownLoaded=0;
    6 r! ^- b" q8 V6 d! T- T
  702.         bSilentStep=TRUE;( [8 u" N- J# z5 v
  703.         bCompressed=FALSE;  B' {8 O7 V) e- h9 m% L' G: g
  704.         strExtLocal.Empty();
    * k8 M% R- O8 y& j/ ^
  705.         strFullName="readme.txt";
    2 }/ J0 N2 k) @- q4 d0 U0 C
  706.         dwProgramState=AP_CONNECT;
    $ W, o& \; k& Q: R; y& ?
  707.       }
      Q' L' [# A4 K1 {- @1 G
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: V. c8 S8 C/ d/ s( D
  709.       dwStartUpSteps=2;  q% G' Y) g6 k& Z# e, C
  710.       break;- L5 u5 b, E: [# \0 @9 P$ Z
  711.     case 2:/ I1 ?1 j4 g  b0 W# S6 r2 k
  712.       {
    # }  F0 ?% X3 j/ X' i
  713.         int iEOF;! f0 A, w' M7 s' y% f
  714.         FILE *fp;1 \  t' H. Y  M$ r$ |6 q# J
  715.         char szString[512];
    7 Z" v, p' B: j6 L& ^
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    * n- S3 d* i& W0 l  P0 D
  717.         if(fp)/ \2 @& n) [5 l+ E
  718.         {" D7 g; }6 [+ f+ u+ v( }
  719.           do
    ; y  O) k) r8 ^  {) W# G5 K. j5 v
  720.           {
    : Z$ V- c2 `  u# ]+ D+ x
  721.             iEOF=fscanf(fp,"%s",szString);/ W. v4 G) K$ L: i: _- `& \7 |4 d# d
  722.             if(strlen(szString))
    ) s) k( d0 n- _- q2 |5 p
  723.             {
    1 Q. G7 q8 f' j5 g1 c
  724.               if(bFirstChar)% w! Q8 M/ }- e) C8 _
  725.               {& k1 D* s' f5 R. v/ ]4 g8 X
  726.                 bFirstChar=FALSE;  F( \, c/ v# k6 z1 e- B
  727.                 bConnectIsBig5=FALSE;
    . @3 ?- D% f  b9 Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    2 F3 n, Q) K0 {/ Y# [3 f
  729.               }
    * Y1 ^1 `/ q: v; D- {. y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));8 y! B' O, @. H) |& F/ u7 b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));# t# A! {6 S) _5 y9 U2 |
  732.               dlg->m_ListText.AddString(szString);% \' E( |9 g, ^5 }+ g
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - w! g! V1 ]  R
  734.               *szString=0;+ s. ^) Z; @' h% T, T1 v3 T3 h* X
  735.             }
    + a% g5 V: C$ d: g% I1 t" l
  736.           } while(iEOF!=EOF);
    ; {% l; c' G, v* }) j
  737.           fclose(fp);- Z: r2 t; f2 U6 m
  738.           unlink(".\\DownLoad\\readme.txt");! Q/ a& ~% A3 `0 ?% s7 i# c% @5 t6 w: i
  739.           dwStartUpSteps=3;
    6 z: [' c4 ]4 C3 _: |: K9 n
  740.         }0 h$ |9 v( I, [! |  Y; i
  741.       }" [6 I  U3 }+ Q. g7 A
  742.       break;1 T+ ]0 W1 F, O% g
  743.     case 3:
    8 p1 e; [" V1 Q+ h( s) M
  744.       if(!Dn.Connected())6 B" y4 H+ E! [  a# x1 ]1 }3 [, I+ l$ i
  745.       {
      a4 F# \0 M% g# l& Z( d
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, p; y3 X) }( L; ^
  747.         dwTotalFiles=1;
    2 a4 l) A: t& M# K* o- @: i
  748.         dwDownLoaded=0;
    ( X- J4 F# L9 Q1 P# i
  749.         bSilentStep=TRUE;
    3 Q  i/ P8 \2 y) m
  750.         bCompressed=FALSE;/ V; y1 C2 p  `+ C0 j8 s
  751.         strExtLocal.Empty();0 @+ P$ o& ~% R, N% d
  752.         strFullName="checkversion.txt";. J5 n6 P4 `6 s; u
  753.         dwProgramState=AP_CONNECT;7 V/ @3 b+ N- y
  754.       }
    3 A+ h8 f6 Y1 \; M
  755.       dwStartUpSteps=4;
    3 h7 \4 F% C. y6 Z( U
  756.       break;
    % p4 F0 f) P$ D/ Y
  757.     case 4:0 X* r1 x0 q5 a9 r8 C! a
  758.       {
    $ H& I  E/ q, y, d
  759.         FILE *fp;
    , s" J/ G! U7 r/ S/ H  W
  760.         char szString1[128];
    9 p2 `) J$ B. ^5 ~) F. }
  761.         char szString2[128];
    4 J8 z) C& [  x. H$ Y9 O0 V9 [
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( E$ a: D0 O( t7 A% H+ D3 F
  763.         if(fp)6 ?) f2 S3 ?! s) o9 \7 {) k$ m
  764.         {& X  F4 w/ d$ S* ?- j
  765.           fscanf(fp,"%s",szString1);; d: b! ^+ A" P2 b3 \  J. B
  766.           fclose(fp);
    + k' O( H( s7 g/ M+ K% n: w4 m0 W3 ~
  767.           fCheckVersion=atof(szString1);  A- b) G  ^, K8 k, u
  768.           fp=fopen(".\\checkversion.dat","r");
    # V: Y  u% w: p. \6 ]4 \
  769.           if(fp)
      g) P' K5 o; x' x
  770.           {! V/ v% k" D" x9 p  ~6 d
  771.             fscanf(fp,"%s",szString2);7 g" ]' A8 U" K5 c. r# e
  772.             fclose(fp);7 J: a% Y. f' A6 F% O! f4 q6 O
  773.             if(atof(szString1)!=atof(szString2))
    6 i( u! e. M, b0 l; L
  774.             {2 l% u) B2 M( v
  775.               if(!Dn.Connected())
    # m9 h- q' Q; f
  776.               {
    ) k% A6 d& p  G, z% j& B0 Y
  777.                 bFirstUpdate=TRUE;
    . U$ ]% G% h% j! f
  778.                 dwTotalFiles=1;
    : V/ S: I1 T2 b2 i+ F8 f
  779.                 dwDownLoaded=0;
    ' r, W, l& Q. M. u: q. i  ]' y
  780.                 bSilentStep=FALSE;
    - f$ P( s3 a0 q7 `) i4 l
  781.                 bCompressed=TRUE;3 I  H9 B# K7 s5 `# l" R
  782.                 strExtLocal=".\\DownLoad\";8 j0 Y) b1 P# L: P* E
  783.                 strFullName="update.txt";
    " g9 r9 s, s( y3 p
  784.                 dwProgramState=AP_CONNECT;
    5 l! W% E4 p2 A# N8 f% r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");, _+ X( T2 \5 ~7 `/ w( O- l) P
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 t  o2 Y) A" o1 @% s" o
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- {$ s  s$ L; Y  Q" i/ r" i8 G

  788. 9 P* u; m& b, z1 Y) o7 M+ J
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 }) U/ o( K1 O5 g5 I0 V, Y7 c: Q
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + a( ^) y7 Q8 r; k
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 W$ f# _3 o/ \% @9 f
  792.                 {
    * X; P" ?' d% e
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( ~0 I  R) M) E- Z& b  a; n& F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    6 M; j; @$ y4 j( U" [
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 ~* o* _6 e, ?4 B: o7 M  Z0 T5 k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* L" M/ ?, r( j- c

  797. 5 w2 }3 L8 e6 X! v( z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");: }* U3 q5 R2 |1 b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * t3 Q# [& {1 z/ L: }3 N: F+ L
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: h) L+ h& r0 b6 U! l
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" ?( Y( E9 }3 _3 Z% u* X3 y9 n! V- R
  802.                 }
    / A* f# Z3 p$ m
  803.                 dwStartUpSteps=5;
    6 d- I" A" ?# r5 l" o9 Z% @( \# Z
  804.               }
    / x, P2 r! J7 c) _* v' n
  805.             }5 S  ~3 c( }. w% ]3 z, I/ {' J7 C0 O; k
  806.             else
    4 v. X  @" E6 ?. z; m  X$ M' V
  807.             {' {2 v/ S4 `8 {; @5 J+ g
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ' W7 C1 s( k( J$ @/ U1 ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# W% e7 l4 E4 g/ G
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 q( Z# h8 R& L& t2 t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");6 s: F0 M2 X  o: J9 s+ l% H# ?

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

$ s" S5 ~, {& u1 ~% k
9 F6 a0 O' g0 f& v

評分

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