找回密碼
 立即注册

CSUpdate.exe源代码

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

" N/ g* v& [, r" h; b
  1. / RevApp.cpp : Defines the class behaviors for the application.
    / \* C8 E7 i4 {% x
  2. //6 s8 o  k! K' w8 U
  3. ( I0 X9 S" _9 y$ }
  4. #include "stdafx.h"% i8 f$ l: q  H( _9 Y. S

  5. ; k9 l2 A9 N. `
  6. //#define UNICODE" I! o/ F( e7 c' i
  7. //#include <gdiplus.h>! o2 r% U8 B) \0 n9 n+ ~- Q5 Z
  8. //using namespace Gdiplus;' v' y( _4 t1 W: j
  9. ! j- c2 }! T* ?7 y% M' [
  10. #include "RevApp.h"+ Q5 @2 n% J% X, t% F- l. E+ F
  11. #include "RevAppDlg.h"
    0 f3 j! z/ C; h$ a( F

  12. 9 j1 t% _& W) b0 B
  13. #pragma warning(disable:4786)
    ; E7 Z2 Y; [* Y5 {; i2 p& D' p# Q
  14. #include <map>
    5 A+ R: R9 H3 ?2 h$ i; S0 J! s
  15. #include <list>
    # _$ r: i5 N' M: k. i6 c% F
  16. #include <direct.h>4 ~* \+ K0 p% V( `% c6 N

  17. * x8 K+ D7 T8 k6 Q
  18. #ifdef _DEBUG
    - M* I+ I6 }2 k8 ]0 t
  19. #define new DEBUG_NEW+ }) b1 t7 [; j, a
  20. #undef THIS_FILE9 D& z; ~6 Z7 @6 N/ |2 ?
  21. static char THIS_FILE[] = __FILE__;" X. `! z+ @4 z1 o% \
  22. #endif+ k" H2 P& `8 I& f; t; V* F
  23. #include "SkinResDef.h"8 ]( X5 S) S+ C3 g1 b" l: Q
  24. #include "ChangeBG.h"' _, g' s9 j5 b$ P$ S. I1 c
  25. #include "AFXINET.H"1 d$ k+ h$ K; r1 Z- }

  26. 9 U  A3 M7 `: T) g7 m
  27. #define TRADITIONAL_CHINESE 0
    - |8 G, [# V9 D( _- ^
  28. #define SIMPLIFY_CHINESE 1( N% N4 H+ R1 O. h5 R! h
  29. #define ENGLISH 2
    ! \: z  j7 ^6 C2 H
  30. int m_iLanguage = ENGLISH;7 N& i% L7 F& g/ l0 ?
  31. /////////////////////////////////////////////////////////////////////////////
    8 F4 M0 g3 z) S9 g. o$ n& S/ m
  32. // CRevAppApp3 r% L: x# D  M4 |  c, e; f/ {( c& `

  33. 5 A- D" G! K- K, |- g
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)7 N& ?, [0 Y' G- W
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    , X2 U  @3 r' G
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.( t+ t: t$ z" p# ]4 d  D
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , R; F2 V0 L% F4 `7 w
  38.         //}}AFX_MSG8 G3 f% W% \. q% h0 Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' I5 o) x3 m  x1 Y, I; h" ]( N
  40. END_MESSAGE_MAP()- X9 h) g- y8 T. H- d
  41. - Q# r. k2 T' i9 x( _' v! Y2 |
  42. /////////////////////////////////////////////////////////////////////////////* L8 {% G& _6 ]8 B1 x' I
  43. // CRevAppApp construction  Y0 g) Z6 e0 z: F. N" Q! ]6 W( f

  44. 4 z- Y+ A) x. d  E# N4 d/ g4 V4 O
  45. CRevAppApp::CRevAppApp()
    , A2 }$ J5 b7 ~5 v; D1 z
  46. {
    " n8 ]0 l4 \2 E1 P4 Z. D
  47.         // TODO: add construction code here,2 k  h) \. W1 b4 J$ d
  48.         // Place all significant initialization in InitInstance+ ~; W' ]$ Z" o0 N4 k& |9 H; Z
  49.   bDisplayIsBig5=FALSE;+ R" ]! D5 b* S6 ]; l  C- S: q
  50.   bRestartUpdater=FALSE;
    . M1 _* c9 C3 d
  51.   bFinishUpdated=FALSE;# F- G: P6 }# \; q( e2 v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;) i6 t. c5 A. A) S
  53.   InitChangeDataBig52GBKS();5 W+ K) ~5 P4 Q5 p- ~% I
  54.   InitChangeDataGBKS2Big5();# X) }1 W/ L7 F0 o! c+ |
  55.         //
    5 G1 A7 T7 h( U$ q9 m
  56.         bClickRunExe = FALSE;
    8 |: ^% l- [% t8 [" Y5 c
  57.         //+ d; k, B  }" T
  58. }% U. |" C6 c0 k; J
  59. 7 g! o- H( Q# ^3 ^' l% j+ \* p3 o
  60. CRevAppApp::~CRevAppApp()2 T4 H- A7 l) V7 A
  61. {5 a. |5 `+ I: }% E
  62.         // TODO: add construction code here,* d3 N' q4 l$ l( |
  63.         // Place all significant initialization in InitInstance( A5 x, Z- _6 h& F/ o. Y
  64.   EndChangeData();+ m" _3 F2 E5 ]+ _$ i, w
  65. }
    / S9 z% y( R. ~8 g2 R
  66.   n2 a1 s  b: u) O7 W1 \
  67. /////////////////////////////////////////////////////////////////////////////, o8 j2 c# j3 X4 \' Q
  68. // The one and only CRevAppApp object
    + p. ^( g) {* \5 g

  69. 1 d7 j8 e$ K" _3 v2 i
  70. CRevAppApp theApp;
    / q' ^8 z0 k4 o- E

  71. - s  l7 A; b1 V" c+ ?
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)) H$ h0 `4 h5 ?: k& ^- x4 I
  73. {+ i6 d  K  A0 d3 d
  74.   int iEOF=0;: u7 s# j7 Y' A; s4 I
  75.   char szTempName[MAX_PATH];
    " T8 Q( G. M9 x  R. F
  76.   *szFileName=0;
    . Z2 o+ j+ v0 k! V# e( z
  77.   iEOF=fscanf(fp,"%s",szTempName);, g. p, I- Y  `6 P, U- G
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ( D: b! _& x. I" l. k
  79.   {# y5 c) ]- _5 @7 z: e# D
  80.     strcpy(szFileName,&szTempName[1]);' Y5 V5 |$ l+ M( y2 a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)" w& Y( g) w7 d5 h0 J6 T# I% b+ r
  82.     {
    / R& a$ |: {. E/ K; }' w  I
  83.       iEOF=fscanf(fp,"%s",szTempName);
    : H3 V6 w& A3 d- R  m
  84.       strcat(szFileName," ");
      j0 a( v2 `# b4 l" M" S9 {8 [% ~
  85.       strcat(szFileName,szTempName);- t: l# d% u/ Z0 V
  86.     }
    5 ~1 T& K. _7 W2 N; l! _& |. g
  87.     if(strlen(szFileName)>=1)* T! k& b; l) ]/ j6 m- H- L. ?
  88.     {
    - h6 h1 c8 ^  e  G0 e$ O2 Z* p4 [* A
  89.       szFileName[strlen(szFileName)-1]=0;7 l* n- M/ b  g! S. W! f: b1 }
  90.     }
    0 ^" Y7 ~0 d2 `' u2 ~
  91.   }
    0 M6 W& p; F/ [% T5 a
  92.   return szFileName;0 d. c# B# J3 N- u5 E; `7 H
  93. }
    $ R9 D* @; D; s. {3 o! t3 J

  94. 9 D  b1 n/ W" r$ |' A& v, a* H2 \3 E# ~
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / a$ g# I( i* q1 k- z+ N- `- r
  96. {
    " Z6 N4 J, m& V( C/ {+ C  Q
  97.   FILE *fp;% s) L* Y/ D4 P+ l) d4 ~9 K0 b5 X( t
  98.   char *key=NULL;
    1 e) V' H/ W# Y) o1 n- _* r& P
  99.   char version[MAX_PATH];
    , E/ I8 [& H0 ~( |& Z0 W! I
  100.   LPUPDATEFILE file,olds;
    . Q$ u- E& u( Y* R6 n
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    - E" ^  b" }1 o& G% Y1 R

  102. % P  h" x; s8 _5 U: R* h6 J9 ]
  103.   UpdateList.clear();( i. H* _( v) o, P
  104.   UpdateFile.clear();
    ( d: _3 A2 U* J# f: p
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; h0 J& E! w4 y; E( g( T# T" ?
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , E+ f2 L; u2 j) T
  107.   fscanf(fp,"%s",version);
    " [1 W6 ]0 l; q9 k1 X6 l! N
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    : N% L8 M" h4 _0 }& e+ f0 [# w+ f
  109.   while(fscanf(fp,"%s",version)!=EOF)# n5 @& T  }) F
  110.   {
    7 [" {' T8 f- \2 M% B
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    + G/ v# R' q1 \
  112.     fscanf(fp,"%s",file->path);
    4 t' D7 i' T* N; ^, m
  113.     ReadFileNames(fp,file->file);
    ! A6 ^( n1 P, `$ m. ^; X+ ^3 l" \, n
  114.     strcpy(file->full,".");3 P9 b! Y5 L& \7 i  d. Z4 }, Y- }
  115.     strcat(file->full,file->path);( D6 K- g! b) K
  116.     strcat(file->full,file->file);
    . q! l' a% A: b) ~: j, K5 X, C
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    5 I% w' r- m) Z5 Q! N
  118.     {6 N. h; W7 z8 z9 T1 x% l# T
  119.       file->vers=(float)atof(version);
    7 `7 [' C( b4 {+ L4 i
  120.       UpdateList.push_back(file->full);: `: _% }. I3 }
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));. c7 B1 h. n8 F- A
  122.     }4 T/ ?! Q$ v) a& L# F
  123.     else
    ; H6 @- `- u3 |1 ?
  124.     {  K! u: o- U6 P
  125.       olds=(*p).second;
    : W0 z1 m6 @2 Z1 \- k, i; [
  126.       if(olds->vers<(float)atof(version))
    2 R  V9 R1 c! ~& }/ b! ?6 g
  127.       {
    ' R! }/ a( [* G
  128.         olds->vers=(float)atof(version);( y3 @+ G5 b+ j
  129.       }
    6 d/ T% U5 |) R6 J7 o8 h
  130.       free(file);
    % \7 V& k+ x. X% [
  131.     }
    # k5 M# E: n. x% _
  132.   }
    . E# }/ P  a8 N
  133.   fclose(fp);
    2 O* {4 G5 [2 h* b- D
  134.   return true;3 M) z  W& {  s8 Y* h$ S, |$ ]' H
  135. }
    8 e. ?" K$ p5 {3 `' {3 Q

  136.   |# |: V, x. n! Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    , ^4 f: S1 y) V8 M/ Q
  138. {: p( f% j/ s% @. ^: a/ d0 g) |
  139.   TCHAR  szFull[MAX_PATH];- K3 L0 K) V0 @3 M% j( \
  140.   TCHAR *token,*inter;
    6 b4 B$ G$ a6 |0 _# D
  141.   *szPath=0;$ h. }3 w. y$ i* x# H0 j# h
  142.   strcpy(szFull,szFullPath);
    ; f' Z1 u9 y+ L6 e- q
  143.   token=strtok(szFull,"\\/");" x+ ?1 `3 F! a7 Q
  144.   inter=token;" y$ Q/ {- O* N8 |( h
  145.   while(token=strtok(NULL,"\\/"))( r9 v2 {8 f9 K* X
  146.   {2 a+ Y6 O& [" a, s: |
  147.     strcat(szPath,inter);' ?( N& @# V$ t
  148.     strcat(szPath,"\");  z- j9 Y4 U9 c; `" C
  149.     inter=token;4 W( ]9 E/ Z; y6 d
  150.   }1 ]% D) a6 ~* K9 [& q% k
  151.   return strlen(szPath);
    $ o6 ], x1 a4 x% z6 I7 F3 }
  152. }
    1 K9 O8 M/ |( `( t* U9 S
  153. " s3 H, {3 ?+ `+ K. m9 Z! L! }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase). c! }% o4 O- I
  155. {
    1 X$ V& l0 T6 Z) T  Z
  156.   DWORD attrib=GetFileAttributes(Target);
    . a4 j2 @0 R: b" V) Y, x3 l/ d
  157.   if(attrib!=-1)4 A+ b* l3 O7 E
  158.   {
    " e; G$ d1 \2 c) A, D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY)). l0 _3 M8 R7 W" o/ s4 }: |6 u
  160.     {* A# [8 Q( z- L2 G* H/ u
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ) W3 ~* r6 s! f& e% x; }
  162.       SetFileAttributes(Target,attrib);
    3 @9 v$ p3 n5 Y, Z
  163.     }
    : p& U! u% h9 H& d
  164.   }
    ' n$ K; P, y! [" ^/ Q
  165.   CopyFile(Source,Target,Erase);
    * |! ^: R* W7 b' {2 N' q
  166. }
      @6 G3 s! z% N$ g/ t9 O. G

  167. & Q% L" ?* l! k; H
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)2 G) V+ y0 @4 u+ D
  169. {
    % A$ o8 U& S' b4 r- E6 v! |
  170.      FILE *fp;
    0 P" h5 m( B* i4 \  `" \
  171.      char  szBuffer[8192];* n2 m! b9 ~+ E; u4 `0 n$ f
  172.   va_list  argptr;' N& A7 A$ m% Z! a

  173. % U6 y; V6 v+ q/ @3 i2 q- r+ d
  174.         va_start(argptr,message);
    9 B" k' Z: J' ?3 _8 Q9 j8 a
  175.         vsprintf(szBuffer,message,argptr);( t/ D* ?( u/ p& b; M) S
  176.         va_end(argptr);
    ' x* k5 j6 u/ P6 {! v4 V
  177.   fp=fopen(FileName,"a");
    $ r! w+ ^4 i* `# W+ w6 H5 E
  178.   if(fp)
    : [8 w# F2 F- u; K
  179.   {) M" @- u  g- Y6 ?. D; Y& ]
  180.     fprintf(fp,szBuffer);" o  p/ _/ u" I+ D  x6 \; U' F$ J
  181.     fclose(fp);' E8 [% m! ^; Q2 [% O7 \& ]
  182.           _flushall();) J5 a  K4 c; u$ S
  183.   }
    5 b5 f5 c! e2 s0 L( y5 k& a0 X
  184. }
    $ u4 [. `" }# ~
  185. # S8 _8 r5 v6 z5 {" Y- Q+ Y+ }
  186. BOOL CRevAppApp::Fclearf(char *FileName)3 q# d# _/ y# r+ _. A6 g3 k
  187. {
    ' P: U8 c$ g# Z6 j/ ^
  188.      FILE *fp;
    / J" t3 G. @8 f7 ?* C8 y# F. t
  189.     DWORD  attrib;8 Y$ @/ [& K+ e: j
  190.   attrib=GetFileAttributes(FileName);
    4 M' F- x5 g5 ^4 f  z7 b! k
  191.   if(attrib!=-1)
    & m6 s2 R# J: t+ P9 ^
  192.   {8 W/ n. U, j% b% G/ T
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);) x* n1 x. v& M8 {& U
  194.     if(!SetFileAttributes(FileName,attrib)); o0 B- b6 @( a4 `
  195.     {
    # Z+ ^; }3 z$ K
  196.       return FALSE;
    4 r1 v% C( O$ z6 \7 A
  197.     }3 @) e# L; k0 g8 x1 r4 ]; i' B
  198.   }
    + o: T  k1 [' F+ _& d) g! i$ h
  199.   fp=fopen(FileName,"wb");
    - X% h$ D6 q; R  c
  200.   if(fp)& F$ i, v, d' u
  201.   {
    4 S* |3 ]: \' T! L
  202.     fclose(fp);# \* b9 z1 g+ ~* j! Y3 h4 W
  203.   }- K9 _/ d! J0 J& e# m5 M# O9 b- A
  204.   return TRUE;
    4 H8 p$ C* c4 _! J- ?
  205. }
    ) p( @7 C3 {# o5 x7 p( w# C/ q

  206. 5 I& j$ y4 C7 W; e! |3 @
  207. BOOL CRevAppApp::UpdateLocalVersion(void), h2 q6 a$ W6 N1 |+ i5 B
  208. {
    0 `# B+ H0 V3 Q9 [  S6 {/ f
  209.   char filename[MAX_PATH];' F: ?8 j9 e, v# r- g  ~
  210.   LPUPDATEFILE file,olds;$ ]. ~9 j9 G% X5 }2 u0 i0 T7 z' b
  211.   std::map<int,CString>::iterator i;( B" ^0 Z8 d# S
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    3 c, s4 D  {8 }# x+ \% e2 B
  213.   std::list<CString>::iterator l;7 V: ]5 L3 @) S- s0 D
  214. $ n( e: X; C# j( y) F- F4 O
  215.   if(bFirstUpdate)9 O( G+ S* f. o, f) X& z  s& x
  216.   {* [3 g% g! Z* n6 q  s2 L: t
  217.     dwCurrFile=0;
    * F1 y  j4 Z- f0 D
  218.     bFirstUpdate=FALSE;
    , k1 T/ h0 I# b( e! ^
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())4 A4 Y- x2 R9 x* g( e
  220.     {% K0 ]4 @& B  k/ z' u
  221.       dwTotalFiles=UpdateLocal.size();0 R' y) O" R* E2 P' @1 G
  222.       dwDownLoaded=0;  i8 Q! R" j) o5 q/ i' [( ?
  223.       bSilentStep=FALSE;2 N" P3 t* _) V2 b5 C
  224.       bCompressed=TRUE;
    ) o$ c- B+ s7 H+ [
  225.       strExtLocal.Empty();
    $ J+ O7 }4 q& H5 A' e6 n
  226.       strFullName=(*i).second;- W0 c: w; @8 R! L& B& U
  227.       dwProgramState=AP_CONNECT;
      l  Z& |& Z) T/ z, z) I  f- Z
  228.       return TRUE;( m8 X- S; c7 @# @+ S# q) N
  229.     }- H3 k. M. q" n! X
  230.   }& H+ @7 l" K6 N: h9 ]- S! C
  231.   else if(bRestartUpdater==FALSE)2 L! U" ?2 u  N4 `2 W0 d7 _2 m
  232.   {& W5 z0 m; `& z- Q: T8 o1 t) z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())9 s! ~8 y: X. V$ B* C8 t" k
  234.     {
    ' W! @+ ~# a( Q1 J/ m* Y& E( `
  235.       file=(*p).second;$ Y# Z/ ~! R* g7 i4 V* _7 E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): u' Y5 F7 Z; ?4 ]. c, V- A
  237.       {
    ( C! I( G% X* N) k- H/ C
  238.         olds=(*p).second;/ E- a6 {* {- |9 J- Z) N- O, n5 B
  239.         olds->vers=file->vers;% U$ P( ^4 z; W( Q# n0 q5 E
  240.       }2 {$ J/ u& |2 @/ Q, Z* Q' a2 x
  241.       else- M" a/ O% m/ T/ }8 D( B( F+ C
  242.       {
    ' W) F) Z8 Q9 b4 Z1 A3 h$ L" s  k' b6 M
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    4 n9 l1 w/ v6 A' O+ K, f9 j( J( N
  244.         memcpy(olds,file,sizeof(UPDATEFILE));' D4 y7 \! b3 O4 @; M1 O7 ~+ L
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 J+ L5 i9 y! o) m2 e+ K
  246.       }0 `4 u; U) Y5 e- x, S
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 k( m% M1 t, R( u3 w7 f8 K# c" c
  248.       sprintf(filename,"(%s)",file->file);
    : ^* w6 g/ T( u
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);2 [' M* p* p/ v& @5 q" `
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    + G; ^$ [* |3 v& C- }7 M$ P2 H
  251.     }
    # o9 B( e. D& ]0 a/ @
  252.     dwCurrFile++;
    9 j' i0 s; R3 f# e" b& e
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 [3 {. k0 g' o, F
  254.     {+ d; i+ H' J: B% g
  255.       bSilentStep=FALSE;
    ' q4 I# W& A0 o& ^9 f' Z" d: E
  256.       bCompressed=TRUE;/ e  u% `- K, h* c+ M; h
  257.       strExtLocal.Empty();. b* E& j8 c% B
  258.       strFullName=(*i).second;, H3 D; T3 }" K7 }* z
  259.       dwProgramState=AP_CONNECT;# v; U7 z5 _, ^5 O
  260.       return TRUE;
    7 q- J' d- m- }2 ^& b. |0 k6 L5 q
  261.     }
    ! ?4 Q! |! z. s) e( `: N! i
  262.     if(!bRestartUpdater)2 R* N2 `0 v; j
  263.     {: C4 C  T$ ?$ _, [7 ]
  264.       int iCurrSize,iFileSize;
    $ i; X$ y0 H$ c  s2 q4 p
  265.       iCurrSize=0;
    ) e; V* y, b( {1 ]3 \+ r- u
  266.       iFileSize=UpdateList2.size();1 E1 m$ Z4 H: ~6 F/ \" b( u& t
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ' W+ V4 \0 t8 t; t3 h1 _7 f
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    ! [! o- C. G$ A$ C! v# h
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 k0 l' M& |! Z" ]$ m# v
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( h5 x8 l# N% d
  271.       Fclearf(".\\update.dat");
    1 h5 B9 P2 h) x! d; y8 k
  272.       Fprintf(".\\update.dat","Bloodyf\n");6 x: s3 V5 G  f7 V" }) n% B0 k
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- e( W. M" T% u! M& O, x+ P5 V! F% ]
  274.       {
    ; H( n4 A8 S+ K
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())/ `5 O9 {& [: d# r: `
  276.         {
    6 h8 c, |7 w. v, c2 a- C' ~8 D
  277.           file=(*p).second;
    ( Z% C/ K; N) u9 C. X7 c& v
  278.           sprintf(filename,"(%s)",file->file);
    ; f! k0 Y" k0 A3 P6 v0 M
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);% m1 y, F/ v  E: D1 T
  280.           iCurrSize++;4 b; c# j/ h) M7 H2 ]  a
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    + y! s% H. z: Y& ?' w
  282.         }& _. d& J% d: B3 v# W$ J: X, [, _
  283.       }
    8 m; M' d  i' a
  284.       unlink(".\\update.txt");1 h: K9 y1 Q  h0 B4 ^& _
  285.       unlink(".\\update.tmp");2 p0 n$ \) @% d+ k! j
  286.       Fclearf(".\\checkversion.dat");! @+ C( O# V# z8 x  ]0 F# A
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 t" U7 V3 ], q
  288.       if(UpdateLocal.size())
    ! X) e" Q4 }% Q$ V  B
  289.       {% P5 e( q2 ?+ N* B+ Y
  290.         UpdateLocal.clear();
    7 G. A) J, ^1 h7 A, v9 Q4 ~4 [% a
  291.       }+ O: O9 u; A+ U+ ]! U3 k
  292.       if(UpdateFile3.size())
    + {4 z( F- H8 A1 U) \
  293.       {4 y! @) t6 N* `/ A2 Z7 w+ X
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . X6 V/ Z+ v7 P# h
  295.         {+ A% q* a: H2 a7 }
  296.           file=(*p).second;; h" N( Z% c0 [6 b$ g  Q. l! i% e
  297.           free(file);. g! i3 H) l4 F* [
  298.         }* A0 M2 N# p  O8 E6 `) _
  299.         UpdateFile3.clear();( @$ @0 G( V# Y2 H
  300.         UpdateList3.clear();
    * \+ a9 Q( m" m; M) g
  301.       }5 q( F' D# r) q* g% ?
  302.       if(UpdateFile2.size())( n0 Y  G9 [7 D/ m9 z! ^' e
  303.       {! k9 @! J, r; e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)" C, p1 _) a. I  S, w8 z
  305.         {
    $ f- T% K; r. @( B- o7 g$ ]0 k+ q) v& h
  306.           file=(*p).second;# k, _! I) d! H$ K
  307.           free(file);
    ) {: f% y  U# ]2 L  z
  308.         }9 |8 |( K9 J9 a6 d/ E/ V( p& X; }
  309.         UpdateFile2.clear();5 V, _5 `8 J4 z8 p  N
  310.         UpdateList2.clear();
    ; U% T: J& V0 ~" K- _9 e
  311.       }
    % C& z+ J% D% }& R
  312.       if(UpdateFile1.size())
    / d3 R3 ]  v+ f) h6 v( _
  313.       {
    6 Z. N5 T6 \5 y; M. b7 W9 o5 r
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 o1 U% K! W. E; J  x# h) ]
  315.         {' R" G5 @6 U& R1 t' u' e- W
  316.           file=(*p).second;
    " f1 ^/ @+ h! H7 V/ X2 a$ i
  317.           free(file);
    7 E$ C! {7 b" p- Y4 H4 ^; H
  318.         }
    " ~: a! w$ r; }* e
  319.         UpdateFile1.clear();
    * t* s/ z5 B/ {
  320.         UpdateList1.clear();
    - _) X. p9 X6 U$ r5 q5 t, Y9 _9 I
  321.       }
    ( N0 `3 r8 y+ I" Y/ S  }/ C
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - |+ I5 ^7 f. c: s
  323.     }! Y' K5 X: p. ~+ e# A- n6 k2 Y; |
  324.   }
    - Z, i5 _  l" y+ S0 M6 `6 s7 |1 r, M: t/ w
  325.   return FALSE;
    ; v& K. i1 T- L. Y( W
  326. }1 T5 T2 q8 E: ?( p
  327. % u' B# U% p# e8 q
  328. void CRevAppApp::ClearAll(void)
    8 J7 i% W- A, M2 c  M: j
  329. {5 e5 M$ B" y3 e! E
  330.   LPUPDATEFILE file;
    ) n- w' ^# s% Y& @
  331.   std::map<CString,LPUPDATEFILE>::iterator p;$ ~6 K3 F. b3 ^! v5 w+ a
  332. ! v4 [4 O  `" ?6 g  e8 A
  333.   if(UpdateLocal.size())" s3 [( |. s- o
  334.   {
    5 p5 _  v/ G( M3 q' i5 z+ Z  W
  335.     UpdateLocal.clear();" o! G& m( F* w: P" T: M
  336.   }. T+ `6 a9 k: n. {
  337.   if(UpdateFile3.size())2 v9 C- c# s, m! d" y( g4 F
  338.   {
    4 H% U, W2 z/ v8 ?- Q' ]) h$ P
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)3 z7 V( S& l4 }1 `- s' y: z, l9 E
  340.     {
    2 k+ |' R4 e$ s( m0 {7 N5 X
  341.       file=(*p).second;. l; [; y/ X7 B4 \: N/ q. F& s) f# x' `
  342.       free(file);
    7 \4 |# W, D: a# }- c4 N
  343.     }
    : Z3 x5 _1 ]1 R' N* L* P2 {0 K$ o; o
  344.     UpdateFile3.clear();5 |1 Q+ f; ~( k3 m/ J
  345.     UpdateList3.clear();" n9 x2 b# t$ _7 q* J
  346.   }# ~7 ]8 f% E, x2 N% y# p
  347.   if(UpdateFile2.size()): {) R. I0 K& I2 y0 u
  348.   {- W3 q' n! Z2 G  z
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)4 `9 J5 [2 \2 ~1 `2 R8 q+ A
  350.     {( Z) B% Z; A. U) P5 O) K+ S0 ], O2 R
  351.       file=(*p).second;
    / ~; @2 m* X9 r( R1 `
  352.       free(file);; B$ Z0 E' @' l2 q5 G( b) r& J* R! l
  353.     }
    7 K& ~* \; N/ {5 C: A: M
  354.     UpdateFile2.clear();
    + V9 h. x0 H" ^0 ^4 l( V
  355.     UpdateList2.clear();
    ( V4 Y7 F- f- h5 |% |0 K
  356.   }  u( t9 w* f# `
  357.   if(UpdateFile1.size())
    4 L% e  ^3 I  v4 H. N( ]
  358.   {
    . y+ d2 n# p$ }* N( ~! p& O
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 z2 P  b# F7 z: T; c7 W( j- c
  360.     {
    + r" }2 u" ?0 k6 F  F, u8 H/ Y
  361.       file=(*p).second;$ P4 T5 \  J2 o' @
  362.       free(file);4 P( O6 f! R9 |2 b0 I- Y
  363.     }1 `, ]  G6 k- |! `* B+ w. T, J
  364.     UpdateFile1.clear();
    & H7 v+ h& Y& A' f  E
  365.     UpdateList1.clear();& L) w* z; ?) y" V7 ]* ?) p
  366.   }
    # R  P" p& z/ {
  367. }  4 b1 e* n' I( ^% g; f6 U
  368.   6 ?1 ^% s& B) b1 Y9 C( v0 g  f' w
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    9 ^% ^% }0 |5 z1 ?" D; W5 w2 H
  370. {: I0 Y. H& G4 x" \( n0 n4 y
  371.   int c;
    " q5 d5 r# z6 f% d' Y5 x
  372.   LPUPDATEFILE file1,file2;
    ) t; |5 E, y: ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;# e1 E/ }& U$ Q" U; H
  374.   std::list<CString>::iterator l;
    : n' q0 P  _; Y+ {
  375. 7 }3 k# k! _2 W+ U
  376.   UpdateLocal.clear();
    9 @3 _0 F7 z/ H+ h2 b
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);* X, t2 P8 X" V& ]
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);* D( m% e4 a  b; s7 }
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    . v8 o. g% h2 {4 G! ]
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
      I& P& ^' U  L9 F2 j5 T
  381.   if(UpdateFile3.size())0 T+ K/ N( [1 T0 B. o, H7 G: }
  382.   {8 h2 u# ?" d- I) Z+ l: V, `( ~
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++). k  e# O6 L7 P7 ^' l
  384.     {* D" S7 u. v. Q6 ~
  385.       file2=(LPUPDATEFILE)(*i).second;; Z1 z4 M! T7 @; r8 Q
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 I% ?4 G9 j! M* T/ F  o/ H
  387.       {( |& z! P, t5 m9 G& ]  O/ A  i
  388.         file1=(LPUPDATEFILE)(*p).second;8 j9 @/ a/ z' K8 [5 o, b
  389.         file1->vers=file2->vers;; w' L& t( v6 R; N7 R& S
  390.       }/ l1 ~; K* G( `, w' |
  391.       else% a& f! u# [. Q" C
  392.       {1 H$ k% h$ C$ U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 F0 [* k) I0 f7 {
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ; e- P( r$ C- P2 W. F' y7 O4 p% `
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. e! M. H) L$ e
  396.       }9 U! @$ V7 e$ g% B3 j# q' }% O3 r5 l
  397.     }
    5 {% V+ ^! H$ i) T8 W* v! J
  398.   }
    # h) E$ v: a1 f
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 i; i5 \' o; ~9 b3 p' V
  400.   {
    6 f% q" K* l; `/ }, J& V
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    0 P, {2 }/ O6 X0 l2 a! B
  402.     {: r" K1 c' c1 A: S: Q
  403.       file2=(LPUPDATEFILE)(*i).second;
    ) Z( N# u/ j( o( L0 b7 p& Z
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 j7 G+ @" P, @  p& o# B9 n9 \
  405.       {
    , ]/ l( U, t5 s& i3 @
  406.         file1=(LPUPDATEFILE)(*p).second;* f5 ^0 ~% e/ k
  407.         if(file1->vers!=file2->vers)
    0 R. h% ]# K+ a' G) C) y
  408.         {3 {# ^8 q4 d' j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 F  c4 X! H1 H7 Y$ _4 C
  410.           c++;
      l9 o9 i0 ]. v2 `8 t$ z" v1 D
  411.         }' a) y/ c2 Q. K7 {' P
  412.       }- g4 T  E% x$ {( M
  413.       else' S3 i" _9 I$ U% ~' `" G3 Q
  414.       {
    ) K# m8 \0 d  p2 X# ~. W& k7 Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * q& x$ G' x& t
  416.         c++;
    5 T  a/ e9 u% R+ p$ f+ ~
  417.       }
    # h; k1 c' Y3 R. C2 J* }1 X
  418.     }
    , G% t4 b, _- K' v3 L. L
  419.   }! Q' `, q. P. X0 I' q* @. X- x: Q
  420.   unlink(".\\DownLoad\\update.txt");
    % k: K2 w. h# p8 ~4 x. {
  421.   if(UpdateLocal.size()) return TRUE;* B9 Y9 u9 R8 }% D! l3 o- G
  422.   else                   return FALSE;
    ( j; o1 g) z" V) Q
  423. }3 e9 |  E' M0 H. h# u
  424.   d( N# Y1 B/ X% A* E
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    , T, M' s1 R& M* e7 g& s
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    1 v, J6 W5 F, U, i5 L5 `2 i

  427. 9 w2 b- o. K- S& Y0 y

  428. 9 R7 N2 ]; y4 {" x7 d: B0 Z+ A# y

  429. : C$ n2 E9 _" d0 ~
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    + O7 U) I  V1 Z1 w( c( R
  431. {' \; W  j# ~9 ]9 v+ d0 a0 V
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;, Y7 R$ W1 Q8 T2 |" H& h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1): o9 Y$ @4 T* d
  434.   {" v2 m+ w+ J4 R$ M3 }3 G5 T6 G% k
  435.     char szLanguage[50];
    : K" I7 t9 d6 S% b- R
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 g9 @2 `% C" m0 F% N* G; H4 p
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , q. b3 M6 j+ D- ^
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 j! Z" ^7 e# b8 |- ]
  439.     else                                   m_iLanguage=ENGLISH;
    6 l- F) ]0 K! o* P- E% z; I0 s
  440.     char szRegister[100];4 u3 v4 {! x: J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; P1 d4 u1 K# P
  442.     strRegsName=szRegister;9 C' k1 J" [$ k6 m1 I0 k
  443.     char szPatchURL[100];
    1 }; T" K$ E" S
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    8 R8 _" b+ ?- ?8 f- e
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ' }% q- j& Q* F: r6 Z& l, x
  446.   }
    % a' v" L0 v1 k
  447.   else
    8 z3 E/ c+ i+ r
  448.   {1 |3 f3 Y5 z6 i( U/ B3 j) x
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: w6 Z; H' Q! V+ w& j* [
  450.     strRegsName=DEFAULT_REG_URL;
    ; f2 I+ p# h3 W, W1 b
  451.   }4 o: j  t& `2 U. `
  452.   if(GetFileAttributes("hosts.ini")!=-1)
      L( l/ x# O5 F; n! {& x' |
  453.   {
    3 H  T; f! d4 Q' J, ]* r1 d2 E
  454.     char szIP[50];5 [' e$ G. z2 U- E- g
  455.     char szDIR[300];
    / y; l: b1 a7 s  _. U6 `6 ~
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    1 P9 q( _/ X1 V. g2 \
  457.     {6 ?/ {0 ]4 A& m1 U. I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    3 K6 b# Q5 d+ p) ?) W# U# `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ \4 |& ^/ m1 ]6 c
  460.       strHostName=szIP;$ M3 }/ h* `8 l# W) l/ R
  461.       strHostPath.Format("/%s",szDIR);' v7 [& U: a4 ~: K# I1 I2 Y( s. K% q
  462.     }$ X" i! ?% F. a# l+ D
  463.     else
    4 M. D8 C5 F( t4 i
  464.     {
    1 h9 i. d) F& e, t4 z
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    2 b+ o% I% j. a- F2 Y
  466.       {6 h' i( w% ]3 h' R! j4 H
  467.         char szLanguage[50];' }" d8 Z1 @4 [+ K0 ?  y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, G. X( {  D) V. B! `% J0 ^3 z
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! {& h4 ^/ |7 a, i5 C
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 X( [, l: Q' J) B
  471.         else                                   m_iLanguage=ENGLISH;
    3 U6 q! p5 E! @8 N8 a
  472.         char szRegister[100];
    # ]  B9 ~# W) {  r  b. f. z7 E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");4 U  n% M5 T0 M& G
  474.         strRegsName=szRegister;
    , ~* x  K; k2 [
  475.         char szPatchURL[100];
    ; v9 B  M2 ~( Z) r) E4 i8 }, y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 f& f  Z1 Z5 V  {6 y/ w9 N: F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" I- n% f) R9 L1 ?
  478.       }5 H% X2 L9 j1 U! K( Y& }$ q
  479.       else1 ?8 s; B6 ~( A+ M
  480.       {& M' h0 G: \% e, ?: U2 P. ^
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 A5 M* T0 f+ z. `% q7 B$ p
  482.         strRegsName=DEFAULT_REG_URL;' r9 N& S) k- a# k2 C
  483.       }2 _" }8 G5 g% w  B8 ?1 Y  W
  484.     }
    1 c- A$ ?" L- w3 B( p
  485.   }
    * D, \9 j2 L! Z5 Q3 ]' s+ d. J
  486.   return true;
    7 ]$ S0 a+ i9 x) l; H. W
  487. }/ I) o" H. C4 T$ t& k, {' l1 b
  488. 2 x/ X9 b8 Z( {* ~+ o
  489. #include ".\ZLib\unzip.h"
    0 ^2 R. O, }- |/ i3 t: b
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ V4 Q% b+ p! N( g- t- e
  491. /////////////////////////////////////////////////////////////////////////////% c! e2 F% Y5 p# w  \* w
  492. // CRevAppApp initialization/ U: g( v1 j7 N# W, @! X2 s

  493. / A+ ~; l/ E: i% K
  494. BOOL CRevAppApp::InitInstance()' b1 R8 V" F5 Z4 i
  495. {& P0 ^/ w1 E7 A
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    0 B3 W6 q! H  Z2 _& v3 E- d& s

  497. 9 r  }0 e! J$ [) h& e- `3 A
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 }4 j; G2 g3 L; }% |
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* {" E3 C9 z3 ^! x0 @( R* {3 ]
  500.   {
    % K" R, C2 z) w$ j
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");: Z4 i$ Q  F7 A# q: D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , E6 E7 l7 _& \% J2 s6 B# ?- r4 Z  a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ; h. B1 o' b5 v1 Y( _8 u
  504.     {5 E, L9 M/ R; |) i
  505.       strcpy(szPath,szPathTarget);
    6 z; ]$ C# U2 ]) M  y
  506.       SetCurrentDirectory(szPath);. V; a8 M) w9 H4 k& F
  507.     }
    2 z5 Y9 Q$ J$ c( e: U8 ^) G
  508.   }
    - o# h& L3 z* m: l3 a7 g
  509. #ifdef _DEBUG
    4 ^7 ~" D% a5 F, E7 W/ B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 V! r0 u+ @+ w
  511. #else
    5 o. G6 l9 P( i# {* Q& H
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      ^3 D0 h7 y/ J
  513. #endif
    ' {3 x+ @; `6 H
  514.   {
    " O0 W- ^- W6 \/ r9 I1 M$ a5 |2 S+ s
  515.     char tempFileName[MAX_PATH];
    * R( M+ Q$ t' s) {) R
  516.     strcpy(tempFileName,szPathSource);
    . x; z. q& V2 E3 P
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 A5 |; D- K  N: j0 y
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ! t! r1 [9 s/ I' w. O0 f( h1 Z5 A
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
      m. O# q' b# J8 y( P; x
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ l( e5 i1 \' B' G
  521.     return TRUE;
    6 O/ E8 o8 D+ c
  522.   }8 r& K- a& S) N* D. N' i
  523.   // Nuke 0118: Delete run.exe5 T: C0 h% q6 u7 A
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ R  Q$ K. |0 z
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    " N: q% t0 W6 Z" B0 {$ a
  526.   if(!ReadCfgFile("Config.ini"))" ]  u6 T# t8 X4 }! s
  527.   {
    ; A) z4 P6 [: k
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);/ H  t4 [2 Y8 G/ `6 N
  529.     return TRUE;' F% U+ z) g, G6 n7 g" m
  530.   }' t3 b0 q: h" ~* C/ K
  531.   HANDLE mutex;, S4 C$ H  c0 o7 b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))4 T# ], \% |- ^" l8 S. u7 y
  533.   {6 ?8 o# P5 }: T- i7 b/ E2 ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ) w( B/ |& L& L, q2 H
  535.     {
    / Y  \% ]& i. G6 E6 U: A% v
  536.       CloseHandle(mutex);8 e' ]4 R$ e0 x) _: _5 r
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);4 I1 n; ?& N( t6 E5 M8 m
  538.       return TRUE;' X/ Q! S: z; L) c! i
  539.     }4 G8 K9 C" o8 s7 n
  540.   }  # c+ H6 F2 q! H3 d' M/ n, K% M3 H
  541.   CloseHandle(mutex);
    8 w% o/ g4 C2 _: w' g4 D
  542. : h/ q! o+ q6 }
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& M+ v" O! E1 i; N4 V  a

  544. 0 ?' z; U# N/ C- b0 u8 R
  545.         AfxEnableControlContainer();. C4 X  Y$ W  Z  P

  546. ' d. @4 @& Q7 s0 Q' }. h, l0 I
  547.   bCanUpdate=FALSE;/ y$ {3 \: {2 y' x* F2 a
  548.   dwStartUpSteps=1;, n- S) e( f5 S# J- |  h
  549.   dwProgramState=AP_NOTHING;
    - f  Q: W7 K6 n
  550. ! z! w5 _. g- X- j8 D- T  @
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);7 X: Q: B# v6 P# i4 o2 X- w+ s% V+ j
  552. 6 l1 l7 n8 P0 c3 Y1 ?: Q4 ~
  553.         // Standard initialization
    - b" b3 H. B0 j+ f
  554.         // If you are not using these features and wish to reduce the size
    * H! h- L. x. f( ]6 ^1 o. m
  555.         //  of your final executable, you should remove from the following
    3 Q4 y2 l; c! N/ z
  556.         //  the specific initialization routines you do not need.) s3 s, n- W/ H: l  E4 g
  557. 2 d; j* P5 Y( q3 |
  558. #ifdef _AFXDLL9 N' u# M1 {) o8 G2 P2 l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL1 o) }: u) a% L$ b
  560. #else0 D1 P, J8 d" {2 `( F/ S
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    " K# x, l& ~9 K( A7 r6 F8 T) d
  562. #endif
    2 X$ i- }- g) o* X/ }$ Y

  563. 3 j" u3 I* C6 ?! C* ]) g% l8 p
  564.   dlg=new CRevAppDlg;
    2 [- ^& }4 f, U  r
  565.   dlg->Create(IDD_REVAPP_DIALOG);* U5 M6 l  Q' P6 G) f5 c
  566.   dlg->ShowWindow(SW_SHOWNORMAL);* a( h0 Q+ o! ?9 _0 R) y
  567.   m_pMainWnd=dlg;
    ; M6 G+ R/ z7 N$ |  s, ?

  568. 3 z% J+ Q! E5 R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);4 B- E3 I7 N# ^( h" [: M& _! n' E7 [
  570. % q  D# b) x0 X
  571. //  GdiplusStartupInput gdiplusStartupInput;
    4 I0 z1 H7 z; s& t/ U) O9 g
  572. //  ULONG_PTR gdiplusToken;
    1 h! ^: w, I% D8 u7 J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    1 i5 e0 o! W1 K8 M  q

  574. ) y# v* S0 [2 L
  575. //        CRevAppDlg dlg;8 R' G5 `3 b% _2 v( H5 d
  576. //        int nResponse = dlg.DoModal();( H: V. }5 ~3 |1 V  m
  577. //        if (nResponse == IDOK)+ R; r8 p+ ]6 O
  578. //        {( M0 I2 i' v1 q4 \5 s% K, Q' ?
  579. //                // TODO: Place code here to handle when the dialog is
    + a2 }! I, L0 R) X( T
  580. //                //  dismissed with OK
    ! n/ S! [9 X, Z+ {( d9 _8 P7 G
  581. //        }
    1 o$ K4 E8 _  g3 g# j3 R9 {" H! X
  582. //        else if (nResponse == IDCANCEL)  i+ v9 h1 D7 G5 T0 {# B2 C& T$ \
  583. //        {
    / b& V8 T' n' Y( u: B' L1 _
  584. //                // TODO: Place code here to handle when the dialog is
    0 x6 L9 y( \3 T( k. N( }
  585. //                //  dismissed with Cancel0 M  V, {1 T4 y2 r1 I
  586. //        }4 R$ k9 V. i' Y7 y

  587. ' P/ G& W$ [3 |6 x
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' i  `* j- I. K; ?
  589.         //  application, rather than start the application's message pump.$ T# G2 ]/ v" T& @, H+ K- Z% F
  590.         return TRUE;
    $ m7 M9 z( k* _- U% ^! L  N
  591. }
    / F' Y0 {% C4 P

  592. , f8 ?# K$ h1 ]+ Y' _& R
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    8 q, a, n; S; ]/ K" d8 R5 Q- v
  594. {
    ; P9 Z$ _% B  s2 x0 [$ i
  595.   int i;! a( l5 z+ k1 T! R9 A
  596.   char *szRet;& o2 J/ x) w) c$ {/ M8 f
  597. , U4 G. t/ ~$ E
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    1 a8 d; c! _. ~" E! t) P; L9 Y
  599.   if(sztoken)3 N8 F: g. k9 N; u
  600.   {" K/ l6 u9 e$ s5 Q
  601.     szRet=&sztoken[itoken];
    3 U* U% w4 ]  Y! }% ~
  602.     while(sztoken[itoken])
    9 ~8 b, G& e9 k
  603.     {7 V+ U8 c/ a1 S, O  V; b
  604.       for(i=0;i<(int)strlen(token);i++)
    7 _; Y$ k+ z7 ?0 a1 j% u( X/ {
  605.       {
    6 f" Z! r0 q' O- g) Y* e2 U7 Y) q
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])1 Q5 z# I' K" w
  607.         {. [6 O6 _1 p! E
  608.           sztoken[itoken++]=0;
    3 H4 B' i, U0 Z: O: F5 w
  609.           sztoken[itoken++]=0;
    ) l# b8 A# P- C* R4 h8 X
  610.           return szRet;: a* C  f! Y/ p
  611.         }6 `# R2 O0 X8 I! k
  612.       }
      ^$ m1 s, y) D% _
  613.       itoken++;
    % _) Y" ~7 X) o- W4 F6 |
  614.     }. W3 S1 L- c/ }  z, p
  615.   }, z8 R5 I4 N( ]4 f4 v
  616.   return NULL;7 Q! ^2 p  ^& ^3 [0 z- R
  617. }
    0 R" p% O* ~' `$ H  `9 t
  618. ; {9 M/ Y# X0 F8 L8 `. Y
  619. void ProcessProc(long Total,long Current): B# k& v% K; A' o: @: j% q/ R
  620. {
    * S6 K6 k, E% K0 J' B2 r
  621.         MSG msg;* ]2 h' g, F5 j. q4 E+ C5 f
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ) W/ j  d7 r0 L# [' U* w
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ) n7 [8 {) K( l$ Z4 X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ) z; O& \$ t8 h3 a! H7 P3 E
  625.         {
    * Q# w5 m5 f5 d$ @# o
  626.                 if(!GetMessage(&msg,NULL,0,0))
    7 I$ @1 I) g! i9 l$ X, m  b) w: _
  627.                 {
    ( _: @4 |6 |9 a' U4 \7 }
  628.                         return;
    : `: W2 {! G# H1 l& k' ]/ k! @
  629.                 }/ h4 B; r0 D$ v3 ]
  630.                 TranslateMessage(&msg);
    " ^- L; `; d; u( p
  631.                 DispatchMessage(&msg);$ K9 f4 D+ z/ t8 F; L/ u
  632.         }       
    ) x1 @7 [5 E4 \$ e/ z6 ?% w
  633. }/ b9 o, b) ^  p6 L

  634. . [( d) M; C, w, B: x
  635. BOOL bFirstChar=TRUE;
    " Z$ v6 m6 c# u+ h4 T

  636. & B* Y$ P# X% w8 n& a' g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 o! X' Y" x! ?# _" _0 S9 {, `
  638. {& X& f* U, j  F1 f+ y! ~
  639.         // TODO: Add your specialized code here and/or call the base class
    0 X  {$ X# {2 E* t% S4 }2 A  l0 {: o
  640.   switch(dwProgramState)
    ! Q1 D4 F5 D+ F; f% ^" O
  641.   {; T' A; D) @/ _/ n
  642.   case AP_NOTHING:0 h/ l) y/ k0 [
  643.     switch(dwStartUpSteps)
    ; X: n( w3 M- N4 l) X! \
  644.     {* z7 W$ z) w! Q2 S
  645.     case 1:
    ( X: A* r$ W/ `" m7 [7 z9 i  f
  646.       {
    2 l( ^  s+ f- `' ~
  647.         int i;6 r, j8 f& E% r9 B& s# U6 f
  648.         CDC *pCDC=dlg->GetDC();
    % {4 g+ ^% C; S0 q
  649.         HDC hdcwnd=pCDC->m_hDC;- s/ p- r9 g4 [
  650. //        Graphics graphics(hdcwnd);
    7 L: _& J) b( w5 E% C
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * x% y7 A, C3 f/ m: t
  652. //        INT iWidth=bitmap.GetWidth();9 C4 u( _3 w. C! P8 h& V
  653. //        INT iHeight=bitmap.GetHeight();
    8 g3 i8 @4 E6 q. F; K* F6 |8 a
  654. //        Color color,colorTemp;
    ' b$ z( C$ X1 R: d
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    9 \+ {# V. h* o$ v' N9 B
  656. //        {( o) @% k% M3 c- _& o( l" R
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    & R, r0 L' ~2 ]6 {% m6 _
  658. //          {
    - H9 Y( l( K6 K: r0 U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    5 B; n  z6 ?: D% h7 R" o& m9 z
  660. //            colorTemp.SetValue(color.MakeARGB(  D+ q0 j% x5 F& n4 ~
  661. //              (BYTE)(255*iColumn/iWidth),% `. j' [/ F2 c2 x8 Z
  662. //              color.GetRed()," ~2 G! o  L* {+ [1 M& P
  663. //              color.GetGreen(),
    5 p. T$ q- I6 O% A7 s
  664. //              color.GetBlue()));
    0 _" q6 A1 ]! r0 b
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    * ~; N$ [* L! g, A
  666. //          }( h; t. F! w& m6 a! \9 ]9 L
  667. //        }
    : V: n! d) ]1 p7 f+ @& h
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ' W6 L9 u$ L% m2 }0 F
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    3 P, y7 x$ M1 n2 K# _2 f5 G/ N# Y
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");' G7 q7 \8 |, y) W. |
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ c& k  A, [4 C; ?- V1 I! U. l) Y
  672.         for(i=0;i<240;i+=8)
    ! \9 A" S. j+ b! \* |' ^) Y
  673.         {, D2 `$ ?# z; P7 f0 n* C7 L
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
      i) B; D$ x1 D+ b( S2 v
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    2 N7 B# ~: `# s2 q, _9 Y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    % V3 b5 [& c7 T6 I
  677.           Sleep(33);
    % o6 X/ {8 ^- X7 b7 i
  678.         }: }) M( _6 w& `/ g7 y2 M
  679.         Sleep(1000);; O; S& I+ S" V4 L) y7 j5 B
  680.         for(i=240;i>0;i-=8)
    ; K! W: o1 b: s9 m  O
  681.         {
    ! W* E* c6 x% U8 H2 [8 o2 L9 u" N
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    8 S  t5 u3 b  u% [' T. d
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 K9 \8 B+ l: M
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    0 V' Y4 c; r0 c" ~7 @
  685.           Sleep(33);3 L! }/ c$ I, r2 g
  686.         }
    7 ^! B4 B% E% D9 A
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);- e. D, I3 A" Z9 Z, S; s
  688.         dlg->ReleaseDC(pCDC);1 k8 E. K, k5 }1 |! |5 u8 h1 R
  689.         DeleteDC(hdctar);
    7 z$ K, F  w) P# K' V
  690.         DeleteDC(hdcsrc);
    . a6 H3 Y7 l0 p6 f0 a) [' u3 m
  691.         DeleteDC(hdcorg);
    - h; Y! @! {- f
  692.       }
    - z# ~, H6 H' E4 c2 [( A% E/ J3 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 j. R4 z1 ~: x- C% H9 z5 }- i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    6 {" M6 e5 ?" _2 N: H1 B$ O
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");( Y) ]/ n( S* \) ~9 _  Q( t
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- ?! _5 B1 Y) w/ T& }2 i3 Y3 ~# _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) |) \3 ?6 d" _9 z  h
  698.       if(!Dn.Connected())4 J1 R( M1 Z$ U
  699.       {. K5 k& m/ m) W' T- f
  700.         dwTotalFiles=1;( \3 I6 n0 E+ Z& D" f
  701.         dwDownLoaded=0;
    7 m. f  E* N9 A) [! \
  702.         bSilentStep=TRUE;
      w2 x8 r; n, q( V+ s! x4 T7 _3 u
  703.         bCompressed=FALSE;* e6 K+ |' p/ n
  704.         strExtLocal.Empty();% B0 m' q- {. A; q" h& c% C
  705.         strFullName="readme.txt";0 s8 w, O# o) ~$ N9 R. U
  706.         dwProgramState=AP_CONNECT;) t, M5 _$ G3 v/ M9 N* v
  707.       }& C" o# ]! o: Z* r& f& ?
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 _* f2 b: ^9 q" |3 A5 M, ?
  709.       dwStartUpSteps=2;7 j. N7 n% \- v) u2 Y8 Y, y
  710.       break;
    ! ~: @* |; o1 b0 u6 |4 N
  711.     case 2:/ s- f$ |; `3 b2 p; X# H
  712.       {& ]/ b2 H, q8 I( Z5 K
  713.         int iEOF;( @! ?( i5 G, s* R
  714.         FILE *fp;+ U' p9 x; H  J: Z9 B
  715.         char szString[512];$ r+ m1 k' j0 L% c- r3 I
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ Z* J4 u# i4 w+ w" a
  717.         if(fp)1 o1 x8 Q% }3 A0 R5 I3 I% |: [" X$ h
  718.         {
    3 c% i/ Q0 U* t- @/ i
  719.           do
    7 a* A% C, p4 L) Z8 t  y2 Y( F. w
  720.           {
    2 {' C- E' v- f8 O9 V
  721.             iEOF=fscanf(fp,"%s",szString);
    ) ~$ z6 p1 _2 @4 d
  722.             if(strlen(szString))
    # Z/ R  ]4 ^; `  B% p+ S
  723.             {
      D* P9 {$ R9 v$ D2 h
  724.               if(bFirstChar)) J) t2 b- |" v8 D) ?( E; P) ?
  725.               {" V8 ]8 P8 B; x% G9 M- i
  726.                 bFirstChar=FALSE;! K' @0 i: e# ?
  727.                 bConnectIsBig5=FALSE;* V4 b5 X' N  k1 @1 ]
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;; [1 @1 D( P) j! t- _5 w& M
  729.               }% j3 D( J% p  Z7 _  y
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / `; m8 e- m0 y. C1 R$ ^
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ' O! o' }: ?2 d
  732.               dlg->m_ListText.AddString(szString);- L/ V5 K+ W- u- [8 u2 R
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Z3 c/ T9 T( ?5 `8 u- q8 x3 s0 B; y
  734.               *szString=0;
    9 p. U0 `; i$ e
  735.             }  k$ l7 J9 Q; B" Z) f5 u7 z
  736.           } while(iEOF!=EOF);6 ]& I0 s4 G: E
  737.           fclose(fp);: j. W8 s1 {9 \$ |2 {. I" ?: P
  738.           unlink(".\\DownLoad\\readme.txt");, a0 @9 p: I* D! ~. Y1 R- o
  739.           dwStartUpSteps=3;
    ( r- X( M) G0 W+ {( h, i2 ^
  740.         }
    ( H& e/ x! ]3 j- L8 m9 V( S! \
  741.       }+ _3 d% B$ ^1 T4 z4 O+ W
  742.       break;
    * J8 |: H' E  O/ g
  743.     case 3:' R5 G( G6 m% `; Z& d+ w
  744.       if(!Dn.Connected())
    ( G7 I/ ~" S' u& U' J
  745.       {
    * R9 p" V- }; e7 L  h, k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);* T3 e% q) F0 B1 P/ B) P
  747.         dwTotalFiles=1;
    0 B$ y& ~4 Z- V! l
  748.         dwDownLoaded=0;
    ; Z) J! I5 f( n9 {
  749.         bSilentStep=TRUE;
    ( U# s' b/ e0 k, \
  750.         bCompressed=FALSE;( V, _  D  b( n) ?/ e
  751.         strExtLocal.Empty();; G& l6 L  y2 F9 `+ V+ O
  752.         strFullName="checkversion.txt";
    . [- L6 @3 y' J3 V7 [
  753.         dwProgramState=AP_CONNECT;; I2 i7 |2 o# V6 Z
  754.       }+ b; H8 m' z( ~( b1 F$ ?# G! _
  755.       dwStartUpSteps=4;7 [" L% ?6 C' a& T. Q8 p
  756.       break;: A( L: c, x6 T" z( D0 R% e
  757.     case 4:
    $ w& b% |/ I4 C" y1 q9 C4 w
  758.       {9 n& g! f( m8 y8 A& \( y" c  K
  759.         FILE *fp;- j' D8 g8 d& f7 Z
  760.         char szString1[128];
    * N! w5 Q' c" y
  761.         char szString2[128];
    , k9 l3 \0 G3 G5 r
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    $ I8 j% D8 J5 @: Q: y; |) e' H
  763.         if(fp)1 `% z  c9 q+ O; ~+ |% m! d
  764.         {3 d' l1 X- ~' d- x  F. s( b
  765.           fscanf(fp,"%s",szString1);
    , A# Q9 U* g* M, V+ w% \+ Q; l/ o. y9 \
  766.           fclose(fp);
    ( T2 x) }- K! d# U% p! W
  767.           fCheckVersion=atof(szString1);5 ?5 l& Y( h# z, s
  768.           fp=fopen(".\\checkversion.dat","r");; _# k5 t% r% T5 c( A; ]! m" u0 U
  769.           if(fp)+ X0 L( u( b8 M) H
  770.           {
    1 }# ~# Z" `0 i: j1 f% s( Y
  771.             fscanf(fp,"%s",szString2);
    $ ^9 I( s* g! X7 k3 F: ]; _
  772.             fclose(fp);
    8 [" z6 N4 q6 x4 ]6 p9 W' Y! t
  773.             if(atof(szString1)!=atof(szString2))
    / d6 ~7 e( C8 |
  774.             {
    1 t/ v' ~2 _" e$ U) `
  775.               if(!Dn.Connected())1 f, S1 P3 ~* ]% @& \! Z: b
  776.               {4 T7 @4 g  O$ N3 M0 d" X& e4 k# U
  777.                 bFirstUpdate=TRUE;
    + U2 d2 z+ O" R+ e8 o/ P+ c
  778.                 dwTotalFiles=1;
    . i+ G+ t2 z5 a# `
  779.                 dwDownLoaded=0;4 E! {( {7 _7 u9 g6 G; f9 W# t$ ~
  780.                 bSilentStep=FALSE;
    ! N& B6 Y2 A( Z+ G0 M
  781.                 bCompressed=TRUE;( W2 t' K1 q  m* D; N; Y: g
  782.                 strExtLocal=".\\DownLoad\";
    ! o; ~- S7 G( N, q/ Y, R, I
  783.                 strFullName="update.txt";
    " Y0 l" _9 z; ^: L
  784.                 dwProgramState=AP_CONNECT;" X1 O# Z1 U7 B: M' ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * l8 ]3 O& F0 l# j
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% E0 k8 A* M( H
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - j, x6 ~# n/ @$ S3 b+ H
  788. ! `- Q: L$ W4 ^2 a0 b0 ~
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) l3 ?! U$ M& x+ W$ x6 T
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 _( s5 c- v( S% k
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)5 i. m# Z& K1 s; W) Z
  792.                 {
    $ o% w! d  `! ?* v7 M6 _
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");4 ^$ W1 \; i1 F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");4 Q" y, y: g0 f, Y' _9 y& w: h
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 t' G& n) @" I: L3 p" q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 `+ |( i0 `* p! t2 {
  797. * m8 Q6 l% d. h, n: \" j
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");& c' ?( K: y; Q' ?/ e3 f. I( k( H% }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    0 n% {" i3 }+ O: C7 O
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    2 _0 ^) t" ~2 U$ Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ x' Q6 N6 G% c# U6 g+ L2 \
  802.                 }/ Q' A+ o  v- u; x; k. `" Q! i
  803.                 dwStartUpSteps=5;
    1 ~: q. `2 }# ~- m
  804.               }
    : r- A0 v# {) v1 n- t
  805.             }
    4 V, C  i5 w) m2 g" B8 T
  806.             else9 S. R, a5 u. T) m2 j* k
  807.             {
    % z* H. q" N" p2 g3 \
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 t0 A* h- I7 Q4 ?+ V
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    0 P* U+ R' F7 x2 a
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    . _# M9 d. K0 {& A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");$ S% x) T: }$ o: P

  812. # H0 C( K+ l' l
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: }- V& F5 ?" F% A- Q" P
  814.               dwStartUpSteps=99;% g" [8 g: W2 }# K& @$ I4 A$ E
  815.               bFinishUpdated=TRUE;
    % r& @+ j8 p$ V3 _0 i% k
  816.               bCanUpdate=TRUE;* Y# p) `9 u% l% R( I4 s* X
  817.             }
    : F+ d; w* i, m2 l8 }8 D# o
  818.           }. M8 c+ i. N" T! F
  819.           else
    6 @, n' }6 W, y/ r7 C* |
  820.           {) Y; H/ j6 [) T9 M" H8 }% }6 r+ }# s
  821.             if(!Dn.Connected())- B4 U2 L# O! l% V& ^& A+ x
  822.             {$ S$ Z( Q3 a' N1 @" A
  823.               bFirstUpdate=TRUE;( T7 h( x) O- X2 k8 u
  824.               dwTotalFiles=1;3 B9 C4 T8 k" o# E/ T
  825.               dwDownLoaded=0;
    : J6 e4 k* N& _+ Q: T! A
  826.               bSilentStep=FALSE;
    * B' m' G3 D: [8 t
  827.               bCompressed=TRUE;* q% e/ ^/ `. _0 k
  828.               strExtLocal=".\\DownLoad\";, V4 w. m* I) O' n% Q
  829.               strFullName="update.txt";& T! n" ]' p  m- I3 Q2 x6 z
  830.               dwProgramState=AP_CONNECT;! q" w' ~$ @! j1 C' q
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" }) B1 o; b% Y! m) }, v
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");% p+ }! W* l- s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; s0 t* T  X  `8 Z: r
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 L' g. V+ E$ X( ]7 _7 [- R
  835.               unlink(".\\DownLoad\\checkversion.txt");2 J9 k9 P8 ?" \" }! u: `! O
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 n1 ~0 A9 Y- O) }' ?* }4 w4 _: S
  837.               {: ]  p6 M/ ^, S9 }, N
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    ' _; j5 M! g* r$ ?* l
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    , _  k/ Z  H& q( R
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");; g* E4 c) R6 K* F) D
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 z6 b# \# V1 q( ~+ ^
  842.                 : \& u' S( [6 a/ y' W- m9 p. P
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
      P4 k: H. K  C
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : j+ ^# d2 M# _7 b
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 S% l$ {# j, |; `; x4 o" `
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 |& M( u1 `# R
  847.               }
    " J# K' P& n2 u; K% Z0 {
  848.               dwStartUpSteps=5;
    * B% ?- X# d+ p; w& b/ T
  849.             }: i# ]( ~: s& {
  850.           }  g0 w6 W8 E9 c) |" Y0 c% Y
  851.         }3 ^" }1 `( B# \. V! Y0 x: G
  852.         else% r' ~8 b# e6 n& e, K, E  r
  853.         {; i9 A3 J! ]0 `$ E+ C8 ^+ o3 t$ b7 L
  854.           dwStartUpSteps=3;
    6 g- c9 W7 O" K
  855.         }
    2 {$ R  M9 S7 l4 e% g
  856.       }
    4 C7 g# p1 x0 Z* I; w$ ?# J3 A
  857.       break;( \* P3 B: p$ g+ c
  858.     case 5:
    1 _  G9 y2 s/ Y/ B
  859.       {
    ) P- O' R. n4 w: r7 f" G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1). V5 Y" J3 r6 b3 c+ q4 ?
  861.         {4 }+ ^; A7 C" p  W8 L. O  k, |& Y
  862.           int opt_overwrite=1;- s" t, R6 Z: K/ V" U
  863.           int opt_do_extract_withoutpath=0;
    0 r/ P( Y9 V- @; B0 p+ e$ G! I
  864.           unzFile uf=NULL;8 |# O+ D" P0 D2 @% k: w
  865. ( O1 T1 N: K/ M$ S% w
  866.           uf=unzOpen("Wsa.zip");
    7 Y3 z& J4 r2 \1 D8 a
  867.           if(uf)- A' p$ z3 `& q  E
  868.           {
    . n- d; s; s9 G7 k7 |
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    8 z. q$ D8 L% k6 u  C2 `) n( h
  870.             unzClose(uf);* e% f. W, h$ U+ B% a
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    0 w1 m* b& a9 P1 r% ^
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");2 B# @0 D" }7 B: n" \1 q
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");1 A% W* h! O! b; v  g+ v7 R* \
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 z5 }: K% Y! x- ?$ x" ?4 @8 g
  875.           }
    + B; [, @" o( d& E) H
  876.           DeleteFile("Wsa.zip" );& {1 P% R; d- E
  877.         }
    ' P" _9 _+ C/ ~. `& w

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

* E$ F2 s% i; i$ ]' A/ C# E% U; {1 f( o" k4 `8 r$ s) k9 I

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-20 08:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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