找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
9 N/ e0 A% h6 ?, ~0 V/ z
  1. / RevApp.cpp : Defines the class behaviors for the application.4 C5 }+ O5 o, W5 Z. b  H- R
  2. //
    " a8 P2 Q' [( R' ?7 w# `9 h: J
  3. 0 U6 l  m5 p& Q+ `: W2 x
  4. #include "stdafx.h"9 t1 z; K3 C3 }4 ~# o" H) G: q
  5. / c. x- \2 M: R* b) z8 j- J9 [8 w
  6. //#define UNICODE
    9 c& p+ s4 r8 B+ ^5 S! _  ?2 z: \
  7. //#include <gdiplus.h>' e$ W+ U6 A- |& r6 W: V# s- O! x
  8. //using namespace Gdiplus;- X8 O1 H  t( Z/ \( P6 {5 g& a# R

  9. 8 C0 }0 F% U6 N1 |/ H
  10. #include "RevApp.h"
    1 [  R3 J2 G7 H* ~  V* i
  11. #include "RevAppDlg.h"  P9 a: x/ s6 `4 z0 q7 p

  12. 8 a0 ]* L" V: L3 H9 z  x6 S; i
  13. #pragma warning(disable:4786)6 i" r" j3 q; x- I; T
  14. #include <map>
    ) _3 ~' u% }! e8 E: t/ C
  15. #include <list>
    3 R- Z9 ?+ c4 I" s$ B" _+ L
  16. #include <direct.h>
    , \5 C( r2 m: D! |3 `9 G5 d( e
  17. / c7 w  k& s+ X1 Y9 j2 y& o+ j5 Q
  18. #ifdef _DEBUG) ~7 {$ g- |4 ]: D/ ~
  19. #define new DEBUG_NEW
    . Y( p$ S4 F0 U; o
  20. #undef THIS_FILE: j! p' ^" @1 Z
  21. static char THIS_FILE[] = __FILE__;7 o+ ~( p  S; N& y4 t
  22. #endif5 o2 L. W! F; t5 T. T; b
  23. #include "SkinResDef.h"2 O, V7 U# [: q8 X
  24. #include "ChangeBG.h"
    % R" V$ y* r8 V+ i  U3 x
  25. #include "AFXINET.H"9 K% ~: f- d( X
  26. & n: g/ ?9 A; @" Y+ c8 X
  27. #define TRADITIONAL_CHINESE 0
    ! d# w' r$ h, H' O
  28. #define SIMPLIFY_CHINESE 1
    ) H) ?  Y# `" }" _# [' B+ G2 P- [
  29. #define ENGLISH 2
    4 z' g5 ]; j6 L( `
  30. int m_iLanguage = ENGLISH;- I: v3 U2 K( H& t$ B
  31. /////////////////////////////////////////////////////////////////////////////
    ) F* P! ~: ?! T& _' t- g# @
  32. // CRevAppApp
    ; h  D0 J$ `. V# P/ d2 g
  33. 6 Z& S' D! k/ s* |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)3 _; Q. {1 A0 q0 C: a- w1 {
  35.         //{{AFX_MSG_MAP(CRevAppApp)2 o( j" D7 o8 s& S1 g
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.- w0 W$ c& T* C. u
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!; E/ C7 b/ |& y1 }2 l* B2 P/ N
  38.         //}}AFX_MSG
    2 }1 `! b* F; h  i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    8 T; a+ {+ T" E* l$ W( q; u/ f
  40. END_MESSAGE_MAP()
    . Z% {$ D9 O) g
  41. $ ^4 A. ]2 c* g# P, f
  42. /////////////////////////////////////////////////////////////////////////////
    & O4 @' ]5 G+ \2 W4 I; v
  43. // CRevAppApp construction
    : S# i) \5 T6 |2 t/ M/ d) v

  44. 4 T& ]/ t& O4 R' E) G5 x+ V" M
  45. CRevAppApp::CRevAppApp()
    + A% ?! }' h! t8 Y. I
  46. {0 a/ p6 z$ L( R9 b) x, ]
  47.         // TODO: add construction code here,6 j. n" }" K1 P; l+ ^: |
  48.         // Place all significant initialization in InitInstance
    5 t+ f& g- h- Y3 Z$ R9 G& _  B
  49.   bDisplayIsBig5=FALSE;
    / B% M1 Z+ k& t0 @  j  ~
  50.   bRestartUpdater=FALSE;
    7 p3 O1 C9 a* f  \( L% n7 ~
  51.   bFinishUpdated=FALSE;
    / k7 Y7 _/ O! e5 n* ^- b
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& V+ z. g* n* T+ `) z5 i
  53.   InitChangeDataBig52GBKS();
    : F7 A$ `& g" G8 O, \, W* S2 v
  54.   InitChangeDataGBKS2Big5();+ e5 X" ?3 C. g; N8 O3 R8 T
  55.         //
    1 _6 K9 t( T, p1 W( m  H
  56.         bClickRunExe = FALSE;; M& d* ^9 E+ T. G" u
  57.         /// x: r6 S( o; a5 M* }7 ?1 \( `
  58. }
    6 M) y( H. |% C% T0 y, R) }

  59. 6 c- z' t/ B; }' m3 n, N3 d
  60. CRevAppApp::~CRevAppApp()
    7 u1 K5 P! H6 y3 T  L
  61. {. Y- p" r3 H8 L0 u: v: A1 I
  62.         // TODO: add construction code here,- A0 ]+ v" o+ _% i
  63.         // Place all significant initialization in InitInstance3 C, S, L7 F2 S' c; B6 T
  64.   EndChangeData();3 X* n( ]7 s, Y
  65. }' V7 ?$ F+ F1 |1 T* y" f) ]6 c

  66. 1 J- W9 e. A) N+ U* e
  67. /////////////////////////////////////////////////////////////////////////////7 s- E! x$ J( l4 J) }
  68. // The one and only CRevAppApp object" h% R& q; [+ ~& ]0 z) I  p% N
  69. " L( M! `/ v. H1 m
  70. CRevAppApp theApp;
    7 Z: L: }9 |9 n4 j2 D! g' Y
  71. : i3 U9 T/ a& Q' ^- b8 c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)  D$ J9 Y% r" o8 a+ G/ V+ K
  73. {- J, u) s% {# s7 a' ]! p/ \1 ]
  74.   int iEOF=0;& H4 B0 J. i  w% `* [/ a
  75.   char szTempName[MAX_PATH];+ s. m1 |9 C' g  b( d$ w
  76.   *szFileName=0;2 w( f6 {( Z! Q1 v
  77.   iEOF=fscanf(fp,"%s",szTempName);
    - {" S' S0 Q9 H! l- j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    6 a: F! H$ G0 t
  79.   {. y: ]$ D3 a8 H- R# L, j
  80.     strcpy(szFileName,&szTempName[1]);# |5 m1 A8 K! B7 j+ Z% n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ [5 S/ B: V% L, U
  82.     {2 S3 v7 |# D4 A+ x
  83.       iEOF=fscanf(fp,"%s",szTempName);
    7 ?0 @! a: O6 ~) G3 t
  84.       strcat(szFileName," ");7 C9 |: s9 n7 n) u) Z, u
  85.       strcat(szFileName,szTempName);" c2 }5 \- w4 Y" ^0 l. }# B
  86.     }
    " i* P) s; q2 @) U" }
  87.     if(strlen(szFileName)>=1)
    3 @6 _5 b) M" g$ R' }
  88.     {
    ! B% R# V" e, m7 [+ D  B1 a! x
  89.       szFileName[strlen(szFileName)-1]=0;+ ^* {' t4 ^* y  E! I, V; R
  90.     }: t5 d* A+ t6 g% ?  f1 V7 T
  91.   }* m4 b4 G% p6 ~3 O0 M4 x
  92.   return szFileName;
    3 B3 K8 b; w& ]3 V3 N, \4 K+ ~
  93. }
    # q' q% n! Z9 q  W0 H0 m

  94. 3 p4 L1 O3 a2 v4 a2 t& m- I& D6 [* v
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    # S* ~; }1 r  ~) E. J+ n
  96. {
    , _5 A! B! W3 q' ~
  97.   FILE *fp;: f/ j5 g$ T: ?. n
  98.   char *key=NULL;
    % }! e4 S# \+ d% M- B3 H" t) h5 m
  99.   char version[MAX_PATH];
    + ~; t1 A; O( }+ B
  100.   LPUPDATEFILE file,olds;# b: V6 g. b# l- `
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( w8 F2 T5 l2 N  h% S

  102. 8 Y* T  B$ d6 A/ d& B
  103.   UpdateList.clear();5 Y9 `. d, S' C+ L& y: x
  104.   UpdateFile.clear();" B; x% m$ U; e# F
  105.   if(GetFileAttributes(filename)==-1) return false;5 }' t1 L3 }: s* `+ ?; A4 ]
  106.   if(!(fp=fopen(filename,"r"))) return false;: }3 k0 s  d/ M' q# ^9 N  N
  107.   fscanf(fp,"%s",version);
    5 z5 Z6 G1 N+ z8 R: z- v3 c& d. B6 y
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }* F4 {+ c/ V/ x2 N" z5 a9 M/ h+ E0 i
  109.   while(fscanf(fp,"%s",version)!=EOF)) Z9 e* M2 O  w% d
  110.   {+ F1 }" `1 Y/ h5 X
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! u! T  J9 E9 j+ B) V- v& d3 Y6 T
  112.     fscanf(fp,"%s",file->path);
    ( X$ R  D/ b. W) I
  113.     ReadFileNames(fp,file->file);
    4 O/ q+ w2 r8 i- n( I( I
  114.     strcpy(file->full,".");, P; Z3 t8 @1 C, j# e6 h  v
  115.     strcat(file->full,file->path);$ q/ T% X0 I7 _" n3 O
  116.     strcat(file->full,file->file);
    9 E7 ~. l% f; [$ Q5 b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% E* M( A. r. k
  118.     {
    8 B: f7 O6 p" ^9 S
  119.       file->vers=(float)atof(version);
    2 x6 e- f5 K' v% i5 f7 ]7 A
  120.       UpdateList.push_back(file->full);
    $ B( E( c- d. `7 `3 F4 F
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ) p7 |+ B' ~7 N! m( D2 K. i) u; k; ]
  122.     }
    ) `3 j  h, _* C; y: R0 q
  123.     else
    3 {; s9 Z  j# V( R0 l
  124.     {
    2 ]. s  ]- ~* l2 ]$ }% p
  125.       olds=(*p).second;  w+ N) {3 \& V& X& s; {
  126.       if(olds->vers<(float)atof(version))" _5 z0 N% }$ D
  127.       {
    # o/ p. k5 j6 {8 N0 h- \7 [, S
  128.         olds->vers=(float)atof(version);
    6 H1 c9 R0 i0 V' Q- `8 H
  129.       }5 f* z" w& x+ P$ p& E# M
  130.       free(file);; t) B* }7 j  S) ^0 C
  131.     }
    2 |) w7 d  r: d$ S
  132.   }; D5 V9 E5 r: ^
  133.   fclose(fp);+ e' ~. \( T# m+ E- P
  134.   return true;
    8 ~% B3 R% b$ Z4 w
  135. }( z# n6 \3 Z7 _3 k8 M% E( I
  136. 2 U+ \7 s5 \9 z; @
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : v0 r- T" N, _$ [1 w0 N- M
  138. {
    4 u# `: ~  E7 x
  139.   TCHAR  szFull[MAX_PATH];$ v/ \8 C  v% O
  140.   TCHAR *token,*inter;
    ' A% B9 f3 L* k5 }3 d0 _3 F/ e
  141.   *szPath=0;4 }7 N. }3 N) i/ `; \! ^
  142.   strcpy(szFull,szFullPath);
    / Y$ A2 X1 h+ H7 `% T* s% Y
  143.   token=strtok(szFull,"\\/");7 p5 O! x% J3 G
  144.   inter=token;* D# ~6 x: p: _- f$ n4 s) b
  145.   while(token=strtok(NULL,"\\/"))
    7 b; [: [! `# Q* I8 B
  146.   {
    " c9 v* q1 ~- S
  147.     strcat(szPath,inter);; @- T% N1 N: \2 K( _
  148.     strcat(szPath,"\");
    9 T, S3 W3 C3 j# ~7 i
  149.     inter=token;' k3 ?) L' A) j& n" K8 l; B
  150.   }+ Q; W" L% K- }# [
  151.   return strlen(szPath);& ^% L0 q, w* \
  152. }
    , m$ m9 S3 ?5 Y
  153. 7 I' R: m. t* o1 r' ~) X
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    * a/ ~# ^% M# T, \! e: @9 L1 {
  155. {! c2 A% f3 V% g  L1 n3 c
  156.   DWORD attrib=GetFileAttributes(Target);
    . w' Y" G% X; w  e, c0 f7 e
  157.   if(attrib!=-1)
    4 \& Z* K  ?6 Y2 X
  158.   {
    * i8 k4 X, B2 G) f
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))8 n) c$ i! d' ^- n( }
  160.     {1 d$ K. K8 X' s7 r6 V$ v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 j% [+ W" S% o( ~! x- e% m) n$ ]
  162.       SetFileAttributes(Target,attrib);! t1 S, r! N; q3 J# b
  163.     }, F- p& v+ t' _3 e* `* I$ a0 N
  164.   }
    & K4 r8 K2 l% X. v" [
  165.   CopyFile(Source,Target,Erase);' _# {* o. F: N" [. g6 C
  166. }" }' \& e( k' T$ w* f
  167. % i3 p5 ^/ S/ {: U
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    % {5 u: A" K9 n" d1 V5 g
  169. {
    7 `& J6 N. G: `
  170.      FILE *fp;
    9 u" J1 p, s+ E: U+ ?4 L5 p
  171.      char  szBuffer[8192];$ i0 c+ m  X" V! P' E) }6 ~
  172.   va_list  argptr;
    3 l3 N8 X9 {- a1 O0 `7 t

  173. 0 i+ h" K, k* q/ ?
  174.         va_start(argptr,message);% d" L; X: Y3 v
  175.         vsprintf(szBuffer,message,argptr);
    ' ]8 {1 q7 q7 D
  176.         va_end(argptr);
    8 s/ a5 ]$ y" U
  177.   fp=fopen(FileName,"a");
    " R' t. j  W& {6 x
  178.   if(fp)' b4 u5 K" ^6 R" ?+ Y) W
  179.   {
    4 Z# E' r& o. j
  180.     fprintf(fp,szBuffer);6 D* x' p& J" I  y. [: b" r' N3 v
  181.     fclose(fp);# m# d+ h; f, U
  182.           _flushall();: C2 Q) K  X, o; y, c' G
  183.   }2 y/ r; Z4 z' t+ \6 K
  184. }
    ! |" ^% V- D+ g4 ?2 O
  185. 6 }5 ]3 x  M9 ?8 w% {/ d$ I
  186. BOOL CRevAppApp::Fclearf(char *FileName)- w' |2 I# |% e
  187. {6 M# L" L3 Q& S, K  b- O
  188.      FILE *fp;
      \# X/ z9 a) a. l; ~. a
  189.     DWORD  attrib;
    3 T; y7 B# S( p8 b
  190.   attrib=GetFileAttributes(FileName);  P- s6 {+ g: ~
  191.   if(attrib!=-1)
    4 m% _, @' n; b4 m
  192.   {
    ( t7 i2 Z8 t) I" f" A$ E
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( x3 A; a) V3 [$ w" t7 P; F
  194.     if(!SetFileAttributes(FileName,attrib))
    4 y; w& l8 Q6 U6 J' J/ d
  195.     {
    5 u4 _8 j7 p% c$ e6 m9 s) G3 P% m/ {
  196.       return FALSE;
    ) |9 c& |+ t9 H2 Y  Q, W
  197.     }
    ; H' I( _+ I8 k" D) U- v" R
  198.   }
    $ k' d' @- R# v1 `
  199.   fp=fopen(FileName,"wb");
    6 U' n$ g% S) E( {( P' C3 q: \7 o
  200.   if(fp)# q& i* G$ k) a- N3 s6 [
  201.   {
    6 x% D+ ^! b) l# ?1 B- ?' S$ a' h
  202.     fclose(fp);
    ! O+ T% y- A( W# s. A4 P& ]
  203.   }- _" R- J" z% [- Q
  204.   return TRUE;/ ~, N$ {; }$ m  E! K- H' @4 y/ H
  205. }
    ' j+ z: x1 a7 H3 G" [. u5 V

  206. 3 o) [5 ?9 U2 [# R/ `* M
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    5 h  s1 R. ^8 H  U) y
  208. {1 ^: |* o7 O: l9 R: Z6 W% U
  209.   char filename[MAX_PATH];+ J4 ?6 u- k# K- H
  210.   LPUPDATEFILE file,olds;; ]0 j% ~$ q; E7 ~
  211.   std::map<int,CString>::iterator i;0 X/ O/ r' w! M" e
  212.   std::map<CString,LPUPDATEFILE>::iterator p;- j# `* k; m$ ~/ s, P
  213.   std::list<CString>::iterator l;: T- g  f; d0 E
  214. 8 x" [; k+ ~) a* @( k' B4 {" ^
  215.   if(bFirstUpdate)
    1 R7 b# Q+ I1 S7 _1 r& W
  216.   {
    5 T% D, D; f3 @# A" f
  217.     dwCurrFile=0;
    $ q3 s0 R( U3 O/ B; s& L
  218.     bFirstUpdate=FALSE;
    . ~0 {  ?- _7 i
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()): L( m! C3 O6 R7 d% k
  220.     {
    % E2 P( w4 N( Z, v4 d
  221.       dwTotalFiles=UpdateLocal.size();
    . W# B$ D+ w. f& A6 |$ I
  222.       dwDownLoaded=0;) A, R/ W5 s8 R6 M$ U0 O% `% c  R* e
  223.       bSilentStep=FALSE;
      I* n$ i- }/ E8 N& n9 E) @
  224.       bCompressed=TRUE;' ^: \1 ^( C1 B! N
  225.       strExtLocal.Empty();1 J: F7 |2 V+ z
  226.       strFullName=(*i).second;' n3 A& s1 X6 f
  227.       dwProgramState=AP_CONNECT;
    " ?% c3 B  i( _) U& a
  228.       return TRUE;# D& f4 l1 R7 }6 V4 B
  229.     }- \5 V! B% a1 V& |
  230.   }5 D8 e$ W7 H% w' n! s. H
  231.   else if(bRestartUpdater==FALSE)$ K5 A+ N$ N( k+ a1 B! X
  232.   {" `; M1 R: W& V$ r, L& \5 t
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ! L4 X9 b* p( E# E8 ?' {& z$ z
  234.     {3 N3 ?5 U% U% {
  235.       file=(*p).second;
    ! f  X: W/ H2 T' I# k. F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    6 P  r! z+ G8 D) b2 y8 ?
  237.       {
    " j! L+ b$ D- Y' Q% t
  238.         olds=(*p).second;
    9 s. m9 N; a, @! \" n7 {
  239.         olds->vers=file->vers;; i5 b$ ]! v; C5 L
  240.       }/ z( V# N% J) ^( \$ N* O
  241.       else- n- u1 c  W: q7 z5 X5 L5 D
  242.       {4 x8 j3 {" C2 _& n& J0 D" |, D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 D& d9 F7 }) r* E  o4 }/ }$ }
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ f$ }4 I3 t: q0 c/ R9 k7 M
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ) q) _& F! S" I8 G! s
  246.       }/ f0 p% V& D0 X) F7 F, }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! }& j! W$ }8 i2 T) B
  248.       sprintf(filename,"(%s)",file->file);
    ( z/ \0 a+ K) ~* ~" E) N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " K2 @  c* L) e% [+ R# G$ c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ' e7 X" S( k6 D& S; v, ?) X
  251.     }
    ; X. S0 x6 P; \
  252.     dwCurrFile++;
    8 e1 y, W  \) O$ K$ ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ y, Y+ r! H. ]% s+ V( m
  254.     {  X4 I( h! @  F' g, |' C
  255.       bSilentStep=FALSE;
    " P3 ~; _3 q( E# A
  256.       bCompressed=TRUE;
    . Y! ]& h* h! i: F
  257.       strExtLocal.Empty();
    / ]6 B' J- ^  P+ f+ b$ t: m
  258.       strFullName=(*i).second;( O7 @7 T# {7 _
  259.       dwProgramState=AP_CONNECT;
    4 Y4 d7 r/ A6 f$ H8 D: o/ p6 F
  260.       return TRUE;! u5 l* }! f% c, v
  261.     }1 v' c  _2 a: J6 c4 L
  262.     if(!bRestartUpdater)9 ~- d  a* a0 u) X6 w% Q; u
  263.     {) A5 b8 w6 Z7 ]/ K, h* n+ T
  264.       int iCurrSize,iFileSize;
    ' K2 I7 [& s+ g' K# o
  265.       iCurrSize=0;
    " B7 |# U% D; V' g7 E8 Z
  266.       iFileSize=UpdateList2.size();8 ~7 [1 b# r0 V1 M
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");2 `% i1 @9 ?. N0 m; I: s% S" U
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");) @2 L' w5 e8 V& O! N. B- X0 J
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 p8 Z) E7 p% j# s: ~+ O" s; ]& p
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: c7 @- I1 e6 ?# A. q6 O
  271.       Fclearf(".\\update.dat");4 G# g& d5 ]! d) @# P
  272.       Fprintf(".\\update.dat","Bloodyf\n");/ E. A" ?# i6 b$ P! u  P
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 i2 c9 v9 u& r
  274.       {
    ! c6 S4 f" p3 O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    # Q1 w- i: E4 y$ L. h. [; t
  276.         {/ c) q+ B/ k+ D8 D' f
  277.           file=(*p).second;8 n2 y6 |) ]1 R2 `6 u$ u
  278.           sprintf(filename,"(%s)",file->file);
    : ~  i2 e1 T( K' G0 }2 j
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);) ~' S, y7 M8 k. {
  280.           iCurrSize++;( j1 w7 t/ x: a0 r/ K! }2 V" Z
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));4 H5 [/ ]9 o1 ~& Z- i. Z
  282.         }# O4 F: b0 K1 o$ H
  283.       }
    ; f; R3 V% Z/ W  `
  284.       unlink(".\\update.txt");/ p1 Y7 [3 a9 K, k. _  Q
  285.       unlink(".\\update.tmp");) ]) [7 b4 _- t3 V3 T6 ]5 Z) l1 S
  286.       Fclearf(".\\checkversion.dat");5 ]5 X) q% i" i& V/ K& ~
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    - D* I9 u3 y) E  \# M7 y/ o
  288.       if(UpdateLocal.size())
    ) w+ T- |0 w) y. D
  289.       {
    3 ?1 B  C) b& w7 {$ M% p. H" ^
  290.         UpdateLocal.clear();
    8 q: }/ n8 `* i' k0 b1 S/ n
  291.       }. k; X2 |6 ^: d% Q! ^( y5 t
  292.       if(UpdateFile3.size())/ J% c. `# `, f8 D9 D* K( D
  293.       {
    / E# ]8 \1 b& x  F) R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 v* a: d9 ]. B7 n
  295.         {
    / F+ S0 ]# \  x6 r- @1 x2 S
  296.           file=(*p).second;4 V- y# ~9 P3 ~: j8 G  O- T
  297.           free(file);
    5 l8 T* i# C! Q6 r2 i& w
  298.         }& \6 O2 F; E/ ]; G3 q5 U& L
  299.         UpdateFile3.clear();
    : }! G8 a2 f( b+ Z
  300.         UpdateList3.clear();
    ! o& R( z  M1 T% K- l- B
  301.       }4 Q1 v- W" {! c/ i6 A% N, c
  302.       if(UpdateFile2.size())8 u* p3 U* U- L* y9 a' A
  303.       {- w/ b9 ~3 H1 ?* v8 i4 x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); w, @/ h' Y' t  q  c. [
  305.         {+ _4 y% K4 l( V% A3 ~
  306.           file=(*p).second;7 C9 w2 N9 n6 p: O. N) t6 l# \
  307.           free(file);
    ) l: F% y$ R4 I5 D# t0 u
  308.         }
    7 F. `  k4 G6 ~; m/ k
  309.         UpdateFile2.clear();
    6 Z& Y. I6 S* K$ @; {
  310.         UpdateList2.clear();
    1 N  q2 r* K4 o/ l+ I
  311.       }
    ) }- j. K9 Z( Q
  312.       if(UpdateFile1.size())
    7 ^7 ]; }) g; M1 U# r- X/ G
  313.       {1 q7 }# o6 r4 `: r
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 c; z. C8 p+ a9 I- B$ `$ M
  315.         {
    & N2 I- {! O( O
  316.           file=(*p).second;. R, s. Z- z$ U7 u% ~% N0 m6 s2 f4 C  D
  317.           free(file);
    . E; [3 }3 h$ V  a
  318.         }+ f0 P/ f2 U% ~! r0 r! m/ M
  319.         UpdateFile1.clear();9 M4 w0 `' ~/ Q5 v" U% n  e
  320.         UpdateList1.clear();
    / {; H* b8 k& W3 O
  321.       }/ f: S6 r! o, {( b9 M$ I
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));0 X) t) E7 S. E* W/ {9 S
  323.     }2 n; w( V* s8 k" Z. V
  324.   }
    , m; g+ x2 S+ S6 ~+ {$ }; J, r: w( e
  325.   return FALSE;$ n- q3 k' A7 q) C
  326. }- R/ Q8 ~: h6 y5 J
  327. % K  q4 B7 [5 m- \9 _- j
  328. void CRevAppApp::ClearAll(void)
    0 y6 ?! B9 J2 c% r  j8 g
  329. {
    3 U+ a7 [! @/ b) @2 l4 I: x
  330.   LPUPDATEFILE file;) D  J# F* w$ L& B: H' @
  331.   std::map<CString,LPUPDATEFILE>::iterator p;6 S4 e4 b1 H% h2 \+ U: I
  332. " O$ f# B4 \  `7 [+ e% J* D# P% \
  333.   if(UpdateLocal.size())8 O) W9 ?2 f$ U. U- o2 m' M" F) A
  334.   {% Z' b& N5 a- k
  335.     UpdateLocal.clear();* ]; e$ Z  h" ^; x  z
  336.   }
    $ }$ F+ M0 W8 b. |/ ]! u. S
  337.   if(UpdateFile3.size())+ T% m$ U3 H- u
  338.   {! Q9 \/ \% J$ G+ c0 p
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)+ i% W8 M( k  M% P' b2 {
  340.     {' K) V# b2 e8 r+ O6 @5 ?2 \/ v
  341.       file=(*p).second;% C8 h: r  l7 Q# e
  342.       free(file);
    0 L2 S6 y' M# m. I  r5 B3 ]6 w
  343.     }
    * h7 B: S, g" S
  344.     UpdateFile3.clear();* `2 p3 z, [( i0 U. }, h0 N' G
  345.     UpdateList3.clear();
    4 t* u$ s9 I( x; r7 v
  346.   }7 i! u* Q/ O6 \( Y3 O) I
  347.   if(UpdateFile2.size())
    5 ^4 A& E& I* k7 C/ P0 a2 F
  348.   {  E( u) ?! T% I! S3 a, D  d* Y; U8 Y9 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % F7 l) O2 `1 D. a# O; t+ o* Q0 L: M& s
  350.     {2 x& L5 j2 Y* ~3 q/ b/ Q
  351.       file=(*p).second;
    ; \6 @! U9 Q; ?( }$ B
  352.       free(file);
    3 Y1 j' v% u! y8 @
  353.     }
    9 v$ G. o% x( j% v( j& Y
  354.     UpdateFile2.clear();
    ( F: C$ \9 Q0 ~9 v! K
  355.     UpdateList2.clear();
    : t% f9 R7 C& c4 J  Z2 w4 t3 Z
  356.   }
    + `. g  {; v* v+ r: T. S
  357.   if(UpdateFile1.size())8 r9 b6 i3 i! a& W# J
  358.   {
    $ o5 e# k+ F( L0 w' l2 _3 R4 z5 Y- p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 |* F, ?- `$ K8 G7 E
  360.     {
    ; j6 R6 m% U) Y. K
  361.       file=(*p).second;  {* x4 N9 m3 x; _! j
  362.       free(file);, O3 ~# [2 ~/ ~  H# ?( A
  363.     }
    $ A% z2 P; p" \2 f
  364.     UpdateFile1.clear();
    " C; F1 t2 T, n, k* q9 Y% G
  365.     UpdateList1.clear();5 O# N( s3 Y* y7 x( \9 A4 {2 m# X
  366.   }
    0 z, v. l# Y- u! ]4 B+ h8 r' g
  367. }  
    2 k5 U* N  U% e; j4 ~* l9 Z
  368.   & b9 [7 r# {  p
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * O2 a6 w! O9 e* K, Y' A+ C
  370. {% b0 D& [/ Q% V6 L4 ^4 Y
  371.   int c;! o  d. ]( `4 g; Z* W
  372.   LPUPDATEFILE file1,file2;- o" }. d' n$ k8 r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;4 N+ i8 w3 s/ |. a; Z# S
  374.   std::list<CString>::iterator l;: r1 F6 l! T0 h5 W. z  Q8 T. M

  375. * H7 S; e" }0 L2 w! ]
  376.   UpdateLocal.clear();
    0 t! W/ y/ Q. R+ z: I5 m
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ) C% F: I0 p& j2 o
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % Q: r5 H5 `* S5 l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ f4 d) Z6 P+ ^5 ]2 Z6 S; l1 w
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% Z, }& u9 R- C" ]0 V
  381.   if(UpdateFile3.size())
    1 b+ f8 t0 ^* V: x6 J1 T
  382.   {
    ; B/ Y- l) W( Z8 G4 A2 X
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 l; Q5 {. b" Q  o
  384.     {
    ' }+ ^5 H, e# Y3 ?: O" [
  385.       file2=(LPUPDATEFILE)(*i).second;6 ?& n7 Z' b" X8 L* O5 J$ M
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* T  d5 X; X; l: A: x: @: I& j
  387.       {& Y: P6 J  Z) `
  388.         file1=(LPUPDATEFILE)(*p).second;% W  Q6 k( E* V" H6 W
  389.         file1->vers=file2->vers;! K7 w2 H) ?) d
  390.       }
    - W& y: Z# m  E* k2 K+ y& w
  391.       else
    8 D  e3 i( s4 \: k/ ]% X
  392.       {- F5 w8 |( ?- R3 O& w! ?6 q# ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));7 `7 ^8 h5 h/ D% V* K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));* F5 s6 J0 {  h6 j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) ?- M! j! L2 m3 K0 F- X+ T: i, D
  396.       }) f/ a2 T/ k, }' M5 W/ G0 f" v! P' M
  397.     }  j1 v. E9 B% c4 M# u, F
  398.   }
    ( n# n; d7 R9 M2 t. E  R
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)* n1 l( v9 c4 v( L
  400.   {8 H% u& u8 P% e% w% a, W/ ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& L$ M$ E. ?& k( }/ n+ ^+ U$ I
  402.     {
    6 d6 K( v  M" z. @4 q+ Z4 b
  403.       file2=(LPUPDATEFILE)(*i).second;8 q4 f6 ~* _- _4 U4 l9 e/ i
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / Z3 Y6 ^: X3 p1 x, d$ b* {! Z
  405.       {
    4 W- U' F, [, ^  G1 m; ]
  406.         file1=(LPUPDATEFILE)(*p).second;; a' F# {; Y: C$ W) N. }. W
  407.         if(file1->vers!=file2->vers)
    ) J! ~: K9 ?5 e6 a* C8 ^* h0 w
  408.         {8 p( }7 Y: a5 H0 `: v. g: w! n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * h! S9 M' ?* B; H, Q% G
  410.           c++;
    , }: H- A0 n& ~2 M+ }1 }
  411.         }
    " Y" ?! C+ Q. \. O  ^/ h: ?9 k) @
  412.       }
    ( p3 A5 d6 Q; ], R. |
  413.       else8 N2 p  t, N! C: D7 q
  414.       {
    6 k* s9 h+ f8 ^# P5 S* N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( W5 v" f" l# y; j
  416.         c++;
    ! j+ |5 O7 @# Q6 C0 r1 D( J
  417.       }
    4 n; `4 B6 S) ?; Y1 E
  418.     }: N# O3 u3 y% O6 `" ~0 B
  419.   }6 K' d" j% V& I! y2 m9 b! V
  420.   unlink(".\\DownLoad\\update.txt");# _8 V! U( n( u5 P1 @
  421.   if(UpdateLocal.size()) return TRUE;9 S7 {# j) Z4 Q2 F9 e
  422.   else                   return FALSE;
    8 N6 D) [8 d( x  v
  423. }9 l4 R) K( D8 c

  424. 9 L/ |, d/ K+ f; a8 |
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"9 Q2 v1 l/ k9 f' y2 k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    2 L- I0 o0 Z  H* ^: D2 H7 _; U

  427. : S2 _0 Q4 |6 g. ^' h
  428. + H/ C6 |) A) C4 |7 ?

  429. ( I; Z/ X3 R1 ^" }+ B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)/ r2 L9 Z* a& ^5 z8 L$ v# N
  431. {! _% c+ g$ V3 L! ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    3 E- C5 Y5 L& i& U" J+ S
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % _6 \6 i1 x* I7 U' D7 b
  434.   {
    " B5 w( ]* `" g$ s& y3 _
  435.     char szLanguage[50];3 K. `: }% j; d$ M  z3 o
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % A. \' ~3 \" W0 W& T% v( O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;# \4 C' L8 R/ H% v# D+ O6 _2 Q% l. F$ {
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * L$ m% W6 J0 w
  439.     else                                   m_iLanguage=ENGLISH;& D! v& {* X; R" A+ u7 B
  440.     char szRegister[100];
    # u! \( J6 d- K4 b+ n1 j5 W) \
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ j/ p$ ?0 J" k& P( C, ]
  442.     strRegsName=szRegister;
    1 V# Y2 R8 R  d" F% z
  443.     char szPatchURL[100];' g, }8 O& O1 q5 s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 W/ S  @7 L+ K6 A7 J' U
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);+ P! L# l, m9 @9 `
  446.   }3 e* r- n, F+ K5 c
  447.   else5 l' ]0 w" f; O2 J, K5 k$ T
  448.   {
    7 C" y9 f1 Z! V2 z% K
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      I# y( w* D+ Y
  450.     strRegsName=DEFAULT_REG_URL;
    0 H* w$ ^' D4 S# E6 c7 u. T
  451.   }8 s2 ^: u- o2 J9 r) S; O
  452.   if(GetFileAttributes("hosts.ini")!=-1)+ M+ v4 F" N* `7 Y& H
  453.   {% N6 q8 O# U" w0 |+ Y
  454.     char szIP[50];
    ' S" F. m! l1 a( r
  455.     char szDIR[300];
    4 ?& G$ o9 k5 d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")): \- R! _/ C5 [7 w" I% A
  457.     {
    - X# Y5 o+ A! J
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 q. p& Z) D4 C2 N
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");6 T. h6 k" r' j2 e& v
  460.       strHostName=szIP;
    8 S7 N' [/ D( ]8 ~! b) A, J
  461.       strHostPath.Format("/%s",szDIR);$ V, L5 Q: l" X; w/ j
  462.     }, t8 s9 d- z) c
  463.     else+ u% b1 M3 [2 R5 s, \/ {' v
  464.     {2 B& q+ i* F: x: Z4 k/ R& U
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 O. ?& }( [$ U2 y$ e' q$ }
  466.       {
    8 x: a4 f, N1 S" `# M
  467.         char szLanguage[50];- t- s7 y0 T4 z7 z! [
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");1 v- Q9 y$ \0 l* B9 C* _* k: ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    / K$ m8 V, n0 e3 [
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ `9 k3 K3 O4 N. f" G6 m3 s
  471.         else                                   m_iLanguage=ENGLISH;9 B) l# [3 R8 ^% l
  472.         char szRegister[100];( @7 l0 s& ~2 y
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 m  z4 H9 X' [. ~* T
  474.         strRegsName=szRegister;, M* g6 q) D1 u* H; g
  475.         char szPatchURL[100];
      `9 j. s7 a) J8 |
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 O, j/ g9 O# J6 x+ k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! Z" M6 k) T1 q) t6 P- n! q. @8 J/ W% }
  478.       }$ f6 y$ d: p% Q  u- U
  479.       else& K2 l. T5 R/ O0 d9 d. N. B
  480.       {
    - C$ ~" C+ b: i" a  v. d' V  r5 v9 B
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ N( [+ O2 Y) z1 p
  482.         strRegsName=DEFAULT_REG_URL;2 v8 e/ L( u/ d" z2 z- T& c3 m
  483.       }
    ' i+ V" X: r0 |  q
  484.     }
    , e& S1 p8 K# e9 x: o% i
  485.   }
    : ]! ]" P6 Q! u8 ], [
  486.   return true;8 ?1 e0 m4 D7 }) ^+ G
  487. }/ Q- D1 P/ U" k9 M7 F

  488.   r, F# q. O. i4 o& g6 u: q
  489. #include ".\ZLib\unzip.h"2 p$ G  a& Z: o* k
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);3 ?& e( S0 Z. e0 ?% [
  491. /////////////////////////////////////////////////////////////////////////////
    & b3 s6 B7 w# o1 S/ o
  492. // CRevAppApp initialization/ ^/ Z+ K9 q3 Z5 [

  493. & J" Q, `" f6 m8 X
  494. BOOL CRevAppApp::InitInstance()( {- m4 G, R( g
  495. {
    / f) }) F' V; n% k, t
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];$ u3 J2 x7 G1 ?) Z; z

  497. : R% }' d1 O) c. h* o* X9 x- @- k4 ?$ K
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);1 V5 V  Z/ j. B# d7 A
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))9 h/ l' i% e" P
  500.   {. f1 t* S, m1 O$ E, D5 ]' t% ^
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");# n/ n' P0 G1 n' Q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    + t% }6 ^2 v' j' f: @
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))1 g, W$ S- p9 z6 q
  504.     {
    8 A; _7 e2 e# @  O  `) P' i, _
  505.       strcpy(szPath,szPathTarget);
    # o- z4 O/ ~2 L4 P4 u) I
  506.       SetCurrentDirectory(szPath);
    * v1 M* k0 ~3 ?8 q/ E0 w4 {
  507.     }
    . {' k8 N0 K4 H) V5 U$ _
  508.   }2 g) I  f" B& t* w9 p
  509. #ifdef _DEBUG
    - O) T0 m7 j9 E0 g
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 D( H) f, w) F0 y' k
  511. #else) |5 R; Q7 w% G3 |
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 e) Z- g/ g0 ]6 n' I
  513. #endif' L- ?) k( a& M9 h6 o
  514.   {/ L  G1 L* t) o
  515.     char tempFileName[MAX_PATH];
    - J  {( K7 W9 f. ~7 N0 L
  516.     strcpy(tempFileName,szPathSource);: ^9 P- S' {8 d) x+ x# Y/ R+ C
  517.     tempFileName[strlen(szPathSource)-12]=0;5 m! u5 A2 V! T8 o5 j
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    9 |4 U8 v- ^( L
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 m- z1 w5 p- t$ j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ! V0 ?! c; u8 m
  521.     return TRUE;5 S; D8 x" V* Z' W+ ]
  522.   }* ?# l& T5 v5 R1 e
  523.   // Nuke 0118: Delete run.exe
    5 C8 R. ~! y" t$ L$ u( @
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( y! y3 m1 `5 e9 m% m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # Z& ?# w& J) z. |" M& |* ~
  526.   if(!ReadCfgFile("Config.ini"))
    2 Q4 v/ j' L6 {3 {
  527.   {
    + l  w" F* @+ Y3 c) W* S: O# S" I
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      d' _: f, z. j0 \7 S
  529.     return TRUE;
    * a( h- R9 E* ?! H& p" |0 Z
  530.   }
    . n. z1 _! C5 m. F# T  E2 H2 \3 m
  531.   HANDLE mutex;& Q. @) R& }, v$ z3 m6 W
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      d6 d# y- W7 d+ i$ |
  533.   {* ~5 M, s9 E% o, c3 s' W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)8 p7 {* H5 b9 [2 ^8 A
  535.     {
    8 C- n2 f% }+ b- t1 b7 I3 `
  536.       CloseHandle(mutex);
    ; {' _6 [+ w) y. Q5 X4 d, H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * X" R! N% ]1 ~# ^' g
  538.       return TRUE;: }# s! F9 v( I( ~4 G- K
  539.     }, D, t/ S0 V& ]
  540.   }  5 A, z" b7 W, y2 k* h
  541.   CloseHandle(mutex);
    ; Y- L+ Y; g4 V
  542. & S. z& n0 }9 \9 N3 e! [, ?6 E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& b$ ]) M8 g- P3 ?9 k  `" G+ B
  544. , }, U  t( c$ W/ w7 W9 P: N0 g1 t3 B( z
  545.         AfxEnableControlContainer();+ M  [+ T" q5 `2 Y8 M: ^) _

  546. / I, A% L2 j5 T; n& Z0 o# @! X
  547.   bCanUpdate=FALSE;, U& h! z; n: D3 J$ z$ U7 C
  548.   dwStartUpSteps=1;
    / S2 _- j9 B, ?/ E! J  R
  549.   dwProgramState=AP_NOTHING;
    : e' i" i% G- D; Q
  550. 6 r( F2 M& f7 c% p& K/ g2 {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( @( Z' r9 w* c' |. `

  552. + C# F' D/ b$ N3 l
  553.         // Standard initialization
    - x3 ?+ f' d: g% V; O- v% P
  554.         // If you are not using these features and wish to reduce the size
    3 E2 t* l% E+ j" I7 D: G: C
  555.         //  of your final executable, you should remove from the following0 n( I% d( q0 _9 c
  556.         //  the specific initialization routines you do not need.
    & h: q9 b8 C( j6 \( J9 n- @9 U

  557. 7 ]9 U( N5 s9 H2 |7 z
  558. #ifdef _AFXDLL' A6 ]& L9 e2 f
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 E1 J2 P1 B4 H& \. _! g
  560. #else
    0 _( J8 m6 D, D
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 m8 J2 }+ o0 Z9 v* Q- V
  562. #endif1 Q) K5 Q# R) K

  563. 3 A3 m: H% r' a& ]% J9 P; ?
  564.   dlg=new CRevAppDlg;2 U& V0 c0 A/ R) F8 M+ j6 p2 f
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ) Z' y/ F: m1 {; p
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    . Q  }) V* L) j! V( F6 n$ ]7 z
  567.   m_pMainWnd=dlg;/ [5 U" q: p7 e0 b# V) J0 x
  568. & }8 l0 ~" z: C; U2 Y) C
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      B% J/ q+ O* c+ B: }
  570. 8 ~. P/ o% g5 r
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ( g* y7 H! w! T% d
  572. //  ULONG_PTR gdiplusToken;
    / e  \* m( m8 u% Q4 ~& Y6 {
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! W- j5 r: C/ i1 O. `# J
  574. $ }( m! `" {( A' M  w& [" l$ b+ O
  575. //        CRevAppDlg dlg;' ?# ?" w- X  [* ~. |: A5 s
  576. //        int nResponse = dlg.DoModal();* U) E3 [% t  g+ ]9 x4 W' F
  577. //        if (nResponse == IDOK)& w5 Q* u; ^& }" n! y
  578. //        {
    & v: c, j' E8 m
  579. //                // TODO: Place code here to handle when the dialog is
    3 _& s# Z( G9 e  G5 O
  580. //                //  dismissed with OK
    4 I( Z7 ?1 _3 p4 G  L: [
  581. //        }( f' u% ~. p/ p7 e4 W
  582. //        else if (nResponse == IDCANCEL)0 s( o" c5 o6 ?( D
  583. //        {1 h- e5 k. h8 u1 @$ h0 Q# H- z
  584. //                // TODO: Place code here to handle when the dialog is! x! Z; e4 K$ z7 Y* U! s1 U
  585. //                //  dismissed with Cancel
    ) I3 K! e# f1 [
  586. //        }
    0 l- [6 Q% q+ u1 B

  587. ' X4 W3 R" ^7 s( x) d+ B$ a
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    & ^1 J4 U! x4 T
  589.         //  application, rather than start the application's message pump.! I5 U5 r" l( {5 e. I8 Z) i: b
  590.         return TRUE;
    4 |; T% X/ k0 j3 ~# |
  591. }3 h$ z7 [# \* }- b2 o. r- Z

  592. % G" \& K+ p! j( Y0 |9 ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    + n' E$ G1 J6 P7 z+ I5 J
  594. {- s: n6 a3 U4 p1 H2 Z' Y. \
  595.   int i;
    " J9 q! U7 h% P/ }
  596.   char *szRet;$ h% {- ^- N& b

  597. 0 F5 A; g0 ]% t+ P
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    9 x' d3 |& H0 m8 @- T  ~. u
  599.   if(sztoken)
    9 L! ]# D# a( Q+ o
  600.   {# B, f& J& o! e: p; ^
  601.     szRet=&sztoken[itoken];
    / x+ g1 N; p/ Y: T. o2 N5 {) Z/ q
  602.     while(sztoken[itoken])' D0 H2 r5 p8 r0 o+ {
  603.     {
    : m& h" w3 g+ @
  604.       for(i=0;i<(int)strlen(token);i++)
    7 b( ]) v& @- F. h9 B0 z" ]) Q
  605.       {
    + Q6 o7 p- J  ~: n' Q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 s/ y# h- i& j( Q' G- o9 ~  g
  607.         {
      `8 {" K0 t( u$ _- c( e" ]& W
  608.           sztoken[itoken++]=0;
    6 F  y5 j8 s5 \
  609.           sztoken[itoken++]=0;+ X7 A. {2 P4 a4 [/ y9 p* T
  610.           return szRet;
    0 s8 n  P; V" `( g) `
  611.         }& I% S: K/ m: Z" I
  612.       }
    5 k5 R, B( j2 r/ l$ D$ g
  613.       itoken++;8 z0 ?$ j9 p6 `3 d- L( B
  614.     }
    * ]! x* x! g8 H; b
  615.   }% f& ?8 a& H6 R
  616.   return NULL;
    + M6 C( y  l  q6 D
  617. }
    2 w9 q4 S1 r9 S- h9 r1 |7 g/ _

  618. * Z8 q! h. R) y) S
  619. void ProcessProc(long Total,long Current)) B$ }% }2 u* x
  620. {
    " T, e. O5 z+ b' T
  621.         MSG msg;
    8 `% f2 z: |  R- A1 q# r
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);. y) a+ A, |% l
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ' w$ g2 ~5 `- b# K) F3 S
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    : D8 a+ Z- g7 H" z: h
  625.         {
    6 P% [+ Z" S- s3 B
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( k* D" v+ }' T
  627.                 {
    7 h  h/ |) S! F* f7 Y9 y* d
  628.                         return;
    7 C- k6 B- T& H% r- R$ i
  629.                 }
    0 T" x! i, N; k0 R
  630.                 TranslateMessage(&msg);
    $ J' N7 \$ ]% T. H  O$ Y
  631.                 DispatchMessage(&msg);
    - f8 d7 u- @1 H# K) O! Y+ f0 H; u
  632.         }       
    7 [: s1 X) ?* p& C) D' w: {
  633. }- ^7 W8 T, ?0 M+ {% X

  634. 4 B2 E2 }0 t. i6 P6 ~1 _* i& V
  635. BOOL bFirstChar=TRUE;+ w: T: r. U! o! H2 J

  636. 8 k& r! @. u0 z( S7 G
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ) l1 p& u  l, \) B* d
  638. {
    ( H" I/ O: t  G$ z
  639.         // TODO: Add your specialized code here and/or call the base class8 O+ ]2 H! b# r7 H- T/ N& B
  640.   switch(dwProgramState)
    ( Q1 T1 V! }+ w( l
  641.   {
    5 Y& G5 Y* i3 y- Q9 b$ C. r3 E
  642.   case AP_NOTHING:
    4 Y9 {+ O$ j) @" v/ A4 e6 G
  643.     switch(dwStartUpSteps)4 p  {/ r1 C1 a1 @# A, g/ D# @
  644.     {2 t) m/ t6 t, J! X
  645.     case 1:
    ' i- H1 @& D# F' K1 p
  646.       {
    0 Z0 W! H' o0 o9 i/ S" n1 n* K0 G
  647.         int i;
    6 P$ ?4 j; [. Z) d/ F
  648.         CDC *pCDC=dlg->GetDC();9 n  K: ^. X1 c8 U! \! \9 L0 C+ R7 P
  649.         HDC hdcwnd=pCDC->m_hDC;4 d' p: L. S2 e2 `: @
  650. //        Graphics graphics(hdcwnd);  F" L7 g) z1 `/ }
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");* O" H1 }8 y1 X7 r% P6 o
  652. //        INT iWidth=bitmap.GetWidth();
    6 r6 B- x" f& B) x
  653. //        INT iHeight=bitmap.GetHeight();; D2 C. y4 U4 u5 Y
  654. //        Color color,colorTemp;
    . l8 f. x! s2 N$ G
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)5 p4 i* o) H  ^- S3 N+ L) U% j2 g
  656. //        {) a8 T9 e8 P/ Q+ ^# Z1 L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
      H1 X+ X! e7 }9 D, f# G7 K$ P( i
  658. //          {
    . ?- ]) {3 H  m+ x+ w
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      S: @6 P  n6 Z. ?
  660. //            colorTemp.SetValue(color.MakeARGB(. b5 V7 l( D  t7 G7 }, i3 S
  661. //              (BYTE)(255*iColumn/iWidth),
    1 D! h3 `6 T; \4 U; l4 ^) ^: T
  662. //              color.GetRed(),
    6 k2 r; v6 @) q4 L" A' ]
  663. //              color.GetGreen(),, d# O, r7 N+ ?$ f% ^; x- ~, |% {- S
  664. //              color.GetBlue()));0 Y2 R4 ~- S" }% V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 Y4 T" A; A' c: `4 K
  666. //          }
    ; L4 i) C% B6 O2 [4 _& Q; d
  667. //        }
      k+ O8 S7 C# e, W& z
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);* x) {6 m9 P# U$ B7 G5 c2 l7 m. f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 v8 O! l# J5 C  T; b) K9 E- p: o: b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: r! W+ \6 I! {- r( ]+ y2 Y: b
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  u+ ~* h5 j0 L. W0 d
  672.         for(i=0;i<240;i+=8)% E. M# l5 y- e" w7 _. F- l- E' u
  673.         {# \5 \/ z+ m- G/ c; U3 w; a
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 r5 f0 R, }5 Q/ m
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 v3 t0 a1 U! u% y% k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& o- o) a, I6 D' P7 x
  677.           Sleep(33);- D' o# [, E: x. ?4 v
  678.         }( |0 Q6 F) d, o) n  h& ^* u
  679.         Sleep(1000);
    ( N7 X2 T; w) E  _, `& u: S
  680.         for(i=240;i>0;i-=8)# ~& c' d8 z3 V3 S. t
  681.         {" Q, ^' z1 [4 T9 u
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , x+ g0 Q7 ]6 h/ I
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 k/ C) S6 |8 n3 T+ O9 d  p, M5 Y+ j& e
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 H6 K" b4 C1 T& b7 W
  685.           Sleep(33);
    # W0 ~! h" X! [1 D0 ^( V, k  b
  686.         }5 M4 J# ]4 @) N1 e
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    5 e! {/ ?( M. j
  688.         dlg->ReleaseDC(pCDC);  G6 ^, s/ X4 L" S
  689.         DeleteDC(hdctar);
    * R4 o/ ]6 t  n  k- Y
  690.         DeleteDC(hdcsrc);
    , C# ~# l( Y; m  e3 S: D
  691.         DeleteDC(hdcorg);
    3 J, S- L" ~( C! O2 r* b5 Q
  692.       }) h2 |  r2 o, R8 Y
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);* E, e' }9 Z, L1 r6 Y# {6 a4 F% p* T
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + V/ l- u4 p! c$ ~  O/ D4 U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* E; l* m5 e; P3 U
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , w. P( l" l$ L: {  z# [
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # e' B- X/ n8 s: A5 Z: s
  698.       if(!Dn.Connected())
    8 m+ g8 ]' z; Z3 {+ J# V" z; H+ F
  699.       {
    : H9 J0 d) q, K! M# T5 \
  700.         dwTotalFiles=1;0 ?+ Z3 t) Q- d' V
  701.         dwDownLoaded=0;# f1 C& G$ [, j5 `( M
  702.         bSilentStep=TRUE;$ R0 m: K8 J( Y) ^5 `- d
  703.         bCompressed=FALSE;- X- U* x- g! |* f! j
  704.         strExtLocal.Empty();
    + Z, ~9 Z+ `* J
  705.         strFullName="readme.txt";& Z) O+ T# W! X" s3 C2 a7 Y
  706.         dwProgramState=AP_CONNECT;
    1 I3 s, R* @* B- r* |: }! t
  707.       }
    6 T7 i8 X, C6 d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();: O5 @! I9 ^7 H# B) p3 p
  709.       dwStartUpSteps=2;
    $ y) [7 u/ w. J  ?! p
  710.       break;5 p7 P4 l1 K+ j5 W9 W) m+ G3 H
  711.     case 2:- ~7 {2 I- m1 f- z8 z/ D/ D
  712.       {
    & y( j9 f( e+ Q& g" m/ |; n% a
  713.         int iEOF;
    / Z* c3 E. a1 V, q6 n
  714.         FILE *fp;
    # i8 s+ p: C) s4 w7 A1 q% j5 S4 b
  715.         char szString[512];2 _  r% ]9 i, G4 E1 X- D2 L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ; {- m" p2 l! {' y
  717.         if(fp)
    9 M! h  ^( i8 V
  718.         {  j0 O0 o; |% ^
  719.           do
    ; q1 U( y  l2 w9 H0 e+ y+ H
  720.           {
    3 ^* j! E9 ]* A: ~
  721.             iEOF=fscanf(fp,"%s",szString);5 o" T$ p, v# h; t5 T5 v# m" J
  722.             if(strlen(szString)); L4 f- E- X4 E3 u- r+ [+ X
  723.             {; ]) r) `% f1 u4 U9 `; B
  724.               if(bFirstChar)
    $ U; W2 }4 ~; I, Q* s
  725.               {
    : R- E3 n0 Z0 g
  726.                 bFirstChar=FALSE;, {3 n7 B0 T  x, G6 m
  727.                 bConnectIsBig5=FALSE;6 A; S7 n8 D, X* Q0 D' B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ p* S3 B6 }& y8 h6 m
  729.               }2 A# F+ B5 Q) n" [6 Y* F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 _( o& k7 u7 }- s  ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    . H5 o" y  F. X7 q+ T, I' J
  732.               dlg->m_ListText.AddString(szString);
    5 m8 ~9 ^$ e4 o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! _) p3 S- i$ J% l. n
  734.               *szString=0;6 m3 f/ e3 g4 N5 `
  735.             }$ z9 |" j4 B  I7 w2 {: n
  736.           } while(iEOF!=EOF);
    . k" F$ n" D, {  S* V, O- Z
  737.           fclose(fp);1 W3 D/ g  S1 O9 K+ P- L
  738.           unlink(".\\DownLoad\\readme.txt");
    4 D. w6 I0 N3 Q, Y8 U& N& L
  739.           dwStartUpSteps=3;
    0 r! [9 s2 m& q; b+ {3 [
  740.         }$ n& o8 o' J5 i( h% n5 n  |
  741.       }% D7 A$ d; k# z& W: V, X# ]
  742.       break;
    $ Y0 N! }" |* V0 a$ `
  743.     case 3:
    2 i. h- Y, J* t. B6 ~
  744.       if(!Dn.Connected())% {% m3 ^% ^6 S1 {6 O  u* ?, {
  745.       {% |" D, h; y; L5 ?3 G
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    : _, Y: f7 H$ b# M
  747.         dwTotalFiles=1;
    8 S2 x$ ^5 C' U/ p
  748.         dwDownLoaded=0;
    * n; u2 y0 q0 D
  749.         bSilentStep=TRUE;- R* ~6 r. u& x; Y/ N
  750.         bCompressed=FALSE;& g8 g2 Y) F1 ^) U
  751.         strExtLocal.Empty();( t8 l! e1 T6 x" ^
  752.         strFullName="checkversion.txt";
    7 L* g6 [- ?; i- d7 ~
  753.         dwProgramState=AP_CONNECT;% W$ x2 f8 g! i! b- H8 i
  754.       }5 h$ U" Q3 [' b/ h. q8 ^8 z
  755.       dwStartUpSteps=4;
    * a# H) Z/ q; z$ s  X
  756.       break;
    + M3 l( A- r$ s: G3 @& v! b
  757.     case 4:
    8 h& z  r  i; d: E' t
  758.       {% L6 l9 h, {$ H7 t
  759.         FILE *fp;
    * L" n8 o: u4 F; M' r& P, `
  760.         char szString1[128];
    - F! V9 V% `! M+ b+ _
  761.         char szString2[128];7 y; U3 U! x5 e. H1 T3 z% B
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 W" N+ ~% }0 ]& D$ W0 \* `
  763.         if(fp)' v8 s1 C' N4 w( A7 A( n
  764.         {7 R* ?3 [* J$ k
  765.           fscanf(fp,"%s",szString1);
    ! Y: a2 W) Q2 }( Z1 e% x2 W  R
  766.           fclose(fp);
    0 q$ k, h; w: u. N: ~. Q& C) J: ?! @
  767.           fCheckVersion=atof(szString1);
    ' }0 s, n. Z. p8 N$ _! q9 L( e
  768.           fp=fopen(".\\checkversion.dat","r");+ C( H1 Z" e5 V% R8 \
  769.           if(fp)
    ' l$ F# J& _# B& M% W, |0 e: l
  770.           {
    # b2 J) T1 d! |2 N/ A; z: P
  771.             fscanf(fp,"%s",szString2);
    6 S+ l+ N) Z3 z
  772.             fclose(fp);: e; ?/ {3 z' |0 d8 x
  773.             if(atof(szString1)!=atof(szString2))' ~' v: B* X) [. U' ]
  774.             {
    - N4 X0 L0 Y* Q5 k- U
  775.               if(!Dn.Connected())
    2 F! w' l' \5 {& h2 O
  776.               {
    " F1 E! ~, Z5 u( O! `
  777.                 bFirstUpdate=TRUE;# N* q5 |, k0 u3 X
  778.                 dwTotalFiles=1;; _- p: n" t0 X4 _5 d7 L
  779.                 dwDownLoaded=0;
    4 N0 |+ V2 I9 @
  780.                 bSilentStep=FALSE;
    ' t% Q" N5 E) ?1 C
  781.                 bCompressed=TRUE;6 f% `7 \6 G9 r# I/ o$ p5 ~3 Y/ ?1 o
  782.                 strExtLocal=".\\DownLoad\";* e4 y% {) m, |$ N% N
  783.                 strFullName="update.txt";
    $ V# B/ A7 L) L: y
  784.                 dwProgramState=AP_CONNECT;
    " f4 n1 ~- T( g3 A* w7 K3 @
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" F# q6 S- X0 _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - c3 d. w: X) E: a# n5 i
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 q7 L/ ^% Q+ h0 C- m/ u
  788. - R9 ?$ Y' L0 o  |5 \5 I; g
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % U7 J5 `- M! E
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    & |- \9 t7 E2 E; ~
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    0 `# H+ }( C3 d; i6 z  l% h1 e( R
  792.                 {8 e3 V( ?  ~" F3 o' Y; P
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");: o0 N* Z) p1 T6 Z3 z. f3 w5 q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");! L  ^9 c& V! y+ e: v; g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : A3 v0 @) s% L. z; i
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 T/ `* m! k! z- L

  797. $ W6 O( j( s% U) A" V: Y# I
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    4 n+ m6 {# V7 s. C, K
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * T& s  }) |  W
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' r* E7 I7 j6 V- _: u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / I- W# T/ e0 J- b2 r
  802.                 }
    # O( P6 Q( l/ T
  803.                 dwStartUpSteps=5;
    + }; s/ J* c- Y5 _2 W$ w
  804.               }* g; A) n+ i( A
  805.             }0 p4 K+ G; b  H+ C" T0 N1 f* c
  806.             else$ @! {$ Q& ^, n; S/ s5 S/ [3 _
  807.             {  C6 e, g# V/ A7 S" D# _
  808.               unlink(".\\DownLoad\\checkversion.txt");
    : b5 z3 A( S) z  ?5 k9 X
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , Y1 s- e' Q' t7 b, K- n. _
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 ?" x7 I$ D" V& r& d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");0 _" Q0 l( ~+ S+ L! H# k

  812. ' C7 w: ]( v5 {6 }
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* U& r5 I9 G$ Z
  814.               dwStartUpSteps=99;9 i; Y$ ~- k- D/ X) ]
  815.               bFinishUpdated=TRUE;2 }* d8 r$ Q- \; i
  816.               bCanUpdate=TRUE;) m& X: o; M' X
  817.             }
    ' i# M2 N; h1 ?, @# S
  818.           }
    $ N1 n, ^& y0 P, K$ Q9 c! w, r9 @
  819.           else2 ^/ ?$ v* w, q6 \
  820.           {
    7 ]$ i' `! j! @& w8 J+ K# a* g/ D; a" C
  821.             if(!Dn.Connected())
    7 M' y, H# C; d+ m8 r
  822.             {
    ) J3 G' K* |6 E; l, W
  823.               bFirstUpdate=TRUE;
    & {/ Y( g: M9 U/ q
  824.               dwTotalFiles=1;
    + X# b$ [: T/ T. u
  825.               dwDownLoaded=0;) Z4 Y- X$ R) Z+ A$ i2 R
  826.               bSilentStep=FALSE;/ t/ Y- N7 d  T  p. O
  827.               bCompressed=TRUE;8 |5 j- S0 ^$ [, {
  828.               strExtLocal=".\\DownLoad\";
    5 B$ R  \3 p6 M& X% r2 Z1 R( D, ?
  829.               strFullName="update.txt";
    $ [. ]5 x4 g! O- U% J/ h" e+ J; K4 d
  830.               dwProgramState=AP_CONNECT;" B. H; y$ U3 m0 Q3 {2 u. a, Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) a& U, n0 b, Z, G
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " e+ {1 S! i; I, l1 Y  X+ I
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - ^6 @6 C( ~& @3 h
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) L5 J1 a' x5 V
  835.               unlink(".\\DownLoad\\checkversion.txt");
      P8 R0 ]; h- v- d- N/ F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)' K/ q/ W! w7 O" U
  837.               {2 o1 I2 v1 s4 J; W5 l
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ' a; e; _# J, ^1 _6 r- J
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");1 R9 Z% q% K* {1 L2 U& A4 w: l' N* q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ) D* ^; `" ]" R+ I7 l7 S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      q; v1 Y9 @0 ~8 ^2 S( O
  842.                 & F2 G/ k/ ~7 U5 _. K$ E; H" f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ N+ E, p8 F8 k! }/ Q  ^
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 K) q3 S2 b8 F! H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
      J3 Q  i3 t- N3 Q; l
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& t. h& Z0 ]& g6 p
  847.               }2 u! s8 E) Q2 r2 m) h
  848.               dwStartUpSteps=5;! o1 D5 G* d/ t. b
  849.             }: h3 R' m  E& t( w
  850.           }
    : n8 Q2 W; k' |% W; F
  851.         }
      c/ L" {9 L; S! Z0 e
  852.         else
    9 F/ v% P- w4 C/ |& ?( L$ _
  853.         {8 V4 J' m& `* m7 u' A7 s% K8 Q1 O
  854.           dwStartUpSteps=3;
    . W4 Z) s8 {0 I9 w
  855.         }1 s! S: z: \- Q" z+ Z/ w1 D& U
  856.       }
    9 Q0 ~, l7 j9 Y. S0 t; o: }
  857.       break;
    ; _; d: p4 a* O8 |* w. R3 K' |
  858.     case 5:
    / K( z" T, q! m% x' L8 c1 [+ R- L
  859.       {( s& f2 a! Y  H
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)5 a8 r' w9 M) K7 C! M0 d6 n
  861.         {
    * g4 k+ A  _( B4 G5 a
  862.           int opt_overwrite=1;
    4 N* q( n: o9 W
  863.           int opt_do_extract_withoutpath=0;
    - B0 e2 }* c8 W
  864.           unzFile uf=NULL;6 c9 X( t5 u) R- j$ w
  865. ) m% z. J! K# l6 Q1 w# d
  866.           uf=unzOpen("Wsa.zip");$ f! w% _/ A4 l9 ~+ n0 ?) C
  867.           if(uf)
    * E# \- d7 U0 w( n
  868.           {
    8 _7 s& z/ \6 v/ w; G! U0 u
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);& R, X/ n% S! N* Z
  870.             unzClose(uf);% V7 a+ E% @3 d* W$ k6 S
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    : f) B& Q* j1 T  F. x& E+ P' Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");6 [4 L0 [* i2 F+ w
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    , v, Z/ w4 D% {0 _8 y* p# P
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ T, T) Z3 I/ b+ T9 y7 i  \
  875.           }; L3 `3 V" ]9 d4 v7 t
  876.           DeleteFile("Wsa.zip" );
    / C: D0 W3 J# u% r* \! P
  877.         }$ m& F1 j# X4 d# T! c

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

評分

參與人數 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-3-2 17:34

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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