CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
3 P& m6 g! o, N( }
  1. / RevApp.cpp : Defines the class behaviors for the application.5 ^0 t, k, P* |$ f" W: V" K! T) ^
  2. //( b5 u+ ?. y4 x- ?
  3. * I6 K, e. S% s5 q. _; R% a
  4. #include "stdafx.h"6 n+ }- E, [% J* W7 o7 E- B

  5. 2 |2 j1 ]( R- q3 s  o
  6. //#define UNICODE
    5 j. Q& I0 @7 R( x" B
  7. //#include <gdiplus.h>
    7 @& P" Z) G/ ]# h" M( p' v
  8. //using namespace Gdiplus;
    + A3 |7 N; \# i

  9. 3 I) B: a0 ^/ B# N
  10. #include "RevApp.h"
    7 \4 a. ?0 s  ]
  11. #include "RevAppDlg.h"8 B' N$ j- }& r" {" }5 M

  12.   U3 K- _- g4 m$ J# U5 u$ z
  13. #pragma warning(disable:4786)
    / u0 {" p( |% c$ ]
  14. #include <map>- p4 c3 f7 u1 C
  15. #include <list>
    # D- X6 J/ `* y3 e5 {
  16. #include <direct.h>
    " }1 ?0 @0 Q$ R" r! w+ O- Q' G
  17. % x2 T7 T8 I3 ^) @3 L/ A/ o
  18. #ifdef _DEBUG2 G, _: U- M) M& H5 c: G
  19. #define new DEBUG_NEW
    % Y' k! {9 l7 }3 k/ Z* H
  20. #undef THIS_FILE- y& f7 E+ H3 P. I" a
  21. static char THIS_FILE[] = __FILE__;6 L$ [7 \; @+ g2 q9 U0 o
  22. #endif& N0 P: I0 z% j' w
  23. #include "SkinResDef.h"/ p2 ^9 n3 @0 C
  24. #include "ChangeBG.h"
    ! ^* t$ @2 N% L; f! K/ z3 N7 h; [( @
  25. #include "AFXINET.H"6 `: D5 `3 _- S5 C4 i

  26. % a; e* }, x7 M9 A* i0 X6 \
  27. #define TRADITIONAL_CHINESE 0
    " d  _" d+ E! V1 P4 w
  28. #define SIMPLIFY_CHINESE 1
    6 h! N# ~5 w' _! X) F6 [+ Y
  29. #define ENGLISH 2
    " C1 P/ B, B2 R* A* a
  30. int m_iLanguage = ENGLISH;( i) }& |2 h) _' @5 {
  31. /////////////////////////////////////////////////////////////////////////////
    $ c* K* d' W) H* p
  32. // CRevAppApp
    $ R; |  B# _/ f8 S
  33. ! K$ `0 V! E; G& V2 R
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)! n) l. K/ [1 l2 m2 c+ x% p
  35.         //{{AFX_MSG_MAP(CRevAppApp). p2 {5 ]% d; w; N2 h
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 P4 X! L: Z' v' q
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!9 E: ~* J% A% s* Q& R* r' A7 B
  38.         //}}AFX_MSG* H" V/ h& T& K3 G
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    7 p( C8 p6 a! U- O! u
  40. END_MESSAGE_MAP()
    % W; R0 ~2 W' ?- X% D5 \

  41. , {1 Q8 D- v% z% S* i/ I3 o! L
  42. /////////////////////////////////////////////////////////////////////////////
    6 e! ^- \: `7 F- N; z8 v
  43. // CRevAppApp construction
    3 t/ O/ u9 B9 P3 k) j: b

  44. 5 O; L+ R9 w$ g3 E" I7 [2 S8 W
  45. CRevAppApp::CRevAppApp()
    7 f7 f% |; B; H" Z" }+ g
  46. {
    * O) m( a( j" w; d, N0 n2 u
  47.         // TODO: add construction code here,
    + _6 v" m7 }( \. f. o+ e# K
  48.         // Place all significant initialization in InitInstance
    / z# K2 I( o5 S5 t' q6 A0 c
  49.   bDisplayIsBig5=FALSE;5 s& U2 B/ M0 K" L
  50.   bRestartUpdater=FALSE;
    " Y2 W; t" I' Y" s+ T8 u% T
  51.   bFinishUpdated=FALSE;
    ! ]; a; ]) V) n7 c+ L$ Z
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    + f; G8 g9 l* e
  53.   InitChangeDataBig52GBKS();' r+ }( h+ k- w3 ^
  54.   InitChangeDataGBKS2Big5();
    # o3 Z( y: n) y2 O
  55.         //$ u0 b( g# x0 _% B+ M
  56.         bClickRunExe = FALSE;
    3 H" D, t- Y7 R" m' o0 m2 W" p1 f
  57.         //
    / l# a2 t2 U6 i- u5 [: f
  58. }5 w+ B5 J4 H8 X) r# E# U. N2 w& f
  59. * l6 @# c) T- O+ `
  60. CRevAppApp::~CRevAppApp()
    2 e: t+ X$ p- p& _* l5 x
  61. {
    + n% G9 L+ T6 \
  62.         // TODO: add construction code here,1 z( \2 B  ?5 H7 Z5 u
  63.         // Place all significant initialization in InitInstance6 d  K' O- W4 E* Q  C, v
  64.   EndChangeData();  \2 z- e0 z8 N) B! d( h$ ^; b! L
  65. }: P: j: X6 n( S1 z
  66. ( a* [. |2 i& ?! K
  67. /////////////////////////////////////////////////////////////////////////////
    . A4 V0 W1 B0 N
  68. // The one and only CRevAppApp object
    # g- r4 d3 {, x( X+ }

  69. 4 G" ^5 B4 V) L2 n% b4 y
  70. CRevAppApp theApp;
    9 x' B1 A. v( k

  71. $ X" l5 l4 e4 |* G1 l
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 p2 O+ F" a, Z7 n
  73. {
    % o3 Q6 c, j' V  Q
  74.   int iEOF=0;
    . m3 n3 K$ Y9 p# P0 b5 M6 r2 O
  75.   char szTempName[MAX_PATH];- I. ~' ^. f0 m
  76.   *szFileName=0;# H0 o6 }1 m  ~: Q3 O
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 p4 p  ~0 Y0 Z6 H* T, ^* K
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    9 V% h6 p  d5 z) C+ _: X
  79.   {
    , y) @# ~8 m" b8 e6 _3 Y9 p# U
  80.     strcpy(szFileName,&szTempName[1]);
      Z  s2 T( `: e* |, l1 c
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)/ H' B7 v$ Y+ F* I
  82.     {# f% ~% S; w0 R1 z5 f
  83.       iEOF=fscanf(fp,"%s",szTempName);) a2 d4 E% I- Y. w) l" t% {; z
  84.       strcat(szFileName," ");, H: w2 I/ K- U; \  [
  85.       strcat(szFileName,szTempName);
    % D: q" q/ j# V- Y8 w
  86.     }
    : ~+ r1 ]. ^% J- s& L! a3 `; C4 d) J5 o
  87.     if(strlen(szFileName)>=1)
    . W* S* \+ w3 n4 [8 k
  88.     {
    * ~2 c7 g' f; W% A
  89.       szFileName[strlen(szFileName)-1]=0;
    & Y# K$ ]: r* d" o. ~+ M8 q
  90.     }
    $ Q8 I8 Z! s) d. B/ N
  91.   }
    % ~  ?- y) _. N' I- ~: T1 i/ e
  92.   return szFileName;8 }+ O' S$ Q+ u7 p9 J" C+ x+ A
  93. }
    # X$ k0 _! U, g0 j0 f0 U
  94. 9 x3 F! J5 u+ F+ b- x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / p- W% J; ]' z2 C, ]& U. Q( E
  96. {. @9 d/ M+ ]( h! l$ ]' H6 n
  97.   FILE *fp;# g$ d! w8 I7 ]8 t7 Y
  98.   char *key=NULL;
    ! o; j4 r  F7 _% I+ q5 n
  99.   char version[MAX_PATH];" m5 p# E; p; U: B! I: o+ R
  100.   LPUPDATEFILE file,olds;/ h# F* |4 s- b& e% O+ M
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 r. Z# O* O5 x6 v. i! |8 g

  102. ) ]$ ]+ p7 W1 p- Q9 [& n8 N* V/ n, O
  103.   UpdateList.clear();* x( _/ ^8 K4 T0 }& \0 ^1 ~
  104.   UpdateFile.clear();+ l4 Q( j+ u* L9 ^& A
  105.   if(GetFileAttributes(filename)==-1) return false;; Y4 ~3 G3 L  M9 w2 m) D8 v1 ~
  106.   if(!(fp=fopen(filename,"r"))) return false;
    6 J( @$ O! n+ W) i% m0 P8 \
  107.   fscanf(fp,"%s",version);: p. L- T+ I; K6 k
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }' `6 ~; c! U& z0 D" g! c( j
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ' e0 \7 b6 i8 s
  110.   {
    3 J( S  x9 M+ ], Q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ! x4 b, L- W  x% h7 K# e
  112.     fscanf(fp,"%s",file->path);
    ; m$ n" b6 |( H; f
  113.     ReadFileNames(fp,file->file);1 Z4 _# R9 \3 e5 A* x/ [6 Q: H1 M
  114.     strcpy(file->full,".");
    + v) g. X% U# n& J- R) e, i
  115.     strcat(file->full,file->path);
    6 I$ j1 I& K4 P9 j" J
  116.     strcat(file->full,file->file);
    % T2 D: L( G1 P3 x
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())  m. z' F) X3 c8 T" _5 w
  118.     {
    0 f! x, K6 B( M6 }) e
  119.       file->vers=(float)atof(version);# U' Q; Y6 a  v3 y# h5 m
  120.       UpdateList.push_back(file->full);7 ^# A- K% x; z) C
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & C$ c: a* h" {2 T0 w
  122.     }5 E' x" S( n* [0 `- X( A7 p) g
  123.     else
    ! s% S# S; y! {$ M
  124.     {/ Q7 i; {3 N" p% L
  125.       olds=(*p).second;
    , G! y) F" l7 D2 v* {4 S, o, c* ]
  126.       if(olds->vers<(float)atof(version))
    9 [. E7 Y8 M/ J( ]5 _
  127.       {
    7 ^2 Z* v; a* n  S
  128.         olds->vers=(float)atof(version);* d: u6 i" j3 M0 E& t
  129.       }
    ) Z( _  K  n5 x# c* @' A' o6 T
  130.       free(file);
    2 d: O. W' C4 c5 f% a. p
  131.     }
    2 U* g% E( A* ]' b8 o6 L1 C! G$ ?
  132.   }
    / p, Z( Q, ]! o$ V
  133.   fclose(fp);
    3 _* i9 c* ~, E9 P2 U8 m9 Z% x- I
  134.   return true;
      H6 A+ B' J8 \. i! R, f
  135. }/ q! G% U4 ~/ W7 c

  136. ' o, _7 _$ @  l2 r! i9 b
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath). z2 a/ m0 d5 C; G, T. W
  138. {& [( S  ]1 g5 |  f/ Z
  139.   TCHAR  szFull[MAX_PATH];
    ( h4 J) s$ i- c5 U
  140.   TCHAR *token,*inter;) U% W, W1 L2 C' X
  141.   *szPath=0;) L2 s" d$ j+ |/ |5 ?& J
  142.   strcpy(szFull,szFullPath);+ ^% t" x' i# \7 q. x/ d, Z, @
  143.   token=strtok(szFull,"\\/");
    8 O( t& w& o$ h
  144.   inter=token;
    1 ?0 ?4 u6 o9 T4 g
  145.   while(token=strtok(NULL,"\\/"))" O/ ?+ c  E. y. I) p& y: D/ r0 C
  146.   {
    2 G$ ~. J' d4 }4 u, ]
  147.     strcat(szPath,inter);
    1 ]& B" H1 l2 Y: P
  148.     strcat(szPath,"\");
    + E" h; f7 v3 q# k3 ^3 [
  149.     inter=token;
    $ l4 e9 S1 @; o& K* I9 V+ M
  150.   }- T$ B$ x2 t8 w  f5 ~
  151.   return strlen(szPath);
    & R) p1 a, X3 z$ q* z& R# ]2 ]
  152. }" {1 H6 }/ ?+ |' V  g4 D" ~

  153. 4 Z1 u/ o! ^' b( l$ h/ T6 Z! P
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase); f. c# ?% W' j, i; R; j! E/ ]$ k
  155. {4 e, ?3 Y! C/ l! L. W; C
  156.   DWORD attrib=GetFileAttributes(Target);
      S/ w( \% Z! D4 w  x1 T
  157.   if(attrib!=-1)
    $ T7 z" S( z0 p7 x3 ]
  158.   {' b; l+ h* r0 \
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    8 H2 K" i  {( P: ]/ u. `9 A% {8 e
  160.     {+ h2 e" z0 n: X8 y" a
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);1 C6 U/ h, _0 n  ~4 D
  162.       SetFileAttributes(Target,attrib);8 ~# S. c1 w7 e2 Y9 B
  163.     }
    & d& x. `+ {5 g3 |" l
  164.   }
    - N' j7 l" Z0 ~4 F
  165.   CopyFile(Source,Target,Erase);2 f' ^# V, Z5 s2 V: z) Q
  166. }: A0 t6 V2 k1 `, K) @: l
  167. - }3 T! P& w& v% X9 E% j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)+ Y8 G% J) ~; C6 a
  169. {
    ( c' M: H& M4 W3 A; X0 S8 i
  170.      FILE *fp;
    ( |8 s. _, @6 ?9 V! A' i, {" `! @1 P
  171.      char  szBuffer[8192];9 U1 e1 r7 ]7 \. \( w
  172.   va_list  argptr;5 E4 T* l% d6 h) w+ ?7 I
  173. : N1 S% c" G0 R
  174.         va_start(argptr,message);
    - j* F) A5 j* j6 r3 F: u
  175.         vsprintf(szBuffer,message,argptr);
    ) f% u7 D# S; S9 [+ X# W" S
  176.         va_end(argptr);! u/ D( {$ }4 g5 M1 C
  177.   fp=fopen(FileName,"a");
    * l2 |( @# X/ E$ W# I5 Z& a
  178.   if(fp)
      d: _0 ^8 t+ A+ w: u# {& W# Z
  179.   {
    9 W; L  r$ e6 S! f2 U
  180.     fprintf(fp,szBuffer);  y* {  w8 F! s
  181.     fclose(fp);$ R) M; ]0 S. |- k
  182.           _flushall();% R9 M$ l/ r7 ^2 i5 i; ~
  183.   }
    : C. z7 ]7 n+ N
  184. }" @3 [" e# [, I: r- |  v

  185. " s+ o: _, f+ U8 Y% y# K) _
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    . V/ h1 s, G; ]% G
  187. {/ m6 x( @  r8 v
  188.      FILE *fp;& L8 Q" ]9 W6 d0 G2 O
  189.     DWORD  attrib;; q" i% ?6 @# q$ N% l
  190.   attrib=GetFileAttributes(FileName);2 u- L0 S$ W' l$ @- H3 C
  191.   if(attrib!=-1)3 s: M- \7 C  ^" r6 N& C
  192.   {
    0 V* r5 y+ O3 \. ^+ e
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);2 u; r, Y8 A* g3 `* N3 s3 t5 P3 q
  194.     if(!SetFileAttributes(FileName,attrib))* D2 X7 I6 N1 n) n. f
  195.     {
    ' h. ?6 F0 n6 [  A
  196.       return FALSE;
    ' Y( L" @( x& y
  197.     }9 ^3 x+ ^5 @3 G/ Q
  198.   }& \5 E" \2 p2 {* B: j
  199.   fp=fopen(FileName,"wb");
    $ h3 ^" g0 I2 m7 V
  200.   if(fp)  `7 |: k8 k& h. R& _, Z5 x  m
  201.   {
    2 G" X; J9 c: H* X& E/ M& U+ E1 ~/ U
  202.     fclose(fp);, |* i! [( S' m9 m" p* B
  203.   }
    , b6 f6 n1 @$ d
  204.   return TRUE;. f- z6 ?8 @& p( n$ Z# P/ S$ x8 G) q' ]4 K
  205. }4 E( }) ?  b* {

  206. , n# p2 W# X! l0 `9 z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)) V' r2 Y) \- z% X: @
  208. {
    % h: w+ [# q! x: x  d! _' n
  209.   char filename[MAX_PATH];
    0 ~) E% i2 K$ W* E; `" h* C
  210.   LPUPDATEFILE file,olds;
    , P2 V  K5 `9 T4 k" G; w' y
  211.   std::map<int,CString>::iterator i;
    1 p9 W6 O8 D: o6 ~& I! A
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    : t. b0 e8 A- n/ }% \
  213.   std::list<CString>::iterator l;0 ]; y: i- i7 F+ z' s! V2 A
  214. 0 @5 m& p( }3 q. [9 p" e% F! X
  215.   if(bFirstUpdate)
    7 e4 v& Y' N. l% @6 G% `$ k
  216.   {# n+ P- a  I- q- l( d
  217.     dwCurrFile=0;
    9 v* z: n5 O: ~: D0 o# I5 v7 m
  218.     bFirstUpdate=FALSE;
      B/ l1 b6 \; \5 M5 Z* w$ S" f
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    3 `) s% O7 P  z1 L
  220.     {
    : f7 p; G# p  D
  221.       dwTotalFiles=UpdateLocal.size();
    8 M: m$ b+ x+ A! ]' @( O; k6 m. ]
  222.       dwDownLoaded=0;' d( B( l3 Z6 N% d5 L4 M+ F# @, `
  223.       bSilentStep=FALSE;
    * ~# j$ s! B% e/ L" T& O4 Y
  224.       bCompressed=TRUE;
    8 `& m0 y/ _8 B  f# O
  225.       strExtLocal.Empty();
    4 R9 c5 X, F8 s( @# s
  226.       strFullName=(*i).second;& j/ F& V+ }. l" r4 a
  227.       dwProgramState=AP_CONNECT;9 M5 A7 H' w1 o& `) d# k
  228.       return TRUE;& C# |2 x* a& S' k% F" Z
  229.     }
    2 A7 K1 S6 K6 L8 a/ s2 S
  230.   }
    " y. a9 D' w5 i
  231.   else if(bRestartUpdater==FALSE)
    1 D$ z$ [2 `. r; M
  232.   {
    0 Y1 y2 T$ {3 r3 W8 a  R
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 i, }% a8 F5 X0 i1 y
  234.     {- P5 V/ |' d  {% Y* G' x# y
  235.       file=(*p).second;
    & X) [. w  J5 Y1 N6 Q' G3 y9 u4 V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())5 a6 O& j1 i3 e- k8 r
  237.       {
    % @$ N# p& I1 P7 W. n
  238.         olds=(*p).second;2 l. G; A6 t+ Y' \# Y7 {
  239.         olds->vers=file->vers;
    ( {6 R& e3 i% G( }  I7 M, E/ {; U
  240.       }
    ! i% J. ~: ]) T
  241.       else
    8 G; W& \) B! m/ j7 B3 ]5 s+ V) m& T
  242.       {
    & Z9 K, L& g* l' U9 X* ]2 ]
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " |/ [1 ?, R: L# e4 O$ x0 b% }
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    + E% L. s" U" q5 t! Y2 G. s( t
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! G& S) ?, X5 F9 \2 w3 t. v% m
  246.       }
    * E4 ?& E! R2 z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  N; x+ p& M5 h7 ~
  248.       sprintf(filename,"(%s)",file->file);' f0 K% K- H7 j* t3 d! o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    + r0 u  r7 Z( Z, t! y
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" `1 W0 a: f3 T+ O. @% G4 P' P
  251.     }' M( C& ]0 y1 F) q
  252.     dwCurrFile++;% I/ F: d) i: J! V9 k* j
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 g9 s" [$ f  D0 ~
  254.     {/ v8 V' Q% g! w$ @+ C- o# S" n$ @
  255.       bSilentStep=FALSE;
    8 @" _; A" G; R% N) M
  256.       bCompressed=TRUE;
    8 ~" |. b8 }' D. H, G) `
  257.       strExtLocal.Empty();
    # R; E9 u" D, a2 _$ C+ x
  258.       strFullName=(*i).second;
    " \. x2 V, g1 d; h$ b# b
  259.       dwProgramState=AP_CONNECT;1 b. |# m, [# c$ j( Z
  260.       return TRUE;
    % B2 T8 f  p4 K1 Q; h2 K
  261.     }. W( _( T  e" w4 n% o
  262.     if(!bRestartUpdater)
    9 Q$ X* h* d: G$ r# w0 _9 w
  263.     {' h: f+ x, r! W
  264.       int iCurrSize,iFileSize;4 O4 m5 w" V6 [% ^0 H
  265.       iCurrSize=0;
    ! E* Z4 A4 [! x6 q9 @) `
  266.       iFileSize=UpdateList2.size();
    : i7 `4 t% e- L- [
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    9 B: _1 z: G5 M
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    2 V) [8 b3 \# M3 i2 H3 D
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");# ^. m4 d6 Z$ u; B
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* O1 x$ \2 e+ X/ r+ g" u. h' f! n
  271.       Fclearf(".\\update.dat");
    : X6 e3 B8 ^  S" i
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    , S5 I( e* l: o/ s! ]/ r
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " f2 d* x9 `4 o# u8 f5 S  F% H
  274.       {
    & _- o, d2 |* b4 d, B. k5 f
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + q3 [  B% h3 }5 ~( ?% s
  276.         {
    1 V2 A) F3 e4 _3 E4 W) }
  277.           file=(*p).second;8 C$ C" H" S. v/ ?2 u. a2 l
  278.           sprintf(filename,"(%s)",file->file);
    9 L5 G4 D) Z, V; D! E  @+ ?% F2 Y5 Q9 K
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ; ^7 z" _1 _- ~) n7 m
  280.           iCurrSize++;5 p& h, @# i7 `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & E% ?$ v! `/ A) O( p
  282.         }+ n* J7 X4 n; T1 s2 e) @. b
  283.       }
    8 ]6 _7 P2 ^( z" r
  284.       unlink(".\\update.txt");
    0 M: P, R1 V2 V3 l+ P8 {& y3 K
  285.       unlink(".\\update.tmp");% g& Q3 {6 q) b  Z4 b1 i! g, U
  286.       Fclearf(".\\checkversion.dat");
      X& Q( ]. K  _( a
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    4 u' @2 Y: E  M) B8 v8 V( a* R: B
  288.       if(UpdateLocal.size())9 B' _- G8 k0 ~1 u/ w( O
  289.       {
    8 n; \6 \" k8 N/ U% O: u
  290.         UpdateLocal.clear();) z8 Y/ `6 \5 }0 Q
  291.       }& Z. `4 H0 N  J7 U- W3 l) e' X
  292.       if(UpdateFile3.size()): |' I- |. H  m0 q, U+ M+ Y
  293.       {
    + [2 F: P# y6 Y' \  Z( \# c
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). l. C- l/ T, t0 F: S  N$ @6 g9 w
  295.         {5 L# U5 `+ g  S6 W1 X  W
  296.           file=(*p).second;; [: V. @& u& b! }
  297.           free(file);
    + N$ @6 h3 Z; E* Q/ C5 ^, K" N* `
  298.         }/ C( X% m  p: P$ P
  299.         UpdateFile3.clear();0 Z- A& |2 X( Z; r0 d7 P6 B. g
  300.         UpdateList3.clear();
    7 e& j9 k3 ^; }$ g3 P# \
  301.       }- a% L; Q! H" b# E7 Z) E3 `
  302.       if(UpdateFile2.size())
    1 O* q  o! T* {' U' m
  303.       {0 N9 f/ e  z# R1 T9 T/ X
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 r% O4 Q5 b0 _2 q8 G, Y
  305.         {9 S: p6 ~2 N6 O, {& d
  306.           file=(*p).second;$ P  C) F1 f( P0 F" a8 {
  307.           free(file);! Q9 f; {2 P% @) F7 B+ h6 K
  308.         }
    $ _7 F" E! h3 U% Y' B5 q
  309.         UpdateFile2.clear();2 E0 L- e* j2 `& a  j# c# S0 B, b4 [! \
  310.         UpdateList2.clear();
    2 b* `" e3 ]6 w6 i
  311.       }) X4 n1 C5 b4 C1 D+ q; Q- {
  312.       if(UpdateFile1.size())
    9 f+ g+ c7 X7 u) u
  313.       {
    / B7 F& A6 E; Q7 D' E7 Y, J5 ]
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)# E# @, b) ]% X/ z9 e( d# K8 w
  315.         {- y3 J* p" e( x% E" E2 j4 O
  316.           file=(*p).second;8 ?. V" [# n! E+ h! F. u! V
  317.           free(file);' G0 I  E$ n7 k; u5 \: L
  318.         }
    5 w+ u& u. W2 j, R. x7 P
  319.         UpdateFile1.clear();* F1 A& `; o2 R
  320.         UpdateList1.clear();8 O  b) S+ A/ `  o" q  Z
  321.       }4 W2 A# U% x8 j2 \/ i7 Y, x( v3 Z& h7 A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));! y. e7 I9 R0 o$ ^+ L
  323.     }3 E( k/ u& \3 I/ V
  324.   }5 v* |1 O+ `+ R8 D3 T0 m
  325.   return FALSE;6 t  e1 h+ L/ T4 e- o
  326. }) ?3 ?/ i* r2 M7 g/ e: @1 ~; W2 i
  327. + p% Q3 W1 a* a( `, Z
  328. void CRevAppApp::ClearAll(void), }- K" G  r+ _% w# m
  329. {+ P! [' y  o# s0 V! {- t) C
  330.   LPUPDATEFILE file;8 ^% c% }3 E8 b% _8 r7 X' i3 P1 ?; \% M
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / ]) D. F$ P& n3 H

  332. 0 d& a0 }  \. k8 Y- e
  333.   if(UpdateLocal.size())
      a' d2 H. c# c/ \. O+ H
  334.   {& l0 @7 M9 Y: @% h3 h% w% d
  335.     UpdateLocal.clear();
    " _8 y9 g/ y8 ]' z
  336.   }
    : X, m9 E7 E; H+ A) f
  337.   if(UpdateFile3.size())9 v& w3 k, c" O6 s9 [! \) m4 `0 j
  338.   {
    ) D2 u3 n, z* M5 \$ V0 o% ~( w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 @; {0 A7 x  _; q+ S2 t
  340.     {
      |( s1 y: X. ]+ ^, m8 p& t6 B
  341.       file=(*p).second;
    1 @4 u0 l7 `* O
  342.       free(file);' s# X& p6 x: H+ C# V
  343.     }. W5 x! x" L0 a3 m3 I
  344.     UpdateFile3.clear();
    + q* U9 v0 |5 Z6 v" }- l" U
  345.     UpdateList3.clear();9 I8 \3 U8 d8 F0 _5 n6 Z. u$ [. {
  346.   }
    % s& T0 P( _) W5 f2 o5 W/ H0 {& [# y1 s
  347.   if(UpdateFile2.size())! A3 B" Z. l& m' m5 m, |8 r
  348.   {
    . ^. O6 G% m$ D$ M; q+ o; D  W. u5 S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& Y0 b' d  s; X8 o
  350.     {9 e/ B: Y( a- J7 |1 d
  351.       file=(*p).second;6 f: k" b' G3 [. P
  352.       free(file);# }. X5 i1 H6 |% j4 |' h% d
  353.     }8 D& O9 U+ ~* q/ ?/ c
  354.     UpdateFile2.clear();' X/ L) Z$ i1 v/ h
  355.     UpdateList2.clear();6 f% m) g0 q& `1 A
  356.   }8 Y5 k- e8 N% y+ L
  357.   if(UpdateFile1.size())
      q. e7 x8 z% s' }$ H) e2 @
  358.   {
    3 h( B$ F: z) `$ n0 w6 u, X
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)5 |: }/ t" c& u
  360.     {
    5 y. |  z& M' ^% ^
  361.       file=(*p).second;
    4 {7 {5 i+ m8 M- h, A/ [
  362.       free(file);
    5 b+ E4 g( m- `: F
  363.     }
    ! [( W7 E: f  R, t- l; U
  364.     UpdateFile1.clear();
    9 a) z7 L1 A3 t. [8 F. a9 E) G
  365.     UpdateList1.clear();
    4 _* H5 k; J/ w: m% p3 Z% C5 y4 f  _
  366.   }( l4 z8 h8 k: y+ |. Y; g0 B: ~$ P" \
  367. }  5 u" X: g' j0 q/ o9 R
  368.   ! ]& j; }% ^* P: M  s1 j
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 w5 C6 }1 \" z8 s  B7 {1 V
  370. {' y" `6 g' n2 ]1 h9 m
  371.   int c;
    % O6 i' A( F- ]: W1 u
  372.   LPUPDATEFILE file1,file2;  e. C' f8 u( H/ P  |5 v# K6 w  R3 |: J
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    6 v, B& K* ?1 T% Z1 b8 o0 S/ l
  374.   std::list<CString>::iterator l;
    * o% U+ ~9 t2 g; e9 b& g" v
  375. 7 v. f7 N' b' y' J3 G- Y
  376.   UpdateLocal.clear();
    ; c  A) |8 P; ]' W, Q) X3 U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);8 f& t( s2 R3 G5 x( Z% C* S: ~
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ h7 |5 T9 F$ M9 x4 {7 s6 m
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
      t; J4 `' d* t3 [. K
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ' L6 q2 r: m7 n/ r! K) A3 ?4 j
  381.   if(UpdateFile3.size())
    & |  Y, n- O. L3 ?* ^7 E+ s4 ]
  382.   {. Y; w% R: S& z, A. q/ u4 {' L6 {
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    0 s4 d' d* t9 D
  384.     {
    4 n; y/ H# n$ _2 R' W
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ `; ]( j# T7 ]5 W6 t: J' X
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), H% h, T+ q( u/ `$ O& J; s- I
  387.       {' H6 t, Z% o( m
  388.         file1=(LPUPDATEFILE)(*p).second;  ^4 ?4 F7 h) Q6 i% B$ r
  389.         file1->vers=file2->vers;" V( v  Y. r5 D+ m7 b/ l. K: \
  390.       }
      B+ ]$ C9 d% I  b1 \: B
  391.       else
    8 K: I% J# K5 w) R( T
  392.       {' m; R/ X' f' Q* d3 R! C
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% H5 R  n  I+ Y! s6 G
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));5 X7 H  [, `' ?5 T* I5 j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    6 J2 ~1 B- L8 y& i0 T
  396.       }
    + b# V1 H5 p3 [* F' ?4 A
  397.     }
    6 M( Q: d" z* N: C8 H
  398.   }1 _: w- G& A- t/ s
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 G: L4 @8 ]  j1 C" A( R/ j2 l
  400.   {+ u0 D, [+ f1 o
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    / P3 P$ w9 O9 f5 G! b8 v4 D
  402.     {
    5 m4 Z& `  B. i; Q4 o; Z. \
  403.       file2=(LPUPDATEFILE)(*i).second;
    - _  {$ b3 r1 @& r( M4 l6 |7 x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), A+ q7 A$ ?# ?% i* z
  405.       {
    / f. D+ ~; L5 r) O& y$ m
  406.         file1=(LPUPDATEFILE)(*p).second;
    : ~" o5 `" w0 e+ L+ @
  407.         if(file1->vers!=file2->vers)
    ! S% a1 \& |- E1 C5 _; s1 x' t4 H
  408.         {: N, `  l6 n3 w; M$ G: T
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : K, }! s3 \0 G% a
  410.           c++;
    ' |, R7 ~: R3 _( Z& R2 {0 X
  411.         }
    ) f6 L6 U3 x  ]; \
  412.       }% ?; D; Z3 _( I3 y
  413.       else0 @6 k2 `1 e( z0 N; {$ \
  414.       {
    * I% E) H) l/ s. Z) P- E2 Z
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! a" V- H& V7 z$ r7 V+ H
  416.         c++;% o7 k" ^, v9 [( p; e- Z: O/ B: E( ~
  417.       }
    9 t: Q6 e2 u- ^) c
  418.     }
    3 [% e) N, E- }$ ?" w: {
  419.   }
    ) T2 k. |- V' ]* j
  420.   unlink(".\\DownLoad\\update.txt");* P% \8 G, z$ \* E* K1 T
  421.   if(UpdateLocal.size()) return TRUE;
    8 M0 I& w$ q6 j( ?$ ]1 L  d+ R5 E
  422.   else                   return FALSE;
    0 U' P4 m9 ?) B. W
  423. }
    * y8 o/ J+ h+ C. \6 H
  424. 9 I, T  }( U! Y% f  k" V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". ~5 w) j3 s$ ^. g6 R
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    % W" B6 M  A& C0 r4 x0 Q; f

  427. ! E' X- \0 T# j; j! Q

  428. 3 I, ]/ c6 S6 v* W. z* @5 [3 f

  429. 6 t+ s# X6 h; G" l' K+ E$ c4 @
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)7 X1 ]) |0 y/ L1 z+ j
  431. {" q% {# \/ ?  x
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 ]  w& W# J0 ^& d# ?1 d
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    " s  t9 P" G$ T5 t  [6 w
  434.   {1 A  `( ?. F! z& w6 a) z
  435.     char szLanguage[50];
    5 _5 j# n" I0 a9 i5 F8 l
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 {$ `# y: u8 y( u& l3 f7 d
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & q+ H. F5 D% d" X% x9 R
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" D2 L: j7 v+ E. ~+ I
  439.     else                                   m_iLanguage=ENGLISH;
    ) }) {' O% k7 Y1 x7 x
  440.     char szRegister[100];5 M  L" S3 O: p# W( f
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 L9 _) H4 m4 ?1 R; K( v
  442.     strRegsName=szRegister;; U8 y& _7 S- k2 ]$ _
  443.     char szPatchURL[100];
    7 V% s# ^4 D- O, @
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ A! q/ i' k) h* z/ V
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" H4 z, X! [  }
  446.   }/ e' ^5 m5 P0 t
  447.   else0 y6 d0 r2 M4 H
  448.   {
    8 t# J5 F) q. y% e* J% _0 d
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 I4 D8 U; E0 Z
  450.     strRegsName=DEFAULT_REG_URL;- V% |& _: ~% w9 H7 \
  451.   }& b+ W5 m6 k& V/ J# I( Z* N4 j
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 R5 ~" D9 q+ K$ z; a2 c6 k
  453.   {0 t+ s% \* }# y: J* D
  454.     char szIP[50];( Q+ l# B* A2 V0 v' _+ M5 Y" l
  455.     char szDIR[300];
    + ?9 J8 i8 v+ G, I1 Z( E3 G# u
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))/ U, l) Z$ p+ C9 T# e* J5 V5 L
  457.     {3 a: b; f  G" g0 @
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    " U0 ^4 q& @; {/ ]7 A$ V/ Y
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");5 C+ a% R0 @. e0 `2 K: {
  460.       strHostName=szIP;% h% Q+ i+ d) W! }: o
  461.       strHostPath.Format("/%s",szDIR);/ a% j1 Z7 `! l: R0 M; Z
  462.     }( S, B4 I& \! G! X7 X$ y4 J
  463.     else
    , J2 K& |" j! u1 p; b9 E/ l
  464.     {5 ]3 o+ G2 }, R* L
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & z0 D# C' e7 G0 z
  466.       {& U; s2 [' t  G* O$ u
  467.         char szLanguage[50];
    3 R9 ?. I  }' |3 M" |: ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; }3 K3 L& @2 N: y% H  ]
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    ; g! e7 u* M& W# y% z7 V5 E
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    6 E2 y" O! P- L9 S/ ]
  471.         else                                   m_iLanguage=ENGLISH;' T$ ~: D- H, q; V% L( U* ?" s  m. M
  472.         char szRegister[100];
    ) Q: |) v0 \/ e5 A. i& `) r2 t% T
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . C, }0 n- [9 V
  474.         strRegsName=szRegister;
    8 P0 D9 ]+ X! N  z/ V
  475.         char szPatchURL[100];9 |& `6 Y. P3 u) M# ^: I. p
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: g- v' w7 W- w4 p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% E0 _; \  L4 Y4 c/ X/ ]
  478.       }9 L* j! g# ~, X) x
  479.       else
    " D4 K; b# b9 J) l
  480.       {# Y. H8 f8 s0 D& m
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);& B/ |9 c4 K# P, |- v' b
  482.         strRegsName=DEFAULT_REG_URL;
    ( A8 F3 ~" r8 e6 W
  483.       }
    # z0 O7 O) n# a6 `/ P; a2 J
  484.     }
    9 p2 D' H- g& d( W  z, w/ ]/ @; j' V
  485.   }
    ! ?! y& c4 w. @5 t$ O+ m' f
  486.   return true;, V5 u1 j( k& B8 M0 q. y
  487. }
    / F+ T0 W% f) j; i2 M5 [3 I' s# d& g, X
  488. ) i8 U2 `' [2 }: G
  489. #include ".\ZLib\unzip.h"
    4 L) x* N; Z( G* s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);: A7 H! Q) `. e+ j% k
  491. /////////////////////////////////////////////////////////////////////////////
    , d- v8 \- x. M8 F2 @: O
  492. // CRevAppApp initialization
    & w! M& q# _' p' f

  493. ; C7 E" g2 r8 h: t
  494. BOOL CRevAppApp::InitInstance()
    4 D3 q6 }5 I' `- ]( G4 t/ ]7 C
  495. {
    7 L  u+ m- w' w; a% d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    1 I9 i( Z1 m3 D! c

  497. & j  p! X8 g/ ~  E/ x" ^9 @) }
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; V5 a" R. {1 a9 ^/ ~
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( H: ~  l8 f8 g
  500.   {
      J8 U; I" d) }3 L4 y
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    & l$ V8 Z: H, N% t6 u
  502.     GetPathFromFullPath(szPathTarget,szPathSource);3 A9 E* _9 y7 Z0 T$ t
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    5 _( L$ {6 |5 L# }, X6 g5 u# t: G
  504.     {
    ) T) H7 M  p# ]5 |) Z% E" O9 {
  505.       strcpy(szPath,szPathTarget);3 ]5 c9 |0 Y& O
  506.       SetCurrentDirectory(szPath);
    ! p8 M% o6 t7 H, a
  507.     }
    7 l8 y0 W5 V4 L# M" f& b
  508.   }1 ]9 \& y% M4 T
  509. #ifdef _DEBUG% ~3 g4 _! D( I: h0 A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 ~4 h" t; j" k  ?
  511. #else0 }; r% x# E& M* f
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))6 @4 [% X- b( ]+ z6 s: X, b) i
  513. #endif
    # K5 s* Q3 n* d' R( l
  514.   {
    # S7 B! Z+ _6 q3 _. \9 w
  515.     char tempFileName[MAX_PATH];
    7 Y, }+ q5 h- k
  516.     strcpy(tempFileName,szPathSource);
    & r0 G" v' r5 {  E
  517.     tempFileName[strlen(szPathSource)-12]=0;
    : q# U, h6 W5 ?5 q; x" I! I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");1 u( Z* y- k% w& X8 f
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    , b7 M4 U! w( s6 j# n/ O" z; n
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    4 w+ \: k- r! O* O: [4 q& j- y
  521.     return TRUE;9 v" \; R6 Y- k, z+ c. E
  522.   }7 a" O; I6 ^! |: _2 m
  523.   // Nuke 0118: Delete run.exe
    . M9 k/ |* L2 m/ q4 X
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );7 \: _) E1 v1 ^
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" F0 f: @" |/ k8 @% _
  526.   if(!ReadCfgFile("Config.ini"))
    ; ?3 E9 G( o* N, h
  527.   {
      L& {$ S. z9 k
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) q0 I2 s) C) A) R9 u  ^
  529.     return TRUE;
    " Y9 \8 w) s" K0 |) f- ]8 X
  530.   }
    , ~/ D, C. S$ g" d0 J2 [1 U
  531.   HANDLE mutex;: x; x) c9 ^$ l6 ^3 n# R1 G7 v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
      P' l, ]8 N1 p- k
  533.   {# y* k2 v9 f; m3 g/ [
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    % n  d0 ^. n- B2 ~& y6 R
  535.     {' ^; d( w# w3 R( W; ^
  536.       CloseHandle(mutex);
    , f1 _3 `) e  C% f6 m
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 j* ^4 j2 \" v9 w
  538.       return TRUE;
    , O  s. l) T  ?1 H5 A9 s
  539.     }5 k  q/ H. ]/ g/ C5 W
  540.   }  
    % B; |. W; |' l, ]: I2 {8 C
  541.   CloseHandle(mutex);: G9 l. v& A5 Y. P% y% ~

  542. ! O3 @0 c7 X% y' G+ l. t3 ]3 r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    8 }8 N# f* _% u8 Z& u
  544. 7 ]8 e, C& P$ C
  545.         AfxEnableControlContainer();
    : t$ t1 K; S9 H# O9 p# j
  546. 3 I8 [. w7 }* _* H  R( ?2 P2 j
  547.   bCanUpdate=FALSE;
    % V1 }' s, I3 G6 @- ?2 m. Q
  548.   dwStartUpSteps=1;7 F/ X8 f4 u% p0 }. _
  549.   dwProgramState=AP_NOTHING;
    , N! ]- c2 j- o" i3 _
  550. 3 u3 D, L8 F9 [
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);& s9 f' P3 R7 k

  552.   f( h( r* c9 v/ E$ a3 v: h
  553.         // Standard initialization
    : D( v+ x8 h/ W) R# c
  554.         // If you are not using these features and wish to reduce the size7 L9 h, w' A  p8 ?( l
  555.         //  of your final executable, you should remove from the following6 v% ]! N+ c. h) m4 P6 I' s
  556.         //  the specific initialization routines you do not need.8 [, O% h) K( ^! {, E

  557. * S. d- k6 }2 p2 P. P
  558. #ifdef _AFXDLL
    8 y1 A$ n9 S/ S9 s
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL% o$ e# p6 i$ k# ]/ P# G, W( Q, `
  560. #else
    + K; m7 Q8 l! [# U: j1 l* b) |
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    / s8 f0 k- N2 Q2 ^+ ^" c
  562. #endif6 ^% E5 F5 |  o$ l
  563. 8 E* T2 `/ L" h8 o, t0 O) F6 }" t
  564.   dlg=new CRevAppDlg;* {% Y% L# t5 B  p9 c8 m9 E4 i
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    * u1 u9 m& N* V5 J
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    " t0 h$ m/ \  F; l0 ]/ h
  567.   m_pMainWnd=dlg;* ]4 {3 E6 r4 ?0 b4 w3 _7 Y4 H
  568. $ M. S5 s- g  U$ t1 w5 a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);7 O" k0 |% E# }1 M9 O. n

  570. 3 I$ B4 G% Y9 O7 ~
  571. //  GdiplusStartupInput gdiplusStartupInput;. W/ `# C* S& A, o
  572. //  ULONG_PTR gdiplusToken;1 d/ I3 C. H6 b0 x+ B) s, z3 o( c5 N# A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);7 O7 K! Z; N! [, B8 j1 @0 w; x

  574.   U, f" ]4 \9 V" }" M% E
  575. //        CRevAppDlg dlg;
    & a9 N# _5 M. ^, i9 Z0 O. Q
  576. //        int nResponse = dlg.DoModal();- g" p: C- T9 w& I+ Y. ^" s
  577. //        if (nResponse == IDOK)5 T. ?  _' }0 t3 }
  578. //        {
    0 E$ [* Q7 Z3 h# n9 M2 H- d$ m
  579. //                // TODO: Place code here to handle when the dialog is* ~% L, T8 P; E: v
  580. //                //  dismissed with OK
    " b6 F8 I/ i/ Z& N
  581. //        }
    6 ]9 k3 C9 P  d5 N1 m. {
  582. //        else if (nResponse == IDCANCEL)
    ! b0 B$ v4 _8 p' N
  583. //        {' s) |7 [, i( ]- o4 t* a% G3 T
  584. //                // TODO: Place code here to handle when the dialog is
    / y4 P' F" l1 v) K7 o% R% D
  585. //                //  dismissed with Cancel$ O& |0 K! o5 Y6 f5 R
  586. //        }
    7 @) A4 l$ D' F
  587. , k; w; D5 b  m
  588.         // Since the dialog has been closed, return FALSE so that we exit the( J4 H7 J2 X8 {0 F+ p% o0 j
  589.         //  application, rather than start the application's message pump.& H/ S8 D0 [9 D* z% G% v
  590.         return TRUE;1 w' U$ C) Y# u4 N; z* y" q: R0 ]
  591. }# F  T  B; G- F, X2 L" A/ ], ^

  592. 1 y9 r7 F" h, T' k
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 P/ @" ~- f' [# p7 R
  594. {
    % h7 e( s5 P5 e' ^* v
  595.   int i;
    ; y8 q  k1 \" l1 m/ d' ?
  596.   char *szRet;
    # u1 z. {7 z- }' i+ I; w

  597. # g. p! m: F/ \  E- P( t
  598.   if(pSource) { itoken=0; sztoken=pSource; }9 {* `4 U3 r! |5 m8 Y* y9 `: i# H
  599.   if(sztoken)# H0 y7 T8 H7 l8 Z# j5 `% f
  600.   {3 e5 [2 T3 W1 N
  601.     szRet=&sztoken[itoken];  ?4 Z! N% w- t% E/ |, N
  602.     while(sztoken[itoken])1 {7 J! W- d2 e6 q
  603.     {
    . x# N: V2 \5 I7 q( s& i
  604.       for(i=0;i<(int)strlen(token);i++)
    ) e1 o( `: O0 O. M
  605.       {  k% f7 w. }" a5 v9 C' i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])* E% e7 |, u3 |4 e
  607.         {1 }+ X+ F$ o$ _9 n
  608.           sztoken[itoken++]=0;
    $ Q6 _9 P( Q) w! K, m8 Y+ `5 G
  609.           sztoken[itoken++]=0;
    2 S9 z+ e3 q2 R% e: d) x' W
  610.           return szRet;& j8 c3 B& ~: N" V0 q
  611.         }
    . J& [2 Q" q5 O9 [* Z. o9 z0 J
  612.       }
    6 H5 y/ W( i2 F# p6 i& H# r7 K  v
  613.       itoken++;
    : _( t6 h  D6 c7 N2 `4 L; n
  614.     }$ k7 E7 t. I4 X2 j; }& T: D
  615.   }
    * H9 K- ^5 ~: R8 m* G4 u
  616.   return NULL;
    & B2 L9 F1 z! D! C
  617. }/ l$ r0 `2 D/ J- h
  618. 6 ~, u0 K' n. v3 Y  B
  619. void ProcessProc(long Total,long Current)+ l+ u6 C% B( F7 _4 H1 i, q
  620. {1 P$ v- I5 ]2 \
  621.         MSG msg;
    ' s% O* u+ W8 K& B) ~& @. A1 N' E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    7 T# @: s6 `, x7 i. X4 r5 I8 q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    6 e5 E: n4 p* B
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" ~5 `( p, C) p/ H" w
  625.         {
    ( J6 C/ Z4 U. @/ ?4 P* o2 B5 A
  626.                 if(!GetMessage(&msg,NULL,0,0))
    . n. i0 K% m/ @: |1 p
  627.                 {, e8 l0 }! O8 T, K; ^- S8 Q: C: v4 v
  628.                         return;
      o' X' G& l# }% N/ s6 ]
  629.                 }
    " B, e. F" p3 \$ \; A" D
  630.                 TranslateMessage(&msg);+ J: l# @0 |" b6 m
  631.                 DispatchMessage(&msg);  }$ s* ~2 _2 Z+ S) ~
  632.         }       
    ' D$ W8 T" z" w' r) j
  633. }
    - ]) G8 r. Y; w3 D( v+ M
  634. : f& A7 D) X% A! |
  635. BOOL bFirstChar=TRUE;
    ( k& y+ ]+ N: j/ o+ j* j
  636. 1 u: W* N9 U8 y7 a- V" x
  637. BOOL CRevAppApp::OnIdle(LONG lCount)% c& q8 Y5 {" U  F8 g4 l
  638. {1 ~. b8 ^" j3 v& Q6 ]
  639.         // TODO: Add your specialized code here and/or call the base class2 {, s# w9 S1 j5 X( g: }" |
  640.   switch(dwProgramState)
    ' N$ O9 g; o8 C& `- Y+ m$ C3 R, L; d
  641.   {3 y$ E" G1 E& w7 ?( r
  642.   case AP_NOTHING:9 `2 N* P5 T7 ~7 E8 r( k3 s" J
  643.     switch(dwStartUpSteps)
    + P0 Z0 y3 r7 A1 T
  644.     {: }# q7 Z& H4 o- O7 v
  645.     case 1:
    % B* _, ~2 I* |% j2 ~; V& n  G* d
  646.       {1 I" j: T' b" t0 B; w
  647.         int i;1 @! z  i- c" w; O4 M
  648.         CDC *pCDC=dlg->GetDC();
    * m. U" P% a) A5 f8 a0 |
  649.         HDC hdcwnd=pCDC->m_hDC;8 \& e) x9 Z5 \( J6 U
  650. //        Graphics graphics(hdcwnd);0 H. Y. D- s" i1 v, x+ w& V; D, H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");$ d# m3 E  [" z7 h( {9 l! S7 ]* `
  652. //        INT iWidth=bitmap.GetWidth();
    0 e0 G- h2 {7 S  A, e, Z
  653. //        INT iHeight=bitmap.GetHeight();2 z7 @: M2 M( ?
  654. //        Color color,colorTemp;2 h0 N4 l& r0 P3 A
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 `% ~: U; c$ q/ W
  656. //        {$ J7 J6 P. T6 W
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    5 t/ F& ]6 f% h% v0 v
  658. //          {& k' h+ i" p& M+ L* |! J7 ]
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    1 i) k5 w2 @; l# t, I7 P1 e  H0 ^; v
  660. //            colorTemp.SetValue(color.MakeARGB(
    ' E- j5 [: Q5 a$ q$ c9 V$ ~
  661. //              (BYTE)(255*iColumn/iWidth),
    1 ^- }6 c( p: V) w* Z
  662. //              color.GetRed(),* U) P* {  f: k7 {
  663. //              color.GetGreen(),
    4 L0 t! _' `% `9 [- V% i& o! s) J
  664. //              color.GetBlue()));8 `9 I# B1 j& e( n
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);$ S, o% C# }. x/ @2 ^
  666. //          }2 y, _  v4 a& s5 x/ N
  667. //        }' P6 U: H' V$ C, e5 ^8 I3 x
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);+ q2 E. N, b1 M0 J; \: q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ; g, {: m5 P$ E) q4 P
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    3 F7 `. p/ B+ c* l) r8 f, E: n, D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 Q- @0 s3 r: F* u6 g
  672.         for(i=0;i<240;i+=8)
    / l6 x* _( p  Z
  673.         {
    - [' f8 f1 Q( R9 c. g" K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 Y) K1 D4 k3 z' \. b, u- G
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % r/ {2 T6 P" e$ q0 c# d' F
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : E! O+ v7 G) G3 P% E/ m+ e2 h
  677.           Sleep(33);+ P" t. t* Z9 C& {& h3 M/ T( N
  678.         }
    / {  t% p7 K# b, u+ a/ e$ ]7 h
  679.         Sleep(1000);
    $ a# [4 o* s$ x/ t3 f, v% b
  680.         for(i=240;i>0;i-=8)
    " w: d3 s- g( g" I: s
  681.         {  R0 o$ f5 j0 o" P
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ' l. w5 n6 B! w  T8 g
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! s) N; L% b' g4 D. ?" J
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);7 y& w: \8 {# \8 @0 u# I, N' c! |
  685.           Sleep(33);
    ! _9 C, h! W* Q6 V% i! D
  686.         }
    ) L: r/ v) Y7 H6 R, W
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( _0 \9 {* r- q. r
  688.         dlg->ReleaseDC(pCDC);/ i" O; v7 G/ p* B# Y
  689.         DeleteDC(hdctar);
    1 O) h8 U& m" h9 R4 o
  690.         DeleteDC(hdcsrc);
    ' X& v/ i" J, K8 H! C
  691.         DeleteDC(hdcorg);
    9 i* r; E, K, \3 c3 ~- B0 @3 N
  692.       }
    , [+ ], d1 x5 D) s) n& k. a
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);/ W3 R* _; U7 @% E  ]
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    * R' P+ I5 q- W0 t$ t) I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    % k, e+ o5 j1 ~  A
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    7 B4 D- [# F4 O, v& ?4 A# w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 n% }$ R% ~8 q% \
  698.       if(!Dn.Connected())4 t# ]% m8 X) @$ @4 l
  699.       {0 d+ V6 i  J' P
  700.         dwTotalFiles=1;
    : x- x. d; A: H5 Y+ v8 v
  701.         dwDownLoaded=0;; E! H5 F& }: G0 \" Y
  702.         bSilentStep=TRUE;% B$ v. T+ b8 K9 _$ `; c
  703.         bCompressed=FALSE;2 x2 ?! t/ q6 f/ B  \" O2 k# i7 _0 K
  704.         strExtLocal.Empty();7 }6 l5 W3 F! o& Q1 H8 e$ U! w$ |
  705.         strFullName="readme.txt";8 B' B# e; e+ h0 t9 \
  706.         dwProgramState=AP_CONNECT;) G# r" }2 C, O. `$ V9 k
  707.       }2 a' q9 ?7 N# x9 `4 l. l
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    : w0 x3 V. y" p& p4 i/ }
  709.       dwStartUpSteps=2;
    ; Z: P# @1 I: c$ _( |( y/ M
  710.       break;
    ; M5 ]& z# {: x" U, _7 s
  711.     case 2:
    9 C8 r$ |1 v% w% t
  712.       {5 X# Y; T" J; w% Y* x3 e9 c' m
  713.         int iEOF;" j+ r2 G; [' }" g
  714.         FILE *fp;9 ~* P9 f, Y" y& s
  715.         char szString[512];0 T( v8 _0 ]! N2 C: L* X
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    ! F! i  m" L& Q# H0 c& M' r; G
  717.         if(fp)  w5 d" Z6 s- j6 m7 {! U  M5 x
  718.         {
    8 g' U% p+ T# Y
  719.           do9 l* D& w6 A, E4 w
  720.           {+ d! L3 u; I- Y( |# T) M- L& Y1 |
  721.             iEOF=fscanf(fp,"%s",szString);
    $ k6 h/ N4 x' T2 _2 S/ Z+ G6 i( V2 e% j
  722.             if(strlen(szString))
    : O& h; \/ n/ Y' q
  723.             {" j. B& U5 I! X, q2 G
  724.               if(bFirstChar): [* g' ]+ v. G: `7 i
  725.               {& ]- e; l3 A9 _5 U# g
  726.                 bFirstChar=FALSE;* C3 A! M5 K0 d( j2 |
  727.                 bConnectIsBig5=FALSE;
    9 R. j4 n* x1 n  v) j3 Y
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    , I% `! ?* l0 m$ ^: V1 ~
  729.               }
    * ^% @: Q9 t; R, c$ t" {
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    - ^" E* h# M) @
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));. ]- t' Z3 K0 `/ Z
  732.               dlg->m_ListText.AddString(szString);
    - Q' S% x; Y3 o4 C5 d  G0 `4 ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 V. [- I/ H2 G* B  B
  734.               *szString=0;
    - p! a/ t( G- b- R" ^! H/ l/ @
  735.             }1 o0 u1 z5 Z' o  S5 q3 U, U
  736.           } while(iEOF!=EOF);1 L$ ^& m$ ?4 W& c# x
  737.           fclose(fp);! D, l2 y. Y( O5 x
  738.           unlink(".\\DownLoad\\readme.txt");* H/ p8 K1 Z/ j- @# W
  739.           dwStartUpSteps=3;* Q  {5 g, S  F) m( f. @  |, A
  740.         }$ j. D& p5 j+ E: B1 _; V, F
  741.       }
    . O( O; c" ]' {) r0 ^% t, g
  742.       break;
    " ?4 h. M4 _3 @2 u8 ?! w8 n
  743.     case 3:
    # l7 D& ^  Y! G2 ^5 p
  744.       if(!Dn.Connected())9 |+ K9 {! |! k% V
  745.       {
    ) S' J/ |) T: k* x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( H- h( [6 A* S; X9 E$ r
  747.         dwTotalFiles=1;
    / m0 I1 i+ l8 Q
  748.         dwDownLoaded=0;
    3 q9 g" K- W0 Z8 _# R" H' n
  749.         bSilentStep=TRUE;; f; X+ k' b0 v. b+ J! X
  750.         bCompressed=FALSE;& @2 T8 T7 o0 {$ _/ s* P
  751.         strExtLocal.Empty();% j( Z" H( a! `4 @9 h, Z
  752.         strFullName="checkversion.txt";8 {7 E/ E0 G1 \' X' Y- q
  753.         dwProgramState=AP_CONNECT;: Q8 F& C) q1 u- v: Q
  754.       }
    9 ?4 _, {* u7 z, H6 A  I- f+ e
  755.       dwStartUpSteps=4;! b1 i7 Y" O$ r
  756.       break;1 ^" o& x1 M0 e2 @! p$ D5 Q/ J% R7 |
  757.     case 4:1 V4 j/ R3 ~; M) L- D. `4 O
  758.       {8 u$ p' R* {! A  T/ s
  759.         FILE *fp;' G! S4 r. S. y
  760.         char szString1[128];2 a: Z6 E6 y0 Y, b; {- p
  761.         char szString2[128];
    + `: @( }3 Q8 K) S
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");! @9 X4 W3 E9 C( C( X6 }
  763.         if(fp): T6 p& ]3 A( {# e7 _
  764.         {9 N0 c/ @. T" E9 c; g
  765.           fscanf(fp,"%s",szString1);, k  ]  _" _# }9 q
  766.           fclose(fp);3 r# q3 e3 c  C8 T& u
  767.           fCheckVersion=atof(szString1);
    * c6 q. p1 \( g/ |' n, ~
  768.           fp=fopen(".\\checkversion.dat","r");5 T. ]" P, ]3 F2 _
  769.           if(fp)
    5 Y& x9 n* m0 Y. S% V+ o: C
  770.           {
    5 L& a$ ~! z4 h& |( T/ v" D
  771.             fscanf(fp,"%s",szString2);; q5 E: U/ H1 N5 A" F
  772.             fclose(fp);- x  o5 `6 Q' N/ C5 ]7 P
  773.             if(atof(szString1)!=atof(szString2))* l$ o/ C! L9 J7 [) r) z9 m! w3 b
  774.             {4 h! p& D$ m" L2 P; H
  775.               if(!Dn.Connected())/ _7 s% G' B1 A" K  e: E* o9 A
  776.               {# x# C( B$ f' |. N# u3 i
  777.                 bFirstUpdate=TRUE;4 ?/ Z2 m: p0 B# I
  778.                 dwTotalFiles=1;
    ) d$ h' X$ G, X8 ]0 H; G4 \) P
  779.                 dwDownLoaded=0;
    + @9 r: w2 O5 M4 |/ q* G, l$ ?
  780.                 bSilentStep=FALSE;
    - g9 t* v' L- g  E1 ?# i6 i9 Z
  781.                 bCompressed=TRUE;
    : P6 g& W  T1 a4 g0 G" `
  782.                 strExtLocal=".\\DownLoad\";9 w* i0 K: x  k. T: J$ C% S6 G$ H
  783.                 strFullName="update.txt";% o  U2 |, e& O
  784.                 dwProgramState=AP_CONNECT;
      u) u1 M/ B$ @7 n& |  t( H, B
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 J4 e4 ]0 [" P6 \! d5 a
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) N6 i/ I- E' Q; ]
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! ~7 B4 k+ Q. _8 P+ _) S
  788. : H0 D- K9 \7 z. Q  ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % g7 C6 r; C2 `( ~* k- E
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    7 @6 v( h! P5 s
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ( e* e' \( o& Y- ^. o
  792.                 {' I7 U. X0 M* x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    1 t$ ^: d- B' \1 V
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");* Z$ M0 n0 D4 l
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");, N! c& g: _+ w2 I) O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 g/ m9 ]9 L) G8 x
  797. " D% a8 j0 K2 P) a9 {
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; \$ k& i0 I" C2 [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 r9 Z; S) _  I8 N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");' S+ R9 Z2 q. ~4 n/ m) D' x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 H! l5 b) @$ f" @1 T9 w
  802.                 }6 Y" k0 c5 ~# g- h
  803.                 dwStartUpSteps=5;
    * K- y* q0 }6 }  x3 c
  804.               }
    / Z( B2 H; Z& e+ S/ [7 E* \' R
  805.             }# F, a3 I& _2 p; q% X
  806.             else
    / l' e, u/ k5 M" i' J
  807.             {# R* U, {4 W9 n5 v
  808.               unlink(".\\DownLoad\\checkversion.txt");
    7 j6 ~  ]3 w( G+ W& S
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    - _0 x- i* ]6 r6 A5 x0 C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    9 |) m* z/ b6 e& R9 _" \
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");; U, e2 B5 j  A2 g0 k7 ?
  812. 8 h9 v* Q' L% W" q4 u
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 K2 t# D% h$ n& G! p
  814.               dwStartUpSteps=99;) b. }4 ?3 T, J8 K! S  \, [
  815.               bFinishUpdated=TRUE;
    & R8 N& G7 e  `8 t
  816.               bCanUpdate=TRUE;% ]8 l4 j: g, _. N* U1 n
  817.             }
    4 o3 D/ w5 k% q6 ]( n2 e
  818.           }: I8 a8 U5 @( J4 E' q* z
  819.           else& A: }, k% [( y6 A0 D- y- q
  820.           {' a/ j# x8 S+ ]: Y- ]. W' V/ q
  821.             if(!Dn.Connected())
    - P0 C1 V1 H3 W; e
  822.             {6 z' U7 A7 g1 l# X( B
  823.               bFirstUpdate=TRUE;
    0 g, l0 p3 I' k; E
  824.               dwTotalFiles=1;
    * d, `) A! }+ w0 Z/ k; Y9 V
  825.               dwDownLoaded=0;
    : z- l+ u' m( B9 C& L& K' X
  826.               bSilentStep=FALSE;3 N0 l4 g* G# d( I) i. R' g: g
  827.               bCompressed=TRUE;8 T" G* V' `9 Q* Q$ {
  828.               strExtLocal=".\\DownLoad\";5 m$ T# E" s! C5 e. Z* E3 H
  829.               strFullName="update.txt";9 }5 n3 g% @; G/ b
  830.               dwProgramState=AP_CONNECT;, }& N3 D7 S5 o% m+ w, L6 ~. s* F2 R
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% k1 B9 x) F9 e0 W6 S+ m( }0 K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");  g3 j7 {9 e0 F  z# W) ]' y
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");2 }' [! p2 O# `6 [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 |  B% {& ~5 C* ^$ u; }
  835.               unlink(".\\DownLoad\\checkversion.txt");
    . j! N/ c8 ?# ?; v( {3 P* E
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    / v4 A2 i  t/ m; m5 t# j
  837.               {' C. X8 |3 z1 }5 x0 I+ c
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");( X( G% @: s; f$ ^" `
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");( V( X/ j% @0 q$ U+ v  f" M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    3 h/ `0 e0 U1 B
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( B9 r8 m% I( Y0 M* S7 y: n
  842.                
    , ]7 R! e$ Q0 X1 d7 N
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    0 H" w. s4 g& W  w
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");" y3 u. y2 F- ?4 U8 Q1 i7 h! s
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");' c$ D% w9 r+ n; p( f: O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ C" I  d6 |: \% H3 n3 H
  847.               }
      r8 D3 i8 @  n3 y1 S, F
  848.               dwStartUpSteps=5;3 I, A# W' }! m
  849.             }
    3 Z5 l6 l# p* `
  850.           }
    1 V5 p: _1 X- M) R4 |; M) d7 p
  851.         }
    + q( D3 k; X5 L
  852.         else# {; d  X1 S  o, T8 J! I2 |
  853.         {9 f% R/ @8 [  W; |. A; K, O! A
  854.           dwStartUpSteps=3;
    + f$ P$ c2 G  l/ {: w3 U0 e
  855.         }5 k/ D% W7 U; u8 W+ D- s# c: k2 w+ Y7 s* J
  856.       }$ S. p' [1 G4 P' c, k+ ]- h
  857.       break;6 \5 h! T7 i: p  K  o' L& `( c0 n
  858.     case 5:" V( ^" C0 c- e' J. S, q6 t
  859.       {4 z( q7 k/ g! S, A4 ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)9 k. V, }" l; m( J& P6 s/ b
  861.         {
    & O7 f9 d7 {$ O  ^$ b
  862.           int opt_overwrite=1;
    ' K; v& Q, U! R6 F$ V+ [3 t) r
  863.           int opt_do_extract_withoutpath=0;" C" {% d6 ?# K
  864.           unzFile uf=NULL;1 J/ y) e( ^9 M7 l0 B

  865. 4 a" R1 d! {7 f! u- d! ^; b
  866.           uf=unzOpen("Wsa.zip");/ w" H: [! P& p+ x
  867.           if(uf)
    3 \3 J: u+ ~0 G/ X: Z; l5 h0 G* H
  868.           {- _) {& L- b" ]+ }$ \4 O
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
      E3 ~, t2 \+ e( R; s
  870.             unzClose(uf);+ S( i+ e, H$ r! u8 C
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; n" v; F- A  s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 g& L1 Z6 u. r; ]6 P9 P8 y* V
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    " K& k* |( }& f% z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * z+ x$ `) {1 \9 y4 r* y
  875.           }+ r1 h! Z7 e- A$ D
  876.           DeleteFile("Wsa.zip" );
    - `6 F2 o+ ^* U/ ]* ?
  877.         }2 g8 ~" M: ]$ ~1 Y$ i3 `

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

評分

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