CSUpdate.exe源代码

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

0 p/ F; r5 ?# Q' N4 e
  1. / RevApp.cpp : Defines the class behaviors for the application.
    6 W8 o9 _+ S$ g4 j+ X
  2. //. J5 j5 D0 Y' y8 S. F

  3. : ~, u( g2 Q5 b. k
  4. #include "stdafx.h"
    2 F; `+ x2 V' j
  5. " g2 F. k2 v! [" i2 P" [7 h
  6. //#define UNICODE4 v7 o9 T( O% x' j6 U7 I% j
  7. //#include <gdiplus.h>
    , u3 ?6 X# X" l
  8. //using namespace Gdiplus;+ G4 a+ S, `; \
  9. : Y  O/ C; V+ a: P9 ~6 W' M
  10. #include "RevApp.h"( J6 s& o: C& A6 N- {6 c4 }6 n
  11. #include "RevAppDlg.h"3 m6 U3 a, P( f, i; B7 x0 n' H8 ?
  12. 7 A" z1 ?3 b6 {6 @+ F
  13. #pragma warning(disable:4786)4 X' S6 c* f8 _1 |4 K, h1 l
  14. #include <map>
    1 U! @' i3 E) L
  15. #include <list>
    " y& _, N: [; }
  16. #include <direct.h>8 i0 R# |, H4 |9 D* y3 [, g; i

  17. % c2 ^" j4 d4 S9 J0 ~* ?
  18. #ifdef _DEBUG
    ' s- i) G; r1 _$ b' g
  19. #define new DEBUG_NEW$ V. @& @7 \3 o" _! P1 C
  20. #undef THIS_FILE( `+ ^* R3 i2 d  D4 k- G
  21. static char THIS_FILE[] = __FILE__;& [7 Y1 k8 T# d0 g
  22. #endif
      D* G/ o5 e6 }& _6 a8 {9 K
  23. #include "SkinResDef.h"
    4 e( y' D2 K/ Y7 t3 _" n/ Y' h
  24. #include "ChangeBG.h"
    % Q* {1 l2 F0 O+ Z
  25. #include "AFXINET.H"8 W5 z7 Q! W- N$ r8 Z' j
  26. : ~) H) R- I+ Y) Q- X
  27. #define TRADITIONAL_CHINESE 02 L: o! [! ^; I7 }
  28. #define SIMPLIFY_CHINESE 1
    7 ^- v- Q; @0 W+ e* }0 d$ n% y4 t3 K
  29. #define ENGLISH 2
    ( a: A' G& G6 s6 F- a5 V
  30. int m_iLanguage = ENGLISH;
    , ]7 L1 ]5 N7 b! U, |
  31. /////////////////////////////////////////////////////////////////////////////
    8 l6 v& l% I. N8 e6 {% C
  32. // CRevAppApp
    ( Y8 a4 t7 s( W' B. w
  33. 8 ?! a4 B8 n  Q4 r3 s( k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    . P6 o9 J/ u! p
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ! V' i- ~6 L, N. |7 z8 l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 X' r7 D+ t- g9 X' @: d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 b6 w! r: J4 L1 x" h2 u
  38.         //}}AFX_MSG
    5 H* ?% e2 |3 O- P5 m9 C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 {" c8 O+ _; L; o
  40. END_MESSAGE_MAP(). g6 U, Y/ i4 z* w" P& j

  41. 5 I/ V* b1 b" D/ f/ [% {
  42. /////////////////////////////////////////////////////////////////////////////
    6 W1 r! u% d9 d8 d, t/ F) ^
  43. // CRevAppApp construction
    / c/ ^7 T# ?8 w' e$ s# v9 ~

  44. " ~" v6 H, {) H# E; R) X5 ~6 [; B
  45. CRevAppApp::CRevAppApp()
    , h; ?# U- O/ B% J
  46. {
    - p5 _! s) C- t; V4 G, ~6 w
  47.         // TODO: add construction code here,
    ( X0 w! l* G3 ~# |8 o) O. k4 L  k
  48.         // Place all significant initialization in InitInstance/ H: n) r+ ?$ @9 s. T+ W7 x- p( O
  49.   bDisplayIsBig5=FALSE;
    , H2 G, Y! L' m6 R
  50.   bRestartUpdater=FALSE;+ [# M6 p; D$ Y, G/ L' \! x
  51.   bFinishUpdated=FALSE;0 d; H' ]  z  h# L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;9 E; t4 W" b/ w% U+ e( b2 k: `
  53.   InitChangeDataBig52GBKS();: ^" X0 ]* h6 z7 F, [
  54.   InitChangeDataGBKS2Big5();
    # B8 l1 Y3 q0 c! J" ~$ q* E9 C
  55.         //
    ; ?8 t% O- S, O
  56.         bClickRunExe = FALSE;
    . z0 \( H- W3 r' B. T6 T
  57.         //
    3 U: C( l7 ~* g" T$ t' Q
  58. }
    , f+ _4 g5 v1 i) Q
  59.   z' {0 _* N- F/ }
  60. CRevAppApp::~CRevAppApp()
    ; D& H. A/ {/ u; h7 ?
  61. {+ A* j+ O* i4 z& }7 x
  62.         // TODO: add construction code here,
    9 E# z+ x3 x- y8 c) }* c
  63.         // Place all significant initialization in InitInstance
    # X; U3 Q8 y0 a& u- a
  64.   EndChangeData();" W* U# b# J; d0 O! T1 i
  65. }
    + r7 q; U" e$ o% u

  66. # x9 A2 Z2 r9 I( l% o6 }
  67. /////////////////////////////////////////////////////////////////////////////  W5 w/ c- s% R7 |2 J/ Y, h
  68. // The one and only CRevAppApp object
    5 a1 M  P& H# g# r4 g

  69. + t9 C  s' s; B/ [! X& j2 R' m
  70. CRevAppApp theApp;
    ; Z9 \2 g! K( L6 U' s

  71. 5 L$ n7 y* \$ Z0 ^7 U  d
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName), ~4 C6 q$ A1 F. y$ ~
  73. {
    * o3 p) h9 O" D" a/ z
  74.   int iEOF=0;
    6 w( y$ J. Y, w( u# D- G
  75.   char szTempName[MAX_PATH];* P$ m" S$ t# F3 I% Z
  76.   *szFileName=0;" f: o& g, k% e
  77.   iEOF=fscanf(fp,"%s",szTempName);
    & A* Z' T  K. F" o( v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')9 I' `0 d( t. W0 t. j
  79.   {/ U4 g, ~8 r. z5 G- j  t) Z
  80.     strcpy(szFileName,&szTempName[1]);" |9 y5 `: x! ~% t- n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF). T( B# \9 r4 m5 j
  82.     {
    $ \: m3 D) m4 l; ]; B% h* S
  83.       iEOF=fscanf(fp,"%s",szTempName);7 ]$ z* k3 R: m! ]$ A9 c# J. T
  84.       strcat(szFileName," ");# V2 F* @' F2 b
  85.       strcat(szFileName,szTempName);
    . Q6 _! a( f) b
  86.     }+ Z( j+ v) d5 |" x" P# D- r
  87.     if(strlen(szFileName)>=1)
    / N- i# g. m& k' [1 [$ Z" S1 X& o, Q
  88.     {/ f' f' ?+ h  H! f8 b! h- C
  89.       szFileName[strlen(szFileName)-1]=0;/ v( F% X& {: l* ^# T
  90.     }+ e8 ~, U% z, y8 V( S+ p4 A
  91.   }+ _9 Y. r. D; Q& Z
  92.   return szFileName;
    6 F' w- l7 Q! w/ B# e, o% b, y
  93. }' {. w4 C' J. U! ?% a- X0 D

  94. 3 P, y" q3 e2 h2 d  D* n+ }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    : B! f/ A7 Y! X# }% ^& V/ m
  96. {
    ) x  C8 i; ^. v+ k% s
  97.   FILE *fp;
    1 |4 |0 g' B! ]
  98.   char *key=NULL;  [9 V/ i! M' Y+ J, C4 r8 x# S# r
  99.   char version[MAX_PATH];; |- \$ U# F  e& Z( y
  100.   LPUPDATEFILE file,olds;
    0 `3 w- Z- Y" T
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    . D1 ?* w" [' \, G' m
  102. 4 ]0 S1 O' e, N. ^9 E* u
  103.   UpdateList.clear();
    ( w1 r! E9 Z8 R' Q$ b- l' ~3 r' C
  104.   UpdateFile.clear();! ]9 ~: D6 S. s! h/ a
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 j' j9 o" @% _% V
  106.   if(!(fp=fopen(filename,"r"))) return false;9 [* I6 H5 R8 y' ]2 E3 p
  107.   fscanf(fp,"%s",version);% Z! E7 k# q. i8 p( ]# Q8 @. c
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    # Z; ~2 e$ A% \; M9 E( q
  109.   while(fscanf(fp,"%s",version)!=EOF)
    7 o3 D7 V7 A6 h* C6 E5 y  q9 m
  110.   {( B8 C5 e' ?, E( z. Q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- x# }, V+ K# L# S) v6 p
  112.     fscanf(fp,"%s",file->path);1 G8 l/ e! z4 B8 n8 B# p- B% q
  113.     ReadFileNames(fp,file->file);
    7 u4 H" a' S/ Q" Z. _2 j# J
  114.     strcpy(file->full,".");
    7 i6 Q% t- O: M
  115.     strcat(file->full,file->path);( _% f3 i8 s; t$ ?4 P0 L
  116.     strcat(file->full,file->file);
    # w) Z8 O8 y5 Z8 t; e; `
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    6 h" N0 g; ^$ v9 W+ s0 F2 o
  118.     {
    3 ~0 b; E  a( H7 M
  119.       file->vers=(float)atof(version);
    ' }5 a' q3 r7 t- A! h
  120.       UpdateList.push_back(file->full);
    3 J. \3 K! L2 U. U
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));8 G9 o% I7 R! R9 ]9 m2 q; q
  122.     }" n5 B/ O3 F( k7 x4 b9 c
  123.     else& p$ t$ g% g& V1 {/ ^" m" ]
  124.     {- d7 ^- x$ ?9 U1 p& M  K# h  c/ C
  125.       olds=(*p).second;
    $ [. q4 r/ |+ I. F
  126.       if(olds->vers<(float)atof(version))6 B$ f% D8 s4 a0 ?
  127.       {0 \9 h  ]: [+ |5 U0 Q" `: M
  128.         olds->vers=(float)atof(version);
    ; r# d. B5 G# z# e
  129.       }5 |  l( P9 ]; j" K; A
  130.       free(file);
    9 W$ D9 Y+ r6 L6 f  h3 r
  131.     }9 \/ s# s2 r+ w1 {2 y( u6 Z8 U
  132.   }
    ) k  @$ O6 ^6 s' ]
  133.   fclose(fp);
    2 \4 u- I3 u2 O/ m' V3 _- \
  134.   return true;4 N' v* `8 R7 f# S" g
  135. }# B" N! i4 ]" v

  136. ' K  v' J( Y% \! w, x8 i6 p& F
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 d4 ?" \7 M; {6 k! B$ G6 M+ L
  138. {$ t) x) _# o. g  h% \8 F
  139.   TCHAR  szFull[MAX_PATH];
    ) ]; ?" H' J! c
  140.   TCHAR *token,*inter;
    9 ], h0 _* g/ O
  141.   *szPath=0;2 @6 v) l; c* k+ }5 s9 `
  142.   strcpy(szFull,szFullPath);
    / e7 y. X( W  \; d! b
  143.   token=strtok(szFull,"\\/");
    ! f% u( u+ X9 j/ e; c( a
  144.   inter=token;
    ) D* D5 R! V( X
  145.   while(token=strtok(NULL,"\\/"))
    2 S6 g; Z: h' o: d9 Y2 Z7 u
  146.   {: I; C; j* S+ U. @$ I( v
  147.     strcat(szPath,inter);& \7 c6 f( k( s, m# ]
  148.     strcat(szPath,"\");8 I1 q, D9 O0 Q) ~& g
  149.     inter=token;
    . B0 T: C1 @" Q0 J/ B# }/ ^& c8 G$ A
  150.   }: y' B0 v' t" o0 P" u6 R
  151.   return strlen(szPath);
    & F4 u" N: ^% T, E2 c9 b5 L
  152. }
    8 w# b& }3 x' g

  153. ' f0 X1 _& w6 o* o
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ; n! P; `1 k2 v
  155. {# P/ \9 z8 H( k" J0 H
  156.   DWORD attrib=GetFileAttributes(Target);% n- h0 S3 F) {2 r/ }- s9 G/ N% l/ q. |
  157.   if(attrib!=-1)( D# S/ G! }4 i  c' x% R
  158.   {  f8 B5 p' k! i$ c: Q/ J$ u3 h
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))% ]% Y" c, U& |  u
  160.     {
    9 u0 y8 w" F0 x  b/ l7 Y- F5 h) h: A
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
      F0 z. [) x. ~+ B. b
  162.       SetFileAttributes(Target,attrib);
    ! m2 w: P, {; a2 |
  163.     }
    8 L. |  Y% Q2 b  V0 g, |+ z/ L
  164.   }" D( G0 u# ]- k) I$ G9 N4 H6 m; y& L, i
  165.   CopyFile(Source,Target,Erase);
    # V# u! w! A# z4 N7 ]5 d- S; z8 L% `- ~# i
  166. }+ n& q8 k9 _9 b; m" Y2 q
  167. 5 T' B$ P$ h$ n3 L) z& G- H2 y! A
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 r/ y, \# o) [7 o7 S) l
  169. {7 V: n- \6 l+ u( }0 \1 {* J- d
  170.      FILE *fp;) M4 ^& h( o" k- J; R% u% j
  171.      char  szBuffer[8192];7 }' Z6 H2 {6 X7 Y, w0 S
  172.   va_list  argptr;
    + _6 r! P- w) A8 D! Y, }6 z, o" H

  173. 4 v( w% S$ ?% s
  174.         va_start(argptr,message);
    . {) W) L2 S5 b; k
  175.         vsprintf(szBuffer,message,argptr);$ C+ O1 u3 M; \" ~! w. t
  176.         va_end(argptr);
    - |4 d0 Q) b2 ?$ h; A
  177.   fp=fopen(FileName,"a");- E* E, M! u( e0 W0 H
  178.   if(fp)
    2 b1 X7 z0 Y9 x+ e7 U5 ^, W( q
  179.   {4 Y; ~7 W9 k8 u- D, U1 j% ~- l
  180.     fprintf(fp,szBuffer);
    ) p/ x# v# G5 ^3 i$ z% H1 y
  181.     fclose(fp);
    : j& D+ E: z9 q0 W+ a; J0 N
  182.           _flushall();& x% @. u* b+ I9 D: M7 ?
  183.   }
    $ g- U  [4 g/ T2 u% f
  184. }$ o2 O3 l; C1 X- G
  185. , ^" _+ x4 B9 B" C" ?6 o1 F* x
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    : D- o& ~6 q% N4 L# T+ W/ n7 E* T" z
  187. {
    # t, [1 P: P7 v0 j4 r. R6 b6 f$ r& {
  188.      FILE *fp;
    " g9 Q3 Z& n# Q; J5 ?. f
  189.     DWORD  attrib;
    & k# ]! j  p; T% j! k
  190.   attrib=GetFileAttributes(FileName);
    % U& r6 u2 N2 q
  191.   if(attrib!=-1)& Y' K$ @+ k) U' h$ X7 q0 u* S
  192.   {0 O  }1 t/ Q; }4 _1 U
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);$ ]9 {) V% |6 G* a2 c
  194.     if(!SetFileAttributes(FileName,attrib))0 K% E5 Q/ e6 B2 g& w5 u8 _
  195.     {
    ; C& @% q% I: J3 m
  196.       return FALSE;. `3 K: J2 ^. E2 H
  197.     }, v% w6 n1 A0 ?$ \
  198.   }' c. D% k+ x9 F" O8 q* N
  199.   fp=fopen(FileName,"wb");
    . u  B! u# E1 U
  200.   if(fp)0 q: _9 D  E* a5 ^
  201.   {
    0 s. }5 \! z* R5 c* L- ^  x
  202.     fclose(fp);4 K3 Q) p0 {3 Y! \6 z
  203.   }
    ! ]& ~& p, N; Z7 w6 _+ c+ n
  204.   return TRUE;+ h* Q. C, }3 j+ M, y1 l
  205. }3 W' A0 r1 @& K9 ]' Z% \) S

  206. " ?# _: L8 v8 i# W  z; e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ D0 ?" B# ~% ?) a  i5 b
  208. {
    % E: L# ?7 T% q% C2 ~3 y3 a
  209.   char filename[MAX_PATH];
    + W) {  p; e: Z! y3 J8 M, m; t
  210.   LPUPDATEFILE file,olds;3 m: I0 ?5 {/ q* a; z' {" p9 f
  211.   std::map<int,CString>::iterator i;; j8 N! G7 ]& e5 L
  212.   std::map<CString,LPUPDATEFILE>::iterator p;* t3 S, [' J- s# b
  213.   std::list<CString>::iterator l;9 C+ p" V0 D: F; F7 ^+ j& W3 L

  214. % h! b) Y+ J  B% r
  215.   if(bFirstUpdate)! @$ S: x" d8 P/ z; L) H- ^! R
  216.   {
    9 R& P' R% s! C4 C: g+ d
  217.     dwCurrFile=0;
    7 L3 q8 F: n( N" D% e- D
  218.     bFirstUpdate=FALSE;
    9 O) R* L) x* }+ h  D4 ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & g' R+ ?+ k! X$ A, }
  220.     {* D( ~8 S9 A/ w
  221.       dwTotalFiles=UpdateLocal.size();
    * ~5 o4 Q8 p9 N/ b1 B
  222.       dwDownLoaded=0;! p2 w+ k2 h3 a8 _  T
  223.       bSilentStep=FALSE;. {, w9 {5 N4 U5 b2 f' C
  224.       bCompressed=TRUE;
    8 A. w  f; E; S" A& c9 ?& ~
  225.       strExtLocal.Empty();
    2 u7 J  M* O6 x$ J5 O/ M: X- {  s
  226.       strFullName=(*i).second;
    7 W7 D% y5 q1 e
  227.       dwProgramState=AP_CONNECT;# Q$ h+ Y1 [! F
  228.       return TRUE;# H3 D3 k* @( L4 W0 }2 d, E; V# m
  229.     }
    6 `. e( p* Y. |* r4 \% L# U! w% Q
  230.   }& l3 K6 H9 p, O  D8 F& S
  231.   else if(bRestartUpdater==FALSE)
    + T, W& M. }2 o6 K
  232.   {
    7 f) f2 \0 {( l( e. ?
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())- [' J1 p; j, U4 B; k
  234.     {! T- L+ g4 A6 a3 k
  235.       file=(*p).second;# @- o3 w3 }% d& l6 q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    1 }- ]: i" ^# Y" m( D! Y
  237.       {1 V0 M& m9 x  M; W
  238.         olds=(*p).second;( R1 A' s3 s: n
  239.         olds->vers=file->vers;
    # N2 A/ e& ?. c. c0 d+ L
  240.       }1 j5 ~, H+ Y2 f5 K5 r2 u
  241.       else! O$ N: i2 x5 z
  242.       {
    & x  w- r+ [9 a( ^( m$ Q# P
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# p0 k  S$ g% e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));/ N$ `/ B4 l0 r  @5 M" v$ W7 t
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    + L3 R4 k$ g0 {+ a" w6 i
  246.       }
    8 P! O5 Y. e+ n3 i# h; S& ~
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    5 |  i# q$ f* b
  248.       sprintf(filename,"(%s)",file->file);" `( c& @. {+ p9 ]8 d
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);$ H$ M& e+ r( Y. K
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 O+ G& A; A' ?; z7 @
  251.     }" h( Z+ a: ?' R. Y* ^8 q9 @. `; D
  252.     dwCurrFile++;0 U7 s5 w/ \$ k( N& M' D( F
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , ?! G2 k" I+ m% N( m$ N$ ~. A  I: F
  254.     {7 n) k) U# R  W% y. \' f; x! ?$ P
  255.       bSilentStep=FALSE;
    / ~$ K) \4 J) d- H. W/ n4 M
  256.       bCompressed=TRUE;
    & U& N# z& u9 c3 O) o+ h; f/ m0 L2 ~
  257.       strExtLocal.Empty();
    - ?+ Z6 D8 R: p* T( n8 r
  258.       strFullName=(*i).second;
    9 R/ A8 U6 l2 ?8 G
  259.       dwProgramState=AP_CONNECT;
    ' A, p. O. V/ V0 N, w
  260.       return TRUE;
    * Y: D/ f2 r/ |7 R& S1 f5 k
  261.     }
    ; I: ?3 ^, |. C9 `8 }
  262.     if(!bRestartUpdater)! k* p% h& ]- x" D0 R: K& V4 l
  263.     {7 ~; n/ u9 @" t# x# M( }
  264.       int iCurrSize,iFileSize;1 z! @, k6 w3 l4 m3 C
  265.       iCurrSize=0;$ r- F4 `8 a2 w$ r
  266.       iFileSize=UpdateList2.size();
    1 O' N& J, v6 E
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");5 b, \# E# _; s' |3 y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");* y, }* Q. e7 f2 B& \4 p! j- G
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    - D$ Q3 x+ G0 k0 V
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* _! v+ a$ Y( C5 v- |. p) l. k
  271.       Fclearf(".\\update.dat");
    / j- T& z! ?0 u5 E. c* U$ P
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ a6 t" t: j5 ~' ]* d" ?6 L: g2 u5 c3 B
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ c7 V! d: J( W* J; B
  274.       {( ?) o& J1 G$ }* S1 d* `
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    # M; [0 h) b# `5 |
  276.         {8 I# o8 {! z# ?$ ]* M
  277.           file=(*p).second;! H' \% F$ H7 C  C$ f6 N
  278.           sprintf(filename,"(%s)",file->file);
    ; U2 a  R! J# }9 r$ g/ m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- c# v* e' d5 B- r1 l
  280.           iCurrSize++;
    8 _+ q7 N5 o7 J$ S# \
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));2 \3 g  C1 P  @+ e8 h( R& Y) r8 d
  282.         }7 t2 T( D: P3 m+ d9 z6 o; j# M
  283.       }3 X, F; q  V5 R, D! U- A2 L" z+ G8 E
  284.       unlink(".\\update.txt");0 b, P8 M% z- A; g& w$ r$ W
  285.       unlink(".\\update.tmp");4 r0 t3 n: \  B$ }9 O
  286.       Fclearf(".\\checkversion.dat");3 Q' {5 o# x: z! F/ g( b5 b; U
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);, U% p. w5 o  v
  288.       if(UpdateLocal.size())
    - l' x3 n& n1 O; H- l- X
  289.       {
    6 Q3 i$ ~, G. T
  290.         UpdateLocal.clear();
    - B. s! e& I, R6 @( n* Z
  291.       }+ }+ N# S' t) I4 `: z
  292.       if(UpdateFile3.size())& O3 D  t' r, r7 o" Q( @
  293.       {  e) q* @2 ]/ Z4 e3 F
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , J( B7 }: ?) Z& F
  295.         {& {8 {' d5 w/ z. d/ [
  296.           file=(*p).second;$ G; s* o! Z/ S" {6 G& l
  297.           free(file);
    ' q9 [( \& s: M
  298.         }- o4 k2 F- K! h& Z( [* F
  299.         UpdateFile3.clear();( K. k' |; P0 I7 i0 c- _/ S
  300.         UpdateList3.clear();
    * L+ i  M, O7 r. V' ?, d
  301.       }  l, ^) c# u' ~" n! I0 r
  302.       if(UpdateFile2.size())& M+ g7 o3 Y% [! A: V) P
  303.       {
    ! \5 U+ e3 G1 K' l
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! c) H9 b3 F, K
  305.         {$ K1 v# q. h, X$ o- ]( s/ F7 D' m
  306.           file=(*p).second;
    9 v; B3 i- `5 `/ q( q* |
  307.           free(file);+ P3 G4 S7 X- V6 ^" N7 w
  308.         }
      O: o; F8 ?2 Y; J
  309.         UpdateFile2.clear();
    : h: q# n) K* v6 f
  310.         UpdateList2.clear();' g3 s0 w3 }6 H& ^% h
  311.       }
    5 j* |! U' T- @2 r. A: s0 t8 I/ |
  312.       if(UpdateFile1.size())
    2 N5 g3 c, ]5 Y& Q' b7 v5 d7 [  h5 H
  313.       {+ w% ~: u/ u8 `! ~, ~: |
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 Q  {8 b: R, n" t) y4 v
  315.         {5 G0 h" ^: p) p
  316.           file=(*p).second;) m2 c8 n% H6 F# L# h, j, U* _' `. [
  317.           free(file);
    " W: p3 w% Z3 V$ |
  318.         }
      l5 G0 h* x: V7 X! T; U
  319.         UpdateFile1.clear();! h9 m; E5 m2 H; J* H
  320.         UpdateList1.clear();( G2 N4 m, C5 m+ q* }
  321.       }  D5 o4 x1 _: z- t( ~
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    3 O- S  `; A3 t7 z6 r
  323.     }
    $ i: L$ [6 x+ Z$ P7 T) X; `
  324.   }5 }; H0 M3 `( g4 K
  325.   return FALSE;
    5 r1 v  i  S4 j, i  n
  326. }, h; m5 T, o- r

  327. : ^" @3 y2 O  B, L8 d0 O
  328. void CRevAppApp::ClearAll(void)
    + S7 J7 S1 z" b6 `/ w& \# B7 V& m" N1 x' Q
  329. {: `9 ?) ~+ ?. C, P: C; ?5 K* W
  330.   LPUPDATEFILE file;3 n' l5 Q! r% F& a
  331.   std::map<CString,LPUPDATEFILE>::iterator p;, v. T( K  m# n! n: y. q3 j/ |6 R
  332.   p/ h; ~( ^  d) L$ o! B
  333.   if(UpdateLocal.size())
    1 N2 u' @& ~" H
  334.   {
    . f6 h, E( j; J7 k- f/ Y: |; S2 U  m
  335.     UpdateLocal.clear();$ m) O, ~# ~) X$ q: Z' A
  336.   }5 l- e/ a7 y* u2 |( I! O. V
  337.   if(UpdateFile3.size())+ t% k' k; r) Z, v5 b4 {
  338.   {' g: ~4 {& x* Q( @  |% S; Q/ G
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : }4 ?, V  E; S4 C# W$ v* K  C
  340.     {  N- _% A1 q! L& Q2 v- I
  341.       file=(*p).second;
    0 |( Q/ J3 L( r
  342.       free(file);* l; V$ f. W' X1 `3 d" P6 X4 a% \
  343.     }
    * c: R* g( O1 i+ X  ~
  344.     UpdateFile3.clear();
    * ~3 N! i# r( w( S5 \0 y7 Z
  345.     UpdateList3.clear();
    & x! W2 W4 g0 w5 N( L& _/ ]1 o+ ?
  346.   }* r7 g# `. C/ u& [
  347.   if(UpdateFile2.size())
    3 R; K/ b7 k. O# ?$ G
  348.   {
    % A" K6 c! z8 T: Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 z2 _. U+ i) s' K
  350.     {
    5 f3 e  n/ z7 C) J2 r
  351.       file=(*p).second;) f% \, }. U8 z/ ~
  352.       free(file);
    / q5 W! v* |9 q# o4 a# I4 V
  353.     }0 r5 a( \8 ?, D  A" ?+ P- I% B; V/ ^
  354.     UpdateFile2.clear();0 r. x5 [$ `8 L
  355.     UpdateList2.clear();/ a1 V% Z7 |7 I+ S
  356.   }0 c% b6 |) Z% t* [/ A) o, B+ k, }
  357.   if(UpdateFile1.size())6 W+ s( P7 e* l% {" S) A
  358.   {
    ; i  n9 j7 b6 y) W
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ N- ?5 i  I, X/ r' B8 s/ w. ^
  360.     {7 m7 f. C$ g" W
  361.       file=(*p).second;6 ~9 @) J1 U! ]/ Y/ x
  362.       free(file);" `: y5 ~5 K; Q
  363.     }
    ( K! \1 b- {4 {7 @- R* h$ P3 \1 H
  364.     UpdateFile1.clear();4 M7 ?, ^. G, l) l
  365.     UpdateList1.clear();$ W/ A# Q- X/ s+ z. I) C2 p
  366.   }
    ) u4 K8 I; p6 @4 |, a: V
  367. }  
    & n, U9 b( O, g4 h$ _- a( c
  368.   . |8 l6 h: V5 u7 p) }' @; f
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 f6 s6 G2 v. z* y
  370. {* E" A, a. S' V7 W
  371.   int c;
    1 @5 A0 ?0 o5 I5 A  y" p
  372.   LPUPDATEFILE file1,file2;
    , d9 e  b" k, D: R! F/ p6 ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    3 Z) C7 `3 a! O+ ^
  374.   std::list<CString>::iterator l;8 g3 r" B; j* r# I& m7 Y( r
  375. ! z( b2 W: {* N- a. r7 P
  376.   UpdateLocal.clear();
    ! W3 o1 d6 R8 k% x& a
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    - {) W2 T  ^4 ^) H; U
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 @. F+ S, Y! n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    4 w; W, S6 m' S: }" F
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * H' t+ E, u! k# q  q; K+ Y; j
  381.   if(UpdateFile3.size())
    7 ]3 G: V, S. t* U: U
  382.   {# q- R' I; C6 L' s( I+ K- `* S
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ' N- m( ?+ _  l! o7 x
  384.     {& v0 _! @  L8 g
  385.       file2=(LPUPDATEFILE)(*i).second;  V" ^* m# }# h6 Z5 I* S) Y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ) f2 Q) f+ F1 ~1 N5 G
  387.       {% d5 z) a" ]* }6 Y$ N) Q
  388.         file1=(LPUPDATEFILE)(*p).second;6 }: Z) ]: I( X3 R* r' S4 }  }
  389.         file1->vers=file2->vers;) R! y9 u5 h( W( y
  390.       }/ n$ b4 r# w; G) F' ?4 c  G
  391.       else
    ) D5 n, E5 ]2 x8 X& W* p% A
  392.       {# {- e5 G. `' _5 n+ V, t3 T
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    $ P# B1 v  [& d. g$ o! }$ \
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    9 |8 ]9 J& T& r. p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));2 a( }/ L- J& @/ P) C
  396.       }7 X! ^$ I/ q6 C2 m; d
  397.     }$ c4 L. n+ I2 S& z. X7 ^. y  T
  398.   }3 q# C# u! z8 H- ~$ K: i; Z4 {  J
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)) X0 s6 ~2 c' A" A$ y+ _8 p/ K2 _
  400.   {
    : C5 q, R. T7 t" W: a7 I/ G
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    : m" n: b( b- F* ~& M
  402.     {
    4 ~) D" b# L. u  }! R
  403.       file2=(LPUPDATEFILE)(*i).second;
    6 F( P  [  O, R9 u4 L1 n/ N
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 {- o: X# _3 y  D! Z
  405.       {
    1 ~$ t' J3 q2 }* A3 e; o, S9 I( f8 i
  406.         file1=(LPUPDATEFILE)(*p).second;6 J: }0 i( f3 d) v* K' A# p; w
  407.         if(file1->vers!=file2->vers)
    ; i/ W+ b- _+ V+ u+ L+ b8 i
  408.         {
    7 p/ X# l) J7 Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ) D. f" q0 ^) b1 ?6 M: D# l
  410.           c++;
    1 r; [1 e2 g) q: x
  411.         }9 }# n5 h# l  f7 a8 _
  412.       }
    * k; x+ E# i0 z0 F* t0 b' `
  413.       else
    7 z: m+ y, G! u6 h4 K3 s
  414.       {
    8 L2 e7 m3 X! V5 u& M. G: j" e
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    9 p9 h# `3 a' l$ y
  416.         c++;
    9 ?( ~* r2 [/ r1 ]
  417.       }; X7 ]" N: H  H4 z0 U- r6 c2 K' f
  418.     }, X: C$ [$ v: I3 _' Y
  419.   }
      ]: B2 h# t" C& r( r4 |
  420.   unlink(".\\DownLoad\\update.txt");
    1 R6 |6 E; u. e
  421.   if(UpdateLocal.size()) return TRUE;% G2 v* ~  \% o/ n; F
  422.   else                   return FALSE;
    5 A$ ^& Y3 e4 j
  423. }
    ) y% `6 s1 _9 q( A7 Y  L" ^" ?
  424. - z) r. o/ k! w/ y2 y
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"& }3 b$ V; E; {0 `+ p
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"* p! n# ^3 A+ q( e/ j4 f
  427. 1 i$ y& w* F* V3 j0 |
  428. * C! u' K% \3 i
  429. 6 J4 q# `# l- G4 U8 V
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    * D* b6 Q- ?# `# w: ?
  431. {0 {1 ]; }' ]( g/ }- H% b- p
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 ~  H2 M% V; y! ^4 @
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ y5 T, o0 C' S4 t9 @8 y
  434.   {9 e" O+ V5 ?4 ~7 Y0 n( b$ Z
  435.     char szLanguage[50];
    : N0 b: Z+ R9 u" {4 e7 f) e! y
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " c& k8 A% U' ^
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, m' d/ P3 s  I! @7 N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    9 M' G$ t' z: D
  439.     else                                   m_iLanguage=ENGLISH;" u$ p2 N0 a( _% I: ^% j' n" {9 f
  440.     char szRegister[100];- H4 K6 D3 z4 q4 N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");0 ~' \4 p9 w! U$ O1 O
  442.     strRegsName=szRegister;
    + V& X; H: i/ y* h% ]! c/ v, p: Z
  443.     char szPatchURL[100];6 S) z) N  e8 O' o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");4 Y, h# `: d0 S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 T5 s' X- M3 e' F, V9 U( b
  446.   }; S& K. D) h7 H9 k
  447.   else
    / Q; c" [2 X# E; w$ B  s- _
  448.   {1 T& E( v4 {1 L( [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 c1 O8 Q, Y( [2 c
  450.     strRegsName=DEFAULT_REG_URL;* r% m! a$ c5 Q% f
  451.   }: X( @( l, U& `. F
  452.   if(GetFileAttributes("hosts.ini")!=-1)) z! ?4 c4 Q3 T; g
  453.   {( t# A% \1 \" y# M0 p5 r6 ~
  454.     char szIP[50];
    . k  Z! z; m! a. [
  455.     char szDIR[300];( d1 k1 K. b( ^( w2 f
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))- }) O, s, b0 a' e0 p2 A
  457.     {
      j" B' w" V: J1 N& }: D+ \+ r
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    2 t1 e6 f' t/ b1 l4 k, x+ a' T
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");+ k0 }9 U6 ^& b% Q4 }
  460.       strHostName=szIP;
    , D" C5 M- T" c/ y7 }
  461.       strHostPath.Format("/%s",szDIR);8 F+ @4 R/ ]7 @) f4 q, C0 ?
  462.     }  [' E+ H4 `9 u4 l/ A% f8 ^! t; z
  463.     else
    % `7 l) x4 [; \8 N. X( ~
  464.     {
    9 W  A5 Y0 `3 |% n
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)" J' x! }  ]6 g+ c# C/ A3 B
  466.       {
    & i% `) w3 S0 [, H5 o2 \
  467.         char szLanguage[50];" e. ^" f  ?/ ?# k2 l, y' x
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, P6 {' z. {$ T1 Q# m4 G
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    4 Z, A# u- B4 C5 l1 A, k1 z" l
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % E4 s7 ]1 K* {( ]* [0 G: g
  471.         else                                   m_iLanguage=ENGLISH;
    % f$ W* _- y) p7 e
  472.         char szRegister[100];
    9 p* R$ D/ r3 K! p9 S  |6 ]
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 T. d- q! {" v; ~
  474.         strRegsName=szRegister;
    7 }) z9 a' l) A9 v) g8 Z8 u2 v: s
  475.         char szPatchURL[100];4 g% z: |- Z: Q% l8 A8 x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 F9 w7 e7 G" A4 E' A$ |8 w
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    - k0 e9 g! Z0 L% j# V
  478.       }) F- @6 e6 r6 ], f2 D# {8 R
  479.       else- {0 C9 q* A7 J4 c  o
  480.       {0 ~! [; a4 A8 I
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , R+ x& Y9 p! C5 b( y
  482.         strRegsName=DEFAULT_REG_URL;$ u) ~0 P. d) A' P* R  e  q
  483.       }
    $ A, j& U- L; b, ^9 ]
  484.     }7 \+ ]6 O, a  w* A3 e
  485.   }* |0 `  R# ]% ]  F
  486.   return true;
    , {4 l* ?+ e/ ]6 v
  487. }
    6 V0 L, ^3 a5 L  I+ R" m

  488. 0 R( l  H! i" p
  489. #include ".\ZLib\unzip.h"" b3 R- y6 r8 p% V3 \. a3 T+ k. l
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);  d3 P, q" ^: l! P& [8 S: l2 }! J
  491. /////////////////////////////////////////////////////////////////////////////. z1 G5 _% ^- P- a
  492. // CRevAppApp initialization" M% f2 F' F0 q% y4 [# D, E2 k. z- V

  493. - n, D' e0 R- a' C# c
  494. BOOL CRevAppApp::InitInstance(), }7 I9 f: z2 U3 m) n5 O" ?5 M
  495. {
      U: A. C5 M9 J8 Q/ e, _5 U; [/ U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 S! F; L8 {$ t, g3 @
  497. 6 Y6 K- f& |, g6 ~- T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    + V5 C( a( x9 n
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 I9 M. U5 ^6 |
  500.   {
    ' ~) j- j# K' D$ h
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    ' o. Q8 F. a3 R& F, _) [* e
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 v+ @* `- R' c' ]8 v, [  N; i. O
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# m) Z2 q1 \/ g$ G, i+ q' s8 D
  504.     {
    + ]" v4 ~9 h5 N2 M! q9 _
  505.       strcpy(szPath,szPathTarget);
    7 Y/ x5 h- n6 v7 d6 v
  506.       SetCurrentDirectory(szPath);
    " D- s! A. O( e0 [
  507.     }4 o% I) ~$ |: S$ P+ E% e
  508.   }
    ) t3 `5 }, n) e  ]
  509. #ifdef _DEBUG
    ' `5 ~; o3 `' J' C; W% G, E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))* u  l7 _( V( D' ~
  511. #else
    # W( r3 R) A4 i& f* G! X+ G9 I; K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + y  ?- q" V$ b) S, x* g
  513. #endif
    # a! K" R5 y  f6 Q  ]1 y9 R# e0 U' `
  514.   {
    3 ~/ F) ]/ G$ [; z4 y# I
  515.     char tempFileName[MAX_PATH];" g0 n/ u% Y- g/ y, N. S3 z- Y
  516.     strcpy(tempFileName,szPathSource);
    3 [3 {- s% M7 u, {. V4 M1 b
  517.     tempFileName[strlen(szPathSource)-12]=0;
    2 Z5 W3 v1 I4 G# A, ]
  518.     strcat(tempFileName,"\\$CSUpdate.exe");, Q( K0 n! r) T  E, ^* M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 s9 U" @6 [# @6 b1 l
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ J3 N: B! D; {3 ~, B
  521.     return TRUE;
    $ _8 T7 c) \2 w% S( W- _+ {
  522.   }
    : `2 ]7 A* v/ y7 M
  523.   // Nuke 0118: Delete run.exe' M* F/ d5 k9 p! Z' q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 n* Y' W2 H5 |! Y6 A3 ~. ~  Z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    4 a& ?8 d' a/ M. H+ J1 ~
  526.   if(!ReadCfgFile("Config.ini"))1 f  @; \: K( g" n( z
  527.   {
    ) m! G9 e, B2 H6 h6 f
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);6 T1 O4 ^; I8 Q( }8 i( L' T
  529.     return TRUE;
    3 c% [- n- J) c% O
  530.   }: i1 }. f" g/ a! o/ d0 G
  531.   HANDLE mutex;, x! a! \; s" M, ?
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")); w5 P. Q. s; B
  533.   {
    2 S& ]+ r; d4 ]( n# w+ a0 @& M, [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' N: n; A( t! f0 \) ]3 D' N
  535.     {8 s3 h5 V( z" w+ I
  536.       CloseHandle(mutex);0 y: Y7 n$ w% `9 {0 E. v
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);* D; \2 I- H) O+ @, Z
  538.       return TRUE;
    6 U7 `2 h, t7 P' Q4 V$ s" C
  539.     }' V& o4 D2 W# t6 O" g  S1 s! t. f
  540.   }  / d7 p, ?9 ^$ @5 e; v6 }
  541.   CloseHandle(mutex);
    $ x1 r+ D5 [, v9 r! f" }
  542. ' w$ Z6 m6 p/ P6 i0 w8 E8 Q) H1 ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);) ]: F3 i# c& ^

  544. 3 m, P  b4 y9 H. s3 @
  545.         AfxEnableControlContainer();
    0 }) h0 n$ ]) |  N( ]

  546. / {5 o+ ^1 Y# x1 q
  547.   bCanUpdate=FALSE;
    8 B1 Q" }8 Q1 ^, V1 v4 y* x
  548.   dwStartUpSteps=1;
    0 z8 a# w0 s/ J7 \/ _; l* X/ j9 h
  549.   dwProgramState=AP_NOTHING;
    ) L9 k9 G$ h- e* i
  550. 1 A: T0 q+ d$ ^* }
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    - t+ N1 G2 j' r2 l& C! H

  552. ( N, [5 s2 U3 i- g+ \, n
  553.         // Standard initialization
    0 h2 T) X3 B, B3 }
  554.         // If you are not using these features and wish to reduce the size
    5 r" g$ D, K8 I- Y' @
  555.         //  of your final executable, you should remove from the following* _6 Y' ~: O9 @: n/ Q) s
  556.         //  the specific initialization routines you do not need.1 [9 \9 X. M; N5 [: u

  557. , C2 U' F* R6 ]* p  \
  558. #ifdef _AFXDLL
    2 e- e0 s; ?3 e$ G; u1 o
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    + \3 B% v" J: C/ B' m
  560. #else
    + M0 x/ r* r3 x$ p2 |
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically2 n1 t; N8 z' [1 e0 t9 Y
  562. #endif
    - s* ]( l8 O# V9 p" |- j* p% q

  563. % }/ ]4 A" T' V3 n- K- _
  564.   dlg=new CRevAppDlg;
    $ k3 U0 H# k$ A
  565.   dlg->Create(IDD_REVAPP_DIALOG);# J" I5 h/ b& u) W
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    + Y& c# m+ h/ z8 k- s) A+ a- P
  567.   m_pMainWnd=dlg;5 F7 V2 g9 b3 `
  568. " d( s/ i8 l6 F# E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
      j5 i) _9 t' C8 M1 @

  570. 5 s7 v2 C" S, E$ l. `* O3 B$ U  R
  571. //  GdiplusStartupInput gdiplusStartupInput;. Z9 h1 a5 i0 k( \* P& K2 k
  572. //  ULONG_PTR gdiplusToken;9 Z% Y; l: N* w- J* ]0 o$ g. F, v
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);- @: r# s5 i1 [7 b, i! c
  574. 3 z% J, a6 ~4 K- s6 R* S  b8 }
  575. //        CRevAppDlg dlg;* w" U9 H5 }# @' Q/ m# `. V
  576. //        int nResponse = dlg.DoModal();
    5 q* C( T9 F, [1 m; \1 i
  577. //        if (nResponse == IDOK)
    , f- s( n' `' G# G" k
  578. //        {! P9 w) ^" c, U- C
  579. //                // TODO: Place code here to handle when the dialog is
    $ D  y; y) q1 r4 G, `/ ~
  580. //                //  dismissed with OK
    # u+ V- v; Q- M; L7 v. ~+ q
  581. //        }4 a- N8 z7 M7 Z. C, b3 z
  582. //        else if (nResponse == IDCANCEL)
      v) V: E( C" u9 s* S
  583. //        {3 v$ _4 ?: K  h8 F6 {. [
  584. //                // TODO: Place code here to handle when the dialog is2 F8 M* f/ s8 D; W
  585. //                //  dismissed with Cancel, q- s$ R9 ?- ]6 X& q8 y. t- q
  586. //        }
    1 H6 \$ M$ n: H0 C+ T- l9 O+ Y2 A

  587. 4 r$ g8 s& x+ y; h& s
  588.         // Since the dialog has been closed, return FALSE so that we exit the1 s2 `* t( F7 I4 [8 ?# G' K& X
  589.         //  application, rather than start the application's message pump.% w: g3 ]1 g* N. B- ^' N# W
  590.         return TRUE;" \, d& B* J; v: F0 x0 D
  591. }5 k5 j1 f* |# `3 y& i! w$ F/ w2 A

  592. $ Q) _2 ?5 a" i7 V! {" L7 V  H/ \
  593. char *CRevAppApp::strtok3(char *pSource,char *token)+ I1 T0 V4 x# \6 A
  594. {, \/ d0 k# a5 ^/ i3 z; b1 _
  595.   int i;
    9 e& G0 z7 J  i4 g
  596.   char *szRet;
      h  k% U1 d# u/ F* r/ j
  597. 7 O* h+ i  |+ O6 J8 C
  598.   if(pSource) { itoken=0; sztoken=pSource; }/ f- X4 q1 Y) F  h) e& y
  599.   if(sztoken)/ }( a( t! A* }. N
  600.   {; I* _* t! e- d/ x' g  b( |2 `7 j
  601.     szRet=&sztoken[itoken];  n6 J# P0 [3 B' u
  602.     while(sztoken[itoken])
    5 [: O8 T3 p$ M  ^% D' T" V( N* z. |
  603.     {' b3 d5 d9 q9 J* ~" E4 ~
  604.       for(i=0;i<(int)strlen(token);i++)! X' c8 s' l9 t& E$ z$ y
  605.       {+ W0 K; M: t: W8 u+ \
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    " S5 a0 ~! ~' W# M8 i
  607.         {3 W, p4 B. ~, S# I6 }  h
  608.           sztoken[itoken++]=0;
    & A+ q, o4 Z+ w) _4 E
  609.           sztoken[itoken++]=0;
    ; n' s2 x1 N2 O% D
  610.           return szRet;
    3 R" Z% X: v& X& f$ U# o
  611.         }
    / K7 y# Z9 a* O
  612.       }
    " \" L0 N: i* c' y. z4 r  x; Q
  613.       itoken++;
    5 Z+ t/ p' Y# e( _
  614.     }% Y2 ~$ t( \; r8 h* p
  615.   }
    2 c$ E6 q3 O* O. a; I
  616.   return NULL;
    : A2 h3 V$ u; `$ |
  617. }
    # W6 Q+ P4 o) `8 i

  618. 4 f% A  T2 V) B3 `9 l, q
  619. void ProcessProc(long Total,long Current)% i5 a5 E: z% f% \9 M
  620. {5 [# {* c+ T; E4 N* n% s& n
  621.         MSG msg;8 @5 `) @2 _% K2 z3 x  e
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);7 F2 V# H7 e( V! f
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    1 q  M' ~. ~: v2 N! Y# X6 n
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    0 B0 U" i2 Q0 J, `* a+ b  T
  625.         {
    ' \, N& R2 V, l5 E) a! D& i3 i
  626.                 if(!GetMessage(&msg,NULL,0,0))  f/ ?& V0 z+ x  K7 ]
  627.                 {. i6 r) N+ k( p+ V3 l8 }7 ?
  628.                         return;
      X' W4 p4 d- I+ T  s$ n
  629.                 }3 J7 m! _" |- B7 C
  630.                 TranslateMessage(&msg);
    # B$ c4 O  c5 M1 B  t& R
  631.                 DispatchMessage(&msg);: C% U, K+ _* ^# C) b& d' ~- B
  632.         }       
    % {9 ^, f& q3 G2 D) q/ Q  p
  633. }
    5 _0 K$ x& ^* r5 p

  634. * a' Y6 {5 a- @% Y0 H
  635. BOOL bFirstChar=TRUE;' C' Y0 [0 W, c. {8 Y3 U3 Y
  636. " z+ Q: v/ M& C  w$ N4 ~, c! B
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    4 ~- @; G3 J0 L, r
  638. {8 t7 ~, `8 B9 L
  639.         // TODO: Add your specialized code here and/or call the base class
    " Z4 L8 v6 D9 i) C
  640.   switch(dwProgramState)
    : p9 z& ?$ f( t# [% v. i' D' i
  641.   {
    + n" S; x0 t6 d
  642.   case AP_NOTHING:
    # U' s: n/ O' \5 C( t
  643.     switch(dwStartUpSteps)+ a& L# t1 i' M3 |  i
  644.     {+ @7 G9 H' e% {$ E5 ?( i+ O
  645.     case 1:
    . R2 E, ~+ ?7 i( d4 X: U
  646.       {
    " G/ @( e3 X7 \) U
  647.         int i;
    6 u! j+ l# g9 A: \+ y5 O6 V
  648.         CDC *pCDC=dlg->GetDC();: d' P0 |7 |8 |+ ^8 l. R
  649.         HDC hdcwnd=pCDC->m_hDC;, e; o( y) e3 v0 O! s
  650. //        Graphics graphics(hdcwnd);
      N# ~7 M; h. K$ D) z1 T: Y3 a# e) H/ x
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    7 h8 N1 t. b% M7 k1 c
  652. //        INT iWidth=bitmap.GetWidth();
    * C4 ^8 U7 j: t0 ~- a2 R% B
  653. //        INT iHeight=bitmap.GetHeight();0 m0 h+ Z1 `) e7 Y( v
  654. //        Color color,colorTemp;
    , f8 C8 l  g) I) M' H( @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 J7 u9 W1 `4 I" d
  656. //        {
    9 T; m( [* Z) l* e
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 {/ g! Y1 u+ |0 R$ o. h
  658. //          {0 W& }$ h" F: z
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 o7 |' X/ \7 C. u( _
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' k! M% e* [+ r# A  U* [, N$ ^
  661. //              (BYTE)(255*iColumn/iWidth),: I, i% ~' h* T6 m7 \
  662. //              color.GetRed(),
    - G+ y3 W1 \( x
  663. //              color.GetGreen(),: G& D8 w. D( U- |5 U
  664. //              color.GetBlue()));
    ) ~9 P7 \0 C/ J1 J$ \: J* f, `  |
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);+ N6 d# A! Y+ ~( U% Z1 _4 [
  666. //          }
    - u8 j/ o9 r& W; y* D; K1 y5 w
  667. //        }) l' e6 ?% b4 N* X& m8 K" m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);0 c" Q# P0 s' P& Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. h$ w& b$ n2 |0 d
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    / ~0 \, o( |. o: z* L9 ~6 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 J5 j- h" L+ o/ v) g5 P0 Q
  672.         for(i=0;i<240;i+=8)
    # e3 t/ }# O3 V6 x! _; d
  673.         {; p2 z6 p7 k2 R0 E  a* V* g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ; ^+ T; ~% f, c5 b, D; h: g
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);% t9 W6 `6 {4 B/ G4 C; w0 z# w$ s
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);; @; R8 ~) e0 [2 P! m
  677.           Sleep(33);
    & O& a# v- l6 m. \* N9 v9 V* U
  678.         }
    $ I* z4 Z) Z  D/ p) B8 ]  f8 J/ e
  679.         Sleep(1000);! `0 {& c  v- s' g( N. ]4 k
  680.         for(i=240;i>0;i-=8)
    % B! v. L* v0 B0 v
  681.         {
    . H( ?1 F! L: y4 q* F: O! V$ c2 j) M
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : {1 w6 Y1 |9 _6 X1 q& z
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);  C! J9 ?$ t% k" n' M5 Y; k
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 L% t" p% _+ ?9 U
  685.           Sleep(33);; E$ ^/ b* [1 L/ A% Q, G3 [1 S
  686.         }+ E/ X5 J* ]# d! f3 Y( Y
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    / z* I+ @( X$ b, ]# ]0 U
  688.         dlg->ReleaseDC(pCDC);
    0 J6 E) q) z" H' u
  689.         DeleteDC(hdctar);
    % V/ i# i) w( G6 F
  690.         DeleteDC(hdcsrc);( l& k( D: n0 u9 q2 ?
  691.         DeleteDC(hdcorg);
    5 W7 j& j5 d0 ~; R& u! \
  692.       }
    4 S* T3 G. m: u8 e. V
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % X% Z* X5 t) f$ R( P5 c* K9 E
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 c- z5 d$ `7 S+ s3 f) ?) A3 Q
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 n1 Z1 y2 R. \7 M* E
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    , l, v* e0 J! K/ @: i
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( s% k  b# T- m
  698.       if(!Dn.Connected())
    3 E0 _6 u; k4 b2 O
  699.       {- Q3 A$ b1 t6 A; ~3 {& L; D
  700.         dwTotalFiles=1;
    ! k; q& r0 N8 {/ D' L  l
  701.         dwDownLoaded=0;3 Z% [; \5 v6 Y
  702.         bSilentStep=TRUE;  J% S! l9 S# J
  703.         bCompressed=FALSE;" N6 B$ X- b! }2 R  S( u
  704.         strExtLocal.Empty();
    7 }; {3 ]: m% }( `& t/ e4 D
  705.         strFullName="readme.txt";
    2 R; S% s# t8 ~
  706.         dwProgramState=AP_CONNECT;. ?! b1 U/ c! l4 V
  707.       }$ I# G: }) S; W. E" u1 M3 a% m
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ C- b4 p; ~8 H3 D7 l: f
  709.       dwStartUpSteps=2;
    4 T- O% \  s3 [) z) \
  710.       break;
    - m$ D- K( }% Y! ^# K7 H3 ]) M3 f
  711.     case 2:
    . c8 C8 I& V  _; d. g
  712.       {
    ( K! `! U2 f) p1 g) W( y
  713.         int iEOF;
    5 \' z' {* P" M- `' F6 X
  714.         FILE *fp;7 X6 X3 F! A' K# ?
  715.         char szString[512];1 u5 G( M6 @) G) N! _# |/ F
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    & h( d  A" f/ y% v1 S) y3 d# l
  717.         if(fp)
    % f9 F. P$ a* H- U) p4 j: J0 {3 F
  718.         {
    * d4 I' y: }& E
  719.           do
    ) L% H2 E) Y4 ~0 X3 L$ B, j* I
  720.           {
    - \* L9 Z! u; j( N
  721.             iEOF=fscanf(fp,"%s",szString);
    7 b9 S1 P- x; A% w
  722.             if(strlen(szString))
    ! z8 l- B* ?1 v  }; Q
  723.             {
    8 ^8 H* J. L* I& S0 a( |* j
  724.               if(bFirstChar)/ h9 c3 `8 N" P& @9 \- m: O8 K) k
  725.               {
    * i" P. F! D! [  g* P) i
  726.                 bFirstChar=FALSE;
    ( V& v1 s# Z0 Y6 s0 a
  727.                 bConnectIsBig5=FALSE;2 V3 P( h& H  c; @+ l7 G/ t
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
      d4 M% z4 E" L2 a0 V
  729.               }
    9 M- h( u% D" U$ _1 a' l6 i% C5 O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));% k  Q' ~' O6 Q& ]# E0 |' B
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));1 e0 D; b; V1 k3 O- E% Z; Q
  732.               dlg->m_ListText.AddString(szString);9 q: U5 Y: B% E; l% {) O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 u9 H( g0 w/ s$ A! S9 L+ J! i
  734.               *szString=0;. R4 {4 b  r$ T  N$ ]
  735.             }
    ' v4 P) j5 C+ O7 [
  736.           } while(iEOF!=EOF);
    ) g! v& C% y5 z7 ~& a( A
  737.           fclose(fp);
    1 n0 X& o! I: ^7 L3 Q8 c
  738.           unlink(".\\DownLoad\\readme.txt");5 V* ]9 z/ ~: J3 d6 |
  739.           dwStartUpSteps=3;
    % Y1 I( J- G/ J- ]' D+ x4 l# \
  740.         }& I$ B: H0 `4 g4 h" C- t* V  c5 i9 y% M
  741.       }
    9 D6 }9 _* [; u) m% B1 c2 I
  742.       break;
    : e( o1 V# \5 B+ [
  743.     case 3:# ^  g  K5 S$ {- f# U( W
  744.       if(!Dn.Connected())
    7 K; h2 O5 q) c. c, k
  745.       {+ l$ h6 j  n+ r! k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);$ X% H7 i) a' J: u3 \; K
  747.         dwTotalFiles=1;" _' q- U* P5 }4 Z
  748.         dwDownLoaded=0;5 L" K( V: j4 J( k6 C9 W' }  S# v
  749.         bSilentStep=TRUE;
    1 M% M; t: ], P  ]
  750.         bCompressed=FALSE;* d) N# E: n- |6 x/ b% w
  751.         strExtLocal.Empty();
    ) l1 P; j, F& z
  752.         strFullName="checkversion.txt";4 O1 @. f" M4 }: _+ X0 P* U
  753.         dwProgramState=AP_CONNECT;, P* r: }8 a) [9 u5 n
  754.       }
    - Z/ B4 m; v/ {1 x, m0 h
  755.       dwStartUpSteps=4;
    / F6 @9 C; e9 V3 N
  756.       break;4 K( r$ C( X7 C- \6 k
  757.     case 4:7 D  l5 h: S  q! c7 v0 U; P+ O  y( J2 {
  758.       {) e& c$ Y% P( P$ x
  759.         FILE *fp;+ Y0 H) i/ B" y' G
  760.         char szString1[128];
    ' ^4 I5 h4 ]& e5 R+ ^6 e1 B
  761.         char szString2[128];7 n& Y) V$ S+ X# ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    $ F$ }% ]& z8 ~* k0 ]
  763.         if(fp)
    # {2 A1 A* {: V; ?9 T2 C
  764.         {. `5 h# B$ Q: x  g
  765.           fscanf(fp,"%s",szString1);
    9 D) @. t$ m3 R" V  P& d
  766.           fclose(fp);, H- e* _( n9 Q
  767.           fCheckVersion=atof(szString1);! |, Z" X, c& ], H! H3 H, j* r' _
  768.           fp=fopen(".\\checkversion.dat","r");
    / C, i) F- @  a1 P
  769.           if(fp)) A; b$ K& x, G5 p3 R' s, V
  770.           {; n: j/ I* W) k* P5 e, F$ Q
  771.             fscanf(fp,"%s",szString2);
    - Q0 m9 q- |2 k
  772.             fclose(fp);
    , W! {  |7 k" I2 n
  773.             if(atof(szString1)!=atof(szString2))6 P% ?: o0 J: s' |7 X, p
  774.             {
    7 `$ q. \# M: f) M
  775.               if(!Dn.Connected())
    * V& ?2 t4 x5 {) I9 T/ D2 U  x
  776.               {
    2 x. T8 A! }) q/ ^/ W2 n
  777.                 bFirstUpdate=TRUE;
    " T( B0 N! R2 }, T$ ^' ]4 b
  778.                 dwTotalFiles=1;! |( ^- ?+ Q* h2 p, Z
  779.                 dwDownLoaded=0;
    & E7 l# F5 Z2 a; T% o
  780.                 bSilentStep=FALSE;
    ! S% e# I. z9 d( ~. ^' A7 W
  781.                 bCompressed=TRUE;; m/ v0 n% W8 J$ y
  782.                 strExtLocal=".\\DownLoad\";
    1 h9 U. S: {+ m' I* ?: `1 ?; N
  783.                 strFullName="update.txt";: V# H  `, a" l" ^4 M+ N3 z: h
  784.                 dwProgramState=AP_CONNECT;
    0 }2 X; Z5 Z: y- x: X9 V6 R3 i" H
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 P# d& B. K' J6 u+ O! o: H' m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / `0 H/ {) Y! R# b) n* E3 o; a9 j; S; R
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");- {& N; d3 ^& g, u- H

  788. # m- f% e* F9 U/ h0 q, X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 o: ]3 }" q. ?/ ?; j/ c
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    2 U. u; ?1 n  j  @, y( @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)1 c: T+ j* ?3 b- W- s% ]
  792.                 {
    / `" \2 ^* l5 @4 e/ L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( o% R7 d# d; o* y0 v
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");9 v$ x5 ?$ i1 S4 \
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
      `; T4 @! B! Q! h8 I" L" v& O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 l5 S8 w' T) y

  797. / Z9 U5 y! U; l; I: _, I. `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    & v  X( }# M* H2 Z% d' _3 O0 z" w
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. C" e( V0 ]4 {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 E5 ?5 }& C  t( F1 W2 g/ x2 ?
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* S9 v0 |  a5 h+ V. M4 ?' R
  802.                 }
    : j3 j! Q# c7 d( m! H6 a2 u
  803.                 dwStartUpSteps=5;% ]+ Y3 @+ O* D: a
  804.               }
    + [3 j- o5 L7 |+ W5 A1 L( Z
  805.             }
    % E# i; I& T9 U# |  s8 l
  806.             else  k: v* h2 A1 S/ A$ E7 e0 I
  807.             {
    6 l/ A/ K1 U4 O& }
  808.               unlink(".\\DownLoad\\checkversion.txt");( ^. t) a) {- F) w" M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 a# t$ e0 b& @( _' O& n
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    + T1 _* R# I) Y4 W
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");7 ]1 m; @, |$ v3 M" E9 l

  812. $ u; K( ]: d; W% P$ f5 b. @
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 ^% h( k+ _# s* v
  814.               dwStartUpSteps=99;
    5 I" O* k) x% a; ^; b9 u0 ?: j  q' d
  815.               bFinishUpdated=TRUE;
    1 L4 j, U+ v7 Z" z) y5 G
  816.               bCanUpdate=TRUE;
      e) Y% s, j, m; ^1 `
  817.             }9 f+ Q( ?- m3 V/ w/ z- r2 p
  818.           }
      @/ X0 d3 I: S* @' _4 e$ ~( U: I" F
  819.           else$ G4 A- [! y9 z. a+ {  h
  820.           {) H! R6 m) u! L( T9 w5 G
  821.             if(!Dn.Connected())
    & J. A8 S+ T) I/ ~% G; C
  822.             {
    - C" i- \# S, f3 ], p
  823.               bFirstUpdate=TRUE;1 m5 _0 {4 i: L& Y& g/ t6 k- O2 [" F
  824.               dwTotalFiles=1;; v2 w0 F3 X8 B
  825.               dwDownLoaded=0;, b' g% Z$ \* }% w0 m" }
  826.               bSilentStep=FALSE;8 y% _# v0 s) k2 t
  827.               bCompressed=TRUE;
    - C1 t3 z9 c+ T" ]  A0 r
  828.               strExtLocal=".\\DownLoad\";" ~7 u/ F6 A, D3 U3 N( D6 \$ E
  829.               strFullName="update.txt";
    ( S' X8 W" g* O% Q8 w, w: i& I7 r
  830.               dwProgramState=AP_CONNECT;
    9 b* J& w! b5 a7 ]" ]$ M
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 m" E. Z" G% H6 ]1 M
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");5 I) E; M8 f, k
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");. }8 i1 R, [6 E- }
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) f0 j" _" d4 Q2 @
  835.               unlink(".\\DownLoad\\checkversion.txt");1 J5 _. A0 z, b$ T! W# F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)8 q4 m' Y9 r' O! a
  837.               {
    / i* c, e- g" ^- H" b; j; ^$ G) V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 R$ t0 a9 Y+ _7 u# t
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    : e1 _5 q3 d. M' |2 d
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 K1 a: S3 l( _5 u+ r
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : q+ T1 M6 y6 G# y+ Z2 j) i# m" a7 b
  842.                
    " v' U, V4 D. @( f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    $ q7 x: ]' P+ O& [# H1 }: t- d7 d) r
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; k6 T* Z8 b! C0 U( f1 X
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    % T. p+ b# i  {# T
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) k7 s2 P* q, `
  847.               }+ \8 O$ t0 ^2 M# P
  848.               dwStartUpSteps=5;
    - B: x* S7 V% |" k
  849.             }
    , M+ u& E9 x; T; V
  850.           }
    $ e- e9 v( Z4 D. ^& R* R! o4 u
  851.         }, |. D5 A! C% B+ O1 a- R
  852.         else
    . O' U; M; T4 W  {7 ?4 M
  853.         {
    % G6 R9 k# T" R( r
  854.           dwStartUpSteps=3;
    2 [3 c! F) G) |8 f' [- l- O
  855.         }; {/ R2 ^+ P) L6 `' s9 R
  856.       }% z# U; h9 D$ ~; q. M& c
  857.       break;- |! V6 _# z  j2 G
  858.     case 5:5 B* p$ |* b; h
  859.       {+ R$ ]4 O4 u& k& L5 v
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    , _$ _1 I* x7 a
  861.         {
    9 K4 w9 R' k) x0 {3 a$ f
  862.           int opt_overwrite=1;6 e7 x7 `. ~3 n, R( n; }! [
  863.           int opt_do_extract_withoutpath=0;0 J. d; ]0 p- C4 P4 Z3 T, P
  864.           unzFile uf=NULL;5 ?* F6 A/ C1 c) }0 S5 K
  865. 0 l! M. U1 j. k) x5 R/ k
  866.           uf=unzOpen("Wsa.zip");* k- P' L8 a# X
  867.           if(uf)  [2 U; f% A; K5 o$ _, K' x
  868.           {7 g1 g3 G$ W* e5 ^' c
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);9 j8 j, @; p* l8 x
  870.             unzClose(uf);  E9 v5 ?4 }- N- `" ]
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / C3 z% X' C3 y. X! V3 l# d2 }6 o( R
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");, o: F" U  J) j
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");* z6 D, r) E- ?
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 l; @/ K* p4 |5 e8 O. k& A3 e' q5 ]
  875.           }$ h0 f9 A5 Y: t% O
  876.           DeleteFile("Wsa.zip" );( D& p2 L  _. O3 u/ b5 B( @" f* ?
  877.         }
    # X: I2 Y, S5 u6 _

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

" d1 w2 H  n  Q# y) Z0 |; l, d, M0 p# J. z* U, v

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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