CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
* E$ C3 u' u# P6 Z
  1. / RevApp.cpp : Defines the class behaviors for the application.) Z9 A" @0 B- g0 Q
  2. //
    ( I% Z+ G% w. |( ~- l; s
  3. / m( \9 t' g! \- f  N
  4. #include "stdafx.h"0 v3 ~: d, ?1 u4 {0 d
  5. 8 |* m* T, Z- d/ B
  6. //#define UNICODE
    " z7 Y% G, |* w3 X( Q  r% a! t
  7. //#include <gdiplus.h>5 N3 L" y2 O3 c# h4 ~; R1 s" I
  8. //using namespace Gdiplus;
    8 H0 r% X# t8 l, S% |  l

  9. ; `/ _" b% Q  E# k5 c% l- G
  10. #include "RevApp.h"$ M' Q. }! k7 S3 q/ g: M4 d
  11. #include "RevAppDlg.h"
    0 L' @* A  f# ?, A7 D& N) e

  12. # W, \, D- k7 l% _' m
  13. #pragma warning(disable:4786)
    + P/ {" Y& i( q- M4 G
  14. #include <map>: m; H6 `' x; l9 M2 ^. {
  15. #include <list>
    & ?6 a5 l) Q4 H* X7 G9 U
  16. #include <direct.h>
    " h% ?* M6 G5 z& ^- @% t

  17. $ }3 A6 a$ A( q+ g; `
  18. #ifdef _DEBUG
    8 F5 w2 l9 S0 f& @
  19. #define new DEBUG_NEW
    2 h% W" g9 H  ]; v
  20. #undef THIS_FILE/ p! h* T2 ~4 x+ }
  21. static char THIS_FILE[] = __FILE__;+ x' l# Y2 B# m! l& H
  22. #endif$ j  j; Y5 q; _, @
  23. #include "SkinResDef.h"7 W7 z" y5 @, b
  24. #include "ChangeBG.h"
    ( ~) ^9 Z, M  d# K. ?: v
  25. #include "AFXINET.H"
    7 p% F! J, k9 j& [6 Q& T

  26. 9 s2 t9 M0 W3 B) d+ A* ^3 _
  27. #define TRADITIONAL_CHINESE 0( }- r" {: E: a
  28. #define SIMPLIFY_CHINESE 1
    4 {  @0 q  V& O. }5 b. N. S# y1 G
  29. #define ENGLISH 2
    9 B, n" _" y+ |( x$ l
  30. int m_iLanguage = ENGLISH;
    ; w* ]* ~3 {+ g9 C/ T0 |7 i# N- @
  31. /////////////////////////////////////////////////////////////////////////////+ [7 ]  A  G9 W" [8 g8 O
  32. // CRevAppApp
    # y/ w0 A3 H1 G5 d! T: h8 B

  33. & F& q9 y4 t- o8 Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ [! r. p: p6 p/ G! L5 @6 y7 r
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ! `* b. d( e+ r) {
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + P' p9 ^6 X* Q/ T* R
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!- {* h9 r' ]$ |5 w' P) h+ P9 W& K: x3 T! M
  38.         //}}AFX_MSG6 r0 J; N; n3 S) S# V8 s+ h4 U
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)' }3 |+ R* O, G/ {
  40. END_MESSAGE_MAP()
    " Z: ^) }# h  T+ {% A6 ]4 O

  41. % G  h. x' }7 f( u+ h: k5 r7 Y
  42. /////////////////////////////////////////////////////////////////////////////
    * H) s5 F7 |5 H1 G" n* j' n% R, u
  43. // CRevAppApp construction% j2 i9 f5 Q/ A

  44. & m( S( T! `( U1 y" v
  45. CRevAppApp::CRevAppApp()7 Y7 I$ x, b3 S; L, ?
  46. {, g7 h3 b5 H+ e
  47.         // TODO: add construction code here,' Z- `5 M/ t% e7 f
  48.         // Place all significant initialization in InitInstance- @6 x7 @3 ?' Y$ Z0 K
  49.   bDisplayIsBig5=FALSE;
    % e% f  t% x0 f- ]" p2 u
  50.   bRestartUpdater=FALSE;- C/ m  |) j  ~; F
  51.   bFinishUpdated=FALSE;
      w1 m6 h; ?% e, [
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;1 D9 h& T# W/ _$ N* S  v* @
  53.   InitChangeDataBig52GBKS();/ B6 M, r, g) ^: g
  54.   InitChangeDataGBKS2Big5();
    5 y' b8 D$ ?+ k; P' i3 Z
  55.         //; V. R. M2 u5 m( u# G* `6 p
  56.         bClickRunExe = FALSE;4 R7 E7 s$ N" j7 T+ U7 n1 e9 s
  57.         //4 C0 ^/ N3 g5 B  }
  58. }
    8 R' g6 x$ J2 }% ]' }+ v; A
  59. ' z1 Q: Z1 s+ c+ r: i4 K5 i! r
  60. CRevAppApp::~CRevAppApp()$ f" J/ [1 ]3 _$ `9 L, V3 @5 S
  61. {% R5 N% A) f7 u* R% l' T' i' V
  62.         // TODO: add construction code here,' K6 d" {/ K" Y. d
  63.         // Place all significant initialization in InitInstance
    ( P! `& W  }# p! v
  64.   EndChangeData();
    + a( G0 j9 \8 B- @- [" `3 R* w
  65. }
    - V- l; E" z" j! B( P
  66. ! {# f% j; J, X$ Y( y& T3 W7 ?
  67. /////////////////////////////////////////////////////////////////////////////
    , a. O* x* b' a8 B  S# ^
  68. // The one and only CRevAppApp object
    ' {! j+ C0 V; P0 L! u. x

  69. 8 c5 ]* m6 I/ _% l; K8 y$ e
  70. CRevAppApp theApp;' D; d% `5 A( o
  71. ( \+ X# T4 s! U9 _
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ) J# ~3 \& Z- w/ w
  73. {
    9 t* _/ L& S  t( S$ x3 O! }" `2 F
  74.   int iEOF=0;3 v  U; K4 l8 {/ `" Y! ?' h
  75.   char szTempName[MAX_PATH];
    2 z& O& _0 D4 k7 ?
  76.   *szFileName=0;$ y1 }- m3 f4 o5 B
  77.   iEOF=fscanf(fp,"%s",szTempName);4 @. V: M3 F& D& h, @( A" M
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')6 u; J. d0 O$ D. A+ i% j0 F
  79.   {5 w* U% R$ S, k0 N* b# u
  80.     strcpy(szFileName,&szTempName[1]);
    . c  p+ q. p/ O& C1 B4 r! T
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)# s, w5 \& g! \/ X; Z
  82.     {# y# F# [: Z/ f
  83.       iEOF=fscanf(fp,"%s",szTempName);
    - g" n9 Z! l' A1 V& Z' k1 U
  84.       strcat(szFileName," ");
    8 M  I( _. Q' I0 J
  85.       strcat(szFileName,szTempName);$ Z# N( D( s( e0 ?6 a  m
  86.     }0 W* F; A' ]! L& A7 I
  87.     if(strlen(szFileName)>=1)" m9 `& T9 v- U1 l3 M$ O
  88.     {
    4 ^3 P0 T$ M! P" Z$ Y
  89.       szFileName[strlen(szFileName)-1]=0;! T, T6 {. v; T! C+ l" M- o
  90.     }# X; s( v. f* p: h
  91.   }
    9 t# H/ m+ ?6 H- O+ A
  92.   return szFileName;
    8 C8 x4 ~3 o: S2 n: h
  93. }
    / y" C$ ?( {- x; S
  94. 0 H2 B' R" z; g. w5 R% z! j$ j
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)- M3 e& V+ q3 Y2 z$ J- @/ O. q
  96. {
    ! R. X0 v2 @  L- G- Z/ v3 D
  97.   FILE *fp;; A7 Y; Z+ ~* N2 X) ~3 }
  98.   char *key=NULL;
    ' ?; a2 c$ m( A7 L9 P6 H* w5 I
  99.   char version[MAX_PATH];9 C' o1 B& o; M% |' y
  100.   LPUPDATEFILE file,olds;
    " b3 y" @% P, S1 {, ~& X# K* j3 t
  101.   std::map<CString,LPUPDATEFILE>::iterator p;' F. A# u2 @8 E3 Y6 @# k: Z
  102. 6 R# y' _6 A3 z: {: A+ Y" V8 d
  103.   UpdateList.clear();
    + T, ?/ G+ D" i8 K+ [1 f3 e1 v+ p
  104.   UpdateFile.clear();- n- R( n; Q& h2 s6 P. A3 r, B! |
  105.   if(GetFileAttributes(filename)==-1) return false;
    ' V0 S. k1 n. S3 h' X
  106.   if(!(fp=fopen(filename,"r"))) return false;
    & F0 G7 `' l/ ?( Q6 `8 c" }% O  m
  107.   fscanf(fp,"%s",version);7 g. w, {1 s8 ~7 S- V1 e7 d
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }4 Y. t& Q1 N- C* c8 {
  109.   while(fscanf(fp,"%s",version)!=EOF)
    * e7 m! |4 W  N* A4 D
  110.   {" N- }' Q! @, ~/ V" ~4 D( }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    , x2 `8 ^3 L- D
  112.     fscanf(fp,"%s",file->path);7 l" }5 R3 x8 R
  113.     ReadFileNames(fp,file->file);& m7 r7 ]" r# s- L& o
  114.     strcpy(file->full,".");
    4 W# A6 G% e* t0 [+ ]
  115.     strcat(file->full,file->path);) K: l1 l1 ^5 a
  116.     strcat(file->full,file->file);/ s3 J0 [/ `1 b
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())% [" `) F( I" w; p/ a2 ]: d, h
  118.     {; a4 ~* {1 k9 Y4 r
  119.       file->vers=(float)atof(version);& Y9 _0 S, P" M6 I
  120.       UpdateList.push_back(file->full);
    6 t& N* o4 I7 I' n" M; o! [
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    & z1 I/ W3 n% Q& J# _
  122.     }2 o8 X4 a4 f. K- h
  123.     else' K: [1 M$ g' ?1 }5 d9 M# |2 q
  124.     {
    - {5 l/ W" o' z8 F2 R
  125.       olds=(*p).second;
    1 f) p* Q: C( J5 }( U
  126.       if(olds->vers<(float)atof(version))) Z$ c" y+ t0 m
  127.       {
    % t% ?$ ], _, D* P( m$ O
  128.         olds->vers=(float)atof(version);
    * a1 s5 P! _1 L* ?8 M# P
  129.       }* i  I( ~7 Z2 ^1 C0 F% M5 y7 T( [
  130.       free(file);
    & X$ A0 l% j9 W( `2 c2 B
  131.     }( b6 q8 J4 m+ M3 i) j4 \; C2 R8 E
  132.   }  L! Y" {) F- f) @# v; ~2 a9 |. j- P
  133.   fclose(fp);
    ' I, b, q0 B+ @1 `# u, ?8 V* L
  134.   return true;0 U% a  n' G& r/ w9 t) F
  135. }
    * R5 ?0 _8 y6 }) J

  136. % x/ ^- ~8 U; c" G0 |+ _
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' ^2 O, q4 w3 f* B- r2 m7 F
  138. {8 W% ?/ u( |5 o2 T. E: {  u" F+ C
  139.   TCHAR  szFull[MAX_PATH];
    9 {- T0 w+ Q- I( C- T2 Y
  140.   TCHAR *token,*inter;
    0 x5 o  U+ l2 j6 L7 {0 u( X
  141.   *szPath=0;
    $ O6 y1 i! p9 R: H( l
  142.   strcpy(szFull,szFullPath);
    / Z! ~% E5 U$ `! z6 W
  143.   token=strtok(szFull,"\\/");) ^7 l; `0 g0 ~/ x+ z5 y
  144.   inter=token;
    4 {4 I7 b( M) I
  145.   while(token=strtok(NULL,"\\/"))
    * I" H3 I2 n( E* D7 y; A' r8 c6 L
  146.   {
    6 O8 i/ C0 ]" K2 k
  147.     strcat(szPath,inter);3 _9 k) z/ `6 S& \6 t) v
  148.     strcat(szPath,"\");9 \4 ^! b- f' ]5 N
  149.     inter=token;# U* ]5 ^, B+ s$ A' v
  150.   }
    # r% Y& s( ?. s0 U+ x# l- F# ^! R
  151.   return strlen(szPath);- h, R3 [8 ?4 i9 T
  152. }! _, ?* k3 q" s+ D4 Y# _( J* d- M* s
  153. 9 k! h9 r* H0 p3 ]
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)- k0 S4 t9 q+ i7 w. S; d5 C9 {6 E
  155. {. E5 w# P. F8 ^1 c
  156.   DWORD attrib=GetFileAttributes(Target);  J3 `7 P- O/ M3 v/ S+ H+ c: T
  157.   if(attrib!=-1)+ z& H& [+ {- _6 V4 h
  158.   {4 z5 J0 u- g' ~- n! X0 k' i8 F0 D
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))2 |5 j7 |: P/ E4 i3 a: `: x
  160.     {
    / O* e; y, |" }" n' c3 P# u- h% U
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);* z6 r' o- b2 j, L# t
  162.       SetFileAttributes(Target,attrib);& t% J3 r. ~2 X9 Q
  163.     }
    7 q! T) R" q8 e& {6 i$ u8 r- W$ C
  164.   }
    * @* }, h$ G4 X" Y' P; L
  165.   CopyFile(Source,Target,Erase);+ t& h% B2 [& Q+ Z; x6 t
  166. }" b- r% p6 d% a; r! F  d
  167. . v$ E0 [. g! D+ D+ t. `; h- H( I
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)4 \; {, Y0 M  R) _5 v8 S
  169. {
    ( o9 a, `0 H- u
  170.      FILE *fp;
    ' o7 k9 P! U' c9 x% N1 m1 U
  171.      char  szBuffer[8192];
    ! }7 A3 f& Y$ D1 }9 a
  172.   va_list  argptr;
    : @- B+ T, @4 }7 u
  173.   J& C4 g, a# }  @8 N
  174.         va_start(argptr,message);) i1 L! T$ l, C% j
  175.         vsprintf(szBuffer,message,argptr);4 L5 v- [9 y  x' C( @  p' T$ S
  176.         va_end(argptr);0 y" P. I  H( T. j
  177.   fp=fopen(FileName,"a");1 N! L6 O' R+ `1 U, n5 r
  178.   if(fp)
    , _8 B+ y' l& ]$ F
  179.   {. I  J% O5 o- C( o. D  J
  180.     fprintf(fp,szBuffer);4 Y/ U/ w9 F# b! e0 c- x7 ]
  181.     fclose(fp);
    4 Q/ }! K- _" V5 p7 F7 s
  182.           _flushall();
    * {( v. O) W, N: X5 C1 c
  183.   }$ @+ Y# s* `; c5 }$ c, b, q9 J. C
  184. }
    4 A) L& p; \; z5 l0 ?3 e
  185. 6 ]" z# r! y/ S' ^
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    9 r% l/ O. b' @  x
  187. {
    7 C0 A% Y  w9 z7 v
  188.      FILE *fp;
    - d$ ]$ n9 p  _) G# N
  189.     DWORD  attrib;
    . Q) f: H. X: p+ I+ y$ h
  190.   attrib=GetFileAttributes(FileName);0 R8 w+ `, T6 L, @" j
  191.   if(attrib!=-1)
    . y/ Z9 e( C% j3 d# B# ~
  192.   {. {. s( I  K8 q+ k5 T; e( {
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    2 }7 I0 O& e* y6 I5 i
  194.     if(!SetFileAttributes(FileName,attrib))# k3 V* E% L; d# a
  195.     {% }7 }5 ~$ V8 @
  196.       return FALSE;
    ! o1 [1 G1 K! X0 }4 p+ G/ |
  197.     }
    # o0 N# ]8 X. i  d; @  R
  198.   }
    5 z7 `3 I( u4 r- P( E
  199.   fp=fopen(FileName,"wb");
    * b- H3 P% m- n7 c: F$ X+ A8 e6 _
  200.   if(fp)' J0 {  Y8 \6 d7 ~5 V
  201.   {
    , p9 a, p4 I, {3 N  u0 ~
  202.     fclose(fp);
    - j9 @3 \& }% c: G9 }; z0 T
  203.   }2 s1 p1 p; _) M" R& C4 b6 E& O6 \6 Q
  204.   return TRUE;
    " j% I" n0 C. ^0 K5 i) y! H" A
  205. }
    ( C" P; ?6 ?& Z/ r9 d
  206. 2 U6 G+ p/ c7 x
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    8 `6 t' z8 B# ^! V' x2 Z1 b% W
  208. {; z0 O$ \/ @& F0 U: U) D5 d! l1 A
  209.   char filename[MAX_PATH];
    & X1 a4 x" ^+ h
  210.   LPUPDATEFILE file,olds;/ }5 X) }' f! y. y5 J
  211.   std::map<int,CString>::iterator i;  W, U7 ^( s! P3 O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    * v7 p' ^- S  V9 L
  213.   std::list<CString>::iterator l;
    % H; X' |/ D0 o. f/ P* c; y

  214. ; M3 ^5 B( U+ \( Y$ i8 S
  215.   if(bFirstUpdate)7 i/ ~4 H# g5 i
  216.   {( N7 B5 ?9 [! g- I+ _0 K3 p+ |
  217.     dwCurrFile=0;
    7 q( P9 U: Q! {* C' _" ~
  218.     bFirstUpdate=FALSE;
    ! w- x4 W' s8 h$ f1 T# O8 J
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' M* o1 p6 ?2 I* Z, Z( X, j
  220.     {, z9 D& [$ G1 }3 J
  221.       dwTotalFiles=UpdateLocal.size();
    " `( D, B# J& e0 E. F7 j. e9 k
  222.       dwDownLoaded=0;
    7 o! r, p  }; f# N- X% C& T
  223.       bSilentStep=FALSE;
    # G: p1 q& R% U( R& s
  224.       bCompressed=TRUE;
    6 u2 n$ p/ }% C3 T, N5 r
  225.       strExtLocal.Empty();. @, {/ e" K6 o6 J
  226.       strFullName=(*i).second;
    2 S+ H, n$ U) F0 W" N" N/ r, G
  227.       dwProgramState=AP_CONNECT;, [+ E7 n% N+ Y. G* C
  228.       return TRUE;* ?2 ^. \8 c( v2 O1 m* w
  229.     }
    ! X9 p1 V8 i' v3 m, P/ ?2 b8 K9 V
  230.   }
    , ^4 _4 }+ V8 g2 f! Q+ F% {! r8 e9 E
  231.   else if(bRestartUpdater==FALSE)
    , Q: O: N$ ^) w* }" m- ~: v/ e
  232.   {  j2 b) e# U' I
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    0 u, @3 w3 {" y5 _+ M- |! T
  234.     {. y( u: ?! g4 h# m( V' C
  235.       file=(*p).second;' R. T0 f% m: v! G
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    % y$ f! I5 ~  I! x, y4 U& c" E) v
  237.       {1 l; k! Q# D& V; p; X# k
  238.         olds=(*p).second;
    3 u6 [1 C, u. A! Q# a
  239.         olds->vers=file->vers;6 Q$ f% R) ^& s1 K
  240.       }
    + _: F1 {& u! [/ `
  241.       else& w, C. A4 I, {9 S
  242.       {0 k8 }% j2 b- \' k* k
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));6 M: s4 w# |% \8 ~1 T
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    , b6 {1 ?+ a/ a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    # ~' i5 k  d7 o5 {6 i8 a0 I3 y8 O
  246.       }8 ~6 J# @7 P5 N
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");7 }2 k" c+ w8 W6 Q4 @
  248.       sprintf(filename,"(%s)",file->file);& H; u' ?# L0 v; R# p* }$ U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);& ?3 j$ V' M: g1 J! _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    3 R9 N7 `8 o# ?
  251.     }
    0 b+ l' Q& b6 P# U) H
  252.     dwCurrFile++;( y" l3 D+ R- L
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    1 F8 n4 [% Z( b9 b7 w2 _, ]; l4 a
  254.     {6 w( i$ j: A: K- J: S- F& J4 x
  255.       bSilentStep=FALSE;1 T1 S& i: l( {7 i0 @; d
  256.       bCompressed=TRUE;) k0 [, i- z# W1 v2 m
  257.       strExtLocal.Empty();
    , m, c' ?' S" ?6 C5 e) [5 b& x& s
  258.       strFullName=(*i).second;
    # y. P+ o5 k+ Z& |1 C9 [
  259.       dwProgramState=AP_CONNECT;8 S- c6 }0 c' m$ E
  260.       return TRUE;
    ' ^' x! ^" Y6 ?% u0 y5 S
  261.     }
    & \% _& K) \, {1 [- S$ P! \9 k* p
  262.     if(!bRestartUpdater)
    ) E$ \# L9 T  w3 Z4 v! t0 g( ]; F
  263.     {
    4 E* k  W3 L: @* T6 y
  264.       int iCurrSize,iFileSize;
    - H' n" u, r0 f; p$ a; H  p7 f, R% z
  265.       iCurrSize=0;
    4 [2 M: O0 y& v" ^7 d- Z
  266.       iFileSize=UpdateList2.size();+ n7 B0 ?* `7 q1 g2 M0 x: c" m
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    . y7 l9 k  Y3 q" t
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / _& C5 H# E/ }2 U% P; r& t
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");4 K8 h) @' x( p* f: r' {1 l
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 J2 p4 e2 F/ |, V, ~
  271.       Fclearf(".\\update.dat");- k8 J6 x$ `; f) {
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 W& ?7 e* o0 h5 H+ H. ?  c
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + d( c* Q; q! ]; {3 D) l9 ?( [* K, e
  274.       {% S' m8 m. f4 M
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())0 A- a$ k+ `+ k/ W+ }
  276.         {7 F5 y. K/ ?" n$ G; v
  277.           file=(*p).second;1 P" b: y+ k' b5 K' O* b1 @* |
  278.           sprintf(filename,"(%s)",file->file);
    $ |5 {- d( \8 ^8 s& S9 I% F* V
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) [8 {: q  M  g' M/ h8 L4 g
  280.           iCurrSize++;$ w% r$ l, ]7 L
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    1 q1 W" }6 ?( K
  282.         }
    $ R/ _5 i: Q3 N" p% D5 I, h
  283.       }. J: J* x! y% @  B. o* F( }
  284.       unlink(".\\update.txt");
    / T- S# @- u/ ^! N- O) @
  285.       unlink(".\\update.tmp");
    ; S) @" t" w9 @/ D1 v5 S; i; O0 B
  286.       Fclearf(".\\checkversion.dat");
    6 }! O% S# m8 V% f/ b3 t; C
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    + P& z" s, ?$ K8 b/ ?: L: T
  288.       if(UpdateLocal.size())
    - U' j+ |, {3 j- ^& [
  289.       {
    ' C8 I; Y  c& T3 K
  290.         UpdateLocal.clear();  O2 G  m( G% j
  291.       }& B3 j2 \7 `* A+ x
  292.       if(UpdateFile3.size())% M5 b8 s% P% \' }
  293.       {
    ( w5 Z  V5 Y- s( r" ]# Z
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)' V0 }- S* w3 f6 j4 L' I$ Q
  295.         {% r- O6 g/ P2 n, N3 H% P. ^. M& ^* i. @& D
  296.           file=(*p).second;9 d$ {0 J; y4 O: f
  297.           free(file);6 x0 ]) e" T. n
  298.         }% ~; ^* A& ~1 b3 s
  299.         UpdateFile3.clear();' R: E' a1 c/ ~" T% {+ d
  300.         UpdateList3.clear();
    $ y, f4 |) p& y6 R
  301.       }/ k5 V3 l9 o3 d" n8 u7 j
  302.       if(UpdateFile2.size())/ @9 Z" g1 z$ u
  303.       {5 O: I/ H$ K, I
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ ?4 l* ?7 n$ O+ ]
  305.         {/ ~' @% p- x3 w7 Q" o. F. C
  306.           file=(*p).second;
    , r$ }' }1 c4 O% g$ i! J9 n$ @
  307.           free(file);
    ! `' `+ J/ A8 q2 n9 @: \( _9 L
  308.         }
    - M5 e9 r1 w( k9 ^; X
  309.         UpdateFile2.clear();
    ( y: T' T2 o) ?4 |  n
  310.         UpdateList2.clear();7 G* Z  |; e! F, c
  311.       }, t# z8 G. ~( `% G% S
  312.       if(UpdateFile1.size())
    1 Z9 p. e  v: i. G# p: F& \1 N
  313.       {
    , M  E6 E9 S& h$ }) v. n7 R
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)% I( k& p5 `& m
  315.         {4 X. g, D  X. V5 w6 n
  316.           file=(*p).second;9 H6 w$ L" D* c5 Z/ `$ T- J6 E
  317.           free(file);5 b; a8 L3 m0 n9 z+ t* J3 X" J: J) F
  318.         }" n; A1 h4 ^1 `0 g
  319.         UpdateFile1.clear();
    : p% ]/ d( J- H# y6 `, s) E
  320.         UpdateList1.clear();% b0 t- H; M2 @4 E" B( ?
  321.       }
      k$ _# t- @; ~6 `, ?* P; ?/ T
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));$ J# H* s; v$ I6 ~" d  V! {+ D
  323.     }
    % A/ s4 ]2 T" m* S0 t" j0 O5 G! V! t5 H
  324.   }9 u! N; J, Y' n9 F
  325.   return FALSE;
    8 @4 H$ n$ x2 e. N5 l% A5 I- @/ c
  326. }: v+ U) K2 Q8 X+ |( l2 i$ a
  327. 7 q! @8 G$ n8 Q) ~5 e! r
  328. void CRevAppApp::ClearAll(void)
    : R# \: V4 a9 U* e4 n1 L
  329. {
      V+ t- d8 r% n$ |2 Q0 ^- i
  330.   LPUPDATEFILE file;* o3 b' A/ C5 g5 U$ e4 m, n1 j
  331.   std::map<CString,LPUPDATEFILE>::iterator p;% k; q) D# B, ]0 y
  332.   t; Q8 o6 u, @8 ?3 Y) r
  333.   if(UpdateLocal.size()), c7 f# f. Y9 k2 U$ `! l
  334.   {$ A/ x; D0 l( T0 Z
  335.     UpdateLocal.clear();, N( E& s+ N5 S- O2 Z4 |3 m  R
  336.   }! P) c+ F, b1 D) p: d
  337.   if(UpdateFile3.size())( M, t* I6 H& F4 ^, e
  338.   {
    ) v  t2 x. r& c4 C+ h0 T
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 E9 ^, a+ {# N8 K
  340.     {
    , u7 Z8 P7 v7 Z/ h, z" X# e. x0 t
  341.       file=(*p).second;3 k5 Z' P9 W3 E
  342.       free(file);0 Q8 d; t5 T" j
  343.     }( r- {1 R  Z4 t: a0 k( B% @2 u
  344.     UpdateFile3.clear();: W6 j" M- v) Y: ]  g1 v5 N& W, w
  345.     UpdateList3.clear();2 h2 u( X6 d& B2 {) Z4 [* \8 b
  346.   }3 H8 d) @- i/ i/ c. I
  347.   if(UpdateFile2.size())/ |- S* f& O5 T
  348.   {
    9 b5 ?. j7 W9 |3 T- j1 X" E. Y
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 @- ^/ j9 c: h4 D
  350.     {
    ! g) j3 s; f: ?8 d# e
  351.       file=(*p).second;+ k3 Y3 }2 G" u% I7 D8 e
  352.       free(file);/ U. x) K) u( A: c: P8 e
  353.     }
    % y3 a9 V: @7 o. h9 f  n4 M3 O
  354.     UpdateFile2.clear();
    4 a: ]: K" ], f
  355.     UpdateList2.clear();1 ?& ~8 r; G" X* [5 b) A6 k2 v
  356.   }3 E: a9 [3 U& C8 z8 {8 o
  357.   if(UpdateFile1.size())  N2 \4 e. F) F+ H/ h) Y6 t4 s
  358.   {8 ?  X+ a9 K' H0 ^
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) ?' D0 t( n3 z) l; a8 u1 G
  360.     {
    ) |8 @4 ^+ O7 G
  361.       file=(*p).second;, [/ \# h- O6 V
  362.       free(file);
    $ h7 M3 d1 _( @7 c& h
  363.     }
    1 R$ S- P1 C& I  J7 s' K
  364.     UpdateFile1.clear();* M# R- M3 @$ q6 ~  w
  365.     UpdateList1.clear();
    ! A5 k6 y5 Z5 T- M" M, E
  366.   }
    5 n# a, Z4 M, M: R( N
  367. }  
    . R8 t/ _8 r$ X; x( U7 Q/ F, @  v
  368.   % I- W$ J; }& x7 ^% \6 f
  369. BOOL CRevAppApp::CheckLocalVersion(void)# g2 ^* ~7 H/ N" R  ?
  370. {! C8 \  v% o) E$ f4 z, C
  371.   int c;
    ' Z6 o: U- U# t
  372.   LPUPDATEFILE file1,file2;; ]- d! p* m3 a- C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;* S7 W9 S: n- |5 N7 m- g3 ?
  374.   std::list<CString>::iterator l;
    8 G4 M2 R. u  x9 [, j0 M3 }
  375. 0 }# ?. o, F# R- G4 c
  376.   UpdateLocal.clear();
    4 ~0 N+ t  l4 f% v! `$ f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    3 C/ z5 \$ ^# c3 E4 V: g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    " j# c2 T$ |$ ^( n
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - P. Y% T3 W2 {" H8 Z7 D# V
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ; v% I! `* D# G# _
  381.   if(UpdateFile3.size())
    # z3 q  u+ a9 o- b3 \' I: F- X4 U
  382.   {
    ! \3 T: z4 @( h9 E2 _8 Z% s
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++); F% ^& ?) U1 j& [9 n7 X5 U
  384.     {' s4 B) h' W: p2 F1 c$ B
  385.       file2=(LPUPDATEFILE)(*i).second;- U; z' _' E$ o, A" F1 x" g% w
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    $ W* o1 @# {# A: T/ Q7 p: d2 V( C2 L
  387.       {! O* e; `0 d3 D9 w  d4 t
  388.         file1=(LPUPDATEFILE)(*p).second;" C: ]0 `- E) o; [# o
  389.         file1->vers=file2->vers;
    & N' R/ h0 ?, L# V& v. Y2 w$ E: B. M) d8 g
  390.       }
    ; w2 P: B5 H4 i% C# t; L- _3 O
  391.       else' T3 |* G; T% P7 f( [( Z! g2 ]2 q  ~
  392.       {! B) j- V5 ~# M$ C. W
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 }( Z# P" E; L
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));8 a7 Z6 u3 Y8 I$ [. o
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    1 c8 G( @+ {- R) }! D; S
  396.       }5 L7 {+ U. w! o) t7 g  O
  397.     }
    9 t3 y' ~0 {7 `5 B3 L
  398.   }
    3 A5 ~) O4 Q# V; ]5 [, [
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)' N9 S! R9 H( f
  400.   {
    + W% S3 G: g6 `+ y( i+ X
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())" H, Z5 Z) S: K5 ^
  402.     {, J" T1 b' _3 M* A) u
  403.       file2=(LPUPDATEFILE)(*i).second;4 i) i# `5 V% U( B; u, j9 k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())* e8 h" N2 p0 ]/ H0 }3 t1 V
  405.       {
    7 w0 v, F1 [( C' e9 T
  406.         file1=(LPUPDATEFILE)(*p).second;1 q" c4 g0 R- n- f
  407.         if(file1->vers!=file2->vers)
    & J. }; Z1 W0 ?2 y  Z" N7 }
  408.         {
    7 L( G/ M9 h0 h
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    * k; _3 t; A& G( s6 `
  410.           c++;- r  B# R( c& B' y: h
  411.         }0 T7 b, |3 G0 Q3 k5 h' t: _
  412.       }/ h% g9 F, y6 t0 V6 P
  413.       else# r+ j1 R5 H! ]7 s4 X
  414.       {
    , s' A$ ^4 b5 F* R9 J
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));+ t% ~0 i1 i- n% U
  416.         c++;8 ~3 N" J5 u& e% U: S# S% P  Q" M
  417.       }- d+ A; J% Y, A4 H3 p. {
  418.     }
    # L" N' D( q! T3 X8 h+ V0 h2 L
  419.   }
    / _, H  l9 f' |
  420.   unlink(".\\DownLoad\\update.txt");! T0 J( Q6 C$ X2 D( E  X( S
  421.   if(UpdateLocal.size()) return TRUE;
    ( D6 |( C4 D  T5 a% A  s
  422.   else                   return FALSE;* h" ~/ f! c6 L4 }& _, H% s& R
  423. }+ X% v9 ?3 h  I! X& a% O2 C
  424. 9 S. [& f- u/ ?8 P1 Z6 D* D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ' O- i( T* a$ M) x, e! f
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"* }' e1 G! T, g: i

  427. , Y" i3 }: g/ Q/ @7 P$ Y1 [4 Q1 U

  428. 9 b/ X/ U8 h  S( Z, L- n
  429. 0 ]7 t; ^! V# k2 J' g- Z2 U# J
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ' n& e9 m" [3 ]7 Q, h
  431. {
    " o; n- W: T, ?' v3 ^& ~" z3 k! o( _
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;/ ?9 j0 _7 D2 n& ^- g
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)4 c- Y, w/ O/ S4 E
  434.   {3 b; C' s! L2 I+ A# ~
  435.     char szLanguage[50];
    , x- ^2 H2 D3 z7 S! r, k; W
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    6 s  |1 D7 W, ~/ X7 p1 E, ~
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 M* P, p6 b1 B7 U3 T
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;" M! Y: H* p" |
  439.     else                                   m_iLanguage=ENGLISH;, S- t. G6 O7 Z2 E+ u  {
  440.     char szRegister[100];
    1 L/ d* z' n. Z7 Q4 w
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");  q7 _7 \" ~( \7 f! U4 G
  442.     strRegsName=szRegister;( D+ D4 ?5 [' w) `) \# v3 ^
  443.     char szPatchURL[100];
    # b" k  e! ^8 i. J3 s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# G2 a* x5 A* J1 P0 {: t
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);0 p. H4 A/ N% i0 ?6 `; f; R# I& a' x
  446.   }
    , y0 ?! I# y, \5 t
  447.   else1 S5 T  d8 {. X: ^3 S/ N
  448.   {
    ; [3 [) A1 M$ `' R
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ; N; i% ?) u+ f+ a; W  k% g
  450.     strRegsName=DEFAULT_REG_URL;
    / o3 V; n, I7 e& ]" u+ t! e& e
  451.   }
    8 {8 c) E, s1 j" w: w
  452.   if(GetFileAttributes("hosts.ini")!=-1)8 h5 K1 Q. [: O
  453.   {
    * m: k* o, G2 x1 W  }4 P
  454.     char szIP[50];7 C+ F8 U* K5 i9 S$ j, S  \
  455.     char szDIR[300];: L" f/ `( K8 r! A8 B
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + ^- y& D  H( P: w: J3 ]) t
  457.     {
    / Y: t; {$ E5 L0 ~" k
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ' {1 ^- ]) W2 g- r2 a3 A" t9 s% w4 |
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");; E- Y5 |! m% z. u3 r; H' s& B
  460.       strHostName=szIP;
    & @6 A( Y7 p0 m& n7 Z
  461.       strHostPath.Format("/%s",szDIR);
    + k* n: w8 }. O& A% X0 E
  462.     }
    7 [# k. ^! A  G- \; w
  463.     else3 A6 S4 c5 s. o& d
  464.     {
    ) l) g! ~) C% p) w, e/ I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 A+ z) ^1 M" s+ K$ E: G, k
  466.       {" I2 Q2 V0 U) t* ^( ^( F" u' V' q- }
  467.         char szLanguage[50];. |* B( w3 B2 F
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    9 C  l# a/ _; ^2 Q( Z& R
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # F- q/ ]/ j; [. w8 G' K8 @* w
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % ^0 H# W8 C' P% e# K0 o# }) `, E
  471.         else                                   m_iLanguage=ENGLISH;
    3 h, @- I# t6 e
  472.         char szRegister[100];
    ; s5 z. |7 N% @/ T7 A* }1 H
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    " |: T' ]5 M9 k. e
  474.         strRegsName=szRegister;% c% s3 }. C! B3 G  r+ y
  475.         char szPatchURL[100];; J" G" f  V7 M# ~$ A1 O' F
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 f& p7 [* W3 q9 A# A' Q
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    2 A4 ]1 X3 ~& H8 {/ [) E
  478.       }& F) D. O, b2 s2 U7 c& m8 i
  479.       else
    1 Q. q4 l& \0 Y) \3 R7 y, _
  480.       {% Z9 h$ L. B' P8 g/ N0 L! z  s
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    / V* P3 l* u1 L; C4 K& M7 n9 C
  482.         strRegsName=DEFAULT_REG_URL;/ |4 ^3 F$ |5 i4 a# s! m. q2 K
  483.       }& e" J& f1 u, F) `& T
  484.     }3 D& ?; J0 k2 j1 C0 |1 T$ g: C
  485.   }5 s9 {7 |! r1 G! y4 R/ V# s, R$ ]1 z, k
  486.   return true;
    5 @+ A% Q8 \! j9 w9 K# u
  487. }
    2 _* R1 f1 g( r+ k% d
  488. / Q! D1 Z* q# J2 P& W, J! f/ P
  489. #include ".\ZLib\unzip.h"( J# u& P! b. c& A0 U
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    " w) U3 @4 q7 T3 z9 ?
  491. /////////////////////////////////////////////////////////////////////////////: ~+ {, {( n1 x( u8 P
  492. // CRevAppApp initialization
    ; {% H' Q3 [( \0 b6 U
  493. 1 z4 s, h" x1 a( `: W* n
  494. BOOL CRevAppApp::InitInstance()
    3 O7 j5 A" L, f  N
  495. {" e8 d# \1 P# ?; ]
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: l% C, F& t- g8 S$ e0 g

  497. ) U0 R& W0 X* Z2 L( W+ h, T
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);; w4 `  q/ X! D* r
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    / R0 f) I" I3 u
  500.   {1 l: d8 n! J1 v) j5 q1 z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* T2 `$ n7 R3 p! J$ L* T
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    : e+ F1 G, r6 H/ A0 m$ P6 m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ) S+ P+ @) K( @
  504.     {1 H. g4 K6 V' }
  505.       strcpy(szPath,szPathTarget);3 n2 E3 \1 j" G, t
  506.       SetCurrentDirectory(szPath);
    / \5 z) D  W7 ~4 ^3 Y
  507.     }& p8 j: p  i' i) k: K. n
  508.   }
    % |$ K9 G5 @% a/ B' I. G# y% t* M
  509. #ifdef _DEBUG
    & ~+ d" n' I/ U. N) M( Z1 k8 q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))9 R) M0 n6 z! `3 J0 U
  511. #else
    $ _* X, G/ Z) x" U) ~5 t5 E+ D8 f: b
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! T& g( E+ N' w% ?) S: Z/ Z
  513. #endif
    5 H" S2 }" A: C8 }* y& r: H8 R
  514.   {
    ; E0 j/ p7 m+ {2 r' v$ W
  515.     char tempFileName[MAX_PATH];
    ) [* z5 @3 P1 T3 T
  516.     strcpy(tempFileName,szPathSource);; }/ k8 d/ W, v$ V$ b) p! e
  517.     tempFileName[strlen(szPathSource)-12]=0;
    4 {0 i5 |+ l8 u5 L
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) M1 }: F  N/ p' r6 E
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    7 k9 A" c" `9 G+ s( p  l% T7 ~
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) v8 `) ~7 y1 r2 F9 G  L" e7 ~5 `
  521.     return TRUE;( k5 A) Z% b, b! C& L" I8 w  v
  522.   }
    % i* V& c/ M- B9 m
  523.   // Nuke 0118: Delete run.exe
    0 K5 y" m; e8 |
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );( F0 ?6 P+ e& D9 P
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% Z9 K3 W  F# O2 M9 t
  526.   if(!ReadCfgFile("Config.ini"))
    ' K) y+ @9 e8 X. b9 w
  527.   {; }" e  W9 K; i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 ]* v/ H# ^$ c' W" G
  529.     return TRUE;( x5 X. p& U% E( u
  530.   }7 f5 F( i  F/ s, C- t2 g) l
  531.   HANDLE mutex;
    7 B: @$ e2 U6 \: u
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): ~; s; f. R' n1 x$ H, A. W) ~, [
  533.   {
    4 q/ s+ B0 p: L) B/ X- j) L
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)% }' M5 O$ o4 J$ r0 n6 @  A
  535.     {
    ' R8 s- b3 w( c& p) t8 s$ f* H
  536.       CloseHandle(mutex);
    * W" G% w# N+ _) w
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * Y- B- k) u9 w8 C6 u$ B
  538.       return TRUE;
    6 x3 ^( j0 |3 W% Y1 j3 O( Z
  539.     }
    5 D2 i. z6 `5 q0 z
  540.   }  * R3 j! f* E: c+ ]2 F! F1 n
  541.   CloseHandle(mutex);
    ; L: m5 F1 v& m( j% v: |) R
  542. 2 T% ]+ w: T2 g- t/ o6 v
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    1 M: g' o5 P7 L/ E/ o5 u

  544. - K' l/ c5 |( a5 v9 S% \. p% e
  545.         AfxEnableControlContainer();! S) L$ F1 n* x
  546. ; l5 A+ I% d3 S5 M$ T: w
  547.   bCanUpdate=FALSE;3 `+ o6 [' X& o3 x; A, p
  548.   dwStartUpSteps=1;: Y4 r' F& k3 ?" E/ Z
  549.   dwProgramState=AP_NOTHING;1 d: H4 e4 x; U; ]1 {2 x/ ^: ^+ ?
  550. + Y4 _- z% ]( p: G( E2 A" W' O
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);, X7 Z7 e6 ~  Q# v1 H7 f1 \

  552. * z% r  ^# N! a! z$ M6 ]
  553.         // Standard initialization
    . I) E$ \! y% Y
  554.         // If you are not using these features and wish to reduce the size7 T# j% V& d  ]* t$ Y
  555.         //  of your final executable, you should remove from the following" b- P; F' r  C& s1 W) J
  556.         //  the specific initialization routines you do not need.
    + \8 u! |8 R9 e1 m5 l

  557. $ @8 A3 J7 Q6 t0 |
  558. #ifdef _AFXDLL
    9 [7 i- \1 u' A% n0 Z$ E
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    7 F* _9 q* Y: ~; m$ j
  560. #else
    5 ?7 A7 E1 m6 Y8 L
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically  \% g7 a4 J9 ~+ I
  562. #endif
    ! M& Y" h/ j# R- I* T9 Y
  563. + d+ E. H: h# S/ s5 L
  564.   dlg=new CRevAppDlg;
    ! V& Y! e0 C: k
  565.   dlg->Create(IDD_REVAPP_DIALOG);9 d  P" g2 ^& q& |* }: u% }7 Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ; G9 p" @9 d* h$ u% h
  567.   m_pMainWnd=dlg;
    + a2 E1 E& H% u/ F
  568. & J( g& e0 ^, ?7 v+ N" Y8 _
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ {. b8 v0 l4 k- \7 w4 M

  570. / y  T- s* k( F! m$ M) y
  571. //  GdiplusStartupInput gdiplusStartupInput;* E; s( V! C8 J9 e- f
  572. //  ULONG_PTR gdiplusToken;
    # R7 b- |1 f- ^% w, I2 w: _3 I. g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
      T' J( ]1 z& y4 w5 w
  574. . \! J; Y* {* z  L
  575. //        CRevAppDlg dlg;' r# _* _7 M" |4 d# b) T0 D
  576. //        int nResponse = dlg.DoModal();5 ^: d1 ?! Z/ t) z
  577. //        if (nResponse == IDOK)
    9 i% k" d; n2 Y2 a/ ~9 M
  578. //        {
    * B7 t# f* A! U" W! w
  579. //                // TODO: Place code here to handle when the dialog is
    1 h- i$ L4 ~* v/ h# O
  580. //                //  dismissed with OK
    * Q  k; n. R6 g( [+ Z# K5 h2 e
  581. //        }
    ) w! s. a! z$ K3 f
  582. //        else if (nResponse == IDCANCEL)# z. e8 I; Y! W6 d% i( O0 k
  583. //        {
    ( o+ J8 t0 C7 k0 X3 W7 O+ o
  584. //                // TODO: Place code here to handle when the dialog is
    ! b, J* Q/ i" g
  585. //                //  dismissed with Cancel1 n0 l  H, E' c$ i% \9 Y
  586. //        }2 r& W$ L7 Z. G" C$ i( V

  587. 7 O) x6 K6 ]" U( V  @) |% _
  588.         // Since the dialog has been closed, return FALSE so that we exit the) A/ U1 B3 @0 ~$ I0 _+ m  B( q
  589.         //  application, rather than start the application's message pump.
    * [: R& }8 C* `# G( A. A
  590.         return TRUE;
    ' j2 q* ?) a0 z- o1 `
  591. }' l$ v5 J+ L) a& a

  592. " B* f- v; s( F9 B# e8 e. K6 a
  593. char *CRevAppApp::strtok3(char *pSource,char *token)* m5 `$ x1 s% i7 R4 q4 Q- K, a. F
  594. {
    ( ^5 _) q# s! H% s& m7 }- Y
  595.   int i;
    % m7 }, `: e0 _' }$ f* k, R
  596.   char *szRet;
    3 f: c# B) T' ^( a
  597. + J; I; w# c) w/ s0 l9 m7 ]
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    6 D0 M' l/ H5 N7 d8 m
  599.   if(sztoken)/ I% A# r8 p6 G- E
  600.   {
    / m7 Y9 s) K" _! R$ k
  601.     szRet=&sztoken[itoken];  @6 t  s. j% W) C+ b# v% f: ~( ?
  602.     while(sztoken[itoken])
    % e- H1 ~, O) P. L. C! V1 G# m
  603.     {, N  k" ?# }) T) c- t/ b
  604.       for(i=0;i<(int)strlen(token);i++)
    - v; H1 b0 w8 C3 I
  605.       {
    " P% X+ d% ?* b1 i$ V  l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])2 i( ?) O; A3 o- y" f
  607.         {
    3 }% m2 |% q& J5 h; E" C6 K4 T* J
  608.           sztoken[itoken++]=0;( i; d5 j7 t2 S  E6 r9 g! X
  609.           sztoken[itoken++]=0;5 B( G  b8 p. q$ f+ b0 O
  610.           return szRet;1 w: @( [$ r' l
  611.         }4 C8 U# [  S6 H7 x/ \' H
  612.       }
    , U. v1 T2 n$ [4 y9 X
  613.       itoken++;
    ) M1 b& I4 T1 Y. |1 K' [
  614.     }
    $ g6 |4 Z1 w1 A! ]7 {9 x' s; K
  615.   }. b! U: l1 m! c$ ]
  616.   return NULL;/ X5 s( ~5 L4 I2 H- _: V+ c
  617. }7 H& N/ P" }3 Y1 R. a& J
  618. 6 g+ A8 V2 l; M6 x4 g5 k
  619. void ProcessProc(long Total,long Current)9 W  i/ o/ R  E: `$ {
  620. {
    ; O3 D# d$ p0 x. Q- \) O+ [3 P
  621.         MSG msg;
    : d1 z: L; ~- I( h" W
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);8 ~0 m3 E% @. l3 s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 g2 u9 h6 y  @0 T7 O2 Q& ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))' W  P6 w; ~( a  G# q* \
  625.         {/ O- O* C, V& t
  626.                 if(!GetMessage(&msg,NULL,0,0))
    0 d& |' e1 Y8 R8 n; j$ }
  627.                 {
    + U$ R9 K/ J  g$ Q' k) m( U& e6 }
  628.                         return;& h" j; [  h5 l) E5 Q6 e
  629.                 }
      C; T, M# v3 U, c8 p% P
  630.                 TranslateMessage(&msg);! X7 W' v: _& ^
  631.                 DispatchMessage(&msg);
    0 I3 J7 S# C; G) v% `3 h. c
  632.         }       
    & e; r6 H( ?: D" i% T
  633. }* I8 ?% T) v  o# u( U
  634. ' j6 B  W. ^" o' s6 ~
  635. BOOL bFirstChar=TRUE;
    ) {# t0 j5 _2 o3 l
  636. , [2 ~. b, |* Y) ~: g- S- y
  637. BOOL CRevAppApp::OnIdle(LONG lCount)8 q) c4 h0 q/ T' T( b: l( ]
  638. {
    6 B' M, y7 P& H0 Z3 u
  639.         // TODO: Add your specialized code here and/or call the base class
    . s% V4 v9 W* b2 y% ?
  640.   switch(dwProgramState)
    7 Q+ ]# Z; M8 o+ v9 o
  641.   {5 ^, E9 n4 I& ]* _0 c
  642.   case AP_NOTHING:
    / X( G$ p( W5 V; Z$ ~* ]
  643.     switch(dwStartUpSteps)
    ( s4 X0 Q% i8 M, j1 X3 K
  644.     {
    , |7 P6 R$ ~; C) C! x6 f! o
  645.     case 1:* m  x' t* l5 }5 ]8 x7 U2 b
  646.       {% b. N. B, M$ `! k( Y8 a& o6 X. @
  647.         int i;) f$ D9 `6 U2 G) i, O' h- C! a
  648.         CDC *pCDC=dlg->GetDC();: e, y8 S2 @. C% V8 K# m
  649.         HDC hdcwnd=pCDC->m_hDC;' W. w- r- y3 U3 Z
  650. //        Graphics graphics(hdcwnd);
    ) I, q$ U7 T/ J9 n: k4 g
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) x2 t4 i0 R* o
  652. //        INT iWidth=bitmap.GetWidth();& A8 I) N1 ^* u/ J+ L5 w, f& X3 u( I
  653. //        INT iHeight=bitmap.GetHeight();
    7 [6 A  E& r1 d- {1 M
  654. //        Color color,colorTemp;3 s6 e& \2 F  o( J2 }) g
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    2 ~) b) R) n) ?( M+ `
  656. //        {
    8 }6 D" H8 Z& I& v0 R8 H2 t
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)6 m* i9 E( H$ r/ c
  658. //          {
    4 Y- G% ^7 Z( \4 `& Q/ k4 v& x
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    $ u# Q5 r3 @1 z4 U2 d
  660. //            colorTemp.SetValue(color.MakeARGB(
    * P7 `7 @7 Q! N- K2 b
  661. //              (BYTE)(255*iColumn/iWidth),
    / l5 M- l. |, c- V2 C) s) _
  662. //              color.GetRed(),
    ' k+ e9 W: z" c' @( e" P6 o# c
  663. //              color.GetGreen(),( U9 _0 I, d4 f! H# C1 h, K
  664. //              color.GetBlue()));
    $ W+ v& }% x0 ~. M! Z: Y4 Q
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    9 e: F- M6 D7 \" A$ `  ~
  666. //          }
    $ e5 t7 v, g9 `' R
  667. //        }. p* a, n- t$ J! J, T, |  v9 b
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    0 M* B& {9 Y" v8 {
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! R' ]9 [9 Y; l! g$ o
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");9 r4 X0 ~- H5 f3 d( r% j5 h
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");6 z5 |3 z+ r) I- q4 j9 e0 k+ m
  672.         for(i=0;i<240;i+=8)
    3 k& f# Y+ `9 M4 ^8 W; G. w0 |" e$ ], o. h
  673.         {9 B% ?; o7 B6 s; s
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 w5 z9 s3 W# \4 Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);) d- g% j; @  A
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    " Z% E  |! K$ g: O7 J1 |, n7 {9 F4 v/ i
  677.           Sleep(33);+ q/ |5 ~0 [' |0 z6 c
  678.         }% z* W3 E9 I6 Y1 U+ u
  679.         Sleep(1000);
    ; R6 H/ \2 {, o) ~
  680.         for(i=240;i>0;i-=8)
    7 C! X/ C" m, ~! f  y" `
  681.         {0 a4 R' V# _/ u) d0 ?  w
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & r; P# e& B4 H7 ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& F1 }5 }0 N/ H! l& ?* m& M2 ^
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ R6 k6 E3 `5 v* w& @
  685.           Sleep(33);- U# A! _5 o) U, c6 v$ N6 B
  686.         }
    : J3 f+ z# z4 H( d/ g1 R+ s; `
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);, z6 T9 ^6 Z" `. H
  688.         dlg->ReleaseDC(pCDC);5 O/ m0 e, O5 P9 s) k
  689.         DeleteDC(hdctar);
    ! J, R, |+ s4 l( S% R; [
  690.         DeleteDC(hdcsrc);
    5 I. \- ^  w! p5 \! ^
  691.         DeleteDC(hdcorg);
    6 S( y8 F" N, i5 K7 h
  692.       }1 }! W' T, h4 j" f/ E
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);9 n4 {( S" k; P6 H& K$ a
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");4 m3 Y5 B& O5 N% U4 Z/ ?8 u0 G
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");9 t1 G- x# z* b8 f- k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");7 b! h2 [& g3 o3 X# u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      ~9 T' y( y4 n
  698.       if(!Dn.Connected())( A: G$ G: ]' @9 u% p( D
  699.       {
    * B# S1 R* u9 z4 R- L
  700.         dwTotalFiles=1;
    1 `0 }0 ^1 T. T2 Q$ x
  701.         dwDownLoaded=0;
    9 y2 y8 L0 j7 T$ O0 w
  702.         bSilentStep=TRUE;" \9 U# b4 j% Q# Z. b- T* T6 ]
  703.         bCompressed=FALSE;) {( J/ _3 Q3 h5 l% o4 H
  704.         strExtLocal.Empty();
    ) f6 q& F$ c1 }3 \
  705.         strFullName="readme.txt";. y  x9 o2 u# O  f: H$ f: S
  706.         dwProgramState=AP_CONNECT;
    $ K( F7 F/ R2 b- m
  707.       }
    3 A: o: r$ _, C7 B! ]3 H7 H3 r
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    5 d' u+ {+ u: q0 n  `
  709.       dwStartUpSteps=2;
    1 w. u/ Q9 i( [2 x
  710.       break;
    # |  l: R. [: c) s
  711.     case 2:
    1 \- B0 g7 o3 W9 F0 h  l0 z3 Y% u
  712.       {
    # Z- C5 G# Z& p. F% \$ [/ ^2 p
  713.         int iEOF;
      b. M) F: C7 f' h
  714.         FILE *fp;
    * h4 H5 ?9 ^8 j8 c/ W( K5 O8 r. g
  715.         char szString[512];
    5 a! E3 {: t/ G9 W! @: m# t
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");5 ~. I: `/ M; v. o, L
  717.         if(fp)+ ^# U! k' ?$ @1 V$ d. |+ f4 K2 m
  718.         {! b) X( I" A& v  J& Q; h, D5 c
  719.           do
    " f: b8 J& U+ R3 V1 ^. e6 x0 c
  720.           {
    ; Q' ~  ?; F( s/ r! U1 T: x. a
  721.             iEOF=fscanf(fp,"%s",szString);
    - F/ Q' {0 O$ A# |0 J- M! `$ C, y' P
  722.             if(strlen(szString))
    6 B# @+ w7 J% i+ p9 U2 P  _
  723.             {; c# }7 Y" c1 x1 a4 s. Z/ ~
  724.               if(bFirstChar)
    3 \8 {) }9 D2 I# u* B
  725.               {! g5 t% T$ q# ?  b  T+ ?; D
  726.                 bFirstChar=FALSE;
    ( T9 n; ?2 Q5 v( C0 O+ X
  727.                 bConnectIsBig5=FALSE;- U, E) Z4 ]6 b. O( L
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    " r2 ]" h5 Q9 {$ N% C
  729.               }1 s* z1 N' E; l+ j# _, l
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& E, G3 y' s' {8 p2 X! ]9 G
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    # t, N& s+ r+ s6 }: K
  732.               dlg->m_ListText.AddString(szString);3 [2 s2 q' T% f
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & e; t0 |% f1 V. H/ d! ]) w
  734.               *szString=0;
    0 h2 E6 E0 f5 C! s. A
  735.             }2 Z; x; I4 C# |+ l5 @
  736.           } while(iEOF!=EOF);1 t* c" O; p2 @; N
  737.           fclose(fp);! Q" ~2 C; w( o! |
  738.           unlink(".\\DownLoad\\readme.txt");4 a# M' ^+ H7 h3 n2 ]- J
  739.           dwStartUpSteps=3;, @  n5 y# ]6 `' A9 e9 F5 W
  740.         }. B: S! ^8 }) W# p. C  N7 l" d
  741.       }* |& d0 ^1 W- u& I  E
  742.       break;
    ' |* B% C3 w8 m( M3 I3 Z; z
  743.     case 3:
    , J5 A- K& {# Y
  744.       if(!Dn.Connected())
    : f% R* W& E5 v
  745.       {* m; E" `/ W3 K1 ~$ M; p4 ^  x7 Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);3 I3 W7 v/ q3 w  |
  747.         dwTotalFiles=1;
    ) l' ~  E+ }: o  {. T# b2 `
  748.         dwDownLoaded=0;
    2 B# k6 r6 O: e6 v
  749.         bSilentStep=TRUE;7 n# a* s% z8 U+ Q" L4 x! w# Z4 r
  750.         bCompressed=FALSE;
    ) \7 D" P0 G( S  d4 e9 O3 b5 Y
  751.         strExtLocal.Empty();* ?, g5 h" m  m; a! a: I" s% |
  752.         strFullName="checkversion.txt";: o2 ~( V5 O6 m9 Q3 c# `+ Q: c4 W
  753.         dwProgramState=AP_CONNECT;  J$ s/ R. a6 g$ x
  754.       }% A1 z* S1 ~0 C) f( I$ ?3 _
  755.       dwStartUpSteps=4;
    , R7 _% f1 [5 W1 a
  756.       break;
    : P  U% ~# {8 U: s4 J( {1 N
  757.     case 4:# C3 T/ M4 h0 g' O' ]
  758.       {  B, ~1 k$ z- k
  759.         FILE *fp;
    8 U& u, b  |6 t1 G. B
  760.         char szString1[128];5 [; T1 L7 `9 s0 o. r  u
  761.         char szString2[128];) A5 ^$ ?- c5 I+ |$ P
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    $ @% V) u; U/ M2 Z0 H& _
  763.         if(fp): j2 t$ k6 L" T7 a, p/ i
  764.         {7 [7 [- ?- W) i) s+ n% ?& ]8 m+ w
  765.           fscanf(fp,"%s",szString1);) Y6 X9 X; E0 D6 ~: M% |" `( j
  766.           fclose(fp);
    % e$ D* x* i3 d$ C: Q
  767.           fCheckVersion=atof(szString1);3 t, @+ v) A6 w0 w  _' L3 I, D* {
  768.           fp=fopen(".\\checkversion.dat","r");9 [$ X# }4 J. s& A3 M$ p0 E# L
  769.           if(fp)2 d; {# [7 K7 S6 Z8 u0 ~, ]
  770.           {- d- O3 v' T/ ]$ r& J. s/ d
  771.             fscanf(fp,"%s",szString2);
    . W: ~+ E6 G' ^! l+ _% i* G
  772.             fclose(fp);
    * D, g1 R& ?, _
  773.             if(atof(szString1)!=atof(szString2))* T  ?; ^+ c4 q9 N9 @' _2 q
  774.             {
    % Z& }% N& O- [& g
  775.               if(!Dn.Connected())! w% k& ^/ ~; T, e& S0 X  L' ~
  776.               {
    5 i2 L5 W  q) Y" U# h' x$ v
  777.                 bFirstUpdate=TRUE;
    0 q5 d. f9 s0 e
  778.                 dwTotalFiles=1;9 M3 J0 M" J% K; M. s. M
  779.                 dwDownLoaded=0;' o* J/ y% }/ P9 P- d, m$ X
  780.                 bSilentStep=FALSE;
      `8 A' y2 [+ M! s9 o6 G
  781.                 bCompressed=TRUE;7 `0 _( d* Y2 X( q
  782.                 strExtLocal=".\\DownLoad\";
    ! x& b+ x5 C, U" L* G
  783.                 strFullName="update.txt";5 ^2 F2 u) o8 w0 W& R: _$ g
  784.                 dwProgramState=AP_CONNECT;0 G: l; W+ ]" B  o* _
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");( i4 d& r2 h! _7 z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");$ K0 J; N' e$ E5 q: O
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ! F4 |: F' a  e. l: ?
  788. $ H' x- ]  D9 Z5 }7 ^
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Z0 r& H' }1 m. P/ e" q3 m7 n% n
  790.                 unlink(".\\DownLoad\\checkversion.txt");: I! }; w9 P9 h+ Z5 u
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)0 `, y& f* k- W+ X; A* M& M% Z& m
  792.                 {( o! F) b: h8 ~1 M7 p; v, F' s; e3 O7 j
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    . {; p" v% k7 N" p5 ^* _
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    9 u( f% l0 ^/ q2 `1 m+ m! Z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( t$ C( ?: y  ]( j
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% ^, i6 z/ d' b* `. M

  797. " U% y: f/ }8 ]* |3 L/ C, X! n4 P
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 h$ L, v4 v$ X4 Q( [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");& {# ?! Q, i3 d  L0 G/ T9 v7 R
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    0 V/ ~$ [1 `# G2 G
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 _; v4 E8 c# m3 C1 V8 _7 h9 t
  802.                 }* F. y0 D: c, Y$ D/ |1 w
  803.                 dwStartUpSteps=5;' Y# p) T* w: H0 @
  804.               }# @6 E4 }; }9 n3 b; P
  805.             }
    % _* c/ D" Q3 j; R' x
  806.             else# ~9 `* v# {- ^. S
  807.             {1 y. Z! M+ |/ X( B$ c5 \
  808.               unlink(".\\DownLoad\\checkversion.txt");
    * P5 q7 O& `8 G; q5 x% f, {8 t
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! u' _( d: c0 E6 q2 O# k, ^
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");: p- w6 J2 D5 ?! H; z' x+ y
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");- x+ {9 u7 M4 ~3 L" p
  812. " u: y9 e8 _# z$ o! V
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * Q: y4 N- G4 w# i$ e- T" Z; s7 j
  814.               dwStartUpSteps=99;
    ; S, `4 I1 f8 l& K2 A2 s$ X( O
  815.               bFinishUpdated=TRUE;" p+ Z+ }& R. w" x; ]* I0 g
  816.               bCanUpdate=TRUE;
    , y: k# s% Q* n
  817.             }: @& O. T) _, c! O7 J
  818.           }
    5 ^2 }7 V3 [7 E4 J4 d! Z
  819.           else
    9 j* R7 w1 c9 ~
  820.           {9 X( ^2 b1 c8 T5 F9 Q  r
  821.             if(!Dn.Connected())1 u2 V, E3 d3 U5 \$ k
  822.             {8 n2 P* q6 f8 G/ C( h
  823.               bFirstUpdate=TRUE;
    " W' [- D, @9 d, @5 V4 j
  824.               dwTotalFiles=1;
    ' N- L+ r; T2 W, ~  c
  825.               dwDownLoaded=0;
    " l1 k1 g+ |( [" R
  826.               bSilentStep=FALSE;6 l; v4 T0 z% f$ u* B
  827.               bCompressed=TRUE;$ I8 r; W+ P% Z8 @5 E+ y4 K$ ]# M
  828.               strExtLocal=".\\DownLoad\";
    2 x# D2 ?6 W- I' X7 ?& R. a- S
  829.               strFullName="update.txt";
    2 e. a# i9 ^9 x0 N' j
  830.               dwProgramState=AP_CONNECT;6 D7 g2 K8 @5 i+ j/ N4 b" y
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    , Q- B. _- O& Z9 o5 H
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) H; M  D, D! u$ e3 k: ~. [) F. t
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");6 p8 f( C/ C% s( W4 G6 o& u# M6 a
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . z2 ]2 }8 |1 A- g' m' I
  835.               unlink(".\\DownLoad\\checkversion.txt");$ }' ^- _' S2 f& b" J
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ; V: W) r6 U5 B7 y
  837.               {
    . I. Y+ K: q  [3 _# K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");, X+ ]; `* ~+ ~+ @, [2 E/ F" Y. [" w
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    % N- V4 U2 p0 y" j2 x
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");- ^' E+ A# |, a; H! I
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 y7 t4 R' V; R+ R  P8 w. d
  842.                 8 s% ~/ K8 x# }& W9 {
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");  S) A3 E  z: H3 P$ t, K3 l; V
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    # D4 X! g7 h: K3 d# H( \2 Z% f
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    % y, {3 ?" ^$ f8 i% Z4 \
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' t& `0 |$ {0 M8 N
  847.               }
    . O$ K- D& e& K7 r+ {/ s  y" i
  848.               dwStartUpSteps=5;
    . N; ^; r2 h% T9 b2 m
  849.             }. ]( i" d+ i% @) w8 O' v4 ^% P
  850.           }6 P; ~7 {- t# M8 ?2 O% B# A3 w
  851.         }
    + p1 @9 V# X/ f' k$ i
  852.         else8 C( m. a* w$ U$ A
  853.         {
    ' c' K% J5 E% R4 A% g& K5 I* N
  854.           dwStartUpSteps=3;
    0 g$ p9 h  V7 l4 s
  855.         }
    8 O8 s+ m; D" a) h5 r1 h0 ^
  856.       }
    3 z4 e) c. d( ~+ ~% C
  857.       break;
    & B; u) O; `; X0 [
  858.     case 5:7 |- J( N/ R) D3 D
  859.       {# L4 H2 n& I9 t
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)9 N- g) ]! f( X. Y! j8 o& |# c" f
  861.         {% P' I! n" ~0 ^% t8 u
  862.           int opt_overwrite=1;1 ~! |- N* F- u! ]4 d2 p
  863.           int opt_do_extract_withoutpath=0;4 b2 _0 j$ U7 R- Q3 H5 d
  864.           unzFile uf=NULL;
    5 g! E* O2 i( T" _

  865. # P. ~( t# M5 ^; P
  866.           uf=unzOpen("Wsa.zip");& v4 l& o1 b  q
  867.           if(uf): \+ Z; ?- H; A# g4 Y2 R
  868.           {
    % s( N: w. B# w- g* o
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    3 h1 j: {# t/ ]/ V" S
  870.             unzClose(uf);( m) \; p: }* O3 T; K
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");" @( M8 {( G3 J( M# F) G2 O
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");! @! c( T& i8 S0 H+ A
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");7 R/ r$ d" D9 N/ p2 z: E
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ) q# h. `2 }2 v
  875.           }
    , ~* Z% s3 t5 I  j$ u
  876.           DeleteFile("Wsa.zip" );
    . C7 y7 f% q8 }
  877.         }
    , e% ]# \- z, e! c" x7 n$ I$ p; z

  878. 3 C/ L, A* C2 T+ p
  879.         if(CheckLocalVersion())
    , E: Q+ b8 x5 h4 Y" z5 p1 ?
  880.         {
    * u+ B+ F5 d5 e
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    ! I/ s3 h% S2 ~: B/ x
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    & g% |% H, O( X& h& g( t, D+ K
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    1 \1 D$ q1 l' |6 P+ f8 _
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . h. r0 V+ P: E7 N
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);* w; c. d: [8 M" c9 b
  886.           dwStartUpSteps=99;
    # m/ S, |  G8 U1 q: i1 g. d
  887.         }4 Q# e( G; A- ]/ G/ K
  888.         else  m, v. _# n/ }! K2 k
  889.         {* {" b8 H0 n1 |+ X8 t
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    8 ]4 t( b  n& g6 R- `) d
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    ; T$ x, P5 B* x- |6 t" B
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; w! a: K) O; @& ~

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

! w9 p# U# Z$ L% o( f8 S" _$ B% S; \' C1 }

評分

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