找回密碼
 立即注册

CSUpdate.exe源代码

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

. A4 \6 u$ a2 ]4 T
  1. / RevApp.cpp : Defines the class behaviors for the application./ K( j' ]$ {" r. J* L
  2. //
    - ^: s$ ^; w4 R
  3. $ Y& {4 G% p  X5 Q2 N% j4 o" a
  4. #include "stdafx.h"
    ! ~8 C1 B1 `- E0 @. c
  5. + p4 O, t4 N# H' p8 h3 g1 \
  6. //#define UNICODE
    : Y3 w! U* J- M' \; G
  7. //#include <gdiplus.h>3 B- e5 E9 x- H$ R' |
  8. //using namespace Gdiplus;6 {4 i) R% \8 N: ?! y1 U* O

  9. 1 X, U8 N+ w8 y& v) ~1 Q
  10. #include "RevApp.h": o. m  {( E2 P
  11. #include "RevAppDlg.h"* E8 U8 |: `" ?7 u% k- u. x6 N2 H

  12. ' g6 E+ }7 ?4 q
  13. #pragma warning(disable:4786)! Q- b! V9 H: V0 F3 Y
  14. #include <map>
    5 g8 p* T7 k$ ^, g" B# H! f
  15. #include <list>$ s. t7 D1 d( B2 i  f
  16. #include <direct.h>
    3 t  m! Y1 i+ [3 `! g4 d
  17. 0 Y! _8 b8 H1 G; F0 {* Q
  18. #ifdef _DEBUG/ A6 D0 R0 e" P( H9 ]
  19. #define new DEBUG_NEW
    3 a: C* {- B9 u1 ^) w  q- e( S0 {
  20. #undef THIS_FILE) ?, H  i5 x1 D  O" x0 c4 _9 r. w
  21. static char THIS_FILE[] = __FILE__;
    5 ?2 p+ i0 B. f1 b9 |, I& n
  22. #endif- E: A! E1 i( k  \3 k7 S
  23. #include "SkinResDef.h"( @: L" o" |" J' \: h' U
  24. #include "ChangeBG.h"
    & H+ h$ a3 R' z3 J
  25. #include "AFXINET.H"
    # U# v' l* Z' Y. \

  26. 1 K5 G+ u- g- K7 G  c7 U* h! y0 J
  27. #define TRADITIONAL_CHINESE 04 u* W; j7 K" E: \6 T8 v: C; S
  28. #define SIMPLIFY_CHINESE 1
    $ @) B2 z8 s! ]/ @8 l& i% Z  N: |
  29. #define ENGLISH 2
    & o2 ?! ~( G3 P' x
  30. int m_iLanguage = ENGLISH;
    6 P1 e. K3 J( X# c3 d  Q  [
  31. /////////////////////////////////////////////////////////////////////////////
    ' \# M: e" d. G0 R
  32. // CRevAppApp8 ]# ?; G( s! o: ~! c

  33. # U! E0 e/ C+ k. k
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 i$ p# B( G3 g" P5 ?) r% U% x
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    2 e1 [0 `) A6 x* g& t  r- d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    # t4 p- \5 ~* @$ T9 d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 i2 v+ [' {5 ?  W. u3 k
  38.         //}}AFX_MSG" ?& |7 S$ c& ?( C
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    . j# {" S7 r; ^' ?( Q
  40. END_MESSAGE_MAP()
    + w: Q  L  E, {

  41. + q% ]0 `2 ]( y# M
  42. /////////////////////////////////////////////////////////////////////////////% b) G& @: Q. _
  43. // CRevAppApp construction9 y/ X7 i3 m  d6 Z* o6 H
  44. 9 q/ t4 ^- e) P
  45. CRevAppApp::CRevAppApp()
    & Y- v! ~" E+ h4 h" F2 R, A8 u+ p
  46. {
    0 s: q5 H' e0 z* Y. }- k
  47.         // TODO: add construction code here,
    7 i/ \8 C" l8 l; ]1 c1 _
  48.         // Place all significant initialization in InitInstance, |0 l" o7 h0 r" [' b! @- a
  49.   bDisplayIsBig5=FALSE;
    # _" y7 L" q7 `/ r/ O  |
  50.   bRestartUpdater=FALSE;& n6 u( @1 q: S6 q' M
  51.   bFinishUpdated=FALSE;6 j/ e8 D  E# m6 w
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    * M! E+ \% l& a; i4 p
  53.   InitChangeDataBig52GBKS();$ h. p! G5 k/ f- u  j( W/ g
  54.   InitChangeDataGBKS2Big5();
    . C& @# b( M/ ]; z
  55.         //6 l+ y; W+ M( ^4 l
  56.         bClickRunExe = FALSE;
    : ?7 |0 p. \" @
  57.         //& j& i3 \2 w6 _
  58. }& S" }  L0 q  x% r) K8 s, v
  59. ' T% j( M6 m0 x* e0 L7 ?% a3 |
  60. CRevAppApp::~CRevAppApp()
    / J1 z5 m+ b# U$ m
  61. {3 f3 ~3 `+ w7 e9 b
  62.         // TODO: add construction code here,6 r/ m. ]) S" H% u2 h
  63.         // Place all significant initialization in InitInstance
    % n. I& D$ x! ?
  64.   EndChangeData();6 u% _- {- ?# r" y8 r  d
  65. }( s) G7 @: i6 ^3 N; W# `/ a* M2 C5 g
  66. ; q5 ^9 j5 @, O% K$ g- Z+ i
  67. /////////////////////////////////////////////////////////////////////////////$ B; G* b- ~& V) }4 h! F% l
  68. // The one and only CRevAppApp object
    5 C% q6 a( c5 |$ C" R7 _, ~
  69. 8 q, O! M6 C" g" O# r0 ~1 J
  70. CRevAppApp theApp;
    , s5 i( k4 L) u5 d9 e( ?4 k
  71. 3 [( e: V/ `) P
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)+ Q+ u. B+ ]- @& N( L
  73. {$ [; O) K/ \# t( L3 f, z. }
  74.   int iEOF=0;3 b% H/ o8 W: P9 |+ W( ], `
  75.   char szTempName[MAX_PATH];/ P; I  f& L( F& u% a6 n
  76.   *szFileName=0;; h% C6 T, e3 q; l7 B- E
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 w2 _+ `! E1 C# g3 |) z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    4 d0 v( J! u9 w* T
  79.   {
    " I. y+ G8 z& F. S8 X
  80.     strcpy(szFileName,&szTempName[1]);  q& k1 Z! i8 w9 N3 Y& N, c
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' X3 d6 x# Q" n: z
  82.     {
    # g0 _; l3 k# j9 r: i5 X
  83.       iEOF=fscanf(fp,"%s",szTempName);
    $ s! P$ `0 E( `! s; u
  84.       strcat(szFileName," ");
    4 X1 `- T  G* y0 L* `; r
  85.       strcat(szFileName,szTempName);
    : H. B/ g. ~  ?2 n( S3 r$ X
  86.     }& |; q2 u5 Q6 s# ?
  87.     if(strlen(szFileName)>=1)
    % L3 g; I$ `3 G: |! \& O' u
  88.     {  G$ q! Z- G- f0 y
  89.       szFileName[strlen(szFileName)-1]=0;
    * p3 S! G6 z% v' I' [- @. [! T
  90.     }
    . Y* @' t# ~- }, s% O7 N% k
  91.   }# F4 Y5 @; m! u- ]6 v
  92.   return szFileName;
    " H$ b( b, X: C2 J8 O$ o2 |0 U
  93. }
    . g- j" i# i6 h- T! Q
  94. 0 Y- g! W0 d6 ~! X# O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 x7 N+ I7 V( w( f2 j/ E; H
  96. {  g+ q6 |2 _& I4 U& M1 b
  97.   FILE *fp;
    9 \& \9 D' I+ E. u; i. x$ @
  98.   char *key=NULL;
    . P2 t0 L% k" B" ^
  99.   char version[MAX_PATH];
    4 M/ O3 T1 o$ j- }8 V+ Y
  100.   LPUPDATEFILE file,olds;
    , c! Y* _* U/ H9 N  c
  101.   std::map<CString,LPUPDATEFILE>::iterator p;8 v  _2 |; [4 b8 O6 s2 x: ?

  102. ' ]: \) J, r  f9 ?! C5 `2 r
  103.   UpdateList.clear();& n8 v: Y6 U+ _' W1 m& p6 {0 @9 r
  104.   UpdateFile.clear();
    * s. k; n; O; g8 i7 _; Z( `
  105.   if(GetFileAttributes(filename)==-1) return false;
    - y. X/ m, l1 G) R, ]5 Y* @
  106.   if(!(fp=fopen(filename,"r"))) return false;* ~1 [, O, l! W
  107.   fscanf(fp,"%s",version);
    1 Y. P  a: Q# i+ i
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    $ m! j2 v+ f% |' k7 i: V+ p4 d+ j
  109.   while(fscanf(fp,"%s",version)!=EOF)% w( t9 s6 W( ~( g+ B
  110.   {" x; |5 I% D" \7 ]$ \
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " b% a7 g, P9 f) n( X
  112.     fscanf(fp,"%s",file->path);2 Z$ U& V3 N; l% }1 v
  113.     ReadFileNames(fp,file->file);
    7 C. n: @( H0 d9 @
  114.     strcpy(file->full,".");
    0 t4 b% e$ v# Q# m3 E' _6 E
  115.     strcat(file->full,file->path);/ {" ]# ~- e! U1 Z. D9 g
  116.     strcat(file->full,file->file);) k0 E+ z8 F$ ?- Y! W
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    % z2 Y4 L7 N. M' \' [2 s
  118.     {& [; O5 I$ |( q8 R% x, Y
  119.       file->vers=(float)atof(version);
    6 T$ o, y; a& ~% |7 C
  120.       UpdateList.push_back(file->full);
    1 P8 o/ _% C% y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  [1 l5 |; V+ A! ]7 ~1 m; E2 E
  122.     }8 W$ [( v6 y$ T9 M0 k
  123.     else9 s' t* {" R& q* x! }
  124.     {- b: y5 x, P5 E& v# R' v
  125.       olds=(*p).second;# u$ E* i$ U) N5 [
  126.       if(olds->vers<(float)atof(version))
    # _, ]7 ?6 f7 q' D, j
  127.       {- n+ Q9 a: @+ s0 A/ q( g  b9 M$ ]
  128.         olds->vers=(float)atof(version);
    0 r5 M3 O% y& e8 x0 |" N" V' g' ^
  129.       }
    . r* i0 m% F& d$ v- {
  130.       free(file);* ^( j5 B0 p- F' U4 E, O9 e
  131.     }
    2 m0 N' w3 G& `% q+ r
  132.   }
    2 q' I, V9 k' I3 H. q: B; u1 Z
  133.   fclose(fp);
    " ]5 u& B+ C; h) U# M6 v# X
  134.   return true;* P+ H9 @% _+ c; H9 r9 b, P
  135. }* X, T# O4 y! ^4 k

  136. $ @% r) B( k9 ~9 F$ U5 C* J4 E
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath), U7 i& y4 C7 `( B* H
  138. {" k2 C; f- R% A0 I- x
  139.   TCHAR  szFull[MAX_PATH];
    - I7 j* {' j2 M2 Y$ g3 F
  140.   TCHAR *token,*inter;
    6 P, P! O- f" e5 B' b
  141.   *szPath=0;* d  n; `$ b+ q# l
  142.   strcpy(szFull,szFullPath);
    & x- t' T1 c4 J( B
  143.   token=strtok(szFull,"\\/");
    7 ^8 s1 Z  E4 G2 g
  144.   inter=token;
    7 N3 O3 [2 }7 Z7 \
  145.   while(token=strtok(NULL,"\\/"))
    ' o6 g% D1 ~& s
  146.   {
    1 v* j( X, D: ~; h6 a
  147.     strcat(szPath,inter);
    " U: x) u2 r- ~) P/ B2 Z
  148.     strcat(szPath,"\");/ f, N$ e2 E. j, g* g
  149.     inter=token;, f( K6 l8 A" c$ W, u+ o
  150.   }$ ?0 r! M( s" h" z
  151.   return strlen(szPath);
    $ N: ]- X- v) b& H' X5 T% v1 J
  152. }$ ^. M; P* n' m, c, ]7 X. `/ u& g

  153. ; i4 v4 Z2 K' w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). m, P5 `4 T' Z  s# t: ~" ]1 @" S/ a
  155. {
    4 w# z8 }3 H+ ^6 d2 F
  156.   DWORD attrib=GetFileAttributes(Target);
    ) k) g$ x0 B" z" Y7 J% q
  157.   if(attrib!=-1)' {& J9 Z1 w7 l+ v6 V' R
  158.   {0 H; E, ~3 h. ]: w1 `
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# s* [3 W1 _6 g; u" n" ^: T( a3 [- e3 I
  160.     {
    , P- s" Y) g0 ^3 r- E- v
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    & N  M& T4 D1 `3 w# V. U. v
  162.       SetFileAttributes(Target,attrib);( o# ~7 |1 p5 j" A& J
  163.     }# C3 R0 [: _8 f7 o9 n
  164.   }$ {& f  T* `8 a) c6 G
  165.   CopyFile(Source,Target,Erase);
    9 n- Z; L7 \1 B6 k9 _
  166. }
    9 p" I: s# N  @4 [; m) w1 L
  167. ; S2 I8 @: D; k
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : N7 a3 q, u  s0 }. V8 s! }
  169. {
    & Y$ X3 E" r# C# {2 z! r4 `
  170.      FILE *fp;. f) E/ n/ X- `% \: X
  171.      char  szBuffer[8192];
    * P6 G& w) T+ x: _( Z* j) T1 i
  172.   va_list  argptr;
      X4 @) T( u% S, X

  173. / Q& a1 F0 ?8 z( N1 E, p  f
  174.         va_start(argptr,message);
    4 q9 x2 d: n/ w+ m8 Y) u
  175.         vsprintf(szBuffer,message,argptr);$ N$ f+ W$ o& X1 W+ T: L) f  m
  176.         va_end(argptr);
    # p2 F3 A+ v, Z7 X
  177.   fp=fopen(FileName,"a");- Y& O$ a9 l6 a0 v
  178.   if(fp); ~6 o# h' G  r
  179.   {+ t! Z  w6 `: {+ c  Y4 G7 b$ a* b
  180.     fprintf(fp,szBuffer);
    1 a1 Q3 F+ ^" v$ m5 F4 M  Z% K" k! l) j
  181.     fclose(fp);: |' z! e! V/ k; W1 ?
  182.           _flushall();9 B& r! f' U* `& A/ |
  183.   }
    " o0 Y9 k1 B9 H! H
  184. }6 u* s$ T# M) S  m& J
  185.   L* V& w7 W3 M+ H  l9 D
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    2 a; U- P) V; |/ a; o- P; N. ]
  187. {
    * `1 |: A1 c0 A, G
  188.      FILE *fp;8 L6 J4 P4 Y2 V
  189.     DWORD  attrib;# b0 v% q4 e" L" c# d, B. v
  190.   attrib=GetFileAttributes(FileName);
    0 w$ E7 q3 J5 F% G
  191.   if(attrib!=-1)! ~. @+ i1 |% n' G  b% ]
  192.   {4 ^; @) `* I6 _# D
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);7 D! r4 H! p# ^1 S9 C; L2 X0 t
  194.     if(!SetFileAttributes(FileName,attrib))$ H; O5 f1 w% P# {* U
  195.     {5 T1 u0 ]; W: c3 Z2 P( G
  196.       return FALSE;
    ; V5 H6 C( ?; E& r3 }8 }; u! m& o
  197.     }& c: `, |* |6 J; d8 ]' s
  198.   }$ e6 r( |' j2 t5 K9 ]! ]. Z
  199.   fp=fopen(FileName,"wb");( d7 Z8 |; O% S- w) z
  200.   if(fp)0 _% s: T9 B  ~) F
  201.   {2 B( U5 R& r6 }
  202.     fclose(fp);  e3 E7 S" J$ L: F! |; `5 ]
  203.   }, E& A% P9 ~% R7 i& o) _
  204.   return TRUE;
    ! N" M2 W$ @. t& F8 k7 M) n
  205. }2 l! J2 y% s; E1 r1 I, V

  206. . h, `; l. b- `
  207. BOOL CRevAppApp::UpdateLocalVersion(void): [& `2 g& w1 i% z# W6 b! m
  208. {* H2 w6 |% ~$ Y1 P8 }7 z/ N
  209.   char filename[MAX_PATH];
    3 z) m5 f, r# o/ ~
  210.   LPUPDATEFILE file,olds;
    9 v4 o8 I9 H) P( i" i* U2 [* r
  211.   std::map<int,CString>::iterator i;
    0 z8 V/ M" f3 S, W9 ^6 r0 N
  212.   std::map<CString,LPUPDATEFILE>::iterator p;7 a$ H& N9 S5 k2 i- J8 c; z; T
  213.   std::list<CString>::iterator l;
    ; m( F. K  ^6 ~# `

  214. . Q/ ?3 G1 Y- P) \) z' g
  215.   if(bFirstUpdate)
    " l( C4 ]6 U; [/ W
  216.   {
    3 I* Y- ^2 ]" {' P* N$ L+ `
  217.     dwCurrFile=0;
    / }) }3 U. v/ z& f  e' A4 x
  218.     bFirstUpdate=FALSE;& e6 D7 T* w+ B1 a4 X% s# K* ~
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 e* d% V5 v6 Y# T. f+ g
  220.     {
    2 k" K3 U$ x, I2 G1 [3 U; W$ l% |1 r3 A
  221.       dwTotalFiles=UpdateLocal.size();! S. j  M* u+ [/ S$ c' A( W
  222.       dwDownLoaded=0;
    $ l; j- ~) M3 q$ O8 T
  223.       bSilentStep=FALSE;
    0 }# i2 H1 a1 A  |
  224.       bCompressed=TRUE;8 y+ r3 m1 H2 a1 k7 ]
  225.       strExtLocal.Empty();
    ( k6 l4 ?" G' ~7 L+ A# t  ?& b
  226.       strFullName=(*i).second;
    7 K2 F5 e: [+ @  [; M
  227.       dwProgramState=AP_CONNECT;
    $ n" C. w+ }! N, C3 Z& P. ^
  228.       return TRUE;
    8 B" a* n9 @+ ~* Y6 f
  229.     }
    : ^+ p. o& Y8 m3 ~6 K/ M
  230.   }+ P2 S0 W* a% g. S
  231.   else if(bRestartUpdater==FALSE)' ~; g) G" S2 v. o1 {
  232.   {% }# N4 t% r6 |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 g4 G# [. i0 P3 O; |, m
  234.     {
    1 I8 L) h% L/ g+ |# Z. Y! r+ R
  235.       file=(*p).second;
    7 K1 n  I" f& u
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- h/ \; Z% h8 e/ e9 h
  237.       {
    ' {0 N) ~4 V1 B. d/ M+ p' \: c
  238.         olds=(*p).second;
    $ [' K. z) ^* x& r0 B, {
  239.         olds->vers=file->vers;
    ' }  ~; k4 i  c3 N3 u# [8 N9 |
  240.       }# I6 Y! W' P- g. U9 u& t7 I' [( U
  241.       else1 n  I: E" c! v, z
  242.       {
    & L! G1 N' ]1 D0 s+ T- |: D6 R
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
      u4 ~3 P0 i, D8 w4 s" G
  244.         memcpy(olds,file,sizeof(UPDATEFILE));. a$ j- U( \+ V- {$ H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . ^* N% s+ P( ]8 H' D+ t; }
  246.       }6 R( y9 F: }! r5 _
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");' ~0 C" s, x; [) d4 Y) J+ A1 }
  248.       sprintf(filename,"(%s)",file->file);. J5 I" z$ X4 [% S
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);; q  b- A9 T+ M3 T6 H: Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }* S, p2 e" f* q4 o0 [  Y4 s
  251.     }
    $ M2 o' Z$ u! o) {) G, I, f! Q3 x4 x
  252.     dwCurrFile++;2 |# Y( A$ m( X8 H. L' w
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    8 t; B9 E6 k4 T3 E: r. m
  254.     {
    : O- O' U, A1 ^$ u+ \$ ^
  255.       bSilentStep=FALSE;0 C2 A3 S8 X- K; c1 U
  256.       bCompressed=TRUE;& M; u, B( m/ n/ q
  257.       strExtLocal.Empty();
    4 g! q0 c0 K8 @7 a$ L- Z# ?+ |) t
  258.       strFullName=(*i).second;
    & _) ]$ a3 A, N
  259.       dwProgramState=AP_CONNECT;, ]" H; I8 G6 n: s! w
  260.       return TRUE;: n( A8 l6 }" Y7 v. K8 U
  261.     }, y4 }5 |# B1 U
  262.     if(!bRestartUpdater)" v8 V3 i5 ^% I; O; V& Y
  263.     {
    7 s# s9 h6 g9 A; C4 n! i
  264.       int iCurrSize,iFileSize;# h) c9 y4 x% @
  265.       iCurrSize=0;3 P8 s  U# X& x' i
  266.       iFileSize=UpdateList2.size();: w+ g0 S: f' x- X+ n
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");; j1 |9 p7 }( B+ x1 N6 S
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * q7 m, |* a7 Z/ T* \6 C8 V
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    . I' u' K: `% v: S% O
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ F2 m8 {! `0 T) T3 I" \3 w
  271.       Fclearf(".\\update.dat");9 M1 u: ?" W0 p* s' v
  272.       Fprintf(".\\update.dat","Bloodyf\n");9 q2 l# e) R% F4 M; M5 d* C
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " Y% g1 n$ b9 h$ j- S  T
  274.       {
    # `9 F6 s9 v" [, J1 _4 b- s
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())% z$ H" @* j9 \( D! Z  s
  276.         {
    , B; ^7 R. N! s; m- U
  277.           file=(*p).second;& Q, z* G/ S+ y3 g  r' M
  278.           sprintf(filename,"(%s)",file->file);
    % o" B8 x* E9 D! B' I1 @
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' W) D, B8 T, ]0 R. l1 T
  280.           iCurrSize++;
    " O" `' A. g% w$ @& c' _
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . }# I: ^/ P5 L  ~, b6 u  o$ L; M: j
  282.         }- `- Y9 A  |( U9 {; l
  283.       }
    ) B, U4 [; F! Q: L" k0 Y1 c" w! R
  284.       unlink(".\\update.txt");
      x( p$ u& R% Y1 ^% k$ S. o+ k
  285.       unlink(".\\update.tmp");( n' J( O0 n$ h$ V9 H  y
  286.       Fclearf(".\\checkversion.dat");
    " W, S- T4 }3 ?6 k, I0 X
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);- I1 R2 G( J9 W6 M" }+ {
  288.       if(UpdateLocal.size())3 p& O9 X& r8 ?
  289.       {
    " z( `2 [0 |$ n. M
  290.         UpdateLocal.clear();
    1 c$ _' e7 r9 J" P* R- n
  291.       }
    . J" Z4 X4 U* j* Q$ x
  292.       if(UpdateFile3.size())
    ( F& k) ]; Z" ~4 @
  293.       {, Q' l! L5 \$ l, h3 J1 t4 P
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ o3 s1 p& Q6 x; _: a9 _
  295.         {
    9 F* M! C% D" b
  296.           file=(*p).second;9 G9 y  e- n: C3 ]  _/ |4 K3 @0 v
  297.           free(file);
    0 g2 f  ]* J3 a# t. I* y* \4 U$ T' a
  298.         }
    - X. u8 V% W8 F( d7 N6 T% {: z! p
  299.         UpdateFile3.clear();: B1 A, d9 r  C( |, }8 W
  300.         UpdateList3.clear();* n0 Z/ v/ r0 \; a4 P
  301.       }
    ' e- Y3 [4 r- j) ~  j
  302.       if(UpdateFile2.size())
    # o/ v& W2 o, ~7 I0 z
  303.       {
    - c& J7 S/ s( L4 K+ K2 x- `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 I4 F  E9 y3 O! s1 @* v- B
  305.         {
    & P+ V) T2 u% y) A+ I- F1 M
  306.           file=(*p).second;" L7 \* g9 K; R6 P9 P
  307.           free(file);$ C+ |1 X5 e/ s
  308.         }
    0 P1 T3 Q* M' q' B1 n
  309.         UpdateFile2.clear();- W( n( z- y! Q# J9 V3 I; S$ `7 g
  310.         UpdateList2.clear();
    1 J3 r, D2 M8 E4 h1 O
  311.       }
    # a3 k. u0 c' s) R2 n. m8 A
  312.       if(UpdateFile1.size())
    + _# L% G& k$ D, O& y0 P+ Q
  313.       {5 @" h' D) G: [3 l/ \  d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ V/ U; c8 D- {' r; J0 S+ e
  315.         {
    ; _) e  {- }2 x% r, V: T/ d
  316.           file=(*p).second;
    3 [9 ]" w7 t6 }
  317.           free(file);
    ! _8 x5 ^# _4 L& a; z7 L+ P
  318.         }
    ) w9 T% z( ^1 v+ h. K' F! Z
  319.         UpdateFile1.clear();
    * B3 Q! D# x7 V
  320.         UpdateList1.clear();) {" G: {5 D( p
  321.       }
    & k1 F4 i# L5 F: g* S
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    4 g7 k: B+ N, Z
  323.     }
    1 \; p  @3 d- `# y1 U, S8 L
  324.   }+ G2 b- u5 c4 `7 J0 B
  325.   return FALSE;
    : B# m! M# `/ t3 B/ {
  326. }" f: S& G4 f- v1 X

  327. 4 O5 c0 w+ g/ d6 b) V5 {; L# v$ h
  328. void CRevAppApp::ClearAll(void)3 x, R, w1 T* m( o* D' [+ M
  329. {4 A& _% T7 u7 j# U" ], O
  330.   LPUPDATEFILE file;
    ' H( ]: K  n" q! C9 U7 W
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ Y+ p  H8 p0 A% R

  332. / j. p7 y: ]& h8 d2 g* \0 p! z5 n7 F
  333.   if(UpdateLocal.size())
    - a: F5 k" w9 A6 J, r: F
  334.   {
    ; n' i- c% H: c, B& [$ V7 W4 o" @
  335.     UpdateLocal.clear();0 w$ i8 [4 L# |5 g! b
  336.   }
    5 x, B1 Q5 s& ?
  337.   if(UpdateFile3.size())' {6 T) l. T0 H& [4 p) K# I
  338.   {
    0 s9 {8 ?" @7 ~2 ~/ l
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)! U$ W2 R. y  r1 Z$ M" `1 g
  340.     {
    4 j% I# z7 c# w$ J+ `
  341.       file=(*p).second;
    . A$ Q+ P: Y( j7 I2 r: p2 E+ O
  342.       free(file);
    6 o7 O9 ~1 c' V8 e0 l
  343.     }
    2 S$ Z$ t: o. n
  344.     UpdateFile3.clear();
    # u" E$ I9 Y/ S6 A8 G% L
  345.     UpdateList3.clear();4 h4 G- V. P; T. W8 A; Z
  346.   }2 q  O: p  X$ }/ Q. q
  347.   if(UpdateFile2.size())
    : i' I2 Q. k5 D
  348.   {) v1 I% c: m8 I( n1 Z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " S. B% o* I- ?% V
  350.     {
    7 j7 x: Y; w2 p, c" P
  351.       file=(*p).second;6 f" y) d: M& f6 ~
  352.       free(file);! C6 L8 U! ^' x" M
  353.     }; Z- G, V5 w, y. A
  354.     UpdateFile2.clear();
      U5 G% A9 U8 d( r2 T5 t( P6 C3 Z# a) g
  355.     UpdateList2.clear();
      q: r! o1 I3 z4 w
  356.   }
    * B4 I* E# C3 B+ o( h
  357.   if(UpdateFile1.size())+ U: X  s. i* S* u, w9 G5 ~
  358.   {
    % X6 a4 t2 N7 b& d$ V+ `5 H
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 V* \) f) q% _) i5 q) O
  360.     {
    ! s2 c1 {% h; e) U! @
  361.       file=(*p).second;* |1 n3 d' v0 B! O
  362.       free(file);, y/ `1 N: F8 h. n+ `
  363.     }
    ! I4 k$ w  z( c" P& H# ]0 y6 P
  364.     UpdateFile1.clear();2 N1 r1 ^( s9 _
  365.     UpdateList1.clear();
    ( ]) }, _% w8 a$ h+ ~
  366.   }: X5 a; p9 C* }6 n1 o& t6 e1 u
  367. }  8 x( A1 }1 b% {. ]& q' g0 T
  368.   ' G- T' R" Y6 P9 E) f
  369. BOOL CRevAppApp::CheckLocalVersion(void)" q+ B" M) U# @
  370. {
    : f+ i' J3 q" X" P
  371.   int c;
    & Z- n0 J! M5 n
  372.   LPUPDATEFILE file1,file2;! F. `- J, |% P1 q5 v
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 @& m: Z2 _3 Z! `9 Q% C7 z
  374.   std::list<CString>::iterator l;# i' k4 F( C) n; J

  375. 8 A/ o# J. W5 B0 Z5 D+ x9 C( R8 Q6 I
  376.   UpdateLocal.clear();  j2 B4 \6 A3 y. H% t
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    1 d  E  K- E2 ]. ^7 ^" K& l1 M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& S8 k7 g/ z7 `% ?0 }, L( v/ d0 n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ; x) H8 [) i! L6 D6 \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);( B3 k  w; X8 v( i3 [. d! W; k% L8 D+ v
  381.   if(UpdateFile3.size())& S4 y/ X9 ~: n' S" |0 d
  382.   {) T. l  _& b) [4 S( q1 @
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - P* F) S1 j* C1 G8 n  n* h) G; b
  384.     {8 C7 s3 o4 `2 h4 f
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! V' {; }5 |, {+ i
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    # p1 X; ~, B6 A/ }' {4 d) ]: l
  387.       {
    9 h' D3 P: l$ C( S
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! m( x1 Q1 I: U2 P; I( P: n2 d0 ~0 G
  389.         file1->vers=file2->vers;
    3 A( B1 J( l* e/ }4 l# I& @  \; |! ^
  390.       }
    / y! o3 N  a# D% d' ?
  391.       else
    % A% @* L( {' j" r( V
  392.       {
    1 b* K0 h+ Y; s1 O9 Q* U0 u+ b
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + B3 N; H* |, j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));5 F8 G; f+ ?4 \7 t& u
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));0 O- ?3 o, B- O* Y, L$ ?
  396.       }1 o: f. J& ^' }' }
  397.     }
    & X' s* Y' v: O, _+ b5 U" j& K
  398.   }
    9 ~; _4 x  @9 r2 L8 z
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++); a; E2 }9 H" C5 {$ B! ]
  400.   {  x, W/ L& p& J9 |0 P# U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())0 K8 T. @& S& M3 ^  W
  402.     {9 J9 U4 i% R. n8 p
  403.       file2=(LPUPDATEFILE)(*i).second;
    % \& t$ ]1 K2 c/ T4 Z3 m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      P! G! L2 y# Q8 Z3 x) h9 B1 n: r! {
  405.       {
    ( v7 y2 v3 w) T6 G' o  o, @
  406.         file1=(LPUPDATEFILE)(*p).second;
    $ x; q9 @2 ]% Q
  407.         if(file1->vers!=file2->vers)
    8 r1 e3 H' D+ o2 A$ U
  408.         {
    + M# x8 K' V3 W0 P9 j2 _; n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));. \5 v; y! N0 d. N3 ~
  410.           c++;
    ' Z% z- d& _! f1 ^: H# z5 T
  411.         }
    : `: q/ p3 [+ Y4 v, j  Z
  412.       }$ p- h5 q( r8 }
  413.       else. O2 ?9 u6 N6 t) i
  414.       {7 ]7 @. O0 ?+ R0 H$ E3 _
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    8 o1 v* T( a/ _4 f* S
  416.         c++;
    ' s* g8 n  M) U" v& I1 X
  417.       }
    ) V5 T& Q# |. @, @) N' u4 O9 l
  418.     }" t6 E2 S7 W& x/ w( M
  419.   }
    & {# [9 ~/ r( k! j' ?- }
  420.   unlink(".\\DownLoad\\update.txt");9 Q2 r( O) p8 U6 q5 F
  421.   if(UpdateLocal.size()) return TRUE;$ E8 s) R* P4 ^# {% Q
  422.   else                   return FALSE;" v4 g  X, r! V
  423. }! u* U: b; g, G+ k
  424. & k" R# R: x1 \7 [% p( O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    # M& A9 y" D8 ~' Q/ r# ]0 L  q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    0 e2 L9 x" G1 E1 ]1 X" y2 Q. K  W
  427. 6 q" k5 }, _) W
  428. 3 B, q5 L' }8 o1 u1 b4 k: @- v, T
  429. & V9 Y3 `7 g: Q
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)# c: }# ?$ T% _5 W0 X5 H
  431. {
    $ s' R, u8 t) A5 @7 @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 y- S$ V8 @/ I1 s' P
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 _& K0 C6 P7 B
  434.   {
    - x9 `' l. \$ E7 ]% d  N; f( ~0 K
  435.     char szLanguage[50];
    , c% X, x2 J6 \
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- W0 k! t' a2 P  c& b+ a
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 f& B: t5 x! v: F& ^& s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;1 s$ k/ |/ a5 I& @' I" R
  439.     else                                   m_iLanguage=ENGLISH;
      e& D" J7 h$ w
  440.     char szRegister[100];% i# M2 C2 a* i9 M3 r
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    $ ]" s9 b' B) e! m$ e' D, w3 d' X$ ^
  442.     strRegsName=szRegister;
    , q3 l6 m; \" J
  443.     char szPatchURL[100];
    ) ~; F+ X+ e3 `
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");2 m/ V, S4 O. s1 ]/ h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);( A9 C: \# l+ K7 D
  446.   }! Z6 A9 k0 x& e: w& q/ K1 X6 Q# h& w
  447.   else; t+ `5 l  b1 b
  448.   {
    & l; h" Z. ^3 i7 |
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & l1 [% R0 {: ~: P3 _/ r
  450.     strRegsName=DEFAULT_REG_URL;
    6 A, v0 o7 L1 S' J
  451.   }" i  B0 F0 y: [8 P
  452.   if(GetFileAttributes("hosts.ini")!=-1)* _' b1 l) [- ~0 l+ H
  453.   {2 Y. i( |: u) I
  454.     char szIP[50];
    # `% Z; P8 U9 {4 @0 @- L
  455.     char szDIR[300];
    / Q; s. G; A2 \, P. q
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))7 I; k' A7 Y) ^3 p! @% }
  457.     {
    ; L6 e5 c- }# i0 T% b
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ( j3 l. J: _$ j5 z$ B, @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ e' i) q! X- D& ~; S1 r
  460.       strHostName=szIP;- O! T5 @* W: t/ \: w
  461.       strHostPath.Format("/%s",szDIR);
    ' J4 S2 ?: y, Z  q
  462.     }& O" u5 H+ f# a% E$ O  V- B* j
  463.     else
    2 ^* w' @+ e( o, @, J
  464.     {
    2 g2 }. u) }; W
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 i( n5 Z  V9 v
  466.       {' B$ _) ?' m" d" @
  467.         char szLanguage[50];
    9 P4 U1 g' I2 s5 W5 T9 U' `! K
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    - p% [4 o. R+ F& ?. W$ I
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    : @+ S0 v. z  A  B( t5 V
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;( \9 L! U5 i  a( n5 g& a. n
  471.         else                                   m_iLanguage=ENGLISH;
    3 O" \* w- @& S6 f
  472.         char szRegister[100];4 J! @0 L$ p7 _
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; r; t* b* L* s. X( o* H; G
  474.         strRegsName=szRegister;
    8 A# {5 A' y* h
  475.         char szPatchURL[100];3 U' J  T9 T( P1 z
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 m1 L% A% p! [$ Q  @# o* L# ^
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    $ k+ ]" m8 M- H- C% I, R
  478.       }
    6 {" j* u+ n8 D
  479.       else
    # |2 g6 |! P- C& I( A
  480.       {7 s8 H( A6 h  z% |! \3 L: ~
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    . W! x" h0 R0 s2 S: B6 r7 e
  482.         strRegsName=DEFAULT_REG_URL;# k6 o" @+ ^5 a6 h! m* w0 S% f
  483.       }& L# V$ x5 m, J6 `; w6 r, B5 B
  484.     }
    3 f/ v5 k2 x8 v3 O- l2 D
  485.   }1 V2 Z+ i5 `! @  p. {. b
  486.   return true;: }& F, f  H6 [4 k! P" `* O( O- |
  487. }/ D% m" h5 S5 B7 J, r
  488. ( l/ ^. o! h; Z9 Z
  489. #include ".\ZLib\unzip.h"
    # {; E3 \/ Q5 O6 Z) n, m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    6 k- G/ d9 Q  R+ o) c) {
  491. /////////////////////////////////////////////////////////////////////////////+ d, ?, ^% S: v1 F
  492. // CRevAppApp initialization
    & b6 z6 |7 S* A4 p
  493. 8 `& M" K- l  A' ^7 E3 ^5 U9 F
  494. BOOL CRevAppApp::InitInstance()" x0 d- w5 Z" A6 X
  495. {2 Z: Q1 P7 E/ l9 X! N
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 j8 F& z( `" C" K4 B6 X

  497. ; l: }4 q$ D2 {8 k/ C4 a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    3 g. Y7 t6 ~3 L" n
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    + O8 B! J8 o$ @5 k, S+ K/ w
  500.   {
    ( B% E: H0 ^' j" F8 J; C) T
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");- M* o0 @0 W2 {& w% V7 }
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    : D' ]4 j( ?3 |- w1 S4 L
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))6 r8 p& p0 ~- N5 r
  504.     {& u' {3 ?3 A  Y! ?4 h( a5 e, c9 T4 E
  505.       strcpy(szPath,szPathTarget);1 C7 j- Z/ O; D5 W  n# D4 n
  506.       SetCurrentDirectory(szPath);# s+ x- Z- D4 j1 v! t# l) ?' p+ A
  507.     }
    ; T7 f" F" |* W6 K" K4 S. c" V: f
  508.   }6 T4 r% [: S8 p- d( y$ g$ Z' D
  509. #ifdef _DEBUG, D( O* I! ~& f
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- K0 L0 W, q% X) e; l' G
  511. #else
    , {7 E- _9 M  B2 m( x4 Q+ c
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 i+ w" C+ p4 W$ Y4 y
  513. #endif1 M  W' [9 U4 m( ~6 z
  514.   {) f: P& E- G+ x( Y5 q
  515.     char tempFileName[MAX_PATH];) R  Y) b% U7 l; `; `8 [
  516.     strcpy(tempFileName,szPathSource);
    $ Y% I2 c( a, [- I
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 T: j* b2 b8 \; [8 k
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    " J& l3 L+ o- `& U
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 \* e5 c7 s- Y  E# R; A+ ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);3 i+ q1 I% t+ k! _$ X7 @
  521.     return TRUE;: I: m/ }, n9 V
  522.   }
    . F  \$ l8 ?7 z1 B; a9 e1 C
  523.   // Nuke 0118: Delete run.exe3 r) ^7 b- y0 n( d( p+ D
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) _0 R! z! q; w0 o) Q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    & ]( S/ j' q+ M" A8 y
  526.   if(!ReadCfgFile("Config.ini"))
    ) U! b) w& C0 h: ^% i
  527.   {
    4 J" V+ `9 M8 x4 \% x
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    " X& r: @8 P/ z9 K; X" f. }: d: c0 L; I
  529.     return TRUE;
    6 q9 p# |: K0 j% l9 F- U! p% F" u# V
  530.   }
    . n; p. a$ P4 K- p+ H
  531.   HANDLE mutex;
    * a4 @5 k7 q" d6 n# k: t
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    # m# t7 P6 B  f% Y+ F
  533.   {
    " T( f* Q/ w4 U) w( R
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)4 h4 V- L1 h+ P. m* n5 ]1 d
  535.     {
    ( B( O& r* r# [  L  M8 `* J4 u- m
  536.       CloseHandle(mutex);# h4 c( c8 B+ C" ?7 l: B! h5 D1 w; ~
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);- z' T& K8 o, |' T
  538.       return TRUE;
    0 ?  ?" s$ v, v( L# S5 W
  539.     }
    : z. C$ G, L3 X7 F3 c
  540.   }  6 |2 O: V0 |+ l4 X0 T* E7 _0 {
  541.   CloseHandle(mutex);
    + L. k5 O4 M3 Y+ X

  542. ; V, P! D: O( T! z4 n9 S
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- s2 s+ O1 m/ Z: S+ }. W) }5 G6 B6 W& L/ T

  544. 0 x( A  w. Z" O7 b) F! e
  545.         AfxEnableControlContainer();; c5 o: L4 D- C

  546.   m. F: g0 o6 C/ A+ G2 f  h
  547.   bCanUpdate=FALSE;
    1 n% t8 j; i( N
  548.   dwStartUpSteps=1;& k: V) u6 M& p! Q, P; y3 O  ], S
  549.   dwProgramState=AP_NOTHING;3 U. s! g) T# \: z4 y9 ?& W/ }

  550. 2 U3 f2 d% U1 A9 ?6 u8 I+ x) {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    8 t& W, l) V2 d8 g  v' k" [
  552. " I% ]* x8 I4 c( k. V8 D' Y/ o
  553.         // Standard initialization
      x2 e. e3 t& g% y% I6 f( ?
  554.         // If you are not using these features and wish to reduce the size
    / K' n# C% G# I/ D
  555.         //  of your final executable, you should remove from the following
    + U, X2 h/ D- u
  556.         //  the specific initialization routines you do not need.: V$ ]% g$ q0 `! h5 U3 b! t
  557. ; w  p- A9 j8 B
  558. #ifdef _AFXDLL
    # `8 n0 ~  b, }
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) P/ R2 k! B( F1 o% g2 L  g
  560. #else
    3 Q) F7 O& D$ t+ V
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically% y  ~7 ?1 J. n
  562. #endif" t4 D0 w% n0 B
  563. , ]6 N  d# _( T" Q/ \* J( H; s2 ?
  564.   dlg=new CRevAppDlg;
    & n) I: Q* G7 L. |8 k
  565.   dlg->Create(IDD_REVAPP_DIALOG);3 p8 l( X/ Y# o8 G4 S, y/ n' P
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    9 S3 M' T( l; g# m
  567.   m_pMainWnd=dlg;0 v" G6 Y0 x' l; Z

  568. 3 C  ^( U3 k% ^# d2 S- T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 U) V$ d: M# z/ e; _" Z% F

  570. * B% m# j9 I4 L8 h/ v4 h. @! y% _
  571. //  GdiplusStartupInput gdiplusStartupInput;2 o: P' q$ K3 }; `( \0 v' i$ K8 W
  572. //  ULONG_PTR gdiplusToken;) A( f3 Y$ G% T5 c8 A! ~0 n6 l8 `2 k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    : e. k4 T6 I! _1 @% E

  574. 0 i1 E7 V- ]# b/ Z
  575. //        CRevAppDlg dlg;
    5 `  x0 b2 ~3 x) ~2 ?
  576. //        int nResponse = dlg.DoModal();( S' ?* z- A4 F  A& x: @) R
  577. //        if (nResponse == IDOK)
    7 j/ N3 U9 o: Q1 w$ f
  578. //        {! b. r* v: T2 A3 e! q# M) U
  579. //                // TODO: Place code here to handle when the dialog is- a- x' e) F; e9 s
  580. //                //  dismissed with OK
    5 A2 ], V5 }' e, k( d
  581. //        }2 T' S0 l+ H5 Y( O+ r6 x
  582. //        else if (nResponse == IDCANCEL)
    * ?( A2 P5 ~+ d5 ^* D5 s+ [
  583. //        {
    8 q& l: g6 r& o6 P" c  b3 q
  584. //                // TODO: Place code here to handle when the dialog is$ ]2 o6 E' M4 |7 b" D- u; J/ X
  585. //                //  dismissed with Cancel9 U: i( C4 y2 Y1 T8 R5 \' i
  586. //        }
    / V* Y6 w1 `2 J6 N  T% ^. g
  587. . `& c1 a+ i* Z% ~9 f8 h, D4 o- q
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 s- D7 b! W0 w7 j- U5 q: Q
  589.         //  application, rather than start the application's message pump.
    1 \1 [+ A* T3 s# @1 d: `0 H9 ~& Q
  590.         return TRUE;
    ' _# S! e9 B- I  q  q/ a( U
  591. }
    ! b1 V! y& g: [0 T2 |7 t4 g

  592. + X# M! O0 K# J0 N
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ) y+ |. H, l2 |* L( r( p
  594. {
    * a7 O) O, ^9 Y7 T2 a/ h0 s
  595.   int i;
    * ?( r& g$ l0 R' Z3 _3 U" h  z
  596.   char *szRet;
    6 d7 y+ _* p3 E$ B1 v4 j+ K3 [

  597. 7 `3 m2 c# N' F" U- }# A* `
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    2 K: p5 y8 V/ V( E9 u! V1 K
  599.   if(sztoken)
    2 |( m9 e* J% m! w- I" P* t* R: ]
  600.   {& }* o, R: Y8 L, o
  601.     szRet=&sztoken[itoken];- c5 n# T, o# {6 a
  602.     while(sztoken[itoken])
    " ~. C! |7 w* {9 n3 Z2 Q
  603.     {
    ( B' G7 k$ A0 Q1 [8 q
  604.       for(i=0;i<(int)strlen(token);i++)
    4 z, q, R" }8 U7 z. P
  605.       {6 g) X0 u7 z; Q: }; U+ g
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( Q* n2 L" j# ?& T/ @
  607.         {+ @6 U& `5 o3 \8 d
  608.           sztoken[itoken++]=0;
    3 x/ K! h: y1 u4 J: r
  609.           sztoken[itoken++]=0;- V% f1 h/ w+ O. W
  610.           return szRet;# h2 {# X6 S, w& C
  611.         }
    # y" z4 }/ O  w+ L. ?9 c
  612.       }9 A6 i; {2 Q8 E$ N4 p7 [$ h2 x( w
  613.       itoken++;( d9 p1 _6 X% Y- \8 H
  614.     }
    3 F, {+ e9 d+ v7 R1 N
  615.   }
    1 d: U7 \8 c; v6 e( N2 f7 o$ x" {
  616.   return NULL;
      l0 x$ L+ `& x) b$ W
  617. }/ u* f4 L% P3 Q& `
  618. $ j7 u/ c. `6 L' b) Z9 b0 Q/ C
  619. void ProcessProc(long Total,long Current)
    & C! [& U. O- x3 i
  620. {: U9 L/ t: X; w5 O' z: k* @
  621.         MSG msg;
    6 ]% J- p' O( o% l
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);' n$ O; d" K( B/ Q# P; T7 g! [
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  m- Q* \, M& X  A) i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) I3 ^# l+ O7 ]3 p( z
  625.         {; }7 u' M3 c1 x2 I  l; B' |9 M- o7 {
  626.                 if(!GetMessage(&msg,NULL,0,0))
      r- K+ n4 Q9 H/ D) u% z
  627.                 {+ v% T0 j# Y9 k) r7 p
  628.                         return;# N( j# Y/ r: L/ y* V- F
  629.                 }
    ( v! D# b. q/ M  g
  630.                 TranslateMessage(&msg);
    4 }% `+ c4 p$ Y
  631.                 DispatchMessage(&msg);
    : [. }( L4 F' d/ q
  632.         }       
    : H4 ~& ^& o% x6 E/ c
  633. }! C0 x, M" u: r* H0 L, ]% W# h$ u7 t
  634. , {" L! i$ N! H3 M2 P5 I
  635. BOOL bFirstChar=TRUE;8 Z1 `$ O* l1 P

  636. & Q: R1 U+ k7 Y" {7 e& p6 X
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 [# H/ z) r% X, ~5 j
  638. {) ^! O1 q) w4 K" }6 h
  639.         // TODO: Add your specialized code here and/or call the base class& ^& r0 y4 }; }5 d! z; U7 v, }* |
  640.   switch(dwProgramState)2 Q- o# ]$ X6 a4 j
  641.   {- O! S; q0 y$ }+ W
  642.   case AP_NOTHING:6 ?' x4 f4 Q" q9 p5 N
  643.     switch(dwStartUpSteps)
    ( J4 s% ^. ?2 Y
  644.     {
    - w. Z& L2 r+ z- |7 I" Q
  645.     case 1:
    # f$ k5 U, |! H
  646.       {
    . N0 X# j/ ?; |0 [* ~- |
  647.         int i;
    4 A' u5 x6 K, z8 J5 k1 q* N
  648.         CDC *pCDC=dlg->GetDC();; ?  ~( _% Y+ o
  649.         HDC hdcwnd=pCDC->m_hDC;' ^  R3 {: Q( t$ M
  650. //        Graphics graphics(hdcwnd);  ^  z+ N) D' l7 t/ ~5 q
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");8 _2 y7 X: X1 ]; t6 q  U& ?& l
  652. //        INT iWidth=bitmap.GetWidth();
    " _0 a) P/ q5 `2 X! _" ^  A% \$ x6 k
  653. //        INT iHeight=bitmap.GetHeight();  D- K# r- L' E3 a' U/ j% g! Q
  654. //        Color color,colorTemp;% b8 u* T) R8 q. z
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)- J/ ^4 o$ W& \4 B' o: y
  656. //        {* s% i/ B4 T+ M6 Z5 N
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++): f1 z1 A  W- l1 I( r5 H3 V
  658. //          {+ L& L2 J! r9 ]7 m: ^1 ~8 p' ~/ o
  659. //            bitmap.GetPixel(iColumn,iRow,&color);) d$ Y$ A, a: ?- ?
  660. //            colorTemp.SetValue(color.MakeARGB(, N2 @; `; e/ x4 A1 a# ]" D4 X/ l/ M
  661. //              (BYTE)(255*iColumn/iWidth),
    + ~6 M6 `! ]) J, h* Z! V$ X
  662. //              color.GetRed(),4 t. X- y/ V# ~, w( v
  663. //              color.GetGreen(),
    $ i( e& u0 m* a3 h; R7 Z
  664. //              color.GetBlue()));+ W9 V4 V( \' H$ ?
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);4 W8 O4 n0 |3 A1 h8 Q0 g
  666. //          }( a, j- _; Y9 T
  667. //        }( }8 y" u/ n: F0 [/ d% t9 P
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    * I9 Z0 O2 @$ i8 v5 x3 h
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( @& X: J4 `- z  m( D" f
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");; V6 A7 t  V' v' ^  Y7 ]) B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");1 |# [% b6 O$ s0 H: W, W
  672.         for(i=0;i<240;i+=8)
    5 h1 |) d; ~( H
  673.         {
    - N% S8 r4 S* y) l7 y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / W' l) C' b" F3 M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ F( N. n1 x9 ]+ `3 L1 m
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 [' O8 t8 N: J' a, |
  677.           Sleep(33);
    ( w* I* @% D$ Z2 C" W
  678.         }* g% J4 e7 A( X+ b& W: E" Q' L! {
  679.         Sleep(1000);2 N5 p) ~2 E2 ]) Y( D) Q* z
  680.         for(i=240;i>0;i-=8)6 C. Y, X* R6 s' I2 F! _+ s. `+ q# P: A
  681.         {# Z4 S4 q' I+ s6 u- g4 h: [
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / _; j% P+ p8 i  s( H  G! h8 }/ E/ P0 m
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * l5 z6 H  s; F% T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % b& y: z5 v0 g$ {5 t: w
  685.           Sleep(33);& \9 j7 P" c; c1 x/ ?. M8 N( Y# |
  686.         }
    " \% ]+ p! {4 O5 ~0 N, B
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    + [% s* n  T/ c6 g& \; _, C& S
  688.         dlg->ReleaseDC(pCDC);& K7 }- D0 `7 u9 E: K
  689.         DeleteDC(hdctar);! V, j. H5 P/ B( \5 |8 ~  z
  690.         DeleteDC(hdcsrc);
    - V+ r0 e  M: W) S! v0 ]
  691.         DeleteDC(hdcorg);+ k1 d& h* ^+ q; N9 `) L
  692.       }
    ( }5 A( S4 p/ S+ }3 I. t( k/ x
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ! |/ n- e0 w! r1 x3 q4 B* S0 _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 F7 J$ Y/ B0 s' l# ^
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ) z( ~, R- U3 k; V8 h# |7 x  r
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");) O7 \% f7 `7 }2 E, t  H: z& D2 X6 Z
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + c- w8 p  z) i: T
  698.       if(!Dn.Connected())2 s/ A1 R/ Y* G5 h$ E' P, ^4 `0 O' v) L
  699.       {
    3 o; S7 {! q' V7 C
  700.         dwTotalFiles=1;" D& `  D" c2 d( s: j; [, o
  701.         dwDownLoaded=0;& Q0 D& {) G" |! ~  u* P
  702.         bSilentStep=TRUE;
    ! x& `' X8 W( i
  703.         bCompressed=FALSE;  h0 r; s4 _/ {) T
  704.         strExtLocal.Empty();* }6 d- p4 K$ S( h, K, b% [
  705.         strFullName="readme.txt";
    : w# w* x! P8 G6 v  i
  706.         dwProgramState=AP_CONNECT;
    6 y' |7 k2 z5 c+ u$ s
  707.       }
    4 S* ]8 P" s$ I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    / x3 U5 n2 w0 e) M0 C' q9 u; z# ~7 u3 v
  709.       dwStartUpSteps=2;% E& ]3 v# Q. ~! c
  710.       break;: W. O/ e2 \4 l+ |) R9 m
  711.     case 2:
    4 z% K# |) @& Y* b0 i# X& i
  712.       {
    1 V7 `% C$ I, u: s
  713.         int iEOF;
    " |0 y, i% f3 k8 v, j4 }+ l9 c
  714.         FILE *fp;8 g% }& q: p! l: B8 C6 \# p* Q
  715.         char szString[512];
    & `5 t0 Y) Z# n, @6 j" n. R( A0 Y( }
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    4 F- {; n( K) s
  717.         if(fp)2 }4 |, Z$ ^, _3 Q4 y/ Z# e) ?
  718.         {8 ^1 i: W8 Z; y- |/ G+ \# ~
  719.           do
    5 ]7 @; o7 H6 I- Y* S% R) m
  720.           {5 P: n! n6 D$ H4 y$ V
  721.             iEOF=fscanf(fp,"%s",szString);
    ( W6 @, F8 }4 P
  722.             if(strlen(szString))
    7 P& X4 r3 t8 l5 h. K
  723.             {$ G' v7 J1 b8 l! N: K5 a% v
  724.               if(bFirstChar)
    1 c* p! A7 P; U3 g- Q2 j* T
  725.               {
    3 O+ g9 Y5 v; q5 J: p
  726.                 bFirstChar=FALSE;
    4 \7 ]2 k% n& C' A' w
  727.                 bConnectIsBig5=FALSE;3 R: X9 q' A9 X# {7 v* v2 L
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    + M$ U; w* t. H  [0 ?' E
  729.               }, `; k6 q* J8 F7 u; N7 J
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / {; R- n  {# _1 }& U& _
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));% z) Z% l- x3 _6 o' U) B3 u* @
  732.               dlg->m_ListText.AddString(szString);4 O( i- d/ {9 E+ U
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 \/ _6 \+ g  M, K9 N3 _, ~; E
  734.               *szString=0;! a- L% u" X+ [! k8 k: o
  735.             }
    9 h8 }- G; v+ ~2 D6 S
  736.           } while(iEOF!=EOF);1 P+ W+ y3 G/ @+ |: \+ f) A( T6 t- T4 s
  737.           fclose(fp);
    1 O: q+ G" z; B+ D& }8 Z* R1 @
  738.           unlink(".\\DownLoad\\readme.txt");
    5 c& t; \8 N" v; b
  739.           dwStartUpSteps=3;
    / _3 F6 ^- `1 r' A9 @
  740.         }
    ; a9 @* a5 I3 Y4 ]6 l& m6 D% ^
  741.       }+ a5 v3 t+ P% B, d4 K! ^
  742.       break;
    + k6 W9 R( k, T' V! ?0 m
  743.     case 3:3 b6 W( d0 F+ \7 B6 }' B5 ^
  744.       if(!Dn.Connected())& G% c' t% j- E: i) D: Z5 v
  745.       {
    * ?1 s9 c7 L2 e% K6 v) |
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);! W' C9 m3 w5 C+ ^3 C1 u
  747.         dwTotalFiles=1;
    2 Z3 w& Z2 x9 T
  748.         dwDownLoaded=0;; ~4 \! z% v0 t; a3 |/ V! v& Z5 a
  749.         bSilentStep=TRUE;2 s) j, B% W9 f! }
  750.         bCompressed=FALSE;" w) Q$ P  Z, _2 Q1 A1 s
  751.         strExtLocal.Empty();
    7 T7 G8 f9 r7 X9 P, J/ _
  752.         strFullName="checkversion.txt";
    ( Z4 F, s: g! c1 g5 f+ n
  753.         dwProgramState=AP_CONNECT;
    . q% j! t- C9 E2 i% l
  754.       }
    ' g, \7 }0 _' [$ d, ^: W9 d
  755.       dwStartUpSteps=4;
    , c8 A/ u, }9 p) n
  756.       break;( X0 ^" l3 v2 [* j/ u. `
  757.     case 4:
    9 i6 M8 [# R" Z# J
  758.       {
    3 H8 C: v: y+ {: l
  759.         FILE *fp;
    ) d0 S* I, h& k. y, N3 F
  760.         char szString1[128];
    ) e0 U3 D/ Q& c3 F. k/ F# r) h( c& C' l
  761.         char szString2[128];5 c! f' I% q3 j0 L. Z! h: i
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");2 s- p2 g7 z. S5 B# x4 {( r
  763.         if(fp)
    # b0 W" ^( q6 H6 f3 e) f4 t! T) i2 r$ L3 q6 u
  764.         {9 z& Q) {4 K! j; J; y4 E) g
  765.           fscanf(fp,"%s",szString1);
    $ g& ?, U: ]8 S; `0 O
  766.           fclose(fp);
    5 u3 ?- D( w- T+ E( R6 r! c$ s2 b6 \- V
  767.           fCheckVersion=atof(szString1);
    1 c  {6 V6 s$ N$ n1 s- g$ V# I
  768.           fp=fopen(".\\checkversion.dat","r");
      q+ z! ?9 J* ?! B3 z$ z* W$ S5 h
  769.           if(fp); v" b7 r: v- H* m* w
  770.           {5 n2 s% Y. k# D" N6 t
  771.             fscanf(fp,"%s",szString2);
    0 r" |5 X" q0 W  Q+ i% M+ }
  772.             fclose(fp);
    4 |- {  `+ N1 _
  773.             if(atof(szString1)!=atof(szString2))1 J% w! q, B- A' P' R
  774.             {
    * w: x3 Y$ Y; P
  775.               if(!Dn.Connected())0 b  t5 m9 B) p6 [" w/ C! E
  776.               {6 k1 i6 Y9 Z) H6 l  K. X
  777.                 bFirstUpdate=TRUE;) h3 x% a' G0 ^2 e$ e4 @( i; B+ n
  778.                 dwTotalFiles=1;8 W9 ^% a; F1 x3 W. G3 y
  779.                 dwDownLoaded=0;6 P; S, t. `1 }! [3 `
  780.                 bSilentStep=FALSE;- B/ G- K# F6 n5 ]
  781.                 bCompressed=TRUE;
    8 T6 t& N5 A/ K+ Y7 X$ X
  782.                 strExtLocal=".\\DownLoad\";
    ! f3 {# p3 a; n% a
  783.                 strFullName="update.txt";! ?; r7 G/ c- e" z. A; j# F, w
  784.                 dwProgramState=AP_CONNECT;
    ; g  ^- z; c$ B0 o( F+ d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");' _8 j3 \4 F7 A  V9 g9 M, B2 ^- }
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: }  s/ m8 w; h% n0 `
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");" Z7 Q; S( m# J& D7 l9 T0 q

  788. " h" F2 [) h, _+ w0 T" n
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + B3 P8 e; I, U! [
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    / Y' P$ G: [5 T! s1 g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)7 u: J9 U4 a, |  w2 {0 g0 a, X
  792.                 {' L7 G6 W2 j/ j. `4 e0 b
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");2 |& B; N4 H, l; Z. m& `
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");. X6 g2 s3 I, }  q5 b9 t  C
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    - s1 \) C  \7 Q4 i/ y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' V  @- P1 Y& }8 X" U5 `

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

8 D* X; U: ?$ C/ S3 @+ b
% K  h4 X5 U) d/ D7 E( _

評分

參與人數 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, 2025-12-20 16:40

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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