找回密碼
 立即注册

CSUpdate.exe源代码

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

, Z5 _/ y8 y/ N7 p# q# h+ f
  1. / RevApp.cpp : Defines the class behaviors for the application.. o; Z/ B3 X- I$ J/ d
  2. //% ^9 \1 d4 U( `. x
  3. # d* o2 k/ U5 C& F! e) X
  4. #include "stdafx.h") J! x0 l; E9 M6 {6 H/ {
  5. 2 l5 Y" i% z3 I" R9 R
  6. //#define UNICODE
    " `6 G& A( @' N' E) P# [
  7. //#include <gdiplus.h>. F6 P1 r/ G7 ^1 ]) ~) L
  8. //using namespace Gdiplus;
    7 N9 o' r, Q7 M8 j6 _% N. G' d

  9. / @: j" i  [3 R/ ]+ }0 S, b
  10. #include "RevApp.h"5 k% W! V: k0 J
  11. #include "RevAppDlg.h"5 ~( d! Z0 h2 N' s8 u
  12. % G' Z4 D! t8 P2 b4 P( v) M: X
  13. #pragma warning(disable:4786)
    7 v* J# U: ^$ ~* d3 B7 i2 U
  14. #include <map>1 {# Z! m. h/ A7 Y* ^
  15. #include <list>
      e, T2 n  ]2 ?- C4 E
  16. #include <direct.h>
      _2 V2 K" j" }3 O2 o$ V3 T+ h* h

  17. - y! ~2 q! N$ G" W3 a
  18. #ifdef _DEBUG" ^; x3 A$ L7 ]
  19. #define new DEBUG_NEW
    ( @( |9 L: H- R' S1 v4 V6 N/ S
  20. #undef THIS_FILE( v, z/ \$ O* _# c. y& I
  21. static char THIS_FILE[] = __FILE__;5 ^; S$ Z0 u5 h$ O
  22. #endif! c+ ]5 p% Y# O& d5 b& \( @
  23. #include "SkinResDef.h"% C) S7 g+ s7 O/ d" c  Z
  24. #include "ChangeBG.h"
    - V; {" W' M& ]! K" L& |4 j
  25. #include "AFXINET.H"5 `  J* m  H% t0 q5 L7 T' [" z

  26. % V( Z& m" F1 O$ [
  27. #define TRADITIONAL_CHINESE 0* i& P4 }- M2 H$ z2 C% g- Y
  28. #define SIMPLIFY_CHINESE 1# Q8 S9 B) E! i) e% K
  29. #define ENGLISH 2
    6 a- e5 O; K" F: q. K( q
  30. int m_iLanguage = ENGLISH;( T  @: `& a. w- U9 x7 g. J
  31. /////////////////////////////////////////////////////////////////////////////
    ( W% j6 W4 F& n1 W7 U4 j
  32. // CRevAppApp: x  V7 X2 j$ _7 [; D
  33. ! S& A# W* _7 e/ i( s
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! F7 v! I7 z$ ~1 N2 b8 k
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) H: W. K- z0 F6 Q4 S# _. C4 t' P) _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    9 a1 S$ d& A1 a6 P1 b
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!/ w! ~$ m0 G- \; t' ]9 R/ L
  38.         //}}AFX_MSG+ K1 ?% u9 a, r' E, J! p' D8 h
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# @/ k$ H# @4 Z. O, V# m5 q' k
  40. END_MESSAGE_MAP()% ^% d  f9 X* N% o: \* n2 ^$ b! ~

  41. - Z5 g8 S2 F# c' k1 ]
  42. /////////////////////////////////////////////////////////////////////////////
    3 w5 M( J& o) l/ l& G
  43. // CRevAppApp construction! l3 z! f3 w: w) `& c7 I; @/ z0 j

  44. 3 f+ }0 W, u& I; F, Z
  45. CRevAppApp::CRevAppApp()
    - Z$ t, k- E  G# R* @
  46. {
    3 c- A# N8 M5 j8 H* G, b6 T5 d
  47.         // TODO: add construction code here,
    4 |3 |% a" q7 g( _: V
  48.         // Place all significant initialization in InitInstance
    & w- g2 B5 G% @( N' {( A
  49.   bDisplayIsBig5=FALSE;
    + v7 N- p( E3 l; z4 ]4 D8 h/ N
  50.   bRestartUpdater=FALSE;. F9 E! W3 I) H# F' _
  51.   bFinishUpdated=FALSE;
    & J/ n) R. s8 h- C) E& z% I& r8 {
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    2 X- k$ h" F" `! t' R& q; d
  53.   InitChangeDataBig52GBKS();" y1 g9 ?- m, J' D
  54.   InitChangeDataGBKS2Big5();
    8 [7 z& q; Q6 I% R+ g" u4 F6 L  M
  55.         //  E7 C+ X, i) i0 t: ]
  56.         bClickRunExe = FALSE;
      H- d9 w: h: D9 z! s
  57.         //
    5 I8 E. L% S. ~  l
  58. }& L* j. ?  ]& i. Y9 G# B3 e1 d

  59. ' p& J* \6 O- _; m. |" R
  60. CRevAppApp::~CRevAppApp()
    0 u1 j* y! [) S
  61. {
    2 ~6 t1 i/ v* l; A6 t2 H' ~
  62.         // TODO: add construction code here,( e7 T/ E/ A# v8 \* B8 @
  63.         // Place all significant initialization in InitInstance
    - a3 j1 G: e% l0 r0 O& Z" s
  64.   EndChangeData();
    ! c! X$ N  a" v; F) {
  65. }
    # }- e9 b5 ]( A1 {( A; p5 u
  66. 4 h$ j5 Y8 {& f& W; Z% L9 W$ H: C- H
  67. /////////////////////////////////////////////////////////////////////////////& h5 ~% F$ a; s5 F% h7 [
  68. // The one and only CRevAppApp object
    2 D& y) d2 B* o1 t3 K0 b9 m
  69. $ J: c; E/ T. c' P. o" \
  70. CRevAppApp theApp;- b) N% J" m7 q( I& Y
  71. ) h( a% ]1 c# Z; K
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    " r5 F6 r  B" Q
  73. {% M9 D) E0 e' `# l9 H  k5 i
  74.   int iEOF=0;0 a. R& r$ V8 B* }6 c/ g9 _
  75.   char szTempName[MAX_PATH];1 K" Y9 R7 F! a$ N8 Q
  76.   *szFileName=0;% E( b+ X/ q0 G; I; G$ j, G$ _
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( W$ o4 [$ n. w( M$ N; }# F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')8 B3 h* j5 f: [/ F, ~4 c3 G- m
  79.   {/ K, k0 s( L8 T& v/ d
  80.     strcpy(szFileName,&szTempName[1]);
    5 V0 G+ P6 t4 x" V  ^& S1 f, _5 T' \
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 T( C3 N( J" E. \% j5 i3 e2 f
  82.     {
    ; Z7 E* E+ b; r6 O: o$ y$ [, X/ i
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ! q1 T; S$ v! F' o! V
  84.       strcat(szFileName," ");
    $ g2 S9 `6 O" B) j4 G; Y3 L3 U
  85.       strcat(szFileName,szTempName);4 w& a+ [; X6 _, r" u1 r- V$ }
  86.     }
    2 d9 R: q* e! ]) |# {7 k4 F
  87.     if(strlen(szFileName)>=1)
    5 ^" w" P0 T$ ~$ R
  88.     {
    ( T( F4 v0 o; R' N5 U* Z
  89.       szFileName[strlen(szFileName)-1]=0;
    8 I. F. Y  u* F6 H
  90.     }
    2 X' v! Q& t9 c5 [9 Q7 {7 g
  91.   }
    8 p% }, l0 R/ L7 G
  92.   return szFileName;& o3 n9 }. @3 n/ m! F
  93. }2 I7 X8 D! f! J* p3 P3 H% ^% d! |
  94. 0 v4 c1 m' t% }3 e+ x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! ^2 z4 N$ c# L2 z/ Z: N) y8 G' V
  96. {
    " F. `4 |" L, n0 w; T  S- I
  97.   FILE *fp;
    " u% [) h; F" C# v6 B; l1 @
  98.   char *key=NULL;
    3 Y: _3 B, s  I" Y# E/ X
  99.   char version[MAX_PATH];
      ~. J* p; q9 X3 w7 ^3 l0 ~, ~
  100.   LPUPDATEFILE file,olds;
    % s' C* @, d& A/ D7 o1 G
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 b8 V% q) c$ ^+ ?! W

  102. , O1 h1 Q5 E5 S- v+ [( B/ l
  103.   UpdateList.clear();
    . Y! _3 Y; h2 K- z* L. g) c
  104.   UpdateFile.clear();
    : W& Z+ k  c2 r1 o" F. S6 G7 _" S
  105.   if(GetFileAttributes(filename)==-1) return false;. @- V3 `9 `( s" r
  106.   if(!(fp=fopen(filename,"r"))) return false;
    4 V! M+ u) M6 T7 z! c
  107.   fscanf(fp,"%s",version);
    8 b- Q% P$ h+ W. D. b8 Z1 X. _
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# c% V  C- O, l1 {4 w9 L$ g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    : [" S1 z% |: H# y! |. t% R
  110.   {+ w3 z. C4 C) t6 }) m# _
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . i- f) E& p7 x; H
  112.     fscanf(fp,"%s",file->path);5 {' e9 ]* A& g! `& O8 K
  113.     ReadFileNames(fp,file->file);
    + P' @# o" H# h, h* H) v
  114.     strcpy(file->full,".");1 e/ w/ m# H( J4 @
  115.     strcat(file->full,file->path);
    ) Q* u2 G2 D0 m, C& {
  116.     strcat(file->full,file->file);
    ; R* `) U* r% u, r1 q& a
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())7 d, s& V  D1 M4 O& U
  118.     {
    * i4 j" d! _/ O. }8 V
  119.       file->vers=(float)atof(version);; X/ a% I9 R% t! {$ ]
  120.       UpdateList.push_back(file->full);; a: g- }1 k* P$ H% y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 C& ~8 _) R: G6 P. M$ I
  122.     }  _1 _9 f- E+ v8 y  R8 H5 ^& j
  123.     else
    2 p7 x: U. q0 N- Q6 `, F
  124.     {
    * f5 _% M: T0 c  R, `8 s9 y
  125.       olds=(*p).second;
    * s+ M3 ?. m4 e0 Z1 Y
  126.       if(olds->vers<(float)atof(version))
    3 C& G8 q- {: l0 m6 ~2 \, G2 w# A! W
  127.       {
    8 D; w% v) l+ J% T' L& [7 v2 t3 Q
  128.         olds->vers=(float)atof(version);
    & j9 x8 l4 D7 A
  129.       }/ q1 _) _/ Z( t6 j- m
  130.       free(file);
    + {1 ^4 e! F% h2 Q% K0 J+ U0 {
  131.     }9 ]' n; z( `! l) e* x  ]
  132.   }8 E9 _9 o* c! @7 A0 n% @2 g
  133.   fclose(fp);+ g  k- G2 T& {7 |% k9 k, j# ^
  134.   return true;
    : a2 s6 y7 |' p$ Y
  135. }/ I9 G- l9 ]0 l/ d% Q& _& t
  136. 9 W5 h' A' j  W1 |$ [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)% V* k, ?* s6 ^5 V' u5 _- o3 u
  138. {- w8 c+ J& x4 \% b7 b" C/ [8 T- Z' L
  139.   TCHAR  szFull[MAX_PATH];
    + a* c3 L+ P9 N9 F* C# Z3 L- O7 J
  140.   TCHAR *token,*inter;1 N7 U! w4 ]( U; Z( ^0 v, o
  141.   *szPath=0;
    & Y3 k3 n' V0 s% M0 x( e+ L# ^
  142.   strcpy(szFull,szFullPath);& c3 ^0 e- c  m3 C) X
  143.   token=strtok(szFull,"\\/");
      ~6 `8 \! P! Y  b/ Z' V
  144.   inter=token;
    $ p4 q% E1 z$ P2 O4 B8 @
  145.   while(token=strtok(NULL,"\\/"))
    4 ?- U; r, J: E, V/ ~* ]
  146.   {
    3 [6 D- X8 _/ P% Z% k1 x; l
  147.     strcat(szPath,inter);0 w+ `( P+ y  l3 k
  148.     strcat(szPath,"\");2 a8 }* H9 {1 o1 A! Y! \' l# H6 v( s
  149.     inter=token;, d. f* k. \1 Z# [
  150.   }
    ; o, P, m4 V% e- f
  151.   return strlen(szPath);
    7 q& [0 w( _5 y# q& u- d% K
  152. }+ j& [4 W3 R4 m
  153. + a) `: a  y$ q) Y. r
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% B7 A# O- P0 H3 ?; I" E) s
  155. {
    / H. H1 s7 x* h9 k" M
  156.   DWORD attrib=GetFileAttributes(Target);
    & G( m& `+ K: c& U- F
  157.   if(attrib!=-1)
    ; V- f% ~; \- n  {
  158.   {# v* c9 D" A$ b% T. X2 s9 V
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* L8 A6 I5 }' }% o3 [& h$ I
  160.     {
    6 h- w/ a+ }* x3 W. L) k
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & E1 ]; n- R. E) U) H8 L% Y
  162.       SetFileAttributes(Target,attrib);
    1 X" c0 D& Z5 L  {, I7 p  u+ U
  163.     }6 \9 i: i( I7 }' R) k  S4 N
  164.   }
    $ J2 z' Z$ `8 g+ Z# }+ {4 t% o
  165.   CopyFile(Source,Target,Erase);# G3 X- v8 J. p2 j: A& K
  166. }
    3 u! p0 U5 I4 o" @9 \3 j( H# E
  167. 8 P/ h2 Z% G& u* M7 [- K2 o
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)" N8 n, d$ A. n* j
  169. {
      A' V6 ~) t# w# H+ X) J3 d
  170.      FILE *fp;
    % a/ g; R- P) H# \
  171.      char  szBuffer[8192];
    0 J4 F% d$ ]! ^
  172.   va_list  argptr;
    ) N$ x& ]1 r* z6 n
  173. $ K7 V8 ^! l/ f5 W' M, m
  174.         va_start(argptr,message);& ]. I" I" {, O* M
  175.         vsprintf(szBuffer,message,argptr);6 j9 s* ^2 Q5 Z/ [9 j9 [
  176.         va_end(argptr);' p7 b- D1 {! l, G! w
  177.   fp=fopen(FileName,"a");, n$ N( [5 x6 z  b' Z
  178.   if(fp)
    - A0 u5 r% D+ }  G1 b& T
  179.   {
    . x* Y! [9 p% N8 J0 G
  180.     fprintf(fp,szBuffer);7 v" A' x9 M) r9 T9 X
  181.     fclose(fp);- i8 J' S5 ?9 l2 M% I/ c
  182.           _flushall();! n2 K! O" d( O# [% L9 Y. A# g6 ]5 I
  183.   }
    - _, x+ d' N3 ]7 r! i; g
  184. }' |1 y4 _' v; {9 m( p- b+ S

  185. - F: r* s( p1 N; v
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    : S- x( H! J6 c* U2 d
  187. {: V' O$ }3 w8 z! f1 K3 I- W
  188.      FILE *fp;
    8 ^. a3 E: n# K3 x) V# ?" K
  189.     DWORD  attrib;
    9 N6 h) V4 ]4 A- u3 s
  190.   attrib=GetFileAttributes(FileName);
    4 ]: h" u- b3 w7 L8 f
  191.   if(attrib!=-1)
    5 {& t! ^; `' `5 B" d
  192.   {
    * K* k6 \5 A% r  [0 _" a  I  Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    4 I2 a4 T. B8 D9 @# }
  194.     if(!SetFileAttributes(FileName,attrib))) |: V/ K/ m/ [. l' R0 l; N# _
  195.     {, B; f* |2 K2 |0 [
  196.       return FALSE;$ i- s9 y8 G5 C" v0 o3 s7 k8 |: f
  197.     }! L; h) o/ _; |$ H9 [# ]
  198.   }3 Y) p& h) z8 H: w/ N% {+ R% d
  199.   fp=fopen(FileName,"wb");
    9 @% _9 {# d$ K2 O) G; t
  200.   if(fp)
    8 e- @9 d  `, ~# \% Y) T
  201.   {3 x. K5 z. X$ U) l2 W: g8 O
  202.     fclose(fp);) O  {9 n  f2 [* \# |! o
  203.   }
    3 u8 V4 Z& C9 w
  204.   return TRUE;  H, q& b6 v- d! z
  205. }6 x/ c! m  q' I. Q+ z

  206. 8 C) l- o8 d! s$ P) k0 ~
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    9 v$ V1 h) [" |" u0 @5 ^3 E
  208. {
    ! f6 n5 ~( r' o- P0 v6 n
  209.   char filename[MAX_PATH];
    6 d2 m' |6 H( P- }  ^
  210.   LPUPDATEFILE file,olds;
    8 x# H! \$ B" L( Y) b1 `
  211.   std::map<int,CString>::iterator i;
    8 A+ K, p0 M+ E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;" b% Y8 ~! {3 i7 E+ R
  213.   std::list<CString>::iterator l;
    8 k6 [) ?8 i4 H3 N7 C4 E

  214. ; S" |( C) @: X
  215.   if(bFirstUpdate). q3 V9 H) r7 [( {% ?0 W/ t8 L8 U( {
  216.   {
    : j$ G$ ?' _7 \6 O$ p  z2 r5 L
  217.     dwCurrFile=0;2 n9 {9 m' k1 H+ G9 X
  218.     bFirstUpdate=FALSE;
    . L7 D/ r. k7 Y$ T( Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & e$ `- j1 v2 v" Q( a% r' h
  220.     {
    ; c9 i3 M/ }5 _0 O: |
  221.       dwTotalFiles=UpdateLocal.size();8 t6 p+ N6 C0 B! ~+ O/ T
  222.       dwDownLoaded=0;+ k- {+ L5 x8 j
  223.       bSilentStep=FALSE;1 o/ `2 H% k' D
  224.       bCompressed=TRUE;
    + Q! P6 n, s+ \  u* \/ Q
  225.       strExtLocal.Empty();( V# Q- v' T) u/ l% k
  226.       strFullName=(*i).second;
    ' [4 y; E( O7 F8 ^, w* F" _. G/ z' N
  227.       dwProgramState=AP_CONNECT;
    , u; h$ j6 y/ F7 @! Z
  228.       return TRUE;
    4 R9 G6 W0 Y9 f5 v- \# b4 Q1 M" b
  229.     }( g; M2 ?! N8 G6 j. Y) i" `
  230.   }( Y; B( ^8 t( T9 H  _
  231.   else if(bRestartUpdater==FALSE)$ v0 t' [  x* s: J" \9 D: z0 s
  232.   {# P2 z# h$ L  a- S0 u/ f/ r9 n
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    % s+ r$ U# V  o2 G- t3 c
  234.     {5 {/ H. d* z) n4 G$ Z! b
  235.       file=(*p).second;
    2 {& z7 q3 b$ e0 d% w6 w3 G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    : A$ |- n# @/ [, s
  237.       {
    0 L* S0 B" ^4 a( ~! w. Q
  238.         olds=(*p).second;
    ( w6 P1 s% S/ E& e7 S+ Z- f5 a' u
  239.         olds->vers=file->vers;2 c% L: V) x6 C; @* h
  240.       }
    $ L* }2 q- x! \
  241.       else
    3 ^4 b, M; z9 ^- T
  242.       {2 J/ H$ t4 U  I6 Y2 k$ r% _
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 K9 c9 x* Y. M6 n$ D7 S3 [7 f
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 f8 P" q$ T! B$ L# n* q5 [
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));6 [+ k7 a4 ?3 M4 T- E
  246.       }
    1 L8 d0 [+ |! o2 R& p9 T5 Y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
      x; y+ c4 e1 ?
  248.       sprintf(filename,"(%s)",file->file);
    4 \: x& g) `) _& r$ d) _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + O" r# h* @( P% W% P3 A
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }& Q2 e% M. ?/ N) a' g- {
  251.     }# K& o% O" h. G1 ^) s
  252.     dwCurrFile++;" z9 S" G# m+ O2 ]* J: i- _: t6 q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 B) c7 c! E& g( j9 t! V1 }
  254.     {
    ( E8 J5 K' n0 v  g2 Q/ w& O: W
  255.       bSilentStep=FALSE;
    4 m* `9 ?" ^8 y) ?- j  @( ], P& E- @
  256.       bCompressed=TRUE;7 d5 G( l& S' P7 G$ L, J2 k
  257.       strExtLocal.Empty();/ f6 u$ J$ |, \* H
  258.       strFullName=(*i).second;; m3 ]' A$ \" l" f9 _5 o
  259.       dwProgramState=AP_CONNECT;( u3 R. g) O; p2 l& j) b! B
  260.       return TRUE;
    5 b1 l# W+ B- i" g
  261.     }/ h! X* O+ P1 u  J
  262.     if(!bRestartUpdater)
    ! j+ Q& H3 }% W* F0 r- y
  263.     {
    % b, Z4 c' K, m- _6 e, s/ r, T# [2 ?
  264.       int iCurrSize,iFileSize;
    3 _  U( G: p  A! j- ?1 j2 s8 t
  265.       iCurrSize=0;
    ; [; p& c5 @5 e. [9 E$ u
  266.       iFileSize=UpdateList2.size();: h# J% f& Q5 I, p+ h0 e. ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");( r7 g2 Z' k% @" b9 y( b6 O
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 D3 V8 {/ O3 l$ L" O
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");( r+ P* _% R9 |1 _  p8 d- O5 Q
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 q/ _# S2 z* i3 B9 `/ k
  271.       Fclearf(".\\update.dat");& D' I- s! `( g' v+ O' B
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 S' F" E0 Y0 j& Q2 l1 x3 M7 p# m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    , i# G6 c1 B/ Z3 c- I' ~8 R
  274.       {
    6 L" M& Y3 Y% U7 C4 f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())$ R+ A" _9 r9 p2 w1 ^
  276.         {
    - ^. N; d, s" j8 ^; Y
  277.           file=(*p).second;
    / U3 ^$ \& K/ J& m3 [" t& t( Q2 _
  278.           sprintf(filename,"(%s)",file->file);" y# E& [$ j* g% ?: ]5 G7 C4 ~6 Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * [  L) D* C- k7 e; S
  280.           iCurrSize++;
    . T  z3 f( W9 ^& I9 v* p
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 A9 c4 S! J% K, F, L2 |' D
  282.         }  Y; C% t& s' O: I- m7 m  c
  283.       }
    ) i) b6 l/ N- ~
  284.       unlink(".\\update.txt");
    6 [! J2 F' M! j3 N
  285.       unlink(".\\update.tmp");
    ( u, b8 b1 B6 t6 o% @/ O
  286.       Fclearf(".\\checkversion.dat");
    4 J5 y5 l( i# \* ?; L
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    6 D. I: x8 G! Z) r- _$ o; ?
  288.       if(UpdateLocal.size())! t; k4 m* w' t6 Y+ S
  289.       {
    3 V3 g. l' W1 F5 p$ {' r
  290.         UpdateLocal.clear();
    # I  h+ i& A+ G1 v/ t
  291.       }/ O( d2 m  k8 A/ _' Y
  292.       if(UpdateFile3.size())
    9 F' w* S( g) _1 q' Y7 E
  293.       {8 R% I/ g& X2 ~( W
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); y7 [' @* n" W0 x4 V" F0 O5 ]
  295.         {' A/ e% m* W% Q0 D1 m' [5 Q4 `) G- l
  296.           file=(*p).second;9 P) B+ n+ Q7 ~8 l. C% Z
  297.           free(file);
    * M3 Q& |; `1 X
  298.         }' O: w; s) h0 ~3 k4 e  w% ~
  299.         UpdateFile3.clear();. O" A% a, b- u/ v' ^' K3 s* \0 Q; f
  300.         UpdateList3.clear();
    % z: W" t7 o8 \- e8 {, F- M) G- s
  301.       }) i4 K7 \: [0 j$ @1 a) z* F+ s
  302.       if(UpdateFile2.size())/ {: U- g+ k% V+ r6 B7 T
  303.       {) \5 z0 a4 ]* B) d! e( a) I; R
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # p6 [3 i' N  P- m0 @
  305.         {% q3 s8 a0 ^6 J& [  [8 r6 l
  306.           file=(*p).second;; D' U1 U$ h: a) w7 h% a# p
  307.           free(file);2 u/ k- {; P( P4 P
  308.         }
    * z- U% {. z: B6 r9 W. P6 f- R/ K* W
  309.         UpdateFile2.clear();  {% h; S7 |5 a$ E
  310.         UpdateList2.clear();% `( L0 i: a( y
  311.       }! w& x; g* @) t
  312.       if(UpdateFile1.size())
    ) u7 i* ^7 n6 f
  313.       {! _, `. N( X' p8 E" |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    5 n0 e/ j5 a- W% r
  315.         {
    / d" ^- ?+ `! o( ?$ d# Q/ B) h
  316.           file=(*p).second;
    9 ]( [- P) t: C! G
  317.           free(file);+ `6 A  E! _: ?5 }! s' g  j6 f
  318.         }* k( L2 s$ `. c/ h
  319.         UpdateFile1.clear();' m# k+ M) `* _1 I  [
  320.         UpdateList1.clear();1 {3 N% c8 o2 B' c( h/ Q, w
  321.       }
    ! [& A4 D; w9 I' E$ f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));2 A  q5 I- \" ~
  323.     }
    . A- s3 W8 P; t8 l3 U
  324.   }
    $ W$ S. y4 s; J( m
  325.   return FALSE;
    4 b, Z# B9 X% D. O) l! k
  326. }7 }- F# z% F! b3 j

  327. ! b9 D+ _' |1 s( @
  328. void CRevAppApp::ClearAll(void)
    % o: ~4 G- S" A& d% r5 ?7 ]
  329. {3 j9 V- ?* V% a! R5 X* V
  330.   LPUPDATEFILE file;
    7 v# i0 W5 @% \- R9 K9 |" F) Y
  331.   std::map<CString,LPUPDATEFILE>::iterator p;5 l2 p) z9 I* t0 F9 E% V# F

  332. ( s! C3 Y- D; a* s
  333.   if(UpdateLocal.size())# i2 t2 K) _. C
  334.   {
    + F8 M) s+ T6 H! R& F& b
  335.     UpdateLocal.clear();
    4 D  {" X5 `' s2 }; i( C# r
  336.   }$ [! b9 K- D, Z0 J1 @. X9 f
  337.   if(UpdateFile3.size())
    2 B; @4 p: W) I6 h0 T/ N! R* k
  338.   {
    3 B/ W) U& p0 }6 k! [9 ]+ @8 ~
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 C- H' W! T+ T  Z; B1 ]
  340.     {
    5 R8 S/ u; c7 e
  341.       file=(*p).second;
    ( h; u% \$ o2 c! z" v) d, X
  342.       free(file);
    ( L1 r6 d' C( f2 ?: ~" ^
  343.     }
    : q  F# ^7 N* d
  344.     UpdateFile3.clear();
    , i6 r  Y6 y; E0 _" ], O) o! k
  345.     UpdateList3.clear();/ s  g1 g# a. u& Z) a
  346.   }9 k2 S! t0 o7 B) j
  347.   if(UpdateFile2.size())
    1 s. O- l9 f: t* i  j  F* M- N+ j' X
  348.   {7 W0 n1 S4 r1 z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 P  H9 b4 q7 c+ B5 a
  350.     {
    / l7 R- M2 X3 l' X$ _) F( k5 I
  351.       file=(*p).second;5 {$ G; ?7 d5 |7 A2 R
  352.       free(file);7 z0 J& K$ Q  Z$ Q# u1 r4 O) D
  353.     }
    ( p, e' r% k4 ~$ x1 ?$ J. A4 b. Y
  354.     UpdateFile2.clear();
    ! k7 c& I0 L0 v1 n' W5 G
  355.     UpdateList2.clear();
    $ S! p- g, X8 f3 ~$ k' c: g
  356.   }
      R9 X, w/ k- W4 O; A% n
  357.   if(UpdateFile1.size()), n0 W7 E2 h3 l* }; j/ }. @
  358.   {, @! r7 H. o& {6 _" v9 {" v7 W0 |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : K) H' I: Q  ^5 k6 b, _9 Q: a
  360.     {
    * y5 N4 N; |+ J' T* i
  361.       file=(*p).second;
    + w5 w4 Q& v- s
  362.       free(file);
    ; G  _% k' E% K* t
  363.     }  B* K1 ]: K1 A" t
  364.     UpdateFile1.clear();
    . m4 T6 Y$ p, o3 P1 K3 i
  365.     UpdateList1.clear();! q8 [2 y( V$ ?/ l, ]4 [, y
  366.   }
      w" e+ G- [, k0 z
  367. }  
    9 c2 a! b* z; T2 M% S" w
  368.   : i8 v: m3 u8 y! x
  369. BOOL CRevAppApp::CheckLocalVersion(void)/ G& M0 Y- M8 o* i
  370. {
    " a5 Z2 i2 K( n0 `8 `6 P
  371.   int c;
    9 J% ^8 t6 r% k) Z8 U) }$ H. @+ O. o
  372.   LPUPDATEFILE file1,file2;
    & `8 y5 z' ^$ `, a( t% k
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    $ c8 L( N$ k- D! ?- S
  374.   std::list<CString>::iterator l;7 S3 M+ @1 ~3 J7 N
  375. 0 Z, n9 m, M; g& \. N
  376.   UpdateLocal.clear();+ i, p& f; r: @0 R$ G' \5 t, U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 k) i) _3 D. t( w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    & z! F* {0 w9 U9 O  B2 R5 C' N" E
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    $ f" x3 s/ `7 c% X7 p
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);+ \% J. S) m; D% v. B
  381.   if(UpdateFile3.size())2 H3 D( Q. t- X8 k, F# V8 k0 s* A# |& u
  382.   {
    9 o+ m) J. z6 p7 f4 H) w( N
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    , h9 `& O4 D& s5 f* w4 r
  384.     {+ `, l! l1 V! ^5 V) C
  385.       file2=(LPUPDATEFILE)(*i).second;6 I8 ?4 I2 R7 e0 u+ p
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 \  n% ^) I. @+ Q2 {
  387.       {
    , n1 e, M) C/ a" O  X1 u2 Q6 f
  388.         file1=(LPUPDATEFILE)(*p).second;9 i6 f* \8 t8 T1 @8 x
  389.         file1->vers=file2->vers;6 Z9 r* s7 Y1 c& N+ E7 j5 C5 k7 ]+ M
  390.       }
    - b1 o: p' @0 Z3 i5 E+ q5 s
  391.       else) w8 s! m* W! H& f- k
  392.       {
    " \% }: [% O/ P" m
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 _8 K- Q: T: q  i$ f! [
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    0 Z) h; w8 E3 T6 \: z7 B. @
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));* B" f7 W9 K1 e4 {& f# I' O
  396.       }2 s% [- _# E4 p) G
  397.     }+ C' j% M% o! ~7 L4 d" \/ O8 e% o
  398.   }2 H/ r3 v  Z- y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++). I. U8 c- V2 P# M6 I) H
  400.   {
    4 h" ]. S9 u' V5 i; ?& s
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    + H- H- D8 M& n( y
  402.     {
    + w2 t$ j* J: ?; |( ^$ Q% ~. N
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) l  X. f# r! J0 [: H
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())# S( V! Y3 J( p8 W
  405.       {- r- i: I5 B& x  L" g
  406.         file1=(LPUPDATEFILE)(*p).second;
    5 \; a7 E6 f6 H+ }4 |2 y/ C
  407.         if(file1->vers!=file2->vers)
    ( b0 f( }6 H, F. I0 s! k% y9 W4 R; _
  408.         {$ Y- I1 }! t8 H; p; w
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ; }  r3 `/ G7 v8 ~
  410.           c++;
    1 ~7 }: ?& d( X9 e: o
  411.         }
    % ]# ~# H4 K6 F' o) [- b0 Q
  412.       }
    % i: B8 l) _. Z+ i9 ?/ `4 l
  413.       else
    - d6 h6 Z6 ~! ?6 D2 ]* N0 k# l, X
  414.       {
    + d6 F8 `$ L1 F) ^7 X- j+ V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # t( Q. J/ L1 Y- I) N6 n8 t
  416.         c++;1 d1 E" D1 C/ C2 t( U$ D, t
  417.       }
    0 l/ y- ~7 b3 b, ]% k
  418.     }
    6 H& ]3 F1 `8 l8 ]9 \. T
  419.   }9 q. E) j. m# C. ~% m& _9 z8 P# q7 k7 R
  420.   unlink(".\\DownLoad\\update.txt");
    # l, A+ t$ z  \1 b0 e( X  @8 A
  421.   if(UpdateLocal.size()) return TRUE;
    + ~. j/ u" P% ^7 W
  422.   else                   return FALSE;
    " ?3 c% P! J* _# M( a
  423. }/ A6 x# l. X, g$ e

  424. / {; Z1 ]6 u! A+ V3 t$ ~* D4 c
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", f* ]! i! A8 J- x9 q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ) b- r. C- x8 J- G6 L; F2 C6 A7 r' h
  427. , x, @; @: [, ]

  428. * s* u5 t$ J0 S; B6 j

  429. 2 o! M( s* U2 x8 u8 V+ E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)$ m; K% Q3 x0 Q  \  d
  431. {
    3 }$ A, l' u, E( i' o# V% O3 K
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;& m. A/ R# g" D
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . P  W" K# z, x! o+ Q
  434.   {
    " T4 q5 ~2 Q3 w
  435.     char szLanguage[50];0 m' m$ q# V0 ^" E
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 P, m! V$ t6 g  [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;* h' B3 A$ n, T4 q5 h) A' e- V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;' J) ?8 r9 U7 Q* W
  439.     else                                   m_iLanguage=ENGLISH;
    / D% b4 |; o9 {1 g7 x
  440.     char szRegister[100];
      e9 U- T: g" E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ) w$ l9 q' \# J5 z$ e& w
  442.     strRegsName=szRegister;6 G; d4 r' {/ F- x' Y1 A
  443.     char szPatchURL[100];
    % f$ t8 S+ i% |) g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . l# O% B7 H. b4 r
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & ]* U0 S, G& a
  446.   }
    * {* e8 `9 m5 y1 z. E
  447.   else
    " N; M% M# X9 b, u+ ?1 P' ^7 O$ y
  448.   {
    5 z" x( s. ^  W8 S! w! _" x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);( W& @8 b5 l/ ?
  450.     strRegsName=DEFAULT_REG_URL;
    ; W) f( R+ ~  Y: D/ ^( t
  451.   }, x  Z0 |7 h7 e- h
  452.   if(GetFileAttributes("hosts.ini")!=-1)) U. r& Z4 R( R+ m% @0 f1 e5 j
  453.   {
    . \6 C$ g6 h* \9 h; Y
  454.     char szIP[50];
    4 `+ _3 ], B1 u& D
  455.     char szDIR[300];6 {# s/ ?' Q! R& e( f3 U& ^( L
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    * J# p( }7 n, \! g8 H
  457.     {, R+ O/ J& G) e$ C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    + n8 D% Y% P4 r9 \3 {1 k
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - |/ T6 T( U+ Z; I/ F5 _6 Z, t
  460.       strHostName=szIP;
      B4 z3 ^* o; `& D
  461.       strHostPath.Format("/%s",szDIR);3 C( X& }9 R5 x1 L
  462.     }
    4 ?& n  R- h1 {7 s8 o9 X- H, L! W# E/ ?
  463.     else) G) d% j% c, t, r, g' a: d
  464.     {2 M$ n6 }- j4 C1 d
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 S" z  N; v9 F* M5 f3 }
  466.       {
    * o& y( m0 A! p8 Q% E2 g" U8 }9 ]
  467.         char szLanguage[50];& M# n8 b! ^! J* I
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # {; Q: R( B- w5 n6 |. s
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  w8 C4 `7 d$ C8 |( U' J
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    8 }% K7 ^: T5 w
  471.         else                                   m_iLanguage=ENGLISH;
    % U3 u# L5 |2 G
  472.         char szRegister[100];
    0 i9 n3 ], Y9 K4 U1 \& C# k$ J
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");* ^4 i, G1 [+ a
  474.         strRegsName=szRegister;, K; s% G! `/ L
  475.         char szPatchURL[100];0 h6 E: `( `4 v. t9 @
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 u( K0 @( Z/ a+ `! M  w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);# N3 M& w+ o: V; g; L( t% w6 p) B
  478.       }! l* p, L: R* ~; O' q. e. m$ Y' C
  479.       else8 G+ p* m; Y( z4 w- S4 r
  480.       {  {8 k* n' C$ ~3 `3 Z, \$ v/ a* B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : x) T" p' z& s  n% w7 i: }
  482.         strRegsName=DEFAULT_REG_URL;
    ' C0 [) J" T( K+ Z" |
  483.       }7 J% ?7 V6 j* u" t3 p
  484.     }
    8 W& `4 ~  \" ]; y9 @3 `8 r, L) K' W
  485.   }
    9 c/ J4 ], R8 F1 G
  486.   return true;
    % z3 b  j3 P/ S
  487. }: P8 l7 b& U8 g
  488. 6 a3 q3 V# v) k* v0 T6 F
  489. #include ".\ZLib\unzip.h"
    / D- f( x# _( b
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 {; b0 T. A6 i. f# V6 q, e
  491. /////////////////////////////////////////////////////////////////////////////
      @* H6 [# J1 X4 x
  492. // CRevAppApp initialization  W/ P5 N) T4 j( D* i2 B
  493. 8 \# w: ]% t7 e: a$ s! w" W
  494. BOOL CRevAppApp::InitInstance()- Z0 z5 J) E4 }
  495. {
    # `0 }- F! J) C8 P$ [' f
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    3 y( M$ F% M. u) h( d7 f7 b3 g& |, h

  497. 6 w/ t  }& B; ^7 ]* k' o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 b- h$ C: L$ \5 s, G' d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    0 N/ S0 o( I/ H/ M$ \0 L
  500.   {* O  w- F- A( l. g
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: J- i* E3 [4 X" n1 k3 _" B
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    6 b. z0 G1 Q# ~) l  _2 n4 l
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' B  u8 z% G8 u2 q1 R/ E
  504.     {' ^4 C$ J9 o8 o; @( X4 Y
  505.       strcpy(szPath,szPathTarget);
    3 P! T  \" e4 o8 Q5 X4 F
  506.       SetCurrentDirectory(szPath);2 |* {. V5 V$ }! ]
  507.     }4 g- |/ T6 Q+ M
  508.   }  I6 t, Q  f$ b! @$ _* N
  509. #ifdef _DEBUG# R' Y, u' D8 B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 ~  [8 d8 c: l1 q+ \9 d
  511. #else& ~& s0 Y  ^3 f  x) x2 {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), Y% s; ^6 I5 P0 X  C( h) L- d- \
  513. #endif
      `+ l' @" O9 y- p% P* u
  514.   {/ L, o1 p! T; }, {
  515.     char tempFileName[MAX_PATH];
    ! }6 P2 ]1 N; x' S9 O* z7 M) S. c6 M
  516.     strcpy(tempFileName,szPathSource);' s, t% z( \( i# m1 B" T) w
  517.     tempFileName[strlen(szPathSource)-12]=0;# P: l9 U, a3 ^5 ]  ?: _
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( {: K! I2 i% k' u* ^/ n
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);0 U  c% J3 x. D; e7 @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; E  _: c$ ~/ }3 c' u2 c6 Z5 D7 H9 v
  521.     return TRUE;7 \; O( S$ c& z" I! `) B0 e3 r
  522.   }
    & i1 x6 q0 B+ U* N' w9 _
  523.   // Nuke 0118: Delete run.exe
    4 t) u5 V3 V7 `, a  b2 j
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ' G4 X9 s/ v8 N7 ]: U+ H- n% I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 R4 k6 L: M, K; S8 Y( a5 g
  526.   if(!ReadCfgFile("Config.ini")); j- j) n" j5 A8 E
  527.   {
    : Q( h/ x, x" ^$ p" @
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    . X; w( P8 u( d. r" `& d
  529.     return TRUE;
    ! C. f6 u  N, [0 q
  530.   }
    7 [- L% v$ J; H1 i
  531.   HANDLE mutex;6 g7 i( r, G( {8 U* @, d! n" o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 q4 v6 }# Y7 N7 b+ z1 G
  533.   {$ e+ F, b4 E6 J" \. T
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    : N( Q- w5 H' f: A3 ?) q
  535.     {
      M5 T* J1 t/ ~: M7 ~- u$ ?  p. w
  536.       CloseHandle(mutex);7 Z, g+ d+ m: V: F' a  b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & H5 T" ^- p3 t" `& B( ?
  538.       return TRUE;
    6 s7 ^9 K, S& }3 A% [- e+ w
  539.     }
    ' U1 m- X) ^) b5 }7 \
  540.   }  , {+ ], v0 ^, M9 O
  541.   CloseHandle(mutex);0 j" E" H3 P) T0 c1 j

  542. % ]6 E1 `1 ?1 N! @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. T6 W! M0 O' I. s+ K
  544. ( E: q- w( C, j) p; Z/ |
  545.         AfxEnableControlContainer();; z( c6 }( V* z: n1 c7 H, Q7 d$ t
  546. " r; W! j  H1 T9 b
  547.   bCanUpdate=FALSE;! e" _7 ~  d0 v
  548.   dwStartUpSteps=1;
    ; f9 j9 n0 X. P) |8 ?
  549.   dwProgramState=AP_NOTHING;
    # [1 U8 N: w: }# Y9 r9 _: M" u6 y+ N

  550. / a  {- p& @0 ^5 v+ K
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; L8 }5 K0 C7 w
  552. ! {5 \0 U& M/ t
  553.         // Standard initialization
    # W; g- q! T& ~# {  \
  554.         // If you are not using these features and wish to reduce the size/ f' S% a* t8 T* v
  555.         //  of your final executable, you should remove from the following6 F5 c' D' n0 B/ T) v
  556.         //  the specific initialization routines you do not need.0 }9 R" `6 @8 [( O) D

  557. ) A* x& b- f# ^; _! q% l
  558. #ifdef _AFXDLL
    : c0 i% n. L) `9 a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL8 z# J  @/ d& U# k! R
  560. #else0 j' G; n" w1 z4 ]* a2 P* r) h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically* y4 j8 e* h1 K  r
  562. #endif. {' f! G: r; ]/ O8 A4 u) Y5 D+ B

  563. * _$ m& y$ ~  r+ O. {" Z/ p" h
  564.   dlg=new CRevAppDlg;" j% E- z6 a" U/ d( O
  565.   dlg->Create(IDD_REVAPP_DIALOG);$ B% N3 P9 w& a2 U2 J+ g
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    % r2 C* S6 t' ?( \7 x
  567.   m_pMainWnd=dlg;
    * E: c  z* t2 G

  568. / |5 N! a, j" U5 Z
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) ~# T8 W5 @" g, W- r% N
  570. / K* e' @5 ]/ `# y3 w% H
  571. //  GdiplusStartupInput gdiplusStartupInput;' Y- K1 o7 W. [) G  r
  572. //  ULONG_PTR gdiplusToken;
      l+ q( o7 W: _- Q7 v9 u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);  C' p( @$ X5 [% K$ c

  574. 6 M$ v6 Z* Q: E% F& @$ n8 i
  575. //        CRevAppDlg dlg;5 |; W; w, d6 _: I4 j/ Y# A
  576. //        int nResponse = dlg.DoModal();
    , D; |& W- w3 o6 _% m5 J
  577. //        if (nResponse == IDOK)2 I& {4 X+ \  e! u/ H6 b$ t
  578. //        {
    - X6 w& \4 Y6 n# T
  579. //                // TODO: Place code here to handle when the dialog is
    2 M0 v4 b3 I% T
  580. //                //  dismissed with OK
    * c4 |* B7 D8 k- s* w; m( y
  581. //        }
    8 J- }$ T. \1 }: N
  582. //        else if (nResponse == IDCANCEL)
    ( G! c( k) v& ?8 }) _! \
  583. //        {( e# J8 C& Y  ]
  584. //                // TODO: Place code here to handle when the dialog is9 L+ K: V. \9 e% v; s, ~
  585. //                //  dismissed with Cancel  o8 }' |0 ]0 r7 V9 M7 k3 Q
  586. //        }
    - `) n# S, L  H" P
  587. 3 v' a! ~  d, ?
  588.         // Since the dialog has been closed, return FALSE so that we exit the5 @( ^8 w$ q+ K+ J" S3 {
  589.         //  application, rather than start the application's message pump.
    1 T- O% q5 d4 a+ p  F$ @) |
  590.         return TRUE;
    ; v7 M4 Q$ X. O2 K; `- n! m0 ~
  591. }( V1 @/ t: O& X

  592. 2 ~" a" P+ s; L9 s
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) w5 u: m9 J+ q: y$ O
  594. {
    3 k9 ^( p& N0 y. D1 b7 s7 W3 D
  595.   int i;
    2 `: B  a2 p# y, \; v
  596.   char *szRet;, E& l: V' g" _( u6 F& P
  597. : s7 G( A! N. [5 h
  598.   if(pSource) { itoken=0; sztoken=pSource; }. X- o# B+ P9 u3 O+ K: [4 W' s
  599.   if(sztoken)( Q/ @& V4 f, I' B% A
  600.   {
    & \- C! G5 w7 L* q: f
  601.     szRet=&sztoken[itoken];
      ]$ l" T* A( n! ^. A
  602.     while(sztoken[itoken])6 C1 V- c. b4 ~$ }. z
  603.     {0 t. }$ C, I0 V
  604.       for(i=0;i<(int)strlen(token);i++)
    9 ?/ k2 R5 F9 ?( m& t  i2 ?
  605.       {7 U5 O) ]8 L* n0 ~- f
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]), z' ~$ l! z, y: U2 B% r
  607.         {4 j7 p" H$ m3 d
  608.           sztoken[itoken++]=0;
    0 F2 I4 t) ~) J0 f
  609.           sztoken[itoken++]=0;5 ^& s+ G, F2 B0 ^, p
  610.           return szRet;
      u4 x0 {- x0 f1 \% c  {- t1 S5 p
  611.         }
    $ ?0 y$ ?% u" X4 W7 a
  612.       }
    5 t5 u; f/ P4 g4 L  q- u! c6 A
  613.       itoken++;
    ; y8 ~' [/ l* x# X* r
  614.     }
    , i8 c% {, D! ~1 r
  615.   }
      x) {+ j8 G; J7 e8 c- @5 l& S
  616.   return NULL;
    9 R* n6 a, j2 Z4 }8 I% Y
  617. }8 T/ E7 J) ~9 R0 v9 N

  618. + m' \& ~4 y; B2 y+ Y) j& T3 b* @  C
  619. void ProcessProc(long Total,long Current). E6 l. K) ^6 y
  620. {
    , @0 ^) }, ?5 v
  621.         MSG msg;
    . a$ b7 ]+ U$ S3 M4 m) o
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 s' E+ k# R1 [4 _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));0 j& i2 p% E) {  J2 T
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))) N' Y0 Y' J9 `% }
  625.         {
    0 [) n, Y! `: B
  626.                 if(!GetMessage(&msg,NULL,0,0))9 K% y& H) p) @, S6 S7 `
  627.                 {
    * o$ [) t( u1 I. K
  628.                         return;
    # K, t& S- ]" I& y' [1 |# y! o
  629.                 }) }1 f/ X0 ?3 _8 o( a% W
  630.                 TranslateMessage(&msg);
    " k7 i' j* p. E6 E$ Y! U
  631.                 DispatchMessage(&msg);
    % ^6 V" W8 E) f( M  Q
  632.         }        0 J. o2 R) K2 \/ W2 \
  633. }0 R) _' |4 o4 `6 h

  634. 0 r9 E+ i( y0 R$ s5 |& C
  635. BOOL bFirstChar=TRUE;
    2 j/ V1 m( ?) A6 L3 E( G1 S/ |

  636. ! ?6 ]# }" A5 E( t
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; H3 u+ E& ^& P( B' q
  638. {9 C+ S7 V' O3 M7 D" n% b
  639.         // TODO: Add your specialized code here and/or call the base class  T$ [2 T" J: D8 C4 V/ e0 F
  640.   switch(dwProgramState)
    & T! j) N- Z/ R( ^" T% H
  641.   {! g3 T  \! e. l5 b
  642.   case AP_NOTHING:. _3 J- C! j4 l8 x, x, }
  643.     switch(dwStartUpSteps)
    * b0 O1 n  H5 n  |* b) Q
  644.     {; f0 Q- a4 O4 B( ^/ J9 R6 U. W8 B
  645.     case 1:& }3 ]/ p4 ]8 c% k9 x/ j# f; c" ^6 |
  646.       {, U7 T4 I7 W0 L
  647.         int i;
    * c+ K' X; I; e6 `% w
  648.         CDC *pCDC=dlg->GetDC();: a7 W% |! B2 j. f
  649.         HDC hdcwnd=pCDC->m_hDC;5 H3 P8 p  v. c% L. G0 z1 `+ C1 u
  650. //        Graphics graphics(hdcwnd);$ C2 {) ~, s) ]# D# i0 E% F$ `
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * G) L2 W! x' J, s5 W' }2 y
  652. //        INT iWidth=bitmap.GetWidth();
    ! M! e6 l, L9 r- T9 j' k1 r* Z9 I
  653. //        INT iHeight=bitmap.GetHeight();. I6 c. x5 p* E: L
  654. //        Color color,colorTemp;
    ' }% J2 d. y1 ]2 {
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    1 s9 H( G! Z: N# S+ K; C& \
  656. //        {
    & |( q" ~+ Q9 F! ]
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)( `3 r8 u* B) P9 Q! h: z) J
  658. //          {
    ' h+ z$ I  f5 `5 G6 u! r2 J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    , K5 K/ o( [" h: J
  660. //            colorTemp.SetValue(color.MakeARGB(
    6 b2 t8 h+ c0 w' @( e
  661. //              (BYTE)(255*iColumn/iWidth),
    ! r) z. w7 i- a" W/ ]$ h7 s1 R$ t
  662. //              color.GetRed(),0 y( @6 l# r+ {9 |" f
  663. //              color.GetGreen(),/ p( A6 t* O% k. W, L+ m
  664. //              color.GetBlue()));
    7 U2 k+ K' f8 Y2 A. M- q) {4 A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 @$ Y; U9 }# E/ B) n+ e4 z5 Q( O
  666. //          }
    $ J- j. u2 J" J" r) }
  667. //        }- p! d7 k5 ~4 U" s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);% z8 {6 }* F! S* I: ?
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    2 |5 X1 M# f% N. G
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# ?' K( ]0 K! {$ T5 U# Y# G
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # B& b" E) N' u4 g9 {# i$ c5 r3 {; r
  672.         for(i=0;i<240;i+=8)
    - C5 \: r2 H1 m
  673.         {
    ! u+ X1 t- J( {, g+ ]! Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 H/ M0 s0 p3 {$ L7 Z8 w: j
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 u7 W1 n) u0 `+ I& V2 j& E% p5 O4 i
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) c4 H0 v( _; C! b* I' F
  677.           Sleep(33);
    * ?2 X5 a; c5 k4 `; f4 m' T! Q7 `- M! Q
  678.         }9 i' M0 a* R+ k$ @% ]1 `
  679.         Sleep(1000);
    4 t  x9 h7 j* ]$ \4 |' f! Y9 q+ A
  680.         for(i=240;i>0;i-=8)
    ( E8 G: C/ P/ H9 m& n4 i/ I! i
  681.         {
    1 g( v+ ?1 c; \  w& }; z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' O- G- u$ e# Y* {
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! b' }% [$ Q0 C. Z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) x: @( |1 [, {5 [. ~
  685.           Sleep(33);
    & Q( @! v5 t' X8 s( S7 w
  686.         }
    ' Z( ^0 B+ x. _2 V2 B
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' n/ u+ A8 o& m- F: z
  688.         dlg->ReleaseDC(pCDC);
    ; o; ^! G5 _. @; v4 D
  689.         DeleteDC(hdctar);6 O. B1 q/ V, L) F" {0 G
  690.         DeleteDC(hdcsrc);* R3 j. A7 T' Y7 E+ P
  691.         DeleteDC(hdcorg);
    . r# D6 M* Y5 s6 q( S% d( X1 O( q
  692.       }
    4 G! N5 R4 l+ h5 Q/ R+ Q" P( N
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    : L% I) H& n; T) G9 C# v
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  d, j8 i! _3 U6 }, I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    9 ], J* n8 {! f
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    3 m8 C; F" a1 }! L# a& g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ Y$ {& C7 M0 D3 K
  698.       if(!Dn.Connected())
    0 K/ ^5 E$ F! ]; \
  699.       {
    7 R7 J- K" @% _+ _/ n
  700.         dwTotalFiles=1;0 \1 J9 K- `9 Y9 j2 Y
  701.         dwDownLoaded=0;
    " N: w) ?  r( I) p& u% p
  702.         bSilentStep=TRUE;7 f& r0 \; l3 v' y' S
  703.         bCompressed=FALSE;" g+ g' P6 k( R" S
  704.         strExtLocal.Empty();
    $ h! |5 E: X1 G- ~( ?/ y
  705.         strFullName="readme.txt";
    - ^# u; Z: h  [
  706.         dwProgramState=AP_CONNECT;/ j+ [2 M8 o1 C' ?3 c
  707.       }1 I2 o7 C% {- O5 K0 a9 l
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: T6 y2 F& j. I  }! h2 w6 p# t
  709.       dwStartUpSteps=2;
    7 J1 s* n' {4 e1 ^' W5 @$ W
  710.       break;# n+ v- A# g4 ^4 U* f! J
  711.     case 2:
    9 W2 p5 s6 C' x
  712.       {
      y) i! F* J; E4 n
  713.         int iEOF;
    % @6 L, u: d' U" C; O
  714.         FILE *fp;
      E+ j4 N: h) u5 z/ g  h
  715.         char szString[512];
    * @) t, F7 P. @& M+ C) T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      |2 a8 l( p1 P4 ]7 H
  717.         if(fp)# e/ ?# ~# t% s) ]
  718.         {, y+ w" Z! h  h5 W
  719.           do5 k9 E; c: C9 ^
  720.           {
    " R' D/ }* A4 N0 j1 R7 k
  721.             iEOF=fscanf(fp,"%s",szString);
    ) }' P+ z. D- v2 }
  722.             if(strlen(szString))
    6 |' r% D- A: v' r
  723.             {
    - \8 T( v6 F* ?$ B
  724.               if(bFirstChar)6 k7 u# E& P1 a, v. Q8 _4 T: _
  725.               {# f% k5 Z: B) k' ]8 U
  726.                 bFirstChar=FALSE;9 V6 R* L* X1 d: x4 ?
  727.                 bConnectIsBig5=FALSE;
    / P9 E8 _; n' @* j/ S3 f
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 Y9 F  ^$ I# |( v4 }- Z
  729.               }) v9 ^4 q) i& [# @: I6 m' V9 \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    . f' T6 h  `( @( h; V
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    0 F0 L4 {2 ?% F$ x3 ~. g* h; W
  732.               dlg->m_ListText.AddString(szString);
    % [9 C8 [3 |  Q7 v  B# d4 V! O8 }  A
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% X  [1 E) \$ T  F" u0 M( r- A
  734.               *szString=0;
    3 W1 m+ I) U& _! S& B( n/ ^9 w* P
  735.             }
    ) Z5 A0 C6 {6 A
  736.           } while(iEOF!=EOF);" i$ e/ M! b5 f6 V$ p# M8 w# f
  737.           fclose(fp);
    , y* y) o0 B9 r0 _$ n: R7 v
  738.           unlink(".\\DownLoad\\readme.txt");: t. ]) Y7 f3 }" l/ G# ^
  739.           dwStartUpSteps=3;
    : c$ B" h0 v8 f4 |4 k
  740.         }+ a' G8 L# v$ k/ x4 N
  741.       }% j9 H( w1 C3 x# \7 v: |
  742.       break;
    * ^" Z9 s" H$ ^, ^( h0 ~9 c
  743.     case 3:
    6 s, \3 V7 _1 W) a
  744.       if(!Dn.Connected())
      R3 o4 ]0 |4 n5 `, v
  745.       {% W% Y8 {$ A: Q4 b. x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* {4 x) \: t0 [' k' W5 k
  747.         dwTotalFiles=1;
    * C: j3 E" e  H( t
  748.         dwDownLoaded=0;" `. }  u- L( B  ~5 N1 R  g
  749.         bSilentStep=TRUE;
      W! U: A# |! Q' w
  750.         bCompressed=FALSE;( n& w) D2 v" n( N4 A" ^
  751.         strExtLocal.Empty();4 Z0 R6 l3 P, Z! z7 l
  752.         strFullName="checkversion.txt";
      X5 O$ v$ B5 Y. L% V/ ]
  753.         dwProgramState=AP_CONNECT;
    8 J; d7 f; c, z- ?% F2 w/ n
  754.       }
    7 w& s' O7 x! P" w3 E+ K
  755.       dwStartUpSteps=4;
    & F/ l" [' O* H6 ~, F* b
  756.       break;
    & n8 A& V1 _, {9 b
  757.     case 4:5 L5 q( Z8 `0 P3 e6 J3 o
  758.       {
    ( s* H% }6 `2 ~" h! h9 ?
  759.         FILE *fp;
    ( j0 @; Y3 c& {5 W; P
  760.         char szString1[128];- B0 C- D* j  l7 z' D% s. S. v# C
  761.         char szString2[128];6 j" E' ?2 n- ]( z6 J
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ( D7 ^' ~9 n& k4 V/ H% N
  763.         if(fp)4 V: q+ Z$ e; z$ V' e
  764.         {
    ; N' Q: j) @) p0 l, z- f4 @
  765.           fscanf(fp,"%s",szString1);# K) g3 r& H. @) I
  766.           fclose(fp);( U# V4 L" m8 r9 ?; M
  767.           fCheckVersion=atof(szString1);9 ~. i$ M* F6 }
  768.           fp=fopen(".\\checkversion.dat","r");
    0 L, M2 T& G7 \' Q+ @
  769.           if(fp)
    0 g3 K  P9 \* Q( i* C% j7 `
  770.           {
    2 `+ o9 r! i7 N
  771.             fscanf(fp,"%s",szString2);6 v0 w4 Y: E2 {7 H( w
  772.             fclose(fp);- i1 k; t$ p8 W2 g! H4 ?6 t
  773.             if(atof(szString1)!=atof(szString2))
    6 y& ~- J  u2 C! Y
  774.             {' t) V& I8 a) D( t- Y+ y% ^
  775.               if(!Dn.Connected())
    ' m' r) V  A  F9 c/ ~
  776.               {4 s3 c( Z6 q; w: R4 S, X
  777.                 bFirstUpdate=TRUE;
    0 [7 `" ~1 B8 `  Z: j; F
  778.                 dwTotalFiles=1;
    . j- A8 b& N: g, `
  779.                 dwDownLoaded=0;. B  Z3 e# O4 h0 v. ?9 B' n
  780.                 bSilentStep=FALSE;
    9 G% V# a  D: M6 J) b2 N
  781.                 bCompressed=TRUE;
    ) w" Z' R8 B4 T& `# z6 T
  782.                 strExtLocal=".\\DownLoad\";" _7 e8 T  ]0 a! x) x
  783.                 strFullName="update.txt";
    $ U1 S1 h" ~! O# t0 d# l, y' o2 a2 s
  784.                 dwProgramState=AP_CONNECT;
    - C, d$ F! f' @, o
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");# Z$ {: V5 G( g0 y% \' x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ( z5 W2 r: F% c0 B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");5 p( a" A3 j4 \3 ~7 T

  788. + r3 |) x& @) X/ Y
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 F' E$ N7 U& m/ I6 k' J
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    4 ?! f3 l3 m9 J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 |1 x; w' H% m, j+ D7 L
  792.                 {
    ( D0 E: B% H7 X# r; g; t
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    - z1 T% K6 C2 [+ n% q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");/ y5 f8 g6 h$ J" U+ w
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    9 `! O( `& i8 `) O8 ^. E3 T! d6 x- `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* R, a4 @! z0 c2 X& v
  797. 1 q6 X5 H  ~0 D" D$ d
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    8 E' |, R! V% {( s
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " F8 ?+ C7 y5 o( E
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");# Z! O4 o" Z& R& Y) l* e- e
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ a5 b3 K8 t5 P0 N
  802.                 }
    # d7 ]: o6 D1 w- B2 R
  803.                 dwStartUpSteps=5;& p+ J$ |7 M# F! x
  804.               }
    : l( r3 |& v, @+ E" u& \
  805.             }5 B1 B0 F* |& ]( A3 Z) b6 f
  806.             else
    3 P& {% W) `* M; J5 C+ X) n* ]
  807.             {
      C; A$ W1 Y, b* B  [
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 Z' l% k: c: @. S  ^( {  O9 H- y- C
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! \* U% q  G$ i' F
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    " S- h7 x' T* |; N
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 ~6 \( s$ P6 y9 m) ?) o0 S
  812. $ A$ B1 C/ `$ \" ~6 _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # Q, O, t3 T# s
  814.               dwStartUpSteps=99;
    # F6 D6 M  S$ Q
  815.               bFinishUpdated=TRUE;
    " }7 |; H( J! T; o/ z6 ?$ s% Z3 G9 R% f
  816.               bCanUpdate=TRUE;% _" l4 n4 Z& s- S. P# ^
  817.             }
    " ?; I8 i2 m6 o+ N
  818.           }
    8 C" {" a8 ^1 @) ~! X: j4 X/ e
  819.           else. i4 y" f% F, M, f- G$ W. l; \
  820.           {
    % s2 W% V6 \5 S1 K0 m4 f
  821.             if(!Dn.Connected()): M$ `& g7 _! [3 \" q
  822.             {
      R" |* q" W9 H3 p$ s; _; i
  823.               bFirstUpdate=TRUE;1 {' k, A" w6 ^1 B' {8 c
  824.               dwTotalFiles=1;
    4 d+ M7 t! T  d
  825.               dwDownLoaded=0;
    - t4 ~# j" \. h7 }4 O& [
  826.               bSilentStep=FALSE;5 o7 t1 n- C. y* j6 v
  827.               bCompressed=TRUE;4 R1 Q$ w( Y  Y7 f
  828.               strExtLocal=".\\DownLoad\";- J; f5 [0 K# ~& W+ l4 o0 y- D
  829.               strFullName="update.txt";1 y2 @/ w, S$ ~6 {: \; K. A, z' ~
  830.               dwProgramState=AP_CONNECT;
    - q  s" A( e; g/ r+ z- j6 X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ N3 V/ c6 _, D; ~1 W  V* w9 u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% e( X0 t; l( l8 @) Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& c) y! u4 b9 e7 y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& @, f+ t, j5 l8 E* @1 J/ L  `+ M! k
  835.               unlink(".\\DownLoad\\checkversion.txt");4 D. ~- y" z) b* `# r% w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)% F9 N6 _6 l2 @
  837.               {
    & t+ w8 }" ]% p$ \; R
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");+ L. i3 ^4 c/ U# @' k, t
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ' ]2 x/ D3 J3 S/ @
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ' [9 ], b" q6 k, b3 x
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' S- d0 G5 L. O3 I% \
  842.                 : C1 w8 a$ u  d- L, Q4 \
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    9 y$ G4 g9 |6 U
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      ~* O2 u( @7 @# @" X- ]) v. W8 \% ^4 C
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    # q) p, s% ]& ~! U* A
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# h- L) p  C/ d& _" z
  847.               }
    6 k' q" O) ^& Y5 U8 O4 n+ W2 d( U
  848.               dwStartUpSteps=5;: n2 d. z( s" h5 R, v' M
  849.             }' O! M5 Y3 f% [5 k2 z/ `( c- b
  850.           }
    5 Q, E6 v0 o4 Y3 h; ~
  851.         }6 _- t/ `' Q; n" O9 {# P4 X/ Q
  852.         else/ A. D: K, }2 H" ?% B* n
  853.         {
    - w6 D9 E3 x! {  Z. V4 E4 C
  854.           dwStartUpSteps=3;- `  C& S2 t6 w8 [" M9 k
  855.         }
    % O0 b4 [5 \4 O' p
  856.       }" d% ~1 t* n' T& k. Z" D
  857.       break;
    : C0 M3 {$ Z7 E9 Z% c0 G
  858.     case 5:5 n" w$ v4 B8 q, z0 P# g7 ~; T( f
  859.       {
      n1 G4 y; ]! a6 l  p
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' Q" Z* j; U: o% {
  861.         {* \& i4 B. c/ f9 v" k6 R& ?
  862.           int opt_overwrite=1;
    2 F% {! t, S- n* O! b) R
  863.           int opt_do_extract_withoutpath=0;
    / o3 c" q1 @2 d# L8 t
  864.           unzFile uf=NULL;
    4 b; B+ f% x3 r$ R" W

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

1 Q2 @; l5 |* X0 H

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-1-11 15:57

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表