CSUpdate.exe源代码

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

4 K+ n1 s( `/ ^6 E& |
  1. / RevApp.cpp : Defines the class behaviors for the application.7 `1 ^  _8 S0 I3 f( i2 d$ U
  2. //
    7 d  d: A# G9 F

  3. ; X) `# i' _. n& N/ j+ H1 R' ~
  4. #include "stdafx.h"
    # ^. |0 O) ]2 E- B% M
  5. ) @6 S  O9 Y, e% U' g
  6. //#define UNICODE
    ) `9 [( v4 D1 _8 Z" N4 O+ L
  7. //#include <gdiplus.h>
    2 S) r( S" P4 L2 e: M
  8. //using namespace Gdiplus;
    $ [! `5 t! g. u0 }$ h, \3 [( z( X1 `
  9. 8 ]$ a/ E3 C; K1 I8 o' y
  10. #include "RevApp.h"
    - T2 j  z5 ~2 [, P
  11. #include "RevAppDlg.h"& Q4 y. E0 Y2 Q* T

  12. . S  t! U# ~' L1 D8 u
  13. #pragma warning(disable:4786): g" p  F, I% [
  14. #include <map>4 I, C4 L5 s4 x! V5 k* d
  15. #include <list>
    4 _- w1 b8 j# Q) Z3 u; h2 V
  16. #include <direct.h>
    $ g5 T. ~; N' k2 C) @: k

  17. * a3 Z5 A! t+ p3 W, F& `3 }
  18. #ifdef _DEBUG
    - Q! J; h, A+ ]6 k% c+ R
  19. #define new DEBUG_NEW5 a* E5 C3 E" g0 p# K
  20. #undef THIS_FILE8 a2 D% w& ^7 k0 M" Y' X
  21. static char THIS_FILE[] = __FILE__;( k  f/ }& k; W& g& W
  22. #endif
    7 U" I! x+ V4 C" j1 d: |, \4 q0 g
  23. #include "SkinResDef.h"1 m4 g/ n6 {/ D/ [& j: @- J
  24. #include "ChangeBG.h"
    2 [* [" c7 X7 C2 f; S9 z! m
  25. #include "AFXINET.H"& [/ V4 D* D# }& ^' S
  26. 5 S6 f3 `; i7 d- H
  27. #define TRADITIONAL_CHINESE 08 A& G! {/ g5 ]. P+ z6 N
  28. #define SIMPLIFY_CHINESE 19 x9 g$ h1 w: \- P
  29. #define ENGLISH 2: Z3 O5 Z6 x& o" @- I4 N8 S
  30. int m_iLanguage = ENGLISH;
    0 [/ S( F- T( y! k) o
  31. /////////////////////////////////////////////////////////////////////////////
    ( ~& D4 x3 s1 {
  32. // CRevAppApp
    5 l9 d5 j- y# h4 p: t

  33. , e! H; ]) V5 e; ~1 v) H
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 H6 Y7 M3 d9 |3 b2 l1 U
  35.         //{{AFX_MSG_MAP(CRevAppApp)6 E7 f1 B7 l2 |' x3 a
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.0 q$ T5 f  |1 b! x, K5 F6 F
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!3 w8 k6 ]0 n/ V
  38.         //}}AFX_MSG
    ) I1 z" m. K5 _. I( ?1 F+ N: Q1 E
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; z& C7 e) W; q$ E+ X
  40. END_MESSAGE_MAP()
    * m/ j6 o0 j$ n; r$ E/ b
  41. ! j0 R. B/ Q; U! e" q
  42. /////////////////////////////////////////////////////////////////////////////
    + h8 J- \5 d# N: E
  43. // CRevAppApp construction
      L" c3 j; Z+ v* t* R
  44. ; _: l8 l2 W/ Y4 p# w! D
  45. CRevAppApp::CRevAppApp()
    ; ^: C  ^8 s" N: A4 M( ^) b5 S" O( U
  46. {/ C. q3 z5 D) y8 [
  47.         // TODO: add construction code here,
    3 O+ K& d6 r. N1 B; F2 C3 o
  48.         // Place all significant initialization in InitInstance- \7 T3 }; \( U. M1 A2 r
  49.   bDisplayIsBig5=FALSE;* M: p- _/ ~( h
  50.   bRestartUpdater=FALSE;  R0 G. b  M6 q" C
  51.   bFinishUpdated=FALSE;+ y0 S/ U& [9 I; j- T% a) |
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 ?) |$ j5 B1 d/ b+ _$ |
  53.   InitChangeDataBig52GBKS();5 i+ A0 P! R% w' N- @6 E& W
  54.   InitChangeDataGBKS2Big5();+ w/ J5 Q' M  y
  55.         //
    % a5 \* K3 x9 Q" p% Y, v$ T
  56.         bClickRunExe = FALSE;2 @; [% B3 B! q
  57.         /// v3 ?! [5 e) N
  58. }# S3 y$ p2 W$ h4 z

  59.   r7 u- ^1 b' k( i& i/ G; @
  60. CRevAppApp::~CRevAppApp()
    ' e: Z' {0 m+ }" S6 g6 |$ m& f
  61. {5 f$ z! s8 T! W, X: s" Q+ p
  62.         // TODO: add construction code here,
    ) ^6 v0 G7 z" u2 M9 p. ?( ^
  63.         // Place all significant initialization in InitInstance- g' K8 Q) E6 a6 U3 Z
  64.   EndChangeData();; u9 D+ C* R  S- M, V8 u- U
  65. }
    3 O% g# H+ Z# G% j

  66. 9 b% N7 d5 |2 e+ G
  67. /////////////////////////////////////////////////////////////////////////////
    $ K$ o- Q+ U9 l' O$ f$ h4 j8 P
  68. // The one and only CRevAppApp object
    : h- l* v& H3 b0 j  g. Z
  69. ; l5 n3 [% }8 A7 D2 T! z9 u& j
  70. CRevAppApp theApp;
    ( f' L8 h% M' l: |; s

  71. 8 ]  G, S5 t6 m. T
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    , r; |0 z+ t, U$ ~
  73. {
      b+ D) ^* t6 i8 O) c4 n0 c
  74.   int iEOF=0;" D# O% l$ b( p" d4 z# S
  75.   char szTempName[MAX_PATH];
    3 n- d8 u, C1 p' o
  76.   *szFileName=0;
    1 M- Q* W7 H! {/ _& h1 J1 E
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , A. u  `9 `# S
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')! g  e1 ?& D, s2 @) q) C
  79.   {
      c! P  M0 W% ~( v  C6 b- H7 i8 V' G
  80.     strcpy(szFileName,&szTempName[1]);
    : M  v$ V, m# l! Y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    / l1 _, T0 T4 q: j* I( z" r
  82.     {
    2 d) H+ @. d' S
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " Y# |- U9 S; b4 A! O( S- G
  84.       strcat(szFileName," ");  f$ g5 v2 o  q
  85.       strcat(szFileName,szTempName);8 Q/ f; d; }) u7 U! o
  86.     }
    3 g3 r; I4 @2 A5 M6 u
  87.     if(strlen(szFileName)>=1)
    . i# U/ G& G6 P; M% J7 p1 P
  88.     {
    # H  _0 H0 m( u* \. c) v/ R
  89.       szFileName[strlen(szFileName)-1]=0;' t. F8 J  Z: V4 k. v
  90.     }( E& U9 c- f, a  \& ?4 U2 ]: V8 @
  91.   }
    ; `5 t0 v! Y) G; |9 s  t
  92.   return szFileName;6 B' c- \+ \6 n& g$ \1 A
  93. }
    4 J/ p: |3 w& r# s9 o

  94. 5 e" H& l- Z1 u9 l; o# V* `
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ! Z9 L+ a6 k5 @
  96. {
    6 f" q% w5 {4 @; w/ `# v) Q
  97.   FILE *fp;
    # b$ z  [. ~5 w( ]5 N3 H; i" E0 ?) h* V, U
  98.   char *key=NULL;
    " b; m+ T3 C- ?
  99.   char version[MAX_PATH];
    ) [/ e& C( W/ N! L! k' S: E+ g
  100.   LPUPDATEFILE file,olds;
    * ]- ?0 P3 V1 S. V: h! V: A) i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 P+ X& ^- t" o! ?5 u/ p) R6 w$ ^

  102. 2 j. L4 ]8 W% P7 ]
  103.   UpdateList.clear();
    & g; U* i8 C$ B1 Z+ y
  104.   UpdateFile.clear();. ]8 Q9 C* v/ E% ?1 a; ]6 _
  105.   if(GetFileAttributes(filename)==-1) return false;
    0 q) V( F0 [; B0 Z3 B
  106.   if(!(fp=fopen(filename,"r"))) return false;2 {) k1 h; Z' y3 I' T: j
  107.   fscanf(fp,"%s",version);; i4 Z& D9 o4 u9 ?4 f
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }" E" S, z0 J7 ^* i% [0 X8 z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    9 w0 |9 C9 W  ^9 P3 v$ c% V% ~6 M
  110.   {
    - ?5 [$ n' U. B" V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));8 s# ^5 X8 H( O" v* k3 J
  112.     fscanf(fp,"%s",file->path);# R1 x- r7 D4 d0 d, I
  113.     ReadFileNames(fp,file->file);; F. \) r1 x5 a9 b4 s  Y/ k: g
  114.     strcpy(file->full,".");
    # z9 V! z. i; B
  115.     strcat(file->full,file->path);, }* q/ _1 N4 R/ s& \& K
  116.     strcat(file->full,file->file);$ I9 u+ N, K8 k3 l, B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / u4 A; |1 m- g& @' n; m, C" P5 l
  118.     {
    ; Q# {! ~$ i' t1 N
  119.       file->vers=(float)atof(version);( A8 c% g& e: B
  120.       UpdateList.push_back(file->full);3 c' Q; @0 A  b2 ~# U3 C
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    - R: c8 e$ g% B% U5 \! y
  122.     }
    # |0 O( ]: d/ z
  123.     else+ O0 f* v1 \# v: q9 i8 d/ n, p
  124.     {
    ; P" ~- T! i$ X
  125.       olds=(*p).second;
    6 |% ~6 L: _% r2 m
  126.       if(olds->vers<(float)atof(version))$ R- R( y0 Z, A2 c+ T- d* a; i* t* h& Z
  127.       {
    ( `* b9 ?0 d3 i: c/ Z
  128.         olds->vers=(float)atof(version);
    5 R: d- l3 a, i7 i2 W$ v
  129.       }" y: B7 |4 V+ y7 f  I2 [
  130.       free(file);! z$ y% W* D  A$ G: k$ d* W8 i
  131.     }
    4 m7 g; |" k. @0 K7 m5 o) E0 Y  H- ^
  132.   }
    ' X/ S, i; K9 a( o, X
  133.   fclose(fp);
    ( I6 ], j$ ?; C6 K3 U
  134.   return true;
    : V4 Q# y7 u8 p4 f1 G
  135. }
    - I% r$ }, W( R* I4 H. K  \, F
  136. / V- F  Q2 k% e5 {0 Q
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)1 T$ T" b2 J. J5 i. a
  138. {
    . d8 w8 B; `" n/ K+ L
  139.   TCHAR  szFull[MAX_PATH];
    * p* a' M1 P$ F2 Y9 B+ I- E
  140.   TCHAR *token,*inter;
    2 u  s- W8 E' I! u. N
  141.   *szPath=0;
    , f7 u* w( I, l& s
  142.   strcpy(szFull,szFullPath);
    / e( p0 W$ E) Y, q' E3 M1 f
  143.   token=strtok(szFull,"\\/");
    8 B2 M/ A* N- b+ m5 N
  144.   inter=token;( a7 l7 {5 ~8 ]4 ?1 u
  145.   while(token=strtok(NULL,"\\/"))  ^( j8 ~) i2 b8 C6 u
  146.   {
    , ?7 J6 x6 y! W& l9 ]2 B$ \% `6 m( q
  147.     strcat(szPath,inter);
    1 ~! q# q5 l! z3 d
  148.     strcat(szPath,"\");
    % f$ n  C( [+ y1 @1 e
  149.     inter=token;
    6 T/ v9 R0 Y3 S) u) l
  150.   }4 I- p) P8 \- v3 V% X
  151.   return strlen(szPath);
    ( e9 N, v+ v- z3 U+ h3 y: c, j
  152. }+ x. E$ _6 `& w) q1 w

  153. ! n6 a  W. N3 z! d
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)5 p* z0 N/ V" u1 O8 o! |" ]
  155. {# Q# w: n5 p7 g+ z2 X# [
  156.   DWORD attrib=GetFileAttributes(Target);
    * [  ~% R. H# _! k  W2 T
  157.   if(attrib!=-1), K7 N/ S9 `4 F7 U5 h6 W5 Z2 e* d
  158.   {9 j/ H+ `7 k8 @! ]3 g1 ?' |" h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)); B, T+ Z5 v' Q. _; b; O
  160.     {/ }  H$ N' y! \7 v, M
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 A9 T( N) F1 D4 f
  162.       SetFileAttributes(Target,attrib);
    * N! f0 w/ B8 b/ r; p2 j2 o6 x
  163.     }
    9 ~$ s. d) ]6 J3 a& E* y1 h
  164.   }
    3 C$ `) b3 ]- [$ L+ k
  165.   CopyFile(Source,Target,Erase);4 V* c0 ?. A) U, D5 {8 R% M% F
  166. }$ l- U. R  ?" ?& w+ h
  167. + i. S! _4 k* @1 _
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)0 W, K8 r% _9 _/ {& N
  169. {/ _( F, b2 ]+ m' z
  170.      FILE *fp;7 Z6 n0 _3 Z! j- D' i: z
  171.      char  szBuffer[8192];
    2 r! d: K0 ]4 |$ \2 e
  172.   va_list  argptr;! o4 z& A+ M$ @4 Y

  173. 7 i3 i2 {2 b' S- a" C$ r
  174.         va_start(argptr,message);0 [6 M1 y# m7 T. _9 v3 _
  175.         vsprintf(szBuffer,message,argptr);. l" U3 U/ Z. G' D/ E
  176.         va_end(argptr);( U8 p3 k8 e! D2 Y
  177.   fp=fopen(FileName,"a");
    : P7 a" T/ z; v! P1 Q* T
  178.   if(fp)
    9 |; l: w$ z% r3 C1 _# R) D
  179.   {& j/ x5 b- Q0 c  L
  180.     fprintf(fp,szBuffer);
    - _& f% x$ z, R* u: i& f. c0 @
  181.     fclose(fp);
    9 c0 [! |  J" G, `* o
  182.           _flushall();3 N) f. X  Z- W8 y
  183.   }( P9 u# [4 [8 w7 u1 m& M
  184. }
    . ~3 ~- R* A) S

  185. & Y$ z+ L. V4 S9 H8 [$ L7 A
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 G& e" H: Y/ }2 R/ f
  187. {
    - y9 s0 o, c1 S' |( e- B8 Y
  188.      FILE *fp;% [- J; V6 D8 `0 ^! O( U
  189.     DWORD  attrib;
    ) C1 k; f# h# ~
  190.   attrib=GetFileAttributes(FileName);
    / e# v7 s! K, E8 J9 f. C
  191.   if(attrib!=-1)
    - h* N3 u" {- ?1 ], {& |
  192.   {9 \* Q( n+ t5 i+ [8 n8 c8 r1 Y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ J/ r. f5 S5 l- n! m
  194.     if(!SetFileAttributes(FileName,attrib)), ^3 h: b1 q* l
  195.     {
    7 w9 G; m! J& s7 N- Q! Z
  196.       return FALSE;
    7 G  }) P& N) _* Y9 {. Q& x' f
  197.     }
    6 l% Q- K6 l; V% T: s0 Y) n
  198.   }
    0 Y% [" ~7 G: @* ^
  199.   fp=fopen(FileName,"wb");
    + |! f/ K% v; |/ C+ w0 Y8 S
  200.   if(fp)
    ' w1 V7 A  X4 O. [
  201.   {9 h, P. I' y# C/ a) |$ f
  202.     fclose(fp);
      j' u+ _1 w) a9 [4 p! A5 x( g
  203.   }5 V' Y% E* I3 W6 w8 u7 v. I1 q* k! X
  204.   return TRUE;  ]  ], @8 s) r$ r2 K4 u$ c1 ^
  205. }
    * R1 j- j) w: x

  206. 8 o2 P% z9 k% f& T7 a7 e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' h. c. t+ s5 b. b  p) S/ J
  208. {
    7 P; @2 I& I: k- u
  209.   char filename[MAX_PATH];
    , `! D# B- J0 x
  210.   LPUPDATEFILE file,olds;+ R9 Y$ M* }* M1 e5 T5 Q
  211.   std::map<int,CString>::iterator i;% P& L1 F% q% M* @3 D% p+ L' ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ( U: X2 t7 u' i' G  j) F, c6 `
  213.   std::list<CString>::iterator l;
    9 E% W) J1 K7 m) R8 @/ u; B; i' b4 ?

  214. & U$ w' a$ ?, p4 Y) L: n5 {
  215.   if(bFirstUpdate)
    - J. _% b1 d- M8 X- P! K0 ?
  216.   {
    9 D+ r) B9 Q  n: S+ b
  217.     dwCurrFile=0;4 s6 ^! u4 c; k6 t+ \
  218.     bFirstUpdate=FALSE;+ Y6 u" P, {/ n+ _! f2 P
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())+ Z  I- Y9 [5 V' f
  220.     {
    , ]/ F+ _" M7 @! g9 g! R8 ?
  221.       dwTotalFiles=UpdateLocal.size();2 v0 x2 v" X6 p' ~  v7 z
  222.       dwDownLoaded=0;; q7 L- A/ a5 T
  223.       bSilentStep=FALSE;
    2 C6 c  c: M% M1 [) g
  224.       bCompressed=TRUE;5 i1 E  O9 H8 X" b1 K
  225.       strExtLocal.Empty();
    9 z8 Q$ }: W) k" q0 i$ N* r, D
  226.       strFullName=(*i).second;4 B. L6 D2 g6 B, o# c
  227.       dwProgramState=AP_CONNECT;+ e% v; K7 V1 T$ p. J1 G
  228.       return TRUE;
      L( x4 b2 J! Q8 V$ l- x8 n, C
  229.     }" _* v4 ^( r$ [. @8 K
  230.   }
    ; x3 F6 p& M" L- V9 ~7 h
  231.   else if(bRestartUpdater==FALSE)
    0 L- }* D/ r/ G3 o+ P6 _
  232.   {* e6 Z* \3 ^$ o5 z! e) j
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())" ~+ _  S- b7 G" q- e1 T# f
  234.     {
    6 V7 T) U2 f5 ^, |5 r* v# ^8 \
  235.       file=(*p).second;
    + P( x- v) m: v* h; L# O
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): l- v; i  L. ~) V, Z' j, W* G
  237.       {) n1 ]8 d2 o; g9 L
  238.         olds=(*p).second;* d% |+ {0 U5 N8 E9 v' w4 J
  239.         olds->vers=file->vers;
    / J+ W& z: Q; v, k: @% F
  240.       }: n/ I/ {$ @& x# C, p; l" l7 X6 F
  241.       else
      u# S; c- \' Z  R  ]* |; [
  242.       {  w7 `2 E+ H/ m7 q- u( m& E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ f9 p  W+ ~) a4 M$ B
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / a8 j. B3 t; I7 Q' d* Y5 N3 c
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    8 ^& v  v4 h% T! V
  246.       }4 j. ^  F. J; T  h3 r1 h& C+ d
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");/ ^0 q) ^& C7 z8 d
  248.       sprintf(filename,"(%s)",file->file);
    : q5 N: j0 d& r5 }, {3 \
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ W# l: J5 x- X" g$ s  P" ~1 s0 @
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! y$ A5 S2 ?# Q4 s4 F7 G( n* i
  251.     }. g( T5 N% T6 q
  252.     dwCurrFile++;, ~- J- A& o/ w9 H' a- Z2 Y6 w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  \. w8 P( Y; Z: i; M, j
  254.     {
    ( s4 U, {# c: W0 j
  255.       bSilentStep=FALSE;0 ]2 [) C* M4 e% d( y( l
  256.       bCompressed=TRUE;3 a, S, y+ T8 x" @" \
  257.       strExtLocal.Empty();
    0 r; B' x7 \7 e/ l
  258.       strFullName=(*i).second;
    % @: @8 P7 H+ l( \8 h' d
  259.       dwProgramState=AP_CONNECT;: u9 ^4 N  m5 F4 I
  260.       return TRUE;; y# V: h: [/ E3 i* @  H' u3 K
  261.     }
    * O, B6 u8 }% K! a, w- v
  262.     if(!bRestartUpdater)& n0 ^1 Y, g8 w4 v( h3 y3 d, g
  263.     {
    ; p5 i9 ^( D( I( K* Z8 f& V
  264.       int iCurrSize,iFileSize;+ U7 X$ g1 A' @, y3 V9 U
  265.       iCurrSize=0;& V& g9 t9 {5 {- [
  266.       iFileSize=UpdateList2.size();
    . v; F  e' w% B' K5 z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 ]+ `2 e% J- t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");  V" H! w8 a5 G3 {- x! o* t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");) H' B& A% ]- p, I- n: _/ l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 _! z! Y) M  `
  271.       Fclearf(".\\update.dat");( G/ @5 T4 d- a  t
  272.       Fprintf(".\\update.dat","Bloodyf\n");. S1 T5 L( x0 [/ j8 B2 D
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    7 l- K, d  W" N- b
  274.       {, y4 B5 S* @3 |( ~& y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    7 ?/ G  O- j; y5 I: ~8 l! m0 a+ [
  276.         {6 W( _! j' w4 Y
  277.           file=(*p).second;
    . z, D+ F2 O& X0 d/ N0 w
  278.           sprintf(filename,"(%s)",file->file);5 y# {. v& d/ b( t6 k1 d- w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. x! |1 Q0 u) @% j: v
  280.           iCurrSize++;3 ]. {) k7 U' z! ?
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));! c. v. [0 J% S1 }9 A% V) v
  282.         }8 b% N/ a: `% {- i
  283.       }( F1 l; y  k5 z, d2 v9 o8 x' ~
  284.       unlink(".\\update.txt");3 h9 T. e, j5 A* L
  285.       unlink(".\\update.tmp");6 {2 N1 w/ x# S& b
  286.       Fclearf(".\\checkversion.dat");; l. S# F& O0 Q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 r5 y; e2 O% ?& @! D% v
  288.       if(UpdateLocal.size())9 G" |: F- W' G% Z% d
  289.       {$ k8 y% s# F) \, t6 w
  290.         UpdateLocal.clear();6 _% Y- _( ^  p3 m# T
  291.       }
    ; H! `( r  m) z2 \' D. _4 b: l
  292.       if(UpdateFile3.size())9 ^' c9 J% l: h' @! @8 t
  293.       {! _" E1 _; k9 f: r$ g2 {
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 B4 ^2 e# e( v" c
  295.         {$ ~9 e/ @$ l- G4 J2 ?7 A+ \
  296.           file=(*p).second;1 T3 M% s: @! q( R, p
  297.           free(file);; z; r8 M( E0 p
  298.         }8 v! s) f7 Z6 I# ?: m; L
  299.         UpdateFile3.clear();& m; t# g, |# h0 r
  300.         UpdateList3.clear();1 @& H( C+ n1 r" s, j
  301.       }7 X) Y" g/ s; n: }) R. S# N
  302.       if(UpdateFile2.size())" }% n1 y2 `# ]2 v# e' x5 L
  303.       {# Y4 p4 A) ^5 H" s
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" C+ C" F9 |; O
  305.         {3 d* A) ~$ ~& i2 b: A
  306.           file=(*p).second;
    ' ^0 f; }2 t4 C1 q
  307.           free(file);
    7 _- V. R+ D( h
  308.         }, |: w" B! |; }: @
  309.         UpdateFile2.clear();
    " S. D3 w- V: ^6 W2 D
  310.         UpdateList2.clear();
    + m: V! z+ w; }% j8 |
  311.       }4 B  W8 t$ W0 i6 ]/ w
  312.       if(UpdateFile1.size())4 g8 t9 Q( w  \! }; m0 ^6 F, e
  313.       {
    : R" s7 ~7 o- a. @% I
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 k- P0 B) o" r% G0 f. R1 f
  315.         {
    " P. c9 }+ g# n& ?  T
  316.           file=(*p).second;
      ?7 G) c! k7 _2 z6 g8 X& ^6 \
  317.           free(file);( q. ^! z! u( I
  318.         }
    $ M. o3 d9 G0 c
  319.         UpdateFile1.clear();, {. _  i' U! W# _: f  P
  320.         UpdateList1.clear();' [3 a6 p8 N+ C- o' ~0 f
  321.       }8 k( {8 F3 I' @/ S, ^: {& {, I9 I
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));" a9 f! G3 ]5 h
  323.     }+ P- b" U6 w# C. ~5 |/ R; E+ m+ j
  324.   }% s7 w( V( L/ V( u; F* o! H) X
  325.   return FALSE;5 d3 R( [3 A, ^0 |, C9 d
  326. }; \) l7 ~& T, _6 j
  327. 8 [7 E2 c0 c0 b' p8 \% w
  328. void CRevAppApp::ClearAll(void)
    9 d+ e: R' ?9 D8 l% ]8 v7 Y
  329. {( z. u- a7 G0 e+ B
  330.   LPUPDATEFILE file;
    9 B- t; X* M* y# E3 z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 }: G1 F! X3 Y! P3 w0 F: T% Z
  332. - C1 H3 K$ {0 y- s- P
  333.   if(UpdateLocal.size())4 t$ D* D# e4 q, K7 d/ ^
  334.   {1 k+ B5 S* ^9 s$ y+ L3 X$ M
  335.     UpdateLocal.clear();1 D* p( _1 Y6 [: t: R+ j
  336.   }
      y' F. d1 F* ^1 Q" A: R7 w" ]
  337.   if(UpdateFile3.size())
    ) C; }) e6 ?+ Z
  338.   {
    0 I7 [' z1 E+ e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & k" n' a, ~2 J1 w2 n8 I
  340.     {2 S& b* ^' W6 p6 M  b) ?$ l
  341.       file=(*p).second;
    % k9 [3 \3 r6 M1 j( G
  342.       free(file);5 T' `3 ]/ g, f$ g
  343.     }
    4 G# }+ V4 f9 e1 |6 \2 Z
  344.     UpdateFile3.clear();
    " N6 M( c0 U. p
  345.     UpdateList3.clear();
    ' I. G3 i( F* {. L. |3 M
  346.   }
    8 M) P! Y5 L5 d# @3 y
  347.   if(UpdateFile2.size())
    + s. f! T6 Z" u+ ~& ~6 l4 o7 \
  348.   {
    ; y4 O/ X0 g' G2 ~  H
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; s! Z' j* W3 j# t
  350.     {
    ) g: n7 }% Y# h, x1 b1 c3 M  Q
  351.       file=(*p).second;+ I7 R2 ~7 {/ @6 o# J- @7 V
  352.       free(file);
    ! @% @# f3 C' p1 ]: m3 J8 w) E
  353.     }
    & |+ d) R; a9 a6 ]  W
  354.     UpdateFile2.clear();6 J1 U7 P5 t5 f/ d3 B* K
  355.     UpdateList2.clear();) u- s! P0 k) L- N3 S( O
  356.   }$ b% E4 X/ K" [) J
  357.   if(UpdateFile1.size())5 T! b$ J. b* f) u  w' _% y% k
  358.   {
    + B5 D, Q: |- v
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 H, G$ D9 ^- R0 v0 v+ M3 S
  360.     {
    ' c( R/ |6 D* B/ g3 z
  361.       file=(*p).second;( U7 X3 p5 M: I0 v% l6 H" b
  362.       free(file);
    9 k9 F( R$ V* P; ^9 ~6 f$ l
  363.     }
    8 K7 G& x& g6 y4 }
  364.     UpdateFile1.clear();
    ( s2 M; I0 Y$ {4 k. m; t4 ^) ~* D
  365.     UpdateList1.clear();
    ( q+ Z& `( m7 v0 n" z% i
  366.   }
    4 R8 |4 ^  r- f7 g' R3 L" d7 R
  367. }  + \0 y$ j4 [, N! z6 z8 M
  368.   
    - X: b, S, Y) r4 x9 ]
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    ' W+ G! A% A$ S4 G& _
  370. {
    7 \8 v1 O! h/ y" M6 X. s8 B& I
  371.   int c;
    : H/ E8 ?6 c3 H. P4 ]+ _6 z
  372.   LPUPDATEFILE file1,file2;
    , ^* A5 q& Z4 V
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    , V$ D! j& U9 x" n
  374.   std::list<CString>::iterator l;* p0 L$ S2 g! U$ r. E( k8 K
  375. 1 K* Y5 x. L. h9 h
  376.   UpdateLocal.clear();
    7 t9 I6 k% ^7 ~% ]. }# u" ]! {8 ^: J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 w9 \/ Q: i) }1 s) P
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    : Z# |2 q- k( @5 [
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    1 s5 a4 S4 k  G+ F6 p4 u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);* u& {  `) g% l7 H
  381.   if(UpdateFile3.size())
    ; t8 G: x/ X" l. a
  382.   {
    1 n* |2 ]* E$ F6 Q
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)4 I8 g' w4 f! v
  384.     {
    & A, m$ ?# K% h( t! m7 P7 {
  385.       file2=(LPUPDATEFILE)(*i).second;# l6 O% t' F( R/ V$ L' @5 a
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 m9 Q$ k5 u+ U& b
  387.       {
    7 `/ V  G  F8 s. E
  388.         file1=(LPUPDATEFILE)(*p).second;
    % I+ h$ ~, l, g4 o+ t& Q; @
  389.         file1->vers=file2->vers;  f2 N% G" F5 L1 i- a$ f
  390.       }1 h- [/ Z5 A% g. R1 n% p8 p/ S
  391.       else* F) m) g5 I1 L- c3 G4 s; z
  392.       {
    2 x5 z$ x4 ?$ E( C+ c5 O
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # h5 Q9 P& q5 H+ _7 O7 V
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ' p, ]+ M' x( d2 c# c! `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));! c& @1 t+ ]% [; \8 g0 N; W; q
  396.       }
    * l0 O5 W; Y: `; l# s
  397.     }
    8 Z6 a  [( m/ O# M4 b2 G: g
  398.   }
      U, t; A8 R+ C' u
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 }/ a% r. S; a4 V( S: P* B. x4 O7 v
  400.   {
    8 o: o2 t6 P$ p
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    $ b) \# |8 j/ a: `& I6 B
  402.     {" E5 C' O" Z# @6 `7 \2 {
  403.       file2=(LPUPDATEFILE)(*i).second;$ \& K, R: e+ M
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 [5 E0 t" [7 x: P- A9 l
  405.       {
    ) P) y7 \& ?, x9 i
  406.         file1=(LPUPDATEFILE)(*p).second;( P& D  R! o7 g$ i: d9 k
  407.         if(file1->vers!=file2->vers); J1 M2 w0 e6 I# k
  408.         {0 ]- f+ Y/ {8 z( P0 h: [7 A2 O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * X' k+ o* e  l& K) q- C2 w
  410.           c++;
    # N0 {0 V( E- ~1 G1 _, ?% r; ?
  411.         }" j* @1 K: u7 J% z6 }! z  _& H- D
  412.       }
    * \- L8 y' S! K  {
  413.       else
    8 z' E: c0 f; c, p
  414.       {9 W7 R- G1 |! }: t& p
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. [* n# K9 Q4 ~0 q- [% q
  416.         c++;
    0 r  T% w6 \* m8 i1 o, C
  417.       }- T/ g$ p% l8 y! k. v: K. V
  418.     }
    ( B$ N( _) u, W
  419.   }
    . N5 b' _. L% y6 W
  420.   unlink(".\\DownLoad\\update.txt");, d$ @/ z5 l* y- f, y% s2 M2 B9 ?8 i
  421.   if(UpdateLocal.size()) return TRUE;0 `  V% ^/ k2 u7 N9 i
  422.   else                   return FALSE;
    & ?8 {3 K4 ?! h7 E) w' i8 @9 X
  423. }0 A" ^: X, O: ^; O( a5 y9 l$ x/ `

  424. : X. P6 s- u4 u
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"4 q8 A- ?; d- x0 r
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 J1 m$ f' g. k+ k. y

  427. % ]6 D9 a& @7 i2 A' h% M% A. a

  428. # C" s9 c  i7 ?  F  `3 s4 T* ~
  429. * h( V8 p: j" `4 j, |1 l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)5 E3 U( p# r# T. l- l2 z
  431. {: V% ?  {$ Z! Z3 C2 `
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    / R/ |" Z6 y6 Q, |4 m3 S$ D
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! t% i1 p/ S- @9 ^' h2 c
  434.   {
    9 s1 n1 H5 V0 Y2 A, q
  435.     char szLanguage[50];
    2 |2 e0 [4 f( @% N" H( R4 C
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! i6 B! e7 Q. k8 D* M- r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 [! I. F5 {8 }6 f) _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & N. V& f: r7 v8 v/ d
  439.     else                                   m_iLanguage=ENGLISH;
    . n$ T8 X6 @+ X7 r6 I0 M) U6 Z
  440.     char szRegister[100];
    ( w) R2 k) ]3 w6 r, Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) f9 w. W: a8 p
  442.     strRegsName=szRegister;0 Z$ t' [* W7 x, x  D* N& P
  443.     char szPatchURL[100];+ {& l! b) h! s& ^. B' O/ ~7 _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 C% j' a$ F' E" S4 q
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " u  e& X  J7 T% x$ ^* O' o
  446.   }) Y& k7 }' |3 _, ^4 L
  447.   else
    ) T2 g7 l, v0 Q! ]
  448.   {
    - C- {3 U. f' r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    1 _) h/ W  y' @+ a, i8 l' l7 F
  450.     strRegsName=DEFAULT_REG_URL;
    3 s+ f) }* {% W1 h7 j% D
  451.   }
      A& Z1 r) }7 C
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 `, P- z% Q8 [! w
  453.   {% u0 A3 }: S$ t/ I
  454.     char szIP[50];
    1 n" \7 B$ U# ]; M: y+ v4 |/ X
  455.     char szDIR[300];
    % r5 e6 K4 Y' [6 K
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    / O: ~- T& ?4 `# C/ p% N/ @7 {
  457.     {! q+ x/ g! `, o2 z) V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. }2 Q9 p9 X/ X: a* c
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 U9 D0 M% S1 U2 B; Y% ~
  460.       strHostName=szIP;
    3 n" W6 \- l# X
  461.       strHostPath.Format("/%s",szDIR);
    ' o) p+ d' j+ ?+ f6 {3 L
  462.     }8 p7 n: h6 P: ]0 R0 {' n9 k4 p( z
  463.     else' r+ W6 O, F) p
  464.     {2 f4 d& e9 h7 W% J% Z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ H5 A3 J: _4 N/ w4 T
  466.       {
    ( c3 [1 \5 M+ K1 u) X! G1 y
  467.         char szLanguage[50];% j8 b' q5 |. W, O4 N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ l0 ]% i0 P  N/ o  `5 a  j* U
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;( O' `4 u, u: G& B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 D& g! K( B9 s* j
  471.         else                                   m_iLanguage=ENGLISH;7 H2 f) x6 y8 P
  472.         char szRegister[100];2 \  i0 ?9 r  H: l0 p' C
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    * P, w. v0 v- D) N8 @6 z
  474.         strRegsName=szRegister;" I7 Z/ ~* ]# h- o( h' n' m
  475.         char szPatchURL[100];
    * l( f7 _! U$ v- _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& J* |8 Q+ d; @6 l# \8 W4 O
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , r% K5 o& |" p: H9 Q
  478.       }
    : o, C. N% w- i
  479.       else4 U4 b) H# G8 w$ a
  480.       {
    ) |; [: i1 \8 N" Q( {. D1 _2 j
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % C7 k5 m# n9 S$ m
  482.         strRegsName=DEFAULT_REG_URL;
    & R1 f6 ?& l4 Z3 ?, B$ n
  483.       }" [5 h  P2 m: k+ @
  484.     }
    8 X& v7 t8 x' N  h8 J$ \4 c- i
  485.   }
    ) R. }9 O' W! E: Z
  486.   return true;" `5 r' X. N( @. T* Y* q1 J
  487. }/ r" G1 `8 v8 J; G

  488. " M( G( G7 C' X* J8 w" m
  489. #include ".\ZLib\unzip.h"
    7 ^5 ]# g/ ~0 r  F
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    4 H4 ]! V+ c5 r3 Y3 m
  491. /////////////////////////////////////////////////////////////////////////////
    & i5 ]3 p8 y+ z3 t& [' L! Q/ {
  492. // CRevAppApp initialization5 ]7 v. ^1 r- x; K
  493. ( P0 |! M, \  ?" p" h: ~
  494. BOOL CRevAppApp::InitInstance()9 y- q& G, v' x( n8 M( }
  495. {$ L* P1 C! [; ?; c9 `# N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    8 ^8 i' Y$ z1 a- q' M9 M2 {% W

  497. ) R% j8 f- Z5 a1 p
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);0 u8 X7 i# s5 }* R
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))% X# H- s" x) `5 @' x
  500.   {7 O+ w5 @' B3 W4 s4 l1 C5 R9 M
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ; T4 ^( Q3 B( W- `# ]! p9 W, K4 h
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; y) P, t7 c' x/ G
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    + X4 I0 p0 o9 q
  504.     {
    0 E2 H# x5 P! w# F. \* f. Q
  505.       strcpy(szPath,szPathTarget);
    . y# g3 F- A: q3 T4 v
  506.       SetCurrentDirectory(szPath);- d/ w3 u2 K; x1 t+ u
  507.     }
    . T6 C$ A& _( S% C6 ^
  508.   }& F: S0 W) T, ]8 e
  509. #ifdef _DEBUG
    ( C1 A' ~7 g+ ]) l' H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 S% X% O) ~/ t6 B  c. ~* x
  511. #else( z7 A4 {) o8 ^4 I6 N# m2 S
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 j" v/ h* d$ ]1 |4 w
  513. #endif
    ; F7 _' t9 V9 ?2 X
  514.   {
    : b! l8 o0 O0 y, w
  515.     char tempFileName[MAX_PATH];3 j# s) l8 Q( o( w( Z  j+ N
  516.     strcpy(tempFileName,szPathSource);& s2 Z# R' E" f- s7 i
  517.     tempFileName[strlen(szPathSource)-12]=0;: |4 D$ l5 H- Z  S9 D7 b$ U
  518.     strcat(tempFileName,"\\$CSUpdate.exe");2 T3 C" k0 m9 l: L& w. @2 e5 W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    . d) j8 Z, C4 C
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);" j& ~3 Y7 ]  w0 y% B8 ?- L' N
  521.     return TRUE;
    2 c% x0 l: W* l5 e
  522.   }
    $ F+ J4 ]' b, }) I6 ~0 z" Y
  523.   // Nuke 0118: Delete run.exe5 D8 w' r+ s/ J7 a; m
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - ^$ T7 \4 U- F5 v
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    # }: L! m2 n+ i
  526.   if(!ReadCfgFile("Config.ini"))
    & T' q7 x9 C/ T2 `; x8 p
  527.   {
    0 m3 u! j: M# z6 \
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: z" p8 a+ }8 j/ A( y, d1 O4 W
  529.     return TRUE;- n. Y! G0 |8 l4 O" v0 n- u6 z
  530.   }
    * G( R+ b; K) F
  531.   HANDLE mutex;; x8 \" c/ |; p
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))/ f9 @! y5 c* w
  533.   {
    1 f; ?" m) F  D# [# K
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' h  L2 u: Z& u, I& \
  535.     {& S7 i: B# D' j6 P3 k" {" p% ^
  536.       CloseHandle(mutex);& h4 s9 G- g2 M" O  a" i. i4 G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);+ X. W2 k; M- f- W( V4 h
  538.       return TRUE;3 ^' S8 S, R) m; g( p9 L
  539.     }
    6 K! y& |; P" k# S" v
  540.   }  # \! Q: F1 t$ W. {% O; r, F0 f# z
  541.   CloseHandle(mutex);# k" g7 J: n5 R# m  [; S

  542. * U  r. ?1 [+ @- N, v1 F2 ]7 I
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    & h; z1 Q9 L0 T

  544. - s4 {+ `8 z- M. n
  545.         AfxEnableControlContainer();
    2 y$ d" \# R- E4 H. y" @

  546. 8 b4 W7 Z2 j# D7 B/ F# y( b
  547.   bCanUpdate=FALSE;
    2 q3 G2 g- q/ B& Y
  548.   dwStartUpSteps=1;
    ' ]! s7 T1 d1 J6 Y9 x
  549.   dwProgramState=AP_NOTHING;: }% {3 ~/ [& L, J- `" `

  550. 2 c) l5 b% s7 @/ g' s
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! u* |1 h- c: h. i5 \* e
  552. : ]2 N" g# M! ^5 _: d$ W8 p# N& U6 |
  553.         // Standard initialization4 M2 _' S: i: N9 U
  554.         // If you are not using these features and wish to reduce the size9 |2 D: T6 Y9 S. B* L  a- ^
  555.         //  of your final executable, you should remove from the following6 C  T) ]( l( _6 ^/ K4 m
  556.         //  the specific initialization routines you do not need.2 Q8 x. V' g! p% Z+ d4 H+ d
  557. ( `  t3 p/ S* I  i+ U/ @
  558. #ifdef _AFXDLL4 o) h5 {4 U, v! N. D# p
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL; o1 W' q+ [0 G- ~+ S) X7 R6 K
  560. #else' _6 ?/ ^' ~* W; H9 q# E7 i
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# ^. H9 r6 [# R. g
  562. #endif
    ) x) g  r. V- F3 c/ U

  563. ' X4 _+ _& m* P/ D1 z, U
  564.   dlg=new CRevAppDlg;, g! C" w4 f  s, j2 K  B4 o0 k
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    9 n8 O' D; C& |: ], M( [  g* a! ]
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " p# ^" K" T7 G9 u( z- h( I
  567.   m_pMainWnd=dlg;
    " g2 T0 @* M8 a, ?6 B! B0 C, D
  568. . c3 y# k! ~% {' G5 E8 |
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" N+ V) y6 z9 r, Q, G
  570. * ~5 N5 V! G) \) c( G7 L
  571. //  GdiplusStartupInput gdiplusStartupInput;* [' v. G; ?  m# ^7 `1 ~
  572. //  ULONG_PTR gdiplusToken;4 B& Z% [$ P+ r; C+ Z( ~
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);/ v% k$ v( x) |6 ~3 c( Y, C6 V
  574. 3 r, X. ]" Z' }7 B% d, W
  575. //        CRevAppDlg dlg;9 i, l/ Q( ~: y9 e  D
  576. //        int nResponse = dlg.DoModal();
    . p; i8 v0 ]3 n, Y0 L  H7 w
  577. //        if (nResponse == IDOK)- W$ P2 ?- _5 \! y. U2 \
  578. //        {
    6 d. t3 V8 @0 o. h+ X
  579. //                // TODO: Place code here to handle when the dialog is& |2 ~- g: J# I
  580. //                //  dismissed with OK
    + i  L% e% t- Z3 u: X& l0 c, }
  581. //        }: @% Q# y! V# i9 A
  582. //        else if (nResponse == IDCANCEL)
    , u: U. k4 R# x- V& W$ {0 w. z
  583. //        {
    . t* i8 f: E4 q" i& j
  584. //                // TODO: Place code here to handle when the dialog is/ a' h- f  D9 Y# x+ o# P
  585. //                //  dismissed with Cancel
    - x7 Q( Q6 D4 ?$ _! L1 D8 {
  586. //        }/ n$ Z, Q' ]1 l- v3 [2 ~

  587. / S. ?4 b7 I2 P+ ]; q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    # N9 ^' w' T* d, C) D. P
  589.         //  application, rather than start the application's message pump.; d5 L2 X( {7 n1 Q. X
  590.         return TRUE;
    ) k, c) Q7 |5 Y1 u; `" \5 Z; O
  591. }
    2 p% p8 q1 G9 G( O. D$ {

  592. / q( B0 \9 J+ x6 V/ [
  593. char *CRevAppApp::strtok3(char *pSource,char *token); O( b& E  H9 w2 T8 ]1 O0 |
  594. {# N( B7 r/ ?+ H# ^4 o+ U
  595.   int i;
    9 Y! i5 t' x: ]& Q5 c; G4 B
  596.   char *szRet;8 X3 m& v9 V8 z
  597. 4 R; N7 X4 z9 s( p, `) E2 e; V
  598.   if(pSource) { itoken=0; sztoken=pSource; }! |; F7 s  ~; v# J; `
  599.   if(sztoken)( f5 B, w9 C9 |) y
  600.   {
    / D5 H7 h, ?7 ^, ]# Q* i
  601.     szRet=&sztoken[itoken];
    ! y% `% s* q4 u2 _
  602.     while(sztoken[itoken])
    7 P) a( o6 N! u! v7 K
  603.     {5 ~- X8 n  k$ k9 \9 p
  604.       for(i=0;i<(int)strlen(token);i++)
    5 N+ \3 C/ ~0 F$ G' T
  605.       {/ @' J# _' [9 R, @" S
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])8 @8 J0 E, ~1 m
  607.         {& z( M7 ^, A, U" g# a& R
  608.           sztoken[itoken++]=0;! K5 e5 V+ W7 [9 L* t; k& S! j
  609.           sztoken[itoken++]=0;
    " @! }, j' S$ A1 e
  610.           return szRet;
    2 a( R, d- Z# o+ D7 c, Z  S) e
  611.         }5 }" {- O3 r1 O! |+ s
  612.       }
    # {2 r. L% o, Z" X( e, ~1 C( K0 Y
  613.       itoken++;
    , O7 v% O" W& T7 h5 c
  614.     }. F) k1 r, {% ^$ ^; V1 J9 d
  615.   }: {) u# F/ g; Q  H' Y
  616.   return NULL;
    5 _1 m. d/ z$ O7 C
  617. }
    3 A3 C# V/ F" j# S1 T4 n
  618. - ^0 e; x% E( |' U* ~! Q6 o/ `
  619. void ProcessProc(long Total,long Current)
    * e' b3 y2 y$ S4 f4 A8 c* H: O- \
  620. {0 N5 G! t0 C# k/ q, r, ?7 V0 N/ ~
  621.         MSG msg;
    6 `6 r  Z6 s+ S; |) w4 Z/ |' \! J
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # w1 C6 v) J9 G1 S
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  V; T8 F; |( o& I( D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))# q, d% v+ _* T. h7 ?, f( V
  625.         {) I  ?' Q1 \! p: n/ ~( x5 k3 x
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " |* c3 I' d2 x
  627.                 {: [6 j3 j/ R" ^
  628.                         return;( y' W- G4 B4 R* Z4 C, p' I3 y
  629.                 }
    1 d/ h8 F( N# j) L
  630.                 TranslateMessage(&msg);
    9 m  U$ L' p( \' \- {+ w
  631.                 DispatchMessage(&msg);
    . {4 N' F/ T; W* a
  632.         }        & v1 M- a% U3 W; w" c' f
  633. }
    ( l6 ^# A/ `. s8 W

  634. 1 B7 Y; e9 ?: f
  635. BOOL bFirstChar=TRUE;% {! I" A2 S/ U5 W. n3 [
  636. ; K  \  p. B" n% B* p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 D5 L6 }5 B; @6 j) P' H
  638. {* N7 a3 ^1 t. K$ `& }
  639.         // TODO: Add your specialized code here and/or call the base class# ?' ]# q) s! E* n6 E+ f& ^3 P
  640.   switch(dwProgramState)
    # ~$ v$ I* ^8 ]5 \( h( F. x  C+ m
  641.   {
    " Y/ U% \; a% B' g5 u, B
  642.   case AP_NOTHING:
    1 o- I2 l# _1 c
  643.     switch(dwStartUpSteps)
    / x+ N$ T' d+ Z* \% S+ s# Q/ d8 M% E
  644.     {
    9 @9 ]# Q- b2 R9 w0 k0 w
  645.     case 1:) g, ~0 B& a- d( {/ A
  646.       {
    $ O& w) o% ?' o8 M. ~
  647.         int i;
    2 f+ T# B  E2 S- W; R: b4 y& J
  648.         CDC *pCDC=dlg->GetDC();8 @( Y) H: a' ?$ K$ }! C
  649.         HDC hdcwnd=pCDC->m_hDC;/ C; R. M2 o- c+ _1 O
  650. //        Graphics graphics(hdcwnd);
    - j; H% \. C9 g4 P  E
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ) a2 h3 Y$ d$ }3 S
  652. //        INT iWidth=bitmap.GetWidth();( ~0 ^3 O& D4 t! s
  653. //        INT iHeight=bitmap.GetHeight();6 m: x: l9 w/ W8 u8 H; {6 Z. q
  654. //        Color color,colorTemp;
    4 }8 ^- A  o' A7 t8 J: i( Q
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + n. g2 O+ F" ~3 W
  656. //        {
    7 B% _# Z- n) H7 J( [, s
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), u6 e' t' |6 _  ]3 e+ [/ Y6 ~5 _; E
  658. //          {; `2 |% d) G# j4 E& N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);9 F! l9 U7 a3 l& _7 E5 H
  660. //            colorTemp.SetValue(color.MakeARGB(
    # Q' G( @: o9 e
  661. //              (BYTE)(255*iColumn/iWidth),
    5 C, v0 U9 p' }6 W9 E
  662. //              color.GetRed(),9 x: t3 ^; b8 Y1 d  Z2 N. ?
  663. //              color.GetGreen(),
    . X0 p, w: r6 @
  664. //              color.GetBlue()));
    , u" b3 i, ]& \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);* N4 o& D2 i3 y7 l6 w
  666. //          }5 P4 s! f6 ?0 q2 c6 ]5 ~; K. c& K
  667. //        }
    1 n, r' A7 Z. i# ?6 g7 g% _. n, l
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
      Z: I6 O6 _: ^$ S- f
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& y8 p8 B: b% L* p, h
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");3 z  L& n4 V8 V9 y- Q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");/ y0 L( n  L. u1 X% f
  672.         for(i=0;i<240;i+=8)
    & p' o" m, k1 d3 b
  673.         {1 u" P* t' b! P& p
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);$ `0 J. h: q, g0 L. Q. T
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);( Y6 l2 G) P9 q% e: @- g# Z: G+ r
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 `% \; z; O- G: F3 Y0 {! [
  677.           Sleep(33);7 |6 ?  ^0 ^% W) O/ m/ a# e
  678.         }  f# w" ~* i0 w) L- |- F
  679.         Sleep(1000);
    % J3 O; e: o  j1 k6 ?4 V
  680.         for(i=240;i>0;i-=8)7 n: o# F1 b/ t& k# S
  681.         {
    8 e) [1 @; J3 J. f- ^2 ^
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 P; u1 M% U( c
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . |- m# X) n- M, ]# o( R
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. ^% d! u; R# u% b
  685.           Sleep(33);
    : W4 I) H, [4 ~
  686.         }0 d+ d% c1 B4 c. o/ b
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    " \4 |% ?, y$ [9 \
  688.         dlg->ReleaseDC(pCDC);
    , h8 m2 a! H2 t3 f$ v! A4 _2 z
  689.         DeleteDC(hdctar);
    4 T0 Q% Q- j: `0 U
  690.         DeleteDC(hdcsrc);8 M2 }- F% o( k! X" S% j+ _
  691.         DeleteDC(hdcorg);7 j* H8 v5 m7 m- p% r/ V$ t
  692.       }
    ' J0 \- B6 K- g) `$ c
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; m- ~3 N2 y9 \9 {/ R
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");! u  [0 [2 Y% z. Q$ ?- p
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    0 R! N' C- J# `' h1 s! w3 u% k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* s3 @) R7 P' Y; [9 R% z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ Q/ M$ W* ~4 |9 ?+ }9 O5 C4 S( _  G
  698.       if(!Dn.Connected())+ z5 ?! o+ c) c. m% V" P
  699.       {" v( w  h6 J% y! e9 ~* C
  700.         dwTotalFiles=1;8 r+ j& l6 u# J' Q4 n  _
  701.         dwDownLoaded=0;; x9 n# ]/ Z- v/ k
  702.         bSilentStep=TRUE;
    4 Z0 i; v. [+ r& E0 A3 s& _
  703.         bCompressed=FALSE;
    9 k6 J6 w9 T1 z; m4 `
  704.         strExtLocal.Empty();
    " z5 }: Y* U" z+ B) b
  705.         strFullName="readme.txt";
    , Y, [" {0 x# ]+ r# P, e$ N
  706.         dwProgramState=AP_CONNECT;: V9 x9 S7 G( a: p5 d
  707.       }
    . R3 C. S0 x/ `6 h
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + o5 ]: l+ O! _1 e
  709.       dwStartUpSteps=2;! N/ T8 k, w: R/ Z  l9 l; Z) c# ]
  710.       break;! r$ B3 a6 t- ^0 k- Q# z2 e; g
  711.     case 2:
    " p8 n# I4 E9 {0 C
  712.       {4 c8 H6 a/ F4 X6 f4 a8 P
  713.         int iEOF;8 b; |9 E" x  ?8 D( a
  714.         FILE *fp;
    6 n3 ^- k: O8 E; A8 m2 V
  715.         char szString[512];
    " k3 K" `: Z- E8 |  N  k8 o' V
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / \# J4 U+ x# V# u+ W# w7 n
  717.         if(fp)
    : n+ d  C$ S" R5 ~, _  z: ~
  718.         {+ p/ F" U5 v, b0 ~/ D+ T7 ^
  719.           do
    5 [0 ]6 O- [& p1 L: e5 @' Q( D# J1 R# L" D
  720.           {
    . z" L) ]" A1 O. p! j8 @
  721.             iEOF=fscanf(fp,"%s",szString);: ]; P& i, @1 G" G* H
  722.             if(strlen(szString))
    . F' b( M5 |* Z: T7 ~- X1 p4 C1 i
  723.             {! |7 J! [* Q& l3 P& w
  724.               if(bFirstChar)$ G, K! ?9 m0 a2 J1 m
  725.               {/ L1 Q1 v1 Q- [! U9 [' p
  726.                 bFirstChar=FALSE;
    ' z6 e$ |8 B5 r8 x; k
  727.                 bConnectIsBig5=FALSE;' b8 M; l" e) K2 ?5 x
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ' `7 U* e" T2 O9 L* R
  729.               }
    ) b6 b+ ^; F1 k: r8 g: X" l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / ]% c3 B- f5 Q2 m" a
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 |- i+ i1 i& a3 v+ V# X5 a3 M
  732.               dlg->m_ListText.AddString(szString);
    8 c7 C* v: K' K; b
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * F( i0 K5 j: _' W2 `# O
  734.               *szString=0;. J6 ]) Q5 O+ _1 v# Y
  735.             }
    # d$ n( P, H: D4 y
  736.           } while(iEOF!=EOF);( D& [; O2 D6 v1 _6 P
  737.           fclose(fp);4 _0 S7 O/ r; ], k* M4 p
  738.           unlink(".\\DownLoad\\readme.txt");
    $ p8 ~5 j. H4 o9 f& H
  739.           dwStartUpSteps=3;
    + x& e+ r% O! w+ u, ^8 L
  740.         }
    9 Z' W6 {4 Y9 I3 Z4 |6 l) L; }
  741.       }1 ^! N/ d* ?- i% ?: ^
  742.       break;
    5 q1 ^0 W' Z9 a
  743.     case 3:
    5 c) x" ]& q; V
  744.       if(!Dn.Connected())
      y4 K9 {, y, }$ J4 K5 m5 e7 c
  745.       {
    0 C* N& S9 z* K" r! O, i! f; S) s
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);1 o: m* x7 s: r" i% E4 j
  747.         dwTotalFiles=1;* a, `- H+ N4 F  b, F1 ~6 s
  748.         dwDownLoaded=0;
    # g6 ^9 W1 B. \6 _# f, g/ i9 s
  749.         bSilentStep=TRUE;: h# X. ?( Y- D' X- a  x
  750.         bCompressed=FALSE;8 D1 ~- V7 F! P( A1 q( ^
  751.         strExtLocal.Empty();
    , a! {5 \* ]  E, h' m
  752.         strFullName="checkversion.txt";
    ) G9 y9 h" ~' o8 y% F& L* P) `/ ?
  753.         dwProgramState=AP_CONNECT;
    $ A5 x3 K. r* V
  754.       }
    % E- Q/ J& r& B2 |% Y
  755.       dwStartUpSteps=4;  u9 H( C8 T) V) h& C9 A7 w4 ]
  756.       break;
    " ]: m  ^# s5 `( }; N0 Y# W7 y
  757.     case 4:
    5 M  a! g, j! Z0 U8 {8 Q" Q
  758.       {! w3 f7 W8 H5 I! }
  759.         FILE *fp;
    $ j8 `( g" e2 V) i2 g  A
  760.         char szString1[128];7 a  ~3 |7 Q& F; }
  761.         char szString2[128];: _# m( e9 ]/ u, t
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 t$ U$ y% `5 {
  763.         if(fp)( F1 U  e4 D) }; u" O
  764.         {4 a) J+ C8 G, T( e! C9 C
  765.           fscanf(fp,"%s",szString1);: r+ v, I+ z8 b  `# ]. ^) D
  766.           fclose(fp);
    + F* z+ E. W% L! Y6 r" x* p
  767.           fCheckVersion=atof(szString1);
    2 ?+ [/ X- q1 R% c5 D" J
  768.           fp=fopen(".\\checkversion.dat","r");
    & P& v2 X" p7 n' T
  769.           if(fp)' ]4 F: E8 ^+ z
  770.           {
    7 u! |( x7 q, Z) ?
  771.             fscanf(fp,"%s",szString2);
    1 P2 ?1 [6 ~$ j0 a
  772.             fclose(fp);
    0 w1 z- _7 r" X2 i" ^6 ]
  773.             if(atof(szString1)!=atof(szString2))8 I; O7 j" p$ l& H
  774.             {
    " n  j1 v3 G$ z( a
  775.               if(!Dn.Connected())
    8 y/ d8 f- |/ u. }
  776.               {
    ) w6 \# r) M. |- V
  777.                 bFirstUpdate=TRUE;" S6 Q' B: @+ J2 N2 r- {5 ^
  778.                 dwTotalFiles=1;, @# t4 T' m8 B  n, J+ C
  779.                 dwDownLoaded=0;- D/ ]9 j: W( ~3 f& ^3 w
  780.                 bSilentStep=FALSE;' a- c2 x  Q# R; G; y
  781.                 bCompressed=TRUE;
    7 f" s6 {1 `/ I+ _2 P$ W
  782.                 strExtLocal=".\\DownLoad\";& u8 Y: u8 U2 _
  783.                 strFullName="update.txt";5 H' P, A; P2 y. R; R' a% e* L
  784.                 dwProgramState=AP_CONNECT;
    # `" I" \4 }% \2 I& ]( L; o+ e
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ( F' F5 ?/ q4 u' s& _
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: U+ d; A0 F, g6 L
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- v# a4 ~: V& K- E7 z8 }

  788. + [8 w1 p" n& I; N
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 g: Y" v7 t/ n* Z6 F' E5 l* G
  790.                 unlink(".\\DownLoad\\checkversion.txt");, k0 |2 c6 F; ^1 i1 `* N: @9 f' g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    4 a8 o3 e( W. z0 a7 C
  792.                 {
    2 e: w* D" b5 u2 K  M
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    : C! X5 d! w7 z- s2 u4 R
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");& v' V, J7 y* d7 s. F- A; d% g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    ' c$ e; F( K/ f* Q- {6 q) z% `
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 T4 ]; S7 ]- L) ?4 D% U
  797. % u( k( b9 g2 K0 D, }
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 {6 m% p' m, ?# d
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: _4 Z$ C# o6 u/ @5 [3 B  d. t
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
      `2 G- S( n' P6 a
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ m: S! E/ b+ G0 c/ Y/ f
  802.                 }
    6 r" Z! g2 x' q' G! U1 \4 H
  803.                 dwStartUpSteps=5;
    & ?2 L( Q4 E4 r# ?" x$ B6 i# s
  804.               }
    ) p% |( t4 Z1 d3 M/ d& @! l# ?
  805.             }
    1 M1 Y+ Y# d" H- H: r
  806.             else: M1 u0 C8 \  O. \/ j6 t/ A. ?
  807.             {
    / D2 h, ^3 m5 p0 v, d* `
  808.               unlink(".\\DownLoad\\checkversion.txt");' u+ N7 H4 e) {$ g) i$ Y( c
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");5 G: H! |* {, R2 X3 {, m8 y4 k
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' I/ {% p; @* ?
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" @; w% H, ~: V! T) M
  812. " m- N6 b6 t* [- f, K+ m  j$ v
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! t* `2 t) r& v& ]) x
  814.               dwStartUpSteps=99;
    . ^$ P! Q6 Z' F  Z" E( ?
  815.               bFinishUpdated=TRUE;
    8 F+ v! M& ]8 K* j. P1 \3 j
  816.               bCanUpdate=TRUE;
    ! D) |! u( c: N0 ~
  817.             }
    ' f9 |( [7 @' w. v* w/ P
  818.           }" s& j9 K! }+ X) F0 K5 A9 \+ r
  819.           else, k. l7 C: G& i6 F8 Q, D3 Z. ?
  820.           {. }. n9 U$ W) L( w2 B' g
  821.             if(!Dn.Connected())
    2 G4 K) C7 f8 H) Z
  822.             {
    9 W: N5 z- D; L8 i: X* H& R- q
  823.               bFirstUpdate=TRUE;) ~; ?8 m/ i/ n4 Y5 O
  824.               dwTotalFiles=1;: \: L% b7 r, g* w0 j1 z2 z
  825.               dwDownLoaded=0;5 n0 E6 a8 _9 j, u. k1 f5 l
  826.               bSilentStep=FALSE;
    9 K" y. a6 i3 n4 c, I. Q1 z
  827.               bCompressed=TRUE;3 n+ u3 n+ ]9 M5 U6 y" a+ x$ p
  828.               strExtLocal=".\\DownLoad\";
    . E. C* \- C8 o6 ]/ p9 s* |0 b
  829.               strFullName="update.txt";
    : k+ o; Y: h' h& o9 ]
  830.               dwProgramState=AP_CONNECT;
    1 v- a6 ^& k  S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");& u% \  F" K: H1 k; U* b3 b! ~" [
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" C2 {0 \, Q- Z2 H# Q
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 V$ t+ _2 G- `$ }
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 {7 D2 O% Z, f+ ^$ c
  835.               unlink(".\\DownLoad\\checkversion.txt");" w' P+ x" ?7 |( S% e
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)4 o) x4 ~* Q  f* j
  837.               {
    8 ]8 ^% r. ?6 h$ T% |% a
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    " e6 n4 C( E: A
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    7 r1 P0 v3 g" d3 [+ B: X* W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * B/ g, l7 S& Z5 g) X* W
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, w$ b+ p; k1 a6 s! N
  842.                
    + P7 u* K! n( ?) e
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; ~% h) c! |) {$ }4 I$ W0 g5 k; Y
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    / g$ p/ d0 i+ w
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 M1 P% j6 \( x" Z( N9 L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; O: j* E4 t$ y  l  [
  847.               }
    + S3 x. }  q& y8 U
  848.               dwStartUpSteps=5;( p4 I) E4 w+ U2 `
  849.             }- }; M( D/ u) l6 V. G, d
  850.           }
    9 S5 Z7 h' P+ x9 k
  851.         }5 i" {& A* |  ?. h5 n; i
  852.         else9 O8 X2 [" e4 N9 O8 T& `
  853.         {' K/ V7 X0 X7 T, ]
  854.           dwStartUpSteps=3;/ J8 z! S; t4 z! |- W$ K
  855.         }: T9 l: @+ o8 o7 O1 L( g
  856.       }
    % U7 \3 g8 n: h$ u) M: y; N
  857.       break;
    ! D' j, o: ?; Z& z7 l) `- h% \* `
  858.     case 5:& B' J( R4 o; G: `2 u, Z
  859.       {
    . h7 Z# L6 H  y, I7 o! w' h* `; M
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)- j6 T3 h/ }. l9 ]2 k: `
  861.         {
      y0 v6 q" w. k& K; S* @
  862.           int opt_overwrite=1;' @& n% R2 T7 J
  863.           int opt_do_extract_withoutpath=0;
    " [5 N5 _" c) K
  864.           unzFile uf=NULL;3 b9 m/ s5 H5 \3 `
  865. - N* Y8 X& V7 j
  866.           uf=unzOpen("Wsa.zip");& K7 \. N8 P0 U, m, E
  867.           if(uf)
    ( S( |' t7 u& f4 B
  868.           {6 m  ?( n1 v' L+ T" a' E$ H
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    + Z8 ^: {$ L4 X0 e2 ]" L$ L$ n) s
  870.             unzClose(uf);; P9 w  }5 ~1 F- M2 o
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");6 i7 W" \( o1 D
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) M1 m* R/ P* t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");0 y* O4 Y( r, \4 r9 d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 {, b0 t+ r) v: A
  875.           }2 j7 f4 ~. G8 o) z% k7 k7 [
  876.           DeleteFile("Wsa.zip" );& H" B4 P8 F6 z  P
  877.         }
    % n. Z7 ~% U6 p9 N6 f8 x8 m

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

* F5 W$ y( L) V: T# X: K% \! K6 ~7 y  c3 }( o2 n

評分

參與人數 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客服返回頂部