找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
0 y  H7 W% W1 o: s% C4 Z8 h4 }
  1. / RevApp.cpp : Defines the class behaviors for the application.' M9 B5 y$ F/ I1 V% j, k  i' e
  2. //
    8 }/ P1 a) h( L$ `( D

  3. + m! b* O4 K% I+ E
  4. #include "stdafx.h"4 d7 c6 c3 J$ k: g6 X
  5. $ o' i0 T* R" w  x* a
  6. //#define UNICODE
    # R4 ^% q" Z) t% t% J- _
  7. //#include <gdiplus.h>
    / M, n. p: T! P+ S
  8. //using namespace Gdiplus;
    8 B( T8 |* V% J8 P; T5 V. }

  9. % q7 J: b, y7 [1 A
  10. #include "RevApp.h"
      B1 g' `, _* \0 c( F0 @* G( A
  11. #include "RevAppDlg.h"
    2 d' ]5 ~8 h! U# |
  12. 4 @) W$ ^: K- Z9 m# E  e
  13. #pragma warning(disable:4786); z7 m$ K% w2 U1 @& u1 O+ H
  14. #include <map>
    0 G- R) j$ B9 j- \5 L  L
  15. #include <list>: H! Z# }) B4 k* V# K7 a6 f' q
  16. #include <direct.h>$ @1 n: E; |  ~, Z

  17. / _. D/ f  f7 ?- e
  18. #ifdef _DEBUG
      ?, ?4 z0 K: X* d, a" L( W& `1 t
  19. #define new DEBUG_NEW% V  |7 i! z" W& w/ J
  20. #undef THIS_FILE" \" c& m) I. m) m9 ^
  21. static char THIS_FILE[] = __FILE__;: }" q+ L& E# e9 ^
  22. #endif# Q! ^& D( Y' c) ^
  23. #include "SkinResDef.h"" |7 j9 y) Y! D2 |1 f7 y8 ~
  24. #include "ChangeBG.h", c# y5 f4 i1 B
  25. #include "AFXINET.H"
    4 g; X( n0 `/ z  i

  26. / K: j1 f( d9 R7 L
  27. #define TRADITIONAL_CHINESE 09 m4 Z; V+ W( V* v) n' I
  28. #define SIMPLIFY_CHINESE 1; U) r$ T- G. y+ R+ N* [/ ~% e
  29. #define ENGLISH 2
    + |0 _% o: X! p3 x1 V! ^! O$ ^
  30. int m_iLanguage = ENGLISH;
    # s# N- k7 N- d" `) }
  31. /////////////////////////////////////////////////////////////////////////////
    7 z( s) i2 i4 Z2 G$ ^' {6 a# X
  32. // CRevAppApp
    , q, H, x% u  B  c) _

  33. 3 z( ~8 j* N: v1 ~6 G( O
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)0 A' r# k' W: }" n$ f$ c
  35.         //{{AFX_MSG_MAP(CRevAppApp)& ]% A# [" J# P0 @; \, ]2 f
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.4 E% i2 n) Y% F+ i# M
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!4 E9 o1 O. q4 O, P* k! ?; S
  38.         //}}AFX_MSG! \) u2 P5 K# T7 z0 M4 U4 M4 w$ Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + A. ?( T" Z; \; v
  40. END_MESSAGE_MAP()) d3 a& C5 V3 F5 S- q
  41. 3 u% G$ R; K& j- ^0 I" a8 o5 `
  42. /////////////////////////////////////////////////////////////////////////////
    ) E. x% \/ w% f: C% T9 f, o0 q
  43. // CRevAppApp construction
      T$ l6 x1 \( w' z

  44. + Q) j+ S+ O9 D. _% I
  45. CRevAppApp::CRevAppApp()
    / g2 j) v6 W2 ~: r! O  r4 Y/ N
  46. {
    4 v1 ]' t4 E" C5 s4 \: l7 P
  47.         // TODO: add construction code here,- `$ y; d- g: @
  48.         // Place all significant initialization in InitInstance
    6 [( P! J& P6 C" d1 Z) t4 n! Q% ^; q
  49.   bDisplayIsBig5=FALSE;
    " w. q0 F7 A8 i) _" r+ S5 b9 m) {
  50.   bRestartUpdater=FALSE;
      q( ~6 j# k4 Q6 n* v3 N
  51.   bFinishUpdated=FALSE;
    / H8 @' `0 X3 j) s
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;* F- `  N  u! g8 W- c% f6 ^: I
  53.   InitChangeDataBig52GBKS();
    " _& v( q. q, c6 J( M- R
  54.   InitChangeDataGBKS2Big5();
    5 G2 }2 t8 c: k1 ?  a
  55.         //
    6 o2 y3 D4 w+ }1 ^/ y
  56.         bClickRunExe = FALSE;! \2 X+ v% K  u. p& V: n6 T, ~9 C
  57.         //% J( l, M1 X2 J/ R% z
  58. }
    & F& h- P0 ]  T4 i  t
  59. 5 N. h. L* ^+ Q1 Q0 g3 l0 C3 j6 W
  60. CRevAppApp::~CRevAppApp()
    ) M9 p5 m  Z5 V
  61. {
    " K; Y& A' ~+ g% ~1 ]
  62.         // TODO: add construction code here,
    6 T% k* F" E2 s" U* J9 [5 u
  63.         // Place all significant initialization in InitInstance
    7 U# u$ `! V/ `2 J
  64.   EndChangeData();
    * j& _5 E# q& O
  65. }
    , B* q8 s* R0 {2 m

  66. / o& M* a( x8 E7 X
  67. /////////////////////////////////////////////////////////////////////////////
    4 O3 ]9 ?% p& R" ~5 @  J
  68. // The one and only CRevAppApp object5 @* R. T" x, N) u" ?0 u$ s/ E8 w. b5 J
  69. 8 i' i" l5 a/ e" W6 d* w  }
  70. CRevAppApp theApp;2 n0 S5 `- a1 o

  71. & h1 C. H$ ?) F$ N, N
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    , X7 W+ I& w& N% L; ]
  73. {
    & k: |. L% b8 `" t2 b3 @
  74.   int iEOF=0;
    - m3 D7 g: r& h, J/ b; c+ _% S5 F1 x7 C
  75.   char szTempName[MAX_PATH];
    " b3 W4 o3 V% d" |. V/ |6 z! n
  76.   *szFileName=0;5 U$ _+ D' a4 @3 |
  77.   iEOF=fscanf(fp,"%s",szTempName);( j: I8 o3 W7 x/ q+ u3 t0 j
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')1 n7 Z. k6 Z# m. J4 `% ^* b
  79.   {8 N) F2 C# W0 h. o; v
  80.     strcpy(szFileName,&szTempName[1]);0 @' }; {1 h- w8 w
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)' `3 S' q7 w% O- e
  82.     {
    % Y/ I+ B+ ]0 u4 \
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " M/ q* Z% R( R9 L+ A' [6 u) ]
  84.       strcat(szFileName," ");+ c/ G2 L5 D( ]
  85.       strcat(szFileName,szTempName);$ E5 Q7 ?6 Y5 q; o+ X7 f
  86.     }
    + x/ U. |7 }' T
  87.     if(strlen(szFileName)>=1)
    5 m1 p+ ]. Q: D9 D: n
  88.     {
    1 O1 {7 B; i+ @/ Q& v! z9 C5 _
  89.       szFileName[strlen(szFileName)-1]=0;9 x9 O. E/ w) X' o
  90.     }( s; ]3 e  L. @1 e' F
  91.   }2 K& ?  Z* v' f6 d/ l
  92.   return szFileName;
    " y  ], }6 Y$ s( ?
  93. }, U, P% s9 G# T0 P1 K& e2 U# l0 j

  94. 2 Y, f5 m5 Q7 Z% S- z' q
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    ) X2 b& N" e  K$ P3 r
  96. {9 I6 x6 J5 I0 [3 X
  97.   FILE *fp;
    * t" Z( H' M; I9 q9 ~1 O5 l
  98.   char *key=NULL;
    * O. z& q0 \! k' N: L& ^2 q9 s) ~5 O
  99.   char version[MAX_PATH];
    1 {$ V/ @( G' C/ u
  100.   LPUPDATEFILE file,olds;+ h" N( c' A9 Q" C1 B
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; M6 M# H! p) U' Q! G( V
  102. ! h% e4 N# k3 S. _) A9 t
  103.   UpdateList.clear();! G0 N- w, Y: u- d  `; y! h
  104.   UpdateFile.clear();& }" }! H6 ^8 G/ N5 _1 K; P
  105.   if(GetFileAttributes(filename)==-1) return false;* p7 `, [, c  f! c8 r0 x
  106.   if(!(fp=fopen(filename,"r"))) return false;! I- @$ O- b2 n& N( k
  107.   fscanf(fp,"%s",version);9 j0 T6 f3 V$ U6 z% [* U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }% w: A/ Y- e+ E+ r
  109.   while(fscanf(fp,"%s",version)!=EOF)1 Y9 O# U. o! h5 v+ w
  110.   {* R# g1 s, `4 ~0 E
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& C" }, A6 u+ N3 X8 U
  112.     fscanf(fp,"%s",file->path);
    * w% o! K2 k2 m2 i8 E* R/ c
  113.     ReadFileNames(fp,file->file);
    5 P7 e( V& `* f% ]4 @
  114.     strcpy(file->full,".");
    6 a( k5 ]! i: @3 t
  115.     strcat(file->full,file->path);; T* }1 ^" m! F
  116.     strcat(file->full,file->file);3 q9 m; G6 h/ u: A6 f
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / M4 C- m. E. s: E! @
  118.     {
    ) H5 }: E. l2 `# o9 W3 W, o, Y
  119.       file->vers=(float)atof(version);
    3 o' s" v' ], t& s3 J$ m2 ^
  120.       UpdateList.push_back(file->full);- E% L8 L9 }- n. w, h$ O/ `
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));3 c4 {5 d/ v- S: Q
  122.     }8 b" N7 x. q# I: P% J$ Z9 T9 ^4 m
  123.     else, W: L- `+ _! p3 a8 C
  124.     {
    * |3 s. }: A, D0 n$ m% ^
  125.       olds=(*p).second;
    , X5 e3 s" F2 W
  126.       if(olds->vers<(float)atof(version))7 ?1 N( \- |8 H+ l0 c: l3 }5 D8 c- {
  127.       {
    & H5 ?' W# R6 z/ g* I& y
  128.         olds->vers=(float)atof(version);
    0 Q( {5 @: B9 o$ O- ]
  129.       }# B/ w5 a: f6 B! q1 @2 G9 F
  130.       free(file);
    , K9 n7 `5 M" }/ b* y( l& o
  131.     }
    . m  G$ E$ Y' w+ G" v0 r
  132.   }5 ?+ g7 Q0 o* S5 N* o* F4 v; C
  133.   fclose(fp);; l9 s; W4 p. T  o* \5 C# p
  134.   return true;1 h  L  B: v: ~* }8 D# B# A
  135. }
    2 o( O) f7 {; Q' e

  136. * g% Y: q2 ?! g; h+ u! `7 `
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 @; i8 s" }  P' r6 m5 f+ g
  138. {' `* _5 t  I; U7 C) b: C$ w
  139.   TCHAR  szFull[MAX_PATH];8 d% R2 `+ n+ y7 r7 J
  140.   TCHAR *token,*inter;
    ; \$ d3 X' [  l* M. l
  141.   *szPath=0;
    3 E6 Y7 j& S8 L) @& s$ I8 C
  142.   strcpy(szFull,szFullPath);5 G) Z! Y9 }, S! L* o
  143.   token=strtok(szFull,"\\/");
    * `( K/ y  S! ]' f) @0 w7 b/ B0 H
  144.   inter=token;& Y/ X# o  d! F  G' O; H7 z) t
  145.   while(token=strtok(NULL,"\\/"))
    3 W4 f5 V$ d* w: j
  146.   {
    & S& v6 ]: c: l1 \5 w; I
  147.     strcat(szPath,inter);
    " [6 W0 H, @/ T) `
  148.     strcat(szPath,"\");
    % O, |+ {' X3 w# R$ t( T. z5 {
  149.     inter=token;+ w  c# ~2 f, |0 P4 D
  150.   }
    ) m0 e; j( l- C: K7 ?% _4 w: f
  151.   return strlen(szPath);8 V4 n: X1 L7 @/ `3 ^
  152. }: s& l8 U3 R. A& q% g7 o. Z' m/ U
  153. 3 W% g8 h! z! N& _) J! |4 q& H) _
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)2 p; T- X) D% T% y# R$ y4 j
  155. {
    . n6 o  q! c; x
  156.   DWORD attrib=GetFileAttributes(Target);
    5 V  G1 F$ \) V4 V$ J
  157.   if(attrib!=-1)
    3 i8 @7 a4 }* y( q
  158.   {
    8 H! e" F; P* w5 H
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))  ~! N$ V4 v* m+ a! ^
  160.     {% w9 \2 l) ?. @8 B/ ]# w1 @0 ^
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    : \# D7 g9 G  z9 M8 D* r$ q
  162.       SetFileAttributes(Target,attrib);& U5 c& a$ s; Q
  163.     }# R5 ~: g1 ?: @- f: b% Z% `
  164.   }% }' F( z8 Y" Q/ \3 e1 U
  165.   CopyFile(Source,Target,Erase);& H* y: F2 \) |4 x5 G
  166. }
    + `8 V# f6 ~9 ?
  167.   A+ l$ t& N! V8 Z, j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    6 w" F% U" ?9 u  o! Z" T/ b
  169. {' N- B) R+ {/ X9 B+ G
  170.      FILE *fp;0 i3 K% X& }9 Z. j
  171.      char  szBuffer[8192];" B' X/ Q# E6 }( I
  172.   va_list  argptr;4 S& G+ w0 C" l. J/ n0 A
  173. # m  ]. |( T% A8 k+ n$ T
  174.         va_start(argptr,message);
    ' K3 n: }3 k, U/ R9 @
  175.         vsprintf(szBuffer,message,argptr);5 \' ^5 K' q0 t
  176.         va_end(argptr);+ u3 l' J& U3 q* Q: G4 [4 |
  177.   fp=fopen(FileName,"a");4 J) o: _* k- `$ S, P! t  P
  178.   if(fp)7 E" Y6 S) C. ^& V
  179.   {
    6 ?8 V( w  U  a; c8 J: h
  180.     fprintf(fp,szBuffer);
    . u/ b5 g9 F" D3 J9 t7 z8 ]
  181.     fclose(fp);" `6 m# W: R+ H7 {) G4 i
  182.           _flushall();
    ! K# t6 [. @+ B. N$ z
  183.   }
    # T& P/ D: N0 i& l: z
  184. }: _. x1 E  f7 U6 z7 A4 F

  185. - K: u4 m! {' O1 }
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    0 N  i  @) T# S* U/ b8 p* n
  187. {
    9 C) L& E" a0 `0 `" ^
  188.      FILE *fp;
    0 Y8 \: v2 Z) G" L5 J9 i3 i
  189.     DWORD  attrib;
    & F/ d9 T. {# o" X; o+ B
  190.   attrib=GetFileAttributes(FileName);
    - u1 k" \) i" ^7 Q, D0 z# M$ G" E
  191.   if(attrib!=-1)
    7 h! @6 e$ m9 \2 u: W$ w
  192.   {
      B1 P! A* W0 Q" H
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    # p: Q% h' R  y- [/ p: l& j, T
  194.     if(!SetFileAttributes(FileName,attrib))
    : O1 ^  U2 M6 H5 G! }3 p
  195.     {7 w& A5 A* i3 ^, Y+ d5 }& r; ~
  196.       return FALSE;
    " @5 k1 A& Z7 F8 P& g# A: Z
  197.     }3 z1 W! j+ |' S
  198.   }7 @8 B* Q( i0 C1 R
  199.   fp=fopen(FileName,"wb");
    ( u+ Y6 Q  P3 T6 |; v5 L) R
  200.   if(fp)+ R. Z' m- I/ a, L+ _! v
  201.   {# E2 Y7 j& s; V
  202.     fclose(fp);
    8 _( k' q  l( V" y
  203.   }
    & q( i- H( `/ p/ E1 l( u
  204.   return TRUE;0 a& _) O/ T# t7 l: v$ m4 q6 s
  205. }) R$ k, |7 V6 z
  206. 8 u' }  r% K3 `) g5 J, Z
  207. BOOL CRevAppApp::UpdateLocalVersion(void)- v8 i: O$ \5 B1 i+ G
  208. {: p8 m: l) o% _. }9 o) P/ r8 R
  209.   char filename[MAX_PATH];
    ) c  h- g9 U; q5 y: `" |3 m1 `7 J
  210.   LPUPDATEFILE file,olds;
    6 Q8 W8 }5 d7 G6 u& |3 u
  211.   std::map<int,CString>::iterator i;, W+ \3 m3 s8 H3 i
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    5 S6 S8 W1 \' g8 J4 h5 l
  213.   std::list<CString>::iterator l;& z! M2 h1 p, ^

  214. ; h# @2 m/ \+ c' a- k$ S* Z. p
  215.   if(bFirstUpdate)2 A; i9 e  B9 p1 ^
  216.   {" N: x  u3 t/ L9 Z
  217.     dwCurrFile=0;
    $ f& T8 g% H5 w( `
  218.     bFirstUpdate=FALSE;
    ; V& y2 Y+ {/ `" s2 m& K
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 Y" U7 N- I/ F+ l/ U9 G
  220.     {
    8 Z- ~; N% Y' H2 ?4 C, H# N7 d
  221.       dwTotalFiles=UpdateLocal.size();
    " Z% G" N; I6 v5 W% w  Z% L
  222.       dwDownLoaded=0;
    0 [# ~5 q2 w3 v' x1 g
  223.       bSilentStep=FALSE;
    ! v8 T8 E0 o' n! j0 c) u
  224.       bCompressed=TRUE;2 J. A! o) e! \: w4 k" h  S
  225.       strExtLocal.Empty();
    % E% l1 X# i  T+ j" a
  226.       strFullName=(*i).second;
    ! l* y! V% t, |
  227.       dwProgramState=AP_CONNECT;! v9 e. [. u% U$ O4 F
  228.       return TRUE;* k% {! m9 ]1 d& N) `8 c
  229.     }0 M1 H+ ]" r  H  z6 x' ~$ s8 e
  230.   }
    / Q6 P# v/ C+ k5 `
  231.   else if(bRestartUpdater==FALSE)$ G- n# e9 k7 b% v0 \5 J
  232.   {
    7 V: s7 }: N2 Q( B7 n# z
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    : M; u& v3 R; \5 n$ |
  234.     {
    ) y* X; E7 [9 B) p! [1 u
  235.       file=(*p).second;: w- o" b, @" o( k% d
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())- {& `' L7 E/ R! `+ x8 b& _- k0 Q# r, m
  237.       {# R% r3 M4 |) W; u
  238.         olds=(*p).second;" R( B9 w7 H: S. V5 _
  239.         olds->vers=file->vers;# u, l2 M7 L. }1 `, B* [/ V( w
  240.       }$ L! X) s3 t( b* u& N+ F
  241.       else5 C6 e; F# m/ o+ ^
  242.       {& Q! `% k6 ~  C8 J8 _5 x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));0 O4 p5 ]  j  ]: y+ e& _
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    4 i/ O8 `9 q2 N: E  q: Z& @
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));2 ?0 q6 D& v# C5 e8 q2 V
  246.       }4 t" d# K4 `2 l. J- Z1 ?0 k5 z
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    6 ?, u+ Y2 x. ]$ F
  248.       sprintf(filename,"(%s)",file->file);* ?5 X0 A/ ?4 N& R1 o6 ~# {) P
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: X! L3 g6 O0 z/ x4 ]2 j8 O: Y" L
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    # B( }9 F+ u4 R5 |& d( w/ s
  251.     }: U4 e- u" Q4 @3 ^2 u
  252.     dwCurrFile++;* F) m9 {7 V4 s5 K" m
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    5 D/ l2 ^( f8 J
  254.     {; M2 ]' ?% R" Z1 G: c
  255.       bSilentStep=FALSE;
    8 W/ ^3 w- e# ~1 o, u
  256.       bCompressed=TRUE;
    9 F) Z  Q0 m4 b
  257.       strExtLocal.Empty();7 ^9 m3 }% i# D* g% ]1 Z! u; V- k
  258.       strFullName=(*i).second;
    8 a& r5 N9 y' Z" Y/ T
  259.       dwProgramState=AP_CONNECT;
    3 B( W# x* {7 p7 \% a6 k
  260.       return TRUE;+ Y/ A$ i  r, d
  261.     }
    9 G/ t1 m( _$ V
  262.     if(!bRestartUpdater)
    2 |6 U4 N! b  s, v4 [( N# h
  263.     {) ~: _+ }1 F: Y- w
  264.       int iCurrSize,iFileSize;
    5 V9 Z3 n7 i& ~" o
  265.       iCurrSize=0;
    * a* G' E2 b- Z7 \0 z
  266.       iFileSize=UpdateList2.size();; \  w/ Y2 W) w0 I3 h; O, E4 Z
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");( _0 ?9 Q% A9 N6 c, x( o7 n
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");7 B4 }  _  p) q' p5 v1 a& C
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
      C9 m6 B0 p$ }
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - p4 v* c3 n9 z: `& {
  271.       Fclearf(".\\update.dat");$ ^4 c# e1 k5 S2 \$ ?% D) F5 G
  272.       Fprintf(".\\update.dat","Bloodyf\n");3 }. l% d' c* p& i/ ]
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( `9 D& `2 J" c4 m! K
  274.       {
    8 L6 W* D- u% ^5 W& j3 ~0 @
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()). h. }6 R- ?9 Y9 @
  276.         {
    ) ^3 O2 t7 `' [0 H) S+ I2 o
  277.           file=(*p).second;, w0 W' M# Z) I2 G. ~  R
  278.           sprintf(filename,"(%s)",file->file);
    * n0 N! a8 i! r$ ^3 E
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);0 G, c8 x' R, M- M
  280.           iCurrSize++;/ ^! o$ ^: O1 g
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 q/ y9 T' z. k
  282.         }# N. e: @' I3 `0 t# u0 p. g( m
  283.       }; c* k6 s- K2 q
  284.       unlink(".\\update.txt");9 P! L) N7 k( P0 e  d) `# N% ^
  285.       unlink(".\\update.tmp");
    8 f3 h) G- o4 \& r2 a6 a
  286.       Fclearf(".\\checkversion.dat");
    8 R! s3 |5 i! V0 d) U
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    2 W- O' I) C- J  ]$ {2 C4 j
  288.       if(UpdateLocal.size())+ H1 u9 N' H# X( e4 F- }/ j* A* u
  289.       {& |, X8 }+ F8 j( d( b+ \7 w& j
  290.         UpdateLocal.clear();, n( @2 }! N# ~2 B& L4 |; h, y
  291.       }
      J/ T' H4 U" }  ^9 z/ V/ l
  292.       if(UpdateFile3.size())
    6 i: f+ M; _+ X: N+ |1 P( [
  293.       {- E- @; D6 E* ~- @7 `+ ?1 f
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    1 d) \2 R6 x/ P7 ]
  295.         {
    ! m) G7 I7 X  E2 l/ N  s8 ~
  296.           file=(*p).second;
    * W1 h! V8 I7 k2 h7 X5 X% K3 a
  297.           free(file);/ P  R* c6 M, R. M1 r) ~  v
  298.         }1 e: w) t2 G, q: Q  b$ s
  299.         UpdateFile3.clear();8 ?4 p* J( X" Z/ g* w4 t* p2 W
  300.         UpdateList3.clear();, i* c: Q! g8 a& g5 G
  301.       }; U7 M3 E- x* |' O4 n$ M
  302.       if(UpdateFile2.size())
      \& v/ o+ H2 i- N3 U2 e, V" I
  303.       {
    5 U2 l2 A2 i. ?. q3 U- E. S4 u
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)2 H+ n# @) F5 L; x! r* Y1 S
  305.         {
    ' V3 {  I" ]5 |/ G" b( p
  306.           file=(*p).second;! B' Q! m( @( W( O4 s( D
  307.           free(file);( }% q! c1 b" f# B4 j) D! Y0 \( }
  308.         }
    1 C: S9 N1 i4 D' n" A3 W
  309.         UpdateFile2.clear();
    % R% b6 \0 D6 j' a. Q
  310.         UpdateList2.clear();! z- e& v. n0 O4 Q
  311.       }/ A5 Y2 v8 r+ `: k2 k$ h
  312.       if(UpdateFile1.size())( Q: p' U0 w! {. W: p. q
  313.       {
    % {* x; b! t. d" l* }
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)* W9 \6 T- q! t* [5 ?* G, k
  315.         {. F4 P4 S0 ^& ^' h0 F5 r2 J( G( U
  316.           file=(*p).second;# M4 v- l- f: k. p; n
  317.           free(file);
      V. c- R6 g5 ^& ~
  318.         }4 u* I( n& V+ A- p$ O
  319.         UpdateFile1.clear();
    3 a4 y9 H( `4 Y* e# n+ r1 G7 V
  320.         UpdateList1.clear();# r1 y, a9 x) u+ T- U. H0 S+ a4 }
  321.       }6 S; T+ a8 f9 P' M# j! _; l/ f
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));) p0 _- g% h2 g8 d' p
  323.     }7 C/ O: K  P5 j- U/ R
  324.   }; w  F5 e( e" ?9 \: y: j
  325.   return FALSE;' E6 k% ?& g; M7 W2 J) ~$ p4 K) V
  326. }# |& k; {5 G/ |4 D- j/ G& v( A
  327. 1 _0 M  k& `& T$ Z2 v6 U
  328. void CRevAppApp::ClearAll(void): X% R. L9 j( h$ X3 U
  329. {
    - Q+ n  ~! v+ |0 P& V3 K+ H
  330.   LPUPDATEFILE file;# |; T$ o. |& q* U# g6 z
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 }0 E. b- u8 Q

  332. % c* U" j+ {% H8 a5 k+ G/ B
  333.   if(UpdateLocal.size())
    2 B9 _1 o+ x2 n( U3 V
  334.   {
    - ]' @7 D  j0 v; D/ W2 f4 d9 c
  335.     UpdateLocal.clear();5 F# Y& x+ A- x' v1 I3 t
  336.   }
    ' ?6 y* {/ x1 Y+ G; @
  337.   if(UpdateFile3.size())
    + k; |  I; s" k9 D5 P7 Q3 ?
  338.   {9 T" E8 F0 m: Z* W( ~
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % _, y  v3 J3 {
  340.     {
    3 s) {* m5 i+ G. B/ R
  341.       file=(*p).second;
    5 l$ f" C6 X0 d. Y; p) e/ y
  342.       free(file);/ J. |+ U. a0 ^+ T$ b" P
  343.     }- H1 q9 I' N& T
  344.     UpdateFile3.clear();9 X0 r4 ~0 c, |  {2 v( \
  345.     UpdateList3.clear();% I1 Q. K0 C3 y3 ~+ ?" J
  346.   }  t: R, u" c3 F5 k8 w7 H
  347.   if(UpdateFile2.size())/ q) M- q" r) m# J5 G- M0 D" Q8 Y
  348.   {
    1 p. X; |- Q% d& K' E- a
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    " z  ], W: R: \0 a$ o8 x' a4 a% ~
  350.     {+ ]2 s9 @' A/ v  N, @. [$ N
  351.       file=(*p).second;$ E9 u* [" a7 E' Y% F7 E
  352.       free(file);4 E/ O+ `# K2 V+ R+ S, Q. B( w( T
  353.     }- }' S# Q' R* K$ ?8 M% b
  354.     UpdateFile2.clear();
    2 x6 D* d  l9 f2 @3 P
  355.     UpdateList2.clear();8 J+ C8 k, V. _' m7 |
  356.   }" B, e- ~, y  X) {3 {1 `
  357.   if(UpdateFile1.size())
    9 u: h, M$ ?+ O1 u2 l- O0 K7 Y
  358.   {$ g& m6 F* @3 v. a8 V3 e
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& ]" a- h; c7 b/ j+ P
  360.     {# `, i1 r( h7 k/ R: @5 z$ c: W
  361.       file=(*p).second;
    5 u7 M0 q$ p' Y+ T1 M/ S$ \" Z
  362.       free(file);
    6 e" V; b5 D$ @/ U
  363.     }* p! G* U! z& V1 s4 u  T8 L, P
  364.     UpdateFile1.clear();) G1 ?, @# x6 d" L7 k+ e8 _' j! e
  365.     UpdateList1.clear();
    . Z; b% q; V' R' o- |
  366.   }& @4 O9 `7 h1 a# P; u1 L
  367. }  
    ! h' y9 N2 ?0 g' u' S
  368.   
    " [# A2 g) v) B2 }7 d
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 G/ b2 A4 Q# w0 x
  370. {( e3 T  g  M. y1 Q  L
  371.   int c;
    * Q# l$ X- d0 \) J! p7 i
  372.   LPUPDATEFILE file1,file2;: @2 H5 a+ K, V  ]  P, i  v
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;  p0 V0 ~# M# U$ j5 a& {' W
  374.   std::list<CString>::iterator l;% f' E& \3 @" k  ], b# Z& E( i" G
  375. 4 h3 f, y' \2 A8 }' ]% a
  376.   UpdateLocal.clear();! _% j6 M+ |9 B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);: v+ i" G, x! g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);. v( u/ B; W+ z4 o# F1 G
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' X* I0 D: @1 j7 l% }9 \
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);# s# i; c. N2 O8 b
  381.   if(UpdateFile3.size())
    / u# n8 I. x) j4 Y; \, E- z
  382.   {
    ) y4 O+ Q8 M# t& ?, M
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    # d8 f) O3 B' p  E2 P/ R) \
  384.     {
    7 U" r- x2 I$ m+ z& e7 a
  385.       file2=(LPUPDATEFILE)(*i).second;9 g* s8 P8 s* W* C  t4 @1 r! ?
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())2 C3 y6 O! i/ f, r$ Y. _4 ~
  387.       {
    4 ?/ k1 u& P9 w- g9 X' Q0 f
  388.         file1=(LPUPDATEFILE)(*p).second;0 F( ?" U: Z+ A1 s0 e
  389.         file1->vers=file2->vers;
    5 P0 B2 O2 N" O' }5 a" l: i2 u  R
  390.       }
    $ |5 S9 z6 A8 P+ e" ]& w
  391.       else
    + v0 l* ^! {5 \
  392.       {1 \/ ^, K" I6 B9 i" p# ?
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " }6 p4 d& V% L* i! e
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    7 y; e6 j) b% H8 L7 J8 b( |8 p8 U
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ @, ~9 F5 K6 u5 E. @( S' |
  396.       }
    ; r2 c, n! t( [: M+ h& A7 d# \
  397.     }, U/ k( [, d% z7 k( E! S
  398.   }/ X) l; ?6 X5 y0 |0 q* ^
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    * w* |, T3 e7 F5 h; E  Q
  400.   {$ M1 b% G7 W# L9 Y9 A$ c
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 X; v3 h: B% A) @
  402.     {9 L, X" ?4 ^7 D: N( S5 I+ E
  403.       file2=(LPUPDATEFILE)(*i).second;
    . w6 C6 ^  Z* f3 {& a1 x
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())8 x3 M& \  ^9 D$ d
  405.       {
    8 i# S$ n5 c6 R* S3 [
  406.         file1=(LPUPDATEFILE)(*p).second;
    , N+ ^# k4 X0 Y4 M
  407.         if(file1->vers!=file2->vers)
    8 }; J3 q- b' M: Z/ m3 F
  408.         {
    4 B1 u8 ~* d) d0 Z; O& J
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - }% H1 N! q' c$ T6 ?
  410.           c++;2 _. e! P4 q' p
  411.         }
    1 w) V; x! n* v1 u5 q% p4 c
  412.       }
    / \. y, k, d$ J% c0 J
  413.       else4 N# M  \9 s: J6 i
  414.       {
    0 t) H# p0 w- V) i
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : t& _' I8 A" H1 E& ]
  416.         c++;! F  J0 g5 i8 a& r6 ]0 \% p
  417.       }
    ( D  j5 d+ c0 B  [  T$ H
  418.     }, y' ~+ L8 }6 B) k! P
  419.   }
      J8 c: ~, A6 ^0 U/ A: d2 B
  420.   unlink(".\\DownLoad\\update.txt");; L2 ~0 `7 B/ V9 s$ ^
  421.   if(UpdateLocal.size()) return TRUE;% L' y3 s8 t6 G" |% `2 ?
  422.   else                   return FALSE;; V5 {, c7 z6 D1 E
  423. }2 w% d: }3 r4 d! B
  424. 3 S4 X2 N8 n+ u" S! K
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ( _( Z' {# S: Y9 G+ F) a( h
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    4 M" E3 K% l4 B- {* _

  427. & w0 ^% z& }& S( i
  428. 7 G; B* a7 f0 I2 U" V/ v  v9 d% t

  429. & G+ W% a7 l: H2 e4 q, n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)! n, j$ o, i$ u8 q, Y
  431. {# k0 i- W+ l+ q0 ]8 J0 F7 G  l
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 T! L1 C! J& q! f- ]0 n" _
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    & c& [7 r3 x3 f# Z& K9 R( J1 M* i
  434.   {4 |" N: U, ]) O* o8 F" e
  435.     char szLanguage[50];( ]8 ^' z+ Z4 w, C# z& ~/ X9 l% A" x/ @6 K
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 b; b6 |3 b) t' l( x  [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;8 `9 z4 b9 E. q' n0 v! b; \* t
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 X8 E7 A; O6 V, P, Q
  439.     else                                   m_iLanguage=ENGLISH;
    8 o$ _& ~+ L% C1 }
  440.     char szRegister[100];) }  s0 r* V$ O0 a6 [$ `! h
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    , ]9 z" `) h% N9 M
  442.     strRegsName=szRegister;
    . \! k# |# E! y; A8 h: g0 G
  443.     char szPatchURL[100];1 u( \4 ]4 L" ?  H# c. n
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 Q. u8 d  s7 W& o4 d- P1 X% R
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " D4 d4 s. \1 r) Q
  446.   }! w1 n4 C5 o$ {3 }: s
  447.   else5 X. e5 \$ ]' }% _
  448.   {
      A- V' t; ^/ P3 G0 [
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 J5 G3 @& n# h1 k9 J- H1 {4 C
  450.     strRegsName=DEFAULT_REG_URL;9 X5 ?7 g7 I6 \' ]1 [. g
  451.   }
      V; S- ?$ _6 l+ k& S7 ?
  452.   if(GetFileAttributes("hosts.ini")!=-1): B) `* J$ }' R  W
  453.   {& `1 |& F) K  A4 Q: G& H. O
  454.     char szIP[50];
    - L* F+ H# J# [5 |6 ^0 T6 }
  455.     char szDIR[300];+ p! @7 X" x2 T0 b; F3 u1 ?
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    & K' v% `. g6 g" L' P
  457.     {
    % `1 T7 u) V+ H6 g
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    8 F. \# v) a- ]( W
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 ]0 F! h# m( Z# t! H7 F6 }
  460.       strHostName=szIP;
    / \$ p* [8 c+ F2 K* L' ]" A& Z
  461.       strHostPath.Format("/%s",szDIR);4 `" E3 Q, U; ]5 P. |; @+ N' g8 U
  462.     }
    % U2 _& B1 l) [
  463.     else7 r8 z( t. {4 U- W% ]( U
  464.     {
    0 K) U. z; U7 r2 b3 {
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)% B2 n, C/ @/ U* x+ k8 s
  466.       {
    0 G% w7 ^; j7 _) x0 B8 W
  467.         char szLanguage[50];' B& Y; e; m) w$ h1 P5 r0 |
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");: ]) W' l/ g! u( f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & O+ b5 M  N5 z8 t
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    4 a- `+ G5 B0 w9 ?9 O4 |, p$ o2 t
  471.         else                                   m_iLanguage=ENGLISH;
    % Z( a% q3 Z! G
  472.         char szRegister[100];1 `. c" c! ?3 H; S
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 o$ w1 G: M2 K% n9 z5 t% e$ s
  474.         strRegsName=szRegister;
    $ H% S1 l: x2 ~3 H+ B
  475.         char szPatchURL[100];
    $ L+ W, u9 Y" Y- g
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 E3 ~3 D( W; A
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 W, B. ]9 c- U  _$ v3 K
  478.       }
    8 Y# z+ E# ]; F$ w1 V; Z3 }3 j" k
  479.       else5 V) }  x8 R# Z1 b/ E( Q
  480.       {+ C1 d2 I( G6 K) P  }3 A; y
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    0 [( b+ F" H1 P) H6 e, x9 K
  482.         strRegsName=DEFAULT_REG_URL;. Q5 V6 O, e8 H, b$ q
  483.       }
    , ~' y2 v+ P2 R- }& ^7 ^8 ]
  484.     }
    0 H5 }8 u+ M8 ^; H2 K4 V2 T
  485.   }, }; Z, K+ E8 s1 u; T4 W  q
  486.   return true;
    . y+ I3 `* L" I, z$ P! r
  487. }
    0 w' ~& E: E1 }& Y6 T$ S
  488. 6 `  ?/ z: I* V7 n' Y
  489. #include ".\ZLib\unzip.h"
    & ]% S" @! t5 O
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ( P% y% w1 Y0 i7 N' G/ ?8 l4 D: l
  491. /////////////////////////////////////////////////////////////////////////////
    : s- a/ J$ E- y& Q6 g3 r2 S
  492. // CRevAppApp initialization
    " \4 \2 F9 v) ?

  493.   e! M# j* I# @
  494. BOOL CRevAppApp::InitInstance()- b6 v# {9 _) e; L% _4 i
  495. {
    6 K) Z0 `* d! ~4 y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 P$ c+ o2 f: e, |* z

  497. ! g/ `8 r+ j) n9 n+ |
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);7 j1 ~! z/ W& r- W0 L
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))9 c# C4 g" b# n4 J5 `/ \
  500.   {
    ( e0 a- r2 V" s  P) E4 m  b8 p
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");) n: m" d6 f; s) \4 M. ^
  502.     GetPathFromFullPath(szPathTarget,szPathSource);; g. b. ?- k/ v' r4 H
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    ' r9 t% {) h& }6 c* p2 {
  504.     {5 X3 v8 C) m% ^, c8 i0 j2 b0 L) P
  505.       strcpy(szPath,szPathTarget);* \8 l6 W0 u. m* j& z( q8 ^6 W! k
  506.       SetCurrentDirectory(szPath);8 I# G  v7 \5 ?( \; I) l) q
  507.     }6 D% t# p, L/ s: a, q1 @
  508.   }
    ; Z( R$ V3 c( \# i% B
  509. #ifdef _DEBUG
    2 K" z' C6 j. w" r8 s& P6 |4 L
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % L0 T6 r/ y5 h- I/ \5 F
  511. #else
    " ]- b' _* r! w- x: B9 @
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( t3 F) c+ }0 ~" j! h* C
  513. #endif2 i' m! r; I( ]8 o
  514.   {
    : b8 e5 q/ E( f, h8 c
  515.     char tempFileName[MAX_PATH];0 ^7 d* h% w) X# v& t. ]8 \
  516.     strcpy(tempFileName,szPathSource);3 D" A( K4 ]/ x/ |$ v
  517.     tempFileName[strlen(szPathSource)-12]=0;# u+ P; |! p' e0 U6 w, c
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
      q% Q# x7 v7 C, r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    2 D7 C2 g! O0 U" S- I. W
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);) E. G& K2 J" ^8 L' g
  521.     return TRUE;, e4 x8 N! L, S6 }, k( U! M% B
  522.   }
    5 M5 W5 g1 X; @: w/ p( {. h
  523.   // Nuke 0118: Delete run.exe& r9 [; x, G( n+ V4 t; |: T; R
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ H. Q" e' \" D
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    0 o* {+ x1 y8 o. u0 U6 i1 B. e% r& J( Q: ^
  526.   if(!ReadCfgFile("Config.ini"))9 x  |' `: k( Z. n& _9 a, ]$ P6 U
  527.   {7 R) }' Z$ V+ H* r( D
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ; ]8 k: v5 S; z8 a
  529.     return TRUE;) Q4 k/ Z# o3 o- b9 v
  530.   }8 r3 z1 }  {# ?0 v: ^2 v
  531.   HANDLE mutex;
    " I! w5 M7 E& z1 T5 ?" j
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))' ^! M# K; e) r  s* p0 ]4 U
  533.   {/ ]% O+ X& P6 I
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ' l8 f5 t0 {# R
  535.     {7 J, L$ X, ~% q% W- P, ~0 A; M
  536.       CloseHandle(mutex);
    2 |4 j5 E: [* T
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 A- i: v* b* G6 i
  538.       return TRUE;4 \) U4 v( Y/ m. j8 W
  539.     }: Y# |( A( Z* }$ T: n2 L3 L
  540.   }  3 ]3 i+ ~. o! z/ U9 |, C
  541.   CloseHandle(mutex);
    ; L2 f( q3 d' N) u+ }0 d6 _( [# A

  542. 1 b" }0 D- @: f' Y) x
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);% ?5 K! n, }2 Y7 @$ I9 Y- l

  544. & N& E2 n5 z. V3 }7 C) ]
  545.         AfxEnableControlContainer();
      Z, L* K; U! Y3 a% N

  546. . }0 W. q. u  E( l
  547.   bCanUpdate=FALSE;
    9 g$ ]9 P9 H! P8 }5 T2 e
  548.   dwStartUpSteps=1;
    ) Y1 t5 y+ @% r9 J0 _
  549.   dwProgramState=AP_NOTHING;
    5 ?; G! F* s& `. c1 r8 q

  550. ; M/ E2 A- L& A1 F
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);5 u8 a. `& A1 u

  552.   a" @+ i) U. t0 j9 P2 f
  553.         // Standard initialization
    6 c4 |- ]- _% Y" X; \. z% a. ]
  554.         // If you are not using these features and wish to reduce the size) ?$ t- ~7 w7 `. L
  555.         //  of your final executable, you should remove from the following
    . X% X2 i% M- S! v( ?3 {: p* C
  556.         //  the specific initialization routines you do not need.
    6 x9 W+ s2 \8 K% L$ Y
  557. , p: J2 o7 _' ]6 [& F6 U- l
  558. #ifdef _AFXDLL% y  i7 G7 ]% D* u# X2 u
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    " @/ y( K. N6 S
  560. #else
    , m% c; f1 w& z: t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    6 A- C4 L5 M* w/ |
  562. #endif
    9 P) ?# O0 a9 I5 R

  563. % N- k9 ^- e! k# C) f! w
  564.   dlg=new CRevAppDlg;% d6 ]0 \' d% P- ?8 Z+ ~
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    . @# N/ V- F2 N+ m5 w+ q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
      u% W$ K& `- b: _
  567.   m_pMainWnd=dlg;1 m0 n- b; w% K/ ]1 t) [6 g/ ?

  568. , b- @7 d2 u. a
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);5 T- C. d- J5 B& [2 }7 M, m0 Q
  570. 3 ?4 P' T$ c0 x0 ]
  571. //  GdiplusStartupInput gdiplusStartupInput;8 a: y5 H+ O7 }+ j$ `' G0 k4 j: N0 A
  572. //  ULONG_PTR gdiplusToken;
    * r: x# x+ Q) Q$ [, u
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    9 _, t# B. f( h4 g( h2 r

  574. ) ^) `; o& U1 e- N3 r/ {: _
  575. //        CRevAppDlg dlg;* z5 d, ?' Y% U: h+ ]. p( ^
  576. //        int nResponse = dlg.DoModal();- _: T; |& S' l" J; }5 s
  577. //        if (nResponse == IDOK)) L% _7 i; P( z+ e8 Q3 k7 u0 g& `: ]
  578. //        {
    6 i2 V, i: m6 Q$ b: x: D
  579. //                // TODO: Place code here to handle when the dialog is
    5 {$ {, y: n) m/ j. u# O2 F, j
  580. //                //  dismissed with OK; f7 `. v# O9 I1 }% o, d
  581. //        }
    % v4 C* T* Y# x: E! Z  T' |4 f
  582. //        else if (nResponse == IDCANCEL)" n1 ^$ u+ r' R2 H& C2 u
  583. //        {
    * _% U, ~- Y( P' l8 ]
  584. //                // TODO: Place code here to handle when the dialog is
    1 G- g1 p( b* K% j! {
  585. //                //  dismissed with Cancel
    * S! b/ ]% ~/ m3 S
  586. //        }5 u+ F# j2 o% j0 l# W

  587. 4 B7 y# ^, o) I1 @7 Q* K4 t5 q
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    3 @& q" V$ t3 J* e4 u
  589.         //  application, rather than start the application's message pump.& M4 I* J1 q  I7 m/ i& }
  590.         return TRUE;& j; s  A" U- K# u% q4 H, I$ u, g
  591. }
    , g9 K* p) t! S& {  V' a9 @! B

  592. 7 p, U+ i) q; ?5 u2 e) ]
  593. char *CRevAppApp::strtok3(char *pSource,char *token)9 Q8 g, r  R5 @9 ?& \
  594. {
    5 R: L& C: x8 P: q  Z5 d# g
  595.   int i;- v' `* n" x: @" d+ V; b
  596.   char *szRet;
    7 I% }1 H+ E6 Y) r* U! T. Z

  597. + v% P1 S: X+ m/ ~" O
  598.   if(pSource) { itoken=0; sztoken=pSource; }" J8 r' t; A3 h
  599.   if(sztoken)+ M8 V+ j. ], [) r0 K2 r( c/ j
  600.   {/ e/ u- j3 m$ D5 p
  601.     szRet=&sztoken[itoken];
    ) I" _- o- }& R5 p
  602.     while(sztoken[itoken])8 j9 [( E" U5 D
  603.     {
    % h1 ]6 ~( I7 r
  604.       for(i=0;i<(int)strlen(token);i++)
    ; L# n9 U9 \* o8 b2 e' E% k
  605.       {/ X+ \& `% x9 |' q4 Z8 k* g0 c
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])6 q( g" P! L( Q6 D: J2 I* @0 s9 l
  607.         {. A" @3 B, K  [$ V" F
  608.           sztoken[itoken++]=0;; O+ f2 d4 p, o8 B9 J9 V. ~- ~# x
  609.           sztoken[itoken++]=0;
    ! r0 q& Y" B% _0 Y% M# V2 t. _
  610.           return szRet;: N1 }  }; f! J
  611.         }
    : B5 B) ]8 @. e# K" O, w
  612.       }" O9 |5 J9 v3 G8 t+ l5 Z
  613.       itoken++;' z9 Z* Q0 P) P+ G) Y
  614.     }
    7 d4 l% H" g- R. t. W
  615.   }
    + \4 g7 @! Z7 B! E1 Z9 Z
  616.   return NULL;
    # W7 Z: O' l, C+ c7 y3 _, @
  617. }+ X( `( X  p6 C* ?6 [% w

  618. $ V  U! j4 ^6 a( v: n( ?
  619. void ProcessProc(long Total,long Current)
    ; R  V- X. ]$ _
  620. {7 ^/ K* ?$ F  `. r, C5 B3 ?! M1 q
  621.         MSG msg;
    6 _. ~" \$ R, r+ l  `. O0 M  C
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 b! y! B  J. m1 q$ T5 X4 d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ! G( r. `; g! d7 `$ ^; X
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 r7 G3 f2 C$ q8 t5 \2 h: P
  625.         {
    : @% h; ]1 @* H3 ~4 x; d1 N$ J
  626.                 if(!GetMessage(&msg,NULL,0,0))
    , O2 H2 r9 [+ x' G/ Q
  627.                 {' K5 m1 [2 v4 o
  628.                         return;
      D' w$ x" L6 p' A( K$ g, e! C
  629.                 }
    0 e- B/ D& K+ N- ?
  630.                 TranslateMessage(&msg);
    ( {4 G1 Q2 a' v; }
  631.                 DispatchMessage(&msg);
    " F+ M! [9 G3 k( z; s0 |
  632.         }        / G" ^# F7 @5 W& `
  633. }
    $ s5 L1 X" y/ J' u

  634. ( N3 b; V; p4 d8 K9 ]
  635. BOOL bFirstChar=TRUE;5 O/ X1 K/ c2 r  V, x4 \
  636. 1 q8 ?  Y) j6 F' `
  637. BOOL CRevAppApp::OnIdle(LONG lCount)9 Z+ O2 f6 r' P& h" P" p
  638. {
    & i0 m3 m2 n( R$ k
  639.         // TODO: Add your specialized code here and/or call the base class
    4 F% l+ p3 D. v
  640.   switch(dwProgramState)
    5 g9 t( P+ {) n6 U
  641.   {
    + }; k$ _; p! m. h
  642.   case AP_NOTHING:
    7 \9 {; C7 q* L! J
  643.     switch(dwStartUpSteps)
    ; k3 e1 p+ C. b+ l- g* k9 W# w
  644.     {
    # n& l; f6 B2 K
  645.     case 1:
    / z. L" G% O% o3 ]( D! t. ~) x
  646.       {% B- v. a6 S; _8 ?4 z* v
  647.         int i;) \) e& g4 C" t) k" a  |7 N7 v$ P
  648.         CDC *pCDC=dlg->GetDC();
    + B9 b( F; \' [3 }' B- Y; t; u
  649.         HDC hdcwnd=pCDC->m_hDC;; `' @* N) a9 \: C! `
  650. //        Graphics graphics(hdcwnd);; s. {, q% C5 l
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    " f: t$ U: N) O
  652. //        INT iWidth=bitmap.GetWidth();
    / i" k( K; N8 z5 m% S: D# W' c
  653. //        INT iHeight=bitmap.GetHeight();
    4 }- D) L/ @: B, m9 ^" E( [
  654. //        Color color,colorTemp;" v! h" g/ h) ?
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    + _: g; B2 G1 K( c0 N
  656. //        {/ O3 d+ v2 r( ?7 c" ^! j
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)$ s; y( v: O8 A( Q2 C
  658. //          {- M" u6 I) h4 B5 u2 ]1 n% ^. f
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    - L7 F4 \' @7 X
  660. //            colorTemp.SetValue(color.MakeARGB(8 y! ?# q7 [1 P0 o' H
  661. //              (BYTE)(255*iColumn/iWidth),
    ; L4 Q5 _$ q5 t# m2 W
  662. //              color.GetRed(),. X& x8 N* E. `0 k
  663. //              color.GetGreen(),, u: |2 c( m$ d+ w8 i! `4 u
  664. //              color.GetBlue()));
    % }; |1 \& u, _8 x7 o
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    . q! j4 k7 S: y0 Y$ a% I; P2 h
  666. //          }* `6 r$ g5 h: Q$ A" c
  667. //        }2 @! V$ O- S- t4 R# k$ J1 @$ |
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);' M& d$ c' ?9 d! f) w4 k
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - s. `! k( A5 B7 d, b( N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 C* }! w' _6 ?" u+ S0 j7 q2 E
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / B7 j, p7 p1 U+ f1 o
  672.         for(i=0;i<240;i+=8)
    $ ]# S; t7 [* p& h/ T
  673.         {
    ! u% W1 E0 q3 Y! P/ g1 e! c5 K
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ X/ Y* f' s1 p  D- i0 ~" ?" e
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);5 w0 D7 L# ?- W* B. {% ?
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);& X# i- B" T7 W
  677.           Sleep(33);) |/ A3 m( a8 a" c
  678.         }
    / v/ s3 T* U- ~, M0 _! L
  679.         Sleep(1000);
    1 d7 Z( J3 X8 ?. W3 ]( L& S
  680.         for(i=240;i>0;i-=8)" f& ~$ Q5 ?4 @0 m1 K+ V) N9 w0 l
  681.         {9 `/ U, E$ l! x) c' q: m( C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);1 g; k0 |, P2 U; G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);' ]  q( H$ I3 f( ^1 p5 u/ [1 n
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);9 i# ]/ ~+ @; O( E5 w# `+ @1 o7 ~
  685.           Sleep(33);1 M, o' c+ }1 T: y" H7 k
  686.         }
    $ r1 m1 ?8 D3 @
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);0 _( p# {) y6 \& F1 j% ^4 w
  688.         dlg->ReleaseDC(pCDC);9 j. |: p& x0 L
  689.         DeleteDC(hdctar);
    " [$ R4 e3 H% N% v/ o$ D# B
  690.         DeleteDC(hdcsrc);
    6 g$ i  V3 Z: t, c: u
  691.         DeleteDC(hdcorg);# L3 S7 T6 t& z+ S" [. Q
  692.       }0 C% q7 o  D' @
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ p4 {5 H) s7 L. m  H/ P4 [
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
      X  ~; v5 r& Z" u6 s# ~  o0 l1 t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");2 k4 e+ d  R/ |# }* Z! W! I6 h1 u
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");( G6 A' B3 u. ?: d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ o% j; |: u+ h  V: Q
  698.       if(!Dn.Connected())
    # g; R% P, F; c; j! l5 K
  699.       {
    6 O. j- y" \' j- g) U
  700.         dwTotalFiles=1;
    2 W* R+ c, d* Q7 Z5 e+ D
  701.         dwDownLoaded=0;
    . ?- l4 c9 U* m0 x; j  I! ^; f
  702.         bSilentStep=TRUE;
    / P( _- D( l) v% n! x8 u* G6 ]
  703.         bCompressed=FALSE;
    ' J+ L: N' Q. e: b' D
  704.         strExtLocal.Empty();# g, N% |; W3 [0 c# ^
  705.         strFullName="readme.txt";
    + Y" e7 z+ ?& M  ^
  706.         dwProgramState=AP_CONNECT;
    ; Q! d& M6 y' \4 U% `0 p
  707.       }
    4 x# y: Y4 g- c( G% M; I
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    9 s, z3 l0 a* d4 l* d
  709.       dwStartUpSteps=2;8 C2 ^0 X+ T- u0 x
  710.       break;0 A4 E4 ^. a; w' O
  711.     case 2:& W+ z& z+ J, C
  712.       {+ R/ w  @% ]' f. D- g
  713.         int iEOF;
      ?5 h9 n5 g1 t( N5 z" a
  714.         FILE *fp;
    ) Y1 U0 Y) K# C
  715.         char szString[512];0 s8 b0 `2 g6 r! h# \
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ [8 f0 W6 }( C2 c
  717.         if(fp)  P, g* q; L2 ~( ]
  718.         {
    , i( k7 s, p  b* j  m9 G
  719.           do& ?- P: }/ x. r' z8 s
  720.           {" Q7 e9 c4 ~8 F1 H: ~
  721.             iEOF=fscanf(fp,"%s",szString);3 U9 x3 v0 c' ]( g- @+ `5 w
  722.             if(strlen(szString))9 V9 V1 H$ v# F( {9 v; m$ A5 T
  723.             {
    8 {2 M" y* m4 f. `  [: _8 W' i3 C
  724.               if(bFirstChar)
    . `  g6 V  c  K0 k
  725.               {
    8 _& g+ a& y3 O' L' ]
  726.                 bFirstChar=FALSE;3 R  u# G& S8 q. Q3 I5 A; g( c
  727.                 bConnectIsBig5=FALSE;
    " @  `8 c9 u/ ^0 T0 s% M/ G
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    % b  g7 z$ M7 y$ ]
  729.               }
    , u+ Z5 p/ ~, i. b( X* }
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; L7 ~: U( i6 T2 N0 ^. l- K
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
      I9 h* r/ h0 x- H6 i, n
  732.               dlg->m_ListText.AddString(szString);
    5 i0 ^: ?0 k" k" P# D; O
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Z# K7 ~. Z5 m4 q' t& B& W, r1 _: S9 U
  734.               *szString=0;
    / w1 r% E, B9 Q6 G
  735.             }9 [4 L, L$ T1 ?4 d6 S" }
  736.           } while(iEOF!=EOF);9 Q% t5 J5 s8 m$ q
  737.           fclose(fp);
    # M$ x5 q1 L- v+ ^# }
  738.           unlink(".\\DownLoad\\readme.txt");
    ( T3 J% u/ m" U
  739.           dwStartUpSteps=3;
    9 s% [6 _5 B' j/ [& O
  740.         }
    4 X. @; }/ t6 I$ x
  741.       }5 C- \& K" B( R% W2 t
  742.       break;. y5 x9 v" k3 D; a7 P1 E6 w" V
  743.     case 3:) T2 Q' N; i, I$ R1 Y
  744.       if(!Dn.Connected())
    , j0 G8 O. J( {$ D" C
  745.       {! ^) E# j! }! E
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);! @3 V9 B! k. y1 q$ X
  747.         dwTotalFiles=1;
    4 d* i5 |! ?; x1 o$ S: r1 {$ Z+ S: ~
  748.         dwDownLoaded=0;0 t* J2 \1 t6 |# w, [9 |! a
  749.         bSilentStep=TRUE;: L5 N. |/ d) F. n
  750.         bCompressed=FALSE;
    & O8 N3 \2 B' c" R; T$ v+ f
  751.         strExtLocal.Empty();4 t* I  Z) f. M
  752.         strFullName="checkversion.txt";" e: s5 P7 e: y& t8 M
  753.         dwProgramState=AP_CONNECT;3 [8 m) v8 l% x7 J: |6 f6 L' {
  754.       }3 u' O9 C. a( f# r0 T7 W
  755.       dwStartUpSteps=4;/ j* A) C7 e7 j. B  F
  756.       break;
      K9 F6 T9 \: h4 F: e
  757.     case 4:
    6 o9 ]6 `2 ^8 H" @. z. C& M
  758.       {( c/ ^4 L" M; P
  759.         FILE *fp;
    5 q6 W$ T% |& |  q! m. u
  760.         char szString1[128];7 L' c8 F( m5 d3 P# M; p, e) B
  761.         char szString2[128];
    7 R& E2 t6 s1 b" E5 E- q
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    , ~' _: k' E4 L5 x( X  z! j0 P$ r
  763.         if(fp)
    % G  ]) J& ^- P. z- v0 G* f
  764.         {
    ! `- r- v# W% F
  765.           fscanf(fp,"%s",szString1);
    + L# B, W" D. z9 Q* N4 k
  766.           fclose(fp);6 U0 T, |) m; l0 a. i8 j- J$ s/ b
  767.           fCheckVersion=atof(szString1);
    : C6 E: b1 N5 `# P& ]
  768.           fp=fopen(".\\checkversion.dat","r");* H+ s, C$ K  O3 s1 ]1 P
  769.           if(fp)
    : t0 ^/ ?9 y: ^! c
  770.           {
    : |- q. k7 G" x* n
  771.             fscanf(fp,"%s",szString2);; U" ?4 H7 ?; s- t( `5 c
  772.             fclose(fp);- a7 C% h7 P- o9 q; @# |7 m
  773.             if(atof(szString1)!=atof(szString2))
    / C. |& C7 r# l! X, m& C" d/ S
  774.             {+ ?+ J' x# G7 }
  775.               if(!Dn.Connected())' Z( q- q# z7 Y2 J% G7 l( D
  776.               {! i4 w3 I- e3 j* Y0 E9 \
  777.                 bFirstUpdate=TRUE;" Q7 }& g6 n0 X- Q* X* s
  778.                 dwTotalFiles=1;
    $ d( r: [9 i' o$ y
  779.                 dwDownLoaded=0;/ u1 ]: `* U: ?& W& f3 {1 F9 k
  780.                 bSilentStep=FALSE;" \$ K6 o7 w9 B( N& k
  781.                 bCompressed=TRUE;. K! T; }; j7 l' p, ]' `; q
  782.                 strExtLocal=".\\DownLoad\";
    % s/ v! Y* g; b0 \0 j
  783.                 strFullName="update.txt";3 u! O$ p; v& x1 D5 G3 m9 p6 b
  784.                 dwProgramState=AP_CONNECT;
    . t$ S$ C% |& y) y1 T
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - v3 f8 A3 p/ J, a2 A2 E
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");9 i: ^4 u, @$ r8 p- R6 C$ f: z' {
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");2 O+ V: _; v0 E" j
  788. 0 E0 y# Q4 b8 Y  k. {. q3 L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ; \. U1 U! ]9 F$ z0 ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");6 o! }7 n: n9 u. M( K; ^
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
      V( n( I* P4 W+ K9 a  [; H) ]
  792.                 {
    * |/ J! s2 C& t  u- t, L6 ~
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 I$ s  b1 P% `" L5 \
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    * G6 E1 \4 D* p4 j
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");7 B: Z$ G2 H) U. Q
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + s- {5 k* t) c# l- a, D. B
  797. ! Q; c7 W0 q5 ?. ~9 T) ^) e
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    " s$ D" P7 g( `% S$ U& [
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");( e" r6 k; C7 K, @" a4 @
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! T% {9 U! ?. k( G7 }. Q
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( r& I% Y3 S4 i* G
  802.                 }
    & e) U5 A% f/ P' R# b
  803.                 dwStartUpSteps=5;  J% Z' m- {! f  j
  804.               }; i0 L; T) q  `) t. f
  805.             }
    1 ?2 ~8 j8 @$ s( H6 b
  806.             else- A5 q9 L' ?5 G7 s7 v; }$ x6 `5 \
  807.             {
    & A6 I0 U# R" F( e- t
  808.               unlink(".\\DownLoad\\checkversion.txt");
    # k' [# e$ j/ S! {# m4 U
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");8 _! d& F; h. B4 U+ }0 j4 _, Z9 }
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");" R+ g& W$ f4 h$ O3 O% v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    + J6 B4 q' I8 \8 d( |9 |" }

  812. + q2 j* g# p0 C6 i9 w, W5 r! h
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # \4 P/ k5 ~9 q: b% E
  814.               dwStartUpSteps=99;/ [1 t' Y: w$ u7 _8 ^
  815.               bFinishUpdated=TRUE;
    ; B( y5 A7 \+ A
  816.               bCanUpdate=TRUE;: k. n: z8 j! J( P! p, \
  817.             }8 W$ E8 |" k' ]1 b& ?
  818.           }2 j& q0 I3 t  Y" ?! x
  819.           else
    6 l8 F1 n9 F4 g0 \9 k6 k
  820.           {& D" m5 Q- t6 e6 R. _
  821.             if(!Dn.Connected())5 L1 U' n; [, D9 K6 v4 m, V
  822.             {
    # N7 U! K" `7 ^1 M6 n
  823.               bFirstUpdate=TRUE;# n* k" S2 u7 x, E
  824.               dwTotalFiles=1;
      i/ _) o" D+ m7 r: Z6 d
  825.               dwDownLoaded=0;5 h# Q( b7 W* A" x, y
  826.               bSilentStep=FALSE;" C( T0 \% I# t; E( z& o- x. A
  827.               bCompressed=TRUE;
    + Y, d& g7 O% {- |: z# v; o
  828.               strExtLocal=".\\DownLoad\";# k) P0 b3 g% Y1 q
  829.               strFullName="update.txt";
    + J, q7 K& T5 U: G
  830.               dwProgramState=AP_CONNECT;, K& I' Z7 X2 ~" J7 G. u! g( t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    * b/ E. X- k& C0 C1 w7 k0 c5 k
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / O: \% n- E/ @5 j6 R5 a' }5 H
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * v3 q1 ]+ [! ~1 p# _9 \
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& s1 U9 w4 `2 W, ?# m
  835.               unlink(".\\DownLoad\\checkversion.txt");
    * l: _. R' o" U  i
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)4 K7 W" k) a) V" [# D
  837.               {
    / j# G# ?/ @6 u8 z! F5 k, L/ i
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");5 Z: c+ c2 O, @
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    6 Q# O. o7 H* P7 S! i# A6 p
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");! `9 x: O9 ~( D8 ~: v
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , E: r1 }) O4 u. o- J" n) V" ^
  842.                 , x3 F# @  e( i, a8 u* `$ a- `8 o
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 k) {, z4 `1 T( @2 J9 w% v
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ! q/ q! ?) @$ q2 p$ g# C6 F
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    3 S+ X/ I: @1 J' c4 }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! Z* f$ {& m9 X" D- c- F1 w+ X! \
  847.               }
    8 `  h' J7 D# L4 L; p
  848.               dwStartUpSteps=5;
    8 v0 M! w: G% y; Z
  849.             }* f$ K+ k1 b6 [! x7 H& Z
  850.           }$ ]4 N/ C  U9 ]- z) {1 G/ W
  851.         }
    8 W6 Y$ I4 _5 a$ q9 j. d) Y
  852.         else- b( {) O) Z( m! F
  853.         {
      g8 E8 }  D3 [2 b, V# K
  854.           dwStartUpSteps=3;
    . i8 f, J3 j9 O
  855.         }
    ; P3 v9 J; @- H0 c) v; L4 a0 c! {: U
  856.       }( e. i' u& j# ]
  857.       break;
      X3 p( d0 _) ]! Q
  858.     case 5:
    ! y. h; b  b5 |; y) l0 F' |! m
  859.       {6 j4 S2 y: v  S' g" d6 U
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
      K; D( ]/ q: ^1 X! w
  861.         {  O) J. l! w) z
  862.           int opt_overwrite=1;
    8 ^: w5 h& g) l
  863.           int opt_do_extract_withoutpath=0;4 X  r, {& g0 V6 T: W" D
  864.           unzFile uf=NULL;& p4 X+ v/ W) u& H" V( o
  865. 6 K7 y; X) k2 X0 K7 `5 Q
  866.           uf=unzOpen("Wsa.zip");% @! l2 @4 _9 V8 K
  867.           if(uf)1 S) ]6 v( J: m$ y
  868.           {6 M0 A/ ?7 j! G9 B1 x" S  c' l
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);) f. S( N# L+ g8 O+ {2 s
  870.             unzClose(uf);2 M8 K2 i( F% c! L2 ^; i
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");! o* x. C5 @. L! ~0 h/ h. z. V, d# W
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    ; m9 T0 x, P$ L( ]
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    0 R4 X3 H9 P$ N- c4 @
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      d9 O3 o: ]4 `, ?- v  j
  875.           }, x2 x2 n# s0 Z6 A: x2 l
  876.           DeleteFile("Wsa.zip" );
    ; m5 F5 ]8 p5 u8 N5 _  H' B
  877.         }
    - W. F) \! n7 k+ ?7 p- H
  878.   `' G9 [% g9 s
  879.         if(CheckLocalVersion())
    2 Q* C2 y. [7 H% c8 W$ h+ E
  880.         {8 l2 i$ p4 D. U
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    3 [# A5 f  H( C. m$ R, S
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");) Z2 f# T) t1 [( t$ W- k
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    1 k) O& h- R0 v$ J$ ^. _6 g
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 P, G: T% b' N9 N8 R
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);) I5 V: j0 v$ K3 ]0 [3 m
  886.           dwStartUpSteps=99;) |& }4 \& o/ X/ G; w
  887.         }
    % `, ~7 M3 K6 s! \3 l6 V0 T
  888.         else
    5 e0 a; @' @7 L6 j2 W
  889.         {3 P  F4 _# f' a- B5 |' g' v
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");$ [+ h) ~5 H' h0 A, M* O( o8 ~- A
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 L( \8 Z* e4 H: D) m9 C
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    + L0 L* r+ L. T  u: r: v; t# n0 m0 _

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

/ t9 Z# Y6 {& z3 s# a1 }' w5 j; x

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-2-23 07:23

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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