找回密碼
 立即注册

CSUpdate.exe源代码

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

3 D5 ~3 b/ ?; F4 U. ]
  1. / RevApp.cpp : Defines the class behaviors for the application.
    . }. {1 b/ w' C: `
  2. //* u; B' C3 u2 y, X' z
  3. - Y3 D9 l; K4 t/ [, D
  4. #include "stdafx.h"
    1 F  ?2 x( x! U# r. X
  5. # ~9 y' u! B+ f( ~5 M$ y
  6. //#define UNICODE* u6 m% z- I+ m% B4 `" l$ G
  7. //#include <gdiplus.h>
    3 w* ~5 u% ?* D  [# _  @
  8. //using namespace Gdiplus;( E% D5 R  M$ y  j( R$ b5 x

  9. $ b2 b, {& @- G' D' o/ i
  10. #include "RevApp.h"
    " J0 b' R6 |) v
  11. #include "RevAppDlg.h"- s& D5 U4 S& @4 z; \# R
  12. 0 b+ a9 y: a; w
  13. #pragma warning(disable:4786)0 Z; t4 N4 F$ Q; u# R4 G
  14. #include <map>$ A1 P  r: L; W2 z# x; q# P
  15. #include <list>$ Q2 _7 F; Q1 }" l% S3 W
  16. #include <direct.h>
    + g: Q/ `- V4 n3 D

  17. , D/ s' P6 q6 `/ p6 X* z  z
  18. #ifdef _DEBUG) h9 L5 x' ~# i
  19. #define new DEBUG_NEW% }( Y8 l( `8 m6 d5 P  P
  20. #undef THIS_FILE3 `* f  v" S' z
  21. static char THIS_FILE[] = __FILE__;" c2 t6 J; q' H2 k# H: d7 H
  22. #endif
    3 {0 s% C0 `$ }+ `/ m( w) h  M* m
  23. #include "SkinResDef.h"; Z  O) L; |) y- x
  24. #include "ChangeBG.h"6 n$ [8 h8 z* {$ ]0 a9 l3 B4 \
  25. #include "AFXINET.H"
    ) q4 d! H  p4 c. E+ f: a+ d: a) z

  26. - e/ n; p3 ]" Z2 W' l3 `) O
  27. #define TRADITIONAL_CHINESE 05 L; w8 O6 B1 h! R3 ?: ?. Y
  28. #define SIMPLIFY_CHINESE 1% q( {% l. }0 w5 L+ S# G  p9 q
  29. #define ENGLISH 2
    7 _" a. V6 y$ p1 B( A
  30. int m_iLanguage = ENGLISH;
    ! i& u8 b7 x5 F* N- ^. A; B
  31. /////////////////////////////////////////////////////////////////////////////
    2 p' q! r" R/ N' @  a% _
  32. // CRevAppApp
    % i4 L% C( j8 j! ?: s& l4 d
  33. ) k2 v( d1 X9 \+ k3 G! Y. N% F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)# U" n5 ?3 P; h
  35.         //{{AFX_MSG_MAP(CRevAppApp); m9 g7 K1 D9 }% n
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.3 a  w. D* C0 N# r
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!6 f, k1 i) U, x- X& e5 a! t6 }. X
  38.         //}}AFX_MSG
    5 ~$ F' e2 m  e% e( o
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)" u1 P* D& h8 P
  40. END_MESSAGE_MAP()4 [0 X& X1 g" \

  41. ! D% k/ ^. I) a
  42. /////////////////////////////////////////////////////////////////////////////" e; \* u/ p" v  Z/ Z
  43. // CRevAppApp construction
    ; r8 P% }8 s  }) n

  44. : g" L' y+ r. H7 X
  45. CRevAppApp::CRevAppApp()
    " Q5 ]; |$ a5 }+ s8 M4 X0 n; p3 B* w
  46. {
    & p' ?4 c" v* ~7 Y* Q1 v5 k4 ]: J
  47.         // TODO: add construction code here,' X# q9 o/ {0 Y. W2 l, x6 H5 N3 T
  48.         // Place all significant initialization in InitInstance
    2 Z( M* D& I6 u) j
  49.   bDisplayIsBig5=FALSE;) ]# C8 k7 N. i2 ]% y. ~/ U( b4 Q
  50.   bRestartUpdater=FALSE;
    & ?9 a; C( b7 j+ u* _
  51.   bFinishUpdated=FALSE;- `, h1 R$ @3 w1 P& [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ; D% O5 l4 S$ |
  53.   InitChangeDataBig52GBKS();+ d& J# B! E% F" K+ K2 |5 `3 B
  54.   InitChangeDataGBKS2Big5();
    8 V0 y1 U, I' n
  55.         //
    # ?- }! Q8 ^$ S9 I3 S; V% d& M6 R
  56.         bClickRunExe = FALSE;0 J8 I3 R5 r% F0 i& T* s
  57.         //
    % l6 [( a1 q% a2 s" ~
  58. }
    # T7 n5 N9 D/ D! D

  59. 8 N0 |+ x: P( T( K0 Z
  60. CRevAppApp::~CRevAppApp()
    - K' a! q) s0 s3 M+ d1 {. L
  61. {4 A& d& t5 p; I2 X/ ^
  62.         // TODO: add construction code here,$ V# K/ T+ B7 n6 ?& N' M
  63.         // Place all significant initialization in InitInstance) H! e8 w" Z$ l+ o/ e9 q  b+ W& Y; f5 M
  64.   EndChangeData();! ^: ~9 q$ A. f. L! h* B! b
  65. }
    8 h( |1 I" O5 e$ s3 i9 `; }

  66. / j, P0 P4 s. P4 H7 o5 n5 _
  67. /////////////////////////////////////////////////////////////////////////////
    : e0 I6 q. ^$ Z9 [4 x! C2 X2 u
  68. // The one and only CRevAppApp object
    2 }$ _- S; _* G6 \" I, r5 C
  69. : v# o1 {  m3 i1 q
  70. CRevAppApp theApp;5 }8 {" m6 J/ X1 [

  71. 5 [% y' D0 H* }) O% n
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)$ \/ r+ d6 x( u* y1 S7 v/ V" Y
  73. {: S1 J3 g- d' ?2 r7 X
  74.   int iEOF=0;
    ; r" s! F3 ]7 x7 ~9 V0 y
  75.   char szTempName[MAX_PATH];
    3 U8 q& r: P; C; B
  76.   *szFileName=0;2 {+ J, E7 Z' }
  77.   iEOF=fscanf(fp,"%s",szTempName);$ {. E5 Y2 K. a7 e( ?' v
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    , n) N8 @: |, D2 [$ W
  79.   {, Q1 `0 X9 _. @4 F8 x4 R' _9 o
  80.     strcpy(szFileName,&szTempName[1]);
    0 j- G# v/ T. `, x7 r7 N. @4 N% o! U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 _  @3 s; u' i' m( Y9 J( d
  82.     {3 ~" r* ]0 {0 M, O
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . y+ ?" Y) Z1 a
  84.       strcat(szFileName," ");9 f0 w( L  J5 r/ `
  85.       strcat(szFileName,szTempName);
    4 R+ P  L1 ^* u$ L; Z
  86.     }
    / @' R3 d6 g. `  y
  87.     if(strlen(szFileName)>=1)
    " w3 T& E# `0 u, b
  88.     {
    , h8 w9 x! b# g5 E* S
  89.       szFileName[strlen(szFileName)-1]=0;1 Q. h5 A$ f9 n- ^# R
  90.     }* G8 u& b& Q1 I; V4 h
  91.   }
    ( j( [, l& Q" }0 `) a6 t
  92.   return szFileName;3 s  E: H' h( x0 o0 w8 O8 r' l0 i
  93. }# w6 V, Z" Y. @& i/ y% v& v
  94. : _1 D3 r& W' N  u+ f
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" ~  ]  o" X, I8 I( K7 o4 X
  96. {
    % q# S9 _% E6 ^; A: c, ?# \$ c8 d
  97.   FILE *fp;1 ?0 i4 I2 {; R# O; Z4 O1 F' ^2 y% G
  98.   char *key=NULL;
    1 K4 l$ s1 {! |/ m
  99.   char version[MAX_PATH];# [8 p) k, I& P1 j
  100.   LPUPDATEFILE file,olds;
    , R" ], M% o, w) [5 F& \+ ^
  101.   std::map<CString,LPUPDATEFILE>::iterator p;3 r4 u' \( }9 D: @/ X
  102. , M9 ]3 a4 y( N, B1 @$ I
  103.   UpdateList.clear();
    " ]- J6 t1 A- a1 {0 w' w1 V( R
  104.   UpdateFile.clear();
    1 A4 z; B3 G+ V3 I$ q+ ]  d
  105.   if(GetFileAttributes(filename)==-1) return false;
    6 D- u4 y/ g/ h: _) ?
  106.   if(!(fp=fopen(filename,"r"))) return false;+ G( E+ J+ A# O' V6 P( H
  107.   fscanf(fp,"%s",version);
    , ^% p- w+ g! w. x: g( g  H  z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * g- v0 Q! ~4 \1 ~+ T: E$ G- U
  109.   while(fscanf(fp,"%s",version)!=EOF)
    5 U2 \/ e! y9 Z6 T$ x! b
  110.   {
    7 f5 r( y- \6 W
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 {0 n' T1 A7 _5 ]3 R2 c
  112.     fscanf(fp,"%s",file->path);
    / M! Q+ Q( F# r4 m4 r
  113.     ReadFileNames(fp,file->file);7 |' v/ L! U- L% l$ Y. I
  114.     strcpy(file->full,".");
    4 o5 o( X) b* I& J+ q4 v
  115.     strcat(file->full,file->path);
    ; [$ C* G/ J( b% U. x
  116.     strcat(file->full,file->file);3 X2 J. z/ N  q+ w7 b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & ~! A, ^4 @: F4 L/ M7 b
  118.     {
    + b7 C) _- s0 X# y0 w8 j) U6 k4 w$ s
  119.       file->vers=(float)atof(version);
    8 J0 f0 }" d' }6 f. H+ E1 ~
  120.       UpdateList.push_back(file->full);1 |2 A# ?9 G  G% N0 ]" }3 E9 _% i
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    : O9 v8 ~' O' Y, I. Z1 K: u
  122.     }
    9 {! L6 S! R0 q! _; a2 T
  123.     else
    2 N0 Y9 F/ @2 v! l2 o
  124.     {( X5 E' d# `) ]) U6 V% `
  125.       olds=(*p).second;( F" [" N+ m0 q: T% I$ z
  126.       if(olds->vers<(float)atof(version))* `* i. t4 h* U; F
  127.       {
    6 y6 W  U0 u- c. y" m
  128.         olds->vers=(float)atof(version);4 r. k/ k" l+ E& z7 f: i3 U9 }
  129.       }( {' E; E  c' z! p. X" i
  130.       free(file);
    - j& ^2 N/ t& L6 z
  131.     }6 q$ K. G) b$ c9 {- ~# H; @
  132.   }
    & N9 r" l. \* C3 N, D. V1 Y
  133.   fclose(fp);
    0 D9 Y; O( s$ x7 ]% A; X
  134.   return true;
    7 q7 U! [7 w! M
  135. }
    + _$ L7 b2 F' a( s/ B

  136. 0 V* k& ?3 X, j. P  A
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)9 X; P5 _) g# k/ v, U) M- K
  138. {  r; Q' W! b6 R+ @# x8 h$ j* d
  139.   TCHAR  szFull[MAX_PATH];
    5 c2 y7 T9 ^% x# C" P' [! |
  140.   TCHAR *token,*inter;
    ! S/ z3 ]" T9 `% ]+ _! V
  141.   *szPath=0;0 n2 `" B! K% H5 R: T5 I/ z8 m% j
  142.   strcpy(szFull,szFullPath);6 n5 O2 B3 I: W$ j8 J( {
  143.   token=strtok(szFull,"\\/");: V9 A0 L7 Q; N7 D' M8 f, G% Q  Y
  144.   inter=token;
    ! M2 c# I: h" p. ~1 [& q, M
  145.   while(token=strtok(NULL,"\\/"))
    4 b3 t( B1 l, f: I' c* |" a) c
  146.   {- M; l5 `( p( X5 P$ s. y
  147.     strcat(szPath,inter);
    - M% ?2 m( i, ^0 s! k9 n
  148.     strcat(szPath,"\");
    5 o( i) e: s) X1 E# O/ Q
  149.     inter=token;3 c! q4 K, z0 P7 Q
  150.   }; ]* u% {8 r2 T' Z
  151.   return strlen(szPath);
    5 g3 `! U! ?" _6 @
  152. }
    ( g( d, A3 G) [; U* T
  153. 6 e3 _# r/ G8 @% c( J: Y5 v
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)6 x% ~& J* D6 A' ~* `& j* M
  155. {
    + |+ W  P" c7 k; \( S
  156.   DWORD attrib=GetFileAttributes(Target);
    & R6 L8 Q! S: O. ]' G
  157.   if(attrib!=-1)4 K8 Q6 i/ u; _& v2 ]$ A
  158.   {# |0 y5 k/ B% D0 `7 Z  |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * }4 p5 `) m7 a$ u
  160.     {1 ^7 U, s- T  U. K: ^
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);! a0 {# f5 O1 ~5 O  ~( V
  162.       SetFileAttributes(Target,attrib);
    2 I" z. d- N# K
  163.     }
    9 R" R2 M( S/ f
  164.   }1 X! s: V- O# Q  A) i& V
  165.   CopyFile(Source,Target,Erase);  l/ p! c$ e% i' y4 s1 l
  166. }4 F7 T! I' m0 O+ Y, K  u0 u

  167. ( j% a* x& E- c/ K( k' P9 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)* V( G" l0 F5 F4 `; P. K
  169. {
    ( `6 Y: S& s$ d# y0 Q& H" H
  170.      FILE *fp;
    & H& S# X" P- f6 q1 \7 a! ^
  171.      char  szBuffer[8192];5 B: E- }/ j. J$ w8 q
  172.   va_list  argptr;! a! G7 G% t. Y9 w2 I
  173. - E* k7 m! f3 Q5 r5 ~% }
  174.         va_start(argptr,message);8 U- a! w2 Z' x1 g: v1 }! N
  175.         vsprintf(szBuffer,message,argptr);( `# h# R  r! L; S
  176.         va_end(argptr);
      k0 g# X' _! Y0 v
  177.   fp=fopen(FileName,"a");
    $ @! U7 ~: f4 C) m" D
  178.   if(fp), l# n% n. F/ N; Q, b
  179.   {+ D/ R0 U: j* G* N( U9 a4 o
  180.     fprintf(fp,szBuffer);' S: W% O5 v3 F& M$ {
  181.     fclose(fp);
    : ?/ I0 F2 f+ ^1 c
  182.           _flushall();
    " j4 Z2 z2 N: \# `5 e# ]" F& ?8 P
  183.   }) A' o9 Y# D( m2 R1 a3 ]
  184. }
    " w+ c! a% l) u$ D
  185. $ S* O: K. b& x) P$ w1 k
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " J/ m5 R  b$ p4 w9 I* J
  187. {: e1 c0 m" q8 A/ [/ I  f1 I
  188.      FILE *fp;
    2 b& E  O9 ?# h& [. W# h! W; L2 Z
  189.     DWORD  attrib;; g' u4 n; r) p
  190.   attrib=GetFileAttributes(FileName);3 }/ j; ^. v: {* }$ q9 k
  191.   if(attrib!=-1)- v7 e/ B6 N& |
  192.   {$ ~% O9 d+ s5 i# j
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);; b' L; Q5 W: n4 G9 g0 n) W
  194.     if(!SetFileAttributes(FileName,attrib))' m. o& k3 M% \8 k( B% y
  195.     {! ^2 @. k; s9 G6 \
  196.       return FALSE;1 o+ x( W+ [" G8 i, f  ~$ [, G
  197.     }
    2 n/ L6 ?3 a1 W9 U8 y) r
  198.   }
    * G) g4 C, I5 @/ ~) }4 O/ H
  199.   fp=fopen(FileName,"wb");
    ! k. ~6 z- v4 i8 y" Z$ O2 F0 l% Z
  200.   if(fp)
    ! P: B8 F. z5 x  u1 V2 l( T5 w
  201.   {+ F+ I! v8 ]3 k& b
  202.     fclose(fp);
    3 D9 K9 M2 g7 W
  203.   }  l& w) O. z( R3 B& M+ T2 f
  204.   return TRUE;! k" S# P% h0 b1 k
  205. }
    ( U4 U' Z6 V- R2 k( S

  206. 3 Z! q' J/ p& U, I( `- \
  207. BOOL CRevAppApp::UpdateLocalVersion(void)* v* B- ]8 n$ v" A# k. `
  208. {
    + Q) H, s4 Y5 u
  209.   char filename[MAX_PATH];4 c6 C1 D! {( f8 z
  210.   LPUPDATEFILE file,olds;6 K1 b9 a8 ^2 M  r
  211.   std::map<int,CString>::iterator i;
    ( N/ `) Y; k* @
  212.   std::map<CString,LPUPDATEFILE>::iterator p;5 I- Y" Y- y0 H0 e
  213.   std::list<CString>::iterator l;. m; E6 Z. h: [5 R
  214. 9 O) s' {  A7 u# a& ?
  215.   if(bFirstUpdate)
    $ [+ F/ h! W+ Q3 d+ P) A& U' Y7 c: b
  216.   {
    % U; U4 N6 r4 x- Q1 O4 S$ v5 N
  217.     dwCurrFile=0;/ b& G. k- r: P. v" D
  218.     bFirstUpdate=FALSE;
    ! [1 s& u6 D+ m9 j
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 q5 @, Q5 K' |( P2 V% {" E5 W
  220.     {. A/ j( P: ~* L; o/ m3 u& y# y
  221.       dwTotalFiles=UpdateLocal.size();( q) ]3 s. j0 n+ u
  222.       dwDownLoaded=0;: J4 Y0 m7 w$ Q$ |
  223.       bSilentStep=FALSE;
    5 B0 x/ g, }* K& `
  224.       bCompressed=TRUE;
    # ~8 Q8 P" V1 [  H
  225.       strExtLocal.Empty();
    3 G9 r$ G2 ^' r8 n& `
  226.       strFullName=(*i).second;
    7 v8 U: j: Q: X  j8 {" {
  227.       dwProgramState=AP_CONNECT;8 z- B* \0 x( |% `" l( x6 A
  228.       return TRUE;
    , n. D' {0 M' b5 Q3 }  B: ]3 c
  229.     }/ m5 g0 h# c! ]6 |
  230.   }; W; `5 k$ e  a& X7 g' k
  231.   else if(bRestartUpdater==FALSE)
    ( @2 w2 C) }7 t
  232.   {
    4 q: z& v  T3 X8 Y- c! z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 {( ]" n' C! p, E1 z
  234.     {
    ( j) ]' Z  V6 E- P& X3 J
  235.       file=(*p).second;
    ( W# i, i0 a9 B( y6 u, I: R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    * Q% [1 M. s+ u5 j
  237.       {1 ~' b; r( z9 S- f
  238.         olds=(*p).second;2 J! \$ s8 g, \1 ~1 w* X
  239.         olds->vers=file->vers;
    0 W. J5 I% @0 S& C( P. H3 G
  240.       }2 r2 _9 t+ Z6 E+ _0 i& v
  241.       else: F! m: w  \$ Q
  242.       {
    + T/ c9 n( F7 ]! n
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " N0 [; R2 u8 T9 r7 h
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ R7 a; o4 {7 B% y
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));* z/ Y4 S  Q$ K4 V; ]* ^4 z* n
  246.       }1 k. }5 }% g, m$ D+ k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    ! `7 L* }* `- r( c. N0 H6 d
  248.       sprintf(filename,"(%s)",file->file);1 R, P9 V3 J7 O9 Z# y
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" N( i5 v& j7 c
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    % |2 [% W/ A3 V( q) I# x& B
  251.     }  P# h+ t' e6 V2 p) K
  252.     dwCurrFile++;
    3 m. K& U' V3 u( R
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 D& i6 `, q/ Z9 q
  254.     {8 ]# b8 l" L0 B; ^7 a  g
  255.       bSilentStep=FALSE;# _5 u" T1 @* C2 ?+ N5 O1 y
  256.       bCompressed=TRUE;, x/ G$ l, t# ^; S* b
  257.       strExtLocal.Empty();+ d$ o. V" i, Q3 }8 A6 q. Y, v
  258.       strFullName=(*i).second;/ e& f& M7 j- J
  259.       dwProgramState=AP_CONNECT;* C# v" u0 n$ T2 }% `& e# ~
  260.       return TRUE;
    7 n8 ?, e: c$ G+ b! w1 e, A' E
  261.     }# ]- U* }2 ^3 p/ o$ J
  262.     if(!bRestartUpdater)) a5 K! z7 S: B6 e; x7 z7 Z
  263.     {- K& q* a( b$ D8 U+ Z' R+ r
  264.       int iCurrSize,iFileSize;8 b- W* k$ b3 M2 P% j
  265.       iCurrSize=0;* X3 S3 W. k# E% A* B" Y
  266.       iFileSize=UpdateList2.size();
    % l0 E& W$ S2 l5 V' P  @" \1 m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    $ P4 f4 L) a2 e# q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    , i2 ^  b8 q; C% b! S% h# c- c' H
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- ?/ A; l' J( z
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( R$ r4 d) d. X% g
  271.       Fclearf(".\\update.dat");7 D1 F' I" {3 n" `; u! |
  272.       Fprintf(".\\update.dat","Bloodyf\n");$ F" O# b# w& ~
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 O+ [4 M" z2 G; K# |
  274.       {
    . H! E6 V( q' _
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())/ q) N( }# c7 D. ], N+ q+ G
  276.         {
    ! D' |/ w  C# f1 k) j8 F# P- h* j
  277.           file=(*p).second;. u5 m/ O  w6 _
  278.           sprintf(filename,"(%s)",file->file);( Y& Y- x5 q) v3 m
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - W+ _8 a. `7 D2 M% F: c! v
  280.           iCurrSize++;
    . ?/ u8 K- K. F2 u
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));7 q# F0 V% ~7 ]& }% d; m0 L
  282.         }
    5 B' W7 h: Q# k6 i# J, ^1 z  b5 W
  283.       }
    6 f0 r9 K8 t$ J
  284.       unlink(".\\update.txt");
    , H) y! f4 J" _+ @7 x9 I; K
  285.       unlink(".\\update.tmp");0 p* ~* u# a4 o7 p& \
  286.       Fclearf(".\\checkversion.dat");
    / s7 n/ ?6 N, d
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ( h( \: i: P+ u* _% n
  288.       if(UpdateLocal.size())7 G2 @. g$ _; B7 o  o
  289.       {
    % x/ ?. m0 `  ^& c7 i4 N; H+ y
  290.         UpdateLocal.clear();/ [% c7 |, y  N0 v
  291.       }7 h/ O% V/ u/ J5 F% E( D7 K/ j
  292.       if(UpdateFile3.size())
    * \5 Y" Z4 B" J" a0 i+ S: K' p
  293.       {
    ! g4 c" q; r( C' d( _
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)4 I' K2 t6 ?+ G+ K& T7 W: a' \! ~
  295.         {
    4 m8 F0 v: w: i0 G4 B. ~# K
  296.           file=(*p).second;
    4 }8 b9 }' q  o0 Y* _
  297.           free(file);
    ' _) o, z+ U' O% m
  298.         }
    ' e1 r7 W% F8 O/ }
  299.         UpdateFile3.clear();# b* C8 }8 n, v8 B& h
  300.         UpdateList3.clear();1 x  t4 i, Q8 A8 A4 i
  301.       }
    $ l$ O6 g, n" z3 s+ p1 e& A! y
  302.       if(UpdateFile2.size())6 a& X0 y1 J9 I6 ?7 _3 H
  303.       {
    - ^. y" y- l9 S$ p
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 x- p+ J" S6 x# u
  305.         {
    + a  k9 `9 }' h& i
  306.           file=(*p).second;
    1 H* O8 E, r1 s7 O. q6 ~& }* E/ @
  307.           free(file);
    ! _+ F% c& h* Y2 h2 I/ o# ^
  308.         }
    2 z5 M8 I. C) p3 |3 d/ N5 u
  309.         UpdateFile2.clear();
    3 P( A3 i  [; i. `
  310.         UpdateList2.clear();
    ; @, N; n: s5 H% q5 {, m$ M
  311.       }
    3 A3 A  J: x7 m, N% C
  312.       if(UpdateFile1.size())! q- r) h* U$ T  e  ]& z4 v
  313.       {
    : L+ i) c" F: {: C4 O' l) ]& d
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : o  |( l- {% Q/ s1 d' x; ~
  315.         {* [! K; N. ], t3 N, w+ k
  316.           file=(*p).second;/ |& ~3 [5 Y  b  ?+ q
  317.           free(file);, P( d& G& t& ?# O$ C
  318.         }
    & c6 M1 W9 h) q
  319.         UpdateFile1.clear();2 p1 K$ k' b) `+ _1 L! A2 @
  320.         UpdateList1.clear();
    2 u' x0 }, `5 G
  321.       }9 l4 ?+ n7 m* z3 \
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    2 d7 ]8 d4 y  F
  323.     }
    & c9 L" d" m$ e
  324.   }
    9 R- V0 [4 c# D+ `& S8 e
  325.   return FALSE;4 P3 |& ^  A5 a- k" T7 M/ J) C
  326. }7 A4 p) b1 O9 s( c- D  ~! Z

  327. ) S9 \+ l, G8 x6 }5 u# b- t
  328. void CRevAppApp::ClearAll(void)3 k! i7 W  W2 J% n" ]! B; t
  329. {
    ' L& Y( K" ^- k8 }0 g
  330.   LPUPDATEFILE file;
    # L8 G' ~+ X2 t
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    " {+ m5 J8 u  O: l, [

  332. ' `2 X, ^& ]* e- J
  333.   if(UpdateLocal.size())9 T8 ~$ B% b# D2 Y( P; x
  334.   {8 |7 \3 x& `5 z6 e, i6 q' L3 V
  335.     UpdateLocal.clear();& ^. ?, V7 F) k8 v5 U0 C5 S) b( C
  336.   }
    + a: S, a, x% W! j! S1 ~6 ^' Z
  337.   if(UpdateFile3.size())
    4 \, C8 Z& O5 l. v6 j( v* ^( ?# I
  338.   {
    / b6 Z1 a' r- O, B$ f4 G; j. ~; y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 d0 N5 P7 a9 e6 y
  340.     {- }, y0 r, s) ^1 J: a# M* ]
  341.       file=(*p).second;. U1 V+ X, \% u; ?# d
  342.       free(file);) o" o* W  _2 B
  343.     }
    3 L# s/ Q/ i- y, H3 R
  344.     UpdateFile3.clear();' Z5 w6 N9 P4 @' ~4 @
  345.     UpdateList3.clear();3 r# H1 c& ?" K1 W
  346.   }7 r) X/ S% Q- |$ e) U% t
  347.   if(UpdateFile2.size())6 N' k& r. ]8 H8 a
  348.   {( L7 c8 ^' c* P6 h' c
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)  p4 Y! m# w4 b% S; J, z8 n- O
  350.     {
    # Z$ D+ ~8 Y2 P5 E" j: k6 A
  351.       file=(*p).second;
    . B, [# r: N' Z
  352.       free(file);# |# b: P3 V3 L
  353.     }- ]$ q' J6 F3 Z5 f7 _
  354.     UpdateFile2.clear();3 W% \/ q$ d2 s" p$ V. O: p0 W- h
  355.     UpdateList2.clear();% t5 U; a& A% q% `% T# {
  356.   }; \7 D1 y/ T. D5 P) a- I( i/ i7 p  Q+ q
  357.   if(UpdateFile1.size())
    : k( L  b- Y' v
  358.   {
    8 p1 [9 n7 c4 _  `6 k$ s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)' z$ O5 U* ?* M. W
  360.     {
    6 H' g  ^% W( f* n  R2 V
  361.       file=(*p).second;
    . @1 S' }  v: O3 l0 c
  362.       free(file);
    ' n% O4 `2 @/ u: x5 c+ V
  363.     }
    0 w3 M1 Z0 t: E) ^2 g7 z6 F
  364.     UpdateFile1.clear();
    6 Q. M7 g& d/ O* }# L* n
  365.     UpdateList1.clear();
    ( T; M: d3 T' M% ~  J* |5 T7 ]
  366.   }
    1 |1 F) b& z$ r8 _
  367. }  6 Z8 g5 {0 g5 t, g
  368.   " s! O: f0 p* ?5 w
  369. BOOL CRevAppApp::CheckLocalVersion(void)6 s3 E$ ?- C/ }% h- E" w
  370. {
    & m1 m5 B& W* ?$ J' a8 i& ?
  371.   int c;! u$ d7 x- N, q: C( m1 ~
  372.   LPUPDATEFILE file1,file2;% C9 H2 t: G' I) u7 ?
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;9 v/ w% B" a. _- Z( O) n$ u
  374.   std::list<CString>::iterator l;
    , Z- d; a% Z3 b" {6 E
  375. * N' s; _& e7 {5 a. X
  376.   UpdateLocal.clear();
    / O; I, i  b7 n: `1 W0 F
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    ! X9 v% q+ s& j- E, E
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. ~5 `2 x" B% H" z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) U0 o: O' R# _8 G* P$ y" h4 ]
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);' o4 l, v; r: X9 \3 `. v5 H
  381.   if(UpdateFile3.size())
    + h5 {$ L* _: y& p7 i8 M* e8 o
  382.   {/ \% c% e% W5 I+ G9 r4 [% z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    ! Z! u! q- O- `
  384.     {% _& ^/ r0 y8 H( i4 u+ I0 g
  385.       file2=(LPUPDATEFILE)(*i).second;1 j2 Y7 c9 B) m: |( g
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())0 e1 [/ [0 \: W2 ^
  387.       {+ v8 a$ i) _2 I( S) O) S6 S
  388.         file1=(LPUPDATEFILE)(*p).second;
    ! p0 g; i; c" D' I- Y3 w  x$ ?2 F+ N
  389.         file1->vers=file2->vers;
    : r+ J- k8 e5 c2 m8 g$ w
  390.       }
    ; v" D; W7 }& i- S
  391.       else5 `5 Y2 ?/ ?: {- D4 ^9 h" R3 f
  392.       {  q& k$ q- G, p6 D6 s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 x; ~0 l0 w, S( D; p8 \! L2 g1 }
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
      U! ?/ H" Q$ v5 X+ j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));6 V3 H( |  m+ J5 J: g! G; i
  396.       }1 a/ e. w# A: `  A$ d
  397.     }
    # x' }+ X2 w8 Z2 _5 F8 X3 I/ A/ P
  398.   }
    2 J" P" Z. R' y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)" n1 @3 t9 s( _* j  s
  400.   {
    . \9 ?: f4 ^* e  c4 \+ {
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 X" h6 ~0 t, g7 B8 ]( {9 G: J
  402.     {
    6 b5 Z! Q: w# S( F6 q1 J
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 ]: c* u0 u7 V
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 G/ I6 ^6 S# R" N& ?8 Q
  405.       {& j. C1 C  Z4 g1 l! p3 B
  406.         file1=(LPUPDATEFILE)(*p).second;- l1 p/ D9 ~( |9 H
  407.         if(file1->vers!=file2->vers)
    ) z& d4 Q  P5 ~% t  s2 b
  408.         {
    3 q: |1 L2 I: V0 ^8 s
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! D: O( A7 z5 w
  410.           c++;
    * C* T9 k; s/ r6 i
  411.         }
    ( _! r: n& |5 ]7 {/ z( [
  412.       }" R2 R4 W( K; W8 k1 b: j
  413.       else
    2 n/ n/ E- A, S9 r% |5 x' `
  414.       {8 @4 [( o- }3 G9 j* @1 Y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));5 G6 x7 c/ |# \( J; E1 _! S+ X: s1 w9 ^
  416.         c++;
    6 i3 C  }; C# R5 `% }# R
  417.       }
    % R+ Q8 N) X2 W: D! w, m) W
  418.     }
    5 ~9 X& R6 t1 A& X' U
  419.   }
    . R8 s( q. p4 B6 A" o. W, I: v
  420.   unlink(".\\DownLoad\\update.txt");) \: o) ~, [" ]3 c
  421.   if(UpdateLocal.size()) return TRUE;6 Z5 X8 N$ V+ |5 X+ y# o# v% G
  422.   else                   return FALSE;! c: y, c9 a3 n3 n. t  y
  423. }
    0 y) L/ }9 F4 E3 B/ o6 c
  424. ) p: u6 C- y/ k- e# R
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    $ I! D- @/ ]4 s% v$ t. ?
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
      U! K0 O% D  T# E& E3 N

  427. + l9 M. z) p6 T4 ^# J
  428. ; ~+ M' W8 w# S4 v( D/ r5 e9 ^
  429. + p  H9 d/ s: l( B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( j! h7 k& K# s: z' ^  X0 D4 ~; s
  431. {
    5 L& z" ~( i+ T. v3 W' ?9 f8 Z
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( J0 n3 T9 c5 G8 n0 U# J
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ G4 Q( J4 L: t; a$ M* l4 _
  434.   {3 h5 `2 ?0 W( ^4 g( Y
  435.     char szLanguage[50];2 C0 k  _  Y$ L# |/ F  X9 U' O
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");. c( I; L# w. [; F
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , Y. Q6 @. X* k! ~6 L! F
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;% ~2 G; x& D8 u" a
  439.     else                                   m_iLanguage=ENGLISH;
    - k: |5 ?' y4 R  M
  440.     char szRegister[100];
    5 t9 E; r) e" u8 B% C3 X6 K& }) l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 C$ P! g* k! ]7 r# U% M
  442.     strRegsName=szRegister;  M$ f+ V5 u6 m& o8 a, T; J# A8 n
  443.     char szPatchURL[100];
    * ~7 j) P9 Z, [1 d  W5 v5 s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");7 Y6 P# s3 ^  K# \* \# s+ d
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / U2 W& r7 V0 D/ r
  446.   }' q. g9 {; _" L$ H
  447.   else' \- P, I4 k$ {6 v" m
  448.   {1 ^7 H0 Q" e! Z9 n, v( Q* ]4 i' C
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# Y9 V0 o' W( E5 ]/ R$ B
  450.     strRegsName=DEFAULT_REG_URL;
    % e6 }$ C$ r) \7 |
  451.   }
    0 {1 J  ]% D" ]/ @2 v
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    8 e* m6 R  L$ |) m* R' C
  453.   {
    . T, n4 V+ v% R! `# z0 g
  454.     char szIP[50];9 J: I9 S; z1 M9 B7 s+ C
  455.     char szDIR[300];4 `/ P$ N3 H! ]9 @! l7 V
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ; q# \- _: x2 ^; o4 a+ _
  457.     {2 \2 S6 z5 l7 E/ {( d& M" a) `) w
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");; v7 u, f$ I* t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    - z% V# L% m4 e2 \  R6 S; V5 x
  460.       strHostName=szIP;/ \7 b3 V& f% k+ O' _' k4 B. Y
  461.       strHostPath.Format("/%s",szDIR);* E4 Y- X: o: N* v
  462.     }
    ; ~) R# M) m1 K/ H* K
  463.     else% f3 U: |8 K' m0 T- Y
  464.     {
    6 g' o1 l  \$ O+ U7 m7 o! ^
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    8 ^" p3 w2 c) T, L5 A
  466.       {
    4 z! q7 F- Q* E5 y
  467.         char szLanguage[50];
    % G& d+ W$ m  {$ s8 ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " B4 K, ?: \; V
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;  |- h3 d: n" D! o& Y& T# `" F
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;9 f) a' e* g5 W9 o4 {
  471.         else                                   m_iLanguage=ENGLISH;
    + e% j: w+ a( S) e" T2 D, }
  472.         char szRegister[100];
    4 _" u' ^% Q9 G( ^. v
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; `2 W# [* ^5 M
  474.         strRegsName=szRegister;
    6 ^) A" v3 T: i+ X5 Z5 j7 C7 y
  475.         char szPatchURL[100];' R) v. d1 s: s6 I
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 w8 `( w+ n3 y; a3 b& l, I
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);/ p: u+ t7 ?6 N" d; D
  478.       }
    ; F0 w, u/ v! N9 w7 T
  479.       else$ \9 ~; _4 Z. l% l0 Y0 `$ U5 y- [" p' F
  480.       {
    8 _& y2 Z3 K; g; g, X( C
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);! n8 l4 h/ y) ^2 Z: j' R6 T
  482.         strRegsName=DEFAULT_REG_URL;
    ( p, k0 z! r* j; y: U3 A1 u" R
  483.       }+ \- P% w4 m4 ?
  484.     }5 I7 g9 m3 ], S5 x* i$ U! `6 [
  485.   }
    ) r) h& p% f/ v0 [1 p
  486.   return true;
    . W8 [" k2 B& d+ Y6 q
  487. }( t2 j! d9 p: v% n8 u4 ?0 |+ m

  488. + K) i6 A0 _/ z5 X! r
  489. #include ".\ZLib\unzip.h"
    3 L8 H8 h: E" R" ~/ g
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);5 f; i9 F/ c7 o3 O6 R9 l; L
  491. /////////////////////////////////////////////////////////////////////////////. ~1 {+ T; j& a4 W0 r
  492. // CRevAppApp initialization
    0 k1 g/ J4 g' W  F& l, v# K
  493. 5 g$ x' s+ D$ O1 q" J/ k
  494. BOOL CRevAppApp::InitInstance()* w3 c; K: n7 `
  495. {
    ( \+ w* I9 Z0 g. g; `
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% A9 E7 L6 f$ o4 G

  497. " W. b" N9 N' _( o& V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ( d+ i# ?7 |' T9 w+ P- j5 ^& x
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))1 a* x- q- W, R: i! c# N
  500.   {
    , w. |, o& A( }3 H
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 L0 ^' N5 D' [$ v, H: k+ B+ B
  502.     GetPathFromFullPath(szPathTarget,szPathSource);" V. U5 p! D9 V0 A- k, S# s
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    & h$ U; q/ Q! [4 c- D. _; w) u
  504.     {
    ' D2 x) I( {, Z2 ?% T2 r; j
  505.       strcpy(szPath,szPathTarget);6 q- H- Z$ i# S
  506.       SetCurrentDirectory(szPath);9 b) M9 }* z  e6 K' Q* Q; G
  507.     }
      Y- i* C6 c; K, P% P+ q
  508.   }+ v+ o. b% n# Q; Z; u, T4 `
  509. #ifdef _DEBUG( ^6 Q  _& N9 N7 \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 A- l* W% y* ]) m4 e
  511. #else1 K. \0 {) V  k+ i
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))  B; M8 G& i2 |& W# Y& g9 b9 O6 y0 ?
  513. #endif
    % [0 y' ^1 r, r* x/ u+ O& w1 @4 [
  514.   {
    1 B5 S2 X9 d1 {* f: d" \8 ^
  515.     char tempFileName[MAX_PATH];$ w2 l+ h! H+ K6 u7 i6 G& g! A
  516.     strcpy(tempFileName,szPathSource);7 ^, r5 u, ^* j1 X8 `6 _6 r- x
  517.     tempFileName[strlen(szPathSource)-12]=0;- C7 z( F# i- O$ ]# N2 l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");% N' M  m4 y" J+ V* B3 W
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * p- P' C3 Z8 s& v2 u2 a
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);$ q' |9 c/ Z* ?; I! d7 F, W
  521.     return TRUE;
    : x4 T. @% ]: z# U
  522.   }  J, J0 l' Y3 \2 L& ]1 a
  523.   // Nuke 0118: Delete run.exe
    9 f  Y+ M/ D$ k6 \7 Z* m$ S$ C/ S( P
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 t8 R2 x* K8 |. q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");8 Y7 P: C2 Q! v  s# Y
  526.   if(!ReadCfgFile("Config.ini"))
    ' E4 ^+ F/ {' L5 g: S+ N9 |; h
  527.   {
    $ R2 ]  }6 N0 z" x- M# g
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    8 J" v: q! t9 p5 @, Z9 I; H
  529.     return TRUE;" y/ p- u- v3 \5 k% F8 Y
  530.   }
    9 f2 [: ?4 |& }9 @
  531.   HANDLE mutex;
    0 ^( d  s2 _  F( v- U
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))% {- ~3 t; d; L% Z' t) z
  533.   {2 \2 O3 ]: z' U3 ~1 ], F& p" P- V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    . F$ q  N* Y; y  S& n
  535.     {
    1 S/ D; t& \/ T4 r1 {
  536.       CloseHandle(mutex);1 w, @* ?( H" B# N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    3 a7 B7 Y2 {! U0 c, B1 m4 X
  538.       return TRUE;) A/ @& ]  K3 v4 T% I+ g+ {7 O
  539.     }. G6 O& g5 Q% |! s
  540.   }  
    + ?4 l& a4 D2 r
  541.   CloseHandle(mutex);, T# I4 s7 Q6 F( w% ^+ a1 x

  542. * t. k# j+ a& d: g& x' F$ f
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 |: C% J" R2 C0 b/ \9 x
  544. , G4 r& [$ e# ^; c4 r. P
  545.         AfxEnableControlContainer();! }, ~' o3 u$ _% c) Y4 y

  546. $ d  O  @; i0 F
  547.   bCanUpdate=FALSE;6 P: ~5 p$ m5 l* @
  548.   dwStartUpSteps=1;! t9 Z. e2 X- T7 i( x
  549.   dwProgramState=AP_NOTHING;1 G. }. u  a1 ]; t. \
  550. : g$ {! c/ \' O1 g# a
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);( W% v& V: a  u0 S

  552. 7 ^: b( y- p$ u- `% i
  553.         // Standard initialization
      p# H* V$ \4 X9 c- C! V, j( A( }  S
  554.         // If you are not using these features and wish to reduce the size2 Z- B1 F2 V( ~' e
  555.         //  of your final executable, you should remove from the following
    ) }" q; w; t: f' e
  556.         //  the specific initialization routines you do not need.1 V. F- N7 P  r

  557. 4 j2 U; H/ t2 P, A- E
  558. #ifdef _AFXDLL
    - x! d9 Y7 R: o2 A; l
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 O5 ]  M9 k6 v. }9 d, [
  560. #else
    0 D5 ^( `" I6 ?, g3 ?
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ l" e& K* f" G, u7 T! {
  562. #endif/ \) E/ c, p$ }8 s- N/ `

  563. + e# z; L& E5 E6 d+ M# E
  564.   dlg=new CRevAppDlg;" y) t* b# r% [, l3 R0 |
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' F" k4 b5 ^# o) n
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ( N* Z' r* ?) Y
  567.   m_pMainWnd=dlg;* `" A0 S9 b; ^: w& }8 Z

  568.   ^# x+ r) L6 Q, r" c  Q$ }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);; Q$ X8 ^5 I) U4 m
  570. , _+ r4 e" o: q* a6 l0 n) d
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ) O+ N- p& R- `+ N
  572. //  ULONG_PTR gdiplusToken;
    5 J: P: e0 H1 f- s, A* s
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& i( q, ^/ ?* ?  O" }
  574. : I! ^) O3 D  v
  575. //        CRevAppDlg dlg;" T/ Y7 C, `2 H
  576. //        int nResponse = dlg.DoModal();) s, k) s, m$ p5 q
  577. //        if (nResponse == IDOK)# |% w& o" Q% z- N
  578. //        {! J0 Q4 T8 s0 C9 z
  579. //                // TODO: Place code here to handle when the dialog is' A) Q  V2 b5 h  i
  580. //                //  dismissed with OK
    7 x; x6 ^5 h9 v
  581. //        }
    6 C1 a6 F% c' ~% B# x
  582. //        else if (nResponse == IDCANCEL)% A) H4 o- Y0 I4 S0 c: H: h1 l! }
  583. //        {2 [# {7 |+ }8 {6 v! x/ N
  584. //                // TODO: Place code here to handle when the dialog is& Q' I% U7 U3 S4 \3 ]+ s
  585. //                //  dismissed with Cancel, J" ]$ F% p- ^2 c  N
  586. //        }
    2 k3 @. _6 S- h& h1 S

  587. 4 U6 L4 [% k9 W& I- n6 T6 a
  588.         // Since the dialog has been closed, return FALSE so that we exit the0 b$ k0 h( V+ O) P3 G9 q
  589.         //  application, rather than start the application's message pump.
    8 q) o2 a( U0 O# M. c4 o
  590.         return TRUE;
    ; k! w7 N: Z( e
  591. }
    ' u6 b, L! O1 a/ O5 A! `$ g
  592. $ U, Y4 d, ?, t- M& H1 A
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    / P; N" b; q5 w4 W7 }; ]
  594. {
    - _, T  ~( N* W8 F* P; m4 D& X: O
  595.   int i;
    ) u& P1 i3 t! I" \
  596.   char *szRet;
    $ Y+ t" W, C. M: t3 s& @( Z

  597. ; J# N! `. E: B; ]" {( Y
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 M9 i1 _; N7 \# ?* ^8 p8 T: z
  599.   if(sztoken)
    8 s6 n/ U1 D5 `) L9 O; o
  600.   {
    % A7 x7 J; }( J6 q- u
  601.     szRet=&sztoken[itoken];4 R4 C& X$ a& d" Y
  602.     while(sztoken[itoken])
    3 B4 V1 r! \, n- v& N/ \0 D
  603.     {2 P( D$ U) ]; M% `
  604.       for(i=0;i<(int)strlen(token);i++)- w# i* a& Y% b  d! N8 l2 n) m
  605.       {
    ! F8 I" L$ w  F4 ?2 V
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])0 H! n3 B5 _8 p8 A! G- C
  607.         {/ t( [' t3 P$ W9 W3 m9 I! ~
  608.           sztoken[itoken++]=0;
    & ~/ e. `* U5 `6 M( ~( A. C
  609.           sztoken[itoken++]=0;/ ~9 `% x' W: u0 b  J; v
  610.           return szRet;
    $ y  C6 w4 p6 X: l
  611.         }0 O- H" J' `6 T, T0 R) I1 v
  612.       }6 \- C8 Y' x8 _) h7 H
  613.       itoken++;
    * ~/ M: e0 q- ]) e  h
  614.     }
    1 b7 g2 f4 u3 o: {5 t( y
  615.   }
    & k7 A! _  C( s- j. n- f* w; L
  616.   return NULL;
    ; ^" \4 J  W3 m# T
  617. }
    ( }5 Y2 J6 R2 C& a
  618. ! f) |  I6 s8 y) ]
  619. void ProcessProc(long Total,long Current)! r& f3 ~" x& F8 p$ [
  620. {
    4 l# R  ?( m, J4 L+ `: e
  621.         MSG msg;$ Y3 [, M5 c6 c5 J1 ]% s; R
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);/ _  P9 O" C2 d5 C1 D) Q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));3 `  B$ z. S& t0 H$ S) O
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    # [2 L0 G0 K( C
  625.         {9 }: Z4 U+ Q' z4 z0 [& t* i
  626.                 if(!GetMessage(&msg,NULL,0,0))/ ?8 B/ a* k5 M- ~( G6 M1 J
  627.                 {
    # e4 b2 \8 f7 C) R$ i, T* k3 f. {) S
  628.                         return;5 J" l* g% U7 n
  629.                 }
    / Q2 D7 z  Q, y
  630.                 TranslateMessage(&msg);
    0 W* |  |* N3 ~3 a/ M4 t% k* ?  f
  631.                 DispatchMessage(&msg);
    $ Q! ~" s4 ?% `  b# ?) ^
  632.         }       
    5 D0 F" A/ O0 K
  633. }
    ! R1 T$ l0 D% s% l$ [/ h
  634. ; O7 f7 u. i( q7 ^/ [, m
  635. BOOL bFirstChar=TRUE;
    - V9 d2 W" W8 ^, a

  636. & Y1 J' \$ k* p
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ; D$ E7 k8 z0 ^
  638. {1 U9 `6 }0 X# [9 e( I
  639.         // TODO: Add your specialized code here and/or call the base class
    8 M/ p- z& I; t: r  k
  640.   switch(dwProgramState)  T% u6 D1 g/ Z) s7 ^3 P
  641.   {% n8 e1 D$ J) Y  r3 F0 ^
  642.   case AP_NOTHING:
    2 V( `. v4 a) U
  643.     switch(dwStartUpSteps). ?; M! [- f' u- {1 J3 H% ?' w% k
  644.     {
    2 H. f* K& j7 H8 _5 I0 {5 \
  645.     case 1:! i6 S6 m" G* o+ _
  646.       {
    : t! f9 O2 d1 ]$ j
  647.         int i;
    ! F" [6 ?* |  z
  648.         CDC *pCDC=dlg->GetDC();
    8 Z. O  P, e0 C% J5 B) I) }! f
  649.         HDC hdcwnd=pCDC->m_hDC;' E5 {8 W, D' g0 Z/ [8 P& b
  650. //        Graphics graphics(hdcwnd);: }7 Z5 i  y6 |: [3 J: L% g! |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");5 H+ `( u+ E# T  A  c7 L& I
  652. //        INT iWidth=bitmap.GetWidth();& |! j# p; K. Y. M. I
  653. //        INT iHeight=bitmap.GetHeight();: R% \) g  S! Z6 O" S% \# M  u- e
  654. //        Color color,colorTemp;" \$ X. \( u& B/ B* V$ H- j
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' w% X$ x. J! j. t
  656. //        {
    " l3 o* b0 c' ]0 {( @! ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 N. X( {$ R0 ?2 }; g- W! g, u* \
  658. //          {
    : `9 l# B/ d  O) ^) g5 ?
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ' v% S( C. t  G# c8 G
  660. //            colorTemp.SetValue(color.MakeARGB(
    / g  `& H7 {  E! p$ O" g
  661. //              (BYTE)(255*iColumn/iWidth),6 d% b3 o& V6 Y+ @' R; ?6 K8 H- x2 ?
  662. //              color.GetRed(),
    . x5 S  u4 ~+ b5 l3 E/ d, \4 m
  663. //              color.GetGreen(),
    + C- r( M( ^2 ~' j9 R7 a! O7 G, c) G% \
  664. //              color.GetBlue()));
    ! S" b% }1 ]& g8 s
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);7 ~. z7 {. v2 O( l, B4 I  g5 O
  666. //          }
    ) L8 P/ t; N0 E& W
  667. //        }. Y# ?$ \4 Y* p4 K1 n  o3 ]% e
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    * z1 x, D" Q% r5 U' g
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    # c) l# G  o' t/ p
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");# v. s2 y; \. X# R( C" t. ]( M" z
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' y+ [# P7 f  o& }0 U
  672.         for(i=0;i<240;i+=8)$ ^# K* r/ Z6 ?4 `0 O
  673.         {( o" L+ W8 |' X" t0 H3 Q
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 I1 U  a/ r. H  t' ?4 K& ?
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    $ d% F" I. y7 P6 u! P
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);: Z% I; a7 P& h% W
  677.           Sleep(33);6 l# g1 ]7 d: u; a8 I+ y; g
  678.         }
    " a' m  N+ ], Y
  679.         Sleep(1000);7 S2 ?4 j( C$ T0 n
  680.         for(i=240;i>0;i-=8)4 j# K, [1 G1 A/ x) j) p
  681.         {
    2 {" J; D1 S1 D( I4 D, {  B; E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);* T5 }" c9 r4 ^: H/ d, M
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; z- l' j6 r! `, V$ [5 c8 D
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + h. h: M$ m: D) N
  685.           Sleep(33);. q4 Y  S5 X  x9 S5 ]/ {
  686.         }" Y6 ^7 _" X7 e  m
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    % i! C% ?0 g( J0 I
  688.         dlg->ReleaseDC(pCDC);
    * @- B' t: B) D' d. t
  689.         DeleteDC(hdctar);- n& R. y9 l% }$ I) k: j3 R
  690.         DeleteDC(hdcsrc);. X* K+ Y. }7 }, k( b
  691.         DeleteDC(hdcorg);
    / h: m) N/ j+ v) H! G
  692.       }
    ( X* i- o: x5 y" @& A3 U! w1 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ' Y, O( U1 h1 z  n& B7 T
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");" B/ A, q8 z4 n6 H- I
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");/ i$ V8 E% k3 D$ J" {% G
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");6 f* [; m4 N8 c# I! Y+ N$ v6 w, V3 S
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 @2 H+ l" \, Z& j* P
  698.       if(!Dn.Connected())) [$ D. x1 k( N' Z4 ~
  699.       {
    " h3 [% c7 P5 o6 P1 V* c
  700.         dwTotalFiles=1;  ?2 E& [/ o" C* }3 W, F) A# q
  701.         dwDownLoaded=0;
    5 @; \  i. W& j# R/ |% l
  702.         bSilentStep=TRUE;
    : }5 {) o' B+ K, P0 x
  703.         bCompressed=FALSE;" `' x% u2 z) A: L4 ?
  704.         strExtLocal.Empty();
    ! Y  c2 c; e9 |* e( G" S; M  G9 S# n
  705.         strFullName="readme.txt";3 ]8 B6 c# q0 b) K. y3 z( ]
  706.         dwProgramState=AP_CONNECT;
    $ B+ Q: F3 M. b  P; E" S
  707.       }
    $ k1 Y0 }! K+ M. u
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ( e* Q$ K9 d% \; X+ H( n+ j( w
  709.       dwStartUpSteps=2;" ]; I1 t" U! U5 g& }6 m
  710.       break;
    , {9 o$ I9 u+ n
  711.     case 2:
    / \# E9 v+ ~; I
  712.       {
      Z' y* t3 h& T3 q9 o
  713.         int iEOF;( t# K- y7 O; N$ d% H8 J/ g( F  r  Q
  714.         FILE *fp;
    , ~, U, S' g% x* K
  715.         char szString[512];* K$ p. W5 ?7 G1 M' ^; B
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
      D( o3 u% L6 K1 w
  717.         if(fp)) F* i5 F8 s; e$ E5 w5 \2 \) ~
  718.         {
    : E; S" K) q4 d7 O3 x
  719.           do
    ) K# M* R% R( y: T8 x
  720.           {" P4 @9 r7 U1 ]2 z
  721.             iEOF=fscanf(fp,"%s",szString);
    % H8 I$ m: M5 O6 v7 z: F
  722.             if(strlen(szString))
    : Q) K5 \9 L7 H! L
  723.             {
    ( @- F  }) m; }* [7 x% I
  724.               if(bFirstChar)
    * }$ R$ a3 W) G5 r: J; F0 E) P
  725.               {
    1 z* P8 Z. k  n# m7 T
  726.                 bFirstChar=FALSE;& c% d+ X" j% A9 c' _# @" q% P) S
  727.                 bConnectIsBig5=FALSE;6 L: n0 l) Q2 @% }2 b
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  @# p7 |& R4 O. c6 J& W! G5 i
  729.               }
    3 I# c9 Y* H6 H
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    / \. Q) u- k  ?, t" E1 b
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));- W, s, \3 g3 p; E
  732.               dlg->m_ListText.AddString(szString);3 y$ f3 K, y# W. s! q
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 q" x) x/ y2 [1 e! m" x
  734.               *szString=0;- w5 t/ w% F( t; R7 V
  735.             }
    . j1 M9 }5 [5 Y- W' z
  736.           } while(iEOF!=EOF);! s4 J: T- y2 y1 X  @  w' V
  737.           fclose(fp);
    ; d& x# z% ~2 Z' o
  738.           unlink(".\\DownLoad\\readme.txt");2 E, r7 d/ m) f8 M4 e
  739.           dwStartUpSteps=3;
    " s* ^. x! i1 S& m8 s# Z
  740.         }
    , p& G& U9 D# m: D8 B
  741.       }
    9 j) |% s- A/ D
  742.       break;
    ! H! m0 }* E; n1 i& z& M% C
  743.     case 3:- m5 E* r, u( q1 A" F
  744.       if(!Dn.Connected())) h% p  C9 F& D7 A% Q. `" b
  745.       {
    . y$ d0 _' h# F% w* X2 J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ m8 n4 Y! o0 T  k
  747.         dwTotalFiles=1;
    - p7 N, ~/ E1 }. n" U
  748.         dwDownLoaded=0;0 o2 f- j. x& e. ^
  749.         bSilentStep=TRUE;
    # b0 T7 N, w; H: J% s
  750.         bCompressed=FALSE;
    ! e1 m7 k) ?) G7 Q* A/ |3 j
  751.         strExtLocal.Empty();
    - ~" v/ e3 ^3 T
  752.         strFullName="checkversion.txt";
    ) v! G! p& w( z5 M9 V# }
  753.         dwProgramState=AP_CONNECT;
    5 y) f0 D, j# H% F/ H7 o; k% n# J
  754.       }9 D, N) @; P5 C3 [; d/ s
  755.       dwStartUpSteps=4;( y) D' c- v* G
  756.       break;
    5 ]2 `( J0 E# E; H2 V, [  y0 ~
  757.     case 4:, z4 Z2 ~# N6 u) k$ w+ M5 G
  758.       {( F) H) q3 m& k; x* z) \) M
  759.         FILE *fp;
    ; ]7 `9 V! W- L1 X; f/ a" e5 {9 k
  760.         char szString1[128];
    3 G! _! h( ]7 ^5 z
  761.         char szString2[128];5 u% T0 J* n% ~  o
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' w0 V3 M5 S. K' j% n: j, t: J) e# f
  763.         if(fp), H) @2 c5 N& n+ D  \
  764.         {
    ; T. O" w2 a& O' W$ F$ T. f
  765.           fscanf(fp,"%s",szString1);9 J9 L  G- C/ Y- s
  766.           fclose(fp);
    - a5 Q  X' p- A! w1 m& X
  767.           fCheckVersion=atof(szString1);5 c1 I/ ~* ^" c6 b$ F/ ~
  768.           fp=fopen(".\\checkversion.dat","r");
    : f# t. o) u/ I& d
  769.           if(fp)/ B1 c! F* r! x& G
  770.           {5 o7 L1 d1 v8 W' v$ m4 A
  771.             fscanf(fp,"%s",szString2);: v1 l8 h. A, @7 ?+ T
  772.             fclose(fp);
    % O" A5 B6 d" W% M: F+ q& T
  773.             if(atof(szString1)!=atof(szString2))
      V. M. L& K1 M" U4 W
  774.             {
    * y- ]' q* h8 f/ G/ a
  775.               if(!Dn.Connected())
    7 X4 @, I1 m) ~0 w
  776.               {& W# o# ^( d# J7 j" h+ C4 b# ~3 g
  777.                 bFirstUpdate=TRUE;
    - X5 \0 J2 o  {/ K1 w, \8 s
  778.                 dwTotalFiles=1;, q+ M, F1 M0 A) X" u2 \
  779.                 dwDownLoaded=0;7 {6 X. {$ P  f
  780.                 bSilentStep=FALSE;
    + L1 {$ k0 `  N
  781.                 bCompressed=TRUE;1 j3 S% f. m7 v4 w6 m" [8 V
  782.                 strExtLocal=".\\DownLoad\";4 F3 Z8 r$ _" x& |+ n
  783.                 strFullName="update.txt";  p+ H! @' K3 R4 E: d! T) g( u" m
  784.                 dwProgramState=AP_CONNECT;: z( ^2 z5 r/ L, E8 z  {! d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . E% g7 y$ ]8 y1 `% T
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 ~/ B* k  x% z5 h) K
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , i, y  b- ~' ^5 H5 K6 t
  788. # K5 p5 w# g5 z& @% |- @' i
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * ]7 |& {* }' y* k8 k0 Z) F& P# n8 d
  790.                 unlink(".\\DownLoad\\checkversion.txt");1 f, H/ I8 x% W) w1 U, O9 d' l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
      @- \, j( {% I" ^$ U) O; V
  792.                 {( g' W2 n) b) _7 \: j) k
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    8 I" M2 l" \# Z$ t5 l) u
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    8 H% e2 c  H* }
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");% C+ v2 x- ?% \! o* Z2 l; Z. ?
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 e( C5 N4 g2 @: r3 h, L

  797. ; }& J  g+ u5 g8 ]3 Z! Z6 t
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");! w' o1 i- w* k* u, B/ w
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 K5 X+ ]; d1 v$ {& k
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");! Z* i: j" p2 r( B8 u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + G' |# a/ Y# D; |- x
  802.                 }
    ! ]6 D8 A$ F; n1 D# ]5 O7 X$ c
  803.                 dwStartUpSteps=5;1 P  ?: R1 Z9 Q. z  {2 v* @0 i* w
  804.               }5 v& Q, e- F, K
  805.             }
    ( A, J: w7 N! F' p
  806.             else
      I4 {9 N9 L  q# J, w1 N% Y1 T) l
  807.             {
    + j2 s: d  R0 C2 N
  808.               unlink(".\\DownLoad\\checkversion.txt");( a9 G6 M9 O9 t2 i2 n5 S4 M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ; G/ H2 ~1 M( y( ~
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");# g% s* \2 G) A0 K8 ^- `! B7 }
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");  b+ p) |' n4 d! B5 d# l
  812. % q) b- X/ i, I  d7 Q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # A9 H7 C1 m: A$ Q. @
  814.               dwStartUpSteps=99;
    # `4 O8 X% p$ z+ w7 L$ v) L
  815.               bFinishUpdated=TRUE;
    ! w4 t6 q) J3 V: a9 q. L* P* ^
  816.               bCanUpdate=TRUE;
    - [' ]* l" ~4 x- ]" v2 h5 E
  817.             }
    4 h7 ^8 W# B1 L0 T
  818.           }
    / l2 U$ e' b& R2 a
  819.           else
    2 }* W0 @2 `" u7 C
  820.           {
    5 j! |5 g) V3 ^$ a
  821.             if(!Dn.Connected())
    6 O1 h5 i, d+ b  h3 X5 l: E9 I
  822.             {/ t  @4 X" u0 D
  823.               bFirstUpdate=TRUE;% u& |: ^3 e8 d' n
  824.               dwTotalFiles=1;' z6 E& Z( }2 U* m
  825.               dwDownLoaded=0;* P; F0 ]: v& S  k, K; a
  826.               bSilentStep=FALSE;
    6 |& @; F- E" A# n- j0 z
  827.               bCompressed=TRUE;5 r# h& f# B( s6 n. _
  828.               strExtLocal=".\\DownLoad\";, M% Q6 P9 ?; T- c  _9 g  {
  829.               strFullName="update.txt";
    ' r& |( }3 z- U+ C! }) ^' w
  830.               dwProgramState=AP_CONNECT;
    4 B4 g5 d% q4 H# a7 {* y+ K
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 H1 P$ [, R8 \9 c( q( n; R; C+ W4 S8 x8 Y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");7 `1 D6 e# p1 }9 K4 }+ g8 c2 j. ^6 R
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / E+ x7 ^- W7 F
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 R; A/ m/ x# |' t/ ?
  835.               unlink(".\\DownLoad\\checkversion.txt");: d3 N; X" n; N+ G/ K+ H$ _! ~
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . N0 v) H- C) i( X
  837.               {$ m: H) S9 L6 u" s/ [: E# d$ a+ v9 I2 }& [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 z( D# `! a9 k& _4 \7 v: [
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 m+ e1 y) i2 |& }
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");5 J, N: l" R& W& ~/ L% ^' S% |
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 E% L* Z/ t# w' j2 ~
  842.                 8 p0 x# X; m; m* g
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    1 c, {" _  ~2 B- a, `
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 k" ~. ~5 {/ E/ e& C" V+ b5 v
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    4 M: o, u1 H8 C$ p. A! L1 h
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, Z  t) l5 R% i) z
  847.               }. ^  F, W  y1 c* D$ _
  848.               dwStartUpSteps=5;
    & m: j' s6 d9 S( o5 ^/ y% L, P6 i
  849.             }( [& l4 U0 W8 O+ b0 G5 t
  850.           }- t/ W  t; Y- P9 P3 k( S4 I
  851.         }
    . O5 X8 n/ I2 Q* p& Y7 x
  852.         else
    4 N0 t* `! w7 b+ t  t! e2 }
  853.         {
    + w9 I- x- S' M  Q# m
  854.           dwStartUpSteps=3;% o) M* Y2 ]3 x, M& n  o" w2 ?
  855.         }+ P9 W9 `2 G3 \; z* x! ]
  856.       }
    8 ^# Z$ }% P" G$ ^
  857.       break;
    4 Y* ^$ B1 K8 K% W  f
  858.     case 5:3 K, U' I$ m. j# S0 i8 N3 X5 y9 D
  859.       {4 w( e/ x6 G; Z% p
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    4 ]  p( f) `' n. `2 H
  861.         {
    # ~+ D) E/ I" ~& x! S7 ^
  862.           int opt_overwrite=1;
    6 c+ K& o7 p, ^( L5 {) n
  863.           int opt_do_extract_withoutpath=0;
    ! [* O+ t1 h; N0 \
  864.           unzFile uf=NULL;
    # v: {: Y/ S+ t7 y8 d% K7 A

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

8 C# E  h6 g$ E9 d; f3 K* ]
  t8 z" D- b7 h! c: ^  `( ^" {' 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-1-26 05:28

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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