找回密碼
 立即注册

CSUpdate.exe源代码

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

6 i' R6 M+ @, W' R, I+ [
  1. / RevApp.cpp : Defines the class behaviors for the application.
    4 L" |3 Y. P+ \, |6 v7 S
  2. //
    % M, }& Y8 k" n( ]* k* [+ g
  3. * l- H" s6 A* Q$ Y+ C5 ^- P/ z1 X
  4. #include "stdafx.h"
    , H* d- I& }( r- ~# u
  5. ; G1 {- f/ G' x: }/ Y2 T' s# Y
  6. //#define UNICODE
    % }+ a$ _8 v5 m7 W- w6 i' z, Y2 v0 I
  7. //#include <gdiplus.h>6 I$ u$ t4 P' L$ e
  8. //using namespace Gdiplus;7 ]+ i5 m, _! d  l$ _

  9. $ N- j2 t: d, p
  10. #include "RevApp.h"9 O0 T2 T2 ^0 u- ^( X: N
  11. #include "RevAppDlg.h") l! p0 {6 P# t

  12. $ p. L* a; X) o1 p
  13. #pragma warning(disable:4786): @+ w; P: m- X6 X
  14. #include <map>
    7 C* ?) I3 n' p0 i4 c( l. B1 Z
  15. #include <list>% N& n6 h: r: s+ q# _' U
  16. #include <direct.h>
    - h& H1 b5 O/ N+ T; E

  17. + }8 g0 |- {9 G+ `2 R0 c
  18. #ifdef _DEBUG
    7 M/ f0 e) X7 a. }) B
  19. #define new DEBUG_NEW
    , R3 E2 |/ h% c. G8 ?- Z
  20. #undef THIS_FILE
    8 k+ m" [4 ^6 h5 x7 D
  21. static char THIS_FILE[] = __FILE__;4 d$ x( n) i# w0 W3 q1 F
  22. #endif
      f* j& x5 v% F2 X4 t! Y" a
  23. #include "SkinResDef.h"
    + x4 h. b, J7 H) n! b8 C
  24. #include "ChangeBG.h"
    ! z, s' E7 d2 y
  25. #include "AFXINET.H"1 Z. E* @' u9 X; }
  26. 8 r! X: E0 w5 o
  27. #define TRADITIONAL_CHINESE 02 Q* y& M! v. A; [# E
  28. #define SIMPLIFY_CHINESE 1
    ! K" S5 r$ x  Q3 c( R& S
  29. #define ENGLISH 2
    ' [6 S0 m$ q2 f9 v, z" s
  30. int m_iLanguage = ENGLISH;
    3 y' L$ a, N9 w) E5 ?0 f9 t# Q
  31. /////////////////////////////////////////////////////////////////////////////
    ! f/ G1 L- B0 q" \( C7 v
  32. // CRevAppApp/ [) r; [; f) u* ~/ a5 f

  33. ! R: S3 Z- t1 ]# v
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ) W: w: ?* j+ b$ D* \
  35.         //{{AFX_MSG_MAP(CRevAppApp)' ]7 c' d! n, K* }# H- s
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.8 W) M4 m+ s7 M! v3 u3 w5 {
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!. B% }* T2 ^; X. L% U
  38.         //}}AFX_MSG& Z. C' H+ W" [& N) R1 o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . w8 y5 K3 G/ D2 f
  40. END_MESSAGE_MAP()3 K; `2 O5 a) Z2 u2 T2 f
  41. # F$ i, {. i1 [, b3 P
  42. /////////////////////////////////////////////////////////////////////////////
    ) ?5 ~8 c6 a0 {5 \9 d
  43. // CRevAppApp construction3 V: G5 ~/ }" n6 _1 @. D" \

  44. 7 a3 J+ m; O" i; C
  45. CRevAppApp::CRevAppApp()
    ' i- E4 \: z4 O2 ?0 e
  46. {! s; k( a- l( S" ~; T
  47.         // TODO: add construction code here,
    . v, F$ ^; \6 K2 x
  48.         // Place all significant initialization in InitInstance
    7 b5 E7 x1 Z  B: B% _
  49.   bDisplayIsBig5=FALSE;
    ; m8 ?8 }- X, X# L9 ~
  50.   bRestartUpdater=FALSE;
    ! l! W: r( O8 D8 z0 T  P
  51.   bFinishUpdated=FALSE;
    1 X) e( R% B" d
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
      c. B  N3 }! Z4 k
  53.   InitChangeDataBig52GBKS();
    0 G2 B& n8 S# W( o) U  x0 n
  54.   InitChangeDataGBKS2Big5();
    / n- w# a1 K) r7 z  ]' o
  55.         //
    , d  y( Q5 S7 e5 u, Y6 }% h0 \
  56.         bClickRunExe = FALSE;! t. u1 y$ O+ ^# }  {, q4 n& S7 D
  57.         //
    / q- J! B! t* \0 A. O8 l# b
  58. }
    : u; |( |7 x# w  P4 o! C+ Y; }

  59. + b6 w+ b, z" o& A" q& X4 y: P
  60. CRevAppApp::~CRevAppApp()
    8 v+ \1 N( c# ]4 I
  61. {
      ~4 u; O1 i- r4 F# Y8 M
  62.         // TODO: add construction code here,
    2 l0 w8 t; N' f: s. X7 i( k, N
  63.         // Place all significant initialization in InitInstance
    , H+ N; ]( c. U. z
  64.   EndChangeData();
    8 h7 @9 C7 Q9 V: y/ E" E
  65. }8 O$ G% w0 j4 {/ ~( D, u
  66.   j5 T  x) X! o! s9 ]
  67. /////////////////////////////////////////////////////////////////////////////
    / Q, p# P, D' m! V( C& Y2 x
  68. // The one and only CRevAppApp object: G4 Y* L* ^% A  g

  69. 0 a( m: ~2 ?% U
  70. CRevAppApp theApp;! a% y2 l8 f8 p  Q+ E
  71. . C+ E% a! n; m% L8 ]7 ~& v
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ ^* C1 c7 p, q$ {
  73. {
    5 d7 O2 k. j& O8 s
  74.   int iEOF=0;  N1 r0 p. G2 K& a- h- T- r
  75.   char szTempName[MAX_PATH];8 e" o- s  _/ k1 U" r- `) v
  76.   *szFileName=0;
    3 M2 N3 K# L: w% D
  77.   iEOF=fscanf(fp,"%s",szTempName);
      G7 G& L, S7 J: ]
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 B0 T$ S4 f) i3 i& M, D; b& F4 ~5 J
  79.   {% {) ?% ~0 f) o
  80.     strcpy(szFileName,&szTempName[1]);) ~/ |5 ]$ W8 `7 E. Q4 o
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    0 T! M. G! x: o$ H$ ~# c- m7 t
  82.     {- v; c# m9 o$ S$ l2 r+ L
  83.       iEOF=fscanf(fp,"%s",szTempName);( k5 O' j1 Z; N/ c' A5 C8 W
  84.       strcat(szFileName," ");1 A. [, m. U2 ]. A$ [1 k
  85.       strcat(szFileName,szTempName);
    : F8 Y5 O# l( F; M7 W7 t, S
  86.     }
      [! a' ~% n: ^+ L
  87.     if(strlen(szFileName)>=1)" d4 d* `3 z5 l/ e% k  X/ I
  88.     {
    & R1 I; H6 \/ X
  89.       szFileName[strlen(szFileName)-1]=0;
    ) J5 c8 s) v/ }/ {
  90.     }3 P# P3 [2 r: ?- v. }) x
  91.   }
    ! @, D  o2 R4 f, N' c5 x9 E# U/ ]& d
  92.   return szFileName;
    4 i! s3 l; L5 {
  93. }$ J7 x/ o0 Y+ r: p/ ^
  94. - U0 d1 f7 _2 S( j
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)9 `9 w( z$ r/ y& U/ s# C
  96. {
    : U( @7 h0 X. U) [: g6 k7 k/ V
  97.   FILE *fp;
    . i9 h* Z" T% t) s  A4 C* |( I
  98.   char *key=NULL;& Z7 Z2 N2 X! J# L. u2 b" i: f
  99.   char version[MAX_PATH];& E: r2 M2 p% h) e
  100.   LPUPDATEFILE file,olds;6 f3 X* |+ ^4 Z$ q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) t: d, H$ {1 c4 [, z$ H! x

  102. ; I9 R# l4 W1 R2 C6 C/ x
  103.   UpdateList.clear();
      `/ H  ?; b2 N* [4 h
  104.   UpdateFile.clear();
    7 S4 M0 m' {6 l  {+ C+ k$ W- j
  105.   if(GetFileAttributes(filename)==-1) return false;
    , k3 a3 ?( J# X; E! |0 H4 Y: J. s
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) o( A! w- s; h5 t2 I
  107.   fscanf(fp,"%s",version);
    # Z% R1 m9 y) X5 q# Q
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    0 P% y& O; P) X* ]7 U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) L* p7 @3 i; ^9 p
  110.   {
    0 q4 ~. E5 U, ?  @
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) K" R. Q5 ^4 {  s; }( k8 N  Q& w
  112.     fscanf(fp,"%s",file->path);
    1 [! P% s, X: w' l3 p4 n8 }
  113.     ReadFileNames(fp,file->file);
    & Q6 f- _* |0 k9 f2 `' ]" g
  114.     strcpy(file->full,".");
    ! C  f- z' M; `; C& Y4 \/ a
  115.     strcat(file->full,file->path);
    # Z) e3 A/ p0 _6 W: S5 _5 h
  116.     strcat(file->full,file->file);
    7 [$ _& S' ~' Y7 _/ `" r! j
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    : i- |( n2 Z$ X" D% ^- w5 ~
  118.     {
    6 Q* t0 A: w3 f2 L3 s. W: @: c% h
  119.       file->vers=(float)atof(version);
    + F# ~+ Y& i# r% s# C& D* K
  120.       UpdateList.push_back(file->full);
    ; c. _2 w8 H9 H  f
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 N( ]! P5 ~8 Q
  122.     }
    7 W, Y5 D  P* F8 `. {; \1 G/ g
  123.     else' c- _8 G. N; T7 k9 {) L# Y
  124.     {7 s& V5 h6 b/ V$ [8 z3 i( I
  125.       olds=(*p).second;
      h9 @3 Q, B( m8 d! W
  126.       if(olds->vers<(float)atof(version))$ [/ W3 B* j3 q' n
  127.       {' x" m7 ~& Y* R8 G  S2 ^; [1 Z9 w
  128.         olds->vers=(float)atof(version);
    " F6 @, P; M* H# `3 {
  129.       }
    2 T- `! N# W1 D" Z% D0 T, k
  130.       free(file);
    3 G/ ]: g8 L3 E( ~/ C  N5 X
  131.     }
    1 u: l" f" N1 }  _: a
  132.   }
    4 z$ |. _& X2 e* E# @# |/ J
  133.   fclose(fp);
    : Z! i. u: u: Y0 _
  134.   return true;
    0 l( ^; [, E5 o
  135. }
    . \. @  Q8 P4 X& U" q

  136. " F; B! e6 q+ w
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)) t- z4 T5 c2 ?- X. W1 N
  138. {
      g6 V! w( g, @) `- Z
  139.   TCHAR  szFull[MAX_PATH];
    * y0 M; \6 u. b% ?0 |- v
  140.   TCHAR *token,*inter;2 T0 S0 J7 S& ]+ S
  141.   *szPath=0;
    ; a0 K$ D% y/ q7 f+ n& S
  142.   strcpy(szFull,szFullPath);
    . v& f, ~, y$ n" u, V0 [
  143.   token=strtok(szFull,"\\/");/ V$ |: V( n# ]  a% O$ d
  144.   inter=token;
    $ }$ T5 K; m2 B. Y% Q( y3 A
  145.   while(token=strtok(NULL,"\\/"))
    % b+ F" C) ~$ C/ }, z
  146.   {( f" t+ _2 f* {9 O3 j2 S
  147.     strcat(szPath,inter);! i0 W8 `6 G% E
  148.     strcat(szPath,"\");" A# Z3 Q' n. u1 q
  149.     inter=token;, O' ]& k; ?; r6 Q* n! W
  150.   }% P$ a' {2 D2 R' W8 m
  151.   return strlen(szPath);
    - I7 }# r% y; e& G7 E) O2 _
  152. }
    & M2 w$ x; o. r
  153. * v& m) p, Q/ X$ \
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 @3 C: ]  T! M- o
  155. {6 l6 g  A0 c* M- c' F5 a
  156.   DWORD attrib=GetFileAttributes(Target);
    2 x- o/ ~) J2 q7 ?
  157.   if(attrib!=-1)
    9 u8 H( E* ^$ h5 X& Z0 W
  158.   {
    & f: N& S8 S" s* C  i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))5 l8 G- m& u! k. v
  160.     {! d# d5 ?, I& ?' H0 z" C3 X& G
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    % L* k( K1 l& m4 o: ]! |
  162.       SetFileAttributes(Target,attrib);4 r7 A- D+ ]: T, G& w- w5 e
  163.     }
    ! e# i9 B3 S" r' _
  164.   }/ D9 m" y8 m! g8 v( a2 M$ x% A8 l
  165.   CopyFile(Source,Target,Erase);
    4 {( o+ o( e: T
  166. }
    ) m; h; V. D* j' M

  167. 7 J) D7 |8 B9 r0 o! G
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)7 X0 E9 j4 f& s7 o
  169. {
    ' `# K6 y, M, L2 ~
  170.      FILE *fp;
    + f# x3 |4 e7 y: i; A4 g" G
  171.      char  szBuffer[8192];1 B8 F# w, H1 h- `" Q% u
  172.   va_list  argptr;& C' ^0 [" I/ P4 d& Z

  173. ! _9 [" `0 [) z& R; D8 O
  174.         va_start(argptr,message);7 i- O4 D5 n) n; g+ x# I4 r
  175.         vsprintf(szBuffer,message,argptr);
    3 j6 j: q" l$ m9 p
  176.         va_end(argptr);
    0 w; G/ e' D2 |( }: v
  177.   fp=fopen(FileName,"a");
    6 [. l% p* g% e
  178.   if(fp)! c- @; A! T& O, m; O( B: x
  179.   {
    * c  x: f  p8 Q7 L( ?# r3 i5 e
  180.     fprintf(fp,szBuffer);
    % u# ?- Y( y/ U
  181.     fclose(fp);
    % \/ [. }3 d. u! J& N
  182.           _flushall();. y0 j  h* B+ a! ]* n% w
  183.   }& Q1 v( j' s# i% d0 C( S$ |
  184. }
    . R7 \- e% M( B6 n* a, _! c9 g
  185. + P9 V3 v; a- |. e- J, c, s
  186. BOOL CRevAppApp::Fclearf(char *FileName), q" H5 @8 I/ C; U
  187. {" }- Z/ J) P: w6 U7 _
  188.      FILE *fp;
    ' n) X2 w8 I" Z. u+ w* R3 D7 t/ d$ V
  189.     DWORD  attrib;5 Q+ Y0 ~# y4 Y! o8 F, E
  190.   attrib=GetFileAttributes(FileName);
    2 N. y* ~/ Y  R: V
  191.   if(attrib!=-1)
    3 {6 ~, C* i, T8 A# @$ |
  192.   {
    1 d9 P; c. x  ?! g) s$ m
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);: }4 O: T* U$ j! {" m% o
  194.     if(!SetFileAttributes(FileName,attrib)); r$ r; G4 q/ H$ Q% l7 I, O
  195.     {
    / L: M' |. @1 J9 a4 p
  196.       return FALSE;
    : M! u! c4 }1 `2 q
  197.     }- l- W# J" H- p4 h) h+ @. {3 Q; R
  198.   }
    : R9 D& J6 ^# y( ]
  199.   fp=fopen(FileName,"wb");
    ' @1 p; ^/ a5 y4 G  J4 N4 p, g8 v
  200.   if(fp)7 l4 V/ F+ L" e# d+ p
  201.   {# r9 v* S( y' j9 e
  202.     fclose(fp);, G& P# o; ?( }; ~/ f
  203.   }
    # P- d' ^$ g7 t3 p9 o% t5 O7 Z
  204.   return TRUE;8 ?# {% L+ ]0 Z/ d  w/ w/ p$ L0 j) A: v
  205. }
    ) o' w! v$ N7 v+ C! k) P

  206. " n; h5 X2 x, A6 c) q
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    7 K, v3 |3 x  r8 b$ c2 t& `& T! C, c
  208. {
    : S; c7 r1 [% Q4 ?7 F4 V5 f
  209.   char filename[MAX_PATH];
    8 n. x) S$ u. ^( V% {# ~
  210.   LPUPDATEFILE file,olds;
    % s; ^1 T% K1 p
  211.   std::map<int,CString>::iterator i;
    5 n$ _& @. A9 n7 s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;% V! H6 _7 f' D  T) t( Q1 K
  213.   std::list<CString>::iterator l;! y  E- W' c) J2 n+ v3 M

  214. 4 _0 k+ {8 @" _1 ~6 `
  215.   if(bFirstUpdate). U1 \$ c# e8 L# g" W1 f6 N4 x
  216.   {7 z8 ^9 r" v+ d
  217.     dwCurrFile=0;1 q' t, r  d; a' ^) m) a
  218.     bFirstUpdate=FALSE;
    8 G/ f# e. t) ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  h. W3 P. x+ U. P3 R" K
  220.     {* F7 J1 Y& C) y) n
  221.       dwTotalFiles=UpdateLocal.size();
    6 ]7 ], ?8 p; F% A% I1 b/ c5 k# Y
  222.       dwDownLoaded=0;" M6 S$ O  y! r: v* a
  223.       bSilentStep=FALSE;
    . S7 P" F7 c: p
  224.       bCompressed=TRUE;% f/ L5 q0 Z8 \+ T7 u( S7 i
  225.       strExtLocal.Empty();2 K' U" Q4 t, u2 A; D8 u6 J
  226.       strFullName=(*i).second;" {: t, u" n, D) r5 }
  227.       dwProgramState=AP_CONNECT;  K3 W3 n9 a* `* R3 H
  228.       return TRUE;/ ^* n  X. v4 n/ J8 c! H, j$ W6 i
  229.     }1 M. _2 J3 k$ z0 J% p
  230.   }
    % x2 c2 q" r; p3 X/ O& i5 s8 d
  231.   else if(bRestartUpdater==FALSE)8 n8 t$ R& \7 D1 p( n; H
  232.   {* Q: @. S$ f9 G3 A) n4 u& q+ g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    7 Y2 {1 b' F! B0 C+ l
  234.     {* |/ i/ q9 k# h* _
  235.       file=(*p).second;+ v5 u8 q  D0 Q! o/ y1 P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" P9 k% F0 G! r6 r0 g
  237.       {
    8 p; a, }, H% h0 D
  238.         olds=(*p).second;3 Z  `& Q+ T; x" d- |
  239.         olds->vers=file->vers;* }6 }1 O+ w8 U5 ~% }3 D& F
  240.       }( q( v9 [+ o6 k9 G, h* W  }( _
  241.       else# X' x# T% d$ s; I. b
  242.       {
    ; e4 x/ |% f, Q5 o; Q- z
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  h- N6 w% I/ @- ?; H: r* O7 ^
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ p$ k2 U1 g3 k6 r9 O
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' z' b' ~8 z' [" ?; T# z
  246.       }; q7 H# @4 s! @/ v. ]4 Z5 J
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / `0 P  L4 z. r0 L
  248.       sprintf(filename,"(%s)",file->file);
    8 C( _# D/ i" ]% o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ s( R1 O; ^7 y" q- c' C/ M/ i* c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }. u, u. B* C& x4 o
  251.     }2 t/ Y( q: c9 U4 H7 _
  252.     dwCurrFile++;
    8 C5 s3 C' M) S) P: z0 u! k
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); r! W) l$ L, g6 h0 U& ]
  254.     {3 T( ]7 E/ f5 e3 t
  255.       bSilentStep=FALSE;/ U  J) a( w" W: t. p$ j0 G2 c
  256.       bCompressed=TRUE;
    3 i$ u: x' o" f
  257.       strExtLocal.Empty();5 m4 j2 F3 P# }- M: [
  258.       strFullName=(*i).second;
    , ?0 R/ r* E+ C5 |9 W9 L; }
  259.       dwProgramState=AP_CONNECT;  }+ S: H5 `6 y6 v
  260.       return TRUE;( \- J/ o- q- _2 G* f
  261.     }
    # E0 z5 z1 @/ b+ Z. c( ~: U
  262.     if(!bRestartUpdater)
    4 `! b: O9 p' V5 B1 d- u2 d$ E
  263.     {; ^- g. S' O6 U3 V  v- g
  264.       int iCurrSize,iFileSize;
    . D" F5 D4 D! @, ~" V+ y
  265.       iCurrSize=0;
    ! `( X0 x- F# l7 c/ b
  266.       iFileSize=UpdateList2.size();
    " |7 I) k5 k( L: I0 B2 O
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; w& T0 B1 z% }
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 K6 L5 B; [5 p" {% j& @
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");0 v4 [: V: m; r. N
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 D+ j) d' C$ |" ?% n
  271.       Fclearf(".\\update.dat");# Y- W& ~8 [: C, L% E& S
  272.       Fprintf(".\\update.dat","Bloodyf\n");2 l9 ^  M: s, [% ~  f
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++): f0 E+ X' y0 a, M
  274.       {" L# O  B8 r, x1 r+ \/ n' v4 m
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    6 g3 y7 {5 c, @  C6 [6 {0 h
  276.         {
    0 C6 I/ A6 _2 y5 R# I  H
  277.           file=(*p).second;
    . O: V9 d1 Z2 g. w. ^7 M5 O
  278.           sprintf(filename,"(%s)",file->file);
    + ]$ [3 s3 M. q6 u" Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ T, s6 y% D; h
  280.           iCurrSize++;  ^6 A" C; U6 B. C9 Q5 l9 W
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 a  K1 z. m+ F. z5 ?* ], t
  282.         }, y9 b6 f+ ^, u+ _: D( g
  283.       }
    5 p1 p/ u, h" |
  284.       unlink(".\\update.txt");5 f" K+ l+ p. ~# M4 E
  285.       unlink(".\\update.tmp");
    & i0 U; s/ U9 U1 p
  286.       Fclearf(".\\checkversion.dat");
    * U9 k& o/ z2 ^7 Q. w1 b( L  Z
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 ~+ X# l: D8 T# k- c$ ^
  288.       if(UpdateLocal.size())# N! R* m; ^' m/ M
  289.       {. e" w' r* ]. }, d
  290.         UpdateLocal.clear();1 K; o$ T6 Z3 a4 t& P5 q
  291.       }
    9 D( X3 u& d3 _4 S
  292.       if(UpdateFile3.size())( T  F+ O* }6 Z/ ]
  293.       {
    ' F0 {' ?" W! G. }3 L) o
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++): |' [1 M8 m  t4 K" u
  295.         {
    + U, z- k$ `+ n/ }
  296.           file=(*p).second;
    4 f1 D5 b) W8 L7 q4 ^4 v) s0 o( t9 u
  297.           free(file);. Y: T8 `5 W  K
  298.         }
    % _( ^9 Q. h7 ?. a+ L; E
  299.         UpdateFile3.clear();
    * q2 l4 I! @, K! ^( U
  300.         UpdateList3.clear();3 O. H1 @+ [7 O- d9 e! V/ [
  301.       }
    9 V, x0 \& b! w; D: q/ R
  302.       if(UpdateFile2.size()). _1 Y( r% h/ L) x1 U. n
  303.       {
    * ?- u9 g$ f/ W( z$ ?6 P
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 D8 I2 t! G9 e( o
  305.         {
    0 B0 V1 y) y4 k
  306.           file=(*p).second;
    4 j  Y+ |/ z/ V  H
  307.           free(file);( `# \$ m; q% J
  308.         }
    2 R+ ?0 |: x- a& _0 |2 o
  309.         UpdateFile2.clear();
    7 m) l# W& O( K5 b
  310.         UpdateList2.clear();4 S/ L' H# X% S% m
  311.       }
    ! s  q* c! D0 i  ?8 w8 e& V6 g
  312.       if(UpdateFile1.size())
    5 X0 ?9 C; z9 ]& p
  313.       {' V# M& Y* R: Y7 A/ ?/ H: Q1 m. j
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* w: r9 [+ E$ I. e! o
  315.         {9 I% z6 ?3 H/ r3 J. M, ?0 z
  316.           file=(*p).second;8 J8 W) W- ~6 B0 R
  317.           free(file);7 C* _. ^% \0 s1 H5 s
  318.         }: }2 @' I* R8 H% F4 c" t
  319.         UpdateFile1.clear();
    * Y3 ]* X. Q; u8 f, z3 c2 ]8 k0 j
  320.         UpdateList1.clear();  v* D5 R2 H) c' o
  321.       }2 V: R3 W, \+ h# \3 `
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    . b  f; X# o5 l! j# ^/ ?) l
  323.     }
    , m8 {2 k' q# o, S( ^
  324.   }$ p3 Y3 H7 s0 k& e1 b
  325.   return FALSE;
    ( v  M+ }% H" b* \; z
  326. }! v  n' j3 F; R6 \3 X  k2 h$ c, O
  327. 0 c1 u: g" l# q0 v) Z7 Y
  328. void CRevAppApp::ClearAll(void)1 }# Q3 c: @1 o% Y; K! q
  329. {
      H9 ]4 H# v/ C. O" O
  330.   LPUPDATEFILE file;8 [% D' g& M: }; U9 v0 j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    & Y1 E8 }6 x# F# d  t
  332. ( ~9 L' k8 m6 @$ \% [7 }; m) O8 u
  333.   if(UpdateLocal.size())' K! u, s$ y- E6 q; O4 E) a3 \
  334.   {' l1 h7 u& X# i( `" l) g5 |
  335.     UpdateLocal.clear();% N8 {5 M$ i, t4 U
  336.   }* @5 E% w& w, _3 L: ~+ Z+ h
  337.   if(UpdateFile3.size())
    / z7 V3 d) ?, w" i1 }* r; Q6 C$ A
  338.   {4 @" v+ ~8 A3 I1 f
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)5 X8 H2 |4 m& s% D9 t
  340.     {6 D! Z( M) o7 A( b, T
  341.       file=(*p).second;
    4 L) S# b. X9 V- L  F3 {* ^
  342.       free(file);
    3 Z9 y. t9 c" m1 c/ k
  343.     }: Q$ y. L: C) Q' d# j( Z: r1 J
  344.     UpdateFile3.clear();+ H0 q$ V! q) e1 b$ o  n
  345.     UpdateList3.clear();
    . k" ~+ W8 @( n) S; O" q  E
  346.   }  P9 s+ i* y; T* m8 `
  347.   if(UpdateFile2.size())% K" O, x0 ?' a" T
  348.   {
    - b0 l) M7 L% ~, g, l- V& H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! J+ D( L& M- M8 g4 k
  350.     {
    - O) @9 \# Q- s0 I  |
  351.       file=(*p).second;4 K! x8 o2 p, A& u. J0 [
  352.       free(file);' t: p# \1 W" [6 Z7 I8 s, R
  353.     }
    5 S" _3 p% C0 a
  354.     UpdateFile2.clear();7 \7 ?0 @7 l$ k  t
  355.     UpdateList2.clear();3 Y: b' |' Q$ f5 Z6 m$ w
  356.   }* Q3 B& \4 s& h" H. v8 K2 ^7 z
  357.   if(UpdateFile1.size())
    ' I4 V# R6 r) [
  358.   {, p8 l+ ?7 m( E& ?+ n+ h, z
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). X. C: |8 t7 L4 J/ a% Z
  360.     {* T' S8 ?# }2 I, ?3 ~! J: z9 ^
  361.       file=(*p).second;
    , p: n0 i! o) y' ~
  362.       free(file);
    $ E6 m: ], b+ Z. T  F
  363.     }
    . p1 a! L. {% h" N. I
  364.     UpdateFile1.clear();. h4 Y! J& R0 m0 b9 i
  365.     UpdateList1.clear();
    2 |" R7 v  S% v% N- X5 ]9 n: X; a
  366.   }
    : c- R" M# e/ ~7 `
  367. }  
    7 H6 i  |+ S1 b% ]
  368.   
    2 P% Z/ p+ `( l  |# H; E+ [
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . ]. @- r1 j& F' z
  370. {
    5 x; U3 f9 L* p+ L8 b. W
  371.   int c;
    7 t; t7 z7 L- G+ }4 [" I6 g
  372.   LPUPDATEFILE file1,file2;6 v/ l' C% `5 f0 a. p& b
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    + a3 G' C! B+ j- D, y( y! I* F1 k
  374.   std::list<CString>::iterator l;) s) ~. l5 Y+ _: y) {
  375. ; y) L6 i+ m6 {1 X
  376.   UpdateLocal.clear();7 w/ N& [# g8 N! _/ m- l* u  ?" J" j
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ L3 V. r- X' z4 Z1 m$ n
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);# g6 _4 e- N+ l" u/ W$ g
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);. n3 R, Q" s, Z3 k, B5 K) [
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);0 {) y+ S+ i: @# ^5 k7 ^5 U
  381.   if(UpdateFile3.size())
    - G, k  A+ b. f9 d/ z+ V
  382.   {
    2 N. h, }/ J1 F/ p' f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)+ q2 B  D  A3 V9 F' V+ t1 Y9 q5 J1 V
  384.     {
    3 l1 z1 w' j0 G$ }; }
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! Q/ ^* J; {% K, h* {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* W! M$ R9 \+ J' V- U$ n8 c( e
  387.       {
    + e! B) \7 {& n( U% O- o
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 p+ q) F( W, o
  389.         file1->vers=file2->vers;. g7 Z4 z: A+ {- @
  390.       }! S$ p' t$ _6 n; g5 l% o- c6 W& }
  391.       else; d2 U& V! Q# ~) S" A( T
  392.       {" L. {8 b; a8 x" Z1 w
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 S/ j5 q0 b0 J% I) W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    - F9 W7 P1 J3 x! Q  z; Z
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - B: f( A, w! O8 O9 c$ P: w% L/ {
  396.       }
    2 L& h9 L& K% L+ Q1 A7 G) n! T; b
  397.     }; f; m" Q) G- w5 v/ x' a  K
  398.   }# ]/ R0 p8 Z/ z* H8 ^0 ^2 n
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( A. F2 x/ {: ?9 ~; P$ g$ {
  400.   {3 o; `" X+ \. B, r, D, k5 L1 Q7 B4 a
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())5 v1 Z! ?3 r! |$ B, H* n" |/ P
  402.     {
      ^: U' l% L9 K+ m! E" u/ \7 y3 p7 Y
  403.       file2=(LPUPDATEFILE)(*i).second;
    4 `$ ]5 A! i' H$ d. |/ X: [7 w! I
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) W2 ^3 o: A3 z: H' ?9 p/ g5 c: c: n
  405.       {
    ' w; k) ]+ z9 v4 Q' C
  406.         file1=(LPUPDATEFILE)(*p).second;* ^) H# W6 a+ a
  407.         if(file1->vers!=file2->vers)
    $ m9 c3 O0 g/ t2 L
  408.         {' V: i; G! w3 r) Y9 e5 G- `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));' c" E# U+ E) k
  410.           c++;2 d) N: Z$ u+ Z/ Z0 F7 m. ?
  411.         }
    " X0 A, c8 {* M! s6 N+ q
  412.       }- \1 k0 x$ d) r2 Y2 k9 x9 M+ M+ C
  413.       else: X2 k! m8 V3 \% J$ L6 J
  414.       {
    6 {( L$ t! i' I" W4 |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, A+ p. w* `: z
  416.         c++;0 V0 f$ n& l! [) y9 S/ J
  417.       }' Z0 E. Z# B7 h  g  e
  418.     }
    4 s( ?: x3 b/ z# O# x& G1 F
  419.   }
    8 ^. }) [3 i' P% e
  420.   unlink(".\\DownLoad\\update.txt");
    $ g4 c9 L5 H- e+ _
  421.   if(UpdateLocal.size()) return TRUE;9 T! E$ F# S% B! [4 G' p" V
  422.   else                   return FALSE;
    ) X! _* |! N: i6 h+ f
  423. }+ G# u1 ?  V' M9 _% m7 }
  424. $ h8 ]' h8 c( g/ K8 s
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    1 i5 N1 [0 g  X( ~; P
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"4 m  }+ I. j9 D3 V) x. ?/ ~
  427. : N) y- F! N. e9 x; v! t5 m

  428. 4 Z: Q' e* ?( O& F1 B
  429. - O9 H1 w4 B) J  W# f
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' |; t: l1 C0 s
  431. {
    / U8 Z% e7 L' C$ l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" g+ i; r: F9 u+ i8 \
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) z# B& \& O' G8 N7 ~9 s
  434.   {% x( W4 V6 Z" s0 j- c
  435.     char szLanguage[50];
    ( j# ~: h% w* n6 j" V6 g0 W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: O9 Q6 U% L* _/ J# B
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ! J' I1 m2 I" f
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  p& k# b! j5 y- w* ^+ S* g0 B3 m
  439.     else                                   m_iLanguage=ENGLISH;
    1 W+ F- S8 ^* a! Y: T6 ^
  440.     char szRegister[100];
    0 D0 k2 Q6 ~: _, B! x5 t5 g
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) x- u9 l  k4 ^$ N+ l
  442.     strRegsName=szRegister;- r" }* p7 F! _" l
  443.     char szPatchURL[100];
    1 J2 {" x, y9 _2 N" k" s9 w: w1 h
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! T: L& b9 q. b2 i
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);, J: g0 C- }, f( L! S" J
  446.   }
    , t& J# n) k! o1 l& M
  447.   else( o% N. R$ r, L$ e  K
  448.   {
    5 r6 l: x- Q0 s+ D( v( k
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - m+ i4 @, e3 a5 ~6 s2 E
  450.     strRegsName=DEFAULT_REG_URL;
    % _! A8 Y7 x+ C0 Z" r! h0 O
  451.   }
    0 `% H) @% q, E
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    5 {8 {* q, H9 x: K1 _; A0 T) c
  453.   {3 n* A. i3 X& t  K
  454.     char szIP[50];% v) F( m: j" C1 o' Z. ?3 l
  455.     char szDIR[300];. C7 f  u8 j8 o4 Z$ h
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). _6 G5 P- I3 H$ B5 `% n
  457.     {
    % [+ g# p& y6 [1 C5 _( ^7 i
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");& T* O: \- ~3 d* o
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: f! k! v7 k1 p4 |
  460.       strHostName=szIP;( W- E% k5 v7 `1 R/ Q
  461.       strHostPath.Format("/%s",szDIR);$ K+ E; P1 x7 ]# n6 Q1 {
  462.     }
    : j& n  c! l  G" P$ y. j( {
  463.     else
    ; T6 B9 Q8 P( {" T# A" w) o
  464.     {
    : y( \" s+ T) c' K5 ~
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); c/ }' N' Q+ ^* }2 |0 g2 J1 m
  466.       {8 P9 F& G# x& d3 K& V
  467.         char szLanguage[50];& H5 k5 |- a) W& T8 |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: N) Q! \+ m" ~: Z: J0 V& z% F; J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ n3 x( Z4 Y' N( ?5 w* R  V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
      d8 c: _, j5 C0 W
  471.         else                                   m_iLanguage=ENGLISH;
    % N5 {% l& Q$ w' V
  472.         char szRegister[100];
    6 @* D  o: S6 t9 B
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");' o$ G6 d1 p% t* x/ q
  474.         strRegsName=szRegister;+ Q5 M% F2 s0 S5 k! z- K: z& x# U
  475.         char szPatchURL[100];5 I4 N0 I( N( c# c" o5 R! s0 |3 @
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ) \  K6 M2 v' K: x! _) S* G
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( @) f! @7 E" c5 u9 ]* T+ ]8 e
  478.       }
    / v4 p- C& T1 \  I' f; j' Z8 s
  479.       else
    7 \0 s( \6 @9 ?; y5 k5 V1 c% Z- Y
  480.       {# n, N; u/ ^7 K% e6 d6 F* a
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);1 j8 i/ U' i3 T  d7 J
  482.         strRegsName=DEFAULT_REG_URL;. p; s! }& v( x
  483.       }
    9 {2 M. S- W8 C& o* T( M
  484.     }- j; \) I" `( A; _, a
  485.   }
    0 e& `5 F5 r- ^$ n$ C7 y$ R+ N
  486.   return true;; z* M) T, j  w3 g$ h; x! Q
  487. }
    ' z6 z; _" F+ S; A6 J& s

  488. # Q0 `% ]8 [& c  P5 p, o
  489. #include ".\ZLib\unzip.h"* j" r9 a" f$ @4 m7 j7 A/ {
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);# S% a* A1 `1 U- w$ U
  491. /////////////////////////////////////////////////////////////////////////////
    3 O' W) A9 }8 U0 ^
  492. // CRevAppApp initialization# [# F% m) x  p& W

  493. 7 `! p3 P& H0 T
  494. BOOL CRevAppApp::InitInstance()/ y& L0 v$ l/ Y. S* {
  495. {
    * b) Q# s2 r1 K8 p4 q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];  t' [1 u1 t! Y) x/ ^' x8 Y/ ~

  497. " l! y: Y, U$ f' o& w# u
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 V7 N3 H/ x* b$ `+ l  D% b: B4 y# F
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))! k$ p4 w3 X3 M% m5 b3 a  G
  500.   {) U1 S' V3 w6 O
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");  Z2 L, k3 B" j+ d
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( ^6 c6 J7 \8 {, m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % `# y) B- p. z% B$ L' ?
  504.     {
    8 G8 \+ E8 j: i% [* G$ _
  505.       strcpy(szPath,szPathTarget);
    5 ^" v: U6 E7 @; ], B2 a% y8 J* B
  506.       SetCurrentDirectory(szPath);
    3 J# f' N" s) y
  507.     }
    0 o: K. C$ s4 Q' W2 K8 O
  508.   }3 ]1 T0 {- n2 H6 S2 N' }& d
  509. #ifdef _DEBUG! C6 e% k6 A- y( s% a( y: K; f2 }
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)). F( J, a" {" E0 l/ u- @& z
  511. #else
    ! X0 A9 H) T1 \* N5 Y- C) Y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( r3 i1 R9 D1 K& ^
  513. #endif
    . u6 Q: @0 X/ t  [. I
  514.   {% _; K+ O. U4 w" f7 i
  515.     char tempFileName[MAX_PATH];% o6 n/ N" R; r! j, g
  516.     strcpy(tempFileName,szPathSource);( T8 {. S0 S7 A) Y* N
  517.     tempFileName[strlen(szPathSource)-12]=0;% I0 C' w5 ~1 t3 c+ ~
  518.     strcat(tempFileName,"\\$CSUpdate.exe");! B% r4 s' r7 M8 t) m8 Y' Z6 W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    , V8 }- U# m/ _5 P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);! M/ @, \8 c' p
  521.     return TRUE;
    9 b2 s3 l% n9 V
  522.   }
      A0 r5 B" U6 \' H9 V7 D
  523.   // Nuke 0118: Delete run.exe+ D) R/ ~" v& [# I
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ! d9 N: H- {- s, f
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");9 S) q2 Q0 B, I, c4 \& @
  526.   if(!ReadCfgFile("Config.ini"))
      m9 Q' e" A4 ?, J4 g, ^: C
  527.   {. `6 m% a$ ^/ ]+ R" Y
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ O: P4 l  r7 }
  529.     return TRUE;
    # Y2 N0 J4 `% }0 T4 U6 G* M* i
  530.   }
    - b5 r# g* d$ v5 E- F& T$ m7 C
  531.   HANDLE mutex;9 Q- f$ P; [0 h0 C  F! |7 w2 {
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' ?5 Q& }! @  y9 e5 g) B
  533.   {
    - S* X, S+ ~9 D2 w0 a4 X2 H& n
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ( t, o# h! z5 l( z
  535.     {
    8 {# M9 N2 L/ s1 _. \4 l
  536.       CloseHandle(mutex);
    % _, _* }% a% n( M# ]# z( t" y& x! K
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 k0 b( w5 e: Q, ?# y
  538.       return TRUE;
    6 e, u9 ]; [! ?# f8 K% V
  539.     }
    ' y% Y& Q; P' K; ]: k" T  \, x: d8 P
  540.   }  4 q5 z7 i, c: r& t9 @: x
  541.   CloseHandle(mutex);
    $ ^" v0 A* N* l* U* T6 W

  542. . R0 z5 v/ ~  d8 X& O- ~
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) _' ^: F( t4 t/ d! Y
  544. 0 x/ ^5 M; M1 E
  545.         AfxEnableControlContainer();% ?1 m- n: s/ U- Y

  546. ( i) D0 T$ K- `0 l9 g
  547.   bCanUpdate=FALSE;
    , w, {. |$ ?) D/ }; }0 k
  548.   dwStartUpSteps=1;
    ; S  K3 _( ~1 Y" `' K. P0 t" v
  549.   dwProgramState=AP_NOTHING;
    6 _" u" |+ w$ S) I" @

  550. 3 r. ?) Z8 I2 l! U; Z, V
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    8 {* {, k* w5 K9 d" i7 P9 H* c6 v: @
  552. 2 ~: U7 {+ ?7 J7 T" B6 }, n1 V
  553.         // Standard initialization1 G' Z4 t9 y1 \
  554.         // If you are not using these features and wish to reduce the size
    ; d6 e/ C$ A* }8 L* n
  555.         //  of your final executable, you should remove from the following
    % p2 T; q4 ?; y9 y8 S9 W: d/ d9 ]  ]
  556.         //  the specific initialization routines you do not need.
    " h0 _) r# W$ Q# I
  557. 7 u4 \7 M+ P- c' c+ I) e
  558. #ifdef _AFXDLL
    + _' a' C5 q' i1 k
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL, K0 v  h% D( ^$ p5 k: S# ?+ r
  560. #else
      }# N  _9 b. q6 ]
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically" ]; ]9 m: @" d; l1 g$ W
  562. #endif
    . u/ m6 u  ~6 F% o2 @+ Y
  563. ( Q& ^0 z# [4 S9 S* b  \: ]" t
  564.   dlg=new CRevAppDlg;
    - R6 I; s  n4 Q1 k9 W0 U5 E) k
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 q2 D! S, ]' w  _+ ?. |0 I& P  I
  566.   dlg->ShowWindow(SW_SHOWNORMAL);% I. z- f/ j' U" S
  567.   m_pMainWnd=dlg;& X6 I# _- x, u0 U
  568. 8 K# k' S- Y3 G: ?
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    4 M: F! H% {4 r* b/ Y& ^, R

  570. / _6 c% j: \2 Y
  571. //  GdiplusStartupInput gdiplusStartupInput;! Y- _* d0 W* ]
  572. //  ULONG_PTR gdiplusToken;7 Z  E! F# D- X
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: b  N6 u; q. W9 K) X2 M
  574.   q$ Q8 C' \: r9 I5 Y0 E
  575. //        CRevAppDlg dlg;
    6 H* F& O$ v- s, [/ M1 Y3 R3 F, z  f4 x
  576. //        int nResponse = dlg.DoModal();7 A* i1 ?; K% W3 j2 F6 t- j
  577. //        if (nResponse == IDOK)
    ; X; e/ @' y, E$ |
  578. //        {, n) X" x2 c( U& [
  579. //                // TODO: Place code here to handle when the dialog is; |, p+ |1 E) ]& r* H
  580. //                //  dismissed with OK; @2 I0 Z! c% c: j( h
  581. //        }
    ; A3 n$ n, [* S- E1 H  A
  582. //        else if (nResponse == IDCANCEL)
    4 H% c1 s6 d0 v4 S" ^. m0 @# c! P
  583. //        {+ x0 E* [% m9 T  `
  584. //                // TODO: Place code here to handle when the dialog is0 m# F2 b. c0 o" G; z6 y8 C7 `
  585. //                //  dismissed with Cancel
    $ V. J; ~% L/ [
  586. //        }/ H# m( Q2 g- T) o2 U
  587. , T! Z" q1 K% _% U9 Z
  588.         // Since the dialog has been closed, return FALSE so that we exit the, a& G, x* {& o6 c9 U3 |- ~: \
  589.         //  application, rather than start the application's message pump.
    6 V; Y7 ~$ x' M) u/ s
  590.         return TRUE;# u% Z; x) `4 M3 P: z' S  b7 n
  591. }
    4 F! h8 V3 e1 w
  592. / e- e, O6 j& u! T3 p4 E
  593. char *CRevAppApp::strtok3(char *pSource,char *token), M8 `5 _2 v* O1 g( i; `5 ^- @
  594. {
    0 J2 [; n; P" l- Z" z- S
  595.   int i;' H2 g2 G' E  A0 l
  596.   char *szRet;8 T* T% j# f; l; L5 S

  597. / P2 T# h1 V; K+ f4 ^9 U0 V5 Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }# n* P  j$ ?; n1 d3 \8 Q
  599.   if(sztoken)
    8 }- _& n6 t& l/ n2 N
  600.   {
    7 S) G: }, c( k( x: L* F/ M, |
  601.     szRet=&sztoken[itoken];
    4 ^( ^9 F  [; `! @1 @6 f
  602.     while(sztoken[itoken])! a$ A  M9 Z3 i: e
  603.     {
    ; d5 l) T+ N! M0 j: S
  604.       for(i=0;i<(int)strlen(token);i++): z7 P3 x! E2 y: C  z
  605.       {
    / Z$ G4 \0 x. u; t% E
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    + I0 q: X4 V" y8 D9 `% ?3 M( e! W9 D
  607.         {
    4 W( M9 Q: O; U- O3 ~) }
  608.           sztoken[itoken++]=0;
    ; y9 g7 D" q  H9 r8 x7 b, [* A
  609.           sztoken[itoken++]=0;7 s6 p8 p+ ~! f. F: o
  610.           return szRet;' I7 t& H, u" d) Y8 [  r
  611.         }$ [+ Y# A' `% m) `: |
  612.       }
    9 J0 w. t2 h  Z8 y7 ^
  613.       itoken++;( k% @: T4 b8 \) a: U2 E; x& d
  614.     }
    + L( x3 m. t9 T! Z1 o
  615.   }3 [1 x1 a( A+ p6 W
  616.   return NULL;
    , m: b- O7 A4 }' g
  617. }
    / F' k, J7 V  ^: \
  618. + D( S+ c  R7 d4 [% O# x% U
  619. void ProcessProc(long Total,long Current); Y0 `% s, ~# l9 p  N
  620. {
    9 H8 ~! c8 S7 i; H' _
  621.         MSG msg;
    7 X9 E4 U1 \: B( V8 p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' o" V  l" ^  \
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    , J( k( E' X/ C, x& g. R) C3 U* [
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)), f6 t1 m" o' p, X! U+ ?4 ^
  625.         {
    / ^: V8 I3 |- c( I
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + E& H3 Z1 C* g9 \
  627.                 {
    & y% M* M* O* w% e- m/ r6 j$ v# d. O
  628.                         return;
    4 t6 T1 J  g4 }/ M! X
  629.                 }) G( `* s; Y3 u  D
  630.                 TranslateMessage(&msg);$ }- u" K3 P* w3 Y
  631.                 DispatchMessage(&msg);
    5 K; J1 }( {" T# i
  632.         }        % i: J- H* r8 A5 r: H  j
  633. }
    , a% Z2 L: |& J; t

  634. 8 w, ]% h& n( Q. K
  635. BOOL bFirstChar=TRUE;
    ! F. l0 |0 ?0 [/ i( \

  636. ' e& P6 F- b9 N$ O' Y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)4 `0 m' t; ]  R
  638. {
    * G" ?: |9 P0 I" n
  639.         // TODO: Add your specialized code here and/or call the base class% Z# _9 c1 i* n$ k: W4 }1 D7 J
  640.   switch(dwProgramState)! O( R1 x; @' M* F# |6 C/ {: \
  641.   {- y$ C4 a" u, T3 b+ d1 D' a+ K
  642.   case AP_NOTHING:
    ' h; G# x/ J1 F2 w( l* Z: `% E
  643.     switch(dwStartUpSteps), s, ^  \2 n$ C1 h& I4 F+ q$ C
  644.     {! G" x1 R+ {8 }0 v: T' i2 Y, ~
  645.     case 1:
    % Y) H/ u8 t' |  x" @5 x0 o! y
  646.       {
    / I1 A6 p- {( l2 h: u
  647.         int i;
    $ Z; r5 B( o* T. g
  648.         CDC *pCDC=dlg->GetDC();
    1 s, ~, [) m$ @9 F* d: h
  649.         HDC hdcwnd=pCDC->m_hDC;+ I9 P+ T9 L% I6 V
  650. //        Graphics graphics(hdcwnd);
    6 i$ g8 X% G. s" ~# m
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");" E+ U% e( U: ?7 @& w) s* Z0 q. b+ i1 t
  652. //        INT iWidth=bitmap.GetWidth();
    9 P! P; U% x5 N  l% _8 r
  653. //        INT iHeight=bitmap.GetHeight();
    1 U/ b( X- t3 s, p5 N2 |* h5 V9 \
  654. //        Color color,colorTemp;7 E# r# u2 f. c6 V& F4 B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)( q& ^: }4 k( C/ M) B6 [- l1 Z
  656. //        {
    : [. @2 D4 j4 v! q' M1 a
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 Y8 ?2 i; R# l: S5 t' h' N+ z
  658. //          {! B+ P/ p  x) M) ]5 v4 D6 v, b
  659. //            bitmap.GetPixel(iColumn,iRow,&color);" ~+ r* d. L! n. v, H& m) k" _
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 g2 b& A$ V" V, o# o
  661. //              (BYTE)(255*iColumn/iWidth),. f) q6 m/ ^: X& I* n
  662. //              color.GetRed(),. V! y, \4 S0 `& F: `
  663. //              color.GetGreen(),% }) Q3 Y: v& W7 S# c3 U, f
  664. //              color.GetBlue()));0 Y8 @- [2 M4 H. Q  W' A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; `: l# M' a" B- f% Q
  666. //          }# H4 r" L! ]- q# O. l/ d1 h
  667. //        }6 b/ z8 u# M& V+ \" R3 |) G  ?
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);. X6 }" B4 y, o4 X( g; R
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    9 `; N  I- u  k' [
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! q8 {2 O  t" C6 v
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & e6 w7 `! L  m5 m1 Y6 A
  672.         for(i=0;i<240;i+=8)
    ) B2 d/ \1 H) Q4 o
  673.         {8 t; t  v9 a5 ^/ b8 z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 Q1 P3 u( X. M% w
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - k. u; Z0 W$ \
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( ^& h2 b( n. y2 t) n* E
  677.           Sleep(33);
    1 y0 p' N/ U$ ?* H% s
  678.         }& N# \3 @# A6 P# E
  679.         Sleep(1000);
    % ?% B$ Q& O. l  W8 e6 Q
  680.         for(i=240;i>0;i-=8)( B3 D  S! H3 ^4 d# @8 F
  681.         {
    , }- H" B* q3 }3 a9 {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) i- k. C. G5 R  u# H0 b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , h, O- V  V- {% Q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( q4 w: j9 T5 J& b9 ~
  685.           Sleep(33);
    8 z6 M: Q; R" d( n5 W
  686.         }( g7 E" \) W! P. k. f
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    7 U8 W0 f3 \/ E4 k" W( J3 _
  688.         dlg->ReleaseDC(pCDC);( w1 d" q6 z" c
  689.         DeleteDC(hdctar);
    4 ?, @! P4 @0 g# f. j7 N
  690.         DeleteDC(hdcsrc);
    " g3 O* t5 H8 T1 \* Q
  691.         DeleteDC(hdcorg);$ q: z. S3 _) t  q
  692.       }  t9 q" j& c/ Z& D" s& L5 k3 X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    * b7 o$ k* S# X5 K9 x, B' P! e
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");+ u9 {+ \7 K7 G$ n
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    3 H+ W3 l1 V5 h& m( w- o- ?
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ! l4 X. h( G4 ~& l9 D) R
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : ^$ C/ `& X0 \+ e8 c* N
  698.       if(!Dn.Connected())
    4 \+ e' n8 q9 ^' `5 E+ `8 c% v1 R5 O
  699.       {/ H' Q, s9 R- G. d4 H: k* F: c
  700.         dwTotalFiles=1;
    4 I8 a. s, U6 j  ]* T5 y$ [) o; `7 ]
  701.         dwDownLoaded=0;, D2 K7 y" {/ w) X% Q  g( T2 X
  702.         bSilentStep=TRUE;
    * y0 ~- z. x+ L0 t  b5 C8 Q
  703.         bCompressed=FALSE;1 W4 T5 b, x) f8 U/ W6 ]
  704.         strExtLocal.Empty();
    9 F: n  O2 Q: l6 n7 n* ^
  705.         strFullName="readme.txt";
    ( n+ ~' P" O7 s; b6 G
  706.         dwProgramState=AP_CONNECT;
    - N3 b: r+ g# C; Q7 A
  707.       }
    2 a1 F) q: e9 m" c* x6 ^
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  w8 A+ d8 `0 C  k$ k4 `
  709.       dwStartUpSteps=2;
    ' `8 r: E' ~- D
  710.       break;
    / P) M" G: i. A
  711.     case 2:' B2 A! R& M- H+ F7 v& {4 D: ~6 J
  712.       {
    " p' C& c$ s+ W5 P% A
  713.         int iEOF;% O+ N1 Y. e+ c. l) g
  714.         FILE *fp;
    . p9 N  H' ?( n8 @
  715.         char szString[512];2 e! z% K6 {5 i: a4 T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ o, N. @! |* E0 q% m4 H
  717.         if(fp)
    1 i) b' q% o) X2 E0 U8 R9 U
  718.         {, s/ D( o7 t& F% [& H  p
  719.           do
    3 J& z# K1 e, t# Z& b3 q% a0 E1 H
  720.           {
    # K+ q  X) ?9 g; c  M& p$ e+ N! V
  721.             iEOF=fscanf(fp,"%s",szString);
    & z9 K1 x+ l# ~  E3 ?
  722.             if(strlen(szString))4 ~; H1 ^) C$ b9 u1 W2 j' ?
  723.             {" ^, E, T8 Z1 R. e& G. ~5 i) s0 o1 {
  724.               if(bFirstChar)0 h6 a, l' d! u" j
  725.               {, `$ @4 s5 j* a. A2 O, L
  726.                 bFirstChar=FALSE;) _. G1 k, F2 _" t
  727.                 bConnectIsBig5=FALSE;
    : R0 O, F3 Y, {$ E, [
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;4 V' q% |# \6 R
  729.               }
    8 m' E: q3 j/ \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));2 u1 N1 E4 O# d* w# h9 I! n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));  T: g- T, r- t  b
  732.               dlg->m_ListText.AddString(szString);" X% L" j4 e* ]8 P4 r2 f6 f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, d3 h1 T* d9 P
  734.               *szString=0;
    1 s8 |  d, H! x  F
  735.             }% i' l# a2 I0 d; {. {. c: C% i
  736.           } while(iEOF!=EOF);, ^  R. w( A3 q/ P4 Z$ s& l/ M
  737.           fclose(fp);# {" h4 B7 f  O& k/ q  t' U
  738.           unlink(".\\DownLoad\\readme.txt");. R+ }8 n$ }, c* h9 W
  739.           dwStartUpSteps=3;) h2 l) ~8 K$ \( m8 |
  740.         }  }! c9 @: F& h. U3 \8 k
  741.       }
    ! f$ X& M+ t' c$ H) y6 J
  742.       break;
    + J2 ]9 B: E" t: y9 e7 x; D/ t9 h/ {
  743.     case 3:
    ' A0 x1 ~. t' w
  744.       if(!Dn.Connected())
    5 Z( M$ N0 s# h- x: F" e7 m
  745.       {; S: z3 w0 K/ H
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ ]4 U! p( {6 J- H  y8 U
  747.         dwTotalFiles=1;
    9 e+ q( \$ ]( }% a: F- G
  748.         dwDownLoaded=0;" J9 m$ E* K, r+ y. m  A
  749.         bSilentStep=TRUE;
    2 j" E- H6 R  w/ B6 A" e- E, c
  750.         bCompressed=FALSE;) i+ A- E& N% z4 Z( X) O9 a7 w
  751.         strExtLocal.Empty();
    % h5 K  x  A* w: n
  752.         strFullName="checkversion.txt";
    " u# `4 @  V6 J. S
  753.         dwProgramState=AP_CONNECT;
    + f# V+ L; K& E% |  p& I  v
  754.       }
    & l! G- M) ?! T$ {: Y
  755.       dwStartUpSteps=4;
    # E# _& I) v: C! e1 b% u+ D
  756.       break;
    ! o: f, \0 g" x4 Q
  757.     case 4:& c, P. w, F2 a# R: _# Y$ C
  758.       {9 I% i0 G" E. C2 _2 a
  759.         FILE *fp;
    1 f8 E( {4 d) f+ X2 X8 S+ O
  760.         char szString1[128];
    $ W: L" @9 Y3 T9 D
  761.         char szString2[128];
    & s+ C# k/ ?6 p1 l% m, a
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");9 w, Z9 [# [# i1 G
  763.         if(fp)7 A# m. r& c) _# H) d; P
  764.         {% M* Y5 A* a" }' O$ h/ t4 {1 F
  765.           fscanf(fp,"%s",szString1);
    4 c1 c8 D2 |* q- s4 d1 s( }7 V
  766.           fclose(fp);
    # @* w0 t' }! M; c4 n2 h& Q
  767.           fCheckVersion=atof(szString1);# M- |# d' b$ k6 \. g
  768.           fp=fopen(".\\checkversion.dat","r");
    : ?# W- ]- @* a6 i. H! n
  769.           if(fp)3 \  a. D4 O* x/ J  ?  _
  770.           {# K3 u: a" m& q. ^) H7 A
  771.             fscanf(fp,"%s",szString2);* ^) F+ n% Y4 B: s4 o& [
  772.             fclose(fp);
    & E5 `9 P1 o: \
  773.             if(atof(szString1)!=atof(szString2))/ i& R+ v+ q8 D- ~1 R3 _9 X/ X
  774.             {
    . F& e, ?, `7 C3 ]
  775.               if(!Dn.Connected())0 j- f5 }# @4 _. e$ u+ u
  776.               {% H! s' G4 X3 O; ^7 H/ n
  777.                 bFirstUpdate=TRUE;3 O5 I+ P  }# }& I1 Q! {! L9 H+ }
  778.                 dwTotalFiles=1;
    $ X* w5 g: E! y: B
  779.                 dwDownLoaded=0;. t, G0 v+ O& {& p
  780.                 bSilentStep=FALSE;
    " L2 j: N: p7 T6 M$ l
  781.                 bCompressed=TRUE;% Q- w2 _( i3 b4 S! i& `
  782.                 strExtLocal=".\\DownLoad\";5 l, i- }- y: ^1 Y
  783.                 strFullName="update.txt";
    , [7 N2 M" r2 ~/ m1 M: w5 Y3 O; }2 C
  784.                 dwProgramState=AP_CONNECT;
      t2 F5 t( f$ x: M' |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");; n- H: q$ ^4 [* c" I% X9 f
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( h, m5 d' q( U7 P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");; }+ |# q) |4 |0 {5 T

  788. 1 ?. c8 m3 t7 _: X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - `+ {4 V8 h: j8 m) V
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : l8 w3 L9 S  g6 |1 X7 x  V) D
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 m" h* C. y" j: j' g
  792.                 {. p" k7 l: Z" W  |" ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 F0 d9 [# W3 u, N( o1 i! L& v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");- v, |1 l- B& ^4 n2 q! j/ \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");# q5 [$ ]5 [) i0 t: S
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " l0 d" B( ^- {: |: h

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

8 h6 b* k) i3 Z5 r) r
( u4 J& Z7 N# B' R7 m. F- A( ~

評分

參與人數 1金币 +500 收起 理由
cheng2002 + 500 很给力!谢谢分享!!

查看全部評分

wuzhenpan 發表於 2019-10-24 09:31:51 | 顯示全部樓層
1111111111111111111111111111111111111111111111111111111
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:55 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

15820046275 發表於 2019-4-18 21:00:50 | 顯示全部樓層
555555555555555555555555555555
回復

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_NBC3C 發表於 2018-1-30 18:08:32 | 顯示全部樓層
东西不错,只是现在研究的人少了。
回復

使用道具 舉報

qutebaby6309 發表於 2018-1-31 08:29:25 | 顯示全部樓層
來看看囉 謝謝大大的分享 ~
回復

使用道具 舉報

advsolarpower 發表於 2018-3-17 13:42:22 | 顯示全部樓層
热爱他肺癌热锅额度都是感受到
回復

使用道具 舉報

提莫 發表於 2018-3-23 17:17:22 | 顯示全部樓層
顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回復

使用道具 舉報

提莫_k6Zum 發表於 2018-3-29 13:30:35 | 顯示全部樓層
dddddddddddd
回復

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-12 16:43

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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