找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
* \- u5 ]5 I4 g8 I6 U
  1. / RevApp.cpp : Defines the class behaviors for the application.) l3 y6 t- Q% M! ?0 C+ B- ^  q: C
  2. //& y/ G4 q: H) R4 D

  3. " Q- ^& d9 F  T1 p' k: l+ O
  4. #include "stdafx.h"  y+ u7 T+ W9 c" H4 a

  5. % m1 _! L. w* T2 p8 }4 c
  6. //#define UNICODE2 e: L4 l2 u" r) x- L! @
  7. //#include <gdiplus.h>
      Z  y% v3 r. ^# [3 ?6 p, @+ i
  8. //using namespace Gdiplus;" V6 ~: s* o7 {
  9. 9 U3 Z2 I+ @1 t& i# q# l+ x/ I
  10. #include "RevApp.h"% B! N- j7 o* R2 G6 O
  11. #include "RevAppDlg.h"* J- P4 W, z7 _) Y* C/ B, y$ A
  12. $ ?' S: Z7 n5 i% H: `, C2 R5 ^9 p
  13. #pragma warning(disable:4786)
    1 s1 J( I1 v+ d  d$ c8 S
  14. #include <map>& N6 q2 S& ]  E% I/ I. _0 @
  15. #include <list>
    # f0 K" o9 }* B. v
  16. #include <direct.h>
    ; J' o, A; M! q+ B+ k

  17. % p+ j/ P* \4 N2 n2 N( W
  18. #ifdef _DEBUG7 s" w- i& P9 a7 r% t) o4 U0 {
  19. #define new DEBUG_NEW
    " e( q- f" x! V) S
  20. #undef THIS_FILE
    3 G0 U" |7 h1 V. E$ T
  21. static char THIS_FILE[] = __FILE__;0 K; I3 Q& x3 B
  22. #endif! q0 P5 ?8 ]: G8 o% t  A  m& e
  23. #include "SkinResDef.h"
    6 O$ `, w2 J; {( x
  24. #include "ChangeBG.h"
    " i0 F  a, n5 k
  25. #include "AFXINET.H"
    " k) h& M" ^' K4 h

  26. ) Z; ^, E7 c1 B* H6 H( Z8 U& d9 q
  27. #define TRADITIONAL_CHINESE 0, _0 k! T# _. N' S. ?
  28. #define SIMPLIFY_CHINESE 1
    + K% V* s, j8 f8 N' K
  29. #define ENGLISH 2' b+ U' s' \6 m% k0 g! l8 O
  30. int m_iLanguage = ENGLISH;
    : @8 [- q( A; k7 F1 d6 Q! o
  31. /////////////////////////////////////////////////////////////////////////////+ Y( ?: b, ~- Q# @3 A: c
  32. // CRevAppApp
    # b4 {/ w# |: Y
  33. ; Q+ Q; K/ p& Y6 R" _
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# ?9 g6 p3 Y' ^
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    * `1 p' M* b: _! U4 i* _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ! R' v% c" M' u4 w
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& Z1 p+ |$ B; j6 _9 b, D% F
  38.         //}}AFX_MSG% U+ q2 K0 ^$ [0 n" M
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)8 J3 u: e; X5 _2 p
  40. END_MESSAGE_MAP()9 G* A- s( `, ]# X2 ]. P5 e% {

  41. , ]2 q, n* b+ Y" ^- ?; _, I
  42. /////////////////////////////////////////////////////////////////////////////
    ( e0 L; P: e3 C, S( H4 \
  43. // CRevAppApp construction" p7 \) d2 a2 {* T6 k

  44. : p* S7 ?5 ]; i& S5 B
  45. CRevAppApp::CRevAppApp()$ L' `# Y+ W  \+ Z
  46. {+ {& e0 h; x  u/ r, X$ J9 a
  47.         // TODO: add construction code here,/ S0 k$ Q9 q1 a# W+ i7 z' C! v
  48.         // Place all significant initialization in InitInstance2 ^$ \. N  ]( E: E5 }6 {7 x
  49.   bDisplayIsBig5=FALSE;
    , ^4 q! Y* i' m/ A
  50.   bRestartUpdater=FALSE;1 J, W) X* M( s; K0 o
  51.   bFinishUpdated=FALSE;
    + d9 p, j- O4 m% Z+ f1 h
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    , q9 n$ `4 O! Q6 D+ o
  53.   InitChangeDataBig52GBKS();
    . f  ~) m3 u: e  V, J- v
  54.   InitChangeDataGBKS2Big5();
    & P5 o% F' t+ M) J
  55.         //% }" d" ~+ @4 ~. ], l2 l
  56.         bClickRunExe = FALSE;* `0 j: v+ n1 V5 S5 V
  57.         //' ?& ~6 q7 n2 o' ^# i1 \. L8 Q
  58. }
    & b. i/ f! R& E# M0 `: f; l
  59.   q9 r. k) k" }  J: k- k" L
  60. CRevAppApp::~CRevAppApp()
    * |0 X$ P2 a7 X: v- p( C9 h
  61. {5 s5 v! X/ h: |
  62.         // TODO: add construction code here,
    ' e$ i1 v( w+ z5 f2 Z% y
  63.         // Place all significant initialization in InitInstance+ P/ {0 a% t1 G2 v, o
  64.   EndChangeData();
    2 O1 P% Q/ l6 [5 b
  65. }
    / |" L1 a7 P- {/ Q
  66. 7 s1 b( }. M! `+ n9 c! i
  67. /////////////////////////////////////////////////////////////////////////////' o1 q0 U% y# `' J9 l
  68. // The one and only CRevAppApp object* k, f$ F8 h0 d( Z% V
  69. - W7 G/ x& ^: B! d% C2 e9 K9 B
  70. CRevAppApp theApp;4 U8 b4 Q: j' a/ w* T
  71. 8 t1 p, J5 k* z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)& x( }, q- u% G  f
  73. {
    6 N  |, [. V- W  M
  74.   int iEOF=0;
    + @( {1 T* V1 N! }: a
  75.   char szTempName[MAX_PATH];) o+ u; s3 s* W  U; f. D: ~/ _
  76.   *szFileName=0;
    + ~0 _, d3 J5 I0 n5 J0 c
  77.   iEOF=fscanf(fp,"%s",szTempName);9 n0 X& H8 S! }5 h) ]* `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    % b. y9 L# A1 J- b( i0 {
  79.   {8 r% ], W# l, e2 Q. M3 J
  80.     strcpy(szFileName,&szTempName[1]);$ v' n6 J2 N  _" o! g4 N8 ^/ q. h1 z! x
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 A% g0 C/ K" ^& m
  82.     {& U' w+ z0 o4 O
  83.       iEOF=fscanf(fp,"%s",szTempName);
    5 y1 e. x/ y5 k3 N& l8 E! U, u' N
  84.       strcat(szFileName," ");
    ) m% F+ C$ ~/ l
  85.       strcat(szFileName,szTempName);
    8 ~8 E0 E# i$ p( j' G% \& S
  86.     }/ a- ^5 @" e# _+ a" t4 }0 S
  87.     if(strlen(szFileName)>=1)" c! R! e0 c$ m9 y9 ^
  88.     {0 R1 U: C% C5 u2 \! }& P  ~
  89.       szFileName[strlen(szFileName)-1]=0;
    - S; k7 b4 P; o7 Y+ I- A
  90.     }1 s9 A0 V5 d$ N. s' ^
  91.   }
    ; f/ v' I  R$ ]- Y6 D7 P& S
  92.   return szFileName;
    3 j$ X8 F& Y( ]4 e+ ^
  93. }& S% L: m" U. _6 B. B% I6 j4 y. Z/ h+ x
  94. & b' y# K, {2 e
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    % y5 B' x6 A, Q) q. \! k" B
  96. {
    : y5 i) T) `6 H4 U/ u  L; O
  97.   FILE *fp;6 _( P8 l* W0 F- |* T" y
  98.   char *key=NULL;
    # \9 Z1 j: I' U+ v
  99.   char version[MAX_PATH];
    9 Y1 v4 a! w+ V0 y6 J4 e. f
  100.   LPUPDATEFILE file,olds;
    % y( w+ s5 a; t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( V( P) m% Y4 S1 \5 `0 ?

  102. + q3 N: A1 R8 f. w1 G$ u, g
  103.   UpdateList.clear();" N! |: x) J3 Z; z, D9 @4 t2 X
  104.   UpdateFile.clear();4 y8 w# ~0 x+ ^# u, }7 T2 R3 ^& T7 g; C
  105.   if(GetFileAttributes(filename)==-1) return false;% i; b  T! Z& M6 E9 P. \# x
  106.   if(!(fp=fopen(filename,"r"))) return false;
    # X+ y7 f1 y8 `' u
  107.   fscanf(fp,"%s",version);
    , l; Q/ j$ ], J4 B9 l+ U5 x
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# Y1 h% E( L2 s: `7 j
  109.   while(fscanf(fp,"%s",version)!=EOF)+ j1 r1 @5 [  F, J8 `2 f6 B" @
  110.   {# t! i8 i4 O$ [
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # i/ L; w9 ?% u5 [2 p/ s
  112.     fscanf(fp,"%s",file->path);0 w; m9 [0 b4 s6 b0 X+ k
  113.     ReadFileNames(fp,file->file);
    . O0 c0 M. u  p+ |7 E  u
  114.     strcpy(file->full,".");
    / R- l3 j) J, Q# y: \
  115.     strcat(file->full,file->path);
    & z+ w; P% e, d* f; |6 F' h
  116.     strcat(file->full,file->file);7 I: |0 u. p9 C6 w4 O0 t' ?' T, I5 D& l
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    - u- u5 G  k1 z( i/ b# k8 {2 H
  118.     {" R2 N  V2 `9 ~, i# a
  119.       file->vers=(float)atof(version);8 Z0 m9 g' }" h" `/ i! _
  120.       UpdateList.push_back(file->full);
    & k( ~/ x& n& T0 t. ?  W% Y, z' `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));+ \- A3 o6 ]% O3 _: y
  122.     }# h* K2 s0 m: B$ w) {+ ^
  123.     else
    ! A' D! B/ o: x" J4 r" P! u
  124.     {+ s' e, a/ z% E: E- V
  125.       olds=(*p).second;; k" G6 a0 f6 p: y9 r
  126.       if(olds->vers<(float)atof(version))* |# {/ d. }3 d( n
  127.       {/ H5 q1 W& Z( N
  128.         olds->vers=(float)atof(version);6 ?' x% ?2 h8 K% g' F" l
  129.       }
    . N) ^5 {" t% V( S9 R' h
  130.       free(file);
    4 _# W+ O- z5 v% U5 E
  131.     }
    . g5 I! Q) P1 v9 k7 A( l
  132.   }9 v7 N2 B$ B3 A3 n3 ?
  133.   fclose(fp);) e0 Q2 e$ T, Y; F3 d& m
  134.   return true;3 r1 F) k, [7 o& z/ n+ {0 }: u+ l
  135. }* ~. `: o* l- N( N, [8 K; P

  136. ( W; d( P- q% g7 h0 r; Z
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)7 v  Q; T9 o' f0 r2 Q
  138. {
    $ v+ i  g) y5 r
  139.   TCHAR  szFull[MAX_PATH];$ r5 P- C! f" w/ U  M
  140.   TCHAR *token,*inter;
    - _; \% m5 L; C$ v2 m$ D/ E+ i" I, a
  141.   *szPath=0;
    ; R1 Z% _; B+ a2 x3 x% X
  142.   strcpy(szFull,szFullPath);( A) j+ `  T, r! c5 i5 V+ L
  143.   token=strtok(szFull,"\\/");
    * s+ t/ j- u+ f0 l: c9 B* n
  144.   inter=token;
    $ h3 [  j8 _% O5 `' p, Q
  145.   while(token=strtok(NULL,"\\/"))
    * f0 l5 C9 j* _4 h* \/ g' F
  146.   {
    4 J, _$ u+ \. w( M% K# D$ C
  147.     strcat(szPath,inter);
    0 p( E: z; I: ^; |
  148.     strcat(szPath,"\");
    4 z7 P" Q( C9 D3 t9 J: J0 a+ o
  149.     inter=token;
    + L/ x: r. R, s5 a
  150.   }
    6 r9 b, [, T/ p4 G# `, ^
  151.   return strlen(szPath);
    # D8 Y* n% N+ H3 [
  152. }. I" d5 C- P  L6 P

  153. - Z; I0 M- h; m6 {9 x
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    + `! b0 _! c9 v/ F8 E( d4 n
  155. {6 ]0 L5 C: G  U9 x- L8 Q
  156.   DWORD attrib=GetFileAttributes(Target);
    * B$ A* V! m& d7 w- h- [
  157.   if(attrib!=-1)
    ! T# Z( R/ D! t$ ^; g% i
  158.   {% P1 V* y& V+ \# t$ G' ~4 {. p
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))0 V* a" Q7 k& Z6 ]% e* t
  160.     {8 T% @, J" z  t0 o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ! _6 p' w& b& ?, f9 ~) ]
  162.       SetFileAttributes(Target,attrib);
    6 @! a: k3 z8 }, p7 Z* l6 q
  163.     }
    ' C+ x$ T& r# j# k5 V# p" M
  164.   }
    0 h: S7 j' c4 T
  165.   CopyFile(Source,Target,Erase);" y6 ]6 ^1 w+ s7 G0 A
  166. }
    * F) H0 N$ l+ W8 F2 Z3 L: }- ^

  167. ! z7 I0 r# M1 v2 u4 ?7 x6 ~
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    + j5 l+ D8 J: R. _, x/ K
  169. {
    9 I( @' I: H: \8 W/ p5 a, {
  170.      FILE *fp;
    * K6 M; t: P, k9 D
  171.      char  szBuffer[8192];
      u* ~7 l' m# M" o
  172.   va_list  argptr;( O: C. W3 Z4 \0 x3 W: i
  173. 5 w5 c3 G& v& _4 w0 `
  174.         va_start(argptr,message);' p4 d! f* Q: m0 h4 w. ^
  175.         vsprintf(szBuffer,message,argptr);
    2 w( K- P3 Q1 i$ X
  176.         va_end(argptr);
      v7 V" h& c% |
  177.   fp=fopen(FileName,"a");0 a# A2 j6 d$ f7 ?! U& K
  178.   if(fp); ~( N! D6 t7 d1 f
  179.   {! u7 `, L* v0 h7 d5 u
  180.     fprintf(fp,szBuffer);8 ?7 R$ s& |/ x2 [
  181.     fclose(fp);" h" [3 m- T4 s: z8 d
  182.           _flushall();" V+ m/ ^! B: A0 M. {* f, d
  183.   }
    , L# I. ]! ?- n( X
  184. }4 O1 b/ ~, u' q

  185. 1 g9 v; {' T7 Y3 c' K
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 @0 ?* @7 ~4 i( @8 O; Q# U
  187. {
    $ L. {  p5 }; i* n
  188.      FILE *fp;
    / v9 i$ `" }% D6 F& T+ Y1 b7 M2 E
  189.     DWORD  attrib;
    8 t5 Y7 r- x9 I- @$ R
  190.   attrib=GetFileAttributes(FileName);* n% ^: X' Y+ J( y( V
  191.   if(attrib!=-1)4 k; p5 N2 D) d3 G) |
  192.   {3 ~8 s  G% m; q$ c6 c/ g
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 N9 t7 e+ n& v+ P4 O# J4 M
  194.     if(!SetFileAttributes(FileName,attrib))7 W' o0 I+ g# I" G# I2 D
  195.     {
    * k! v2 b! f* E4 `: z( g8 J
  196.       return FALSE;
    2 g% l& C( {4 I$ U# v
  197.     }+ l6 a, g$ @/ |+ I( [7 O
  198.   }
    # M# K' Q5 K6 `5 B5 d) T' w/ s! ]4 Q2 v
  199.   fp=fopen(FileName,"wb");
    2 X! O) F8 w3 n0 y9 r
  200.   if(fp): B- u% E7 J3 Z, Q& r1 G5 [$ L# U
  201.   {4 w9 q, c4 D' [0 o9 T
  202.     fclose(fp);
    ; E9 o4 A. [; X3 y2 ~4 j) v
  203.   }* ]/ _' Z# e& o/ b
  204.   return TRUE;
    . B7 L8 l7 {: i" s! Q
  205. }; h9 B) j$ O5 P# Z) z' s- I
  206. 2 W0 d& I! m4 ?  J! T/ W2 [& `
  207. BOOL CRevAppApp::UpdateLocalVersion(void)" f9 l: v( ]# k; @( }
  208. {
    8 v+ ^; g: R0 R1 k6 a
  209.   char filename[MAX_PATH];) c1 V) u: e4 Y; d/ D1 B5 c
  210.   LPUPDATEFILE file,olds;  [7 f5 f& {7 ?9 Y
  211.   std::map<int,CString>::iterator i;
    1 X& M$ E! C! ?* `( g
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( q% ?5 |, R6 W1 L
  213.   std::list<CString>::iterator l;; a0 y* L/ s# [1 q& o
  214. 4 \4 u: L2 [$ I( V8 }, \& W6 f
  215.   if(bFirstUpdate)8 s- {- p% P) `( [: T+ ]
  216.   {
    , z- i1 c2 G' p3 K7 F0 ~0 B
  217.     dwCurrFile=0;
    6 Q* x$ ]% N) z) F
  218.     bFirstUpdate=FALSE;
    0 i3 L0 a& }  ]1 s+ p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ y3 q, W4 p8 [% ]! z
  220.     {9 l  d5 `6 `* D/ ?! q, l- ?' w
  221.       dwTotalFiles=UpdateLocal.size();
    # v( C2 m# Y2 t* V8 _
  222.       dwDownLoaded=0;6 V8 j. G9 [, [) |$ ]2 i
  223.       bSilentStep=FALSE;
    ) b( k6 _1 Y* I4 W0 h1 m! C' R1 M
  224.       bCompressed=TRUE;3 \, x. ?+ a7 S  i
  225.       strExtLocal.Empty();
    : k" M/ b! v3 ^6 a, _
  226.       strFullName=(*i).second;
    : P' j6 x5 E6 I
  227.       dwProgramState=AP_CONNECT;5 x2 Z! u$ g/ O8 w+ n
  228.       return TRUE;' H1 N6 b/ m- ?& o% I. }* Q7 \
  229.     }
    ' e( n' K4 k/ F0 k0 h" A
  230.   }
    : x" H/ k; ^3 y! p# M6 c6 S
  231.   else if(bRestartUpdater==FALSE)2 H/ {: F; Q+ D; _1 n
  232.   {
    ( b" P5 f8 s. V
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    : S4 F# S7 t4 v( Q1 k' N
  234.     {
      Y4 S5 E8 `3 z" y) s* h. F
  235.       file=(*p).second;9 _: W' u. ]2 i1 E9 ~
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())" G0 a3 f0 B1 d: H4 Y) a6 _$ ~) R/ S
  237.       {
    1 N. I5 h% |6 g, e+ W" y
  238.         olds=(*p).second;1 A( m) \/ D8 s0 d8 d
  239.         olds->vers=file->vers;8 B- C/ _5 x! q
  240.       }
    0 R! S8 i0 l  v* w7 L" e
  241.       else/ A3 K0 M) r  i( `. [' q) U3 m  w! w
  242.       {6 A& \8 ]- N, D/ M* j0 o6 i! d7 Q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( Y: n* _8 z6 C1 [. d
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    2 x, T& v/ w- k$ {1 f' @, H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    5 e  F, p6 O- L5 ?. U
  246.       }; E# D/ @* n. M  f$ l: x+ @8 V
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");; B" i- v# X( w" [
  248.       sprintf(filename,"(%s)",file->file);, @4 f3 m  ]) P! S- G
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    $ z, p# n2 Z0 u, T/ z
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 n7 L% Q% p/ x
  251.     }
    . s9 D. K+ o5 A
  252.     dwCurrFile++;
    + L3 n! `9 u; S; i) M
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())0 F/ X' z4 X9 g8 h3 I$ g8 [
  254.     {1 A. Q8 M) B4 D" B& X% p
  255.       bSilentStep=FALSE;
    * v4 M, ^2 ?. n1 `( J/ A( H9 T
  256.       bCompressed=TRUE;# z3 l  `+ B' u# t, o
  257.       strExtLocal.Empty();% S% X: N. ~4 m6 D, ?% _
  258.       strFullName=(*i).second;
    3 ?7 @9 l" w. _- b% X' i  T
  259.       dwProgramState=AP_CONNECT;/ W2 q* [3 G1 W4 T5 @0 f! C1 Y8 W
  260.       return TRUE;6 I. t$ W" n, Y/ E
  261.     }
    ' K3 H2 M6 q+ f/ }! f; ~
  262.     if(!bRestartUpdater)9 v$ c. U! {; H: r' V/ M  b; ?3 P
  263.     {, N7 [5 {+ ~" `/ i
  264.       int iCurrSize,iFileSize;
    / z+ ^+ a# D+ N7 b) @: G% f
  265.       iCurrSize=0;
    ( A0 k1 ], {5 |7 A$ b
  266.       iFileSize=UpdateList2.size();, b/ l8 e! ]4 K9 m- K  E6 X
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    # [0 |4 H' r6 p
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");2 s+ @' c/ _. O4 R! i! W
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    , N/ p9 X$ V) P% p: U3 n( j
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ X4 Y5 e) S& B0 k2 {0 D
  271.       Fclearf(".\\update.dat");, `) h! b" v/ M+ B* r4 ?
  272.       Fprintf(".\\update.dat","Bloodyf\n");+ s) i; w, @( ^& [6 N3 `: B9 ^
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 `2 ~; m& u& W+ N( K4 M
  274.       {
    5 q% G' L0 {$ ~$ U( n
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 I+ u, s. V5 n
  276.         {
    1 k% r( m- f' ~4 v% P6 T# y' l
  277.           file=(*p).second;
    4 A2 o4 h! {, S
  278.           sprintf(filename,"(%s)",file->file);- h* ?" p" ?* N) P  w: E
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : s4 n; Q# m/ a; v. L
  280.           iCurrSize++;7 N0 Y( G6 e  ]* A8 w9 F
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % D; T6 V& l* v4 A: b
  282.         }- n: Z0 C% y9 e; G4 m( ?& Z2 h2 H! P& i
  283.       }8 W1 _) C8 z% Y
  284.       unlink(".\\update.txt");4 M! l. w4 _. B. J, c) D. A
  285.       unlink(".\\update.tmp");
      W7 x) F4 o8 H% f- P( d! F; o
  286.       Fclearf(".\\checkversion.dat");
    7 g* p2 Q" X) g
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);0 J2 v, q* r- K8 p7 V1 T4 D+ S
  288.       if(UpdateLocal.size())1 v+ _4 I+ o9 d  W0 N& s, f
  289.       {  E. D, Y5 d: t6 f" C2 K  H9 ]
  290.         UpdateLocal.clear();' R5 g% v+ x6 L
  291.       }6 h3 l" {% D9 Z9 \4 U
  292.       if(UpdateFile3.size())
    4 r5 n1 c$ {7 f: v. u
  293.       {3 X& L1 Y$ l! G; m" x# W6 N
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ J- N$ A" D4 h0 e
  295.         {$ Y, t; U: [$ ~
  296.           file=(*p).second;
    - f% e: ^6 Q2 F
  297.           free(file);* K" Y0 q7 f+ M1 A% y# T+ G
  298.         }
    7 X1 P" {9 M9 b) b7 C
  299.         UpdateFile3.clear();
    & i) D' a1 \2 B; X3 @) e7 O4 w
  300.         UpdateList3.clear();. \- r0 E) q6 `8 `# D
  301.       }6 q: q) P/ @0 a6 a9 O; c) Y. ^
  302.       if(UpdateFile2.size())/ u0 W0 b6 J$ r' Q, I  ^: {. l/ E
  303.       {
    : m/ R% q1 U3 Z7 T% _# a# M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)) f1 @4 t/ {) ]8 Q
  305.         {7 X1 A3 n# }# t1 m7 e( Q
  306.           file=(*p).second;
    8 p+ ]" Y% q5 }. ?5 n! A0 {, B# e, V
  307.           free(file);/ Z3 [9 O; y5 y5 c% [
  308.         }8 B  y5 x$ }6 G
  309.         UpdateFile2.clear();$ _  t6 s! y7 A4 c7 I0 ?
  310.         UpdateList2.clear();) Z3 w) I9 [7 _! `* l
  311.       }% D  u/ y2 u  l/ }) y% M
  312.       if(UpdateFile1.size())
    / v  A/ {  i9 _& ^* B6 c4 }
  313.       {
    ) Q+ ^- v/ |7 L* t3 k/ c* V  v8 }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); n8 ?! s4 V6 G# T  Y3 `  U
  315.         {
    # y6 C8 B6 ?3 w( r5 b  ]9 F
  316.           file=(*p).second;
    & f* L& Y) A9 K1 j; f( {
  317.           free(file);% w% K6 u, C! p4 y: j# M. N5 n
  318.         }
    + Q" P9 x5 f' ]4 i
  319.         UpdateFile1.clear();; [# h+ `' G* K( Y
  320.         UpdateList1.clear();4 m6 L/ j; |4 l  F' ?  \) r9 E) }
  321.       }
    5 M# N0 q" K! E& p' V% R3 H4 E
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; r% H7 ~& J+ K( ]) Z, u, k
  323.     }
    6 J' b( b# p. `/ x- \" r* K  W1 z
  324.   }; c4 S$ T( T& B! M( d6 {3 V
  325.   return FALSE;
    8 J* Z; X! `9 ?7 g& c1 y# {
  326. }
    7 m$ E6 p! [- _

  327. # p5 y* m7 j' L  q5 s# G( ^5 O* n
  328. void CRevAppApp::ClearAll(void)4 d  y& C# I# v
  329. {
    ( N  s3 K6 T& W# i
  330.   LPUPDATEFILE file;6 i: z! i. P' Z! o! |! ^* ?
  331.   std::map<CString,LPUPDATEFILE>::iterator p;" t# c2 f! \# }
  332. : Z6 X: D, ?, H
  333.   if(UpdateLocal.size())
    ' y7 Q- l0 |; \  P2 n/ V
  334.   {
    ) q, j/ V& G, R' F
  335.     UpdateLocal.clear();
    " n" A4 F! \9 c5 z8 y
  336.   }: u- f, F! T& \& `( M5 v
  337.   if(UpdateFile3.size())- ^4 ~/ J! u) y) x. j! B
  338.   {
    ( {6 ~" c! G' n
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' p8 R; u  M: p9 y/ `; G
  340.     {& R9 s& b* T+ {4 X) {
  341.       file=(*p).second;3 y6 s- K  {0 C% r7 Y1 t; ]
  342.       free(file);. z! ~$ y9 Z! L3 J' U1 V
  343.     }, k" k9 \% z2 t( E$ i
  344.     UpdateFile3.clear();
    4 c# B4 q. J! m0 [/ c
  345.     UpdateList3.clear();' `4 _  F: g5 Q' x: C
  346.   }5 A2 N/ n  }7 ^" A+ c/ M  @
  347.   if(UpdateFile2.size())
    0 A- I; D& Z: v- ?5 r4 m
  348.   {" {2 w2 B8 h# J2 e
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" g8 b" ~1 O* J) s# L; ~
  350.     {4 Q0 a- d' v9 n* R% z
  351.       file=(*p).second;& k5 D6 Q- x' h- V) \8 g
  352.       free(file);' z5 p( _! F! g$ L
  353.     }* b5 g  M/ f9 O! _8 V% Q# ]% L( e
  354.     UpdateFile2.clear();
    : {$ J& _3 r3 E, L1 A* q" z
  355.     UpdateList2.clear();1 Y" f' T, q8 z
  356.   }
    0 q( W3 ~; f  `- q4 v, u
  357.   if(UpdateFile1.size())
    * ]3 @: y% {, |+ G4 n
  358.   {
    % @! L# w  {3 m4 H" |/ _. D
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    3 I" B; U. r; r0 h2 P$ K( A
  360.     {! I9 [; }" q6 H$ W
  361.       file=(*p).second;1 p. M7 V- d* f. C! n* u
  362.       free(file);7 ]4 I1 Y% H; R- a
  363.     }
      r6 ?  Q5 s  Q
  364.     UpdateFile1.clear();& h. Q* o( T5 \+ b" d  T
  365.     UpdateList1.clear();
    . V6 B/ B, S! _3 J% j6 h9 @
  366.   }
    2 H" V1 u  q+ h6 S
  367. }  
    $ f9 X8 [9 w4 {& r4 \& X
  368.   
    2 e1 r! m' _4 r  l. N3 |
  369. BOOL CRevAppApp::CheckLocalVersion(void)# u- z. j6 s- {! a' a0 t
  370. {4 H- ~4 e# I0 p* w9 A5 D  @, Q# x$ y
  371.   int c;
    ' P: w: {) r8 B2 Y5 E  D, B" m- i2 o/ F
  372.   LPUPDATEFILE file1,file2;! l6 F9 S+ ?7 o6 S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;+ |& N$ D5 R( \4 R- N$ U6 d
  374.   std::list<CString>::iterator l;7 @  j* t0 B9 q. o, s

  375. 6 _1 D. a  I* O5 x" J! i
  376.   UpdateLocal.clear();
    4 h7 ~# N5 o; i) ?3 h. ?
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);2 g( i. s# b9 x8 p4 K" y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    . F% P4 y# T9 M( [* G
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; {8 @: e* H- E9 T* b* v1 l
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);9 E7 X  T7 {3 ~6 s" J1 T( y
  381.   if(UpdateFile3.size())
    / ^7 I' W9 l! C0 m* l' C' r
  382.   {/ n% S6 G4 D  y, |4 M* l
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( y) k0 O- v* J* r6 C
  384.     {
    / }, X$ E- ^# n6 U
  385.       file2=(LPUPDATEFILE)(*i).second;
    & W9 N' k+ P2 `1 ~6 t0 c" \
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ K) d7 l. E# `* b/ r$ s$ a
  387.       {
    6 ]1 p9 p9 L( Y0 w6 `2 c
  388.         file1=(LPUPDATEFILE)(*p).second;! i' d2 j# b- H# q# a8 c
  389.         file1->vers=file2->vers;
    $ U% p& r" |; V) D* d
  390.       }, M. F1 W9 i  M
  391.       else
    - @/ r3 i9 q. }9 N/ D# _1 ^
  392.       {6 y1 _) `" j5 T& t. e
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  L0 p1 u* i; x2 V2 r
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, `7 Z) J2 o! X5 x* _9 f8 m3 ?
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));; X2 _: A5 |/ o9 n
  396.       }
    " y! N9 o; W. t. [
  397.     }
    + |6 Z2 C- F  d  q+ J. S% F
  398.   }% S+ h9 A  ?+ F9 o1 L: }
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)! A, r& `" E3 A3 ]5 E2 }
  400.   {- |, X5 a3 s- U& r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( Z0 }  l8 L" `5 @1 _" z
  402.     {
    . n5 T2 T2 `! @% d: q1 Z
  403.       file2=(LPUPDATEFILE)(*i).second;7 v8 O5 U* X4 }; Y1 k( l+ O5 _
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ F  T1 T; v* J* j; k0 Q0 {
  405.       {
    : N2 J2 e1 t& E3 W* w4 K; t
  406.         file1=(LPUPDATEFILE)(*p).second;0 s" d% ^2 Q, q" p0 j
  407.         if(file1->vers!=file2->vers)
    & L% o8 G8 V* K
  408.         {
    1 I' _  a5 L/ g1 ^! f+ f) T" g% X( D
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 N9 c4 R# U9 p/ C0 H0 }
  410.           c++;# f3 s2 p1 Z+ N3 \, C
  411.         }
    7 g& W" P- t4 t" ]. H
  412.       }0 v' g& E# f+ ^2 n* h0 Y
  413.       else
    1 F" z* y( D/ K0 m' \: m
  414.       {# W' n5 n; ^' b" v5 K( D. V
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, u! s( V, S. D
  416.         c++;- k* Q9 y. O# }- o% m
  417.       }
    5 X2 h" C& Q, B! q8 @
  418.     }( ~: ~; }% P( ^1 |5 W: y
  419.   }
    . d* S6 w; P, z( t; ?( B
  420.   unlink(".\\DownLoad\\update.txt");5 w; M, _4 ~5 f3 i7 Q( k
  421.   if(UpdateLocal.size()) return TRUE;
    4 ~; `) \8 U3 {$ W9 z2 R5 A
  422.   else                   return FALSE;
    * C. o# I  ]; L8 P4 ^  G
  423. }; _3 p5 ]& f" X5 p. G4 D

  424. % ]6 U# ?3 Z4 k" x5 }- t# N6 N
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"; A0 `  V  U) _8 Q* I% F7 o& i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"5 Z2 T. U& e* d
  427. 0 f6 K% K+ N% n+ |9 C

  428. 2 Z& c9 Q% O% D0 E
  429. ( i. m+ E/ j6 ^6 P8 o
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    1 k$ Y% e% q) i! f
  431. {  k! G5 G1 n- Q2 W+ ^- o2 h) ?8 l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 D0 S/ j, r1 M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 j( L, j* X- H( V* Y" K
  434.   {
      o1 L5 k: t- k2 `0 ^) Z  i
  435.     char szLanguage[50];  j+ o+ o$ c, ~& A1 J- q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 @( \1 W" ]# b3 H) B8 c8 b
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 R+ y& P" u5 z( }, ]
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# n! j& n9 o* P6 a
  439.     else                                   m_iLanguage=ENGLISH;* \$ V6 H* ^3 L& M) T
  440.     char szRegister[100];
    5 [9 Q, M) _& w7 S) _/ V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! e  P' H8 k7 v! D
  442.     strRegsName=szRegister;
    , R8 Y: o; x* @9 K6 Z8 c1 w
  443.     char szPatchURL[100];
    + L* C7 J6 N2 }6 g7 l2 x. R1 Y! s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + F8 z4 M/ Z2 u& T) q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ g0 a6 ]+ g2 ^/ c: ^* N7 c
  446.   }
    0 V2 W4 G' @* d. ]% U% R
  447.   else6 |5 l" ^+ e/ ^6 _$ Q4 b/ ?# j
  448.   {
    ! T# {9 |0 P3 `7 }7 `/ D; d( r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! e+ v" e! }6 y: \3 E
  450.     strRegsName=DEFAULT_REG_URL;8 U0 {* L" N/ P2 l3 e" Q
  451.   }: K. p; _# O" ~* p( p
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    7 i3 ~# E6 s& J3 I$ `# `1 \
  453.   {% _2 d1 o0 }4 J3 {
  454.     char szIP[50];
    - u" b: |& M+ q
  455.     char szDIR[300];1 w) r1 n- c1 h% E( _+ x
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))$ C7 S( L8 z6 g; q
  457.     {( s+ J, k( g- x* S/ A
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & ?  V3 I( W: Y* Z8 w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    " U8 F4 h# k3 U& m) t
  460.       strHostName=szIP;6 c# Q* _1 R6 R0 R1 O, w1 \
  461.       strHostPath.Format("/%s",szDIR);4 F0 y/ O0 @" W  V$ R# W
  462.     }
    7 _" M: z% e+ W8 o
  463.     else, r2 ]1 H7 F: W9 O+ C
  464.     {; ?+ k. X& m0 i9 N) X; |! I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    / E" v; V/ l% S) ^) i# b* n, P  {
  466.       {/ R" n( ]# P. e$ y
  467.         char szLanguage[50];
    9 T$ |1 h5 {4 j) N) O! s) A0 ]. U
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    0 q7 k. E  Q7 W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ d0 Q: i( D' S, Z! w0 z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. O  }. a/ e* O9 p
  471.         else                                   m_iLanguage=ENGLISH;$ d# @2 p8 k6 Q+ _; _
  472.         char szRegister[100];
    2 C$ T- G, l4 c% i4 O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . a- J( m) h% {: ^+ U" Y
  474.         strRegsName=szRegister;% i' g) {- y1 k# y7 z' E3 x
  475.         char szPatchURL[100];/ X' T& g& A  ~$ i& B5 m$ @. e
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ `( U0 P! P. h6 M# ~- X" }- v! d
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 W0 }# [. f! k2 p8 ]. r
  478.       }. O4 y/ q0 @5 m
  479.       else
    $ U( {& B0 x+ T, m! {
  480.       {* w8 `8 O, H2 P
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);$ R9 T  ?8 W2 L2 J4 ^
  482.         strRegsName=DEFAULT_REG_URL;8 P) b7 S$ F% D+ k$ f
  483.       }3 b, U% d- m4 ^* D
  484.     }5 t1 {" Y( Z+ ~. Y1 d6 O
  485.   }6 F* H* F) w7 B4 k6 e, \7 V
  486.   return true;
    & A0 e# W9 ~/ j0 k7 A+ a! x
  487. }% G/ s; I2 z1 e

  488. 2 Z; I6 v' J6 s1 V/ f8 U. ^
  489. #include ".\ZLib\unzip.h"
    5 X$ U; k7 f' ~: ]; P  ?6 v9 Y4 X
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);8 ~% z1 z- a7 l5 t
  491. /////////////////////////////////////////////////////////////////////////////
    6 l8 Q# q8 w2 b9 b2 `# v
  492. // CRevAppApp initialization- `, m6 M: c5 s
  493. % h. a% P/ u3 a3 j5 ~1 _0 x" H5 i
  494. BOOL CRevAppApp::InitInstance(), C* Y8 z; x8 A% P3 c
  495. {$ q. L5 T6 x# V6 X
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    6 u7 y4 w$ o: T- q  C9 \

  497. 5 r. o3 a, q5 V# \% w# O
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / e  b$ ?! E4 b, b9 ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ r/ h# K' ^2 N5 W" W1 m! t
  500.   {
    ! ^: Z1 K5 p4 T7 Q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");; e3 ^/ Z5 k0 i8 {$ P$ M0 ]0 v6 r
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 D' j; Q. z& t; l7 I( f
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))4 N' {1 c4 L3 X  v. J
  504.     {! M+ d' x2 x4 E$ x2 g" R) s5 q
  505.       strcpy(szPath,szPathTarget);
    ) M. f8 ?) k# B4 ]! U' q
  506.       SetCurrentDirectory(szPath);: s" o; Q$ @" C2 C2 K7 ?& M, h" o
  507.     }
    7 f1 W, n  l9 F) b& `4 E) @
  508.   }4 Y% K( z- |+ c2 u  R
  509. #ifdef _DEBUG
    ' E5 \4 \! X. x: ]1 i4 a) J. p
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 ?4 Q' H- I' D/ t
  511. #else
    2 M2 t: ?  M7 G6 f6 Z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), S0 o9 V7 f  \6 N& ?4 [
  513. #endif
    ; N$ t: K9 T$ w$ @* M) i6 e: }
  514.   {
    5 R6 F1 @( {( {
  515.     char tempFileName[MAX_PATH];
    & w7 n- _" L' o  Y; i0 n
  516.     strcpy(tempFileName,szPathSource);& f7 m: `! _5 J
  517.     tempFileName[strlen(szPathSource)-12]=0;! {( f! F4 ?8 D6 `3 M
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    9 Z$ W6 T6 p1 l5 k: j) C1 |2 V2 k
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);, W% t5 F) m* V
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);( c0 \7 C; y/ ^- [8 W) E: P
  521.     return TRUE;0 j& C2 p& p7 f
  522.   }/ P9 _7 j# _, f; v$ j7 N: v
  523.   // Nuke 0118: Delete run.exe- H) i) w- u! ~
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. n4 p7 W9 {1 W3 @
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    6 G3 ~3 n( Y' J) l" `9 R! o: z+ P; y
  526.   if(!ReadCfgFile("Config.ini"))# i+ e& L, h+ v) c" ~
  527.   {! l4 i# o: S* O) `
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);  e: \+ v" N1 B, V, y
  529.     return TRUE;
    ) S! J  S; I0 t  z) b! S) ]4 m, Q
  530.   }
    ; U0 Y, i$ [$ S% j
  531.   HANDLE mutex;
    / w* B8 q  J% U4 }# F
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    3 l  R0 A1 j' m$ C2 G4 `' @* v
  533.   {. m$ g5 i* p* n0 d8 K1 L$ {% I
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)$ H- I7 B- r6 [+ P& }9 S
  535.     {+ E4 c3 O& T& A% ]
  536.       CloseHandle(mutex);9 f$ k6 u! p: m- U. p) d) \
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);# F2 E, A: O2 a
  538.       return TRUE;
    ; j8 g. P( k) T  @6 a2 i
  539.     }
    ) `5 S: {2 A7 |
  540.   }  
    : f8 D% X! k2 M) b  Q/ Q
  541.   CloseHandle(mutex);( ~1 [# T; p0 ?( i$ X2 r3 A

  542. ( ^. r5 ~. X2 e0 M8 X/ U% ?" c3 @
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ; w0 k# v, V% A; i* \

  544. ) g6 \% v0 H0 o* o; @$ o3 q
  545.         AfxEnableControlContainer();# \, B0 H8 L/ E3 N

  546. 8 h, j1 d: J( T5 c/ g8 A
  547.   bCanUpdate=FALSE;: c" ^; |2 W, L5 s7 |4 W  Q
  548.   dwStartUpSteps=1;
    " `7 V& m# S& G: S" C
  549.   dwProgramState=AP_NOTHING;
    0 E7 D; P& W' j# u7 S3 w
  550. 4 M0 l1 i& N! H* M. I3 V
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ( C: E. Y$ T7 o# b8 L( Y& R

  552. ! @5 }: r  b( ~7 |, `: T
  553.         // Standard initialization/ Y" G/ ?" Y/ \% ~" R+ `* j
  554.         // If you are not using these features and wish to reduce the size
    0 s" P6 O- k0 @. e! x6 a5 N7 B
  555.         //  of your final executable, you should remove from the following% U1 k8 x4 j2 ~/ J1 _
  556.         //  the specific initialization routines you do not need.
    $ Y7 E+ T: K' R" z
  557. % C7 S1 ?( Z: t8 m
  558. #ifdef _AFXDLL  O; o# N* D5 R3 H3 H9 ^" N2 y
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    : M: D" ?" H4 c2 Z0 R. \, `
  560. #else
    / W! ^, u* p3 t) g5 E1 J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    * s% `% v( q) P
  562. #endif$ B  x( B, t" k; J9 f

  563. / }4 f! o) N1 k+ L/ o2 Q" Y
  564.   dlg=new CRevAppDlg;5 q! Q- C9 t' F$ t+ R
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 K4 L& Q3 L, G8 t) B% ?4 u- p5 a
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + U. j6 }  B# s! c) V
  567.   m_pMainWnd=dlg;
    . f& }. |/ u* T
  568. 2 D9 E% U/ T* X/ @4 n) B4 O1 _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);! l6 `' `* B0 k4 _. f( B2 u3 o

  570. 6 H& C  Y/ m, k6 w# o+ T( q  K0 z
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 ]5 S' G$ r- Z& A% a9 E# f
  572. //  ULONG_PTR gdiplusToken;2 k' h2 F9 Q! U. C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . p  {; @# A8 x+ C# V

  574. 3 V" l+ @) Q) H
  575. //        CRevAppDlg dlg;
    5 k1 p7 m7 N: G+ w
  576. //        int nResponse = dlg.DoModal();9 S1 W/ c% I$ ]
  577. //        if (nResponse == IDOK)! a/ t! L5 X$ d+ k4 {
  578. //        {1 x) O0 E/ m$ N9 G7 D
  579. //                // TODO: Place code here to handle when the dialog is
    - _% D/ n% T, l. @
  580. //                //  dismissed with OK& C$ l+ Y8 r. c3 t( [) Z
  581. //        }6 h6 `4 ^+ [) a" W+ d
  582. //        else if (nResponse == IDCANCEL): g0 N& O( O$ Z9 S, e1 a
  583. //        {
    # A9 A1 U' \5 I1 |# `; g5 d
  584. //                // TODO: Place code here to handle when the dialog is) ^5 ?8 c7 ^- F# u0 h0 Y
  585. //                //  dismissed with Cancel
    ! i% M, A& W  z2 K
  586. //        }: U( J/ [) ~) D# Y# F

  587. % y+ K* i* ~$ }  Y( j1 g# l
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : a  E4 P/ g0 E3 t8 X
  589.         //  application, rather than start the application's message pump.
    * Q# o6 Y7 p" x9 T& e! K) _! U
  590.         return TRUE;- `: z9 x+ \) f8 F' R  P) w
  591. }: L! b0 ], T: c4 ~; R; V6 |
  592. 4 e6 o$ B/ K! J9 m; t" E
  593. char *CRevAppApp::strtok3(char *pSource,char *token)' [& p8 |- U  G9 J5 @" t6 w
  594. {
    # E% V' Y7 J' S! q
  595.   int i;
    + E* g1 D  q3 a. E: `6 Y. \
  596.   char *szRet;
    5 w7 t" C6 M7 e* ]) }' e

  597. + e. u3 P% [8 I# [- L
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ) \& r; Q1 T  I1 |& z
  599.   if(sztoken)
    8 ^4 v: c+ p% z, K4 P# d% e
  600.   {7 V0 e9 [6 [6 L% Y
  601.     szRet=&sztoken[itoken];' v" N. F. J3 }3 Z) K; i; f9 y
  602.     while(sztoken[itoken])! n, B* _) L3 {* v% N" B9 x
  603.     {
    8 Z! f, b) b8 w8 V
  604.       for(i=0;i<(int)strlen(token);i++)$ J# @4 O5 N! V* u
  605.       {
    , q  X& P+ d+ v" F3 f) ]
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    # L' o: G. h# z- h: j1 X  C$ X3 o
  607.         {
    / p: I" E; X5 J9 N: ^) M1 Q
  608.           sztoken[itoken++]=0;
    6 Y" {3 P4 Z/ E5 y$ m5 s
  609.           sztoken[itoken++]=0;4 u% U0 O  z+ f# w/ U6 Z- W- \
  610.           return szRet;1 v- l- h! p! Q+ @2 v& m
  611.         }
    * w$ X2 r+ h& X3 x" I7 M: y
  612.       }
    + H# {0 t4 u* @1 e. @9 U, v6 R& {) e
  613.       itoken++;8 a3 c9 c3 {: ~) I+ \' j
  614.     }3 J6 D! K7 m' G4 Q# P4 c6 O$ e+ C
  615.   }% J0 @5 {! j! ^- g. I: a# W
  616.   return NULL;
    1 I9 n% t# O% B; l6 S- G: `) y% T. b
  617. }
    0 ?7 X; H9 v& D
  618. - w9 B( |  r) F$ N
  619. void ProcessProc(long Total,long Current)
    - A3 r- i# z- n
  620. {% c! _( [  A) L) b# g
  621.         MSG msg;, f" ]) |  i7 S! R$ `+ \% l
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 I/ d. L6 g' [5 w4 F: k
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    " Y% n; j+ A+ x
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))  ]4 G2 y& u' p( R% \
  625.         {
    ' }# Z9 y3 E+ [/ L  z' Y. R
  626.                 if(!GetMessage(&msg,NULL,0,0))6 p$ |" C/ K9 r2 c1 u# l% \/ }
  627.                 {
    3 p. i& L( Q2 \7 E
  628.                         return;6 Y+ y$ s6 e# D  x' q0 F3 u, S
  629.                 }0 ]% n4 r# e  ~
  630.                 TranslateMessage(&msg);  Z4 s3 ~( r% \1 c, v/ `
  631.                 DispatchMessage(&msg);+ c7 M8 X  a' h, P5 e9 V
  632.         }        " a6 @/ {$ x" Z. {
  633. }9 {( q- m8 a0 V5 Q1 b7 P; j5 x

  634. 1 n. F5 q5 {  |
  635. BOOL bFirstChar=TRUE;
    2 k+ u# K' ^* U6 i! `5 l) m
  636. 6 T2 [: [7 ^  s) Q' Q: q" j- F/ I
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 [+ j  M, N- Y! Y2 b, P
  638. {$ A# e3 r  Z) Y
  639.         // TODO: Add your specialized code here and/or call the base class
    . \/ L  Q2 y3 H2 D9 f# N* J1 b
  640.   switch(dwProgramState)9 t& D, P' ~1 j% p8 X& o4 J
  641.   {8 j. Z; v8 A) T
  642.   case AP_NOTHING:
    - P# K: `! U1 u; l
  643.     switch(dwStartUpSteps)& O& A' T5 T" k* ]( w! B$ Y$ w0 U
  644.     {
    1 @( ~$ a& z+ h3 E
  645.     case 1:
    % @+ L/ ]/ M7 N+ O
  646.       {
    + P' E* e* _+ X5 J9 l9 V, F6 _% ]
  647.         int i;2 O+ z8 V2 J; E2 A4 g4 ]8 a. D+ u
  648.         CDC *pCDC=dlg->GetDC();
    / v5 a' y7 h( Z- f9 z: P
  649.         HDC hdcwnd=pCDC->m_hDC;
    / J" c) h; h  x) [' d9 a
  650. //        Graphics graphics(hdcwnd);7 Z/ a; d2 B% a( }2 ^* q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    7 g+ ~& y5 |4 P/ K
  652. //        INT iWidth=bitmap.GetWidth();
    ) n2 A8 n! t; D- H/ e. h
  653. //        INT iHeight=bitmap.GetHeight();. e8 Z8 M( T" G& r& r
  654. //        Color color,colorTemp;6 E5 t  _( t% U- ^$ |6 h5 X
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); V0 r+ ?1 V3 I8 l: a
  656. //        {" \* F: H7 ]; k2 W; V9 ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % b  Z8 @8 e) k
  658. //          {
    5 h% J" W' }/ f$ s* \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    + P+ S5 {4 @4 b* \4 m! m4 @
  660. //            colorTemp.SetValue(color.MakeARGB(1 b  G; n$ Y8 m  t
  661. //              (BYTE)(255*iColumn/iWidth),
    $ F. j. x7 C0 J* {0 w4 S4 @7 O, |" T
  662. //              color.GetRed(),
    ' q, |4 u5 ~1 f8 `7 l+ n' L1 f
  663. //              color.GetGreen(),% P7 h# i0 }1 G: J
  664. //              color.GetBlue()));
    + ]0 g% T. Y8 n4 Y
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' D8 w) s$ N3 U# t
  666. //          }3 D) N, c& F$ H7 L" h
  667. //        }
    $ O" u( a& F" x
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
      u' @( p' A$ Z) |( @
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) b: k- U- K1 o* {$ n
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");' l; ~; ?: g. Z/ S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & J0 n- `, g% X* S6 L/ j
  672.         for(i=0;i<240;i+=8)( K3 I6 a8 D7 b+ x' i! h
  673.         {
    ( r& t. M3 d( N4 d, s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & X1 }# `! S- u
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 L) Q; ]7 x4 e4 g; T" |
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % m. @+ t# O% [/ z
  677.           Sleep(33);
    2 [+ y. o1 d1 |
  678.         }& ~4 K1 [6 m* }5 |) l
  679.         Sleep(1000);2 J' t. f7 C' {+ X. ?3 d& g6 E
  680.         for(i=240;i>0;i-=8)* h' `* D$ \) t
  681.         {8 X: r9 o. v+ b$ m
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);) |* @- ~2 g! X. i( P" P+ i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 c! }8 I- ^( w- G4 V& Q9 w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% j9 \# W) |5 ~# s/ \) J
  685.           Sleep(33);
    6 O% m+ \/ J6 S
  686.         }
    6 f  X3 U( @" {; ?9 k
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " H5 A* C4 G/ v6 a' P6 a% x' Y/ K2 {
  688.         dlg->ReleaseDC(pCDC);1 a# \/ T/ c5 z# A$ Z3 Z
  689.         DeleteDC(hdctar);
    ' n# e, N# \1 }2 X
  690.         DeleteDC(hdcsrc);
    - P, g- n$ w3 m! J% }/ A
  691.         DeleteDC(hdcorg);6 S+ G6 ^8 N* s0 H# B2 j
  692.       }+ M. E7 B5 P2 s/ e
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 L/ c/ k1 }: t* t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    # }5 `: |' ]4 g
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# Z6 R! F, L7 @
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ X7 l0 Z$ H% x
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 o/ \* g0 [6 M2 W  j
  698.       if(!Dn.Connected())
    ' D- q% i3 Z) j* O- ?
  699.       {
    8 j& y0 L( K5 W. F4 b3 f
  700.         dwTotalFiles=1;+ |7 D, A( [* V& T. D8 y# i
  701.         dwDownLoaded=0;
    ! L4 W- G( ?: b* t4 Q+ p0 x
  702.         bSilentStep=TRUE;
    8 B6 Q- b% [" Y! L: \( P: l) C3 M5 d
  703.         bCompressed=FALSE;9 O+ `6 W2 u# ?* ]3 [! U
  704.         strExtLocal.Empty();( F2 ]1 U9 [" o6 k6 W$ f& u3 S# e. H: q8 \
  705.         strFullName="readme.txt";( H) ^  E" W/ D5 Z5 S: f9 @( w' s
  706.         dwProgramState=AP_CONNECT;
    2 y& ]9 }0 `2 C1 J! T$ |
  707.       }
    * o* x/ C" d; i
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();* b: s$ s3 d4 I* B  d
  709.       dwStartUpSteps=2;5 n' P: l; Q/ ~# S* A4 t
  710.       break;) `/ A) I" [3 U
  711.     case 2:
    3 F3 @2 w  P" g# q8 M' B. K' A
  712.       {
    - {8 r& Q# U/ I* i0 q
  713.         int iEOF;
    1 B& n2 Y1 Z7 `  U
  714.         FILE *fp;: K% G  D; ~: q8 F- R
  715.         char szString[512];
    . G" A7 g' H2 e. z) W' n8 `& E
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 v& b, T) A) y2 ]/ T
  717.         if(fp)& z! D* H( |; t& G5 h
  718.         {
    & c) V$ O! w" \: `5 }$ T
  719.           do' G4 t0 V- }9 s) F- y! g
  720.           {6 {. ^) c2 l" D+ H6 G9 |7 ~+ o/ R  k
  721.             iEOF=fscanf(fp,"%s",szString);
    % E4 q6 y% [6 x! {+ t9 N+ L
  722.             if(strlen(szString)): f* U) b6 [# M) J9 @
  723.             {8 r7 l7 ?" w; K  o! p
  724.               if(bFirstChar)
    3 K7 C0 k( R+ f8 g; \0 W. _9 |
  725.               {
    & e7 Z, C1 Z0 F
  726.                 bFirstChar=FALSE;8 E8 g* T. l3 Q4 O% ]
  727.                 bConnectIsBig5=FALSE;
      ]( b- w) [) `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;8 ?3 r' N( T/ `# U  O4 v
  729.               }% u+ H# W) P: l% I: {& z' m
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));8 r: B% q5 W6 @: f5 J0 H! u
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));- ~/ W5 X5 C+ m7 j/ R6 `
  732.               dlg->m_ListText.AddString(szString);
    2 m0 O" l+ P0 w6 u4 t% A
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" W4 z4 z2 S7 c8 ~6 M" g
  734.               *szString=0;
    $ Y# l) ]# ^+ P- m. @6 i0 Y' I
  735.             }3 [1 ?. o- B; @' ~6 j
  736.           } while(iEOF!=EOF);
    4 R5 _# }1 ]: \0 u1 W. |8 y
  737.           fclose(fp);
    6 k+ ?$ A, E" L
  738.           unlink(".\\DownLoad\\readme.txt");
    9 I1 \0 ^" t6 f0 Y; c
  739.           dwStartUpSteps=3;) X* }0 W0 c* z5 G; u
  740.         }2 Y, n& }5 R5 H9 T, m9 G
  741.       }! `* ]- q" L1 F- _( U: v
  742.       break;1 Q  a! |/ ^2 i2 m
  743.     case 3:' A: M& c! b! P/ z. @  Z5 ?
  744.       if(!Dn.Connected())
    1 o1 U- S$ @' R9 u  [/ \) c( X, y
  745.       {
    ' c+ v& P  f8 X4 r
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    " R( V% I; W# n
  747.         dwTotalFiles=1;6 N& i0 O3 z/ P$ k. Z" Y( P) r
  748.         dwDownLoaded=0;# j2 o! v  ]' T; S- ^
  749.         bSilentStep=TRUE;# n  ^( v" A9 k3 A2 D. L1 R7 r2 ?; w
  750.         bCompressed=FALSE;
    ! q. w0 r0 y' |0 t7 J
  751.         strExtLocal.Empty();
      I8 Q) t6 H+ x, s( \$ J
  752.         strFullName="checkversion.txt";; B% n* p' @! }' |, T
  753.         dwProgramState=AP_CONNECT;
    ) }. m7 Q- J, c4 T5 S% K% p5 w0 |6 g
  754.       }
    ' u  y6 S" Z0 {
  755.       dwStartUpSteps=4;% T, A% Q( o5 \. O7 G4 v4 Z0 _
  756.       break;, r$ x2 X5 }* h
  757.     case 4:: z7 s. U0 ]: I& f! r% Y
  758.       {
    8 j3 L! |, m9 f: q5 J1 i  M& Y
  759.         FILE *fp;! R$ w* f7 {  R5 @: n( D8 w
  760.         char szString1[128];% t# s5 v9 J7 u' {% ^/ N% x
  761.         char szString2[128];
    # {3 L  {2 e- f
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    7 s! V! c+ M8 V4 \
  763.         if(fp)
    ; \6 P& o) j7 T& ~! u+ S: u6 l/ {
  764.         {) C* Y# j/ }/ r
  765.           fscanf(fp,"%s",szString1);
    7 v1 ?# {! p# k6 k
  766.           fclose(fp);
    2 A- m+ A6 E/ V' b
  767.           fCheckVersion=atof(szString1);
    % Q" B, a- e. e1 \' C8 [2 i
  768.           fp=fopen(".\\checkversion.dat","r");
    6 {" j! l( b+ ^4 z! A. A; w
  769.           if(fp)0 K1 I7 F: P" N8 a7 e  C
  770.           {
    - \" B# r& V# ?" ~0 S, x0 l; X
  771.             fscanf(fp,"%s",szString2);! e" ~/ d9 t+ L- e( E8 o) ?
  772.             fclose(fp);! R! r1 V$ C5 d
  773.             if(atof(szString1)!=atof(szString2))
    1 c5 E* C. n* p5 b1 i9 l' E$ u7 d3 A
  774.             {
    * w: L3 ^, g5 Z9 g
  775.               if(!Dn.Connected())  |' ^8 t- ]8 p8 Q3 n
  776.               {
    & f3 u4 y' |0 G: k4 t7 W) @" C
  777.                 bFirstUpdate=TRUE;
    9 x4 Y, o, r7 c$ b5 L% ^8 Z1 `
  778.                 dwTotalFiles=1;
    8 c& k# O9 w% d) ~! F
  779.                 dwDownLoaded=0;
    - \, M, O+ m" b! t
  780.                 bSilentStep=FALSE;# R$ o$ ?0 y; ~& }" _
  781.                 bCompressed=TRUE;* f. @  R3 f* r& ?5 i( }
  782.                 strExtLocal=".\\DownLoad\";" m( l3 M; I& J9 v
  783.                 strFullName="update.txt";/ K5 \, F. {  S# x5 O& O6 ]0 w# b; L
  784.                 dwProgramState=AP_CONNECT;
    + I0 I# n7 o$ c, q* K6 Y+ W
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");0 |' ~9 }. Y, N0 Z# {2 B. |$ h
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / [$ v+ }1 u  w" l
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' N) E; N+ s: M1 R/ _

  788. 7 @$ I( I& b1 `( m
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  X* m9 I) |6 F8 q
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ X$ \( h# t+ z: ^& c
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ( c, h: l+ R2 S6 `. i$ w  q
  792.                 {
    - o5 F* _8 ?$ n9 I
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& b1 D- }0 e$ D. m
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : \, w% o6 K  N& @/ o
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' G& o( J7 Z. @+ O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# J& v) T$ E; V4 `

  797. , t% p# X! I; p- w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    . r6 T: E" V) y7 m; Z1 o. G- \
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    % U- J1 ?  m$ {" d# t/ W! x8 F
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    * _- S2 z' m! P
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 b- F% G! q: V+ F3 m- {* _# b# m+ J
  802.                 }
    * m7 u6 l6 T& h0 t3 D; w& e
  803.                 dwStartUpSteps=5;
    & g3 r6 z2 Z% U3 W: ]7 p
  804.               }
    3 e# k3 Q) f& e6 |+ K6 J1 C
  805.             }" t- f' y& g2 H; X2 d& `1 \5 X
  806.             else
    : k: w- }: L( l
  807.             {
    . I  `/ L+ B; _8 {" R- d2 H
  808.               unlink(".\\DownLoad\\checkversion.txt");" _( m0 i3 V2 ]) X, |
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    2 Y7 g  a6 u, w" u- W8 d" ^& K6 W+ A
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");4 v* u9 M; V, C
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 s# `8 b0 [, V1 @% E1 b$ t1 [
  812. 2 u: h) o! c1 ?2 ^
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& `- ?9 u8 X6 f. A
  814.               dwStartUpSteps=99;( F$ i5 I. Y3 g( J
  815.               bFinishUpdated=TRUE;- u, P3 }/ Y* l0 Y' w
  816.               bCanUpdate=TRUE;
      d: j9 ]: _' A$ ^9 r% s+ G/ |/ o0 y
  817.             }
    / k: e, b/ ^+ S0 G% |* B
  818.           }
    ( D+ {, U- e# D, G; n/ A- B
  819.           else$ u7 f+ C; A/ V1 N" |  R% k% b" O
  820.           {; t: C6 P( W! X' O2 k1 u6 G
  821.             if(!Dn.Connected())1 ~% f/ V1 G  N+ z/ {8 X
  822.             {/ a8 J5 c0 f, L
  823.               bFirstUpdate=TRUE;7 @0 x. R! I2 ]9 N& o3 t
  824.               dwTotalFiles=1;
    , ?% w* e! f! u8 z! h
  825.               dwDownLoaded=0;
    3 ]& |: h& D! W& ], O
  826.               bSilentStep=FALSE;
    7 u' x5 a; N' S& p, I
  827.               bCompressed=TRUE;& C8 |% |! G; y0 N; t) F7 C
  828.               strExtLocal=".\\DownLoad\";
    + E1 e2 G" _1 n" X( ^& V
  829.               strFullName="update.txt";
    / v& @4 ]* f0 b
  830.               dwProgramState=AP_CONNECT;1 @  m: a- S* d4 b
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
      q) C. {/ {% F/ o: o
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    2 z" h% v4 f+ s$ v7 W& g- s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    7 F2 e/ F) {1 M8 T2 w  D& m
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' N1 P7 N. J& ?6 u4 e
  835.               unlink(".\\DownLoad\\checkversion.txt");
    , {" c  x7 T7 _1 u. S) B7 t5 u
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)) ?0 z- v6 w7 S) K% c9 b
  837.               {
    * F( Y& s! P; G+ I
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 Y; F7 w$ F% S. I) T4 U, J1 m0 D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");$ e: a* s  Z' L/ p6 e0 X
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( w7 v& F- S: v% y
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 h) K6 X  w+ \
  842.                   n/ F- s4 V1 `) @5 ?
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% G, N1 C( J& Z3 o; y" @7 c: B8 X8 J
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' Q8 c& ~) S" @- a, X3 H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - h8 x2 V5 w8 G' `" ~
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ i1 c# f' o& r# ^6 V" k  x
  847.               }
    $ W7 m# d9 O, Q5 b1 ~
  848.               dwStartUpSteps=5;! k. [& ~/ u7 f0 ]% s
  849.             }
    % t7 p  [& p4 G; B4 Z3 u
  850.           }
    2 W! ^2 o" K# q9 x/ J" `2 T
  851.         }
    ) o# F, E9 i& p8 ^  _
  852.         else5 R1 B) h# M2 h' j" ^* c
  853.         {) S# L8 @1 I1 o0 D2 d1 A
  854.           dwStartUpSteps=3;
    9 X# `: K. m2 K" {* ?5 D' o( j
  855.         }
    ; N' d3 c: y* v% l9 C# p
  856.       }1 v. C0 n  w* W
  857.       break;
    ( D( O* u5 s2 Z
  858.     case 5:
    9 ?; [# D& E. X4 F/ X
  859.       {
    3 i# ]/ G& x0 R& |# X
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    ' Q. f$ K* y( `9 Y6 ^! \
  861.         {
    , i2 V0 r; y7 `2 c
  862.           int opt_overwrite=1;
    : ?8 K# z# C6 ~( v+ A6 V( w
  863.           int opt_do_extract_withoutpath=0;4 x$ O0 b0 N( Q& V
  864.           unzFile uf=NULL;6 B0 K- m5 R2 S) i4 G
  865. ' O( a3 N& u0 c2 `: y( m
  866.           uf=unzOpen("Wsa.zip");
    0 [0 q8 d& o* l% n9 [4 D
  867.           if(uf)
    % ?' D" v: S1 l' ~9 z
  868.           {
    / Y( W8 C; d" Q# c' s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    . Z+ F9 f2 I, }3 Y& z7 S
  870.             unzClose(uf);
    ' o, g. |) a' a1 h
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    # T6 w) j7 t/ I/ Z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    " {+ `- @& c( n8 w& M
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");1 C) r/ @) n1 v) J
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& a2 {- ~! T& P# P) E3 Q0 E
  875.           }
    " [3 \( [; N7 m& H
  876.           DeleteFile("Wsa.zip" );6 E4 z* F( |6 j4 e
  877.         }" Z9 G4 k" i% \0 O
  878. 5 z5 ~6 P1 A% q* C! V: J* o
  879.         if(CheckLocalVersion())8 ^* o5 U/ W3 @6 F* p1 [3 L
  880.         {) [0 r% P, a4 t
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    1 I7 o, N7 n6 y* G3 I
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    9 A/ f7 y5 s9 Z3 `9 V
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    " C1 N" m% Q7 y3 i, Z" J2 X) u
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) `+ L+ s" P4 S) m/ O3 ]
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    4 G  E/ G' X9 a" c) c$ G
  886.           dwStartUpSteps=99;
    * D" T" n0 H: y- G
  887.         }
    - B( w" W8 [& j" A" s6 _8 D
  888.         else+ S3 i: X' M! e8 B' H. v
  889.         {) ^- X  G% C  `! d
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    / ?* E% U; A6 u4 @' K* A  a4 n
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    4 n& v3 |6 \# |, d) o( S% J$ {
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");' \6 W8 j+ L* F9 {; F6 j

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

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-3 15:34

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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