找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
2 _, @( c4 _! k5 x. T
  1. / RevApp.cpp : Defines the class behaviors for the application.
    2 N# G3 W3 I$ n! j4 _4 G
  2. //
    ' G9 b' m  s; _! Z! j3 d& W  T
  3.   F& k& ~% q' U& T& [1 f
  4. #include "stdafx.h", t0 W0 Q) ~% I! h2 D2 l8 e

  5. / g4 s+ I9 b" Z% ?7 z+ }5 c' [
  6. //#define UNICODE& Y# t+ Y+ U' |" r3 A" ]: @. D4 ^  E
  7. //#include <gdiplus.h>
    * W0 F8 F/ t6 b* L- n2 B# G5 @  K/ w
  8. //using namespace Gdiplus;
      d; y) B% H8 ~

  9. 5 E2 _" s. J' C1 [9 s
  10. #include "RevApp.h"$ G' Q  y+ l3 g% N
  11. #include "RevAppDlg.h"* f# a# @/ a7 D+ G1 d5 l# M

  12. 7 o  E/ A5 k) V+ A
  13. #pragma warning(disable:4786)1 Y: e3 T$ U3 v/ m# c! C
  14. #include <map>
    # T8 h/ N% n9 b
  15. #include <list>
    9 J7 `2 e! `$ g, Z) ?% f7 D8 D! ?9 O4 q
  16. #include <direct.h>( o! Z* X8 B9 i( Q# j- i
  17.   K% E2 X7 L) j" q7 ]( o
  18. #ifdef _DEBUG4 [5 G- r( o3 B7 z* J& X/ V# S7 u& M5 r
  19. #define new DEBUG_NEW
    $ a7 k3 @/ l! a  |$ w. N
  20. #undef THIS_FILE* M) f4 D3 |6 \
  21. static char THIS_FILE[] = __FILE__;6 v1 U$ A' }+ b; g  h  O3 l
  22. #endif
    ! }& U/ _: b) v) H$ b) l
  23. #include "SkinResDef.h"
    6 g1 a+ R# f) R' X8 r7 Q, q3 Y$ L( L0 N
  24. #include "ChangeBG.h"+ j  _4 E7 U# z/ q
  25. #include "AFXINET.H"; z3 S( M* |. W# q4 K0 j3 ]* B

  26. 0 \4 _, j! |" O& }
  27. #define TRADITIONAL_CHINESE 0, f% V3 I3 `* V; P8 [# b
  28. #define SIMPLIFY_CHINESE 1
    / a# K2 }, J, ?1 v! }: z" i6 E
  29. #define ENGLISH 25 F! j# _" W9 W$ A/ {
  30. int m_iLanguage = ENGLISH;) N, }- u. W& n
  31. /////////////////////////////////////////////////////////////////////////////
    ( k# `1 _9 X, K) u" G6 G+ C3 a
  32. // CRevAppApp
    - `& Y; P2 L7 _$ ^1 f) h
  33. 6 }! T, i. G0 b# U5 @4 Q# O: ?
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 u2 v5 m( w& f( f/ U  _& K/ D
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    5 P3 A. ~) b. z
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here./ k4 H5 c* H( u
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    + V) @9 W. ^7 V# P. G- o* t
  38.         //}}AFX_MSG/ J) \, I7 Z  d. G3 w3 i7 |9 u9 k9 k7 n
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; m; j# ]4 N; U$ }3 f6 m
  40. END_MESSAGE_MAP()+ `) O" k3 w* D# y  X# N) \

  41. 2 T/ ^7 {8 p+ e8 F1 i" K
  42. /////////////////////////////////////////////////////////////////////////////
    ' N6 a4 L/ f: A
  43. // CRevAppApp construction; {. {" L% N+ l0 F1 H' _

  44. 1 }- E: C/ X: }0 _
  45. CRevAppApp::CRevAppApp()
    ) p; h" P" H0 D4 o3 S
  46. {
    ! V, ?- G, q+ Z, o
  47.         // TODO: add construction code here,
    ; [: `% G) M7 z% l0 n
  48.         // Place all significant initialization in InitInstance9 q8 ~6 N8 o; E. V8 m) }
  49.   bDisplayIsBig5=FALSE;. M% D+ {- u3 v  O9 K7 R
  50.   bRestartUpdater=FALSE;/ R- h& f$ h' I9 U) i5 t
  51.   bFinishUpdated=FALSE;
    & D; Q2 y' R1 [! I7 s+ c8 l
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 ~8 L/ S+ \: E+ `& l0 R! f2 R! ]! W
  53.   InitChangeDataBig52GBKS();
    # N; G& v" F( n- G& O4 q6 @' Q0 `
  54.   InitChangeDataGBKS2Big5();
    4 d, s  e1 N& v
  55.         //
    ! a3 r5 N5 n2 E+ ?5 {( f
  56.         bClickRunExe = FALSE;
    ; a) U7 O$ B8 d
  57.         //- C: D- U/ v. o# c1 ]9 E
  58. }
    3 e; }% G8 a3 r  \8 H: b

  59. / ?( P7 o, @8 z
  60. CRevAppApp::~CRevAppApp()
    0 O: m3 w7 u: T
  61. {' V# D" b$ f( q: `3 |0 v1 S
  62.         // TODO: add construction code here," F; h: S' _7 V/ n
  63.         // Place all significant initialization in InitInstance
    + R  v& c* L+ B8 m
  64.   EndChangeData();0 B, ~' L8 g0 p/ B  ?2 e
  65. }
    . {. d2 n; q' O: A
  66. % ~3 v! V9 w: s5 j9 [& B& G: T
  67. /////////////////////////////////////////////////////////////////////////////6 h$ O: `5 B4 k; d: e; x
  68. // The one and only CRevAppApp object5 V( U8 O) M0 y! J

  69. , U" h* v: w" n& D
  70. CRevAppApp theApp;4 ~6 r7 `' V' T3 }! x3 S
  71. 9 Y  r) a- l+ r; R2 g
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)3 i3 G8 W2 _/ Q% V0 W! u% f0 H( M
  73. {
    $ v# T% B0 x  ?" f" q# B& x: i
  74.   int iEOF=0;) c9 }/ Y3 I; k: W
  75.   char szTempName[MAX_PATH];' b9 N* N' z$ g8 n3 [
  76.   *szFileName=0;
    % K9 N; ^; l6 |) ~: I
  77.   iEOF=fscanf(fp,"%s",szTempName);
    : t& p( N: m0 a7 d" C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    8 [( E" [6 {( v  I
  79.   {
    * n$ d. b! v* Q! o' G! U# e/ F, X
  80.     strcpy(szFileName,&szTempName[1]);
    9 g. F# c# e! e6 Y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)- P" R& s8 i( D; G. @
  82.     {0 R# k# R  f1 A8 x6 \9 l+ [
  83.       iEOF=fscanf(fp,"%s",szTempName);
    0 c, }& r7 n! C( Y% M- N9 b: V( x
  84.       strcat(szFileName," ");
    3 i, o6 M% O" Q
  85.       strcat(szFileName,szTempName);
    7 \; g+ A( {$ o
  86.     }1 Y& x5 Y- G, ]9 y- p
  87.     if(strlen(szFileName)>=1)" B6 w6 V4 n8 q* v/ t4 t) K& y/ c
  88.     {
    % ^" b# h" ?4 i
  89.       szFileName[strlen(szFileName)-1]=0;) u. v9 a8 y, R8 A; N
  90.     }
    0 u% i# d: I& P
  91.   }
    . g  T2 Z2 w5 R
  92.   return szFileName;
    3 g- \$ _. M1 c
  93. }5 B: }/ x0 I( i1 F
  94. / ]" r5 [4 @) _; L8 e9 m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)3 z, O9 i! n! I* K7 z% \
  96. {% r9 {0 B3 x8 U6 X
  97.   FILE *fp;3 N% N. I/ ~, X# {0 S- r! x- j
  98.   char *key=NULL;, c" z# h9 D7 H' S7 M. v/ I7 o
  99.   char version[MAX_PATH];9 {# \/ H" n4 G$ {# i
  100.   LPUPDATEFILE file,olds;; r5 j- `8 p! O
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & L. S9 r. m9 x! c% K
  102. $ H$ [) ], i, T& m* h
  103.   UpdateList.clear();1 G: c% p. O9 L. b6 h# I! K' L' E, E
  104.   UpdateFile.clear();+ j( a5 w( K6 W0 m0 p
  105.   if(GetFileAttributes(filename)==-1) return false;
    " m1 x: W# Z8 q2 X" n2 e
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 ]$ e# x2 h; r
  107.   fscanf(fp,"%s",version);
    6 Y3 v3 U: h. @% D  A/ H" H
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    & U* v' v: Q. {
  109.   while(fscanf(fp,"%s",version)!=EOF)
    * R/ I( z1 H9 b  M8 N# t* {  o' C
  110.   {/ }) [8 q, [/ `3 M8 K) g6 B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( d+ q# u, s! p- U$ H" x" q
  112.     fscanf(fp,"%s",file->path);
    ! o3 Q( E5 P7 o: e
  113.     ReadFileNames(fp,file->file);* @: U, I$ F/ d" {
  114.     strcpy(file->full,".");2 E8 `, Z7 S* D
  115.     strcat(file->full,file->path);) n" |8 M( z5 r2 v5 f8 S+ w
  116.     strcat(file->full,file->file);
    & r! U0 }( O9 \; Y" i
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    4 z9 P% L& n3 W( l; F% n
  118.     {
    3 x  g! f1 w. \& Q
  119.       file->vers=(float)atof(version);
    & m2 \, H4 t. a* D) y  A
  120.       UpdateList.push_back(file->full);" B- B* E, N: X+ q& t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    % L# ~* L. Q; F
  122.     }% I2 f* P9 e: a1 X9 f! w
  123.     else5 S+ s7 c! n) R: i0 {
  124.     {# h' f  R- y0 C
  125.       olds=(*p).second;
    # }. N. Z/ G6 r6 j$ j5 M8 K
  126.       if(olds->vers<(float)atof(version)), K' [. C4 R# C& \" t# B+ P
  127.       {
    2 y' ?$ X2 v' p
  128.         olds->vers=(float)atof(version);
    & ~$ l) `. `# a+ e; }( u+ X8 X
  129.       }9 V, J$ H) L/ ?
  130.       free(file);& i, [8 m6 G9 y
  131.     }7 ~4 ]" h1 y6 l9 f8 t% W, j
  132.   }
    7 U+ C& W) Q9 e& L3 V9 K: C, U2 @
  133.   fclose(fp);! O0 Q! i, R4 d; m* o0 u6 Y
  134.   return true;
    , v! {  {( j* u
  135. }
    ' p* R! m9 ^* f! |6 o

  136. 7 X0 `* ^8 k6 l
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 I  \0 _) Y. o5 A6 C' C6 ]
  138. {
    : F8 C6 q+ w9 H+ F. Q) g
  139.   TCHAR  szFull[MAX_PATH];
    4 t! U5 [- ?, b  O5 z
  140.   TCHAR *token,*inter;
    ' e( g# O* K$ c) a6 Q
  141.   *szPath=0;
    ) y" f% f' L) `& B0 f9 X) v
  142.   strcpy(szFull,szFullPath);" R; O. H2 t$ u
  143.   token=strtok(szFull,"\\/");) A8 v* V6 T( _8 k& q5 b+ o
  144.   inter=token;
    6 S- L% T  S8 D( c
  145.   while(token=strtok(NULL,"\\/"))
    # ^2 m( O  C7 }6 Y8 b
  146.   {) K6 H) d& P) e+ \' X5 x
  147.     strcat(szPath,inter);+ k) ~* }. M6 O6 J
  148.     strcat(szPath,"\");1 x/ p% M% K/ |- s# c- g
  149.     inter=token;" u( i, A8 }0 L  P  c0 [
  150.   }
    2 N" ]+ H( K; T* d' e
  151.   return strlen(szPath);' h% F7 C+ R0 p2 V2 n( }7 ~5 F5 e
  152. }
    ; B2 l7 S# T, m4 j& m+ @

  153. & l# l8 |8 H. X! k1 B( M# N- P
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    1 m$ |% `4 E7 X* D
  155. {& [) ~" g: L( ~5 Y5 [
  156.   DWORD attrib=GetFileAttributes(Target);
    8 Q) B; P2 |/ _" T5 R. n/ q
  157.   if(attrib!=-1)* m" z' ~) z# x
  158.   {/ E8 \# w: L5 U$ {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))6 V3 a6 y* ?4 e- Z
  160.     {0 F& `2 x. F/ u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    5 ]; a2 l) J+ v" s/ u8 b
  162.       SetFileAttributes(Target,attrib);2 n9 b$ j, X: Z, t
  163.     }
    5 ~5 C( I7 m2 f% L' }/ F6 D6 `
  164.   }( A- i: V2 t/ d6 v0 \6 t8 q3 V
  165.   CopyFile(Source,Target,Erase);2 T0 X9 j* D& x  ]; r) C
  166. }( ]0 X& _% [* H8 L* ~8 h& {
  167. ' u! \. `; x2 ]% \
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...): R$ }8 z7 [: D& a, M
  169. {
    ( Z+ E8 e: M2 @- n: l0 C. S
  170.      FILE *fp;
    5 B( r: y* D' s- _) d; {: N, w
  171.      char  szBuffer[8192];' X/ t4 }1 b" g* s5 A: x
  172.   va_list  argptr;
    . |5 G7 c+ H# y) t2 u, J

  173. 8 u" j! y; k7 ]1 J) u- W6 w* g
  174.         va_start(argptr,message);- d4 z9 h. L! L/ j8 {4 m2 r
  175.         vsprintf(szBuffer,message,argptr);
    3 b$ z# v" w- c% l: c% C
  176.         va_end(argptr);
    ( ^. S& F+ T* Q: w
  177.   fp=fopen(FileName,"a");2 W# D/ T6 H2 w0 ]! X
  178.   if(fp)5 Q/ }; c: r5 A5 S( e/ ~8 v7 `) W
  179.   {
    9 s$ {! X% t/ N3 u' E
  180.     fprintf(fp,szBuffer);* b% m% f. u& S: F9 s" h- ~' v" O& L1 X
  181.     fclose(fp);
    ) i! a% R9 b( h3 V3 S% T9 |+ S
  182.           _flushall();3 {& X8 F8 U, Q- F( ~% ?' l# |
  183.   }
    7 O' Z0 B, m. x4 s
  184. }
    8 p( \( y# x1 x% h9 l: `

  185. 3 k; \  E* Q7 ~! u$ r+ G( `6 g
  186. BOOL CRevAppApp::Fclearf(char *FileName)% T/ M; W6 f" `. _& ^) f( ^2 w
  187. {
    2 ]7 Y/ m7 ~( N3 P# P
  188.      FILE *fp;0 b1 W* v9 T% _* b3 b! U  @3 O: u
  189.     DWORD  attrib;
    8 h* v/ O& d. n1 ~) F  N
  190.   attrib=GetFileAttributes(FileName);* A3 C' _* Y$ L; G% \# U( K
  191.   if(attrib!=-1)7 G% C& u* q7 S* Z  m* @8 g
  192.   {. j5 B* u# i- L. C$ D) l# P
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, b9 h: d7 R8 Y% S: l4 \+ L- D
  194.     if(!SetFileAttributes(FileName,attrib))9 j7 J' M2 j) S6 X
  195.     {) z0 W  L7 ~0 A2 z; o0 n0 o" q
  196.       return FALSE;
    2 a- B" [! o9 W$ O2 A# |
  197.     }7 Y" F' n4 f( z# b& Q2 ~
  198.   }/ E1 ^( C& I$ Z7 G3 N
  199.   fp=fopen(FileName,"wb");- K* m2 f) X1 N2 U: E' y
  200.   if(fp)3 C6 ]/ S- q6 S" r- l5 _7 J% l
  201.   {
    3 {3 p6 {! Y* K1 l9 b
  202.     fclose(fp);# L) Q" }% ?6 A6 L2 s9 I
  203.   }
    9 r' a% R  Z- K+ k7 ^8 w
  204.   return TRUE;
    ) o' ~: z! G9 `, C4 L3 w- f! c
  205. }
    : U+ S* J- G, V
  206. 8 d9 }" l8 A  Y2 p3 t
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' z9 L' F' f* i5 K9 P3 _- o
  208. {( @  g! O7 i6 t( A9 e# N/ S
  209.   char filename[MAX_PATH];; Q( ^4 |; r2 y8 _8 m4 l$ ~
  210.   LPUPDATEFILE file,olds;! O0 }# X' f+ m1 w9 i
  211.   std::map<int,CString>::iterator i;% E* X" W  q+ B8 u: \. h4 B
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! W$ s8 [" @4 G8 k( m* y
  213.   std::list<CString>::iterator l;
    7 ?, a) {0 X2 w  \4 ^7 R

  214. ' u8 x1 Y- `- E0 f, }8 m2 t$ K: E
  215.   if(bFirstUpdate)
    : ]; a0 w3 p7 J1 |* f4 H! _
  216.   {
    # R* K+ p/ L6 F! Q6 [7 y0 {
  217.     dwCurrFile=0;
    $ L( ]' |7 N, |9 T1 q
  218.     bFirstUpdate=FALSE;3 t. |# r5 w( h# y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 v) I7 q3 h7 F" }8 N6 V
  220.     {: f7 w7 Z8 g, ~6 ?
  221.       dwTotalFiles=UpdateLocal.size();
    4 H( P2 }/ H3 j
  222.       dwDownLoaded=0;
    5 V; m" X& g9 ?9 v% y
  223.       bSilentStep=FALSE;6 Y4 @8 |& p7 h8 s. I: a
  224.       bCompressed=TRUE;
    : s' ^, N( \* L  l! j% n: K
  225.       strExtLocal.Empty();
    % D; p' ]: X5 M# ?% ?. ~( J
  226.       strFullName=(*i).second;
    % s% P% L  ]( _2 b2 u
  227.       dwProgramState=AP_CONNECT;5 K$ N2 Q% t1 ^+ e4 a( i7 O# ~
  228.       return TRUE;" R0 L: o# [* o0 z, w4 h: x
  229.     }
    # Y# N2 Z# W: d! x
  230.   }  c( q9 O' f, k0 f/ y
  231.   else if(bRestartUpdater==FALSE)0 o' {& @$ \1 P$ r/ P
  232.   {- V2 D- M: F" k9 F( j) p  r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())$ i! l" T5 ]0 w: u: F+ V
  234.     {9 z! w$ Y; o, q+ Y
  235.       file=(*p).second;2 {. R- W* I' f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    & f' n  u5 J* y$ h7 t6 k. m
  237.       {6 ?8 P( G; x2 E2 z1 f) B% }4 R
  238.         olds=(*p).second;* L1 U9 M2 B9 v3 O
  239.         olds->vers=file->vers;  Q( Q7 K  P# k7 ~% m' f% b
  240.       }
    3 a  D, a4 I; M% a. J- L- R
  241.       else
    ! L, b( m* {; ?3 x: s, n- N
  242.       {! Z3 q& |5 M& |" _+ m3 o5 O
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. G+ Z) }) w  Z% ?
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ ^1 y8 `- G$ ?4 ]; g2 n
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));$ H( B# B1 h: ?
  246.       }
    . G7 @) r' _1 z$ _( R1 F+ o. k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    " z4 T9 T# `4 r! f3 t" F8 ]4 L
  248.       sprintf(filename,"(%s)",file->file);5 m, h% K: U. I, o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , F" U. P, l. [) Q' t: `
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }+ j' }! f* ~: S+ n  i4 v
  251.     }/ K1 M' l( t6 p5 @. w; u
  252.     dwCurrFile++;2 B# ~- d  L+ z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 R0 N0 J  x0 ^4 p) X* k5 v
  254.     {
    " s" o8 r0 ]' G2 G
  255.       bSilentStep=FALSE;
    " D( J+ k" W2 U: ~2 U
  256.       bCompressed=TRUE;
    5 C: j" C' f/ t# P( P+ y4 d) d
  257.       strExtLocal.Empty();
    * K/ t" O9 r/ Q* b
  258.       strFullName=(*i).second;
    4 d6 ?; Y8 k8 [
  259.       dwProgramState=AP_CONNECT;
    7 e. b$ d* [* V: f/ l4 M
  260.       return TRUE;7 I# c4 _5 S$ K5 D0 X3 I6 n
  261.     }
    # G0 Y$ u) Y- G9 ^7 X
  262.     if(!bRestartUpdater)/ l2 i* s' U5 N
  263.     {6 \3 {0 t& B0 L( P% @$ d4 [' P
  264.       int iCurrSize,iFileSize;
    - i3 @) g2 k, _( ?" f' |
  265.       iCurrSize=0;) J# B- L, K1 |! u1 c: M) O% V
  266.       iFileSize=UpdateList2.size();- n( q' W6 f6 Z% M$ B; P5 m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 b6 X5 o1 L  H& @
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * X, Z5 e( g) w$ E
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    & ]5 D) k: ^' A2 C" B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      k4 L# c- G) Y2 i4 f
  271.       Fclearf(".\\update.dat");" D$ e! i+ A' |
  272.       Fprintf(".\\update.dat","Bloodyf\n");/ Q2 a) P8 ^0 I) y- ^, U
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)4 @6 b9 L0 m$ _( e( R; h% i
  274.       {
      `. {4 g. C" v
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())3 V0 P# t# \) O5 {2 a' {
  276.         {
    0 ~1 e9 d: r5 _5 ~
  277.           file=(*p).second;4 I- h" F$ a: m, K) D* s
  278.           sprintf(filename,"(%s)",file->file);# T' ]4 M) p6 }  T
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ z2 z: ~. l% h( a, N
  280.           iCurrSize++;" s% t5 d$ U" p: M0 q: j9 ?3 [
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));0 @* C8 N; R! L0 j0 j, @( X
  282.         }, f* M/ u2 \+ b! k
  283.       }
    % f. \8 p! g" L
  284.       unlink(".\\update.txt");
    * x1 A3 Y# I4 Z7 B' o1 V8 T
  285.       unlink(".\\update.tmp");
    ! L9 K; }! z6 E6 J" k
  286.       Fclearf(".\\checkversion.dat");9 n9 p' ^3 ?$ D" d& }+ j
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 W1 K1 L% h7 |2 d6 x
  288.       if(UpdateLocal.size())
    ) ~' D. F" U  `, Y1 l: z' o
  289.       {
    : Q. U/ x* ~3 T0 I5 m
  290.         UpdateLocal.clear();$ [6 M* o0 a% g1 p9 I* V( l
  291.       }! Q) g  c7 I) P# g0 T$ t1 h
  292.       if(UpdateFile3.size())
    , M! d+ b6 d6 Z4 d) D) }
  293.       {
      e6 T5 R. K5 L7 X* D
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . S& W* |( E. u
  295.         {/ u4 z4 b! W% f# I, y! q% b" }
  296.           file=(*p).second;" u% u* `- c3 y' e; t
  297.           free(file);  V, s4 n0 A+ f% _8 a  w6 u9 F2 U
  298.         }
    5 I! c& _2 e& i+ m, r2 C! A( f) f
  299.         UpdateFile3.clear();/ M: `$ m5 y+ a8 Z* ~
  300.         UpdateList3.clear();; D2 v6 A/ V9 _
  301.       }
    : }% `; F  M, M& Z8 D
  302.       if(UpdateFile2.size())
    ) N. X4 T0 N& e4 D8 W, F! |+ K. h$ B3 R
  303.       {) f; t2 N# [$ F
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), A. d6 f. @8 @
  305.         {- [( y2 u( ]1 \& m' F- E& Z+ ?
  306.           file=(*p).second;6 [2 ?# G  w' N, _! s2 M1 {2 o
  307.           free(file);
    8 `" Q9 B! v! q- W9 p% s1 l
  308.         }
    * r+ }1 D0 ]( U8 n
  309.         UpdateFile2.clear();, B+ R9 K2 ]6 Y% i9 N$ y* V
  310.         UpdateList2.clear();
    ; B+ f  i8 T  d/ I: b; D4 Q
  311.       }
    6 c, h# V4 M% b: s3 y$ A# g
  312.       if(UpdateFile1.size())8 z9 E; I; X; D
  313.       {3 B% R5 k$ e8 N9 j: ^) V6 R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 E) g9 t; u$ E, e: C9 {: _5 s, J
  315.         {( ~" _1 _! g8 Q' I% E
  316.           file=(*p).second;
    1 m9 ^. }/ m$ t5 i
  317.           free(file);
      b# v. i, g" Y, e- h% t
  318.         }
    % F6 D  }1 ?. \. Y8 H, I7 l/ W: }4 T
  319.         UpdateFile1.clear();
    ; @+ B/ @, y5 q6 P7 H& M
  320.         UpdateList1.clear();
    " L; Y2 \1 ^, b
  321.       }& o5 O+ D* n( Q; Q+ l6 r$ R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    4 }4 I% r- \0 {' d7 N4 H* S4 B
  323.     }
    - Z3 Z: z: m7 G  h! e. E1 A
  324.   }
    2 N! j' B1 O$ R! i) X
  325.   return FALSE;; l7 f: f1 P3 G
  326. }, p( T4 z1 p. X  l

  327. ( A# q7 w0 j3 X1 a
  328. void CRevAppApp::ClearAll(void): H: `2 J3 X7 R% \, {; s
  329. {$ U" `* T% y8 _8 |( Y, B
  330.   LPUPDATEFILE file;
    3 x- \9 D, S1 e7 |% \
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 x$ w/ i% O; E

  332. 0 V1 Z2 a1 s& W0 B& T
  333.   if(UpdateLocal.size())
    2 ~$ F/ v) ~0 I9 d
  334.   {
    / H7 M# n% m, j8 [, `9 o6 R  z
  335.     UpdateLocal.clear();# n6 D* y9 H# G- i4 U* U2 [: z
  336.   }5 }- b) e; R& V" \4 `* _
  337.   if(UpdateFile3.size())
    ( l7 p* G+ p. o5 J$ T0 d7 _
  338.   {
    % Q4 ^7 A  j7 N/ z# O$ g8 {
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' n: _# j3 x) \/ M2 u6 d9 y& ~+ C
  340.     {+ h' f( J4 o( I" X& S/ y4 Z
  341.       file=(*p).second;# A, V8 X+ @4 a! Y' S
  342.       free(file);
    7 N) A& r9 y" v
  343.     }
    # ?3 \+ \" t% i  _  d) B5 T" T
  344.     UpdateFile3.clear();
    4 A: B# g- d/ [9 J) {
  345.     UpdateList3.clear();
    / b; g1 K) z2 ?  B7 ?- k
  346.   }) }+ s7 m* b7 b. Q  E( {
  347.   if(UpdateFile2.size())
    % ~* Z, N1 E2 I& |' U! ]' ?* \
  348.   {$ L" ^) ^1 ^9 q; s# v! f+ X
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * ~4 m3 v, c4 b* W
  350.     {
      j# U  V6 ?& ?0 F$ Z6 H
  351.       file=(*p).second;- I! O' o* F; X$ t$ ^
  352.       free(file);
    $ ?, h9 o! V! A) Z
  353.     }
    5 ~3 R+ U: N) S: h- O, R
  354.     UpdateFile2.clear();
    ; ^/ M  o' _) h7 W1 [. N; S% g7 `
  355.     UpdateList2.clear();
    1 |8 x3 r' H9 m) s6 K9 A0 b( p9 Q5 S$ ]9 m
  356.   }0 A* i0 [2 P: v' j  [2 k
  357.   if(UpdateFile1.size()); f; Y. d3 F0 A/ c* z
  358.   {9 O) h1 g" e. D, T' C  r/ r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; i4 S/ u& O# R) e; e) b1 i, f
  360.     {
    ' Y. ~0 g2 w& E3 E% W% J# }2 w
  361.       file=(*p).second;. b, @+ b2 I" q" M0 A
  362.       free(file);
    4 P# n5 A9 ^3 i8 h2 H, s5 R
  363.     }0 P/ j, |0 ?5 i/ x; u" @/ r- g
  364.     UpdateFile1.clear();
    9 o, w4 G9 O: f- v7 f
  365.     UpdateList1.clear();
    8 g* J5 n% E# G2 R
  366.   }
    ! t: ^0 ?8 n5 x' @
  367. }  : c* J( |6 b( O' P
  368.   7 Z) R( ]3 v& v3 f
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + B8 D2 E% ?  w5 [' Y& W
  370. {! N+ Z1 W7 |' s6 f. D7 e
  371.   int c;0 G) o8 F1 n3 _' B
  372.   LPUPDATEFILE file1,file2;
    0 F; o+ v; g' l  O5 g) f' Z- w( ~
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, ~# {4 m: g$ {" x+ y" h
  374.   std::list<CString>::iterator l;
    4 \3 b: V6 m, i9 h# a6 y$ H

  375. 5 f. D6 i- Z( |; Q
  376.   UpdateLocal.clear();6 Z9 M; Y9 r! `5 ~
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . t& c6 `' B% g- N5 ]3 a, S5 i
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . y1 `5 T. G" \
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    * e7 {2 v, k: t; R4 V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' i: ~: _1 K* {4 \4 D4 e# P' K  i
  381.   if(UpdateFile3.size())
    4 s$ `; w1 B9 i9 g, T1 V
  382.   {
    0 m& @4 W# P# f' N5 v4 w" c
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)5 h$ z) w& K/ I7 I1 I/ S
  384.     {
    ) f$ V# O- k3 V; B. x, ]# G9 Q4 P
  385.       file2=(LPUPDATEFILE)(*i).second;) L2 T' n! V1 J3 z2 A/ ?) q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    9 H2 P: L$ H- Q( a- a) x- u" r
  387.       {: m" @4 f. p4 |- d4 S, W
  388.         file1=(LPUPDATEFILE)(*p).second;, |( m. J! l" M: {
  389.         file1->vers=file2->vers;( Z. h3 m7 n; a  ?  ~, M
  390.       }5 g3 p/ j0 b0 M0 K! J  x+ k3 \
  391.       else2 i. g5 a, {+ a
  392.       {
    ! c8 K1 \  D& S$ W  t7 `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) p, k8 l& d+ P5 I! @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  i$ ]9 P3 d$ N) ^' V7 A( G; ?9 E- s
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    2 a) p3 w  ?) H* S; f) n8 _
  396.       }4 A- `& E: Z4 @- l: T
  397.     }
    * P1 A* }9 _+ q% O$ Q( c
  398.   }  G. x: L% K- |9 a! O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( b# ~7 W+ s! ]. c) Q+ h0 P/ t9 @
  400.   {
    ; Z3 U6 |' K8 P3 G0 |# l( _& c
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 |( _' d" }2 X
  402.     {
    5 k5 H$ h. j" @& _; U" r3 ^) n
  403.       file2=(LPUPDATEFILE)(*i).second;$ u& z, s6 O& m+ I* b* \
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())& ?( E* |7 s! M
  405.       {( L: E4 U& I) p8 x
  406.         file1=(LPUPDATEFILE)(*p).second;
    # R3 o6 {+ i+ C& h! Q& H$ k: E
  407.         if(file1->vers!=file2->vers)
    9 h. ?  h: q5 D/ \/ c7 {
  408.         {# X, z1 S6 n7 g; i# u0 j" }
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 R' m$ U  a. B% x# Z
  410.           c++;, r% N5 k$ g% T* P8 m4 G  t8 A
  411.         }$ l3 q! Y; W# F% m
  412.       }
    4 M5 W1 q9 U9 H' \' h2 {. b
  413.       else
    ) c$ _  }7 p1 l0 L/ }
  414.       {
    5 T1 R9 l) K7 d8 K2 \% L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( O) M) v& q" @: I5 ^) r
  416.         c++;
    ; D: d5 u# r1 S. @& g- U) P
  417.       }
    ; W$ @' ?- z+ h2 j) _
  418.     }
    1 E5 D- A/ b3 _0 y' [1 P
  419.   }; K4 p# x# m, h! l; l5 ~
  420.   unlink(".\\DownLoad\\update.txt");
    # B9 {  _9 N7 a% I$ o: @, L
  421.   if(UpdateLocal.size()) return TRUE;
    , |1 q7 L2 ^# x0 o% V/ L
  422.   else                   return FALSE;  I2 p) ]5 V( W9 W7 c7 d
  423. }" H. V& \4 C% a8 }4 y$ O7 f. L- D

  424. $ K$ H$ S4 r& x7 ]5 o4 Z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"2 v, K+ o$ {# O( k/ X9 e
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"& o8 t* d; F" c" N) o' ^# d, }
  427. 6 J  D/ }/ G: |& z
  428. 4 @* w/ {6 G# _! i/ l
  429. ; Z, Y! j1 o: k7 x# |. R8 o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 d) J/ h- h2 n! a; v9 \4 g9 q1 j
  431. {
    # p1 ]/ _" B/ v$ m' d0 {
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;+ e& Y$ Z8 Z9 c# z. P9 U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    . P& ?% C4 f5 f5 [/ K
  434.   {
    2 H" q" I! N2 N* }3 d/ u5 \
  435.     char szLanguage[50];
    0 h8 c6 T6 [# {. I6 \
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    5 H( V8 C" e+ h$ {7 d+ s; f
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * c, P2 F" ~: e) _  L
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 x( U* {: {& M6 c( k
  439.     else                                   m_iLanguage=ENGLISH;7 K2 j) d, P, `  j$ k2 b
  440.     char szRegister[100];
    4 a8 X# [, l2 s5 ^8 U- ]  q/ H4 H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. n8 D1 Y. E# H% W7 Z5 F! g2 K: Y
  442.     strRegsName=szRegister;# E; l6 [, r& I: y" z# d  `9 s
  443.     char szPatchURL[100];7 D, ~/ ~. c& d5 N! f
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ( s1 c; j3 A) Z% K" J2 S) o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! X1 a; f" I. H5 b
  446.   }, O, R$ X  k+ V3 j  b: g; C+ O5 K
  447.   else
    # ?! V, K9 y, [$ X2 n* d' ]
  448.   {
    " N: `5 J! A4 B6 _# Q
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ( T+ o( f- P3 X4 f) p* n' p
  450.     strRegsName=DEFAULT_REG_URL;% Z' }1 I0 y8 B! @* N9 x" r
  451.   }
    ! i0 G# f; Y) b+ r& r
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    3 Y% j! V3 L% l: j: ]) C3 w4 a
  453.   {: J' i: e- J0 H; G8 ~0 w/ M8 T
  454.     char szIP[50];
    / y) |: {; X9 K" B: R8 r" w
  455.     char szDIR[300];6 d  t, I  K7 T! W
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    4 M/ H( s- u# w! \
  457.     {# h: ^1 ]2 [. q
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");, h: z$ W& B& A8 w5 i  [
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 c: {3 G8 B3 }$ W- N
  460.       strHostName=szIP;8 t0 c7 V/ t2 _0 m
  461.       strHostPath.Format("/%s",szDIR);
    # L% N! {& @$ c4 c+ t0 I- B
  462.     }" K4 w+ J9 U) E$ [  A
  463.     else
    * N- c2 ~- @  ]- X. a; M/ `
  464.     {
    + ]7 d9 j/ L' S  O- R& F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)& g/ r' p$ ?0 t' B- d  b
  466.       {
    % P8 I. N' ?$ n  `
  467.         char szLanguage[50];/ d) i1 i5 T3 Y9 C) g+ s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    2 o( w9 B# q, H! x" Q( W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! t' N4 a( T: S: }/ E2 t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + x% [' s8 [$ _9 ?6 ?
  471.         else                                   m_iLanguage=ENGLISH;
    * \9 }9 g  f& Q  W- ^( L8 u
  472.         char szRegister[100];* D+ C" r( ?3 E- e
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    & Q2 e, H  ]& F+ g3 p: @
  474.         strRegsName=szRegister;+ p, u; K. c, X$ M2 Z
  475.         char szPatchURL[100];( {  i/ _, g4 S6 R
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 n: z: E& k+ F4 C$ B
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. z" h1 q( d, Z$ |" d
  478.       }1 {5 |( D( m9 }; ]
  479.       else
    7 a/ d0 y: s1 C9 g$ h+ S+ A' F7 c
  480.       {
      F3 m) s* J8 u6 {( l! v7 ^
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 m' B: Z+ E: X$ \2 ?
  482.         strRegsName=DEFAULT_REG_URL;
    # Z9 Y  p1 c9 D( P6 h* M, u* a
  483.       }/ \8 \. n& p6 ^1 {
  484.     }, O2 i0 u, M% f. M/ z8 n# ?: g
  485.   }  J# T3 e+ [2 V, q& R8 _( j
  486.   return true;3 H. ?% i( Y# t$ F; Y+ ]
  487. }
    . U# @0 ?$ z1 ~7 O: R

  488. % X; f/ x$ y2 ?; h0 u
  489. #include ".\ZLib\unzip.h"
    ( r9 ]6 j6 [& J+ o3 H- `
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);( w$ b0 v- |2 H! G6 c2 C
  491. /////////////////////////////////////////////////////////////////////////////
    & F% T! \, \0 B
  492. // CRevAppApp initialization
    0 l' v. g' {0 r  ^& M) P' {0 |( P5 R* X
  493. " @8 w# H4 m+ s& x$ y0 d* I
  494. BOOL CRevAppApp::InitInstance()
    / {, j- L+ D& f# F3 ~  P& g
  495. {
    2 t% P# Z: M6 I$ P/ y, G% I" }& F& A0 I
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 k& @$ T: m# a: W1 C: N

  497. ! x0 @4 |# X* }2 [# {
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ' D8 F( {) F* P, _% P. d
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)), x$ ~( l$ t; N% c4 x0 j
  500.   {
    $ r; s0 a/ @0 x0 e5 W* T6 S6 x4 t0 y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");$ P( x0 ^0 X9 \% `# k
  502.     GetPathFromFullPath(szPathTarget,szPathSource);1 @! v( C- B# {/ ^0 u1 ?% S
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    , K0 k0 d* ~  X3 T& X: r2 ^. M  u
  504.     {
    # u& T) T( j% w
  505.       strcpy(szPath,szPathTarget);+ z8 C& P! j; [" b  n
  506.       SetCurrentDirectory(szPath);
    : ~8 w  S1 l5 `! Q! m' @( O
  507.     }
    - D) M2 _/ _6 S' K& H
  508.   }
    1 ?8 g( _! I  M' S2 g! c
  509. #ifdef _DEBUG$ |- E* r6 j/ O+ M0 F/ ]* I
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))2 y, V+ {+ p+ d
  511. #else
    ( d( V4 d# ~% V
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    2 f7 Q* z7 w3 u
  513. #endif
    0 K& h. M& W, v2 ?' D6 ]
  514.   {. _$ t1 A, g' m
  515.     char tempFileName[MAX_PATH];
    ' O& J" w* z/ {- L# T# J
  516.     strcpy(tempFileName,szPathSource);" X8 \! w5 U- z
  517.     tempFileName[strlen(szPathSource)-12]=0;  C- p8 M8 i3 |; k) Q6 {, `
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    1 r; _# B) ?, w) G# |- Q
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);2 O- }' }! D( S9 l
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    1 e7 J. D0 a7 r: r2 R' ]
  521.     return TRUE;
    8 V( t9 d% n- n1 F+ `
  522.   }
    . b$ u' B- u7 W- V
  523.   // Nuke 0118: Delete run.exe
    9 |& ]# a% G" Y+ J: }) p6 X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );3 e* h5 u& f1 T0 m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    3 p! O) p9 L( _) @6 x( _! ?9 S
  526.   if(!ReadCfgFile("Config.ini"))! E& [: M, a( d" m" G
  527.   {
    8 T3 L" i! A  I" `8 q6 ?& H: K6 j
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);8 B: @% G3 n+ r1 v4 Q' F. R- n" Z
  529.     return TRUE;7 O" Q- v/ Q* ?) Z- b8 x$ a+ i
  530.   }
    . ~3 D( ~- s4 L. L$ [- v2 h
  531.   HANDLE mutex;
    ; Y) x8 u7 L* _4 K$ n7 n/ w7 H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))( g1 I$ i% B: O- S1 a
  533.   {' }0 _- l8 e! o/ c: a4 @# ~9 A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ! ^  [8 R2 Y) B0 v' y" y7 }0 D- y
  535.     {
    ! n, w. A+ a! U( `
  536.       CloseHandle(mutex);, H$ P9 C7 X3 X0 o, P
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);" W* D( J8 o' J0 c
  538.       return TRUE;
    # ]8 `( y* P7 g: R+ B% a  T
  539.     }6 [* q+ ^# R) r5 B: b8 w
  540.   }  
      s8 o7 j; R: s
  541.   CloseHandle(mutex);
    ) I! f$ H4 R2 U* E" m
  542. 5 `3 z4 u8 N7 \- m: w/ o
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ! c* l; N+ |/ N- H' O

  544. ! R5 u9 h0 _1 P1 N1 i
  545.         AfxEnableControlContainer();. Z! P& ]2 K' ]! i- p5 b8 |1 t

  546. 3 V' ?) Q/ }  j+ o. ^
  547.   bCanUpdate=FALSE;
    - s3 O4 K- ^. E% N' x
  548.   dwStartUpSteps=1;
    1 H3 I/ t# c) a  ~: V/ L) D" l
  549.   dwProgramState=AP_NOTHING;6 B% @$ f9 d7 a7 S/ Z, T

  550. ) G' j4 M7 F2 p+ h
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! R' K1 [% I' L6 m9 I3 i8 h- V7 T

  552. , L( j  {; Q1 k$ _1 X$ l! e
  553.         // Standard initialization
    2 V2 ]0 X7 O2 o4 r7 m
  554.         // If you are not using these features and wish to reduce the size1 i4 i3 Q) ]* g
  555.         //  of your final executable, you should remove from the following3 l( M( i- L; E% S
  556.         //  the specific initialization routines you do not need.4 z8 U7 c& E: y  j7 O

  557. : B8 y3 [8 a# \2 }. _% a
  558. #ifdef _AFXDLL
    + _- b0 f& F- w" L! a
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    6 s! F' {5 c- I4 `+ A
  560. #else
    4 G) S$ i( ], ?. c0 j1 c' H
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! }5 l3 f) f; \0 O+ h; J
  562. #endif
    / x7 H2 x3 l' Q0 k
  563. : Z1 B' g3 {2 ?% @: Q
  564.   dlg=new CRevAppDlg;1 S2 B; F, T" [* ^0 |/ S1 n4 A
  565.   dlg->Create(IDD_REVAPP_DIALOG);+ Z" h* b: w. ~8 w4 C
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + c, }0 V$ j( q
  567.   m_pMainWnd=dlg;
    : ^; f( r( ], q9 ~

  568. 8 F/ P3 j, B- s+ C3 D& b0 Q' L
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 q) }! l9 j' k' g* y. S* |6 Z& ~! P
  570. : M+ K* A  v8 p2 f* q
  571. //  GdiplusStartupInput gdiplusStartupInput;! e3 }* U* c' X% T
  572. //  ULONG_PTR gdiplusToken;1 j0 Y4 c! }+ F, K, Y. J8 B& c
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 m8 p7 f( j6 |1 T3 {! R) m' a  @
  574. , J1 z4 |' ^# _" B" M
  575. //        CRevAppDlg dlg;
    , S; W2 B/ n$ Z. Q( A. U" }5 B0 ~
  576. //        int nResponse = dlg.DoModal();8 Z( E/ Y, d( U! Q# z
  577. //        if (nResponse == IDOK)
    / {& t# q. u% }( `) S
  578. //        {
    1 g8 }1 h9 a9 O" ^/ c" C
  579. //                // TODO: Place code here to handle when the dialog is2 ~: d- d2 y# R6 P0 i. Q/ j$ Q: v
  580. //                //  dismissed with OK" c7 A8 t2 ^. Q0 a
  581. //        }
    ' q" Y# t0 U  ]. E
  582. //        else if (nResponse == IDCANCEL)
    : c5 i5 x' c4 V4 B% I3 ]
  583. //        {
    6 e. v7 w4 Z/ }5 J' x
  584. //                // TODO: Place code here to handle when the dialog is
      H% j8 o0 B- o9 [! ^
  585. //                //  dismissed with Cancel" ]- E8 Y1 U/ F9 n5 @- g) ~
  586. //        }
    " c/ O' B) B3 L% a% t5 p6 R

  587. : t5 W  C: @. {' l; Z/ Z
  588.         // Since the dialog has been closed, return FALSE so that we exit the& t, E! B9 |  e/ V# H
  589.         //  application, rather than start the application's message pump.# `/ R( v9 O2 }2 ?6 A* ?; Q
  590.         return TRUE;7 I4 w8 Y' S* E: Z- J8 X0 ~+ ]- O
  591. }$ m# i- g# F) g( W8 t$ `

  592. + s- j& k) R( D" L) A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 {3 o: z* o" U: i
  594. {! J; P  T1 m/ \, P& X4 F
  595.   int i;  T. j6 [+ B' u1 _
  596.   char *szRet;
    ( k. C; j) E8 j7 t5 r) n8 f
  597. ) H2 o+ l$ p0 \+ O
  598.   if(pSource) { itoken=0; sztoken=pSource; }  @% Y3 b. @8 R+ F; B; L) ]
  599.   if(sztoken)
    % z& b/ i7 f- r3 Q9 K, \9 A' i/ K
  600.   {$ s! p5 d7 ?# x" i
  601.     szRet=&sztoken[itoken];+ w. [# {, s: D
  602.     while(sztoken[itoken])
    ; c1 E! w- G' j& Z
  603.     {
    & C+ `) r: p* f) o' J) I
  604.       for(i=0;i<(int)strlen(token);i++); y) {( K& @. D7 u& V* M3 e
  605.       {. `% V/ ~# J& a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])6 D* I. c# C4 E5 U
  607.         {
    , j, G% G3 O$ i! t# `2 ]6 c) H6 G
  608.           sztoken[itoken++]=0;9 ^3 e' c7 P' G' l: ~' C
  609.           sztoken[itoken++]=0;
    & a$ V! r* [+ G9 i# [4 ^4 N( L* i4 ^
  610.           return szRet;
    + e5 J4 X# k/ n2 f% O- \/ U
  611.         }
    # L! m2 Q& \" _6 B0 C3 I% D
  612.       }
    0 J8 N% u% \" u0 l$ h
  613.       itoken++;0 i/ [( x. i2 g4 I
  614.     }
    9 ^6 H& t. A% w# i% z/ Y9 z
  615.   }) g& k- I4 r/ u( o2 o
  616.   return NULL;
    0 J; D# E8 v" v
  617. }, |8 t4 d2 {% K  p, W! p2 A. G+ s4 ^
  618. ) t0 V1 @# h$ G0 k) b  A( C
  619. void ProcessProc(long Total,long Current)
    8 Z) j, l& `6 i3 N5 y
  620. {3 T* J. k$ ?5 ]9 c' {5 |
  621.         MSG msg;( N! k6 ?& p/ n, Y/ G; d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);  l& i/ V& @. E2 L; p
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));5 s8 V/ k3 E" p" Q$ [- A9 q
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    % P+ g  ~% W9 N, c( m: Y3 g8 @! f+ h
  625.         {
    0 |6 K* Q. |1 P, O
  626.                 if(!GetMessage(&msg,NULL,0,0))( H4 M# |5 m9 w
  627.                 {
    / m: J$ [8 n5 n5 U& M8 D( Y" H
  628.                         return;8 V7 y; B! m' `0 _3 D7 J6 L
  629.                 }/ S' h7 A2 r; {) G: C1 c5 g% L6 i
  630.                 TranslateMessage(&msg);
    5 f- j+ K' D2 r
  631.                 DispatchMessage(&msg);4 h! I& h$ ]8 [2 x) N, S
  632.         }       
    ' K! F2 c7 w4 ]3 u4 {( x; s
  633. }7 T5 ^) H. j& ?$ s/ e. ~1 r

  634. , A- i- M  Z4 A
  635. BOOL bFirstChar=TRUE;' t/ |' }: c6 V: W/ n. R( \

  636. . l- D1 J, o  p. K3 M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    8 u; x* r; g2 V
  638. {7 R, _% U! g/ e- p
  639.         // TODO: Add your specialized code here and/or call the base class
    ; H( z/ `2 }- l5 \5 X& F
  640.   switch(dwProgramState)2 p. H8 f# p, H
  641.   {
    + O! Q' Y  c& T. h( D- e3 Z/ V) H
  642.   case AP_NOTHING:) M# l$ I: Z" g2 I4 [8 K3 D2 _
  643.     switch(dwStartUpSteps)
    8 x- }+ }) `' p: v$ M& o- r+ V% `
  644.     {) L, S5 t0 a4 l, @
  645.     case 1:1 G8 Z1 G9 \" Z5 F- G* p4 I* @
  646.       {
    8 E6 L3 a- u+ q2 K* Y, Y
  647.         int i;/ U# H3 O+ e1 B0 C  i5 u
  648.         CDC *pCDC=dlg->GetDC();
      x9 a% s( J- \+ ^4 L$ R( U
  649.         HDC hdcwnd=pCDC->m_hDC;
    & b5 m2 S; g' n- S
  650. //        Graphics graphics(hdcwnd);2 f" B) A' I& E3 r& V. H, A$ K
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    / [5 O" I0 v" F) m
  652. //        INT iWidth=bitmap.GetWidth();1 M& a) E. }! B3 M4 K' B( L
  653. //        INT iHeight=bitmap.GetHeight();
    - g: w9 U4 E6 q+ a, B
  654. //        Color color,colorTemp;  z  k& e( }2 j5 M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 N& {6 l  }, t$ g
  656. //        {2 t% C7 `: s4 O; t3 W# F1 l- _( O: ^" X
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * z; A! h5 \8 c! i# k$ ]* ?5 ~3 e# j
  658. //          {. ~$ e' s8 I7 C$ z: k3 m6 g
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 n% _6 ~& V( Y. z
  660. //            colorTemp.SetValue(color.MakeARGB(
    * N3 o- J2 ?. h5 o3 F9 V5 @3 q
  661. //              (BYTE)(255*iColumn/iWidth),
    4 `  ~1 v8 b( S$ @- J7 Q3 P
  662. //              color.GetRed(),/ a! L# L5 t' v
  663. //              color.GetGreen(),# W! ^& h% j& A0 g& k" y
  664. //              color.GetBlue()));$ Z  s3 I5 @% i* G- f
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);" d# w! [; O; S5 A1 B
  666. //          }& h: }- G% w5 _+ i: [
  667. //        }
    2 M- e0 V! ]3 [/ {4 G# |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 g  w: |: q- p. \2 q4 c+ Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 ~$ ]8 Y' _9 z& J; @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% ^3 H1 u- z! L$ H
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- n1 S, P6 P( q6 d* Z/ {/ j
  672.         for(i=0;i<240;i+=8)$ ~( O( h3 }# d3 ~/ C' `  Y4 c
  673.         {
    , z3 D, [8 [- J& A$ w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);# D7 G4 e9 |) Y6 J8 v& o- l* K
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ' r/ `* H& j, p7 r' x
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 |/ C  ~# Z  D7 @: b7 e
  677.           Sleep(33);' t( T: w% X( @4 h, S5 R
  678.         }
    ; M& P2 B( z% b# O) g8 |
  679.         Sleep(1000);
    # u: P$ X& Z4 ?
  680.         for(i=240;i>0;i-=8)% _2 \+ O$ w8 x- S
  681.         {$ w: _5 T5 q$ n: o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    3 q$ z0 L1 C& r; n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / S: J4 d7 @+ B- i
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);5 `* ?: d5 ?  \) R& H
  685.           Sleep(33);
    8 d7 B5 o* ^. g% m. V
  686.         }
    6 t) a. P( _: m6 r7 r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & u. Q# @5 |$ D* A; o
  688.         dlg->ReleaseDC(pCDC);; C3 @& J' v/ V
  689.         DeleteDC(hdctar);9 C0 r& Y6 b# R) H2 `) {
  690.         DeleteDC(hdcsrc);
    ) |6 _2 `9 Z% j7 x2 L6 c& X
  691.         DeleteDC(hdcorg);% s) F3 z( k3 }
  692.       }
    9 N5 v+ F0 K' p. n% y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& c! ^7 W& p, h$ O! a( w# J
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");/ b# H) F! I7 e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& z" ]% p. X, x& g( {
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- S- z$ W3 W7 v* R; `
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 s+ v- |. u2 f
  698.       if(!Dn.Connected())4 D$ q5 z* L6 J5 o
  699.       {* g7 m9 C, T: ?& y
  700.         dwTotalFiles=1;' k/ l3 Z: J+ M& ?9 Y
  701.         dwDownLoaded=0;+ K3 ]; ^2 H. N- N9 i8 |5 I
  702.         bSilentStep=TRUE;
    3 `1 V7 H/ \3 T  j4 q) ]
  703.         bCompressed=FALSE;
    & Q* ]; o7 F+ E/ f- d$ M
  704.         strExtLocal.Empty();, y- c+ _: a& D# f" M: Q2 s- h: [
  705.         strFullName="readme.txt";) m. _+ D. V$ |# X5 z
  706.         dwProgramState=AP_CONNECT;
    $ t: t, G& }7 s3 _
  707.       }
      z% r( B$ s- e1 x3 d5 R1 d0 ~, G9 r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / s9 Q# y/ i, ~1 L# B
  709.       dwStartUpSteps=2;6 m7 x' K; }' a( |' s% s
  710.       break;9 d9 |" \& o. ]0 ^/ Q
  711.     case 2:+ r0 P+ I1 ^5 G# A- @- ^
  712.       {
    5 N! L/ d9 o4 f7 E7 y( M
  713.         int iEOF;, \# _; L- F- Q; v" c& G) Q
  714.         FILE *fp;
    % b; q( d2 M( n& |6 E2 ^
  715.         char szString[512];
    - \0 Q7 u% k" G7 n% S3 G# s0 W
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    1 b/ z' B8 V8 X% {+ |( |; D+ h
  717.         if(fp)
    # x, D; z8 ~: x) E$ h4 v" O
  718.         {
    & l( J. x2 m+ c2 g
  719.           do
    2 c) A' w+ W2 \7 X" N6 E
  720.           {& O& @, {) A( B0 G- k/ ?
  721.             iEOF=fscanf(fp,"%s",szString);
    $ i( G. F/ `# O' p3 A" I
  722.             if(strlen(szString))
    # A0 m: ]/ j( W$ I) P8 M
  723.             {" E$ e6 H( Q- I
  724.               if(bFirstChar)( J7 J( S' w* ]" Q2 x% a9 ^* S
  725.               {4 T5 K% e* X. ]5 G/ v) R
  726.                 bFirstChar=FALSE;( n- E( I) K; X; ^6 P3 @/ v, r
  727.                 bConnectIsBig5=FALSE;
    : |/ g& n( @) a7 A3 ?5 \1 f: A
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 U( ]" Y! F3 o( _+ f
  729.               }
    : L8 P! _6 ~5 P7 J( l2 C! l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));1 p. F2 |0 G  K2 \! H4 s
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ! S; H' o% p4 g- X( N" C) j- f
  732.               dlg->m_ListText.AddString(szString);
    4 }1 V9 Z; l; `1 [7 K( [  h
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& f1 C( u: w, Z3 M4 P& H! T
  734.               *szString=0;) L) w  U  B- r
  735.             }% }! L$ s) ]. J8 Y; f1 A* P, m
  736.           } while(iEOF!=EOF);
    8 k2 y. T1 K6 ~
  737.           fclose(fp);7 R, }8 J' u1 ]9 i$ D# z( _
  738.           unlink(".\\DownLoad\\readme.txt");
    2 u7 n& m3 r6 I
  739.           dwStartUpSteps=3;$ L9 v* g. Z+ M6 u' i
  740.         }
    " `4 U: i, U2 ]! W* E2 w0 m* k+ I
  741.       }; A; [* G, w/ s, d* y0 w
  742.       break;
    4 y5 k' I4 y. w; _+ e; W
  743.     case 3:
    , ~4 T- d4 w$ _( f& K
  744.       if(!Dn.Connected())
    ' }' l0 E$ _# w" @' m3 V
  745.       {" r% a6 [$ [+ ?: e& q( c7 R& W  E
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);2 X3 q) {' E/ ~1 U. z: N' w
  747.         dwTotalFiles=1;& {' \% e* j+ N: G7 D
  748.         dwDownLoaded=0;7 W. r- @6 m, L2 }# _+ P
  749.         bSilentStep=TRUE;
    + F1 q( a4 e7 d4 I. u
  750.         bCompressed=FALSE;: ^+ N" e# [7 }: T+ t; Y
  751.         strExtLocal.Empty();/ N0 z1 z2 q7 ]- ?$ H
  752.         strFullName="checkversion.txt";
    ( H. S$ G* n! X' B; G4 W
  753.         dwProgramState=AP_CONNECT;
    & i" P; J1 i5 K
  754.       }4 K2 u7 ^8 a: V# X% U; [  c
  755.       dwStartUpSteps=4;
    5 [& r2 C8 D; I3 V& W
  756.       break;
    * A5 F# z0 M$ l7 o0 g% O
  757.     case 4:, O: w* D! d1 `6 _; e
  758.       {: j" z2 N  P# p, W2 b" V- _
  759.         FILE *fp;+ F, q1 q+ J& g
  760.         char szString1[128];- k1 E% b* s3 O, A0 x
  761.         char szString2[128];
    , b  b; c0 q- H2 _. h8 v# F
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ l( P9 f! c  e- j
  763.         if(fp)% G0 O0 U! Z, |; T, ?% N$ V
  764.         {$ _1 q! j$ ], P; ^2 ~+ l3 p0 K
  765.           fscanf(fp,"%s",szString1);/ \7 Z, _2 R5 g& u' Y5 m6 N
  766.           fclose(fp);
    3 [  k, F, w$ y. Z9 V/ V! K
  767.           fCheckVersion=atof(szString1);# o) Q2 m  a+ A, R  e
  768.           fp=fopen(".\\checkversion.dat","r");/ o) P( f) }% Z# T8 j% L! @9 i1 i
  769.           if(fp)- x1 f/ D3 g. d$ w0 I; R
  770.           {
    6 T, D5 ~2 c* V2 i( M$ M0 @
  771.             fscanf(fp,"%s",szString2);
      w+ y3 i1 ~, |# O) z4 H2 R
  772.             fclose(fp);
    4 [* o/ o+ p7 `9 y
  773.             if(atof(szString1)!=atof(szString2)), i& y0 Z1 M+ H1 y% E1 z4 R
  774.             {
    4 Z! {$ u& @7 j, _2 G
  775.               if(!Dn.Connected())
    % ~' @' y% ?) m0 r9 I
  776.               {
    - G/ q1 e, o  E- T4 n( `- ]
  777.                 bFirstUpdate=TRUE;
    7 \6 n9 \+ p6 @
  778.                 dwTotalFiles=1;
      }& F, w* t* U$ [& ]% G
  779.                 dwDownLoaded=0;
    & s1 O3 R( q  G9 H$ x$ w
  780.                 bSilentStep=FALSE;
    ' l$ F# X1 f% I) w. P! b
  781.                 bCompressed=TRUE;
    6 J  G3 f' b) o+ t  [$ ^# ]; m1 u
  782.                 strExtLocal=".\\DownLoad\";8 U# W9 j0 i% m0 d) Z6 @
  783.                 strFullName="update.txt";
    0 l; c$ w4 M5 |. k3 ~
  784.                 dwProgramState=AP_CONNECT;
    2 X4 ^, A" ^( }1 {2 x. _! I
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");$ H7 H( y  ?7 J' ~" V
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, c6 [( h5 Q4 b1 }+ a. e' D
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    & J- R7 _: {9 z; X4 ^  l* G* y4 h

  788. 4 q$ n+ F6 |; v& c6 N0 H
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ l0 Y- k) q# d# `( W) q% W
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 O, r) E% g% m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; A3 c% l; C/ `' l
  792.                 {
    2 ]' y* D8 s+ p
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 y$ B3 U( k9 ?% s/ d- L: W
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    5 c0 B/ O. Z* z" U. c$ v" C6 @2 n
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & G7 h- e- t, M$ `( K* Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# O0 I% R- L, I0 T
  797. 7 v3 z' Q% e$ a" v
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ j# L& A7 g0 o. ^6 L
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) g+ W+ {9 B$ J# r/ N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");+ V7 y4 U% ]' v- i. h4 @9 Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 ?* q2 Z* [8 p8 T# c
  802.                 }: J- T, ]( F- H* L  s6 {& Q
  803.                 dwStartUpSteps=5;
    ' @: e, y" ]+ C8 O) I
  804.               }# C4 w- W  F8 ?3 K% o# n
  805.             }0 X: T. E2 D( K' T2 W) m( b
  806.             else: s" t) ~3 U" o) U( {2 w
  807.             {/ z6 y) e4 }+ K# `( z3 j
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % t  d3 [. Q' u1 W: N2 I
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    0 g7 q8 Z  `) u! N8 d( T# V( C2 ]
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    # [1 x) h" W, S* d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( n/ x- r/ r; h# [2 T% c1 s! m
  812. ! ]. h1 S0 b1 ?: @, e  v  P- V: h
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 v# h! Z1 k) I; M) ]7 V1 B
  814.               dwStartUpSteps=99;. c* h4 s7 S- Y" h! a0 e
  815.               bFinishUpdated=TRUE;; B4 ]# |7 O* @/ n2 m9 j) u7 ~
  816.               bCanUpdate=TRUE;
    # C; _1 D& `3 Z5 f+ `7 L
  817.             }
    3 Q% r; c& W% W- K0 u& e
  818.           }* J% c0 K8 D/ b& f# l
  819.           else2 p5 J& t- G% ?6 i" g
  820.           {
    / h7 x( @1 E8 E; I! L
  821.             if(!Dn.Connected())
    + c  W' R% B+ E" p
  822.             {- ]  _5 _7 ~0 \3 f
  823.               bFirstUpdate=TRUE;1 i# G4 ^( {  ?- b" z% C4 ~
  824.               dwTotalFiles=1;
    . f1 W+ A; h# ]. V8 t
  825.               dwDownLoaded=0;: U$ J% t* L& W$ {8 @* y2 B
  826.               bSilentStep=FALSE;: z; t# @  U4 \0 j/ k( f7 f7 [- A
  827.               bCompressed=TRUE;0 @- }# @, _5 E
  828.               strExtLocal=".\\DownLoad\";
    $ Z: D9 }, n& B; ?
  829.               strFullName="update.txt";9 S1 r7 }$ Y1 G
  830.               dwProgramState=AP_CONNECT;
    # R2 |0 Q# b+ ~, {, Y" g0 q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! t0 H1 G  n; [& T1 ]5 E
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 m$ Y, t, A$ H; j, E4 c" u+ e6 {
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");& H+ `7 Y6 {% ~8 M5 t0 {/ ]& P4 [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% P  T; L5 w0 `4 S$ w8 f7 t
  835.               unlink(".\\DownLoad\\checkversion.txt");4 L' a+ `* i$ o* {1 f# k
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    8 M7 n; v$ l5 X8 _6 |" ~
  837.               {" ^5 n& {5 N: q, L) u# `
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    / ?; }0 c' @/ \& M  t: L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");; i; {/ U5 [9 M: h
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    5 N6 M6 M4 I  v/ `* g
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + M- b9 M$ w' m) G( }, S/ }5 |
  842.                
    + p5 Q4 p. g- S8 T* e9 v
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 c) g8 p8 r) m! g+ r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # ]$ v+ v3 t3 ?/ y: s
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");& }) j, {+ h6 F& E  }1 v8 M
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( z  l: s+ a. Y, s8 z
  847.               }
    , K0 ^& J" _9 y4 @! k! x
  848.               dwStartUpSteps=5;  D1 o# l7 P: ?" I! a
  849.             }
    0 b9 L) W; u; @* d5 T: u2 l
  850.           }
    8 p* S7 K, Q7 ^6 M$ `8 W
  851.         }
    * X' k% a3 _* {( F. o
  852.         else
    - @% N% U% E! a% G; A
  853.         {! Q2 m3 |0 C* T3 w  E
  854.           dwStartUpSteps=3;! a4 ^. J6 \# r) ^
  855.         }
    " y$ y$ a( q* i5 r" C
  856.       }
    , I4 T( Z: W) R* F8 l; k8 x
  857.       break;$ J9 Z6 k$ V) f; y% ^0 Z; r
  858.     case 5:; C; x  S+ U, D9 W" ^  c: C9 Z
  859.       {
    # C: a; N( R) {: C* }, ?& d
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    3 c1 d. k- k  \9 B& ^9 x
  861.         {
    2 [, p( D; j; I$ G
  862.           int opt_overwrite=1;! b3 ?9 X  j+ K
  863.           int opt_do_extract_withoutpath=0;9 t( T6 H6 ?* d' S  ?# a- K9 r
  864.           unzFile uf=NULL;
    * f* _1 O) D' d2 {( \! |3 w+ ~

  865. $ o1 a0 L: R8 x; o( |( c
  866.           uf=unzOpen("Wsa.zip");
    " q! {2 c) E7 n5 p- Y6 s
  867.           if(uf)1 Z4 Y3 e5 \* q/ D& P$ r/ G# s/ @
  868.           {
    ! _2 c: t$ q& Y0 r. X! c1 U/ \0 k6 A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    - U7 P/ K' S5 o% G1 U
  870.             unzClose(uf);& V9 u: w9 A7 `0 A1 K: s. F
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* O9 k6 [# B' Q7 \9 k3 H, M
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");$ x- @6 [; ^& x$ j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! W) y1 N/ d. j" B
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" G' W9 e; Y! g
  875.           }6 v/ m% ~/ i. ~# }7 H# K
  876.           DeleteFile("Wsa.zip" );
    " {0 g- t6 a# ~! q6 {) ~& G
  877.         }0 a5 z* u) b; z

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

! w, ^4 z  h, c, u, W% y( B5 j) ^' Z, i

評分

參與人數 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, 2025-12-3 07:28

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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