找回密碼
 立即注册

CSUpdate.exe源代码

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

# F9 w! _& w/ m5 o' T) v9 u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    $ W9 N! {$ l' l# P" C
  2. //
    5 N8 k: [' A4 H5 B; U& [% G2 v( S2 N

  3. 0 P; {7 b6 P: C& G/ |  o% F
  4. #include "stdafx.h"
    7 D6 n6 {$ _9 V  i4 ^$ e$ E

  5. 5 @9 z3 B+ r, n$ @, b
  6. //#define UNICODE
    ) J* h& |6 ]  p+ ~5 i4 C
  7. //#include <gdiplus.h>
    * N3 k/ ]: D9 c2 d/ Q9 L# t
  8. //using namespace Gdiplus;
    4 p3 Z" S2 p3 J5 g. r4 H

  9. 7 X" _5 D& a7 N' H
  10. #include "RevApp.h"0 ]7 _7 o* l+ C* t* s
  11. #include "RevAppDlg.h"
    3 k: _) w/ x% {* o
  12. ) p9 g' K( w- W5 K1 \/ E! R
  13. #pragma warning(disable:4786), W1 |" i0 T* l
  14. #include <map>
    ! E: }7 d6 z: o+ g
  15. #include <list>
    " f; P0 G4 a, ?5 r
  16. #include <direct.h>' |$ f7 m! \+ n! t
  17. 6 j5 L9 s! O* s& \; d; g) l. o' J
  18. #ifdef _DEBUG
    ( k6 C. `; E8 V& q" \, [1 X! G' |! F  @
  19. #define new DEBUG_NEW: `: z2 y: W  ?0 [6 J
  20. #undef THIS_FILE. \8 p; ~  H- }
  21. static char THIS_FILE[] = __FILE__;
    7 O( J8 B/ Q: M. D
  22. #endif
    ! {( ]- v- i$ [
  23. #include "SkinResDef.h"" ~4 v& H+ u9 ]/ j7 J( \" r  Z
  24. #include "ChangeBG.h"
    ( }7 b' q% A/ c: S* m
  25. #include "AFXINET.H"$ ]/ g% w$ w) S

  26. 3 N0 I( R+ {5 y: |  z
  27. #define TRADITIONAL_CHINESE 0" W3 v8 I( o9 H0 c4 y
  28. #define SIMPLIFY_CHINESE 1
    . k: ^' r$ l) B
  29. #define ENGLISH 2+ p( k& S: ~! E2 d4 E9 W3 M) v2 x
  30. int m_iLanguage = ENGLISH;; H+ i& Q4 r: g4 x* T3 `: }- u1 l) M
  31. /////////////////////////////////////////////////////////////////////////////
    7 \+ U3 U9 f# _; c" Z0 j3 l
  32. // CRevAppApp
    ' d. M% B0 f" d- s/ ?9 p

  33. 4 H% _. e! z4 e3 U; e+ M# k! t
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    4 {- x2 H8 A- u. f+ Z0 V/ ]5 [
  35.         //{{AFX_MSG_MAP(CRevAppApp)( f* ~0 J/ g$ c" Z( L. r; C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) w" C2 U2 k+ E5 W* z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    - a) u  ^, u, w8 Q  w5 p
  38.         //}}AFX_MSG& w* P( P9 R2 U! Z# d& z' \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)+ j9 x. |. [3 k! T9 F' p
  40. END_MESSAGE_MAP()
    9 j1 r- ?* I* I9 @
  41. 5 }4 @6 Q( {: y( ]" M% I
  42. /////////////////////////////////////////////////////////////////////////////
    8 f/ `; I) z! y' l# r
  43. // CRevAppApp construction8 L2 e: e" ?% A; R% N) K* P, `- u' R

  44. 2 }6 m1 F0 |& _* u/ g
  45. CRevAppApp::CRevAppApp()
    7 _9 f5 Y; d) k0 x# F1 N+ C/ g0 d
  46. {) Q# J7 f: \0 y
  47.         // TODO: add construction code here,  D' l! D+ S, |  n" ~* m2 V
  48.         // Place all significant initialization in InitInstance; x; ]0 M1 H' e; f- o8 ~
  49.   bDisplayIsBig5=FALSE;  ~: V3 T1 X9 R
  50.   bRestartUpdater=FALSE;3 o8 T! M- u  W3 A
  51.   bFinishUpdated=FALSE;
    " J* k. k, j: F+ j" R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;0 ~- ~+ g* P1 R) U
  53.   InitChangeDataBig52GBKS();
    # b0 o3 }" |" v: c. L
  54.   InitChangeDataGBKS2Big5();; G4 X* b1 d+ H- h3 ]6 v
  55.         //2 y: G+ e) f" \0 |, V
  56.         bClickRunExe = FALSE;0 H/ k* V- s; Z- ^" @2 C- c
  57.         //" [9 t; H) f6 Z: f
  58. }
    , B1 f) L5 d- a
  59. 4 x# U$ _0 P0 [  b+ W. P
  60. CRevAppApp::~CRevAppApp()6 w! A/ f( _1 u5 R; ~6 A
  61. {  p& i2 a. x0 f1 K: v' p
  62.         // TODO: add construction code here,
    & c/ C* M# N3 r0 D* y$ x
  63.         // Place all significant initialization in InitInstance
    1 q* x$ t4 `5 L! K" E
  64.   EndChangeData();$ q# V8 C# h1 `" p  z) I- v
  65. }) b: a+ j, V" J7 C- Q& G
  66. 1 M1 f* Q* C- v  w9 Z/ I( t
  67. /////////////////////////////////////////////////////////////////////////////" l! G: [9 g, `+ b
  68. // The one and only CRevAppApp object8 c: W) I' D8 t# ?7 n

  69. 2 C' b* I! @/ i7 m$ Q5 ^0 K9 }; t
  70. CRevAppApp theApp;
    % ~6 P" t) B% g$ H) k7 g1 u- M* L: K

  71. 0 n4 s5 }2 d, x, v' `
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)! d$ W0 h# h4 k3 b" Q6 H
  73. {
    4 E$ Q% y+ V* m  J0 ^
  74.   int iEOF=0;* T9 K1 M5 z! r% V& X& B* {8 u# X2 {# M
  75.   char szTempName[MAX_PATH];, w4 p8 E4 t' C' }
  76.   *szFileName=0;1 x) e0 k1 M" m: ^& C, [
  77.   iEOF=fscanf(fp,"%s",szTempName);( O; V7 G" k& V. f
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')2 E. g5 V3 p  m' c3 q2 r8 I
  79.   {
      e7 a+ k$ ]  P" L4 `0 @  A
  80.     strcpy(szFileName,&szTempName[1]);
    - ^6 r. E& u7 ^/ `9 r
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)$ H: D1 l6 Q$ k; ]7 X
  82.     {
    2 w* z# f+ a$ c6 J1 s
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ o! Z* n. o% }" [5 I7 Y5 ~, W* {
  84.       strcat(szFileName," ");. ?) O- H& n0 [8 @8 T: p
  85.       strcat(szFileName,szTempName);
    3 H8 H. B+ r/ ]5 f
  86.     }' s+ C6 w! }( w
  87.     if(strlen(szFileName)>=1)% t4 b' v. b- g3 Y" G6 w
  88.     {
    / }& v2 g) L+ m' h& U. }
  89.       szFileName[strlen(szFileName)-1]=0;
    4 Z1 ?1 l7 e$ }, o1 G
  90.     }
    & R% X* J9 p0 o5 P' `
  91.   }
    4 x( S+ @' M# x) N$ V
  92.   return szFileName;1 V" Z: V6 Z4 E
  93. }
    8 Q/ @& a7 F7 V/ v6 e; n" S. H
  94. & ?# K- e# ~( R( f) T/ p
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / K2 g3 o2 D" _* [8 o) o
  96. {& U& f9 a: b8 V# Q
  97.   FILE *fp;
    $ ?" m# K# g! H
  98.   char *key=NULL;
    2 W/ [1 D, Z5 ^5 f5 U: ?' X
  99.   char version[MAX_PATH];& x6 j5 m* J- J( X8 A
  100.   LPUPDATEFILE file,olds;& B6 @" T8 ^4 l$ j
  101.   std::map<CString,LPUPDATEFILE>::iterator p;( x" `2 Q5 O6 _

  102. 1 \, ?5 y' h5 V* }; G
  103.   UpdateList.clear();8 i- O! T  n8 R7 p2 P6 W
  104.   UpdateFile.clear();3 G4 x3 N. Z& c6 |  Y  _+ B3 T
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' V& g/ V! [# e0 i! D0 G- j
  106.   if(!(fp=fopen(filename,"r"))) return false;
    % g( j6 H. H# I, s6 U
  107.   fscanf(fp,"%s",version);$ l& ^9 s( S6 v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }& P% E7 m  T( h
  109.   while(fscanf(fp,"%s",version)!=EOF)6 s, m. l6 H9 g
  110.   {
    4 H; t% Y1 c. E4 ]9 {1 i
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. v- |: e; ?  O! {
  112.     fscanf(fp,"%s",file->path);8 O, }7 }/ Y2 j
  113.     ReadFileNames(fp,file->file);
    8 f8 n* k% u$ L4 `
  114.     strcpy(file->full,".");
    8 _2 M) R/ t3 V& T3 ]( n* U
  115.     strcat(file->full,file->path);( Y5 R3 J$ n) a- n& R- Q; ^: Q; F2 Z
  116.     strcat(file->full,file->file);& ^) d+ ^' W, y+ T% w- P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())5 x& G+ e0 ]% ?  v
  118.     {
    : `1 x2 c/ U$ x! R
  119.       file->vers=(float)atof(version);
    - |1 V- W9 j$ ~3 M1 {1 Z
  120.       UpdateList.push_back(file->full);
    + v# a4 `( U" H! ?
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));: M3 L5 q. s# i
  122.     }
    2 g8 j& S3 I6 ?* A. n3 j4 u5 I* t1 }
  123.     else
    / \  _  W" R' q
  124.     {. C" N4 i, C- z) D, T8 X9 c/ c
  125.       olds=(*p).second;( Z" w+ F- [3 c; I5 n+ s
  126.       if(olds->vers<(float)atof(version))
    + e8 D0 P8 Y* y, d, e* J
  127.       {) H* r/ g. m. r5 o/ `
  128.         olds->vers=(float)atof(version);
    7 r7 e# O' z0 S  U* \
  129.       }0 f0 i8 F5 w7 z. O6 `
  130.       free(file);
    3 o% o8 ?1 X! ~: O  w) L
  131.     }9 I- @4 z1 c$ M: l# U1 v, {
  132.   }
    * `) i9 P. I# W$ D
  133.   fclose(fp);# N4 i' f- ~/ C
  134.   return true;
      L7 J" g, Q" f, M$ i) \" [$ E
  135. }
    & P* K( h1 l0 ~2 O# H  U  ~

  136. - k( t8 m& R: u$ t# O7 a/ u
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ {0 }. e) n. p. {1 h1 m
  138. {- H1 i/ ~/ y0 T, v
  139.   TCHAR  szFull[MAX_PATH];1 O. w, e  B" V2 f" _' L4 e6 }
  140.   TCHAR *token,*inter;
    0 R& Z# w8 p6 k# m% \* E
  141.   *szPath=0;8 v' p. B" ~) {, X# L
  142.   strcpy(szFull,szFullPath);3 r8 l4 n$ o5 G+ L: d
  143.   token=strtok(szFull,"\\/");
    & s! ]  ^) P* J1 j- Q+ k0 n% s
  144.   inter=token;$ p, ]2 e6 ~7 G
  145.   while(token=strtok(NULL,"\\/"))% P. C& c4 I& R& R9 u, E5 V
  146.   {
    ( }% r& e1 f* K4 {/ g7 h: R8 m& n
  147.     strcat(szPath,inter);: p4 u) v% M! |3 j8 g' g
  148.     strcat(szPath,"\");$ h3 T7 Q) J$ r/ `. _
  149.     inter=token;2 k+ f* }9 A4 ?9 Y/ }/ f
  150.   }
    & W: I; p" j' n+ D
  151.   return strlen(szPath);
    ! r+ Z' M) m* J$ I, X5 O% _8 E
  152. }
      n! f% M6 W3 F
  153. 9 {* e/ D. h( z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    2 n0 \/ E. n& y" v$ D
  155. {5 k* K. X5 r' `
  156.   DWORD attrib=GetFileAttributes(Target);
    & s$ N0 S: e4 J5 |# r( }1 j5 f' b
  157.   if(attrib!=-1)
    ; d( M! i) r7 V9 b8 @( i
  158.   {
    + [" P0 H8 d3 ?! l( Y6 n
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))* H; F2 S, L# s
  160.     {$ ~) S. m0 j% K/ }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# G. F% I0 I# P/ {( p' b
  162.       SetFileAttributes(Target,attrib);2 H  t7 s, S$ k9 r; X: d
  163.     }
    , Q/ a, P2 A  z$ @5 U1 s& \
  164.   }5 @' N1 x& D+ V! ]$ Z( k; }
  165.   CopyFile(Source,Target,Erase);
    ' p5 V8 G9 t0 L& m+ n
  166. }
    9 @, O6 p: v* I5 f. g: c: Y
  167. " U9 [" Z" E4 g" \! A
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
      f( c5 _. [0 X2 H3 j9 _
  169. {' [# w$ K# d# M% n+ [! ~5 z; w
  170.      FILE *fp;  t8 {8 k8 A+ B8 M
  171.      char  szBuffer[8192];) {+ {" Z" t! r1 p( y$ J
  172.   va_list  argptr;
    7 ?7 X. k5 [( p
  173. ; g; _: V& f* y8 r
  174.         va_start(argptr,message);- X4 I. s6 W5 z: F; Q
  175.         vsprintf(szBuffer,message,argptr);
    9 N9 m' m8 e# k/ ^! D- r* C
  176.         va_end(argptr);: K. I& S+ w- J" ]6 L
  177.   fp=fopen(FileName,"a");; h" ^, G. x' l! h! {
  178.   if(fp)
    6 Z. M( c  v4 l  l
  179.   {
    5 g; z8 V4 V# k. m
  180.     fprintf(fp,szBuffer);  X0 G5 |' a# L
  181.     fclose(fp);
    ) p% |9 w( m0 m9 I
  182.           _flushall();9 Y0 k, h2 w/ j' X) X
  183.   }# _6 F- x$ |5 Q8 t! O  C9 X! z
  184. }
    " i2 o5 _6 K4 b4 W9 [
  185. " R. h, V  B: @) D
  186. BOOL CRevAppApp::Fclearf(char *FileName)& @5 [1 o$ l* a7 M& v
  187. {) t# R  u7 E# M7 l) s" P) y
  188.      FILE *fp;
    5 j, T% a1 i1 q  H9 X) s
  189.     DWORD  attrib;
    2 A# a: g# ^& y4 C
  190.   attrib=GetFileAttributes(FileName);
    + D+ e+ J! b' d2 |0 U) G8 x
  191.   if(attrib!=-1)
    , b4 V+ S' }8 k! N  p4 j8 m# f9 c
  192.   {0 b; w' O) L, h$ `% s9 [0 L
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);. V+ s' N. N# K& \
  194.     if(!SetFileAttributes(FileName,attrib))
    1 D: D8 y; C+ x- B9 I0 j; v
  195.     {6 i$ V! u, I! \* x# j0 e
  196.       return FALSE;& v. Q- ~- m: |5 E$ T# _# q
  197.     }
    2 j, r4 K) m- l3 x8 U5 h' @
  198.   }1 ^5 f! z: e, Y+ C! e
  199.   fp=fopen(FileName,"wb");. A+ m) `. p. t1 c
  200.   if(fp)
    0 \' i! L3 Y0 l7 Y2 R
  201.   {
    0 v6 P. j2 b4 k$ u. e" _
  202.     fclose(fp);# ?* w0 r+ Q7 i5 A
  203.   }! ]9 o) L0 l; h- M
  204.   return TRUE;% w( O( L$ o. z, q% N
  205. }2 [* T/ x4 b6 b; p- T
  206. 0 v* x% A+ ~1 g# s3 I
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    ' F" r3 t, r6 i. x; a. Z9 v* k
  208. {3 S( \  f; Z( K; i
  209.   char filename[MAX_PATH];
    ; R0 L: d; Q' G
  210.   LPUPDATEFILE file,olds;3 ~" r. Y$ F' V% J% a
  211.   std::map<int,CString>::iterator i;9 F1 [& H: E$ R5 q' w% \
  212.   std::map<CString,LPUPDATEFILE>::iterator p;% t6 Y7 N# [6 d2 V7 t6 S+ f  n1 k
  213.   std::list<CString>::iterator l;& f& J% X, t" w# V4 C

  214. ( T3 p+ Z) F" I" @' _! f1 ^
  215.   if(bFirstUpdate)
    0 K9 m  S: z  ]+ Q* ^' k3 q
  216.   {
    . D2 K7 h; B0 V8 x4 B
  217.     dwCurrFile=0;! E( o3 t9 f9 z1 q1 V( M
  218.     bFirstUpdate=FALSE;
    ; x) c( P7 P1 {# m+ v2 @! x' s
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' h: k5 ^- c7 V
  220.     {
    ; A# E; [4 C) a4 C# f' N0 W
  221.       dwTotalFiles=UpdateLocal.size();
    , s% o, x( _- A3 h, ^
  222.       dwDownLoaded=0;
    . E/ K/ w$ P% I, C0 c$ h5 i
  223.       bSilentStep=FALSE;
    8 N+ W, E+ C/ m& F# j
  224.       bCompressed=TRUE;) d9 {/ y: {" ?6 c* Z! Z
  225.       strExtLocal.Empty();
    / k8 w7 I* u" N. p4 M: d
  226.       strFullName=(*i).second;0 z" H2 x6 ?+ T7 r* s+ T) `
  227.       dwProgramState=AP_CONNECT;! l9 ~+ A5 B; L7 u* I
  228.       return TRUE;6 q3 d' t, P3 ^
  229.     }
    7 q- n, W# g: j4 r
  230.   }9 z8 C' j" i  c6 C0 `
  231.   else if(bRestartUpdater==FALSE)0 ~# F. A  \0 D
  232.   {" d4 f' Y" Q$ q
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 g1 s9 f, [5 S0 m* w0 A+ Y$ o. x
  234.     {/ |0 x; u' F: m+ A/ O5 V
  235.       file=(*p).second;3 r4 o" o: r9 i( |. h
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    2 F0 c7 t2 {$ q' R5 `' K7 y5 s
  237.       {
    2 o% s" A6 G) ]1 B/ Z4 {
  238.         olds=(*p).second;
    2 O4 o7 s* a8 ~( @
  239.         olds->vers=file->vers;
    8 W1 i; h) V- y* N/ e% J% k+ n) q
  240.       }! \! g- S, n' g; s  ^) b7 a8 l
  241.       else
    3 l3 n( k; y7 o- ?' r  m* n
  242.       {2 ^# \5 _& R( ^' E
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / [# S7 u5 H% b) s: e
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    - v$ Z: ^2 v# S
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));! w4 `9 u7 n, t8 @/ B% A
  246.       }1 V9 Y# P* E, y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 T" ?0 d- w) I8 b7 D! l- `, x6 R0 E
  248.       sprintf(filename,"(%s)",file->file);) c7 ?& t) H, ^- ?* _
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    * W$ N4 e5 R* U+ f
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    7 [2 L' K5 g4 k5 Q5 v! g2 T8 y
  251.     }
    ' C9 C/ z" f+ ?) m# V" o) c$ U. ~" g
  252.     dwCurrFile++;/ ~5 `4 M" z8 {7 i/ E- ]
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# K0 u# M/ ?) ~' T1 M
  254.     {- Z1 w2 J! y: ^" x7 i0 C
  255.       bSilentStep=FALSE;0 h9 C: D" \4 A# M, s; J  @
  256.       bCompressed=TRUE;4 Y7 B9 d, y7 i! m
  257.       strExtLocal.Empty();& k1 `6 U/ H3 m9 ?
  258.       strFullName=(*i).second;: R+ \+ D' D" h6 b) q0 k( }
  259.       dwProgramState=AP_CONNECT;& N( S! c" p7 R' x3 A' [
  260.       return TRUE;5 m$ [* X! D; r1 T1 q
  261.     }& r' K7 ?. j% n! e
  262.     if(!bRestartUpdater)5 m# r  V( J- r7 u# p, o% a& k) F# R
  263.     {
    & V8 F) x7 ]% a: v# [
  264.       int iCurrSize,iFileSize;
    & X; Q! F, z" i, @1 `. j& C
  265.       iCurrSize=0;( M+ {' Y, l8 m6 [& W
  266.       iFileSize=UpdateList2.size();( r( {/ W1 [3 Z& P
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ; |4 H! b( T6 ^; R1 S! ]+ p
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    # s1 S0 u* I$ D# m$ e
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    . ?! a2 L9 Z4 O  h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  C8 W- k" u2 b/ F. X+ J1 B
  271.       Fclearf(".\\update.dat");
    9 a/ G6 a3 `( z4 a
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * h5 s) \& |: f/ \! J. ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    2 M: |  l8 v# ]  p5 G& A
  274.       {! l6 o* }5 X" h8 n% J1 l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    0 b" r* R0 k- P9 [4 q9 p
  276.         {: q+ g! W0 [% P- W
  277.           file=(*p).second;
    & ?8 B3 g; |8 [9 h% Y% `
  278.           sprintf(filename,"(%s)",file->file);
    0 f; F  b; e- |. T' E
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  u; _; s. K. d  k
  280.           iCurrSize++;
    6 Q7 a! w! G" y
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));, D- o* O6 s% ]+ M
  282.         }
    + ^4 Z& g, n' i. m/ O
  283.       }2 O; ]/ {, c" N, |" B
  284.       unlink(".\\update.txt");9 p2 @, d/ O5 G2 g
  285.       unlink(".\\update.tmp");1 N2 I, J" G, R1 M( w) c9 E
  286.       Fclearf(".\\checkversion.dat");
    * S' J  v' y3 c: n
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);5 p' ~$ @% k' h5 ?: J* X8 T4 s# ^: a
  288.       if(UpdateLocal.size())* Z. e9 m9 e( Z5 v- o& t1 P7 E
  289.       {+ z3 y" C( P3 @4 D
  290.         UpdateLocal.clear();
      a9 e4 Z! E: K+ a7 T& E4 q. x# t/ D
  291.       }! c  T" {( `0 f
  292.       if(UpdateFile3.size())$ S, s; K6 |2 X: d# T
  293.       {% D5 q3 e  x) \' ?
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & a5 y& `1 K$ p- h4 }! Z
  295.         {
    ( @5 I. ?" i- S& j  Y' E5 F
  296.           file=(*p).second;$ G* ?. O. y8 i2 ]
  297.           free(file);" y) j6 Q* M% [3 A
  298.         }
    9 p1 ^9 S# D  w" |; g% }7 a5 m
  299.         UpdateFile3.clear();& f& z2 I0 ?7 s
  300.         UpdateList3.clear();
    8 Q& z; J; @9 N) j) p
  301.       }2 f0 K0 h: @* A$ B% Q
  302.       if(UpdateFile2.size())
    5 I) U: ^$ D* P- Z4 l+ N
  303.       {
      O3 z3 A/ T9 f7 k' N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ J5 q% v. t  ?; U5 i% ^! I
  305.         {
    ! P8 ?- ~+ ~( p  H9 I
  306.           file=(*p).second;# ^5 J" Z7 q% [. z4 o
  307.           free(file);7 ^+ }4 y: P% l& R
  308.         }1 }3 V4 H8 P: J9 S, p
  309.         UpdateFile2.clear();3 \4 x+ X' W9 g
  310.         UpdateList2.clear();& L! e; }) W; ]3 M- w) m
  311.       }
    ) L( u3 H+ h9 ]- `$ F7 G
  312.       if(UpdateFile1.size())+ |/ i8 S: E* W1 A: r' E
  313.       {& z& `+ ?+ ?7 ?
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)) k0 F" \: _5 M
  315.         {) J- }% I. R' ]2 s2 ~4 _- f1 n/ \0 y
  316.           file=(*p).second;* c: F; V5 C/ w
  317.           free(file);
    5 G% }/ Y% D8 |' Y! E- _
  318.         }1 q8 j# n& k" B) a
  319.         UpdateFile1.clear();( ^8 Z: m! p- _$ j! A
  320.         UpdateList1.clear();( ?$ q! C9 ?  [' R+ W( u9 }
  321.       }8 u  M/ i% d; _8 t% C+ F
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) |+ i5 k& D+ s; y
  323.     }7 l% X! n2 D0 o% K  E6 L
  324.   }
    5 z6 @# [- c$ b9 l1 X- K) m
  325.   return FALSE;
    8 P3 L# C! p; H  G5 p
  326. }' _% u  x+ j% z: {8 O& N8 @2 H5 q
  327. 6 v2 _1 X8 ~1 t/ i2 d
  328. void CRevAppApp::ClearAll(void)  ^( y5 D  d  {! L. o" L
  329. {
    6 I# j9 V& R9 U3 V7 v
  330.   LPUPDATEFILE file;
    ) X9 i% A: F# i  i. `
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    1 x6 z5 `7 ~- A3 `/ E2 ?

  332. 9 W" R% h% C0 m, J) u& j3 D
  333.   if(UpdateLocal.size())8 B1 _# U* L% v
  334.   {1 r! |$ R2 z% O$ z( p
  335.     UpdateLocal.clear();) W$ d9 f  w; q$ ]3 |
  336.   }% _! r( a& y6 h/ U
  337.   if(UpdateFile3.size())
      [$ ^* S" w: N8 g
  338.   {
    # Q* X/ c. L3 N* D9 ~( J; j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# `3 n  t! |1 q. {
  340.     {
    5 k( r1 c$ [6 ^5 O. ?
  341.       file=(*p).second;
    5 W) k) [( W6 x/ v" O5 b1 ]
  342.       free(file);
    4 \+ C' c4 @4 R4 V
  343.     }, O$ y. i) f, \
  344.     UpdateFile3.clear();+ A; a  V" E% G$ t
  345.     UpdateList3.clear();" h" p! N$ ?+ y& w- H4 ~
  346.   }1 j6 S( g7 ]( }
  347.   if(UpdateFile2.size())! k' B9 ?4 @. ~8 W  |7 c% f
  348.   {( u4 a4 |+ d$ q- O4 l. k
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( f4 w; n% h9 p: k
  350.     {
    0 M, @% u( N0 }4 x
  351.       file=(*p).second;
    % {! m9 \  q* J5 X2 g, w
  352.       free(file);
    ! ~, }$ x% V) }; c- q7 t+ I
  353.     }2 y+ N0 f6 I+ @- ~
  354.     UpdateFile2.clear();
    ( A- _! m: A7 W! @  D) F# {) t
  355.     UpdateList2.clear();
    0 A* R& k/ p, u; t6 J( W: n
  356.   }; m( E+ g# g3 q  x; y( H
  357.   if(UpdateFile1.size()); K' R. A, y: x' u+ N
  358.   {
    9 w% {8 e7 n% V6 r- p
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( q  W5 f5 W# n' V7 }9 ]. b
  360.     {' ?2 q4 e4 ]% L8 ]( h
  361.       file=(*p).second;
    # {& k0 A6 T2 c* {) N
  362.       free(file);
    ! k, e4 T* m& J
  363.     }4 D+ S  x& ^2 z- k, G6 G
  364.     UpdateFile1.clear();
    5 A/ M! Z3 j5 e  u- J7 j1 x
  365.     UpdateList1.clear();/ V; M! w3 u9 ~* o, C
  366.   }
    . o! I4 [( Y- p5 d) V8 X7 h1 E0 C5 Q
  367. }  
    ' N; c7 f" X( Z- n; Z
  368.   
    9 g6 U6 `! D) Q6 m+ G# [. }
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + Q1 `& e' Z( Z: k. P) o! }4 O/ R
  370. {
    6 F! c" J, U8 \! u3 Q+ e
  371.   int c;( a; M' ]  G2 \7 G- A
  372.   LPUPDATEFILE file1,file2;- |2 T! b4 ?3 V) S
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 L% ]& K! P( J' `9 \! P
  374.   std::list<CString>::iterator l;
    2 v* [) r+ x: Z; F! o
  375. 8 a! K$ k6 N$ ?4 @+ F+ o; c% e; W
  376.   UpdateLocal.clear();
    3 V+ S; U1 b# d  u1 U
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);- }; ^8 M$ e* Q9 U* U( `: k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    6 D( B" V4 j% v7 @) L. I0 l
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) c# y9 e* _, U+ |3 n$ m5 i' [8 V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);3 y% u0 G  J+ A# V. K0 B( Q
  381.   if(UpdateFile3.size())
    6 b8 G$ p) X- M. {$ ^, a
  382.   {
    & u* ]3 I3 ^* n% w( d5 f
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    : w' A0 v9 d6 X
  384.     {* W% R9 d, N6 i" s+ J6 E
  385.       file2=(LPUPDATEFILE)(*i).second;' C4 Q( ]# ~( k7 P$ \* H: p/ V
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / {0 f$ p5 ]4 w, Z* c
  387.       {
    ' P* `+ b3 l7 n3 ?
  388.         file1=(LPUPDATEFILE)(*p).second;( J. _9 e$ p# K, t; r
  389.         file1->vers=file2->vers;
    , _3 O1 I7 W& h0 F' _! }8 ^
  390.       }
    1 ]$ ^5 M- @  U9 G' d9 r. D
  391.       else
    # i" H5 u) b3 s$ ?) U
  392.       {. T$ k) ]* l0 a5 `- `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 b1 [+ `. [5 Z! @( {* g
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));5 C# L! z( X) C: K: W/ Y6 C0 h1 U
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    3 a! G) y8 K: ~0 T- p9 [. z
  396.       }
    " \# k5 M6 S! p1 \# K% T& f) U
  397.     }
    # A) b8 v3 g8 t/ n
  398.   }( H; `# T- B0 G6 m: n1 l" F1 z: G; ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)9 T% f3 L5 o8 f1 m9 }
  400.   {
    " c& G% o) e0 S; Q6 n7 q
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())2 n# u/ N# R. ^) n
  402.     {' k! i% E5 v  m
  403.       file2=(LPUPDATEFILE)(*i).second;
    . ]. D! i  g+ b& S& u) f3 ~. @
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 P9 o, D* x) h' z3 f% o% T4 \
  405.       {
    4 X9 S' d% Q2 ^2 l, a. R, s) M; A
  406.         file1=(LPUPDATEFILE)(*p).second;. c& h# O- T$ [. [; H
  407.         if(file1->vers!=file2->vers)6 c2 F; t, |; D+ g8 Z
  408.         {/ _. b8 |- Y" }3 {, K) v
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 @8 U! ?% u: [
  410.           c++;& A/ u" l6 ?' L0 @
  411.         }" c4 g6 F' E5 A, s
  412.       }
    7 H( U/ G4 {8 l) t. }) K
  413.       else# f7 E# t, r, k4 h" t/ U
  414.       {
    0 h* p7 c5 p, [3 U
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 z0 K1 d! I. h8 J4 s6 }/ Z/ E
  416.         c++;
    ( A$ Z6 M# N+ i* a  E6 B( ~
  417.       }3 E9 N3 n& Q4 B4 S
  418.     }5 R7 D$ v- }3 Z* l% \* T+ {+ i6 K: I# A
  419.   }
    " `$ K; P1 s0 B' P2 W4 F. j
  420.   unlink(".\\DownLoad\\update.txt");
      ?' F# Q* R* q7 g7 V2 ?/ n: J
  421.   if(UpdateLocal.size()) return TRUE;
    7 E9 d: q: R* _* ~6 S" X4 a4 p
  422.   else                   return FALSE;& x" }( c$ M: c6 _! d7 n' ?
  423. }
    + D- l& K5 X! W( w
  424. 8 v( z! P4 p+ r- e
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 l) ?  O) ]5 ^& o7 H0 P5 ^
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"8 ]/ i) t* s$ K9 J/ c3 x7 Q

  427. " l3 c7 g  A3 k7 W; w
  428. 4 x. m. u$ ^, O9 d8 q

  429. ; l* y: f/ o. G. s
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)9 W2 M2 o" X- B, F4 G0 l
  431. {6 p$ S. V9 O6 Y
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;0 b+ E3 B0 ^6 E+ @- R! d1 C
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)2 o3 V$ F% O9 S7 M- h2 t
  434.   {$ r4 f3 o2 z, ~3 r: `
  435.     char szLanguage[50];  h( M/ Y% a8 c' |7 o$ O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");2 I: D, g, F1 H
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    7 _9 W( |. S1 L; E
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 h" t) W+ A; L- s
  439.     else                                   m_iLanguage=ENGLISH;
    / G; G* h; Y7 w- {% Z. P3 t
  440.     char szRegister[100];
    & w; x: u; P1 Q2 }: q6 i
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, [# ~$ ?7 y; x" w% k3 M+ ~# x
  442.     strRegsName=szRegister;
    8 x. t# M  A, Z) K! x
  443.     char szPatchURL[100];9 z# D& s4 |' n* ?. t# `2 H7 \3 @
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 z# C! l+ G( \( o9 \) d
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & `2 S# _/ s7 O9 F5 }+ @7 d
  446.   }
    , ?+ f' b$ P2 h' i9 z) T
  447.   else. e" {* W" W6 K/ W! s0 e! u: n1 L" E
  448.   {
    8 c' h3 ^5 V" {) z' i  d% {
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / O) ?& ^( x6 i8 w1 t3 f" K
  450.     strRegsName=DEFAULT_REG_URL;
    ( T; t) w" l& X+ L3 Z% r$ w, u
  451.   }
    9 l* [; g* Z/ w7 s- w( O) ^; v
  452.   if(GetFileAttributes("hosts.ini")!=-1), }; m* K8 [) @4 |! R
  453.   {
    9 w6 D, h6 @1 D9 J
  454.     char szIP[50];4 L' J& [9 i, B$ M4 y/ z
  455.     char szDIR[300];
    ' m# ]# ~- o" {6 g- T0 [
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))+ B6 @& G" a# d) ], p4 j
  457.     {& f: i0 h) @% Q' U, x3 F
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    0 n/ _! P9 n; t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");: A, i( p. L$ N- U  w8 k
  460.       strHostName=szIP;1 x$ a7 e4 r0 w2 S( B9 R
  461.       strHostPath.Format("/%s",szDIR);
      ^% g( I9 [* m6 w; `9 \# n
  462.     }
    ) m6 c+ B1 E( J- {1 h6 }3 i! K: o
  463.     else, d7 m7 t0 D& B) u
  464.     {
    8 Z: @0 {# v% ]  t1 D
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 M( [2 N* x6 w; h% Q, Z
  466.       {
    8 ?# g* d# Y7 J! n- D! n
  467.         char szLanguage[50];
    - ?+ ]8 [: n4 e1 ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, D" |! c& M6 J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 A- T% n+ A! n) K; ~4 F
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;5 l( f* _0 q6 \: _" E4 M
  471.         else                                   m_iLanguage=ENGLISH;, ^: n4 N; R! g- M/ @, q, [' g
  472.         char szRegister[100];
    + S, F: H; {: O
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");3 C: e" w" {4 G( d9 U
  474.         strRegsName=szRegister;
    / l/ ^1 p- y5 |- _
  475.         char szPatchURL[100];4 r5 X/ @3 i2 t6 ]: U  Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 z1 K9 Z- j  c8 t  `) L- `! i! ?  z
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; e  W% l' K9 W' h0 v  ?! B
  478.       }" f) [. S8 p9 _( g, ~$ i) v
  479.       else9 W) L8 _6 p, P& J' j
  480.       {
    3 Z$ {# M3 S' p/ ~, O4 Y) t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: m6 S& J. F6 s- ]$ w
  482.         strRegsName=DEFAULT_REG_URL;1 p8 i$ A7 c8 h3 a0 W
  483.       }
    + H5 e2 L# N3 b5 e
  484.     }
    * c* |# D! x+ ?- y- W1 c! x) ?; Z: ~
  485.   }
    4 w; s- b9 c: d( @; p! k- Z7 x# ^
  486.   return true;
    & f3 w& ]2 {2 t2 P
  487. }( @) l2 ?( `7 T  M

  488. % s, h7 n7 L! w& A+ L
  489. #include ".\ZLib\unzip.h"
    " \) _$ M0 n! x( m4 ?) z4 A& K
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 e6 ~. T0 V- G4 N$ H" n6 X7 A
  491. /////////////////////////////////////////////////////////////////////////////
    " x) ], v& d/ Q4 k) s* m
  492. // CRevAppApp initialization
    4 b3 [$ f' f3 @& l7 @) R4 d" Z
  493. 6 ~: S1 i) R$ q% c9 O
  494. BOOL CRevAppApp::InitInstance()8 r6 Q! L  [9 P7 b2 @
  495. {0 Y1 M: ^1 E5 A8 x- d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    4 c: ^! P( V4 W3 l6 ~& q

  497. 7 ~" ?8 d) x  J$ J/ G5 K: ?7 X
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; f8 w  v+ z/ g9 C
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    ! C0 ^: h! W6 C) t6 ^7 o! Q* Q
  500.   {
    # N! B8 T- L" N5 u/ v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& D" T& i' V( j2 J6 X5 c
  502.     GetPathFromFullPath(szPathTarget,szPathSource);* J# Q& a+ Q' f' i9 O: m3 z# Y
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    0 \; H6 d- z5 H1 f1 t  P4 b
  504.     {
    7 l2 ^% w! X3 I$ Z( r0 t" I7 m# \
  505.       strcpy(szPath,szPathTarget);; Q! ~# L! I: d7 a" X- a
  506.       SetCurrentDirectory(szPath);1 d7 p/ a5 F, j& k
  507.     }: B9 a- v" U) |1 F! u; q
  508.   }
    1 B$ e5 J- ]" g$ e+ F# a9 L6 j
  509. #ifdef _DEBUG. V2 `# A  Z# D1 ?4 x
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- G$ b, i/ W& }; ^& V" a/ \# M5 G
  511. #else
    , g: H, v5 ~! P. F. t
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    : H+ u# F' Z+ a7 K. c
  513. #endif
    # ?4 r" Z; j& i7 N' j
  514.   {; i2 }( U6 D' \7 X
  515.     char tempFileName[MAX_PATH];
    7 w( f& a; }4 j
  516.     strcpy(tempFileName,szPathSource);& W+ b6 U. H- g3 d. j+ ^+ \
  517.     tempFileName[strlen(szPathSource)-12]=0;
    % O) O. R! A' x3 d
  518.     strcat(tempFileName,"\\$CSUpdate.exe");; S& o$ \+ k; b( p6 B
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);; a; j, Z5 n- p2 ~
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; ^/ L' O6 l9 b1 E/ ]
  521.     return TRUE;6 f, x4 M  E1 ?& ^/ U  ^
  522.   }, g( `( j; r. \: v1 M' T& l
  523.   // Nuke 0118: Delete run.exe
    9 b# s/ I( q% w: e6 [2 F' P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );  {: o$ {/ r) S0 ~2 j
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ' Y  M3 @; d2 W7 A7 v) g
  526.   if(!ReadCfgFile("Config.ini"))% X: h; y" C- _+ M2 r1 [# n
  527.   {
      N  L7 y( c* t* r
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);9 ]/ G8 C: i, Q1 f
  529.     return TRUE;
    9 s4 _, Q' Z1 `! }) w8 Q, b
  530.   }
    $ V$ H# p9 h0 _* n' y. \
  531.   HANDLE mutex;
    + }& ]  `1 Z& y" E
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))2 x. L: P7 u$ \- o3 Q7 L; c
  533.   {
    ( G9 T7 @# a7 E+ p- e' V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)  n" q' M$ w+ F- y
  535.     {$ f% M' Y2 D2 I' _1 g
  536.       CloseHandle(mutex);7 g. `7 O1 e1 i1 \' W) l& H
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    + r) z8 U; J8 B+ c
  538.       return TRUE;' n) D, l: g4 R! k# h: i% `
  539.     }, }. J  L8 `, Q3 s0 R4 d
  540.   }  
    # k% L* e! t5 _8 T$ r! _0 x: g" {
  541.   CloseHandle(mutex);
    - Q) d7 R6 b* A7 z( r
  542.   D+ u0 E7 G$ r
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    $ ^9 R2 ^4 G) l3 }( x
  544. $ c% N0 |# @& C8 |& s
  545.         AfxEnableControlContainer();
    ) N  Y4 @# _) `) J1 Y( q1 q
  546. 3 _4 k0 E  T0 ~" C5 o/ v5 b
  547.   bCanUpdate=FALSE;1 B/ O- g  _# d6 ]0 j& A# h" f
  548.   dwStartUpSteps=1;. U' D3 t8 E5 h$ N
  549.   dwProgramState=AP_NOTHING;0 d+ `" c$ y. `" E. g

  550. ' m. s0 t4 G4 O) L0 t1 s
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" ~- P8 o9 N. }; J6 ]* R
  552. $ W& ?4 Z$ X7 K% H% ?& U% |
  553.         // Standard initialization9 i0 q/ ?+ |/ A* R% p9 u: c  w
  554.         // If you are not using these features and wish to reduce the size: l/ r5 P$ _! {8 |( a: h; C$ M) o
  555.         //  of your final executable, you should remove from the following
    0 }0 o& f' h- c0 F
  556.         //  the specific initialization routines you do not need.! M5 X2 K$ E5 ^; a' o+ ?
  557. 0 Z; Q+ g9 a1 C: |" H" J+ ]
  558. #ifdef _AFXDLL5 _. x5 I  z5 f7 \) J! r
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " }. M( t: R: W* D- e+ o
  560. #else3 ]# [( n' i; J& [
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    4 c5 k7 G2 c6 U) H
  562. #endif2 q6 z. k( ~% V
  563. % b+ \0 A8 h6 Y6 L1 ?
  564.   dlg=new CRevAppDlg;
    : r- m5 \; D2 ?  |
  565.   dlg->Create(IDD_REVAPP_DIALOG);: x- F2 q6 e8 l# p1 e3 `: h$ u6 [
  566.   dlg->ShowWindow(SW_SHOWNORMAL);" T8 `6 p: `( u9 A
  567.   m_pMainWnd=dlg;
    8 f$ C# I* A8 ?  ?! d4 w' z+ H% e

  568. / d  M! ?" h  P9 r
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ; ~3 t- L) w+ h3 Q) e
  570. 2 Q! f4 J1 @/ ]" e- x* a
  571. //  GdiplusStartupInput gdiplusStartupInput;+ [7 l9 r& ~7 ~% g) Z
  572. //  ULONG_PTR gdiplusToken;
    0 A' a6 X  p6 w7 ~/ `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);. {" W4 l& V! F/ q& |5 Z

  574. 2 F5 k4 T: t3 k4 B" |' r
  575. //        CRevAppDlg dlg;4 X$ i+ L/ T. A+ I# E; f
  576. //        int nResponse = dlg.DoModal();
    * E2 F3 `2 y0 a$ a
  577. //        if (nResponse == IDOK)
    5 l* l- `0 U9 f/ o
  578. //        {
    # }0 R! H! x. {
  579. //                // TODO: Place code here to handle when the dialog is
    # q6 X% [- k' V  w
  580. //                //  dismissed with OK
    " k: S6 y) E/ ^: h/ {* S6 q" q# u
  581. //        }% [" l( j2 r8 A  R
  582. //        else if (nResponse == IDCANCEL)& n! F3 W7 G: }8 |# L# y
  583. //        {% r* _  r0 U/ q! l; c5 |0 l" {
  584. //                // TODO: Place code here to handle when the dialog is
    " q, _7 P- G. ]% ~$ m) R& A
  585. //                //  dismissed with Cancel+ u4 ^" W" q: X2 a3 e; c* G! C
  586. //        }
    ' m: l0 Q. h. [: ?- \
  587. 1 ~# P6 f0 W8 K+ s4 J5 _
  588.         // Since the dialog has been closed, return FALSE so that we exit the8 `: t9 U# t1 i) F
  589.         //  application, rather than start the application's message pump.
    2 w9 r* }' j, r5 G: i( a
  590.         return TRUE;
    . k8 G/ g+ ]/ A& h
  591. }; G# V0 B" c3 [4 g$ c" p
  592. + E. F  }+ Y  x6 u1 `
  593. char *CRevAppApp::strtok3(char *pSource,char *token)! c& `# s% n$ k9 `- `7 x
  594. {
    ; F" i( l' T4 u9 K3 F& l. n+ s
  595.   int i;  W( I! N( T* \/ C& U6 a) q$ _! z0 B
  596.   char *szRet;7 m3 j4 q3 y0 r2 O/ a
  597. 1 L, E0 \$ E3 Q8 a* C
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , Y  O5 {+ M0 A8 b; k  N
  599.   if(sztoken)
    ' C# D. f( T# ~: s; v/ O! N
  600.   {
    1 p) O  u+ K1 L+ p! r
  601.     szRet=&sztoken[itoken];
    " r/ X  _5 d% G6 C5 F1 q
  602.     while(sztoken[itoken])
    - o- k$ [' D8 v' J9 I
  603.     {, x( [! h* f0 z, ~! Q
  604.       for(i=0;i<(int)strlen(token);i++)
    , b  V! `* A$ `  k1 H% B
  605.       {
    9 L  ~# T. X$ r
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ z" S5 Q7 {/ l; O0 r1 ~
  607.         {
    / ?, y: i- q( M; W
  608.           sztoken[itoken++]=0;
    % y, l4 k3 ?/ k2 [0 @: D
  609.           sztoken[itoken++]=0;
    $ F' o/ @5 q7 }" x5 j
  610.           return szRet;* `; b$ r- L0 @: [; x
  611.         }2 _" _1 |$ X3 P8 l. U# T! D$ ]
  612.       }  k+ q1 B  y$ {" j+ q" S
  613.       itoken++;$ d: M! e5 \; ~8 t
  614.     }/ c( t5 s: D  i: s& e# X3 m: J2 n" Y4 J
  615.   }  ^& `- J  f: x/ P) q8 e
  616.   return NULL;
    ' o! ]$ X! R$ _8 T+ ^8 }4 R
  617. }
      |3 X9 W% U# i) r# ], b

  618. 0 |/ K. ~* K$ P  n
  619. void ProcessProc(long Total,long Current). b3 \/ r0 A) L- U4 S2 T4 l
  620. {/ ~$ g7 I5 g3 r/ Q! w. L. @
  621.         MSG msg;$ H: }0 {- ]$ I1 m1 J( B4 A3 p
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);1 v! B3 M9 F6 J$ c6 ^+ H/ P, p& X
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
      C, K; O- z+ o0 D7 J
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + O$ O9 R& v# O) o/ S! G
  625.         {* s+ i* D0 A6 B
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & |$ L0 ]8 j* ~1 t/ J
  627.                 {: e" P+ C# x6 G' ^
  628.                         return;
    7 r8 [' c/ Q  E- x0 S3 r
  629.                 }4 x  Q# W( I$ \" N! p( o
  630.                 TranslateMessage(&msg);
    , `! C: C% d2 g1 r5 n. d& Q
  631.                 DispatchMessage(&msg);$ L* E5 f% D1 ~: U+ D% j$ H0 L
  632.         }        / b" T0 D8 L' Y7 T& D
  633. }
    * |9 u  c5 L: G8 X8 Q+ p' o. p. ^
  634. ) e6 W$ c' j! _6 l1 Q6 }+ ]- F
  635. BOOL bFirstChar=TRUE;5 q# A; l0 ~; u5 x' p  l. L9 ?

  636. 0 W6 O- s+ Q  ~9 c, ~/ n
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ' `  n. Y3 N) h6 ^: p
  638. {8 L4 d6 @4 @) m. `. d$ [
  639.         // TODO: Add your specialized code here and/or call the base class
    5 e8 D# L7 ]9 Q8 c; \- X: \* z
  640.   switch(dwProgramState)
    - |9 A" M" r% a0 R6 P0 ?% E. d' Y
  641.   {
    ( I" @. ?2 _: w9 ~9 w
  642.   case AP_NOTHING:
    5 r. j# v/ i1 h2 t( L
  643.     switch(dwStartUpSteps)
    9 D& a5 M9 h: m6 @' h, S
  644.     {
    : u2 w' l6 R! R2 L4 [8 R1 C
  645.     case 1:9 S# ~" j% f) ?3 a  s) C' y
  646.       {
    8 e: H  ^$ w# q2 p2 X. G% x* S
  647.         int i;
    9 T, T2 C) ~2 }* y! K0 v
  648.         CDC *pCDC=dlg->GetDC();
    5 k# I8 U5 z7 {" S
  649.         HDC hdcwnd=pCDC->m_hDC;
    . k8 o0 t  o% }6 |6 @! N
  650. //        Graphics graphics(hdcwnd);
    : U1 E2 e; h$ Y* e; ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. s. P8 h! M5 T3 u! Q: Z2 c
  652. //        INT iWidth=bitmap.GetWidth();
    ! N2 }0 J* F/ g; m8 o) Y
  653. //        INT iHeight=bitmap.GetHeight();# u% j$ N8 N+ j; R; }. j) L
  654. //        Color color,colorTemp;. F4 {, o* }% n' @0 \
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    8 C0 W6 L9 z) C- S
  656. //        {
    % j1 w& P$ e: ?: o, n
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++). U4 O; D7 ?( G9 q( S4 R
  658. //          {7 H1 k- g- o( j, w9 D
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    7 X4 j  b! c; {* M
  660. //            colorTemp.SetValue(color.MakeARGB(
    ) s. b0 X$ E: w7 I; v; b- A" ]( s
  661. //              (BYTE)(255*iColumn/iWidth),
    ' s8 J, H$ |% y# k
  662. //              color.GetRed(),* c  o- y& ]7 y) E4 X- w$ A$ h
  663. //              color.GetGreen(),7 U7 X/ G3 W7 K
  664. //              color.GetBlue()));' ]- a; c7 x0 J( x7 j# g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- M9 R9 n% A6 M4 Q- u) ^
  666. //          }4 z5 k, |& ~6 O6 J- m& f8 A0 Q) H0 ~9 {
  667. //        }9 Y1 `5 e* u% Y/ }9 G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);3 N8 r) N8 R0 i. }
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + K3 ]3 A5 x8 K4 {$ T
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 J# A. g- V  m! m- J
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - B4 ]: U( V/ s3 R
  672.         for(i=0;i<240;i+=8)3 A! j" a. G$ v2 l" Z
  673.         {
    ! o; T6 ^* G! G6 @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    6 ], f# k8 _( b0 J; a5 y. W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ( S% a9 W9 i: {: J  C# ^" U
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 l' h* ?4 r( d4 m1 q
  677.           Sleep(33);0 F1 A1 }4 x/ I: Q: y, k9 ]
  678.         }
    - P$ v3 r- m/ G5 u* Q
  679.         Sleep(1000);
    0 k2 D- d, X# H. g
  680.         for(i=240;i>0;i-=8)  N, x6 i1 L9 `
  681.         {3 o' F; Q+ h2 c* Q0 e+ m. @% ?
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);2 _! j( O# f: ?4 K# @
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " n! z8 ?" W1 \
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    1 M1 @* e9 g$ _
  685.           Sleep(33);
    8 I! U& G* n) O" x* r
  686.         }& v4 S; P/ \( J( J7 R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    + s( b& [* Z3 j3 T
  688.         dlg->ReleaseDC(pCDC);
    6 c& q) U- z; y3 K8 {0 j, g
  689.         DeleteDC(hdctar);9 ^$ r9 [. r& q6 d# M0 |
  690.         DeleteDC(hdcsrc);2 V5 h7 d7 I# |8 M' R6 U* @
  691.         DeleteDC(hdcorg);
    % |8 r0 P9 Y* \7 S1 u
  692.       }' \, W& l+ A" [+ ~  x5 F3 d* z
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);, z+ H9 Y$ m: q, p$ E+ P  p
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    3 A! b/ Y' o! _7 K. O) K$ C: k
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    , e+ [  J0 W7 u3 d' F4 E+ ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");1 U3 |6 g' C8 @2 j% |1 B
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 E# Z# K  j+ e  h# E) x" c$ Y4 C
  698.       if(!Dn.Connected())9 m) G- L2 G2 {3 w4 b) T+ ^, w: i
  699.       {
    0 r2 g. @7 K& D
  700.         dwTotalFiles=1;
    8 l$ W0 u7 Y/ L, ~- f8 k
  701.         dwDownLoaded=0;7 N1 `5 N$ Q8 V! k7 A! @9 |
  702.         bSilentStep=TRUE;
    ) Y8 t+ O6 O3 E
  703.         bCompressed=FALSE;7 `3 X5 N$ }6 L/ [! ~1 x
  704.         strExtLocal.Empty();+ K& n% d& O/ {3 ?' q* ^
  705.         strFullName="readme.txt";
    # ~* b+ S+ g) k! p$ |
  706.         dwProgramState=AP_CONNECT;1 m/ e; x$ i. j2 S" Y/ s7 N8 W8 a2 C
  707.       }. Z0 Q* K' u. }& p, S* I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 h) O( d3 p, S1 z) |/ S$ c
  709.       dwStartUpSteps=2;# m) _: z& z2 O2 p. L' l
  710.       break;( q, I5 Q" [2 ]/ p; u) Q
  711.     case 2:% |" ^4 @' |8 M- x* Q
  712.       {
    & A- K( T  `5 F# X% m& t3 N" n8 \
  713.         int iEOF;) j# Q  ^" o) T' t$ f3 m6 Y3 b
  714.         FILE *fp;4 e( `# i; |( c: P7 G
  715.         char szString[512];
    $ q# q. A+ u$ Z" w$ I6 Y
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");* L! d6 o. \: L4 G0 s9 ?8 t. K
  717.         if(fp)+ x: T2 L3 \2 w+ c: ?. `) q
  718.         {
    8 U8 u  R! B# I& b1 s3 F0 }
  719.           do/ B" _- d2 r6 K6 S$ M
  720.           {
    $ j, t0 q4 A4 `
  721.             iEOF=fscanf(fp,"%s",szString);
    $ l( O  ]/ p$ p. [9 b3 E1 w
  722.             if(strlen(szString))8 J  h1 ]3 Q$ p/ F; Y
  723.             {
    6 m" L9 M9 F6 E0 v/ s) Q- c  t+ Y
  724.               if(bFirstChar)
    $ y' ]1 c; p+ t+ F
  725.               {. i5 w2 c% k2 }9 B
  726.                 bFirstChar=FALSE;
    / Q+ O; v2 W8 P, k, v2 G
  727.                 bConnectIsBig5=FALSE;5 {, o* O+ _! Y8 L' g
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 B& W( W2 ~% K7 V- B6 G% ]
  729.               }6 B( ?0 `: c5 R( t% M, @  v5 W
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    4 n* l& w) z+ U; u1 C$ Z
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : j2 f8 h1 l# s; n
  732.               dlg->m_ListText.AddString(szString);& L4 M) H8 O: H2 j  a, I
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : y/ P9 T8 Q0 ^% H8 }
  734.               *szString=0;
    ! l: L) N5 H& b( r
  735.             }/ o( n+ f2 g5 L' A5 Q
  736.           } while(iEOF!=EOF);
    0 m' S& e2 d3 ?1 T
  737.           fclose(fp);' S$ V7 r1 A  @8 i& k+ N  P
  738.           unlink(".\\DownLoad\\readme.txt");- S+ }4 y4 b& m) }
  739.           dwStartUpSteps=3;
    8 _5 x) h- O  c" i& i: `% P8 u
  740.         }1 Y8 B5 }  }- S7 D5 ^; V' u7 t1 c
  741.       }, M0 e* `% {7 _$ D$ T2 H
  742.       break;2 L5 t" Q2 T' D  n
  743.     case 3:9 G* ]* s. \) Z# X  F
  744.       if(!Dn.Connected())5 p) R+ e' _; C5 f2 U6 V
  745.       {
    8 X2 h) I/ U" ?) y) I$ A- D
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 ~4 {3 I1 F: H
  747.         dwTotalFiles=1;
    " s5 i7 }9 X' S0 {& S+ I
  748.         dwDownLoaded=0;7 U7 d+ \! P; X, ]
  749.         bSilentStep=TRUE;, W/ V" K) o/ e! D+ K& a
  750.         bCompressed=FALSE;
    ' C+ d. H, H& o! [' B
  751.         strExtLocal.Empty();
    - m; i. ~( L" M7 H  R
  752.         strFullName="checkversion.txt";
      w; W  i6 R, E9 a: ~% j/ G3 T: X
  753.         dwProgramState=AP_CONNECT;8 j8 s, w/ S9 B7 z! O2 Y
  754.       }# |8 e& [& x- ^( s5 @) G
  755.       dwStartUpSteps=4;  @- J  k* O5 z
  756.       break;# A; b7 [7 s* A& ]( q. X) q- h, q/ X, ]
  757.     case 4:7 h; a  k2 K! Y' s' z# K* O, k
  758.       {, T$ L; g1 U* Y' x, m
  759.         FILE *fp;
    " {# n8 ^0 R+ V3 D9 y
  760.         char szString1[128];
    : K& `3 b' J$ W# u1 ~* `
  761.         char szString2[128];! N8 m# s9 Q* G2 X8 Y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    2 F6 _' i+ {+ G' [$ b
  763.         if(fp)
    3 K: V/ V- Z' b+ v, r5 @0 J
  764.         {6 q& H; i1 u: p7 K! u6 S7 O
  765.           fscanf(fp,"%s",szString1);
    3 G6 p6 T% g" m' |
  766.           fclose(fp);* `7 D, Q, \* w9 n0 Z) t  I
  767.           fCheckVersion=atof(szString1);8 I6 s+ K* g' y; r0 r. l
  768.           fp=fopen(".\\checkversion.dat","r");3 a4 o4 y# c6 u# f
  769.           if(fp)
    ; E+ w# R3 i; f
  770.           {4 ^7 P+ T' O9 H! e/ E7 t
  771.             fscanf(fp,"%s",szString2);6 a! |) {6 }8 [% h2 P
  772.             fclose(fp);
    / j' W8 m5 v% B0 r% ?) Z
  773.             if(atof(szString1)!=atof(szString2))9 F0 N- q$ ^4 H& H* C
  774.             {$ G5 p% F- ^; N; F# o- E0 e
  775.               if(!Dn.Connected())
    , Z) c$ N8 ]9 Q  d, K- f5 d
  776.               {
    5 x1 u3 e( t9 f- t
  777.                 bFirstUpdate=TRUE;& M" W4 j$ O8 o9 @5 t
  778.                 dwTotalFiles=1;$ }) y/ h, h; N8 ?. S. d7 J8 ?  f
  779.                 dwDownLoaded=0;4 L: t  ^/ c0 I' K. M
  780.                 bSilentStep=FALSE;* C0 `2 `& n6 b, m, @* w' `& d8 k
  781.                 bCompressed=TRUE;
    7 s  |3 A7 ~  i5 k0 H# ^( x
  782.                 strExtLocal=".\\DownLoad\";
    2 d" a5 R: U: v1 l" ]" v! M
  783.                 strFullName="update.txt";1 H0 S, G2 h! \/ {' N" a/ f
  784.                 dwProgramState=AP_CONNECT;
    $ [9 P, c- z$ p" G" E
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - U% o* ?/ Z# S/ f: ~5 Y" d
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 R6 I# ]5 G. x9 e4 m3 a3 E2 j/ H3 f
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");7 B# O# a4 E& Q( N6 n
  788. ' e8 y7 @) u0 W6 ~1 @
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( Y9 e9 u" N( ^6 a2 w
  790.                 unlink(".\\DownLoad\\checkversion.txt");# {; J8 i6 s" F. l3 @9 v7 l4 N
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)+ m4 s8 Q. c3 x+ H
  792.                 {
    & _5 w4 ]0 g0 Q! V- V- _' o
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ( e, ]3 T4 e: o- s, C4 Y% r
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");1 U8 _. b. n: n* j4 t$ A" {6 y; z4 B
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");  g2 Q( a. t% w; N$ k
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % ]. X% t% C$ \6 S/ Q

  797. . [% b4 Y0 o; c* L5 D
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ C" K5 ?7 V  t  J
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 P% }' z: y& i: O8 G1 B
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& ?/ Y  z; d7 x8 Z8 u4 Q+ I: h+ D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ R# x5 w2 f/ b- y  M- W. _
  802.                 }
    ; c1 b0 A: w+ j3 W, C# Z" b
  803.                 dwStartUpSteps=5;
    . ^( G- g6 h1 R5 `& N
  804.               }
    $ @2 \! h4 Y, T" y
  805.             }
    . g' T# T2 {1 Q9 E
  806.             else
    ! r# Z2 Z7 i+ a, d
  807.             {
    ! o* a' e# a% p) K- n+ e4 h
  808.               unlink(".\\DownLoad\\checkversion.txt");  i( b: A' `+ O( M7 ^
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");& L4 S( R6 `" r6 u+ s6 i
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");* B; o! H# `' s8 l5 v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( b' P9 Q3 E* q
  812. / z  ?9 x+ i# B; q! H
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 {) R: L( s* C) J) Z! J
  814.               dwStartUpSteps=99;
    + h- F5 @) ^2 k; Y0 I5 ]
  815.               bFinishUpdated=TRUE;
    , c" t* C% H" |% ]3 z( b
  816.               bCanUpdate=TRUE;! w0 j$ O) Q3 o) R0 h2 k  f
  817.             }
    , ~) M  R/ X; s7 A# J& f
  818.           }) v9 D  q9 r  P, J$ ]
  819.           else
    ) D- A# o0 S, d( a3 r
  820.           {5 m$ ?% m) u' @; R& t
  821.             if(!Dn.Connected())7 L2 z9 U; b2 M8 q* t+ u
  822.             {) Y6 a9 k& s. _" T0 b
  823.               bFirstUpdate=TRUE;6 z- z! P& {' g2 c3 C5 Z+ M6 i7 ^2 X/ L
  824.               dwTotalFiles=1;, k' g7 O0 }0 K2 v
  825.               dwDownLoaded=0;, P0 R- p; S( Z/ @. C' X
  826.               bSilentStep=FALSE;+ l- G  C: i' Q- `  H1 [5 z& k
  827.               bCompressed=TRUE;
    & c. A, k" ]0 Q- C" g
  828.               strExtLocal=".\\DownLoad\";! a0 ~( d( U' C
  829.               strFullName="update.txt";
    0 T3 X! C" n4 G7 g. V2 O
  830.               dwProgramState=AP_CONNECT;
    6 j. f* j- Z* X
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; {; j# n  m0 T2 M, O( y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ; B- T4 U; V4 {; c, X! ~' `
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");' A  j  f& v/ G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' q: j: P+ G0 J' d% l8 f5 m! r
  835.               unlink(".\\DownLoad\\checkversion.txt");: K6 W" z. r$ m
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)# h7 _+ i( ^- [& ~& f
  837.               {
    0 o9 j& ~: G  @- r, k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    . L( q/ S6 ?- |( }  ~% J% O4 D
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    + @% y; f% c; P1 n. L9 a
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    $ I. g% f& y6 W5 k3 E+ H
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 t8 \6 `2 P% P7 U3 j
  842.                 . @& G& N# F: F2 H$ y6 s  p
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    / @' o( J/ S: g- M
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & T# s4 P# [( `% {
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");! r" x+ i3 L; Z
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 q3 J! [8 I& ]3 G7 w
  847.               }; }6 X+ L8 W1 w1 Y! l/ ]7 {
  848.               dwStartUpSteps=5;
    5 N. u: o8 S$ d' w8 L* X" U
  849.             }( Y0 v. }; M& _& o
  850.           }
    & o$ R8 `/ k5 ^$ d' L1 N& ?
  851.         }
    : \# q$ x. Z. _2 G, W$ s) @" G
  852.         else2 d) `% P, e( F8 W/ V3 b  _- f
  853.         {
    4 D/ k" {6 d( C0 R
  854.           dwStartUpSteps=3;
    $ S( C1 T+ k6 V4 k8 a: @; {2 ^1 T
  855.         }
    $ m8 Q+ ]1 x9 W2 S7 b
  856.       }
    % C$ k: H0 Z; A5 a' S& h
  857.       break;3 P& \+ g: w0 K4 [
  858.     case 5:
      ~; c# z1 W. e. p, U
  859.       {- J9 b3 i7 ~' I& x# O
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    5 n' Z0 \9 q4 K4 C
  861.         {
    3 F' T' Y6 d( a8 ?+ X( D9 v: H" Z+ P
  862.           int opt_overwrite=1;1 ]. B! w7 n! O8 ^$ L4 Y5 `- A7 v/ s
  863.           int opt_do_extract_withoutpath=0;
    ; G$ N* W4 ~) z" d7 Q. B
  864.           unzFile uf=NULL;
    7 S8 U3 f) T9 l  ~& `. M
  865. $ b8 O1 b6 a% |6 ~+ G
  866.           uf=unzOpen("Wsa.zip");
    ( z/ m  E5 L1 X6 o) u% @
  867.           if(uf)  z/ t  l) C9 C0 R+ J: o' J4 H
  868.           {9 ^8 x  F! `- L( P$ ]
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);, a% ~3 N! b' ~$ Q" J; s7 s
  870.             unzClose(uf);
    7 o- {  U3 h# x: H/ |8 p" {
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");* `# C. |8 t- t' c: o3 f' r: J
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");( Q/ R9 j1 h. s  c: m" I3 g
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");4 ?8 A, w# u! p; ^7 F( R; L9 n
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 e% w' w* Z: g0 n
  875.           }
    ! y. [: u* g. Z8 d, ^
  876.           DeleteFile("Wsa.zip" );$ ~7 m5 v7 t9 d
  877.         }" x# E* X6 h+ w4 \4 G! l
  878. 4 O3 k  T! @2 h, h
  879.         if(CheckLocalVersion())
    $ V; I& C/ r; e- o2 G& m4 o9 [
  880.         {7 R3 _! \5 F; E" p' ^- Q
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");6 ^' y* U) g# H* B( ~0 A
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");% C& E8 F1 U8 n$ s" {7 F0 I
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    / p6 W# j1 _: W& E7 c
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 F: |. @, l- j+ B. j( q' G& G
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);- A, Q/ Q7 {3 c% |, I3 Z6 m0 J0 q0 n
  886.           dwStartUpSteps=99;
    - R) _9 w5 K. Z: Q8 D
  887.         }! e5 C, ~3 {$ D
  888.         else! x* e( _+ T( b) A5 M, R
  889.         {5 x# x2 V) m  _
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" x: e& K0 H: s+ h* j# l
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / \$ U0 L4 d" U% u" X
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ( c$ v7 R" F: n* u1 q

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

0 s2 k- j$ @6 T7 ^5 b; X9 e- U$ `; u

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-3 14:22

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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