找回密碼
 立即注册

CSUpdate.exe源代码

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

" p6 `, M- \# C$ ~" H) z- i2 z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    0 {5 M/ _9 I2 L& e" }
  2. //$ W3 J9 d$ ~7 s* ?
  3. - c7 C) N6 B8 z( H& r( ~! o
  4. #include "stdafx.h"* F/ }: V( }* ]; R. C

  5. . Z& x8 m' @* B& ~* `  S% t9 o3 N
  6. //#define UNICODE* `- e: `6 R; Y- C) L+ S& ~) f1 i
  7. //#include <gdiplus.h>7 _0 m8 W4 q6 [( Q
  8. //using namespace Gdiplus;8 S7 I( j% ^; f; \3 W/ i: B* B9 L
  9. 3 _3 l! ~3 D( {7 L5 u
  10. #include "RevApp.h"8 T+ c3 ^- C' w  o: p4 k
  11. #include "RevAppDlg.h"- \% R$ t) i4 c
  12. 2 x2 @' U0 _+ p: B6 F$ j
  13. #pragma warning(disable:4786)4 s) Z! |0 y' n% `; j8 L& D4 H/ b9 O
  14. #include <map>
    5 a% N9 W, T; e: ~. `
  15. #include <list>8 {# |# z/ p. O
  16. #include <direct.h>; A0 T& a+ j5 C

  17. 5 I+ N# z9 T0 t( |3 L4 R$ k* S- C/ f2 y
  18. #ifdef _DEBUG$ s4 x, _% B9 C& j1 x  w6 v# t
  19. #define new DEBUG_NEW4 A* f1 e3 H/ A* C# p# B8 ^( c
  20. #undef THIS_FILE; E! t4 F& r- P9 H
  21. static char THIS_FILE[] = __FILE__;  E/ W7 m. h+ }; N1 P; n
  22. #endif- K' G! g4 ^) b7 Y
  23. #include "SkinResDef.h"
    $ M; h, s; V6 X- T( c2 ?
  24. #include "ChangeBG.h"' j( ^  v$ A! `0 |# B2 U* B- J
  25. #include "AFXINET.H"! ?1 ?0 W: {& z) W7 L. X

  26. 3 z. z7 ~$ a5 T4 F7 G( |: D
  27. #define TRADITIONAL_CHINESE 0. I+ ~# Y7 Y6 c2 W0 l1 S& ^
  28. #define SIMPLIFY_CHINESE 1
    - m7 F7 o; K& L0 V
  29. #define ENGLISH 2
    5 Y  f; X4 Z. S% A7 J1 v: A
  30. int m_iLanguage = ENGLISH;
    - W4 ~  C9 D+ L2 @( n
  31. /////////////////////////////////////////////////////////////////////////////
    ' O3 V7 T* D9 B2 J
  32. // CRevAppApp8 q8 i& K8 n) L+ U. r! t/ t, a

  33. ' @: A; I3 p3 `0 E3 F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , m0 u" Y( `/ |
  35.         //{{AFX_MSG_MAP(CRevAppApp), A1 I2 U  k% Z  g5 u" C
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.' G+ {+ Y1 A! e& [6 ?; n
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!. _7 B7 m2 r  ]1 a
  38.         //}}AFX_MSG
    & X; E# o. C8 m
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    4 o- a$ y# j+ v& r
  40. END_MESSAGE_MAP()
    % h! Z! T  i1 p$ G1 a5 s! ~* t# M1 p
  41. + Q- ]( r% X5 _+ }3 D$ A3 m! o
  42. /////////////////////////////////////////////////////////////////////////////
    $ N4 ?9 q$ }1 h' c
  43. // CRevAppApp construction
    4 }& S0 N# @, B, N2 _6 m4 x
  44. , l& `1 B: s4 b. h
  45. CRevAppApp::CRevAppApp()
    5 C* I# R9 E  c% t
  46. {7 [8 \1 I9 ]5 w- w
  47.         // TODO: add construction code here,1 A. k4 s+ z" W( ^. }
  48.         // Place all significant initialization in InitInstance6 w- }# s& g& m5 Y
  49.   bDisplayIsBig5=FALSE;. R; Y5 P7 w' v4 i7 m8 a0 O$ t
  50.   bRestartUpdater=FALSE;
      I7 c% s! `. h# w. K
  51.   bFinishUpdated=FALSE;0 y& A5 ]! h6 a. m
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    - i* U$ T! n' c$ h  b! H
  53.   InitChangeDataBig52GBKS();) h. w0 F" B+ |
  54.   InitChangeDataGBKS2Big5();
    * y, T2 g5 A  b" [# o2 U' e6 N! r
  55.         //7 k) s% m( W, a6 Q3 I
  56.         bClickRunExe = FALSE;% I! d: V1 y6 V, ]
  57.         //
    . S! n3 N$ Q1 l8 l5 R
  58. }
    . K/ h- e; \( W2 \

  59. * N' _8 D) o, z3 l, h: ]0 @7 J" d
  60. CRevAppApp::~CRevAppApp()
    - c* n+ y: ~# ?" f
  61. {
    + i% ]4 j6 V1 c4 C$ `( A! E2 L
  62.         // TODO: add construction code here,2 S. {" f, ?) j" c, {! C
  63.         // Place all significant initialization in InitInstance
      c8 G3 q* A$ v5 \8 r8 t. c
  64.   EndChangeData();, m5 y& H5 t2 j2 s5 D
  65. }: e. J: I; _( ~) S, E
  66.   o2 }* H3 L4 ?0 k' p' E% N$ U
  67. /////////////////////////////////////////////////////////////////////////////
    ! n  O$ X% S9 [5 i, H
  68. // The one and only CRevAppApp object) O3 q! @  K2 ~& r0 W: E3 z
  69. 6 [$ K! L8 n6 x# k( C8 `2 r* i: E
  70. CRevAppApp theApp;
    , p  U4 u# J7 l% \( _
  71. / g% R% {$ k$ _0 p
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! q, O( Z0 }) g2 A4 X+ @
  73. {
      I. x0 M* v; ?% G+ j
  74.   int iEOF=0;
    ' _/ e  e0 X9 R9 v
  75.   char szTempName[MAX_PATH];
    * g& s5 ], ~4 K
  76.   *szFileName=0;# M+ K4 e, h. }. P
  77.   iEOF=fscanf(fp,"%s",szTempName);3 N) [8 P7 ?6 @: k5 h3 t& w7 F
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- Y, ?) _3 l! |" s
  79.   {
    ; A$ m# [  N5 Y" O
  80.     strcpy(szFileName,&szTempName[1]);
    5 w2 A( B% Z3 b) H  f
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)% C- C2 M/ T, V' w( _
  82.     {
    3 ^( _: n( D8 v1 c! w
  83.       iEOF=fscanf(fp,"%s",szTempName);! Y5 d8 X# {& [2 I
  84.       strcat(szFileName," ");
    2 R3 W& n; S* e( d; `
  85.       strcat(szFileName,szTempName);) w* j$ @8 t+ o' J  [
  86.     }
    6 y4 r# s! `3 U$ M
  87.     if(strlen(szFileName)>=1)
    7 X3 G+ K4 }0 U
  88.     {7 z& R( T, ~8 y' ?) M
  89.       szFileName[strlen(szFileName)-1]=0;$ u/ S6 {0 @  ]
  90.     }
    6 H- J8 N! I$ e: _
  91.   }
    * J' m3 m! }2 H, r+ z2 }' r, h
  92.   return szFileName;
    ! i, h" v' d( v% c) R
  93. }+ n2 ], P: d( L2 I* ]
  94. 6 H: V3 f% U0 T; ^3 f( x' \5 }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / B7 ]+ l( N0 c. u
  96. {& s9 [' i3 [" M
  97.   FILE *fp;
    0 L' S. u; s9 f) C
  98.   char *key=NULL;8 Y% C( N. h# d/ d
  99.   char version[MAX_PATH];' `, }" H0 B8 T$ Q2 B
  100.   LPUPDATEFILE file,olds;  F9 w( w" Q1 w/ w  @7 p
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! \5 f7 ?% `* x1 [9 D6 x
  102. , Q9 ^/ w2 C, j
  103.   UpdateList.clear();: l; a8 M4 A, z8 O- W
  104.   UpdateFile.clear();) K6 D; \3 F% r
  105.   if(GetFileAttributes(filename)==-1) return false;: b) @9 Y2 ^' T3 Q5 d* p& _, v0 z
  106.   if(!(fp=fopen(filename,"r"))) return false;
    2 H5 H: F& E! z$ I% w! Y4 J) N
  107.   fscanf(fp,"%s",version);1 K# x2 B9 R" S. k/ i. {
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }( s% p$ r2 k- J* t
  109.   while(fscanf(fp,"%s",version)!=EOF)& t# ~" U8 v* V& k6 T& M( a( ~+ _7 }
  110.   {" a. [/ f* h9 ?8 O5 V3 b2 V
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));; d. G2 ]2 r6 N: C  C, ]) v+ _
  112.     fscanf(fp,"%s",file->path);
    " q& v& A0 @+ T3 d# l) ~
  113.     ReadFileNames(fp,file->file);, [5 @7 }% A' N1 K
  114.     strcpy(file->full,".");
    9 }- o4 T! j) O$ q8 i7 s
  115.     strcat(file->full,file->path);
    * G8 {1 j' y2 ?3 |
  116.     strcat(file->full,file->file);
    * a, j4 U# _+ G. u5 q* b: P7 _
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% P+ E$ k) |: {- D% P) d6 R
  118.     {' }1 J+ {: c3 Z
  119.       file->vers=(float)atof(version);
    9 J9 R% K5 ^; E, [: P  k$ r
  120.       UpdateList.push_back(file->full);: @' z- d1 ^( |5 N& K7 S7 H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    # v/ o! j2 }+ T! h8 }/ w* h  K! g
  122.     }
    - ]! k  g# g6 U5 w1 P
  123.     else3 b" O5 A& X4 _8 d
  124.     {
    - Y  F! A. e  O$ h  Q; ]/ S7 u6 a
  125.       olds=(*p).second;
    - i, T0 o8 E( m6 k7 t# k; s
  126.       if(olds->vers<(float)atof(version))2 X0 f9 l" _- G5 x3 A8 W6 u3 V
  127.       {8 X, {: Y+ [  j8 W
  128.         olds->vers=(float)atof(version);
    : `5 C' I$ k6 I( `# U
  129.       }
    $ y% w: }, V7 y
  130.       free(file);
    2 W' h. t4 N) w- @
  131.     }4 |- |+ R/ C; V+ Z9 k" H3 h
  132.   }/ J9 t) X1 C4 S. Z! @. y
  133.   fclose(fp);
    6 H! D9 S8 [0 N
  134.   return true;
    7 o- C0 Y  ^; ^8 p& L' i1 E
  135. }. `! ^. z7 `) R

  136. 0 }4 m/ y/ O" F1 }& [
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    5 F9 K6 a! ^1 P' w2 P# z8 U
  138. {% b; m1 a2 ^& g5 S' N
  139.   TCHAR  szFull[MAX_PATH];2 p: V! A  m, n% B+ s4 n
  140.   TCHAR *token,*inter;
    $ x8 ]/ G2 `( I8 W! K. G% E
  141.   *szPath=0;. x5 a9 ~- q) }3 p) l9 s3 b: w3 b$ b
  142.   strcpy(szFull,szFullPath);
    & e( |: q* @+ l( T/ \1 p
  143.   token=strtok(szFull,"\\/");. o: t8 G' _& |! ~
  144.   inter=token;
    5 q! U+ R, {# _+ t
  145.   while(token=strtok(NULL,"\\/"))7 q/ w& H; D0 [6 H% [
  146.   {
    2 d6 o0 k0 w' o- n1 o
  147.     strcat(szPath,inter);) r' z% f+ S8 m9 l. k! }1 p0 [! H/ ?
  148.     strcat(szPath,"\");- k; o) M+ {: F4 \( a' V5 |7 J
  149.     inter=token;
    . o5 K8 }% D7 q! e
  150.   }$ a- y2 Y+ d3 ?( ]: N, W
  151.   return strlen(szPath);7 k& a, E2 i+ A4 k( T# [6 t* q
  152. }0 f7 V* h( O: G$ s3 @
  153. & i" ]9 U# n. ]2 ^3 Z( R) |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)3 K* y7 ]5 n" x. n) i8 ?
  155. {! Y% I, t7 o' n6 \5 s
  156.   DWORD attrib=GetFileAttributes(Target);; g$ o2 v7 K0 \* I* q9 J: X
  157.   if(attrib!=-1)9 ?- n" `7 d( l9 \: u( |0 Y; D
  158.   {
    ) W) D5 N9 F% k8 w. H+ T" l
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ b2 _3 c3 P* j" E: `
  160.     {
    ) w9 l( H( |) {7 a0 Q2 e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ( M6 \+ ]8 m0 `) S
  162.       SetFileAttributes(Target,attrib);" e# e6 `% m: w0 f9 t
  163.     }, g$ j$ T8 v4 a. [7 d0 J  r
  164.   }2 T/ ]" L4 X( c& H- |, I& T) P
  165.   CopyFile(Source,Target,Erase);
    2 n! ]% C& M, r0 l+ p" D2 s, S5 k
  166. }
    . g, O3 [; y6 D, f- W+ H. y

  167. 3 F8 E# {9 h7 \5 F2 i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    ; p2 L8 ?2 \6 O  E: e
  169. {/ T8 E, P7 N. a  j
  170.      FILE *fp;- z$ i& a5 ]4 M6 `+ e1 ~8 U) p9 X8 `
  171.      char  szBuffer[8192];$ b  V& H2 O5 W2 u
  172.   va_list  argptr;
    - t) M% q* g+ {! A
  173. + I$ W8 l+ j+ M- f6 H% l. o, k$ k8 b
  174.         va_start(argptr,message);( k5 s, r3 F8 j; `/ t
  175.         vsprintf(szBuffer,message,argptr);
    3 ?/ \# X, z7 [7 j- Z
  176.         va_end(argptr);* B, |* p0 [$ h( l: [; q
  177.   fp=fopen(FileName,"a");
    / r; B% w7 L9 M. ~
  178.   if(fp)
    9 ?; M+ f. \: e6 ~# Y, a. Z
  179.   {. Y4 y% h4 X$ |& u" a; @
  180.     fprintf(fp,szBuffer);# z; \. D2 F3 Z4 J
  181.     fclose(fp);: t! L2 @* R2 e$ v0 R% E9 v
  182.           _flushall();
    * I) B( N9 `3 g. z2 ?+ C% J* X
  183.   }
    5 q/ m# h: q  y0 m5 j$ E
  184. }
    4 Q' `# S2 R! h+ q

  185. 1 c$ B. C+ G" a, E/ D: C; j" G
  186. BOOL CRevAppApp::Fclearf(char *FileName)) p/ V8 j1 Z0 d# O
  187. {% j8 R( ^. j1 _" @0 Z
  188.      FILE *fp;8 M4 i  d) K% i  B7 h8 L: H+ V
  189.     DWORD  attrib;% r4 K- }$ r: f: t0 t) k1 T
  190.   attrib=GetFileAttributes(FileName);
    9 B& M0 Z% X0 [' r1 g' k. w
  191.   if(attrib!=-1)
    ( `8 Y- b/ n! I# q
  192.   {9 N- M8 L8 d. z2 C# p7 Z
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
      `0 [9 O# p6 W- p- b) w$ J
  194.     if(!SetFileAttributes(FileName,attrib))! Z9 r& u2 W" P/ }1 j
  195.     {
    3 I) Y( Y! I! u* y% |9 ^3 X- ~2 m2 Z
  196.       return FALSE;
    * o8 o$ O! U9 O
  197.     }+ U8 e0 ]% O) L( d' r0 o
  198.   }4 @- L4 X4 H% _) y. [2 T. K
  199.   fp=fopen(FileName,"wb");
    . c1 W: G* D; A2 f$ P
  200.   if(fp)
    ) o& r  f! G# t9 O
  201.   {7 Z$ _( ~* G! d/ f1 T( P
  202.     fclose(fp);
    * ]2 a6 Q/ n- w- x) c5 q1 n: m
  203.   }( I4 `- k7 t6 Y+ Q' p- s
  204.   return TRUE;' w6 z& ?( M' ?+ o4 z, B: H1 K9 ^; ^. P
  205. }  ^$ U& y- k, m7 U: O
  206. + r( d4 i* w8 C/ e+ l: M# ^; M6 M
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    2 b* I+ T1 v3 p3 w, S
  208. {$ w! R1 b2 U7 j, l
  209.   char filename[MAX_PATH];
    ! b- D# {+ K& {  |) a
  210.   LPUPDATEFILE file,olds;% x% {4 D0 @, F6 |# j$ s
  211.   std::map<int,CString>::iterator i;
    $ h" e3 t9 P2 a) k1 Q9 \- j
  212.   std::map<CString,LPUPDATEFILE>::iterator p;2 j4 e* B4 X1 J- I, K/ R
  213.   std::list<CString>::iterator l;( v1 e; T, K3 e) }1 R
  214. 3 ?7 N2 y. S- R. `% h
  215.   if(bFirstUpdate)
    : Z8 C1 _6 @8 ?6 ]/ p8 E
  216.   {, A) r1 B: ~$ p4 \; q. I
  217.     dwCurrFile=0;
    , s4 U4 W; _% {" }1 u
  218.     bFirstUpdate=FALSE;1 ^' c5 r+ f2 G, p  g7 |7 N8 K
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 l' V; v; a3 t( Q
  220.     {
    - l+ J8 a  R+ V/ [( Q# [8 S
  221.       dwTotalFiles=UpdateLocal.size();' I& E: \3 m; L' `% Q4 J4 P
  222.       dwDownLoaded=0;6 Q2 B9 a# I: `4 I% Q, R
  223.       bSilentStep=FALSE;8 }/ L# A2 w- j  E3 E' e! N, s
  224.       bCompressed=TRUE;* U( b: Z, Y. u' \: n4 Q! O1 k
  225.       strExtLocal.Empty();
    7 @0 d1 v6 i3 l2 k- v5 k8 b1 P
  226.       strFullName=(*i).second;
    5 V1 D3 s3 f/ C) {- K& t
  227.       dwProgramState=AP_CONNECT;
    ! A. l5 Q# K) t" h" ~: i" t
  228.       return TRUE;) X, l" g" _& h% H  I2 k
  229.     }  v. M: `, T: E$ T
  230.   }+ m, i2 e7 G/ o, j4 g( ~5 A
  231.   else if(bRestartUpdater==FALSE)
    ; h* A% D  F5 D% q7 m
  232.   {( w( a! L: n& ~# r+ d8 u
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( ]- f! c/ |- ^
  234.     {
    4 X; m+ ^0 X" C, o- q
  235.       file=(*p).second;/ V. G! v) p8 U1 z5 @  w3 z
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())9 `* g& b; V0 o. f- L
  237.       {
    / |$ h0 a" Z( `% c0 f  j; I
  238.         olds=(*p).second;& r4 a- }0 b0 h2 c
  239.         olds->vers=file->vers;
    0 Y% N3 Q: U& l: D
  240.       }
    & U$ G, ~  r5 M4 D$ ~
  241.       else
    $ w2 |( H# A, M* H
  242.       {
    + n2 [: s' J5 O' t9 d1 h, h- |
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " t( O3 [% w" C' x; _7 e( h: @. s
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! ?1 O6 C) e. Q  X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));& F" B8 H# A- }$ Q
  246.       }
    8 V2 ], N, n* u7 O3 d2 Q4 L8 D; T
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    . Y9 E+ w* K& c+ K& ^7 u$ G
  248.       sprintf(filename,"(%s)",file->file);
    4 {" w" d  h8 H0 O. m
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / M& d" r) Y- `& T
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    * N' ^. j$ }) ^; W( ~
  251.     }# R2 g$ D. }1 \3 J5 x
  252.     dwCurrFile++;% y: y6 @: a) p
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())# t5 K) m# S9 v* |% E
  254.     {
    ) l8 h5 N" J" I, V( L
  255.       bSilentStep=FALSE;
    5 a+ m5 {4 B# h- I4 t9 Y- C/ }
  256.       bCompressed=TRUE;2 ]" u  R; N( m9 a
  257.       strExtLocal.Empty();
    : k+ O! {& g/ F! z6 ?
  258.       strFullName=(*i).second;7 G) @( E# Z5 `% d8 s" I" p
  259.       dwProgramState=AP_CONNECT;
    2 p* d  R2 j4 ~- F0 v
  260.       return TRUE;
    1 K& l' N4 r  F/ }! X# k
  261.     }
    ) s& c* N- L$ j: |2 Q, W% x# i
  262.     if(!bRestartUpdater)- ^$ H. o4 @# m; M- X
  263.     {7 Q/ R" u: h' e+ w7 {, Z
  264.       int iCurrSize,iFileSize;
    # ^( @. r9 `7 m; t
  265.       iCurrSize=0;/ b3 N. z% S0 c) B
  266.       iFileSize=UpdateList2.size();5 S1 a: C. T; o0 |+ {7 S; m- h
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");% a- x: p4 Q: L! ~( D$ Y0 c
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    0 |; J$ j* a. h( ?% T+ e
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");8 y5 _% k# a7 \
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  g3 F, w9 s% Q2 T. ]
  271.       Fclearf(".\\update.dat");
    ! x& {: G6 w+ J$ X* x! ^5 Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    1 i7 _2 O2 v7 F! B% U' \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    . A! x; |, V. ^, H
  274.       {
    - C/ e' x, m/ D' `
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 T2 p' I: F3 ]
  276.         {
    6 A. j! h, y8 @
  277.           file=(*p).second;
    % W& A7 Q" |: e4 o, x) R
  278.           sprintf(filename,"(%s)",file->file);
    - r2 G; o# p- \$ G! P; A8 ?+ y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' ?) T5 d! b, ?
  280.           iCurrSize++;/ ?# u6 b4 P1 M" S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));1 F4 ^* |* @1 E, e8 k- r" q2 H
  282.         }7 I, K# L' U1 E4 e6 G9 |# J+ d, m
  283.       }
      M1 u2 H' q( x9 r3 ?
  284.       unlink(".\\update.txt");
    ) D4 H* B( f' n. y2 U; A; F
  285.       unlink(".\\update.tmp");% Q0 d$ m, i6 t7 ~7 l" a
  286.       Fclearf(".\\checkversion.dat");
    ) T. C& U5 B( X( r
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);. U7 w0 y5 r$ g/ H9 ^8 z) b4 u
  288.       if(UpdateLocal.size()); e# ]. b! J- {; X" @
  289.       {( j- @% T! P8 f# Q6 Y1 A1 C
  290.         UpdateLocal.clear();
    & f+ u' j6 O& Y5 j
  291.       }
    ( @' b5 [# B9 }. j1 Y) W
  292.       if(UpdateFile3.size())
    ; c/ p5 A& X6 K2 ~
  293.       {
    1 o" K) E: u, |8 L
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 b; l/ n0 }' j7 o$ X6 x! Z4 i5 N  L
  295.         {
    9 x2 O# M+ j& y. e
  296.           file=(*p).second;
    1 h8 S* R$ {: t# J  k! m) w8 {" N: d- I
  297.           free(file);& V$ J% B' z  e. \3 J
  298.         }/ _$ M3 ~2 T- }- H" G2 g
  299.         UpdateFile3.clear();
    5 E. U1 B" V+ p
  300.         UpdateList3.clear();
    1 a& ^. j, v% y- `/ W
  301.       }3 S# {) c$ F; O& q7 V- O
  302.       if(UpdateFile2.size())
    8 K. ~6 D4 F1 H: d( }( j
  303.       {
      ~* T7 |6 ^% y) ]7 W) E7 X6 r
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    * x: @! S* a/ Q' W* F0 T
  305.         {
    : Y# P6 A" p: d
  306.           file=(*p).second;+ F6 R4 X! e9 b! J( U5 x, l
  307.           free(file);1 {8 _9 [2 l/ c) p" ]( p
  308.         }1 f( j' R4 J3 B1 c* O4 {2 ~+ P
  309.         UpdateFile2.clear();
    ; U4 ^1 _% x  r4 W
  310.         UpdateList2.clear();6 o, T4 H  _3 a! T% }; H
  311.       }1 |5 f9 u8 b6 \0 g; C* }
  312.       if(UpdateFile1.size())
      M) W: ^& ^) k6 p2 F) y9 u
  313.       {
    1 i& D, z9 [4 V& {2 S3 N$ f
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)3 _7 f# Z# w* ]* }, t9 v( `) ?
  315.         {0 e0 P* ]+ e3 W, `& n2 E& ?4 J2 K: C
  316.           file=(*p).second;
    9 R/ G, S# m) w+ s2 e
  317.           free(file);
    & m3 @/ \) r% d' a
  318.         }
    8 C; b' M/ l, Y3 [
  319.         UpdateFile1.clear();
    . B! [) d5 v8 {* c3 n" \# _
  320.         UpdateList1.clear();! M' g5 i5 D7 I* p* E( }
  321.       }; a  J! j9 |& s8 e$ ?: j/ G+ Q
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    5 O) m! e! W& t
  323.     }- x. g& R# t& o0 {$ R/ W
  324.   }% k! T& U8 \8 a) |9 y8 y
  325.   return FALSE;
    / T9 j9 ]- X8 ~
  326. }+ `+ E) o5 `4 l" D
  327. , w/ X9 T. X- C
  328. void CRevAppApp::ClearAll(void)
    / h  B' r2 c. Z# d3 C; E
  329. {$ E4 B3 `  t+ l% J4 c
  330.   LPUPDATEFILE file;" b- }( Z; X4 U) u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;/ \1 v4 D5 C1 i3 T, i% L. t6 ]
  332. : I2 d! L( K+ e) I- m5 }
  333.   if(UpdateLocal.size())6 o% A! g, ]+ f% Q
  334.   {, g1 d$ O- _6 A# _1 @) J
  335.     UpdateLocal.clear();
    1 C* T5 b, U. F0 x
  336.   }
    - f' i6 e1 e6 B$ ?, }
  337.   if(UpdateFile3.size())
    , N$ E# X9 A( [" K
  338.   {/ u0 d. P4 n/ b- V
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)- M% n. ]) I7 M5 ~
  340.     {9 l% E  ?& h: M( S
  341.       file=(*p).second;& R8 [' O& G+ }- ~3 L
  342.       free(file);" S8 I$ W2 ~$ o0 y, x5 s. M
  343.     }
    % u) z4 e2 I) b+ ^2 Y
  344.     UpdateFile3.clear();
    5 f7 r6 d/ V* i: p$ X0 {
  345.     UpdateList3.clear();
    - E$ k$ O5 [. N- k
  346.   }& ~( _) t, M7 |% Z+ d! L. i
  347.   if(UpdateFile2.size())9 Y4 v+ p% I, n+ Q. W2 M% T, M
  348.   {
    ( h2 {8 F4 o4 }. M7 J
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)6 V7 G7 O& \# M; V. m2 s
  350.     {; e4 U7 T% I8 f* ]( }* W
  351.       file=(*p).second;
    % o" u# n0 ^0 G1 z3 d$ K
  352.       free(file);, t) {/ {1 i% V4 R& U$ R
  353.     }
    , |4 W3 S7 n( z3 x7 [
  354.     UpdateFile2.clear();
    " _- N" {+ s3 b5 m8 y
  355.     UpdateList2.clear();
    # Y- F% j. d: D1 ~4 A, E6 ^. o) e
  356.   }$ g! b% E# V8 P& _3 {
  357.   if(UpdateFile1.size())
    5 i5 T2 w% i7 N* Y# z. X
  358.   {
    & r; ?# p  J3 `$ N  U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : h) O7 g+ Y0 [- n. e$ K+ D
  360.     {/ o: T% N( g; n; J% r% ]( [
  361.       file=(*p).second;' |& A0 |" p  B- F: e
  362.       free(file);
    ! C; _8 l+ I* H* G' W6 @; N0 B0 P
  363.     }
    ' \  U, u( z, l/ m
  364.     UpdateFile1.clear();: x) Q  y* W+ W6 W- U
  365.     UpdateList1.clear();
      ~# S5 h' c6 c2 U' k
  366.   }
    : W) i* u1 I9 v7 T
  367. }  5 J. O, C* y( o* Y% X* ~% X& b
  368.   * ~( Y1 K9 ~9 w
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    * C8 p4 Q( \! W2 n1 Y5 o
  370. {4 m3 z3 |; V6 q" j& h
  371.   int c;
    " B$ }- g* G8 U) N' b4 H
  372.   LPUPDATEFILE file1,file2;
    # Z7 K5 Y  s# p
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 O6 W2 f. I& X3 ?4 s
  374.   std::list<CString>::iterator l;+ _: D( _, J. I9 g) P

  375. 2 \) I1 s1 W, ^5 _1 j! b4 J
  376.   UpdateLocal.clear();
    . u1 c/ _' h9 n+ M2 c
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ T* z9 M2 K' h' z7 u3 l
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. @8 t* \' ~' ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);6 E; \$ Z4 X6 T
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);: t9 G9 e9 e2 [. n7 ^4 I
  381.   if(UpdateFile3.size())" \8 ?# N/ C( X  p- e* S2 e! J
  382.   {
    % M" O% R  b4 d
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)# t7 {+ @7 ^- V4 [9 W5 p9 z
  384.     {, T2 i+ o) r( g- p
  385.       file2=(LPUPDATEFILE)(*i).second;
    0 J1 w' [- z! w- `$ b: o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    4 H  Q6 i7 i" H! ]8 }7 _
  387.       {! t8 Z! P5 K2 U
  388.         file1=(LPUPDATEFILE)(*p).second;9 a7 u8 Z+ s) g3 \$ u  A+ b  P
  389.         file1->vers=file2->vers;
    * Y/ L$ `) S. ~- v
  390.       }+ l! l5 d. y  V6 y. ?
  391.       else
    2 K. O6 O) H0 m+ s3 k9 \1 s8 Z
  392.       {, |. L' Z$ d: o, a" c; y( J( J
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    9 H' f; b' O7 F; {% Q
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));0 Z# ]9 _, j) |/ @7 I7 O
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));  v% i7 B' c7 p$ w: u
  396.       }0 r! d* S, i  @8 G. B" N0 U
  397.     }; r! M5 H2 I7 G8 k) r0 y
  398.   }" r9 }3 m; v. g/ A! s5 q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), x" v' K: L( y, [2 j9 F
  400.   {
    ; F* D9 V  N8 N9 F  V# i8 R
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())$ [6 U5 g! r( F0 W( D# ^
  402.     {
    ) [2 V' f. t! W% p, N' r8 d
  403.       file2=(LPUPDATEFILE)(*i).second;
    . _* p8 `# f9 E+ u! T. E
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ( v1 a! s. H' C  W& @
  405.       {
    ; ]1 I; `1 Z+ }' _
  406.         file1=(LPUPDATEFILE)(*p).second;0 J7 F% f( U6 H5 r+ i  d
  407.         if(file1->vers!=file2->vers)/ b' x* N' K& Q: R
  408.         {
    2 Q6 Y' e9 C: |' I$ {0 o9 \2 h
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ( j. t& Q9 |0 R: D0 i
  410.           c++;
    ' m% |3 t) u9 M7 A! B6 o
  411.         }6 T% M" O5 G8 W; g) Z/ R  z. g; ^
  412.       }1 X  G2 `  C3 [+ f# G7 A
  413.       else, S' j" R  k6 _5 O7 @
  414.       {8 d+ }  b) b$ w
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 S9 e' Q& s# S/ A3 [; x$ f+ J  U
  416.         c++;8 |, m- |! ]6 I/ k- t7 o
  417.       }
    5 [3 `" Y( v5 N4 X* [; B
  418.     }7 f9 f' n# c9 t5 ~
  419.   }" S5 h  ?% F6 y1 |# K
  420.   unlink(".\\DownLoad\\update.txt");
    9 |$ H* L1 j; l2 Q3 h! a
  421.   if(UpdateLocal.size()) return TRUE;
    3 H) A! b) [  F# ^, m
  422.   else                   return FALSE;/ Q4 y# ?3 c- G' ?
  423. }: u! t" Y+ i; R9 S+ s" \3 k1 u

  424. ) i+ w& n" z& b3 C
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 j6 s; O3 E, g0 [& l% Q
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"1 j& P* u% L& B

  427. " m4 r: h+ E; o2 M6 J7 |

  428. 5 {2 Q& w/ A% C& O

  429. ; K: x# M: e, z7 g
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / T, ], j% w# G1 f" `2 P' o# Y0 d, Q
  431. {
    * Q" R$ X8 @3 z# I
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" f) d5 i$ I2 U4 ]; q: i6 G+ [( I
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ W* j9 V) i9 z  j+ |( [
  434.   {
    3 O0 `" E; w( T
  435.     char szLanguage[50];
    & }# c  q, t9 t7 ?: y2 W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 Z) Z' F" V: S9 x
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    2 d& @) a: h1 i1 f& x5 v) M6 a+ k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    3 |# X& Q6 K$ A  ]1 M
  439.     else                                   m_iLanguage=ENGLISH;5 `3 K, j5 U  K& |! v& m
  440.     char szRegister[100];/ l/ f# H# }; W9 c
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 Z6 `3 `9 r3 I8 A4 ]% N
  442.     strRegsName=szRegister;
    2 i, h' F& O0 M' ^5 o- r' \
  443.     char szPatchURL[100];
    6 E: ]* t7 V" U' |2 H/ D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    + {- z& d6 a0 X% q0 [3 [# b7 Q* c
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " e6 H! m, V1 l; i- J# s4 }& E% [
  446.   }
    , V) v# t" V$ u
  447.   else$ [( I  B6 X$ _5 L; c# p
  448.   {4 h/ h2 B6 U1 C8 X9 q9 I6 [2 r
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / c' N1 n! L1 S+ y$ N
  450.     strRegsName=DEFAULT_REG_URL;
    2 C( ]; U' M6 E/ p& b$ ?
  451.   }
    , G; s8 s9 I7 Z7 _, r1 k0 d* X9 e8 s
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    , T, f. G1 H; N3 b. g
  453.   {
    . e0 @% _4 y3 K" }1 j2 v
  454.     char szIP[50];) Z! }2 ~' i5 [) x" h; W
  455.     char szDIR[300];
    8 W; B* F+ U6 v3 G
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    9 _3 Y" _$ I$ C
  457.     {& N6 w( X9 q0 Y' K$ \, x  B$ b
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    * _- T, {4 \7 W2 ]% N5 X7 |% p
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");3 y. p4 L  G- z8 @! O/ g; f
  460.       strHostName=szIP;! Q2 A  t' e8 W- W' ~  d- L
  461.       strHostPath.Format("/%s",szDIR);: V) X( R  V/ s
  462.     }
      `3 C7 D; K$ W
  463.     else
    3 K: p  s: G5 J' X' \9 h+ s- c+ g
  464.     {2 K& [9 L' }/ Y! D+ c' \
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1), y" q: m( o6 ^  G* J3 a
  466.       {- \4 h1 h0 M; G7 C- F5 x
  467.         char szLanguage[50];4 r, \3 p2 u- D1 ?1 l! M% ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * b! E* f( P. T9 h5 D2 p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! }# a) X- ]5 t. ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, {1 c0 J& n8 V( G0 [( x4 e. G2 ]( ^/ q
  471.         else                                   m_iLanguage=ENGLISH;$ X4 W( S8 \4 m) _6 D8 ~4 g& V
  472.         char szRegister[100];
    # T7 A0 c% j" b! N
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    / E* w- X# G# @; v- ]
  474.         strRegsName=szRegister;1 D& h7 k- s6 X( |/ k% I5 c2 e
  475.         char szPatchURL[100];3 d# w$ Y# g+ ^( a2 O: `/ v
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    1 s! y( m/ P) m: v/ S0 V
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);& n( S$ ?& d3 X5 m
  478.       }
    ( N9 n2 S; H! x  {+ J% R) u) `
  479.       else5 l$ ^5 t8 [3 H3 f
  480.       {
    / t- C) y7 d2 n% K3 J
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , i/ E- y7 \- g2 p+ l  D2 v
  482.         strRegsName=DEFAULT_REG_URL;& n! ~1 P* d8 Z
  483.       }# }7 L, R6 |' W9 {7 }5 }2 w
  484.     }8 p6 D, C- K. o) q
  485.   }
    : D* s0 f5 Z( ]4 W& M& m' ]
  486.   return true;
    9 m3 }2 p- M& ]+ q
  487. }5 x# n) }+ G6 S& g! I0 ?4 }0 Q% `
  488. ' N5 P7 `" g, R' k. [9 v! Z! ~1 N* C2 t
  489. #include ".\ZLib\unzip.h"
    + U6 p; K2 n2 \, }8 Q* I1 A: Y& h
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);4 p* k, w9 f1 W8 C" V2 G
  491. /////////////////////////////////////////////////////////////////////////////1 g6 ]& p" W  x) S5 M# J& `
  492. // CRevAppApp initialization
    0 k$ p" ]: b7 u5 ]( y' {2 e
  493. 0 a9 O5 Q/ F) C/ _% A/ X: H
  494. BOOL CRevAppApp::InitInstance()+ G1 Z% U( ?4 R- w" D
  495. {
    ' o3 y0 v3 R6 M' V" ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    : L* a- w( R$ r- J0 ~6 s& U+ E+ P
  497. 2 g% T7 a! P1 F: S" c' e% B
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);) L% V; b5 N" k5 y/ x) p3 c  A, C: K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    - ^) S+ U0 F$ i+ v4 ^
  500.   {1 M9 h+ r; A8 g1 i' V4 a; E: V
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");& u. l9 {1 R' }2 _! X$ G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);) s6 Z- v+ Q7 b) P! p0 ?3 U! I/ m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# R: k% _# b, M2 N1 `/ L" j8 {! v! \3 v
  504.     {
    # ?4 c& D  t% |+ j+ E9 r+ l; o
  505.       strcpy(szPath,szPathTarget);( t; ?, u4 @; a4 m% H
  506.       SetCurrentDirectory(szPath);  J1 a$ k( u0 b; s7 K9 B
  507.     }' p, A3 F9 [- m
  508.   }
    7 }% [1 I, D' n4 M: B
  509. #ifdef _DEBUG( @  ~0 Y6 Z/ i2 y, W
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - y0 D( R; u) T  {
  511. #else
      l8 r( r* f& d4 H& W% X9 k
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - y8 S) p9 ?  U  ?5 q, Q
  513. #endif
    " w' n6 S  K; `# N
  514.   {2 ]" i* V8 J3 w( t" W" M8 M! v& e
  515.     char tempFileName[MAX_PATH];
    , {6 ?( Z- u& N2 R& C
  516.     strcpy(tempFileName,szPathSource);
    9 R* X2 n& I4 N- G+ n
  517.     tempFileName[strlen(szPathSource)-12]=0;
    1 U( T- Q# i' B  Q
  518.     strcat(tempFileName,"\\$CSUpdate.exe");3 B% g  z" G+ D; y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);; Z% F$ ^& v. }' O
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);1 u9 V4 M7 ^: }+ w, P
  521.     return TRUE;
    6 r% m3 Z5 }/ v! d
  522.   }
    * @: ^* q9 f9 K2 [+ {
  523.   // Nuke 0118: Delete run.exe
    , c* {' p  {1 x
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    $ X- M# w) p- S
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    - v2 A: z! c& B+ _
  526.   if(!ReadCfgFile("Config.ini"))+ Q, t2 t# N9 a3 B3 Y
  527.   {# [* Z3 K4 r, h+ O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    . q! F$ E* ^6 X
  529.     return TRUE;. a% ~5 U4 H& P
  530.   }
    $ g8 F% J- G* v( K# X9 O
  531.   HANDLE mutex;: P$ @& r( H5 c1 b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    / d. Q1 K! x* l+ C$ \2 T
  533.   {) w+ {2 E! m! q8 U) X
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    3 g4 l( [) R. I# a8 v2 H3 F7 ^. ^' y
  535.     {7 \3 M' f9 g+ ^- i0 X6 F$ p. x
  536.       CloseHandle(mutex);
    4 M! g9 V. ], V4 n, k
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    ( s9 |9 P. ]. r8 r; k2 N
  538.       return TRUE;
    4 L! ^! a7 l7 t, P# H8 P
  539.     }
    0 [% m2 `/ [: t# H* @
  540.   }  3 I1 q" W$ x3 v0 C2 B
  541.   CloseHandle(mutex);
    4 |8 N3 j& H# x/ w" P; T- T5 ?
  542. % \+ _' h4 u0 v$ f5 @9 u2 k
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);- _9 R8 |6 m- w; `4 k
  544. ; F$ I8 H3 b4 d' f! E! \0 ~
  545.         AfxEnableControlContainer();# k/ t/ h4 F. \& T" @2 m; v

  546. " y+ _, U: _0 K0 q
  547.   bCanUpdate=FALSE;3 A  l: ^- ~) Z  X! h8 \2 W
  548.   dwStartUpSteps=1;
    # E- A: j# J! N% n8 |6 _, Y* a
  549.   dwProgramState=AP_NOTHING;" U0 }* k' b7 F8 q! u

  550. 5 c: J' ]( _8 d, `8 c; |
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);" K# I& O& ^. ?

  552. " w/ ]9 [, ^5 m2 o( R) ^
  553.         // Standard initialization
    / q2 d6 Z. A* v. L; k% d3 Y. u
  554.         // If you are not using these features and wish to reduce the size
    ' W5 p. g$ Y! X7 Z( \9 H1 U! V
  555.         //  of your final executable, you should remove from the following
      ^! g9 j+ q9 P; W
  556.         //  the specific initialization routines you do not need.; y, Y/ s' G: c% F* A2 p
  557. 7 O( }3 L1 E" r; N; J: F& ?
  558. #ifdef _AFXDLL2 m+ U2 e0 |  I/ ^
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 `7 S) b$ m7 r4 ?8 y0 I
  560. #else
    ; X; Q- x2 I0 `* w
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# y' Y* f2 [$ D- x' D) o7 m
  562. #endif& v0 {% `6 y* K: Z
  563. ' L4 e" l7 _$ N; e
  564.   dlg=new CRevAppDlg;
    ! p" h! v$ f$ N* W, D; x# R# ]4 b, h- i
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    + D5 `. N% ?8 P& l3 d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 @+ {; H: s! n2 a
  567.   m_pMainWnd=dlg;# Y; h$ h% B- r+ |, z7 c9 K# m, W
  568. # \( J. u% z0 ~% ]  Y: q
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 {- m8 G$ j* d7 q6 g
  570. 7 t6 E- l0 ^% b0 B2 j7 e( S
  571. //  GdiplusStartupInput gdiplusStartupInput;2 ~6 f1 m: s0 n- x, E$ f/ x" [
  572. //  ULONG_PTR gdiplusToken;
    8 }/ a+ _* Q6 l6 f. m) W- O) x
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);! T6 a. c0 G! l/ {7 u
  574. 4 X( T( D8 ~! w% J0 J. b$ W) |
  575. //        CRevAppDlg dlg;# u1 t# \- [5 a
  576. //        int nResponse = dlg.DoModal();& e! P6 q, \! q3 y
  577. //        if (nResponse == IDOK)
    2 |1 K/ N: [. B! b2 f; }
  578. //        {! g$ [1 Q: K: ^+ q9 g& {) x
  579. //                // TODO: Place code here to handle when the dialog is) o9 z- `. v5 E* F- T$ {$ }$ E
  580. //                //  dismissed with OK
    0 u( }) [+ f. f7 n
  581. //        }
    0 S2 d' G9 G: B/ x% K& c; c
  582. //        else if (nResponse == IDCANCEL)  Q: N1 H% S. W0 d$ \4 |
  583. //        {
    # V' O$ v8 H- ]' L$ }/ J7 O( h
  584. //                // TODO: Place code here to handle when the dialog is1 N" c% Y8 C6 o, @* \' h
  585. //                //  dismissed with Cancel
    $ e3 q0 Y0 y- w; R  Y9 s' m
  586. //        }, x$ ^: y4 i. L3 H# ]4 g$ Q1 Z
  587. 5 K5 G& j$ q# Q! O: K- i, C1 N- `. B
  588.         // Since the dialog has been closed, return FALSE so that we exit the* D9 c' i$ ^- ?9 h. v
  589.         //  application, rather than start the application's message pump.
    1 V9 Y! c. r' K& X
  590.         return TRUE;+ `: X4 \" F% p: P, P
  591. }- P) s) X# `8 u' K# ~4 ]4 O
  592. / R) W% K6 K( }. r+ U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)& `* ^$ U1 y# X; w$ \
  594. {! n/ x' z, {! Y& _: B
  595.   int i;$ @: Y$ e1 T) j9 x+ F8 N9 E; {
  596.   char *szRet;
    ! z! ^0 r, R4 m: M* [
  597. # Z' U) _- j) W1 d% b
  598.   if(pSource) { itoken=0; sztoken=pSource; }! B1 o0 P4 ]  Y! m6 a" y  k$ N
  599.   if(sztoken)
    ' l( S% R: n7 b+ N
  600.   {" L! N) s* o9 T2 j0 F
  601.     szRet=&sztoken[itoken];0 M0 ~5 m% {$ D4 M9 s" U
  602.     while(sztoken[itoken])
    6 Q4 ^8 _8 F  W8 \4 c' T6 Q3 t
  603.     {
    / }+ E7 `8 S8 [$ f: `5 k
  604.       for(i=0;i<(int)strlen(token);i++)+ Q& Q' ^' c. ~" n( F# Z) o
  605.       {. ^8 V& L2 e# N+ ?% j4 n+ Y! j
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ' ]' Q9 \" e8 h* j! O" u+ m
  607.         {% i# G' O& n/ Z9 ^) D' y+ W+ j
  608.           sztoken[itoken++]=0;
    & w1 `! ?+ W: V. r
  609.           sztoken[itoken++]=0;
    " @' {; {: {2 r. q' t: T
  610.           return szRet;
    4 ]6 E4 |4 Y; e3 R( Q
  611.         }
    & I& k/ s* s) P8 G3 m4 R" @2 d4 B
  612.       }
    ' Q/ U4 ?5 d  e
  613.       itoken++;
    + _; l9 L  q: T$ z2 C. j9 Y
  614.     }
    . R# ?5 Y( O9 }  {
  615.   }/ P6 T0 N% v% u8 b% H4 W
  616.   return NULL;
    & b( O, W  p" q# \" N
  617. }# _! u8 x- n1 z5 |* ~

  618. 4 z% \0 H0 H- m4 k. `
  619. void ProcessProc(long Total,long Current), @  e5 K3 m) b; F0 m
  620. {7 d' \  Y; M9 s( t  W: O
  621.         MSG msg;
    3 Q$ f% b) @8 n/ f& ~) m5 _# w
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    8 o* X: l% o5 a0 C. W$ R8 t/ l
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    1 J) O. k4 O4 O3 p! K, g4 K
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    * U9 M- K0 M* w9 R! R
  625.         {
    $ j% h) P, z: i5 e# K6 [/ a
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ( J" U1 L0 p# O# j; T( z
  627.                 {0 b4 F+ k* L- H$ m+ W- `
  628.                         return;
    $ V0 s/ L* T( l0 _/ I  C2 v. Z
  629.                 }
    ! B! c3 T* E4 ~6 T/ x( {
  630.                 TranslateMessage(&msg);
    2 w0 Z6 Y6 ?7 M( }' A( O1 a& K
  631.                 DispatchMessage(&msg);) A# F; b: P5 p4 e/ Q  }& V
  632.         }        7 _9 {1 v" a7 T6 A
  633. }
    * i9 }6 ]. K) x. e6 ^. |* C1 V4 `4 o
  634. 6 B* W" y0 Z1 F: ^+ q3 q
  635. BOOL bFirstChar=TRUE;
    , Q. L2 N, o% R/ i' T" P

  636. ! [6 K3 t" M6 S1 p- R6 L: y) {
  637. BOOL CRevAppApp::OnIdle(LONG lCount)3 @" h0 H' V/ E2 L( L1 D6 a% s- n
  638. {1 x! k1 O/ k3 o3 w. Y: Z/ R& D
  639.         // TODO: Add your specialized code here and/or call the base class
    0 Z* c2 ?  _0 K- ?9 M+ _
  640.   switch(dwProgramState)  }1 w& P& P, z6 l* F
  641.   {
    0 z+ v2 @" }1 ^/ P* i
  642.   case AP_NOTHING:% z& S3 A, d# `  t" B
  643.     switch(dwStartUpSteps)
    " ]# B0 A5 a+ Q6 ~
  644.     {. N( Z& [3 y* G& ?0 |. o
  645.     case 1:
    ' J6 `8 w! s' r+ u. y+ j$ T$ W
  646.       {
    2 a& p1 b! F: `$ n# ~
  647.         int i;
    5 V# k! n  G( R* D( }
  648.         CDC *pCDC=dlg->GetDC();8 L) @, J7 h! I( ^' a
  649.         HDC hdcwnd=pCDC->m_hDC;
    ' E# b6 }5 ^. z+ f7 u  j7 E
  650. //        Graphics graphics(hdcwnd);! }  _  r+ s7 l& H
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & g7 z5 M  o5 w
  652. //        INT iWidth=bitmap.GetWidth();* U' A% u3 U- M2 S9 K
  653. //        INT iHeight=bitmap.GetHeight();
    1 u5 x3 I; P) I  u0 H
  654. //        Color color,colorTemp;
    1 v  _; i, x- M8 w( s$ \- y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)' ^9 h  P  @, i: d
  656. //        {) Q8 G4 K/ u/ B$ j1 Z' t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    - ?3 z% t& T; I- Q: l; ]
  658. //          {# x2 ?8 I4 A+ F/ I, r& ~1 u+ k/ x* }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 T7 ~/ |/ I" Z7 r& L# e6 h$ Z- c& D
  660. //            colorTemp.SetValue(color.MakeARGB(
    4 O9 Q5 L% K" C' H2 [$ ]9 }
  661. //              (BYTE)(255*iColumn/iWidth),# s3 d. B5 s: C6 U( L
  662. //              color.GetRed(),  N4 k- @( m* J. _, q
  663. //              color.GetGreen(),& K; a5 b' c/ v5 I+ [
  664. //              color.GetBlue()));
    & k7 e! P' T9 S. n2 @4 F4 L8 R4 w
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    8 C* _: T3 o7 @( N( u  F
  666. //          }0 Y! n9 t5 D/ `
  667. //        }
      F1 D1 M4 D/ P' z. l. E, S
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    $ p& D4 [# o, C
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      U* c) l) O) @( V: G2 ?0 `
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");  E$ }- L8 k) m# \  z% j4 I
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' N; k- C: D% t% D
  672.         for(i=0;i<240;i+=8)
    7 v* S  {1 P! x. H8 z
  673.         {$ X; n' o/ ], V" ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  z* S5 @% w7 f- Y2 h4 q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; p. b4 J1 V1 V
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    5 ]4 |. j( n' E" P1 [
  677.           Sleep(33);) [) u) F- {# D) q) R( w4 @
  678.         }
    ' {9 N! R  D' P* M: T1 W; N
  679.         Sleep(1000);
      z/ q8 \/ C, Y6 I8 ~4 h$ E; x2 T8 Z
  680.         for(i=240;i>0;i-=8)
    7 R# W: Z) D9 T; ?, N) p
  681.         {& I1 V, w4 Z+ ]
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    ) e& U4 s6 t* H: }2 ~3 Q8 k
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 q% T6 h2 o* x; [3 _
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 X& e% ]8 [# p& H
  685.           Sleep(33);
    5 c# S' ], S7 r$ b; }
  686.         }
    - W' U6 X# @" [  T
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);* Y0 d7 r8 v# W2 P4 _2 p3 A) I
  688.         dlg->ReleaseDC(pCDC);$ {" z# F' S4 |3 U8 z( G
  689.         DeleteDC(hdctar);' u" P8 g' i* L4 z* J, \# p
  690.         DeleteDC(hdcsrc);
    : T8 `( |# O# ]; y! i
  691.         DeleteDC(hdcorg);
    " o2 t0 C) Y& c5 m# {6 @
  692.       }, P6 S: q& c4 a3 @# r; t# [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);2 q6 d; a. l- @; ~4 _
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");! n, E" u# b8 R+ k4 M5 c
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");* J5 o0 l$ |5 o* x" {; S* b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* [4 x5 w% C: v
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 i* c. q! v/ |; L
  698.       if(!Dn.Connected())3 H) L) I, s% T" p7 X& c2 |5 l# C
  699.       {5 a; r+ R* }- x+ W. e
  700.         dwTotalFiles=1;
    ' K* Z5 y. N, z4 U
  701.         dwDownLoaded=0;3 c& @/ B$ E% i8 ^2 o% u
  702.         bSilentStep=TRUE;2 r8 O, W- ?$ Q, X1 N
  703.         bCompressed=FALSE;7 d1 [1 G' ]7 T& J
  704.         strExtLocal.Empty();3 `0 {4 }' G4 c, t8 Y6 q6 Q/ D
  705.         strFullName="readme.txt";% i" {( W* o$ h+ e+ s9 e2 h" d- w
  706.         dwProgramState=AP_CONNECT;1 u6 C# R4 e) P3 h
  707.       }
    9 H& \3 V( f) r) p; E
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    + [/ }1 D( C4 T' U+ z0 b6 [. i% L
  709.       dwStartUpSteps=2;3 r$ l% K, Q& F# d/ t, S% m: Q8 x
  710.       break;! v, r8 r( W, }" x+ y9 X
  711.     case 2:
    & |; _: W+ F. C$ f$ Z' n
  712.       {
    + u7 q* Y+ H8 H: w3 o2 M) u9 w$ s( x
  713.         int iEOF;
    $ c5 X% j% J+ Y, \8 c
  714.         FILE *fp;) v' S* [/ y$ x3 e  C
  715.         char szString[512];6 ]7 ~7 Z) ]5 l. `9 X8 A, X
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");, u2 H9 M  [3 _  u) E
  717.         if(fp)
    . J# i" i- T( a( u' S% H9 M
  718.         {( I+ G7 [* `0 \0 u# H( S0 m; y
  719.           do' \' o; z$ p5 }! D9 T2 Q
  720.           {
    ( {( u1 N) A" o5 W7 U1 Y, g$ c+ {: z
  721.             iEOF=fscanf(fp,"%s",szString);
    ) o% u6 q3 A) T$ [; b9 }! n& v( @
  722.             if(strlen(szString))
    2 ?9 K$ U5 b. ^4 Q* R/ u% Y
  723.             {
    2 V1 i% o' Q* p* Q
  724.               if(bFirstChar)
    : E) a8 e4 {$ d
  725.               {
    : U3 g5 z8 u: U
  726.                 bFirstChar=FALSE;; b. E0 L7 ^! j4 B& k
  727.                 bConnectIsBig5=FALSE;7 ~0 i* C7 A* j
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    5 k- J( _$ v' X. X9 H
  729.               }3 M/ M5 Q' \  F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));* J- n  |2 |  K( n0 i& H# K
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));9 A! P  Y8 a* p9 y
  732.               dlg->m_ListText.AddString(szString);1 V! x, T# t+ K( C
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 s: M5 u3 g! |( p5 [
  734.               *szString=0;* `2 g8 U& K6 m7 P, R! g8 z
  735.             }5 @+ [4 d3 p+ i( J8 j: v1 g
  736.           } while(iEOF!=EOF);4 R% ]- F; R& t8 H0 W
  737.           fclose(fp);
      Q/ t* S) Y6 i% W# i9 E
  738.           unlink(".\\DownLoad\\readme.txt");
    8 l+ Y; l7 q2 W1 m: ^( U8 O/ v6 A8 }
  739.           dwStartUpSteps=3;
    : E: R& R/ T1 D. t( ?
  740.         }$ x3 f3 N, @. Z) V+ u0 z$ G3 D
  741.       }5 Q9 H& K% I4 B8 z
  742.       break;2 ]4 ~; m( K' @5 i+ B$ E4 R7 f
  743.     case 3:% D+ T5 f( f8 ~  @
  744.       if(!Dn.Connected())5 S. y7 `* t/ r4 l7 [' z
  745.       {
    0 `* K0 N( I1 x
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ! x+ o. w, d7 F6 e- T; ?  B
  747.         dwTotalFiles=1;$ X7 \, g/ p( B# R6 H+ A
  748.         dwDownLoaded=0;- ^, `. [3 g# O8 Q6 w
  749.         bSilentStep=TRUE;% C+ n1 Q2 X" s, F
  750.         bCompressed=FALSE;; l. n2 y$ m; h# J
  751.         strExtLocal.Empty();
    ! `! p1 r# Q( K$ k2 Y" p
  752.         strFullName="checkversion.txt";
    / P  }* M6 @  O% R% N: j
  753.         dwProgramState=AP_CONNECT;
    : p+ l  g& _% @1 g% \% r4 H0 {
  754.       }: T; g: M3 t/ V% A3 k+ ?
  755.       dwStartUpSteps=4;& x3 F2 Z" h6 Y! ]% Q: G
  756.       break;9 h# ~$ Q# p5 _4 \9 b
  757.     case 4:6 k8 E; V  r7 v% c: J) C, a" m2 c
  758.       {
    # x  {( t! A/ \! h9 h/ C( }* m
  759.         FILE *fp;
    ( M9 A( i1 |: I+ Y2 {# J
  760.         char szString1[128];
    . r1 s; x! K4 ]+ k+ Q0 l& }" t% P
  761.         char szString2[128];' d# {7 J, M) X2 \& A7 V" z" p
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & [5 P  o- `5 F$ S
  763.         if(fp)
    - U+ b  J; i1 D; f- z, f$ N
  764.         {" ?9 D& S6 }, F8 m4 s0 u: a' K- ?
  765.           fscanf(fp,"%s",szString1);
    ! T5 o9 n; n- A
  766.           fclose(fp);
    ! _6 D) F9 x5 A3 a7 c
  767.           fCheckVersion=atof(szString1);
    / p% U! C; Y+ @. ~
  768.           fp=fopen(".\\checkversion.dat","r");
    # D' h: e$ P  ~$ L( B* J4 @0 t# B: o
  769.           if(fp)
    + W& y" b' d" l) z0 x/ T( |# l; p
  770.           {
    1 H# x: p! Q/ j; i! U% D% L9 X
  771.             fscanf(fp,"%s",szString2);4 {6 }/ \: H5 r+ G
  772.             fclose(fp);
    ; U6 x7 @9 d% ?- A2 u# o9 v" q+ v
  773.             if(atof(szString1)!=atof(szString2))3 a9 r" v2 k  a: B
  774.             {
    & G+ A( r' e# i% v* h
  775.               if(!Dn.Connected()); T3 f2 j$ |/ Y. a) c6 c
  776.               {
    $ I5 b0 }) h/ Z4 n8 J: Q6 p
  777.                 bFirstUpdate=TRUE;
    ) T4 W9 ^- U9 q- ]- x" m2 ^3 h
  778.                 dwTotalFiles=1;+ r  d- u) N. X: `
  779.                 dwDownLoaded=0;
    : v4 T( l- R1 s7 @1 `* ^& @
  780.                 bSilentStep=FALSE;+ R4 p5 h2 y1 q" n/ s: e$ M
  781.                 bCompressed=TRUE;
    , |6 p: y' s- ~5 A0 e" s; J
  782.                 strExtLocal=".\\DownLoad\";$ F* r) _$ D" h$ C" j4 j5 c6 U
  783.                 strFullName="update.txt";' J! k  T4 w/ `9 w- C. R
  784.                 dwProgramState=AP_CONNECT;, d2 q% Y9 M8 R( p: r
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 G1 \9 f1 G7 V0 p
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. D7 H% m. J/ {% B5 u+ D' n% t+ |2 @
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - z# O. C/ r0 l; F0 R

  788. 6 Q$ M3 B, D# E, o. R, k- E. M
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 i# K# t" ~9 E
  790.                 unlink(".\\DownLoad\\checkversion.txt");0 A0 v0 c) E- i* a
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / v: k! Y, L7 M( M% H8 V8 C
  792.                 {
    0 Q/ n- O4 I3 n3 r8 N9 B# Z; R
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");6 X+ l* S. y" P4 q+ e1 y0 o2 F
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" h' V  y' g. W# @
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    0 \5 o" k& `" n" U6 r) g; O
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " y- o) f- v. z, Y' s
  797. : y* v& R" ]" t, B0 U9 F
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    3 m6 Y. A* T2 C8 E
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) o/ Y( }) w5 p: s
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");0 Z. n, G' z! ]% }: v& P% X
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) d# x! _% E9 N: J& c1 S/ _! [: G
  802.                 }5 J  E. X6 o, G/ p0 P
  803.                 dwStartUpSteps=5;
    ! u$ ^0 M' P9 i9 F
  804.               }
    $ S7 ^" T6 Z% y4 G' y- i
  805.             }
    7 x( F$ `4 y* q
  806.             else9 X7 m* p9 A9 E) F+ A0 M
  807.             {( r# B6 M* r  B0 n0 @
  808.               unlink(".\\DownLoad\\checkversion.txt");: T" m% |: _& A9 H- A6 V7 [# |1 R0 K
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! L/ c2 |. B0 f/ t1 t+ y
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    6 ^; x, [2 J: \% z/ Q9 X: X& L" k
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    : S# w( G! _7 T, V, N4 v- G

  812. - H7 s1 U/ _: }' f+ p
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ y7 P/ D1 c5 B; n
  814.               dwStartUpSteps=99;4 S) F. N& E1 @5 h+ f+ W
  815.               bFinishUpdated=TRUE;8 L( L- v" E7 |* G' J
  816.               bCanUpdate=TRUE;
    2 s2 n  W3 \. t9 n& J& r9 P
  817.             }
    % n" H' Z4 P+ Q! d1 Y8 F( V9 l; q
  818.           }+ z3 _! S% f% K# Q$ A
  819.           else
    9 n1 Y5 e  D' H8 k
  820.           {
    , K0 H6 J! h8 E6 w5 d$ j
  821.             if(!Dn.Connected())
    8 y6 a# N8 y* }6 n( `; L
  822.             {! [; r! D3 V. A: ^( k
  823.               bFirstUpdate=TRUE;- S5 y; J8 K6 s" X5 y6 D4 N
  824.               dwTotalFiles=1;1 U) G" r6 F# O1 F7 S
  825.               dwDownLoaded=0;
    9 N8 N% m. C) i
  826.               bSilentStep=FALSE;
    0 A( G7 ?" m9 n* J/ J1 Q
  827.               bCompressed=TRUE;
    0 J8 s7 L7 E: x- I
  828.               strExtLocal=".\\DownLoad\";
    & s* K* ?: b4 P8 K$ ^( k( t1 I
  829.               strFullName="update.txt";
    1 X; z% U: P& r& n
  830.               dwProgramState=AP_CONNECT;- {0 w; c2 _+ {
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    " i+ R+ {+ ~3 v' O$ y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. {! ~' d! O7 A" U/ S
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - F7 s; R+ b8 o  |/ [* M* f( W
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ r$ E0 X/ S# ~
  835.               unlink(".\\DownLoad\\checkversion.txt");+ A6 T6 i8 X. V' a$ T. I) I
  836.               if(GetFileAttributes("Wsa.zip" )!=-1): e! {7 ^8 O+ ?
  837.               {6 q3 U; w* O6 N* y' W, E3 h3 k5 o
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    . N4 L$ \* C# N: |4 P1 A: _
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 M( m: `" i% J1 `
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");- B1 w+ E, l' |. _) a
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 P( N4 d' |1 t6 V0 r# ^9 R
  842.                
      t! Y* T- [5 r' {
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  Q$ n6 w1 V* c& K
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");6 {( p  z. Q) T: h3 }& `8 x
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");# C7 o% h. |8 a* g9 u
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 C; i, R9 P1 d% k
  847.               }
    , E# Z) J' W) ^
  848.               dwStartUpSteps=5;
    ! T: d2 R) z1 e0 P
  849.             }
    ! J3 ^1 b5 k) W; `" X7 w/ B  t9 Q
  850.           }8 u8 y4 Z8 W+ f# D
  851.         }6 [: W1 u3 w/ T' M( N
  852.         else
    8 p/ c7 o$ G) H6 G. I% x
  853.         {# ~1 r" q$ t8 T
  854.           dwStartUpSteps=3;
    ( Y4 b6 x! W& `* H5 c
  855.         }- C5 s7 k  J' M4 l: |
  856.       }8 Q# r) U6 I+ H: d9 ]
  857.       break;3 T+ t' c* h" L( [2 E, F
  858.     case 5:
    " }  O* t1 _! ]: M; L
  859.       {. x, m1 k- i9 a7 Q$ g
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): j& k1 j6 A6 {# o) N* X) C
  861.         {
    1 i, U: |" |# X" c4 v* h
  862.           int opt_overwrite=1;
    - p( h) F4 r2 t0 ?1 y, Z' g7 C
  863.           int opt_do_extract_withoutpath=0;
      @' U3 r0 g" n' z  Y/ L
  864.           unzFile uf=NULL;
    9 \) ]* j# p  X1 _/ N7 y) [
  865. # d. _- \& F# ?, v+ T/ O
  866.           uf=unzOpen("Wsa.zip");
    # I; U$ f6 G" G- j, [( Q$ [
  867.           if(uf)
    / C) C' `5 O' q* B/ V5 L
  868.           {
    # Z/ f# Z! n) Z0 x. A0 o, u! Y
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);: y" h& l- W0 |
  870.             unzClose(uf);7 B; l' \) f9 P
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
      V7 l" d: l9 Y0 Q
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ' c6 T$ u. f# F/ _* r
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    ) E' ]9 G6 ?( @
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % \- `  p9 R2 e: I/ Z' ?
  875.           }- M  O- a6 V" \! P  o
  876.           DeleteFile("Wsa.zip" );' I2 \- X: b7 K
  877.         }5 A7 z' U# l8 K; W, n+ a0 @
  878. ) M) t1 n+ b! ~: {
  879.         if(CheckLocalVersion())
    3 @( G+ [$ e; a4 v3 ?
  880.         {
    7 U& G* ~' B6 L3 E, f
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");2 m. y* z/ q0 P6 c1 u
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    6 L7 W4 y4 y6 `
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    , {% h; q. ?7 v# ]" H1 N
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . |9 f$ g8 M1 ~* Y
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);8 I7 V/ O- S& G/ j5 x5 n5 M/ ]' d
  886.           dwStartUpSteps=99;
    2 {  G. e2 o5 I+ q& d2 s/ ]) W
  887.         }9 }: ]/ F9 b9 Y4 [
  888.         else0 E& v1 S/ H  z
  889.         {: s' m: l1 D3 F/ C8 C
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");  h, K+ d5 \5 o' a- t4 p$ E
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ I: d: @+ X2 V# A7 ], `# s
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");8 B4 J* V9 d; L/ y* B- K6 C+ O5 R

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

( U6 H2 H/ s$ _2 X- p' P

評分

參與人數 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-7-16 04:54

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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