CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
$ g# F, n* J4 s$ o
  1. / RevApp.cpp : Defines the class behaviors for the application.- L' V1 N$ [* \9 K$ D6 v- f5 n
  2. //
    1 J9 t7 E! M  E; f% q3 L

  3. : o5 U( @' t  m6 k) n
  4. #include "stdafx.h"
    $ U2 G9 E6 r8 `& U! G  X' A

  5. ( o% O( s0 A! b2 {
  6. //#define UNICODE8 x/ y' o( k" a0 t* s
  7. //#include <gdiplus.h>
    & b+ Y% Q! Z: i- G  Z
  8. //using namespace Gdiplus;
    1 Y, t2 e+ }4 e+ o& h! `8 e, z/ [
  9. / w# W) ]8 Q2 r1 O
  10. #include "RevApp.h"
    . b1 B/ @! M2 T' ]4 z5 W7 u
  11. #include "RevAppDlg.h"; W5 j/ n' X# f- ?; G5 @
  12. & R. [3 _+ V' S& O* ]0 \
  13. #pragma warning(disable:4786)9 \! m# }* i2 C8 @: r( ?5 {
  14. #include <map>
      a( N" i+ r- j) f; P  Q: b/ @
  15. #include <list>2 E4 X) q4 @+ |% O
  16. #include <direct.h>  r$ R/ [/ z0 Y2 K$ g4 R

  17. % e2 x1 h3 v/ `: v) c
  18. #ifdef _DEBUG
    7 N( u6 d) ~; r5 k$ X
  19. #define new DEBUG_NEW
    , e; w8 F8 P! s% ?+ x# j; a) [8 z
  20. #undef THIS_FILE
    , r# D; D; O3 L" B: n7 |- y5 }
  21. static char THIS_FILE[] = __FILE__;/ B  ~$ x7 R# e. u" c
  22. #endif. ]& ^: S. S8 e  X: `1 d1 \) b
  23. #include "SkinResDef.h"; }. Y, P8 M% z) o0 h! p! [/ d
  24. #include "ChangeBG.h"0 u( f% @6 v+ {+ X
  25. #include "AFXINET.H"
    2 @. K0 r  ?' b0 e

  26.   w' M5 d7 F2 V) a' W3 ^& N" k9 O
  27. #define TRADITIONAL_CHINESE 0
    0 i- n  u& p# o, T
  28. #define SIMPLIFY_CHINESE 1
    - w% Z; q. D! X1 I) b
  29. #define ENGLISH 2
    0 V) T# Z2 w% k& j
  30. int m_iLanguage = ENGLISH;
    ) s& W! }( B2 Z& \
  31. /////////////////////////////////////////////////////////////////////////////
    0 S0 c, y/ r( m
  32. // CRevAppApp# G$ ]. y) v% `
  33. 5 c1 F9 c6 h1 U' T
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 @7 D0 A+ U4 l4 ^1 m* t' d. \
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 |& C' O) d# A8 v& j
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here." A$ _) S2 @% M- b6 E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 V! Q) j3 a2 R% L+ r+ D
  38.         //}}AFX_MSG
    1 z* [! m5 f1 R6 e( c( i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)4 z+ t7 ^% V3 a# n3 G, G
  40. END_MESSAGE_MAP()/ Z- a# H# t$ `# }
  41. 2 Y& _7 a. t4 Q* h
  42. /////////////////////////////////////////////////////////////////////////////" \1 `, p6 d2 N, Q. J" E5 u
  43. // CRevAppApp construction( z1 h% W( B* U4 J3 V2 a' E
  44. ; F6 ]( O" T3 t5 e2 C
  45. CRevAppApp::CRevAppApp()
    ( s  `5 m8 W, ?$ i6 w; @) l
  46. {& L! I  f, }4 ?& y
  47.         // TODO: add construction code here,
    ) o+ u' k7 C. L7 h$ D9 j. Y( o
  48.         // Place all significant initialization in InitInstance* ?6 N$ B3 V* r# D. T/ s. _* H
  49.   bDisplayIsBig5=FALSE;  x6 I' ^- u& P+ i
  50.   bRestartUpdater=FALSE;
    ' M! D; i( d* m; c, J& z. z
  51.   bFinishUpdated=FALSE;
    4 h4 Z$ S! h# q, c8 j; }3 X
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; _1 J$ b) x9 u4 ~+ |
  53.   InitChangeDataBig52GBKS();
    ( f, U+ I8 ^8 c$ I; O
  54.   InitChangeDataGBKS2Big5();
    & u; W& v8 o" e# k+ {( z- A& V# L
  55.         /// ]9 p6 n8 |9 z& L  X6 m
  56.         bClickRunExe = FALSE;
    ' R! A( ?. K4 R; i
  57.         //
      f- I4 Z1 H7 j0 o
  58. }
    4 Q; m+ x4 N8 o& i# O) M" ]. ?$ t5 _
  59. + i0 F. P; I! v5 f; r  o9 w
  60. CRevAppApp::~CRevAppApp()
    " ~+ _, D3 w- v6 D, \' g
  61. {: L. F) o- P; h, s
  62.         // TODO: add construction code here,
    7 ~  y+ g, Y* {
  63.         // Place all significant initialization in InitInstance
    + `+ j$ R2 y# B; T" D
  64.   EndChangeData();
    , ~7 `3 M" U6 S" S) D' O/ X
  65. }9 l  E: y1 ?4 ~

  66. " [, w: O5 ?# e4 w2 F9 U. U- x
  67. /////////////////////////////////////////////////////////////////////////////
    0 r- F+ Q" B9 I
  68. // The one and only CRevAppApp object% u+ ]1 Y& U" j) ~( U, x( Q

  69. ' V( f, v! [- V& X% k
  70. CRevAppApp theApp;
    . E& b- a2 u- p( L, w
  71. % [1 v  p% V+ T; I1 {
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)0 j- x# ~1 H  x7 |
  73. {
    ! E8 I- _; [" h6 B/ n, ^
  74.   int iEOF=0;
    ! r) Y! l7 R3 |/ h, Y9 e% O& N, Z
  75.   char szTempName[MAX_PATH];
    $ P+ r4 e$ a( i2 {! C
  76.   *szFileName=0;
    6 O5 ]  \' s( u
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " [' ~$ k0 o# e" t6 _9 J) `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    1 o) b7 i( w% I: Q- n) @5 ]
  79.   {: ]4 b: H) f6 \8 \6 x$ H  c- K. A
  80.     strcpy(szFileName,&szTempName[1]);
    0 H) w) k9 a; g) h/ t
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      n& h/ L; ?6 X0 N8 L/ l4 ^0 @
  82.     {/ ]1 A/ u7 [9 S* e5 R4 i4 q. h+ i
  83.       iEOF=fscanf(fp,"%s",szTempName);1 u8 O6 Q% E+ V3 }( K
  84.       strcat(szFileName," ");  G7 \! [0 [6 _; C" d0 f3 V8 P1 Q
  85.       strcat(szFileName,szTempName);
    2 K- G9 {) @0 F3 n7 b- U: e0 d" X$ u
  86.     }+ {- j, ?( U! X
  87.     if(strlen(szFileName)>=1)6 a% j9 s# T0 {% j% Y7 t
  88.     {
    ( Q  _* F( q* N( G, O
  89.       szFileName[strlen(szFileName)-1]=0;, H, Y) Y" A; }. K4 l
  90.     }
    % u2 p  K  t" R) Q/ T
  91.   }
    1 V: L) [- D" d1 y9 \5 ^0 @( o/ _
  92.   return szFileName;0 ]6 {, S$ J8 F. t
  93. }
    9 _) U* [3 x9 U6 D5 L# j

  94. , g5 e* d% F( G2 i9 G
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile), y  O: w* O5 y# e, f
  96. {7 r5 P2 }$ R9 \4 c+ b
  97.   FILE *fp;) X) e, k8 K6 v2 L
  98.   char *key=NULL;  V" v% A/ N4 M3 d/ z- l1 V8 W
  99.   char version[MAX_PATH];: c, {9 }. S3 v
  100.   LPUPDATEFILE file,olds;
      m$ y9 C& P( D! U7 Q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 J0 B1 Z% B2 h) f4 @. c3 w1 c; i
  102. , u% y9 T6 Z( h4 w3 y7 ^
  103.   UpdateList.clear();/ a/ e  a* f; _5 g7 J* T& Y3 H
  104.   UpdateFile.clear();
    & e$ m' w# I4 m3 X( ~
  105.   if(GetFileAttributes(filename)==-1) return false;9 k. R1 S  O/ q5 a4 ?, b
  106.   if(!(fp=fopen(filename,"r"))) return false;; l0 e# {' g* d# }) a( v
  107.   fscanf(fp,"%s",version);
    $ F# M! v" r3 F( M! l1 L2 l  g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ ~% A: |6 x3 L  D" w1 z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    8 k+ \# R: K  {& V" n
  110.   {. C! d& ^' x- J  l8 a0 r  z
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ) E) V4 C! ~, B( o& a% k; I
  112.     fscanf(fp,"%s",file->path);
    ; X7 H( o/ _; @4 N# Z
  113.     ReadFileNames(fp,file->file);5 b; o7 B' ~2 F  i1 Z
  114.     strcpy(file->full,".");
    ! P7 m0 |; Q7 H. X8 d9 U, w
  115.     strcat(file->full,file->path);
    2 u" a5 Y4 N  J+ d4 F
  116.     strcat(file->full,file->file);
    ; l5 U! w. k2 _3 s" a3 M0 m3 H4 [3 X
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), e; ^, f8 q3 p- H6 ~" r
  118.     {
    & S( W; q4 K, W3 k! t
  119.       file->vers=(float)atof(version);
    : }- @  P) f/ w) O* J: w) ^
  120.       UpdateList.push_back(file->full);
    7 v; H# x  ]6 e: l
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  q- w, _$ {; m2 x! N" y! p
  122.     }
    1 [' p5 n/ D: S8 E$ _
  123.     else0 E5 [8 @1 t6 H  N; f5 p* g
  124.     {
    7 W; W7 C" c; A% b4 e! l2 x) c
  125.       olds=(*p).second;) d! n& T, o7 c! [8 T+ D
  126.       if(olds->vers<(float)atof(version))
    ( m! h. o9 F4 \
  127.       {' ]2 [4 D- D5 M, q' K+ D, C- ~: \- A& W
  128.         olds->vers=(float)atof(version);- ~& ]( |+ p' b0 O4 m
  129.       }+ F3 k0 k5 a2 S  M4 a$ @
  130.       free(file);2 |+ b" g/ _3 z. ~( |( v
  131.     }& z5 G' A0 {5 S% t. o9 Q6 O  e
  132.   }
    0 E6 I- G: b$ _2 v8 e1 J
  133.   fclose(fp);
    " X  j8 `8 V3 e
  134.   return true;
    " G# p- w& Z; A1 ?
  135. }
    9 P3 D+ g6 T9 U/ F" M0 B& r/ f+ n! O

  136. " c' U  s4 e( I4 I( y- c- X0 n7 \6 x  o
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
      A- H$ U9 U( P5 w  H7 I# g
  138. {% p9 R7 ~1 A5 Q& T% x
  139.   TCHAR  szFull[MAX_PATH];
    4 a) R! X2 A0 n
  140.   TCHAR *token,*inter;3 W% B5 ~8 Y3 Q* r  U7 U0 \
  141.   *szPath=0;
    9 H7 U5 a  ~* N
  142.   strcpy(szFull,szFullPath);6 x2 Y. f& i' f, v
  143.   token=strtok(szFull,"\\/");  A9 k0 S  [8 l, Y9 O0 l& w1 X
  144.   inter=token;
    # p; \! ?8 l: k5 b
  145.   while(token=strtok(NULL,"\\/"))
    8 Y( ]+ D0 h$ a/ L* \9 c
  146.   {# S/ L% W! H+ R2 J
  147.     strcat(szPath,inter);
    , _: W3 D% }+ A+ u* D: ^4 b3 u) z3 [
  148.     strcat(szPath,"\");
    6 L" g6 z8 h) a0 V9 D
  149.     inter=token;
    ) G1 A/ i7 `) }" ~
  150.   }& C0 E7 y8 u  F* k8 q0 \/ i
  151.   return strlen(szPath);8 j2 l' z8 ?. @8 I
  152. }8 l# l$ @& h) o

  153. - V0 V! T- |( q" c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)3 Y% d4 s& g7 l1 S+ k
  155. {
    1 g: E' z0 z  e  w6 v3 i0 U5 w) Q
  156.   DWORD attrib=GetFileAttributes(Target);
    8 [# G( q- F% J* R: z
  157.   if(attrib!=-1)  ?, _/ N7 U! Y4 _  d
  158.   {) S8 w7 {; K9 j$ H% _
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    4 c: m$ B! x' l
  160.     {" Q& ~! F, Y. O, K
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);3 {+ G, n6 v+ B! e# n2 U7 C# m
  162.       SetFileAttributes(Target,attrib);4 X* Y8 y, J# ^2 b/ s
  163.     }+ f+ S8 l: p  |+ K  W
  164.   }
    . M- N' Q( d, o; m
  165.   CopyFile(Source,Target,Erase);9 A& O+ B6 ~# ?
  166. }
    " m: E6 _( A' t6 ]
  167. 9 I" |  {( E, ~/ f! [0 }
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)$ ~$ F0 ~1 S2 g3 r
  169. {0 ~& n8 L7 C' ^2 M- T+ {
  170.      FILE *fp;1 i  Q$ O; k4 g: b' L' E- E
  171.      char  szBuffer[8192];
    8 g. k6 u6 G7 C8 W" d1 \+ |' N- K
  172.   va_list  argptr;
      z# {+ F! m$ R/ ^) o+ i

  173. ( z( g7 Z2 M3 p
  174.         va_start(argptr,message);3 i% b: {& `) P& z0 T
  175.         vsprintf(szBuffer,message,argptr);
    7 B3 g( O4 X( A( p/ v: S
  176.         va_end(argptr);% i+ P: n( h# A* l0 g' {6 _
  177.   fp=fopen(FileName,"a");( s. w9 p/ a6 R3 }
  178.   if(fp)+ {9 D. ^! B, S/ X8 f
  179.   {0 d* r1 X4 C2 e. A1 e8 A
  180.     fprintf(fp,szBuffer);( L" t. ?& m- O; J+ [8 N
  181.     fclose(fp);
      o8 w7 J( r4 W
  182.           _flushall();
    $ A* z/ V  c2 U: Z0 Q. ?# |& t
  183.   }0 Q' D, ?' f5 p  S
  184. }. f* X) L: U" J! M0 k$ l

  185.   n. K2 Q- n- _, J
  186. BOOL CRevAppApp::Fclearf(char *FileName)+ u$ b0 @' R9 z
  187. {
    $ y& z/ P9 Z& a3 L; w6 G% H6 u
  188.      FILE *fp;' U9 W( W! n: d! C0 k0 U/ P
  189.     DWORD  attrib;
    5 H; L* @% ?: P! O0 n+ k
  190.   attrib=GetFileAttributes(FileName);
    - k, t2 M3 g7 E6 m) n. z3 K. \& D
  191.   if(attrib!=-1)3 u4 N* Y4 [/ y) i3 X
  192.   {
    9 O- T, z5 v& V6 s" E% X
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 S$ Y; n& b: r$ T" F6 K
  194.     if(!SetFileAttributes(FileName,attrib))/ z% N  A* ?+ M% G9 [9 t4 |1 C
  195.     {
    $ k; @8 ^1 N4 x' m2 ?% l1 d
  196.       return FALSE;
    . Y, [3 E5 P: [( U
  197.     }3 {) r; r" ^( N6 L7 x
  198.   }
    + P; n. N5 k0 d" N9 W# d- c3 `- |
  199.   fp=fopen(FileName,"wb");2 L1 _* r9 J5 ~. @4 M/ o
  200.   if(fp)
    ! |6 v2 J* ~6 L! |' q  Y3 T! j; ~
  201.   {
    5 e) z$ N9 p- o/ H% p, [: I( Y( t
  202.     fclose(fp);
    + B' F9 w8 |9 C- F! S
  203.   }
    6 e, D  _- P. ]8 Y6 z
  204.   return TRUE;+ n) K% w2 ~! g8 Q( F
  205. }
    3 x8 w4 @! n# A  h

  206. " \9 E% Z% i6 e9 e/ c
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 s& X4 [8 N, Z( G$ o' s
  208. {
      |2 B2 m6 ~% ?( c
  209.   char filename[MAX_PATH];
    4 {: w( |) H1 }$ S: s
  210.   LPUPDATEFILE file,olds;2 p2 W$ i- M1 w9 v8 z2 N$ Y2 ?
  211.   std::map<int,CString>::iterator i;) u# ~* m& r3 ?+ m4 U( P
  212.   std::map<CString,LPUPDATEFILE>::iterator p;, C$ i8 q, ]' R4 T3 i% D
  213.   std::list<CString>::iterator l;
    # V& ?! `/ `& N, W

  214. ( d" f! E3 N  I8 t" U) P* |2 k) {0 ~
  215.   if(bFirstUpdate)& M: x/ _9 t) O0 v
  216.   {8 P8 w" {7 _# @" h) g
  217.     dwCurrFile=0;4 K+ P6 c  r* B- @
  218.     bFirstUpdate=FALSE;6 @3 J6 C! w" J( k+ Q/ j% t/ K1 s
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
      @7 R, r' {3 G; C- s
  220.     {
    5 _  v' b2 M4 y8 H  K- o1 ?( z
  221.       dwTotalFiles=UpdateLocal.size();# A$ M- z5 ?8 a6 |" f2 ~, h! y) a
  222.       dwDownLoaded=0;5 j5 [5 ?, D+ Z/ q1 C
  223.       bSilentStep=FALSE;
    ' v5 l! L9 T! x% p5 r
  224.       bCompressed=TRUE;2 k7 Z. g9 m$ X/ L$ g
  225.       strExtLocal.Empty();
      b, i8 U: V7 P
  226.       strFullName=(*i).second;% R5 R, r* r* f& Z6 k2 A* M0 w5 j
  227.       dwProgramState=AP_CONNECT;
    " X) X+ l1 H6 P& y- g
  228.       return TRUE;+ J2 m2 W) M( S3 C# v2 M# T: T
  229.     }
      T5 k; z$ }- G+ L; f
  230.   }
      E6 N! ?1 b& x( d7 W
  231.   else if(bRestartUpdater==FALSE)
    ( o; A0 M; @6 A( l
  232.   {
    6 r) n6 h( {8 M; O. f! P: \
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( y0 b4 U2 F" o7 x4 R6 ~
  234.     {- E3 V+ ?7 K$ W  [. o
  235.       file=(*p).second;
    ) c! }4 B6 S5 i& P7 }  S( A
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())1 T$ ^; E2 N# B
  237.       {
      @8 `  X4 c; E+ Y* a7 R+ _
  238.         olds=(*p).second;" W% L# P8 k3 X9 l9 E+ ^$ K5 d
  239.         olds->vers=file->vers;- w4 m. A# U! N1 i
  240.       }
    4 w% N& G7 `# S: V% f0 c
  241.       else
    ( Q4 w$ N/ O7 i' ]7 V
  242.       {
    . E5 ~! J/ n# j* o* Y
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , }" k$ O) J( {- r  s2 L% b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  H+ O6 V! F: L7 m4 G$ b; N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 a' ^6 j& y! d* V$ g
  246.       }
    9 s! p& E. A8 ^- |# }8 ^/ ~1 l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");1 G4 l  V- {2 Y3 g& T& r# H& o2 A# a4 I
  248.       sprintf(filename,"(%s)",file->file);$ Y, R4 e% D0 {+ Z/ I4 d' f' N
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " @$ D/ }# @4 l1 R3 M
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 ]5 v% W# L5 w' O
  251.     }: S( D9 D2 Z/ p+ a7 Y1 ]. |
  252.     dwCurrFile++;
    9 g/ x- \- ]; r& Q$ }9 O
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ! l: M" t( O8 e) N- |4 ^$ Z
  254.     {+ m7 o" g; a+ H7 ]
  255.       bSilentStep=FALSE;
    3 \8 L- F$ ]' {  r. u
  256.       bCompressed=TRUE;
    ) @% t& v6 b( n
  257.       strExtLocal.Empty();, T6 n1 z" J" p* m% y
  258.       strFullName=(*i).second;
    4 u8 R8 V- j1 _# f1 ?* M
  259.       dwProgramState=AP_CONNECT;
    3 a! Y# E* m. m2 R( Z  A* v1 i
  260.       return TRUE;  S; j  h3 a+ D
  261.     }4 y: W) }1 w# z+ l8 @. U
  262.     if(!bRestartUpdater)
      a! K8 X/ T" x
  263.     {
    7 N8 c0 M) e( ^/ _: {0 L; h
  264.       int iCurrSize,iFileSize;: `# _5 ~. H& v. c) T! D
  265.       iCurrSize=0;
    7 U8 X; Q: d/ Y4 C! ?. e5 F% b
  266.       iFileSize=UpdateList2.size();
    + a% j% }4 H3 C8 E8 D* v
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 `4 S4 R& j* t, q5 n: c; H$ w; u* z
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");; q7 _+ Z8 _* |% m5 X/ Z
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 c" p  G. {/ ~
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, z8 K% b/ g, q4 c5 B# R6 |! k
  271.       Fclearf(".\\update.dat");0 P1 U' E, U! t6 C* \' |) h3 |4 `
  272.       Fprintf(".\\update.dat","Bloodyf\n");: J. f% M8 V( m( m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)8 F, I& a+ D( T2 A: \
  274.       {
    + D: ?% |  Y5 Y" Z9 t; G
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())7 v% x2 `$ p8 x7 c0 k
  276.         {
    $ X' v/ C+ Z3 L: O
  277.           file=(*p).second;
    8 f) A" ?  C4 K% Z
  278.           sprintf(filename,"(%s)",file->file);
      U9 q+ r1 B/ _! n# p5 v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);+ }9 a6 d6 K, Z3 O. x- X
  280.           iCurrSize++;8 }8 [/ c4 t* q; G: I8 A) U7 A9 A$ M8 C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));" e. N9 M, m9 v) n4 n7 C4 W. C
  282.         }
      a  i0 L3 e& h$ r& ?
  283.       }
    ; K0 w0 d/ u9 ?$ j! U
  284.       unlink(".\\update.txt");
    ! B2 r, `1 x3 a& k1 }6 d! r% u
  285.       unlink(".\\update.tmp");  \4 O" M1 W! @' f/ l# d$ D
  286.       Fclearf(".\\checkversion.dat");
    : i& Y0 N) u. g! a& q; n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( z/ ?7 c3 I0 F  L0 l4 s
  288.       if(UpdateLocal.size())
    ( O8 \, q8 m* _! f% e
  289.       {
    5 J% H9 |2 E7 r3 S+ ~
  290.         UpdateLocal.clear();3 h% l! |+ |3 a; l
  291.       }
    6 X' P( i9 a; p/ ~6 Q5 Y* h& h
  292.       if(UpdateFile3.size())) Y. I9 e$ \% ^) e/ A! H, _- B
  293.       {
    . g) L5 T% d& E4 ?4 [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 Z7 |6 n7 O. H+ X. f
  295.         {
    1 r7 y- H) ]; K* D4 Q6 V
  296.           file=(*p).second;
    3 W# A: H+ }1 B. i  t& b/ m  j1 {- [
  297.           free(file);
    $ @9 i1 K- x- h# I
  298.         }
    * U1 F' |) x& x( {0 F
  299.         UpdateFile3.clear();6 ~+ A" a& q) `: {# ]2 K0 D
  300.         UpdateList3.clear();/ _! M' `: X' R$ X) @/ `: r
  301.       }/ S4 @) H) Q4 S
  302.       if(UpdateFile2.size())
    0 T; L! w1 R, Z+ K3 p
  303.       {
    $ ]- X  R0 ]' Q9 t- F; W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# ^" c- ]: h1 C& J% m) R  F
  305.         {
    4 d+ \# g! }( ^3 N, {  |  i2 k
  306.           file=(*p).second;! Y! k% Z* t: I4 c0 |( m/ X
  307.           free(file);2 n" ^7 p, b% }& e* i: y. L
  308.         }
      e/ C7 t, g9 k2 w  O# [% {$ A
  309.         UpdateFile2.clear();  R5 ^9 R  \' T5 w5 {- R* k) j
  310.         UpdateList2.clear();
    1 z/ ^6 V7 f8 O1 x/ ?. K7 P
  311.       }$ N7 Z1 N9 I" N6 q) x2 X
  312.       if(UpdateFile1.size())5 c' V/ H1 P. V# T% S  g
  313.       {
    1 e8 k: Q; C  x; N
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++): |6 a2 }4 `4 b
  315.         {0 z& c: r+ [& z
  316.           file=(*p).second;5 ~/ @, c3 y7 G1 g5 v& @0 ?
  317.           free(file);
    8 t+ ]" ~; v% D, f/ ?; c, R7 K. ]
  318.         }& @, y4 Q+ K3 E4 I  ~
  319.         UpdateFile1.clear();+ x; z2 _! e1 a2 V% ~% m5 M
  320.         UpdateList1.clear();
    7 _! g0 |4 f3 `3 o* G1 {" C
  321.       }
    , O: T, w4 n" K; w' C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 J5 e' q: N& {! ]' o8 C
  323.     }
    - Q: F$ Q  ~" K4 H8 l+ M, o% X
  324.   }
    - |* }& ]" [! F$ q- t- ^3 f+ p
  325.   return FALSE;1 |4 H2 q/ i: a2 c
  326. }
    . s1 I' g) ^  a- W( v; q+ `5 ^0 U

  327. # m1 q8 V" m$ K: g* X; Z- b2 M
  328. void CRevAppApp::ClearAll(void)
    & p3 Q$ `& p3 ?: @1 _
  329. {+ Z5 E' Z1 v8 b5 X/ W3 @& D
  330.   LPUPDATEFILE file;$ E; s6 K9 ~  g" j! I" K' c
  331.   std::map<CString,LPUPDATEFILE>::iterator p;6 J: @* t3 K" F& d9 Z' U! O6 E

  332. % C( m8 f; {& i
  333.   if(UpdateLocal.size())
    " T' N  V3 e: n. U# C
  334.   {
    # k/ i6 {8 n5 X. m, {5 ?
  335.     UpdateLocal.clear();+ f6 o# M- M) }- M; ~) K* i
  336.   }
    ! U9 k2 I# N# S8 _7 J' l
  337.   if(UpdateFile3.size())
    ( ^% b$ K3 g: E3 f
  338.   {0 U8 t' Z# a! D7 k. k
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)6 i5 z/ o: C2 U, Z' P# F
  340.     {7 V2 k+ R8 T( b
  341.       file=(*p).second;/ l2 S! a# N( l' m# U" [( a
  342.       free(file);
    / B$ s! y, Y: _# Y. M
  343.     }4 N, o9 \9 d7 }* z! f% B9 L
  344.     UpdateFile3.clear();
    0 U" O6 Q6 k0 F8 v$ i) e
  345.     UpdateList3.clear();+ j" R: V/ s, ]
  346.   }( z  n" ]7 R. ^3 G' P6 N
  347.   if(UpdateFile2.size())
    , \3 O# O) \* q7 K
  348.   {0 A0 N" c; d' G3 M
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& H$ z! J5 D# p8 A% [" N% y9 ]9 N
  350.     {+ D; |  R8 v' X; D& N8 x
  351.       file=(*p).second;4 t9 m5 Y1 q; I( R
  352.       free(file);
    9 j1 l. d5 l' g4 n& O) g+ X
  353.     }8 Q8 v% L% K2 w
  354.     UpdateFile2.clear();
      K5 w" U' b- x& u) g4 i
  355.     UpdateList2.clear();
    ; J9 g# a4 k' n
  356.   }
    4 @1 X$ K+ Z) q/ |7 G1 T/ ?" g
  357.   if(UpdateFile1.size()); Y8 w6 {! R1 ^2 R
  358.   {
    + v2 m  M8 H+ U8 \6 c
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( ^/ I0 d/ j, X+ K* T
  360.     {
    - z# a# ^8 c5 h* `2 s! d/ W/ \8 \5 l
  361.       file=(*p).second;
    6 r: A5 r$ H. i3 B
  362.       free(file);- D( G+ t# N5 l- e, I3 }
  363.     }% `  `# w1 l, R# a
  364.     UpdateFile1.clear();
    2 `( O- \+ z0 w3 R9 d  w
  365.     UpdateList1.clear();
    ' L3 K1 }$ R4 Z4 ]. M) \: [+ ]
  366.   }
    # H. g  R  o1 F! W( U; _( r
  367. }  0 e- \/ X0 y. k6 V& h5 P
  368.   
    - X; N1 _% s, q( ?- U4 P
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . ?0 s: j1 ~% O
  370. {2 S, W! U4 Y" x: u8 \
  371.   int c;
    # \8 w& v1 J: `: F9 {( t- P1 h
  372.   LPUPDATEFILE file1,file2;! `! z2 U" i' t" N9 H- y4 c' J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;( @  ]. j  a7 _/ b6 B% P
  374.   std::list<CString>::iterator l;
    : W+ P! |0 z( l# U# h2 Z4 L

  375. 6 T( O; ^; A. A3 a  D. b3 K
  376.   UpdateLocal.clear();5 q, G4 P8 {& V1 T4 f$ ]. T: \3 f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);1 a' {5 T- e2 W$ B5 f
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - }, j! x0 o& Y% L
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    0 G5 [* d* M, g  a( a: E
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# u% B. ?  D# c6 Q3 \3 u/ ^1 r
  381.   if(UpdateFile3.size())4 B3 a& m5 k6 k8 W8 ?
  382.   {
    ( m: ]: x  t- j! j1 v
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    5 q4 k- R4 n! u+ H
  384.     {
    : j, c3 C0 J7 j  r: H
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; B+ q/ C: f0 c
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 [: A# r0 l& u, Z7 r7 [* v% [
  387.       {
    2 ]  w7 k/ t0 T) l: e* h
  388.         file1=(LPUPDATEFILE)(*p).second;
    8 t  V! M- K. d, n
  389.         file1->vers=file2->vers;' O# f  E4 F. d# {' n7 q
  390.       }% c3 o0 a) F9 `- s  [
  391.       else# c$ F" c) ^* g/ {# m8 u; i
  392.       {+ I+ R7 y5 u/ j! r  X. }8 z- J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 u9 T5 r$ y6 k9 \3 H! z: j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 A( F+ d' m* |4 `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    5 Q* `. P+ G/ g  u% Y6 _( l8 q
  396.       }& d1 T! N3 y* _5 h- ?+ w5 M
  397.     }
    7 K% x4 a3 c# C) [! M8 g6 J
  398.   }
    " h5 H7 e1 o, a
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 _$ H. }0 ~& n
  400.   {
    % ~4 O2 h3 `3 N8 _! s7 P- r# }. K
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 y# j$ G9 h* A8 G9 Z
  402.     {
    : a+ J7 K% D4 x+ C
  403.       file2=(LPUPDATEFILE)(*i).second;
    # J! v& e7 |$ c0 Q4 e* l3 g3 [
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 z( L/ {2 x1 ^* N6 L& w
  405.       {$ K4 O' E( t% s4 p9 M! w
  406.         file1=(LPUPDATEFILE)(*p).second;
    * I; j2 o, w7 k- W$ J6 P2 S
  407.         if(file1->vers!=file2->vers)
    9 i( q/ U0 q  @
  408.         {& A; d; o* G  W9 X
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    # ~0 \, Y* ?. ?% x9 k) X
  410.           c++;
    ! I) r! A0 @1 W1 [: n- {/ k! n
  411.         }3 V2 _7 _! O( m% X3 Q
  412.       }! `% K! {2 f1 \1 Q5 f
  413.       else
    " {- _1 d# T9 J) M
  414.       {
    ( O/ X$ m0 F& v( N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 [# }, ]& ]* Z8 X
  416.         c++;
    $ t2 U6 a  a! I, J1 o
  417.       }3 H3 y" ]0 t! P2 |
  418.     }7 p4 H" Y4 D# Y. y' f' f
  419.   }' P5 \. i, U" E# `3 w! M4 H5 @
  420.   unlink(".\\DownLoad\\update.txt");4 ~- f" \* i& x8 V1 Z2 O
  421.   if(UpdateLocal.size()) return TRUE;
    ! L) n! ?2 A- I# [6 P3 u4 ^  t
  422.   else                   return FALSE;" _! o2 P0 ?' P; T
  423. }
    ' Q. N6 u5 K- U  |. y9 W- l

  424. . K! R' ?/ r- }4 G
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    . g9 e' x* }, o1 s) {- f+ c
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"* m7 ]+ ^2 \6 S8 @2 `; T
  427. ! z1 z, D" y5 N
  428.   d4 I/ ?7 Q! b7 c8 |! _
  429. , N% u* A5 k7 \# |2 I2 V) T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    2 e# m- w- A: `$ {0 k- L, v2 u
  431. {! {3 L' ^8 x- ]$ t# a" n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;! f6 f3 n7 h8 l# I% ]# {5 k0 c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    1 D; Y' M- j+ |% f* g
  434.   {
    4 |5 P% G1 H; f5 j- z; n$ t' R& R
  435.     char szLanguage[50];: {% d$ Q5 D9 |/ y' i" R
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ( f2 t5 ~* E" p7 o! l/ ~0 w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) d2 I4 h, G0 v- O1 q1 M: t+ p
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    . A! ^/ w: k: p5 e5 t
  439.     else                                   m_iLanguage=ENGLISH;
    + e+ _; s/ }  H$ \1 g% p5 @
  440.     char szRegister[100];8 D9 n/ J+ k7 X6 j7 v1 ~1 l. E6 u# D
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ' F* z- g: L1 K6 K8 n  g! p5 K. z
  442.     strRegsName=szRegister;! n8 `+ B2 K2 o% R0 `1 U
  443.     char szPatchURL[100];
    4 x0 @* `2 q$ }3 Q$ w+ h& g
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    % g# i( F6 |3 t; |7 }
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    . ?. e6 Y( w: e) j1 [
  446.   }
    1 g3 f+ g: g. l: \
  447.   else
    3 k' C. N$ i$ p) E1 v, j
  448.   {
    # U( c: Y- t2 V# g
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);- K5 P' m' n0 V' G: \/ d0 W3 {
  450.     strRegsName=DEFAULT_REG_URL;
      f; v3 w4 K# b) p- Q  o
  451.   }
    ! L) Z6 N1 `+ Z# @' F9 N+ h
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    4 P' z" F) [1 ~' o
  453.   {8 ]2 v' k6 |/ q# H( M5 w+ S
  454.     char szIP[50];
    # U' B, s  Q; Q' i
  455.     char szDIR[300];
    5 Y8 Y5 e  Q+ N
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 d% ^( B% i3 `, k: e6 _! W
  457.     {, M+ H; r# h( U  v3 v! }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    - W- P8 o2 M/ M! c7 ]
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! Z4 G5 R4 A- G7 t8 e5 b
  460.       strHostName=szIP;
    5 d3 H2 Z7 C9 j+ m7 _/ X5 {
  461.       strHostPath.Format("/%s",szDIR);% O5 Q$ `  q; p) P9 ?( a
  462.     }
    9 \. @1 x/ k# V9 D/ d# q6 ]( o8 j
  463.     else
    8 y* E! q' M) e( N
  464.     {
    3 N+ Z4 s; C6 C7 ^2 g( L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % x0 C6 e# {2 p  z
  466.       {
    # k2 M6 O. S) Y" N
  467.         char szLanguage[50];/ v$ f  K. ]9 e; \; R
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ' G* Q: B5 v4 W5 {" E. B/ g- R
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 U- m4 ]. v0 Y% ]7 B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;3 m. c& Y1 [7 n# L+ r1 P
  471.         else                                   m_iLanguage=ENGLISH;  ]- f' e4 x' m5 o% M6 j- `
  472.         char szRegister[100];1 k% K# b2 i+ I
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , l' P1 r/ b8 Y
  474.         strRegsName=szRegister;
    ' @) l& j/ b, i1 g
  475.         char szPatchURL[100];
    , P% ^( Q3 E- ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");) q, s$ n8 o' y& e, M2 n
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);3 G4 Q  U) \. Q+ g& C
  478.       }
    * ^( r6 U* e/ r9 r
  479.       else
    9 |$ ?" U& A# i1 u# U0 U
  480.       {
    1 j, s, V0 g, k) n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . n- `# m" K/ F8 x3 |& w7 }
  482.         strRegsName=DEFAULT_REG_URL;
    " P+ o8 G& \$ \3 }/ Z  ]  R7 D
  483.       }
    " w6 z: c+ y* ~5 i" }/ Z! |
  484.     }+ W0 `6 v* z9 f4 c# E6 R% d! c
  485.   }
    " f3 b7 b8 O9 s8 V. C/ P
  486.   return true;
    , R4 @: Q8 t" S/ D6 q$ z" P. W
  487. }- b0 j7 {5 E1 u& E( q! |" o
  488. 7 ~8 D' V4 H" K
  489. #include ".\ZLib\unzip.h"2 N% N4 ^# W3 |5 `( X
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " z1 u5 T# ?# g4 o& g" w' h, y6 z
  491. /////////////////////////////////////////////////////////////////////////////
    4 C  M9 L! K( A! f3 }# A0 O
  492. // CRevAppApp initialization0 N7 v( y6 w, Q+ U5 R% s$ x

  493. " Z: j6 I% Q2 B9 x  X! r
  494. BOOL CRevAppApp::InitInstance()
    6 t. Q2 |1 V1 b& r% ?
  495. {- Q5 C/ _/ M( @; w: d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # a; o) Z2 S2 D% |! m# V9 q

  497. , u* D5 r$ r( E' a: Y/ O# c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);* T9 c% [& T& g5 C2 {
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))& L3 B7 n5 k/ V9 z& _% `
  500.   {4 Y- N$ S. W( L% Z; U' c
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    $ P4 K# i8 _5 m
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ( m5 _% Q, C) @8 |' \
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 U* o, _5 Z( x$ s% \8 j. }
  504.     {
    . U. r8 {' n# t8 U! `& a) d
  505.       strcpy(szPath,szPathTarget);
    4 _# j& ~" s9 B* X! i  w
  506.       SetCurrentDirectory(szPath);
    & m( M' x4 r+ D4 m: ]; C# H0 l
  507.     }6 o$ w: C; k2 _. z- I1 k- Z0 I$ V# t
  508.   }
    ) `# [& K9 r3 Z6 O
  509. #ifdef _DEBUG
    * {4 D0 z0 }( h/ y
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  B' N; n$ {. R+ F$ m
  511. #else  _# {" J5 l0 g: x% E
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    $ h- v! h& G3 f" M
  513. #endif6 N  v3 C7 `' J4 Z3 X" G
  514.   {- N" N3 `! k. G) c
  515.     char tempFileName[MAX_PATH];
    1 m4 r- [3 d, ^) t* F
  516.     strcpy(tempFileName,szPathSource);
    ) `* Q! i5 a" J& x9 r1 m
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % M6 D( u! F% C9 Q0 f; w+ n5 U* |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");- L2 p( g, C. j* e
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);- c- S0 Y: q" X& @1 ~7 b
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 y" D' f8 F* y2 |
  521.     return TRUE;! ~) l" Q  h$ y7 X$ z- z8 t& |% B. t
  522.   }
    5 c( V& s3 S. Z! B
  523.   // Nuke 0118: Delete run.exe
    7 k# b2 I( x" G' o1 a; `' Q: H
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 h! o& H2 K  D) |
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");) e7 ~7 O+ I* p$ c; |5 V
  526.   if(!ReadCfgFile("Config.ini"))2 ]; {1 x# e0 w7 p9 v
  527.   {  n9 |% r8 ]/ \2 {3 y6 i" |' G
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    3 L' }: K7 s& t5 P5 B3 e* N
  529.     return TRUE;
    ! P% D  S* I6 G" D/ s
  530.   }4 y6 {. J4 w1 a  L; F6 c
  531.   HANDLE mutex;
    9 d4 X. v; X3 k" h
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ t* K8 z5 e2 f% q/ F% T% K
  533.   {5 T1 `4 d% p( R& C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)  w( h6 K' E  v
  535.     {* m5 U6 Q  ~+ E  m- I
  536.       CloseHandle(mutex);+ N) g1 Y' z, L' s+ K$ B3 h( G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & I: X$ H& y5 l+ b% Z
  538.       return TRUE;3 U, L9 ^/ m3 v
  539.     }; n$ {3 u8 `6 k. [: a; }; I
  540.   }  2 H6 j% u/ ^$ c
  541.   CloseHandle(mutex);
    1 A1 g) x. W( U- |7 y4 J5 f
  542. " E  p% l: c$ s5 c1 o+ p
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. P% s- p% m0 e! r* m9 n4 k
  544. 1 L/ x2 ]1 }& X6 K' d. j
  545.         AfxEnableControlContainer();1 ?( E( }0 w+ {) _
  546. 1 w& x0 A6 J! w* K" X  O
  547.   bCanUpdate=FALSE;
    * g3 @) {" B* \: c; {
  548.   dwStartUpSteps=1;
    7 A" F  L* N' j
  549.   dwProgramState=AP_NOTHING;
    ) y7 p7 Y0 b2 D0 [1 `
  550. 2 [8 L- }" F9 }6 Z# I$ F' T
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    + t" p; X% J  a6 L; x) E8 D
  552. $ Z: K4 p# [. J; [% b2 @
  553.         // Standard initialization1 o; C" p: ]! R; N7 `
  554.         // If you are not using these features and wish to reduce the size6 `/ C, a  @5 m& Z, T5 _
  555.         //  of your final executable, you should remove from the following
    3 \9 I0 k/ B1 J1 E1 P( u% E
  556.         //  the specific initialization routines you do not need.
    : W9 p( h: l" [

  557. / r( r" s$ G. m$ d7 d' Q! q
  558. #ifdef _AFXDLL9 A% Z! I( l& B) ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 r( X4 t' y* s6 H
  560. #else! }7 z& S6 ^$ B
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ; s) r$ B2 U& G! w; ^; R% ]& s( d8 ?
  562. #endif
    ; u5 U/ d6 ]9 C6 C

  563. " Y. L; c5 l) N
  564.   dlg=new CRevAppDlg;
    - T/ w& {5 b8 C, K" n
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 x* j7 O# R; D: t  {) F8 E  _: c
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " D! D0 o/ A- e' n
  567.   m_pMainWnd=dlg;
    & ?# b, C# ~, D0 `* S5 O4 I# \

  568. $ W' M% {+ ^# D) V3 E3 _' o
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);* D% K5 n7 ^5 L* [5 r* _; x) \
  570. 0 J- m/ u, l: [  Q8 V' s$ A
  571. //  GdiplusStartupInput gdiplusStartupInput;
    + d9 L0 J! p# \! i- q$ z) t
  572. //  ULONG_PTR gdiplusToken;& ~1 Q' R) L2 m
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);, y8 H' W& x% E4 z
  574. / m  E- H3 K. U/ p) g% m4 y- ?
  575. //        CRevAppDlg dlg;
    " H6 ]) K' P% S
  576. //        int nResponse = dlg.DoModal();
    1 E! W' D9 V2 F$ g! O* \
  577. //        if (nResponse == IDOK)
    4 S5 f: B1 i- Y6 a8 H
  578. //        {+ ]0 G6 k( K9 H  F$ f% O6 [
  579. //                // TODO: Place code here to handle when the dialog is" U/ N0 ?+ c1 ~
  580. //                //  dismissed with OK1 [$ Q6 I0 Q$ s3 m2 c* V% F
  581. //        }
    % o5 y6 W  m6 X; Q& k
  582. //        else if (nResponse == IDCANCEL)
    . ~* x- M' M4 S0 l' ~% K4 I5 @6 }
  583. //        {- j; J4 |, T) v* t) [- E7 c
  584. //                // TODO: Place code here to handle when the dialog is
    0 V5 s7 g4 M! e
  585. //                //  dismissed with Cancel# t# c' u' D7 j
  586. //        }
    3 y, X$ x- y3 ^( P8 P: O3 y

  587. ! s' e# X, r8 G4 l3 k# O
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    0 }3 R; i7 L$ N
  589.         //  application, rather than start the application's message pump.9 X$ f$ D+ o% d2 p( w0 M
  590.         return TRUE;
    0 Y; b$ j  K8 W/ z. Q7 @
  591. }
    5 H8 ~9 K5 Z9 S& Q* g( @' ?* j( m

  592. ' A' o! l2 U5 U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / W. R  f& N; R% p. _' w
  594. {+ E* j. g/ @6 n5 I1 [7 A) f$ y
  595.   int i;( c" B6 C' `) {- H
  596.   char *szRet;
    # E3 d. W$ U( p$ {2 V! t6 @! |) ^3 \

  597. $ E+ l  \( R1 O! q6 ^, r! @
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 D  v6 }; J& b2 Q7 S4 O; ]0 r; P
  599.   if(sztoken)
    - o; D3 W$ H/ J% z0 \: H
  600.   {2 s2 \# u7 i% h9 B; r- l5 Q
  601.     szRet=&sztoken[itoken];+ l8 o3 i! Q0 r, ~: F
  602.     while(sztoken[itoken])2 h. a) c! \2 H1 p2 T/ D4 O' S
  603.     {
    % M4 K5 J+ R6 b* N4 Y4 E. e
  604.       for(i=0;i<(int)strlen(token);i++)
    4 k6 U! C8 N" [3 Z) C2 t1 m# e
  605.       {7 i. o' `  i7 r8 W0 f/ e: C
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 n% J4 n6 u" ]& j$ I0 v; u! I" F( C
  607.         {) E2 I& \  [+ V+ Q% V: f9 ~( k
  608.           sztoken[itoken++]=0;
    8 L- ~& O7 _3 a% {" l
  609.           sztoken[itoken++]=0;
    8 W. n0 Y9 S7 J" ~* L
  610.           return szRet;# w7 e' e5 M' m+ E$ y
  611.         }
    & r7 a% n; U/ I- b1 z$ |( d0 T& x: d
  612.       }
    7 {, c, S+ p$ e4 ^' H
  613.       itoken++;. o/ f: o8 S$ {$ q& ?( O
  614.     }0 T4 n% C) Z7 e+ F6 ]
  615.   }
    : {0 s% j( x8 g8 k
  616.   return NULL;  W( o8 R3 z" f6 H6 m  a& s8 B" F
  617. }
    . h1 q  p, C+ `

  618. " h! ~6 n* W: H# g6 z
  619. void ProcessProc(long Total,long Current)5 @6 d% u' `; ~2 ^* f
  620. {9 g! P6 z; n9 F) t: c' b
  621.         MSG msg;1 _) V; \( B4 h' f& i
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ' v; j* H3 T# ?' Z5 C+ K" E/ t
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    8 W- v' z0 _. }/ o0 ^+ G
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    1 q% d% z; Q  N5 h, b5 C
  625.         {
    ( d3 ^6 f2 D% Z( |& G9 j( j! T
  626.                 if(!GetMessage(&msg,NULL,0,0))7 {0 G$ o) G1 L- L9 b1 {* ~
  627.                 {
    ) V8 k( c, i% b
  628.                         return;) o( v$ N' ^# y4 F$ D0 r0 l2 e2 |
  629.                 }
      A$ o) @8 X  L; |. p
  630.                 TranslateMessage(&msg);9 d; ]) X3 R: ?
  631.                 DispatchMessage(&msg);
      R) d6 x% C* A5 k9 K
  632.         }        + [$ S! }8 u4 J5 X; Q
  633. }* O5 |( A- J5 N% O7 M& i- Q
  634. 2 V/ C0 Z1 \% K' L3 z( d
  635. BOOL bFirstChar=TRUE;
    6 ~( o( X8 {" \3 k# W& @+ ]

  636. $ b7 f4 j5 c* h; F+ L
  637. BOOL CRevAppApp::OnIdle(LONG lCount)' j" j6 m, Z# k. n5 v1 E
  638. {
    1 f. A/ Q2 t6 j  b- O
  639.         // TODO: Add your specialized code here and/or call the base class
    : u1 x: M0 @4 R$ F" K+ G& a: y
  640.   switch(dwProgramState)5 X9 _5 E/ [6 D) [/ l$ q4 W
  641.   {% v* r! W( S3 Q0 s; ?- j
  642.   case AP_NOTHING:
    3 O% K1 w0 Q" D( f. y+ V
  643.     switch(dwStartUpSteps)' f! G+ V% y, t) g- z7 T0 q( r
  644.     {
    ; L9 t! x; E$ Q
  645.     case 1:
    - H& G8 ?* Y# \/ @
  646.       {& b& X/ @. @% c  m, a7 C$ t
  647.         int i;3 s  a; p, d$ k" K# w$ j
  648.         CDC *pCDC=dlg->GetDC();. \3 l* Z3 O; k+ Z, B
  649.         HDC hdcwnd=pCDC->m_hDC;/ Q' X* P; D0 m
  650. //        Graphics graphics(hdcwnd);
    5 a8 f- U' m# s! e, ]+ M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");/ p$ x: Y/ s, ~# ~  L" |
  652. //        INT iWidth=bitmap.GetWidth();
    2 M6 m2 f8 ?9 h9 Y
  653. //        INT iHeight=bitmap.GetHeight();
    3 ~+ `2 J# N( u6 s2 S5 Y* ?
  654. //        Color color,colorTemp;3 b1 O! p2 W" B0 t7 a
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)! g) h: l' \# g4 W" R3 j
  656. //        {& i, J5 P( `- B( [
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    % [+ N' f. N( B/ I
  658. //          {
    0 ~: \1 _3 v$ s+ D; N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);8 s9 c: @7 M5 F9 @) \/ r
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' V  z! J, ?- m0 U# S( n  _
  661. //              (BYTE)(255*iColumn/iWidth),
    6 y8 s7 g  c1 l2 k
  662. //              color.GetRed(),1 ?' b% @- h6 A& u( C0 a
  663. //              color.GetGreen(),# s2 N& A( x( N7 i) a, P; Z
  664. //              color.GetBlue()));: [6 U) e+ p, U, V: {2 K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    1 d/ I1 {2 W. K1 h
  666. //          }
    : |4 |0 g9 y+ l
  667. //        }, ]) u+ @! U+ X# w# p" k4 A
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);8 P$ E) F/ l% `( d% I
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 U+ y2 H; `5 y1 C
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    " {- N. `$ p: e2 W# L! f
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! d. C3 s. }4 i9 e. @  b1 Z
  672.         for(i=0;i<240;i+=8)
    2 l1 V( I; b" v% y- f  |* ?7 B
  673.         {9 p( ?7 h* h+ e. \' ]- `' {
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);, {' p* M7 F4 h- W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " c9 f$ j) W7 ^/ d" c; j' }
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);) R5 P; n6 f! @, f
  677.           Sleep(33);8 \9 z# Z: I  P& ]
  678.         }
    6 f, j/ N2 i4 f+ F, w( I
  679.         Sleep(1000);$ x; F3 S. r) b8 V- z+ E
  680.         for(i=240;i>0;i-=8)( H$ n; w9 s3 Y" g. b% z' U
  681.         {" z* m1 P4 K; Q! x" `6 }
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);9 [' \! j2 i2 |3 E/ i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);. z( E$ u! P; r" }+ v
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# @4 [- L/ M7 V, P/ g5 W4 S1 e" u
  685.           Sleep(33);
    $ W3 V+ S# m4 f* c
  686.         }
    / w+ L5 B, A5 m5 m& i
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    * Q' P5 \1 ]( u! a+ r+ N6 o. P
  688.         dlg->ReleaseDC(pCDC);
    6 i$ {* B9 m, d3 F
  689.         DeleteDC(hdctar);( w8 p" `  N* e) r
  690.         DeleteDC(hdcsrc);2 W0 `. y; g6 U1 J# b" ~+ v
  691.         DeleteDC(hdcorg);
    , [6 g6 q/ S0 f( ?
  692.       }
    / ^9 Q4 \+ g5 ]# c, s9 q2 l
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - C0 ~0 m7 p, j8 v% O6 }1 B4 z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");8 y9 x5 R/ \1 L: f
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");/ z% J; G/ E; C0 G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    2 Y8 M- [5 i$ m0 [1 a, \
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 q4 X; W5 w4 N/ t. ]2 B8 j/ A
  698.       if(!Dn.Connected())* J1 ?' _& ]1 F: u
  699.       {" n- u4 ~" N5 I- }
  700.         dwTotalFiles=1;
      \6 |# g( O7 A6 u; B& X5 _3 f
  701.         dwDownLoaded=0;1 P; Y. S' M+ M" C2 m5 N6 s
  702.         bSilentStep=TRUE;/ ~4 X6 q; U( w( o- G4 ?* `
  703.         bCompressed=FALSE;3 @! b: a1 z% X5 q2 U
  704.         strExtLocal.Empty();2 X8 n; }- t1 M7 I* S; e8 l
  705.         strFullName="readme.txt";3 f9 O7 \* o6 J7 K
  706.         dwProgramState=AP_CONNECT;
    $ y! U9 A- v2 N* |- k
  707.       }* X+ l2 k" M! @& r( s$ C) E$ P+ ^( Q
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
      Y1 B( z& u. H1 e! h
  709.       dwStartUpSteps=2;- D9 X' z' R# L! c- N
  710.       break;. z& C( k9 |6 _' z  _# ~7 g' n
  711.     case 2:
    - k' d: O6 W0 n2 v+ Z
  712.       {9 L7 D3 D' h- S
  713.         int iEOF;/ n6 J8 k4 A7 o9 J# y/ A9 F
  714.         FILE *fp;. Z6 u9 ^$ ?9 [5 b  G# y8 f2 K, e* c
  715.         char szString[512];
    & V4 Y7 c1 E0 H2 |- a
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & i  a8 a; G9 B' V% z% ]* @; A. ]
  717.         if(fp)
    : m" d0 a: ?! B7 }) i
  718.         {6 a2 l' T. P& a6 x/ A
  719.           do, `9 e) _0 e+ y
  720.           {6 c; h; e& c$ g6 k
  721.             iEOF=fscanf(fp,"%s",szString);
    # X# J# {- A% X: C' l( @9 f& y
  722.             if(strlen(szString))/ y! F$ [( l% d, f& o
  723.             {2 O% d" T' l4 j$ X# `/ N9 j! G8 Q
  724.               if(bFirstChar)+ _! H5 G3 A' d6 W' F
  725.               {
    / p( z" }7 D4 J1 ]
  726.                 bFirstChar=FALSE;' l6 {  g/ S2 ], i) s
  727.                 bConnectIsBig5=FALSE;
    1 s  _+ V3 ?. F7 i; c! s
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;1 J' e/ A3 C! K3 [
  729.               }8 }" l: K4 L' a3 @( B3 B
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ) }+ [/ u2 m/ Q7 b$ l
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    , ^+ l. v( ^9 ?# ?! d, t- U
  732.               dlg->m_ListText.AddString(szString);. F& W* t+ E' V
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ x% u7 h# S6 l6 ~/ a$ i. N
  734.               *szString=0;
    - x2 S6 m1 O8 b/ b. w
  735.             }
      F; v1 W% `* I2 |9 b
  736.           } while(iEOF!=EOF);) X. @1 e: J4 ?# b8 A1 N5 R
  737.           fclose(fp);  K  r/ L3 B1 u) A# p+ l9 Z
  738.           unlink(".\\DownLoad\\readme.txt");
    ) C- q. `9 l, d" v9 Z2 K
  739.           dwStartUpSteps=3;
    , {% B0 S, j# ]; }1 R
  740.         }
    1 Q5 n" G5 p' b3 F
  741.       }* m: U' T; R9 c7 _
  742.       break;
    * N/ a! G) u6 W5 @3 K  l$ Q
  743.     case 3:
      [; x8 H0 \9 ]0 @0 ~+ q% a
  744.       if(!Dn.Connected())
    " O1 X, V+ L' R. Y, F' v# y
  745.       {! t7 c, K+ C7 `; N$ S
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);% b! V$ e* h9 z1 T" |
  747.         dwTotalFiles=1;
      q7 e5 f0 A) q( g* n
  748.         dwDownLoaded=0;
    0 J7 `0 @! e3 @1 L6 ~5 |
  749.         bSilentStep=TRUE;4 m+ u, |4 |- T2 @5 _5 c9 g# m7 y4 f
  750.         bCompressed=FALSE;+ t+ u. r! Z3 U6 J) W
  751.         strExtLocal.Empty();
    4 f1 R0 Q5 g$ }
  752.         strFullName="checkversion.txt";$ c& r* g( }9 E
  753.         dwProgramState=AP_CONNECT;
    # t, j: m7 Q* I  W4 x
  754.       }
    ) J: l+ L1 T0 k2 A2 g0 \7 i
  755.       dwStartUpSteps=4;* h. L+ Y. Y* H- Q# _/ P
  756.       break;
    4 r) @+ K* i6 G3 U
  757.     case 4:
    ' }, }$ b6 R& e$ K' c7 g
  758.       {
    % Z: U* E* B. y6 @
  759.         FILE *fp;
    6 ]0 _, N3 e& I
  760.         char szString1[128];  P: A! L7 w9 b9 W/ y
  761.         char szString2[128];/ F* {3 |) P7 O
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 q, e3 U: h/ q. n5 @, f
  763.         if(fp)% o# E, E& g( n6 T6 V* C7 g% j
  764.         {
    5 U9 S8 K" [; f
  765.           fscanf(fp,"%s",szString1);$ d4 u- \, Y$ e( |) N
  766.           fclose(fp);3 g6 ~, X1 T0 ^) K% T
  767.           fCheckVersion=atof(szString1);
    " [$ n3 J! j5 f4 {4 D  K
  768.           fp=fopen(".\\checkversion.dat","r");
    3 h4 C8 R8 J! z- U# v; g& |4 T
  769.           if(fp)
      K' z8 X/ ]5 R) T
  770.           {
    : c  |2 e& `! p7 o% j$ z/ c" ]2 f$ z
  771.             fscanf(fp,"%s",szString2);3 j$ t9 M* L! ^$ E: M" }
  772.             fclose(fp);# T" s. \4 m7 H* k
  773.             if(atof(szString1)!=atof(szString2))
    3 i6 a. J3 T) [- `' u
  774.             {& F6 y& s+ G* j4 I" Z
  775.               if(!Dn.Connected())4 [5 W# v8 h# ]0 y  o* b- F
  776.               {. }# y4 N$ Z' v9 X0 \4 B
  777.                 bFirstUpdate=TRUE;3 U# Q" T$ Z' C& z% W
  778.                 dwTotalFiles=1;
    3 e9 r: Q" R( T- e' }
  779.                 dwDownLoaded=0;8 s1 J# k. {( L: g1 c
  780.                 bSilentStep=FALSE;7 u6 i! `7 V9 Y* A- S0 s
  781.                 bCompressed=TRUE;# P5 x* C: Z3 {1 }! |: e- D
  782.                 strExtLocal=".\\DownLoad\";
    , S! I+ F' l( P5 @1 w
  783.                 strFullName="update.txt";0 L3 R. R$ I) r/ G6 p
  784.                 dwProgramState=AP_CONNECT;6 O8 D1 c. x! p- g
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! y# }2 q6 Y! _2 r6 n( s" ]
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 V5 O$ \8 `4 ^9 k$ y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    + g) O$ O  i+ G

  788. - Q8 E" h! v( \9 F- `# C8 t& N
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& m4 g0 Q: w7 i2 i) S$ H
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 m1 a4 [# c3 E1 U$ ~
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 Y0 I" K* g4 y' C! k, U* i! F2 }' o+ T
  792.                 {
    / g7 P! A: p6 r# N0 c
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");* R; |! {  u- u3 h! Q1 Q" p
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    4 y' ~) m/ [, N& C& T2 O
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # G) t- z5 b- _& q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 B! Q9 v# N4 V( z
  797. 9 @/ N( l3 s& F) Z, |
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! E; T9 u- q( l
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" o( f! \1 D* z; N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 A& u, \% E+ j( K
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 ~5 M% u0 ]( E: n: \3 u; f& V
  802.                 }3 G) k9 o, w1 ~- x2 ]1 ]# e
  803.                 dwStartUpSteps=5;5 ~7 e2 d8 X& f$ C! S
  804.               }
    " \5 q& |; n. h) A* A. f
  805.             }9 `/ n5 m0 l+ V# s# a; q  G" a& S/ \
  806.             else; M, r$ C( }, L2 d! |
  807.             {
    / V2 T0 Y$ E, H8 G+ R/ ?  r8 O
  808.               unlink(".\\DownLoad\\checkversion.txt");
    " S% S+ Z1 x" V. t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! q* F2 ]+ y' `$ ^8 A$ G9 {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ @; K; u' Y& @$ t" x4 W
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ w+ Q& h; }# x& c  ?6 w9 n
  812. 1 a. ?% f# p* u+ |1 C+ f5 p. o
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& G$ G; W9 t& ?" y% P. l3 C
  814.               dwStartUpSteps=99;' g3 M# Y9 H. M5 }* ]# g
  815.               bFinishUpdated=TRUE;
    4 n9 Q$ D1 R- O4 \6 B& A2 N
  816.               bCanUpdate=TRUE;# [; \# c' w" Q1 A' Z
  817.             }7 y  q  {: g, O- {: b4 b. H+ z
  818.           }$ @( Z+ P$ ^3 A% E, W
  819.           else
    3 K6 x. u) w* A* o1 Z, p$ G8 s9 \5 A
  820.           {
    5 J/ c  m$ d8 v3 C. r; ^
  821.             if(!Dn.Connected())
    7 h2 x# p6 j2 E4 _) Z
  822.             {. k( h% q6 U# @  [' K+ I' {6 H  ]
  823.               bFirstUpdate=TRUE;
    7 m7 _+ h8 k8 f1 u3 V3 V
  824.               dwTotalFiles=1;
    6 v% t6 t  E/ ~
  825.               dwDownLoaded=0;- t0 ~6 d/ X9 e# F3 ^
  826.               bSilentStep=FALSE;1 S# f# W, U; {2 A) K, t
  827.               bCompressed=TRUE;
    ( Y0 }; i5 E% M  s, y) N# O
  828.               strExtLocal=".\\DownLoad\";
    % j' m* p5 ^3 l8 k& ~/ H* F
  829.               strFullName="update.txt";0 c$ k, a/ l" Z# h  n+ M, Q" x+ s7 R
  830.               dwProgramState=AP_CONNECT;" w: Y+ k5 u+ c/ M; L. {7 R- d
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");+ s' F: o$ ^( G3 T0 v# [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    0 X3 k. M3 F% H) Q) K' j
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: M9 c" |, O7 h5 T0 F7 K3 o& i
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- ~4 z: D; Q7 F0 c
  835.               unlink(".\\DownLoad\\checkversion.txt");
    * `: F$ ?! k  f3 _8 d7 P  H
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)  A: K. h  {4 l1 x! B9 Y9 d
  837.               {
      s9 A5 E8 u6 a5 Z- m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 Y8 Z4 C* p: ?: e# c$ j
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    9 @% }9 F% \& K6 v
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");0 E6 B6 A1 K, I# h3 k, H4 Y! v
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % C9 M0 a  _  Z* y+ [' ]
  842.                 ) G6 |* I4 D5 ^* w+ E
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 O+ n) q6 b& _  t: [: y% ~0 _
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! x# b3 U/ }8 g
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    - \- g+ }" C5 K. |
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % C/ V2 \7 ]  Z- y/ q
  847.               }
    7 V" G& Q' V# X5 A# v4 `2 u$ K
  848.               dwStartUpSteps=5;
    # ]9 t2 T: e( K! _* \: B' g: ~3 @
  849.             }
    2 Y# n1 r: Z! }4 z6 V& }5 ?# G
  850.           }
    + K2 ~% d- `/ H
  851.         }
    ; y! u5 P/ z$ i, W) C
  852.         else, v% T! r0 y$ d3 Q9 Q- @) l
  853.         {
    ' U( x/ O# [' I: a8 H- f6 h
  854.           dwStartUpSteps=3;: _3 R4 W, G8 D0 W
  855.         }
    ; }2 y8 x$ M. O+ x2 }" T/ N  ]
  856.       }
    : g) ^  [- ^3 n' c
  857.       break;8 z! C. T6 ?9 V7 d
  858.     case 5:. H% E5 w! o3 m$ R% @
  859.       {
    & [# A4 F: `6 z" w+ D& L2 v& ^
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ h, |4 `; S* l& I
  861.         {" b4 R, E/ _' _+ \( h) r
  862.           int opt_overwrite=1;0 m8 n, W) G% K
  863.           int opt_do_extract_withoutpath=0;+ J* k, @+ X) t. q1 m: s4 V
  864.           unzFile uf=NULL;" k+ q. o2 y& \

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

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部