找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
! v+ s! e# a* A, R6 p2 l4 u
  1. / RevApp.cpp : Defines the class behaviors for the application.; e5 [& w# |9 n3 u8 |
  2. //# x# c; R2 e2 E- F& v! |
  3.   _2 T8 F& D, W3 e% K
  4. #include "stdafx.h"' V) B6 {  x" S# c

  5. / G. {& F( p# _! w6 ~7 u
  6. //#define UNICODE" Y7 b4 k* P2 e  C  ~& N
  7. //#include <gdiplus.h>' J- f6 D3 J- E7 K
  8. //using namespace Gdiplus;
    # L/ N( S3 e7 |3 [

  9. : u2 l2 q% T# o8 i) R8 `! x& ]
  10. #include "RevApp.h"
    / x3 x. p* D. I) y
  11. #include "RevAppDlg.h"$ z6 j! F: ~  K$ l) j" z
  12. $ a; b5 p  T+ y& i/ Y6 ^8 a
  13. #pragma warning(disable:4786)+ u+ r7 X$ I* e% M% i
  14. #include <map>/ w1 A1 R0 d7 w9 c" Z- B) J
  15. #include <list>
    2 A0 e( L0 u" q, a: u, }
  16. #include <direct.h>9 h  H0 n9 f, o3 W8 b$ Z( g
  17. 1 ]) S% \1 W4 |+ r) \, {8 ~6 @
  18. #ifdef _DEBUG; Z, U0 j: ~1 P& J) L5 l
  19. #define new DEBUG_NEW
    4 f" l# W6 _  W6 B
  20. #undef THIS_FILE
    ; e. J4 f& K( z7 i1 S' R* i
  21. static char THIS_FILE[] = __FILE__;1 J' _, X6 {2 O4 L) |: ?
  22. #endif
    2 J; z, {+ X& X$ m3 W- `
  23. #include "SkinResDef.h"
    6 N2 s7 M* D9 U
  24. #include "ChangeBG.h"
    6 l* {5 m( x6 i* ]- A1 b: K
  25. #include "AFXINET.H"8 s1 S  @; D. {" x+ K* H$ t
  26. 2 U, T  @4 e4 E( R3 w5 v) q
  27. #define TRADITIONAL_CHINESE 0
    + Y9 s0 u4 r) e4 N* Z( |/ O
  28. #define SIMPLIFY_CHINESE 1. ^" P4 V9 s% H. W! v
  29. #define ENGLISH 2
    , f: U2 v8 O0 [, p
  30. int m_iLanguage = ENGLISH;
    0 O) a( H7 G7 Z
  31. /////////////////////////////////////////////////////////////////////////////
    / W0 |, f: O5 c: g2 Q
  32. // CRevAppApp; b) f$ B7 u7 M& A3 f/ y# c/ C
  33. " d0 F/ c3 u! C- }2 D
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)4 E: Y) j$ K4 S$ K" n- o$ n
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . R, x  f3 S6 A) f3 |
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ! w  t+ e0 F, g5 R6 N/ f3 t! G
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 _, O, j) ]4 Y. Z/ i" N
  38.         //}}AFX_MSG
    0 f; v, l) [! @) F
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)# o2 {  F- |' Z; J; y+ M- ~
  40. END_MESSAGE_MAP()
    . j' u1 f: k9 w3 E7 `& h3 v2 z

  41. , v8 q( c; o/ ^* W7 J6 G# ]
  42. /////////////////////////////////////////////////////////////////////////////" ?1 l3 b" n0 e! E
  43. // CRevAppApp construction1 D6 j; D+ D$ k+ k2 t' H

  44. " J  I0 v$ H+ B/ z6 Y
  45. CRevAppApp::CRevAppApp()
    / [4 o. o" \; p9 |7 `
  46. {
    2 U3 B4 z6 r9 `4 l
  47.         // TODO: add construction code here,
    : I" i2 `) n7 f+ q; T% l. b
  48.         // Place all significant initialization in InitInstance
    : g% G% f( @" j- R% d; L( B
  49.   bDisplayIsBig5=FALSE;
    % x( M1 N( r+ L7 o+ V
  50.   bRestartUpdater=FALSE;
    5 u9 {1 L7 [- J* b: u5 O+ v
  51.   bFinishUpdated=FALSE;
    & X" \* q% d' V3 V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;3 u5 \* a$ n- \; i. d' m! l9 v. o7 e
  53.   InitChangeDataBig52GBKS();
    : E( f0 x/ C. K' ~
  54.   InitChangeDataGBKS2Big5();
    8 a) P1 l- S9 ?+ P
  55.         //7 h; X. r; {# g* d" r8 F
  56.         bClickRunExe = FALSE;. ]% Y* i! e: z' h$ v6 m* m
  57.         //
    4 n) @' }6 @6 x6 p& G
  58. }( i1 m/ C& P6 Q+ [( K- e

  59. 4 Z! p! |4 Y/ y( P
  60. CRevAppApp::~CRevAppApp()+ @- I- e6 s6 P' x2 J: N8 z* ^
  61. {
    / O6 C. _. m! c; G! \$ P
  62.         // TODO: add construction code here,
    9 F/ Y6 [- n1 [" V2 J- Y$ `# ^* d
  63.         // Place all significant initialization in InitInstance
    8 g+ q0 V! v# j5 l
  64.   EndChangeData();9 q# B+ N9 I% S5 e- C
  65. }' @4 j4 Y; v+ a1 T4 P" y; `5 ^1 j

  66. # S+ [! y6 V& b1 A2 Q% X8 i+ u
  67. /////////////////////////////////////////////////////////////////////////////. W/ k$ B# j. d8 C" e
  68. // The one and only CRevAppApp object7 _1 w; a% X; a3 ^% h7 P
  69. / }7 K7 Q. J0 Q* m, r: i: y# L6 b
  70. CRevAppApp theApp;% s# x; n* I) k1 |; h8 U
  71. " L7 R1 p' v8 D6 C8 D2 s0 ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) U5 L0 t4 V- e
  73. {( S5 j& B. X' g8 R: [
  74.   int iEOF=0;* M# K" k# \3 h# @) A
  75.   char szTempName[MAX_PATH];
    / f9 U$ o" `* ?4 \
  76.   *szFileName=0;1 t  w9 v$ ~% N/ a) \4 E
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 i" z$ t) Y- M: |4 H9 ]3 s3 k, r
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')4 [3 Y4 ?$ ~7 Y5 `4 B
  79.   {7 [; y# X) ]3 Q2 Y
  80.     strcpy(szFileName,&szTempName[1]);
    / F7 F( P; c' j6 P' i
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)0 ?" m2 L! W) [  u1 t; s
  82.     {/ e& W9 z% T# L
  83.       iEOF=fscanf(fp,"%s",szTempName);
    , s/ j' v( v2 O' p
  84.       strcat(szFileName," ");
    : j5 Y7 g5 j! {& {5 R% d
  85.       strcat(szFileName,szTempName);
    3 u2 [8 F1 z- d: L1 a
  86.     }
    " m5 ~. `$ e  a
  87.     if(strlen(szFileName)>=1)
    $ Z$ I8 `! v  \
  88.     {
    ' p6 ]* h# d. L1 O3 y
  89.       szFileName[strlen(szFileName)-1]=0;1 D8 m9 z- F& h7 C: |  _- O: Z
  90.     }
    % n+ D' _. T8 F" F; Q
  91.   }
    7 B) e7 @" S6 H4 T5 k+ x7 t
  92.   return szFileName;. P5 c  v: z0 F' v; X5 A
  93. }
    ; e" _$ l( a/ f0 }1 D
  94. ' X9 @, t' r, Z& V, m
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! q8 y% n& h( \( i
  96. {
    * y+ z0 m! L! e
  97.   FILE *fp;
    & A6 T+ F: G4 b9 q% h, n9 h. }
  98.   char *key=NULL;
    : T$ X6 p4 Y; Z( ~( X+ ]1 w% D
  99.   char version[MAX_PATH];8 v; x0 C" D4 o, n( o4 w, p) B
  100.   LPUPDATEFILE file,olds;
    . _) R# T" x; ]' w& r, w$ I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 L) h' X) U6 W+ r

  102. 3 F. J% ^5 C1 ]: d0 ?% y0 }/ g& o
  103.   UpdateList.clear();. f1 x  x; c& x- ~* |; G, A  w9 M# J
  104.   UpdateFile.clear();* k! x! V& M* s; l& e
  105.   if(GetFileAttributes(filename)==-1) return false;; e5 L0 ?9 d$ ?
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 B2 a1 w9 g! x
  107.   fscanf(fp,"%s",version);
    0 O  d3 g8 G& U+ U  W8 ^( k
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }) t2 }$ l' G' g( N
  109.   while(fscanf(fp,"%s",version)!=EOF), b& W& W" U' j% N" ]/ Q
  110.   {
    $ [0 k6 }1 K. N' n+ t: `' |9 B. f1 E/ }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 Y) T: r! h4 `; _7 Y; S" z
  112.     fscanf(fp,"%s",file->path);
    4 ]% v2 [* \* v
  113.     ReadFileNames(fp,file->file);, N% d. r) Q5 b+ t9 l6 t
  114.     strcpy(file->full,".");: g9 M% D& ~- V! X- Y. v$ M
  115.     strcat(file->full,file->path);
    $ V' D- s- I" l1 {1 T  k0 C
  116.     strcat(file->full,file->file);
    0 l) |$ g- p/ K' g, V4 T
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 O6 k7 o* ~% X- p1 B4 e) E, I
  118.     {9 P7 o. {# @, g1 P! q9 v
  119.       file->vers=(float)atof(version);" q# ]7 Y4 v: v2 d0 [
  120.       UpdateList.push_back(file->full);
    . @" h( @, Y* u% q6 E
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));; N$ Q$ g' P( w& q) c
  122.     }2 `( ~8 n$ Q: t% c6 l
  123.     else: M0 [, h( S- f/ F  c
  124.     {* L2 O+ a; Z- Z, R
  125.       olds=(*p).second;
    7 b0 g9 ?" {0 }( Y
  126.       if(olds->vers<(float)atof(version))
    6 Y2 r) k8 m9 F+ \
  127.       {
    ! a/ s  ?. B" d/ B: x
  128.         olds->vers=(float)atof(version);
    7 H2 Q$ z8 X2 s7 A1 n
  129.       }
    2 W+ i0 L! a" o8 k5 ^
  130.       free(file);$ V+ D+ n: L! j2 o8 F$ R6 ?
  131.     }
    0 r% y- w: ~5 i. `. k, H0 C9 f0 D
  132.   }; e1 f. q9 ~5 T+ m* V! y, n
  133.   fclose(fp);
    - @( y$ t6 m! {6 V
  134.   return true;
    3 A! p. r+ M2 ?1 ]2 q/ E
  135. }
    9 [" w$ E4 N" r$ S/ m" q5 c, j

  136. ' n- @0 i8 G( }) j7 a  s( _2 O' c
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)6 ?: A* l7 f4 w
  138. {
    / L7 I9 P4 g' \: A9 @+ J
  139.   TCHAR  szFull[MAX_PATH];1 ]7 N8 o8 C1 k% w5 G/ u+ |
  140.   TCHAR *token,*inter;
    , _9 U/ P9 L/ F( b+ `
  141.   *szPath=0;4 [! {) Z) R2 C. \8 U! }* v4 `
  142.   strcpy(szFull,szFullPath);
    5 ^: V* Y4 y0 q) r- p1 m
  143.   token=strtok(szFull,"\\/");; h; K6 k( t  |" G* h; r
  144.   inter=token;
    $ A& \  O' O+ J$ q* c
  145.   while(token=strtok(NULL,"\\/"))
    - r  X8 L2 g9 ~# m
  146.   {0 X1 Y+ q, L, s7 C- O7 O& H
  147.     strcat(szPath,inter);
    3 E* r5 i, S+ L
  148.     strcat(szPath,"\");# M7 C0 g6 \2 u- Q# F" r3 F
  149.     inter=token;/ A. N* p9 D+ q/ Z
  150.   }
    5 M# Q" O7 x3 F, O/ v9 h3 a
  151.   return strlen(szPath);1 v* ^" P8 _: T, ^' I9 U
  152. }' t: D8 R) @/ j" a

  153. - q7 `) ^$ y4 Y* ^8 s9 B2 B7 u! V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)5 Y# w# x* H. ?
  155. {
    " r+ _8 G2 S. K' o$ G  n
  156.   DWORD attrib=GetFileAttributes(Target);
    ' s, E9 L$ l2 `
  157.   if(attrib!=-1)
    2 p  e2 E5 h% W  [
  158.   {
    # G4 W$ `- [4 G5 M
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 p6 T) ], q3 S
  160.     {0 B# H0 U$ j' E% d$ Y; r3 y+ r
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);- `& D3 A/ e" k6 ^6 f. z' Y
  162.       SetFileAttributes(Target,attrib);3 J, j7 m* b) X; A+ n  X8 V) R
  163.     }& J) c3 |4 `; q1 E/ M- `9 S
  164.   }
    5 G8 y  k$ p$ O. ?7 {; j8 N" X, A
  165.   CopyFile(Source,Target,Erase);
    : ~# b3 _8 o1 w6 M) F, r
  166. }
    0 O( U% }) x3 v
  167. 6 a, F: _% L4 F/ U7 k0 K. q
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...); w: X  L( T+ A7 P& ^+ o# i
  169. {3 a- ]4 [/ E, @' e5 q/ ]
  170.      FILE *fp;4 {9 b- r# v! y
  171.      char  szBuffer[8192];( q- [9 V1 P3 D6 m* l  O7 a. `
  172.   va_list  argptr;
    / B  H( d* W) o3 y2 z! X
  173. 2 @; r: a! _8 E8 n
  174.         va_start(argptr,message);% \( M/ J5 f! @8 b
  175.         vsprintf(szBuffer,message,argptr);0 u8 L8 n) R5 i% f
  176.         va_end(argptr);
    - _* n) k! F3 l7 G& V" |
  177.   fp=fopen(FileName,"a");
    0 g2 J& p# D. |  j* A, S
  178.   if(fp)
    ! Z2 Q# u% K, p- U9 i3 q' ~$ S* X
  179.   {6 H* H; e2 i- I9 n0 a) N0 R6 q2 s
  180.     fprintf(fp,szBuffer);  S  Z# G( H# `& ^( h, @, E
  181.     fclose(fp);% r4 a( v3 u1 u5 H! k- m. O  g7 a
  182.           _flushall();
    ) M1 H) R6 z* x- F* C( s7 X
  183.   }! f. F0 |: n0 d" f7 \2 M
  184. }
    ! o& @/ u7 I3 H3 g
  185. * f7 R( M+ I' O+ K8 Q
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 {+ l$ E; J3 b: N) V: s/ M1 }+ _2 Z: C( y
  187. {( n+ X/ Q, e7 U! @
  188.      FILE *fp;
    ' I  O2 s0 n3 p- e( [" J
  189.     DWORD  attrib;8 p1 `( o( N3 g. I* L3 I' K
  190.   attrib=GetFileAttributes(FileName);
    8 i, S/ m. B: q' c8 i3 I9 q$ ]
  191.   if(attrib!=-1)& G4 \8 j2 w) x9 H( \; P# Z7 o: V
  192.   {
    ; l! t+ ]( J7 }; m* A
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % E( d6 N- Y5 M/ ~/ s. F- G6 F3 }
  194.     if(!SetFileAttributes(FileName,attrib))
    7 c: a+ {  {  R  h
  195.     {9 Y$ a! P# v2 ]
  196.       return FALSE;
    4 e5 W/ T& c5 d! U
  197.     }0 W2 M/ P; s& i+ L1 |# ^$ q
  198.   }
    2 X" u" _$ c" I9 J
  199.   fp=fopen(FileName,"wb");
    * h. d! m1 n! d5 x
  200.   if(fp)
    ) e0 L: h+ D2 D# G, a% v
  201.   {
    & l2 S- [7 h3 p
  202.     fclose(fp);9 X% C; o% H+ l8 k
  203.   }
    4 y; j0 o! h8 t: D. R
  204.   return TRUE;# H( ~" R( H; v; ^
  205. }
    ) A) |& ]; j; |6 ~

  206. : y$ y# z& H+ C5 d# j, x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ; h3 ?2 t! k' E8 R! T
  208. {
    6 M; v  Y% o  x5 w
  209.   char filename[MAX_PATH];
    , q* D; p0 L' E. z1 M* }6 Y( q, E1 Z
  210.   LPUPDATEFILE file,olds;
    + b4 c/ ?/ R1 [1 H! w& n. w7 z- ^
  211.   std::map<int,CString>::iterator i;
    0 @3 \( z) @( O' j; J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ `/ X  y5 l5 L8 I8 J/ B' f  u: j
  213.   std::list<CString>::iterator l;
    , d+ Y; n' g/ P2 C' }. }; h4 ^6 \( B

  214. , Z& S5 m- I6 i
  215.   if(bFirstUpdate)- c( A9 [; f* i+ h
  216.   {
    9 a! M: ]3 o2 k! D  @
  217.     dwCurrFile=0;4 S) |+ W' U, f% Z9 Y
  218.     bFirstUpdate=FALSE;) l9 d0 q* Z; q. f% |
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 x* \- V( A6 A9 C. x, t  m
  220.     {
    % a( I* t  G6 ~3 _
  221.       dwTotalFiles=UpdateLocal.size();
    - Z# u0 \! _0 [# ~- e: K
  222.       dwDownLoaded=0;4 e- h1 j. c2 ?8 e& z
  223.       bSilentStep=FALSE;; V& A+ X: K7 F" l
  224.       bCompressed=TRUE;$ S/ T6 {4 d! L4 D
  225.       strExtLocal.Empty();- s9 n' o5 E1 h: G; B0 V5 P
  226.       strFullName=(*i).second;
    / s. @4 j# f1 f
  227.       dwProgramState=AP_CONNECT;: @, d+ o( Z6 W3 R2 e- H2 M
  228.       return TRUE;
    # O5 J4 f4 t, h( k5 R: v1 ]
  229.     }& V& d8 k. E+ ?8 }# L  n6 B+ g
  230.   }; b6 @6 Y! g8 L! F3 {5 E: O
  231.   else if(bRestartUpdater==FALSE)7 @: A! K0 P% E$ Y( f
  232.   {
    6 M6 d# B6 O, {
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())  R7 V: m' Q9 K8 J. p
  234.     {9 ~' L. M; \4 r2 z3 Y# G8 K
  235.       file=(*p).second;
    : H2 u6 c/ S3 F" ~" i
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - H3 u) m& O+ d7 z% ]+ F! [/ D
  237.       {
    . G+ E' N, v5 v7 H& a! C; \
  238.         olds=(*p).second;
    7 B2 W% ^9 S- A& G& X2 L/ Z: j
  239.         olds->vers=file->vers;
    4 B% {# C1 n. B) n& O
  240.       }
    $ v& M5 m4 V% P2 _* _8 U- C  y' _* h
  241.       else, R1 Y' s& x7 m
  242.       {, r$ y( R% f2 X* x  f' l
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 c1 A* U- f+ P" F! v
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    / O) f! q' B  A* b$ w" }, `4 {
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ; r$ y. u: @- H
  246.       }
    ( z# E: O* B7 i! [# e) U( G9 h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");2 w! d% N7 o- h/ G
  248.       sprintf(filename,"(%s)",file->file);
    / P% e/ l3 \% y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    & ~" a& k) f$ R# c  {' o
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }) V/ Y7 N# A7 K5 H8 L
  251.     }$ ]  V4 x4 }4 e; S* e2 v1 U
  252.     dwCurrFile++;
      M. {$ Z: V* y- }. R8 V
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())% e0 u" n+ W. U- w2 `
  254.     {
    . j8 ?: \4 p5 M- w3 y: H; ^7 x
  255.       bSilentStep=FALSE;1 G3 N9 `5 }% s+ O7 ]2 \  ?* W
  256.       bCompressed=TRUE;
    1 I5 Y* m0 f' F# L" O1 V, Z
  257.       strExtLocal.Empty();9 ^; B6 `! X, R
  258.       strFullName=(*i).second;
    1 ~- O! T, R% m" J1 T' X& ?% z
  259.       dwProgramState=AP_CONNECT;7 ~4 C7 ?. g1 P! U. y, c
  260.       return TRUE;" q# b2 N* e+ m# z
  261.     }# V4 p% P! {4 I2 y1 g' d4 C
  262.     if(!bRestartUpdater)
    3 J6 g9 r0 m9 |
  263.     {  T1 I0 J- O% ]' }
  264.       int iCurrSize,iFileSize;
    ( x+ P" T) Y% k1 o4 w% ?$ s
  265.       iCurrSize=0;5 m, R1 i4 D; [
  266.       iFileSize=UpdateList2.size();- `/ ~# V2 E6 m( F- f; E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    9 y+ P. c: m# X( ^# ^6 o& R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    $ b( x/ j- Y5 o8 s
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- L: l: Q2 n& V/ h2 w
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. Q6 ^+ A! K$ C* G/ Q  A
  271.       Fclearf(".\\update.dat");
    ; Y8 }: z. M( t/ `' k# U
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 s! I4 t* h+ k) N8 T) {
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 {9 Y2 `  e5 q! k# C' g) I" p
  274.       {2 V# ]9 h- f" T3 o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())( f- ?7 S5 U: }( e
  276.         {
    : K. @! E( K+ G3 y% `" @; t
  277.           file=(*p).second;
    0 f, d: z% O& S. A
  278.           sprintf(filename,"(%s)",file->file);, l! D! O2 A& i' f" N0 v
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 n) K0 g1 M+ M; l: n6 J" l7 c3 h. E
  280.           iCurrSize++;
    / a- K2 x) H$ \1 C' N% E& e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 j1 L) t+ u! y. y* m6 l* H
  282.         }
    7 v' c9 N3 P/ a: C' b2 v
  283.       }
    7 j1 A2 Q8 X2 v
  284.       unlink(".\\update.txt");& w& H" E2 w) E% x3 O1 n! y
  285.       unlink(".\\update.tmp");
    1 [, k9 }' W& Z) D8 d* k
  286.       Fclearf(".\\checkversion.dat");' s) v$ n8 A$ o4 H: j4 @
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);: @5 Q- r6 T! Z5 O
  288.       if(UpdateLocal.size())
    - x- U1 G( W& H2 y6 E. A2 i
  289.       {
    , J" F* e1 e! b1 q
  290.         UpdateLocal.clear();6 f- x  Y1 J# K7 N
  291.       }
    5 h# b9 [4 I! Y: H$ ~1 m1 w5 r# ?
  292.       if(UpdateFile3.size())
    % J1 E4 B* I4 T: K) }$ l. t
  293.       {# \/ T! o3 D8 H% A" G, b, I0 p
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & i. J) ]9 c# W5 j
  295.         {
    % _7 B) J+ h; [, Q6 K
  296.           file=(*p).second;
    ( |2 u/ \$ w% j
  297.           free(file);) }: a1 s9 j" x, W; c7 I% p8 m, C' D4 w
  298.         }
    6 m3 o7 [8 N' H) @9 }! }5 F
  299.         UpdateFile3.clear();
      V$ M, z, o# o3 b/ j8 T' F
  300.         UpdateList3.clear();& L. H" k( {1 r) ]. b7 t* Q
  301.       }
    , L+ F1 Z% z4 F
  302.       if(UpdateFile2.size())
    % r, }2 H3 I! B/ Z
  303.       {
    ( R, C2 q, R2 t% q+ c3 l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++). D5 Z1 B. g8 d+ I; a
  305.         {
    7 a8 ]; `( l  a7 d* @" m
  306.           file=(*p).second;
    ! s2 S3 s& I) o' T1 }, Y
  307.           free(file);# _* L1 {( m; h
  308.         }
    ! l. m! f! A8 X8 R5 d/ b8 T) Y
  309.         UpdateFile2.clear();
    0 b7 \3 b0 w* u" \1 p: M
  310.         UpdateList2.clear();
      b& s- R, u. X8 D2 [9 f8 j# A7 ?
  311.       }  \$ K- x( @2 q
  312.       if(UpdateFile1.size())4 \4 u1 B+ J! T( d, ?
  313.       {
    / b" d4 R& c0 _7 B3 ?9 W2 D0 ]% l
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 ~& G7 F; f* A4 b" h0 M
  315.         {- g+ |, S7 C6 R. _9 y
  316.           file=(*p).second;$ S1 o/ X. l0 j
  317.           free(file);3 ]2 B8 v! H; {! h; E% Q$ z6 ?
  318.         }. Y$ p: C8 Q8 |/ F- o! a# f- l
  319.         UpdateFile1.clear();2 Q# j; L6 E( B2 f0 j: p, E
  320.         UpdateList1.clear();1 [5 W% t; @# m3 O, z) c7 F
  321.       }5 b# T$ w/ v$ C0 Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ' P8 r) e2 x+ C# k
  323.     }( |; K% o# D' _8 }3 v
  324.   }5 n; d/ M2 |' F* b! z2 k3 z
  325.   return FALSE;* o$ i; Y2 r  h2 p) |8 R  f
  326. }
    : E. H. z5 Y- p
  327. 7 I0 }; {( O; j: L
  328. void CRevAppApp::ClearAll(void)1 ^8 X. R% Q3 r5 ?; L7 @- T
  329. {+ [1 j) {+ _/ g# S/ w
  330.   LPUPDATEFILE file;
    ! m2 E0 t8 E1 @  N9 _! W- X6 q! _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ E7 x1 w( ^" P# `3 i+ Z

  332. " q7 R- \. t! p' b
  333.   if(UpdateLocal.size())
    # ^2 x9 D8 B- Y( c
  334.   {0 v' Z* C: O& [# I% V, E
  335.     UpdateLocal.clear();( `3 T. H4 p5 ]3 L
  336.   }( v9 k* L' c1 ]
  337.   if(UpdateFile3.size())7 y' c# x( \$ o6 x! {, T/ G9 }0 {
  338.   {% C& p! T# U: `
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' d" m* e% Q9 V$ R3 c
  340.     {! s3 g( r: Q( p0 M. g% @9 W! |8 l; o
  341.       file=(*p).second;8 [9 Q& [. Z$ A% i4 _, P' p
  342.       free(file);, @  ]( T2 |0 {0 Y* v3 n
  343.     }
    1 R4 E( Y0 Z$ L6 ?0 |4 b
  344.     UpdateFile3.clear();( Z* ~0 b" c: C# A- ~1 V
  345.     UpdateList3.clear();( u9 h5 W' Q- i+ f
  346.   }% j/ {  Y# y# Z  H9 k4 A- d) g  ?
  347.   if(UpdateFile2.size())
    0 C! W& ~. I/ ~. b& N2 ?
  348.   {9 \' ]( s9 Q/ U) H8 |: K
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    4 j1 k1 e/ `! h$ Q9 u3 q: P
  350.     {) u/ ~2 d4 R* v. @$ @
  351.       file=(*p).second;: O* Y$ J& `/ N* w9 N# {% }, q
  352.       free(file);
    5 C$ x# R3 f( s# a9 C
  353.     }' i8 g, s# T, T( f$ @
  354.     UpdateFile2.clear();
    5 s+ K* F0 t7 a& T- T* Z0 n
  355.     UpdateList2.clear();
    ' U) j2 C) U. X$ T% m, N8 o' z
  356.   }
    , U, `& W; y3 b* z. W
  357.   if(UpdateFile1.size())$ u0 a2 R+ r8 t/ A. K! k, h* `$ ]# r
  358.   {. t; t0 T% ^6 g2 h
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ G7 `: ~3 _2 x( t$ r
  360.     {! U, i0 l/ ?# ~/ q! ]
  361.       file=(*p).second;1 ?* p; t  S/ ~% j* Y5 f0 p! U# t
  362.       free(file);
    & g/ F+ @" f0 ^# }
  363.     }
    ! A6 ]* [. j. G4 ?' E2 i; \
  364.     UpdateFile1.clear();
    1 A9 ~/ V3 X: I4 E( S' i; B1 N
  365.     UpdateList1.clear();
    $ E1 v* p, f$ [$ v' \/ Y9 V
  366.   }. J( t) d  _& F' T1 T  J3 r; d: U
  367. }  
    ( |( r; W. C: ~1 |/ f
  368.   
    ' i, Q7 T' A2 k0 V: e2 m# q
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 e( {2 E- \* z. m6 q' Y7 G/ Z
  370. {6 n+ V' l2 \6 O  V# u7 v- w5 Z
  371.   int c;
    ; `* b+ S3 Y+ w! f0 d, K
  372.   LPUPDATEFILE file1,file2;
    2 G. c1 _# H) Q. a
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ ~! V  O" |1 @9 |' A" V! ~
  374.   std::list<CString>::iterator l;
    * Z; {! E9 |* u3 P0 h/ _, M
  375. . q4 Z& Z0 G6 ?, t: R/ W
  376.   UpdateLocal.clear();, ?5 R4 j- g4 ~( O; A/ o! l
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    % p  @# N- }( x7 b5 P, h2 J
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);% t: H) V5 s4 V2 l# W% Z, m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 z* Q1 _6 w3 B% e4 u) q& I
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; j0 s9 ^+ k" U. k4 P: X. {) Y4 ~& a
  381.   if(UpdateFile3.size())
    3 ~# [$ a9 V/ ^1 g4 w# R
  382.   {6 g$ e- j# |$ ?+ }! [7 V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)9 u3 B4 t9 g' w9 O) @
  384.     {; u$ d0 u$ ?( K
  385.       file2=(LPUPDATEFILE)(*i).second;
    ) @; n. H" V9 |  E  \! o# o9 P
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 T: w" _) _" ?6 t
  387.       {0 f" g  U$ D$ _
  388.         file1=(LPUPDATEFILE)(*p).second;& Q2 i! A/ D( [9 o
  389.         file1->vers=file2->vers;
    ' h1 a- ~5 o) u
  390.       }2 e4 _* E! v' M
  391.       else. ]0 C; u7 |8 [; U, M& \
  392.       {% a1 N9 N6 N2 J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * Q. l" k7 q) |' j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));3 h( y: z2 w% p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. ]  }1 q5 K7 }* [1 H* a
  396.       }
    8 U8 Q9 h0 T! o! t* A1 x1 F
  397.     }! v' b6 b! ]6 l: p$ m: I5 V+ L
  398.   }$ K5 u6 Z  D2 \1 k# O
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ; P" |( T: J/ h3 G/ m
  400.   {1 j8 F: _/ l  z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ) s8 v  f4 I" R& x/ R5 q* ~
  402.     {. s2 r$ w1 s* y
  403.       file2=(LPUPDATEFILE)(*i).second;
    + h& B( w9 J2 g( w; M2 {6 p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())  @- O  t# ^' V% ^" W+ B
  405.       {
    1 s# \, s3 q' T" t, q8 W( h- A
  406.         file1=(LPUPDATEFILE)(*p).second;+ O# R1 C, `# K; ]9 q, \
  407.         if(file1->vers!=file2->vers)
      v$ J, |9 b( m
  408.         {8 d7 l6 c5 c6 d" p5 h- {* o
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 p; h# Q7 s' l) h+ h; R0 v
  410.           c++;
    - C6 p1 l1 C/ ]$ T( x
  411.         }+ x% G! U8 h$ a5 Y7 s5 D
  412.       }
    6 H  b" u) s% d- G
  413.       else
    # h- V' T  {2 C- V; [) J( V
  414.       {
    . o, T- S1 {  m- I. @
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) J: y% U5 d$ |6 |+ c4 b
  416.         c++;% n( U; |2 d* `
  417.       }
    - L6 J0 d! G. {( K
  418.     }
    8 I% [% D7 M" V1 m, F# l0 C+ T: d  n
  419.   }/ ^, [% }! P5 E2 K2 I
  420.   unlink(".\\DownLoad\\update.txt");" H/ t  X# A7 M. m( P: _7 I
  421.   if(UpdateLocal.size()) return TRUE;
    ' p( b- f! d" }/ X. e* S0 b& i  ]: b
  422.   else                   return FALSE;
    5 ?: D4 ^% `5 T$ I/ F  W# G- A; m* \% M
  423. }
    " w& X2 k9 V$ k" G/ X
  424. 7 V5 B* t0 b0 [' ?3 d
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"0 O7 {. x0 W# E# {, {
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    & z3 {3 }9 N. A; I7 V5 _& A

  427. , R( P" u- _+ E, Y! }3 N7 P

  428. 2 F. ]9 `2 c5 w2 C

  429. 4 D! Z" }6 l4 m# N: U) \" l+ t
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ) U, ?  a' a: B( Q: Z% v0 Z
  431. {
    " e, h8 j* i: n
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    " d# i2 y: i  G# e( e7 N$ t
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( k' f( ~1 [" h3 |3 w
  434.   {# q" N# M- o7 H: N9 ~
  435.     char szLanguage[50];
    / p; R! K, |# ~6 \+ B
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ! \, {9 S5 d/ w9 O. K% Y
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 P, K: Q, N  I( d* |
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( {$ Z% {+ p- ~$ S3 ^( [
  439.     else                                   m_iLanguage=ENGLISH;  {, d' Q- O' a( c! O
  440.     char szRegister[100];4 u0 N: e5 g; T
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - l6 q  F) C: i9 X
  442.     strRegsName=szRegister;
      j/ z6 D7 V" v5 I# V: L8 O
  443.     char szPatchURL[100];: Z, n3 ~4 [3 p8 G) r5 s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " f' S, q9 m6 z- e4 Q' W6 @9 |
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - G( f& N5 V8 N
  446.   }! I. a9 r9 }" n
  447.   else
    " c  Q: J' n# H- ]0 \, a. c
  448.   {
    $ T7 P1 z# B# a5 r0 G
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 q2 |2 \8 a5 L4 x: m. E
  450.     strRegsName=DEFAULT_REG_URL;: E+ K- k/ j  c9 m
  451.   }
    9 H3 O: H8 }  U, E+ U) b
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ) |8 p/ s7 g! J" n
  453.   {
    8 w' t' _. V& U+ o. y, ^+ }0 _
  454.     char szIP[50];
    9 Y1 E) Q5 C9 I" F$ m7 `# s9 S
  455.     char szDIR[300];
    # ?: v9 z/ m3 f; Y2 o
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))- |3 R0 h. `8 w, `
  457.     {
    6 B1 h3 k# N( a2 x/ V
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");4 g+ ^9 I& P: A5 ^, a7 w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! Z+ q& s, b- l3 K7 g" ~, p  G0 F
  460.       strHostName=szIP;% g1 N" e, _6 L& C, u
  461.       strHostPath.Format("/%s",szDIR);
    / G2 }+ ?- q4 Q+ I1 ?
  462.     }# j+ n" _0 }( m2 u/ T8 a
  463.     else3 j, B2 i( i) w  S
  464.     {
      _) q$ [) }  L) \: O$ R8 k
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)5 l" ]+ s; i: H! ]8 C
  466.       {
    2 X- T  A5 y1 F7 \$ A
  467.         char szLanguage[50];
    * ]& ~9 Q0 e0 a. F7 j7 Q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");5 C; R% x, X9 ]
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; z. M: E; d! h# [( m- y
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) y5 x1 k% B, i1 v4 t% m
  471.         else                                   m_iLanguage=ENGLISH;2 v! \0 x" }0 R; ^1 q
  472.         char szRegister[100];
    : z* A6 h( B4 x+ |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    9 F, |6 P  s6 Z8 ]9 o( @1 `
  474.         strRegsName=szRegister;
    ! R) `! b' [1 d9 F
  475.         char szPatchURL[100];
    - A. U2 l8 D! \; `
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");* Y' H9 @! V& C+ ~$ Y% \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 ?3 [. \2 Y# h9 i3 m
  478.       }: h9 o* M$ h, ^+ c! j
  479.       else3 P+ k7 h0 K; H/ q9 J- _
  480.       {
    0 l0 y. V8 Y! K! A) U& h
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    : G( \- q, M# l1 k. g
  482.         strRegsName=DEFAULT_REG_URL;
    ; w* O( @6 u: M7 f! h8 d& o# M
  483.       }
    1 D7 [! X0 [7 ?7 D( E/ j5 b
  484.     }; W# c! D" j$ E, L& g7 D  H
  485.   }
    8 C1 `0 L# R. a0 Y
  486.   return true;; c+ B& R6 [0 O  X# M% {& ~( Z" ?5 `
  487. }6 S8 T2 {# p5 z9 n: U

  488. * h, e7 ?# o0 y! r+ C; j
  489. #include ".\ZLib\unzip.h"
    + K4 ]& S7 y# d
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 c7 G0 D1 O8 ^; j4 _
  491. /////////////////////////////////////////////////////////////////////////////
    5 m$ q5 c& r& J( Q
  492. // CRevAppApp initialization
    , e$ }2 F# Q% h2 {7 a" l$ w, ], E0 F
  493. 8 c+ F% [$ u, s  b2 S- ~
  494. BOOL CRevAppApp::InitInstance()
    % a5 R& c8 w3 f' ~# L
  495. {
    # r" V! @) p" A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 B) v8 [: @' t6 Y8 u0 a3 K

  497. & Y$ [/ q/ g* N/ e' D( r' k
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# ^: U/ C3 {3 w6 L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( A& o3 M6 H( |9 f9 f$ u
  500.   {6 f; s) s+ g$ s% N4 G7 h' {9 v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    / o' Y" ~* R# i( ^& _% r, M0 g: \
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
      s- |( Q0 f7 I; g: H3 g
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))+ f" }6 n' ]2 N. k( c
  504.     {
    ; ^* b5 g' m+ y5 S* d7 [
  505.       strcpy(szPath,szPathTarget);
    / R" h( n! P5 D9 f2 Y: ]1 Q
  506.       SetCurrentDirectory(szPath);( D$ I* ]. V% ^
  507.     }
    0 j2 z5 g( j# w% S9 B2 s" G# q
  508.   }
    6 B2 t* e! p* N! k8 V  C8 z% V
  509. #ifdef _DEBUG
    2 y, Z- [+ y# x5 I' N, G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    / J* l( E/ n6 Y5 ~
  511. #else6 N2 _. j+ n6 y" m! q8 o2 R
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) n6 l, o4 b) g" N' |& f5 O% b
  513. #endif
    $ W. i/ g4 c: y; l  {  u1 B) N% X
  514.   {  P; G6 |+ }" C) K
  515.     char tempFileName[MAX_PATH];
    # D$ H$ t5 J- n' w/ W$ e$ k
  516.     strcpy(tempFileName,szPathSource);1 E+ r" x  i* w. L
  517.     tempFileName[strlen(szPathSource)-12]=0;
    / O2 [; [8 I" \, {1 K3 ?  ]/ R) \
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ; b' R7 l# s2 P! G+ l" @: y7 I7 Z0 Y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);9 \7 I$ u& r5 {) q; Y" ]
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% V2 E+ L* W; e: h0 Z
  521.     return TRUE;9 P9 T1 `1 P5 R& x& c6 W
  522.   }" J& t8 U# v- V0 W/ R% P
  523.   // Nuke 0118: Delete run.exe
    ; m. {. `3 I/ g+ [, @. i
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );5 @5 V3 S! c, a) `+ N
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");0 P+ b' g7 |* K) w  A
  526.   if(!ReadCfgFile("Config.ini"))5 T  f* e! x" W) b$ ?
  527.   {" J: e0 m2 @7 R9 x" ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);& D. A0 J$ j" e- a8 [+ }
  529.     return TRUE;
    7 P: B/ u% n+ d6 l: |1 {3 \+ n" `
  530.   }
    # |9 \: F9 @( x: q/ U( J
  531.   HANDLE mutex;
    % W- I" o2 @1 Z& T, J! O' O
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% X! Y+ [, a; h, v! }8 O
  533.   {: Q+ I$ `2 W! a( C5 t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)) O% O. N* Y$ l2 F: `2 L
  535.     {
    ; F9 M/ Q; h8 s0 p; y
  536.       CloseHandle(mutex);
    7 ]0 ]6 z3 _1 H- D7 x2 A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);3 T5 K; p( [4 M2 k& E" o
  538.       return TRUE;6 ^. M' G* [0 r6 O" j4 ~
  539.     }
    ; X, ?+ @7 _) I* w# [
  540.   }  ) A! J& |; P) a& t- ^" w
  541.   CloseHandle(mutex);
    ; y8 O9 A/ I8 R/ @; ^

  542. 7 s8 U8 O9 L1 [5 r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    " _) T- \7 R) v- w; [! M3 P* i
  544. $ e, @6 `# J! m& g
  545.         AfxEnableControlContainer();. T& g0 I+ ^  E
  546. % ~9 [9 V5 m+ g& r0 I  r3 ?
  547.   bCanUpdate=FALSE;3 D( C% y+ q# N& R$ b+ K( V
  548.   dwStartUpSteps=1;
    1 e5 h1 `$ x& v5 y
  549.   dwProgramState=AP_NOTHING;
    ) f. j. ^- x7 Z3 d, L0 M2 X

  550. 3 y  I: T' K6 e2 G. T2 `6 I# t
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);1 }6 \) x* h6 p) {. ?* B" _
  552. ! @9 {! E, W- O* p+ U" b
  553.         // Standard initialization
    + |+ w6 s! W3 t9 x$ a8 h
  554.         // If you are not using these features and wish to reduce the size
      G9 J; I% w0 I
  555.         //  of your final executable, you should remove from the following6 c; l; ?4 {( k5 Z
  556.         //  the specific initialization routines you do not need.
    , Y5 l# G1 C5 i$ W4 _; q

  557. 8 I6 D% {7 F1 C3 g, X
  558. #ifdef _AFXDLL: s3 z. n4 ^6 Q' [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL7 u% m! I( \( L% a
  560. #else
    / M2 R0 X8 e. v  ?3 v2 ?; D
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& p0 U2 n# e  q! H& X9 `
  562. #endif
    # q5 b0 Y0 r( I9 q5 S1 J

  563. 7 ^. u7 Y9 s3 d, d& W  U
  564.   dlg=new CRevAppDlg;- f3 b3 q8 ~4 R7 ?; j: H
  565.   dlg->Create(IDD_REVAPP_DIALOG);0 ]/ L1 v0 z- t+ r& O3 M
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 L% f9 N6 l9 r! u- g; V
  567.   m_pMainWnd=dlg;1 G/ l' T. O  @3 s0 x& m
  568. 7 U! H2 U, U* j6 K- [
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) `3 K! H8 [( ^7 ?- r% T0 V

  570. ' Y& ~; e0 H5 ?& |' ^
  571. //  GdiplusStartupInput gdiplusStartupInput;+ X3 P2 }) ~5 |- W- @8 l- M$ i
  572. //  ULONG_PTR gdiplusToken;
    ! u9 P; Q% W+ K( R" n( ]
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    , I( h: X5 {  d

  574. 0 q, j: H: D( r4 I" O
  575. //        CRevAppDlg dlg;! m  C3 Y6 o5 S4 s9 G) C6 `" J
  576. //        int nResponse = dlg.DoModal();
    " z' w, M3 `7 Z( l  J& g
  577. //        if (nResponse == IDOK)
    0 B; L( h2 w: l0 ?' v# |9 Q
  578. //        {( h% G( @0 r  A# \) L: G
  579. //                // TODO: Place code here to handle when the dialog is
    2 D: p9 u/ g3 @! ]% |0 t- o& y; `
  580. //                //  dismissed with OK
    . {5 b5 S0 T8 l+ E6 p: q
  581. //        }5 b# s( v+ i7 j' ?
  582. //        else if (nResponse == IDCANCEL)
    ( b7 B8 E+ n5 m; G
  583. //        {- y( I  e3 ]' p% Y
  584. //                // TODO: Place code here to handle when the dialog is
    ! d4 X, o; t) z3 u
  585. //                //  dismissed with Cancel% B8 h5 o8 @) A3 l$ S$ E
  586. //        }$ E# Z# _$ F/ H% F
  587. & g: @) X# v( P9 }0 ]6 D
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    + q! E; Z: Z( {9 K9 _  g' {& D( b8 \
  589.         //  application, rather than start the application's message pump.
    4 O3 y3 v  H/ G# D
  590.         return TRUE;* N5 R3 q- ^- s9 r, w5 s: p6 D+ t$ L
  591. }
    0 X0 c  |" M. f6 }* r- r6 Q
  592. % ^! ]7 ~4 H  @. T& A) l# ~
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    . i8 m8 o3 f9 m& x7 i7 U4 H
  594. {
    " H  w6 ~9 l# G( A
  595.   int i;; w! |: W) Y: P$ m1 H& d
  596.   char *szRet;* E7 h1 t3 z* s" @

  597. ' m/ Y9 K. V4 X* C
  598.   if(pSource) { itoken=0; sztoken=pSource; }  v) ]! w% {: H/ x& i
  599.   if(sztoken)% X; t/ r. p3 r8 |1 N
  600.   {
    ) w2 o, N4 l5 m$ w2 R# [
  601.     szRet=&sztoken[itoken];; c- K4 c' g, j& C- j% P* ~
  602.     while(sztoken[itoken])
    7 u" N% b8 w# L
  603.     {
    3 k7 e5 a! c+ [6 f
  604.       for(i=0;i<(int)strlen(token);i++)% u. N4 g$ b; T2 @
  605.       {
    1 ]4 }" |! g% E( n: I9 D( m
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 v1 ~: ^# B) c8 P  i  `
  607.         {  z( m% I8 }& f) z
  608.           sztoken[itoken++]=0;
    ; C5 s0 X+ O' r' ?8 P% u
  609.           sztoken[itoken++]=0;7 `2 B5 o( F, V0 G
  610.           return szRet;2 u6 L# Y# W+ i' N9 w( s9 ^) N' m
  611.         }) F0 @; b0 G1 a3 X* Q2 L) f7 |
  612.       }. }# m' @4 y  `2 K$ R' @- r
  613.       itoken++;! C- L9 }) ]$ x5 B2 h8 L
  614.     }
    # m0 c( [+ K" Q' I% x& W0 q1 P
  615.   }( j* M: a( F* A: a, X
  616.   return NULL;: |5 [" y2 s6 g) v0 q2 t% V# v& d
  617. }
    - ]2 i8 X# ]+ `% ^: ?- p

  618. + q/ l5 V5 _& b/ ?1 u
  619. void ProcessProc(long Total,long Current)' m& S; a  |; F6 Z4 ^  B* o  u% I
  620. {
    ; K! A6 ?7 M" q: k. t
  621.         MSG msg;" E3 S7 b! [2 G, l  \4 d' }4 W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);; z3 b5 X# |1 W, s. }5 S) b: I1 s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ E, k! Q' A: u9 F2 ?2 A2 K
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))4 z  x  z, m$ y
  625.         {
    - F$ O! L. {5 b3 g4 l
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - P* i* p# ^$ E2 g1 C, s& ]9 w
  627.                 {% [" U5 Y: i7 f$ Y% \; S7 L
  628.                         return;
    + W  H6 p" z+ I% J- X" O4 z
  629.                 }
      V9 n. Q' g, _: t% W1 p
  630.                 TranslateMessage(&msg);" Q2 f- d3 s, W! c/ E( u
  631.                 DispatchMessage(&msg);
    & `. n. N" X' _) q0 f: g7 B
  632.         }       
    : w, W. V' G  i- ~: p
  633. }. g' q& E3 b+ \: u+ v- i

  634. ) ?# w: c0 p) s( J
  635. BOOL bFirstChar=TRUE;
    . `6 `' @3 G# O7 i8 R

  636. ) p" C6 |# t+ P1 t
  637. BOOL CRevAppApp::OnIdle(LONG lCount), F# X: t* k8 i$ T& G2 K
  638. {* v0 G* g2 [) s/ E8 X3 W6 G
  639.         // TODO: Add your specialized code here and/or call the base class
    ' f& @9 a# u% S5 S* X, z* F" T% y
  640.   switch(dwProgramState); d0 `% {7 p* E
  641.   {
    1 R3 Z2 y& ~; S9 m. n9 P) K
  642.   case AP_NOTHING:. A+ I; a1 j! I) H- q
  643.     switch(dwStartUpSteps)8 \0 [9 C. O$ O7 O; g
  644.     {
    0 z% n6 D, ^1 X) U( N
  645.     case 1:, z% v4 z" A9 g! _5 }! x
  646.       {# i) F2 g  x% ~" L! {3 Q
  647.         int i;
    0 o3 R: |5 J. v3 `6 ~
  648.         CDC *pCDC=dlg->GetDC();$ W7 P! |  W. _0 v. s$ H8 \# z
  649.         HDC hdcwnd=pCDC->m_hDC;
    : }" E# k+ H+ l- ^& X  P
  650. //        Graphics graphics(hdcwnd);
    / X" r+ ]% y3 _9 g4 e. B0 L5 _! t
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 |4 g" U( b2 s" n* ]
  652. //        INT iWidth=bitmap.GetWidth();. K' ^6 z/ v1 b) X) t% p$ d6 V0 `3 z
  653. //        INT iHeight=bitmap.GetHeight();: F' E0 R! i* {  _6 l* }4 Y  R
  654. //        Color color,colorTemp;' a) R' k1 c. Z" |
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    & K/ ?: g' p, r
  656. //        {) W, x* Q  s+ n7 @4 |  P& o. s
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
      c/ G* N# h4 t
  658. //          {
    : r3 i1 C$ R- I2 o) U" T
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
      ?7 J; v. \$ ^6 {/ r! t
  660. //            colorTemp.SetValue(color.MakeARGB(# l$ L3 ]1 @1 P
  661. //              (BYTE)(255*iColumn/iWidth)," d; H' m& p) Y1 L7 A' V
  662. //              color.GetRed()," O7 g5 ^0 D/ m4 j  V5 ^% r
  663. //              color.GetGreen(),3 P% |6 j  f5 P& c0 l+ O
  664. //              color.GetBlue()));
    8 ?' L3 t2 {( [( d5 J
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);: c3 D5 T" g* W5 D- B7 P4 `7 }% u, P
  666. //          }
    , ~8 P$ v7 u1 s1 {" `
  667. //        }  N2 k7 v) @2 u$ ^  v
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    : c: v1 l  ?8 d! t7 m3 `! W7 q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; c! w% t! {( T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    % g3 B7 T1 U- I3 J+ i
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");* C- P( n* Z$ s' A9 `5 ^
  672.         for(i=0;i<240;i+=8)
    * i! R7 j0 a# E
  673.         {
    5 [' p, d' C- L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + Y& R. Z- j( M+ ~
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 \. ^' H, z# Y& ~' @$ V* a/ J  L7 m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; N3 G2 Q/ Z7 y# |- m# \7 \
  677.           Sleep(33);
    $ z2 O# S# V4 T
  678.         }
    , O/ `' b* I# Q+ ?7 k( K3 R1 E" K
  679.         Sleep(1000);1 o( R, U! j. e# `, ]% m  |
  680.         for(i=240;i>0;i-=8)6 Z0 }7 a, K1 u* Q$ t% h* b
  681.         {, j! R- h8 z" m! D1 l9 ~  h& g
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ! }0 b& E8 U; [# E
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);/ v9 @- T5 n2 [0 [. ?6 d8 m& p# w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);! B0 z% x5 [! m  w- k4 K& Z7 m
  685.           Sleep(33);. }9 k4 a' a5 d8 g" A+ v; ?- M
  686.         }
    9 s# `, S% P" ^/ m2 V- d
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);3 E! Y( i: a" J+ \& h
  688.         dlg->ReleaseDC(pCDC);
    & M# t- F7 Z* G6 b6 D" }9 K
  689.         DeleteDC(hdctar);
    ( N2 t" G8 N! V2 I% C8 `1 f% G
  690.         DeleteDC(hdcsrc);# X3 {/ j2 B' i/ J! m- ^
  691.         DeleteDC(hdcorg);
    . H" U) _4 Z" }2 H4 r
  692.       }. n' ~  m; }& `
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);9 }- }# p3 a0 t* `2 v- K# |; j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; w" z0 O! m0 U* Z. G8 c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 [/ R1 C& J, M0 Y# Z; \
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    + i( w$ F+ G! K4 d/ F
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! H6 @: g! K1 c+ }" ~( n
  698.       if(!Dn.Connected())9 X6 w6 y* W# t- S' x
  699.       {
      [# u/ ^6 Q0 i
  700.         dwTotalFiles=1;, `. S$ ~# U8 d9 l6 u! g
  701.         dwDownLoaded=0;3 Z) v6 `8 [# A5 h( j% g7 ]$ S
  702.         bSilentStep=TRUE;
    6 M+ G& x8 H. [
  703.         bCompressed=FALSE;
    8 E0 x5 g' J, G$ e' M
  704.         strExtLocal.Empty();
    8 `5 q+ H8 `$ C! `9 M# [
  705.         strFullName="readme.txt";
    2 _6 u8 e* j8 D% T6 P. _
  706.         dwProgramState=AP_CONNECT;
    0 u0 c, h7 ]8 Q9 x8 p
  707.       }
    . k% r& d& Y( V5 o8 |) p" ?
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 a0 e4 x# O5 y* J, R
  709.       dwStartUpSteps=2;6 m7 P  _3 m+ ~, P3 z2 M
  710.       break;' C/ d+ M7 \0 l
  711.     case 2:. x" T2 ~5 c, X3 x2 u
  712.       {
    6 O' |& I/ O4 B+ G/ M6 b9 c- O9 Z% r
  713.         int iEOF;
    " Y9 d3 X5 Y2 s# E  A7 `5 M
  714.         FILE *fp;/ f2 |1 n& x* g7 `& o
  715.         char szString[512];% N3 ?% k: G5 ?  L0 ?; U
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & N5 n4 ~2 A1 d8 m4 I; H
  717.         if(fp)
    ( W# T+ \' E5 {; S. h$ b
  718.         {
    + o3 G9 \" F5 g' @. s0 D& P
  719.           do& R  E5 l5 O8 A9 c8 ~
  720.           {
    6 q% E+ A% t) ?6 b+ {8 r
  721.             iEOF=fscanf(fp,"%s",szString);
    ( [, h7 D  r# T+ h6 H, u
  722.             if(strlen(szString))  N% C- Y' L/ B4 N0 z8 }' e
  723.             {
    - K& i9 ~( v- d# k( p8 B2 j- V
  724.               if(bFirstChar)
    0 @& Q: v7 \: ^! x6 S# y
  725.               {; C  H5 t* a- q8 a2 s
  726.                 bFirstChar=FALSE;0 B+ ~& j5 n- O0 |' |
  727.                 bConnectIsBig5=FALSE;7 n% M% W! `+ |8 d$ h, U; L5 b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ t$ t) b  q6 d. V) N
  729.               }
    6 A5 g# f  ]3 Z" i/ F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    & {3 ]2 R5 i; Y0 _" a+ T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 {; ^; W. W. c) _1 d0 r
  732.               dlg->m_ListText.AddString(szString);& \: X2 y0 r. x( l' V- p6 r4 s1 t
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & O" X. k5 q0 U7 s2 {+ A+ `# n
  734.               *szString=0;; T' L; O; T  H7 J$ b
  735.             }- S/ F+ H; ?" h: G5 o: c
  736.           } while(iEOF!=EOF);
    + k8 S* ~) o6 R/ i' I' @. F) \0 p3 d
  737.           fclose(fp);; z" ~% e. C8 c: h) j% i
  738.           unlink(".\\DownLoad\\readme.txt");( p' z) l, b4 ]. s/ @! o/ ?, |
  739.           dwStartUpSteps=3;  r! h' |& v* P6 Z7 o7 I$ Z1 q
  740.         }/ j1 S, s+ [! P9 Z
  741.       }: x+ d$ z3 B* U  J+ n
  742.       break;  x9 B" D' Z/ O5 V
  743.     case 3:- X: S6 P) J! _# a
  744.       if(!Dn.Connected())
    3 {7 k( p- [, }2 v2 I
  745.       {1 f9 ^5 g) @: s1 d6 m( F+ a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    3 w) g, A, e& W+ I
  747.         dwTotalFiles=1;; k# I% }  P2 f9 Q3 K* ~
  748.         dwDownLoaded=0;
    * U: t& {# q. ?5 m& Y% N& d' s
  749.         bSilentStep=TRUE;# S6 Q5 {' }0 T) H
  750.         bCompressed=FALSE;( N2 V8 a( w# n5 J- X6 X. T
  751.         strExtLocal.Empty();
    % F* Y  S4 s9 B- r$ r* A: m- I
  752.         strFullName="checkversion.txt";/ e0 x7 o/ T' l0 L1 Y( m
  753.         dwProgramState=AP_CONNECT;4 X  m1 H9 A. m  d( z
  754.       }9 V' F) g- T+ v, c9 b7 t; ?1 n/ a
  755.       dwStartUpSteps=4;6 S3 l* j& i+ q. _; P3 R2 I. J. }- ?- |
  756.       break;
    6 D& m+ d+ h' s0 N0 |4 R
  757.     case 4:
    2 a, S' \6 [* C5 i  t0 t
  758.       {
    $ C5 X9 Z, a$ S4 e* P
  759.         FILE *fp;6 w3 U4 W. G4 i& ]" B
  760.         char szString1[128];
    . @# R0 t* q# C/ F% v& T" k  _
  761.         char szString2[128];
    , M% |# ^9 r3 m; r5 c0 U+ j, Y9 `
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");0 A5 ^. H* ~, a" c2 t( v
  763.         if(fp)
    & T/ ^/ |: [! V4 C% y8 @4 A
  764.         {/ R2 Y7 n1 {, M* ^, x/ m. M. E$ B8 c3 t
  765.           fscanf(fp,"%s",szString1);
    ( I; g2 g& Z! U+ y' Y6 c3 V( ~
  766.           fclose(fp);- f1 \; R8 L+ h
  767.           fCheckVersion=atof(szString1);. @2 u& Q: p# J9 B& M5 G
  768.           fp=fopen(".\\checkversion.dat","r");9 `4 G7 [2 `4 ~" y" c9 v5 L6 F
  769.           if(fp)2 r" W* ~( o. W
  770.           {
    " K3 b6 P2 e/ y& ?
  771.             fscanf(fp,"%s",szString2);, S9 m8 K4 C( W5 s
  772.             fclose(fp);
    $ f! h1 r5 K# h% E8 A
  773.             if(atof(szString1)!=atof(szString2))
    1 |9 U6 W, j2 q+ ~, K1 A; B9 K5 h
  774.             {
    $ P' T/ E3 Q9 v) I. B9 f" Q! Q5 _# y
  775.               if(!Dn.Connected())1 ^, C, u& A) F1 T  c0 ]
  776.               {
    2 @4 Z; M6 ^' q$ z. p. t0 V
  777.                 bFirstUpdate=TRUE;
    + K. x8 }) ~% s1 ]; o1 A
  778.                 dwTotalFiles=1;
    ) n% C6 [* `& ~$ A  P& \, j  `6 ~
  779.                 dwDownLoaded=0;8 ?0 Z7 d# H' [
  780.                 bSilentStep=FALSE;" e5 Q1 j* |" W/ n2 o% L3 |: l
  781.                 bCompressed=TRUE;
    3 d; R( |2 R1 j* Q+ z& }
  782.                 strExtLocal=".\\DownLoad\";6 l8 M8 K4 n5 M5 N% ?
  783.                 strFullName="update.txt";
      l3 b+ n1 D. T9 ~4 v
  784.                 dwProgramState=AP_CONNECT;
    ' K2 V& H9 X/ \6 y1 i2 f8 H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) V) L" [7 B8 R# g
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' f- ?2 o9 }- C0 y. t
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" d# K( L1 {% K, \# m) o- t
  788. 8 z& |. \9 j; }) d
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( i! A' [" s2 H2 m
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ; g. z9 K2 I6 x$ \3 h8 z; K* U+ Q" l1 I
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    . t, J) U9 A0 K4 p! ^
  792.                 {
    7 O% R2 ^0 T# Y2 N( W3 f& J: y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 T( S3 `- ^! p( f* F( Q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + L0 e+ y- o, W5 T1 [4 K4 O
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    . g) Y/ }" |* ?! B
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Z8 n+ z0 ^" W- R8 B  b

  797. . g. X' J& O* S; m/ {/ p0 N
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");6 A5 T8 f; `5 Y5 R1 U
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    7 @' H- T3 S) K0 q4 ?, c5 ~
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ' T% U9 [  W: i( X$ l+ @  c
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 i6 d7 k" q. w4 A* S( a
  802.                 }
    ' l3 w' J7 T6 F& p* {) A
  803.                 dwStartUpSteps=5;
    * v1 T* L+ D, C3 u& X1 d
  804.               }% {" v! a( L7 H1 m- K- ~' x0 z
  805.             }: Q6 j7 s4 {# ?+ {
  806.             else  `2 ^9 [4 V+ x: X/ y! e5 Q& `
  807.             {3 L9 y% K& y" A: q- p& r
  808.               unlink(".\\DownLoad\\checkversion.txt");
    & @2 a5 o! c1 f# R% Z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");9 d# W* \7 S* r! c* k, K" v! H
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");2 r0 |( ?3 e* J( L$ G, g% W5 s, i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");8 y7 z8 L' ~# l+ W  G0 f

  812. / I; b% K+ @% U$ q0 v" K. S
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 i3 T+ ~3 J7 t
  814.               dwStartUpSteps=99;( K7 @. O0 ?1 U% p% Y) b1 ]& K
  815.               bFinishUpdated=TRUE;
    / f. b/ E3 `" n: A# L
  816.               bCanUpdate=TRUE;
    + ?# W1 h) X; `+ P+ ^
  817.             }
    ( Y# F9 G- ?: u4 m# ?
  818.           }% g; e% w) e& Y% g
  819.           else
    4 Q& C/ ]9 V3 m# v# H8 A% r! Z9 a
  820.           {
    % b7 [2 n; H  X; M. q
  821.             if(!Dn.Connected())9 c& t& r  o( i/ `, a# n# P
  822.             {
    7 k% ?* M3 ?2 }6 b( f- K
  823.               bFirstUpdate=TRUE;/ x- m( o* b, k* z! w6 m
  824.               dwTotalFiles=1;
    $ u) j$ P. U: {/ s6 Q9 S
  825.               dwDownLoaded=0;. F# C4 p: T: _8 T
  826.               bSilentStep=FALSE;  e3 l+ E1 u* }
  827.               bCompressed=TRUE;
    : r" w7 q2 x. y
  828.               strExtLocal=".\\DownLoad\";( g- L2 Q9 ^! p# T7 |1 e, i( R
  829.               strFullName="update.txt";& J3 N$ ], h8 X! Y# e- A# i
  830.               dwProgramState=AP_CONNECT;& e& H' z' G( m- E& x/ f9 O1 I
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; x& G7 ]4 ?5 `! u
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    . f; C# b; s+ s$ @
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");: \  n5 i, K$ E
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 P: X' K9 N8 m- f8 ^
  835.               unlink(".\\DownLoad\\checkversion.txt");
    8 j8 R- d  n7 O5 T) D  I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): _+ q2 ^% q9 O8 ]% f5 _8 @
  837.               {
    ; m& I/ P: ?$ N8 `$ `; N, }
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");- V- {6 p- d$ Z
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    * o6 A4 F, A1 P
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");* k9 @# B+ K6 J5 w- D
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / @0 C5 x1 X, G/ [
  842.                
    7 J& M8 O! D$ I! ~; N7 J, V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & A  m: r5 j. j1 w) Z5 V1 H! M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ' U5 g) G* T3 V0 ]
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    % T5 ]) e; `+ S( E! V! e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' v) {7 m! A( Y/ |+ B# A7 v
  847.               }+ B) `0 _: t' X! y
  848.               dwStartUpSteps=5;
    2 w4 D) T  [3 _
  849.             }! {; m( `  k, Z: Q; d; ?' I) b
  850.           }& S# y4 _% E. M% X6 z9 {; y
  851.         }
    $ v. D/ U1 f8 O: T8 w
  852.         else' `, e8 u& |6 F& a
  853.         {
    # |( ]9 F' |2 z4 m" Y
  854.           dwStartUpSteps=3;% h7 S6 v1 d/ b- K9 k; P
  855.         }
    % N- x: f1 i. S3 Q. V
  856.       }8 N; D  f- I2 F
  857.       break;4 m6 F2 {- C% @8 L
  858.     case 5:! y% E9 Z: ~7 K- p; W+ E. ~
  859.       {
    0 k/ e* X( M, k, ^% P6 S
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)* M! O- P2 b. f4 a
  861.         {2 i7 j+ H; I+ X0 K4 c
  862.           int opt_overwrite=1;, j& d+ W- \1 Z. E( Z# [
  863.           int opt_do_extract_withoutpath=0;
    " x  I3 x8 S& B4 l  B6 w3 ~( l
  864.           unzFile uf=NULL;
      }: Q# S5 _1 P: h/ X, e: U) T
  865. ; S, _' t! r+ z0 C! b6 I( X
  866.           uf=unzOpen("Wsa.zip");4 @$ @- g$ a! ~, j; Y. R' t
  867.           if(uf)& O. U5 L' S! ^" @) r$ D) C
  868.           {
    3 u0 d& ~0 l! J
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);# N, t# K$ N: [  Q
  870.             unzClose(uf);3 c2 X4 M- P4 `  ]  a
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    1 ]: }8 }; j% q: k1 ?0 ?  i
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 e. G2 J- y3 K- q6 f
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ; `! Q. m1 C9 h
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      W# l, B4 U8 ?" W" u% I
  875.           }
    # N3 R. p* C5 X9 S+ N, m* M, ?! m
  876.           DeleteFile("Wsa.zip" );- z# f  f6 h. l9 v/ ?+ Q; B
  877.         }
    * G0 L+ t" S/ Y; h$ ]

  878. 3 q. P) ^5 g: U1 I
  879.         if(CheckLocalVersion())6 Y7 Z) ]3 ]' F
  880.         {
    $ b4 C$ k6 M; q* W
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");0 R, v% k* |, t1 K3 [% C8 X
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    1 v. k/ f+ J$ R% `5 ^! }
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    7 H4 i5 X6 z8 `, p$ j
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      r9 v  ?/ C8 [0 z: o7 d
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    ; e- a' r* w) s) q
  886.           dwStartUpSteps=99;
    4 B! Z1 I' f8 h( v  d2 V
  887.         }
    0 E4 c; b; D0 P
  888.         else
    ) ^' c2 r! }- Q- |( U2 R
  889.         {% k$ j( d+ R2 t
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    , h/ M% z& E4 q# }$ X4 N5 B/ j
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    : O1 d* a- h+ J1 {
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 Z2 y1 f3 p& L' Q3 W) E' g' O

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

: v% n$ E/ h$ y$ k! C4 A& f2 o2 K/ P

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-7 17:58

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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