CSUpdate.exe源代码

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

- W) Y& U$ M+ P$ i6 P, V7 `
  1. / RevApp.cpp : Defines the class behaviors for the application.
    8 k. [' l/ N1 x; {8 q
  2. //2 g$ p' A+ q( ^/ x
  3. - j$ u) C1 C/ v. [
  4. #include "stdafx.h"
    ' Q2 }' ~6 F2 o% j& ]. l
  5. + F4 D# |7 p% E$ U: z" h2 e
  6. //#define UNICODE) R. A4 _0 g6 ~! e8 m; R% ?) Y
  7. //#include <gdiplus.h>
    . ^7 G1 ^# L) k& d
  8. //using namespace Gdiplus;
    ' K4 U- W, q9 B: A

  9. , f1 {# {) [7 n. E
  10. #include "RevApp.h"
    1 W- E/ m1 Q4 k$ z8 `" }! W- j% \
  11. #include "RevAppDlg.h"
    0 j+ T) R  f" F( E" f

  12. 7 I, ]3 q/ u/ ^7 L# z
  13. #pragma warning(disable:4786)) g' \2 K% S1 E- f
  14. #include <map>
    # ?, A' }4 @+ M+ Q6 C5 {! }, y
  15. #include <list>3 G9 d6 Q$ O) S/ ~$ A2 P1 _: L7 V
  16. #include <direct.h>
    * v* h( i& k3 H2 `( k
  17. . ?  ~' E6 ~9 d9 Y3 |
  18. #ifdef _DEBUG$ }* o/ |( O( z  u8 |: J" X
  19. #define new DEBUG_NEW
    9 y, `. B( ?! I( }5 ?
  20. #undef THIS_FILE
    5 ]7 T$ w  d( ]* K. H0 M
  21. static char THIS_FILE[] = __FILE__;$ R3 y- C* v6 ^/ }
  22. #endif
    * r6 \% i8 }( R  d4 W$ D5 D
  23. #include "SkinResDef.h"" U$ y4 w$ S& \. x* d
  24. #include "ChangeBG.h"
    6 z- O+ M! y" ?" \* A
  25. #include "AFXINET.H"
    " {" V# s2 X/ H/ l4 N) ^6 i

  26. 8 Q# P) [, H! O: C; ]! \5 h
  27. #define TRADITIONAL_CHINESE 0* n8 g2 B& G! X
  28. #define SIMPLIFY_CHINESE 1- p4 x' X+ `; [# C" p
  29. #define ENGLISH 26 b( o: N. Z3 V0 M
  30. int m_iLanguage = ENGLISH;; W7 K( b+ [* \+ P9 U
  31. /////////////////////////////////////////////////////////////////////////////
      @" `' ^# [2 H# |6 v& T9 C+ P2 w% j
  32. // CRevAppApp
    ) Z9 O: S/ z, _8 x1 o

  33. & ]- O4 b) r# ]
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)5 W1 D1 A4 l9 b
  35.         //{{AFX_MSG_MAP(CRevAppApp)
      u4 ?- c9 P; F& |, |* @+ I5 `
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    " y1 w. S/ ?  u8 T" Q6 k! E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!2 B* G# f; P: `6 e0 `0 h4 `: W
  38.         //}}AFX_MSG
    ; p( O( q; T& {. j) e- R
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    # o8 s4 |4 ]1 r5 ]1 ~* X$ t
  40. END_MESSAGE_MAP()
    . |! N* `2 i: f! v) W7 B
  41. " p/ H' M8 |: T/ F5 ~1 t* N
  42. /////////////////////////////////////////////////////////////////////////////  m7 [9 a2 _$ ]/ b! F2 P* u  h9 n
  43. // CRevAppApp construction* m, Q. N/ }2 i- ^* i0 Z% ?

  44. 0 [2 l3 B! v2 m5 m( T4 K8 n
  45. CRevAppApp::CRevAppApp(): ]3 M2 f/ `+ H' }" z6 g# K% M
  46. {
    - \- i! K! |& K3 O* ^: @
  47.         // TODO: add construction code here,
    0 F- N8 f( P& q- W' _& B; @
  48.         // Place all significant initialization in InitInstance
    1 ~8 V+ J/ A) ~9 \- }- R* c  ?7 P
  49.   bDisplayIsBig5=FALSE;
    1 `# ]; D, a3 U2 ~& i$ M4 a* i
  50.   bRestartUpdater=FALSE;' [. ^- M2 R: ~% a7 {
  51.   bFinishUpdated=FALSE;; m9 p/ B6 F7 L' [) }: _6 l$ S
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( m# K" [2 }* @! h, ~
  53.   InitChangeDataBig52GBKS();
    2 c6 e( Y4 |+ k. ?
  54.   InitChangeDataGBKS2Big5();& d  D. ^: P! v& N  I3 h
  55.         //
    ) B- o! N4 p: H6 ]0 n3 |8 t7 E* P
  56.         bClickRunExe = FALSE;
    & b2 S- Q6 I- B$ Y7 j3 |
  57.         //
    " {& A) q3 v+ N$ k6 d
  58. }/ j& f, s8 T% \4 I, Y0 @
  59. . Z5 V' D5 K' E3 X
  60. CRevAppApp::~CRevAppApp()
      R* E1 n2 N; f7 O
  61. {4 B& q1 s/ s# G; x+ K) V4 Z
  62.         // TODO: add construction code here,) A8 n- I" V7 U3 t
  63.         // Place all significant initialization in InitInstance& y1 M: g5 K" n# C1 ?+ t
  64.   EndChangeData();2 T+ I7 @: i$ x
  65. }- n* z: R3 s* i8 E7 V) N
  66. ! R  E2 s5 @; U7 f
  67. /////////////////////////////////////////////////////////////////////////////. I- h6 P# z/ m
  68. // The one and only CRevAppApp object9 [' K4 n( V9 a, p2 M! i

  69. ; }. }# o0 @* A/ S4 ?7 u
  70. CRevAppApp theApp;( o! p0 p& z, [/ R1 ?. O" Q; }- `

  71.   q) c4 x! y; j' Z5 S6 E
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    . i9 H* Q' I: ]7 s9 d+ r! Q
  73. {
    # N4 l$ U' \! T1 I8 I) o
  74.   int iEOF=0;% v0 v" @6 c7 C6 s; P
  75.   char szTempName[MAX_PATH];# @- _. S+ z- H% U$ p& e: U* `
  76.   *szFileName=0;
    9 x# k  v- K4 K- F6 T  t  c
  77.   iEOF=fscanf(fp,"%s",szTempName);1 h+ t' _- m+ y
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('). b" A, j5 E% K+ m4 F
  79.   {, ]% \$ p$ m& R' R# L/ [
  80.     strcpy(szFileName,&szTempName[1]);$ Z4 o3 H3 B: u. q( Z: w
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
      E8 I7 j+ r' {: Q  @# r" w
  82.     {
    9 O7 `4 a8 m% j3 l7 N7 M
  83.       iEOF=fscanf(fp,"%s",szTempName);0 ?7 o" I( D0 a8 C/ ]" `' `; C! V$ a
  84.       strcat(szFileName," ");
    8 w3 d( x( M7 Z+ q9 W/ z
  85.       strcat(szFileName,szTempName);
    9 r4 A! M! @. S& t+ \
  86.     }8 G7 q) _/ c1 z/ \
  87.     if(strlen(szFileName)>=1)
    4 G: e2 Q; E" \0 N2 j1 p% m( S
  88.     {
    : k5 V: s, r& H3 u# T0 \
  89.       szFileName[strlen(szFileName)-1]=0;
    9 S& l( Z- D8 Q  q8 f
  90.     }
    ! p5 [7 X1 H$ v: g
  91.   }6 f  o3 ?6 C* _0 o( ^  F' @
  92.   return szFileName;
    7 l9 u2 c* i+ A9 ]" b
  93. }2 y% e: a! X! p

  94. - U% G3 F  m" W( @7 G& ?# Y& _* J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + _" M/ f* m: t( ]: z: ]2 {
  96. {
    9 X' ~% V$ N. v
  97.   FILE *fp;
    4 z6 t) w9 \7 T2 F, ~0 |. R) F# C1 b
  98.   char *key=NULL;
    ) R3 F8 J1 v2 t6 G! p
  99.   char version[MAX_PATH];9 U9 S! `  `4 t2 Q1 F: n
  100.   LPUPDATEFILE file,olds;$ J8 Z  K/ U+ K2 o9 e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    : X7 d# h2 f4 e! L2 j
  102. : I1 u3 r8 l% b. Z  H3 S
  103.   UpdateList.clear();  ^/ \/ F* f; c
  104.   UpdateFile.clear();8 `+ J2 }: S9 J. D
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 s4 l; b8 W: K! u) B+ x
  106.   if(!(fp=fopen(filename,"r"))) return false;
    , ]; z2 g2 h& Y5 f3 G
  107.   fscanf(fp,"%s",version);
    & k) _7 k! R1 o0 ]# T( K2 f
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }2 t$ ^4 A( _9 o% X  F8 ^) S! L" o7 V, v6 [
  109.   while(fscanf(fp,"%s",version)!=EOF)
    9 B' v7 k# m8 S+ Z! f
  110.   {1 j  m- c' [7 P: D; R
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 ~# i3 R) V* Z8 ~( {
  112.     fscanf(fp,"%s",file->path);
    # f" M% @, N4 {8 E
  113.     ReadFileNames(fp,file->file);
    " f6 U) A) N; B0 y# Q" s
  114.     strcpy(file->full,".");3 I/ U/ l2 f' }4 I; f! B& V
  115.     strcat(file->full,file->path);- t: e6 B( r9 c% M5 [
  116.     strcat(file->full,file->file);) t5 g, N- C; i6 A, i2 ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())$ \) ]2 l" g2 w6 r- p
  118.     {
    - |  e) I5 P" M. L6 G" s) G9 g$ ~
  119.       file->vers=(float)atof(version);
    + a' |0 H6 V  ?! L8 R4 \! e! s
  120.       UpdateList.push_back(file->full);
    0 Q. c8 M0 q1 Z# r
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));/ ~. s1 \/ I, l
  122.     }3 @8 x9 J' c- ?7 k. ?/ G' Z
  123.     else
      L/ V4 R- U7 E! v7 W" w( C
  124.     {
    + U5 \/ E3 ~6 D6 s# z  g5 c
  125.       olds=(*p).second;1 Q: f! r7 i: e* c7 f. y( I  l
  126.       if(olds->vers<(float)atof(version))" k5 O, p2 e' B
  127.       {
    8 p- y+ I& w: ]7 @! y8 r7 f* P8 n5 k
  128.         olds->vers=(float)atof(version);
    * H% C% J% r% K3 Y1 D
  129.       }: {# H& j8 h& ^% K: b2 ~
  130.       free(file);
    / T" N. r8 m. l1 |
  131.     }
    " j9 n6 X+ e2 p" E* W$ n3 H
  132.   }
    8 {8 p) a/ u& a
  133.   fclose(fp);
    5 W4 f3 ~( E" J7 ^
  134.   return true;: g, J- ]9 D0 }5 U; |) h4 i
  135. }  Y% `9 Z& ^) P* z- P. z

  136. + k# `7 o3 A- g9 ~
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' _5 y: j% ?* h, t. f( [: w
  138. {! l& L8 c  w4 t' H5 B! w
  139.   TCHAR  szFull[MAX_PATH];
    % C7 l, x6 P- i6 @1 I. m
  140.   TCHAR *token,*inter;2 ~4 K- z, N# o& P5 s5 F# R: F5 C
  141.   *szPath=0;
    5 |& t2 v. ^( {6 j6 E
  142.   strcpy(szFull,szFullPath);' G2 D7 e4 d0 g0 Z8 N, E
  143.   token=strtok(szFull,"\\/");: f0 O# g6 i, s% a* c
  144.   inter=token;
      {# Y: c$ ~; |7 A- {. J  X( {2 R, N
  145.   while(token=strtok(NULL,"\\/"))  U# j7 ?2 E; B$ e& E. _& g
  146.   {
    1 v6 w% \0 l3 P- B  M/ P8 P
  147.     strcat(szPath,inter);
    : d- L; P. V$ `; X0 u/ d
  148.     strcat(szPath,"\");1 ?$ P+ g& y6 e- p* q8 s' H" S, d+ e
  149.     inter=token;* |9 ~6 C& h/ f0 T9 H% D; O" d4 t' f
  150.   }4 x/ Y2 Z' d7 {3 N8 b
  151.   return strlen(szPath);2 T5 k3 T" ?2 {! L5 R) B0 L
  152. }$ b  F/ c9 G# J' b
  153. $ m; m. d, ]$ O6 ^& Z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 `" G( p; H/ V. f4 x2 t# o
  155. {# u0 G9 [9 I- W, W6 ~- D' A: M- j
  156.   DWORD attrib=GetFileAttributes(Target);3 H* X5 F2 a) S# K" o
  157.   if(attrib!=-1)
    8 X; N+ h3 {7 V& J
  158.   {# V, p; M4 U* q
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))7 C3 v. V% k( c0 n( R( X! P( E# ]
  160.     {
    , u* O( U8 Q6 F& t( n2 Z. j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    $ r2 y9 v0 I$ g$ ^  o: y" P
  162.       SetFileAttributes(Target,attrib);
    + d  N2 d5 e  I" `+ K. g
  163.     }" O3 V" q+ S1 c  _7 g
  164.   }
    1 t" N8 G8 [- n
  165.   CopyFile(Source,Target,Erase);* c7 _, [9 J- a, D1 n7 O' p  {
  166. }& `$ I  F' @# h/ x! Z2 z6 ]+ T* u0 ?
  167. / X2 ~8 e/ _" ^0 [! v3 y% N, p
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)5 b( a0 h* X; {3 d1 Y; s# C" ?' h3 x
  169. {' m( U; Q( f! f
  170.      FILE *fp;
    0 r' w1 C# _+ c$ Y$ T. R5 s4 H
  171.      char  szBuffer[8192];% W8 G- ~6 _, n& Y. \5 @
  172.   va_list  argptr;2 b$ Q2 ^/ F+ F/ F2 L
  173. 2 Z: {" A/ U6 a  K- u" o
  174.         va_start(argptr,message);
    & H% x0 [. N* d' o" c/ O
  175.         vsprintf(szBuffer,message,argptr);& r: h- p- D5 [7 X
  176.         va_end(argptr);
    6 R6 N+ S8 {1 E9 M% S
  177.   fp=fopen(FileName,"a");
    5 \. K. _: W( v; y2 u
  178.   if(fp)
    0 D4 m/ D0 s! O% F- R' N. R2 ^
  179.   {6 e7 c8 y1 Z9 w& l9 d( g, i& ^
  180.     fprintf(fp,szBuffer);
    * I! w; Y  N1 ?7 b3 |- c
  181.     fclose(fp);. J1 R0 I" Q6 S% p* L4 D* [
  182.           _flushall();5 L5 ^8 A* L- j! ]9 ^1 P3 |; e
  183.   }
    . J$ W) C% E8 o- Z5 W% H* p
  184. }
    , ~# W. H- f3 {

  185. 1 q8 P1 M* {1 N' |7 ?- d6 d
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    4 Y3 c9 }+ p- `  }0 g. v
  187. {
    4 W1 J# v4 {) z1 n! U: `$ W0 }, `2 P
  188.      FILE *fp;
    + V" O$ E# y: }- t
  189.     DWORD  attrib;
    4 Y9 x9 `$ p" Z& L8 y
  190.   attrib=GetFileAttributes(FileName);
    & \% o: E. c: F6 [; w
  191.   if(attrib!=-1)3 L$ o7 f1 y& C7 X
  192.   {! Q9 p% i! c1 L8 V- h) H! Y( @% B8 X% }
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    % _  O+ a6 g; K. G, m% o6 G
  194.     if(!SetFileAttributes(FileName,attrib))
    - p& x) y! N" ?# v* @" }0 y6 o
  195.     {
    0 Z. R) a# E) L7 ?2 f7 B
  196.       return FALSE;
    2 e6 I  W% P) `. i* d$ s
  197.     }; z# C) K7 j3 O3 ^. E' S4 t
  198.   }2 p" g3 D1 W/ {1 r, R' U7 c& j
  199.   fp=fopen(FileName,"wb");, @' X0 y: C3 c
  200.   if(fp)' O6 x" x) {* T' f4 N* _, o
  201.   {5 ]  c4 R  F+ D- v" C/ f8 P. Z6 m
  202.     fclose(fp);9 `0 y. f% _; V' J% E' l9 S4 \6 n
  203.   }
    : K# \# f: i/ J
  204.   return TRUE;
    # ~- L; V0 n. ~; |) j  A9 n/ D
  205. }
    + w- H) Z3 Z$ K* q
  206. 0 H$ X* U) R+ X3 V
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      i, T2 q  \4 x# h
  208. {4 S3 g- J+ z7 d  l
  209.   char filename[MAX_PATH];* C9 d3 _( x; k7 H
  210.   LPUPDATEFILE file,olds;
      ^0 Q7 T$ T2 [- }6 K, T
  211.   std::map<int,CString>::iterator i;2 d+ R+ a. r2 ~# a2 z3 U$ z+ e. }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& }6 p" `1 g* R7 o/ n0 V. h
  213.   std::list<CString>::iterator l;
    3 D3 C' p# \, L/ F/ C

  214. ( X/ z8 Q$ b# n: s
  215.   if(bFirstUpdate)
    3 o% ~" {+ r( X# o
  216.   {
    # S, @% _5 r$ l/ Q7 G; b
  217.     dwCurrFile=0;
    ' g4 V5 z$ {* W, T1 ?+ e
  218.     bFirstUpdate=FALSE;7 Q$ L! x$ e; p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 r1 y3 F$ _4 u/ [% d
  220.     {5 k# g3 }. T1 @
  221.       dwTotalFiles=UpdateLocal.size();
    9 R- E- f& x/ H1 _
  222.       dwDownLoaded=0;) u5 i! k* M: u+ r6 z, Z
  223.       bSilentStep=FALSE;, `1 k. H  i0 T4 ]
  224.       bCompressed=TRUE;) {, Z! q/ [) Y
  225.       strExtLocal.Empty();. E% t- j# ^* T  E9 J7 g+ J& M
  226.       strFullName=(*i).second;" J; w5 I- \) F8 [% ?
  227.       dwProgramState=AP_CONNECT;  E. J% e/ Y9 ^
  228.       return TRUE;
    1 ~) ]+ P0 \9 W+ q
  229.     }' ]; }. @9 i) z" L$ h  R( U
  230.   }  _/ `) O. r( Q- s
  231.   else if(bRestartUpdater==FALSE)
    ! ^1 W5 P# k( A
  232.   {
    & Y' ]. L+ O8 n/ D4 J7 \/ E. m8 _
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    6 }! t/ G$ ^. T8 K  Q& [0 Y
  234.     {5 J; }+ N4 ]. |5 t! Z: `: J- i
  235.       file=(*p).second;/ _- k0 J7 J  U1 m
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    / c- o1 t5 S0 Z6 Z: h# K* l
  237.       {$ N$ N% C  a+ b4 U( }& v7 {
  238.         olds=(*p).second;
    ( v% h' L% @% U6 t
  239.         olds->vers=file->vers;, p* k" \* Q: }
  240.       }: O, l" r( |2 h+ t& h
  241.       else( g( W. Q8 I2 F6 j, ~
  242.       {: S5 M' P# s- |- a3 T8 m
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    * f1 L( X' f8 B- g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));# C7 Q7 n: G7 F5 }* E' G
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    ' B' t* F9 E- ^5 E+ X0 o' p. y
  246.       }
    * W! x1 U4 r! P3 O
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");0 [" U# j% }0 t" y
  248.       sprintf(filename,"(%s)",file->file);
    + b9 E2 l5 W5 z. r2 U8 X
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , e2 N% `0 w7 \$ H  U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
      A3 j. l8 r& W* j5 ]; s
  251.     }3 g. Q+ Z& {8 c2 Y
  252.     dwCurrFile++;6 @) J; j: x( E' y& h% C
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % _( J0 k/ B7 u) }& j
  254.     {2 @0 a( q: O, g
  255.       bSilentStep=FALSE;3 ]# m1 o& h% w% c5 s6 Q# k  d
  256.       bCompressed=TRUE;
    , F- e8 o5 H7 ~2 q3 A  M
  257.       strExtLocal.Empty();
    4 F) j9 S) ?+ ^4 ?
  258.       strFullName=(*i).second;4 S8 t- D9 I# Z7 b5 m4 n; _% R. E3 V
  259.       dwProgramState=AP_CONNECT;
    " [' _+ z5 `! k/ U/ V0 Q
  260.       return TRUE;; u, }: k) z9 F/ A- e4 M
  261.     }6 d% t  b- B( _" m
  262.     if(!bRestartUpdater)9 |; U4 s8 |" t7 X) ^) ]0 X" P
  263.     {
    * |, Z- z- \5 _& D) x: Z6 Y
  264.       int iCurrSize,iFileSize;, A. h- B( R0 Y# z# g6 U
  265.       iCurrSize=0;
    ) N/ M8 R# c7 O
  266.       iFileSize=UpdateList2.size();
    & {! s1 ?& H/ u( i$ L
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - t. M/ c" N. C, g
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    $ j' g" U2 s; k/ R* C" @! Z& g* R$ c
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");2 d) ?2 o5 n# O8 b" L. F5 H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # l' v. W# W4 H7 M3 n; V
  271.       Fclearf(".\\update.dat");0 y. v# T/ g  ~+ x
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    1 O# c- @! {: C* V* O
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    % I& I" d- z5 ~1 s) r
  274.       {4 J: b3 |0 E4 T8 D3 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 r8 n' b( Q) A4 y$ I/ N
  276.         {
    1 Y6 [. L: v8 [: v% a
  277.           file=(*p).second;
      @4 A/ d+ Y) U9 e
  278.           sprintf(filename,"(%s)",file->file);5 K4 L) t- @1 g& f
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    % [$ v0 m0 ^1 J+ c  Z
  280.           iCurrSize++;" C: m+ P( ~1 @! M8 y' H
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));% ]' ?( U$ ^6 D  j6 p1 P! W7 c+ b
  282.         }
    # K- \) U3 A1 m! S  K! A
  283.       }8 a8 ^8 v7 w5 F2 w& b
  284.       unlink(".\\update.txt");
    3 ]# q9 ]7 z! W7 T
  285.       unlink(".\\update.tmp");
    : d; y' n  B) S0 ?
  286.       Fclearf(".\\checkversion.dat");; R4 v( E% N& Z+ W) ~8 _* t- @- A
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);& f; x" a7 ^" B* `# n
  288.       if(UpdateLocal.size())6 N5 i- Q8 Z2 B5 @1 k% R# ^
  289.       {
    - A5 M* a% |! ~7 Q7 f, n
  290.         UpdateLocal.clear();
    " }- L! J+ P/ @$ L! a, L# x: F* E
  291.       }
    - L& p$ y$ w! ?
  292.       if(UpdateFile3.size()): B1 b. b. |2 [+ {5 _+ @9 n
  293.       {& [& V; ~4 s( U) [" w& ^0 f8 ~
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    4 C8 R) D) ?% z9 [; s1 @2 ~8 z; F5 z% [
  295.         {7 b! P% P( R0 C; `- I) H' I. T
  296.           file=(*p).second;
    $ ~9 T# Y1 S5 e& U9 h/ c' B
  297.           free(file);
    $ q; D0 G  x: x4 t
  298.         }
    0 Q" P) h' M: y" }0 \: ]9 |
  299.         UpdateFile3.clear();
    ( j3 u% y5 |3 A8 I
  300.         UpdateList3.clear();
    8 E% }. W9 T$ }; w; K
  301.       }! y$ c$ m& M( l
  302.       if(UpdateFile2.size()), b( F) `' y* i* x+ |+ a
  303.       {, E; d/ _3 r8 l  h9 M
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! Z3 a; m$ ]+ l2 P
  305.         {
    2 O% e3 S) d2 @
  306.           file=(*p).second;
    ! u/ M4 N& [! x0 ~
  307.           free(file);& v' a. L: b* @! S+ g. k
  308.         }
    % P) Q/ f. c8 \; i- S9 N6 I
  309.         UpdateFile2.clear();/ ?8 F) b3 B% t! {: k" I& O* W) g
  310.         UpdateList2.clear();
    & W0 j- b4 ^$ K; y" Y
  311.       }$ U" D, x/ M1 E" ?. J6 s4 ]" x4 z
  312.       if(UpdateFile1.size())
    , M( U- K) ~; _% b; n5 d- M  j  j9 V
  313.       {2 ^$ b6 l; r1 A4 x' X$ m. W
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)$ u: Y8 ^1 s& B. o; F$ ]$ E) a
  315.         {1 R, I: {+ T( H1 l
  316.           file=(*p).second;2 X' G. j" I4 Q* N; e: q
  317.           free(file);
    ! D* I! i3 j# T! n' l
  318.         }8 f9 p' h" f+ [! ]' S8 _" o
  319.         UpdateFile1.clear();
    ; `1 e. V. @2 l& a# U
  320.         UpdateList1.clear();- i" q6 k( Z7 M; n* p5 {
  321.       }
    ( s) W! a! {( u7 _
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    & ]: C7 W7 m) T0 \. x8 o, r/ b
  323.     }
    & x6 p. T# T, [* P  o. ^( z$ W
  324.   }
    : ?3 t8 Q) t1 M6 f
  325.   return FALSE;) n9 _3 R; Z9 \$ x# e. f9 C, R
  326. }6 j6 C$ g3 `8 \2 M7 l
  327.   |/ z3 ~3 U; D' {+ H+ I. E
  328. void CRevAppApp::ClearAll(void)* C9 {: L5 v7 C9 O9 r5 a# {7 L
  329. {
    0 r, c1 _3 `7 _* s  b0 m
  330.   LPUPDATEFILE file;
    % ^2 o8 v! |- k+ w
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    & ]1 D* C' x5 I( x2 a0 n1 {( p

  332. ( L. C2 p1 N; {3 d) x5 N; E& f
  333.   if(UpdateLocal.size())
    2 t, ^: q& ]! V4 L' z
  334.   {
    0 X  z8 N, X' P
  335.     UpdateLocal.clear();
    1 K) |# D4 v5 ~& }' A) v% @
  336.   }+ p5 F5 b+ \% F2 U
  337.   if(UpdateFile3.size())
    ( S5 ?  M/ i, Q6 T  @
  338.   {
    3 _7 L8 m; F# y
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ; v8 S9 N5 @( H$ }
  340.     {
    # O4 e, L0 W2 T  l
  341.       file=(*p).second;( l: @1 V3 R' `9 L
  342.       free(file);
    - b5 x0 P- J: P: b
  343.     }
    & f6 ~. P) X  d. L! I/ y
  344.     UpdateFile3.clear();" ^' B. [, o# S
  345.     UpdateList3.clear();
    # h% ^: r% {5 A( i* }% J
  346.   }
    * m3 O5 [1 |% S6 N9 u5 Z
  347.   if(UpdateFile2.size())
    6 O. E0 X# P0 }5 j
  348.   {
    0 O$ f6 W# y* R$ |6 {
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ; W) j2 T3 c. i, ?0 d- Y
  350.     {
    6 D. e- i- K" _8 r, U2 o+ }
  351.       file=(*p).second;* M2 V  ~0 I' X, V6 J% i9 c
  352.       free(file);) L( s- \& J& L  N0 ^8 s( o  Z$ L1 E
  353.     }7 X" w- ?& E) D
  354.     UpdateFile2.clear();
    5 q! ^" s" y2 D1 r9 L) L6 b
  355.     UpdateList2.clear();* y1 _, {8 J& D( v+ ?" \* \
  356.   }9 z7 h. v) l3 l* [1 y
  357.   if(UpdateFile1.size())
      E* Y/ n( Q7 H5 l
  358.   {
    / }0 q* o0 T+ {2 b7 _# ]
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ! R& J# T  v1 i6 o1 W" q! Y
  360.     {1 w3 p5 {" \/ r- H  m( |
  361.       file=(*p).second;
    7 v- z1 k, O( x4 o
  362.       free(file);0 J9 y0 W0 O7 U$ f
  363.     }. i8 o5 O( b" l8 y! w+ U; z% c
  364.     UpdateFile1.clear();6 i6 v. E8 _% s8 @1 G7 m- a# {
  365.     UpdateList1.clear();1 J; b2 l  C* k. t7 t
  366.   }: ~0 s. m7 T+ c0 r
  367. }  
    7 v/ [* Y% U0 Y6 R
  368.   
    + J: I6 H1 K- P( x! p
  369. BOOL CRevAppApp::CheckLocalVersion(void)* o3 d5 S1 v% V  Q+ ~- C5 n
  370. {/ f& a9 ~% V- D/ R8 ], K8 e8 F
  371.   int c;" }2 E4 @; m- w( b0 X& w7 c
  372.   LPUPDATEFILE file1,file2;- a9 |+ W4 A$ Z2 a# o; E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ! l9 M$ A  ^  d8 a9 j0 n' }
  374.   std::list<CString>::iterator l;
    - W' E( u9 j! a8 L
  375. * R* {: l7 k6 V+ C  ~  n/ c( }2 h
  376.   UpdateLocal.clear();
    ; X$ k, A; j4 ^9 Z: @# A4 i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);! A  f! |6 x5 h" e% m3 R
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);$ {5 V# W) H1 p+ k( Y0 q, V
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    , X+ P* `2 q" ?; ~7 B
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    " x$ T' V, e5 _% x( w
  381.   if(UpdateFile3.size())
    4 v: l5 E) {  T5 Q# W1 z; ~5 }
  382.   {
    6 S6 Z0 E( K! X+ i
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)  B3 M9 y2 k5 D
  384.     {
    2 c7 p: B& B6 e8 m( W
  385.       file2=(LPUPDATEFILE)(*i).second;
    5 w3 X% q$ H6 i& W
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 c( `* l- F- q5 {
  387.       {
    3 e6 g1 A+ x6 k2 N' B' M  O0 u- a
  388.         file1=(LPUPDATEFILE)(*p).second;
    : C3 m/ Y  [. h/ Q& r5 j# d
  389.         file1->vers=file2->vers;
    ! ~7 l2 y1 ?% j5 C2 C/ x. z" o+ E
  390.       }
    # ?/ T# c0 S$ u& E
  391.       else( ^% [- q8 C* ?6 g+ U# P: _) ~- U/ c
  392.       {
    : r6 v: U- v+ Y3 s
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 }( \( V8 s  W* ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));1 X  ~( k/ _  C
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    9 Y9 j  u" D7 J8 f" b; B
  396.       }- x/ z% @0 w) U7 L3 S
  397.     }' K$ W+ Y) _6 O0 w, X
  398.   }
    & q0 g7 F$ A4 p1 E
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)5 h5 X5 S( G% e$ r, Z4 s: d& N
  400.   {9 w7 h7 h/ c3 m1 F5 U
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())3 T9 a/ C: a: `) ^  S) p, @- T
  402.     {
    ' P) Y' X1 `$ R0 P
  403.       file2=(LPUPDATEFILE)(*i).second;/ w0 r4 w+ T$ j. |
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 X6 L$ Q3 o7 [/ z* J
  405.       {! I: y6 ?' x4 x
  406.         file1=(LPUPDATEFILE)(*p).second;- D8 Y2 w' @+ E. g3 p
  407.         if(file1->vers!=file2->vers)
    $ ~' \! \4 Q" k6 Q* ^/ x
  408.         {
    : e2 m- U5 S. P) Z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));/ V) E3 ], v( v' I% L$ ~! h
  410.           c++;
    + N% o" w3 P+ U% E" m6 B
  411.         }$ [, f5 V* s" u  n+ x2 q$ v
  412.       }
    ) v& J6 z, {: F# S. {4 ~6 M) C
  413.       else  ?, |' @: q8 e, j
  414.       {8 V' O. I7 I( P% Z, ]2 }& V) o
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : |+ M. q5 h2 g& ^' z; K
  416.         c++;
    / n2 v& k5 U; U, Y8 Z
  417.       }
    : |' j7 T/ L: Y" u' V5 ?3 P  }
  418.     }
    - z, V" _% P7 [9 T; x  u5 t6 s
  419.   }" @. T' h9 E3 T" X8 l1 \
  420.   unlink(".\\DownLoad\\update.txt");
    # O5 d4 t. \5 }7 T! Y& y% ?) L
  421.   if(UpdateLocal.size()) return TRUE;
    / ^  G. h7 p- M/ d3 B6 z2 R# p7 X
  422.   else                   return FALSE;
    ; j% H6 R+ S( B! P- `8 T. g6 j
  423. }* l8 U* i6 K( b

  424. ( f6 m5 c9 s% M+ e! Z
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    8 H  l  O) `7 h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( y3 s1 L* n, o+ N0 B- P9 t+ a" L% X
  427. " L, W6 F- R" x$ l/ J5 w0 H
  428. * |  x5 s. I% Z$ N4 b  L* Q# g: ~6 Q
  429. . W2 o6 x6 a! d5 v& g% u5 a
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; F; t  o2 N3 T6 Q1 }
  431. {5 Z7 l4 k& s. Z/ \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;5 P( [: @4 D' u! Y( G( D9 a9 F
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ N) [& L, ], q9 @
  434.   {
    4 D' ^( F3 W! N8 I/ F7 l) N/ [2 J
  435.     char szLanguage[50];
    4 F$ V. Z+ {( k" {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");- u+ d) ~6 R% H/ r  r
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    % Z# B' p9 g3 V
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    - i2 q' S) `2 G' K
  439.     else                                   m_iLanguage=ENGLISH;
    4 Y6 v$ e+ o. P9 n
  440.     char szRegister[100];6 x8 U! E" x& O; l
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % {* p7 Q6 f% p- o
  442.     strRegsName=szRegister;4 @7 Z( l: G3 u. |
  443.     char szPatchURL[100];* O' I6 k* E! u6 g  ]
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ n, |& ]8 {. G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ; V! ^. d7 f% j3 _& ?( h0 H. Y
  446.   }* A+ B  x+ o! g4 Q
  447.   else
    ; I6 ?5 {# j1 R  _
  448.   {+ W  `/ D1 M/ h
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    - b  [) [( @8 u  U3 _0 Q/ a) B" u
  450.     strRegsName=DEFAULT_REG_URL;
    , x# A! ?( m. r5 s) i* w2 z  u4 V- X
  451.   }
    3 w5 p! i# T5 E4 Y9 Z( Q
  452.   if(GetFileAttributes("hosts.ini")!=-1)0 D3 G9 t* x; a# E! H( G" ?" F
  453.   {6 w* M+ M: A1 c5 q$ p  J
  454.     char szIP[50];
    " f; {5 v2 O7 O; G
  455.     char szDIR[300];3 O* y0 Q: l+ d+ L$ H
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ! E, O  ^# b/ U. G6 i
  457.     {3 x! T; U4 [. O
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    6 u! |# R' l# u$ f& a+ `8 L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 J% [( u4 s% F4 k; {; m' d. @! F
  460.       strHostName=szIP;0 \5 J- l3 N; S9 E5 p- P
  461.       strHostPath.Format("/%s",szDIR);
    4 _) J6 @3 T' o7 k: x
  462.     }+ J* x; V0 m9 R/ E9 @
  463.     else- ]/ l4 i8 q5 B$ @2 v6 y; x
  464.     {
    + [3 y6 i: X/ m7 Z/ k$ l
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! N" w; H: a+ W7 w9 r
  466.       {
    ( C% T) g: {7 h
  467.         char szLanguage[50];4 q& P  ]% E$ X; T; s
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");; R6 |5 Y  l% m4 F% y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , Z% p6 Q0 B- k4 c
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    & J. w- s/ V/ |
  471.         else                                   m_iLanguage=ENGLISH;
    % u* u* P+ Y2 \2 a; n$ V2 k
  472.         char szRegister[100];5 V* d" I' H7 o. Q9 Q) K
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");" v. V9 O( T+ W9 g! p
  474.         strRegsName=szRegister;
    / W1 E6 c. N/ a2 p
  475.         char szPatchURL[100];2 w: S- h; j, Y+ Z. @4 T
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    # M4 F. D/ v- s( i2 _1 \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' H3 T- m( \3 p: i% m4 a% H
  478.       }0 c( ^' `4 l5 \2 ?' A. ?
  479.       else
    / h; E6 m+ E5 X: a+ o0 ^
  480.       {
    ' f2 D* J1 a" M
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);: @8 H  D# G/ D) W8 A
  482.         strRegsName=DEFAULT_REG_URL;7 r& ?4 M8 O7 P" X$ e" E
  483.       }
    * p# q* @  q- L6 Y( ?* P; _( X" s
  484.     }
    $ p% H3 \& x( R" D; W
  485.   }
    $ t/ _" ]& s1 W& e
  486.   return true;
    / i) e& r$ ]9 v& e6 p. _. W8 y8 M
  487. }7 p4 [' z, S% N$ S

  488. # ~2 J, {* |4 W: b
  489. #include ".\ZLib\unzip.h"
    1 o, M! J! F: p+ n3 E
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    7 R* u2 z8 L4 T# P; H, ?0 B
  491. /////////////////////////////////////////////////////////////////////////////
    , T, `+ \9 U, W* p, R
  492. // CRevAppApp initialization5 m4 I; l8 n( L1 O8 [

  493. 9 P3 N3 g3 V& A) W+ }( U
  494. BOOL CRevAppApp::InitInstance()
    8 [$ K9 Z, ?0 h* }& `! W
  495. {
    7 q& c) g' {) s& n
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    6 D6 B) z; }1 F" |
  497. . g6 a. C- k4 D8 W5 {6 p# `
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; m% t' D  i. T8 F. }. f9 G% o( ]
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))  K7 ^/ ~1 i" m# Q0 [, z) ?
  500.   {
    - k: w$ J+ E! L5 J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    # C; r6 F( X) t# Y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    1 _1 e: Z$ ~6 ~) n
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))" a: G% T* {% x: |
  504.     {
    $ h: Z$ b0 _+ O4 x  _3 z
  505.       strcpy(szPath,szPathTarget);
    5 p8 `- A! \: }  M/ A
  506.       SetCurrentDirectory(szPath);
    ! n+ T: H7 b! D
  507.     }
    ! u* P1 O3 x3 M' T# Z
  508.   }
    * t+ X% F/ N, s4 j7 S
  509. #ifdef _DEBUG
    8 U3 J5 R: r8 e5 `% _7 A8 @( f, B2 X
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # F8 g' ~2 j* q2 c% _' O
  511. #else
    , b6 ]* E9 k* h7 A* J2 P* R% u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 f  i8 L* M9 F- n5 i
  513. #endif
    : m4 W; c! ]; {" K) N) O
  514.   {6 t" A. p+ w) I$ O- Y, a' J) n
  515.     char tempFileName[MAX_PATH];
    * t# F' i3 v" r
  516.     strcpy(tempFileName,szPathSource);. L( w& E" b1 z- m' @* D0 ?
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! {9 P. D; n* K4 W
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    * ^; f8 f& m+ n- Q& e6 Z
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);: N% P* ~5 J/ t. q3 t
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);& j6 f# m4 d4 `, ^4 n
  521.     return TRUE;
    5 K( g$ j0 n% _
  522.   }
    # ?* O: b) p9 W: I5 O, Y
  523.   // Nuke 0118: Delete run.exe
    7 y  x; V9 S4 _; v" l
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    * J1 X% r+ c3 K' U5 p  m
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    * A# c' {) F% k$ `
  526.   if(!ReadCfgFile("Config.ini"))
    9 L% J3 r$ Z! J4 _, f: |! j4 p9 m
  527.   {
    0 a4 s) }4 F! Y3 A( d+ y- g0 }
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
      e4 y6 L6 Y/ y1 R1 u
  529.     return TRUE;- m/ |+ i. O, s5 P$ w
  530.   }
    # o3 S( A: A( `& r  U! v
  531.   HANDLE mutex;
    0 |  g8 _6 M3 C0 V) G  ~/ f7 I
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , D/ V. D7 e: u4 ~: E
  533.   {5 t. ?+ L1 T, ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    # E  V# `# T* H5 E' l; p
  535.     {
    1 ?4 l1 K) u2 M6 I
  536.       CloseHandle(mutex);
    5 w0 S( V( }  s& {$ X5 A
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    " |) |' D. X+ |9 q0 O) j8 _
  538.       return TRUE;$ D. C' L8 k, f# Y
  539.     }4 s" a6 w2 o- g
  540.   }  
    8 o: a  O0 p; B7 h8 e
  541.   CloseHandle(mutex);! `  _8 H& K5 i0 d% U% h! v

  542. - g. U* l# F) ?* y1 Z# Q
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);; \/ t1 m3 J) c5 K# G8 Y

  544. 9 J+ `2 v/ L  C0 d, C3 K$ K( V0 ?
  545.         AfxEnableControlContainer();
    * f. W9 J9 f7 G
  546. 7 @& ~! L$ t+ S" L
  547.   bCanUpdate=FALSE;
    ( r5 j# z. l0 e4 Z+ o" Q) @& a
  548.   dwStartUpSteps=1;
    2 I1 ~2 `: Y4 l4 p# n
  549.   dwProgramState=AP_NOTHING;
    2 P, D" N1 @% E. T8 {2 p

  550. & v& _4 z0 A8 P% s% n
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ' \; m( h+ p2 d

  552. 2 H& S% Q' D) h" Y
  553.         // Standard initialization" J8 o3 w! |1 F
  554.         // If you are not using these features and wish to reduce the size- P, l" ]( r1 e
  555.         //  of your final executable, you should remove from the following
    3 {  W3 g6 Y, N5 m7 q. I. ^0 u4 v
  556.         //  the specific initialization routines you do not need.
    & m4 \* D/ g" z

  557. 9 {! q7 D* D# a
  558. #ifdef _AFXDLL; ?2 m8 b' j4 V( K
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ( z2 D+ |% V. K3 F! b% }
  560. #else2 _1 M! l- ?( O' I
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    8 E  r1 K, e3 o. {
  562. #endif8 _( X( @9 q, [- U1 {  _+ K9 `
  563. ' M( w7 l, _' |# `- W
  564.   dlg=new CRevAppDlg;
    / n9 g% z- _  h' s3 _- `/ x
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    2 R- W$ X3 W  Z/ d
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ b+ K2 x" {- ?* m0 e3 s! M
  567.   m_pMainWnd=dlg;( V1 \. Y0 ]% f( h

  568. 8 v! u% z$ a+ G! Z$ [/ W& Y8 f
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);8 G# s* T9 m# Q

  570. ; _7 q% _0 D9 X; k* p- n
  571. //  GdiplusStartupInput gdiplusStartupInput;
    " z  h) U: G! R4 _
  572. //  ULONG_PTR gdiplusToken;
      a- a/ m$ P0 g  f, A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);5 W' D; L. G5 n5 |. V; z
  574. 5 G& `; S# v; O
  575. //        CRevAppDlg dlg;9 D3 ]7 R. Y6 e' g
  576. //        int nResponse = dlg.DoModal();
    * F4 ~' j; G& r
  577. //        if (nResponse == IDOK)
    5 m- e% D8 O6 N: V: a( r  |/ X
  578. //        {
    5 p9 H# j0 `! }3 t- o% c
  579. //                // TODO: Place code here to handle when the dialog is
      N; u3 `5 C& y: ?! {' o
  580. //                //  dismissed with OK  m8 B4 K" S4 ]: I' p+ Q
  581. //        }: B4 E6 r- V- y; d1 }' A6 D, Q
  582. //        else if (nResponse == IDCANCEL)
    ! C* D6 ~  R' d% |, J4 N' B) }( }
  583. //        {  w& w6 C. u! `: R- P
  584. //                // TODO: Place code here to handle when the dialog is6 A7 l0 p: V0 g( }7 a! E4 X+ f, [6 s2 H
  585. //                //  dismissed with Cancel
    & A7 F! l  j. X- j4 H& R: P
  586. //        }
    $ r* h0 m& s7 d9 B$ d, U
  587. * m5 `$ R* v  I( h& z$ {
  588.         // Since the dialog has been closed, return FALSE so that we exit the7 C8 p; R" S, a2 [" y
  589.         //  application, rather than start the application's message pump.1 A, d/ P& [/ f5 K
  590.         return TRUE;
    " I) a2 m: p3 _1 y4 T, Z$ G
  591. }  R. W1 w( S7 c. `; n& c4 g! _

  592.   [2 B, B$ w' |5 k# q
  593. char *CRevAppApp::strtok3(char *pSource,char *token)1 j+ M( _  J* O
  594. {
    ' Z& P7 v, y7 \0 W5 Z; k' [
  595.   int i;  U: M  J) [- Z+ F
  596.   char *szRet;# Q6 u9 T2 c# a! `

  597. * ]% N9 J" x# z
  598.   if(pSource) { itoken=0; sztoken=pSource; }$ B2 y  }" Y$ G* z+ c# V
  599.   if(sztoken)
    & [; o" F6 _) {# p
  600.   {# F" ~! V! T6 k! w" h
  601.     szRet=&sztoken[itoken];0 `' @9 s% f3 M6 J3 o
  602.     while(sztoken[itoken])% s+ y8 t% P$ s, b2 M2 z) L- X
  603.     {1 I" E; [- `, F
  604.       for(i=0;i<(int)strlen(token);i++)8 ^* K, |5 ]& ^. |  Q
  605.       {
    ; A- J# b8 L" v: ^! b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) y/ d- S& G/ H, A
  607.         {: e; O  d* S3 A
  608.           sztoken[itoken++]=0;1 e4 A  G% ^6 p9 k% p
  609.           sztoken[itoken++]=0;
    # Y+ V6 f8 W! ]& U1 [/ a( ]( S8 w
  610.           return szRet;
    . m! Q( ^1 l; X* G4 }) `5 \
  611.         }
    3 z6 O5 V* Y' R7 k  ]0 C
  612.       }
    5 @; ]6 X: W) p7 `
  613.       itoken++;
    ; H- |; r9 _) U# K9 t* G
  614.     }
    % O1 z" K+ N" o$ @8 y, E% V
  615.   }
    # a4 v% @$ w: g
  616.   return NULL;
    1 \5 D1 v) A( B0 H+ C4 r$ H, }: z
  617. }
    + x3 P- z' \  F  ]4 e* Z8 l

  618. + g7 i% G, i& r7 G4 d8 I
  619. void ProcessProc(long Total,long Current); b% e# w1 Y% a; ~5 I8 c+ ^
  620. {% Z0 l0 C0 M2 N. f% P) x* w( D
  621.         MSG msg;) C; R$ U' s# l7 G% s, n
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);3 x' J; t  y9 O4 i
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    7 C) Y5 g7 A6 v6 D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' J/ W* _4 _" U& u5 ]7 T
  625.         {
    , p' P3 H% f5 f: M
  626.                 if(!GetMessage(&msg,NULL,0,0))' I$ ]6 B% j# S* [% ^
  627.                 {3 S, ~. @* D  V+ h
  628.                         return;, X  }' |# O: m+ d* L! X1 d1 G
  629.                 }
    ( E# f) F9 s! u0 x! m5 k0 _
  630.                 TranslateMessage(&msg);
    - e- R1 k. V/ P2 r
  631.                 DispatchMessage(&msg);2 T" p9 D& |7 x$ }* a
  632.         }       
    ( y* i* P8 [0 c; K# @- t3 _* O
  633. }
    " F3 i8 F! o% g8 E% ^

  634. : A3 ^; \8 _  C: S) d
  635. BOOL bFirstChar=TRUE;* y8 r5 k& p3 b. t$ Q2 x
  636. : [+ P5 @- ~7 A& y5 i
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    $ B4 |. l' k$ @2 B
  638. {2 ?1 C( j' b& z
  639.         // TODO: Add your specialized code here and/or call the base class' n" e: A0 O; i
  640.   switch(dwProgramState)
    # ?3 c: o1 x3 A
  641.   {
    8 \: I, F  ~4 r4 e
  642.   case AP_NOTHING:9 s' v6 B+ O4 x1 o: v' p4 h
  643.     switch(dwStartUpSteps), ^. n7 g1 i" X$ G
  644.     {" w; a/ Y/ `8 t9 v8 w
  645.     case 1:
    * C9 _8 _( O; H$ b$ h' W% t, @$ U
  646.       {2 m: j( E4 j) S* T/ J) R5 V" }
  647.         int i;6 \, g. X$ ~* C# n9 S& M
  648.         CDC *pCDC=dlg->GetDC();
    9 m' l" W- H4 F/ B- o
  649.         HDC hdcwnd=pCDC->m_hDC;6 X+ ^$ E# h5 C" n
  650. //        Graphics graphics(hdcwnd);, n( r$ Z( D8 P5 X( ^- z& R6 A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");, ?: A, O: a* O5 n
  652. //        INT iWidth=bitmap.GetWidth();" p3 @- q/ U# F: |# z
  653. //        INT iHeight=bitmap.GetHeight();
    $ R2 w: h, ?9 Y
  654. //        Color color,colorTemp;
    5 p! J; d3 G* V) L; @7 D+ Z' L
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    6 Q; K$ b2 X* w$ ~
  656. //        {
    8 |2 I1 `! R' q  m
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)/ l$ t! P7 o( [  f3 h* t! F
  658. //          {. r+ u# O$ U+ v) X3 U/ N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);! D1 S% S; u3 d8 J& W: Q, d
  660. //            colorTemp.SetValue(color.MakeARGB($ Q0 s" ^+ P0 ^; m
  661. //              (BYTE)(255*iColumn/iWidth),1 D6 \% K, L6 J/ W. v! e  Y2 C& }4 j
  662. //              color.GetRed(),
    " y" i- n0 O7 v# G( k6 w
  663. //              color.GetGreen(),6 a* b# E, s& q; H3 Q% K
  664. //              color.GetBlue()));
    , u+ c5 A+ F( s2 \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);5 S3 x" X5 Y- f: @
  666. //          }
    ! O7 H2 I! G! n$ C1 t7 K% N
  667. //        }" ~/ X) ?) a& Q  `  y2 K7 E
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);/ E) `8 A. D, l! [- b5 ~7 k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");5 C2 e) I9 ]$ ^
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ' M( |9 D3 W+ {. G7 G1 G
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");" C% N/ F0 j' S- U0 K8 {4 s( h
  672.         for(i=0;i<240;i+=8)
    4 L3 c9 J7 Y5 {- |8 _+ a
  673.         {: a8 A9 }3 n7 r' e& C% }
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' O* h$ g- m! V8 Z& `) \' W
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 e) J* t! b8 m  a/ {
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% u  W1 ]3 k: n- P
  677.           Sleep(33);! P1 D- V1 \( S3 c- U2 S6 e
  678.         }
    2 Z5 R) A' k5 \$ _, @* Z
  679.         Sleep(1000);
    9 m5 L/ R! m5 l  l- h2 n+ t
  680.         for(i=240;i>0;i-=8)
    3 K0 U* Y7 ~. I4 M: |
  681.         {
    " Y& _4 L0 c& z; Y# }
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' |  m" @& X0 G5 W9 ]8 Z* K- n
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 C! a, B6 @" I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" j, E# }( a7 K
  685.           Sleep(33);9 h- @3 Q1 i, m( s2 v( t& S
  686.         }
    $ [/ n; N* I" a; f6 ?" v" l
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! P, {- |/ T, G
  688.         dlg->ReleaseDC(pCDC);
    & N. A3 _3 b/ ^  ?
  689.         DeleteDC(hdctar);2 t; f; P5 N7 ~. U
  690.         DeleteDC(hdcsrc);9 v  t  k" h. _6 b# {( W$ n7 x
  691.         DeleteDC(hdcorg);
    5 k/ `, j. [' X1 @# \/ r, D: m0 r. I
  692.       }1 a* ^! R3 I! v2 F8 Z/ O
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    6 V6 c) y) _1 G5 g* t
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* q% w8 q! z1 f! e
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    ' B7 b- S. H+ M- X" C- \0 D
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" e& N$ `( L6 ]; W9 n, I/ w
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, b  y8 A$ |0 [2 j
  698.       if(!Dn.Connected())
    6 h1 m7 N' J* m# {9 k! i6 b7 C
  699.       {2 x4 @0 G" F, J" H+ H) X7 w; w9 D/ _
  700.         dwTotalFiles=1;1 O2 h7 Q; g0 J7 }
  701.         dwDownLoaded=0;  a2 P7 L) c3 I" ]# {3 l
  702.         bSilentStep=TRUE;
    5 G8 X  y$ V& j$ m! G
  703.         bCompressed=FALSE;) D9 p+ G2 K9 \/ D0 r
  704.         strExtLocal.Empty();
    + {5 j7 v' V$ M0 e
  705.         strFullName="readme.txt";) c: h6 \, I; h, ]
  706.         dwProgramState=AP_CONNECT;/ v  t( I3 o# E
  707.       }
    - e* [0 O9 Q* g- d! F4 C5 G
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    % o9 q" [* _8 h2 s+ p
  709.       dwStartUpSteps=2;+ K6 I+ x2 T- Q4 t, S; n: y8 ]
  710.       break;
    # \. j. s" v1 i) H: D
  711.     case 2:
    ; d# a4 P' m4 A2 ~* r+ D; g4 {
  712.       {
    3 R; Q. q8 q' a# s# b7 c- t
  713.         int iEOF;6 l7 ^# }- L2 z% Z! Z
  714.         FILE *fp;
    ) H4 Y6 |' Z2 x, X; F
  715.         char szString[512];
    8 \0 j0 }0 }: l9 _* o$ v. X3 |
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    8 d2 f( y- S/ u/ c9 R
  717.         if(fp)" H# J; J/ u0 t7 q2 I0 O4 N+ s
  718.         {
    2 L4 e; u4 k" L% ?7 ~
  719.           do9 O4 ^/ n; o  M9 r0 t
  720.           {( X' s6 m9 E8 U
  721.             iEOF=fscanf(fp,"%s",szString);
    + g$ T4 b" ]$ A+ K0 s+ ?
  722.             if(strlen(szString))  k3 v) m6 O9 Z& J! N6 {
  723.             {/ ]( A" B: i4 D, u- m! K+ B& I
  724.               if(bFirstChar): a0 f+ h7 Q" A7 t' a" K( {& y
  725.               {, v& k# U# @9 Z0 \
  726.                 bFirstChar=FALSE;! D1 v. F/ d& K  W
  727.                 bConnectIsBig5=FALSE;4 H4 {. _# V: t6 C
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ F4 u4 i: O# m  Z' y7 Z0 }: ?8 k
  729.               }
    ) u9 b( v+ P1 Y' g0 O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; e3 C! Y; {. W! `- w% \  M
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));3 Y: s" h+ F/ m
  732.               dlg->m_ListText.AddString(szString);
    1 O( _' F( {3 q& K3 k
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ h+ I  Q9 n4 D
  734.               *szString=0;4 J; Y( T3 ~2 V" r$ m/ U# i! i# N
  735.             }
    $ l5 L3 _1 R2 r. x0 h
  736.           } while(iEOF!=EOF);
    8 I+ j8 u1 g) @, C, r% t/ Q
  737.           fclose(fp);
    $ r3 B& {9 F& A* D/ f1 j
  738.           unlink(".\\DownLoad\\readme.txt");& d4 y% X% ?! M% L6 u: p
  739.           dwStartUpSteps=3;1 [6 m; z( a7 P) X* s& w) n; K8 D
  740.         }
    4 t7 i/ z. v; c/ l, z
  741.       }
    & R  n! i8 D( K
  742.       break;
    / k# F, D; y) }! W/ }& B
  743.     case 3:
    * S+ z1 z9 s# ]' y9 M2 w9 x3 F& S
  744.       if(!Dn.Connected())
    2 o. P/ p, Q% h4 m
  745.       {
    6 E0 \5 F- R  R8 }/ c2 k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    + _0 g1 I7 Q$ r) G/ g( p5 ?
  747.         dwTotalFiles=1;. J5 {5 {% M+ |5 [
  748.         dwDownLoaded=0;
    3 i) }# g5 W2 O+ ?) M1 d  m6 J9 P
  749.         bSilentStep=TRUE;$ N7 l$ ^  }" t  A& f
  750.         bCompressed=FALSE;$ [( l! R# B4 _- Y4 M& V
  751.         strExtLocal.Empty();8 w7 Y4 k1 r. g1 ^; ~( p. A  G
  752.         strFullName="checkversion.txt";
    # R$ K& M( p* b) o3 Y% R. f" W1 D
  753.         dwProgramState=AP_CONNECT;
      `( O# Z6 R% C7 a0 B/ z4 H
  754.       }
    5 [% H- _$ D& I; K$ b
  755.       dwStartUpSteps=4;" u/ y+ u6 T; V$ W+ m
  756.       break;+ D3 x/ k+ w1 b( H9 a  k1 H5 z' w! x
  757.     case 4:
    ; g8 [4 g6 ^6 i/ ^' Q/ g
  758.       {# E7 e- k/ ^/ a9 Z, \
  759.         FILE *fp;3 N) t- d* b1 F
  760.         char szString1[128];
    ; I9 S  B; @3 y9 Y+ A$ l# Y
  761.         char szString2[128];
    7 _+ W+ E6 @0 x5 ~' G
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");" x8 U( U0 ?9 @* {  Z5 F7 }
  763.         if(fp)6 k( G* k4 M8 f$ O- i& I6 |
  764.         {* x, V) m. v- M( U! c/ \+ _
  765.           fscanf(fp,"%s",szString1);
    ; F- G4 P: y6 [8 [& G- @, G
  766.           fclose(fp);
    6 _* }- `/ d; }) A  ?
  767.           fCheckVersion=atof(szString1);
    ) L+ m4 B1 o" x( o, W
  768.           fp=fopen(".\\checkversion.dat","r");: T1 y+ S3 x5 P1 t0 v
  769.           if(fp)- v) d4 r) |. v8 g" D5 U
  770.           {, ?) Q' D, ]* B, L+ k! h
  771.             fscanf(fp,"%s",szString2);3 S  _5 R/ T4 F0 X$ U' P* K# m
  772.             fclose(fp);
    ' M+ G0 |: ^! k& G$ V* S: ?
  773.             if(atof(szString1)!=atof(szString2))
    + d5 B' C+ e: _3 `" U! Q- U6 m
  774.             {1 c3 P( Z" h: ~; m$ Z0 A/ C
  775.               if(!Dn.Connected())8 O+ q) c6 D2 ?) d5 G
  776.               {
    , f8 m0 w2 u5 x) i/ H7 l' @
  777.                 bFirstUpdate=TRUE;
    # t( Q) u5 }2 h
  778.                 dwTotalFiles=1;* [# ]! E1 O7 c
  779.                 dwDownLoaded=0;
    1 g/ I: @7 z$ a6 I
  780.                 bSilentStep=FALSE;; X! V9 h) x# x8 l- o
  781.                 bCompressed=TRUE;
    1 c5 r7 u& w% C" F2 g
  782.                 strExtLocal=".\\DownLoad\";
    / J/ r( [) ^1 p8 l! Y
  783.                 strFullName="update.txt";
    / T; g) f3 d5 ^. {7 G- i
  784.                 dwProgramState=AP_CONNECT;
    4 K0 o7 A  @2 M( [/ ^/ ?
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    # {8 E' r; c; b4 T" s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");+ D6 O' L/ o- k: y5 F
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");! A  y5 p# S% z& F. R

  788. ' M; m3 p, B3 r- t' L3 Q2 m" p4 w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);/ h4 s4 V4 e: ^5 e  K! Q2 B
  790.                 unlink(".\\DownLoad\\checkversion.txt");  V- ~# U5 K( n# l2 B8 p( [
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)3 U+ |; F8 B& C4 ?! E. m
  792.                 {
    , @* z( d3 U% @" i8 y/ t. D! l+ ^
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");! F( I* _" b; P, d6 J
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    : g# v( s" g% X# W
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");; V* J2 f0 Q: j. a) a
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! V# K) M& a* Y+ g9 Z
  797. , ]& A& g- ]: E) s- P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");* I2 _6 l4 P! D# S$ X
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    : x- D1 ^  B7 m' j4 G& _+ N
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    8 g6 S- E: ^+ U9 R' V& G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 a# h% h- n/ w4 r/ f
  802.                 }
    & r9 l0 m; e& g; D# G
  803.                 dwStartUpSteps=5;
    0 h6 ?3 ?$ ?: l8 i( b; E7 U; q: s
  804.               }; o% t+ W9 o) B
  805.             }
    5 I) ~4 m6 w" I# m% D' D
  806.             else
    0 b  F' P0 I5 ~
  807.             {; n9 N* s  G+ R) h( \6 H* I
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! d, |) a2 G' Z0 S  S( y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 Z: R& f( I5 B- }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; |" }, ~: U- O4 H4 I8 O' i
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");3 f9 z/ ^" k" G, E  g0 C
  812. % j7 v* a  {2 X! G. m+ c' X
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( \& t& K4 {: A1 U
  814.               dwStartUpSteps=99;9 H, q4 |. ^9 _0 @6 t) P0 s
  815.               bFinishUpdated=TRUE;
    % `! z! w5 N% s9 x' L/ ~2 J/ b+ [
  816.               bCanUpdate=TRUE;
    # x3 ~% j9 _, Z7 Q
  817.             }. H* B5 L5 l" R- r3 D' S% w
  818.           }+ }. g+ @& u7 U" |; J4 q
  819.           else
    ; H: d! X, W- e
  820.           {
    ( _! F7 k4 o0 o) [% Z; ]8 e
  821.             if(!Dn.Connected())7 F* C+ |+ A  W( ~2 k# ~
  822.             {; \) C5 a2 _. n, R% ^) b5 ?/ P
  823.               bFirstUpdate=TRUE;
    ! y. f+ A, L( D$ N+ H* e
  824.               dwTotalFiles=1;. E9 ^$ q2 j8 u5 K
  825.               dwDownLoaded=0;3 I: G4 B3 Q9 x' R- B( u+ \
  826.               bSilentStep=FALSE;" Q  S1 S+ _* s! f( `  P- j" E# r
  827.               bCompressed=TRUE;3 T/ v+ g) y$ k0 H: ?0 {. O" W+ w
  828.               strExtLocal=".\\DownLoad\";
    ' t) H. }/ ?5 z! B& ^) I
  829.               strFullName="update.txt";
    5 G# H. Q4 J9 |. z) R7 N
  830.               dwProgramState=AP_CONNECT;
    7 h- |7 ~! ^  g; u( z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : p" N% S+ y# O; V# C3 G) c* F
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 g9 s% \. d+ ]3 V- N
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' z# T- B' b) G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' k% P/ o2 r+ D
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 X5 S( q; g  t$ d& P. m
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    6 x" _: I. x2 U: \) o& ~9 S4 f
  837.               {" a" W8 C* l& p6 l% |5 n  [9 K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");; m6 B8 R2 T/ E( q5 b
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    3 `8 z9 y$ }2 W- G
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    0 |; r. m) K% G$ p! `* m
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * u2 _5 a1 e, x/ Y* U
  842.                 9 M3 B7 |' R$ Y4 V: I9 K
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( X% w3 x9 V. f' j4 Z
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 \" m5 P- J1 l
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% ^6 ]% Z- r6 m, ?! H
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; P" N. K9 S, `9 }! A
  847.               }
    * K6 l4 W6 W3 A# {! R' T- U
  848.               dwStartUpSteps=5;
    ; c1 |5 J' H& |
  849.             }
    5 {& C6 c; @( g
  850.           }
    . n7 L$ X2 L1 q& m
  851.         }+ N# Y" |( o9 N! B4 s. B/ C$ i3 T
  852.         else
    8 R) }' z" C/ `# {0 v$ z6 E# A
  853.         {4 |& i: I! k4 r5 `' s2 r/ b/ N; Q
  854.           dwStartUpSteps=3;
    5 g. a) E) H" X; I2 S
  855.         }6 }$ S/ S$ ~- m  K- Q8 B/ `
  856.       }
    : [! e6 p# I3 d# l" O9 k. X; ^
  857.       break;
    ' S2 V5 Y) b' Y: C
  858.     case 5:/ P! n! |( S& ~7 ^
  859.       {
    * E. E" l+ g) j& k* G
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)+ m+ G2 L, z7 P! R" u4 s% q/ Y
  861.         {
    4 r2 c' [& `3 w! V
  862.           int opt_overwrite=1;4 o- W, s, r' B( T& C' d  d; z9 j" S
  863.           int opt_do_extract_withoutpath=0;
    ) n. f$ I& C* H
  864.           unzFile uf=NULL;9 Q" L3 O0 {/ b( Z

  865. " e0 |. u4 y; O  w2 x
  866.           uf=unzOpen("Wsa.zip");. j" x9 {' R$ z6 O. a
  867.           if(uf)+ A) W* c" Z! q3 g$ |& G8 C
  868.           {0 p3 o) T, L) K, ^* @
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
      h3 _0 F/ s! m; q& D( g$ X% y
  870.             unzClose(uf);
    + [( _/ ]: n( q7 X8 M
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");; |7 P( O) L! k" E; f" M8 N! c
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");0 Z' k9 U7 m9 C7 y2 A9 J
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");$ H( I: v# u- f. _
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 y! v* ]0 h7 Z7 Z1 S9 a
  875.           }
    % S$ `$ P& p$ F
  876.           DeleteFile("Wsa.zip" );
    : W; S: }8 [5 I# Q; D0 N5 ]' X
  877.         }
    7 E$ j" g- t( b. X

  878. ) k! q- ^! F3 P$ e0 |5 v
  879.         if(CheckLocalVersion())
    , m3 y4 E2 P1 N2 |# `
  880.         {5 }; a% g8 x' S, J" y+ e
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    " I* V! R. ]* f& R
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    & A1 V2 m! R) }* k$ H2 ]) M6 P
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    9 k: P/ P* J/ z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! x/ T2 M% @' K5 Y0 H
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);3 Y, w) I8 c2 y7 y3 N9 }
  886.           dwStartUpSteps=99;) J* l$ X3 c- K; Y: O8 u  [
  887.         }6 D; |& F1 v& N- R$ U4 [( Q
  888.         else" F, h' \& d& \  M
  889.         {9 `" @4 R- g5 [) I, o
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    7 i3 k6 k6 @' [0 J
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");9 T+ K" H  j2 j3 l# j) O' X
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ i3 Q2 v% Q: {# P0 y

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

評分

參與人數 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客服返回頂部