找回密碼
 立即注册

CSUpdate.exe源代码

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

# c2 N8 j) |3 ?  L
  1. / RevApp.cpp : Defines the class behaviors for the application.7 d/ D* ?, Z! U8 ^/ U
  2. //
    2 {! f/ s+ S: B6 G" I
  3. $ _1 l. e' [" n4 a
  4. #include "stdafx.h"( q/ P7 V# }6 ~1 U" I

  5. # x" e: p5 W( v* S9 z; N
  6. //#define UNICODE
    ( U4 N% N9 L, b8 U9 h* @! _
  7. //#include <gdiplus.h>
    " g1 x& g/ t3 @3 _7 O% b
  8. //using namespace Gdiplus;+ v' [) a! a  P

  9.   f7 ?- Q( L8 c4 ?) o/ ^; F
  10. #include "RevApp.h"
    9 l  `8 B' o, K: i4 ~+ Q
  11. #include "RevAppDlg.h"
    - |4 J8 t6 p" c: E$ f
  12. ; n% n7 b9 B! C7 T# ~
  13. #pragma warning(disable:4786)9 \! @: j7 T- T) R& e
  14. #include <map>  P- V" A4 X( P3 _% F" Y
  15. #include <list>5 g9 n6 e) n  p" B6 v! l8 |
  16. #include <direct.h>
    1 o. a" r- }; H9 S) l( W

  17.   d, ~2 p, |4 }8 C, T" s  G9 q8 H
  18. #ifdef _DEBUG
    ( J; `; M/ y" D8 d
  19. #define new DEBUG_NEW
    5 G; F* V; j& z' N; |
  20. #undef THIS_FILE$ w* U; M% A, Q, o. g8 Q' g
  21. static char THIS_FILE[] = __FILE__;6 k5 @( w1 Q5 P+ I/ {* a( b
  22. #endif
    % D* r" V7 x! X
  23. #include "SkinResDef.h"8 B4 P# {6 R, f8 {) u7 \
  24. #include "ChangeBG.h"& L' m, W) F7 T  Y: M# w
  25. #include "AFXINET.H"
    5 l. V& ~! i4 s8 }% H2 I( D

  26. $ ^& C! E: H2 O1 h" P
  27. #define TRADITIONAL_CHINESE 0
    ) f2 p" T) E% @! e
  28. #define SIMPLIFY_CHINESE 18 Y; y  T- T/ @, x2 n
  29. #define ENGLISH 2
    / s: N9 ]# {+ {+ {- R9 p
  30. int m_iLanguage = ENGLISH;
    3 N9 }9 \% t1 u
  31. /////////////////////////////////////////////////////////////////////////////
    ) _# I) @0 i! q' x
  32. // CRevAppApp" \& t, Y. S4 _% ^: H% w" |! h0 b
  33. 2 K: a2 A3 |& f2 X7 o; S
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 T2 E  U7 T1 D) b1 B& f& E
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ; _0 R, ~- B* C+ i# u1 j/ ?
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) o" y% L0 k. p0 @$ e2 y; j
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!2 C0 j' h% R( `; D2 X  n8 G
  38.         //}}AFX_MSG
    / L: g/ _. h7 }
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)$ B/ n0 Q% i: ~# |4 I* y
  40. END_MESSAGE_MAP()
    4 n$ w. U, W$ N% Q3 A2 ]4 G

  41. 7 A  P" o( l: O
  42. /////////////////////////////////////////////////////////////////////////////' S# {1 ]9 V2 O- M5 W
  43. // CRevAppApp construction
    9 I: Y, Z5 W5 f7 C% ~
  44. 8 g. p9 {$ h1 |2 v8 z
  45. CRevAppApp::CRevAppApp()
    : s2 {9 z; k, {% h9 e8 ]
  46. {  h/ |! j: k5 |$ Y+ A2 |
  47.         // TODO: add construction code here,
    . a% {, ]& Z# l3 T& f" g; L. Q
  48.         // Place all significant initialization in InitInstance1 Y; o1 a* c$ }( Y
  49.   bDisplayIsBig5=FALSE;8 B# B; [: w0 i( [3 j
  50.   bRestartUpdater=FALSE;
    ; b! U8 }* K, O5 [) ^
  51.   bFinishUpdated=FALSE;5 ~1 ~! H1 u2 _7 k& F- a
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;: q, Z4 ~/ h1 Z' a5 {5 S. p) W4 `
  53.   InitChangeDataBig52GBKS();
    $ s6 a1 @; z$ Q2 r- o1 H# G! \
  54.   InitChangeDataGBKS2Big5();
    3 T" I% I1 }- t- t
  55.         //2 ]( M2 E! n& e' K% q" E
  56.         bClickRunExe = FALSE;$ O- Q: x6 n2 z7 a3 G% O
  57.         //# w8 w+ E; p6 n( h* e3 }
  58. }
      c  j8 \+ a3 _! m8 `, A! F0 e" G

  59. % O/ L  o1 _! ]* N" J
  60. CRevAppApp::~CRevAppApp()9 s1 t, V+ ]! q0 n/ l; O( l
  61. {/ t! V7 O8 B0 ^/ a; |, n4 ]
  62.         // TODO: add construction code here,. M+ }  F0 g: ]9 f5 r6 d0 Q
  63.         // Place all significant initialization in InitInstance- b2 n9 m# F" K
  64.   EndChangeData();: i. o7 m8 d0 _1 C& \
  65. }: i' h0 U  D6 N' ?
  66. * N" {1 X. k; @. \" T+ r% L
  67. /////////////////////////////////////////////////////////////////////////////
    3 [$ `. Y+ p) H& y
  68. // The one and only CRevAppApp object
    8 u& t0 f+ g3 T2 L! u
  69. % t' k$ S$ u7 V, I
  70. CRevAppApp theApp;0 M0 s/ D6 u0 v, b' Q( Q

  71. 1 ^: _" |. A+ ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
      W5 n( r% w$ @9 J2 \) z! A" z: ~
  73. {
    6 }$ d7 H- K$ U) I% q
  74.   int iEOF=0;
    $ ~- ~/ S" j5 x0 |
  75.   char szTempName[MAX_PATH];. A- O6 ?2 q( z- d( f7 z" H& y0 p
  76.   *szFileName=0;( |# W! A9 M, W" T* ]
  77.   iEOF=fscanf(fp,"%s",szTempName);
    , x" F- g2 q8 I- C# a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): Y% J" @8 n, H; V+ {0 I
  79.   {$ A; I, U1 j. I- P( b" D
  80.     strcpy(szFileName,&szTempName[1]);: {# O% q1 _, x  [% n( O
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)* X4 l2 @, ?/ g4 L% C
  82.     {
    5 o9 q, Y4 D0 M8 F) B
  83.       iEOF=fscanf(fp,"%s",szTempName);
    ' G3 H6 g+ D1 j0 ?, ~5 Q4 C$ x
  84.       strcat(szFileName," ");
    5 V8 o! w6 j: q5 T" ^( y  ~- R
  85.       strcat(szFileName,szTempName);
    / C7 `0 D& s# I9 }1 f- |3 R
  86.     }  I: j6 _; F, s' r; Q
  87.     if(strlen(szFileName)>=1)5 f1 w& P( a) H& n2 v- k, R) l; A
  88.     {+ q( K0 u) H# T2 l4 m& [' k
  89.       szFileName[strlen(szFileName)-1]=0;/ p8 L" x# h  H- E: F+ L2 t
  90.     }6 b) `- V0 X% e1 A' {3 t9 h( b
  91.   }
    5 U4 r6 u+ H3 u& k
  92.   return szFileName;
    ; ?$ R" s$ J: O: A* l' s
  93. }# s3 [) N; F! j6 H' u3 s  F

  94. / }- ]4 j7 e% a& y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)7 ~# p  i; \( u' j: p
  96. {+ c& P; M3 {6 h9 y1 I# F5 X' A
  97.   FILE *fp;
    * t: z* J- }: t1 H
  98.   char *key=NULL;
    1 [; f" \1 ?$ @( g& C
  99.   char version[MAX_PATH];% P3 B+ c( X% R% u( w; d
  100.   LPUPDATEFILE file,olds;
    5 p5 z+ I8 O0 g- H# y8 d
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 P# o8 v- `/ o" F: A* |4 _, ^

  102. 8 y; g5 L. p' G) a2 ?  s4 ^
  103.   UpdateList.clear();
    5 f. a! d0 U2 t) J
  104.   UpdateFile.clear();
    0 F/ a! w4 v% @& N5 V  `
  105.   if(GetFileAttributes(filename)==-1) return false;) N2 B! h$ K9 N' }: E. `+ q+ J
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( j2 i7 l( }6 E+ s, V& V
  107.   fscanf(fp,"%s",version);; U  [( t( j. L( s1 b
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    % |2 f: r% P; a: p8 E2 v2 [! Z
  109.   while(fscanf(fp,"%s",version)!=EOF)
    + T1 O/ e. b" `; m- N; x/ T3 J. ]
  110.   {
    # u9 ]( }6 c# P" M; x5 y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . o( z8 p) w3 O# j' t
  112.     fscanf(fp,"%s",file->path);
    ! f" V  L4 m9 t
  113.     ReadFileNames(fp,file->file);
    , m) r* T- N* l7 T1 E
  114.     strcpy(file->full,".");5 o* P* ?2 y! H& Q* S& w
  115.     strcat(file->full,file->path);1 y5 b( ?, G% x( T# o
  116.     strcat(file->full,file->file);
      D) X. ^$ d4 C' {/ F* G, D
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / R+ s0 t# k5 Y0 X) n. N
  118.     {7 H! E) G" r+ |6 Z
  119.       file->vers=(float)atof(version);
    0 `. x+ `4 A7 K! m! i+ V& X
  120.       UpdateList.push_back(file->full);% }$ a: a0 g+ C8 C5 p  t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    8 H5 Z/ R; ]/ c( u4 h( j7 A, u
  122.     }  U# t% H1 u1 v7 ^
  123.     else
    3 b0 L/ A# h" o8 Q: _
  124.     {
    7 g) Y* s4 A6 Q( B( b: e2 ^
  125.       olds=(*p).second;$ m) K0 M' e9 ^: A) o% T
  126.       if(olds->vers<(float)atof(version))
    ; N' n& a# S6 g, {0 L
  127.       {! T4 O8 g- K/ W' v4 X
  128.         olds->vers=(float)atof(version);# k2 o) Q5 u, e
  129.       }( Y+ j5 _6 y6 q! H+ X
  130.       free(file);
    ( v  G" e; X$ K" T
  131.     }
    , f' Z& e& {0 j
  132.   }4 r# w: A/ u0 A; H' R  K
  133.   fclose(fp);6 b" h! g; M. `) i
  134.   return true;, |1 o- \1 o( k: D6 c. \9 u, P. _1 Z4 e
  135. }
    - l( D6 u6 A: V+ ?: Z
  136. - x1 h& b% X6 Y
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + u6 p, w7 u5 V7 |8 e
  138. {
    ! U* J6 J$ p7 H. y  b8 ~
  139.   TCHAR  szFull[MAX_PATH];
    9 `3 C  c' x+ ^9 @4 m
  140.   TCHAR *token,*inter;3 `& z% i% u- V( s* {
  141.   *szPath=0;
    1 ]. S- O, T' w6 ~4 l
  142.   strcpy(szFull,szFullPath);. s/ F# {0 g+ B$ R5 M4 a
  143.   token=strtok(szFull,"\\/");
    - {3 C1 s% N$ O
  144.   inter=token;; y! X( B/ y7 i' m- F1 J. v8 t
  145.   while(token=strtok(NULL,"\\/"))
    0 v( [5 Z5 R- X+ |! z  i
  146.   {
    * |: q+ A1 Z2 ]! _# I( C6 T' F) v
  147.     strcat(szPath,inter);$ |  e  w$ A% o$ ?7 z% @0 w
  148.     strcat(szPath,"\");
    6 `& J2 m, X1 U8 A% M
  149.     inter=token;7 v) L* ?; L" A2 @, p$ j! e
  150.   }: D9 _6 y3 t( P2 B
  151.   return strlen(szPath);
    / O3 R7 v# S, b/ g( ~% B
  152. }- ^0 F- @- c2 v% ~

  153. % e  e  g) n- y, N" `( Y
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
      q5 T# G0 n0 q6 O. _! g! C; q
  155. {
    3 w# M2 l3 r. a+ N
  156.   DWORD attrib=GetFileAttributes(Target);
    & _; g' s0 D) U
  157.   if(attrib!=-1)2 a! K( U" ?- U& F7 U/ H! L; N
  158.   {
    8 F: W% K7 H0 R* r
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    : R2 H+ d; G( m' J% C
  160.     {
    ( ~- p4 K5 d/ D2 d, B; |4 J" E+ }
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    ; b, G. N) f' j& f* q5 G( u
  162.       SetFileAttributes(Target,attrib);
    , T1 W% `7 \1 R* ~- D, ?
  163.     }0 d, C1 w5 \, y! W* }
  164.   }
    2 z, G# Z# [4 F' y: M" G" u
  165.   CopyFile(Source,Target,Erase);
    2 m7 Z6 Y5 g  M$ D7 `
  166. }- ~0 ?! \! n& X2 S( C: q

  167. " [! B4 F; O, b% W4 f4 z5 G# y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    + b4 T! J9 Y- w
  169. {# C6 C& d" |1 T7 S  p8 R
  170.      FILE *fp;) k( \: @( P# g+ D) E# V6 ]6 {
  171.      char  szBuffer[8192];
    6 m% M6 Q! a8 K( K
  172.   va_list  argptr;
    - o2 }- {: t, i, |4 i

  173. " ?3 J" ^4 K2 R0 x
  174.         va_start(argptr,message);/ K/ V7 u% }' y* j# }4 p" c# w
  175.         vsprintf(szBuffer,message,argptr);
    ' }+ @: m* r9 G
  176.         va_end(argptr);7 p6 r: v* k+ M5 {2 F! M
  177.   fp=fopen(FileName,"a");5 A0 Z; o$ d' V- f! w
  178.   if(fp)
    2 S4 {2 k- q  K/ K* _6 P! _7 S) F4 n& A
  179.   {! a  P7 ~* Q: c
  180.     fprintf(fp,szBuffer);' n& b- m+ w8 @' R
  181.     fclose(fp);3 b' H" L6 z. e1 V+ H2 e
  182.           _flushall();, s% [8 ]9 J# G) N
  183.   }
    + ?0 \' a% a! _' ]- ?* M# e
  184. }
    " p' n+ Y  C( |: R

  185. # V  D/ Z% y( g6 l( V! s: p+ R
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    ( V3 W. X5 ]+ F$ A! N  A
  187. {
    5 w, x2 T/ ?+ Y2 t# c' C
  188.      FILE *fp;* O: p% r+ a# i* A$ I: G9 A- I
  189.     DWORD  attrib;. Q% S3 c  T* m; x
  190.   attrib=GetFileAttributes(FileName);
    8 O9 M, Y, [/ e4 o) D
  191.   if(attrib!=-1)# t- }& S6 ?3 p/ Z/ d
  192.   {* T# k& m  c+ |0 I
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);+ B: Y; o% z6 e) q5 ?' S5 A% Y
  194.     if(!SetFileAttributes(FileName,attrib))5 ?' M$ _8 ~# [, g
  195.     {, \* P0 o* ]5 S# o) K; w+ H
  196.       return FALSE;6 W0 c: a& b+ _# S% G
  197.     }
    ; l3 V6 |7 G- U; w/ r- {
  198.   }
    & ]6 E: z$ f3 Z" ^2 v, C2 E
  199.   fp=fopen(FileName,"wb");
    5 J5 l. @1 H' z
  200.   if(fp), X! R  g0 S' [5 V
  201.   {8 x4 ~- l& c9 n% }, ?/ b
  202.     fclose(fp);5 a. C' f# S! J3 S* T; y. j) A
  203.   }
    % t. D% _& F& `
  204.   return TRUE;8 t) m3 X! Z0 R, y5 G) Q
  205. }, ^0 g/ W9 m4 x( M$ F" c! |

  206. 6 f. z( q+ z( U* ~" P
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 w- a$ ]9 N! z4 Z* F
  208. {
    0 C* L( p# ~5 \  r; ]; A2 k
  209.   char filename[MAX_PATH];
    7 K# j5 ]' c+ }, T0 m# b" \
  210.   LPUPDATEFILE file,olds;
    ' T$ o* @: H! k# M
  211.   std::map<int,CString>::iterator i;
    3 A$ G& _( l6 r2 P. Z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 u/ f; b* a7 |
  213.   std::list<CString>::iterator l;8 _/ I, x! v9 t

  214. & X- u, L) x& P
  215.   if(bFirstUpdate)' b' S0 f* a* Z0 K: S4 Q
  216.   {; f. @$ n2 b1 A3 X
  217.     dwCurrFile=0;
    + F  l* l; e1 Z* L* ^! R, b
  218.     bFirstUpdate=FALSE;" \/ h+ `$ m! F7 ^1 Y0 m% M
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 W( d/ u9 f3 H6 M) q8 u% l
  220.     {
    $ H. Y8 X1 M. _
  221.       dwTotalFiles=UpdateLocal.size();& X( N7 T5 `( r( r2 f, p8 `
  222.       dwDownLoaded=0;
    ( X0 d$ c% s) A6 d7 A( r
  223.       bSilentStep=FALSE;
    0 w; A" X1 Q5 B6 j8 q! x) W4 l1 j
  224.       bCompressed=TRUE;' W7 X: G+ ]2 C6 ^5 s
  225.       strExtLocal.Empty();# \( S  @" C: ?+ J1 m0 G
  226.       strFullName=(*i).second;
    3 E; l, {  N# y: S
  227.       dwProgramState=AP_CONNECT;
    / @+ A8 [5 z1 O3 m1 ~2 C6 U
  228.       return TRUE;0 L5 [9 a1 g$ n* N/ {* V- w
  229.     }- \* `; X/ |9 U! g5 M
  230.   }
    4 b" e- B" |+ H  L4 B( V& ]
  231.   else if(bRestartUpdater==FALSE)
    3 c* ]5 y5 t1 i1 O  J2 V
  232.   {9 ^) @, E2 V9 `) g- c* @+ B" V1 j& C
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())# O0 G, u2 N& E3 h( U: k! l1 t
  234.     {
    6 a. ~  h5 Z0 P
  235.       file=(*p).second;1 E: x' x3 H- _0 ]( ]! c, h
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())3 G$ i* a4 `8 ~
  237.       {  k% x8 ?+ J' f6 H6 [, W1 X0 }
  238.         olds=(*p).second;
    * l: Q1 I2 A& p- k
  239.         olds->vers=file->vers;) h* u  X6 }' a; x, Q
  240.       }
    ! b1 V6 x( ~% t5 }' I
  241.       else
    ; o! ?' r4 Y5 L9 x* i
  242.       {
    & u: f+ C' F& S0 O" a; b1 I
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 F# _4 d6 ]+ F
  244.         memcpy(olds,file,sizeof(UPDATEFILE));. n# E, Q' j0 B1 U% T( P  I
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 e8 K8 E. w; y/ ^
  246.       }
    1 X; l" h4 ?. R6 v+ c3 ?
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    8 p- S0 A3 }- z6 P' T
  248.       sprintf(filename,"(%s)",file->file);
    2 m- r9 y! @+ ]& q
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);3 H/ w* R+ M, ?5 W% T( i7 ^
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      ]2 {' e) D3 J
  251.     }2 k8 P' s1 t6 z9 o1 N- s5 k
  252.     dwCurrFile++;9 y3 |5 U. a' r3 P) d; D) b
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())' J) P. \% ~; V! |7 C1 C
  254.     {
    . U4 _! k1 z( }# {2 u
  255.       bSilentStep=FALSE;
    9 M! T/ V. C; [! ~% y2 D9 |
  256.       bCompressed=TRUE;$ \! E0 _) r, ?; b, X
  257.       strExtLocal.Empty();
    ; Q' I$ j0 w; k2 B% u
  258.       strFullName=(*i).second;
    1 t8 \* P  _7 j4 O2 D
  259.       dwProgramState=AP_CONNECT;
    ! i1 |* T  X( }7 W5 a7 u
  260.       return TRUE;6 C8 ?' [; u8 t0 R' V0 ^
  261.     }$ a) D; M/ B4 C" f) B5 b
  262.     if(!bRestartUpdater)
    ) }8 I& P) W  |+ V# j) w* }/ ^
  263.     {
    - c' e4 Z" \  A3 `9 h( V$ V9 ^' \6 \
  264.       int iCurrSize,iFileSize;
    7 G. H4 b* L. \
  265.       iCurrSize=0;# A) |- }& j) X4 Q
  266.       iFileSize=UpdateList2.size();: b! M" x: A0 n% v' g
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    3 q6 n% P- E4 [% F- m7 b3 L) ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 |# j+ O3 y4 _: f
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");; p1 K$ u* G) H/ j5 l3 g8 b
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" e; w* h. w8 y3 T" K4 E
  271.       Fclearf(".\\update.dat");
    3 T" ~2 d, |9 U! d
  272.       Fprintf(".\\update.dat","Bloodyf\n");& b$ \  V4 O4 w; ]2 s& |
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)- ~+ a+ l+ \  z
  274.       {
    ( _% f6 x+ G( b
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()): T6 G4 H& O, z! j' H/ \
  276.         {
    / |2 G4 s4 r$ q2 {
  277.           file=(*p).second;
    * m: e4 b! o+ w' R1 B1 {
  278.           sprintf(filename,"(%s)",file->file);
    8 J# D  c2 p+ b! L" J4 H( R  x
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 u7 I% a& X  m0 f2 G- T
  280.           iCurrSize++;) C/ i9 k8 \& Y  E' K
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 f1 _8 ?, ]# Y5 v1 |0 B, I
  282.         }8 C, z5 j- H2 J6 v; X' W
  283.       }) u( }7 G2 M+ }# G4 f6 J
  284.       unlink(".\\update.txt");6 x* Y; n: }( q+ v' Q
  285.       unlink(".\\update.tmp");9 ~8 \$ x9 ]* Y" p- w+ P
  286.       Fclearf(".\\checkversion.dat");& @: Q6 v$ ]# b$ _/ v
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);( i- o: O7 O; F$ H
  288.       if(UpdateLocal.size())
    2 p; |* _" g! p7 \: u# o
  289.       {. e4 T( L9 b/ I6 F/ n" E- Q# i# `3 c
  290.         UpdateLocal.clear();* P) k# c7 ^0 M  u
  291.       }
    & v2 i" K" V& T/ J
  292.       if(UpdateFile3.size())4 Z- v- O' {- p7 ?8 L
  293.       {
      Z# G/ U2 u( x; b7 |7 r
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 x8 H0 l: Z+ G" M& R+ w3 R" e
  295.         {
    : q' C2 @  p- n* g' u
  296.           file=(*p).second;; @: ?  l! ~$ z
  297.           free(file);
    & f* l8 I+ d5 r2 N6 x1 k
  298.         }
      R3 q% a3 t" T8 M8 u8 ~% G) i
  299.         UpdateFile3.clear();5 p, s+ X- a) v: x
  300.         UpdateList3.clear();; I# B# P3 s. g+ V/ F1 Y
  301.       }
    1 p. ]) N5 i6 Q: x( Z0 X7 G! F7 \+ {
  302.       if(UpdateFile2.size())2 o& f3 D  V* d: Z7 \
  303.       {: ~0 j% u! o' S$ `/ d
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    / M* p) _- ?- [8 T, l) V
  305.         {; \4 o, v7 |; u! Z
  306.           file=(*p).second;( y& X# v! u4 U! p' w
  307.           free(file);, {; ~# r* l5 E  t
  308.         }# G5 h! P( \' k- r
  309.         UpdateFile2.clear();. s9 h  u1 q" h6 \
  310.         UpdateList2.clear();
    / p( `1 p8 ^* t
  311.       }
    , [6 W) H  X1 ^# |
  312.       if(UpdateFile1.size())# l1 L6 J9 ]" f! M  k8 Y( S
  313.       {
    9 P4 m8 O" Z# y/ [4 A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    & A" I2 ~" [0 k( j5 e$ ^
  315.         {- }$ t4 n8 Z" F
  316.           file=(*p).second;
    ( V$ Z* t' ?) F  T& b+ ~* A
  317.           free(file);3 }8 z, m) z9 N8 ?4 n4 E' m
  318.         }
    * V+ Y  i4 S% M+ G8 v
  319.         UpdateFile1.clear();. K$ \3 V% Y6 P4 {' J; O# [
  320.         UpdateList1.clear();
    5 ~. X( ~. @0 S0 v
  321.       }
    0 E5 O5 s# z. Z$ M0 Z
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));* \* b  l" I5 D+ {, ?* O$ F: L
  323.     }
    6 F2 R( K# \% L3 K. d. u" q+ j
  324.   }  o* t, v* ^- I7 R
  325.   return FALSE;
    ) }% B5 K1 g7 x
  326. }
    . S0 f: Q) D8 U8 l/ X2 n1 b& w

  327. $ u! W2 ^( D& K9 F
  328. void CRevAppApp::ClearAll(void)( {8 L" \  M: z3 k
  329. {
      U' ~! e& V% e
  330.   LPUPDATEFILE file;- U% }# \2 |8 K9 C1 s# u" u
  331.   std::map<CString,LPUPDATEFILE>::iterator p;9 O' p' B! X% [9 Q. H0 N
  332. ) ~6 K. U  W; r# A3 Q
  333.   if(UpdateLocal.size())) g3 y) O2 J( y% c
  334.   {
    - j6 s1 _: e( x+ N! N; }2 b8 Z" Z/ F
  335.     UpdateLocal.clear();2 y3 g5 J3 ?$ g& U- y5 F
  336.   }! y6 V3 p6 X" Q8 ]- r1 T
  337.   if(UpdateFile3.size())
    4 p1 j6 o- f# L
  338.   {
    3 ?- ~2 [( J- C8 A$ H* b" _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) Z- Q7 q. B7 y7 }0 Y
  340.     {- ?4 E: A' `& r0 j9 \( M, n
  341.       file=(*p).second;
      H3 o3 o, X: h. v: U% Y8 T
  342.       free(file);7 N7 Y7 i. j+ f/ P3 ^  f# N; m& @' U: y
  343.     }( _7 ]" a) F& _# ^
  344.     UpdateFile3.clear();
    * y; R/ ?$ A& T8 h7 r$ W
  345.     UpdateList3.clear();
    % ~% ~7 V3 n- e% H
  346.   }
    3 i2 s7 J; z' Q7 O# `
  347.   if(UpdateFile2.size())
    ) l/ s9 w7 O! ~2 q
  348.   {& E* x) _$ n3 m
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)+ }8 Z% z2 m+ L% R6 ?% H
  350.     {, N6 C5 p; h/ ^) t; v0 f" |% v( @) U
  351.       file=(*p).second;7 L8 K5 O  b7 B4 }
  352.       free(file);- t" R' b% K/ q3 F0 j' n# N+ |
  353.     }7 c  \) M. X! ]- S4 j4 q- S  }
  354.     UpdateFile2.clear();
    # X; I/ @& O* }% `  {# {
  355.     UpdateList2.clear();
    % d, \- j' J9 b/ q, G
  356.   }- ~- }  [/ X& h5 S$ g+ w
  357.   if(UpdateFile1.size())- _6 l; d5 W4 F% N2 G8 G6 r
  358.   {6 l) ^$ [  A, h8 f2 [. s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    - p, q8 p2 U; @) O6 n
  360.     {
    - o; [$ ^8 s9 s2 d4 o
  361.       file=(*p).second;8 [; p$ E  G4 D9 E3 ]) X7 a' Z
  362.       free(file);
    1 ?6 t) {- n( a$ A) c4 h, C
  363.     }0 i/ E4 m/ z! o9 `, }$ a: [. R
  364.     UpdateFile1.clear();
    ' T8 g! H0 ~- [6 o5 U" F/ G% @' x
  365.     UpdateList1.clear();+ E# t* }  y: f1 e* J) p/ @0 X
  366.   }9 T0 _9 z+ q! ?4 i$ J  p
  367. }  
    ! q, f" G7 g* n. N
  368.   
    - l1 }; N  t* o# O
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    + X8 Y9 Q. [7 k) x
  370. {* k% _6 M! n8 F; v- V( g3 x9 {
  371.   int c;- i& h/ s8 E( L
  372.   LPUPDATEFILE file1,file2;; B4 F2 M$ R2 q# j3 G0 W5 q3 `
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ n, {( X3 A3 @
  374.   std::list<CString>::iterator l;
    . _- V4 v4 l# L4 ?. q0 ^

  375.   z& r4 y" N# _* q5 y
  376.   UpdateLocal.clear();
    0 H% m% [5 L, P) o' R3 ?/ q
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    6 J- T. T. X, W( I( A' e
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    5 M1 |+ l- Y* c1 D8 C) t/ J
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);) ?2 b" k6 s! p4 |  I. j1 L9 `! h: Q
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);/ i% \2 I$ K5 a# r6 K
  381.   if(UpdateFile3.size())
    , b; S2 g% {, @+ M" b2 ?* t
  382.   {
    ! w2 Y3 _3 q# k: k. v7 R0 h
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)6 U+ `7 [: C5 K* ^
  384.     {
    ) h1 N8 i' @- i' Z
  385.       file2=(LPUPDATEFILE)(*i).second;; k$ E% q3 P0 M) P- g' D* C
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ x7 O" J8 h' ^
  387.       {
    6 t9 p1 r! g' }. p0 I* j1 l
  388.         file1=(LPUPDATEFILE)(*p).second;
    # y0 ^# e: j0 P
  389.         file1->vers=file2->vers;
    , u' o4 q6 C- A4 [) V
  390.       }& l; [8 R$ N8 b8 l. m% Q' t+ c) i
  391.       else' |  s+ ~# ?' P! X4 A( H
  392.       {
    : {. L' n& @4 ]' r3 o' D
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 m( X% @* j. y- x# a  j
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    ) E0 c; [% H0 F2 D
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    # ]2 Q5 m1 o8 F& K
  396.       }$ B6 S9 d, z9 L8 T6 O" S
  397.     }
    * y9 N6 H5 u, D. y/ d8 s5 {1 U
  398.   }
    $ q* Q6 D5 J- |' z1 v3 t( ~
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)/ z2 w3 `9 ~! Q# p5 u; m' v- [1 x5 g
  400.   {  D0 y6 L: p- B/ K# s3 @
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
      ?2 {0 P* y$ ]
  402.     {
    . {- I8 z$ b7 @. H% b9 I/ M2 q# @* J
  403.       file2=(LPUPDATEFILE)(*i).second;
    . A7 N% Z3 ?$ a
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & F" H" {( n2 n& c: c0 H
  405.       {
    + M3 w2 i- U0 @+ q! h4 r4 T4 ], R2 {
  406.         file1=(LPUPDATEFILE)(*p).second;
    6 W* O: K( Z% U1 ~" I  [: W( n
  407.         if(file1->vers!=file2->vers)
    7 p$ P2 J+ V0 B0 M  Y* G
  408.         {
    * a4 Y9 t' |  ?2 q  W- Q
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * A2 F' P$ z' r
  410.           c++;) k& y* W; d$ L2 S
  411.         }" z% e2 f* n' b  C7 U/ l& U' }. f% E
  412.       }" d2 M0 g9 g7 m, e5 r0 N- A4 M
  413.       else
    ; ?6 J! t. E. O. a" p: ~: N- A
  414.       {5 a! \( V! p3 ?' N1 B8 Q
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  r/ }, ^" j. t
  416.         c++;! \1 e0 ?4 |) x6 s" b( P
  417.       }
    7 |# Z; V' w+ {' {  ]7 H
  418.     }, T2 O6 b& i9 I
  419.   }
    0 n' D7 O: s$ T6 M1 [
  420.   unlink(".\\DownLoad\\update.txt");( I8 U! i/ w, T6 I0 w3 S
  421.   if(UpdateLocal.size()) return TRUE;  p; y# E. `: D  b( ~1 V6 e+ I
  422.   else                   return FALSE;1 _  I, S2 Q+ I1 e( u6 E/ t6 w- L
  423. }
    7 v; F# {9 ]9 J8 j# Q  J
  424. 9 @, i# Y( j7 y5 O1 u
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / H7 g; z: J# g2 O2 `& s$ G1 G
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"3 X' ]! o* C/ o; c" _! K
  427. 4 S0 ~. U* t$ k5 |

  428. & |( `6 D' ^; p4 ^
  429. , n3 c9 O  |1 M# m, e' m5 {
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : b' N# ]* }7 {1 f
  431. {& f( ?) u; N+ y6 b* b9 q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;8 t: s3 x( u$ @+ m1 }4 f- \6 L
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    * c1 a* l( m& Q5 E5 j
  434.   {3 ^9 D; d" X, ~9 \0 u* a4 ^
  435.     char szLanguage[50];5 B2 q* ]  O0 R! L  `" w
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ) t" @) V: l) c: n
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;, L3 i! g9 ]* E# g4 Z  E8 k
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;, d* \& w7 E6 a* C
  439.     else                                   m_iLanguage=ENGLISH;
    , ?4 F1 C5 M/ A5 Q2 S: u# f: a; J& M
  440.     char szRegister[100];
    * K. p1 I3 z/ f1 o' M! _: H
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    0 P& o9 K# Z* n5 V; Y' G  v; c
  442.     strRegsName=szRegister;
    / ~4 a2 E* K( B4 r
  443.     char szPatchURL[100];8 Q' |, q$ T" S$ F9 N, u
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 W4 @- m. }6 ~+ X+ a
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # l5 b( l0 x  M
  446.   }1 x4 K$ w' V  ^8 D' \' B. A5 g
  447.   else3 P! l1 e4 _1 @2 U0 N
  448.   {/ g$ \( Q& d; U. X7 O( {% A
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ) w( T9 S, x) j. n8 z
  450.     strRegsName=DEFAULT_REG_URL;( H. M5 r* E) S6 \  ^) z; Z7 `  c
  451.   }
    1 d" w  j6 J% ?- q0 g
  452.   if(GetFileAttributes("hosts.ini")!=-1)# A/ W8 N! c" `: s3 w
  453.   {$ c0 j& Y& X  {& P! R* Q
  454.     char szIP[50];
    & k( @, H0 H5 i  r
  455.     char szDIR[300];
    7 Q+ A4 C+ d; [3 z2 y
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ! K  E3 ]$ n5 H* u" o5 \
  457.     {& W# `7 Z6 }* t4 R' A  q- W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. V5 h+ X& m  M. _# a' T5 w' w
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    / l* `/ e: m4 w. b9 I' p
  460.       strHostName=szIP;
    2 e; f1 Q) H( ?1 p$ a
  461.       strHostPath.Format("/%s",szDIR);( D0 y2 ]3 D( m/ J" ~0 M7 f
  462.     }' U: U4 c2 g9 E' q: t
  463.     else
    7 j3 q8 `' H" B2 a. ~9 t
  464.     {
    ) {9 l$ D. I7 J. ~0 H
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% V0 M2 M7 M; ~
  466.       {
    " I7 G1 I& H8 d( d. v
  467.         char szLanguage[50];
    , H! n- w4 j8 k) H
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; a! H; M/ n) u
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    - g" A, I4 E; \  w6 x$ i
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    " X6 l& u$ }" A
  471.         else                                   m_iLanguage=ENGLISH;/ D( r& K& J! b6 T: u' G- n, v
  472.         char szRegister[100];' N4 W# R4 l% T9 M6 M
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ |7 ~1 r: A6 O& U/ U
  474.         strRegsName=szRegister;( {$ B' V% |3 K, K$ C' n0 ^) S2 `, w- e
  475.         char szPatchURL[100];  L; [2 y9 i7 A' ^4 \& H/ \. F  N& a
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");8 y0 c; H% [" j" C, n& C
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    & i. h# Z. q3 v5 c5 `; K5 Y
  478.       }
      B& k4 X% H, @' k
  479.       else3 M# }$ V3 ~- Z3 r& ~5 U
  480.       {
    3 n6 Q8 P6 i; e! [1 j) t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) b% i; X4 _) e6 m0 n
  482.         strRegsName=DEFAULT_REG_URL;
    ( t3 g, c2 `% O# K7 U
  483.       }- h" [/ \* \/ P! W0 o8 C
  484.     }: U6 y/ p- w6 s4 T  R
  485.   }, ?' l6 h, @0 [) w9 ^8 O3 R
  486.   return true;
    ! Z) o9 f4 H3 A! V4 r
  487. }: [4 n; j' w7 D5 x8 ?  n

  488. - H& k  m$ w9 L, Q3 c% x
  489. #include ".\ZLib\unzip.h"
    ; \. l0 {; x1 @" C/ [9 y& x
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    # Z. a% _; ]! Y( B
  491. /////////////////////////////////////////////////////////////////////////////  m; F5 Q/ x6 I' m# v4 c2 C4 E
  492. // CRevAppApp initialization
    0 m6 {5 A& n/ q; K" H! g8 f

  493. ( \8 o- t5 z5 ~" W% \- N
  494. BOOL CRevAppApp::InitInstance()( P) y- q* y/ r! n% U3 o0 K' J- A
  495. {) Y! f& \: o3 }3 p
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    9 {# G$ e6 h$ l. P5 `/ _/ r
  497. 2 D+ D7 L) w* l# i7 z( z+ a
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; ~/ N; R5 j& Q- |9 G
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    * i6 @$ I* f$ z/ a1 z& }
  500.   {& X+ V5 F, `6 \
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    : z1 s- N  ]8 \0 P$ i" o
  502.     GetPathFromFullPath(szPathTarget,szPathSource);/ f8 a9 u# m. m+ c" S0 _
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" {" F  E  r1 ]$ k' w8 D$ |
  504.     {
    5 @+ d0 ^9 C4 e: _
  505.       strcpy(szPath,szPathTarget);
    : b# L, P( V. P! J( x8 t& r1 J  x2 ^
  506.       SetCurrentDirectory(szPath);" r% x, V* a, }9 x- \
  507.     }
    1 Q3 z+ u& G4 l$ @7 V
  508.   }6 B) S! x8 j8 m/ e' B
  509. #ifdef _DEBUG
    $ ?0 G) f& b$ \0 f, ^
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    - ^2 Z; U+ _0 ]6 u/ Y' `" H
  511. #else" z( I; I+ w. s" a8 y2 W+ y
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . ?/ o0 d0 z1 ?$ U4 |* Z& i) \4 M6 I  P
  513. #endif
    & b) }' N* ?1 ~: W7 S  O. q
  514.   {- ?# s, l0 f# L
  515.     char tempFileName[MAX_PATH];
    % k: O, @  o) \6 e# T
  516.     strcpy(tempFileName,szPathSource);
    $ ^/ K9 a, S$ X" Y3 ?
  517.     tempFileName[strlen(szPathSource)-12]=0;% f4 R1 H) p- `% `2 H$ R. O) V
  518.     strcat(tempFileName,"\\$CSUpdate.exe");+ i$ R! e' L2 v) s" B7 I, [9 R
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);# t" \7 ~& E. n% f0 O% |9 p
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    / l2 U9 Z; J7 E/ G+ {6 O2 D
  521.     return TRUE;9 q+ B5 N4 Q3 O0 x
  522.   }: H7 L* q: \4 T2 {# m
  523.   // Nuke 0118: Delete run.exe  a9 A8 v4 f  X) B) l+ z% q  X8 E
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );6 G. d: n; J. i% c" q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ( h5 K& F# h+ j
  526.   if(!ReadCfgFile("Config.ini"))
    1 Q% V7 p6 h7 ^; `  {) F
  527.   {
    * K1 L, C4 I; g
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ( X3 W$ @2 r: _, m% D4 T
  529.     return TRUE;. L8 O- }! D5 J: k  C7 K
  530.   }
    / W5 F& s" y" h7 H4 b
  531.   HANDLE mutex;; E1 Q/ u, r3 K
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))" P+ \9 _0 V. I
  533.   {* }, x' q- z* Y. W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)# d( a; L* z. D9 J3 b  h* A3 V+ u6 v
  535.     {1 h. ]: X+ m% V6 {
  536.       CloseHandle(mutex);* l0 l3 z7 F/ n' u; A' j) U# t
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 {# m7 }) \: X, B
  538.       return TRUE;$ ~0 x' d* @7 t; \
  539.     }* n3 e7 g9 J4 q; |
  540.   }  
    " O, }* j0 s) H$ e9 L5 I  }5 g
  541.   CloseHandle(mutex);
    $ ]% ?9 ]# N; w! ?) u" f

  542. " S+ l% f# b8 G3 {# F; K9 X( F8 c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ! T0 g/ p) R! r
  544. / ?0 O) S* |/ f& Q# X: X0 e- M
  545.         AfxEnableControlContainer();& M# c" ^5 Z2 k& A8 s, h- D( {! {( T
  546. ; x3 l  A0 n  X( K, J: v
  547.   bCanUpdate=FALSE;, p8 b6 e  ]9 {" }2 w
  548.   dwStartUpSteps=1;
    & y9 z& A, x5 n7 x0 e9 r1 z
  549.   dwProgramState=AP_NOTHING;6 a: {& U) m5 ?8 A0 U

  550. 5 g+ q4 J, F2 L1 S4 U3 W
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    , G5 O0 _8 N; p: Q, J# k- d3 s

  552. ' y& D0 d% d+ N" ]/ `: b' ?& b
  553.         // Standard initialization& \) l9 M/ H2 G. A; U  k
  554.         // If you are not using these features and wish to reduce the size- c0 b  j% Q2 W& N2 @
  555.         //  of your final executable, you should remove from the following  R# q/ a  x, H/ L& L
  556.         //  the specific initialization routines you do not need.- e( G0 {& s7 x; {) b/ d4 [2 I
  557. " ]5 E  A; E/ f) S
  558. #ifdef _AFXDLL& {) U0 `: m  R( F0 U
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL, L% Z# P- q3 _: C0 h
  560. #else2 \4 J; t( j& d! o" o6 [# t, a
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    % s" K+ L  |' f$ j( ~4 J. Z
  562. #endif
    - o/ Y. j9 Q& t( m. q

  563. % I5 [6 w. B  _' M/ G
  564.   dlg=new CRevAppDlg;
    8 b- j9 D  @8 ]( D
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ' Z7 x' s) b( k5 G3 g1 n; N
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ f" ~4 N" z* A. B
  567.   m_pMainWnd=dlg;( O8 \2 p) V( n7 @7 O7 |

  568. ) M# C, G3 l7 h! H$ J3 ?' l
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ; V/ }! C  d$ n4 |
  570. % R4 P. m. [( j. ^# F
  571. //  GdiplusStartupInput gdiplusStartupInput;, S: y  B6 \; g% z# p' S
  572. //  ULONG_PTR gdiplusToken;* U: R, H) u8 f' b: z$ F8 n
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);4 i# v+ B: |. r

  574. % M# B1 a0 ?$ z
  575. //        CRevAppDlg dlg;7 f" t* W$ }' |. W
  576. //        int nResponse = dlg.DoModal();
    ' a* C: B% o0 T* @1 I
  577. //        if (nResponse == IDOK)' K; G1 q. r! ]0 U' u
  578. //        {2 F& G* j4 P) Y
  579. //                // TODO: Place code here to handle when the dialog is
    0 }; c; V3 n( r8 j& s0 o. n+ ^" v0 w
  580. //                //  dismissed with OK
    $ u) e: ^$ \8 X$ H* P- c, c. W
  581. //        }. v9 ]. b% _3 h5 W8 ^5 e4 C. B
  582. //        else if (nResponse == IDCANCEL)' m( ]( J3 g& f+ B% Q
  583. //        {
    $ y: |% h, ?2 j8 S8 M
  584. //                // TODO: Place code here to handle when the dialog is/ i2 b$ }1 d" J/ x- L
  585. //                //  dismissed with Cancel1 p# {: c1 B2 @
  586. //        }- M: s# ~& q' P$ p8 Y

  587. 1 W2 h+ E; g& K8 }$ |1 `( q! W
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    " P5 i3 t$ Q1 c6 {( E
  589.         //  application, rather than start the application's message pump.
    ! n& p- d0 E( G* i# ~( e
  590.         return TRUE;
    . F) q3 W" I( x$ _/ V1 c
  591. }. i4 r: l. E( W6 u$ ]" n
  592. / G; M0 u* p# o) S0 s2 p7 k; f( Z' w
  593. char *CRevAppApp::strtok3(char *pSource,char *token)0 h  V* S- t$ `2 J) T
  594. {
    & W; s9 P: \/ H. }. c
  595.   int i;
    5 \0 @, M! q6 o* ?) X4 t
  596.   char *szRet;/ d' R4 P7 f1 j' A3 Z2 |( F9 p5 I( M

  597. 0 b4 e2 H1 k1 d0 [! G5 A
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ! Y+ X" }# q4 F% Y# D& ~
  599.   if(sztoken): p% `* J, y1 L! H8 T" K  q0 j
  600.   {
    2 T; A: E8 w" a# U" C0 K
  601.     szRet=&sztoken[itoken];# d8 a- C1 v5 A
  602.     while(sztoken[itoken]): T3 A1 ~- U, g: V
  603.     {
    9 k! d6 S2 n5 O& U
  604.       for(i=0;i<(int)strlen(token);i++)
    - |; C2 v0 K, Z$ b* [
  605.       {
      A% H. T( ?3 R2 p3 G$ G
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 {2 x# E4 a) p4 }) L6 H% B
  607.         {% |" o& R( N4 \5 [
  608.           sztoken[itoken++]=0;
    3 F$ ^  U1 `, V; G3 H# T: `. Y
  609.           sztoken[itoken++]=0;# _$ ~2 b- G0 {
  610.           return szRet;3 ?# m( b8 k+ D2 p
  611.         }# y/ {( f7 J2 C4 L7 w
  612.       }
    , r9 j( f6 [: X2 |  W& c: W
  613.       itoken++;
    " a0 d# U1 Y4 b" Q# @& _1 |
  614.     }  A8 W* i7 q- }. [
  615.   }
    * J9 t, @& Z( e& Z
  616.   return NULL;# g' |$ j1 J! S
  617. }8 E. M& v! g% y+ w
  618. 4 H. Q' N. g! o$ y5 F
  619. void ProcessProc(long Total,long Current)
    2 a$ U3 [4 q  ~" O+ t" q* Z4 z" z
  620. {* \2 y& v. ?. ~) P
  621.         MSG msg;" `; O" N5 ^0 U, }
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    $ O7 w; s' k% ~- h( w2 Q7 m  `- }
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));7 L# M, S' D+ g+ t
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    $ i! b% i& b9 e5 _  k" @* \: X% W
  625.         {
    ' }- T" u2 S+ v  V% q' S
  626.                 if(!GetMessage(&msg,NULL,0,0)). C4 O/ {* v. g+ A
  627.                 {" w- t1 w0 e7 U  c8 G& V* a% ]
  628.                         return;' |7 b4 i9 Y1 s% J6 V/ Z9 Z
  629.                 }4 k' o8 P5 v# l3 n
  630.                 TranslateMessage(&msg);$ r/ w4 l' `; g0 L2 J
  631.                 DispatchMessage(&msg);9 X8 m0 l: t0 I# G% v
  632.         }       
    6 k: ?2 ?/ o, I5 l
  633. }
    , x$ S& t8 \( G3 _1 N9 [
  634. ' I* j  P' B# o0 u% m
  635. BOOL bFirstChar=TRUE;0 e3 c" I2 `9 M# W: F
  636. & E0 ]7 h3 I/ u5 m; U
  637. BOOL CRevAppApp::OnIdle(LONG lCount)- I% j6 ~. x. ^/ ~
  638. {
    . [' W% g2 @% y
  639.         // TODO: Add your specialized code here and/or call the base class1 [' ~. ?* g6 H  d* g( x. m, \
  640.   switch(dwProgramState), p0 Q( W. }, h) b- H# s
  641.   {' \, \* [  M8 s- z+ T0 T
  642.   case AP_NOTHING:
    ! ~$ A: y6 Z2 p# i
  643.     switch(dwStartUpSteps)
    ' ~  n' W- h0 [9 v6 d$ G0 N2 g
  644.     {, q9 p* v! ^4 k5 A% ~* Q
  645.     case 1:
    ) I( s0 M7 {* `# {5 z
  646.       {% y, w5 Z& ?$ {3 c9 F
  647.         int i;) }. K- M: I8 I$ @$ [/ V2 r2 L
  648.         CDC *pCDC=dlg->GetDC();  H' M/ N: S# h) K4 L/ o
  649.         HDC hdcwnd=pCDC->m_hDC;% Z1 \. M4 d! l9 a' A! V3 M
  650. //        Graphics graphics(hdcwnd);7 N9 s5 a* V- V0 F4 O! |7 |
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    0 r0 k3 E- n5 c2 Y3 e& z
  652. //        INT iWidth=bitmap.GetWidth();
    * K6 H# N8 c3 Q8 U4 E3 `
  653. //        INT iHeight=bitmap.GetHeight();7 T/ `( Q6 ]; d& \
  654. //        Color color,colorTemp;
    ; I  _% Y7 h# b4 H8 |" \( V9 z# M
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)& \) k1 Y. L* ~6 E* S( C( i
  656. //        {* a) f* E$ w$ ]
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)4 j: H2 S. @6 H' }
  658. //          {, n" _  K# k" o0 S9 C
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 Z! {/ d9 S! K) X. B
  660. //            colorTemp.SetValue(color.MakeARGB(
    0 I; E# Y# K2 \% t* B- r9 F
  661. //              (BYTE)(255*iColumn/iWidth),
    ' Q$ q6 R8 P- P4 E% h+ `
  662. //              color.GetRed(),
    4 p3 z  o) w& ]7 j; l
  663. //              color.GetGreen(),5 X5 O- l1 Q- U3 o
  664. //              color.GetBlue()));
    # C4 d/ ]1 Y8 R! ~1 c+ }7 A
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);. n) O" N* j; i. }# K/ A0 Z
  666. //          }
    # T3 ^; u% f+ |; F6 B* l6 i
  667. //        }. r, Q: G0 `0 R! A4 r+ H& T+ b$ s
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);7 W, L% K" m& b4 N* R7 [! s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ q& ^& ^% H9 {9 l, ]1 V
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 _. q8 e' h3 @( f  J$ ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 l+ x5 _! s/ i& a
  672.         for(i=0;i<240;i+=8)) L( |" X) g- ^
  673.         {
    , I# @  s* i+ y! I; o. d* w
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : B% v+ v2 r& y+ J& L$ `
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 f- F% b/ Y1 g8 _4 ?! t
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    7 Q: ^. R- p8 a- r/ T
  677.           Sleep(33);  o" w) }6 \5 q% O- `+ D9 O5 e
  678.         }
    ' T% I- }" B$ o
  679.         Sleep(1000);
    8 M/ l' `" E! z* _0 v
  680.         for(i=240;i>0;i-=8)! P. X) Y. C- k, Q$ Q0 I3 O
  681.         {
    6 T. _) t: D! ?8 g2 |
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! o5 O8 k0 X- t
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 Q9 o. v6 A3 H' w: X
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);4 V: C3 h% p/ e. R
  685.           Sleep(33);7 `* p: U: g# u. Q# N" [
  686.         }
    5 k" \5 [+ s; j: K2 R
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);. W- ?% z1 p7 Z$ H0 j
  688.         dlg->ReleaseDC(pCDC);: D1 v) ~- W4 b  F9 m
  689.         DeleteDC(hdctar);3 R& m$ j: t/ A, ^' ~
  690.         DeleteDC(hdcsrc);
    : o4 s* m* p% ]9 q3 {, N
  691.         DeleteDC(hdcorg);( h6 T' o8 _3 y# ]+ w  e' @  n
  692.       }, `. p& s3 S% I# ~3 d
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 y1 i) F: @( h. H. l  r
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    1 m" [9 h4 ^, o6 ?8 T. Y
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 |" _: y- N- V0 Y9 T1 h4 b
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");$ E/ Y" |4 u- U( z9 U! o$ o4 X1 @7 l
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 j6 r$ I  A8 i
  698.       if(!Dn.Connected())7 r8 j( ^0 p( Q/ r7 T8 K
  699.       {
    ( M  p$ f+ i* X; }/ S2 f
  700.         dwTotalFiles=1;8 j; Q, d, J0 [  l
  701.         dwDownLoaded=0;
    2 N# j0 R8 A! l# g/ B  ]
  702.         bSilentStep=TRUE;3 r" m4 {0 @/ }8 W( e+ x
  703.         bCompressed=FALSE;
    : D+ }( ]% `+ `# j
  704.         strExtLocal.Empty();
    + n) M* M# B6 Y/ ?( J" O+ c
  705.         strFullName="readme.txt";
    7 z4 T) C! \0 Z
  706.         dwProgramState=AP_CONNECT;9 [0 ?6 v6 l* K" V7 X) J6 G8 C
  707.       }
    6 C* P, z$ t9 n8 r5 |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();. j& ?! l& P! o# `7 O
  709.       dwStartUpSteps=2;3 m& ~( q; o6 ]  l. j6 T
  710.       break;
    & C/ s. C( P3 n; r! p7 y& ^
  711.     case 2:9 l4 G$ O- |- W" q9 p2 B
  712.       {7 o5 B6 u% H5 {4 }( p
  713.         int iEOF;
      q7 Y1 |2 x7 z: Q& f* f) T9 ^/ T
  714.         FILE *fp;( l8 S% X9 p: r* E: y. D: J6 J
  715.         char szString[512];) u% {& K, L( k, n. f3 I2 w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");! p& N5 T) f1 ^8 Y
  717.         if(fp)- [8 f' {" D: t' L& N. P9 |
  718.         {
    , {/ |# F/ j* q, y- V, N- p
  719.           do7 ^& Q) f, Z1 [+ P
  720.           {
    5 Y2 }( a0 y. v* q9 L% l' \9 _
  721.             iEOF=fscanf(fp,"%s",szString);, B/ Y6 l, e' o* {2 r% j
  722.             if(strlen(szString))
    4 U8 |" L9 G# W
  723.             {" \- G' Q9 _# N8 U
  724.               if(bFirstChar)
    / }2 B& v9 J) v' g
  725.               {
    # U: C$ D) C; R# V  d7 w7 M
  726.                 bFirstChar=FALSE;( f0 Y/ m& F5 \) }* c" B; |
  727.                 bConnectIsBig5=FALSE;' S3 P% ^3 R4 i8 `  h
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;: M0 I/ F# \/ J
  729.               }9 D. t( V7 N- V8 e
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));- T# Z/ Z$ o" x1 f6 z# ^) k! l8 W
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));! a/ O8 n: g: e/ e5 m7 E5 M6 F
  732.               dlg->m_ListText.AddString(szString);
    - a) b; c4 E  {
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ G$ B0 ^8 d2 s( P
  734.               *szString=0;
    ' f* v. L, I1 T4 n/ c
  735.             }; B/ N% ~# P8 u5 P; I
  736.           } while(iEOF!=EOF);
    , D4 {) o$ C1 A' L) ?! C& A: j
  737.           fclose(fp);6 E" X) ~# L! z! Q6 v  {
  738.           unlink(".\\DownLoad\\readme.txt");
    " D: {' Z) ]$ I) ?+ Q5 ?
  739.           dwStartUpSteps=3;
    : d! I0 ~, t4 }8 i
  740.         }3 v5 M: S) q" R6 w# h# `
  741.       }
    5 F/ E3 v  v$ [6 W- }" I
  742.       break;8 a1 h" K- l5 s" V1 A: g6 [
  743.     case 3:- v# E& @+ M% U9 b
  744.       if(!Dn.Connected())* Z# v: H- i1 U3 _, }8 X
  745.       {
    1 A# d+ L' T: y' P8 n
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ' A$ G7 T4 D5 ^0 N- v
  747.         dwTotalFiles=1;
    3 O$ b  f: @( \" y6 i; u
  748.         dwDownLoaded=0;
    . c$ |$ q$ Y. ~; E1 Z' i1 S
  749.         bSilentStep=TRUE;* {% c6 o, p4 X9 g# H% X
  750.         bCompressed=FALSE;
    " M# }* c* m- `9 _. c
  751.         strExtLocal.Empty();
    - k0 s! O3 K- R: m
  752.         strFullName="checkversion.txt";
    & l( b) W% X" R) Y2 r. t
  753.         dwProgramState=AP_CONNECT;
    5 T" u( n8 o: S2 `
  754.       }' |/ `% w0 w9 u# C8 ?) a8 S6 O
  755.       dwStartUpSteps=4;
    : O1 R8 y( F3 n" D$ T% j; ^
  756.       break;  {2 n, @' q7 E& {, g
  757.     case 4:
    6 E- f/ R8 i& C+ P
  758.       {% s1 y- f- F& E: C* C6 S  |
  759.         FILE *fp;7 D; B$ C8 w* N$ f4 G1 W
  760.         char szString1[128];' Z* w# k, R+ E  t, ~. k- r
  761.         char szString2[128];
    $ Q2 c3 B; x4 r1 F9 k* |
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    4 ?3 T3 @. y4 @4 m9 E- d0 r) m& \
  763.         if(fp)
    7 I3 y% R; q) J' n' N
  764.         {
    8 S. a( K1 }- l. X
  765.           fscanf(fp,"%s",szString1);
    " w, c4 m2 ?6 d2 j2 _
  766.           fclose(fp);) p9 k2 \2 E3 E% o
  767.           fCheckVersion=atof(szString1);9 ^1 t' P, S7 [3 ]: W
  768.           fp=fopen(".\\checkversion.dat","r");$ O; r6 m0 U+ o) ?7 I% b
  769.           if(fp)
    % x: `6 {* Q4 U  M6 O: q. O, W
  770.           {
    . I/ a* y# }" w5 U0 c( F
  771.             fscanf(fp,"%s",szString2);
    ) Y0 }4 D/ M1 t' S& o& d
  772.             fclose(fp);# B6 [" C+ w. V) R# b
  773.             if(atof(szString1)!=atof(szString2))
    " x) a+ `2 @. y4 p9 h% S
  774.             {+ a9 M. h( g- o7 R9 ^: {, l/ A# W* ^5 k
  775.               if(!Dn.Connected())+ D. J0 p$ S2 w
  776.               {
    4 H) c( ?1 |" W7 s" W2 L
  777.                 bFirstUpdate=TRUE;
    ( m- }! Z* R4 f% P3 U
  778.                 dwTotalFiles=1;" y' p% Q: m0 g" Z+ ?
  779.                 dwDownLoaded=0;( Z5 d2 P1 o- k+ v( R
  780.                 bSilentStep=FALSE;
    8 @* z  W5 t; I3 M; K7 l4 h
  781.                 bCompressed=TRUE;& z' y* a! u  G1 \- U/ G
  782.                 strExtLocal=".\\DownLoad\";
    % f0 p* _2 ?( R) T2 o) ~
  783.                 strFullName="update.txt";
    ) g+ e; ~' C; T) i. j/ |6 T4 e4 b6 J
  784.                 dwProgramState=AP_CONNECT;! N7 M2 v/ ^! w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 W% x, a0 v* J! j7 N
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: H9 Y/ k! V9 B4 y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # H. M; u* G! V2 s
  788. ; R- {( a: J* Y4 @0 X
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);* h# R# i& H4 T- K1 \9 O8 a
  790.                 unlink(".\\DownLoad\\checkversion.txt");) N7 Z( I% q( m: Z8 l
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    9 ^8 O. V) \) |8 P
  792.                 {# g2 j  H# U- y, X/ k" [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ! W# c, @4 J9 `+ q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");2 Q+ \8 c, d: `& R2 V( V9 x
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");1 F+ h; L" u% t2 @4 n
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: ?) C2 \/ }* m/ A' _& C

  797. 6 m4 s1 }, i. j4 ~
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");$ N( x* l$ L) ?( \9 k
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# \" U' p! N$ v3 c3 s! e! n. _- \
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    : O. x0 m* A/ Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' ~4 Y5 U# I4 I+ H' e: n
  802.                 }3 t5 @6 r; K/ u7 q& s9 i
  803.                 dwStartUpSteps=5;6 i4 S6 }. ]" H5 C" j. D
  804.               }
    ) R: x5 ?7 s' ?% l9 z
  805.             }
    # T6 n0 P' o5 Q5 M8 s
  806.             else3 F" F" e% C- G1 i# i! A' G/ T
  807.             {9 a* i3 i8 g  n: d1 O! b
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ; P+ m; F& a' ?7 z* x$ {* e
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ( i) X! O" e- \. L: X) X$ F; ^" r4 @
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ ~; u5 l; i& s/ w# `3 b5 h7 L
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( l& d/ S* x: _5 v

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

" Q; ~4 D6 I* k4 l. B8 Z
3 o* ~6 R$ ]  m6 B: f+ v& y

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-3-10 17:52

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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