CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
" K  d8 @$ K/ Q
  1. / RevApp.cpp : Defines the class behaviors for the application.6 {; Q$ x! I6 g- D$ w
  2. //
    ) K1 w, [( r. U4 q1 a2 w

  3. 0 c6 I4 H' `3 c, r
  4. #include "stdafx.h"9 I+ h3 {) o# ?4 Y4 c# v5 ^

  5. # _8 A+ t) L" z! [
  6. //#define UNICODE
    : X% l  C2 g+ F; g+ `
  7. //#include <gdiplus.h>3 u6 q7 `% M* ^& w
  8. //using namespace Gdiplus;
    4 ?/ E5 ^3 |0 L2 V8 _6 ]

  9. ! f8 d- L1 c6 q3 j1 x( ]
  10. #include "RevApp.h"
      r  ]3 f& [7 g& d# S6 g
  11. #include "RevAppDlg.h"% v  Y* k3 l) d" r# r; q8 A

  12. * m, I5 {2 V. V# F0 D" i; L
  13. #pragma warning(disable:4786)
    ( n+ R( i+ J/ Z
  14. #include <map>
    : n  E% F- f. M, H/ ~
  15. #include <list>
    0 _% l$ r- \/ ]# \" X4 \4 ^0 U
  16. #include <direct.h>
    6 Z" c) {6 u2 q$ H( @& Z! ^

  17.   d( f6 o9 \6 Q$ t/ l
  18. #ifdef _DEBUG8 N, Z0 c. y' [% n/ m9 b
  19. #define new DEBUG_NEW
    % I0 z! l' G* h* u' n9 T3 [
  20. #undef THIS_FILE
    8 Q! [4 N3 E! \" e8 X$ R; Z
  21. static char THIS_FILE[] = __FILE__;0 `3 N) S# v; _* [$ N( u+ u5 d
  22. #endif$ n& V  U2 z5 _1 I. R
  23. #include "SkinResDef.h"$ q( N2 Z: g. T: O
  24. #include "ChangeBG.h"1 Q) d4 e$ I7 F4 u/ v, q
  25. #include "AFXINET.H"
    - F" D6 s! b6 h8 V) b
  26. % }& I5 v! i* j, a& w! p* O% G
  27. #define TRADITIONAL_CHINESE 0
    ' i# q: s; D! L! L5 n1 P
  28. #define SIMPLIFY_CHINESE 1
    4 H# |( G8 |! Y# t; T7 r, W5 @
  29. #define ENGLISH 2
    ' g1 ^% [0 P9 [: L/ v) a
  30. int m_iLanguage = ENGLISH;1 }5 G0 o! m8 s7 C$ ]
  31. /////////////////////////////////////////////////////////////////////////////
    3 Q' D" Q0 c; t' P* j; K6 ~' N
  32. // CRevAppApp
    $ _$ g8 J8 V& F3 \* n

  33. + L3 |7 H$ r8 o1 o; t) o) W
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)' e% N  P1 ~0 h
  35.         //{{AFX_MSG_MAP(CRevAppApp)9 L9 @7 D9 I! {: H; P* Y* J) T& D" }
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.# Y( B1 F) Z" T( e
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; c1 Z+ j0 U* B: W+ M3 C- t
  38.         //}}AFX_MSG
    7 e; Y- q  M7 C. q+ X# E, i
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    9 H. b, {9 q1 i2 ]$ E- s, ~- z
  40. END_MESSAGE_MAP()" ^# v' m% |. }

  41. : z* b0 Y! Q: W. w; y' X; y
  42. /////////////////////////////////////////////////////////////////////////////- R/ N& S2 ?8 A" s) s0 O8 ]/ F
  43. // CRevAppApp construction+ J2 r: l' j+ e2 [  u
  44. 4 E- z$ P4 o2 k; @1 Y  \
  45. CRevAppApp::CRevAppApp(), O9 W% ^- R6 [6 h
  46. {
    4 s2 Y/ Q+ \' e5 d3 W% ?' K. ]+ ^6 ?
  47.         // TODO: add construction code here,4 q# V+ c2 |, f  s( I4 X9 l: [3 \
  48.         // Place all significant initialization in InitInstance
    & a; @4 X1 H( Q0 q$ f, {
  49.   bDisplayIsBig5=FALSE;
    & y# s: k) b' r' e
  50.   bRestartUpdater=FALSE;7 X. \$ K+ b6 R8 |' \7 D- j  ]: C- A
  51.   bFinishUpdated=FALSE;
    7 \- E( p2 l2 v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    1 O* [, _" H1 G. Y1 l2 p
  53.   InitChangeDataBig52GBKS();( K+ g  e$ {! U; [& {! j
  54.   InitChangeDataGBKS2Big5();, L, X% O$ ?1 B" f
  55.         //
    7 I/ ]( e& j' {- Q; M" f/ i
  56.         bClickRunExe = FALSE;
    ! N! ]3 e- M: u" O
  57.         //; M( f. W* f0 P* b0 @
  58. }
    , _, m* L0 D! n
  59. # [+ `8 k1 A% e! O* S
  60. CRevAppApp::~CRevAppApp()+ V1 ?2 _  T& Y* E% Z, ~
  61. {
    * _+ i  Z; u3 T# v9 l
  62.         // TODO: add construction code here,
    ) \( w4 ]" h9 v9 W+ M
  63.         // Place all significant initialization in InitInstance8 _* n6 ?" ?$ S& J  q5 A  H1 O
  64.   EndChangeData();
    3 y8 W/ }, n$ y* p& T
  65. }
    & P4 o$ z* }5 B0 [% h. N5 Q/ T: \

  66. ; v: P. a4 f/ o* [, y9 K2 O9 M$ q8 h
  67. /////////////////////////////////////////////////////////////////////////////
    3 W; A. @+ a: V9 a1 B" F' n
  68. // The one and only CRevAppApp object) ]' N! j; u6 d2 H
  69. 7 b+ [! X! A( m6 x5 o/ Z! w, d" w/ j
  70. CRevAppApp theApp;
    5 @) W5 z+ j8 ^! c4 V! s

  71. & ?$ I: l9 ?7 ]$ a) C1 {7 r
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    1 e& H) @0 ?- n. t  H6 z
  73. {1 @+ j/ `8 K% Q! E/ a: X
  74.   int iEOF=0;/ g/ j" X. |5 K6 k
  75.   char szTempName[MAX_PATH];% I8 n4 W7 u# n1 g% b
  76.   *szFileName=0;) [; I6 W3 p  B  X( `6 {2 F
  77.   iEOF=fscanf(fp,"%s",szTempName);
    5 q( [; Y4 H8 `+ z# z% y5 l
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')& a' ?: s& Z( N7 S& u* D9 z
  79.   {0 K$ k7 b9 _8 S  {- }* k! {! Z. H
  80.     strcpy(szFileName,&szTempName[1]);3 p8 f) L+ b% [" [7 K5 I
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 }& D7 }$ x  _$ V# P
  82.     {3 g6 `0 [* f; M1 Q7 b
  83.       iEOF=fscanf(fp,"%s",szTempName);
    6 a# J, R4 j+ R# C8 T' b
  84.       strcat(szFileName," ");
    4 x& M+ ]. n2 j/ s. q0 d
  85.       strcat(szFileName,szTempName);3 Z, V$ l% i  s( b, @
  86.     }5 i4 t9 `- _. W7 F: V
  87.     if(strlen(szFileName)>=1): Y8 j4 e3 s, ?0 O  x. N9 q5 a4 H
  88.     {7 R! x  G% r0 E
  89.       szFileName[strlen(szFileName)-1]=0;- l( Q" \' Y3 Y; U0 c3 d
  90.     }
    3 L( L. `3 U, @0 O0 y! Y0 L
  91.   }& e" B6 c; ^7 y
  92.   return szFileName;
    1 P( d6 k* ]: ]% n& D8 Q6 L
  93. }& y/ V& c# a4 [9 t) y9 F& S7 E

  94. ( @- A2 ?7 w& O" z3 U
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)" e' S  a) M8 ?$ s+ H9 t3 a
  96. {
    # a5 e. y- G, f& `' O; S  e3 A
  97.   FILE *fp;
    0 _$ }" M$ i! ^2 G0 h" q' B" p
  98.   char *key=NULL;- v8 e. g8 w& n9 {( i' h+ N) [
  99.   char version[MAX_PATH];
    , {( I" R; Z0 @# L/ v4 |- z" F
  100.   LPUPDATEFILE file,olds;" `( ^& N, n8 |! X
  101.   std::map<CString,LPUPDATEFILE>::iterator p;/ B) B+ t  B$ X$ {% d* u6 T; `

  102. ( v4 k5 m! n  T+ E$ s# I
  103.   UpdateList.clear();
    % A2 `% i7 h# C* Q, }
  104.   UpdateFile.clear();
    2 S) Q5 m- f8 ~
  105.   if(GetFileAttributes(filename)==-1) return false;$ ~  H# a9 _+ s3 [& s# r9 \  [5 {! |7 x
  106.   if(!(fp=fopen(filename,"r"))) return false;
    . R: ^, k3 d( l0 H+ O* D3 C" o! R' K% A7 ]; {
  107.   fscanf(fp,"%s",version);
    # N, ]( @9 L6 n6 V+ u
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- ?6 Z# L  Z7 h, J/ p6 S; D6 l: S
  109.   while(fscanf(fp,"%s",version)!=EOF)& W$ r' A% h& ^( z& v
  110.   {# n' ^& H6 y5 d; m
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % j9 S3 X3 s) p
  112.     fscanf(fp,"%s",file->path);3 R% q* T  B5 z; A  d/ d. t
  113.     ReadFileNames(fp,file->file);
    3 A& r, g& w9 z4 G
  114.     strcpy(file->full,".");4 B3 x3 o  Q% x! K
  115.     strcat(file->full,file->path);
    $ S1 }. ]. _0 \3 E
  116.     strcat(file->full,file->file);6 d7 X. h* A; R; _! \0 R: h6 M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    & I) Q- x2 @/ S; A
  118.     {
    / b8 B6 x5 K" S) W; {8 y
  119.       file->vers=(float)atof(version);  a( {" x. s4 l: O4 ^
  120.       UpdateList.push_back(file->full);' N* U6 Z2 p6 [1 m
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  f9 l" \- O$ Q; E0 u$ ]
  122.     }
    % l1 i. S7 \1 E# @5 V
  123.     else
    ( J- U* i8 s9 x4 c( ]0 S2 J3 \& u
  124.     {9 \* l/ U; `) r3 r6 i
  125.       olds=(*p).second;
    " }% {' k. m0 V8 {7 m
  126.       if(olds->vers<(float)atof(version)), n( p6 e  ~5 s$ B7 A
  127.       {
    5 d9 Z1 W: r# I  e; u
  128.         olds->vers=(float)atof(version);( K% Z* G. k' @4 E8 g" I
  129.       }
    * W" \  x% J5 e0 u' T$ E" b
  130.       free(file);
    + b! T9 d4 J# V2 E% |5 N
  131.     }
    " P# E/ \$ K2 @' m$ j
  132.   }
    7 q# t. v! }+ Q9 O+ H
  133.   fclose(fp);2 K# b% {) {2 x' Q  V& A
  134.   return true;' {8 K' D4 V- `4 X" u9 J
  135. }
    3 T- T+ ]1 z& X& _1 Z  W2 C, K. D

  136. ; s* W5 d: O6 D; K( T
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    / G8 Q- p$ |; ^" o- L# n4 |7 c
  138. {
    & m2 g3 S" R1 Y7 V' L7 T" d
  139.   TCHAR  szFull[MAX_PATH];
    - i+ [) i! i( H; p9 D. K
  140.   TCHAR *token,*inter;
    8 j+ \( a$ F* r- M, X
  141.   *szPath=0;& T; j$ s0 U! Q& ~0 |
  142.   strcpy(szFull,szFullPath);
    5 t! |9 S5 T4 {5 `  T! a
  143.   token=strtok(szFull,"\\/");
    ; x' n2 a( W) i) J' k
  144.   inter=token;8 I- {& ]  M" H, q
  145.   while(token=strtok(NULL,"\\/"))& f( T; j" Y# O
  146.   {" u$ d% u: S3 M6 y* b( l
  147.     strcat(szPath,inter);
    6 [3 c0 s0 f% Y6 e0 P5 P  u
  148.     strcat(szPath,"\");9 \5 ?1 v8 U+ I( \& C; N1 v
  149.     inter=token;
    4 A! Q. }# x3 ]5 l) A6 v" p
  150.   }4 b, ?6 y/ z; h' f# [+ z3 c& `
  151.   return strlen(szPath);
    # ?  i/ Z# n+ ~$ S: d9 E" d
  152. }
    , [7 d9 W2 s0 I! b
  153. 6 D# |1 t. D0 _: O
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    0 ^$ j1 R$ O" t( N
  155. {
    & v0 \3 X/ z! l& T4 y! r
  156.   DWORD attrib=GetFileAttributes(Target);
      y- l' {; u3 O8 _  ~  `
  157.   if(attrib!=-1)
    / Z. B! E) K3 l0 ~' @! i' `
  158.   {# u. P9 z( }2 H2 L- i5 C2 ?- ?
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    % B' M3 S( r+ K! z2 T* J# h- E
  160.     {1 ^# o% L5 z% n+ o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    5 u' e$ l7 w$ j) f4 e. g: H
  162.       SetFileAttributes(Target,attrib);
      u4 K9 N7 q. K! ^" t3 N) V
  163.     }
    4 f% m' e( B1 B% V/ N
  164.   }
    7 o1 _4 J/ ^3 ^' x8 {! G
  165.   CopyFile(Source,Target,Erase);
    1 a& i6 {  M# N
  166. }7 c. u6 d) M9 F# X8 c
  167. - A  X' y# T' y& D. h6 h+ f/ S
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    : l# T, t; [# Q7 l( k
  169. {
    $ J, o4 p* h% O  p
  170.      FILE *fp;
    ( i7 ^+ c  d5 K% Z
  171.      char  szBuffer[8192];
    ( p4 b1 I( V: `5 ^8 T4 [4 [: I% j3 x
  172.   va_list  argptr;" s! e% W# r. t: o2 i  C/ c2 }# u

  173. % [1 V8 a1 |1 v
  174.         va_start(argptr,message);
    ( F$ Q, D% l" x) z3 o
  175.         vsprintf(szBuffer,message,argptr);& `0 s+ z3 I) Q
  176.         va_end(argptr);
    2 [1 L" q7 N; P: L; l* S8 a' h
  177.   fp=fopen(FileName,"a");* N' V  h- p" h8 s" d5 O
  178.   if(fp)
    ) f( y+ z4 j8 ?+ e& Y2 w1 ]+ @
  179.   {
    % T( u1 a9 b, p, ]
  180.     fprintf(fp,szBuffer);
    & e+ L0 w0 P4 o) b  W' h5 @
  181.     fclose(fp);
    5 o7 H( P, e0 j% z3 e
  182.           _flushall();; ^6 K- I* a% D: F9 F* c
  183.   }1 b0 R7 b0 a* @0 ?9 g4 P  X; u
  184. }6 j. P- b$ T& ?# s3 k  V. s7 r; M; W
  185. 6 n2 z& f/ g6 c+ `
  186. BOOL CRevAppApp::Fclearf(char *FileName)9 M+ [. I& @7 S5 A
  187. {
    1 k6 O( }. g& s! |4 U
  188.      FILE *fp;
    & [3 \) m' Y, J0 Z, h$ h
  189.     DWORD  attrib;6 J, }# m# |' f# N2 R* s. \$ u
  190.   attrib=GetFileAttributes(FileName);
    2 u0 f. J# O0 T. `9 K: m1 J( h* W
  191.   if(attrib!=-1)
    6 O- r9 l/ W3 e/ K! h% u! I$ y
  192.   {6 ~3 {7 b1 X: @) c5 M3 ?. O
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    # G0 ?4 ~) U8 \/ N& z0 g
  194.     if(!SetFileAttributes(FileName,attrib))1 r4 f% h' u# [% \
  195.     {7 R% {9 r6 C% h3 N0 V0 x. y
  196.       return FALSE;  Q; j' |& y8 u3 d: k) R% y
  197.     }
    1 H/ X4 l" z  m8 E; b
  198.   }
    7 L+ Z/ O- b2 G- ~; x2 M& S, {
  199.   fp=fopen(FileName,"wb");6 }8 x& @6 o. w" Q* S$ M8 N9 @! u
  200.   if(fp)
    ! Q4 n. w* @: }0 v0 Q
  201.   {
    2 H$ o# z$ [4 V7 d* E
  202.     fclose(fp);4 y& M/ g, J) J0 E- o! H% V
  203.   }
    6 r: e( _% R* u& d; C+ R) H
  204.   return TRUE;. f; y* W1 d. N+ Z, u3 ]
  205. }' n0 c* r2 D' z8 l0 @/ z
  206. % }! n: F+ r% u7 K9 L
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    5 o& ^: e+ ?: o+ Y  O$ L1 C% e
  208. {
    . Q2 S- n9 x. {5 d
  209.   char filename[MAX_PATH];, t; W5 K* C0 ~8 n0 g1 |" c
  210.   LPUPDATEFILE file,olds;
    ) L. l3 v* m" k/ c2 L5 z5 U
  211.   std::map<int,CString>::iterator i;, |# M) r1 @& N* t
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; v; x0 H! ~7 Y+ c! l% O
  213.   std::list<CString>::iterator l;1 Y% o9 a" n( o! i1 s1 {& Y

  214. ( R  `& F) d8 }- ]% X5 q5 ~* b% J* ]
  215.   if(bFirstUpdate)) ]( S- t0 c* a$ S( `" a
  216.   {
    3 M5 ]5 X3 i5 H- _
  217.     dwCurrFile=0;
    . K7 h9 H$ p9 @6 M
  218.     bFirstUpdate=FALSE;3 a+ d4 n- S; h
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    % g0 \! P) o1 R! c! Q4 E( T
  220.     {
    * e2 g, C. x: ?' k. \- `' B$ U
  221.       dwTotalFiles=UpdateLocal.size();; L/ U; [5 [( R7 @* Q& y7 o
  222.       dwDownLoaded=0;- \* ]+ R3 F; U3 o
  223.       bSilentStep=FALSE;% E# n* ~5 h# }# y3 B5 Z* K3 t
  224.       bCompressed=TRUE;! ]' K) A5 P% [7 T: w# t% ~
  225.       strExtLocal.Empty();! m  [8 J, r2 G. M; @7 ~5 s
  226.       strFullName=(*i).second;
    , z/ R6 I+ V3 X( D( @0 H, d8 V& J
  227.       dwProgramState=AP_CONNECT;
    9 v) S- x" @6 \) O: R% w6 E% Z
  228.       return TRUE;
    & M8 o( ^0 u5 o* o* |# B
  229.     }
    + V5 T0 Z* O8 S
  230.   }
    $ u' T) C9 h7 C& A* e: [
  231.   else if(bRestartUpdater==FALSE)3 p3 M& v* S+ z# {" q. C
  232.   {$ [4 A# W; }( g
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())! [# h& z$ g& S, }/ J
  234.     {, o" u) m1 B! ?& x
  235.       file=(*p).second;5 i, V- c& K: R2 d/ _. D1 k
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ f/ `: A1 `  z6 ^
  237.       {! U7 Q& ]9 `& l1 G
  238.         olds=(*p).second;/ |4 U! A* u) c5 a' C
  239.         olds->vers=file->vers;
    % |3 D/ m9 {% B4 s" D1 _$ ~
  240.       }
    * q; R  S) g  i+ \3 a& c3 h# F
  241.       else
    - U( p& m2 Z0 ^9 P7 F
  242.       {, ?" Z0 Z/ V" o- |8 i# [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));1 D) U# s$ l$ V& X
  244.         memcpy(olds,file,sizeof(UPDATEFILE));1 G% [9 l4 C+ W2 ?1 B
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : H1 [% h" X7 t7 t$ s0 K
  246.       }
    3 m2 g1 B5 T& \8 G1 t+ [
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    * m; I' s5 }3 I: C, v% m- c
  248.       sprintf(filename,"(%s)",file->file);- e2 V9 T+ D& z- v! O
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    : z+ B  b( k1 ~- m" j: Y- C1 _
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    6 x" b+ V9 P! n6 L/ B
  251.     }: g8 A+ E* Z5 [) B) |$ G
  252.     dwCurrFile++;
    # h, \' M. {6 ]$ _
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). R8 Z3 N  V+ x, g$ N! q
  254.     {
    - ^- K0 G8 _2 H6 m+ P2 Y, Q
  255.       bSilentStep=FALSE;) j4 a) k$ c: H" ~  g/ m
  256.       bCompressed=TRUE;; B. d. i+ f5 f  ], Y  F/ j/ R
  257.       strExtLocal.Empty();. `& Y, A. w# I7 f
  258.       strFullName=(*i).second;
    & Z0 |5 p' h+ z! z! c% {: L, [
  259.       dwProgramState=AP_CONNECT;% ]; T4 q8 G4 T$ v
  260.       return TRUE;6 P& s4 g4 E; N1 z
  261.     }- L. O$ s) C4 F. C8 g( m' i
  262.     if(!bRestartUpdater)
    + N, y$ `( ?; L9 W1 y7 r
  263.     {
    . m6 B+ `7 {0 z4 S" X
  264.       int iCurrSize,iFileSize;3 Y3 S  E) m3 ?/ n5 P
  265.       iCurrSize=0;
    $ r  I# }, e& D
  266.       iFileSize=UpdateList2.size();
      K& ]+ v; r6 ?. C" p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");: M: W8 R7 U  Y2 T$ b. p, `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");9 `7 C6 n1 y/ S
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");! V; x8 }3 v, v  X- J; I
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);' ^7 t9 `  z. _- R4 s) ]+ g
  271.       Fclearf(".\\update.dat");% q. H  }) `% ?4 P1 O
  272.       Fprintf(".\\update.dat","Bloodyf\n");+ \/ I( u% k6 ^# J5 }' ^/ a4 e
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), A3 k( Z0 r8 ^* o+ g- B/ H
  274.       {$ c' {- @0 N/ w" r$ ~. f1 h& `8 h) i) l
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())3 W8 U+ j3 {+ D9 c, B9 y
  276.         {
    " |" w3 ]+ _4 I, T8 S6 ]
  277.           file=(*p).second;
    + L& A& Y% G( a2 {, ^
  278.           sprintf(filename,"(%s)",file->file);# Y2 l  i( R( \3 h7 p. p& l
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    , V# j+ C0 s  e1 w. d
  280.           iCurrSize++;
    % T9 o5 ]% ]# a. m) p" j  E
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    5 _2 R3 t1 o% s: b4 d. T
  282.         }
    : V. [" D9 \3 r: U- Z% p* `  n4 e% E
  283.       }
    - Y4 U& C2 B* q# t& V( f0 G
  284.       unlink(".\\update.txt");
    9 d2 I: ~) M5 u. C* _
  285.       unlink(".\\update.tmp");* B- ^* a9 V# B3 N: Y
  286.       Fclearf(".\\checkversion.dat");; _) E7 o& |7 m# {  s9 v& S5 s
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);& G$ {% g8 o+ }: a
  288.       if(UpdateLocal.size())
    + H) t* a& `5 b, p
  289.       {+ \- E  G+ W; [5 {' `8 P
  290.         UpdateLocal.clear();2 D0 {9 b, L' T3 q) R
  291.       }
    6 ?4 T7 @9 }4 U
  292.       if(UpdateFile3.size())
    7 }1 S: ?1 t+ {( t$ u% n
  293.       {
    8 s( Z2 ?  \- Y' Y
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)" b( w: y% b6 I% l+ [' s: _
  295.         {/ h- R( I# i/ \9 o6 i& w- m
  296.           file=(*p).second;+ V) Z. l6 i0 r, j" P7 V6 V: l  X; `, K
  297.           free(file);2 S$ x- M1 Z8 a# R' R3 s- e& R6 `
  298.         }
    6 }/ P' V. Y1 l3 F9 S3 n! i
  299.         UpdateFile3.clear();8 q' K6 I' o3 |2 T( S* w. A+ m
  300.         UpdateList3.clear();9 g6 f+ ?& q; _4 E' u+ l
  301.       }
    ' @5 H2 i+ H3 H  o. x  @& u
  302.       if(UpdateFile2.size())
    6 P' _. h/ o9 H7 w. G' f7 Z$ }. D! e
  303.       {/ ]9 L  \3 {0 g; p( S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
      k- `6 o  o1 j. E" |
  305.         {$ K5 z8 e+ G  L( [& G  P! p
  306.           file=(*p).second;) l5 h5 u, S% ]& |7 }( u2 n  h+ K6 I' ]
  307.           free(file);; P6 T0 E4 l7 A4 Z, m9 h
  308.         }/ O: h9 e3 h3 g. B/ g! ]. ^
  309.         UpdateFile2.clear();9 x9 r( u. T% k2 n" R! A
  310.         UpdateList2.clear();
    " h" N4 a% J$ k, N; y- z
  311.       }
    3 H: P; x9 |( f5 h# n* k- @' y
  312.       if(UpdateFile1.size()). c7 Y1 d: y7 T$ r0 X; O
  313.       {
    8 T; N3 v# ^) i5 n+ J
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); x+ m4 C# s1 Z& M0 R$ L
  315.         {
    , H# e, T7 o9 C  F5 J7 `8 A
  316.           file=(*p).second;! Q4 v0 ?, E2 z0 V
  317.           free(file);' U( Q4 U% j5 @
  318.         }
    ( E$ h' d/ e; c7 E4 ~5 n( h
  319.         UpdateFile1.clear();
    * A7 y$ G- y) \( V9 r. z
  320.         UpdateList1.clear();
    ! f# j8 E, l0 V* w
  321.       }6 F6 j, M5 P6 Q9 E8 R+ Y
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ! L" P. K" d& @3 j! C) D* G
  323.     }9 D( H; [6 z( E* R  E: [
  324.   }
    * m  J8 P: a- }# R" u) F1 t
  325.   return FALSE;3 ]6 q$ ?5 W9 D0 J- Z
  326. }0 z+ b- M+ N" u8 U8 D% O

  327. # W  l. g& j% X& z) t7 e; e& {
  328. void CRevAppApp::ClearAll(void)
    + T/ _# {7 g1 \8 r3 P
  329. {  z/ J6 O  l" L% ^" \
  330.   LPUPDATEFILE file;
    ! D# k  x4 P0 H6 P8 P
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 e: ?1 T7 Y  s' q
  332. + d3 _3 |& M! K+ W5 b- k
  333.   if(UpdateLocal.size())' {$ X5 T, W" y0 b$ s3 \" Y
  334.   {% q& c+ P- O4 ]1 |( z. J
  335.     UpdateLocal.clear();/ F6 \4 n9 e" ^, a1 z/ w3 ?- O
  336.   }$ R& B  {6 N" T4 {" s+ g* I
  337.   if(UpdateFile3.size())
    : q2 O! a0 ?) V3 i
  338.   {
    . e8 ^: N- e; S
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    7 I( f- n: j6 p5 M2 D
  340.     {, K! E) Y1 Q; o$ B
  341.       file=(*p).second;& J! ]) i( _0 T5 Y2 b
  342.       free(file);
    6 p& K6 ]8 D4 S7 F. t
  343.     }
    $ S# T  I6 _7 V' ^
  344.     UpdateFile3.clear();
    % j! ~2 i' B6 _" e$ Z$ f+ u  B
  345.     UpdateList3.clear();6 q2 c7 m' a. {! Q6 D) ]0 h1 D% Q
  346.   }1 ?  G0 {( X' J* R; s+ W0 E
  347.   if(UpdateFile2.size())% O) n; I2 E9 I( C( I. h' z8 J1 C
  348.   {  U: f/ R7 B8 o8 s! i3 z# G. ]
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    5 z+ f+ F. L" e0 ~, D' J& E  H2 D
  350.     {5 D, u) P' c6 k1 z
  351.       file=(*p).second;5 z" x* h3 r% V
  352.       free(file);
    " H! ^  r- X: J" b' K
  353.     }# _$ ]6 r' p. O# Q0 R1 A% A; @
  354.     UpdateFile2.clear();( O8 Z2 R" D+ [1 W
  355.     UpdateList2.clear();
    2 F4 _6 ?2 i' c
  356.   }
    / g1 `6 U& t: g% T8 l8 v: ^- P
  357.   if(UpdateFile1.size())
    " u4 q7 Z# ]$ r' }* g6 R* }
  358.   {9 g  [9 r( P; [' l# U
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 S- j7 l; `1 b" M
  360.     {! T1 O3 o9 B( K+ v" J9 \' n# E
  361.       file=(*p).second;
    + D0 |. v+ f! p6 E- P$ V0 s
  362.       free(file);
    2 w) j" u1 U. ^# _( U* A
  363.     }
    $ Z$ f) A0 o0 F; m4 s
  364.     UpdateFile1.clear();; l5 M- v3 E0 g5 b3 K
  365.     UpdateList1.clear();
    % I6 l6 C6 V9 V! m" ?: V8 X: z
  366.   }% e7 ^/ a$ {5 U  O% f
  367. }  
    " t9 ~8 {# q1 T1 ^
  368.   % ^" a+ n$ G2 z7 g1 A9 }( C7 \
  369. BOOL CRevAppApp::CheckLocalVersion(void). A1 z, {$ n8 g# n8 j
  370. {
    % P5 D" G8 P4 n6 A! d# u. G
  371.   int c;
    , ?8 F2 j% c' j5 @
  372.   LPUPDATEFILE file1,file2;
    ! r4 w6 P( i  L8 y) A1 y6 y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    - o' Z' q% q; z( P  _
  374.   std::list<CString>::iterator l;
    ; x# o; g* X" R; B) |) h1 ]
  375. ; z( I! y  n+ W; t
  376.   UpdateLocal.clear();
    9 x! [* |8 H" l8 }9 A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    # F2 l. Q* P0 P* K( C- M. I$ u
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);+ z4 t- K+ V8 q* d( o# \3 R
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);* Q. I; e, W( [! M% A' z$ P
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    $ E) l: e9 q3 Z
  381.   if(UpdateFile3.size()), s' Q& t1 f, R+ Y7 }/ i
  382.   {4 N* D9 ^( O$ N
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    . U! t% H0 B4 ]# d
  384.     {
    % W3 k( t/ {) h9 p) n
  385.       file2=(LPUPDATEFILE)(*i).second;
    , q7 j! L& M& b& e2 r1 ~
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())3 R9 E& k- a5 [6 u0 _5 @: K+ m% O
  387.       {
    7 |7 T. k; k- _: G  i
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 T- \8 _- q$ ~! `* P  A
  389.         file1->vers=file2->vers;
    0 t* c1 n) o0 v  |9 p" \
  390.       }
    # k' S$ D4 V' c
  391.       else# }- J) _3 {1 S3 s! C, B
  392.       {5 Z9 U) y: [6 Z
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ' N3 Z* P3 Q1 I# r5 C, v7 i
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));  X2 m9 z6 T+ F& H$ k4 v
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& c1 H& S/ B  A0 _: V2 }" Z4 g
  396.       }+ v3 \8 s7 y. r. y
  397.     }/ L$ k& W& q8 V2 E0 i# Y: J
  398.   }
    / g. K0 F, E7 i6 D- y
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ( y2 C6 J! [* r5 x7 e
  400.   {
    ( r5 K' `6 }1 W7 f. F8 l+ l1 t+ A3 [
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    , o* ^) G: c9 N. _, o
  402.     {9 w9 }: F7 ?4 x
  403.       file2=(LPUPDATEFILE)(*i).second;# O8 [$ ~" F6 @' p
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    8 Y) w( |$ D5 n" A% J+ O- r
  405.       {9 h4 L. b$ n' d# Q, J& N% u
  406.         file1=(LPUPDATEFILE)(*p).second;% Z  `; y% X! H& _8 I3 @
  407.         if(file1->vers!=file2->vers)7 R$ A7 c0 s3 e3 N8 T: W" w& E
  408.         {( F* H8 P4 R2 S8 {) W" Y
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));! L" a; L8 l( _* Y! V, Q9 k9 y
  410.           c++;
    ) z3 T; y5 Z: c  \( k+ C
  411.         }
    / R! T3 t: B. q# R$ F& k) `* ]
  412.       }; m/ M; Y$ l; p0 Y
  413.       else/ a# Q# |& o& X. C" E. l7 h: ?, U
  414.       {
    + X$ y. e7 O$ M. ]% F  ]
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 g: Z2 e4 ?% U% j% ~+ h, _
  416.         c++;
    1 Y3 j* j7 l! ~3 H; X" @: \, N
  417.       }
    * `2 A* z0 y- C
  418.     }
    3 T. r5 Y5 _0 k3 d0 d) d
  419.   }
    ; ~$ Y8 g+ {: i/ B$ I
  420.   unlink(".\\DownLoad\\update.txt");
    4 E3 v$ c# T5 X$ w2 i3 T
  421.   if(UpdateLocal.size()) return TRUE;
    9 ^  h" M1 ?% |" I- v( [- H2 s5 p
  422.   else                   return FALSE;
    7 C" ~8 k: R7 ~2 A4 `0 ~
  423. }
    5 b* h1 ?* ^; r

  424. : `  q2 i% m; w
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"/ \) f* D% _5 K1 b& e9 \; E" |
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! Y, f0 T1 m$ B; d) d& {: x! m
  427. 1 p* \. ]+ r& E, f& @) r, r( H
  428. / d; o( F. Q4 n) Q4 V8 L! l: E/ Q
  429. 9 n6 m, T$ a7 }* O9 {0 A; N
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)* p' x$ P3 t% {; D$ C
  431. {0 A- N: J3 H! A7 t
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;# Z6 H' u  S. W8 F9 |) Q  }
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)0 T  w1 v) g6 q8 f$ _8 V
  434.   {
    ) A7 p# p$ I0 _2 E: q
  435.     char szLanguage[50];
    ; u, k( z2 H4 B5 g2 \6 n8 ]
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");, `0 Y+ ^/ D, T% y, [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 J& P( N- d! Q# s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) i( C7 V' \; x; F" @
  439.     else                                   m_iLanguage=ENGLISH;
    8 t* @' c* F0 R; O; h( R) Q
  440.     char szRegister[100];
    ! u. H: t7 b5 J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    4 ?8 @. J' O7 C( A, V1 s2 ^/ V. H3 H
  442.     strRegsName=szRegister;' B& j9 ^5 j1 \1 F
  443.     char szPatchURL[100];
    8 Q  N# f3 T3 S
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");: v9 s8 d: ~: W5 G
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    * L" y* P) m4 o* @
  446.   }8 g1 q- d+ R' N8 m* }* k7 n% P
  447.   else
    ! ?5 [7 e  d3 w8 o
  448.   {8 U" T+ m2 e+ s- _% N: U) Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);+ {: B: R: N0 u: a
  450.     strRegsName=DEFAULT_REG_URL;
    * L* }( ?+ H8 H
  451.   }
    1 }% l/ B2 W8 `5 ^3 L! H1 A
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! J% h3 v5 O2 j4 V
  453.   {
    * Q8 e5 ^, h* P: u  Y' D
  454.     char szIP[50];7 y  S! \7 b; s) [' g" H( _
  455.     char szDIR[300];
    3 p, S  f" E4 z, T) ^
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    + B1 W5 b, W+ q! P
  457.     {
    6 C7 t$ R; o0 x( `; s& X) \, j
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");" d& S0 j6 w) u, E0 g+ h6 l
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    2 {6 t& ^7 [5 o" c
  460.       strHostName=szIP;3 X3 X/ Q+ E+ d( V
  461.       strHostPath.Format("/%s",szDIR);
    . p5 ?2 j+ C# J% a. p+ k
  462.     }
    0 e; o8 `5 ]# s& v
  463.     else* {* z/ o( v, p- U
  464.     {% n$ N' D7 M9 W0 A
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 _) ~9 J. a3 C2 q
  466.       {" W- b7 W  L# Q! @& n: x
  467.         char szLanguage[50];- J8 M5 [1 {- z3 ~/ s* E4 D4 @% Z% u" E+ m
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    1 p" q0 u, h) q1 J, K- ]1 n7 `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    # t+ e) \" C: M4 ^
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;2 F9 U# E/ I' B+ L; C, x; M
  471.         else                                   m_iLanguage=ENGLISH;
    ' T, ]' v6 V$ W3 W7 b9 }
  472.         char szRegister[100];
    6 {6 c: g& K3 C- [) p" R7 m
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");+ s3 A- H* D: ?5 u1 }
  474.         strRegsName=szRegister;0 l& i5 s! d  A+ I( f' U; Z
  475.         char szPatchURL[100];% Y2 I5 Y) m3 u: Y$ n0 ^
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ' M" p8 r- V7 x; e
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / n% z$ j$ y) Q0 x3 M' j* R7 f
  478.       }
    0 b6 v" O+ \2 {1 L! K
  479.       else6 Q8 y% I2 F# W1 U9 [
  480.       {: W0 T; c3 ]" A$ {6 X5 E. r
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    " L) W4 m# g6 |9 q! Y
  482.         strRegsName=DEFAULT_REG_URL;
    " ]. W: j1 P! s+ t
  483.       }& [0 _1 N) `) ^1 h' U9 c
  484.     }
      q1 v  I8 \6 r
  485.   }
    ! C6 h& F. o' q8 q( C# k: h' A
  486.   return true;! N. i% m- `9 F! n
  487. }# \/ c0 t0 Z% J8 V
  488. + ~; T9 F; Z$ ^
  489. #include ".\ZLib\unzip.h"
    ) ?1 X9 {1 V- J& O
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    - U$ \$ V0 t' u6 g2 v/ W) {. y- p
  491. /////////////////////////////////////////////////////////////////////////////
    " K. v( d$ I6 j
  492. // CRevAppApp initialization  T: K/ R* [9 f/ J
  493. * Z8 E0 E- P4 Q  Q. ]
  494. BOOL CRevAppApp::InitInstance()- y! [5 d6 ?, T+ k0 ~5 E1 t
  495. {
    , N# x  E* J4 p( J) ~  X2 S* b
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    2 p' ?- H8 K" t" t4 X% l- f

  497. ( U, p! g9 y8 N- {3 r  M
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);# b9 U0 V$ {! s
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))* J6 N) K; a: z( u: A
  500.   {
    5 M0 r( E6 t/ b, w; f
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");. _2 n% g4 X& w# m- k
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: B% _2 M* J7 ~# D
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    $ s- t$ x/ E% x+ o: |5 m, G
  504.     {
    + X. Z3 Z! [) O% r  |6 p
  505.       strcpy(szPath,szPathTarget);2 Q/ R, o. h# A
  506.       SetCurrentDirectory(szPath);
    ! A; m, R, ]* [- E% p
  507.     }# L+ i* A; E- T9 Z; x! s. D
  508.   }7 z7 B) O  J. }3 z8 M, w: L* u5 r
  509. #ifdef _DEBUG
    : C% e1 s9 ^# t1 G# h3 A
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    3 i8 H4 r/ \8 u) J' P
  511. #else
    : K" B. n7 ^, t8 h" Q, P: {1 Z3 G
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + A3 c; ^# `8 e
  513. #endif
    * n% T% G+ {8 N: |7 f5 M' w
  514.   {$ v7 J1 L- ?! a
  515.     char tempFileName[MAX_PATH];5 |1 z; M1 M2 q* u# b3 r, \
  516.     strcpy(tempFileName,szPathSource);
    $ `- c9 u" u7 X
  517.     tempFileName[strlen(szPathSource)-12]=0;
    & d( ?0 U0 X: `3 i
  518.     strcat(tempFileName,"\\$CSUpdate.exe");  p7 [# k: @; F0 s  _( E4 z4 U# U# J! k% c
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 E5 F; V+ _! p1 j
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : O; U8 o& J1 d3 j  ~5 l: u/ I
  521.     return TRUE;
    . y3 Y* |7 U* @! n6 K, y/ U
  522.   }! V; j# }! `2 n% p; N
  523.   // Nuke 0118: Delete run.exe
      X3 Z+ ?: U# a. u; p5 Y$ k
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    1 U! q% O0 o1 h& |& q1 z% ?
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ; O/ E% l! ^# M6 n' q: m
  526.   if(!ReadCfgFile("Config.ini"))6 A. Z9 m# e% b& K! `  F4 ]4 o9 F; i
  527.   {
      L' F$ L; R7 q1 T/ R( S: O
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    9 g! ]" M9 @  a+ ?
  529.     return TRUE;3 O* {* u7 e1 l; z7 t
  530.   }
    + E' @$ C& J9 y
  531.   HANDLE mutex;3 S0 ?, x0 F$ r5 n
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    8 K  g& w+ f9 x0 n  q1 o% q
  533.   {' @3 H7 t6 C6 E4 G4 v: B+ H
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)+ v- v3 L# C& u" Z
  535.     {
    9 D# m& \! @. k/ H, w
  536.       CloseHandle(mutex);
    . D! N, w: ?3 N0 T( Y# R8 N
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    1 a- C" p% Z8 a3 P1 l+ ]9 n
  538.       return TRUE;+ P! ]$ b- N# t+ e
  539.     }
    / y: A+ i4 x7 n6 R8 i
  540.   }  * N* c% I( _9 R: t5 s/ P0 P9 U9 Y
  541.   CloseHandle(mutex);
    % i' X% s* z1 F/ J
  542. # u) C3 U5 m2 Y+ S; i2 m7 x- [+ Y
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);7 N( g+ c; t) n
  544. ; H) o6 U9 i, y& ~3 V1 K
  545.         AfxEnableControlContainer();1 g4 k  G5 a, t

  546. * w/ v( F6 ^6 H0 J
  547.   bCanUpdate=FALSE;* D! ]( F$ l( l, O  n% z
  548.   dwStartUpSteps=1;
    1 t5 X& s* F) O/ D+ x5 o
  549.   dwProgramState=AP_NOTHING;
    2 [! [! p3 o. b9 n; ]9 c# x

  550. 9 Y" h7 L& ~( l5 h4 \+ [
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);8 j5 T/ J4 E5 ]8 W, ?
  552. # L- X* c4 {. {/ P. H
  553.         // Standard initialization; B0 C1 u- Z# Q1 E+ |. U
  554.         // If you are not using these features and wish to reduce the size( y9 \. o6 P' K" W
  555.         //  of your final executable, you should remove from the following
    2 J! g6 t3 p2 ~0 ]& J
  556.         //  the specific initialization routines you do not need.' p3 o) t1 E4 K3 O

  557. * g7 i2 c; l% U# c1 O
  558. #ifdef _AFXDLL
    $ H3 g  q- n: a' [' @  P
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL0 u, |3 C6 S. m  Z3 n2 I) i# J! S
  560. #else+ k! M2 T2 u+ @# T# x+ h
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      R* R; b, t9 |6 C% d
  562. #endif
    $ d; R' C7 W4 u* F; T

  563. # Z, u$ j6 `1 C/ Q7 x
  564.   dlg=new CRevAppDlg;% N! j. e) C" U+ g$ t* u9 l
  565.   dlg->Create(IDD_REVAPP_DIALOG);: W* n! h% O  p1 ]
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ! R8 {2 h; i( n' @
  567.   m_pMainWnd=dlg;! R, M$ P: _& o  u

  568. 5 N& f$ t5 z. p/ `
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);+ K0 V2 a& q! i8 A% U! d  d+ }1 G0 K
  570. + G+ e0 D/ e. Q/ H
  571. //  GdiplusStartupInput gdiplusStartupInput;
    # n; Z4 R" g3 b9 N4 {5 r4 P
  572. //  ULONG_PTR gdiplusToken;  [8 Y3 U4 W  \3 ~+ y; I: {( C
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);9 V: M7 ^: u$ T) k, i/ ]

  574. # i2 m8 Q: |: h+ r$ @% R
  575. //        CRevAppDlg dlg;8 k% b, K5 m* R! |
  576. //        int nResponse = dlg.DoModal();6 p/ f: P+ G/ B/ D( @3 W
  577. //        if (nResponse == IDOK)
    - _+ K7 L' p/ e  h, P
  578. //        {
    , m5 w: h! m5 I$ O" R
  579. //                // TODO: Place code here to handle when the dialog is
    3 K5 {" H! e0 \0 r5 y8 Q9 F. W3 u
  580. //                //  dismissed with OK
    2 W" C5 _0 x* x" ~( ?3 E
  581. //        }/ L* e6 F3 d( f9 f, i, ^2 G- r
  582. //        else if (nResponse == IDCANCEL)" u& J7 j( a0 i
  583. //        {
    + K+ f8 a( [: n4 `! h: f
  584. //                // TODO: Place code here to handle when the dialog is8 }+ |8 V! N' C1 Z! }1 ?4 C  b
  585. //                //  dismissed with Cancel
    * r. a, J0 J! u# |2 e0 l
  586. //        }
      B7 `4 U+ L: I% |

  587. 1 q4 P- x9 \$ @# A0 [  N# o% X
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    : W6 t1 T9 P4 u. j' ]* c. D& j' D2 T# t
  589.         //  application, rather than start the application's message pump.
    5 y6 Q/ T1 g! ]. l, m
  590.         return TRUE;4 o' C$ c+ E& ]; X: E
  591. }9 u+ ?: G% T# w& c+ ]8 y8 F
  592. 4 q4 v) H$ e3 f) a! H' ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)$ ?3 F6 `( E6 ?# h* ~/ v/ n* b
  594. {" R* j3 h7 J+ b' r, K
  595.   int i;
    . M; ~6 o2 b0 V$ @) o8 t1 @
  596.   char *szRet;
    6 X' X) A4 w! W) k
  597. ' K+ ~* ?$ Y$ N. i' G" D2 e
  598.   if(pSource) { itoken=0; sztoken=pSource; }% S4 m1 N; D9 ~2 H0 Z0 @) p
  599.   if(sztoken)
    8 F- s5 C8 s# R" P5 t# ~, Q
  600.   {
    ; y, S4 ^' a! h- T" i/ _$ U0 {
  601.     szRet=&sztoken[itoken];
    3 g/ e# i& u, k% l( U" O
  602.     while(sztoken[itoken])
    * R. {. a3 ^. R+ a; \
  603.     {
    ) Y- U0 P7 M; i2 Y* d
  604.       for(i=0;i<(int)strlen(token);i++)
    ; @# Q, b- X0 ^, y: f& i
  605.       {% g0 u1 D; ]: |6 w. t7 a6 n4 _
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1]). ?3 N$ K6 h: |0 x# g
  607.         {' z. \% ~8 P! p! F% C# W: p
  608.           sztoken[itoken++]=0;  h, x3 j# o5 `0 }4 n% P5 j1 s' P
  609.           sztoken[itoken++]=0;
    * q$ z  V/ `/ ]: z. E9 D0 k" V
  610.           return szRet;  X+ S* [& ?; s+ O1 E
  611.         }4 ?, t& ^* I% F6 f7 g8 T4 Q* d. L9 I
  612.       }
    2 B7 J- _, A8 _
  613.       itoken++;. N6 @. n0 U9 E8 E. q8 k4 L# O: b, p
  614.     }
    + z1 b/ |' Q( p5 b: W
  615.   }6 }7 e2 P: {# F! m" U$ Z$ t
  616.   return NULL;1 U1 a( F3 ]2 {/ ^1 C' ]/ {' z
  617. }
      p, Y) f7 x* r2 `2 {
  618. 6 M  O) S2 O( W1 [- }3 v0 i8 u
  619. void ProcessProc(long Total,long Current)
    % @( I, E6 n; g4 w
  620. {
    3 S/ [9 h) E+ d, y- B
  621.         MSG msg;
      X2 l+ [$ p$ A6 K6 B( e* e8 }4 x# @
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);2 I( b  g# j7 w6 X1 e' d
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ g+ ^; d/ g1 B
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    3 B; J& _; B* \( r* {
  625.         {
    4 z0 h" w3 y# _; z( s6 x
  626.                 if(!GetMessage(&msg,NULL,0,0))
    & Z7 F3 q. ^5 L, X7 e3 B8 m, M
  627.                 {
    2 L4 O- j: P1 ~( O" e) t1 a
  628.                         return;- d/ S4 d1 M$ U8 p- d3 K% g
  629.                 }: x! V9 G  J* \( x( ^
  630.                 TranslateMessage(&msg);
    ; X  g2 B2 g& n1 S8 k0 l! ?8 E" Y
  631.                 DispatchMessage(&msg);
    3 }8 _: u$ f% k7 C! P1 \
  632.         }        & y+ j7 p+ U# R8 r/ K8 ^. y7 \) S! d
  633. }
    6 D; [7 F7 M- F2 L5 A" ?6 W8 q
  634. ) o$ y3 y6 z# n# k
  635. BOOL bFirstChar=TRUE;  }, {+ q+ C* Y, e2 V& Q
  636. - o( Z1 N* F$ I7 a5 r9 K
  637. BOOL CRevAppApp::OnIdle(LONG lCount)% V9 F4 q. [9 Q
  638. {! ^; E1 X4 ?* _* b# I1 o" |  Z4 g
  639.         // TODO: Add your specialized code here and/or call the base class
    4 t4 ?7 O* Z8 S  E7 x; j
  640.   switch(dwProgramState)2 H+ l6 ]4 G+ V4 Q7 G4 M8 ]
  641.   {
      }& y, Y' |6 E1 t
  642.   case AP_NOTHING:  f3 t- v2 g! e/ B3 B1 D
  643.     switch(dwStartUpSteps)
    : p, s+ F% V8 N: e! Z
  644.     {- S1 o7 J$ W1 K7 ~* g8 h, [
  645.     case 1:
      m7 b4 r3 O  G/ l
  646.       {! R2 ?" j; Q  f; {" j
  647.         int i;
    7 b' d# K* S0 P* a5 _1 K0 G
  648.         CDC *pCDC=dlg->GetDC();" l5 p1 R* d0 T9 `  E
  649.         HDC hdcwnd=pCDC->m_hDC;
    / [; |1 q( C6 M  p; O( Y, x! u  E
  650. //        Graphics graphics(hdcwnd);
    . x% D, [4 k3 |; ], Q8 I4 _
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 k- D6 e( U: @$ \; P, d
  652. //        INT iWidth=bitmap.GetWidth();, l# _' G5 G3 s
  653. //        INT iHeight=bitmap.GetHeight();
    . y5 H4 t- `7 P& f
  654. //        Color color,colorTemp;8 }3 |+ `/ k0 z" B2 B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ }* m. S# u* m+ r3 `
  656. //        {
    / q1 h- \3 i/ }7 ?) }8 k
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)# Q, ~0 _7 u) r* Q! O
  658. //          {
    4 W; J$ V: b$ Y
  659. //            bitmap.GetPixel(iColumn,iRow,&color);. U) a' A, C1 U/ E* n# z/ O5 @
  660. //            colorTemp.SetValue(color.MakeARGB(
    + S3 |! R6 T* ]8 A/ R# C) [, ?
  661. //              (BYTE)(255*iColumn/iWidth),0 y, x( e' z) _
  662. //              color.GetRed(),( Y: U, X  L% T& z) k* L% T
  663. //              color.GetGreen(),8 s7 \, Y( n' g: H1 [, ?6 o+ i
  664. //              color.GetBlue()));1 v3 W  g9 i- v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! Q  ]. f# r1 L5 k
  666. //          }
    6 Y2 t/ e0 N1 n* }% ?/ A
  667. //        }
      ~, N; m( u6 c# y3 t3 h2 @
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    9 K- [9 w; h# ?5 o- B
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- x) E6 q. W& e& b% b
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    9 r) v7 n, A, T& ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    / R4 ]  T  G: ?4 Y; R+ E
  672.         for(i=0;i<240;i+=8)% C; z' s% |% B3 j, i
  673.         {; Y+ i! W* U& R- P
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);& G$ `: H) {* _
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 S) Z0 q' t; r4 l7 G  \8 u$ f
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    / h$ R; `1 Z/ M
  677.           Sleep(33);/ H) i, s8 M& D: x, T1 b/ c- _7 \
  678.         }
    ! y' G, N; D& E3 Y5 Y
  679.         Sleep(1000);
    ' `0 ?0 p) s4 o% h$ V
  680.         for(i=240;i>0;i-=8)1 f" H2 d) n# E- j+ {' E
  681.         {! e1 r. ~" E3 O+ O
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 v/ j! x5 h' R& }0 v$ A" h1 ~
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    : v7 V: {# s8 o5 P
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ( W! z. t) _2 p
  685.           Sleep(33);
    9 M* V, [2 V2 M  d0 c, k
  686.         }0 W* \8 Y1 X8 i  P; i$ t
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);' J& b' g: n) g5 k% k5 A3 N
  688.         dlg->ReleaseDC(pCDC);
    1 m3 y; Y) A" q" u: o
  689.         DeleteDC(hdctar);
    ; P5 \. v5 B' f% P( f& P9 u
  690.         DeleteDC(hdcsrc);
    2 t% Y+ n+ n' ?6 I
  691.         DeleteDC(hdcorg);
    % i5 d/ f* ~$ z3 ?4 i/ ^
  692.       }
    ' J8 ?$ f: Q& W, P) M3 u
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) t5 m$ i5 N, E' L0 q
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");& R4 k  }% L9 f1 L1 F. |
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
      r0 Z) x+ O- h  U- Z  ~) V
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");" u+ Z2 X9 s) _
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' x  P$ s% S' M6 D5 }- q
  698.       if(!Dn.Connected())
    6 W& {3 e* u: ?# V$ k4 H' B* N8 O
  699.       {
    * p2 A6 ^" |, b  @7 i
  700.         dwTotalFiles=1;  a8 [! Y+ [) [+ L
  701.         dwDownLoaded=0;: S% a. y' O4 v5 l
  702.         bSilentStep=TRUE;
    4 U0 ?7 ~- ^1 l0 |
  703.         bCompressed=FALSE;+ A. d8 V: ~5 u# V8 [4 w) j
  704.         strExtLocal.Empty();& o' m5 A' ~4 r4 x! J9 n' ~
  705.         strFullName="readme.txt";( @! d5 d+ b  E/ k7 m
  706.         dwProgramState=AP_CONNECT;  e6 M+ K- s2 S6 r+ d
  707.       }
    ( f6 x; e% _+ R0 G6 x1 `
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    4 |  v3 i2 [% ^/ y; }
  709.       dwStartUpSteps=2;
    " }. h2 g$ @/ W3 J6 h
  710.       break;2 F' o# x- _0 R% z
  711.     case 2:
    ' j2 z& Z/ X4 N4 B8 I
  712.       {- i9 F9 A" e5 R3 u
  713.         int iEOF;
    & w' }: G& d2 M- m: N. K* l
  714.         FILE *fp;
    9 T7 K- }4 O0 B; ]
  715.         char szString[512];8 H+ H0 p' _  k" |; Q2 d
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");4 @; m' b2 M" v. W# [) ~7 }. B
  717.         if(fp)
    ( ~- F+ Q! f8 w! s' E7 L
  718.         {
    ; n+ c3 o- M7 }  N5 O* t
  719.           do
    ; C. g' l5 n4 Y: T0 k
  720.           {
    1 M0 z' o$ x- P4 ]- Q
  721.             iEOF=fscanf(fp,"%s",szString);
    7 ~0 g5 R/ H( L, |/ f/ P$ G& l
  722.             if(strlen(szString))$ `5 Q/ C0 X7 d% J( T6 u
  723.             {. r: o8 ^6 C, I% `* F: d
  724.               if(bFirstChar)" l0 T* e# j9 P$ r" c/ o
  725.               {3 j0 P: N- i; k$ y6 K  N
  726.                 bFirstChar=FALSE;0 K2 L; v* D5 l, Z
  727.                 bConnectIsBig5=FALSE;# j4 [7 p/ [, U# k
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;$ b! H. h+ E, V% p
  729.               }. a3 C3 m" h# Z" [
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    2 O5 f" [. B8 o1 R, L$ @8 j
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));2 l3 e, m0 x' N9 {- @( g5 q" [# n8 d
  732.               dlg->m_ListText.AddString(szString);# {8 p1 W- S* P2 ^2 ^+ m2 A. t
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 m# ~5 O5 H/ Z8 E+ H8 `
  734.               *szString=0;
    . q& H1 I9 z2 T, u4 T. L
  735.             }
    5 d. z  i: w' s
  736.           } while(iEOF!=EOF);
    ! j- e  p4 Q' F0 D1 u, F1 C9 a
  737.           fclose(fp);
    ' a1 @7 k2 X( H' h6 q4 ?
  738.           unlink(".\\DownLoad\\readme.txt");
    . X) u1 f3 _8 N, X" I; V
  739.           dwStartUpSteps=3;
    ; ]9 V8 J+ m4 w2 y; F
  740.         }
    2 z+ {- v' m5 V3 r7 s
  741.       }
    0 z( K( E2 W5 ^0 T; s
  742.       break;
    5 e1 N& e1 x) N: P/ N7 d7 m
  743.     case 3:7 e5 E1 N- ?3 q4 ~. \
  744.       if(!Dn.Connected())
    $ ~- S% T2 Q: t/ t1 F) r
  745.       {0 I2 U' d1 m  ~8 ~/ y
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# z4 t1 B1 s$ x. ^
  747.         dwTotalFiles=1;/ S7 z, y# O' e
  748.         dwDownLoaded=0;' a% ?8 n6 Z8 C" V: u" e
  749.         bSilentStep=TRUE;4 w" ?, A& j/ Z- P
  750.         bCompressed=FALSE;9 L% V8 Y' S8 q! j
  751.         strExtLocal.Empty();
    " s% N+ \# _* ~  d0 I, c; f8 W
  752.         strFullName="checkversion.txt";
      D9 x( R8 l- C! s
  753.         dwProgramState=AP_CONNECT;8 i# N5 _1 |/ }. e" w* |
  754.       }% y- V9 f# L- f6 ?3 ]  b
  755.       dwStartUpSteps=4;
    9 |" q: V2 `# r/ t8 v9 G
  756.       break;1 H7 J% S) l2 k5 r/ `. F1 o
  757.     case 4:
    4 t8 o5 c3 J' A7 J& {* f
  758.       {
    3 s: m( k! l$ g# b0 L4 J5 Z
  759.         FILE *fp;2 Q9 K1 {! \- R, z: Y+ v$ t! O, V: p
  760.         char szString1[128];+ s7 ^7 p9 B( z- A
  761.         char szString2[128];
    " ]* Y3 m9 F. X6 Q2 S
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");( G: J% |* C6 U" h! `- Y+ w$ }
  763.         if(fp)3 N5 d1 k. G' J5 Q# J! p
  764.         {  }2 E: g+ }* y6 O, z
  765.           fscanf(fp,"%s",szString1);: i! t+ [7 g2 l! U4 V
  766.           fclose(fp);4 b' n" z; f7 b2 F( j- H! C
  767.           fCheckVersion=atof(szString1);
    + N/ h( x4 |; ~+ b
  768.           fp=fopen(".\\checkversion.dat","r");% F! u) n) p- O! h) f0 ?
  769.           if(fp)
    6 ]( g0 w) [' j4 f# ^* n% r. _
  770.           {$ P$ Z8 f$ ]: J/ [  N5 ~  V
  771.             fscanf(fp,"%s",szString2);
    3 s  Z1 }% f3 P1 K( [7 y
  772.             fclose(fp);! i4 r8 s8 }* D, C9 a# J& A
  773.             if(atof(szString1)!=atof(szString2))# L$ S: Q) X1 o' S* G+ e( I0 r6 s/ ]. h
  774.             {
    : U& x* G* H5 x0 e! L* [
  775.               if(!Dn.Connected())# j+ e+ E0 p1 u
  776.               {
    * P1 _7 \; o( [8 x
  777.                 bFirstUpdate=TRUE;
    & a* `& t5 m1 _& R+ k
  778.                 dwTotalFiles=1;
    * `' M# n+ n3 j8 e' a! d
  779.                 dwDownLoaded=0;1 S+ d5 S. D* t
  780.                 bSilentStep=FALSE;& U' C+ b/ j, q- y9 Z
  781.                 bCompressed=TRUE;3 y  o& {' x6 D8 s, ^% ?
  782.                 strExtLocal=".\\DownLoad\";
    ; [2 \4 S8 a4 O: r5 I
  783.                 strFullName="update.txt";
    2 T! g. R! j1 x! {  b5 d. r9 F, P
  784.                 dwProgramState=AP_CONNECT;8 V; {% w' w. S' T5 L- q& t3 l+ C9 }
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! H# U8 t4 w/ N: s
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    " @) u' B! V- D/ k
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");. {2 Q; X8 @3 k; U
  788. " z8 z) L' U" X" j
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, l( f; H4 D9 t+ ~+ }
  790.                 unlink(".\\DownLoad\\checkversion.txt");, U, F/ c* K5 s, }6 N
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)6 _- T- Y# w5 ^& y
  792.                 {% I" Z# H, B: l( M8 I, x
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    , F* m! X1 K2 I$ ~: R2 F8 G
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ' M+ W% N$ G) l6 W  D+ i
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    8 v- H( L! R* c, L7 Z0 ^
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) a1 n/ r, Y0 s4 D

  797. / ^% Z7 P9 N& I: X9 Z! j
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");1 E- u+ z% b; g( I+ @+ Q, t! N
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ _( r7 h5 ~# U% g' a! t: O0 W% N2 J
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    8 M4 Y4 g5 j, M% c8 R- z8 [- \
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - }; {/ q" _) E' U8 i
  802.                 }& v' F  d+ ^% [- u8 P4 i  o
  803.                 dwStartUpSteps=5;) P) J, C9 A. z. M/ C% v, u( x# E3 v
  804.               }
    " N; M% N; t. k2 i
  805.             }
      }: Q' K& Q9 ]3 z* ]' o: i0 f- L
  806.             else
    : ^0 z, k# C/ y  I
  807.             {
    5 m" g4 f, F0 A3 e
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) u) ]- v2 E* O* u3 D3 ^7 v
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
      C0 N& h: i* _# U
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    % Q- M5 h8 S- g3 @5 W
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");, v+ B  l4 A3 ?

  812. " s% J: ~9 T2 S/ @! q6 d
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( p' x  [5 b* n( E- T
  814.               dwStartUpSteps=99;) ]% n# D6 V; Q6 |5 ~
  815.               bFinishUpdated=TRUE;
    ; g) M- e2 b! r, @0 @* v5 o0 L" x
  816.               bCanUpdate=TRUE;7 ?$ P+ Z' @0 `$ D( O5 i' X2 T) m$ S6 P
  817.             }% E1 W6 F+ L1 T. d7 N  I
  818.           }+ n- s7 q' S$ Y. @5 M" b
  819.           else4 r2 V* L+ _: ~# s
  820.           {9 o3 h  t( G8 C9 d+ d2 Q7 J/ ?
  821.             if(!Dn.Connected())
    ; P5 ?9 B& P0 j5 R
  822.             {
    ; M1 [/ C. F  [' Z6 N
  823.               bFirstUpdate=TRUE;
    1 {. |/ O+ \7 O( _
  824.               dwTotalFiles=1;
    , m; H2 O9 Z/ n
  825.               dwDownLoaded=0;
    4 U. d7 X6 S3 v* b8 u! w
  826.               bSilentStep=FALSE;/ t9 Y. e" t$ P: L! _
  827.               bCompressed=TRUE;
    ( W/ \. a; k$ B: H( S! c/ R* A
  828.               strExtLocal=".\\DownLoad\";
    0 A2 p: }) J4 H1 U: H5 G; M3 U
  829.               strFullName="update.txt";
    3 ~5 [2 c" z3 X- K
  830.               dwProgramState=AP_CONNECT;; Q4 V! \6 a# d3 V6 s
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    8 b2 h% Y, D* F" {$ k
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / `; w! F5 n! P' Z4 \
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ |' ]5 g/ w+ y, z. `3 M; y
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 W# O! }$ \; i
  835.               unlink(".\\DownLoad\\checkversion.txt");. J" _7 V, \* F! H% D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)0 n% b7 V- t4 h9 s) g/ |
  837.               {
    , ]/ G- _, |6 C+ L+ s0 u' T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 x; g% f) G4 m2 p  T
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, ]9 i* M. B8 D& p# t
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    ( Y: F) N- h! r, b. w
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 A0 e# I2 x: m) j6 g) Y& B( h
  842.                 + f" n& m/ z, U* C6 @( W
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ! Y. w) _3 F. j7 E! C3 P- {
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");9 E3 Q/ U1 @% w  K0 I3 A, \
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");0 u8 _8 e" n0 U! ?
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; c# i/ t5 J) b/ b7 z
  847.               }/ ]2 U, j- p# m5 @" X* l0 v) f
  848.               dwStartUpSteps=5;
    # e0 E& c/ j, h( i/ k# c3 e9 e
  849.             }; ^9 z# D) P7 I- h1 e
  850.           }
    $ m8 u) ]  m, e1 W' ?% K8 `
  851.         }
    : v. x. _: \2 {) t$ N
  852.         else/ B# g/ s2 r9 f/ t# z( @
  853.         {
    1 u% H/ B" K: u  P# z
  854.           dwStartUpSteps=3;
    0 b' N2 ]( k7 k: J& D
  855.         }2 u2 h/ ?2 B7 V/ t+ h5 Y4 _  j' p
  856.       }. v0 w1 t& {5 o1 v( f' q0 m0 p
  857.       break;  d* d" M- @& Q* U
  858.     case 5:! h  o6 F& v# q
  859.       {3 Z6 f8 g! e4 D8 I8 c
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    6 f4 E! m+ O! |$ t
  861.         {
    $ c( I8 c& b9 C$ Q
  862.           int opt_overwrite=1;) h2 f- |" K. b4 ^4 ^- B2 d1 u- d6 {
  863.           int opt_do_extract_withoutpath=0;1 L: P1 |8 F9 B2 {
  864.           unzFile uf=NULL;
    ! A1 o# d( H4 _/ z( r

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

6 a3 H) b/ B! ?- ~2 Y
. A& c( H. V& Y1 A2 U/ a# E! R) m

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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