CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
/ D- i- P$ [6 |$ q1 y. K' h
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ' J/ g8 b. Z% R+ G
  2. //& [: y% @4 `9 l2 R- t8 M
  3. 0 t& o% \7 F8 W: |
  4. #include "stdafx.h"" {- j" F7 E$ ~$ v/ J' I

  5. 5 D6 B3 _: g  J+ m7 l
  6. //#define UNICODE
    6 u; ~6 w" Y# b/ Q5 X
  7. //#include <gdiplus.h>  A; r" a' ~8 W* G
  8. //using namespace Gdiplus;
    8 M( F# N0 o& P) `* S
  9. * w" B/ m* M5 y0 K5 i
  10. #include "RevApp.h"
    , O; D7 s9 V3 Q+ l9 T' {- t
  11. #include "RevAppDlg.h"
    & _. j4 `2 r+ p, s- A8 z

  12. ' z: K9 ?8 i2 P
  13. #pragma warning(disable:4786)
      q( M9 o1 m8 s: w% s  ]+ {9 J
  14. #include <map>5 F7 ^9 ~2 ~0 x7 H+ `8 m3 z
  15. #include <list>
    & K8 B5 P7 F) E+ x- W
  16. #include <direct.h>
    7 h8 z/ v. |  t* U; q- _
  17. * h3 z' ^9 G5 c1 y8 I; B- M
  18. #ifdef _DEBUG2 g% ]% [: O5 v9 F+ @
  19. #define new DEBUG_NEW( K, p+ C! b9 c! c
  20. #undef THIS_FILE
    % J* e! P/ n, |, R" F8 f
  21. static char THIS_FILE[] = __FILE__;
    $ B0 G: H8 P- U/ j0 j+ L+ L' f
  22. #endif
    9 _& s1 p9 r( T; o0 V0 l
  23. #include "SkinResDef.h"
    ) n  Z, E" [( @, z7 F: U% J
  24. #include "ChangeBG.h"( y' G8 ~4 {& Q: k% ?/ g$ w
  25. #include "AFXINET.H"8 W7 Z! w" X5 z/ c# Z8 c/ |& }- l  P- W
  26. 1 u/ u! n6 e# {; @0 X" t! H
  27. #define TRADITIONAL_CHINESE 0
    3 e2 F  K. Y* l6 m! o  V. `) N
  28. #define SIMPLIFY_CHINESE 1+ O! P5 j6 J2 U; M& {' R# L
  29. #define ENGLISH 26 C, Q0 W) g2 p9 k1 H. x0 `
  30. int m_iLanguage = ENGLISH;8 c% q( P, A9 X
  31. /////////////////////////////////////////////////////////////////////////////: E- Z$ p! Z4 o/ ~$ l! w
  32. // CRevAppApp
    : n: R: R& L- m/ J. V- r) t
  33. + k9 \! |' @' v. y( T- c2 X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 x# B+ M4 k' D) V" I) _
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 [! R7 A2 e  O2 j% t  i( T
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    3 b! R# Q4 G7 a7 }: L+ W
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    : `0 J: N: ?+ ^+ J4 J' Y
  38.         //}}AFX_MSG6 j' M- Z# ~% C& h' I- o7 o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    & K  f% P7 K5 q8 L, U2 J, E
  40. END_MESSAGE_MAP()( c% q6 B; [3 v# k- Y
  41. # s3 {, J( b) y) d! X
  42. /////////////////////////////////////////////////////////////////////////////* F) }' G/ f0 ]' n$ f( D. h
  43. // CRevAppApp construction
    - I% j4 I/ G  c# U: ]0 [6 q

  44. ' ]9 K. E. F( d  D5 ~8 F0 e, i; h
  45. CRevAppApp::CRevAppApp()
    $ r7 b4 T8 E( A+ A3 S2 ]
  46. {
    - y  N( V  g* f  R- e
  47.         // TODO: add construction code here,. l1 ?" f) n/ Q. H7 Y
  48.         // Place all significant initialization in InitInstance5 ~  P8 o: d0 M: L
  49.   bDisplayIsBig5=FALSE;
    ; ?4 H+ ~8 `0 a! Q5 q  J; T
  50.   bRestartUpdater=FALSE;
    $ f% o5 w/ |* R& I3 q
  51.   bFinishUpdated=FALSE;
    # J& N4 ^9 r% k& N
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    + s) j( C3 _: R- P0 v
  53.   InitChangeDataBig52GBKS();8 e4 g  e' Q8 D- E; N6 W/ [8 h5 ?+ N$ d
  54.   InitChangeDataGBKS2Big5();7 p0 `, j/ u$ h7 s
  55.         //
    $ x2 f8 ^! Y+ c0 w
  56.         bClickRunExe = FALSE;) r# L: ?/ g. s
  57.         //  a4 F; A+ S2 l$ d& K4 G7 U) `6 s0 @
  58. }
    / \! g( D2 C7 _. A7 R

  59. , \0 D$ p4 q8 O- L4 M- r
  60. CRevAppApp::~CRevAppApp()
      n/ Q) u6 p5 S( f# i3 `
  61. {0 c. q) t/ ~6 n" @% W
  62.         // TODO: add construction code here,( s0 H, J  g, M* ^
  63.         // Place all significant initialization in InitInstance
    % B3 N5 E+ R& ~- @6 p& X
  64.   EndChangeData();
    4 g$ i: Y# a  G3 \
  65. }
    9 C! F2 _$ U  H- Y3 l5 P  Z6 |
  66. # d+ _6 L4 K7 _3 G; U
  67. /////////////////////////////////////////////////////////////////////////////
      E! y- ~5 _/ y" q
  68. // The one and only CRevAppApp object8 L( w: C( |6 D' ~1 X) X5 t- n

  69. % ^/ w* G0 y8 K; ~3 X5 [
  70. CRevAppApp theApp;
    2 Z5 `# @  }3 r: B9 L

  71. 8 {4 `$ [. G6 u1 W, q- z
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    5 Z6 u" ~/ o, ~8 y. I; o
  73. {! b7 [, @, }* {7 m! x' U
  74.   int iEOF=0;
    , e6 ?; @$ J+ i8 \: Z
  75.   char szTempName[MAX_PATH];
    ) L% [( \& m5 A% r7 \4 A
  76.   *szFileName=0;3 g. B! E2 i1 d$ r# v
  77.   iEOF=fscanf(fp,"%s",szTempName);0 Y: u( E, Y# o( j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ; e; a! y1 [% r% s
  79.   {
    : w8 ]- R/ \; b9 A+ D. E$ Y: g
  80.     strcpy(szFileName,&szTempName[1]);
    ) w$ B. B  L7 K6 y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    # ^  @" n, l# q9 f
  82.     {! N! ?' U1 c- x$ L/ ^1 ~
  83.       iEOF=fscanf(fp,"%s",szTempName);" \% I6 ]8 Y: ?0 F
  84.       strcat(szFileName," ");
    " c' h/ W) d% C2 ~7 i, b) d
  85.       strcat(szFileName,szTempName);! y: [$ i4 v) f" S5 k, ~: P
  86.     }5 ?: \8 _/ P, Y! s. u
  87.     if(strlen(szFileName)>=1)( N" V" A; q$ \1 ?) Y8 g6 `
  88.     {: {4 H. p4 }# a2 v. g
  89.       szFileName[strlen(szFileName)-1]=0;
    6 x2 @# X% D- B$ R4 {
  90.     }
    * x, h( R% r8 [2 H4 A) r
  91.   }* ~( z6 a4 S8 [& |* H- l. @4 K
  92.   return szFileName;
    ) j# b2 ?  U+ f) z
  93. }
    4 g! l, v5 C0 [" ]4 Z# \0 l9 y

  94. " {7 V$ Y+ o$ x  E0 E$ t  n
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)# {2 u$ ?% X; G  t
  96. {  o6 w. b0 y: ~' z: c8 i9 F4 j
  97.   FILE *fp;
    * ~7 g4 m$ A' @3 D* q
  98.   char *key=NULL;
    6 r! M% _( \9 D7 f9 ]
  99.   char version[MAX_PATH];
    # ]+ v2 L  {+ g' x; N! I2 i
  100.   LPUPDATEFILE file,olds;
    9 G/ h' u0 R, x. N6 A( W/ Z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 \. B) P1 u# u: j4 |* f
  102. 2 i0 V0 d+ k( }1 x" ?$ Q
  103.   UpdateList.clear();; ^  k5 Q( l# M4 G! z
  104.   UpdateFile.clear();; u& ~- l. ?5 Z; n- L* y( {# y
  105.   if(GetFileAttributes(filename)==-1) return false;! L" H% c' L8 Y& I: Z
  106.   if(!(fp=fopen(filename,"r"))) return false;" u; M/ L' H5 {+ j" n
  107.   fscanf(fp,"%s",version);( O( w' \) A8 j6 |, J0 C( X+ ~
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }/ M$ S3 F) `3 }( b) u& s( z
  109.   while(fscanf(fp,"%s",version)!=EOF)& u, v+ |' ^6 I" z6 ?5 t$ e! W
  110.   {
    . _' a$ c4 t2 R+ q+ }& P. f
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 q6 q/ l/ ?! [
  112.     fscanf(fp,"%s",file->path);
    0 S5 G5 S: T! k9 N1 \$ c4 v6 m. k# C
  113.     ReadFileNames(fp,file->file);3 A' M- N% J+ v% g5 `3 J9 |( t
  114.     strcpy(file->full,".");
    * H* B; q1 j- ?! v+ @- F0 g
  115.     strcat(file->full,file->path);
    8 X5 Q1 Z9 K7 D$ U
  116.     strcat(file->full,file->file);
    - u" e0 m- V8 _6 |
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    : N# v, \. e" z
  118.     {
    5 B" i. G4 q" n0 {9 a' u
  119.       file->vers=(float)atof(version);
    3 P5 g' M! A2 U. {4 a
  120.       UpdateList.push_back(file->full);
    ! ~6 i4 Q/ {; Q
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 `# e1 t% H& ~% e/ I' ?. G
  122.     }# [* u, R4 U% a
  123.     else
    . _/ g. |- F& I+ A
  124.     {9 I# n* E; X* g  k4 v8 @: M
  125.       olds=(*p).second;
    6 r1 t& s# Y& r5 z  ~, |: {
  126.       if(olds->vers<(float)atof(version))
      D+ |0 b3 w1 {( I- i
  127.       {
    9 `* }$ n% L: n2 [  K
  128.         olds->vers=(float)atof(version);5 u, K/ z1 d" M, p9 R
  129.       }
    " |; @( u; p% W  Y7 L
  130.       free(file);
    6 ~6 G' w2 p& c, d$ ~* q9 v
  131.     }
    , n. ^+ e) z) P5 ^2 n) D
  132.   }
    ' @1 Y8 b% r7 x5 x9 g
  133.   fclose(fp);
    1 J6 d4 p1 y; d6 J( K8 [, m3 z
  134.   return true;
    " J" M8 ^# ~1 F
  135. }. u/ S4 C1 N' e

  136. ! p% f: ^+ M2 L. \  ?7 o% g
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    6 O3 ]7 M5 D. c
  138. {
    2 @+ J3 [# _4 _" H, w$ f
  139.   TCHAR  szFull[MAX_PATH];
    % M- x4 ?1 I4 i" \2 J0 ^& X9 e  L
  140.   TCHAR *token,*inter;
    1 h6 q) u% D/ Y  X) x! n
  141.   *szPath=0;6 P- ^! q% y/ @( ~. T' h/ a: M
  142.   strcpy(szFull,szFullPath);
    ( I5 k$ l" P) j; i5 S( v
  143.   token=strtok(szFull,"\\/");: r" t% v4 G  q6 b( U
  144.   inter=token;( F( e6 _9 \( R3 s
  145.   while(token=strtok(NULL,"\\/"))
    7 w0 ]/ h9 u5 i8 t+ {
  146.   {& c- {9 C+ z7 `6 W
  147.     strcat(szPath,inter);
    # A" `* j+ O8 Q
  148.     strcat(szPath,"\");
    2 M- X4 h: `$ @( V: O- J* H  }
  149.     inter=token;
    , d; L6 p4 m% x9 |3 [1 P
  150.   }& V5 G! h- [) a) O. d! P$ h
  151.   return strlen(szPath);) i2 l7 M7 E3 j' _! t% j; e
  152. }# E9 b  ^1 {* |$ I% V4 _0 [/ t
  153. + R/ f% T' l3 f9 x9 v
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)& [  b$ g: K3 o' v; |
  155. {* ]0 E" y5 F: f6 h; J, H! _
  156.   DWORD attrib=GetFileAttributes(Target);
    % o1 O8 J# y) T9 T* n( J
  157.   if(attrib!=-1)
    , K+ y/ ]+ y7 d6 E2 o# `& X/ `1 K
  158.   {
      E& n' e" E9 I% q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    ( A9 L* J8 f0 F- ~
  160.     {
    5 h1 ~3 A0 A6 f' F! x& w* t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* K7 C; e7 C" H+ y
  162.       SetFileAttributes(Target,attrib);- _  |# P' |# \0 {) J) p! r
  163.     }) x4 |: ~0 b9 F# m$ ]6 G& r- Z1 b
  164.   }
    6 p+ c, g5 x% a" T* l  C$ s
  165.   CopyFile(Source,Target,Erase);
    / ~" ?  r) p6 ~9 N6 |, L
  166. }
    & V: U+ v1 [+ s# `

  167. & C' g0 U7 f0 @/ I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    8 l. X/ A/ e$ a! I! q4 F4 y
  169. {
    2 A" s" m8 A2 B1 f! B  Q; W7 J# r
  170.      FILE *fp;8 d9 |8 a8 u6 d' E4 G( |( b, n
  171.      char  szBuffer[8192];" Q, e$ n$ G6 `4 Q
  172.   va_list  argptr;, T, Z5 }! y4 u' U, F0 W" }5 j/ D

  173.   H6 {3 u6 s& @2 d$ h
  174.         va_start(argptr,message);
    * x3 m; Q9 f! U- k3 G
  175.         vsprintf(szBuffer,message,argptr);
    1 {* g4 k) u: k5 }7 X% [' Y
  176.         va_end(argptr);
    & z; {8 x4 a! @! y" V
  177.   fp=fopen(FileName,"a");
    * G: k/ f+ \7 u2 _; W' T
  178.   if(fp)! u4 r+ X. c. `6 n  e
  179.   {/ n8 ^2 H0 b1 j$ w+ F; G; s
  180.     fprintf(fp,szBuffer);7 Z/ |' }* Q  m" k) X4 R4 Y5 K' e
  181.     fclose(fp);$ t8 _1 m# x% u$ B
  182.           _flushall();4 g0 ^3 L" D  j+ h9 ?, g; Y
  183.   }
    ( `7 m$ T7 h" {2 O; b' N+ \& C
  184. }
    4 a+ p* U( M* ~' U  m1 P; Z

  185. , x  P, k- o' H8 r2 e
  186. BOOL CRevAppApp::Fclearf(char *FileName)8 Y; V8 f% s4 F4 W! T  e# K
  187. {
    6 F7 A7 t& B9 h% Q9 L( ?, u
  188.      FILE *fp;! }* B5 i! c& X* a
  189.     DWORD  attrib;& ]( E5 `, U* s0 r' q
  190.   attrib=GetFileAttributes(FileName);
    , g" p; V1 ^) \5 m  j1 K/ O4 D; j
  191.   if(attrib!=-1)' Y" d1 [* d. P. h+ M0 ?
  192.   {* Y& j$ G. [- A8 n$ I* }7 h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);0 i/ I* v4 I" y* G: u
  194.     if(!SetFileAttributes(FileName,attrib))
    9 Y7 A: w- f0 l0 O3 ~+ Z
  195.     {
      W4 w) k( O9 }
  196.       return FALSE;3 w( V7 ^; }7 P; w% z
  197.     }
    : r; ]! R1 X; I
  198.   }
    4 ?- K4 F! p' \: Y: I. R7 U
  199.   fp=fopen(FileName,"wb");  d  [+ S) G/ P; B+ g) h1 K6 o
  200.   if(fp)  P7 o& A' R$ n8 D+ L3 j
  201.   {/ Z2 N" z6 M) a# B6 O
  202.     fclose(fp);# F$ z! [  f( @' C, V2 f
  203.   }- p9 z, Q$ r. B* p* V
  204.   return TRUE;
    9 s. k5 P' w1 v0 N" d8 {
  205. }5 \, [' K$ F4 _; k
  206. & f4 Z* V4 Z$ u: E" t8 s" U
  207. BOOL CRevAppApp::UpdateLocalVersion(void)$ J6 m% o# t; b
  208. {
    8 `$ N  t: x% V5 b
  209.   char filename[MAX_PATH];
    : _7 G" |9 `6 X, W% u& a
  210.   LPUPDATEFILE file,olds;
    + I. w; R2 p3 |% N. K
  211.   std::map<int,CString>::iterator i;7 B5 U* N8 ^. ~! \: c4 U& s
  212.   std::map<CString,LPUPDATEFILE>::iterator p;0 f) V, ~3 T& a4 ~; h! s7 n
  213.   std::list<CString>::iterator l;6 {7 B/ J, k/ A( s
  214. 8 f% B' R4 R4 Q4 _% f; s% ^
  215.   if(bFirstUpdate)/ T3 V9 Q0 x4 ~
  216.   {
    " _2 y: H2 L" d$ R$ S, |
  217.     dwCurrFile=0;
    : g% I3 X$ P0 K$ S# D! R' `' F1 ?1 i
  218.     bFirstUpdate=FALSE;
    ) l" U  m8 C7 V5 F! ~1 y: [- e& l1 X
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " q  d1 ]$ r( w
  220.     {
    ' n2 r8 n. R4 a" Y
  221.       dwTotalFiles=UpdateLocal.size();
    2 p  A" ~3 g8 a" d9 L- M1 Q  D! h
  222.       dwDownLoaded=0;0 @* B; V: i& i% K' A0 J7 m
  223.       bSilentStep=FALSE;
    ( h- v% a) s% U6 R& s" I
  224.       bCompressed=TRUE;
    ! z; O' |5 Y" V: T' L" r
  225.       strExtLocal.Empty();
    5 ]7 N* Z% V% v( [- r
  226.       strFullName=(*i).second;
    & q4 l2 }- g' s/ `+ t
  227.       dwProgramState=AP_CONNECT;8 w% t! h( x; W; `% B
  228.       return TRUE;
    & \7 q+ h" z0 A8 _) o
  229.     }/ ^  {1 M& [% \8 @8 D
  230.   }$ M) V. e; a0 ~( t" ^& H$ s3 V
  231.   else if(bRestartUpdater==FALSE)+ e# }( q$ A1 X# V/ A" w
  232.   {; w6 U! m* R4 J5 ^; g" G4 w+ |! }, ^/ N! A
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()): W) u  ~( q1 U5 E; y8 m1 D
  234.     {$ U6 I1 d! w" X: |3 u$ X
  235.       file=(*p).second;! K3 w$ X, k% D
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    5 A( K8 y0 m3 }3 c- o
  237.       {
    + k: b% R! G; h- T7 P
  238.         olds=(*p).second;2 `# Z: s( G2 s% c9 G. G+ ?, T
  239.         olds->vers=file->vers;  ]& ^' Q) c% ^+ j8 r$ U! b1 L' \
  240.       }) F7 p, ~( k2 |4 w7 h1 Y9 {
  241.       else
    2 d; X) |' J& Y/ L4 `/ p! t
  242.       {
    $ t3 J; S( [% B# s$ u0 t9 m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));, e* B6 I/ {( m
  244.         memcpy(olds,file,sizeof(UPDATEFILE));+ f& m' z+ \- ]1 ~
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));; J# G+ J# g/ a& y. Z4 N
  246.       }4 N3 ]) [+ e) S' l
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    / h3 r$ J* u. M- Q
  248.       sprintf(filename,"(%s)",file->file);- \2 i( i/ G: F% S- ]# V/ J4 O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; {8 G5 Q; \. w1 C; ?
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    + k/ d% H0 N! z* `+ E! E* O
  251.     }* e+ _* _2 D) n" M* U( E4 o
  252.     dwCurrFile++;. t: ^9 s. w+ v+ h' ]2 h: Q( s+ [
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 F0 M( g! L, t! [; `3 @! O
  254.     {& F+ m/ Q) J. l% Q- p  H
  255.       bSilentStep=FALSE;
    * K$ K/ w4 C8 h
  256.       bCompressed=TRUE;2 f1 d4 D2 {- q( [
  257.       strExtLocal.Empty();
    % V- x. }9 n1 B0 |
  258.       strFullName=(*i).second;
      R$ l1 I! n6 ]+ h1 R2 }
  259.       dwProgramState=AP_CONNECT;
    & [* _  e* B. R) s
  260.       return TRUE;. L! Z0 _* L+ N, q/ b( }
  261.     }5 u9 g7 U( P( w5 R3 ~0 y6 b" I" l. Z
  262.     if(!bRestartUpdater)
    % _) x; i; r" i+ C' s1 L3 ^5 [
  263.     {
    3 L3 [% h' [. [: K( s
  264.       int iCurrSize,iFileSize;: R( O* Z$ m+ L. f* o- }
  265.       iCurrSize=0;
    3 d* K! ~/ B' b. Q9 I
  266.       iFileSize=UpdateList2.size();& a* w# C0 g. [0 _4 ?6 A, p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");) g1 X' \' Q3 {/ y6 Q4 n" X/ i
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ) N' j  w- P. @! z  e
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");% X9 B$ L7 i  I) Q, s+ @
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * J& ?3 K7 @* O# O/ k
  271.       Fclearf(".\\update.dat");5 Y+ V6 h( s4 a) B
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 K" T8 y) o% a, q7 R7 i
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    5 D6 x4 O. r* e9 h/ h4 P
  274.       {: d0 z$ t( o% E" O
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 h) M& a& }0 X" v4 s  c
  276.         {' S4 q! x+ M0 v) |$ U2 b8 Z
  277.           file=(*p).second;; f6 F* [: \4 O( L2 `1 b' s
  278.           sprintf(filename,"(%s)",file->file);
    $ M# y7 q$ ?, j1 y$ F" F# b% i: S
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# \& j  X# H  b8 V; q
  280.           iCurrSize++;' O: \6 H: F9 I3 \0 w
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    0 P" p9 T5 B! t* C' Z7 _% W! M2 Y
  282.         }, C) Q  ^' C( S* `. Y& R
  283.       }
    3 B2 P2 N% K3 N. U
  284.       unlink(".\\update.txt");+ J! I. A# W# r+ \
  285.       unlink(".\\update.tmp");
    6 R+ _, x/ d+ q$ g% U( E- S
  286.       Fclearf(".\\checkversion.dat");5 E. ]& B7 P/ h
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);% v7 N6 B& d9 V: k: I
  288.       if(UpdateLocal.size())
    8 I. L0 \6 ~: S' z+ e" i
  289.       {
    3 s) K1 ], V3 E" f
  290.         UpdateLocal.clear();, J7 g* [( f2 Q( |! r- p
  291.       }
    . p" e& Y" D" N: w+ X
  292.       if(UpdateFile3.size()): V- v' l! p9 l+ D7 ?/ U# i
  293.       {4 X, f" h' }/ y/ H! V  z9 U& v
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; ]& w( f" {7 w! \! K+ l. [
  295.         {
    5 `; j6 _8 n1 X$ q; Z7 q& ?
  296.           file=(*p).second;
    . T+ f- u) e# K
  297.           free(file);
    , m( q6 r6 E. }+ v  I( k7 y2 u
  298.         }4 C2 E% f$ y( ~2 L$ ]
  299.         UpdateFile3.clear();
    1 N3 q, @( ~; h& V  }
  300.         UpdateList3.clear();9 {! d$ A9 K: Q7 z; T  ?
  301.       }! [% Y8 \, C9 R
  302.       if(UpdateFile2.size())
      N* h& q& Z3 e( Z/ s
  303.       {  T4 l# x2 s; D6 |
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  O8 _3 }0 s' F$ }  z, P. ]' F
  305.         {
    & N  y; s  k& N9 ?' S* j( Y/ D
  306.           file=(*p).second;: q9 U; ]2 f3 Y; U! h+ f
  307.           free(file);. i' K* m3 f7 w
  308.         }
    # q  _1 a, b5 B( v2 I
  309.         UpdateFile2.clear();
    0 x, l- M. J6 G
  310.         UpdateList2.clear();
    : q. t- g( a8 n$ l/ B1 t4 s/ W3 w2 Z
  311.       }
    9 \, ^" I) Z9 i& l: _6 t; g) a
  312.       if(UpdateFile1.size())
    % m& b/ n8 R' H
  313.       {
    / X& \1 F" d/ z/ c% R2 r
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    8 s2 p& r$ E( u& A& Q; L
  315.         {8 d" K$ N9 Y% R
  316.           file=(*p).second;# X0 p; A6 K; ?+ o
  317.           free(file);
    1 \) p( j' g( X
  318.         }
    " {( z' ?6 k0 J7 k# P; U0 L
  319.         UpdateFile1.clear();
      h9 m" U  j5 j+ f: @/ m( |
  320.         UpdateList1.clear();- b9 F2 o3 h: N! C8 c
  321.       }
    3 [% z9 D1 H" w2 |
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    $ K* {$ E, z0 R. Z0 p
  323.     }
    # B, t5 N. }3 k: P$ g
  324.   }
    ) N1 |2 s+ }, d# v/ Q" Q: l6 Q
  325.   return FALSE;
    2 P. c$ Z8 H: C# a) ^$ E) M4 n( ^
  326. }
    3 ?* |4 g/ e9 V, e

  327. $ y9 E: }" H0 \* W6 l: s
  328. void CRevAppApp::ClearAll(void)
    $ O* t3 L) e7 t! o& w) x
  329. {
    3 U. g7 v2 n) ^/ `# O: \9 U6 n
  330.   LPUPDATEFILE file;& j7 ^. p' o- n2 J# W9 G7 q
  331.   std::map<CString,LPUPDATEFILE>::iterator p;+ z' C) I3 |& O/ B' p/ U

  332. 2 R' q/ o4 v$ s+ _/ Z9 C% o6 e' v
  333.   if(UpdateLocal.size())
    0 a+ K2 ~0 d+ O2 c8 y" N
  334.   {9 }. u" c7 H/ q% f- T- m
  335.     UpdateLocal.clear();% y. l: Q% |6 E  ?
  336.   }, V4 m0 e% j% m
  337.   if(UpdateFile3.size())& q$ n* ?  k1 X
  338.   {
    ! k$ c& R: c3 _+ [" ^& N8 p3 b
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , ^( W, u5 x# R4 ^
  340.     {5 r( r3 w/ ]$ i% O- Z' R
  341.       file=(*p).second;  N+ e. K) m+ U* p" u, L
  342.       free(file);2 J; b" E) _) I/ r( O9 e% z5 B
  343.     }% f0 X$ `& X  N; W
  344.     UpdateFile3.clear();
    . i9 S( d9 ^7 e+ Q; M" i
  345.     UpdateList3.clear();
    5 @1 n  K0 Y# b& d8 ?
  346.   }
    . y4 T- X: L7 R- }: ^; X
  347.   if(UpdateFile2.size())
      {, h* z: g: B1 f
  348.   {
    * c7 O5 S* M0 ]( P! @. Z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++), ]$ ?* Y! t, N; F
  350.     {: L4 h! d9 {, |  A
  351.       file=(*p).second;  m, l0 X( v& A, ^1 y  I( z- N
  352.       free(file);& t. c, O* R) o2 p! P
  353.     }
    0 {$ a( s9 e! P3 J# E% ^- g
  354.     UpdateFile2.clear();  u3 f2 p; a! o' Z0 u- X' }% N" F+ E
  355.     UpdateList2.clear();
    7 E# i6 u9 ?. b& A" J5 r( a
  356.   }
    " w# y% {, X% e3 e0 J  A
  357.   if(UpdateFile1.size())
    4 x( }3 p, c2 t/ H3 f
  358.   {
      Q# W1 x6 u* `5 i: l
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& g, y! J2 y! Q$ }% a0 O" L9 W
  360.     {
    ' }, k$ U' Y7 j  [
  361.       file=(*p).second;
    ; g. V1 M7 ?9 m9 I! J( J
  362.       free(file);* h7 v. k- S# x3 a, U- D
  363.     }
    8 @& Z6 Y8 p! b" `
  364.     UpdateFile1.clear();
    4 v3 c0 i6 {- ~* O3 \: [% G
  365.     UpdateList1.clear();
    2 p" l8 D$ ~/ [5 v
  366.   }( h, |- w4 `7 z; t; s
  367. }  
    8 U, \' @; X' S3 V
  368.   4 y6 C# n5 y+ f5 K( w2 s+ t
  369. BOOL CRevAppApp::CheckLocalVersion(void)7 g7 T9 v/ a& Y
  370. {
    7 z3 {( r7 {7 ^! _+ g8 I
  371.   int c;9 l! |' W* b4 k  ^
  372.   LPUPDATEFILE file1,file2;  Z- M  _1 ~) J: n* P: p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;) M& J) Z" w1 Q3 W( `
  374.   std::list<CString>::iterator l;5 i, H; F( L- G- R1 z! r4 b

  375. ; @% D* q9 B/ [% s2 H' u6 }3 U
  376.   UpdateLocal.clear();
    . V, D/ L7 L& a7 J# [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);" h* a. B  V9 Q+ A- D- g% F1 l, E# r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);4 k7 r, D) ]$ b6 o4 R2 k
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);/ G  r! c  s' `1 \" d9 }
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);7 C% q7 \5 ]5 V& [& @/ s) D
  381.   if(UpdateFile3.size())
    9 ?( w" ^& G2 g. c' o/ ~
  382.   {
    3 E  |8 D- s0 C
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)3 k  [2 J6 ~+ E8 V4 Q* C
  384.     {! g$ t/ X1 D1 i
  385.       file2=(LPUPDATEFILE)(*i).second;
    ; q: B0 v( Y% x# Y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), ^  e' \: L9 a
  387.       {
    9 F* ]0 b4 D1 t0 V9 T
  388.         file1=(LPUPDATEFILE)(*p).second;# I6 R/ [$ p. k8 u" a* A# G8 W
  389.         file1->vers=file2->vers;% A7 B: S% U; G3 Q, L" N
  390.       }
    ! H$ H) q* M8 A0 x/ ^# U+ X
  391.       else, a/ \3 e( C: Z& v, A( d0 z
  392.       {& a7 u/ g; \; w) b; C; x9 T7 q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' _' Z, J: ^2 ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    1 Q: g5 |$ \5 I6 S4 t8 h1 P
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    - g7 X3 b/ }9 b% n5 B
  396.       }
    8 E- ?  x- p0 {- E- C
  397.     }
    0 c$ J) W& X! \- k. t" @+ Z
  398.   }# L& g2 R+ q8 D7 n2 s0 v$ X. l
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ N5 R7 j5 }$ z6 h0 m9 g1 o- `
  400.   {
    1 ]0 |2 D( o6 S& l( k9 \
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 n# @) Q" F0 J) e9 s
  402.     {* T) k: r3 O, l9 F4 {
  403.       file2=(LPUPDATEFILE)(*i).second;
    $ L% x$ I4 u% C8 ^3 ]
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    " }! K6 U2 L0 q' R2 E
  405.       {  a& m3 h- \# E: @  @6 t5 v
  406.         file1=(LPUPDATEFILE)(*p).second;
    " g  F& ?2 M& s  `
  407.         if(file1->vers!=file2->vers)
    7 @% F( Y8 d3 l6 a+ S2 ~2 f
  408.         {+ @! {' {3 A* b- Z8 C6 m- v7 `
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));; g4 X: p4 S) _8 l  M. I
  410.           c++;
    3 E' H; v% j, T3 x( A: Q
  411.         }
    5 u5 ~) X3 n9 S6 f+ Z8 g4 s; S6 W' u
  412.       }* H% Y4 d1 ^% p0 \/ {# c
  413.       else. ]2 ~) f1 z  o; A) L
  414.       {
    7 c$ `* Z8 v- E
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ! P5 ~7 v6 f6 G( r' w" L! i
  416.         c++;1 H, \. b, e0 V" g
  417.       }
    5 N* i# L; ?. q6 x
  418.     }
    , F9 E6 ]3 T) W
  419.   }4 G/ g7 o1 F6 a# l$ l
  420.   unlink(".\\DownLoad\\update.txt");; P0 n* ^6 ?- W7 {! Z- C
  421.   if(UpdateLocal.size()) return TRUE;& u$ M, d* r. T
  422.   else                   return FALSE;4 g; v  d: o4 u/ I3 o7 t8 o
  423. }! W" ~3 R! Y/ ~

  424. 8 r: m4 D0 t- D% e+ O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ' V1 E% }1 y; c% L
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' V6 ]4 X! {; k+ }# f4 p- T

  427. 0 K  _8 z3 Y8 q$ k

  428. 8 _) X% n7 E! A! q, B

  429. $ I; V" I' K! L
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)- o9 h# H4 x: L7 y( m  w  i; d2 v# d
  431. {
    ( _# D6 w1 T) m
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 b; Z! r0 B8 p7 D3 Q! V
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ \, ~) Y! ~6 }, s$ k
  434.   {
    1 r$ x$ N. z) q' e% j0 B
  435.     char szLanguage[50];; {! ]# L. q  |9 v7 `# ]5 ^
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, c( }( t* Q1 _( |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;7 V% o+ H$ X) \# i8 ~
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    * |7 i' E7 R8 N+ y; \! u% L
  439.     else                                   m_iLanguage=ENGLISH;
    * o: x- h" V" Y
  440.     char szRegister[100];
    " \  ^$ B! {; F" O+ Q  [8 N
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  Z! J& I, ^$ O2 O$ S8 N+ Y+ ^$ P. k
  442.     strRegsName=szRegister;! \/ Z+ ?8 D) D/ Y! e
  443.     char szPatchURL[100];
    6 C! x& O* |) d: q0 c0 w9 G4 M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 O& n, E. I0 A3 S
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ v/ b1 c% {6 E. D+ J  f. }
  446.   }( b- y3 d5 q- C2 w0 O; ^
  447.   else
    ; g2 h  ?: m; Y7 p; N1 _0 D2 r
  448.   {
    0 L* a7 |( A+ z/ ]6 b2 o+ j" `  Q% |, u
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - }8 q' s, G3 @1 z& r, v" }
  450.     strRegsName=DEFAULT_REG_URL;
    3 {0 G6 S3 O1 k
  451.   }1 u+ z3 X7 ]- _
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 X$ ]! q3 ^. x& Y
  453.   {8 z$ A% O" H' D5 l8 f7 h" v
  454.     char szIP[50];
    ) I4 Y" D6 x3 a% M  B
  455.     char szDIR[300];9 g, ?3 [3 b, w4 _( m3 c# V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    6 n$ _+ u! k3 I1 T+ s/ n: Y( l, l
  457.     {
    - d0 |5 t) e8 e! F; D! m
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 C( l& ]0 ^- r2 k" d
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    . ]# W4 b! K; O3 s. _
  460.       strHostName=szIP;7 s, E4 o. u/ }8 D% ?" n- e
  461.       strHostPath.Format("/%s",szDIR);
    ! ]3 E4 K5 f3 [
  462.     }
    # p+ x+ }" k: ^
  463.     else# t! a) ^4 {$ {! J% d6 I% w
  464.     {
    ; z: x/ T: S3 V& q& e5 Z* g
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)+ \  w( z5 \' a6 f9 _* _$ Z
  466.       {
    * _$ [' G$ r9 r! J' e) Y) R
  467.         char szLanguage[50];
    # B2 {& \( h( Z4 D( p3 ^. Z8 i9 N
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    8 _/ s2 \% u6 D3 N
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;3 E9 M5 r% }- k! l) z
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( Y1 N2 I8 S; Y0 R5 o2 ?
  471.         else                                   m_iLanguage=ENGLISH;- \  J. [, [, ^5 X' \
  472.         char szRegister[100];" Y! E! O- ~, [/ L
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");& \* n' \2 ^8 F& F0 \9 q/ p
  474.         strRegsName=szRegister;& A- c2 \1 z* w- j! X' D1 @
  475.         char szPatchURL[100];( D* v6 {5 q: J  I8 s" z4 _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    . n8 s4 w1 P3 B7 Y; u
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & j+ B( V# ^2 G
  478.       }
    - x$ u( Y3 ?1 r; l! S, Z9 K
  479.       else
    ' X3 H" z' y9 {! E
  480.       {! H# ^0 y: l1 H/ E
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);/ m! v; A/ }6 T$ b0 W: d! i7 b
  482.         strRegsName=DEFAULT_REG_URL;* U* K5 [$ S& f4 [' k' y) U7 Q. ~5 d
  483.       }
    # G) h5 _# q6 K
  484.     }
    ' \0 }  }# m# d+ ^  S6 Q
  485.   }6 l6 m( K6 L, [+ `- R0 j
  486.   return true;
    4 E5 V$ ?& n8 I, `' E
  487. }
    ! j# s$ O( M6 c5 |0 [6 f

  488. : C' `$ Y0 z! D# N9 y! t! x
  489. #include ".\ZLib\unzip.h"1 h  ^5 ^: |/ I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) e) y$ n6 R9 S! N+ l% y5 }
  491. /////////////////////////////////////////////////////////////////////////////; E2 U. p3 B2 g" _
  492. // CRevAppApp initialization0 G- P2 V+ [# e5 Y; q6 r
  493. 4 b6 C2 c% m9 i# o+ M7 A1 r
  494. BOOL CRevAppApp::InitInstance()6 [/ ]7 l' A0 S1 G# Q
  495. {
    3 n- W7 W; u* y6 y2 S; R6 ?! n+ ?
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];8 r" Z( b4 F7 j- x8 b% N
  497. & X8 E5 \  J! _" z; X( G( H
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);+ W& L/ A1 c' ^# N! i' m: m
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    1 W% P2 X7 u, Y0 r$ S( W
  500.   {+ s9 m% _1 `$ j% D# o
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");+ ^! Y4 v; P, M) h7 q# F- ~8 `
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    : E4 q6 M! q+ Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; y9 c/ V" g2 i7 I# B- t7 ^% G" b+ H
  504.     {
    ( `/ U! e" Y# I1 Q2 i( w
  505.       strcpy(szPath,szPathTarget);+ K; H2 B" z8 R; J+ h4 t
  506.       SetCurrentDirectory(szPath);
    6 E# D- S7 C5 q6 u
  507.     }
    , S2 a7 l8 c8 v
  508.   }/ x4 n9 W7 r9 e& f; _8 a$ H
  509. #ifdef _DEBUG7 H) J& F% ]- x/ w8 r# i8 u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))& b: u' u7 X% d9 t. s8 [
  511. #else0 w# k2 i6 M* L6 C: k% ]' z
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# [- x" J0 U1 E; J9 x  d0 F
  513. #endif
    / J8 L: @; k; H+ x# P: p
  514.   {
    ! U" @  a3 @) k# Q! ]  w8 d9 I
  515.     char tempFileName[MAX_PATH];
    6 ~& @( ^- Z. [7 V4 t/ g, ]; c3 [
  516.     strcpy(tempFileName,szPathSource);
    ! f" w# G8 ~' u0 s  d
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ) _7 v5 f  R7 m5 z+ F+ @6 H
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 [, R! u: C6 k7 b5 p
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);8 M! @* I# Q- D
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);0 s: O  `4 }  w& f8 b6 _5 ^1 e# ^
  521.     return TRUE;
    7 n& W" v3 I, U; ]; F
  522.   }
    3 |' y9 D6 C0 J0 ]  e) ?0 ]% {8 n
  523.   // Nuke 0118: Delete run.exe* O, N7 n4 B' F) h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    4 M6 F2 @/ V% Y, _. y5 `
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ! l, N0 D) I4 o0 N
  526.   if(!ReadCfgFile("Config.ini"))
    1 {( H8 J( b: S- O, @
  527.   {$ H. x# p3 U8 x$ I4 t- T/ i- l5 c$ h5 _
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ! R6 k) V/ L) k, o
  529.     return TRUE;
    6 {9 U# Z, x5 P! m3 }8 h
  530.   }
    # x# X$ e: B0 N0 W5 Y
  531.   HANDLE mutex;1 \# ?2 L3 ]$ `: `, `. [4 e
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))* D0 M) ?# M! u! }4 i! g$ }! w
  533.   {9 L, M. ]) d2 w6 U
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS), v  O  u! W5 t: _, i" V, `5 L
  535.     {
    / U% x7 M0 M( N+ ~
  536.       CloseHandle(mutex);
    " r0 |0 V9 U" p, ?0 I) e. z) k+ T6 p
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    & k+ [( B$ Q2 r# n. u  q$ y
  538.       return TRUE;
    . A& K& @$ r7 E! s$ A5 A
  539.     }: c* w1 R6 G9 [3 H& w
  540.   }  
    5 K' L/ o! N/ Y  d* s) A- u
  541.   CloseHandle(mutex);5 e7 H3 o' ]; M7 O8 D6 F

  542. * x- \8 ]: x) d2 E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% C1 ?7 [. m. u# m6 r  s8 Z! H

  544. % p& X" v' c8 J2 K
  545.         AfxEnableControlContainer();
    9 Q: K. a* g8 x# Z$ N) J

  546. - K9 f# D& s3 p4 g; e" |2 }3 t
  547.   bCanUpdate=FALSE;
    ' o" C; ?/ F$ ]- q4 y
  548.   dwStartUpSteps=1;
    # q2 a( {" @4 v& W" @
  549.   dwProgramState=AP_NOTHING;
    7 x9 ?  N. u# Q, j% Y% ?8 J0 B) R
  550. * S! B% s1 z& c( V, v* a; Z
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" ]( g, t6 M3 t) N, I
  552. , j) p& {, O" M4 s; U+ ?; Z2 l
  553.         // Standard initialization$ i1 ?" i, T# i8 J
  554.         // If you are not using these features and wish to reduce the size
    5 h0 T" `8 D9 r
  555.         //  of your final executable, you should remove from the following+ g* P% @. Z: ^! [' J
  556.         //  the specific initialization routines you do not need.
    6 S4 {! g" ~# H2 u
  557. 2 y; }- p3 q! X. v: v3 N0 g
  558. #ifdef _AFXDLL- j. o* Q+ r. C
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    $ c  U5 X$ E; {' g' ?% z& D2 J8 C, V
  560. #else- r7 n4 C5 a) R- w2 h4 v) G% G7 w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically0 _3 B5 n2 P  c$ \0 P6 B
  562. #endif1 c$ o! k9 h, B+ d! r8 d
  563. 1 l' ?. i% P5 l  G% w4 x
  564.   dlg=new CRevAppDlg;
    2 m3 i7 x4 h; m: V3 {: y
  565.   dlg->Create(IDD_REVAPP_DIALOG);& h) Y% \8 Y0 f; R
  566.   dlg->ShowWindow(SW_SHOWNORMAL);2 x1 z. W6 v. l) N
  567.   m_pMainWnd=dlg;
    9 b- Y' i8 n) v5 k; R- V( ?/ Z+ s

  568. * E2 V! @* Z2 ]# q* x+ s' E) v* P, B
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);& p9 a5 T8 J5 w) f
  570. ' \3 Y) [; h0 H3 P/ q: n" {
  571. //  GdiplusStartupInput gdiplusStartupInput;0 O7 \$ L2 k" O0 s: s2 Y9 _
  572. //  ULONG_PTR gdiplusToken;, K7 D- ~9 s: v% F' V
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    2 o  d+ c% e: E) X
  574. 3 s5 ~& H/ E* F
  575. //        CRevAppDlg dlg;$ e1 @( {( d' X) m0 [1 l
  576. //        int nResponse = dlg.DoModal();8 f* j4 m6 M. b) B1 D# j# R
  577. //        if (nResponse == IDOK)
    % Y: d1 [+ h- g4 c2 {
  578. //        {
    ! @& L+ ~/ C8 B/ Q. }0 D: l& r$ d7 ~
  579. //                // TODO: Place code here to handle when the dialog is
    & A, H$ t, O4 ^# p; H
  580. //                //  dismissed with OK7 \" l& Q1 |7 l& R
  581. //        }
    ( Z8 ]2 g4 }! a4 h6 A
  582. //        else if (nResponse == IDCANCEL)9 R5 M8 w3 D; E% w1 ?
  583. //        {$ |% W0 a+ m, W' `4 _/ O
  584. //                // TODO: Place code here to handle when the dialog is
    % N; z. P( h2 T; k" G; B
  585. //                //  dismissed with Cancel" u$ f; z" ?' M% d3 X
  586. //        }
    6 j" B6 b" Y" J

  587. # ?3 d: D& L  C9 X/ x# ?% G
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ; t, R7 u' q7 X( N
  589.         //  application, rather than start the application's message pump.( |4 ^9 B( z( v- E
  590.         return TRUE;
    4 `* P! q4 L! |$ _/ d* x
  591. }
    8 W* n/ z' \  H* s4 ]

  592. / y0 K7 ~5 J% {$ v& W5 b
  593. char *CRevAppApp::strtok3(char *pSource,char *token)5 }- \! z, E/ R& E5 b6 L% D
  594. {; l1 Z/ P' l7 Y2 Q
  595.   int i;
    ; i: U# ]; I( `3 H
  596.   char *szRet;
    : C# z9 `3 V; w' ]! Y7 `4 n  o5 M

  597. 9 \0 B, s' i) L9 }5 f7 s2 q
  598.   if(pSource) { itoken=0; sztoken=pSource; }4 e8 _( Z& G5 L. l+ x  x2 m
  599.   if(sztoken)9 R: u  F" h% {& r
  600.   {8 }' ]& a* q' h4 B% o+ |
  601.     szRet=&sztoken[itoken];. D  @" Y* }+ I+ d6 t
  602.     while(sztoken[itoken])
      x, G: n$ ?, m
  603.     {
    3 i1 Q- {+ B* i& l) }' i
  604.       for(i=0;i<(int)strlen(token);i++)
      H! U" Z+ ]. C0 M7 @% ^- a
  605.       {' D0 X, H8 e; }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    * j) H( x8 r6 q) l2 S! `" w
  607.         {
    3 X4 d) y7 W  D# l
  608.           sztoken[itoken++]=0;
    0 ^' i1 ]9 F# V4 @9 ?# B3 C: _" t
  609.           sztoken[itoken++]=0;
    / \9 X" U+ W1 W# L0 Y! ]0 z/ {
  610.           return szRet;3 V( m; _% S1 j6 A7 N& I
  611.         }2 K9 D3 v' |) g
  612.       }
    2 M: [4 B+ Y6 z+ j
  613.       itoken++;' b( `) K0 f* b7 s- a9 Z  E% t" A6 e' J: A
  614.     }
      d' C9 E; b" Z: x, L
  615.   }
    2 l% S/ z( g# Q: X: v& n1 T: [$ p
  616.   return NULL;5 L( l& P: k7 h8 ^4 Z8 Z+ M6 m& I  _
  617. }
    + D' {1 E9 e/ x6 c) Z1 ~
  618. 9 j( J- k# f, p% x6 h0 g, J8 G
  619. void ProcessProc(long Total,long Current)
    + r# r3 h2 P, [4 l- h' G; I; v5 D% t
  620. {. e. y! V2 u3 w. P6 R
  621.         MSG msg;7 F3 s: i1 V( r/ ]6 T; x
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 o8 T8 ~# R& m7 k4 Q/ \  t
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    # y8 E: X3 O$ j$ d: d5 W- D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    5 H$ M+ H9 o! W% {: ^6 [
  625.         {- X7 ]3 I$ E1 b% G% Y7 F* {- V' q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 N  Z% T" v( o+ S
  627.                 {
    , v2 B5 v" w7 L7 m
  628.                         return;& i6 `" ?- W8 F/ q+ a9 \
  629.                 }6 p8 X! I2 P: N) Q7 t5 d) t
  630.                 TranslateMessage(&msg);
    ' o8 t; b0 R. O
  631.                 DispatchMessage(&msg);
    : G/ I. S+ J: d- X
  632.         }       
    2 ?" }1 v$ F& t; ^2 t! |
  633. }  I# r/ ?, f/ Z8 \( L) O

  634. 1 Q+ H# u" T0 @6 k. Z
  635. BOOL bFirstChar=TRUE;
    ( R& H) j. P! x3 h/ l( o: |
  636. + }0 Q) |! b" |( [; s
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 F  l/ X1 j# \* r
  638. {: `5 S- P8 b+ L, S' N3 m, w" b) W
  639.         // TODO: Add your specialized code here and/or call the base class# F9 I  G$ v% F0 s/ g
  640.   switch(dwProgramState)& @1 r( U. G) L
  641.   {8 b! m" P2 [( h. |2 u$ t
  642.   case AP_NOTHING:
    - g0 r! M! E, D6 m& \% V5 }9 J
  643.     switch(dwStartUpSteps)0 x# o9 T! V1 _1 ~
  644.     {, ]9 o( p! W' E+ L
  645.     case 1:
    4 z% t; E4 {& b4 n
  646.       {
    5 x" O; H) }$ y5 I; J6 j
  647.         int i;! G) l. B1 B0 L" z5 Z+ ~8 ~; {& O
  648.         CDC *pCDC=dlg->GetDC();. r2 _: s% H% E, c& f3 I% M
  649.         HDC hdcwnd=pCDC->m_hDC;
    * B/ p+ @" d* F: ]5 Y. ~% H9 ^
  650. //        Graphics graphics(hdcwnd);- p, [+ P* d3 j# x& |8 s) @# i
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");0 |$ V& Y( h3 r& o6 |& \8 A
  652. //        INT iWidth=bitmap.GetWidth();
    7 X! ~) D) [9 j% Q8 o4 c
  653. //        INT iHeight=bitmap.GetHeight();
    6 ]6 p3 l6 z7 v) D- `# Y
  654. //        Color color,colorTemp;
    # i, h9 L1 Y( o* [+ f7 B* [; n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    7 o% |8 f: s9 B- E) |" {5 E
  656. //        {& C, m( I% S8 s* D; R) o) R5 _
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    * d0 |( I6 i" L. \/ d
  658. //          {
    ! ]3 A: a6 F  {. E+ N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);* D# X+ q5 j3 s$ V5 |
  660. //            colorTemp.SetValue(color.MakeARGB(* n4 x% i/ Y) T# g  J, B
  661. //              (BYTE)(255*iColumn/iWidth),% P( H4 G9 b8 a0 i* ^6 x% q2 X
  662. //              color.GetRed(),
    . w' \- B% c& S% N% w7 M1 ?, }! @
  663. //              color.GetGreen(),. A" @5 M3 Q* Z/ }! F. @( r
  664. //              color.GetBlue()));3 G" X( D1 Y$ ~% p3 E6 ?/ A4 u! O
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ; w  w: G* h& k
  666. //          }4 p, F  U4 i  @7 K& \' m) M
  667. //        }
    8 d  f3 h3 c8 l4 v/ B1 T9 m
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ! c' s! M+ K5 J  v0 F' Q
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& r/ r, s/ t" ]7 w$ G
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");: O4 w8 p, {4 q( z. A
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ d* k6 ^0 s& f
  672.         for(i=0;i<240;i+=8)% L9 _- w5 n: g# K" K- ]6 Y
  673.         {7 }- D" t% y) q0 w4 h; L7 j
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : ^$ U+ Z! w6 f& M5 I$ x7 X& p
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 ?- V  ^5 p6 J7 m/ j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    2 _5 Z6 r9 i' g9 A: m; @' c
  677.           Sleep(33);
    5 `4 N9 }# d6 p0 H* s7 w
  678.         }
    ' E& ^6 q( P/ B, q: O6 r8 D' `
  679.         Sleep(1000);
    , k, J. {* P: y5 _7 S4 D7 U5 w3 W
  680.         for(i=240;i>0;i-=8)' U- f4 G; M2 t" j/ I
  681.         {  Q( `1 h4 |% i+ ?; U9 ]& _
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    # W: q+ Q+ m4 A$ Y0 l2 E
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 `( X5 b1 ^3 x/ a' s0 }6 q% k6 I4 C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 a1 O- j) ]0 X- P4 _
  685.           Sleep(33);
    5 i- Z# b. ^; W' _
  686.         }3 W' r, l' `  x: J2 i
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    - @: X. u8 V! I$ \. B7 y3 ~" x
  688.         dlg->ReleaseDC(pCDC);. r$ b# K1 @1 l; N
  689.         DeleteDC(hdctar);
    # z% r* i% K' R5 U  o# X
  690.         DeleteDC(hdcsrc);. q; Q8 T' K/ q7 L- j- Y
  691.         DeleteDC(hdcorg);
    ( L! u& G8 u* Q+ N( @0 x
  692.       }
    : E7 ?  V( K1 C* R' j; u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);6 @; E) G/ K' j, `
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");; ]( D+ P2 S# R5 N1 a
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");# T* X0 y# P( g, X& \; j" [3 E# _5 R
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- k* ^' u; J3 {# L
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 ~% X) j7 G  _2 ?6 F
  698.       if(!Dn.Connected())1 a' E! P7 Z  v  X% l9 K5 `; x. o
  699.       {
    5 W1 O: f& t% Y* |
  700.         dwTotalFiles=1;
    & A# Z1 i9 P3 s( m8 V, C" z) U
  701.         dwDownLoaded=0;
    % N. r. W: k9 I. K3 P
  702.         bSilentStep=TRUE;
    . X7 f* K9 C4 ~  @- Z& ^/ a
  703.         bCompressed=FALSE;5 x7 z3 q4 ~  `$ d, b8 v
  704.         strExtLocal.Empty();" D5 E* ?1 D/ q! k( U, D! K/ ?1 s
  705.         strFullName="readme.txt";' _$ [8 x- k, {* G# w4 e3 P
  706.         dwProgramState=AP_CONNECT;- ?4 M$ p) j% u* b5 o  u) H, b
  707.       }' h  T3 l- a: m( S2 [
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();/ o' O4 ?$ f* n9 z) E% Z
  709.       dwStartUpSteps=2;
    5 N6 P# E) V) s, e; I( y
  710.       break;
    ; L1 W7 @( d$ I7 I3 W) ^
  711.     case 2:
      c1 U7 t! `- U5 Z9 ?
  712.       {
    . \8 {+ J6 z1 |" D! F. `, J
  713.         int iEOF;
    " ~- d. \( u5 s7 _4 u, U, v
  714.         FILE *fp;' {9 x0 E6 m5 R. F1 s1 G
  715.         char szString[512];9 M( ~+ H2 l5 L
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    / ^0 K3 j, _" |3 x
  717.         if(fp)
    % j: T. |( r/ h( @, R& k9 t
  718.         {
    , \& u6 K4 G/ B, n) k( ^% j
  719.           do
    6 i) M0 H( A, }! T- @* q: I; K" v
  720.           {
      C1 \* C, j8 P6 s
  721.             iEOF=fscanf(fp,"%s",szString);6 h* i, V$ x. `. K, g9 [
  722.             if(strlen(szString))
    1 F( i1 Q7 i: z4 D6 Q8 M( t
  723.             {; K  A% b+ t; T
  724.               if(bFirstChar)3 J4 V7 s8 L# Q8 K0 ?' q
  725.               {
    $ J5 T; L: ~9 M6 L9 T
  726.                 bFirstChar=FALSE;
    / ]3 u/ f) O  J# K: n
  727.                 bConnectIsBig5=FALSE;0 b0 J" E9 U9 [2 j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;& i3 k' e( E3 C& Y
  729.               }
    % j7 n: g$ o" U6 B; O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
      b' f: w/ ?& I1 f- H
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));* z2 e: k6 f6 A5 I* j0 ~8 l. R7 `( X7 b$ Y
  732.               dlg->m_ListText.AddString(szString);- z' f2 V5 G- |# `. w3 y2 v
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* x( D6 l: {7 {9 T4 P
  734.               *szString=0;
    & r7 G; q' m5 C+ b9 ~1 k* n" F
  735.             }
    ' C0 h' A: ]- ]7 V' x
  736.           } while(iEOF!=EOF);; F& q+ ~* R" u
  737.           fclose(fp);
    0 _% M, H8 c/ J, @3 d& d* z6 ~% [* e3 j1 W
  738.           unlink(".\\DownLoad\\readme.txt");* J) m4 o% V0 G
  739.           dwStartUpSteps=3;
    7 f0 p! ]5 D4 A$ h( ^
  740.         }
    4 Y. |! l: B1 E6 Q) q
  741.       }
    ; ~- ?) y# J( p/ l# T4 T
  742.       break;
    & k, p$ O6 F, O/ x
  743.     case 3:9 W6 j7 \& ?, c2 j
  744.       if(!Dn.Connected())
    2 L+ H2 O2 t. N. Z. [
  745.       {
    : U3 n. e( y8 p4 o
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);8 u  o8 s8 I/ Y2 ^
  747.         dwTotalFiles=1;$ Z8 d+ r( m- m, o
  748.         dwDownLoaded=0;1 A  C& `( B( v3 B9 X# i  I% J5 ~, E
  749.         bSilentStep=TRUE;/ w9 g% V- z4 J& ]
  750.         bCompressed=FALSE;2 [" N; q  `8 B  J- O
  751.         strExtLocal.Empty();. R; F& O) X: [3 [5 {; B& Y' S
  752.         strFullName="checkversion.txt";
    - B. k! h% O; R  n1 x( P
  753.         dwProgramState=AP_CONNECT;
    6 W5 a* v' }) N7 _! @* K/ ~
  754.       }
    2 C5 b2 b8 Q1 C/ A2 Q/ G: |# m( L6 G
  755.       dwStartUpSteps=4;" F& O: K. L, }5 r9 l  K: |
  756.       break;
    ) H* _( i5 K1 Q% _
  757.     case 4:* q0 e8 R# f4 G6 G, N
  758.       {
    ) g; o  E% }1 K. x) d- A6 s7 C
  759.         FILE *fp;" x3 T' t8 d$ O( ]+ J$ C8 R4 e
  760.         char szString1[128];, k9 t$ Z3 P" ?+ ^, q* z
  761.         char szString2[128];6 \' K; Q4 @1 u, }/ n7 B) [; Y5 A
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( O$ s' Z$ L8 E( Z+ Y" f2 [! c, t
  763.         if(fp)
    - {" e; q1 J# c0 G" {) b6 T+ s+ j
  764.         {: l. x: t) T$ R1 ]( C. b
  765.           fscanf(fp,"%s",szString1);! Z$ J( \; z6 c" N
  766.           fclose(fp);
    ; h; Z" m4 Z0 ]
  767.           fCheckVersion=atof(szString1);
    3 }  U% R) @, D) v$ [- L
  768.           fp=fopen(".\\checkversion.dat","r");+ Z- l: i0 F( h- ?7 L7 {  `
  769.           if(fp)
    9 a" M& I, M5 N2 `" z
  770.           {  `0 b: w# l* _  [' r4 Q5 l. p
  771.             fscanf(fp,"%s",szString2);
    : }( p  o2 [, P. b% E
  772.             fclose(fp);
    ) H2 E  F7 Y9 [4 S. R
  773.             if(atof(szString1)!=atof(szString2))
    ( _6 m3 |5 G4 }: Y: i1 ^% f* {: y
  774.             {
    / {! d+ y6 X; \6 q4 w& q' @3 ]; u
  775.               if(!Dn.Connected())7 }4 j9 i" `  H% A0 @9 E# c
  776.               {
    1 F4 @. R9 S% S+ b+ x
  777.                 bFirstUpdate=TRUE;
    ) l- `4 W7 T/ ~2 {$ [
  778.                 dwTotalFiles=1;7 {7 p' ^4 p7 W
  779.                 dwDownLoaded=0;
    # j' A- d+ B$ i6 m
  780.                 bSilentStep=FALSE;& H8 ?( ]' V. [, p+ b' k
  781.                 bCompressed=TRUE;
    3 {8 V4 {. @+ c$ f  z5 L. X
  782.                 strExtLocal=".\\DownLoad\";! O" i/ l- ?) \  R
  783.                 strFullName="update.txt";
    2 r% v- ^. j! R) A+ D
  784.                 dwProgramState=AP_CONNECT;
    " Y% ?. Z! [5 D- m
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 s& R+ U4 s+ u' `9 }; d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 l$ g  Z6 T) y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 ~( l6 i3 m# C8 V) H5 |2 A
  788. 8 O+ {8 H2 S$ P
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 S/ C2 b" c- ~; u/ i
  790.                 unlink(".\\DownLoad\\checkversion.txt");* L0 d2 T# U% S* G
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    $ Y% X; H% v* g" q
  792.                 {5 T! \# E- s" k$ z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    * ]0 m- Z! _( l( R5 a
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");' O7 e0 X! Y* L
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    * T7 t3 K  ]; _. x
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: G3 U3 y; Z7 W
  797. 7 t4 n6 y9 O: D# K
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( O6 R- L9 W6 \1 Z" {
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & ~, z7 t4 d7 E& h9 ]
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  x* c! `/ Q) A2 {
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 H  i' h5 e% `# s% K6 ^. J$ o( i
  802.                 }- U' [4 [" q% g% U/ p2 I9 A# t
  803.                 dwStartUpSteps=5;! w" J3 C$ ?6 {
  804.               }
    % b4 I5 [1 m/ {' @9 J% e
  805.             }5 B9 W! e( i2 n% n- k# a
  806.             else$ @6 M0 D, O* M+ b+ I) x
  807.             {5 N% b6 _7 S! F$ ^- g# q/ a+ ~
  808.               unlink(".\\DownLoad\\checkversion.txt");
      P% ?* Z% {  m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 y. n( b/ f( z: j
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! z, S) H5 i% u! e
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 [+ ^! D0 `0 g

  812. ) O, ?/ }/ ]8 }+ G! N
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 ~0 a: L2 C& ~" @# s2 C
  814.               dwStartUpSteps=99;
    ' w5 k8 b) _" G, S0 f
  815.               bFinishUpdated=TRUE;* j9 g2 I( N8 x
  816.               bCanUpdate=TRUE;
      Y4 y: Y1 V/ i+ r  S; Q- `
  817.             }* D! Y0 y8 \" i' L- A7 S
  818.           }
    0 b6 _$ Z- S: _
  819.           else( z9 Q8 j* x( r7 X
  820.           {0 C7 R/ Y- L% j- h1 x- m) j7 b* j  A6 r& \
  821.             if(!Dn.Connected())$ y+ S# O2 G( |6 e; z
  822.             {
    " u+ n9 ]% d* U# S
  823.               bFirstUpdate=TRUE;+ ^2 u7 `9 R8 ]4 ?( C/ S. D
  824.               dwTotalFiles=1;
    3 l' A: @  U+ ?& g4 C+ o4 I: U7 P
  825.               dwDownLoaded=0;& h; u! Y  j6 u
  826.               bSilentStep=FALSE;
    ! t( i8 R& G4 q0 s5 |2 z  p+ {" W' h
  827.               bCompressed=TRUE;7 f# u( ?1 W# K/ R; x
  828.               strExtLocal=".\\DownLoad\";
    ( Y( {' V! I( O9 |3 ~0 F
  829.               strFullName="update.txt";
    1 f) b( q, `& S- l+ k: J
  830.               dwProgramState=AP_CONNECT;# h; D5 @0 c" V
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ G/ G# {0 _. [& `, i" q9 m
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 }1 v+ l& S4 G1 w; H* \9 w, i! U
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# [6 A' C$ i8 z# K  B3 Z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ m: W- c0 b* I0 i$ S
  835.               unlink(".\\DownLoad\\checkversion.txt");
    , t! |- P; \. B5 {( ^; F0 W
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)* p; c, T8 e* h; k5 R* W
  837.               {
    7 g8 a5 E9 M+ S: {- y4 @6 U
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & W) s! V% j+ A7 H! h
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    8 Q; X! \# V8 ]9 ~' W
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    8 P$ Y( z* N* y, Q( E5 a
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) A0 z% u. T4 E9 r) I! E( Q- j
  842.                
    8 i* v1 V; Q( m* W
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    * f2 k7 Y, Y: b/ A; u9 ]& O
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; b9 D* B6 |! y3 c/ d* U3 K2 C
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# B* J, C5 M$ w/ ?& [6 C
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , H7 ?/ {9 v7 x+ {
  847.               }2 G0 Z  b% \0 \8 L. z: \8 Q
  848.               dwStartUpSteps=5;! g) K5 L5 a& s9 k  e7 t
  849.             }
    8 h& f3 p5 X4 j3 m+ g
  850.           }3 ?( c* {! }% P, `! p* p9 [, X
  851.         }
    1 x! A  c! N3 [4 p7 v& {4 f& b; S
  852.         else
    9 Z! u1 S* S$ X* l/ c8 \  l2 N
  853.         {
    / E1 N' P$ O0 A6 Y" p' Y- d
  854.           dwStartUpSteps=3;! ~7 e+ h' K! G7 b) K5 q
  855.         }1 m: z+ j8 l0 o* T1 w. G
  856.       }. C  m  b, N0 b! O  k4 g9 ^0 m. l1 v
  857.       break;
    . R( ^+ i( \" }
  858.     case 5:4 r; f9 l5 k5 q) m* }. ~
  859.       {$ I: Q8 b+ f9 B$ Z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)9 ^3 ]" j$ g; f( D8 ]; U$ Q5 w7 {
  861.         {
    6 p0 n! `! @# u* Y; B6 [
  862.           int opt_overwrite=1;
    # f5 j) P. M" O
  863.           int opt_do_extract_withoutpath=0;( D4 _" ^* Q0 S8 {5 Z! o
  864.           unzFile uf=NULL;
    , v5 w$ o+ B' G2 s( I7 ?. N

  865. 2 D9 e! y+ I# N% R% D* Z+ \
  866.           uf=unzOpen("Wsa.zip");
    & P+ v( b9 B( l  w# C8 ], ~
  867.           if(uf)
    7 ~/ n, O9 D! Y8 ?  \( R
  868.           {' ?+ Q9 p* d0 u6 A
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) ]: p8 b+ z* h2 N* R
  870.             unzClose(uf);
    * U/ I3 V1 @- P3 o" p& x& H) c* b
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    & b  l: i0 o" _. `" a, ?6 Q" U
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    * ~$ u* ~! P% u- v  B( C1 t3 a7 Q$ }
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");5 ?: D; p4 |& F
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 S4 k: ]. |) {- Y( u8 k# U4 Q8 l
  875.           }8 R( n$ X/ _/ E, M1 ]% ~
  876.           DeleteFile("Wsa.zip" );8 A! s3 G% c' A+ w/ j9 h
  877.         }# C' e9 y3 U2 _5 G

  878. & U9 d' b0 N+ f' @. f* U
  879.         if(CheckLocalVersion())
    $ X' x" S# A  E* R0 I
  880.         {$ B6 D/ E+ A8 {, D4 G' A
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");: d& S6 I& G9 Z1 E, o
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");3 ?, M8 s9 k& ]  `5 s
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    % W% ]3 `+ O% v8 O
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " z$ |. u+ g; t! y7 }" i
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);* E) D8 i+ j4 e5 e% }
  886.           dwStartUpSteps=99;& v2 O" Z) @7 K) p
  887.         }
    9 {8 ?* P' I. Y( r2 @0 F
  888.         else, z6 h8 C  ~! A: |
  889.         {! `( V# n# x- k2 g- u
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! G" U( p1 a8 b. `9 A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");7 [& `- _3 W; i0 {8 i) r/ z
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    , o3 J: \4 C2 V8 G+ |8 u

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

評分

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