CSUpdate.exe源代码

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

' V4 n/ v; t' l/ w$ ]) c$ E6 `
  1. / RevApp.cpp : Defines the class behaviors for the application.9 w2 U3 Y% Z( @
  2. //. S& Q  e8 E8 ?  |* i

  3. - h6 q+ G1 A) i5 Y7 X1 B& N0 z
  4. #include "stdafx.h"
    4 t" ]) T/ T& M! ?/ i4 ]
  5. , c! |2 B5 D) Q
  6. //#define UNICODE/ P# M- T* N8 F, O' [. Q& O2 {
  7. //#include <gdiplus.h>
    : C$ o2 E1 a# P4 H6 w; U4 U9 R$ s
  8. //using namespace Gdiplus;" N/ }% H- l/ w/ U/ l3 N- g' M

  9. * j  R: ?5 ^5 \# J: }2 @" h
  10. #include "RevApp.h"
    % f3 [8 {* M6 W) X8 C- L3 {0 t
  11. #include "RevAppDlg.h"; X6 }4 K8 S. P* p0 E- j6 I: H
  12. 6 O* A$ I: c1 \& |- L
  13. #pragma warning(disable:4786)* }* Z" U9 i8 x8 C% p# p& s
  14. #include <map>
    : y/ E& g4 r" e4 d$ |; x5 V
  15. #include <list>0 u  }8 f: E6 D6 B% p
  16. #include <direct.h>
    1 Z" ~) k! f. |

  17. ' P* V' d4 g0 @$ v- k' U3 k" H
  18. #ifdef _DEBUG; j/ H/ y; E+ U, {% l
  19. #define new DEBUG_NEW
    5 I  q: ~! [# M1 ]# p- \
  20. #undef THIS_FILE
      T% D0 x; Y3 Y
  21. static char THIS_FILE[] = __FILE__;  O; g8 i) E4 H
  22. #endif
    . ~  D) S' g; j4 L+ {  n
  23. #include "SkinResDef.h"
    9 t; ~- k' p, h: ?& S' _- ?2 P. m- q
  24. #include "ChangeBG.h"+ s0 A/ a8 |3 F0 ~# y
  25. #include "AFXINET.H"
    1 }( i6 U! X  B- _6 {! C& z" P" |

  26. " \4 h- z/ P& U) L! o4 O
  27. #define TRADITIONAL_CHINESE 0
    6 P1 r5 X% `/ C, A/ Y2 M
  28. #define SIMPLIFY_CHINESE 1  ], M1 [, J  H% x; m6 s3 m
  29. #define ENGLISH 2& U' B# y3 n/ l9 M. w
  30. int m_iLanguage = ENGLISH;- |) ~; ~* X0 |7 @
  31. /////////////////////////////////////////////////////////////////////////////
    5 G8 l) b4 J3 a0 z& C1 M( X+ O7 x. M
  32. // CRevAppApp; ?& |* A/ r: O, m4 t" P4 e
  33.   O5 b, U# v" _9 k, E6 I: m9 H
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ; \* L8 P, j; ~  X' n
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    / g$ J  D8 c' P: Q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    % `. s  L# z) G3 a8 Y" q* |
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    8 t4 N' N) X5 F9 C* n
  38.         //}}AFX_MSG
    . Q7 e" R4 j" R/ G# V2 e
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    # g, P/ y: z8 `
  40. END_MESSAGE_MAP()
    * Q+ W6 ?; `' e- l# m0 P+ ~
  41. 0 Z3 R4 e; f$ P! p' T3 m
  42. /////////////////////////////////////////////////////////////////////////////! x: q0 {1 y% e
  43. // CRevAppApp construction
    7 x3 h! g( B8 V( ?7 d+ @# J7 E
  44. # o; [% p: O+ S: h- m/ h8 J' p! ~
  45. CRevAppApp::CRevAppApp()
    ; Q, t5 h7 X. V. P) I9 o
  46. {! p0 B( ~- k5 d! _7 B  Q
  47.         // TODO: add construction code here,
    1 l$ Z& i2 e/ p% a  J" y9 M* l
  48.         // Place all significant initialization in InitInstance* K2 m; Z9 ~$ e' P" R% n4 R; d, v
  49.   bDisplayIsBig5=FALSE;  o- T4 K  ?: B5 l. G$ Q
  50.   bRestartUpdater=FALSE;
    ( G+ b7 A, d/ y4 P! V
  51.   bFinishUpdated=FALSE;# u2 \, Q0 Z5 @. U+ h- E
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;7 M$ e9 K% R, _# B
  53.   InitChangeDataBig52GBKS();
    % ?0 t& c. R  Q% R* @
  54.   InitChangeDataGBKS2Big5();% ]' \3 X4 j4 }4 v0 `2 E
  55.         //
    / }5 U5 |. D+ D. X
  56.         bClickRunExe = FALSE;
    . Y+ L- p+ h' h2 B
  57.         //6 K) h% P1 }  ^2 B
  58. }
    8 e9 }& @( Z. k
  59. * |. i1 N- n9 m8 R9 Y6 ]1 m
  60. CRevAppApp::~CRevAppApp()
    " G% B7 k( l4 D8 Z8 Y
  61. {  H+ L+ Q4 Y; W/ J1 W/ z7 C
  62.         // TODO: add construction code here,
    5 T! T0 f& S2 u4 L
  63.         // Place all significant initialization in InitInstance2 N$ q/ _4 k4 v$ Z- L2 T! j
  64.   EndChangeData();% W" t. f2 W; y, z$ T( @8 S
  65. }
    + c6 c, P$ x) d/ c) C$ [

  66. 4 O4 k0 k% g. f- X( h
  67. /////////////////////////////////////////////////////////////////////////////( u9 V; V1 m6 Z* J
  68. // The one and only CRevAppApp object
    ( ?+ [9 K% t, P$ b4 t) r* U
  69. ) L+ M% V% h# @& p
  70. CRevAppApp theApp;
    * t2 L" B  @3 `- b* i! N! P# K
  71. ' w" V9 }5 y2 A- k9 U
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)7 n% ]; h( J" Y6 C. B
  73. {
    - d3 @' ?  J, c' f8 P# s
  74.   int iEOF=0;8 e8 e- T* s' G% q  n9 E- Y, s
  75.   char szTempName[MAX_PATH];, ?0 w; d- W: B# y! P" y
  76.   *szFileName=0;; _9 _" ^  T+ x
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 B& ^! L8 S" d: Y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')2 M1 \% W2 ^+ H9 h
  79.   {
    0 m! {8 l- l( D4 S" o3 F
  80.     strcpy(szFileName,&szTempName[1]);) D" m, M( u" G) n9 |( n3 A5 ^
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    2 g1 v: }- s; n% ^, m, _
  82.     {
    0 @2 z2 ]4 }1 P( O* v8 L. @
  83.       iEOF=fscanf(fp,"%s",szTempName);
    . u8 b# c* B& ^. p6 [0 H
  84.       strcat(szFileName," ");5 u1 G2 S  O& c+ D
  85.       strcat(szFileName,szTempName);6 j! M4 U# h5 F4 A( P2 u1 G; T
  86.     }
    8 X2 D: a% g. _. d( W: R" e
  87.     if(strlen(szFileName)>=1)0 c* p- U, W  H0 B/ K2 S2 \" b
  88.     {
    ' V# A9 S' `( r" C! Y9 U; ?
  89.       szFileName[strlen(szFileName)-1]=0;6 c9 K1 T' E* e) F2 q1 [3 a
  90.     }+ E8 [9 N* R% c/ K. ?7 p' b) W
  91.   }; K0 d" Z2 ~. M
  92.   return szFileName;" ^* Q, }4 p! k7 V, G. [
  93. }
    " U+ [8 N9 V/ v5 Z# J) z

  94. ! q, {$ {& D: N( B& ^, R
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile): i1 H: W. y' g* {, c
  96. {
    % T" e1 J$ M( O6 m2 W! [* Q
  97.   FILE *fp;% V" l. J5 t3 |) o; r* A( t
  98.   char *key=NULL;
    9 o% ~; p0 H+ G- M- }
  99.   char version[MAX_PATH];  n( B# O# ?% }" E9 A
  100.   LPUPDATEFILE file,olds;
    " X! d& B. G) U' z* O' Y
  101.   std::map<CString,LPUPDATEFILE>::iterator p;6 O6 \' g- \6 ]. r8 H# ]

  102. 4 J- \% G- g" ^8 T! a; }/ V
  103.   UpdateList.clear();
    % l: `0 j* w# ?: q3 F7 ?
  104.   UpdateFile.clear();$ `. `, K" f1 D& {7 ^
  105.   if(GetFileAttributes(filename)==-1) return false;% Z6 g7 [5 b4 Q5 `6 p8 f; U
  106.   if(!(fp=fopen(filename,"r"))) return false;
    " r* R' Z+ X+ W* `6 @3 x. E( v& k
  107.   fscanf(fp,"%s",version);
    ' W. P/ f4 A8 ^$ H  i; z$ h
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    9 E% q# g* k) [+ L8 w8 w
  109.   while(fscanf(fp,"%s",version)!=EOF)) A5 [6 Q6 d9 i4 r
  110.   {9 U$ @" Q% v4 x% P  h8 o& k3 F9 v6 V. y0 W
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    6 f+ D) s" W' C* {/ O8 V
  112.     fscanf(fp,"%s",file->path);$ N* v7 F+ F* |  X+ _( |* e9 Z# Q
  113.     ReadFileNames(fp,file->file);
    9 ^- Q. t, c$ R
  114.     strcpy(file->full,".");' J7 i: z- X5 c% G! W8 J
  115.     strcat(file->full,file->path);
    7 [5 J$ Q( k0 X7 a  C
  116.     strcat(file->full,file->file);
    / _6 v/ S" o5 ~  _0 P
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    4 B8 ~% F+ e9 T
  118.     {8 ]8 ?6 p, V0 k! g$ H3 c& ^
  119.       file->vers=(float)atof(version);
    0 ^" F! F7 E7 B2 L; r
  120.       UpdateList.push_back(file->full);# a7 ?1 E' j# P% u- |# f/ L! m/ t
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    , C1 R' {6 a8 y% Z' a
  122.     }$ L) G/ m: ~7 v9 b* Y1 n
  123.     else
    - D( _2 p- a! L9 {) l- V: D8 F
  124.     {
    / e( r' V; t, b, t. t0 q' L
  125.       olds=(*p).second;7 u& T5 V' c' }3 A) X) g
  126.       if(olds->vers<(float)atof(version))( L! |, S; H. Y! q; s7 A8 U8 H
  127.       {) D* k" H0 c' i: Q: Y, {% h
  128.         olds->vers=(float)atof(version);
    ) h2 w5 W4 D0 a/ E3 H
  129.       }$ f1 T4 k& |7 L% [# r* G
  130.       free(file);
    & m; [2 [$ h9 J* g
  131.     }2 b' g$ c8 `7 F+ D
  132.   }
    & |' Z! S6 d, T2 Q
  133.   fclose(fp);
    # l& t) d( e; V: q( W3 `/ X
  134.   return true;
    0 O$ e* a4 I+ G- A
  135. }9 F# L; \, j- K* `+ x
  136. + S; A2 t1 ^  n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    + O3 z" L  ?9 k7 S
  138. {, L8 s  L7 c9 {, j8 t0 e# v3 G. T. N
  139.   TCHAR  szFull[MAX_PATH];
    1 d' W# l; z- e4 b# W+ ^6 c9 K
  140.   TCHAR *token,*inter;1 r$ d! \8 ]3 V' v
  141.   *szPath=0;/ k3 `2 m- J) @& G( ?3 Y$ \: ^
  142.   strcpy(szFull,szFullPath);
    ' T( X" k+ j+ k8 u: C
  143.   token=strtok(szFull,"\\/");  T9 P* o' u/ T
  144.   inter=token;; ^+ ^6 u# o1 S  q- C5 v
  145.   while(token=strtok(NULL,"\\/"))
    , ^$ y3 p/ _6 P. `4 m$ P
  146.   {& [) _! c6 T6 d& |( ^9 D" R
  147.     strcat(szPath,inter);6 B8 d& \7 L8 H/ i- Z7 f
  148.     strcat(szPath,"\");$ d% f' N" C! Z9 i( u$ L6 `% i
  149.     inter=token;
    ' @' [' z$ F' ~/ g- R
  150.   }
    ! d: t: D! i' M: T. j
  151.   return strlen(szPath);; Q+ V0 O" A* G# z. b& N7 L
  152. }
      Y0 ~0 I) m1 v* B- {

  153. % J: f& a# W* ?
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    9 i- q1 N; z! O" I+ j0 ^9 I$ [! _4 S1 D
  155. {) {! j; N# Q: h
  156.   DWORD attrib=GetFileAttributes(Target);
    * Q7 Q1 Y! n5 h( k
  157.   if(attrib!=-1)6 f- i* b2 J  D* Q7 N% c
  158.   {
    3 L" q3 ?, J1 Y' y/ c0 a/ X; c
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , R  o( s9 U6 c7 T, V7 \
  160.     {2 C' X! H( [' Q9 V
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* g" @5 A4 ]5 g9 q/ K, c
  162.       SetFileAttributes(Target,attrib);" `4 m# L4 ^1 o$ T' G# l  y8 q
  163.     }' N* Q; w3 Z% [# c# j$ G% J( Y
  164.   }
    % K5 k* j7 @2 d: T" D/ k$ n4 s
  165.   CopyFile(Source,Target,Erase);
    + Z0 j$ C4 I$ a. i0 Y
  166. }
    9 \+ O: h  ], _6 O  N- q# x1 P* `
  167. : {/ X2 h, }( V. n$ w* C
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)# z$ v9 [4 |( Z% _0 j9 Q, H
  169. {
    9 V7 V  J+ C$ z4 g
  170.      FILE *fp;& ^# h0 {" E' A
  171.      char  szBuffer[8192];0 h0 u. Q( {: q8 P7 o( S3 L
  172.   va_list  argptr;
    1 c+ C* C1 Z) d
  173. 9 g, m% L# k% P" y8 E
  174.         va_start(argptr,message);/ t+ U2 D! p; E
  175.         vsprintf(szBuffer,message,argptr);4 I+ X/ b* {5 D* G- b# P9 b5 m) `( z
  176.         va_end(argptr);% t9 Z. |  S, j" B9 ^; z8 K
  177.   fp=fopen(FileName,"a");8 W* b: \7 f3 T5 u) ]& ^" s# i
  178.   if(fp)6 e+ i0 t( y- c. ~. r: P9 V9 |
  179.   {8 N1 G1 m+ u- C' N- N
  180.     fprintf(fp,szBuffer);- |! W; l4 i$ k6 B$ L2 U! i
  181.     fclose(fp);
    # r: @: K, X6 ]! v& v' y# g* z
  182.           _flushall();7 z% I  W; d* C
  183.   }
    ; @! r7 n$ f3 x3 |' k
  184. }
    5 _  z2 t& U& c- i
  185. 6 [! C& w6 [; ^( I% @7 I' m
  186. BOOL CRevAppApp::Fclearf(char *FileName)/ H. X1 w5 Q* o8 M
  187. {/ u3 A; v; \9 v
  188.      FILE *fp;
    4 Y! D& O# ~5 i/ |
  189.     DWORD  attrib;1 `6 J1 {8 q+ K0 W# F) W. t. n0 ^: ?
  190.   attrib=GetFileAttributes(FileName);8 W, q1 f& ~, |
  191.   if(attrib!=-1)
    ' G; c( o3 Q' i1 `7 G! a$ s& l( K. F
  192.   {% i4 j+ k: r) e! z2 |7 k6 M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    5 i4 O$ a. O- g
  194.     if(!SetFileAttributes(FileName,attrib))
    - a# j! x; R+ L/ T" p- w2 s
  195.     {7 t" @4 k& _6 v# ?/ o
  196.       return FALSE;$ x6 ]3 X' k! V  @' o. T% f
  197.     }5 `1 M$ F9 h, ~
  198.   }
    2 b* B) Q' ?" m# {
  199.   fp=fopen(FileName,"wb");. n. a" ]3 v2 {$ R+ c4 R
  200.   if(fp)
    ; a% T# V$ J3 [# K/ k* f" [* ?
  201.   {) t9 N! i0 K' u# j3 h( U. u
  202.     fclose(fp);
    7 O/ l& {2 J0 R
  203.   }- _$ R  {% d5 M8 O
  204.   return TRUE;" w5 g1 |5 Q0 }
  205. }
    - j. N3 {2 D/ F4 ~& u, L  ~

  206. & b' Y  t9 v& F9 x: i
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    $ p+ J9 n% {; ]$ f' ^
  208. {
    " M5 L* A* r' S' p+ A
  209.   char filename[MAX_PATH];
    / E) ~2 L: |7 S7 F; g! e
  210.   LPUPDATEFILE file,olds;9 A+ I" V3 X( i+ \  [0 @! y
  211.   std::map<int,CString>::iterator i;6 A  V1 v  z: q2 z* ^" g) q1 z
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 v1 R4 f+ e3 E. y9 |" B$ _3 i( P: T
  213.   std::list<CString>::iterator l;
    # @* u- G: C! }% o+ r4 w4 K
  214. & n5 ]  Y$ F4 e1 |2 t( K( U* {- }
  215.   if(bFirstUpdate)4 q- H6 ?: O) S, O% T) m
  216.   {$ Q6 Q( [" N6 c- ?& l3 Z( W) ?
  217.     dwCurrFile=0;
    4 }, `5 \' J' L$ v# B* l
  218.     bFirstUpdate=FALSE;
    / U* J  i; S$ y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 {! R) e6 n) E2 q" q# N( [) c) c
  220.     {. s2 z7 U; V* p9 D3 g9 l' q& N& M$ O
  221.       dwTotalFiles=UpdateLocal.size();- V3 v6 m# ]3 z0 _% c8 R0 }
  222.       dwDownLoaded=0;- x# }! A+ X+ s; a% Q7 U- G% `
  223.       bSilentStep=FALSE;
    $ ?) @3 U) M- O2 _! ~* z+ d- l
  224.       bCompressed=TRUE;5 T9 V. `) v6 Q/ j0 X
  225.       strExtLocal.Empty();( m- Q( P# ^  }$ l0 E
  226.       strFullName=(*i).second;$ C, g9 F  \8 |
  227.       dwProgramState=AP_CONNECT;
    / X% _1 ^0 o. q5 i; J
  228.       return TRUE;& [5 |) n( D0 H1 u5 L+ k7 ?
  229.     }
    ( p, B* E2 r6 B& D
  230.   }( u: _; D( u2 \5 a! ]" a
  231.   else if(bRestartUpdater==FALSE)" W  p; p2 b5 P
  232.   {, ]1 R$ b& t0 `/ c9 l
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 S6 g% v. \. a! ]
  234.     {
    5 Q5 f9 v5 V+ b- g3 R) \
  235.       file=(*p).second;
    1 R  c) F( c( P) k2 Y+ e
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    $ K7 G# P* D% d8 o
  237.       {1 X& y5 e! W5 m$ h( d1 z
  238.         olds=(*p).second;+ ]4 u  y* T8 t9 {+ `; D
  239.         olds->vers=file->vers;& P% t) d( W9 E; F( E# ^0 Y, l
  240.       }- C  l7 `% C( `5 X
  241.       else
    & D( T* h/ R1 g
  242.       {
    ! V6 Q3 E( M1 L5 Q* r9 ?! D; W  G( a4 q
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # G6 l% b+ h3 D
  244.         memcpy(olds,file,sizeof(UPDATEFILE));. G2 |+ Z. A8 J3 ~1 w7 X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));3 W* R% t* D/ I' w7 C: o4 B! ?
  246.       }( b9 U( r8 R, d' M# u1 J( \6 Y& a0 d
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
      s" w/ U. n6 \6 g8 ~3 r- s
  248.       sprintf(filename,"(%s)",file->file);
    3 o! r5 C6 P4 t# h1 M( {' B
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    . H8 s9 v3 ^) j# s* M9 |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    5 v% h' k6 L) T9 N: I* R: p
  251.     }) y. {  i! I3 O$ r9 e; E
  252.     dwCurrFile++;
    % T* o3 U+ O  g! Y1 ^' |1 D
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 X3 s1 |  {* P# b8 m" O
  254.     {
    / x; D% v/ j+ l% i6 m
  255.       bSilentStep=FALSE;
    9 t& [' b9 h5 I( `6 W4 E
  256.       bCompressed=TRUE;/ W! G* ^) g0 w6 T
  257.       strExtLocal.Empty();7 F1 x7 W9 x- M% f. I7 z% d6 k$ p
  258.       strFullName=(*i).second;
    9 r$ A) w& H+ X$ k: t' J
  259.       dwProgramState=AP_CONNECT;
    . x. T4 d) f! R( r& h1 i; g
  260.       return TRUE;
      A" a( L4 A0 F( E. S
  261.     }
    / e6 Y$ B4 P. F1 Q$ |$ a
  262.     if(!bRestartUpdater)) L) _. B9 A" m: y
  263.     {9 k2 p# G1 d2 Q
  264.       int iCurrSize,iFileSize;
    6 h- O1 z. m" x7 E
  265.       iCurrSize=0;
    $ V5 X: q7 l8 f2 w$ H
  266.       iFileSize=UpdateList2.size();. F5 O. B- s+ H) J  \6 B
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    5 S3 U# ?( r1 b
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    - H# d9 L7 C( I
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    9 l; M. c5 A0 E  [/ u
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! Y+ q. }/ R" u0 G' ^0 Z( @
  271.       Fclearf(".\\update.dat");
    + B0 C% G6 ^9 q+ E3 e/ d, ]4 n
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 P" p1 H. r$ I4 R) t- \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)/ h  m! O: h8 _/ A6 V% i
  274.       {
    8 j/ j5 H) u" l8 D
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    0 r& Q2 j. P1 [( p3 U. B9 }
  276.         {
    8 Q, V3 l+ T+ s7 ]
  277.           file=(*p).second;+ ]# x( Q9 c' L! T. T
  278.           sprintf(filename,"(%s)",file->file);( S7 J$ W+ u9 N( i  c- ~
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ F; q' {8 V& G7 S0 S$ e. X
  280.           iCurrSize++;& H! |7 U9 q" ~
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    # ]/ o+ O( M2 w. ^! H
  282.         }
    2 a! r3 u7 @3 r: L
  283.       }
    0 p. i" f9 W; |$ h
  284.       unlink(".\\update.txt");
    6 _6 H" W5 K4 b6 q
  285.       unlink(".\\update.tmp");1 q" Y0 |7 b# h3 I( I9 T9 T
  286.       Fclearf(".\\checkversion.dat");
    + @. ]' p/ ~$ s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);3 D; H, ]; b8 R5 e
  288.       if(UpdateLocal.size())
    & s5 y% n, i' \8 Z
  289.       {, r1 X* F3 a6 T2 b" u' y' I
  290.         UpdateLocal.clear();" z2 r# v; Q& V' X- B$ e& e( r. {
  291.       }+ q% ?7 [3 V+ G: X5 S9 Q; h
  292.       if(UpdateFile3.size())
    8 ^, m/ X. O3 z, J9 Y
  293.       {
    / ^3 I  P+ U7 x" e1 g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " x" D& \, \+ ?2 N9 ?. j6 f
  295.         {
    9 L- w' A- n0 D& Y2 S
  296.           file=(*p).second;; f/ p# R7 r& O# V& S
  297.           free(file);* G! i% w" V7 a& A$ L) W
  298.         }
    $ R  F  q; K3 J) t& x$ g
  299.         UpdateFile3.clear();9 I, x2 d+ d2 K7 k% _% ?
  300.         UpdateList3.clear();6 R4 J- c- s% m: }0 ~4 S6 `
  301.       }+ V- }8 `. s4 \
  302.       if(UpdateFile2.size())" h5 I) r3 A& k+ I( ?* ?
  303.       {! U, A1 w( u% Q
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    # L# e/ ~0 b, D, v
  305.         {
    , p5 ]6 W7 Z3 p# g
  306.           file=(*p).second;
    4 O, p0 B7 |# V4 ^! T4 v+ O
  307.           free(file);
      g7 a$ U! o8 c% v. W/ {# B
  308.         }
    . v+ u2 g& u3 h. V+ ^2 O
  309.         UpdateFile2.clear();
    - d/ b7 E8 A, y5 [) Z
  310.         UpdateList2.clear();
    1 ?( H4 D3 ~$ }1 q0 q6 ~- j3 {" `
  311.       }
    9 W! E, E" J9 ]; ~6 i" l
  312.       if(UpdateFile1.size())/ O# e4 I7 }+ n! Z- ^0 W- w5 G3 P1 F
  313.       {
    * A5 V5 i* q3 J& L0 J! c  f7 r
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++). a0 ^, d: [* Z
  315.         {) Q2 N& z7 n% m8 B
  316.           file=(*p).second;
    " Z, E/ K3 W/ g/ e3 f
  317.           free(file);
    ( i! C( X+ {/ A; J; r( l. q. M
  318.         }
    * c' Q0 v6 l- P) z) v! A6 R; `  A
  319.         UpdateFile1.clear();
    ' B( K$ S' O* f$ D% H7 t) E
  320.         UpdateList1.clear();( T! ~1 A9 w! F5 p) S
  321.       }
    ! g( u  ?7 ?" x7 z* o* m  c+ k
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));( [" T* i" N. ~
  323.     }
    8 A( N* S# i+ ~4 n1 A
  324.   }
    7 E6 O+ C/ M& @7 `9 A9 ^
  325.   return FALSE;
    7 J% M2 T4 n+ b' H+ }
  326. }
    ( ^- o9 S( ^, e" `7 u! D' a( a
  327. ) v9 V5 ]6 P* G! L$ _
  328. void CRevAppApp::ClearAll(void)
      U+ S+ b. ?5 f: o4 R; I  W* `# I
  329. {, W$ Q. I' N. m# S9 \, l6 z
  330.   LPUPDATEFILE file;
    6 Z" k; l9 x8 ]9 D/ U" X3 B
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    / x: s, m( x" C( }3 i  x$ ]0 E- O; ]

  332. 7 q% g8 B7 k- l" y$ ?7 W# ^7 C5 i
  333.   if(UpdateLocal.size())
    4 a/ X5 |; R# Z3 h7 s: b0 S( g+ O
  334.   {) `7 V1 W1 x# p; J- j% r  ?0 X
  335.     UpdateLocal.clear();
    8 c+ L4 b2 l7 i1 ^& ~+ E" V
  336.   }/ `8 b# e* I5 b, X
  337.   if(UpdateFile3.size())
    * {0 K1 e4 W! F3 u2 u/ H$ Y
  338.   {& b' U( U' ]8 L
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    / i7 [, h, b8 I2 g* g( ~
  340.     {6 U8 ^9 R$ O6 L9 D: u* P" A  t
  341.       file=(*p).second;
    , v8 O2 B) }7 e3 M% ~/ g
  342.       free(file);+ q3 d. {, e. `. E
  343.     }
    8 V( |0 \: g; g# e; C6 Y. W9 I
  344.     UpdateFile3.clear();
    - n0 Z' k# e4 g* @
  345.     UpdateList3.clear();: k; C: M8 w) k( ]! M
  346.   }
    1 j0 W1 Z% x1 u& p
  347.   if(UpdateFile2.size())
    ) ]2 P7 c& k( k1 X  p
  348.   {
    5 Q: U$ T( {/ m9 d/ Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - k- I  H/ X# Y% P/ {! E* O
  350.     {2 J/ g  m% e  t% a
  351.       file=(*p).second;( I  c! B) [5 s/ C( R
  352.       free(file);
    1 e. m+ a& {2 l! F
  353.     }
    8 A$ t" p! P. y. J# r
  354.     UpdateFile2.clear();9 E, X8 |& f" e
  355.     UpdateList2.clear();
    ; P; l; d+ F! w5 d
  356.   }
    % t- i& A) |" T6 O8 j
  357.   if(UpdateFile1.size())
    0 g) d6 D) D) l8 E) d
  358.   {- L3 R; c* X' Q0 ~( h" |
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) y1 S5 }$ k9 @
  360.     {3 G0 u3 w+ U$ s# c7 ?
  361.       file=(*p).second;( ^0 N$ o; _7 T% w& E3 V
  362.       free(file);) E7 c2 S/ H! g) R# e8 q
  363.     }# `, V/ R5 r$ u$ J4 t7 R9 V
  364.     UpdateFile1.clear();! ~5 u, c, I7 O+ d& M0 c" i
  365.     UpdateList1.clear();
    3 k' f9 H+ T* g# z5 n
  366.   }8 T( A. W; M( m9 m! V" W
  367. }  : B5 d  ]3 u+ n7 e
  368.   
    + u+ [1 ?4 L, {
  369. BOOL CRevAppApp::CheckLocalVersion(void): B+ ?3 H& M1 g0 }
  370. {9 I. `/ D7 U/ W7 ~7 ?/ }
  371.   int c;
    $ l6 H6 E: J6 @2 n4 a. Q
  372.   LPUPDATEFILE file1,file2;
    ' K, L% s6 {( f% A
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;" h% a9 Q8 L3 ]) O, m/ `+ B! d' m8 }
  374.   std::list<CString>::iterator l;  Y  }  I7 j# x( l5 e

  375. 2 |7 q! a! n% Q0 W5 h; c
  376.   UpdateLocal.clear();
    - H' D0 c6 s0 D
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    7 m) D0 Y8 B7 |# W& P* w
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);, h9 A* U( C& ]% h  x0 e
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 Z: m6 k- S5 O% C
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    , I2 g" Z% A8 N( f+ d! A
  381.   if(UpdateFile3.size())6 ]9 ]7 i6 Z, ~: A
  382.   {
    2 }" s! v* g* M
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 S) ?2 d: ?& C4 @4 m& ]$ r* }5 a
  384.     {. X: v2 P5 j5 x# M5 W; m
  385.       file2=(LPUPDATEFILE)(*i).second;# j2 Y, u9 I; m6 t, D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    ! i. o: \# \' [3 x; d
  387.       {
    . e# j* Q- I5 i) l
  388.         file1=(LPUPDATEFILE)(*p).second;' O; x; ]5 G: g) T
  389.         file1->vers=file2->vers;
    7 W# H' o# k- e9 r! E9 |: s0 p
  390.       }
    ( M$ T' ?; ?1 {1 r5 B
  391.       else
    7 n: `# v; B, u+ X( A$ F6 p# A# V
  392.       {
    % `8 m/ b' l" j: h- y
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));% h* u# x* L. v2 H/ f7 {4 g
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# Q( G1 {: E: s
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. u6 Y0 l5 Q7 c3 X8 w; f5 r
  396.       }4 u- d( ], X0 ^- k3 N# e$ ?5 R& N
  397.     }
    + g0 K: C" R  P+ ?
  398.   }9 ?( P" T8 F9 l" X6 W! u
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 }: G7 }  Z. u: l8 k  \
  400.   {
    , ~  O5 N* Z% P2 U9 |: d3 c1 q/ v
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())( k% P+ h- k( L% F( @. [! s1 w! `1 y
  402.     {
    / l; Z( U' D4 l% b! O8 a) u/ W
  403.       file2=(LPUPDATEFILE)(*i).second;
    : y( e! N# K7 s( {: V' q1 B- R5 L
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! I9 k, X6 J$ ~# e& \; c
  405.       {
    $ A9 @& L8 k) n: z' {2 @
  406.         file1=(LPUPDATEFILE)(*p).second;& C! v1 G" s. f: t- m
  407.         if(file1->vers!=file2->vers)# n9 L: N- p! O! B
  408.         {. ^% j  c7 g% \  W* N
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));3 Z( J: g6 g) k
  410.           c++;
    % ^! E& o7 i# v" m6 R8 h
  411.         }
    & C( \1 U& H6 t1 Y6 Q1 }7 v
  412.       }
    ( G6 J3 l/ M3 m- z+ Y/ {1 M
  413.       else( Q2 G2 Y: |# o* D! A
  414.       {. @+ i+ V# G9 v# F; l1 B
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! H1 }. \9 a5 \" a; V
  416.         c++;
    3 O$ ]9 G. }' i9 E
  417.       }# h' p! ~5 b4 k3 m, m. b6 t' v" H4 P
  418.     }! u- H1 x3 e; C2 N* d( C4 x6 S
  419.   }
    & z4 |) d: p* O2 U  F; c$ V, B
  420.   unlink(".\\DownLoad\\update.txt");
    ( C8 k3 V  _: R7 Q
  421.   if(UpdateLocal.size()) return TRUE;9 A0 \  C( j% O8 Y: M- u+ T, c0 T+ }
  422.   else                   return FALSE;. m( Q) Z) w+ P1 z: F, ~% _" [9 N" h/ v
  423. }
    3 j1 Q7 w; l1 s/ v5 D- y" y# H

  424. 2 }( D  n) a9 |1 U1 K( p1 d: k
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/", l1 I: e! q, S6 a2 c: m4 i% m
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"7 ~2 r- T% |: J% g. `; |

  427. 5 J9 V8 y& Q4 `0 p
  428. ; _" y0 t8 b- _

  429. % ^% ?  r0 j. g" s9 J" T
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; D7 {! r3 b: `
  431. {) g* n2 @! D" }/ A
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 u8 Y& \' Q- f0 c
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 E! j( [& b; G7 ^& w5 b4 E
  434.   {
    # }7 n) X7 B" Q# R; u
  435.     char szLanguage[50];! v3 q  F) w! ?, D
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " Z2 o  [& f- Z7 O2 Z' b4 i
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ `+ x3 `* t& b' _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;# }4 b5 M( Z2 R( _* v& j' i% G# ?( B
  439.     else                                   m_iLanguage=ENGLISH;
    ) \& i% P0 {4 n  R& U& ^. n# K9 k
  440.     char szRegister[100];
    8 j% Z; s' K0 l6 f+ P' E
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 j2 m+ M( ?" |
  442.     strRegsName=szRegister;
    1 A% J, l) f; I0 v( I% i
  443.     char szPatchURL[100];, d4 L" F0 M8 b$ \7 O
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    5 K, Y: v- \  `
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    3 z2 x: W+ s, }+ Z. t
  446.   }" q+ `& [/ v4 E. ~
  447.   else
    5 F. H% e$ v; W) R$ o& O0 B# V
  448.   {: u4 ^" R" {& }
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 M; \9 j/ f- x7 I
  450.     strRegsName=DEFAULT_REG_URL;
    : T2 R: D' }* G9 [/ }: M: ^9 h
  451.   }% n) j  C& A7 R" u' t
  452.   if(GetFileAttributes("hosts.ini")!=-1)  j; v3 M/ {* I# q
  453.   {
    1 j' L. T" O' s) r& y
  454.     char szIP[50];* }, D' ~' c* P$ @
  455.     char szDIR[300];
    " h; L% X/ q8 O) N! a8 T) L3 d6 K2 f1 d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). C- [' {, P, d1 t: o: F" D
  457.     {
    ; p) Q+ Z, i- I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 H) C0 I- s! P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 A5 D, x/ z1 W, d
  460.       strHostName=szIP;
    ; x7 _: Q9 Z9 B9 C; C) a, a
  461.       strHostPath.Format("/%s",szDIR);. {8 B$ U( |- g8 x* O
  462.     }. o+ i& K4 F6 C$ [* P0 k$ e- r
  463.     else
    $ `2 h. }+ Z+ N) u: V+ r
  464.     {
    $ k5 a) F1 Q5 x2 Z  v$ B4 k
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & P1 \( s6 K! e0 m+ v
  466.       {
    3 k1 y  v9 |* y( R5 d. q
  467.         char szLanguage[50];
    6 Z7 o" l$ p8 L: j# I7 z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");+ n, D7 H6 |; T6 B
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;! b+ F( ^) d- w5 k
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;  o/ c1 T" g# B
  471.         else                                   m_iLanguage=ENGLISH;
    # \- T# c: R8 W' Y+ V
  472.         char szRegister[100];
    + h% p+ `: }0 |9 Q+ ^, P9 {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    - ?7 H+ O# f( P" m/ L
  474.         strRegsName=szRegister;
    / K* _- f; _- f% {2 R) K
  475.         char szPatchURL[100];
    ! D0 a  a8 U( D* B2 R5 u; e' A( H
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    / p% _6 c0 p5 E2 r) n
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    9 G  ~! T' D, g% J: ^! C
  478.       }
    , z  w) D  ~  A' t
  479.       else1 B+ `( C8 D$ \8 h
  480.       {
    - D9 y; y2 K5 y5 {
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  z. L2 H  Q5 [+ [/ C$ U
  482.         strRegsName=DEFAULT_REG_URL;
    ' f0 L* y3 _' r
  483.       }
    / d( C" I* E' ?
  484.     }$ z5 @. n! @5 R# g1 g% d
  485.   }
    3 h. g7 G6 v+ _% p8 ^* f
  486.   return true;
    8 ?( V7 n5 N4 P2 o+ }( p5 b
  487. }
    & C+ G4 Q2 z- g+ J  i
  488. 5 M2 J. D- N% w1 e2 q; P+ t
  489. #include ".\ZLib\unzip.h"
    2 T1 D3 n2 P# l6 \# Y. ~, G: y) y. M; f
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);. R+ [& H  \" n: ?2 ^
  491. /////////////////////////////////////////////////////////////////////////////' q9 ~' |* c2 k; X
  492. // CRevAppApp initialization
    - V3 Y, Q: h  F/ q; O3 L. I

  493. " H9 f' Y- V( W: l, C# Z7 _
  494. BOOL CRevAppApp::InitInstance()( ~4 [* N9 U1 z: X
  495. {' q' K7 g) H0 w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ) r, `& Q' ?: Y& W
  497. + q4 ~/ Z- R2 M2 E5 s2 H8 l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);9 `) ]8 C6 z$ o( D7 p6 z% m( D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    3 f+ h1 Y3 s* ?
  500.   {
    ) d! A+ `& V3 K+ r0 W9 ?) m
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");. o& h' @5 `5 ?5 f+ Q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    4 s; c* B. T$ ~1 f5 L+ s
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 p' ^9 [: \  k0 q0 ?
  504.     {4 H, }- A  |9 c8 R, B) [
  505.       strcpy(szPath,szPathTarget);
    - b2 N$ A8 \& o& w" U
  506.       SetCurrentDirectory(szPath);
    + U6 r/ X. `/ \6 v. o6 Z, P
  507.     }) S4 K+ [' I6 i* G
  508.   }
    6 _5 ?& E* t+ S& X: W
  509. #ifdef _DEBUG/ f) R1 `8 m! L+ J4 m% Y0 o
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    . y" w$ X4 H3 U6 p0 q
  511. #else
    & |& r1 D' V. V  }9 ^. q  [. K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))5 P3 w7 H6 G8 O( H0 F6 b; l
  513. #endif
    3 g; A) o1 \8 O! n! w6 u9 j
  514.   {
      L- q0 y8 Y$ Q3 M3 ?) m5 ?
  515.     char tempFileName[MAX_PATH];
    8 k2 x9 ]' P+ N! m, G% u8 H7 u
  516.     strcpy(tempFileName,szPathSource);0 e+ ]7 C1 G- y( `' C; q
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ( P+ i$ R( D& F5 r. @  J  W' j9 b; D
  518.     strcat(tempFileName,"\\$CSUpdate.exe");0 o0 r& m% u. z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: o; S9 V3 y7 N+ W1 B# Z! P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    + x9 A3 j' ~3 [8 t
  521.     return TRUE;$ W- g( j' ^" x; }
  522.   }
    5 g/ k) K5 e3 f0 ~% T% H6 t
  523.   // Nuke 0118: Delete run.exe
    1 O' F" N6 G! X8 {) M* \& L
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    3 }0 v- F! S* C; l+ x
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");7 `5 j2 e' A$ d, Q: l  u
  526.   if(!ReadCfgFile("Config.ini"))# l" J4 b; |8 X3 C! l( ~! r- ]
  527.   {- q: O4 ~) U' B$ T8 K, z
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);" R: o7 o1 W6 l1 o9 F2 ~* e( K
  529.     return TRUE;2 x4 G9 ^/ d3 h! Q( ^
  530.   }& q" ~' R3 v: q
  531.   HANDLE mutex;
    & |6 _4 }3 n7 b
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))  {* h9 ^( N* h8 ~! z$ b
  533.   {
    * L' {) L# l- ^* `9 ?6 d+ A
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): j$ R! S3 l# K' a6 k: P3 E( O. A$ U
  535.     {
    & s& N- P; y) N. H+ B, I" G1 x
  536.       CloseHandle(mutex);
    + Q& z" r0 o5 `$ F
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);; G& L- Y4 A& ~9 E, J
  538.       return TRUE;
    4 U6 i2 f+ x0 f" ~  _5 S$ y
  539.     }, @) L2 r( J6 Y: M
  540.   }  
    - ?8 c( y" u9 |3 f) m
  541.   CloseHandle(mutex);4 i, ^) Z2 ~6 j! O* z9 i; |

  542. * q* y0 f. n5 \6 K  p/ v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);: l- J  [, {! z. D

  544. 9 o8 s% e3 Y& a+ J+ V* y
  545.         AfxEnableControlContainer();. U, {* c9 @( N0 Y
  546. ' U6 ]; d8 B/ R9 g
  547.   bCanUpdate=FALSE;
    , C6 @2 g& z: w9 u; K
  548.   dwStartUpSteps=1;
    ; U( A) Y& p' e& H7 P7 Q
  549.   dwProgramState=AP_NOTHING;1 X9 }' r5 J  ~/ q9 t' D6 l

  550. 1 h6 {( S! K* T$ b0 E
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);9 g4 {" C7 _# {4 V# Y3 }% m
  552. # o9 w. s( {, p% o
  553.         // Standard initialization
    # W% T# a7 A) X, A. |
  554.         // If you are not using these features and wish to reduce the size5 [$ a' a) D$ Z- e2 B+ g7 R
  555.         //  of your final executable, you should remove from the following" }: a( G* |" b3 p7 J1 Z
  556.         //  the specific initialization routines you do not need.
    9 x7 M1 R; G5 W5 x  V) T# ~
  557. 3 b0 e9 }+ y' R! Y
  558. #ifdef _AFXDLL
    % `. j& n0 {% e
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL2 b0 k" m* R5 w/ x
  560. #else8 n; _$ d! W4 S+ y) M  q2 s1 q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically+ k4 h$ N$ i# I8 ~1 E
  562. #endif
    " e; l  \: m7 _9 r8 y; I4 J

  563. ; b4 R% f  s. g' ~
  564.   dlg=new CRevAppDlg;+ X% U* h+ F3 x( Y3 E9 J( o3 w
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ( X& [/ q, N, I& P; w' r
  566.   dlg->ShowWindow(SW_SHOWNORMAL);' Q, p& }* h* l+ R
  567.   m_pMainWnd=dlg;
    # L* r+ G2 a5 G7 g" N+ z. N" W
  568. " v( g" A: W, d; U: k
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ i1 O$ [; p5 V0 j, u8 ^# n* U: F
  570. 2 T1 g9 D9 \& @7 {1 h
  571. //  GdiplusStartupInput gdiplusStartupInput;5 k8 }6 |2 @9 n4 U( k0 Q0 T
  572. //  ULONG_PTR gdiplusToken;
    + j8 {/ R% d" s3 n) p9 k% t
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    " \) @% G% i1 }9 o0 U4 d/ C& H) z
  574. ! }4 t( m6 Z7 E5 ?
  575. //        CRevAppDlg dlg;; G6 J3 U- O/ L8 l0 @: T/ T
  576. //        int nResponse = dlg.DoModal();
    ( p" y- J' y2 h% Y# ?& m
  577. //        if (nResponse == IDOK)
    ) [2 T, w5 _7 C7 r( p6 |" M. O
  578. //        {
    " `6 R- u; w! I- F; d
  579. //                // TODO: Place code here to handle when the dialog is
    7 k5 n6 {* c2 j6 ?/ c* v3 a
  580. //                //  dismissed with OK( m9 p  s1 O# D: |# U& S! r
  581. //        }
    ( p: d: l/ c( I" L
  582. //        else if (nResponse == IDCANCEL)
    0 Q3 s9 \4 B2 t5 n2 b5 ?: M
  583. //        {, @% w" h+ c: k) ^- M1 [9 y
  584. //                // TODO: Place code here to handle when the dialog is  s( M; a% X8 t) ^6 S# g* C
  585. //                //  dismissed with Cancel* N" X( [1 y6 I: U# h; q$ Y
  586. //        }8 `% W+ u' c" F/ L4 k
  587. ! F3 A' F& V4 N1 R8 o
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    , \& t/ A! k7 i. k" s. H
  589.         //  application, rather than start the application's message pump.5 u. b$ \" r1 Y7 A; o% j/ M" Q
  590.         return TRUE;4 R  p5 z0 a3 ?
  591. }
    1 R6 Z! _' c6 w' ?4 f+ B8 I. {1 x
  592. 3 J$ j/ p( G- u6 I" G6 T8 l6 R. Y
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 B4 @/ e1 G* b. U
  594. {
    1 p, O$ S3 w2 x; N; c2 H0 W- L
  595.   int i;
    ( C( v+ l1 ?" X1 }. P9 V7 E0 d% L4 Y
  596.   char *szRet;" B2 N- X. I( Z

  597. $ h% s2 G1 m. v7 Z, y+ K
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    + @2 E2 W: f7 i0 ]4 h$ m7 J
  599.   if(sztoken)
    * D0 f4 |$ q( \* J) H  }
  600.   {$ A- \5 y$ H! W6 d, c& G
  601.     szRet=&sztoken[itoken];
    3 O. Z8 X" O1 |8 s7 U
  602.     while(sztoken[itoken])1 M' `" v/ Z+ c: j2 e1 [. m- ^
  603.     {6 Z1 o4 s) `) D; N* s/ l
  604.       for(i=0;i<(int)strlen(token);i++)" F$ N" E9 j; p5 i- o6 {
  605.       {
    ! Q9 m" v5 i! W' i
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) D  O" L8 [0 u" O0 Z8 I
  607.         {
    # o) u- C" T5 B# H
  608.           sztoken[itoken++]=0;
    ! S! H# u! n8 j, l- {  k2 X# i
  609.           sztoken[itoken++]=0;
    " g8 z( \" Z+ R- o& G
  610.           return szRet;& F5 H# ^5 N8 K4 }
  611.         }
    8 m, _- e6 `+ C& L# x( B* S
  612.       }
    7 |/ X  ?" J0 |7 ]6 ]/ q
  613.       itoken++;: `( T7 o8 z& Z8 |# \1 k
  614.     }! Y# O; v/ H; ?0 u7 g, B
  615.   }# P# p5 G' a. _- B9 P6 s. e
  616.   return NULL;9 ]" r4 R* V; w. A9 k
  617. }  J) E: }0 J4 M! ]1 x
  618. 6 q9 k4 i$ _5 h, I/ D8 p. H2 U6 d
  619. void ProcessProc(long Total,long Current)
    + ?0 @) {9 Y/ r; H' `$ Z
  620. {  e5 `' i5 ~5 a/ H
  621.         MSG msg;- `) I4 Z9 f5 t* i4 g
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , _/ X8 R, H- r# a, }. F( v4 q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));% G: x( K5 a) K8 ]1 _
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ! D9 h' j; _3 `+ \
  625.         {7 ~3 y; f/ ~# M2 W5 i
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 h9 J( e+ w: q* b3 ]- R+ e
  627.                 {2 d: G& S1 Q! A/ u# h
  628.                         return;! s- T, |! ^6 A  M! ^/ O
  629.                 }
    : W+ Z$ J6 P/ ]7 N/ y7 r
  630.                 TranslateMessage(&msg);& K, _- [8 `0 q" P& o! v
  631.                 DispatchMessage(&msg);
    5 |1 C: I  S$ z5 K7 {
  632.         }        1 r; D& G& n( }0 t0 k6 }
  633. }- [" k* M3 u7 D6 J# q
  634. # }7 I' L+ H- f% H3 u8 W* |
  635. BOOL bFirstChar=TRUE;
    : j$ r" f6 _0 N

  636. & ~& }7 {. u, v' z
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 Q: O3 s4 k7 X* i
  638. {% U3 W% L7 _5 B2 B4 o# _; I
  639.         // TODO: Add your specialized code here and/or call the base class- p% _% @/ `+ S3 \3 d* }* [
  640.   switch(dwProgramState)
    - e7 {* h! a: r9 G
  641.   {+ H0 ^( U1 O; b( y2 U0 Y8 ~
  642.   case AP_NOTHING:
    : a% f1 O% u2 s% a" O! P5 u
  643.     switch(dwStartUpSteps)' S' b0 b0 a8 H9 A
  644.     {  o& b. n2 h' ]0 |3 `* S
  645.     case 1:* H/ R- d2 C: \2 u" x: C& n# @
  646.       {
    1 [( ?  A1 G& H: O: t7 S
  647.         int i;) @7 l- ~3 @9 }; E% a& O* x2 U
  648.         CDC *pCDC=dlg->GetDC();' u& E& l1 t, n4 e( c: W
  649.         HDC hdcwnd=pCDC->m_hDC;
    " S) P- o8 Y2 X6 Z% p
  650. //        Graphics graphics(hdcwnd);
    - ?% L( q0 r9 `' y. ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    & O  f/ p' {8 s  S* R* F# N
  652. //        INT iWidth=bitmap.GetWidth();
    0 Z" v% I* r; w5 W1 o
  653. //        INT iHeight=bitmap.GetHeight();
    9 Q2 W% \( Y) D
  654. //        Color color,colorTemp;0 P9 f, s* W; u: h, x3 L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    . |+ P. P- D  R
  656. //        {% _3 o# e1 N) ~+ ~( x) q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& }- X: s0 e# o+ O
  658. //          {
    : T7 u/ K4 y0 J  l  z. N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    + R' o' B' }  P
  660. //            colorTemp.SetValue(color.MakeARGB(  Z) c! _% c; F# C% W. p
  661. //              (BYTE)(255*iColumn/iWidth),
    # G6 ~' p9 _, P3 \& I8 Q# U
  662. //              color.GetRed(),) z4 s+ d! P. z  t
  663. //              color.GetGreen(),
    % U% w: r/ t2 X
  664. //              color.GetBlue()));3 Y. l% n- `7 a& W$ L
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);# @6 \( z% F/ `( ~
  666. //          }# G8 U6 J5 W2 b# g; K
  667. //        }
    7 i4 A3 h7 z  @  u" o) n% k! B
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 D1 f7 i! Z( \9 b# X& Z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# z* e) y- W1 e4 u! B5 s
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");! R3 d; R& S, N& i& K$ `
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");+ [$ a  R, k/ b( }0 U
  672.         for(i=0;i<240;i+=8)
    ; Q# d" N" r, `" Z( K
  673.         {1 L+ w1 T# p( g+ ]' l
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    : D0 i8 h( M6 `  v0 I
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    - h; R' f! B5 p9 E- h
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    6 N0 Z* H, |( |* O' ]
  677.           Sleep(33);5 j6 v9 G! P( S. P. P
  678.         }! |7 m$ W3 o" U6 Q0 u6 o7 ^* H) x& o" x
  679.         Sleep(1000);
    % K0 d9 i, n7 ]2 \. t3 T# G
  680.         for(i=240;i>0;i-=8)
    ) H" K; l3 [; r* r& T
  681.         {& K# Z9 [! N" y$ {
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 a8 W+ K4 y% r: V, b3 D
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);* }$ |# W# g- z
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);8 ~2 w: c' |5 K0 s6 ?
  685.           Sleep(33);
    - |. N$ x. W! I9 x' a$ Z5 p
  686.         }
    7 e2 J6 P2 P3 H$ T# [
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    % k( m4 I) _% ^( F8 c
  688.         dlg->ReleaseDC(pCDC);* a8 \9 Z/ w. a* Q, d$ u
  689.         DeleteDC(hdctar);' i' o2 A& {2 [! {
  690.         DeleteDC(hdcsrc);3 x# f* _+ K3 `. N* {# @
  691.         DeleteDC(hdcorg);
      K, ]+ F$ U' V
  692.       }+ U: `! D- Y/ k2 r6 a
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - w& `* E; O6 P" L/ |5 B- |0 m
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    9 i3 s3 N/ p4 U+ O# w! [% o
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    2 r5 D2 O: N6 I& P. [
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");- F1 s/ N# C4 y8 q6 y3 Y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ ]& a0 i- T/ J+ S
  698.       if(!Dn.Connected())
    ; t3 e% G( N* c( m
  699.       {
    & s2 W: t  ?; q7 \0 g) k( ?
  700.         dwTotalFiles=1;0 o0 x9 N3 `$ }1 q& a! E" z
  701.         dwDownLoaded=0;# J7 t( Y6 m0 e$ b1 |. L
  702.         bSilentStep=TRUE;" u) h% P, z+ }* J( Q
  703.         bCompressed=FALSE;
    ) F/ n/ r' C& Y
  704.         strExtLocal.Empty();
    ; r- y  V! g9 E6 _, z
  705.         strFullName="readme.txt";/ }& Y7 F0 k- v1 \' w3 R
  706.         dwProgramState=AP_CONNECT;
    " R! O( r( E( T1 K7 U& v
  707.       }
    0 x( o/ b9 H& R3 t& G" w- M
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    * q/ ^8 j: H$ B6 [9 j# _
  709.       dwStartUpSteps=2;' u0 H8 K: o/ T; q' L# A2 o
  710.       break;! Y5 h4 w/ Y4 P7 D4 y
  711.     case 2:
    5 k( r' ~# f8 U' ?$ r0 ^  Z
  712.       {
    ; i7 X' N: z- i" m
  713.         int iEOF;
    , M0 a, ~3 i4 T8 Q
  714.         FILE *fp;
    0 m' ]: W) n; I, G* M3 n& G: E$ S
  715.         char szString[512];! p! W: z8 m, s5 e( m
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: _9 J8 v6 d2 q3 w( {# S
  717.         if(fp)
    ) n  l4 I" T. K& x7 E+ w0 W
  718.         {
    ' h" d& @+ p6 w' J
  719.           do
    8 M6 v* M# f7 ^5 p6 A4 N, g& o
  720.           {# d; t! N1 Z1 D# h9 J- V
  721.             iEOF=fscanf(fp,"%s",szString);5 U9 }6 q" `$ q; B6 B7 N9 J
  722.             if(strlen(szString))
    4 C3 T0 z& m% l  Z
  723.             {
    + _4 Q( ?# X$ P9 D) \% y2 |
  724.               if(bFirstChar)
    , R( L$ b  ~" j) B! c: J
  725.               {
    4 d. i! _* Y# e, H5 ~2 z
  726.                 bFirstChar=FALSE;
    % W5 i, H) A2 v2 R
  727.                 bConnectIsBig5=FALSE;
    7 w( b& t7 F( z; s) K# E+ B
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;- Q" D. V% Q9 j6 \7 H% \
  729.               }
    5 ]* l5 d! B: P6 @) E7 I
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    6 |, a1 M! m* U& U2 i
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # i/ m# Q! _1 q6 X. t
  732.               dlg->m_ListText.AddString(szString);2 y5 i/ [2 B1 }: u8 K
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) p3 S1 e9 l3 D: x$ U/ M
  734.               *szString=0;# I+ ]- k3 a/ u1 c4 |
  735.             }8 A5 [( m1 v. w+ A9 z# X
  736.           } while(iEOF!=EOF);
    8 _3 ]5 z7 `# L, s
  737.           fclose(fp);
    1 x" b. A( K' a. i
  738.           unlink(".\\DownLoad\\readme.txt");; ?  c- V8 p; O  A* i
  739.           dwStartUpSteps=3;3 G; M4 X7 V7 |( s
  740.         }; z, u; t& t% N6 E, H3 \' B
  741.       }
    9 K1 j4 J  L* K& \. r! m6 K, Z
  742.       break;' U( x/ ~, ^' P
  743.     case 3:* r. M; f2 Z3 g) F
  744.       if(!Dn.Connected())
    / p5 I4 [5 _6 U% I
  745.       {- |2 l8 ^9 H8 ]: X8 z0 e, G; ]
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ( z8 y+ g! a' B% L
  747.         dwTotalFiles=1;
    5 G' Q# q# l5 E# p8 r" ]& ], I
  748.         dwDownLoaded=0;
    * `/ @* r8 S# f9 k: W
  749.         bSilentStep=TRUE;: S9 z& v% s; A+ _
  750.         bCompressed=FALSE;( R' ]: P& A+ w; O/ I5 c
  751.         strExtLocal.Empty();9 Y. N6 j* i" Q
  752.         strFullName="checkversion.txt";
    1 t" W( F( N" K) t$ \
  753.         dwProgramState=AP_CONNECT;
    ' g! h7 w5 [. t4 p* ~+ k7 h: @
  754.       }
    0 P. p9 E' i( F; A+ _2 X
  755.       dwStartUpSteps=4;
    3 p! y  Y* L& U* n; o( x
  756.       break;. {7 x! y5 L5 l$ u: u' z5 r7 i
  757.     case 4:
    " u' C: T& P4 a! @0 b3 a$ p
  758.       {4 N0 V8 O- t8 w, `4 f
  759.         FILE *fp;
    * R1 x  i$ b- B- f* Q! r2 d3 M6 M
  760.         char szString1[128];6 x- e1 a8 _* }+ U% s7 }
  761.         char szString2[128];
    1 }0 j1 I: X0 `5 U! E( @
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    5 E1 U* I. ^) R5 n" _. a
  763.         if(fp)$ a( ]8 a* i7 E* Q' _! m; }
  764.         {- V- B) r5 [1 r1 J. Q- X2 f
  765.           fscanf(fp,"%s",szString1);+ z/ {' @' Z* Q- ^/ |) Z1 \
  766.           fclose(fp);6 v0 [( f" X0 w3 f3 P5 `  M2 {- Y! ^
  767.           fCheckVersion=atof(szString1);5 A# A) }" n$ o: y& r4 y
  768.           fp=fopen(".\\checkversion.dat","r");& D8 d. K! I! ]0 j; z2 L) n- U
  769.           if(fp)- ?+ n9 ?, Y, |0 `
  770.           {4 h0 f: W* P( D- `1 A
  771.             fscanf(fp,"%s",szString2);% I+ L( z+ E( k9 T
  772.             fclose(fp);
    : a# `  p) M- T+ ]( n+ L
  773.             if(atof(szString1)!=atof(szString2))
    0 ?. ?) I4 g' F% u5 A
  774.             {
    " \! e# f2 A$ z8 \$ u/ A
  775.               if(!Dn.Connected())
    4 @+ i" D& W+ n, e3 j2 ^* I, S
  776.               {
      {% E% y' }" c3 j. i5 @4 l; F
  777.                 bFirstUpdate=TRUE;) M7 e, v2 M4 t$ p3 z, }
  778.                 dwTotalFiles=1;4 U( W) Y6 u- {
  779.                 dwDownLoaded=0;1 d( ?& Z5 E# ^. C7 q0 `
  780.                 bSilentStep=FALSE;
    3 b6 @1 o/ Q1 c& ]% B& @
  781.                 bCompressed=TRUE;
    % J: O2 }9 x3 n' N7 R
  782.                 strExtLocal=".\\DownLoad\";
    ! E* p! N' W- n5 V7 j" o
  783.                 strFullName="update.txt";
    4 s! E9 U! A2 x+ C! A' Z
  784.                 dwProgramState=AP_CONNECT;
      Y; p: i  g* X/ w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" D1 b$ g, q' R3 w1 K0 m# y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");( L# p2 ], S+ q) n
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");4 Z) H. \% J) ^( B

  788. * x1 B! n0 n. W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 e8 d* k  k. u! N: n& b
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ D4 v: v+ n& e/ D0 l% e+ ]. u4 ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ! _) V7 d+ b" X( y
  792.                 {
    ; H  r1 @% r5 _1 {9 `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 E: ?0 k3 K. Z6 Q$ I% l) V3 t
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    0 m1 f+ n* q7 ~. Q9 S' G0 E, y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");- r: Y9 o; d; k. ?1 s
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ x+ H% I( E6 e- k
  797. $ a# j& a* z9 s5 |! x% x& g& f7 B
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 y% O( P; n% `; n9 f0 \3 e8 X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    5 z) f( c! K  f* I6 K, W4 w
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    , q5 h( ?& b8 e+ j
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 N# c7 W& e; N; {
  802.                 }0 [+ e- X. s4 W
  803.                 dwStartUpSteps=5;, c6 u1 S- C: L( Z; @! F% _4 s& X
  804.               }" R# ?! O9 A; O; x, t+ T* ^$ d7 }
  805.             }) Q. T5 q1 u6 G( g- e8 l
  806.             else( f) F) w# d% q
  807.             {; J3 f9 Z4 B( H% `( ^$ q6 r
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! A9 D6 B7 {# {& A
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    " ]! E& c. J5 \% R9 M
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& u. T  W' Z) K+ A: \6 g% L: ~
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 X" }) G- m0 @* {; F

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

' j. d: \. G# |2 w' @# h! C1 i

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

寂寞在_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
回覆

使用道具 舉報

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

本版積分規則

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖QQ客服返回頂部