找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
/ ?8 {) i5 d# U
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ! ^. ~! z- @) J+ o
  2. //, s$ q; ^/ v6 N- |! \
  3. 5 y. H' j. I7 h9 C
  4. #include "stdafx.h"2 s) t- n9 M2 P" ^

  5. & Z  j; s+ ]9 O* ^8 V3 m
  6. //#define UNICODE' h9 k6 ^( b" x4 C) u/ s6 {
  7. //#include <gdiplus.h>
    1 F! X" O7 c6 [7 }9 v
  8. //using namespace Gdiplus;& B& o& I% r1 x; T" m
  9. 0 {- s8 {) [- B4 m
  10. #include "RevApp.h"
    1 b( p2 `% ~& h* ]* |5 ?4 Q
  11. #include "RevAppDlg.h"6 J9 }7 E4 t$ T, `+ v+ q
  12. $ x& u5 E3 v0 a9 y+ y0 N
  13. #pragma warning(disable:4786)
    , i9 Z& }8 M2 G6 }& `3 ^
  14. #include <map>" w8 y9 M. H+ c$ G: `
  15. #include <list>
    ; W2 X9 S% q* {' K3 f
  16. #include <direct.h>! E% ^' |6 e7 ?/ e$ ^2 f; i
  17. 5 }0 ?+ ]" ~6 l
  18. #ifdef _DEBUG
    , A. b+ i% e' {! E* M# }( D
  19. #define new DEBUG_NEW
    # S7 k' P1 c7 i0 r3 u
  20. #undef THIS_FILE2 B. D* h$ O9 H  |- M9 m
  21. static char THIS_FILE[] = __FILE__;
    , t. H2 M2 @2 a! p" j
  22. #endif
    : F( n' E( q' B0 i' u
  23. #include "SkinResDef.h"
    # ~2 Y8 h% A0 L: g% ^, k: ?
  24. #include "ChangeBG.h"
    , {8 m9 `  J7 C
  25. #include "AFXINET.H"
    * D: R; s& M0 G0 {' `0 ~

  26. * R* m9 D  B% J$ {0 t1 E  u) C% w. x
  27. #define TRADITIONAL_CHINESE 0
    " [( d2 \1 U2 N& a+ B2 W
  28. #define SIMPLIFY_CHINESE 1
    / i+ }3 \# ^- \
  29. #define ENGLISH 2
    4 x. T# I& x6 J- q/ X" c
  30. int m_iLanguage = ENGLISH;' d1 x& k% Y: D* J& D
  31. /////////////////////////////////////////////////////////////////////////////
    - ~$ l% o, A+ N0 |( F! {/ ?; x/ f; S
  32. // CRevAppApp. v/ v8 \2 Y/ l8 S+ z/ {
  33. ' k, C; `2 h2 q' X, b
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)1 ]5 \* l, f: {
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    . H6 o. g* X; d( d. Z( q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    4 F; C7 |& Z, `- z$ c
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    4 y0 Z: M9 j0 v6 y* \
  38.         //}}AFX_MSG. K9 H# [  S* T& K- v
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 {& R4 a# C8 s# S
  40. END_MESSAGE_MAP()
    ) X" p3 y: i: m! ~1 T0 y

  41. 8 _% ~! U( |: q9 K) P
  42. /////////////////////////////////////////////////////////////////////////////+ J% D# T. V( g2 t% r
  43. // CRevAppApp construction
    1 n0 `5 U' N2 @0 B( n" U7 m: j

  44. % c. G8 p5 f6 o; P
  45. CRevAppApp::CRevAppApp()
    2 ^  Z+ I/ U2 p$ B) U! }
  46. {# D( N* `6 M! f5 A0 x2 j' A
  47.         // TODO: add construction code here,
    $ k$ T$ T0 y: o; X/ Q
  48.         // Place all significant initialization in InitInstance" u% a; C7 [! I% M
  49.   bDisplayIsBig5=FALSE;
    # [7 K$ Q& ~9 }! k/ z4 q
  50.   bRestartUpdater=FALSE;
    , ?% o$ {% Q4 S. J& L0 I
  51.   bFinishUpdated=FALSE;
    0 C& z: V$ e- P- j6 s1 D. L
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;" ?: [: X9 r  R. _# X" T8 a
  53.   InitChangeDataBig52GBKS();* Y6 |+ E% V' X+ j- }
  54.   InitChangeDataGBKS2Big5();% @7 s' G: @+ ~1 W7 K
  55.         //
      r! K+ ]% j' S( k' {
  56.         bClickRunExe = FALSE;# T  a2 g& m( [
  57.         //
    9 N1 {3 S3 s9 H% B1 |4 j: Y
  58. }) N% s) H& H/ w  t6 |& R0 f

  59. 0 f( l8 ?5 V: e4 N+ A3 p
  60. CRevAppApp::~CRevAppApp()
    ; G6 D1 ?  Z- n( @, {6 F  M+ H* e
  61. {0 R3 n: \+ j- ^; E
  62.         // TODO: add construction code here,
    * c6 ?) k) |# u5 i9 o
  63.         // Place all significant initialization in InitInstance6 K, p5 |( r5 m) s
  64.   EndChangeData();
    9 x& k9 K; a2 L" s
  65. }& j7 S4 m. l+ n* ]$ a

  66. " B' i- b7 u2 b' C, b
  67. /////////////////////////////////////////////////////////////////////////////7 ^7 U& C4 h& L2 H1 L8 ]+ O
  68. // The one and only CRevAppApp object. n# h! G4 {/ B* b0 j2 ?
  69. # L( f' b3 z/ A& N2 D- p( ?2 L+ U6 g
  70. CRevAppApp theApp;
    0 A* j" n7 N+ h

  71. 4 f; p/ s! k$ y/ }! c
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 K& k* d9 U. X& _, V
  73. {2 u" H5 ?* O9 b" p* g
  74.   int iEOF=0;) w" O  p' K( M4 ^7 u9 r
  75.   char szTempName[MAX_PATH];3 v) }( J( A$ x4 F% C7 N
  76.   *szFileName=0;6 X6 L: U; G( z! h
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 {! P: k+ u# Y0 X+ s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ! z- T9 q' q3 f; m1 O. Z+ R% E
  79.   {1 M) t) z. g( U8 }8 r" r% r' _
  80.     strcpy(szFileName,&szTempName[1]);2 }& W5 s+ g9 M" v9 _- l8 n
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    5 s* X( L2 [: a$ v7 N& a9 [
  82.     {
    0 N& \1 A7 `, H/ E* N, W
  83.       iEOF=fscanf(fp,"%s",szTempName);1 p/ p, w6 x! p4 Q
  84.       strcat(szFileName," ");
    9 w* [$ ]- f; u0 N4 n& \9 S0 n
  85.       strcat(szFileName,szTempName);& |; y! d  @- g; x6 ~
  86.     }% _+ f3 O, M+ _) b3 w
  87.     if(strlen(szFileName)>=1)
    7 m/ o# z. {# O0 B  n
  88.     {) l' M% `% w1 {
  89.       szFileName[strlen(szFileName)-1]=0;' l0 @" C5 I! _! e
  90.     }8 f1 ?3 [1 D+ A+ p, @6 u
  91.   }
    : Y1 i( g' Q' k! d; M/ L2 y
  92.   return szFileName;6 t" U! S$ t, f3 c3 C3 X
  93. }: P. X  o6 s% V% p

  94. & z' @7 _% j2 H, [; O
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)+ z& V' K0 b+ D8 s; `
  96. {& U" |9 x# y( O7 Z6 z  d
  97.   FILE *fp;
    6 S7 r! p' P6 Q4 d& L! O
  98.   char *key=NULL;
    ( v9 P$ y- J% g9 D
  99.   char version[MAX_PATH];4 ]' A5 T% S9 T, b# J
  100.   LPUPDATEFILE file,olds;6 [" ~) Z: D9 B1 C+ @1 z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! P' @% S% I+ H+ x* p" D

  102.   b) Y! w4 r; p# ^+ D' V3 E. \
  103.   UpdateList.clear();
    5 c$ S2 B4 G- M- s8 {" a
  104.   UpdateFile.clear();
    - h  O8 p! P0 `& V/ Y
  105.   if(GetFileAttributes(filename)==-1) return false;1 }3 a* j1 V4 Z" w8 @* m
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ) w, V9 D9 F% f. ^1 R7 `  J1 h" |
  107.   fscanf(fp,"%s",version);
    . r% f$ |- [6 j! J$ D
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 K# c) R0 _, k* J( x
  109.   while(fscanf(fp,"%s",version)!=EOF)  o: g- x' e. U$ m2 e
  110.   {
    5 E3 E+ q$ N7 ^
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% l/ q. |1 n( f  `2 T! X* y" k
  112.     fscanf(fp,"%s",file->path);
    - `0 y+ b3 |- V( b) z9 S
  113.     ReadFileNames(fp,file->file);
    " m1 m" Z. k( l; B! Q5 z& Y2 K
  114.     strcpy(file->full,".");
    2 r, k5 m* Y( w+ N$ H3 X: ?
  115.     strcat(file->full,file->path);
    6 Z5 E' k' {# `: Q- U0 N+ ?( O
  116.     strcat(file->full,file->file);6 w# S8 H4 q4 m
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())6 T6 K- x0 R# }7 p* w; c3 B) r
  118.     {
      h) x4 r3 d$ ?
  119.       file->vers=(float)atof(version);
    : x# P; K# @9 i, [$ [
  120.       UpdateList.push_back(file->full);
    . w; G3 a1 Z. F3 M. x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 p% H- V; X4 j0 h6 }
  122.     }
    " c1 k8 d5 j# R1 [8 V. U5 l
  123.     else" a3 ]* \. }% f- f3 ~# m, U
  124.     {; j6 I2 _7 z1 M0 {- ^
  125.       olds=(*p).second;! r$ i7 A: b( d' q# r6 a7 B
  126.       if(olds->vers<(float)atof(version))
    # E4 ~5 g3 v4 [% R2 a2 Z
  127.       {
    ' V& [: @. M( @7 ?
  128.         olds->vers=(float)atof(version);
    - X! o! W/ `- N" J9 j
  129.       }
    / B; d% m" O* g# a; V8 h# `
  130.       free(file);7 T* ^1 ^9 p& L* h7 S+ ^( s( f/ z
  131.     }! k4 P+ o3 y3 u3 k1 r7 c
  132.   }
    2 U" [) z$ W! d$ p* c
  133.   fclose(fp);
    * B$ M; E8 h7 L: f
  134.   return true;' y! C5 e! m) I# l# n8 K1 e
  135. }2 r2 l' d, Y" ?% m
  136. 4 t/ ^5 L3 A" |8 |3 h. \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    % C3 s4 s( ^" @) v  {
  138. {
    / S6 a/ u; q- A1 W. Y) d+ G5 o- t0 Z
  139.   TCHAR  szFull[MAX_PATH];0 n( t4 |+ H* c* L) t' m; q9 p  Z& j- H
  140.   TCHAR *token,*inter;0 O8 k3 g& y" p# o
  141.   *szPath=0;
    " ?  x6 O3 O3 w! T$ W* o; }
  142.   strcpy(szFull,szFullPath);
    6 u4 ]% K3 N, Y  G( P
  143.   token=strtok(szFull,"\\/");
    & d( R, R, `& T4 T8 o! `1 @5 Z& G
  144.   inter=token;+ k8 f. @5 L1 v) W* @5 s$ l
  145.   while(token=strtok(NULL,"\\/"))
    & D3 ~& x* P* w, f+ J0 h: Q
  146.   {
    0 s$ ]. j" o7 x7 z6 ?8 f
  147.     strcat(szPath,inter);  E3 }0 e( R$ m: d$ E
  148.     strcat(szPath,"\");' P. O6 ]4 a: _' H
  149.     inter=token;  m1 n! ~3 V" V: ^/ e. s
  150.   }- m7 ?* f0 K5 b# I4 m
  151.   return strlen(szPath);5 a" h& S" B1 P  B+ ?6 K- A
  152. }- v2 |; r- f& T; D) S- v# F4 E( _$ E
  153.   s4 k/ Z4 a3 n4 g
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)+ v0 Y. R: y0 W; {
  155. {1 T8 t4 n- ^; z7 a
  156.   DWORD attrib=GetFileAttributes(Target);5 Y1 e8 b8 ^7 m
  157.   if(attrib!=-1)
    % i8 ~6 a- g8 K. Y
  158.   {
    - z/ l& j3 y% @5 h8 X
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    * K: ?9 x- L  J5 s3 L$ D# C; Q
  160.     {# o# s5 @" P. c, h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ! H7 b) u* y7 G
  162.       SetFileAttributes(Target,attrib);
    / ~! G, k+ k8 `) O" ?  ]+ l/ p
  163.     }, V& c( k1 L- q" y! k: B8 Z2 S
  164.   }' U/ [. V# [2 B! m
  165.   CopyFile(Source,Target,Erase);
    ( V" Y# Q& O* |: W
  166. }
    " O7 {6 g  I! z# [2 T- ?# x1 x" Y
  167. + F4 u  h8 _- E( b) m+ r3 r
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    9 \& o2 z  e5 q  R# y1 U
  169. {; g' ~+ w+ g7 _% H# O% [2 t3 L
  170.      FILE *fp;; a/ j; s* a) j+ N+ n7 _1 b/ A
  171.      char  szBuffer[8192];
    : `% z2 A- F: g2 w5 V3 h6 Q
  172.   va_list  argptr;' k/ d3 {- o# \
  173. + o2 s- q+ |) w* D0 E
  174.         va_start(argptr,message);
    9 @. y9 B3 t3 h7 `4 P& j
  175.         vsprintf(szBuffer,message,argptr);
    8 r4 Q/ i3 o& `/ f0 \1 y
  176.         va_end(argptr);0 y  @4 ^$ K- [" l8 x& `
  177.   fp=fopen(FileName,"a");0 V4 K7 n1 f7 I  j; C8 V+ |7 \
  178.   if(fp)6 k' l" w* l( j; H/ C2 K; k
  179.   {) [% n3 R+ P6 w2 c/ ~
  180.     fprintf(fp,szBuffer);
    & \, e+ R4 m4 L
  181.     fclose(fp);) a7 u3 L' x' |8 U4 K
  182.           _flushall();' Z5 z* N. X6 C( L$ r
  183.   }" v; w/ E, x+ o0 @/ G; w3 B* o- }
  184. }
    - B0 |2 y$ m7 Z7 c# E, t

  185. 2 Z+ F6 m# {! |. d; v- Z! u& j4 ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ; D* m* [8 i  Z6 J
  187. {
    9 N8 i; `& b- f* \& h' N
  188.      FILE *fp;
    8 ^2 p2 P/ p2 o
  189.     DWORD  attrib;! N8 C4 W+ i6 k( S3 n( V& z1 w
  190.   attrib=GetFileAttributes(FileName);
    0 R6 y9 Q+ H  Q! \/ \! J
  191.   if(attrib!=-1)
    $ a: `+ s* ?) ?" i
  192.   {
    4 s% w3 Z: I5 C
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);" ~+ o$ K$ r2 D$ p  k
  194.     if(!SetFileAttributes(FileName,attrib))
    ' p$ C. K: ]9 D: ^' b  x
  195.     {+ H$ s9 H9 _: N2 i9 x: p
  196.       return FALSE;4 n, p& G7 ^& p0 w4 c2 z2 }1 |
  197.     }
    4 o& I- ?# \) w8 h+ o' R
  198.   }
    , v' c/ I8 l0 P5 U$ T
  199.   fp=fopen(FileName,"wb");( M" K$ ]' o( h. x; }& F3 a
  200.   if(fp)  `/ N5 D& Y. L7 B& B
  201.   {1 a+ S' M1 p2 \- o& Z# Q) A
  202.     fclose(fp);
    7 I+ c4 m! f# D! `
  203.   }  v% q' u+ a' Y2 W% W  T- K4 M0 n2 c
  204.   return TRUE;
    ! Q! g8 i1 G' Y) R8 {6 ?" w5 I
  205. }
    7 E1 p0 v4 D7 \
  206. ) w) r2 R7 {' N3 a
  207. BOOL CRevAppApp::UpdateLocalVersion(void)8 O* O: l4 [/ j( C" q
  208. {
    # n( ^) d/ t# A1 H2 F
  209.   char filename[MAX_PATH];
    ' ~) L( S$ r- U
  210.   LPUPDATEFILE file,olds;% F! s+ _8 n3 D$ B
  211.   std::map<int,CString>::iterator i;
    " ]4 T* z* G% _1 J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;6 C9 H3 {3 \/ v, v
  213.   std::list<CString>::iterator l;* d0 x5 v' O, e+ F
  214. 9 }) E: {; ]+ B
  215.   if(bFirstUpdate)
    0 Z# f* G9 ~/ i% {1 J' ]+ Z
  216.   {
    + Z, j% y2 C" R/ v3 M. _
  217.     dwCurrFile=0;. B, E9 m! ]# U6 y
  218.     bFirstUpdate=FALSE;
    * L# X; q: ^8 Y( i& E
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())$ R- B1 W# z$ E4 i3 r' g) b
  220.     {. v% \+ u0 V7 w4 `' J
  221.       dwTotalFiles=UpdateLocal.size();
    ! S" _$ v$ w; o3 W
  222.       dwDownLoaded=0;
    + a( J. k+ t7 h) ~4 I
  223.       bSilentStep=FALSE;
    9 J- i7 G1 v9 h
  224.       bCompressed=TRUE;# T7 k8 }4 X1 P( i# d* ^
  225.       strExtLocal.Empty();5 ^( D; J& H$ v, D4 ]
  226.       strFullName=(*i).second;
    : T8 ^3 [( D# G- Z& c
  227.       dwProgramState=AP_CONNECT;
    ! x+ h# e5 i) p
  228.       return TRUE;( W) ]! ]# @/ D) `5 z
  229.     }, u6 x: {4 m$ {2 W! l+ p- J! C
  230.   }
    8 z+ A: d# Q7 W  K5 U' G
  231.   else if(bRestartUpdater==FALSE)
    7 |) y2 {5 {  C( K/ ~/ m
  232.   {; h" S! f% Y/ U3 D* y
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    / _' w% t4 H1 [" \6 |
  234.     {. {! i1 h+ T- V/ q7 f
  235.       file=(*p).second;
    8 t1 i' p& h6 m0 r; q: f
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())2 ^7 L: _# u4 ?3 n1 o" L
  237.       {
    % I6 X7 y; e( n; v+ {
  238.         olds=(*p).second;8 y$ j5 N; I1 p5 Y- q( H  P  A" F
  239.         olds->vers=file->vers;* d+ _- {' e. r
  240.       }' V1 ]# I% X" A7 A
  241.       else
    6 L7 y0 P4 N& e6 m7 d) ^( B
  242.       {+ ]; E0 k' f! f" i
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 @4 X. Z1 T4 }) ^' u
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ K+ C( Q( V! X' C2 w* D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    . V0 |" n1 T& `% @) u
  246.       }
    2 d5 e9 R9 R! n, c& d/ a) y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");" X5 P. |3 T' g, A! F$ n
  248.       sprintf(filename,"(%s)",file->file);' f" w0 t6 q2 S8 {  d4 I: r5 X
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& i1 r+ Y5 W/ F
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! F) M2 ^# X4 V( Q
  251.     }
    6 y) U* N. i/ ^! N
  252.     dwCurrFile++;
    - q5 m: F! y4 ?( ]7 x' Y0 R6 X  W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())/ v$ l% P! ~- Z# T5 W( D3 i: i
  254.     {
    2 V0 l/ _$ J* i0 Y& A
  255.       bSilentStep=FALSE;
    8 {0 u% \: A$ Q, K# k) ]
  256.       bCompressed=TRUE;
    * m' G# H- V; {1 U8 C7 W
  257.       strExtLocal.Empty();, u6 S. X+ x# S* _0 P$ g  H! n- Y
  258.       strFullName=(*i).second;
    $ m* d) K7 r# t5 x  \
  259.       dwProgramState=AP_CONNECT;& f& G: m/ Y  ~6 P$ w1 f( C" I0 Y
  260.       return TRUE;& ]. d+ p! O" w0 w1 w8 F& Z
  261.     }
    # g2 ~4 V! w* i4 N& L$ }
  262.     if(!bRestartUpdater), H- N& N/ y" m0 n: Q' `
  263.     {
    + S) Z7 j7 Z: w) q0 y  }
  264.       int iCurrSize,iFileSize;" I3 j/ J& y7 }! L0 M
  265.       iCurrSize=0;
    $ E  Q0 `- w# l- f8 ]
  266.       iFileSize=UpdateList2.size();
    . ^' z% T7 P0 S1 @6 N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");' R2 o3 W  D, N$ F! |6 @$ ]6 V
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    . C0 [9 k& V: H$ g5 j( E
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 @9 z6 y0 ?; V6 f; m# r( O
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 C: g3 I) c: D* W0 O
  271.       Fclearf(".\\update.dat");
    4 J) `4 [% e+ \. |
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    $ C  P% Z2 ^% M
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)& H5 \4 l1 ~5 G) y
  274.       {* c2 ~) `" w# Y$ ^
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())8 e+ V' \5 R6 u: `+ r
  276.         {2 A6 }) i: q# H
  277.           file=(*p).second;
    4 g7 D, {1 M7 c2 A
  278.           sprintf(filename,"(%s)",file->file);+ ^. S0 q" Z" V2 Y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' R( G5 n8 N4 c, v
  280.           iCurrSize++;
    2 i0 F- @1 n/ C
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));' M. S/ k; i  e4 ^
  282.         }
    ' }5 [: m0 k' o. w
  283.       }1 @0 i4 Y! M; ]# {$ f! o! g
  284.       unlink(".\\update.txt");' l: K" j4 X2 n8 A
  285.       unlink(".\\update.tmp");3 m9 Z6 F; ?; H( d
  286.       Fclearf(".\\checkversion.dat");) a, L& W; Y; @  g) s1 ~/ s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);& e; U" G9 {: H9 [9 J0 c, I
  288.       if(UpdateLocal.size())9 q: q) ~& x* v* Z3 H" z% |+ I
  289.       {# x, m* S0 F2 C( P
  290.         UpdateLocal.clear();
    7 O& s0 |/ f( `9 F
  291.       }
    * B# p$ s9 s, V. e5 K* O. q0 ^
  292.       if(UpdateFile3.size())& S3 M* Y  E0 c, F9 R* Z5 r- E
  293.       {
    ' }6 E* ?' e2 U# D2 l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)% ^# y* c3 A* X
  295.         {4 I3 M$ S9 D# B# W
  296.           file=(*p).second;
    $ S- R* n' S" a$ d2 d; [) q2 k
  297.           free(file);8 u. C6 L4 O1 Q9 d0 g" i
  298.         }
    % Y7 P; G# A+ Y
  299.         UpdateFile3.clear();
    * i( ?* q8 [/ @* L
  300.         UpdateList3.clear();- {9 ?7 m4 @2 p% @
  301.       }0 l" b+ P/ m$ ^- L" H' ~
  302.       if(UpdateFile2.size())4 ]  }7 D: H. d& l, w
  303.       {
    6 \  e- J" l' G, R8 f
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " C& m9 R  o* l9 w$ u7 g
  305.         {
    & L8 O) ~/ X* ~! F4 w
  306.           file=(*p).second;& f4 y6 v% S1 Y
  307.           free(file);) I+ V9 I, n( j3 ]+ ?
  308.         }: g+ N2 _3 _! R; G9 Z
  309.         UpdateFile2.clear();: g$ m. m5 P( q6 \
  310.         UpdateList2.clear();, n0 q3 G: w- o- l( t
  311.       }# l# y, ], [6 ~: i( u3 I
  312.       if(UpdateFile1.size())
    8 o2 y! u8 j" d4 [
  313.       {
    & N. c* Z/ a; N0 H- G5 K
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)1 j4 e3 Q) f4 q' c2 d
  315.         {
    . ^- j/ c, O2 b4 n8 a. [: Z8 Z
  316.           file=(*p).second;& I; C, n3 G' ]' G/ F9 \$ a
  317.           free(file);
    ' G" Y6 B9 M* P( V( L% F
  318.         }5 [- L0 l$ ^3 C3 d
  319.         UpdateFile1.clear();
    , z6 }! }; B' `9 _' q
  320.         UpdateList1.clear();; q9 E: N3 h: p
  321.       }
    # E" F2 t1 o9 Z" Z8 ?6 }
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));. v  i  a4 i* }. s! X5 k
  323.     }) t5 E& v; E0 d
  324.   }
    ; V4 V9 g2 h5 @% f+ i/ t, e
  325.   return FALSE;
    5 t0 l5 G; g% m3 F1 u* F
  326. }& K9 y0 F: c) [. ^

  327. 3 \6 c: a* o( I: j; Y& R
  328. void CRevAppApp::ClearAll(void)
    0 o4 r4 A# r8 `( X% w/ D0 U6 J9 u
  329. {9 ]* N* `1 p9 q' f) w& [- b1 L/ ~
  330.   LPUPDATEFILE file;3 R& i- _) ~) V: L  o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; B& [! ^5 [" \7 z* [& ?

  332. " r) n, g; ?( ]; l6 Z- |2 Y: T; Z5 g
  333.   if(UpdateLocal.size())2 [* ~: D- B  p' ~
  334.   {: A5 @" d( Y- l! r! m8 E
  335.     UpdateLocal.clear();
    % R' r9 H' T, l2 v3 g. z: t1 W
  336.   }
    ' ^/ o7 a4 ~2 R: b% b6 W
  337.   if(UpdateFile3.size())
    " Q6 z3 n( Z+ X& ^" E+ P
  338.   {
    ( P' b! Q5 k- Z9 E5 H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++); _8 q6 X3 ~: I
  340.     {
    + M6 t7 A2 X) a9 b
  341.       file=(*p).second;0 N: L5 Z) V  t
  342.       free(file);
    9 l4 Y2 J1 N0 ?1 C* ^3 H8 W) X5 K/ P
  343.     }
    % T5 I, q8 \, C9 N. v# U( ]
  344.     UpdateFile3.clear();
    ! Z; B  H) [) B5 r* a. _' v
  345.     UpdateList3.clear();
    " x3 F6 @# H# i5 U: O& n1 P3 m
  346.   }
    ) v* }$ \0 ]' d/ i" K9 |
  347.   if(UpdateFile2.size())4 Q: r1 v- _2 z: H5 y
  348.   {
    3 ^1 f& ]( Z4 Y' G
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 f2 j8 \  e! G) G/ {
  350.     {
    ) Z9 ~* o2 G  c+ T6 `: f- l
  351.       file=(*p).second;
    0 D& t: g7 B% J& v
  352.       free(file);. D% s" j) U" c# ^2 P
  353.     }1 @- I; b) m8 x) P+ h/ |6 a6 ~
  354.     UpdateFile2.clear();; i3 K: R# U* n% A  a
  355.     UpdateList2.clear();' ~% X8 t5 |, |& }
  356.   }; C6 v! P9 E6 B/ Z! Y" u* w- C/ p
  357.   if(UpdateFile1.size())
    - W" h% g6 r% w! [4 Z
  358.   {
    6 P5 @8 M& q2 K( h
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 P0 R& l* E/ x
  360.     {
    ' ]$ s# W  W+ k$ l/ V7 Z/ Y$ `5 R% d
  361.       file=(*p).second;
    ; \2 n0 w: \- J4 |0 n# u8 c
  362.       free(file);) `5 U. C( a: J: r+ ~5 G9 u- i7 \
  363.     }- a9 n+ `" Y. D* p- B4 I
  364.     UpdateFile1.clear();8 v$ Y7 ]- ^; t" @/ U
  365.     UpdateList1.clear();
    * o& `/ a# b. |0 j7 b; a3 I
  366.   }8 u) |9 K7 ]: k, o
  367. }  
    8 w6 t' u$ U% b9 |9 E. z/ [
  368.   + k* g* ~9 X) ], q
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 K0 V* \+ c/ y9 _
  370. {9 ~8 c9 l" f' v; N; x: _
  371.   int c;* r3 ^+ ^5 f. O3 j/ {- m
  372.   LPUPDATEFILE file1,file2;, V' `. X  t& X2 ?  ~) U: C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;, q0 y& _! A3 R1 }% n
  374.   std::list<CString>::iterator l;
    2 q3 i% k+ c3 R2 m! O- c: [
  375. + h  u, W8 D/ h; h& A( K
  376.   UpdateLocal.clear();
    2 L5 H$ W" S. i$ {
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);, \' Z& B3 r8 Y3 _; b
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    # j: Q: d: S- _! W
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    5 v! y8 |) L9 o! J* V) ?$ |
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);2 J$ {) }. }1 \: \4 g6 J5 D
  381.   if(UpdateFile3.size())8 U/ a! j: d) _4 f
  382.   {% e4 L. ]! u- d3 K7 B8 I
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)" L/ [3 Y, l' a! S) C1 S: m) {, _% t
  384.     {2 K% _* P1 U3 a: z
  385.       file2=(LPUPDATEFILE)(*i).second;0 d( D$ y7 D3 [; F  X- m1 m0 Z# Y' [
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())" v$ U- C8 k. S% p5 C
  387.       {
    * L3 {5 v" t+ s* B( ~: l" w
  388.         file1=(LPUPDATEFILE)(*p).second;; u, P+ v; g5 K/ R# c$ K3 ]
  389.         file1->vers=file2->vers;
    % q+ k# A) n$ N5 l" D' M5 X1 u
  390.       }! V& W" u) l0 s6 _) E  R
  391.       else
    ( e3 F- |7 E; K& h: f9 ?) Y
  392.       {
    # |5 n8 f8 _$ X4 P8 C+ j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. `6 F* Z6 R/ B# ?: l& _# R: E
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! x9 w! b+ V: R  p' K- M0 o3 f
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ P% V9 X' ]& @; R
  396.       }$ t: o, v9 ]; Y' P
  397.     }
    + I8 M. Y- p$ D, u9 G
  398.   }
    + X0 e1 I! c* t! _) b2 ?
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' F2 H; a) W- \% b
  400.   {
      y; D% |7 N; K' ?# ~, V; O6 h$ ]
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , S' e% G2 {2 c) p
  402.     {
    * ^/ C/ l* g4 c8 R/ V0 T  C. a9 s3 b
  403.       file2=(LPUPDATEFILE)(*i).second;2 I+ L7 d: ?+ [6 T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())) X* O# f' ]6 P& V4 k
  405.       {
    ' g( T# k2 Q9 Y! C3 S  [. Z
  406.         file1=(LPUPDATEFILE)(*p).second;
    : G% l* k( p# \
  407.         if(file1->vers!=file2->vers)9 N. G* s. F  ]# a2 U) i( }. G
  408.         {/ O9 D5 r7 Y  H4 I7 r
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & b& M3 F6 J( W8 o! H
  410.           c++;
    * S! o. a% w, R
  411.         }
    1 d* q" T1 E8 w9 Y* V
  412.       }
    , [1 T* L6 p, r2 M+ K. _. D
  413.       else
    # {- I8 T2 M* N
  414.       {
    $ I  C3 A  F1 D& N0 c2 u( t; b
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 ~- v/ `, a3 m" N9 ^
  416.         c++;' _& L7 w3 `! M$ ?: D0 i
  417.       }4 K, h0 H  z  `9 g' C7 A: G% `
  418.     }- i' U8 H# K$ @
  419.   }
    4 X) y+ K8 P9 C( z
  420.   unlink(".\\DownLoad\\update.txt");8 r8 C6 p: b% v
  421.   if(UpdateLocal.size()) return TRUE;2 s9 O/ h# U3 |' s: F
  422.   else                   return FALSE;
    # }4 V) y* I$ Q/ H6 \
  423. }
    ! v# o2 L. U7 ~" w; H0 {) u' d8 M
  424. ) F( R) m2 e4 O
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    2 x- Y/ L5 M5 J) N: M
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"$ B7 S) d' {1 M0 j% u! u, S

  427. 8 f/ p! e/ X* H6 j8 v! G0 M1 V$ E( W

  428. 1 \# C; r/ d5 p+ J9 i" u

  429. $ L! _0 M7 |% I8 f. J9 ?. F
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)$ |$ v, q3 o' X
  431. {
    # t8 i* H( w, @8 L7 `
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 g7 r$ E0 x" r2 T% J& m* L# X
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1); Y& h  \% H* ^( d# a8 h9 |* P
  434.   {
    $ @- O1 \0 ]4 }) f5 {+ A; P
  435.     char szLanguage[50];
    . ?/ w0 I' g; `1 }& @
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " R2 l$ |$ Q7 P7 Z5 P4 N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # j3 i* g6 ~/ M% b
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    + Z  D2 t6 W3 t, S1 Z: I: h! B
  439.     else                                   m_iLanguage=ENGLISH;
    & @) M& \! L, y, K" S- ?
  440.     char szRegister[100];) L4 i# b* N; E) u* g
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");. _# i8 n8 D- Z, u' D# {
  442.     strRegsName=szRegister;* S6 E1 ~8 J5 L6 K- {" T/ G8 ]
  443.     char szPatchURL[100];
    8 ^9 P. t9 n+ M
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 Z6 d9 q- h0 H& C0 J" s- G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);; B( s  l! W& L8 T
  446.   }. T4 g# m+ N5 g" D/ ~/ z
  447.   else$ T4 F7 A6 k# Z; J
  448.   {# m& g* W2 Q& t2 f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);, N+ l- U& H3 a- f
  450.     strRegsName=DEFAULT_REG_URL;- O# F1 r3 P1 t9 ?0 a* w, o
  451.   }/ u, F$ k* T# F; X
  452.   if(GetFileAttributes("hosts.ini")!=-1)4 {( {% Y% D4 R( ?5 T: j' [3 t
  453.   {
    4 ?) r% F1 J% f8 i2 n6 P3 \2 E
  454.     char szIP[50];3 j, Z3 E7 U) k
  455.     char szDIR[300];! J7 u$ i) R+ b9 Y  ~0 j
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))5 w% d+ }- z% J1 u3 R# \- q5 ]
  457.     {
    , g7 p* l" a' ^! ?) d, j
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * @! d. e" J' O$ a
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");* L: d0 R6 P% c0 Y1 e! [+ w
  460.       strHostName=szIP;4 M7 c: w: W% e2 t1 s, a) S; h4 v
  461.       strHostPath.Format("/%s",szDIR);
    9 |4 r1 `1 x6 T. M* |. R& l* ~
  462.     }6 a2 h% O2 V" y' }
  463.     else
    9 _  t8 Y0 v$ B4 V1 c6 e
  464.     {
    / O& G2 X+ A5 m9 s
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      @" R1 `/ ?# ?6 Q! G: o
  466.       {  o6 r6 Z) N: _
  467.         char szLanguage[50];
    1 X7 A3 {5 E7 ~! j
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! r9 I4 o% t, e/ D( v
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ f, V/ z( O6 r/ U4 y
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - P8 @! f% p2 X  r! U; t
  471.         else                                   m_iLanguage=ENGLISH;
    4 g# H$ {+ W$ l7 @2 l
  472.         char szRegister[100];6 Y! h- o, @: H" \& T3 b, C8 g
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    + M& M4 W! H# n* A- I
  474.         strRegsName=szRegister;
    5 q: [, j8 a: c  n! J
  475.         char szPatchURL[100];& o. @$ `) |6 }" ~
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ A" o, _) ^  D# K" \* f, S
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * I4 N# m6 J6 l+ Z* A- |
  478.       }
    6 D; V1 @; y2 L1 j
  479.       else( d4 ^1 ?, o7 X2 ~7 e
  480.       {
    - u4 l! b" [+ O, y/ W0 R
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 {# R4 v; m" d) X  b) W
  482.         strRegsName=DEFAULT_REG_URL;
    * m! R$ V' V: k  J, t
  483.       }7 S4 t0 p% e2 d. c
  484.     }
    # h) H2 ]$ C' ~# F
  485.   }
    # m3 h) \1 R, p  w! A7 U
  486.   return true;" p5 m# V1 r% U1 _' T; L8 X0 s
  487. }( S; }" w  a5 k+ Y) I

  488. ( ^8 o% G" c" t% d
  489. #include ".\ZLib\unzip.h"# Z* Y, c; P9 m+ B9 R, u
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ C3 l3 d) x" B8 q
  491. /////////////////////////////////////////////////////////////////////////////
    9 U/ M' o2 _" I7 y
  492. // CRevAppApp initialization
    $ Y- u% Q/ p1 U

  493. ) S) g% J4 e& U7 k
  494. BOOL CRevAppApp::InitInstance()
    7 ^+ Y. M# D1 Z$ g
  495. {9 H, U' ~$ @5 B  C$ s
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' G2 x3 t. p/ l( J/ s3 [" A

  497. ) y8 \, x, \) p- ]! e! r# f% [" a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);3 P* z  Z/ H0 _7 p2 \* \
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    $ Q) f# ]1 R% F, g( n- ~5 Z; B
  500.   {: P8 }( S' e* }) F$ q6 S% i2 K
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    9 L& a! T9 B" e8 e# b, J
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    ' c6 e! n) S; y: W5 U: z
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% ?; v6 J. r* X" a/ {
  504.     {0 T3 y  b3 H& Z3 K. {' o' \: v
  505.       strcpy(szPath,szPathTarget);
    $ s# z$ B( ?7 ?  q$ c" M
  506.       SetCurrentDirectory(szPath);5 R# e8 I5 g  k
  507.     }3 m/ v$ }+ z( O
  508.   }
    " i& y- C( d" f9 [* Y
  509. #ifdef _DEBUG
    4 E1 X1 P2 _% p2 X2 u
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" ~- h: C7 F- r  M: P3 M) g
  511. #else
    9 K, Y: f3 ?; m
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 o  M' i  N& n; B2 Y9 c
  513. #endif1 l, Q3 J$ @% }; d# h, ^
  514.   {% E2 G: ?- B& Q$ g! \1 S
  515.     char tempFileName[MAX_PATH];
    ! E3 L4 ~5 B) P, `
  516.     strcpy(tempFileName,szPathSource);
    $ M! g% e- ?' t/ p; C. g& y  f% j; H, h
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ' C* [8 n" G2 k4 n* |
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ) l. K$ u- i7 W6 P
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    # e4 b, z6 j8 m/ m9 S
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);: h2 X8 j6 p( v0 p: |3 H
  521.     return TRUE;4 O% E$ h$ Q6 q; o4 n
  522.   }; E2 d" U) _# V* [& M3 q  H
  523.   // Nuke 0118: Delete run.exe
      l( U2 S6 Q4 d+ J$ _6 e
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );0 z) H* ]! p% J" [- Y
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");( r; c" I! ~. |6 A9 T+ X
  526.   if(!ReadCfgFile("Config.ini"))  m; J& z/ h" z8 M
  527.   {
    " s+ K& ?4 _  S5 U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : _: o4 u" T! U/ Q
  529.     return TRUE;4 [% V& Z, D1 a# j+ h
  530.   }
    4 B8 D! P2 C: \5 O; h: k( w9 j
  531.   HANDLE mutex;) m% K( T( r; e2 ^( A# L# ~
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))6 U, |. c0 r) S/ k6 D4 u
  533.   {& C, S* y& h( [! m( C
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' L  x! R1 M  b5 |
  535.     {
    + [( V8 W" e1 \- X+ m  I; H
  536.       CloseHandle(mutex);: b1 T& R7 i8 _$ ^1 ~
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " ?7 a6 m7 a1 X
  538.       return TRUE;/ I1 c) D0 n- t: m8 d; x0 ]
  539.     }
    9 {( i/ C5 q3 d, r- n3 v
  540.   }  1 ^) v: Z' o3 G; N% j" _+ O
  541.   CloseHandle(mutex);
    1 e. E0 d5 E$ Q1 x

  542. . ~3 `3 ?5 g5 p3 s" w
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    2 W! F8 o2 C; u+ z4 ^# _' `( X

  544. . |8 j6 o4 a7 Y( z
  545.         AfxEnableControlContainer();
    8 d' e/ A2 u, j' ~$ l: y
  546. 6 `$ i+ C5 [9 O! ?% J& B
  547.   bCanUpdate=FALSE;9 `# S* c6 E# {2 ]- Y
  548.   dwStartUpSteps=1;
    " f( X" v0 x+ d. Z4 C" c
  549.   dwProgramState=AP_NOTHING;1 d  ^1 Z) t. R7 Z. Q& S. t

  550. # ]% E- g7 t; {7 P0 f
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      Y/ F0 Y1 V. a) I% J/ N
  552. , J# C; e9 e0 ~$ S9 C% c
  553.         // Standard initialization
    # Q! C$ y  @3 g$ ~7 i; Y
  554.         // If you are not using these features and wish to reduce the size$ V, |( l) }9 R& _2 R( z$ v1 \/ e
  555.         //  of your final executable, you should remove from the following
    4 A# I; p* t# l3 [0 \
  556.         //  the specific initialization routines you do not need.! Y, R! e3 v$ g! c+ r
  557. & r" U, r9 p; ^! @0 g$ I1 m. B- {
  558. #ifdef _AFXDLL. {' w8 ]2 R7 B7 v6 G$ b& ~
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ( Y0 M5 Y4 h3 h3 r- a6 J
  560. #else# D. w, }: Z  i. q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    ' S1 P9 Y% S! C4 ]
  562. #endif( L5 O3 z( N; V3 g
  563. 7 v7 s6 V2 a& |# X; x
  564.   dlg=new CRevAppDlg;
    " V3 \' N# ^# D" l
  565.   dlg->Create(IDD_REVAPP_DIALOG);' r0 I* \9 X3 K5 Q: v
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    : @4 \: T( K# o/ L* I1 m, B! r  h
  567.   m_pMainWnd=dlg;
    & \# D3 ]: [; W, W+ U+ R4 w
  568. 1 `$ E  O, k) P, e1 f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    8 g9 V9 F* s3 @1 l2 z: T2 r- Z
  570. $ H" L7 j$ G* I
  571. //  GdiplusStartupInput gdiplusStartupInput;9 J% m+ @6 m7 |/ W4 J
  572. //  ULONG_PTR gdiplusToken;5 C1 U1 \! n4 J0 J
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    5 z0 ]8 i7 i! Z% P1 p

  574. / Q4 g7 @2 f4 M
  575. //        CRevAppDlg dlg;
      f* F' p: h4 P( |
  576. //        int nResponse = dlg.DoModal();8 P# ?  V' T! y- t8 e7 W# [
  577. //        if (nResponse == IDOK)+ ]$ N7 `* w- A
  578. //        {  |7 R) W$ ?% J" Q
  579. //                // TODO: Place code here to handle when the dialog is8 z# C4 l" ^: P6 U; J$ w) w
  580. //                //  dismissed with OK
    9 A" {+ E' e, d. d# k/ e. @4 a3 u
  581. //        }
    . p$ h% Q- T9 Y" d# t
  582. //        else if (nResponse == IDCANCEL)
    & f# x: |' Z$ ]; k7 e, P* q: T
  583. //        {" a, t* ]8 h, r
  584. //                // TODO: Place code here to handle when the dialog is
    ! c' D" ]$ h' g8 a" M  s0 V
  585. //                //  dismissed with Cancel2 T( u9 w+ d5 O# {, A$ _
  586. //        }! {0 e8 ~  |' D. K: t" @& v
  587.   s& K3 [; W4 Q. a# M! V* Z! F
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' q4 |+ H# |0 o+ k+ _" ~' d
  589.         //  application, rather than start the application's message pump.% d5 v2 |" R% l* J  D
  590.         return TRUE;' R2 P/ Q# X6 c6 d7 h
  591. }& h3 P+ i( K, K8 I: u
  592. 1 X- S" Q9 c0 D
  593. char *CRevAppApp::strtok3(char *pSource,char *token)7 s- l" d) Y$ R! V" R8 p' w
  594. {7 }1 h4 X% P1 k% V! z
  595.   int i;
    * Y' q/ a" X& D9 t# J
  596.   char *szRet;1 H" n, z3 W- n5 r+ I
  597. 4 t3 D! m  M! a; S
  598.   if(pSource) { itoken=0; sztoken=pSource; }: L/ O0 b1 I) V6 ~$ {+ u
  599.   if(sztoken)
    3 P" B* x4 f  B
  600.   {
    3 o4 e! Q" Q* Q& o# W! j, j! `8 P
  601.     szRet=&sztoken[itoken];
    5 I* D# J+ ~0 ?9 g! t% n) i& |
  602.     while(sztoken[itoken])0 E; X3 k7 s" ^' v" x8 \
  603.     {% |! z* d: p/ e4 @
  604.       for(i=0;i<(int)strlen(token);i++)2 B1 l; t/ r7 c! J  P7 G4 @
  605.       {) p1 [, h. L# S6 }
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])6 _1 C% D9 R6 o7 l' m; u  i  e
  607.         {" a( U/ q7 B7 G+ [3 v1 _( G+ b
  608.           sztoken[itoken++]=0;" u; I  C0 Z- b% |! p
  609.           sztoken[itoken++]=0;2 U% B; |* A0 L
  610.           return szRet;
    7 Y7 l0 ^0 N* ?5 x- U
  611.         }
    6 o$ I# ]$ S7 L; Z) O1 u
  612.       }9 H9 y6 C" c$ p: O6 O6 j
  613.       itoken++;# p8 \, W3 [; z( p# Y! t6 r
  614.     }
    3 E; ^! }& f7 y" L
  615.   }) R" ]' P! ]# F0 i! M: ^6 B0 A% c
  616.   return NULL;
    5 \4 {8 f$ N" I/ M' e
  617. }, ]; d. t6 J8 {6 z5 u) K1 @& Z" ^

  618. " c. A) i5 M% L7 k
  619. void ProcessProc(long Total,long Current): Q* ]  y. S# F
  620. {( }+ \, V6 N2 S; V% ~
  621.         MSG msg;
      n  N9 s  i5 E
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);. [- c) T( p* w( \/ ]) J  _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));1 t9 z) h) j- k. ~) x$ N- L
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + n4 a* B% F5 [, K
  625.         {" _! @6 U# j& Q7 w+ F% G) [% N9 I, t+ C
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 c/ y+ }2 o4 `7 g4 G
  627.                 {
    4 r! k4 r- v) i+ z1 W
  628.                         return;
    3 }* H0 K1 z; f  k
  629.                 }) x7 H( L, W, N2 `3 }
  630.                 TranslateMessage(&msg);
      \# r3 O. m& x: @2 a* q% \
  631.                 DispatchMessage(&msg);
    + B) l9 n% W% x4 v8 Z
  632.         }       
    ) [# l% L/ @1 v/ y
  633. }
    3 S# W4 w1 u# W, ]% \4 e) N  w3 n- K- _
  634. : W( {! O8 ?3 }  Z: ]: S  p
  635. BOOL bFirstChar=TRUE;) ~% k2 U" h( @, [2 I
  636. , Y- V) j/ `, a8 E3 g
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    5 g8 I$ F6 N- M1 r) w
  638. {
    % k; ~) d  `- I- V, c1 p
  639.         // TODO: Add your specialized code here and/or call the base class
    6 `" j! P4 @+ }) g# e. W
  640.   switch(dwProgramState)
    3 C! D' J9 ]& \  a& Z
  641.   {# A/ x# l; P- f4 a
  642.   case AP_NOTHING:
    5 w3 b* c. `: h: U
  643.     switch(dwStartUpSteps)
    & Q- W8 u# l# {+ r/ \
  644.     {
    & D1 ^- w3 i5 J9 I
  645.     case 1:
    5 t1 m* u% f$ [, D6 k
  646.       {
    0 X; B2 O. N% d% y* V
  647.         int i;
    5 I  `) I/ q! _2 t
  648.         CDC *pCDC=dlg->GetDC();- ~0 E3 h3 m' E3 Q) j
  649.         HDC hdcwnd=pCDC->m_hDC;
    4 _2 f& r0 T5 l. V! G
  650. //        Graphics graphics(hdcwnd);
      r- J: w* W2 H. W$ a
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ; v, @* g) s8 z
  652. //        INT iWidth=bitmap.GetWidth();) k7 E3 _/ r6 x# d
  653. //        INT iHeight=bitmap.GetHeight();
    # Q( \; b( r1 F" r! U
  654. //        Color color,colorTemp;) t9 f+ y& I/ O0 q0 [
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . _1 _0 y# F# L( b( q0 I6 N7 I
  656. //        {2 a4 g9 u: G4 a9 j9 x- u& F
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ p/ {9 ~) D. ]8 m: ^/ z
  658. //          {
    ! J: [2 [9 i( i& w6 Q% J, r/ {0 U
  659. //            bitmap.GetPixel(iColumn,iRow,&color);9 c$ l/ ]% ~4 _/ F$ z
  660. //            colorTemp.SetValue(color.MakeARGB(. m0 ~; A& c  `! ^: V6 o
  661. //              (BYTE)(255*iColumn/iWidth),
    & X- a7 J4 q: b* o
  662. //              color.GetRed(),
      k: d- u7 F1 K8 y# J( @
  663. //              color.GetGreen(),0 r; _1 ?4 b" {" a6 x( s
  664. //              color.GetBlue()));6 e" W$ k; e  |6 T3 I8 I
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);, \- R/ p- o& H3 w9 ~$ x" f0 U
  666. //          }
    9 l$ J8 d5 p! g; H2 e
  667. //        }
    / W( g: S) L4 P; \0 h8 M
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . e9 Z6 j9 t7 a( c' [
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    & B0 f: _& U5 k) }" {8 v: K. s- E
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% D: M$ s# ~0 o
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 u# B0 }/ P. x1 \( I
  672.         for(i=0;i<240;i+=8)* Y7 A' y2 \0 v9 ~5 b) F; N6 Z) v
  673.         {
    , ?. g$ y: l1 z% j% U$ X$ S8 g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);3 W' C5 }# i0 G  S  `/ l) O1 D7 B
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);4 @1 g# i/ R9 C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : i! r7 |, Z  n7 t. U1 w
  677.           Sleep(33);
    7 y5 G; L* H# b* R3 |9 V" x! g
  678.         }1 @/ q- ]) O$ @6 f+ {
  679.         Sleep(1000);
    2 {( d% W* F+ j5 G
  680.         for(i=240;i>0;i-=8)/ `  a0 A! |* B$ G! z9 S
  681.         {* O3 P. K9 R* q! D" P0 {+ j* R8 Q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 |! |! F2 t2 m6 A2 \8 y* P
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);+ V1 i& }& }  o" q
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    * h! R4 `. B# K1 v
  685.           Sleep(33);8 D% _% m; W3 p1 z9 _
  686.         }. i$ }. }2 D' T/ v! q- r
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      W  V5 w$ i9 g; D2 N3 B
  688.         dlg->ReleaseDC(pCDC);* t+ v1 {( F) Q. A2 c7 H
  689.         DeleteDC(hdctar);8 w3 K0 S* ^  _0 q7 Y/ }
  690.         DeleteDC(hdcsrc);
    . H4 Y  Q+ ^2 r' y* v
  691.         DeleteDC(hdcorg);: J) ]* V9 L% p& x8 w: J7 w
  692.       }
    . F+ V: S3 j, C, z4 f1 f
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ W0 W2 `: c: O& t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ! G1 r$ U3 I4 q7 B
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) N9 }  j3 W! i# i0 K5 c1 f& |: d
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    : O" K, I8 }2 {* O
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - D) L7 Q! _& x% `" @; N: P& h
  698.       if(!Dn.Connected()). i4 h( M& j" d; f3 O) U
  699.       {1 F/ B! X- l$ D1 z* s6 g
  700.         dwTotalFiles=1;" }5 @$ V6 q2 T4 P# g
  701.         dwDownLoaded=0;
    3 I+ Q3 c4 O* w" |5 g
  702.         bSilentStep=TRUE;
    6 U3 @3 x0 c: o, D1 \
  703.         bCompressed=FALSE;
    3 q7 e; ?# M5 C. H: U" e
  704.         strExtLocal.Empty();) e/ Z* g# G+ k' A" v
  705.         strFullName="readme.txt";" |7 N) w1 G" c0 D  Z
  706.         dwProgramState=AP_CONNECT;
    ! v) |1 b: Q; R; g6 z& f8 F5 P
  707.       }2 j& v4 H2 w7 Y- X1 a) c- K: A- j  L: w
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();& g$ z; q0 `4 s9 [/ s  z* X
  709.       dwStartUpSteps=2;
    0 |7 A! B7 U# O- ^
  710.       break;' F1 i+ u% m3 v# j2 ~! R, X
  711.     case 2:
    3 k2 h2 X, f$ D; b
  712.       {
    9 q) a5 D9 i3 J" ^0 ~; c+ W  n' O* M
  713.         int iEOF;
    , W/ V1 X# ]/ C3 A7 a
  714.         FILE *fp;
    ) w$ e$ Z* ~; `5 l% T9 P! W
  715.         char szString[512];
    , E! J6 B7 a8 O1 G1 F; I1 g
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    . ~" ~/ y% R9 k; l5 o; o% S/ l
  717.         if(fp)  Q: y( h' a$ i0 s
  718.         {% ?* I) v  s4 m* c
  719.           do7 y0 j: m9 e2 S* @
  720.           {3 ~: z/ t2 s) p: Z1 U7 U& f) H: N, i
  721.             iEOF=fscanf(fp,"%s",szString);6 S1 m7 W1 d6 y! a2 ]' _( p! I9 i
  722.             if(strlen(szString)), E' I% z) H, V" f7 E
  723.             {
    5 U7 W8 n9 y5 O* G) E
  724.               if(bFirstChar)
    * x' E+ y/ c+ y/ g" D0 e& a
  725.               {* n5 c" _  u& `: p
  726.                 bFirstChar=FALSE;# v. X1 i! e; l+ b" a
  727.                 bConnectIsBig5=FALSE;
    ) X7 W9 }7 z( ~, q3 e
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    $ `+ R- s+ w$ p4 H+ t
  729.               }
    : o; q7 W% M* @9 X& D
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 o$ c& Z+ h' B+ v; i0 Y  n
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : w  V* [6 S" a& X* v: x/ ~# T- c
  732.               dlg->m_ListText.AddString(szString);$ C/ I+ H9 v; }+ M# ?! K2 [
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' y$ W1 i" J, c! Z) _& I$ N
  734.               *szString=0;
    ; k% V- i9 i- N( p+ a
  735.             }
    . g' u  E0 a# |# O  h" l
  736.           } while(iEOF!=EOF);
    7 f2 p. Y8 k5 ]2 F" ?/ Y
  737.           fclose(fp);6 b8 [/ A' G5 |  l1 \& A
  738.           unlink(".\\DownLoad\\readme.txt");4 U- g# }( P( z4 }! y! u
  739.           dwStartUpSteps=3;& N* S* R: G7 G7 n
  740.         }) y5 X' B* P; ~8 K9 e0 I" F
  741.       }" Z9 ~+ X! A* M/ `. @! }. ^5 G; a
  742.       break;
    3 F) i, F& Q( \* [# c, V
  743.     case 3:
    ' l( _# l% o8 ^3 n7 W! \" v
  744.       if(!Dn.Connected())& j2 ?5 z  k" y$ n" d( _
  745.       {
    + a: N) j6 y1 e( S, c2 w5 Z
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    . g  h) D$ A- e4 e7 P8 y
  747.         dwTotalFiles=1;5 q5 u" D2 p1 C
  748.         dwDownLoaded=0;5 L; J% {+ Z% B: T2 z9 b
  749.         bSilentStep=TRUE;
    $ m$ n: K$ J% t
  750.         bCompressed=FALSE;4 P8 S0 _( j5 I0 h5 g
  751.         strExtLocal.Empty();; G, _5 ?. ~: R8 e
  752.         strFullName="checkversion.txt";
    4 J# E; M( q- _2 }
  753.         dwProgramState=AP_CONNECT;- M- A5 b" W# B2 h
  754.       }
    ( Y. N- o$ B; d! F, W
  755.       dwStartUpSteps=4;4 g5 a  ^) i+ z3 v  a2 W
  756.       break;7 ]9 J- D. T0 o' A
  757.     case 4:
    + z8 S, ~4 l+ i) j. v
  758.       {
    ' a; _3 r* V+ x7 e: g6 t+ V
  759.         FILE *fp;6 g% l& P. O9 I& \
  760.         char szString1[128];& R" ^4 T9 d- V! r+ [1 A7 ]# N
  761.         char szString2[128];
    % U* L. m" M5 A" ?2 C( v& g
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");1 s$ f  q# t% W3 A5 d
  763.         if(fp)& Q7 K0 ]# t, r" J
  764.         {
    ; Y2 @- ]1 e8 O& C0 R. A+ F$ ]: P
  765.           fscanf(fp,"%s",szString1);
    7 A+ W8 h7 P2 d% s( R
  766.           fclose(fp);. L" ]% I( k3 y/ t1 ~2 j7 B
  767.           fCheckVersion=atof(szString1);
    ! ]) |3 F8 A% }7 c# Q8 s* C2 |
  768.           fp=fopen(".\\checkversion.dat","r");
    / y5 i' o) e* _# |' N, W
  769.           if(fp)
    , ]  F2 o: |! _. c
  770.           {
    " H1 y, T# b. H9 a7 Z
  771.             fscanf(fp,"%s",szString2);
    ) n  |4 W" L$ ^# D# v8 U3 g
  772.             fclose(fp);5 |4 d! z. {, O8 U/ ?/ F
  773.             if(atof(szString1)!=atof(szString2))
    / c! D5 B4 j4 g9 Q6 }
  774.             {
    / P7 c3 y. F/ i$ e
  775.               if(!Dn.Connected()). [' R9 G" h8 f2 P" f- K
  776.               {
    " C$ ~; r& r4 p. `' e
  777.                 bFirstUpdate=TRUE;
    / Z; ?4 h% `' b% [
  778.                 dwTotalFiles=1;
    4 w- J0 x* a3 K" _
  779.                 dwDownLoaded=0;
    5 r) V; D! d1 \9 ]; k* d: B3 {; m
  780.                 bSilentStep=FALSE;
    4 _, h4 f' S1 @" ~; E
  781.                 bCompressed=TRUE;
    $ g' f- A( j% y& P
  782.                 strExtLocal=".\\DownLoad\";% v) T1 f7 k5 c3 R
  783.                 strFullName="update.txt";
    & B0 k( O6 c9 i1 a) ^
  784.                 dwProgramState=AP_CONNECT;
    1 b6 q" N: S$ Q+ B5 @' h/ s
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 n& K# ?7 t% J  _1 i
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");1 |. A2 o6 C- _! Q- b
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");6 c3 a) S: F- M. n: L" d6 h
  788. 3 C, l% T+ G8 k0 N) M' R. p7 ?
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % `& i/ H' a5 O9 u* e) d) P8 N4 o, M, J; s
  790.                 unlink(".\\DownLoad\\checkversion.txt");8 _  X  a) {+ c1 m
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)" N; y7 I- D0 r% ]8 P
  792.                 {
    - O' t  d- ?" R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");) C6 d* d6 `& F+ a. Z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ! @3 V- X. X5 \' a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");+ y; b+ R4 Y8 u( ~6 j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * _( ^! E3 B; Q- ^$ C
  797. % z+ @3 C+ N4 z1 t" w
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");, {5 C( I9 R8 Q! h; q" P  ?* E' Y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * x+ k4 L; D8 M9 q7 v- O3 {
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ) |; z! S/ r/ B6 M. \( q+ Q  Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " o8 w/ g, M9 u4 m
  802.                 }
    5 M" F+ X# y# B& h3 U+ X
  803.                 dwStartUpSteps=5;
      P& z  G1 u( K, g" p0 f4 p" L
  804.               }
    % h' \) o- f; t9 }+ t7 X0 a: J
  805.             }
    ) f0 }8 ?6 f' ~: z# z% X
  806.             else1 A4 s3 p* I( o
  807.             {
    : L. j: V/ A9 d' S5 n% f( C  S3 S
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 v! g: e+ Y5 n
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ) V1 L4 `( P& ]
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 a- n; t/ y0 }" Z1 n. }' w& E
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");) [5 Z" h! o8 }7 O0 R
  812. . Q" a) X/ _+ `7 M& Q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: U2 ~9 n, U! i. \" [1 p
  814.               dwStartUpSteps=99;! M% Z' K  j1 \- S
  815.               bFinishUpdated=TRUE;' I9 p+ S) X7 }& V- B# Q1 I2 s
  816.               bCanUpdate=TRUE;, s& q: L7 \- M. O3 [1 O
  817.             }( n7 b$ H0 e/ }2 y1 H
  818.           }
    * L; S! W+ _# K# R
  819.           else2 S4 T+ L" }0 t8 T5 Y  T7 r
  820.           {
    3 @8 r1 F+ b7 N) C
  821.             if(!Dn.Connected())
    1 `0 ~+ C: a& X) l$ @6 w( N
  822.             {
    , M7 h: ~& o9 T; c; n1 @) \
  823.               bFirstUpdate=TRUE;( z; O! Z/ \7 v3 ~$ I( i8 E
  824.               dwTotalFiles=1;
    / K, {0 C2 e7 n% r5 A! s. [: E1 @
  825.               dwDownLoaded=0;
      ]5 Z" a- d6 _( t1 `
  826.               bSilentStep=FALSE;
      d, X. {9 v2 F2 F- i& h, \
  827.               bCompressed=TRUE;) Z2 g) j; ?- y' N+ W$ a3 P9 y
  828.               strExtLocal=".\\DownLoad\";5 D. {: c+ |5 l2 u2 i. x4 A
  829.               strFullName="update.txt";
    9 u& O* A8 c4 E! B
  830.               dwProgramState=AP_CONNECT;/ P3 G& V6 s; r* v
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    . Z) G' d2 P4 q8 G; X4 C/ T
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");# I6 Y2 U1 N/ O" y( Z7 P1 o
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    8 R6 R$ E7 I! _) t0 n
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; `9 j9 g8 A! }9 D
  835.               unlink(".\\DownLoad\\checkversion.txt");+ w4 z8 i7 v4 s' H( u6 s$ }8 F* p6 z' Q
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    5 s5 E! t# @, ?. ]/ q. I
  837.               {$ m/ y# B/ p/ y0 `" t/ k! K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    / U/ b  v. ?# ?
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 U' C7 y8 ~8 |" [; {$ `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 m5 ]+ y; ^) ]+ e9 B
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' [7 O( c, L7 b9 ~, t( K; I# R
  842.                
    / N2 R, h% \- r; ^$ I) T
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    + D4 J( L, q( }& O7 A: N( A# O6 N, |
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");) \8 k+ a  s% n% `- c* W2 H
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    5 H8 F7 f" `" w
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 r1 I$ N: ]4 c) @, y
  847.               }4 ^1 h# }  r( u1 K5 Q
  848.               dwStartUpSteps=5;6 E. _( P4 A8 O9 L# n! \7 d9 q
  849.             }
    ) J# u: P* c7 h" {& Z
  850.           }- F1 M7 S# Z5 l/ d" i0 K
  851.         }, G! D) s+ l$ n3 t  f0 P
  852.         else9 Q7 Y* {, z# L! ]' Z. F% d
  853.         {0 C. P% V& ?5 K) ]
  854.           dwStartUpSteps=3;
    - d$ B" Y7 Y1 s. |1 w
  855.         }* d! @# K" d7 O
  856.       }0 A3 F; i: y$ Q- E3 \
  857.       break;' K2 z6 \2 D4 k  v+ L$ G  r
  858.     case 5:
    ! D! k: ^) @0 W! e2 ?9 D: U" ~
  859.       {
    4 \% Q9 |, q7 i
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)/ R5 n* e) A3 z' t; H. Z( [
  861.         {
    0 U0 n* k# }# w3 o' z+ w
  862.           int opt_overwrite=1;0 j; |* U0 Y* X" K
  863.           int opt_do_extract_withoutpath=0;( Q* z! G8 l" ~
  864.           unzFile uf=NULL;3 }  G3 q; }. [8 l

  865. + u% i5 w. s; k7 z
  866.           uf=unzOpen("Wsa.zip");
    , B) j0 N0 Y+ U
  867.           if(uf)
    + L! j; Y7 g4 n; x
  868.           {
    , ^" J- W- S( ^" P6 a
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    : j' [" g$ Q; ^- ]# _2 U& |; y
  870.             unzClose(uf);( a4 N+ S# r% I
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 H- e, c* w( m& i) {
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    7 Z* P- |" [8 P: U* d" Z2 h; E
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");: `- @4 {* U9 a) c+ c
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' d0 {7 f; A9 Z6 P' J$ ?0 T
  875.           }3 r* F% V9 Z+ c; Q
  876.           DeleteFile("Wsa.zip" );
    8 e) M8 h" B4 J6 z
  877.         }! L- U  Z2 ~/ J- T

  878. + Y. @- |1 S; t0 c( L0 d0 N
  879.         if(CheckLocalVersion())
    " }, x, v6 z# J' V6 _
  880.         {
    5 W# M; L2 f3 y4 a+ M; z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");- n7 n, Q6 m% _5 `4 C
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    4 s) d8 y/ g$ u
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");! ~2 E) N# {1 |- N6 R
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ \3 F& v/ E% C. c" @, p; @
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);# C) z" R  G, d: T* ^, _
  886.           dwStartUpSteps=99;& x+ o7 X( Y9 K5 j  y  \0 X+ v8 U7 j
  887.         }
    7 F4 r0 @: W, Z, p0 G3 ^. W6 T
  888.         else
    ' W4 D3 M- }; Z6 A" X2 q& X
  889.         {; p3 w6 _6 j4 W9 F( [0 c
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ( P' H/ T" @0 h/ y/ S
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");' m+ D, c4 z1 k/ A. L! y# }
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");% F/ Q8 i7 g4 |

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

9 E6 U; \3 q% t- V- L; R2 a
0 e4 Q! v5 W# f0 h7 s* ]

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-31 12:44

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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