CSUpdate.exe源代码

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

; Z1 F3 p) ^, W- P$ C5 Q3 R
  1. / RevApp.cpp : Defines the class behaviors for the application.) v, N& `; |2 j3 |' w7 z7 [9 ?
  2. //
    % a  c3 U! w  o4 i' o

  3. * e6 G) K3 n: T% w$ x% I
  4. #include "stdafx.h"
    % n( L2 D3 A) I) V) s# N  r- c

  5. 5 M4 J  U) C- F
  6. //#define UNICODE4 k2 }0 N- U! `: E* J4 v
  7. //#include <gdiplus.h>
    * X/ B4 V: H% o
  8. //using namespace Gdiplus;
    ; Q% h) R! J: n

  9. ' X* D# g' M9 }% h2 z+ ^
  10. #include "RevApp.h"
    / u" N: A/ V0 j4 p% Y% h1 ?6 C( N
  11. #include "RevAppDlg.h"5 Y; a8 w1 B, D9 Z

  12. & X8 u8 B9 ~* z
  13. #pragma warning(disable:4786)
    & q/ Y) r7 v5 |
  14. #include <map>
    5 m# C- C. Z- e
  15. #include <list>
    5 f1 w! B; Z  {, f; w9 H8 V3 H
  16. #include <direct.h>5 [1 T1 Z8 V9 {) w5 E

  17.   D  _; Z' k' A  e2 P+ F  Y7 T
  18. #ifdef _DEBUG- x# J, ~9 c- Y/ F
  19. #define new DEBUG_NEW
    / `1 m  d3 _' s7 j# |) d+ ~
  20. #undef THIS_FILE
    0 C& G; \; F: r
  21. static char THIS_FILE[] = __FILE__;* X% M( ^5 @( e2 ~5 O& L
  22. #endif# ?* o3 v! \/ M4 e1 ?
  23. #include "SkinResDef.h"
    8 w, E( u  H9 Q  J2 [6 o  z
  24. #include "ChangeBG.h"
    ) k0 H+ g* c& k! u) {; J1 S
  25. #include "AFXINET.H"' O# R6 o6 |6 h# O
  26. 4 d1 P6 @0 K" q2 {
  27. #define TRADITIONAL_CHINESE 0
    , p, L, O( F+ t0 A
  28. #define SIMPLIFY_CHINESE 1
    3 n8 ]" X9 {* i+ e: x; u: U/ g
  29. #define ENGLISH 29 |+ \2 @* T; m/ l6 n: h
  30. int m_iLanguage = ENGLISH;( c" D& m) `! [  a/ ^
  31. /////////////////////////////////////////////////////////////////////////////
    2 x9 q6 D; {  M  v* L/ {
  32. // CRevAppApp% s$ @" F) u" [5 O. K) O' X$ F
  33. 7 N3 M+ h2 r( |6 F- L: C$ p
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)% x/ d8 p; }( E/ E
  35.         //{{AFX_MSG_MAP(CRevAppApp)5 p. r/ q5 x7 b! y0 p
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( U6 r$ N+ p7 h2 ?, k5 L5 b2 V1 j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 s. K' K! s$ P4 \
  38.         //}}AFX_MSG: d; K( }1 J9 {% U6 S
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + @/ V6 @6 T0 {' p8 t% N% ^
  40. END_MESSAGE_MAP()7 }* ~- [$ L. _* m: Y% d. F0 G, s

  41. 4 K7 Q! i' w3 e5 G+ G% R/ g" W
  42. /////////////////////////////////////////////////////////////////////////////6 [: s2 s: M& b: S6 I
  43. // CRevAppApp construction% q  q3 L. s1 N. J7 x1 E

  44. 8 Q6 y* n  L, N- A0 v. R2 }
  45. CRevAppApp::CRevAppApp(): s$ Y3 h' z& T5 R* \1 x) r7 C
  46. {1 j  U% w2 S7 B: a& f8 w  b  Q
  47.         // TODO: add construction code here,' X8 d  G4 i) R" I
  48.         // Place all significant initialization in InitInstance4 u5 k8 m9 ]6 ^3 w- }
  49.   bDisplayIsBig5=FALSE;
    9 W4 {1 }3 [# p$ i1 L5 i2 o
  50.   bRestartUpdater=FALSE;. [% f' G1 b+ k8 c1 T
  51.   bFinishUpdated=FALSE;
      j$ d$ o5 P0 {; H. Q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;) O1 I* [/ G! e0 Y; }+ j8 f& G
  53.   InitChangeDataBig52GBKS();5 J* J: h  t, t0 Q
  54.   InitChangeDataGBKS2Big5();* V( m+ Z. n& e+ E/ C
  55.         //
    8 O7 U% y' G% o$ h
  56.         bClickRunExe = FALSE;6 j/ h+ D) d) v+ m5 U: e: T
  57.         //
    : a3 X% S0 Z2 R. ]0 p  {
  58. }+ b( L' j! A+ U2 G

  59. & W4 T! K( m7 b" K% B- S
  60. CRevAppApp::~CRevAppApp()
    : O# x) D( J' r8 Z$ e
  61. {
    5 L' y4 Z& r1 X/ R+ c
  62.         // TODO: add construction code here,
    1 x& a& M5 X! m6 j9 s# X. C6 u" j
  63.         // Place all significant initialization in InitInstance
    3 ^  l& `, a: x: ]/ E
  64.   EndChangeData();4 n8 d1 N0 o5 L% k# T
  65. }  `/ A3 f9 Y2 Q4 ^- p  d0 }' C- X

  66. ) g2 Q! i: H  Z; _5 W* D3 I$ }
  67. /////////////////////////////////////////////////////////////////////////////
    $ G( S7 F  |) w( V8 K
  68. // The one and only CRevAppApp object
    3 h( X& Z+ Z; T  b

  69. " N! U8 `; |% T+ R8 x0 r
  70. CRevAppApp theApp;
    ' G. U. N$ B0 X; H2 t! w) z
  71.   N) W" z* D  T
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      ~+ Y' x  c, H( ~, W5 p
  73. {
    3 z7 F( Y7 f. p% B% H
  74.   int iEOF=0;
    3 _3 T& }- ?: i8 B# j1 {9 g: r+ g
  75.   char szTempName[MAX_PATH];
    / s# @7 a5 e% A4 b' @" ~
  76.   *szFileName=0;; |8 u! O" R0 U0 v9 T- K
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 p( N. Q0 X# M1 f  \$ w' [
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 m7 D; Y0 l; P+ o
  79.   {
    + F" d) r4 K. F
  80.     strcpy(szFileName,&szTempName[1]);
    9 Q0 j% D+ ~4 U1 @& X
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    3 x/ M* W! h4 G, U  ^+ D% T. w
  82.     {* z6 Z: F) Q# S( h' N, F
  83.       iEOF=fscanf(fp,"%s",szTempName);4 I' J3 G$ R3 f4 U8 E0 q
  84.       strcat(szFileName," ");
    " k7 r3 v! `5 k' z% E& ^  G  h: m
  85.       strcat(szFileName,szTempName);  @/ A! Y# t8 g7 v" b# ^
  86.     }$ r4 |" N% h, D" b5 i
  87.     if(strlen(szFileName)>=1)+ n$ y6 R8 `: j# e/ V& h
  88.     {
    ) P. M, Z8 e0 d7 e( u! y* k
  89.       szFileName[strlen(szFileName)-1]=0;
    # Q4 S  f4 x( X4 G- e# k/ p
  90.     }2 n" v/ j: \3 R6 l" F
  91.   }
      b  \  Z' p" R; u& W+ d$ h
  92.   return szFileName;' I; u0 A8 g" O, |0 D" V7 q
  93. }
    8 q$ Y0 u3 d, ~* \

  94. 7 j- z* K/ Z. @2 J- b. z3 i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' v8 ?  m- m. M7 J0 J- B1 L0 G
  96. {
    % g$ i% _5 t2 h/ v
  97.   FILE *fp;
      Q# n) Y* V) d) w' V) _6 K/ o, V
  98.   char *key=NULL;9 a' c" [8 }2 v, A6 \
  99.   char version[MAX_PATH];5 r8 d- s3 k/ k  {3 e- S  s- P
  100.   LPUPDATEFILE file,olds;
    2 O! N- c  k* j5 V8 g# \& k
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 r0 h6 U+ ^1 J8 y% s  ~7 n  H

  102. + H/ n/ I: c" [0 X
  103.   UpdateList.clear();
    2 ^  E1 u, a$ |; _, p7 x( W
  104.   UpdateFile.clear();
    . z6 d  \  D0 N4 ]- C
  105.   if(GetFileAttributes(filename)==-1) return false;9 e* S, q1 V7 g8 T& h  r; U
  106.   if(!(fp=fopen(filename,"r"))) return false;
    0 J7 Z  v: @( ^" w9 D
  107.   fscanf(fp,"%s",version);( V7 }" Y5 r3 x( _& H; Q; f% z4 P/ z' |; _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    2 e* P5 V# J: U+ g" n0 o
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) G! S9 m0 H3 ?
  110.   {3 W5 o/ I1 z: G4 s; S1 N
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! {. j; }& @1 C& y7 O1 v
  112.     fscanf(fp,"%s",file->path);* I- o: \; Y5 q
  113.     ReadFileNames(fp,file->file);$ y0 w3 Q+ a6 X( M# x
  114.     strcpy(file->full,".");6 m" @' w! c# }4 s7 i# p
  115.     strcat(file->full,file->path);
    ' F8 F* @5 _; {6 R9 ], y+ u6 ^& q2 o
  116.     strcat(file->full,file->file);3 A! A4 T) N$ ~/ m) n0 i* N
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())3 \. N+ R& j, c; q% x; i& I
  118.     {$ B& N4 P% b+ N( w
  119.       file->vers=(float)atof(version);. n7 @  \2 [: j  |; v' o
  120.       UpdateList.push_back(file->full);3 F3 u9 l4 P! y  w. z1 K* e# P) ]
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 o/ _. u; M9 J5 t  R( k# O
  122.     }
    6 Y9 y& T# M8 d/ P
  123.     else% I+ k7 o, w- N9 T. [. Y
  124.     {
    7 y# `, a+ M; F$ ?6 o, |
  125.       olds=(*p).second;
    1 G% c& ~! s7 _% q9 N
  126.       if(olds->vers<(float)atof(version))! T( }8 S$ E/ C. r; R- [
  127.       {! \3 N# g* `4 T, o) m. n
  128.         olds->vers=(float)atof(version);
    9 Y8 [# y& F& I+ p& k" c
  129.       }. H; A( {+ ]! j* V' }* y
  130.       free(file);9 [- E8 g. B/ |) h# A
  131.     }% l" t3 [( h7 t) x3 T
  132.   }5 \, a; r0 I5 R: d, ?# f
  133.   fclose(fp);
    - N* \6 J: w+ D8 m  N- b3 O9 b
  134.   return true;
    7 {3 p/ ^* y# I+ J7 L2 P
  135. }
    , h" B3 d; k* X" C  D( k3 b) X" P; b
  136. 0 d8 o. K6 f* b+ r- f9 s+ v
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' r2 G6 V1 \$ f
  138. {( i& T, I9 C& v" _" G  V
  139.   TCHAR  szFull[MAX_PATH];
    7 r5 D2 \% `! @) j" e
  140.   TCHAR *token,*inter;2 W5 D! n; d: j0 ]( W
  141.   *szPath=0;
    ; A+ X+ o- Z' @" T
  142.   strcpy(szFull,szFullPath);
    9 x" r6 s, ]# ^- \0 W# V4 c
  143.   token=strtok(szFull,"\\/");$ r6 \# k8 m9 N8 U5 i
  144.   inter=token;# p1 a0 K- |) s: r# C: d
  145.   while(token=strtok(NULL,"\\/"))
    - q. q) V' ~" @- l$ M( _$ g+ P+ o( l
  146.   {
    * w5 e+ k6 q% @1 D5 \$ r1 {
  147.     strcat(szPath,inter);' D. I) h# I5 R' A, M
  148.     strcat(szPath,"\");
    6 p# t+ f! u5 X3 Y
  149.     inter=token;
    / o& x2 P$ L2 }6 \) S- W% Q
  150.   }
    - s7 D$ R. n- B4 a7 u0 w7 |
  151.   return strlen(szPath);
    % ]% Z  w1 L( L% p8 W' k
  152. }
    9 K2 r" M6 x( x/ r1 ~9 t+ l

  153. 2 B- n2 z* C0 G# C2 y0 X0 {  ~
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    & `; b: C6 l0 |- e7 F' `  u/ b
  155. {4 w3 R$ U7 O2 @6 R" E7 c$ c
  156.   DWORD attrib=GetFileAttributes(Target);
    3 h5 S9 W+ R4 p5 \8 d! f$ u
  157.   if(attrib!=-1)
    # A) p# J+ P' P9 O: @, r
  158.   {
    - R1 T, ^% d& E* P
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 z. B( _" `( p9 k! q# O7 }
  160.     {
    4 U6 z- J: o' y! j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & J' X* S& y: m' k" X9 l9 Z( I9 \6 q
  162.       SetFileAttributes(Target,attrib);
    * v. {9 C5 K2 c9 Z; l$ H
  163.     }# L) n% X' `; ~8 L9 \( Q& c5 L- D
  164.   }& e3 o' o* P3 c3 q% E
  165.   CopyFile(Source,Target,Erase);
    $ g7 t1 y6 ^( F, o# I
  166. }
    ! F7 T/ X( \( q( E
  167. / X8 C( U1 m/ {
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    + A6 e) W3 M% h) r# s4 P  G. R
  169. {
    6 z5 K9 v3 x5 q+ I
  170.      FILE *fp;: R' O' l, r4 q- Q, `8 i; t
  171.      char  szBuffer[8192];
    , r- m- y& A% q: S0 y: [
  172.   va_list  argptr;
    , I' I$ K5 A5 R3 p% a1 r

  173. 5 C7 U+ s4 W6 `6 y& w8 Q
  174.         va_start(argptr,message);& v/ f- k0 y/ N) k
  175.         vsprintf(szBuffer,message,argptr);" g$ m) ~$ s! V
  176.         va_end(argptr);- Z; M5 {( g- U# C3 _* Y( t" w
  177.   fp=fopen(FileName,"a");
    4 D& D5 y, p7 e- E
  178.   if(fp); V' R8 z5 S: d1 L* k
  179.   {
    4 ]1 A5 m& e1 k) v! _
  180.     fprintf(fp,szBuffer);
    - C/ h7 y( q6 h) T4 b* t
  181.     fclose(fp);  F! p' D9 r5 L0 B2 g" i
  182.           _flushall();
    * X0 }* e) R9 _, S2 W! P/ {( Q
  183.   }
    1 d2 `  R+ U6 ~, ?
  184. }; W4 Q2 O. R, I* k/ V9 G" Z3 j

  185. 0 X, \( F. R  Y. l
  186. BOOL CRevAppApp::Fclearf(char *FileName)* W: _& R. N- R
  187. {1 V& G( P" D, Z4 s8 w& |6 O
  188.      FILE *fp;$ }! d' h4 B1 Q& Z$ u& }# k
  189.     DWORD  attrib;
    $ k. g0 T5 i3 Y
  190.   attrib=GetFileAttributes(FileName);; M7 m6 I: z) a3 Z, N* W6 m$ O
  191.   if(attrib!=-1)& ~. T! K: [+ i8 Z3 q9 n+ p0 o' R4 k2 j
  192.   {
    ( Z# w2 T* E1 s+ u
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    3 \0 g, t  T( x% v* L6 Q
  194.     if(!SetFileAttributes(FileName,attrib))
    * d  f: E0 k) i+ M9 k3 y
  195.     {3 ^3 [" L, s0 |( H4 _; H; R
  196.       return FALSE;; O: r# `* L" p5 ^/ S
  197.     }
    1 a* |7 D% `( k7 \# n/ K& X
  198.   }
    ) ?- s+ D# @/ d+ k( v
  199.   fp=fopen(FileName,"wb");
    6 z. @" y; f. x
  200.   if(fp)& V5 M) y0 d! \; ^
  201.   {% L" t5 f4 w. E4 R$ p0 g7 J
  202.     fclose(fp);" O+ F. p$ J5 e. D
  203.   }5 Q' h8 Z& Y8 A( z3 ^, E
  204.   return TRUE;
    & X2 }6 |0 x( e& k0 Q* v0 ?
  205. }
    . u; R3 {5 L4 h% t" h. u8 ~& W

  206. $ w0 j3 Q* @! Y6 ^
  207. BOOL CRevAppApp::UpdateLocalVersion(void)! _/ z' G! P: \; L. ~, g6 J) a- a7 u5 \1 |
  208. {8 |9 J" ^2 X* p
  209.   char filename[MAX_PATH];
    ( ~+ K9 h& F4 |
  210.   LPUPDATEFILE file,olds;/ Z3 r' R+ `5 J0 E8 u1 M( K
  211.   std::map<int,CString>::iterator i;- d7 F: N4 q# K$ P/ \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 J6 a  }! e& E- ]' k4 G
  213.   std::list<CString>::iterator l;
      c1 t6 T# g* T+ \9 Q$ [2 j
  214. 7 e8 z, _7 J4 z" ?. m5 J
  215.   if(bFirstUpdate)
    " \, a6 v1 F$ H  I
  216.   {
      S/ x3 j9 i6 ?1 k1 h6 u
  217.     dwCurrFile=0;
    ) B$ W6 l8 P, Q. C/ P
  218.     bFirstUpdate=FALSE;
    , Z+ {, C+ b, r* s4 G- g+ ^, R
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ G8 N. |! v, ]  @
  220.     {
    & ^1 d4 y+ w) }5 n0 w! N
  221.       dwTotalFiles=UpdateLocal.size();
    , N+ K5 h( o  @
  222.       dwDownLoaded=0;* `2 a+ _* Z) V8 J/ [7 O$ s
  223.       bSilentStep=FALSE;
    - y8 W0 z9 K- n8 s5 y
  224.       bCompressed=TRUE;
    " q( w9 h: A4 [$ n* t
  225.       strExtLocal.Empty();+ D" Z6 b- b) X& `# A
  226.       strFullName=(*i).second;% i! M4 x, L  b% \* K
  227.       dwProgramState=AP_CONNECT;
    9 m% m' c" ?# ?, x
  228.       return TRUE;5 F4 }' }: I1 {8 U9 h
  229.     }& s$ q. Z( L- W5 P) p" A$ x
  230.   }
      d3 G1 Z: D  n$ \; Y( `: y
  231.   else if(bRestartUpdater==FALSE)
      b6 x5 [" O# o' T
  232.   {
    , c6 x$ N: d$ _, P5 Q3 D$ l
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())5 Z- p% Y7 o& F8 n" Z
  234.     {
    . u2 E8 J0 B; Q  S: C- Z
  235.       file=(*p).second;, H; N1 Z: ~9 [( ?- L
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    & u; J6 S2 V' Z. t) t; A9 E
  237.       {. A; v5 d2 b2 C' M, C+ w" z* g1 y2 i
  238.         olds=(*p).second;
    0 A  x) _% N& d$ @; p2 }7 X
  239.         olds->vers=file->vers;
    4 c& d: U/ _+ M3 j
  240.       }7 A1 u( }& q# ^" Y2 @4 `
  241.       else4 l( F( l! K% N9 Z9 {  J
  242.       {# ?) A& r) }  z3 p( `
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( [1 W. R* Y6 t2 H: g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    8 Z: ]- _/ m% f" @( f
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    6 D1 f: s8 l% ^5 x' F
  246.       }
    : D4 t5 N0 i& V: c$ k( ^* \
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- K4 f# D  `2 C1 }( X/ S
  248.       sprintf(filename,"(%s)",file->file);
    ! d. F8 C6 J+ D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& C+ b, W9 Y' D$ f- ~* Q; P3 \
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }4 Z: u& T9 }, J/ w  @) C
  251.     }
    $ T9 h% h- c4 c0 T; j$ h
  252.     dwCurrFile++;. h: N' n% y/ a0 R
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 c6 U0 n, u6 \' d: s
  254.     {; R: n) O+ Q8 B. a" T* l
  255.       bSilentStep=FALSE;" Z: a6 T, I5 `5 ^
  256.       bCompressed=TRUE;
    $ x3 U8 {( c0 {) z" B2 a' V! U
  257.       strExtLocal.Empty();
    ( x' w6 R- V& e5 A! v  H0 c, E4 F
  258.       strFullName=(*i).second;4 m% b4 t; e" i; C
  259.       dwProgramState=AP_CONNECT;
    ; u3 A7 T, _7 B' K+ ]
  260.       return TRUE;
    6 o, i- k+ j& g) t
  261.     }
    # D, P) j3 l5 J3 K3 |
  262.     if(!bRestartUpdater)8 Q7 s# e7 o6 f: x- c; T0 V
  263.     {
    ! f0 N5 N) O: X6 ^7 l
  264.       int iCurrSize,iFileSize;; \# u# C% d. \- |# G3 X- K
  265.       iCurrSize=0;9 r# p* t& ?4 D* H/ h
  266.       iFileSize=UpdateList2.size();
      u8 b8 ?- N7 l) b! m2 w. B& a9 l
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");# |5 o; N4 ?& m- P! l, `% a
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    " n1 Q# I$ }, P$ C4 ?& d" e" {$ Q
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    + ^9 L8 F& E. U9 t" j7 R
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 n  h/ X! m" G  D# |
  271.       Fclearf(".\\update.dat");$ H7 }9 Q3 P. z4 c, M, R1 v5 ~' g
  272.       Fprintf(".\\update.dat","Bloodyf\n");0 T( K; T, k7 H! L5 A: z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , e9 x6 Q+ r) I( g/ M% V
  274.       {9 M4 F1 n5 F9 K3 ?# z1 {! M3 A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())4 u/ n( |6 t6 q) d  i- f
  276.         {
    4 O- h& `* d9 E" H7 x
  277.           file=(*p).second;
    / }' N+ D! A, e0 t1 B, `2 j5 j
  278.           sprintf(filename,"(%s)",file->file);4 i! B8 x$ Z2 H/ l- p3 b/ ]" u
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 [, n  o6 c, ^/ `* o* {
  280.           iCurrSize++;( V- D$ [7 B% L+ L! U1 T! s
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));5 C+ F9 x' j+ |, n% j0 j
  282.         }# w$ ~; p5 j: S- H
  283.       }
    # M% _4 _9 n6 {$ O1 t6 P
  284.       unlink(".\\update.txt");
    & }- X) W7 e2 s7 `* p& p2 w
  285.       unlink(".\\update.tmp");9 u+ k1 i. h9 f
  286.       Fclearf(".\\checkversion.dat");% r/ z# d$ w7 ?- \
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: f5 l  m+ \& @
  288.       if(UpdateLocal.size())* v, Z0 v- T2 P0 M
  289.       {/ X4 `1 q" t# r
  290.         UpdateLocal.clear();7 ^' N9 z/ G2 S0 m1 @* R& f
  291.       }
    7 x2 W4 ]$ T. ?3 V. o; J0 q1 y
  292.       if(UpdateFile3.size())
    2 m' ~0 T# Q! S8 p% t( ]! M" B
  293.       {
    % T: Z3 e! g; W9 A* X$ _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / J& ?7 M4 Z& u3 G1 Q
  295.         {
    9 }' X3 d, p% Q7 f8 l
  296.           file=(*p).second;" ^# ?  z/ p6 u1 d/ h8 X
  297.           free(file);4 d9 H3 f. ^* I1 i( v, R) n, T* u
  298.         }
    % p3 K/ m3 e- q2 v. f! F+ t
  299.         UpdateFile3.clear();4 F  x( Z) N, i: n- B- [
  300.         UpdateList3.clear();
    1 a5 A7 R9 `6 O5 L5 O0 O
  301.       }
    : Y+ ]7 |( J  o- \* Z+ J" b
  302.       if(UpdateFile2.size())
    8 M. s5 K% w- f5 m3 _: b
  303.       {' r- `5 H% a6 L" a( e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' W/ d9 g# n: x( r$ F
  305.         {
    ) l. d: c4 e, f! f! w4 M
  306.           file=(*p).second;, t7 V% ^+ N* W5 o' B8 |0 y( ?; b
  307.           free(file);& |. y4 W" n; ~  N) P1 p
  308.         }/ ~# t# F0 W( z) t' a4 l+ f* C
  309.         UpdateFile2.clear();
    & s; W6 C: K- M/ P0 c. X8 q6 W2 s
  310.         UpdateList2.clear();
    ; ]5 O) e5 O( j; ~7 f0 h& L% j: }- c
  311.       }
    ; j: D5 n9 G3 e( U
  312.       if(UpdateFile1.size())
    % f9 f% q6 {0 V
  313.       {
    / z& Q2 m& g" n$ E4 k3 S$ A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( t# p) G/ x, |& `/ K$ @; c
  315.         {  ~5 S, y( q0 A8 ^5 s
  316.           file=(*p).second;
    1 Z5 D( h2 Y" |$ B: H6 V
  317.           free(file);( g, l5 m4 L# e+ a8 I+ N
  318.         }% g, A3 H2 Z6 S, Q1 q3 c- U' f
  319.         UpdateFile1.clear();
    ( j4 A/ S1 Q  K3 ~! ]0 d( l, R1 u
  320.         UpdateList1.clear();  @5 ~% }* O# W* D/ N) z, m" j
  321.       }5 ~- J$ j7 f% L5 Q1 e9 f. X- l8 a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    7 j9 T' |  ]3 _& o# j( M, g2 y
  323.     }
    * k. m, J: e/ B  S! m
  324.   }
    " y5 U6 x/ F# o& G2 P1 u/ n( C
  325.   return FALSE;
    ; j& C- G9 y* {1 K" v! @6 m
  326. }1 p: B7 ^7 p. E  d4 }* Q8 l  D
  327. ) u4 @4 D! x$ Z7 G+ W1 _7 u( S/ z
  328. void CRevAppApp::ClearAll(void)
    4 n% ]4 p( l# G+ e' [1 _
  329. {
    / _" }, `/ L% g, T5 v+ H& R" M: Q9 R
  330.   LPUPDATEFILE file;- K) O' Q& C7 x* g
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / {6 I* A) ]4 E! M
  332. ' T! @4 g' J4 d
  333.   if(UpdateLocal.size())
    ( N, [" ^* p& Q9 Z
  334.   {( h& e  m8 Z4 y7 E7 A- `
  335.     UpdateLocal.clear();4 \% L  x8 ~0 `. y, o) u$ K1 Y
  336.   }' }  B  }0 ^/ [  U4 s. n# J
  337.   if(UpdateFile3.size()): |; V0 D; a# O2 q; ?
  338.   {
    ' k. a2 L# M# W3 c' L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    - z5 @. F2 m: g5 C3 s
  340.     {! K9 ?& l1 |: O  }) u0 ^
  341.       file=(*p).second;
    0 P: N3 {* @; i6 S
  342.       free(file);$ K$ T  G/ Y  P8 B( x; O
  343.     }
    ! x5 \8 A# U6 D# d; T7 `
  344.     UpdateFile3.clear();3 A9 L) L/ f& U3 \5 ^: p
  345.     UpdateList3.clear();6 D6 G  ^: a- m/ R2 f; V
  346.   }; B) [; `* O5 n- w
  347.   if(UpdateFile2.size())
    1 o. N4 z/ E6 [
  348.   {
    : A; j6 i- q3 H( m0 p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); F( a2 g/ z: w, x. s8 b, \' A
  350.     {
    % o& `. l' E; w5 X
  351.       file=(*p).second;
    2 S5 ~" ~* j. a1 k' T  ~
  352.       free(file);
    * `) ]2 T% e/ F/ n4 a# m
  353.     }
    % m* {0 M" n& `% F
  354.     UpdateFile2.clear();+ k! f  B" K+ R9 v1 p+ O- E& _
  355.     UpdateList2.clear();
      ~& z3 G% a$ T$ _9 B
  356.   }
    + F0 X& D7 f( F2 f% ]
  357.   if(UpdateFile1.size())
    6 _8 x6 n2 B: b- x0 O% s
  358.   {
    & N7 ~" m3 C6 I3 D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : n1 a  ^" X, @
  360.     {6 Q" H2 F. ~& ^) |* W
  361.       file=(*p).second;
    " P, ]4 K2 B- y5 i# \( V( p
  362.       free(file);
    ! g0 v% e  S, l  r0 n
  363.     }' p$ m% u$ A! n" J
  364.     UpdateFile1.clear();
    3 L8 Y2 ]5 y% ^) M9 V
  365.     UpdateList1.clear();
    7 W- E" `: o: n9 \* t+ I$ W: A6 q3 H
  366.   }
    3 v9 }7 x3 t. p6 I( x
  367. }  
    3 ~5 {, q, J- a+ W# C! U3 ]
  368.   8 X. u* |0 x7 i' C: X; y; x
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + d4 ~! L, G4 F! p% _. j  [2 k
  370. {; j2 i8 N" O  }3 j' n1 \
  371.   int c;! a+ v) W! c- }
  372.   LPUPDATEFILE file1,file2;5 Y4 a" h, H  t; B
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    8 R8 J7 e2 F0 S+ M4 E, A  i2 X0 y
  374.   std::list<CString>::iterator l;
    ; B7 ?  V4 g+ Q; M9 c+ H

  375. 2 F3 A2 A- h* a. q' ?
  376.   UpdateLocal.clear();
    3 m/ p# u! b9 {: `: T7 g
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % c" x) B2 x* A) k9 a
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& S  y/ _' c% W6 t- ~0 c$ s
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);1 c. B2 m$ @% ]' A- T/ I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: N: {. E6 w9 K5 O: J) ]; K/ {
  381.   if(UpdateFile3.size())
    % M0 m* X& U. O( Q2 v+ ?: d! O
  382.   {* Z' w( t" K( G, d$ `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' x; |( I! m) b- _+ R4 h, f: J
  384.     {! z+ S+ y: U. B, V/ y
  385.       file2=(LPUPDATEFILE)(*i).second;
    . x8 V5 H. p4 m* t# Y- o+ W% Y  Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 R0 [. ^5 w; B. [: K& L& ]) n
  387.       {6 c8 c3 D- M' ?
  388.         file1=(LPUPDATEFILE)(*p).second;) v" ?8 o/ n; b" B5 X7 @8 f$ ?
  389.         file1->vers=file2->vers;) T6 v% s+ g! e0 O  r- E; G
  390.       }/ W  |  ~$ r  j' d* O
  391.       else
    ( M- z3 o- ~3 Y" X+ y
  392.       {9 {* M7 L1 U# R9 v
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ b$ m5 C  y7 X6 y
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( f5 P) g, p# Z! I9 q2 F
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));, r3 J4 A) w0 l6 x7 D- F
  396.       }
    4 Z7 k1 `" g1 {1 b
  397.     }( ?" T9 |/ `6 o# e8 v; N* A2 @) L
  398.   }  V: a& `, Z1 ]& ~9 Q& j
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    # O& e& F* H9 z8 h) G
  400.   {
    ( C1 o: K. x, D% u% O
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 @0 ?" n2 P0 i: K/ {1 J. t' k
  402.     {
    / K+ Q' _- S- e: j2 F" @% O9 d
  403.       file2=(LPUPDATEFILE)(*i).second;0 i, x7 h! N* X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & G) H, p7 x- ~0 T+ t
  405.       {  }& l; v7 c. \* z
  406.         file1=(LPUPDATEFILE)(*p).second;+ Q4 E2 D8 A' A, v6 D0 e" d
  407.         if(file1->vers!=file2->vers)
    , n; h( B9 `+ m5 |# Q
  408.         {
    , N; c( h9 K, `. E/ l% N
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! {# {* q- P9 H! P$ b
  410.           c++;7 S) W& d* U/ [, g1 O
  411.         }  A% K$ f+ ?, R/ f
  412.       }
    , J9 m4 i, N" j, O
  413.       else6 I! `) s& e% W! X, o, P
  414.       {/ y/ I" j0 q# A7 J/ X
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - ~- h" C+ u5 w8 M% P0 M
  416.         c++;2 s' z/ k8 |$ Q2 p/ P
  417.       }
    : h2 I, X' ~8 F. W, A# P$ C9 J
  418.     }& U' T- F( V3 Q+ L* Y9 P
  419.   }
    * a  C: z! p6 m) }, B( }( H
  420.   unlink(".\\DownLoad\\update.txt");1 d4 d; F/ H+ P; o% h" `8 R: K
  421.   if(UpdateLocal.size()) return TRUE;
    ( V1 ^8 ~) o, U, I" x( J3 F
  422.   else                   return FALSE;" w  ^* a& l3 E" ?! W
  423. }$ l/ [4 p, \2 ?- N
  424. % W9 y5 m! g+ g. z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"- G) t/ H- R9 x) K& {# l5 }
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 h: X, e4 h& e& P# z
  427. 6 R1 ]8 `. t. w, f! M' n4 m

  428. ' w1 |2 v7 U( w# N4 k+ m: `
  429. ' B% A8 N9 M2 b( z' Y
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    3 S0 o, f- }  A1 E: f2 l
  431. {1 N  `, C1 F& O8 c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;- w( l* \2 ?8 n
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 p) t+ ^4 T4 y
  434.   {
    1 }& N8 F! i5 h9 D7 o2 q( Q
  435.     char szLanguage[50];1 o$ b9 b# x6 V
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 B" c6 E: f4 i& ~/ g
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' ]+ d8 [/ {, i8 g
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( Y1 V  [7 B! Z4 E! r; T
  439.     else                                   m_iLanguage=ENGLISH;
    % e; D9 F; f) ]+ w: S
  440.     char szRegister[100];' H6 @! X# q/ W1 y1 Q' N( g0 Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - j/ |* \0 D$ B' R# h7 I/ X
  442.     strRegsName=szRegister;  q2 {! x3 [! L/ y( v  O
  443.     char szPatchURL[100];
    , q' U1 X* p; l$ ~
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    9 p4 y' T4 x) O9 x1 T' v' Z5 k
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 {! v( B" @& q8 S+ m4 y) ?
  446.   }$ `8 g3 P/ |! |' f2 @  c
  447.   else
    0 A- H. J( ?0 V( k& ^
  448.   {
    4 r9 T1 L6 R& N( z4 |7 y. h4 q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( g. g! v/ a0 p7 @
  450.     strRegsName=DEFAULT_REG_URL;$ Z$ s8 L/ L3 r6 ~! z% W
  451.   }5 l# ^1 r% Z$ o. [/ K& s0 F
  452.   if(GetFileAttributes("hosts.ini")!=-1)' v& u' j/ L3 M5 r
  453.   {; Q" @3 P5 l. A# e( O+ I
  454.     char szIP[50];
    . n8 m+ [& t3 o9 G* Y
  455.     char szDIR[300];
    5 L% R; Q# C6 G6 L% R+ U
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    % p2 B; |7 L6 Z2 M* j9 y
  457.     {9 v9 b; U8 h3 k$ ~* x' Z
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 C, z7 s5 m7 n5 W
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / E+ [9 S# j* p- Q, O; s, A
  460.       strHostName=szIP;
    5 q& `, A6 h0 k
  461.       strHostPath.Format("/%s",szDIR);
    * y8 {, @: m/ U5 u! x2 r7 l. L, a
  462.     }8 `: {  S2 e1 @
  463.     else
    . A' S  J# }. @& c) a; e6 u' {
  464.     {
    / D' X! x# G. C
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' |/ A9 t" R8 V: Y, p
  466.       {) i3 J3 z" l' f2 a% J2 p
  467.         char szLanguage[50];- L5 l+ T5 S+ f3 X0 U/ o' D' \4 m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - L4 G4 {& x9 _. j2 w. J0 ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 R. [5 K- [" I# }8 Z8 `
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 M. _5 D0 U- @# t% k0 Q6 W
  471.         else                                   m_iLanguage=ENGLISH;% P5 D% s1 J2 W
  472.         char szRegister[100];. O( z, Y/ C9 K& a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , G! t2 P+ L' Q' {5 O/ _/ P# f
  474.         strRegsName=szRegister;" Y6 E0 L" O% L3 \# p8 Z! X! `) b# @
  475.         char szPatchURL[100];/ m; g6 I7 E  o* r  K5 D
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 @3 Y  J0 r+ k/ U* z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 t  }% ]1 e0 f2 Z6 ?
  478.       }+ i: i6 ^: f& U/ `' s
  479.       else
    % f. p2 z; C- R  `% H3 Y
  480.       {
    7 {( b1 h+ w1 W7 [  Q- G2 P  D7 v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 [0 v% w3 |8 z5 z. X; G2 C- r
  482.         strRegsName=DEFAULT_REG_URL;7 n5 a' l+ m7 U2 t0 U  J
  483.       }
    0 F1 y- B! i' j5 |) K0 R* F
  484.     }
    6 c: \/ Z/ {' p6 F& M/ q& _0 c' b) C
  485.   }
    6 d3 L$ j1 e0 \7 m2 ~: U
  486.   return true;  n) Z- Z# n- {
  487. }7 S  ]4 u* ?" c9 A0 [: l( z1 @
  488. & ?: _: ^- C1 W- Q
  489. #include ".\ZLib\unzip.h"
    2 x! n6 ?/ r! O, }
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);, v/ X1 |5 t; c; ]0 I3 S) |( g
  491. /////////////////////////////////////////////////////////////////////////////$ e; a9 U  g5 ~. S3 C; a
  492. // CRevAppApp initialization& ], h! y" A; D! @! E4 E3 x6 t& ^

  493. 8 \) a4 }/ ?7 \  t( n
  494. BOOL CRevAppApp::InitInstance()% g$ P: h# k$ X% s" ?% i  x  w4 y9 m
  495. {' C" J# |. [+ d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 c; t. E2 \3 `2 U. C4 O
  497. . v. D( |9 v8 F+ C4 {( C& T( M( s
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);8 P3 L; F6 _  o
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# n1 a$ I2 d0 z/ {- \! B
  500.   {
    , a' y+ M) l& P. E! {& Q- d) d
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 C& ^. P# ]" d, K5 C  H) K8 W# x; b
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ' a8 k6 ^! T1 d- Y) l+ m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))3 I; a7 P' L: Y# m* p+ S: V. L
  504.     {5 K: `. n) G" ~; i. O6 c2 U
  505.       strcpy(szPath,szPathTarget);: X  d( @5 E8 ^' O7 C. l
  506.       SetCurrentDirectory(szPath);3 J7 r6 @& }4 W/ \
  507.     }- _- t9 ^  [3 E5 e# H  i% l; o4 O
  508.   }
    " x4 [$ E7 \  C; l
  509. #ifdef _DEBUG
    + ]3 k. U  l3 E5 n1 P
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) h+ l# O6 Q6 Y( ^& \: X
  511. #else
    " S8 Q! b5 S" M. V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , J6 ?  |, Z( v4 d
  513. #endif4 G0 r3 ]3 [7 }8 C0 @% B& d) t; r/ y
  514.   {
    0 R' M+ Q  `9 \* a: L$ c( @
  515.     char tempFileName[MAX_PATH];( R9 W7 d( M0 ?9 Q
  516.     strcpy(tempFileName,szPathSource);
    0 W  d2 u) Q( b1 d& I
  517.     tempFileName[strlen(szPathSource)-12]=0;8 x3 I- F5 V+ F9 ^
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! `& }. ~. b% B4 R0 ?# r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);* n# k1 b0 `' B
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + W1 X0 R. W- _8 ^2 D
  521.     return TRUE;# B) T3 @" u% ]6 l
  522.   }
    1 _, L$ P% n; {' Y; h
  523.   // Nuke 0118: Delete run.exe
    6 P0 Q6 y- Y% G
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );: O+ _, d/ V/ {( p2 ]
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! r6 d. ^' h. D$ Q2 Y1 L: ?
  526.   if(!ReadCfgFile("Config.ini"))0 ]. m0 T) Z0 D5 C3 n
  527.   {
    + x+ q8 M  O: i- u# c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);5 j" n( S% |3 F: m+ w
  529.     return TRUE;6 F( x3 M5 H+ X8 P4 S
  530.   }* r8 m, }8 Y% g' m6 q
  531.   HANDLE mutex;5 I0 |/ j- z, @, R
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    . L* f" L) q) h- i/ T# P# R
  533.   {
    3 ?$ ~9 ]8 `: m6 p7 x3 X4 R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# K0 ~, Q" V4 q* y0 [8 p* a
  535.     {: W5 ]# F5 h; J  K) E' x
  536.       CloseHandle(mutex);1 ]( I8 u$ L. k) ?
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    , K$ z# V" b$ Q1 q$ x
  538.       return TRUE;
    ( ~8 o, h& I7 U3 F- z0 a
  539.     }
    / F7 l( q' I; m9 E7 e1 m
  540.   }  % w& f, E. v6 p; @( b6 w/ }0 t
  541.   CloseHandle(mutex);
    3 F" \  S: C0 `0 {

  542. 5 Y' S% B4 H' H1 ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " i/ K; w# q- k4 E9 `

  544. / Q- L+ K, c- ~  m
  545.         AfxEnableControlContainer();4 {. _; V+ v2 J; o* I
  546. 2 [$ r, R5 M' b
  547.   bCanUpdate=FALSE;
    , ^8 E1 c5 P) ]2 |3 `
  548.   dwStartUpSteps=1;
    / [# T7 h1 W4 W: `, U
  549.   dwProgramState=AP_NOTHING;" g( w$ O8 z' a! w# P; N: _

  550. 8 Q8 o4 k2 P5 Y# _6 ?+ F7 n9 t1 {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! M0 R) u' R8 E( j- G" H) P# A

  552. - E: K- A  J. Y
  553.         // Standard initialization5 m# l* W8 U3 }! z
  554.         // If you are not using these features and wish to reduce the size* P* f- s  ]9 D( q$ o+ S4 a( H6 _
  555.         //  of your final executable, you should remove from the following
    0 |" Y0 F- o- R$ ?% A2 H9 ^! r$ _
  556.         //  the specific initialization routines you do not need.
    * P; O/ l8 [' \5 D; H( a
  557. : J: r, @3 a/ s6 l8 d
  558. #ifdef _AFXDLL- D2 v9 {" p' G: E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL. D' y; a! n) K3 k5 g7 O. S
  560. #else, v: S$ E' |: d/ z9 n) d, j
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " j' f8 y/ W' _) k7 ~8 K+ h
  562. #endif
    3 }$ R7 V( j% E4 [( Q, ^" x
  563. 0 M1 j/ U% C6 I3 R
  564.   dlg=new CRevAppDlg;
    % y' P  g- ]7 S3 {) H2 g) I* ?
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * e* r: A! {! o0 z1 D# P8 R( H
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( N6 u9 q- ~: @6 W% |, o
  567.   m_pMainWnd=dlg;
    " H: z( D( M: k% E

  568. / Z4 \, t" `5 L, f" j9 D
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! W" S, ], k5 [7 q4 B

  570. % `* _1 \6 g9 e; x. }5 G
  571. //  GdiplusStartupInput gdiplusStartupInput;- H/ K5 P1 R" O, O
  572. //  ULONG_PTR gdiplusToken;& J* c$ a( h5 k. a" |: u- g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    4 @- x; F5 U  T3 [, z" S% h

  574. ( F. E+ V$ |% Q6 F
  575. //        CRevAppDlg dlg;! _, Y/ E. {# k# N2 H$ a0 g3 i' ?+ F4 T
  576. //        int nResponse = dlg.DoModal();7 ~$ N4 f7 x2 F) Z0 ]1 v4 s) t: ~
  577. //        if (nResponse == IDOK)
    7 V9 _( t3 a) L+ T0 f
  578. //        {
    - J( R9 c/ N' j1 H9 T7 C
  579. //                // TODO: Place code here to handle when the dialog is
    . ?7 y7 S3 x5 V) F, A
  580. //                //  dismissed with OK5 U# Q) n- h* O- y0 D
  581. //        }
    3 ]1 G$ t* H+ c5 H: L6 M
  582. //        else if (nResponse == IDCANCEL)1 [' `  ^- G5 o, L1 m8 m
  583. //        {* i" W! R; K: Y1 t4 n" F
  584. //                // TODO: Place code here to handle when the dialog is
    + Z# y# ?! `# T  `0 Z) o& t
  585. //                //  dismissed with Cancel9 x- ]% b, K. |$ R; X
  586. //        }5 e1 w/ [0 {/ V7 b
  587. - X; W" d& {! P. y+ W' u
  588.         // Since the dialog has been closed, return FALSE so that we exit the% I& [/ X& p7 v
  589.         //  application, rather than start the application's message pump.
    6 q5 W, n+ W: _. w, \6 H
  590.         return TRUE;# v0 O. R3 d4 k6 ~. o
  591. }
    6 ~' g2 y) A$ |3 x( c1 o

  592. 6 A- p( I, W; _3 ]/ ~$ a# {
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 M2 `, i1 G3 j9 v7 \
  594. {
    ( J. w3 G& p) _& `" J
  595.   int i;
    9 g6 h$ w2 B3 Z' }% J; @8 \. I
  596.   char *szRet;
    * a; K; A& A  l6 ~

  597. % K7 f) f% _% j7 ]5 Q/ q# w/ Q
  598.   if(pSource) { itoken=0; sztoken=pSource; }+ K$ k5 _( |& L2 w2 ^0 h: h
  599.   if(sztoken)' b6 p/ J1 X$ l" I; Z
  600.   {
    ; D' ?" e+ `  @/ Z
  601.     szRet=&sztoken[itoken];# b. G8 B4 N3 x' E/ @
  602.     while(sztoken[itoken])  D8 x; m" @  A& J
  603.     {3 d1 k  d) c  g7 W
  604.       for(i=0;i<(int)strlen(token);i++)' ]: r: u4 q! A* {, \
  605.       {& h& L  b  y: [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    1 Z- t4 W9 A$ u  [# }7 o2 H
  607.         {3 _8 o  n2 f- [5 _6 ?
  608.           sztoken[itoken++]=0;
    6 L8 r- M! v4 D1 e9 L, z* _
  609.           sztoken[itoken++]=0;# _. H) M: N4 p. q, ]7 x2 ^5 ?
  610.           return szRet;
    ! t6 {0 o5 Y4 E( j- l
  611.         }. B; H4 F$ h1 ]
  612.       }& E7 P; `) r" i; |. _: Q/ T5 l
  613.       itoken++;
    9 c9 f5 ^% {$ s) i) R, n: Q
  614.     }
    4 M' I6 s" n" R% }( Z1 }% D
  615.   }
    9 z- T- c* f* z/ X
  616.   return NULL;
    3 ?* x* l/ R: n6 k2 L# `
  617. }9 S6 {3 j  ]" h& s/ i
  618. 8 _' ]1 S" `4 e) `' |$ n  A: g
  619. void ProcessProc(long Total,long Current)
    8 P4 E: C6 _- k8 p1 p# i. s  k
  620. {5 w: O/ B: d+ K# [. v
  621.         MSG msg;
    0 H* ^2 A- K* Y) x2 f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 h& N4 i& T  T2 I
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    - x" B) [0 `9 |( k2 \, q. \
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! ?% l; T+ a. J) m1 `  G0 x
  625.         {- `9 v$ n/ h( {3 G
  626.                 if(!GetMessage(&msg,NULL,0,0)); X) s8 p1 }: @+ s8 m
  627.                 {
    , h/ q; X* w" y# h7 Z
  628.                         return;2 Y6 a  l! i- u+ D/ h) h9 h
  629.                 }
    + ^( D3 N& s& F( P! x6 Z) v
  630.                 TranslateMessage(&msg);" o8 B' S) l1 U3 W' H! r2 H! c9 L. f" A
  631.                 DispatchMessage(&msg);. m& B6 R0 k7 r" `1 w! P( d
  632.         }       
    ) f. V- c/ V9 T0 O0 U
  633. }1 p9 _7 j5 i+ c/ R

  634. 6 I7 x2 b- {) X& b/ z: ^+ X, A! b% D
  635. BOOL bFirstChar=TRUE;
    % b: s8 G9 g: ~" s6 y* x& J4 t8 E
  636. ; W% d  y8 f" \+ f
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    - J/ D. s. S* C6 g$ e
  638. {7 f1 t* x: d1 G  ]" {
  639.         // TODO: Add your specialized code here and/or call the base class0 J1 H  a7 i0 e7 x5 n6 s
  640.   switch(dwProgramState)
    . V& w' e2 `  Z: K$ t
  641.   {
    0 n- o) ~8 G6 O( X" I* n. W0 ?
  642.   case AP_NOTHING:
    % @, m6 j- B2 w" ^! @
  643.     switch(dwStartUpSteps)  O& _9 S( w/ G4 X
  644.     {
    ) G$ z6 R6 m$ q% U$ n0 y7 M+ E7 }
  645.     case 1:
    2 p, }0 F% {. p
  646.       {
    * u+ U. `# t, j# F0 t
  647.         int i;
    & i* S9 @, G$ O. ~. o" K
  648.         CDC *pCDC=dlg->GetDC();
    9 v& d" z( P# m4 T
  649.         HDC hdcwnd=pCDC->m_hDC;
    ( O$ \/ p4 L0 Q5 {! h7 @$ M
  650. //        Graphics graphics(hdcwnd);' S, r; m" Q3 g6 o0 l: M& e& h' J& X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    , F/ C0 r5 |6 R6 n
  652. //        INT iWidth=bitmap.GetWidth();% X2 M0 M' n  g
  653. //        INT iHeight=bitmap.GetHeight();
    : |, ~' b) r$ D  K7 j* F, |1 m
  654. //        Color color,colorTemp;' S3 |! N5 ~( z) v: q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)/ T+ _; d& n* y8 N$ P+ x8 k2 D# m
  656. //        {
    . @, J9 Z% e3 P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * o& x$ w9 `" F( P
  658. //          {
    & y1 @2 R  ?2 ]( |+ X! V5 A- b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);3 Y- n4 l0 T& S; `3 ~8 o! l, h0 P
  660. //            colorTemp.SetValue(color.MakeARGB(
    # \& |) B6 O) R* m0 P" O- p. I
  661. //              (BYTE)(255*iColumn/iWidth)," r2 u5 k' d) W3 ]" v
  662. //              color.GetRed(),6 O: q, J# S$ v+ @4 h
  663. //              color.GetGreen(),
    - R( K" r2 h) M* o5 Q, t8 i
  664. //              color.GetBlue()));+ x( D9 P3 F* \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);  g* L0 Y: h8 n# v+ s! D$ i
  666. //          }! W' x5 l3 {4 Q! N8 s; _* X
  667. //        }
    5 o: r9 c8 y. G& Y/ f
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    + m; v+ }5 t2 S0 O& H
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( ~8 Q2 ?/ ]1 P5 \8 g
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    8 U7 I  L8 F3 X5 `, e% m+ D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 n' c, ?2 o) _3 Z; c
  672.         for(i=0;i<240;i+=8)
    * U0 P* U6 {& P
  673.         {0 O, V1 }1 k- H% C, m
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 n8 {% p: E# d2 a& o) s
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  P/ d/ o. Y9 u! ?  Z6 B# n
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! T6 h3 x  b7 I* D$ W, s
  677.           Sleep(33);
    & g3 I  A" J. y2 w/ ?9 [5 y
  678.         }
    3 {) z! n0 j, F/ h2 D) M
  679.         Sleep(1000);
    # F9 v! ]  P/ @7 G4 V5 b+ l
  680.         for(i=240;i>0;i-=8); p  }: D, P" d) Y) X8 R* s$ H4 B' p, j5 k
  681.         {
    : J9 @! J" E, p' k9 H+ @( D5 u: a
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);; ]$ V6 f+ {$ f: C  e# O2 b+ {( T4 z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 H: |/ p& p. D* q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / Z6 D' I+ K5 o, V& z  V4 P
  685.           Sleep(33);0 D, J8 Q5 e  F) c! m
  686.         }. W$ D, Z5 I+ \6 t: U" m. b
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * c+ j- B0 ^- I5 D+ w3 U3 f' A
  688.         dlg->ReleaseDC(pCDC);- i, E' M4 Q* U* F3 R* L! R$ W, d
  689.         DeleteDC(hdctar);
    ; w& P7 Z# ]# G) [- B/ M, A
  690.         DeleteDC(hdcsrc);
    7 j) @' o0 Q8 {* C
  691.         DeleteDC(hdcorg);, d5 S1 p" g# U2 f2 F' v6 ~1 N! [
  692.       }1 k  [. ^& ?6 L: G% P
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);7 q2 B  s4 z. ?
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");$ P9 u* }& j- a9 l2 U9 M, v4 R! d) Y
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    : `2 M# }5 }3 ^
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    0 @( w% v3 a' W6 x5 C- Y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . F, ~8 c/ A7 Z' }3 a
  698.       if(!Dn.Connected())
    % q2 m$ q  M4 r5 P: B
  699.       {
    % O2 k9 Z9 v! o) `" @: h" E/ T
  700.         dwTotalFiles=1;: N$ d" M5 E6 A7 T3 ]( n% q/ i
  701.         dwDownLoaded=0;' J; G) i7 W/ w2 h) `3 ^8 W& a
  702.         bSilentStep=TRUE;! w+ L; ]3 L5 \" ?+ B
  703.         bCompressed=FALSE;
    # G/ L4 v& z7 o: b' w, n( X, W- g% q
  704.         strExtLocal.Empty();# I5 ^2 X! T) Q; t8 I( Z
  705.         strFullName="readme.txt";2 c, l" d. v: ^' _$ v0 q
  706.         dwProgramState=AP_CONNECT;: k$ F' k" r# @1 `
  707.       }
    3 M9 [* l4 L' A( ^9 S7 J
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();! B1 x( ^0 M* g, ?( f. k# |
  709.       dwStartUpSteps=2;+ M8 U5 @" F8 l5 c2 ^6 M$ Q, A" l3 m
  710.       break;: |7 `- D6 [! |1 D$ b
  711.     case 2:8 \/ N  C* d  B. J* E0 d
  712.       {8 d4 w0 M& J( N, A
  713.         int iEOF;
    1 ]' s0 {, E+ A
  714.         FILE *fp;: {6 w1 t9 }% Z) u0 V* U3 m% e7 r
  715.         char szString[512];/ t( j, [' F- }" e' s! l1 Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    5 Q3 {! e/ R" ]- O( }6 o4 l
  717.         if(fp)
    ; \# J1 j2 i# e- e
  718.         {8 l+ F2 ~# f$ }) `  D
  719.           do: a& P& C: D1 t$ p3 l" B
  720.           {5 F7 {4 g  \, x! L
  721.             iEOF=fscanf(fp,"%s",szString);3 e* u/ ^1 E4 t$ F
  722.             if(strlen(szString))2 U9 f7 e8 ~" L) c2 U$ }6 A% c
  723.             {6 c, x# e% U4 T" K& l
  724.               if(bFirstChar)
    , V9 a0 ?" K& q/ p; v- `0 U# A
  725.               {5 G: L. N, a) F  Z+ Y
  726.                 bFirstChar=FALSE;
    ) Q7 }1 ?: o' o4 M0 B5 @0 f9 S
  727.                 bConnectIsBig5=FALSE;
      w1 V( |9 Y/ l( N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;5 u- ~8 x* Q& g4 U" {! v( A
  729.               }1 S* @& q% w, Q4 K) @
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 S5 h0 o- D6 ]
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! u7 ^- o: x1 n* h
  732.               dlg->m_ListText.AddString(szString);
    & c0 U! O2 Q1 }* s0 f, I% C9 f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' R' F$ |6 c+ w4 Q" k
  734.               *szString=0;
    5 y* {7 B2 D8 ]* I0 R
  735.             }
    9 y- q: j/ v1 ?/ Y( `
  736.           } while(iEOF!=EOF);) k9 [# D1 z+ q3 z$ f" V3 q2 C
  737.           fclose(fp);' `/ v! d4 `% i+ a5 ?9 N7 C2 a
  738.           unlink(".\\DownLoad\\readme.txt");
    + l; ?4 y, V; Y, j& y
  739.           dwStartUpSteps=3;
    " t/ O0 w  o) p$ g4 k
  740.         }
      C6 B: J2 G9 V( X+ ?8 N
  741.       }) r7 U' a5 C2 M0 D
  742.       break;
    8 B- ^3 c7 Q$ |; `" z9 I
  743.     case 3:& r4 t0 m; z1 m  X! j$ M  H" P
  744.       if(!Dn.Connected())
    + h$ \7 H$ T# P4 Z% [5 P0 t
  745.       {7 n7 |3 f+ V. O, k6 K% w. U
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 c0 V- o5 x# F
  747.         dwTotalFiles=1;
    * V  H& ^) v8 @+ X" S: z
  748.         dwDownLoaded=0;
    ; f5 n* W  I2 D) `# m
  749.         bSilentStep=TRUE;3 a0 l& y+ t+ @6 ?4 k, K$ p6 M
  750.         bCompressed=FALSE;
    * r) v, _- C$ S: Z) v' P9 T
  751.         strExtLocal.Empty();, o# s9 A: d* S3 y5 Y8 `, H
  752.         strFullName="checkversion.txt";$ o% q/ @  h! I5 \4 D6 t. D/ r0 `
  753.         dwProgramState=AP_CONNECT;
    ( E4 d& A( f; b0 i$ F7 v
  754.       }
    " X! t: I0 c1 k7 o. y! M
  755.       dwStartUpSteps=4;
    7 E% t) n3 N6 u2 V7 h
  756.       break;
    9 k& f9 [7 n& j' m' K# f3 q' y
  757.     case 4:
    ( w1 \6 F1 Y# c! u, E0 A
  758.       {
    3 ^2 `# ?" s7 `$ ?3 }( g. @; R
  759.         FILE *fp;
    ! O+ y) a' D. o* D& {3 n2 Y
  760.         char szString1[128];/ r) |: W, S% q  {' @6 r( Q2 N( d  {
  761.         char szString2[128];
    " ]" a+ O, n' C
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");3 D' m, ^: `& [# K* c
  763.         if(fp)  W# S7 y( S/ o  \2 [
  764.         {! {% L2 U% d  Q4 t6 `' W2 |4 O& y! ^
  765.           fscanf(fp,"%s",szString1);
    ! H2 \* @( {4 X" W2 M
  766.           fclose(fp);; u5 F: ^  _5 N+ ^" [% [: `7 L
  767.           fCheckVersion=atof(szString1);
    / T2 y1 y0 q; ]' ^9 y; w
  768.           fp=fopen(".\\checkversion.dat","r");
    0 G) s4 u1 d1 B* R: I( V1 A
  769.           if(fp)
    8 j4 z2 W( K( e: d, z
  770.           {
    5 o4 ]4 ]1 s! b
  771.             fscanf(fp,"%s",szString2);7 k8 Y6 h" }* I8 r+ H
  772.             fclose(fp);
    # {2 I1 \* U, }0 n7 x) ?& {6 _' Z
  773.             if(atof(szString1)!=atof(szString2))* g' p; ~8 m- k+ A
  774.             {
    # f  E3 b: X' I6 L( [( c/ k
  775.               if(!Dn.Connected())
    % n1 l: ?" F1 h+ x& Z+ c0 a( {( Z# W
  776.               {' m3 a& y# M$ Z- j; J2 e
  777.                 bFirstUpdate=TRUE;( m9 u7 D- W! z1 s3 D
  778.                 dwTotalFiles=1;8 e$ {, z" z! R5 {) }
  779.                 dwDownLoaded=0;3 E; K  S$ U2 N: I8 S; B7 S! a& c( A
  780.                 bSilentStep=FALSE;( R. n# t0 B0 Q3 ]( d& ~
  781.                 bCompressed=TRUE;% C' Y2 q/ B: Z, N. ^
  782.                 strExtLocal=".\\DownLoad\";
    - ]- \, \$ c4 Q+ h9 e
  783.                 strFullName="update.txt";+ @% \$ q$ p$ Z( o7 b7 f- O
  784.                 dwProgramState=AP_CONNECT;
    ' i  i/ A6 b3 X( e1 G: E: w5 {+ e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    7 y  T" b0 j& N  n
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 [# Z2 U' Q* Z7 x0 k8 E6 H( j
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 E3 R: @- k. ?4 k& @

  788. * J0 B' g2 [# \4 U' Y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 a! c3 N, P0 i9 g
  790.                 unlink(".\\DownLoad\\checkversion.txt");+ V9 s9 x3 |* w3 ~6 d; n( {; Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) n3 Q( o7 ?& G0 d
  792.                 {3 B4 n% p/ \1 ?; @& c0 c% l! C( b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");' w7 R" f8 R- N2 \+ o7 U
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    " i( p  I( u  I( M, l0 a+ D
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");9 Q- h0 T' R$ z
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. _. W0 s# I* h% ?: a3 A
  797. 8 W0 A, R) p. e# ]/ ?4 h+ ~/ c
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 s  E) L7 X. g4 x8 ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : p8 g: S7 I. C- y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");3 U" R1 ~5 t  W5 C
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; F! [. {- |9 Z2 V+ e/ t
  802.                 }
    , @3 N) B# N  Z& @
  803.                 dwStartUpSteps=5;' y# f* |- _! ]7 e
  804.               }9 w0 }% f% R7 q8 d6 M+ g
  805.             }+ F6 G4 ~& l  h) W8 M
  806.             else
    1 G$ R. ?& R5 o: s  I8 f
  807.             {
    . _; P; [+ s% O0 D
  808.               unlink(".\\DownLoad\\checkversion.txt");
    . l1 r+ `7 O: P
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) C2 |' _; S& z% f+ _8 G7 }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    5 U1 m4 L- |/ M2 h, x$ I9 J* N
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + M3 n8 d4 g* }# {5 q

  812. 7 ^; ^0 b) p+ W" j
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ^  ^& |5 c' P$ |: u4 z
  814.               dwStartUpSteps=99;
    3 k: o7 n# F9 }% k
  815.               bFinishUpdated=TRUE;7 d) z" T$ }- |1 ~& t
  816.               bCanUpdate=TRUE;
    # d7 o3 D; I, r6 F1 ]
  817.             }/ q% A0 k# M* t9 Y) F! R; g
  818.           }
    . J+ W: i; |) j) m9 |2 r
  819.           else. y6 G. Q; r! [4 P' x( g
  820.           {. s- M8 {. ~: n! n$ s2 o
  821.             if(!Dn.Connected())0 L5 |. R. z5 W8 E
  822.             {9 b  G# K; g' p  Z" W
  823.               bFirstUpdate=TRUE;
    % n2 g* v% P) T; P/ F& S/ [
  824.               dwTotalFiles=1;3 ?* F, J2 T4 C# J0 U
  825.               dwDownLoaded=0;0 M2 ^* N# @# W* ~3 m
  826.               bSilentStep=FALSE;" q4 x9 k5 \4 y) }- U
  827.               bCompressed=TRUE;
    % G$ h2 q( g, D- M* V! J; @
  828.               strExtLocal=".\\DownLoad\";: d" H0 _3 X! E3 c
  829.               strFullName="update.txt";3 O$ e+ g+ p) p- z
  830.               dwProgramState=AP_CONNECT;. K8 {8 [, r2 p/ G. I$ g. @, n$ P- w
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");3 J6 J7 f7 K9 e! x7 _6 x
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    , L7 Z& b/ M- B6 s) B* W8 k9 r
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - J4 J. O6 \# v6 O2 N- y/ ^
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 U/ v: [  @% S' {! o& X7 P0 S/ s
  835.               unlink(".\\DownLoad\\checkversion.txt");4 F& O" V& ?6 K# l3 U( u# G
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)- f# g+ J& w1 K: ^: N( K( v8 k
  837.               {# Q8 }$ E  a( ]2 h. O- a% Z
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    9 W( C  p' h7 h; |% n  {
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    1 c6 r' B) M# Z6 k
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");( y* ?3 w: `8 c: H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' O# I) z$ ]8 p3 k
  842.                
    ( h" `8 _( z" B! l
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ Y, v9 P! ^" B) Y1 i7 Z" W
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 H; s& B& u4 r8 E5 u3 }5 M
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");+ }. b; y0 H; P' x
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( F7 L; t0 P* Q
  847.               }
    ( t% {6 W$ G' X2 e9 T2 A1 k
  848.               dwStartUpSteps=5;( d# ~, L+ _+ u, X& d+ ?
  849.             }/ l+ w+ _9 U) k3 b' |
  850.           }
    & i' t3 ~& T. f: A* y
  851.         }, S+ ?- k  N0 i. v
  852.         else% k/ {+ ^9 }0 c# [8 }. i
  853.         {
    $ [! o) i5 x, ^2 q( W/ \! A( e$ D
  854.           dwStartUpSteps=3;4 S7 \1 W/ Y' g4 S/ ?
  855.         }
    7 z$ l( \9 ^* W( m0 H1 j2 a
  856.       }
    ; \- E, U" @; t+ y
  857.       break;* ~) Z) f- }) \) q! G. o" R
  858.     case 5:
    " a/ D% H" i. V7 @/ N3 G
  859.       {
    / C& j' j1 A8 B: f2 G4 n
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)3 u* |0 [3 S  x& B
  861.         {! w5 O2 @) }. h. \6 j* |3 Z$ `
  862.           int opt_overwrite=1;' W9 Z% O8 d, r8 `; A! D
  863.           int opt_do_extract_withoutpath=0;- c- Z) l2 S- J: H7 D8 q
  864.           unzFile uf=NULL;8 b6 |9 T+ T, ]! y

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

5 u7 j( h! C% z# o; _" M, M
" ]1 r3 ?! O; p2 F  N# H1 _4 C. }

評分

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