找回密碼
 立即注册

CSUpdate.exe源代码

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

# f$ v9 j3 F: \( O0 U
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 L# g" c* T! B6 U! q7 J
  2. //
    ; n; S; M. m: G1 `0 T2 w

  3. 4 W+ p# K7 }6 r' {8 X& q
  4. #include "stdafx.h"
    2 {0 ?" m. a+ }: g+ \7 F9 q
  5. 4 G- t  V6 A" N- E/ O+ h8 E; e: K
  6. //#define UNICODE' P8 f: l# c( o9 C
  7. //#include <gdiplus.h>
    * V" C" u4 S+ W/ L" `; M. z# O
  8. //using namespace Gdiplus;
    # i/ E/ d% n! ]" i3 v
  9. ( ^+ d# V  V" W6 a# |
  10. #include "RevApp.h"
    4 b( C, F& T2 i1 Z
  11. #include "RevAppDlg.h"
    - k0 K( F8 }, s

  12. 9 J. R2 b, _" T: ~3 I7 L- v0 r# o
  13. #pragma warning(disable:4786)
    ) K0 p3 _) a( R" Q6 Y' R& ?, i# |
  14. #include <map>/ I, x  r4 |: [
  15. #include <list>
    9 J4 d. w& K" ~  m' j) p
  16. #include <direct.h>' q7 ~! \; O  @  D5 r

  17. ; x2 J% \; [% t0 u0 g. P
  18. #ifdef _DEBUG- r) j" B9 W. |) A; j- ?  p
  19. #define new DEBUG_NEW
    / G9 X5 ?% }, n1 S/ ~- V( D9 s. B
  20. #undef THIS_FILE
    & v, ]  u  ], b" X- o; |! g% |
  21. static char THIS_FILE[] = __FILE__;
    . l# V6 a/ X3 Y% D; i- i
  22. #endif9 d9 h" y1 C3 |$ l
  23. #include "SkinResDef.h"
    . ?% }6 X9 P# b7 @8 V
  24. #include "ChangeBG.h"$ P0 t1 {& }( f4 T! X
  25. #include "AFXINET.H"7 i4 S5 w# k" ~1 l6 O9 Z* x7 k7 Z

  26. " [' e: b' e* D0 _3 q: Z7 Z" @
  27. #define TRADITIONAL_CHINESE 0) r. e, P3 W! C: D
  28. #define SIMPLIFY_CHINESE 1
    ; ]' k: \% s9 q- l
  29. #define ENGLISH 2) B# C7 Z  N2 u, q/ M
  30. int m_iLanguage = ENGLISH;: P, t; S# W; J3 T+ j
  31. /////////////////////////////////////////////////////////////////////////////5 t" [2 N6 B3 G
  32. // CRevAppApp7 m$ k# S, A8 N! d3 i: N/ A" G
  33. ' |1 u+ R& n; y- {& o& P# I. V# }
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
      g, l+ ^6 H- j  b* {" J
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) y6 V! s. T1 l: b0 [1 W+ S; m
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.0 L( N0 s0 V; T. v7 h  f: i9 ^
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - Q5 p& F( V" e  H5 d. N" _' f
  38.         //}}AFX_MSG, C, |8 z  X  n' c: _
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' V( ^0 A5 B$ H9 z
  40. END_MESSAGE_MAP()$ B$ R& `8 ?9 [4 e7 _
  41. 9 @+ P. e/ o' d) K+ m
  42. /////////////////////////////////////////////////////////////////////////////, G  }. c( B$ F& e2 p  Y: v
  43. // CRevAppApp construction4 F0 K  V4 D+ w6 P: n' {  U
  44.   T, N( z3 [8 I, i
  45. CRevAppApp::CRevAppApp()
    1 @' `8 ]2 Z' s3 _6 S, V% }0 {2 _
  46. {: ]# _& Y* m1 _; R: M
  47.         // TODO: add construction code here,9 _# q) O3 y8 f+ \1 O7 T2 i2 w
  48.         // Place all significant initialization in InitInstance# S- n8 q1 l$ {$ N
  49.   bDisplayIsBig5=FALSE;
    9 J/ K# e5 Z+ ^
  50.   bRestartUpdater=FALSE;- @3 ^% @% O  c: U& Z+ x7 T3 ?5 i+ e
  51.   bFinishUpdated=FALSE;* A0 z* I5 m1 J7 F# |
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;) O5 s$ k/ n/ g
  53.   InitChangeDataBig52GBKS();
    ' E* N, @0 V6 t7 t1 B% {7 Z  |
  54.   InitChangeDataGBKS2Big5();
    9 e5 G. t& n9 r- `7 F
  55.         //
    ( B! ]% c9 s* R) z) ?8 a' l3 W3 P5 ~6 x
  56.         bClickRunExe = FALSE;& w( `8 F/ O, O5 I/ L& [) m; Q
  57.         //
    4 D) s& ~) p# c, ]0 T/ ^
  58. }" [& c5 u% u9 R+ a3 G  T

  59. . t1 m. K. T" W# @% c! j
  60. CRevAppApp::~CRevAppApp()) Y' a3 C% i& i
  61. {0 e  T6 Q1 Y9 `3 H; F% R* \# p, p% V
  62.         // TODO: add construction code here,, Z5 p) V: d1 D- v' Y7 m" |
  63.         // Place all significant initialization in InitInstance
    9 Y! B$ B! O, x
  64.   EndChangeData();
    1 R( Q. l. d% d# x3 x2 {$ f
  65. }$ b; \* \) H. W- Y/ k$ b6 x1 l
  66. ( _- H5 b; \! v2 e  F9 \1 \. B
  67. /////////////////////////////////////////////////////////////////////////////
    ( z! g: C" _# J! t
  68. // The one and only CRevAppApp object
    & V( v+ ]+ r1 W, I# r

  69. 1 H1 Q4 o2 W3 i& L; l
  70. CRevAppApp theApp;
      N, o0 m5 q6 G3 ~5 A0 [/ V# k
  71. / B# q1 k2 X! S6 n" C  @* p. E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)' L$ D! @; i( J- V( @
  73. {
    ) Q6 s" D" v, y' K& v6 c9 A
  74.   int iEOF=0;
      o( H1 g4 |. Y1 f  s7 c
  75.   char szTempName[MAX_PATH];- Y) z; t3 x5 B5 t0 ]' \6 g' E
  76.   *szFileName=0;
    . h# @! T0 v( _: h
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 q0 c( f1 K% O- r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')+ k0 \/ g/ e, D. c
  79.   {: B$ s; F& g6 O" d: K- r( @
  80.     strcpy(szFileName,&szTempName[1]);% r! w$ U) ~( Z: q3 ?
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)6 N7 h  k2 L* ~4 Z, m9 `
  82.     {5 Y9 n7 r% c, Q4 j$ P
  83.       iEOF=fscanf(fp,"%s",szTempName);
    - E9 l& |& }5 i$ q
  84.       strcat(szFileName," ");
    7 D3 ^' M! N- V
  85.       strcat(szFileName,szTempName);
      {, ?! V+ _' h: D3 Q$ T$ d
  86.     }
    8 T$ |3 L" K2 a  {6 x
  87.     if(strlen(szFileName)>=1)+ T9 ~2 T' ?0 w# k
  88.     {; r6 B) w/ E! H( g) Y  ?$ v9 m+ T* S
  89.       szFileName[strlen(szFileName)-1]=0;
    2 w8 J, E- [* a6 Y' r5 b. G) b
  90.     }1 v7 U% E( U- @9 M9 V% y" I$ ?
  91.   }; Z8 ~1 }% R/ ~9 v& }1 J& D" m
  92.   return szFileName;
    ! R5 O$ W  z# E8 G* p( c" ?
  93. }2 S; d( y4 r- N7 R: [8 o7 ?
  94. 9 b$ d  M1 O8 F
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), [& g' h4 o$ d& {0 H: O
  96. {
    3 U1 y5 h7 {+ O' }0 n1 M% H
  97.   FILE *fp;. F& F: ^% e' b! B- r7 \* I; K, V
  98.   char *key=NULL;) e- y4 K5 p6 ^6 y1 o" ~
  99.   char version[MAX_PATH];
    ( V% x7 ^: g: g3 H' Z4 ^) L
  100.   LPUPDATEFILE file,olds;
    - ?6 N: J. K8 i% R
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ `6 Z' r+ Z9 r& [

  102. 6 L  J" e+ ]# P8 L
  103.   UpdateList.clear();
    8 l5 k5 H' ^3 T5 b
  104.   UpdateFile.clear();
    3 f5 U2 Z9 P$ }' t: a, N: K4 U& L- o
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 B) W: s) J1 e4 s
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ; z) t* ^% f3 ?, _1 D/ ~5 d
  107.   fscanf(fp,"%s",version);
    ! j# h7 \% m; b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- o' @/ w. p1 k/ g4 S: v
  109.   while(fscanf(fp,"%s",version)!=EOF). ~8 S% u' M* e! H* G
  110.   {
    # F& C1 a0 x. q; t2 ~
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ w' H* t1 |! T! I
  112.     fscanf(fp,"%s",file->path);( v' q) w$ N- N/ U3 I; g
  113.     ReadFileNames(fp,file->file);
    1 s& Y; C: O$ D8 t6 j: ^7 l" g
  114.     strcpy(file->full,".");; a! C/ D6 S. O5 j; s. P6 Y) i0 L
  115.     strcat(file->full,file->path);, K; E% B# }' v# ?9 y) G8 [' d
  116.     strcat(file->full,file->file);
    4 e& v" I2 z! @
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ; K& V5 T& ]. {& M6 J
  118.     {8 x6 N" R- _& p5 N+ V" e
  119.       file->vers=(float)atof(version);
    , W& j4 \3 T9 y
  120.       UpdateList.push_back(file->full);
    . Z& l4 C$ }" `, f9 Z, D, `3 @
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ; Q) L8 T* L# o7 W2 R4 _
  122.     }8 ?4 i% N4 j8 @0 `' `
  123.     else
    * f  ~9 n! [/ O0 h+ |9 N: V! ^) |# B
  124.     {
    / R' I* Z2 o% u
  125.       olds=(*p).second;
    + l2 i; X5 A, L% n" L# y
  126.       if(olds->vers<(float)atof(version))
    2 B3 E' }& g, K  y! _
  127.       {
    1 \( K* d, z' ?
  128.         olds->vers=(float)atof(version);+ s" b7 S2 r  F( F# q; d; R
  129.       }/ V& Y9 O+ G# s# F
  130.       free(file);
    # j4 Y* ]" l9 }4 }6 g+ }  V$ `
  131.     }
    ; o' V# Q  @4 w+ X: l; [
  132.   }
    - u2 j9 w& f# A% @( Q; Q* h
  133.   fclose(fp);
    6 k8 n% L, ?+ G8 p
  134.   return true;
    4 j. j/ P# H8 h# c
  135. }
    - O  P( e! T7 t0 }3 \/ q

  136. 4 ~1 [* Q5 M1 Z9 G" j1 r
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). P5 v1 F* G& F  C0 v% L
  138. {( ?; D; s8 `8 s  Q: g( R
  139.   TCHAR  szFull[MAX_PATH];
    3 Y# m8 q, W/ A! i  f, j9 {
  140.   TCHAR *token,*inter;. d8 f3 c: m$ E
  141.   *szPath=0;# s$ M7 u2 i8 p& b- e! x& a  S7 z
  142.   strcpy(szFull,szFullPath);
    5 S  O4 \* v. t4 F4 w; k" e* |
  143.   token=strtok(szFull,"\\/");
    ' ^# {! \# C- U3 w/ y9 X2 L: C
  144.   inter=token;2 W6 R" [6 J2 j5 {6 U. c4 }5 p
  145.   while(token=strtok(NULL,"\\/"))1 Y! \4 G6 f& }$ Y+ L
  146.   {4 a) }  A$ E. o' G; t$ I
  147.     strcat(szPath,inter);2 V& K; U, Z* {9 F3 x
  148.     strcat(szPath,"\");
    4 U8 f4 `: _( d
  149.     inter=token;
    : W2 s) [1 j# w0 A& R% u
  150.   }8 ?$ p1 l9 h# y+ f" U$ l( v
  151.   return strlen(szPath);3 K. J9 U9 I, J# U* i) C$ W" E7 k
  152. }# ]3 _7 D+ y0 X
  153. 1 X" I7 z" Y( Y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 u7 S. U7 Q* j. x6 ?
  155. {# N3 f- D, t, G" j
  156.   DWORD attrib=GetFileAttributes(Target);
    8 L+ ?1 l1 w5 i; m, \% v" w" m
  157.   if(attrib!=-1)6 r" L0 O/ ?; E+ g  @6 d
  158.   {
    9 w  P" x/ ]: l" X; ^
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ) r* e/ u- ~+ J8 |
  160.     {& M: [2 k0 P$ B
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; V! \2 K) N+ t5 J1 y
  162.       SetFileAttributes(Target,attrib);
    & U2 u4 d" [3 E! F+ ~
  163.     }
    + ~  f5 _/ r8 _1 `" S
  164.   }
    0 c8 V% I: X7 _% b$ W# f5 h5 G
  165.   CopyFile(Source,Target,Erase);, U4 I3 R6 j' w! Q7 C2 P
  166. }0 m( J  v+ g5 R# }
  167. - a' z+ v# @- z5 g' V
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    0 D  G) _: t# z" {+ v
  169. {
    / K. X# c8 D) ?+ z4 Q5 ?9 d
  170.      FILE *fp;
    + B$ T* i1 c( e- ~" B
  171.      char  szBuffer[8192];/ R- q1 Z/ G2 {  C. i1 H2 }
  172.   va_list  argptr;
    3 o  y# i* n2 J7 a- {: f

  173. ; [  I: y: c' J+ y  j: t! a$ V
  174.         va_start(argptr,message);$ t& O7 z2 Q7 Y  t& O' {$ w, ]
  175.         vsprintf(szBuffer,message,argptr);! V* n2 z1 ]8 Z" ?
  176.         va_end(argptr);
    , J+ K8 i% s. r' ?" E
  177.   fp=fopen(FileName,"a");
    $ I% z6 ^0 {. N1 Z7 k
  178.   if(fp)! z) A  B' [2 o8 j8 |
  179.   {! N  e( T" f* ?+ o- O/ f$ P: o6 k
  180.     fprintf(fp,szBuffer);
    , V. p3 Q9 O0 C6 @6 U
  181.     fclose(fp);
    / ~# ^# c* A: u; [
  182.           _flushall();1 n& ]+ n4 V8 N, y
  183.   }
    ) Y$ C, M0 b# ?6 Z9 i! ?! V( O
  184. }
    6 A6 {4 K6 p% B
  185. : {! C6 e% z& F' A4 P9 B% y
  186. BOOL CRevAppApp::Fclearf(char *FileName)$ v) M$ y' ?; O  B% }
  187. {
    / R3 l5 O; A- \$ l1 V
  188.      FILE *fp;
    . Z1 v8 t5 H: ^8 P! G
  189.     DWORD  attrib;) m9 ~9 X6 n: {" Z1 F# ?
  190.   attrib=GetFileAttributes(FileName);3 g5 `1 C7 W1 @0 x$ t
  191.   if(attrib!=-1)' R9 }& i* ?& V( W& A. k! n
  192.   {
    ! M$ o7 b4 n  E- x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ J! y* Y" u1 Q8 G8 H0 j. p% B4 }
  194.     if(!SetFileAttributes(FileName,attrib))
    * T2 N  u1 X5 [+ p$ c. @" _- ?4 e
  195.     {/ N  {6 l5 P+ q5 f9 O
  196.       return FALSE;
    . F1 B& u' o+ c6 r! ]
  197.     }
    6 e+ o2 ^( n  `/ _. g
  198.   }
    4 f( i. Y5 [& }: S- L+ K
  199.   fp=fopen(FileName,"wb");
    ' G+ e6 n, G/ [1 t0 h. ^: _
  200.   if(fp)( P( x7 N1 m- G: W$ U
  201.   {3 J  _8 i, ~% e6 B" `
  202.     fclose(fp);
    , [* c) U( ?1 X& C( Q
  203.   }$ V& c' P5 T" `& D9 w9 Q1 z
  204.   return TRUE;! R0 U- t' p" R$ {8 x( b0 X
  205. }, C, _7 }3 T- u: v; Q( d
  206. ) O: R9 J& y0 b
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 Z3 s( n! Q( R9 W5 ^
  208. {! R* ~0 R1 r$ I5 l
  209.   char filename[MAX_PATH];
    - ~$ ~  E, G7 m* B/ P
  210.   LPUPDATEFILE file,olds;
    - S! ?" e$ _  n. n4 z# T5 r
  211.   std::map<int,CString>::iterator i;
    4 `8 k0 x4 E& D# P1 ]( K+ }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;: M$ b1 L; ?+ z( m7 w
  213.   std::list<CString>::iterator l;. ?$ l8 i' o* l
  214.   l; \% S  Q5 ^: b! }
  215.   if(bFirstUpdate)5 G( I) g8 F9 S8 W' |" T2 R4 P
  216.   {% M: e7 M$ N9 F+ r1 q
  217.     dwCurrFile=0;
    # e# I$ u8 n, p
  218.     bFirstUpdate=FALSE;! w$ V. B1 N& h" X; Q0 ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())" q* `) D# }# D0 V5 U
  220.     {
    ' L- U8 q4 y# }9 ~7 c
  221.       dwTotalFiles=UpdateLocal.size();' `+ ^$ s7 C; ?3 N( E
  222.       dwDownLoaded=0;) [5 `; A9 L  T# p& [. s  L
  223.       bSilentStep=FALSE;% G/ f  ^: r& Q* w; g
  224.       bCompressed=TRUE;
    , l! A% }* d% Z+ p& B7 @
  225.       strExtLocal.Empty();/ {! D- Z6 F1 f
  226.       strFullName=(*i).second;3 N( S% q' Y1 y) x' l
  227.       dwProgramState=AP_CONNECT;: q) w5 J! R" A" F! k) V
  228.       return TRUE;
    3 i8 s3 s  W9 `; s
  229.     }
    : @/ U* q; G  n( o" \; X- a% g) a
  230.   }. M3 T- f* ^3 B3 K" w' K8 d) M9 N
  231.   else if(bRestartUpdater==FALSE); Q3 N- {/ [  y5 f/ i3 H
  232.   {  J# X, S9 E4 c2 C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    + p7 f: \* A# O$ w2 X# O
  234.     {8 h9 \0 m) T5 X
  235.       file=(*p).second;
    + V) H0 L" o: m, @- ^$ R( [& U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    4 G; s6 j' z8 N' f  n
  237.       {* a& L, S) v! Z, c5 e
  238.         olds=(*p).second;& b9 d+ ^) Y1 q0 _) @9 j9 C
  239.         olds->vers=file->vers;# V- |% O  B& g" }; z
  240.       }# T0 G* O, u9 F6 G; T* a; L
  241.       else, G6 O- ]# V5 x) ~
  242.       {& A" W- M! K; K' d1 b
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));9 b$ u' m% C- W2 ?) l, G
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) d$ S9 @9 u. o0 z6 d& r
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    / _  F4 `7 x+ c% j* t: J
  246.       }
    5 ~' O2 |! R  }# A
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    : b) _. ]; _6 X% W  c
  248.       sprintf(filename,"(%s)",file->file);
    ! W3 \. f5 b7 I+ \" R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - b, Q- E* I7 `0 f  j7 W; f* i# j9 U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }3 v. K, R5 R+ P7 c! s
  251.     }
    ! X; A, B4 _9 n( P4 }& N$ Q
  252.     dwCurrFile++;; }6 t% p" ~  j  C3 b
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    # c1 `5 R$ L! u/ ^# [8 V4 G4 _
  254.     {/ ?2 U7 E$ [3 ^
  255.       bSilentStep=FALSE;9 _: v5 }* f4 ]+ w) {
  256.       bCompressed=TRUE;5 g/ v9 H- {6 Y* t
  257.       strExtLocal.Empty();
    7 j$ B# l9 b3 ~" s2 U4 a
  258.       strFullName=(*i).second;- H7 A, m4 @: N1 b# @% Z% X
  259.       dwProgramState=AP_CONNECT;1 \, t- \* I; V' E5 n* i9 U/ }
  260.       return TRUE;
    6 c1 k) B' ~$ l9 z9 z- Q. N; X
  261.     }7 f* s: X8 O- n, ?; A1 J, h
  262.     if(!bRestartUpdater)
    & h3 |, B" l2 W/ ?$ r/ \, x
  263.     {
    / @* @- G& B! U5 N5 p2 k
  264.       int iCurrSize,iFileSize;9 B4 [& L6 g+ X6 X+ k' G
  265.       iCurrSize=0;
    % C+ X, P8 h+ F$ N, Y; ~. ?) ~
  266.       iFileSize=UpdateList2.size();
    ! U5 {7 _- p0 `9 @( Y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");  \4 K- p2 E. d8 H( K
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");- Q! G4 [# _0 I- J9 a
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ; Y; _6 O# i5 o
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % \. {8 y. q7 s6 B7 }
  271.       Fclearf(".\\update.dat");
    + h7 [7 T2 s, m. N4 e
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    9 u& F1 W. M5 U6 j
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    3 m) A2 G8 ~/ I1 k' X" w
  274.       {. @, \7 c8 F" g2 I
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 r3 C. X% T0 j7 I/ z; k9 V
  276.         {$ C2 J7 @1 ]6 {* y6 w+ ~
  277.           file=(*p).second;$ t5 E  `7 {& _* {0 r
  278.           sprintf(filename,"(%s)",file->file);/ \& }4 I9 w  u9 R
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% w+ k) G! {2 O* E. t
  280.           iCurrSize++;
    ; q8 s% d7 z% j4 s
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" W# Q8 v6 H" u3 T6 V0 d) i* r# x
  282.         }
    * f& p* N! r3 d9 M# U" ?) T
  283.       }
    3 R/ P$ N7 ~+ C& I" k: c2 i9 J
  284.       unlink(".\\update.txt");. L- D9 x* D+ D2 k2 u' g3 i
  285.       unlink(".\\update.tmp");$ M8 T! w2 y3 _2 l& T: G' F
  286.       Fclearf(".\\checkversion.dat");% k# z) x% `& ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ T7 L8 c; }; h
  288.       if(UpdateLocal.size())" ?! ~/ a, F- {  I
  289.       {
    + ]. y# u: e% F6 K/ `7 B
  290.         UpdateLocal.clear();4 ?% q, e( l! N* b1 W$ m6 S
  291.       }! O- \1 J+ X" c- H8 P) e2 C( s
  292.       if(UpdateFile3.size())' q  z! V. [7 r, b6 @) e# N" j1 ^
  293.       {
    0 Q9 t! V/ q3 V  c/ Z" p! H9 n5 C: u
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); T5 ^7 r& N" y6 n
  295.         {- ]7 E& I3 q7 Z
  296.           file=(*p).second;$ D  @/ R+ P  I  q/ U  `- x
  297.           free(file);
    3 c1 r( U- z8 \# r: ^
  298.         }
    7 z0 I; E+ Y1 p: b
  299.         UpdateFile3.clear();
    % J, a2 w7 L" s3 Z9 w+ _/ C" A
  300.         UpdateList3.clear();
    / O! G! O7 {% ^/ x6 l* \' {: Z
  301.       }- ~- w) [( b6 g7 }6 S, z
  302.       if(UpdateFile2.size())
    . |7 K+ @# l* P) X: G
  303.       {7 h& P9 m  \* D- W, {2 j
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : i9 o" n* J# _! N4 I  y
  305.         {% O3 |% P3 o% d9 m; ]) l6 o
  306.           file=(*p).second;
    ( o: Y. z* c/ H, l" i
  307.           free(file);' P; a% W6 Q% i; W7 D) j* W
  308.         }
    ! A  m* y+ W! {4 M" V/ z
  309.         UpdateFile2.clear();( X. G# D' m9 E! C) Q& ?
  310.         UpdateList2.clear();
    # W( j# C4 W" `/ h0 `) r$ |6 F( S" S# K
  311.       }/ R/ @5 _4 p+ Z1 \" k. t$ c' O
  312.       if(UpdateFile1.size())
    7 t3 l+ r' t# Y/ u
  313.       {
    * J* h& l8 I9 M
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    , F0 U6 P2 P+ ]5 V
  315.         {& V6 [* s$ \# b
  316.           file=(*p).second;
    ) L& g3 G! |, A: j3 A3 A3 b! d
  317.           free(file);
    & g& T% [: S  g% ^
  318.         }  o% O. S3 ~& v- o- x
  319.         UpdateFile1.clear();
    # i/ B4 Q: [, P$ N) C% f8 |
  320.         UpdateList1.clear();* E& ]. l' P+ F$ o8 C
  321.       }1 r) E' W: v$ Y' H  ]. X
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. j% a: n" v/ L% K! K. C4 \, I
  323.     }: ?/ t0 I9 R& l
  324.   }$ g' R! e. q/ T, H$ @; c6 y/ H
  325.   return FALSE;' h2 E/ Q% l& H3 H; X+ t
  326. }
    ( G0 G1 j3 H! z/ p; z* G; l

  327. . E0 n+ K* C" N. p; K
  328. void CRevAppApp::ClearAll(void)4 [  S( }% W. N4 G+ f
  329. {
    $ r* a* U- X1 D  K  q$ Y
  330.   LPUPDATEFILE file;/ N* D3 W* H; I& i- p+ Y& A. x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 l" C: i6 ?: r2 V) n" l) W
  332. # n3 [4 y+ v) V( R" o
  333.   if(UpdateLocal.size())4 U- U2 z( Z3 z+ G8 a3 ]! @+ C
  334.   {5 F% C" p# B9 P$ a! k- Q6 U0 a
  335.     UpdateLocal.clear();
    : U7 p+ A, ?2 p
  336.   }+ a2 Q  ~; Q1 c( R3 }
  337.   if(UpdateFile3.size())) w' B' q; S3 E" X& J
  338.   {3 n" _% z* e. A' r. j; o- K$ A7 S$ t
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    8 k+ D# S* d) o( U2 E$ {% v
  340.     {
    7 _* n- u( S, e6 J4 W8 d
  341.       file=(*p).second;
    6 z1 A8 u: F# A% }, j" w
  342.       free(file);6 b4 o9 d0 l6 d
  343.     }
    . B0 W' n" ~" h" @
  344.     UpdateFile3.clear();  i3 Y3 l$ W. i3 H" g8 c2 v
  345.     UpdateList3.clear();
    9 C& }5 r' H, u8 o3 n0 Z
  346.   }3 g" \( ?6 w2 G
  347.   if(UpdateFile2.size())  n8 }6 w- \# q
  348.   {
    & @6 f3 Y3 p, L. d* B3 ?
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)3 `; p0 a( @7 P4 M; v; b
  350.     {6 w7 g$ z2 ]( J, w# T) D
  351.       file=(*p).second;! F. l; R7 u& h' [! H: o& v$ M. v0 N: P# p
  352.       free(file);% g+ T; x/ |4 Q$ l5 I- S2 g
  353.     }5 S( {7 j" c: u5 [
  354.     UpdateFile2.clear();% b1 U. u( K- f0 n6 o6 m3 L
  355.     UpdateList2.clear();8 i) w( y% Q# W* v6 {# x
  356.   }
    7 ]2 |0 P; T( Q
  357.   if(UpdateFile1.size()). z' n, P9 `1 Y- A/ K$ y1 ?
  358.   {& B8 j& H) B1 ~0 H! I# L7 n
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)8 m) P# S+ x7 w, @1 [5 H
  360.     {
    , r: {+ ?7 N  `0 _3 J2 L3 ~# N
  361.       file=(*p).second;& h; L* x# C3 x' S! o7 N
  362.       free(file);
    0 g0 T6 e4 k* M" k
  363.     }
    . G2 h8 G) {( D8 E5 ^
  364.     UpdateFile1.clear();
    " X4 O, O7 W) P6 E, X
  365.     UpdateList1.clear();
    & E0 f- _% ^8 d8 _+ [# R
  366.   }9 H/ Y! l5 b6 p
  367. }  
    , e/ |& w% d3 O1 L3 e2 o
  368.   $ u0 v) I0 a/ s. [& ^
  369. BOOL CRevAppApp::CheckLocalVersion(void)- Z; N  F& W% Z9 x& v: a% f
  370. {6 w  d3 u/ }  p8 {, ]
  371.   int c;
    ' V& b) @) t( Y6 h- N
  372.   LPUPDATEFILE file1,file2;
    9 X8 P& K* K  O; _
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 p- Z# o/ i' s. ?- y1 h8 e
  374.   std::list<CString>::iterator l;" P9 F. _1 _0 q% P& H0 t; @" w
  375. $ W4 ^8 a$ }. Y! \. t; b
  376.   UpdateLocal.clear();
    ( V% k% o& z3 O' L/ f/ v# u
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);# v$ n( L+ Z$ h0 P$ L& s8 t
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    / g/ }' h3 t$ E! J: n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 D: r. i  y0 M+ j/ h
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " _; y) b/ i) j9 ?3 V
  381.   if(UpdateFile3.size())4 N* j/ f  P5 a7 U
  382.   {/ q- c/ S& i3 l) Y" m
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
      u1 O: @% R. b$ u" m( ]* U
  384.     {
    8 h. S1 {2 {- P0 M0 E  D5 {
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ ]3 ^$ n* u1 Z3 v. M1 e
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ y: Y5 z! ]9 C" G" V
  387.       {
    + w7 g6 P3 L5 n8 E/ P8 p
  388.         file1=(LPUPDATEFILE)(*p).second;
    , I4 s' v6 M3 A1 z
  389.         file1->vers=file2->vers;& a! H/ g# Z( k" W$ N0 [
  390.       }. K5 {0 [( o- m0 Z( u$ a# M: |5 J
  391.       else
    - f; g4 X# ]) Q  s0 o
  392.       {* p. A. g* \/ D6 d
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    2 K" R# I! q4 h+ f" e
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  b7 B" `! {$ K2 j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));0 L) Y0 q7 B- X! L
  396.       }
    ; e, H: A& A* j. C. K4 H& f% k% t
  397.     }
    & b( b7 @7 X% T& d# E! c4 j
  398.   }: k' A* v1 y& e! A3 q# y* ^
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 x: L& M& n- k8 B- f
  400.   {$ G1 c0 E3 O3 ?* u5 j
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())' g* i; `3 S5 D8 _" B$ P
  402.     {3 {. c2 t3 r8 i' ^
  403.       file2=(LPUPDATEFILE)(*i).second;
    . ~7 Y& Y( Q- ?+ b9 x7 ?
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())7 `5 j/ o5 R5 [
  405.       {
    " _: E+ u0 C* ?' |
  406.         file1=(LPUPDATEFILE)(*p).second;
    - T' s6 e8 x8 ?8 R- o5 A$ d; b9 ^
  407.         if(file1->vers!=file2->vers)$ [% L5 _$ c$ b
  408.         {
    / e. q: @. A; m6 f
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));4 C( v( o: l4 x* a
  410.           c++;% r" p: M# |/ N7 ?
  411.         }# i9 t! z! J* N& v+ {# F, K! k* X6 P
  412.       }2 q* j" }& J/ c4 a
  413.       else
    - K8 e; R) t4 c0 W
  414.       {
      X( N$ p3 g1 m6 S2 f1 F2 g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    5 s$ G6 M9 [/ |6 Q0 `3 o. T9 E
  416.         c++;
    , D7 P( t, N" |; {
  417.       }
    : W9 j0 E! I; k# o' U" a9 }
  418.     }  I. [; ^5 v8 b8 |  P  p$ ~, O6 z
  419.   }
    ; k1 x6 i# D; l
  420.   unlink(".\\DownLoad\\update.txt");$ l4 S. e; f) }: W4 H+ j
  421.   if(UpdateLocal.size()) return TRUE;" C. b5 i) ]# T+ m+ _. k
  422.   else                   return FALSE;- {3 G3 R3 [4 V( z; c6 T) }
  423. }
    " ]) U3 R% Q$ p  N: ^3 S. h3 a
  424. 6 i- ?0 f  d: M; w) O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ( x$ L$ a% W) R+ L: ~. @* m
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    - H* o9 O/ _9 B- T. ~* T
  427. 7 X* a, P+ A* w% ?/ N8 g, i7 _
  428. # G. ?- ]. ~  L5 g. Y9 n4 Z9 v% `

  429. 2 t1 n/ G! h) y% [6 g( d
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  h3 f6 D; i& C$ ]
  431. {
    6 @0 ~( ]# T9 p) y# k$ {' V5 Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    * n" j. Z4 ?/ H+ y
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): D5 x7 M0 f. h4 p# q  u
  434.   {
    ) X* k4 f% n' {# ?8 w
  435.     char szLanguage[50];0 G9 O" r/ d1 w! D/ {! G1 b8 T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 b' Q7 }) s7 k% w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 O0 _  V! I2 y3 d: l: {6 o
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 ~. B* A& b  r' T% T# `; i
  439.     else                                   m_iLanguage=ENGLISH;- d1 }- G! H! a2 Z, Y8 F& w! E
  440.     char szRegister[100];' F# c$ G. y) l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");/ M* U3 l* w& y5 w0 F+ U+ H
  442.     strRegsName=szRegister;
    - V6 p  I7 a; J+ l/ j% O2 t
  443.     char szPatchURL[100];! X6 ]9 R( T# N  w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 o: d' u" w* J# `7 x, w
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);* S4 G4 Y# L& h% g+ U. l
  446.   }
    $ D: U9 p1 H( m: t
  447.   else: U5 T$ Y* H/ e  O1 Z0 O
  448.   {  j$ ]3 y: }& U% H2 V, s, V, N
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    + w7 z; _$ H8 M6 _' G
  450.     strRegsName=DEFAULT_REG_URL;& @9 J4 M2 g, p
  451.   }
    & Z/ n( j) g/ R( [, a& n) q2 F
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    0 T. I! K0 I$ [/ Q$ K
  453.   {; C0 o3 c/ `  X! X+ s' s1 D) Q
  454.     char szIP[50];
    ' i/ ^: g; [, U" j$ w  Z
  455.     char szDIR[300];
    3 E/ H( w. K) Z+ @+ ~" K# V6 @
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    : d0 E6 `5 d1 e! [( @- T
  457.     {
    6 R& x3 a! I' ^) ?, \' u- [! o
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");2 E/ `. }* v2 n8 l/ ~7 x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");8 l5 ?+ U. J; u
  460.       strHostName=szIP;
    $ c/ ?, h( Y0 S  m: W8 X1 G1 K
  461.       strHostPath.Format("/%s",szDIR);
    1 A; w- {1 G( r* A1 L6 t
  462.     }
    $ b7 L0 C- g4 [6 q/ Q5 A  N8 x
  463.     else- c: D, X5 [% [! X( C, @
  464.     {
      u' w/ d+ }+ f# M* A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ( v5 a3 Y" O$ a; h1 l
  466.       {
      M/ J& |# u( U1 i: w
  467.         char szLanguage[50];
    " Z+ X4 k3 b0 u% S& r& P0 J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 n' c' J, w3 }+ I' k
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : K! t0 t5 N  y+ G( k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ A) g- j: r  O" D' W5 ^( g- B, ^# w
  471.         else                                   m_iLanguage=ENGLISH;
    2 C) u4 {# c- g6 Z
  472.         char szRegister[100];# b8 f" J2 G! ~* G7 z' t
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : `. j- ]) {- b9 a: B4 L; x
  474.         strRegsName=szRegister;
    4 Y* }( Q3 P7 c, ^9 L7 Y5 G
  475.         char szPatchURL[100];) W6 I0 j% p' H$ O$ \) a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");! v1 P( a' q9 B5 C% R
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 E, B0 z" X/ D: p8 q1 f
  478.       }
    ( \8 Z+ T# c* C: ~- u) s& }
  479.       else; T# r6 t4 I9 ^9 S
  480.       {
    & x+ G2 K9 y$ ?. _$ N$ ^
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 A& i: d. S  _. {
  482.         strRegsName=DEFAULT_REG_URL;7 X% Y5 N5 W/ @! y
  483.       }! l, k# X) w: }5 [! m- @
  484.     }8 X, U( }, |2 n! s/ L7 ]
  485.   }
    ! I& n# _3 V6 @6 I
  486.   return true;1 _7 Y6 F# \. X+ p) b
  487. }+ S0 I, d$ D) S( P- Y) u

  488. 0 }6 D2 c; N+ @
  489. #include ".\ZLib\unzip.h"( n  w# X7 \4 ?* Z# s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    0 W; j4 A- \* u( u$ A, i; }
  491. /////////////////////////////////////////////////////////////////////////////# S. _! @' c  H, I. y
  492. // CRevAppApp initialization
    6 H- O( y3 ~" N! U5 K
  493. ) W4 Q: W0 d( ?2 y) O4 @; w
  494. BOOL CRevAppApp::InitInstance()0 U% {3 A: U+ c# Q6 P9 i( @# D
  495. {
    / ^- _- |, K2 I' B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    & s$ {- J# o* j4 @* M2 B

  497. 4 F, l$ d# u* t' S' j- w4 Q1 l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    " ~$ D8 g, s2 g' R4 m
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    . U9 V+ h$ p  d* [! X
  500.   {/ f- ]3 y1 D8 [7 ~( {5 |4 l/ E
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 p( ]- D# C" l& V
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    - J5 H2 ?% a$ `
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))5 y& ^- e) i5 T+ n6 S
  504.     {
    4 R! F: D; `( v- S" V( R2 c! t- `7 o
  505.       strcpy(szPath,szPathTarget);4 r& J; D" r( y7 S" X
  506.       SetCurrentDirectory(szPath);
    # a& n% R) m, X
  507.     }2 |5 n( H2 m5 q8 d1 |* v0 Z! _  l
  508.   }
    3 Y( w+ ^0 c( B. f! N$ b
  509. #ifdef _DEBUG# e: l+ W" M- }) N/ H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) |" X: Z7 l! ^9 B* l
  511. #else
    / f* E( }( @- K- W, p5 B/ t. r
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" Z! J0 N9 ^- `7 E3 i0 H- Y4 t( Z
  513. #endif! ?/ m) [4 r4 P7 M# ?
  514.   {- q" g  G4 V, [3 X1 o+ r
  515.     char tempFileName[MAX_PATH];4 ^/ {4 n* j: V; ?+ u
  516.     strcpy(tempFileName,szPathSource);) w2 r5 V5 |8 k/ h1 D2 E
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # D" A- ]5 |7 Y* b& w3 W/ g* y7 Z
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- l- x% {8 w' C+ Q2 U) H6 \" {+ x
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) |$ W/ X2 k3 {0 ]: e& @/ @' }
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    7 ?) W2 a7 T& D: @4 X: f# }* r
  521.     return TRUE;
    9 z/ v7 ]5 `, o
  522.   }5 p9 A- r+ F5 Q
  523.   // Nuke 0118: Delete run.exe3 x5 j5 n  J; b) t( ]& P9 Y3 ~
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  N9 k; r% W6 I- ^. t. g
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    0 v& N2 j5 s7 I; m1 m/ [
  526.   if(!ReadCfgFile("Config.ini"))6 w) {& p$ k/ B) H/ I
  527.   {7 R4 K- ?0 T8 i* H
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);$ n% x# N, N. h( @
  529.     return TRUE;+ f% N8 ~! T) }) C/ K0 B' _% W& {
  530.   }* {2 i/ h, |. g! p. S
  531.   HANDLE mutex;% \, C0 Q+ e3 k3 A$ f
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , C; ]/ `6 ?( I
  533.   {
    # R& k) S( ?& f$ @# Q
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" M" z+ D3 M3 s5 g  Y& N4 x
  535.     {
    ( d+ f7 [2 b3 w
  536.       CloseHandle(mutex);
    . @/ `4 U7 [' V1 p
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    4 X  d9 G% K' Z( u
  538.       return TRUE;
    ) ]5 l3 I) A; g
  539.     }
    ; C5 i$ d7 D. ^5 u! F
  540.   }  # _" j* E7 L& }- Q$ u5 D; h
  541.   CloseHandle(mutex);2 [  m5 [0 X7 ~7 u& m: t. a- D. F% S

  542. - n& K' M2 K# r0 W! ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; @# D9 I9 u2 J* s
  544.   O# q/ f3 p- X- l4 A5 J$ B/ y8 W% c; K3 a
  545.         AfxEnableControlContainer();
    ) [4 \2 f1 A5 C! W

  546. - X! u5 y! g$ x7 V; ~$ G% ~( G
  547.   bCanUpdate=FALSE;
    : Y; k# M+ |/ N3 \0 w  l7 @6 [
  548.   dwStartUpSteps=1;3 b" D9 z  ~, a) x' W9 i
  549.   dwProgramState=AP_NOTHING;
    7 _0 i. R4 \* S. \( u& s% t

  550. ' p  D) n5 ]- B2 B2 g5 V
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 F: Z5 ^( B8 b- c5 F7 d' K5 j. T

  552. + s5 M) Z/ [9 G& A
  553.         // Standard initialization
    . z& A( d' d6 b3 B
  554.         // If you are not using these features and wish to reduce the size! N1 d3 ]3 c2 i3 t1 l( \0 w% q
  555.         //  of your final executable, you should remove from the following! L/ w. i2 N% L6 m) I
  556.         //  the specific initialization routines you do not need.
    7 U$ u' v+ T* l. ?& u) O% F

  557. * G- ?( y) I! Y" v1 M! @  A
  558. #ifdef _AFXDLL
    7 ^6 H3 H0 H# }0 E  q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL3 }6 ]3 L. Z" O% Z4 `
  560. #else
    / R& P4 T: ]1 C- n7 f
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    . m& i4 @% |9 i. S
  562. #endif
    $ M: Z! V$ A& J  g$ `
  563. ; S9 D2 E9 T/ D' Q3 m5 e
  564.   dlg=new CRevAppDlg;( ]* g+ @7 z% }, a
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    5 g3 v+ {/ v4 g. r% ]. a7 P2 _8 _
  566.   dlg->ShowWindow(SW_SHOWNORMAL);0 y9 I4 P6 g- n& t4 O% }3 X9 O9 @$ B
  567.   m_pMainWnd=dlg;% s! S: M- y$ A9 z; T+ \; P
  568. ( R+ G, }  k( V7 S+ `
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 L% H3 f' @: y, i4 q" e8 t0 y& y) t

  570. & M0 b, J& R! ^- f2 k8 F
  571. //  GdiplusStartupInput gdiplusStartupInput;1 T. Y+ B# E/ E# C' c2 @+ R7 Y
  572. //  ULONG_PTR gdiplusToken;
    & @, R/ l# w4 Y% ?1 V1 w7 }- }3 u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& s4 x9 g! V) \! I
  574. ( c9 N' c* ^! M; \! i0 w+ ^
  575. //        CRevAppDlg dlg;
    ! Z9 J3 O- P1 |
  576. //        int nResponse = dlg.DoModal();$ o( Y% t% Y! ]
  577. //        if (nResponse == IDOK)
    # C: v2 m! _: B& d- D+ G
  578. //        {
    ( G. E! H3 L5 Z# J6 X
  579. //                // TODO: Place code here to handle when the dialog is3 w* F/ Z9 v9 n/ @
  580. //                //  dismissed with OK
    ! C  w' g" i. a% f, N
  581. //        }! d( q5 X- }+ z9 q; m- C( {
  582. //        else if (nResponse == IDCANCEL)5 n! }4 }! M8 @
  583. //        {; P  t% ~: o/ i9 Q; c8 y/ b
  584. //                // TODO: Place code here to handle when the dialog is9 ]% m4 \# `3 e: B
  585. //                //  dismissed with Cancel
    $ c: Q# \- ]8 R3 _- W& |6 I( X
  586. //        }5 H4 C, V  @+ C/ b6 q5 M2 c) m
  587. : Y1 L# p3 D0 c5 a
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    9 u' A3 v! ?8 d2 O
  589.         //  application, rather than start the application's message pump.0 ^, g, Q% G7 N9 }& n& V$ y( v- r
  590.         return TRUE;
    # D1 D+ ?2 }# n2 {2 X4 y" K% J3 D6 e
  591. }0 R" f3 H! H9 J$ ~

  592. ! D! n; U) @! {- y* X7 u
  593. char *CRevAppApp::strtok3(char *pSource,char *token)8 {$ M$ M- e% o+ Z& S9 H2 n
  594. {
    + W8 [4 m& ~5 q" ]3 I- [: w
  595.   int i;
    # {5 E, U7 A7 N' x8 w3 @" C
  596.   char *szRet;% D1 g9 p3 M+ H2 |/ P; V% T3 I
  597.   n: z2 z" M! C( x3 P
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    : u7 K+ X4 d+ a" E# w
  599.   if(sztoken)' c% v9 J5 U" F
  600.   {
    " ]" z; \1 e& g$ l5 a1 ], ?. p: {
  601.     szRet=&sztoken[itoken];1 c8 {# G+ U- X5 k8 R# L+ {! d
  602.     while(sztoken[itoken])/ X1 [( ^4 ]/ u7 o: j, ]3 y
  603.     {
    # Q* y- m/ c! t, G; s
  604.       for(i=0;i<(int)strlen(token);i++)
    3 ^& F& X% i3 ^+ |: _( t
  605.       {
    ; H, ^' J# I' o0 x: `: ]# S# [
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    + H9 S% t- V5 G; G
  607.         {
    ( Q: ]  ?, E5 W/ L
  608.           sztoken[itoken++]=0;, X& h) N4 I: I, P6 k9 A; N
  609.           sztoken[itoken++]=0;, x$ t+ c, d# R5 N- n
  610.           return szRet;8 x5 U3 m3 B5 ^& X* C( {' R
  611.         }" C1 M* J  r( z0 E; q
  612.       }0 L9 Y" Q7 D# s, g5 G$ W
  613.       itoken++;  G1 [' U  S* F' r$ H$ _8 s) ~* ^0 w
  614.     }
    " G' B$ X2 y. T5 p
  615.   }
    4 m" _2 e0 @7 a; B- [2 l) k
  616.   return NULL;1 b% _* a- U3 c& e7 R# T$ q7 l! Y
  617. }
    & T3 B7 U# d  f1 \/ N' }- m

  618. , D% b9 y* F& y1 B' H
  619. void ProcessProc(long Total,long Current); w% {# K2 i1 p& E3 W2 U2 V7 [
  620. {
    5 A6 e+ K0 L1 k! ^- ?
  621.         MSG msg;/ T3 X+ {! M" _4 U+ x" I9 J/ w, {7 u
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    / ?7 K$ C& ?4 t
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ; H# i: I9 w2 P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! y& X8 g* f3 {# V
  625.         {
    ! i* D. S# G, ]* A7 v
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + K8 A& @  t6 o8 E& O
  627.                 {
    ( `4 E' n" x+ d' Z0 M+ ^* y% Z
  628.                         return;
    % B! g' z) _& C- f
  629.                 }; ~8 ?! y+ @" D' Z, {2 g; B
  630.                 TranslateMessage(&msg);6 Q' N% o1 q8 N( m4 c0 ^
  631.                 DispatchMessage(&msg);
    9 }" E7 W) @( U' R. d
  632.         }       
    : @/ c9 H4 l7 {8 g
  633. }6 G% A' a, w$ S5 Q& s, N

  634. ; z' e4 R6 T2 M& ~! d
  635. BOOL bFirstChar=TRUE;
    : M' o6 z" |, A/ S1 W
  636. ( n" p+ z: ]7 o) O
  637. BOOL CRevAppApp::OnIdle(LONG lCount)1 ^6 _3 J  ~4 u$ u1 ~& J% n6 o' {
  638. {
    , ^/ V( y& S8 y/ U8 u, c- G+ s
  639.         // TODO: Add your specialized code here and/or call the base class
    % }2 T2 i; o. w% h7 L0 f: H
  640.   switch(dwProgramState)
    ) g. T: e9 w5 ~, K; N$ C
  641.   {
    , R. j* s0 E8 k/ s
  642.   case AP_NOTHING:
    8 n" h9 }+ Q! M0 G( ^
  643.     switch(dwStartUpSteps)
    - E4 _' X3 P+ P# n+ Y
  644.     {9 ]  h3 L9 c  n1 M" O6 N
  645.     case 1:# S# m5 [/ w* L' H* b( R' l
  646.       {8 c( l  Q! I" S6 [) u$ a
  647.         int i;% d! c  M. p0 S3 Q9 V. n
  648.         CDC *pCDC=dlg->GetDC();( V# F- I/ b. @1 Q4 R  ?3 Y. I1 H" |
  649.         HDC hdcwnd=pCDC->m_hDC;, d% D% @0 T6 S' i* Y8 E0 J
  650. //        Graphics graphics(hdcwnd);
    ) r0 A: |/ @' i, \
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. Z, i4 j/ @4 A' B" S0 o
  652. //        INT iWidth=bitmap.GetWidth();
    , ~  A& D& Q2 Z6 X* c6 p
  653. //        INT iHeight=bitmap.GetHeight();
    . s! K4 U" u& g1 e- l) `) i
  654. //        Color color,colorTemp;
    9 D2 P0 n$ @' @9 d
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 f2 `$ s& o3 z: e' ^. V
  656. //        {4 d! ~/ K  T' Z& E4 z/ D
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ( i7 m% G5 o( [" X* Q
  658. //          {) ^3 u9 ^6 {. e2 c  {" Y: U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    4 ?3 M3 P- e* s! B
  660. //            colorTemp.SetValue(color.MakeARGB(
    % i7 G0 s% ]4 ^2 `2 M) d: m5 ^9 J
  661. //              (BYTE)(255*iColumn/iWidth),
    . n% ?9 e2 _) ~& ~4 T" l; S0 e
  662. //              color.GetRed(),0 H5 N3 J% X! {# x* ?
  663. //              color.GetGreen(),
    : x  g+ N/ {3 [( v
  664. //              color.GetBlue()));; T- ~. ~/ D- `- e
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ _0 {, j( _# O
  666. //          }- K  v- F( n% d. m
  667. //        }
    : ?. \0 }+ y/ U* l0 e! W4 S( ?9 N
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 A# }, l, S! o2 t* f( T3 y% q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ g$ `" S6 _8 }8 \' O
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    - q# {: |; g. Z2 n, }
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 |: O. N  I6 z8 i$ ^5 N$ i
  672.         for(i=0;i<240;i+=8)1 n" _: O# G9 q+ C; p( j2 e
  673.         {* _) y- o7 M9 X
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    9 w0 U6 B. P, ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    # y5 {* r( `  j# r8 O
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 ^" B, u& E6 j% l( U$ r% i
  677.           Sleep(33);
    & s' Z% x0 F2 d- O+ z/ O$ W: n
  678.         }2 |; Q+ F# b$ b
  679.         Sleep(1000);
    ) P" P! H, {7 ~$ @; P9 M
  680.         for(i=240;i>0;i-=8)2 \) c5 f1 L. }9 p$ H
  681.         {
    , A1 o" S* h: `" t4 K! B
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! r! l: m0 X" @% h* }1 S" F8 w
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. W; \) C0 p5 h( ]" @
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& @+ P, C' ?/ y& u4 H. S# {  c8 |, [
  685.           Sleep(33);
    2 _8 Y9 c: Z; v
  686.         }
    5 E0 V" n  j* v* h# ~3 I
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ) X( X+ [4 y  l6 `7 M  z
  688.         dlg->ReleaseDC(pCDC);* e% `, K( I; c! [3 F8 D! d' P6 H
  689.         DeleteDC(hdctar);1 E) G! _& N9 m2 a
  690.         DeleteDC(hdcsrc);
    + s+ {2 k1 M, t8 E
  691.         DeleteDC(hdcorg);: T% t# a; J6 p3 X( ]
  692.       }
    & F/ M  |+ Z* L8 t$ g, y/ X
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    4 c  m' v2 a( E0 h' R4 |
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' J/ N7 @, }+ k5 a! Z8 e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 n5 `2 x& J" j9 N, n
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 F) N+ w- _* V9 z0 V
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ a/ Z2 X' f& X* j  n: @' b$ x5 r
  698.       if(!Dn.Connected())6 n. Z8 s5 ^+ d: F, L% S6 E9 L
  699.       {9 a  p  U2 v# Y5 {6 j6 u: G- M
  700.         dwTotalFiles=1;+ H* @- Z' c* z/ Y
  701.         dwDownLoaded=0;
    1 g* W- p1 v' {% N# M, _7 i' B5 a: l
  702.         bSilentStep=TRUE;
    ) @" o* C& ]7 L9 c; Q1 f* B
  703.         bCompressed=FALSE;
    ; g" V+ c; D: n
  704.         strExtLocal.Empty();
    / Q6 m' a4 f) K- y% k  W# |$ b
  705.         strFullName="readme.txt";
    . [% i5 i# m- n" h. D$ ?
  706.         dwProgramState=AP_CONNECT;2 V- U+ Q4 ^8 S* Y& i# K$ J+ _
  707.       }
    , _  |7 u8 B' [" c3 G: b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ `5 E+ l. J- H$ W1 X$ l
  709.       dwStartUpSteps=2;
    ( q0 [4 ?+ w' z# v" y
  710.       break;9 F! u# h/ \8 U* Y4 o
  711.     case 2:& H, y& p/ Y* `
  712.       {
    ( H6 g) G( M* M8 I4 a8 V
  713.         int iEOF;
    2 [! i; K$ m1 N" t; g' k
  714.         FILE *fp;* v# d% f1 A) n5 m3 t
  715.         char szString[512];
    8 J$ Q+ T! n( F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    1 L/ T6 [$ U# k0 z! N
  717.         if(fp)7 M& Z2 g  \: z2 S3 b- i/ j4 b4 x
  718.         {
    5 u- ]/ v7 f2 t# r3 Y6 I
  719.           do
    $ I6 f( {3 I! K" y) u' W
  720.           {
    1 v6 ?2 v5 P! }# M
  721.             iEOF=fscanf(fp,"%s",szString);" e% h; a. u7 m5 B) {
  722.             if(strlen(szString))1 j# ]1 O/ }/ m6 B, r
  723.             {
    ' V; X( a  {/ W( l6 r6 b, E* k
  724.               if(bFirstChar)- ?' x9 j9 Q( z0 B8 G
  725.               {5 F" q1 F5 y/ B
  726.                 bFirstChar=FALSE;
    $ V: M% X7 j' a) K' ]  @
  727.                 bConnectIsBig5=FALSE;
    % ?& @0 g) U* V' v$ T9 j; F
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;. P' P2 `% _* J! ?6 ~' J% `' c
  729.               }
    : Q8 S: [3 C# D$ D7 T. S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    * V, F- e  j( e7 e; R6 ^6 V0 \
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    + d& W8 v2 _& H1 T
  732.               dlg->m_ListText.AddString(szString);
    , @: W: b: m" r0 }! _
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. \- P6 i9 V! E0 h0 H) n# x8 }
  734.               *szString=0;
    9 s9 i+ w; z6 k' l+ J# }
  735.             }  Q" p$ Z8 g. X+ b
  736.           } while(iEOF!=EOF);( q1 h$ A8 L: I3 }8 b  x/ e2 c
  737.           fclose(fp);
    ( o% C( i3 @' v; h
  738.           unlink(".\\DownLoad\\readme.txt");
    2 R0 P, M: }$ \! K3 l
  739.           dwStartUpSteps=3;8 @+ A7 ?: r2 N+ h( A
  740.         }- h/ J; Y: t' m( J! g8 r5 e/ b! @. }
  741.       }+ [& B+ o! v& y" d' C. I6 T
  742.       break;0 G6 I0 ]* l+ J7 P6 x+ M8 L
  743.     case 3:& E2 l. N8 {( `2 |
  744.       if(!Dn.Connected())
    * K  q* N7 t" M1 G; m
  745.       {
    * Y- M; c# A$ I6 [4 S1 r
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);, e# z: t; v. f' q+ E
  747.         dwTotalFiles=1;
    % d1 G% Z% ^3 z" c
  748.         dwDownLoaded=0;2 U# l  R8 T" J( W- z3 j- I
  749.         bSilentStep=TRUE;! k! n# E2 d4 m, k
  750.         bCompressed=FALSE;
    % L% s- [; h! `8 K3 v8 q
  751.         strExtLocal.Empty();
    ( I6 y% z* |& H& g2 }
  752.         strFullName="checkversion.txt";: X# |2 C& x, i6 ]& |! |
  753.         dwProgramState=AP_CONNECT;, b" ~5 v4 I% q' J. B
  754.       }- R% @* q+ v. b) O
  755.       dwStartUpSteps=4;6 u- c% ~# M9 b# R9 v( Q( y+ K" B
  756.       break;
    & \7 W, z  n+ m
  757.     case 4:
    3 E4 j6 z+ o9 J; v7 S; E$ C& Z
  758.       {
    5 G5 \2 M% s. f
  759.         FILE *fp;
    1 ?" x0 M( P$ M0 M) f6 G
  760.         char szString1[128];+ L. J3 I7 m: ~0 l
  761.         char szString2[128];7 M0 c* O* H) ?7 I
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");, M+ H3 n) Z, E; Q
  763.         if(fp). L; Q+ \# z& |) }
  764.         {# g4 M. j1 y3 W
  765.           fscanf(fp,"%s",szString1);
    3 I* g$ U( B6 p! n' J  \8 L& h. g6 _
  766.           fclose(fp);/ R* w( Q  K/ w$ n7 Y( x
  767.           fCheckVersion=atof(szString1);. y2 J0 r* K0 [7 Z8 G" w
  768.           fp=fopen(".\\checkversion.dat","r");" v9 d5 O% f1 ?+ K4 N- g2 W
  769.           if(fp)
    ! Y! C5 |7 u9 m) v
  770.           {) B, l) J) W. s+ ^4 e: R6 ~8 P
  771.             fscanf(fp,"%s",szString2);
    9 k- C+ f- P. ]& S1 A$ e- {, V" {
  772.             fclose(fp);9 E; D" A" m& n# ]" E4 b+ B
  773.             if(atof(szString1)!=atof(szString2))8 r# V$ Y" ~- A! y4 _7 [
  774.             {
    # O7 s& |# N( ^$ L* K2 O2 T
  775.               if(!Dn.Connected())$ z* D0 c1 s4 ?% l) h
  776.               {7 e' ?* S; |1 r1 c4 S
  777.                 bFirstUpdate=TRUE;
    : k; T! j: y3 H) L# ^6 J
  778.                 dwTotalFiles=1;
    $ c3 A( Q3 W2 c  R$ K
  779.                 dwDownLoaded=0;
    . e$ [5 V& f5 D# X0 N
  780.                 bSilentStep=FALSE;
    . o' h; k& J9 x/ L
  781.                 bCompressed=TRUE;" R6 \7 U4 h# d# ]+ s7 t
  782.                 strExtLocal=".\\DownLoad\";
    + L: {1 t( R' ?5 X( S9 N, K
  783.                 strFullName="update.txt";
    8 U) E( i( N4 A7 t1 D. s
  784.                 dwProgramState=AP_CONNECT;
    + O6 s  s+ p& z9 ?2 g- V8 D, ]3 t
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% @# F: _5 G& Q: ]9 c! N: p3 _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ; ]/ T3 M$ ?( W, l2 A: @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' Q4 i* ?- x  m" b4 G7 J9 \
  788. $ {" h) b" L4 X$ v; S: ^1 Q; A
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 w9 k8 d4 V0 \8 w
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    % Q. H9 @8 `( y% U8 B! P1 X' S
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)& v( K- q7 T- b. D3 r+ V0 |( [
  792.                 {
    6 b2 D5 t& H0 v8 e8 A2 D
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . p7 U( B3 b, d6 s1 p& h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" `2 z# q) R5 G
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 Z7 E2 w5 M) `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ [: u( B! e0 L7 p, S
  797. / f0 J: m; Y/ d2 Q3 w% A7 V5 v4 A
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 w4 D  s5 ~" M% T4 A: P/ D5 l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) Z; V) Y4 k6 ]
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + d% y9 k* [4 z  H( m; a2 d. S7 v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 n, M$ D! |- H1 p+ d1 _* l
  802.                 }
    2 u& D( M% H9 I; h/ L# e5 i
  803.                 dwStartUpSteps=5;
    ) _  e" e$ h! e/ q8 _: E* C% W
  804.               }8 a0 g1 F, s5 l  ?( h
  805.             }
    ' t# b7 m- {# B6 n  H  s/ [
  806.             else
    # O. p" H0 L6 G& v
  807.             {& [5 K- d6 Q3 G# X
  808.               unlink(".\\DownLoad\\checkversion.txt");
    + ~* q9 W" w; v9 {
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / y) L" z# h8 p+ ?1 l
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
      B3 Z+ F0 C" W$ _# A$ E5 |
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");# \$ O8 s  z& s

  812.   e  n* [' Z5 A9 A. T2 H. N) F' B5 H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 A' g3 G- N. l- ]
  814.               dwStartUpSteps=99;
    7 o$ M+ ]3 l# O  T0 i  f- V: p$ ]% l
  815.               bFinishUpdated=TRUE;
    $ p$ |& a2 {2 Z
  816.               bCanUpdate=TRUE;! Y( ^) ?/ r5 q& X- k- {
  817.             }
    3 G& \+ L6 a, E4 ~
  818.           }# G0 X5 y" Y8 ^% O0 _8 H
  819.           else
    % d0 Q' ], d# ~3 n
  820.           {
    ' P* |5 c/ O7 F/ l& J
  821.             if(!Dn.Connected())& I9 M  s. \6 g/ U
  822.             {  `7 u5 g0 m8 W% W9 @4 e7 C
  823.               bFirstUpdate=TRUE;7 l9 Q: {- v, N: ?9 `9 I
  824.               dwTotalFiles=1;3 ]6 W* n& l$ x$ J  y' h" Y4 H
  825.               dwDownLoaded=0;. o+ r5 H: v* |, Q; V1 H; J+ F
  826.               bSilentStep=FALSE;
    3 \3 ]; B; q8 Z. H* ^
  827.               bCompressed=TRUE;7 O4 i1 o  c7 c3 [
  828.               strExtLocal=".\\DownLoad\";
    ! o; v1 U3 j# b
  829.               strFullName="update.txt";
    6 ^4 i7 ?) }$ |+ [& M+ v: D
  830.               dwProgramState=AP_CONNECT;5 V8 G, o4 j) t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( K) [1 L8 ^$ I( N! B, x
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    - l. |1 {0 x% q8 e) D+ _3 k) ~5 C
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");' j9 D& n7 b- j, M
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 u, t; z/ Z" V+ U) X
  835.               unlink(".\\DownLoad\\checkversion.txt");! G' y& `8 R) |9 @
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , V. v7 ~7 S  q% q$ w3 P
  837.               {; Q0 F/ ~( ]: e2 D, R, g, A; |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    6 @! a( T" K! E8 A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    " b) {, B8 q" ?9 G0 k
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    2 B: S5 t( O) w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, e3 k/ q4 Z' \8 T2 f
  842.                
    + F# @2 d, Y& u' \+ \% M! T4 r4 s. w
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 m7 |; ^* w5 E- m
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");0 T) W( r$ i. Y: o' ~# a
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    + \2 t/ b/ `$ w/ g
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- x& \+ j/ {; G. L
  847.               }3 e/ U& V9 ~) t* p9 {
  848.               dwStartUpSteps=5;5 J+ i- A$ N7 W0 ^8 Z
  849.             }! e' `% Z% ~; T, t5 U
  850.           }, N& y2 h) u4 ?* O, C
  851.         }
    5 `4 ]3 w9 F$ Y7 R
  852.         else2 B; z% q7 y' G5 ^  g
  853.         {
    9 f, ^: q: j. C) n* F1 G- G( b7 \
  854.           dwStartUpSteps=3;
    2 {2 i3 N" w( z
  855.         }. ?8 {0 t9 p* ?% c- c' y
  856.       }
    " L# g1 X- L' c1 s
  857.       break;% L2 V( `# L3 K: C6 F  t* Z
  858.     case 5:
    0 ~& q2 z' }. W- D# L
  859.       {/ [0 `+ }1 ~7 h
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    2 |$ x$ b7 o, Q
  861.         {
    * v( }  W. k, C4 a& G- V
  862.           int opt_overwrite=1;$ I. r( A: x6 H5 [1 B$ N3 U) m
  863.           int opt_do_extract_withoutpath=0;9 ^9 N4 C$ a$ e# `0 S
  864.           unzFile uf=NULL;& Z! r  C% N8 N- x8 G$ c0 }
  865. 9 g2 {8 b, }6 W* L+ g
  866.           uf=unzOpen("Wsa.zip");  J6 J/ L4 N  {! v
  867.           if(uf)( n. t6 b# h$ j; S0 E
  868.           {/ d; r# R! Y2 O/ ^% \0 |
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);2 P  T1 x! ^; x5 r7 c, `
  870.             unzClose(uf);* t+ \) ^' c/ G) d- f
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 H5 k3 M4 T$ J/ z3 o5 {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");+ Q7 H7 T& \1 p1 Q/ r: p4 \
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");3 u( B7 t8 K1 G2 A- N& i! m" L% V6 D
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 D1 ]( y0 R7 E) b/ \
  875.           }% v  I& p4 z* z  Q- `1 A& I
  876.           DeleteFile("Wsa.zip" );
    : s1 n1 w- L; n* B
  877.         }$ M' V/ g$ Q4 q9 {# X9 e( s
  878. ; k  a, ]  }% h9 |
  879.         if(CheckLocalVersion())7 o0 r! ^/ o% R
  880.         {
    8 H1 p- e4 M6 r9 [/ q$ W
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");, E) ~3 c$ G$ s  ]+ ?( P
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");3 B- `. o! r2 T6 i' P
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");* s. i, ?6 S: k9 b' }$ Y) C/ y( y
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 p2 R1 R& o9 T3 g
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);6 u% c2 o7 Z4 R1 C7 L3 Q6 U
  886.           dwStartUpSteps=99;; f: _6 Q2 j, N6 J
  887.         }) ~" t" P9 ]+ u1 e
  888.         else
    ) r8 k4 R) Z% W1 C/ P
  889.         {
    2 \: z6 e( u' l0 ]5 ]
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 I. X. ~  V7 i% C* @3 i8 B
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 s9 Q. F8 {4 b$ J3 a* N0 W
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");4 I1 R% q/ S; B0 C7 ]" c: Z

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

$ j) K. @6 ]7 z$ }* y
0 f; S+ ?& w" H3 Y

評分

參與人數 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-28 12:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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