CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
& D, W0 J& w1 f2 c$ \- z
  1. / RevApp.cpp : Defines the class behaviors for the application.
    7 s3 {4 V6 D) t- H0 a7 ]3 A, a
  2. //. m- k9 d& `3 s6 h* ]# A

  3. % D: a, q# w& H1 o
  4. #include "stdafx.h": E1 L0 @: y. j. ~0 n2 H

  5. * E3 r9 P& ^7 ?) }  ~" |2 j
  6. //#define UNICODE0 U3 P/ J* p7 w9 e+ A; z
  7. //#include <gdiplus.h>
    # i" S( U+ h, F4 ^
  8. //using namespace Gdiplus;
    ( F# T3 a- \. {2 u- y
  9. + m4 r/ V' M6 R7 R
  10. #include "RevApp.h"
    ! G0 D/ a- _/ H* R+ o3 U
  11. #include "RevAppDlg.h"0 K- U0 {- S$ _2 j
  12. , K7 \% I1 l/ |4 O4 A
  13. #pragma warning(disable:4786)" @" z8 `2 b/ {+ t
  14. #include <map># Z: D4 u2 N; [, T: w% B. n
  15. #include <list>2 D! t" P* p0 p0 M
  16. #include <direct.h>
    2 G* q# f! k/ n/ p3 I
  17.   ^  w* O- X. _: b
  18. #ifdef _DEBUG- g# ]. \  P# ?3 V3 H' K* |
  19. #define new DEBUG_NEW- m' Y0 P) R4 X- Q. N2 J9 P/ m+ t( V" \
  20. #undef THIS_FILE
      H  v: n/ U+ Q0 F' v9 Y; O
  21. static char THIS_FILE[] = __FILE__;8 c/ p) `4 k  z
  22. #endif
    ' K9 {1 X2 J. \
  23. #include "SkinResDef.h"8 O3 |: {4 ~3 }7 t4 {
  24. #include "ChangeBG.h"
    + v$ v0 c' ~9 Y$ c0 |
  25. #include "AFXINET.H"! o6 S+ v7 d- j9 ~

  26. $ h- t1 y' \; P, ~
  27. #define TRADITIONAL_CHINESE 0
    : Z! ^1 \! s  }# g* d
  28. #define SIMPLIFY_CHINESE 1
    " L9 I% R9 c  w. {
  29. #define ENGLISH 26 i# D: T% G* u# b
  30. int m_iLanguage = ENGLISH;6 {1 B/ \3 Q! l) Y
  31. /////////////////////////////////////////////////////////////////////////////
    5 T7 y- ]' ~+ |0 b: f
  32. // CRevAppApp
    , G  P; Y8 t7 D* F

  33. 9 ~6 e! G6 Z% [
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)/ |( v5 _1 d7 F
  35.         //{{AFX_MSG_MAP(CRevAppApp)1 Z0 B' f. M$ q
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.5 r* ]: ~: r% S* J! ]4 K
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 @+ {" A/ ]" f6 t/ T7 l
  38.         //}}AFX_MSG1 e; ^6 M* @. c5 S! d
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)5 Q" n( v9 F2 p- f4 Q
  40. END_MESSAGE_MAP()
    # O9 D( N4 }6 q; I8 w. O# B

  41. 4 L1 g7 `& k: j
  42. /////////////////////////////////////////////////////////////////////////////
    % U  l7 x- q9 y, n6 E
  43. // CRevAppApp construction
    # K  D, \7 n, y" \

  44. 7 {$ q2 q" a& u! p6 {0 T& i
  45. CRevAppApp::CRevAppApp()8 G( `/ \! y8 ~+ y
  46. {
    0 V, w+ C. ~- Z, u2 ]# F4 x
  47.         // TODO: add construction code here,: B$ Q( |0 V1 s" B4 N
  48.         // Place all significant initialization in InitInstance
    . P3 i' w- C" h0 A, a/ F( w
  49.   bDisplayIsBig5=FALSE;
    - k& u5 C, x9 O
  50.   bRestartUpdater=FALSE;' s% a0 m2 f/ N5 B- O5 Q
  51.   bFinishUpdated=FALSE;
    6 l, c1 y, [4 l% F1 q
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;/ ~' X" }- }3 e5 Y$ ~
  53.   InitChangeDataBig52GBKS();
    & U# Q" K: I/ |) I
  54.   InitChangeDataGBKS2Big5();
    3 u0 k0 I# C* C( T7 b
  55.         //( J( i  z1 P. W' U
  56.         bClickRunExe = FALSE;
    1 z. B& H, k- L' I2 |
  57.         //0 P. I# n/ y) B2 a
  58. }
    : E, K( _- ^0 S4 A" m* N: k6 X' `2 W

  59. $ k/ f7 |( a( {1 J0 a! N3 I
  60. CRevAppApp::~CRevAppApp()
    2 G- x* ^" h3 `8 ]8 G
  61. {
    % L! R+ ]' ~" a1 A7 Z6 R
  62.         // TODO: add construction code here,6 B+ @; N6 ?4 r' Q
  63.         // Place all significant initialization in InitInstance; m( o, m; H' L; `, [3 g, Z
  64.   EndChangeData();
    & d4 B) Q. o; N9 \
  65. }" H9 w* V) l/ ]' K& y5 C* z( A5 b

  66. 9 I$ B2 i9 `8 p& e' J+ _
  67. /////////////////////////////////////////////////////////////////////////////
    0 A% y- k! I, N
  68. // The one and only CRevAppApp object4 |) Z& U% F; _
  69.   e6 `6 a0 B, P3 h& E' d. U; v. p
  70. CRevAppApp theApp;
    . v7 ^6 v5 U0 T0 ~, U2 Y0 `

  71. # \5 x  U1 R& W- c1 X0 T, Q
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! B8 [9 j. _) t1 h
  73. {
    7 J& Z+ }% F, W5 `" B& S2 X: }
  74.   int iEOF=0;- \4 ?" |% f; v4 E; z5 I- E! j, e
  75.   char szTempName[MAX_PATH];; R' B7 V+ K7 E- [
  76.   *szFileName=0;
    * C6 w" h: G  w& ^+ L2 G- e/ O
  77.   iEOF=fscanf(fp,"%s",szTempName);) _5 s- Q5 Q# d8 z, L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    * O6 o: m8 L7 H5 q- O
  79.   {2 e5 S! j5 }- U( \1 Z4 N% a! _
  80.     strcpy(szFileName,&szTempName[1]);. T% z+ C2 A( _) c8 M' }! `6 j
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    & s, x3 F9 G8 R! |6 J
  82.     {& T* {5 E8 w0 s# G4 N7 W, x
  83.       iEOF=fscanf(fp,"%s",szTempName);! g7 q/ x& {, \4 F) b
  84.       strcat(szFileName," ");
    , H6 a% l1 D' d8 X" e
  85.       strcat(szFileName,szTempName);2 W1 t- Z" f, Q% R2 |: ^/ C' S
  86.     }2 [8 [: L/ w0 H* X' t" N* E
  87.     if(strlen(szFileName)>=1)% S0 O6 x! w* n, }& S% }4 z4 {
  88.     {3 q* O* X( ]0 Z5 S
  89.       szFileName[strlen(szFileName)-1]=0;
    - |1 B9 Q2 C+ d2 Y# w- G0 o
  90.     }
    2 ~7 y4 }# _. r  }2 `. w
  91.   }  u0 r  Y6 V: N/ [6 g- h) V
  92.   return szFileName;, U: c9 ?: Y; Q
  93. }' |4 i) o# \1 ?& `* a

  94. . X3 l3 o, i9 \
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    / R; v" J' h/ Q4 q- e5 A! }
  96. {
    ) m$ X! f) \- \: d+ S% p% {
  97.   FILE *fp;
    3 `2 n0 H+ Z& B3 H6 ]; p) N. p
  98.   char *key=NULL;
    ) T- s% e" W) R  o* \1 Z' Y# k
  99.   char version[MAX_PATH];7 H' e) N8 ~* i4 F; |
  100.   LPUPDATEFILE file,olds;3 v  n/ |3 c& [% j' Q
  101.   std::map<CString,LPUPDATEFILE>::iterator p;2 d. y( o7 }: |6 J- {

  102. ) M0 m, E$ }9 ^* v2 N
  103.   UpdateList.clear();, o+ f4 L0 d( e9 Q
  104.   UpdateFile.clear();8 i+ t0 I& F/ ]) H
  105.   if(GetFileAttributes(filename)==-1) return false;. q. K1 G% L+ c& t
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ! J1 h; R0 U  Y7 I$ B, d
  107.   fscanf(fp,"%s",version);2 }! r& N+ f: d& s! Y) t. c( c* R
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    : S) j( n9 w$ q+ |
  109.   while(fscanf(fp,"%s",version)!=EOF)
    3 ?, ~4 ~" G& |* G" D* `
  110.   {8 i( p) H; J9 D. g6 _% H4 |
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % h: a0 B+ d; M
  112.     fscanf(fp,"%s",file->path);
    6 F4 F8 g' c) O3 T
  113.     ReadFileNames(fp,file->file);
    . c2 O% t. b' z4 b& ?4 R
  114.     strcpy(file->full,".");
    # ]* K0 b& v5 [6 {
  115.     strcat(file->full,file->path);
    0 M8 W% z1 H* ^# W. p# b1 X7 o' a8 t7 ~
  116.     strcat(file->full,file->file);3 b9 \$ [9 ]% L
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()): O& ]1 m* y" ?" {4 v& u) R
  118.     {
    0 Y+ k" e  w3 H9 w9 n2 S( J: s( O
  119.       file->vers=(float)atof(version);
    " [0 F+ H- G  X& M3 F
  120.       UpdateList.push_back(file->full);
    ' f- N7 ~8 I: l" k$ O. r" _5 H
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! }+ ~3 l7 C" n
  122.     }6 X1 p; e2 b1 {0 G
  123.     else
    # J# D& G: N2 V6 b& j2 q( L
  124.     {7 E3 r; O4 P# L7 p; g
  125.       olds=(*p).second;
    ) ?. e/ v0 K7 G; c4 l9 Q
  126.       if(olds->vers<(float)atof(version))
    9 g7 s3 m* N1 E8 O1 ]
  127.       {! N" B( c5 S$ H: W
  128.         olds->vers=(float)atof(version);. T: i! W( z0 a, j, Y! x# k
  129.       }
    ; v9 n: [0 q, g6 H
  130.       free(file);( j. ?' S* j, A) F% D" v
  131.     }
    + j' ]; X% P3 V7 _' `
  132.   }
    7 {+ h/ O$ m5 a( z; ^1 I
  133.   fclose(fp);
    # h8 _' v3 h  ?. n- s, x0 J8 }- {2 W
  134.   return true;
    8 n$ l. U5 w3 s; d, K, G8 i
  135. }( R8 S7 d2 l) j/ m0 g
  136. & Q2 t5 k. ?+ @0 j9 s7 \
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)2 l/ l: T! D' t8 @
  138. {& c7 V) Y9 L6 C7 A7 j' ~' a# A
  139.   TCHAR  szFull[MAX_PATH];" y; m2 D. J7 {- ?
  140.   TCHAR *token,*inter;7 J& F1 [! w3 n+ Y- g+ @) S- S) L
  141.   *szPath=0;. z( K8 g$ f) o- l2 b! n
  142.   strcpy(szFull,szFullPath);' T. B2 y- e; [; U5 }6 Z. i' B
  143.   token=strtok(szFull,"\\/");
    2 S6 Y* ~& _: A, u
  144.   inter=token;
    2 x& v( b; d, ^, x2 {7 U
  145.   while(token=strtok(NULL,"\\/"))% V. O# _/ _0 o, o, R8 m5 a0 d" P" {
  146.   {- n/ p* c/ G& |, V% W; I7 s
  147.     strcat(szPath,inter);
      C" u% o4 d( w+ w
  148.     strcat(szPath,"\");
    6 Z/ G! Q; j, V; k- k9 g
  149.     inter=token;
    4 f* v$ J: ^' W7 _3 l4 o9 ]
  150.   }
    . z( M" t3 U& k# m
  151.   return strlen(szPath);
    . x& \  j7 M7 b/ @& t
  152. }0 _& e; c9 ~( g5 g) T9 u4 @9 ?

  153. / Y0 [) ]8 i) Z' P! E5 s
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    4 Y5 ^+ f; }: f+ o0 [# X
  155. {
    / o& |  K+ U- V& N
  156.   DWORD attrib=GetFileAttributes(Target);
    3 d; v) z$ c3 p7 M0 I
  157.   if(attrib!=-1)
    $ R5 z; c- }/ J/ T
  158.   {2 I5 t# }6 g0 w! y( ~0 P* M
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))5 d; g2 G9 q! O' }
  160.     {
    * ]' j9 J1 @, G3 S/ d0 U  J% W& p$ P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# l& K: K8 c* y$ F
  162.       SetFileAttributes(Target,attrib);
    6 w* S2 h7 R9 s& Y' U
  163.     }
    ( |* w1 }  Z5 j
  164.   }
    3 {- d6 S% T& ^- e9 k- r* n0 ?& B
  165.   CopyFile(Source,Target,Erase);; M( ?% @" g3 x
  166. }9 J2 j, F7 k: v, n
  167. 0 `9 F! c. i- b5 L" C/ m4 ]# |
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    3 X9 r9 T$ M2 \
  169. {
    . {1 Z' t! b. f6 z+ l
  170.      FILE *fp;
    ( Q, r4 d% U% H) }  b
  171.      char  szBuffer[8192];4 ]6 q. V/ u0 I: ?  b  {7 b
  172.   va_list  argptr;
    & g) E/ c) d) c8 i3 q5 d/ Y/ Y7 X
  173. . [9 B4 J7 J! C! O+ ~/ M
  174.         va_start(argptr,message);
    & |/ H4 K4 [! A& S
  175.         vsprintf(szBuffer,message,argptr);
    / U; `1 O% B+ I; {/ L; G% @6 M
  176.         va_end(argptr);
    8 L1 p+ }8 J, Q$ R& ~
  177.   fp=fopen(FileName,"a");& }% ^: p+ [1 Y! B5 e/ L" O) }; l5 `& _
  178.   if(fp)) c: h5 F$ V: ?  _. U* D+ S' J& _
  179.   {2 e! t0 ?  t6 Z5 Z7 _
  180.     fprintf(fp,szBuffer);
    - o; @' U: v" U( P7 v: x' c
  181.     fclose(fp);+ i3 @$ o  t( _( b
  182.           _flushall();
    ( P4 }. k9 O8 u, x: C" h
  183.   }7 e2 W# n( N. U# w
  184. }" J" Y; r  E8 \8 ?
  185. ( y( N& t0 u% a1 V5 d
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    " P9 B, R( N! U" a
  187. {& N: w6 t% L1 p7 p
  188.      FILE *fp;
    " s7 _. C' G* S# _, j" U
  189.     DWORD  attrib;+ V! M, Q+ z) X. T, e
  190.   attrib=GetFileAttributes(FileName);
    7 L+ y6 i9 |9 Y6 o2 K
  191.   if(attrib!=-1)% Y# s& E- D" a6 r) q! V  E
  192.   {' X# s3 B; T4 Q$ Q1 P& l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    1 z% L4 s4 ^. v+ p8 O; b$ B
  194.     if(!SetFileAttributes(FileName,attrib)), o9 _3 c" |! _' @2 F; R
  195.     {& O: t5 ]9 P; d/ J5 m4 l
  196.       return FALSE;
    & |6 O$ ^8 f* r" L2 U- R. |; C
  197.     }
    ; v. T5 A0 S- n1 V2 Q% o
  198.   }8 e% K* O2 r) S7 b
  199.   fp=fopen(FileName,"wb");1 N, n+ n' c9 Q7 X
  200.   if(fp)0 Z/ y% w6 H4 X' C% ^! \* `& @  f
  201.   {
    : j* Y8 k6 B4 S3 _! h, l
  202.     fclose(fp);4 {' h/ O: a& i& U& U# `& d. x
  203.   }2 R) t/ c. B1 O' K: Q
  204.   return TRUE;! w+ u/ p) Q3 X  G- I- M( m% V7 p
  205. }2 r5 P- ?( Q% S# t  a/ ^8 j4 y
  206. 4 G$ A4 l8 N) b# g" s& w1 |
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    3 V0 P4 r% x! P% G& Y- |
  208. {
    4 C/ R7 ^2 y' u3 m
  209.   char filename[MAX_PATH];& Z; \! P% j+ ?8 x; B
  210.   LPUPDATEFILE file,olds;' v6 y& g' Y1 T/ E- |2 V; o& j
  211.   std::map<int,CString>::iterator i;# T( j+ ^+ ~0 v9 }: I4 R
  212.   std::map<CString,LPUPDATEFILE>::iterator p;+ V9 F% H+ L, f; l: c
  213.   std::list<CString>::iterator l;
    ; j% b3 K) @+ G4 t' Y( M* L4 R
  214. & D4 @) y+ L$ z) o, _. @% t
  215.   if(bFirstUpdate)! @8 a" c6 d4 |1 X. @/ o
  216.   {5 Z9 w0 x. N& s$ W5 x& Y
  217.     dwCurrFile=0;
    ! H6 R# E$ t$ P: E) N
  218.     bFirstUpdate=FALSE;' R" ]  I( k6 G4 o( H, l: ]
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    ' R. F* j6 K& h! W" J* N. f
  220.     {$ l$ n7 v4 G4 h, m# l
  221.       dwTotalFiles=UpdateLocal.size();
    3 U( K9 N' n4 o( n. f4 {3 @! y+ |" x
  222.       dwDownLoaded=0;
    : l& I: }5 K7 f7 a. p$ Y
  223.       bSilentStep=FALSE;
      O$ S6 ]6 |9 d% p9 S, p- g
  224.       bCompressed=TRUE;  I5 @* h. m$ f9 \
  225.       strExtLocal.Empty();, d7 \2 }4 ~4 C9 v0 d
  226.       strFullName=(*i).second;
    ( A7 H5 Y  @! d" \9 n
  227.       dwProgramState=AP_CONNECT;
    ; ?+ ~3 [4 |& e+ ^7 e) j$ E: H0 Z6 O
  228.       return TRUE;
    7 h$ @! E& T! Q) f- k( m$ U1 W: R2 E
  229.     }, P# n( U, U2 u2 y8 J  Y0 }
  230.   }2 o, g9 [! S* [9 c
  231.   else if(bRestartUpdater==FALSE)8 o6 {/ t4 D* n; d, T, d% d
  232.   {
    - Z9 Z5 A1 M$ S1 e
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    3 N5 p/ M0 D6 J
  234.     {
    , {( K& p  A" i, G* j
  235.       file=(*p).second;
    % R. l, A" k3 @5 ~' [
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 k2 s+ Z+ d  `
  237.       {3 N: R( |4 N; m/ O- J) Y
  238.         olds=(*p).second;& L: @% _" b8 p* w, U6 f# w
  239.         olds->vers=file->vers;" [8 b  i# g8 I' I: |4 a
  240.       }
    0 s3 f& T. k  @5 ?9 E5 v& Y
  241.       else
    % A3 n3 K& [) N: d
  242.       {# T& G: V* f* H+ X  l5 ~
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    5 I# L. m! q; w$ I5 K* J5 S* c2 ]' p
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ q* U. W# l' c% a
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 K  h* E% L4 E
  246.       }% H& ^1 Q# F3 c& y4 P6 V# n
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- M8 t- r  u# Q9 A$ ^0 Z
  248.       sprintf(filename,"(%s)",file->file);9 `# A6 J+ W$ s+ A: e
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    0 ^; f& G  @5 }# U! g
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }5 M  \, O& e  c% Q5 `6 p
  251.     }" G7 q; x. H' K3 ~" g5 e7 a
  252.     dwCurrFile++;
    + n; L+ }' N6 R3 Z& ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & ]+ Q. c& C+ P6 l* s
  254.     {
    2 t9 U  Y1 v5 j
  255.       bSilentStep=FALSE;
    2 g1 r2 r8 G* W8 W
  256.       bCompressed=TRUE;; z" x" z- S- {8 y+ T
  257.       strExtLocal.Empty();
    - A9 ^9 [& P/ N" D- _# ^1 S5 h
  258.       strFullName=(*i).second;$ O) ~2 L8 |: c- R) @9 ~! e# \1 S
  259.       dwProgramState=AP_CONNECT;3 E* B: r$ T) }" f
  260.       return TRUE;
    ( A+ X& ^& @$ A6 d4 F( N
  261.     }/ A' x: K' {' G( k7 ]$ U2 Q
  262.     if(!bRestartUpdater)
    , {3 s) i  F- L1 l* q4 C
  263.     {
    $ P3 Y0 j' N8 N& `9 ?
  264.       int iCurrSize,iFileSize;  j1 J3 e4 N2 Z( i
  265.       iCurrSize=0;% ~* Q0 k# @4 a6 @! q6 j, A- ~1 d
  266.       iFileSize=UpdateList2.size();  ]" A2 j  z5 T# a: k- ^* U
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");1 v7 w* x+ U# g# F! ]
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");6 d! ]2 p, W6 [; f# G8 b$ ]! B
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ' {: C8 P" L- F8 _- H
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 n  J& o1 B7 F
  271.       Fclearf(".\\update.dat");
    ; m1 O+ K4 `3 {$ r! D- p8 [
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    ( f- K' F$ l3 R& k1 J
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " \( o  E  l1 x- r; U4 e/ n1 H
  274.       {! D2 w% M  t; o
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())1 N4 C# Z" n* \+ K: }
  276.         {
    * ^9 I$ \1 S7 {7 s  L+ B% H: L
  277.           file=(*p).second;- f7 a3 X3 H6 L: ^. W6 _5 b
  278.           sprintf(filename,"(%s)",file->file);
    , `% f4 Y( `6 L0 G+ j8 c
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);  @1 x* A- {/ u. Y) j" Y
  280.           iCurrSize++;
    7 }- [& r$ Q! `
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));# _: m8 N1 V9 z
  282.         }
    7 U0 d+ a) z0 }+ O7 B8 A/ U) ^6 ^
  283.       }
    ! s3 r8 n4 \" S9 |) i; i8 m
  284.       unlink(".\\update.txt");5 T9 p1 H: }& H
  285.       unlink(".\\update.tmp");
    6 \! ~1 v- ]: G( t, K, J; Y9 v
  286.       Fclearf(".\\checkversion.dat");% ~' B" U3 b$ f5 ?1 @; R6 H7 ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" w9 e3 W# D& x
  288.       if(UpdateLocal.size())3 p; G6 J  m6 U( E2 ~) T; I) N
  289.       {# J1 w$ M  A, F8 a/ S0 u
  290.         UpdateLocal.clear();. J& e2 k& R0 c  N8 w& s
  291.       }
    3 C% ]7 @! P! v  k. ?( C3 C- X( t
  292.       if(UpdateFile3.size())
    ) I% F8 W2 [2 y! D6 o2 {
  293.       {
    ' ^- Y" v- ]. A
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 S3 z4 U# m; L: X  m  R2 n
  295.         {
    + j1 Z/ j1 b: L
  296.           file=(*p).second;" e) d" d: n) {
  297.           free(file);/ p. X$ K# i7 {6 A+ K/ I7 K
  298.         }: G" j. B5 @' ]- w, y
  299.         UpdateFile3.clear();+ `; f: f, q" z* _
  300.         UpdateList3.clear();, \7 ^0 I6 @! B
  301.       }
    1 E3 T& U0 i0 }$ R8 h  r* w
  302.       if(UpdateFile2.size())
    * M+ f6 m4 N: R" s8 g
  303.       {
    4 s3 B; h9 a: D& R( k/ T
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    - m/ W2 ^/ I; R, O5 |/ w
  305.         {
    5 ]( Q: H* D: N7 t7 U- o
  306.           file=(*p).second;
    ; T- \. E) r; P, d
  307.           free(file);
    ' t$ {9 [0 F# H- U4 u. j( a" i% V
  308.         }
    ) `: T6 Z  W3 @" a
  309.         UpdateFile2.clear();" [! ~$ e! I5 \3 X& T0 J/ Q
  310.         UpdateList2.clear();
    8 s: c' O4 w" R. E: ?8 r% B$ L2 k
  311.       }0 v  `+ v$ a' }2 }- J
  312.       if(UpdateFile1.size())
    % W5 j3 k& \) S* T: a  {9 I
  313.       {
    : K( K! k. e: c) k* C: A
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& Z$ w! o% \. u! k
  315.         {8 d* R/ S. l4 [
  316.           file=(*p).second;
      x9 _* U" W. H/ q& E8 I
  317.           free(file);
    $ y2 ?( k; i6 }, s7 |6 g
  318.         }- @2 Z$ D/ R3 j/ m& D
  319.         UpdateFile1.clear();
    5 x% G, r0 U/ Q( y( l
  320.         UpdateList1.clear();% ~; r' F% P/ c/ |6 b. Z% J9 {
  321.       }0 U* ^5 C9 W1 O0 @
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));8 k& Q( @! p" ~
  323.     }
    9 W, j8 }4 n/ [& T) j$ C: {; N* x
  324.   }5 y: K$ `* _, d+ ^! J
  325.   return FALSE;
    2 U" T5 q: k% E$ V
  326. }
    & C# w+ N2 x9 l8 w
  327. ; ?% r0 K7 ]- n% f7 ~: z2 _
  328. void CRevAppApp::ClearAll(void)7 D8 P+ K7 l4 j* s6 m% l, f
  329. {
    4 D8 ?, K$ V. F9 h
  330.   LPUPDATEFILE file;& g! Q. B  i) \2 O. S3 u$ b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    , K; T2 \; V- |) q
  332. 7 R% R1 Q: [$ u) y* y# B
  333.   if(UpdateLocal.size())7 J% `- Y) U5 O9 c9 ]( j& S7 G
  334.   {
    9 q+ h# T8 O, ^& Y; M
  335.     UpdateLocal.clear();
    ( R/ y/ ]& m/ w, }7 U! W, A
  336.   }" q  E9 V2 |  @: g5 m' V
  337.   if(UpdateFile3.size())
    # |* k7 D% E. f1 t4 {
  338.   {
    * y2 }  k) n) Q' y+ m& t% w
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    # ~9 u/ q+ Q! R# U; \- }
  340.     {
    5 Y$ c. O$ k+ ?3 r5 \) R
  341.       file=(*p).second;
    ) g5 f3 v" z& S
  342.       free(file);
    + R0 y; S9 h/ n
  343.     }0 c, m7 R( ~' X' z( |. w
  344.     UpdateFile3.clear();3 e. M( w3 j  `% ?; {# T
  345.     UpdateList3.clear();( c3 V6 G, p3 h0 F4 S
  346.   }* a- @# {' p7 S. q
  347.   if(UpdateFile2.size()), F( i* Z1 l$ L/ G2 O
  348.   {: M& ]; P. [: V) @1 N* `# `
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& S/ k7 e+ B) a" q) T5 q
  350.     {" j; i. O! y3 W. g8 f
  351.       file=(*p).second;6 z. a( [$ i+ U+ n
  352.       free(file);
    3 [/ \% ?9 z5 e& j2 O- @
  353.     }  h# n) g0 l: C% K7 c
  354.     UpdateFile2.clear();
    " b% I, D- l. O* O. i, K' {1 {
  355.     UpdateList2.clear();' Q+ s0 l" }: k( a! o8 t8 G
  356.   }  p* d  ~; j- ?  E
  357.   if(UpdateFile1.size())# k2 k4 m- i6 F( f4 [
  358.   {1 N; t9 U& Q4 ~6 }! {9 v7 o
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
      W3 ^1 l$ a$ y: A, ?+ s
  360.     {
    & o- x. Y( S5 d1 B
  361.       file=(*p).second;7 O& n3 N* e4 ?2 t$ E8 C( c  _
  362.       free(file);
    1 b& u; m# p  x
  363.     }- i/ U6 z8 g, H3 }  M0 z7 S" `: O
  364.     UpdateFile1.clear();
    6 ~! h7 V" j' c/ b
  365.     UpdateList1.clear();9 ^+ j, ~1 B2 G+ ^
  366.   }
    & D$ l/ E5 g" D! }* H) q* r
  367. }  1 L% D' b  j& z* G2 S! B, n
  368.   7 T2 U5 k! J' m9 E  T
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . T! ]* m8 r, R9 e# t; i8 A2 d
  370. {4 y# |1 a) ~! c
  371.   int c;
    ; S* B2 e3 u6 ]
  372.   LPUPDATEFILE file1,file2;4 P9 A/ p& a, `. k( b
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;  s3 [0 o2 i, B4 b
  374.   std::list<CString>::iterator l;1 Z+ m6 O9 B, T# I# d) \" m

  375. : \# U6 q7 k/ g2 ^
  376.   UpdateLocal.clear();* y3 R8 v& [$ ^0 O8 I  F- f
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / v' T, ^& G% f. y, r
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ; G/ B6 l0 ?  K8 V" U: _4 Z
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    - {# [, `" K; `9 `! r  r6 g
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
      j8 z* X+ l# a/ `' m, F
  381.   if(UpdateFile3.size()): X/ z1 a& Y/ z; F7 @2 Z. g
  382.   {
    3 h2 n* i, ~( H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    - V% S+ S/ `* y) {2 g: F+ \
  384.     {
    # [4 G2 j4 V9 A$ a& d0 k
  385.       file2=(LPUPDATEFILE)(*i).second;/ e9 I5 `& Z( h& d, x, T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()). F6 }+ K5 H5 j0 d0 g2 m: H' f
  387.       {
    3 a1 j8 [3 r' p
  388.         file1=(LPUPDATEFILE)(*p).second;
    % A' p) Q( `6 K! J  |" o
  389.         file1->vers=file2->vers;
    9 M5 [8 `2 O  ?' L3 b
  390.       }
    0 I: a5 ]9 P# P# X, Q! }  @0 X
  391.       else% J$ _* a7 A/ ?3 h$ m: f; t) `
  392.       {
    ' y/ \) q: J+ g
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! f- a, I/ B, q8 E( ]
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    " |: L8 h5 ?" i  e. s5 L" S4 r
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));$ a4 Q/ X" q7 |) P& L3 r
  396.       }" B# S# g+ m9 z
  397.     }
    0 ?" C- p( y; w5 m2 K
  398.   }
    $ D& n. \; D  Q, p
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)6 l1 p+ I, n3 @2 I) ~7 `5 Y# w
  400.   {
    ! {4 b% P; ?* }5 f. B
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 ^7 m( j% {9 o
  402.     {
    ! t, u& V; V# k8 S1 N5 I) E  p( w
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 z) b; O0 i! n' _+ q+ T
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! j. X% q$ I; r
  405.       {
    8 u) p" l7 N2 X% n
  406.         file1=(LPUPDATEFILE)(*p).second;$ ^, _# I1 ~' \, G5 E3 J9 ?
  407.         if(file1->vers!=file2->vers)9 u1 z3 M! T% t+ ]
  408.         {* R) Y9 P8 O5 ?+ [( [# G  i/ e
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));1 e# E: i- M; f; X3 `% ?
  410.           c++;
    ; ^2 T) m, P$ b0 w0 V. S
  411.         }
      {% {* j4 m  \# _) j) M# X! D
  412.       }8 m+ t' L! ^1 ^8 o0 d1 n0 K6 b
  413.       else
    + Q" p# m+ F6 I2 h
  414.       {
    6 g# E+ V7 F5 h
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    . |5 a& V# _4 `. \
  416.         c++;9 `! ]7 `2 X; e+ u# I; T* y
  417.       }/ W. A* ]/ R: |: C, q) B
  418.     }/ h0 @9 S+ M+ @* q) z. X% H
  419.   }
    + |( V4 t8 ]% G
  420.   unlink(".\\DownLoad\\update.txt");
    # f" M: m: X1 T
  421.   if(UpdateLocal.size()) return TRUE;. I% k: o/ Y$ J7 {' X/ G( q
  422.   else                   return FALSE;( F/ H; j  k& y* l: l6 ^
  423. }5 n4 S: o9 ], m
  424. ( h" t0 h" b$ f, U1 b* t( ^
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"+ n& b3 z: c) @$ y6 B. }% i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn". r: f% @1 d7 l3 K

  427. 3 U6 D: d! H: V% ~$ |

  428.   Q" K# h8 k* X/ K- x

  429. 6 ^( B5 K* X  h5 x6 v8 E* l
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)1 B) M9 l1 z7 a( v9 t$ a$ s" O
  431. {$ H5 m5 y! v* c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;1 }* a! s8 H9 B. i: q" L) x
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' p9 \+ l) X. V6 I. X7 K
  434.   {
    2 j4 E& [- ^% [' n
  435.     char szLanguage[50];
    ) g8 B3 e. l" ?. N' I) X6 Z2 x
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    " b+ p* g! ]; s; C  g# G8 k2 f; ?$ c
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 k5 d3 O9 f5 s$ e  D
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ! h/ J/ r' h( n
  439.     else                                   m_iLanguage=ENGLISH;( p3 j9 g- V' n
  440.     char szRegister[100];
    - ^& _- ]( A: M  ^
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    6 r5 h3 o! w% M6 B  w3 F
  442.     strRegsName=szRegister;
    2 G5 C- T- u  C( C
  443.     char szPatchURL[100];
    6 {4 q: j+ x/ w5 X0 S
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 [  t/ `3 z6 g8 B: E
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);. h3 _: U% a7 _* x3 i' Q
  446.   }! F5 V- k' n9 z5 d# G0 `- _
  447.   else
    1 P1 S0 {6 ^  x  K+ u$ ]" v* a' H
  448.   {
    2 T/ @! s/ {$ I# }7 v( o9 f
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    & U2 g6 t7 m8 U. I
  450.     strRegsName=DEFAULT_REG_URL;) ?0 T  b6 a. f9 N/ v) I
  451.   }
    $ h, P1 T( T) }3 c
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    9 J9 }6 E3 A6 v+ F9 Q3 X& ?- ?( [
  453.   {
    8 v) w4 v+ n% J5 j2 @- ~4 c3 B
  454.     char szIP[50];/ z' P  R2 r2 u6 h8 u; n# _
  455.     char szDIR[300];
    & h; {6 X7 M  E; d- a1 I
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini")). @( p, p' K$ Y* M
  457.     {* Q; O3 E8 q) O- L6 I$ l
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    / k2 V: w. R- L6 d" ~9 B
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 c$ H- V5 o, [
  460.       strHostName=szIP;  h7 {( A' ^' |, T; P; Y
  461.       strHostPath.Format("/%s",szDIR);! [& r; I: o8 }4 _% I3 W
  462.     }9 F& r: ^7 \, z) p
  463.     else
      Q* N" ~. I4 C$ ~) n6 D( ~& l
  464.     {
    # V7 k3 m  G9 Z( F, |6 p8 }
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- Y. x( A5 b4 E9 u: e- d. ]
  466.       {
    9 e; f0 e) s( B! d0 |0 C6 l
  467.         char szLanguage[50];
    : g7 ?0 u2 `8 B  L, i+ o
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 N, A5 c4 B# ^' p
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    3 z) n9 _) d1 I# e
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    0 F3 X" [) ~6 j3 H9 R1 I0 L
  471.         else                                   m_iLanguage=ENGLISH;4 `4 c4 @4 `6 w+ f; K" b+ |2 p9 }
  472.         char szRegister[100];. e: C7 k  ?  u' ^" C( n
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");1 A/ Z8 ?. o2 m6 b* S) J
  474.         strRegsName=szRegister;
    " g: n# B: f1 N6 G
  475.         char szPatchURL[100];
    1 J2 H- C% q& }8 p0 \1 g6 w
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    : I) i* s6 A3 K% q- p- `
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 k2 f1 ^8 R8 ]- Z& Y0 z
  478.       }
    + m4 F: {: J+ t( x# |. x/ k
  479.       else
    0 A: h  s6 G/ b8 g5 L' M
  480.       {
    & k! Q- m3 ^* }# |5 Q3 d' `
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % z% p$ _. I& P$ w0 i
  482.         strRegsName=DEFAULT_REG_URL;
    ! f7 f5 U/ d* ?" ^2 b
  483.       }5 s( l3 |0 C) @6 R9 @% n
  484.     }
    ) P) `/ p* w  H# b/ @
  485.   }6 e. W. V) M- e% |2 g$ d
  486.   return true;
    ; I" Z: s8 z) y0 ]' M- i
  487. }
    & E% ?, `4 }( m  g) Z5 i3 Z! t
  488. 5 u, s5 [9 {" K3 d9 a! _
  489. #include ".\ZLib\unzip.h"2 _; j+ P, U; \5 y, h6 E2 x- s
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) T& ?+ l5 P" t3 n' n$ I
  491. /////////////////////////////////////////////////////////////////////////////
    # r9 i# ]$ @8 w0 Q$ d
  492. // CRevAppApp initialization
    # Y- y9 A$ v. U$ n9 [

  493. 0 M$ F9 c9 ?3 M
  494. BOOL CRevAppApp::InitInstance()
    5 I  a* v; L; F' D* G  e9 ~4 o
  495. {
    . X7 }# u1 R- O* S. W+ R6 ^2 B
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];6 i( X5 X0 i8 }4 @

  497. 7 |& o( ?4 D& L3 |8 O
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);& v" ]9 m5 v3 R2 S5 a3 a0 h
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))$ E. @5 m, m8 B9 n
  500.   {
    . H- b' s6 n, q4 c) }4 M5 x- P
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");- D* ~' t/ l* T" D7 F
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , {( f8 [, y  S. u: w
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    # M4 v( m: n1 A: h" k* o) l
  504.     {# ~, x" q" q$ w
  505.       strcpy(szPath,szPathTarget);: c) Q8 n. _7 `2 l
  506.       SetCurrentDirectory(szPath);
    : D7 S  G; X0 b& r* u* a3 Y- z
  507.     }7 r3 }! z5 X3 G! O& C
  508.   }
    3 A9 @4 P$ b( n3 k
  509. #ifdef _DEBUG
    ' x3 r. Z, a, g; E# j9 v; o5 e
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ( q  q- \: v" A) G! S5 `5 y* @  _
  511. #else- ]6 A9 j9 v1 E1 N- d; h" u
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    9 D, r( ~: {/ B8 B4 j! J
  513. #endif+ L: O' S+ M1 f5 c! \# V
  514.   {$ E2 _# O4 L( s5 i0 o7 G0 {
  515.     char tempFileName[MAX_PATH];6 v- F, Q) J0 s9 _
  516.     strcpy(tempFileName,szPathSource);* k: Z* n5 P( P0 }9 K2 F/ R
  517.     tempFileName[strlen(szPathSource)-12]=0;! T+ `$ i( H; K% l
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    ( h& \' I% K/ ?' `1 r
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) D+ d5 E# g9 j7 n7 n, r- c/ \
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    $ ~. I3 A+ v* Z) s
  521.     return TRUE;
    7 c' q1 s2 t& P7 L: A* v. z) m
  522.   }& k; G) U' M% Z% u  I  q& e
  523.   // Nuke 0118: Delete run.exe
    # E, s. v1 m" m8 ~) F3 W/ o' [" x% @
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ K$ P2 R2 y* e/ x" V
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");1 a, f+ D8 @) w9 ]
  526.   if(!ReadCfgFile("Config.ini"))/ j8 @& W6 n0 W. B- W+ r
  527.   {, T& o* @! F5 d
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : U4 E  [9 ]: o" J# \0 E3 ?
  529.     return TRUE;+ y% G( d' J. ~& y: P  J8 I
  530.   }
    8 V. F1 h# v: e' o
  531.   HANDLE mutex;6 n" G1 d# r8 n5 r9 L' U( {  g" c
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))2 b; l: p, r# p" g  J, `/ {
  533.   {* ]% k2 W9 z' q7 C9 V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS): D( X; N4 c( d4 g+ O8 ]2 ?" _5 ]& a
  535.     {
    8 b4 m; h$ C/ v: x
  536.       CloseHandle(mutex);
    + r3 U. F9 V# G
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    0 W3 C  n& h7 G! K# R# a: q
  538.       return TRUE;6 N2 O0 o9 I6 a* ]6 \4 }
  539.     }# S, `% q) J) E* N0 S
  540.   }  
    . _1 |5 s# w. Z' L& t4 {7 `
  541.   CloseHandle(mutex);# i3 |- d# D5 L. G; `% _( |, w
  542. 1 ?3 Y* C' z, V: M$ ^. c
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);# t9 }- e8 Y9 |' c. K
  544. 3 |3 \, j0 p9 N0 g
  545.         AfxEnableControlContainer();2 n0 B2 u* n  y: ?" r2 m
  546. . D! }5 ^0 f; O) d
  547.   bCanUpdate=FALSE;+ L) |  u7 m/ P8 I# m
  548.   dwStartUpSteps=1;
    : |* X/ S( W9 Q* u& }
  549.   dwProgramState=AP_NOTHING;
    - l) y8 f0 j+ ~0 j4 V" T  [

  550. / E* ~4 m6 F5 C! r
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 n2 w1 l, }- W# d
  552. ( z0 z/ V# x7 }6 M. G+ s0 a
  553.         // Standard initialization! {3 K# F1 d, L
  554.         // If you are not using these features and wish to reduce the size
    ! ^+ Y: @; w$ _: P: J
  555.         //  of your final executable, you should remove from the following4 z$ J5 c1 l0 e$ S
  556.         //  the specific initialization routines you do not need.
    7 w) z) l/ K" R

  557.   V; ~( [1 ^0 e6 v: M9 d
  558. #ifdef _AFXDLL; Q. _# B. i+ S1 y' t" L3 n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL! _( p% s3 r7 \" L7 Z5 w# R+ O: x1 ?
  560. #else
    2 h+ T- M& |2 w0 v+ D5 J
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      a+ P5 \  q1 H6 e5 ]& L4 y- a9 @0 K
  562. #endif$ \0 |2 R# m7 U: ^) m

  563. : p- d3 X  m3 V& O+ B0 q
  564.   dlg=new CRevAppDlg;/ g5 K9 Z, o8 N
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    - F+ \/ a( J' B/ D  o# E" }. F$ P( L
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    0 }% M' H) p. E) f
  567.   m_pMainWnd=dlg;" Q5 p$ d; |' Y" `  b
  568. 0 M$ ~! a+ F, ]. M- p
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    $ x! `# h/ k/ C" `- H5 Z1 [% x' G
  570. $ u6 {' {! G% V9 y- h
  571. //  GdiplusStartupInput gdiplusStartupInput;! u: z* Q. H( w* W; K4 R6 c% V1 \
  572. //  ULONG_PTR gdiplusToken;5 I, P, e) _1 c* x/ D. M  p1 R
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    7 N! u$ @5 K+ F  E5 ?1 A* |1 r/ J
  574.   n( |+ K) P: z+ x7 z/ P& j& T# `
  575. //        CRevAppDlg dlg;* n- |* y6 S5 H  N% `- x
  576. //        int nResponse = dlg.DoModal();
    : \' ~9 _8 \  q* U
  577. //        if (nResponse == IDOK), b: z6 x* t7 A6 w
  578. //        {
    " ^0 o# T& p5 x7 k) u6 a" c3 t
  579. //                // TODO: Place code here to handle when the dialog is
    - e( R3 w8 |  ]1 ~' K) `
  580. //                //  dismissed with OK
    : K1 Z& Z& [8 L5 r4 ~
  581. //        }9 d$ u1 J& X) x# u
  582. //        else if (nResponse == IDCANCEL)
    . K1 q# l% l3 A1 v% N5 I. Z
  583. //        {
    4 W" y- w7 `6 U& q2 t
  584. //                // TODO: Place code here to handle when the dialog is
    . L5 V% E. T0 \  n3 R2 K
  585. //                //  dismissed with Cancel
    ' L& O% k  P) Q$ @) @
  586. //        }
    0 b. M% p% k# Q
  587. 8 S* l! e/ V8 P1 I) v
  588.         // Since the dialog has been closed, return FALSE so that we exit the, Y+ r* m( A8 e3 T5 v2 @
  589.         //  application, rather than start the application's message pump.
    , K* v! p& {' k
  590.         return TRUE;
      b' j6 N5 }+ j; C1 U
  591. }
    / t* e1 X+ h7 v+ |/ J- e3 H

  592. ) x+ V9 s. }. J! h1 g1 _
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ! d1 E: P) h  }/ ], R
  594. {3 ]# F8 K9 O0 f9 l0 w
  595.   int i;
    + g+ S8 E. r; D# J2 s4 N8 k0 G
  596.   char *szRet;
    " x; q* _/ X5 _9 i" h. G/ H

  597. + }/ {* W! q& y8 |& A- e' R; G) c
  598.   if(pSource) { itoken=0; sztoken=pSource; }/ W4 q- n8 R+ {- r
  599.   if(sztoken)
    ! J: o. b) \6 @  s
  600.   {( C/ r. W2 Y. j, W  f: t6 Q
  601.     szRet=&sztoken[itoken];& F! k2 P- e) z% s' i9 L- G- e
  602.     while(sztoken[itoken])
    " R! ~& Y  g: k. ~
  603.     {5 V4 P) d- P: \8 m- ^
  604.       for(i=0;i<(int)strlen(token);i++)
    5 z+ f& m# @" D1 X# n& T
  605.       {+ y- M3 O) B& p, Z2 X/ a
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])4 ?2 _0 _/ r# e9 B% y: {! J
  607.         {
    2 T, V. c" @5 G7 z/ {" N
  608.           sztoken[itoken++]=0;! P5 q! V0 t7 ~; o/ N
  609.           sztoken[itoken++]=0;/ J! D" a# v' F
  610.           return szRet;& _+ {$ f+ A& j: ], L2 s0 C
  611.         }0 R. d) j3 Y9 b  ^" C5 M
  612.       }  V( x$ |' C+ C4 B; F6 m4 J
  613.       itoken++;+ S+ r- l. V! r1 `0 ]5 Y
  614.     }8 B. _. {& W  d
  615.   }
    9 C& [/ V$ |: f
  616.   return NULL;3 F; a- T2 h/ ~
  617. }( U5 I3 p0 C8 L$ n& |! b" S' h) P& u

  618. 6 {6 S+ U3 C4 i) ~
  619. void ProcessProc(long Total,long Current)
    ! L2 D9 D# e& |0 P3 W
  620. {
    2 F& S8 G' e. g, s9 V
  621.         MSG msg;
    + L" B6 l' i) ]5 \2 ?
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);0 w4 \( M; R2 r6 j+ O% D8 C7 G
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    % s% d6 }3 ^" q, r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    " q2 L$ H  T6 Y  _: A
  625.         {6 M) L( o  [1 x; c
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ; r, m2 u6 l: w+ X
  627.                 {
    * ?8 i0 ^7 m+ F8 R0 q+ q
  628.                         return;' y( G2 ^  A) U7 B
  629.                 }! b8 P$ o7 Q" ?; q2 |5 S0 X, i6 C
  630.                 TranslateMessage(&msg);0 T; ~. j  z" `, R& E. B% J5 [
  631.                 DispatchMessage(&msg);
    ; q& m5 N- @3 c* ]4 v6 n9 |9 Z
  632.         }        1 ?2 n' g5 A! Z# y4 N" v
  633. }" p/ M9 N0 X* T, A/ I

  634. ; P, H3 K. i0 o
  635. BOOL bFirstChar=TRUE;, _* w, j% S) `7 s$ {1 U
  636. ) T: G6 x9 [- ~. Q( l: {: M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)/ _$ `2 ~5 ^6 |0 e' Z4 \
  638. {
    / }9 }* v5 F  K/ U: n4 U
  639.         // TODO: Add your specialized code here and/or call the base class
    ! M/ f6 E+ N  r6 H) Y7 n5 `% P  ^
  640.   switch(dwProgramState)& J( z) a- ^8 \- {) A# @
  641.   {/ ]' g& Q! X# w3 X% c
  642.   case AP_NOTHING:- x3 v# B9 s6 N) ^, N; |
  643.     switch(dwStartUpSteps)+ U3 P1 p3 D  D+ T" Y4 \( U# o2 V
  644.     {: c. X" s  S. |
  645.     case 1:% y9 x9 j& H" Y8 p+ K# I, B) N% O  t
  646.       {: T0 U  p2 o" O' t
  647.         int i;4 X5 @" q8 S8 r; _
  648.         CDC *pCDC=dlg->GetDC();
    3 X; R* f0 ?0 q9 R4 s# [
  649.         HDC hdcwnd=pCDC->m_hDC;$ g. m0 C5 R  X9 k  N4 S9 p- v
  650. //        Graphics graphics(hdcwnd);; g$ ^" J3 P7 ?
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");. J$ E3 u; Z* _: S9 i) S, N
  652. //        INT iWidth=bitmap.GetWidth();
    2 J3 J4 e0 q6 }; s$ o
  653. //        INT iHeight=bitmap.GetHeight();
    - K. k5 N8 D# G
  654. //        Color color,colorTemp;( c; I9 V0 S( r, m$ t  l9 n) O( o( y
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ; I6 p: K& o0 k/ L, @; _
  656. //        {
    + l5 N1 K" X! P" S) I" @
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)8 f$ f* h' r4 `+ O
  658. //          {
    ! [8 {- Z! y7 W  }. M$ z# e
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 D2 e' L" C* E! n% a& p, V
  660. //            colorTemp.SetValue(color.MakeARGB(, I7 ^6 D  y8 P$ j# ~
  661. //              (BYTE)(255*iColumn/iWidth),0 Y+ d0 E" g  B
  662. //              color.GetRed(),) ?# A" S7 ~$ g' M
  663. //              color.GetGreen(),
    5 _6 r" S4 |5 e  H9 J4 ]. S
  664. //              color.GetBlue()));
    , Y: `. l3 V# ~! D5 H: j5 }
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ! Z3 F' R& C0 @( E, N2 h2 F
  666. //          }
    / Y" I- D& j9 R1 h2 Y# E/ {
  667. //        }* h  u6 u; a& x5 Y* b& _' X
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);3 N3 O5 |% c: R% z
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");0 S0 R% M( A5 w# W$ }
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");; B  A/ J3 ~- z5 V3 i. f3 W" ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + _( @; Q5 @2 ]0 K: J
  672.         for(i=0;i<240;i+=8)
    . x5 E5 x, o: J
  673.         {
    3 p3 P# y7 h; i1 i3 g
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);  {2 P9 B0 L* T9 ~3 b6 h
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& G5 t2 |7 |% A" j+ Q; q4 j
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);. [& ^! l6 G( U* B
  677.           Sleep(33);
    ( H8 Q0 N  U  d
  678.         }
    . [8 F. ?& D, V7 J! }; G
  679.         Sleep(1000);
    5 J. n  s! O  Y) |
  680.         for(i=240;i>0;i-=8)
    ; p' N( |: H8 l& r- F* M* x
  681.         {3 |3 n) T. _' q
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. G6 R$ i9 }- q2 Y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);2 c) [1 u  A! r. L. d0 Y
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);1 A1 _1 u/ v  ~
  685.           Sleep(33);
    8 S+ ?) B! T' _2 I/ ?% m
  686.         }( c0 y5 ~! c3 Y# s
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);4 j* A  ^4 F5 Q( y# Z+ U) B
  688.         dlg->ReleaseDC(pCDC);
    8 k$ G! o8 d4 ^3 T, X! H1 A# y
  689.         DeleteDC(hdctar);; `, U4 l% z- y& o# C
  690.         DeleteDC(hdcsrc);
    1 U" i+ u. c% ?
  691.         DeleteDC(hdcorg);# j- f1 ?- G5 A# p; t; x# m
  692.       }2 s+ }8 \0 i8 F4 C$ \7 ~
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    $ u4 ^; k9 J. {; ?/ ~
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");* q' ~; h2 }. y8 e6 W! t
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");$ C. y' s8 _2 r: J* H
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    6 }2 [; s4 r, n. c: ~" u
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 j6 v! K. }" t/ w1 U
  698.       if(!Dn.Connected())
    7 l- M9 X' v' ^$ w: O' Z
  699.       {
    + i# z7 f4 @& F6 H4 Q
  700.         dwTotalFiles=1;
    6 k4 |8 o0 S: H& A7 g6 U
  701.         dwDownLoaded=0;
    ) D0 c! a# m: {
  702.         bSilentStep=TRUE;
    & n8 S' p' I) A
  703.         bCompressed=FALSE;0 T% {& @7 b1 U+ R
  704.         strExtLocal.Empty();
    " _: j3 U8 e) v  B- ?
  705.         strFullName="readme.txt";" ?+ y* F2 X' U% W% t
  706.         dwProgramState=AP_CONNECT;
    9 b5 ?. X/ {+ j7 R
  707.       }
    7 X) ~4 V# G5 M$ ]1 U
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ' V5 E3 i$ t' d
  709.       dwStartUpSteps=2;2 ]/ i  l- \3 a8 Q, k0 H/ m: |
  710.       break;* E* w% W$ I& q
  711.     case 2:" ^0 G3 Z! j. \; ^, Y. i
  712.       {
    6 Q5 r% T9 P! @7 @  B0 \7 ^
  713.         int iEOF;3 L/ J8 `: }# X$ {
  714.         FILE *fp;# Y. ^3 e7 {8 \$ V. v& F; u
  715.         char szString[512];
      J, ^  D7 a; v+ p5 a4 j$ a1 Y* T
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    0 i1 N* b) P* m
  717.         if(fp)/ n2 |% h& G7 Z; \) k
  718.         {( Y6 E) Q7 V8 _8 H+ a) j3 P6 X
  719.           do
    * m9 J+ e- l6 U2 c6 o
  720.           {
    # L) g8 `% }2 h* k% I0 X
  721.             iEOF=fscanf(fp,"%s",szString);3 x1 w6 h1 H! H3 W4 g% x& V; w
  722.             if(strlen(szString))0 f* [  Z& E: D$ j/ }
  723.             {
    ; y( L5 I6 S9 q
  724.               if(bFirstChar)  s7 B$ H$ O! G+ a" I
  725.               {- c" y, o/ ?) ~) _/ q5 Z  b9 J
  726.                 bFirstChar=FALSE;
    9 x; Y  \  G/ w; F2 @
  727.                 bConnectIsBig5=FALSE;
    : U# Y6 n+ x. |+ S/ v0 I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    , J5 t# B9 `2 ~8 H
  729.               }9 l4 W4 I5 A6 I, k
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));. T3 Q2 ~# }2 c* Y& N1 I+ z+ e  d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    4 W9 u7 r7 m" U# {/ [0 ^1 c
  732.               dlg->m_ListText.AddString(szString);
    + C' ?% Z7 c8 V4 k5 g/ b  p
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ }8 d; d" l( [# i6 e
  734.               *szString=0;
    1 s3 ?& n, u$ K0 S: ~
  735.             }5 [7 m% G2 b* a' G
  736.           } while(iEOF!=EOF);
    4 X. N9 Q* {" B4 Z' M; n8 X1 M, `/ p
  737.           fclose(fp);0 B$ s6 z( n" _  l5 A  g
  738.           unlink(".\\DownLoad\\readme.txt");3 n5 |; Z* u! W- g, [1 X
  739.           dwStartUpSteps=3;7 o- R" U2 K+ Q7 x7 C
  740.         }  I# C7 N+ n! a! H5 O0 a
  741.       }
      a/ v/ M. K$ u( n0 G
  742.       break;
    4 k8 R' P6 d' H; P- t( y) q
  743.     case 3:
    7 E6 t: z  y. f) k' ~
  744.       if(!Dn.Connected())
    1 d- S* o" o3 Z' G. M0 y8 L# I
  745.       {& g) t( u; O2 l1 N7 K, a
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    " `0 @/ {' q) {
  747.         dwTotalFiles=1;
    & |4 L3 c* t* B; `; A
  748.         dwDownLoaded=0;
    ; X) |2 p+ K  T- a- ^
  749.         bSilentStep=TRUE;2 \/ u8 Y9 A2 W. A/ f
  750.         bCompressed=FALSE;4 x( W% m2 D; a" c; f, Z
  751.         strExtLocal.Empty();
    # U; X: \. }! `' A
  752.         strFullName="checkversion.txt";! u  Z! o1 O3 B& M) }+ ^
  753.         dwProgramState=AP_CONNECT;
    1 w; Z2 Y- R+ Z/ T( d$ V4 U# [' T
  754.       }' Y# Q$ y3 u) v8 _2 y
  755.       dwStartUpSteps=4;9 `6 {& p8 W" |' k+ q
  756.       break;, _0 n& h9 H0 Z: N
  757.     case 4:' a: j/ ?3 A+ u' m( H* z9 e! |
  758.       {
    ) w! }1 n+ f0 R0 s/ i3 q! V# a9 B
  759.         FILE *fp;, ~2 N$ }4 W/ }
  760.         char szString1[128];, ~+ z, q2 a6 a. ?9 c
  761.         char szString2[128];
    . [+ G" A/ N7 N5 x
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    ' ]3 j( F1 S3 |- |6 H+ v  w- l
  763.         if(fp)
    , X* I0 n& y+ P  |, Y# T
  764.         {
    1 l! b; u( c' h5 S3 L2 m
  765.           fscanf(fp,"%s",szString1);1 a2 V' Q7 i! `/ T
  766.           fclose(fp);
    + R; S. x0 r6 \) O
  767.           fCheckVersion=atof(szString1);
    ( g- O* U' p  t% \3 g2 @
  768.           fp=fopen(".\\checkversion.dat","r");
    6 s8 ]8 L7 ]) T+ ~
  769.           if(fp)& Q# h$ o) d& x9 A$ B' F! N
  770.           {
    2 q# B$ B* k9 b- A2 G, k
  771.             fscanf(fp,"%s",szString2);. v# p% V0 T. n6 {6 C, R7 \
  772.             fclose(fp);
    # p. O5 D2 k1 F9 Q  w- p2 E" Y
  773.             if(atof(szString1)!=atof(szString2)). o' X, d- D  p
  774.             {
    9 s: T& Q) K  I. y
  775.               if(!Dn.Connected())
    9 t: X) ~( v# S1 I+ a3 r/ u4 M
  776.               {/ A9 B+ M4 h2 z. {# T1 ^4 g
  777.                 bFirstUpdate=TRUE;: o4 h6 d, t: y6 S' \% y1 h( L0 `
  778.                 dwTotalFiles=1;7 ?  R' i/ Y8 Q- C
  779.                 dwDownLoaded=0;
    ; @; F# R5 [0 ^; m
  780.                 bSilentStep=FALSE;7 ~/ Z4 i) t1 o
  781.                 bCompressed=TRUE;
    3 l. ?6 O+ r+ G# E3 Y$ y
  782.                 strExtLocal=".\\DownLoad\";
    " i8 _# F7 d4 y+ p$ j% g
  783.                 strFullName="update.txt";. P" ^3 E3 r. H. j8 T* ?
  784.                 dwProgramState=AP_CONNECT;$ c! P5 k/ i( P* R$ ?+ M* @6 [
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    : j# ~4 l6 Y# e2 |: C! Q7 Y, [
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    5 ?0 G  A1 V+ \
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    , M; m* Q8 W2 l  `! c1 V
  788. : l' K# c0 ]4 \0 p( F1 n, c
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ y2 h1 f- P) _6 _
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    ' c% Y) Y! a- h2 C8 p( o5 y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)! U+ _+ C# j; R6 i& K: u. d
  792.                 {
    8 |- @2 r) X2 I# q
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    # s6 T7 S, E) e/ f$ ]" U3 S
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    5 O5 {2 h6 S+ q% H0 z
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");$ f6 ~' [. j/ E# j* g, o
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 M  _# z5 Y9 F0 ?* J; H7 [% n

  797. . A2 Y/ n6 c1 M+ X+ z
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");" R" u- E; L! b
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");2 {9 ~: \8 t% L/ |1 o
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 O6 W# u6 W3 s- C, @( p/ R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. S% ~3 `6 i6 \8 \
  802.                 }
    8 [7 w5 t- `  b$ e$ L7 }+ [
  803.                 dwStartUpSteps=5;
    3 [3 s# t7 o" \6 c  t
  804.               }
    % @: P  E+ \. m
  805.             }+ U# B* K8 D. `  U- d' k, x8 y  e
  806.             else! I  o* T" P; \5 `2 G7 k
  807.             {
    8 f  D0 y3 L6 S- O" N) W
  808.               unlink(".\\DownLoad\\checkversion.txt");
    3 R! |: k2 M# a+ p
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    $ X3 H; N! \$ Y% q1 D. p
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");! P! e1 n- M& T3 @; j1 L& h
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    : j& Y- y, |1 \/ }

  812. + }7 x5 R( U2 |: F9 [
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 b# m) c% U' O8 K8 B5 U
  814.               dwStartUpSteps=99;% P! f2 |0 B% f4 U5 b3 N/ R
  815.               bFinishUpdated=TRUE;8 }6 \, i2 W( O# _6 M6 e
  816.               bCanUpdate=TRUE;
    & g' @/ \# O9 _. W" x
  817.             }
    / i" X* @8 {6 I% d" s
  818.           }' _' f/ X# p4 g; B
  819.           else
      ^& \# H, T! }% V
  820.           {
    5 q2 I$ I; j& h, w0 p
  821.             if(!Dn.Connected())- o5 b3 Y  \% O) j$ q  p& C$ {
  822.             {+ r' D4 N! n% Z" I  f8 ~( D2 K7 h& [$ k' f
  823.               bFirstUpdate=TRUE;% ~8 A& l2 z% l/ s& X0 H
  824.               dwTotalFiles=1;" Q" p7 b% _1 n' d, Z: ^' n
  825.               dwDownLoaded=0;! f& W& i, H6 q0 A6 W: _
  826.               bSilentStep=FALSE;
    / ^* l- m3 c# i
  827.               bCompressed=TRUE;6 B1 A8 }, a. M* o" w0 p
  828.               strExtLocal=".\\DownLoad\";
    5 N# s! C" W$ \$ n: `
  829.               strFullName="update.txt";4 O) v7 z, }# k! M$ T5 z4 ^
  830.               dwProgramState=AP_CONNECT;
    $ O1 z0 f2 N% ~' |6 {. D- d7 S
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    4 e; o9 }- Z9 T' ?; h2 j
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: ^2 z+ Y" u7 G! R5 a) J# i- s
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    - \$ c& ?. M0 v( h$ _
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 s" l- [# N2 Z& P
  835.               unlink(".\\DownLoad\\checkversion.txt");* B- @7 C) B* v, x6 S, e
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    0 x2 r6 j- w2 v1 C- N, n+ a% @8 q
  837.               {0 ]8 J! ]. s3 W3 v+ y
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");6 H' ^+ e1 A- w; x( ]8 c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    0 M2 i# l. s+ r% Z8 S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");2 M* e, |' V  @1 j$ p/ s* t
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);; K+ }+ J* }2 M  `
  842.                
    + i7 ^8 x# @4 B$ I8 F
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");5 A$ @) p' a; r& f
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");4 |  C) Q# V5 t4 K( b+ j
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 d- Q7 }& `5 t# m" n
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% Z! ?! U6 c5 O. R
  847.               }6 ?6 ]# m2 M. u7 @+ D* T, L
  848.               dwStartUpSteps=5;& U( s: E0 r/ a) D" ^
  849.             }! g- i0 i, s. U8 ?- e; r
  850.           }9 l0 Q& m+ F% d6 F& m
  851.         }5 R6 G; B1 D5 {' X6 p+ E  d" v
  852.         else
    : M# @4 V$ u, B- {: l
  853.         {
    & o% N2 J  ~3 {/ @, {% u
  854.           dwStartUpSteps=3;2 q; j* }, e  x5 |' z6 C. x: V
  855.         }
    6 ~7 D& H! ^2 o( W- k
  856.       }' f( d: Z  n" R1 M2 z4 d. j
  857.       break;( j; l$ ?9 ]: ^/ j9 P
  858.     case 5:
    4 g# r- g% {! C" m/ b$ _
  859.       {1 C& M1 `% Y: {1 t5 _6 B
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    . P/ `' ~; H. f+ y( d  G2 l, U
  861.         {% X: A6 \. U2 H. }, E) `; \4 f
  862.           int opt_overwrite=1;
    + G- w& |9 `- P+ ^
  863.           int opt_do_extract_withoutpath=0;
    ) w; V/ X  B  Z
  864.           unzFile uf=NULL;  w) E- p, `% W) Z
  865. - e7 S  H  r6 w7 |( G% X
  866.           uf=unzOpen("Wsa.zip");
    ) g* ]3 W  V: F, u/ r
  867.           if(uf)
    " V) U! y8 O" d  O1 [$ P
  868.           {
    7 u$ z$ q1 M4 I) y, ~; @0 S
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    8 y0 G; |1 V5 X. W
  870.             unzClose(uf);
    4 X" R; y2 _& e3 b! h
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    $ b% g; V' B* Z5 V7 ~
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    5 ~( D  c. m5 Y7 R# L% ?, Q, p9 j8 t
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    3 ]# `0 p) W8 }" u- |1 B  ^
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 ~. S5 K" a( L( {' q* m$ ?
  875.           }
    6 u6 [. c+ J4 d+ L* g
  876.           DeleteFile("Wsa.zip" );$ P8 w$ i; ]. ^9 n3 l. l8 r2 X. o9 ?# ]
  877.         }
    ; d/ q! S/ Z& J0 u* z& j

  878. - Z$ r2 u% w! f6 W4 x2 b& @6 H! R
  879.         if(CheckLocalVersion())
    ! G# U  ]+ Z$ g* m0 \; l: W' u
  880.         {
    # O$ N5 A+ k- i3 {% V. L3 F
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");/ K" R6 a; G: ]" e9 ]0 g8 H. G
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    2 |) c' }+ ]  k" S+ h
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    6 E) V1 a, B" @* b0 R# N
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& W/ O) |" h$ [! r
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    7 N% }. I/ \* A7 t4 O* }9 ~
  886.           dwStartUpSteps=99;
    % C0 ^8 `& U* W) x
  887.         }
    7 v+ ^5 c* @# W" m7 L
  888.         else. b6 e# b) C4 @; @6 a7 u
  889.         {9 J8 ?- w- e, v7 [. e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");! A% X+ Z! i  c1 o5 i
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / i+ B( p! E& [6 u2 r! {3 {
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");2 w% E; X6 z) e9 P! o! t

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

- r  f! y) I5 ^" m$ ], W- B5 J7 w* N

評分

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