CSUpdate.exe源代码

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

1 Z7 `, v/ ~/ o7 a* u
  1. / RevApp.cpp : Defines the class behaviors for the application.
    1 A! U+ _* O+ a; f
  2. //
    1 P  G- T* b1 H& ]
  3. + W, i+ h3 K, U6 O$ J1 Y  m
  4. #include "stdafx.h"- @: y. [! Z. C/ R, w) V

  5. 6 b. W/ J+ G" l" {; u" k
  6. //#define UNICODE+ Z1 W7 w* g# x6 U4 ^8 z0 g( x- K6 s
  7. //#include <gdiplus.h>
    9 P7 ]8 L* M+ i" t0 v3 f
  8. //using namespace Gdiplus;* a, K! L7 E2 B7 X8 B1 O
  9. 0 b) _- `' [$ K; P$ i
  10. #include "RevApp.h"7 P# U/ j5 t' k  p
  11. #include "RevAppDlg.h"
    2 q9 X( T* x( F
  12. $ b7 I  r: _  _0 U* v! G
  13. #pragma warning(disable:4786)
    5 u4 a  o5 e4 U" k& R
  14. #include <map>
    ' l9 i! o. w, V$ S  J& f! |+ r
  15. #include <list>
    # D4 Z$ w# {! G. _1 \
  16. #include <direct.h>8 V: u& j: r  ?' e% z% _: u

  17. 0 w" ]4 E" q6 ?' _
  18. #ifdef _DEBUG
    8 [5 ~4 ?. L' l! }: P" N
  19. #define new DEBUG_NEW" `$ s8 \' q4 C9 `, z5 `1 T
  20. #undef THIS_FILE
    % C3 b( {, b" T. W1 o/ M
  21. static char THIS_FILE[] = __FILE__;
    6 b. F: J+ L  D8 }8 j1 c( P
  22. #endif5 m' }2 \4 L( [' j% r4 S. f
  23. #include "SkinResDef.h"9 ], ]( Z/ z6 D: p" R( n2 @2 t% l2 P
  24. #include "ChangeBG.h"
    - Z; ~7 {5 k4 ~$ ?: N4 w" I
  25. #include "AFXINET.H"# G& m& C+ x: ]

  26. : O$ Z5 G0 S9 s0 }& s
  27. #define TRADITIONAL_CHINESE 0" b4 C9 i# z% ]- q% E
  28. #define SIMPLIFY_CHINESE 1
    % ^- [+ C  O5 `* c  k/ R3 a" E
  29. #define ENGLISH 2
    1 S& |) {+ y1 s$ m- a. f
  30. int m_iLanguage = ENGLISH;2 F5 Z, s: D+ J" b1 S
  31. /////////////////////////////////////////////////////////////////////////////
    5 j1 c& w: k$ f
  32. // CRevAppApp2 l& t; q6 e$ {* N$ }: }$ |! q5 L
  33. % O9 O2 J1 s* |
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp), K5 ]& [6 ~: @, i2 s* |
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    4 y' G8 @6 N) l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
      X: N9 S9 Q; N
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    , d, O& P) |" ]
  38.         //}}AFX_MSG, G) ?. _6 ]3 |1 [' H5 J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    + T( L4 D* d1 c$ x
  40. END_MESSAGE_MAP()
    5 C" _! s0 M8 L- s* Z. {

  41. 1 G1 L- h, @, j  D. \. K
  42. /////////////////////////////////////////////////////////////////////////////( x  D9 K8 p3 G. P  k
  43. // CRevAppApp construction
    ( T3 y% h! z5 M! S2 Z
  44. . ^' Z( b" J6 N) x& g" b/ K
  45. CRevAppApp::CRevAppApp()0 z) C. B! a) @4 o$ o
  46. {+ |8 A8 s  S3 O# C
  47.         // TODO: add construction code here,
    3 ?; y# M, Z: {  ]! O
  48.         // Place all significant initialization in InitInstance! K$ ]3 |( h6 j2 \' h. }) l
  49.   bDisplayIsBig5=FALSE;) l- [$ n) X! @8 L
  50.   bRestartUpdater=FALSE;
    9 Z6 _0 X5 Q* j7 [4 Y5 P6 _: Z
  51.   bFinishUpdated=FALSE;
    : I8 t1 U; a+ r. ~+ Y' g' A1 j
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;+ Z8 t, V' {) N  y( T
  53.   InitChangeDataBig52GBKS();
    ! n; ^+ |2 g* ^6 Y/ {& F
  54.   InitChangeDataGBKS2Big5();& N2 l0 m3 U: H, V
  55.         //2 y+ T* n+ [9 \4 V& m' a, d/ b; p
  56.         bClickRunExe = FALSE;* g- ^; N( N% l% C! X0 M$ E4 F' l
  57.         //3 E! B2 U/ o+ o: h3 @$ E9 U! R
  58. }' B9 u( V- F! Y; v
  59. ; U2 ]+ ?$ E; R* w+ h. `/ t+ X
  60. CRevAppApp::~CRevAppApp()- f0 p3 r0 F* j" s5 S
  61. {
    , W2 g2 G. c: g. _/ f  g3 \
  62.         // TODO: add construction code here,; X% c9 m" V" j+ ~# I1 N; D1 Y
  63.         // Place all significant initialization in InitInstance
    0 a9 W! f: \# U" P( s
  64.   EndChangeData();
    " V; G' v' o. ?9 ]5 h- r/ ~
  65. }  ~3 @) W) v0 b4 l2 j5 _
  66. ) Y  e; A- H0 V9 h+ q! Z8 S9 `
  67. /////////////////////////////////////////////////////////////////////////////
    & Z- ~$ s; C+ ?
  68. // The one and only CRevAppApp object
    + l: \. R# \& j7 L; c
  69. 8 f9 D$ ^* l7 N' |
  70. CRevAppApp theApp;
    4 i% f8 j9 O, D% |; _& @

  71. 2 o/ c+ i* U' d) H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ! g% H5 G1 d" ^0 B) t
  73. {2 u2 i2 N# p0 \: T4 m# Q
  74.   int iEOF=0;6 U- P! P+ K8 |3 B
  75.   char szTempName[MAX_PATH];3 X( J8 V1 Z6 o
  76.   *szFileName=0;
    2 K! W# w) X( g6 I$ j' t& @4 Q1 z
  77.   iEOF=fscanf(fp,"%s",szTempName);
    $ q8 g9 I6 X* M2 u2 T3 v" l) Z
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')/ e6 @# C; U6 G$ Q& n
  79.   {& F; T5 z' g* C7 B6 G" k) M
  80.     strcpy(szFileName,&szTempName[1]);
    / J) V9 t! O, z: s3 p" T
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    . V+ g. h, R# ]
  82.     {% z( X0 X3 l1 x" L& N+ C
  83.       iEOF=fscanf(fp,"%s",szTempName);* ?% y" [- H: |" G% I/ e
  84.       strcat(szFileName," ");
    6 |% w2 N7 {9 l4 g- P9 C
  85.       strcat(szFileName,szTempName);
    ' W& f9 ]& m" R
  86.     }+ ]7 F, U: U' W! G2 m1 Z6 z" R
  87.     if(strlen(szFileName)>=1)/ v4 Y+ I/ S1 S& d/ v' |; I  j
  88.     {& A" N( i! p4 g. S1 k# v# b
  89.       szFileName[strlen(szFileName)-1]=0;5 w4 K- D, K6 Z" y+ O
  90.     }
    ' u& B$ y0 U3 }6 S9 o  Z. r
  91.   }
    + X4 W& x/ {7 u, g7 u0 u$ M
  92.   return szFileName;
    7 d) F1 q6 v1 s+ t; F/ q
  93. }
    & h1 E; K: Z" C
  94. 4 R' L5 s+ G9 M1 Q: M
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    , Q7 H6 K5 j0 `6 N9 G
  96. {8 t/ F+ E8 S6 k. J) |8 _- x$ y- h
  97.   FILE *fp;
    : o* M- r3 x8 l: b! w) N3 E
  98.   char *key=NULL;/ S- E. b4 J# n! G
  99.   char version[MAX_PATH];. d  z9 O, E  z. A
  100.   LPUPDATEFILE file,olds;: P. F$ M' Y1 M4 H5 Q2 F
  101.   std::map<CString,LPUPDATEFILE>::iterator p;! F; @* H% X+ |2 N
  102. ! G% Z* K4 b: N
  103.   UpdateList.clear();
    * R# c+ K/ V' B1 Z" V" _
  104.   UpdateFile.clear();9 j0 y! Y& K& Q  q2 U  u2 y: u
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 v9 d* z1 w. m$ }/ S
  106.   if(!(fp=fopen(filename,"r"))) return false;2 }4 |: p0 Q8 n/ T/ P, a
  107.   fscanf(fp,"%s",version);% z! s  F7 @* z/ O0 T0 a
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }! d8 }2 H  r$ Q# C3 w/ g
  109.   while(fscanf(fp,"%s",version)!=EOF)
    / r, Z! Y% P- e4 i  c
  110.   {
    9 F4 l0 f. F1 q
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));! r$ z  N, u9 `* W* x7 C
  112.     fscanf(fp,"%s",file->path);
    0 c, c! M3 f5 o- Q: M
  113.     ReadFileNames(fp,file->file);
      [: ~+ v( w+ V* _
  114.     strcpy(file->full,".");
    # \. R! Y4 T3 @! l6 M9 W1 W
  115.     strcat(file->full,file->path);
    1 v6 ]6 b# D1 i/ W% a) \8 y' N
  116.     strcat(file->full,file->file);/ ]# i* G# H. p- N* J/ V! `6 ]
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    . o  `/ O, v4 Q  v1 U0 e) ?  ?
  118.     {% {  I: K1 x- k7 s
  119.       file->vers=(float)atof(version);0 z& X: X6 R  s3 ~9 w6 H$ X$ e% J
  120.       UpdateList.push_back(file->full);; ]9 w: ]' g( E3 g: ~1 g4 t4 p
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  Y* F4 x  C7 ]
  122.     }1 }4 b% X$ K# ^  f- n* v
  123.     else! K; k9 m' ?0 X+ @& R
  124.     {$ b7 [5 A4 U9 M
  125.       olds=(*p).second;# \) Y$ ^1 ?3 R4 n
  126.       if(olds->vers<(float)atof(version))
    1 _# l* S) R* ^. P, W! _" G
  127.       {
    " V7 {; R; I9 n  o' E
  128.         olds->vers=(float)atof(version);
    - ~6 w. q! y4 x% U8 g
  129.       }
    . P6 z, x. ~( y5 A' i
  130.       free(file);
    2 R/ c: s- h( Q# |
  131.     }; Z" q3 N/ g# z7 L9 K( i1 ?
  132.   }
    * W0 Y! ~4 c$ P0 W
  133.   fclose(fp);7 ~; f" e1 |" w% q
  134.   return true;
    0 u$ O0 c( {% B3 V7 Y
  135. }
    & A& I1 I, w0 f
  136.   I4 x3 R# h7 {
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)  s9 g! N2 a9 E( T* y7 Y7 I; u2 c
  138. {
    1 @2 M9 K% }7 h$ g9 u
  139.   TCHAR  szFull[MAX_PATH];
    0 _& a2 r& i; [& G7 k
  140.   TCHAR *token,*inter;
    : [" G& r# X( z. a. F* U* V
  141.   *szPath=0;4 f3 N8 T0 }" R9 g4 I* g8 X1 D
  142.   strcpy(szFull,szFullPath);' y! H; E( J3 `0 J
  143.   token=strtok(szFull,"\\/");8 l* |8 W3 H6 \+ f  e1 N( B
  144.   inter=token;9 L, P4 x; n/ g3 k4 k$ q
  145.   while(token=strtok(NULL,"\\/")): R' i5 @4 b5 D
  146.   {6 T1 J; |0 I- Z; A# k* d+ C9 L
  147.     strcat(szPath,inter);4 D1 g2 Z, h5 Y: V: I0 U. R* W
  148.     strcat(szPath,"\");  V* `8 L8 y: h) Z) J$ _
  149.     inter=token;4 [1 b) |6 o7 Q+ x, H' |
  150.   }6 |6 a3 w7 p& S
  151.   return strlen(szPath);% O2 P) d+ u9 y% g% G- p7 \3 n
  152. }
    3 [; W- c( D# O9 a/ E. L& T4 a" b3 e

  153. 8 `3 v/ W: B# r0 L* {: V
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)4 X% T6 Y0 h! z. h7 }" |  |- u& D$ u5 ]
  155. {& i% d& M# j4 p9 Z4 ^
  156.   DWORD attrib=GetFileAttributes(Target);7 {" J- X- \$ z: j8 X8 q7 t1 r
  157.   if(attrib!=-1)) R- i- e: }" k+ @
  158.   {+ m2 _. V1 g" ~9 Z
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    7 @1 Q: P" C4 K
  160.     {3 ?/ d% L' P" ~0 l/ L' f# y
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 `( p! Z& G8 g, n) K# K4 g; b) ^3 Q
  162.       SetFileAttributes(Target,attrib);
    1 E/ x1 E: F  y4 `
  163.     }
    + p! Q5 W5 _- L' g2 x3 l
  164.   }
    3 ^, ~9 ?2 G2 g' O3 k5 t' x
  165.   CopyFile(Source,Target,Erase);
    ( r# y! j; t5 K
  166. }. T" s# t1 E: J

  167. + n" R7 ^4 e, V( N" V  e
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    & H8 @0 v3 N1 ]6 g. o* t
  169. {) H2 J( M. ^; e% i+ ?
  170.      FILE *fp;
    0 q9 W% f- E& L+ i7 \2 P6 N
  171.      char  szBuffer[8192];" n& @- f& ]7 i. Y9 [
  172.   va_list  argptr;3 e3 s, f- _* f7 k( g

  173. * @' _- f9 O% E5 W% T2 J
  174.         va_start(argptr,message);
    ( r: j' K7 D7 q" Z* T
  175.         vsprintf(szBuffer,message,argptr);2 w/ F0 r  s& L' t
  176.         va_end(argptr);
    # K6 k) h9 x$ O
  177.   fp=fopen(FileName,"a");' J% S7 E% u2 I
  178.   if(fp)
    0 n6 l4 @+ j5 _
  179.   {- R. T, l  k8 v
  180.     fprintf(fp,szBuffer);4 q9 T, R; w, v' [  d3 n
  181.     fclose(fp);4 G& [# w3 h/ I% G9 T1 V
  182.           _flushall();
    , S( ?; _, D9 s& K! Y! N
  183.   }
    0 @8 o6 H2 G0 O( d8 I
  184. }, h" t; m4 F% e! x6 k" @4 i
  185. - y1 M: x2 }' \" ?" g
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    4 C! r* ~+ {7 S" b/ V
  187. {( |2 w. `5 R7 K2 G
  188.      FILE *fp;
    ; t& J7 \7 m$ P  G* d9 H
  189.     DWORD  attrib;5 T. ?9 E7 O) l  {& H2 }5 O
  190.   attrib=GetFileAttributes(FileName);2 a& v2 C0 w+ J
  191.   if(attrib!=-1)
    $ `* I2 Z0 e- @' a! U, j: n7 J9 e
  192.   {
      v! D, @3 g% y% f0 e; L# X
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, L" L2 ?% V; b) e
  194.     if(!SetFileAttributes(FileName,attrib))& ]( C. J0 o/ S: x
  195.     {
    1 D- T9 v2 ~, @9 L! o3 @. ^
  196.       return FALSE;
    4 k' q1 X2 U% X7 ^
  197.     }
    - @; F6 G0 J' \2 t$ p# P
  198.   }% i. z) ^5 B; B$ F) d# Z
  199.   fp=fopen(FileName,"wb");
    ' i6 V" R1 P+ g
  200.   if(fp)
    , F; ~3 G  u  g5 P% k
  201.   {! H/ p* O3 ^$ ^9 R+ r% u
  202.     fclose(fp);1 b% ?% o2 h* Z  S( E
  203.   }
    9 e3 y- o8 i; r3 Y- V/ L: K  c
  204.   return TRUE;9 Y5 i$ W( R. V: y& p, b
  205. }: W; ?$ ^+ H# `: \" G/ O

  206. # J1 Z) K$ P6 E9 M1 {( \
  207. BOOL CRevAppApp::UpdateLocalVersion(void), B0 W+ D' }5 l
  208. {
    & Z1 ~+ c! j# C* J
  209.   char filename[MAX_PATH];
    4 O% _# p$ B' j9 l
  210.   LPUPDATEFILE file,olds;+ A1 q' L) X+ P& \
  211.   std::map<int,CString>::iterator i;+ C5 C5 ?- \2 b# u4 r* U3 p! S
  212.   std::map<CString,LPUPDATEFILE>::iterator p;) d0 d! P9 f4 O6 V, T. p3 U% N8 W: I$ ^
  213.   std::list<CString>::iterator l;
    - R0 \& O/ H# W0 G$ o) @
  214. ) ]2 X$ d2 p; \& S; q- d8 D' D
  215.   if(bFirstUpdate)
    $ ]- g. a/ w6 b5 h
  216.   {6 r% E0 \. @5 i0 z* I
  217.     dwCurrFile=0;3 f  X( f6 P  T
  218.     bFirstUpdate=FALSE;
    . n3 {+ _3 ]' y7 h
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - V7 V! M, X, D
  220.     {" v" C5 l1 q# h" u; G
  221.       dwTotalFiles=UpdateLocal.size();
    ! S- C5 _6 V$ f+ Z9 i
  222.       dwDownLoaded=0;
    ( c$ B6 u2 I2 V+ k2 ]( H
  223.       bSilentStep=FALSE;. A& K4 ?+ i1 n/ Q  `' V
  224.       bCompressed=TRUE;
    0 N! w6 o$ S: \/ Y
  225.       strExtLocal.Empty();! K2 V& ?2 w/ a/ W
  226.       strFullName=(*i).second;- }* n0 p3 Y  c* S' |+ }
  227.       dwProgramState=AP_CONNECT;$ p: @! ?7 S( Y# O. E
  228.       return TRUE;
    8 [6 I- W' U, i
  229.     }
    2 F' ]" n  l/ S# H+ i7 y2 A9 ~
  230.   }" V) N9 h$ c1 s9 X6 |* |
  231.   else if(bRestartUpdater==FALSE)4 A  q1 s" ]9 h7 w: ~' p+ x$ G
  232.   {
    & g6 E. L8 ~7 _
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    " f! i  I# F' i3 m
  234.     {
    ' ^1 X4 o5 @6 s, `
  235.       file=(*p).second;2 i. J4 S% F3 r' e: X, S
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    & B6 i" _/ |+ F8 N
  237.       {
    # _8 |1 e9 Q$ q6 h* x
  238.         olds=(*p).second;
    ! ~% R; q* j! V5 u- r
  239.         olds->vers=file->vers;
    7 y* I2 w+ ]( v1 I3 |. D8 p5 @3 L& _# O
  240.       }
    6 J* J9 G, ?: K* K) E4 d
  241.       else
    4 c" V+ X  z$ i( G; J$ j4 z
  242.       {# G6 C8 j8 O- x
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: w5 i+ ?  e/ b
  244.         memcpy(olds,file,sizeof(UPDATEFILE));$ K7 F+ E' x- w- S
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));% U5 v5 f' k9 d& e
  246.       }
    " m5 }" P& \7 G( r8 q) u; q
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- c# I- w, x4 l9 b2 z1 G
  248.       sprintf(filename,"(%s)",file->file);
    ) o: X/ `4 Y8 I" n5 z! j! E8 p6 I
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    " H8 C" {/ p" h$ H# Q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    8 j0 C2 Q3 S# l; B6 V3 _+ G
  251.     }5 |* r0 u6 }7 V+ Q5 X2 K4 S9 L
  252.     dwCurrFile++;
    4 J5 r8 ^! R( n2 C' E2 G& A
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())3 r6 b2 W0 m# |, e
  254.     {
    4 D( |& J# E( b* R! n6 U3 |  N- l
  255.       bSilentStep=FALSE;7 N' j( L: v- ~' a8 W
  256.       bCompressed=TRUE;& E7 o1 r( R# t! {6 s3 u: B) `! i
  257.       strExtLocal.Empty();9 k; u( C, m5 W+ Y6 W' {
  258.       strFullName=(*i).second;
    * V/ z( U: ]. n$ g. ^8 F
  259.       dwProgramState=AP_CONNECT;
      ]' w/ E- H% J7 w
  260.       return TRUE;7 g& U/ X) o/ j2 S  C
  261.     }
    2 Q/ l9 c0 i, g
  262.     if(!bRestartUpdater)7 }. [, n  H" F/ `
  263.     {
    , d0 f& i& P1 n) l' j- ?' f9 z
  264.       int iCurrSize,iFileSize;
    ( x2 {8 Y9 i# ?4 |5 W9 T
  265.       iCurrSize=0;
    ' s" W5 T9 f/ O$ ]- A
  266.       iFileSize=UpdateList2.size();
    ( v/ p: s3 f& G6 ]7 W- p
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");* d0 f6 |$ ~" N4 G) }$ {8 B' c
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    - t3 J( x- i1 F' @+ v3 X! h
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");, e1 R) K, K, T6 W: ]7 G
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, D. \7 K% G1 ~& S, Y: w  `
  271.       Fclearf(".\\update.dat");) c( m' V5 e1 X) L) P
  272.       Fprintf(".\\update.dat","Bloodyf\n");; L; y: ]0 n3 y; R* |/ N4 S
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! s% f8 ~3 a2 j0 d  n- m
  274.       {# H8 C, B+ _4 Y3 ?. k. B( X5 y
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    ) d5 Z9 }" H; W
  276.         {
    ( P5 \& \( l& S7 x; J
  277.           file=(*p).second;
    . i; C  a) m8 K1 S, q  W
  278.           sprintf(filename,"(%s)",file->file);- H! S& }+ m. I/ m: d
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);1 R, R' {' o# h
  280.           iCurrSize++;4 D# u; @! b3 t) F. K" [+ ?
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));( _$ H& P3 v& t- r5 t
  282.         }7 Y5 O- {1 ~% x
  283.       }5 D$ k9 c' p2 H& M' U
  284.       unlink(".\\update.txt");4 z( g9 R' b5 Y' b& R5 Q
  285.       unlink(".\\update.tmp");
    5 m4 c/ M  m( N) _
  286.       Fclearf(".\\checkversion.dat");
    5 E! b5 H$ ]6 H/ u4 S  F
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    9 L. E# I$ Y+ n
  288.       if(UpdateLocal.size())
    / ]1 \  q5 L( u( o) Z
  289.       {2 u/ }7 \' d& f$ |
  290.         UpdateLocal.clear();
    & Q" g, X) _- K2 s, F( E
  291.       }
    7 S: B+ a" R4 J1 |  R! U
  292.       if(UpdateFile3.size()), }+ j) t! |8 ~2 K- w$ ^
  293.       {7 F$ {/ T8 `: |( N4 J+ z7 g
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)$ R+ H$ O( {, l0 Z# p
  295.         {" s& I$ t" y0 N5 j" }
  296.           file=(*p).second;5 Z' Y1 O7 Q0 X9 L, z
  297.           free(file);" R! g% ?7 K% f. Y$ [  Z7 K6 k
  298.         }  P' s1 s1 _- y, h) b4 R  k3 P2 }7 c
  299.         UpdateFile3.clear();5 h9 I; Z! [& N* i5 A) X5 h3 i
  300.         UpdateList3.clear();
    0 H7 N6 d- G, L9 e4 l' |
  301.       }  S2 f. F" w# b
  302.       if(UpdateFile2.size()): Y: b- v0 a% K8 V  H
  303.       {' }0 {  X* j* F3 N
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ) v. z1 G: E3 h
  305.         {% B! I* B( k8 d7 C% ]! r; I. _
  306.           file=(*p).second;/ O4 [  O7 l1 X
  307.           free(file);5 r: A5 k& F' ?) O
  308.         }4 g. ]. B) {  p
  309.         UpdateFile2.clear();2 m, e* Y% J$ P; a- @9 z! Q
  310.         UpdateList2.clear();2 u9 I* o# P4 a, |8 D$ \9 ^7 _; }1 U9 i  B
  311.       }
    5 K1 i5 o" K8 j8 _9 I5 ]% ?
  312.       if(UpdateFile1.size())
    : W4 Y+ r/ v% ~( J; I" n
  313.       {; A4 d* H2 ]+ m+ m& a$ T$ \# H
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ; g: [' A& u* X1 q- x
  315.         {
    $ I/ {! S8 Q* t2 Q8 K
  316.           file=(*p).second;! a  C& m" a; @2 g
  317.           free(file);2 L* v$ @4 `  {1 W7 V3 u8 V! a1 ?
  318.         }  M! w) L: W6 Y9 h
  319.         UpdateFile1.clear();
    5 _( o0 p- u8 y2 V& i9 K# U
  320.         UpdateList1.clear();6 r7 ^! s' A) L
  321.       }
      N( i. }- ]! t4 ?
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 N0 ]4 B# I( _+ a
  323.     }7 @0 k) c. L& a7 z
  324.   }
    9 i/ s' H- z8 _0 G
  325.   return FALSE;
    / x; `7 p* ?5 W& D; M
  326. }) {& w# C* h) k9 [9 K$ r

  327. 4 C9 M, [* Z3 w+ M4 S1 Y1 V% i" ~
  328. void CRevAppApp::ClearAll(void)( ]! F, X% q1 I6 g! d! c7 ]. M
  329. {3 a7 v. v- @1 c
  330.   LPUPDATEFILE file;
    ) `. E" l& O- d; s" k( }/ ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    # j6 W0 r! X! z' V1 R

  332. $ J+ `4 ^- `. E6 D* {
  333.   if(UpdateLocal.size())
    - y3 a$ x4 X% ?$ a" ^
  334.   {9 D* [1 ?8 B5 `0 A$ ]/ U" S
  335.     UpdateLocal.clear();
    " H: ~, Z2 ]( `/ n- Q' V" K
  336.   }  h2 w0 p; Z, ~8 r" |
  337.   if(UpdateFile3.size())
    2 b3 G# _+ Z3 |) d9 U$ L* B( I. S
  338.   {3 p  C  e2 j$ l; p3 u( v) v2 U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 x3 ]& N9 }4 o( ]
  340.     {2 A0 R0 n- r2 x6 i7 r8 i. ?9 A  c
  341.       file=(*p).second;6 M1 r9 k3 p1 l$ l" D6 W
  342.       free(file);
    ( e* G0 \6 ]& S6 q0 t& }
  343.     }8 z3 x( |+ ]8 ~  X, k
  344.     UpdateFile3.clear();
    ; b8 X$ e# Y  \: {7 J
  345.     UpdateList3.clear();/ ]( V2 x& b; n) R: w0 U( Y- L
  346.   }$ T) e% m' I4 Z: d+ @
  347.   if(UpdateFile2.size())5 F! X, H, s. z' J, _- ~  ?5 X
  348.   {
    4 Q: ?+ p$ I% R, ~& D) y" y4 ~
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ M  N: W7 ?" a" Z
  350.     {
    8 P: Y. K' L: Y- F% [2 d
  351.       file=(*p).second;/ g+ H6 U4 U: S, d& k  u# Y0 @9 F
  352.       free(file);
    1 L" y  b* M3 T- g& a/ F0 z
  353.     }. x7 a1 Y' }* N4 g/ V3 \/ g
  354.     UpdateFile2.clear();
    ( q/ k. Q0 e+ }
  355.     UpdateList2.clear();
    , Z) h& {& M) ]$ t2 T
  356.   }
    : M: d2 V* a5 n# A% T7 z! O
  357.   if(UpdateFile1.size())& L9 k5 U) m7 m8 ~, U
  358.   {
    4 ^+ K/ i1 @" A" t, q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++); D; H1 x- T+ j$ a
  360.     {& y0 F) Q& p5 f, N: j3 C/ F
  361.       file=(*p).second;  q4 `- i0 A, r- N( s0 H7 `: \
  362.       free(file);. g/ T. U# ]- G. n9 s
  363.     }
    8 |1 c% q! f- r7 o- e
  364.     UpdateFile1.clear();) u5 i# Y$ w! g9 p3 {5 M
  365.     UpdateList1.clear();* K. _9 E1 c; W6 z
  366.   }
    " T7 _8 W, T5 z3 t/ w8 Q
  367. }  " P; c1 I8 `$ B- h: G  ^
  368.   
    ' N  S3 V: Y) z& \9 _. E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    . [, q* [# M; s& e) W- ?
  370. {
    $ V/ ]9 P' Z6 e2 U& b4 n7 a5 d8 ]
  371.   int c;
    " ]  w) \' W7 b& z
  372.   LPUPDATEFILE file1,file2;1 B+ K3 q  m& p. [+ I
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;& t1 T1 @, U- ?) `; c( i/ t" N
  374.   std::list<CString>::iterator l;
    ( O# p$ b4 x) S2 Z, `

  375. - H" T" h0 K" }/ N
  376.   UpdateLocal.clear();1 b  p  c/ }+ W5 j9 [
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ h$ u, q9 U# i" c
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    - F& Z1 S4 u+ T+ h0 M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    + y4 q1 W' ?9 b$ r3 i
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    * z4 O) e1 T7 v+ T( j! [
  381.   if(UpdateFile3.size())! N; D9 }: P. _% `/ K  k
  382.   {0 i3 J6 ]8 T1 [# ^+ @7 `
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    " X* o. `2 U' U& B; C7 @
  384.     {
    6 y- `9 `( P5 \) R+ O
  385.       file2=(LPUPDATEFILE)(*i).second;
    3 @* D: y5 W1 h
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & M9 f, L9 p, ~& B# p" e
  387.       {
    5 m$ \) h2 t# I; I
  388.         file1=(LPUPDATEFILE)(*p).second;
    3 L/ B4 h5 ?2 D/ E! X: N
  389.         file1->vers=file2->vers;
    4 g5 d- W* T9 O. o7 ?
  390.       }
    5 ?8 Q6 ]: w) X7 J( I: z/ r
  391.       else1 a# U  ^- c3 D4 a* U! B* W) L
  392.       {: M9 ~7 I) N, L
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));  r. }, h: c* K
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));! j  S* N& ]% `7 C% S
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    0 H# M( Q: ^% c  s; Q
  396.       }
    5 k( _, c# o! ?! U, @) J8 T+ K
  397.     }6 I2 x! @. k- p# D" N9 }
  398.   }
    , t2 x! J4 N6 @; j& c
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    : S' D  s2 n$ I0 r4 s6 w7 \
  400.   {
    ! y. y$ R1 C$ i8 w- r
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())8 k! a0 N3 M5 o+ e
  402.     {$ U& k+ q+ @1 Y3 L
  403.       file2=(LPUPDATEFILE)(*i).second;4 d2 T. _; L/ _/ l- ~2 Q/ m
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    & G( M- z( l3 s' u4 J
  405.       {
    , J7 ?* k* \) n0 ~
  406.         file1=(LPUPDATEFILE)(*p).second;
    7 n& P) R3 @4 `; {  y
  407.         if(file1->vers!=file2->vers)
    ! E" n3 X5 _5 k# Y$ P! b" w+ Y
  408.         {
    % Z2 H0 ^2 V. g' a" ]4 y9 _
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 w% q- j$ N' ?, X. R
  410.           c++;0 d* O2 \" _/ J2 n$ M# o  G
  411.         }+ h9 Y& _7 M$ i4 V9 f2 y3 X
  412.       }) P0 W3 q. x+ S3 J; l# B* G' r
  413.       else: n$ ~# p5 E5 R* f
  414.       {
    ! @( r1 D0 L! @4 V6 m/ y
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 W4 S5 |) u7 c, g2 i
  416.         c++;5 j  z  D4 d, \$ X7 L) |
  417.       }: C9 `: g* E( E8 E, n4 W) ~: y
  418.     }
    ; e4 S$ G. a1 ~2 V5 |
  419.   }
    8 w5 L6 P% A3 Q8 D
  420.   unlink(".\\DownLoad\\update.txt");: B8 q, y; }3 W4 c. F4 p2 M$ P- B
  421.   if(UpdateLocal.size()) return TRUE;
    : o- s' D8 N- {1 a; d$ b% \
  422.   else                   return FALSE;) L  }- L" X# ]% K' Y
  423. }. O" C, T7 a( b3 U$ j  b3 `, M

  424. : ^, b. k( V; [% U; Q" ^* B
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"' u0 Y: |: \2 S( H6 Q3 t) i
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ; V+ P. N' H! ]3 ?
  427. & A- w5 B& n) M5 l' P: H% F
  428. 7 D( m) w, k# l# Z' p0 M' j. @% C; s
  429. & [( {" \& [& F5 ]: p
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    8 p6 E! M' S+ ^& a" ?6 E4 _, m8 p- v
  431. {3 f" S4 Q$ s; ]2 V2 @
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; V# i4 U( K* O. g: d6 ]" G
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)$ c! _$ J  X4 D3 L- h1 n
  434.   {# e: ^6 \- p/ L% z- d0 ]
  435.     char szLanguage[50];( H4 F, {/ _; B% |. s+ [1 z" I: I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 Y! i) N2 t3 {3 M9 R
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;- x% v1 d3 E& D
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    , Q( I, j( u! @  H
  439.     else                                   m_iLanguage=ENGLISH;
    5 W+ l1 Q, _0 T/ r7 R/ T
  440.     char szRegister[100];
    $ x5 i( B5 m# E( P
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 h5 @9 n) Q3 B* l0 Q5 R* T
  442.     strRegsName=szRegister;+ C% o  g: k& C$ c6 c% i
  443.     char szPatchURL[100];# L& K/ V* V5 @1 X( y4 n0 F
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");# ^1 R8 e% |: o7 s  o
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);1 q! t; M, D- q% l! `9 R. _( {
  446.   }1 c; l' h6 \/ m; p$ ~* I  Q
  447.   else
    ! d6 e" T6 Y1 p: _, H3 N% {
  448.   {
    * ^- y7 S  T" g5 I
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);" ~, ?# K1 l% b* \! w) O
  450.     strRegsName=DEFAULT_REG_URL;* h& w7 b  W# C% Z
  451.   }* X6 e3 _" o9 Y+ e
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 u) D+ d# a; n/ D0 x
  453.   {
    $ v* m9 P* n) u5 P6 z! W) f+ w
  454.     char szIP[50];- v7 v1 v7 y0 x* F% g
  455.     char szDIR[300];) N" A- |2 x! A4 M1 Q7 b
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    1 e% `* Q4 w1 F) n/ z5 S% f
  457.     {
    2 F$ P6 Y, `6 X5 H$ J
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");( F! U; k* @* @3 c4 H
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");( t! _  x+ o" b' [6 T/ _! ]8 p; u
  460.       strHostName=szIP;4 ~8 S2 ]; f8 {: Z0 p
  461.       strHostPath.Format("/%s",szDIR);
    7 S# o% q: k- {$ N& t, z
  462.     }
    ) Z, N4 d5 }0 N7 z! |
  463.     else
    ! D" M; X1 z9 N, `) {. r# R
  464.     {- |7 N' A3 ]% @6 I1 V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)' h( R( x' p( G- z- k% t
  466.       {
    3 d! k' F. f, l5 n6 N% S1 L
  467.         char szLanguage[50];. J: c3 {0 T% P( H2 X
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! a4 ?5 {. V# p  S) h5 o  `
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;2 ]8 l0 h6 A1 M; x" @8 F
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) ~- ~/ ?3 Q, E( p
  471.         else                                   m_iLanguage=ENGLISH;
    8 c$ u# A* g+ _. h) t/ y. _( H" n
  472.         char szRegister[100];
    $ L" c) p0 Z% h8 V/ P# t
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ! F4 t* }6 c1 D* h5 b
  474.         strRegsName=szRegister;5 ^: B' |' u% v
  475.         char szPatchURL[100];
    3 {; U3 U0 B9 H6 ~( h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 }1 H+ u$ C+ Q# M( X% x% _
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    : V2 q7 J* N& k/ r
  478.       }7 V1 ~1 ?: b6 k/ l! E
  479.       else/ G( b$ ]; Q( {) U% u: N
  480.       {$ R9 x3 k( f& t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) E* u9 M% u/ N$ f9 q
  482.         strRegsName=DEFAULT_REG_URL;7 m5 v% F: |) B# l& K+ u
  483.       }
    8 I0 e3 Y) J- D# l; l
  484.     }6 n4 P0 M: n4 l6 g
  485.   }( }+ ?* i; y! v# e: S8 O: A/ j
  486.   return true;  ?: f) n3 [( v
  487. }  ^7 h1 V9 p' g# E
  488. 4 ?2 o8 _! M" H9 J( d
  489. #include ".\ZLib\unzip.h"2 k3 `7 i- c3 L0 I
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);9 N9 Q( f! @2 K3 X6 i5 m" s1 ?
  491. /////////////////////////////////////////////////////////////////////////////
    $ E5 q/ p1 z# I* T( _# d! Q
  492. // CRevAppApp initialization6 b; _+ W% H5 G" ^. R0 w

  493. 2 Z3 i. c8 E4 j1 [0 a1 |2 S
  494. BOOL CRevAppApp::InitInstance()8 @+ w6 Q, n' X3 P0 Y% W' f2 Y. t5 Y
  495. {
    4 {4 ?' i' i$ Y
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];: I! K+ W2 ]. X% z
  497. ; v" [2 h: {% ~1 V. ?) n
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);0 t$ v4 s/ Y7 W7 |& e& W
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))/ p+ W7 W( W% N# c3 W. O
  500.   {6 {* L+ T8 W( N; f$ B
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' k( I: P- z; c( w1 M% S9 u
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    & }0 z0 S# ^7 N' e! @
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' S0 Y7 r! T, ?7 I* K
  504.     {$ L8 e6 e& {) V  \) \
  505.       strcpy(szPath,szPathTarget);
    $ `# Q' u; ?; J. V! _$ f+ M
  506.       SetCurrentDirectory(szPath);
    * p4 i6 i8 t5 g+ ^1 O
  507.     }' E1 o' h# e. x6 ?
  508.   }
    - w3 B: }- E7 ^, s  R! B& ], {/ E
  509. #ifdef _DEBUG
    3 S; d: C0 y) e3 E5 t; L. D" ~
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
      o% u! S6 r( }/ M, t
  511. #else4 Y9 G. f9 F+ P* j9 S
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ) L: q; i+ T! l# o8 E( @% O
  513. #endif" P( P7 D7 y9 S
  514.   {: i6 ?- E/ T3 @. c# m5 ?6 K7 r
  515.     char tempFileName[MAX_PATH];: ]  Z% G, A+ t8 P- l
  516.     strcpy(tempFileName,szPathSource);/ ?1 h: K( T* u' l, j
  517.     tempFileName[strlen(szPathSource)-12]=0;, e6 ]1 z! v* |, X; Z$ P
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 p3 `0 s' Q* P5 M1 D
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);/ N7 u8 |( @: J9 L) @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, f/ \& C$ A' w7 C! |% a$ w9 o
  521.     return TRUE;% `/ C1 t4 M' X0 J/ t5 x7 t7 f! ]
  522.   }  d* g4 B; a8 d4 k
  523.   // Nuke 0118: Delete run.exe
    $ j5 w2 [; S- q0 a$ ]
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    7 _. ^. N2 M/ C1 @
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" z0 R, Z9 X* k8 Y3 `
  526.   if(!ReadCfgFile("Config.ini"))
    7 c2 M3 U0 ]& ~: y
  527.   {
    3 c1 r0 S" Y& ^' {7 P* \9 i
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);. J" s& B9 w( A3 _7 I
  529.     return TRUE;
    ) L% U9 C4 M8 R( U: ]
  530.   }$ Q$ ^9 l3 S' F8 V9 U3 R$ W
  531.   HANDLE mutex;
    1 s$ A! q9 u. p1 L  w$ Y$ q) y
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")). G5 x4 x7 z6 m0 n9 s
  533.   {
      l& _0 S& ?0 ^( m' t
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)/ n! b4 Y- j/ k( J* P) [
  535.     {- x# U4 k: `( O& T  e. u$ Y- P, x
  536.       CloseHandle(mutex);5 s$ a: j3 F1 A& i9 W) d& a; h
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    - {/ G) c9 `3 z; [" H
  538.       return TRUE;( W: V& S3 B0 D7 E$ I
  539.     }/ d5 X7 Y. Y: Y% l/ [
  540.   }  
    7 N' `7 O& S/ D3 u
  541.   CloseHandle(mutex);
    # L5 M; E7 w) v0 _" ~1 K
  542. * F1 a8 B! f7 |/ Z- L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( ~5 {0 I/ c! h* D* [

  544. . q* ^' \0 p2 L. @% k5 j' ~
  545.         AfxEnableControlContainer();7 b  U4 m& b! l. P, K
  546. 8 N8 R& Y2 A& P' ^0 h' b! o7 R
  547.   bCanUpdate=FALSE;* x% o- ^  d8 K- ]5 Q6 P9 a& Q
  548.   dwStartUpSteps=1;
    - j8 T" p# ~' _8 t; r! R
  549.   dwProgramState=AP_NOTHING;
    2 B$ Y% T6 w6 S" ]" V4 B5 c
  550. " O4 F* G7 C, m9 w- @; D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);3 [2 i8 B6 m6 K1 {

  552. : z- I/ [& i0 D' e& |
  553.         // Standard initialization
    4 k4 G% R$ E, N! J, \, z' H! ^
  554.         // If you are not using these features and wish to reduce the size
    " j& h' f4 Z1 M8 ~, S
  555.         //  of your final executable, you should remove from the following5 V6 r( p  P3 X: T* A2 g
  556.         //  the specific initialization routines you do not need.% K! W+ B/ h( a6 s

  557. ' l6 O" s! A; w* j( {( s' U
  558. #ifdef _AFXDLL$ f8 C0 R0 m3 L9 y7 S
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    2 N( Y3 i% P$ |" C8 g: y/ v
  560. #else: a! u3 z. C6 `, L% @) y
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically! I. F6 H/ G& M  v
  562. #endif
      A6 a4 z/ g6 m" A/ I/ g

  563. # M0 i- }1 M6 F7 y" v
  564.   dlg=new CRevAppDlg;
    % @- X( S, q( F) k- A
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    7 |) Q- ]; v# p, {4 K! k! D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    / B: y1 t" D8 C/ J
  567.   m_pMainWnd=dlg;; B# o! J( S; O' W) Z* S
  568. ! c3 Q3 Q, A9 G; ]" \1 A4 }
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! u: Q# b. Q5 s* N  a) @
  570. ! K3 z- [! A4 X: d
  571. //  GdiplusStartupInput gdiplusStartupInput;' U" V2 P2 q" z( ^
  572. //  ULONG_PTR gdiplusToken;
    , p- j( v3 `: x  i
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    9 F$ B3 h$ r! a  T# j
  574. / D: a2 ^: Z+ d# X
  575. //        CRevAppDlg dlg;
    . i( A& U. J& n2 O
  576. //        int nResponse = dlg.DoModal();
    6 g5 j: b. R/ I7 z+ |$ l
  577. //        if (nResponse == IDOK)  X* u7 o$ A& G( p7 I
  578. //        {9 O8 E" f3 v5 r! ~3 W2 Q. A3 {
  579. //                // TODO: Place code here to handle when the dialog is( t! ^% Y$ }$ t
  580. //                //  dismissed with OK1 d* A/ p% t' p
  581. //        }! O3 ~. s# y* A2 h4 n! ~7 ^
  582. //        else if (nResponse == IDCANCEL); s9 r5 w( W5 }' V& Z$ j2 B! ~1 ^' F
  583. //        {+ T7 }& ~: b6 |3 f0 K' Z
  584. //                // TODO: Place code here to handle when the dialog is" J% g( u6 t7 [* n
  585. //                //  dismissed with Cancel$ @4 p. n. J5 z) Y7 \' j
  586. //        }# \8 x) a3 U) O9 g* n
  587. ) Q: y+ u+ y. Y4 B. f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
      k. m7 k! h, D0 c$ v
  589.         //  application, rather than start the application's message pump.0 L! `8 G% ^7 m. z( k' d
  590.         return TRUE;5 g. y; X& z" n
  591. }
    # c9 S0 s# Q+ k+ z. e6 s/ V

  592. ; M$ A' [3 l8 Z" v( a
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    % j2 i- ^8 ~8 ~* @, b6 Q
  594. {
    1 }' V2 ]; \! g, @% E4 E3 R( m
  595.   int i;
    8 t8 l% Q4 }5 f) y. @
  596.   char *szRet;. t5 _$ _4 g5 `

  597. 5 \8 k7 v# i1 }3 Z* f
  598.   if(pSource) { itoken=0; sztoken=pSource; }) c0 g) Z- x3 n* N# `; V0 G1 N
  599.   if(sztoken)
    $ `0 _  z- F! m& E
  600.   {& f- {2 b: |5 j! k5 ~2 X
  601.     szRet=&sztoken[itoken];# ?/ v8 g5 A4 j
  602.     while(sztoken[itoken])) ]; ~, h' [- A9 M$ }
  603.     {8 X, g9 t/ p% H. }) [
  604.       for(i=0;i<(int)strlen(token);i++)# c9 y3 }7 j% F' L3 ~+ n+ g
  605.       {9 p/ Z7 ~9 m2 `- G3 W* }' L) {- P
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])' b3 j5 `' K9 A! ?+ @  n
  607.         {
    + t/ Z% K* {% _$ L; |! j0 c: F
  608.           sztoken[itoken++]=0;
    # |: W: [7 I2 m; B
  609.           sztoken[itoken++]=0;
    9 S6 t. O7 A( U/ N! Z' k
  610.           return szRet;
    , R  t# s& Q" n0 b2 ]" ?1 [/ H) g
  611.         }8 A/ C0 {3 z" r$ C: W
  612.       }
    9 B" F0 W* i3 _' ]2 ^! V8 p, g
  613.       itoken++;
    * L6 U1 k* x. ]& T. ?# u
  614.     }4 j7 x( v; W8 @# ?
  615.   }# I2 w& _/ \' A  C3 [# m
  616.   return NULL;/ A& r( e& a5 A) `1 C2 N& J4 G1 N$ ]
  617. }
    4 b$ X0 n; J0 {; N4 D3 p% H6 a

  618. / f# b% y- M- h* M* b9 o
  619. void ProcessProc(long Total,long Current)
    + r; g$ Q2 a2 i
  620. {
    5 V4 A# @5 m3 I6 Y, h& H. Y% l! T
  621.         MSG msg;  D  t5 V7 u0 u  f1 H% L% z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);# s% ~! \! r* c
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ ^( Q+ B) O' Y% m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 ]9 D  ?  I* W  B9 X
  625.         {7 d" p( F* D4 o; Y
  626.                 if(!GetMessage(&msg,NULL,0,0))
    8 G: i0 b" A. T
  627.                 {
      O5 g- [) C3 p* m% l
  628.                         return;5 i% p- L  A' D# b7 ~
  629.                 }
    / o9 \* p, c* [- k$ ?/ C" b, w! y
  630.                 TranslateMessage(&msg);
    % o. b# c, N- ?0 E. Q
  631.                 DispatchMessage(&msg);$ G9 q( r2 S9 d
  632.         }       
    , Z) t/ e  M/ E2 [
  633. }( E, i. T3 T( _  l) `  _$ m

  634. 0 z/ y9 D3 G" n1 e' y# M
  635. BOOL bFirstChar=TRUE;
    / h& j* c# y4 ?2 G& u. o& S/ P
  636. 8 b- G2 L' ^: U$ `4 }2 Q7 o
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 ?% p# w4 n$ @5 x% u* p! N- X2 f
  638. {
    $ X) m/ c# R" G
  639.         // TODO: Add your specialized code here and/or call the base class! S; A! A; `! p& t$ b
  640.   switch(dwProgramState)
    4 ~) |2 Z3 ~: A& X0 f
  641.   {4 ?+ d1 \' Q: T1 o1 W
  642.   case AP_NOTHING:
    0 b* @( k& L) M, h$ n# e/ p5 y
  643.     switch(dwStartUpSteps)
    ! V2 J* F# b1 T% a) T
  644.     {4 U' S$ ^$ a5 b) s
  645.     case 1:0 @" W: F0 }8 t: j& E" E. R  I* [0 `1 r
  646.       {5 z1 e0 A( j" m% v
  647.         int i;5 Y) W# ~7 U3 t+ M
  648.         CDC *pCDC=dlg->GetDC();
    ( w% G* K9 X7 h4 H6 r
  649.         HDC hdcwnd=pCDC->m_hDC;/ s4 O/ R) t8 _' j7 W, X, O. |
  650. //        Graphics graphics(hdcwnd);
    # N5 R' M0 {/ g9 Q3 B. M
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    4 x3 p+ Z1 b( r& ]* n
  652. //        INT iWidth=bitmap.GetWidth();
    4 Z5 ~& h6 F$ e
  653. //        INT iHeight=bitmap.GetHeight();
    & `! J8 o' z9 ^  c
  654. //        Color color,colorTemp;$ u8 q3 g  O  v' T0 c& j
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)2 c! c; _5 R/ O8 g: P- [
  656. //        {9 H- d- X4 d6 [! Z" ?' u
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    3 L" q1 d! H" `9 F2 N4 ]' c
  658. //          {/ q- w3 G8 E* y+ O+ N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    % I: C" M! q9 l* ]$ R
  660. //            colorTemp.SetValue(color.MakeARGB(' K+ ~% ]  w& r  o  Z. m
  661. //              (BYTE)(255*iColumn/iWidth),+ @# A* R7 N  s8 k
  662. //              color.GetRed(),
    9 ]: R: `8 s4 U2 q# r& u# C  |& ?
  663. //              color.GetGreen(),2 _7 Y; N2 w6 U9 S
  664. //              color.GetBlue()));6 I, j# ~0 |# X1 O9 N
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    7 t7 L; ~: V1 q: N4 F' f* \( R, A
  666. //          }4 o: |$ O" D" a2 E! ~! C
  667. //        }' g* a: a% e7 _. l2 G
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);/ p' k2 W0 V/ z9 j
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");) f; n( B  o) a8 |2 L; o( c
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    ) J* j+ l$ B3 n9 X' j! w& ~. h
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  g% r& e* S; A) a8 J$ E
  672.         for(i=0;i<240;i+=8)
    0 ]) I1 L; e& l  p/ D0 r/ K
  673.         {; q$ j8 n( [5 @* t) r
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);' N% \0 B' z0 Q% E/ z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);$ Q: W3 N+ Q+ Y/ ?- Q5 w
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    3 t. T' g- e( W  D
  677.           Sleep(33);
    9 A# B7 f& Z1 j6 ^  B
  678.         }
    4 K! s# k& P$ {8 _
  679.         Sleep(1000);
    # M' o, D* @4 l& r* y4 p5 T
  680.         for(i=240;i>0;i-=8)
    4 Q) y" s/ b2 c: X- o$ N+ z
  681.         {
    $ a; Q, \" |6 n# X* o
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! U% j! L9 J' V& B. Y
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    6 p3 U* h% p; F' z- T
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);, C. {7 Z. n4 m0 G# a' A
  685.           Sleep(33);) l. }; |8 U8 Q
  686.         }% Z' F, X) Y( l# y& P
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);( I: Q3 B- W: [
  688.         dlg->ReleaseDC(pCDC);
    - ^# Q! U; R. y  F
  689.         DeleteDC(hdctar);# H# w8 k1 ?9 V8 y3 I0 H+ k
  690.         DeleteDC(hdcsrc);
    * {0 v5 ~2 E4 f: o( h2 \
  691.         DeleteDC(hdcorg);6 }; s7 v. I7 T8 s# G+ o5 P
  692.       }7 b6 x; ]/ `3 R7 Y% \
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    + q! }5 ?. L3 o, ]5 g: N1 K7 {4 |4 i
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + l6 w0 \$ q! r
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    5 Y6 ]" u5 h4 q" R7 W, }( K
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    4 B% E1 c& y- c$ t
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! L! h$ v( v& Y4 m0 q9 U
  698.       if(!Dn.Connected()), E/ E& k1 x  @% A1 \
  699.       {
    2 `. W+ k/ Z# X& W: C+ \
  700.         dwTotalFiles=1;
    " s) H2 U$ c7 z% X
  701.         dwDownLoaded=0;
    2 n( j1 p" e+ x) y
  702.         bSilentStep=TRUE;* r9 k3 H  O. g" ?/ o
  703.         bCompressed=FALSE;
    7 X" {1 s/ v$ a* c+ f4 {  V
  704.         strExtLocal.Empty();8 |, M$ U2 a9 c
  705.         strFullName="readme.txt";+ H8 D6 B3 [4 V! {+ H) o
  706.         dwProgramState=AP_CONNECT;
    8 @! B* G$ R# `4 P* y1 S* f# u* p1 y
  707.       }
    8 s) c3 d# G6 L. K5 s% J- w- l2 |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();  K: H4 s$ W5 ]
  709.       dwStartUpSteps=2;, O$ A. D5 n% d, i
  710.       break;
    1 {$ t0 U3 x8 e6 F( V6 H
  711.     case 2:2 f! r3 `+ n$ b) t" A+ d  h8 V
  712.       {& B5 V  b3 U! r4 e
  713.         int iEOF;$ R& J6 ~+ T2 b
  714.         FILE *fp;$ M$ `  g4 g5 ~1 i& {
  715.         char szString[512];
    $ {9 m' n% f7 t9 G, }2 w
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    % S  ^* O3 Q! v) o0 q. f, r& ~
  717.         if(fp)
    : w" B/ B; Q9 s) z
  718.         {) ?8 t% v/ d/ o8 g7 M3 D
  719.           do
    2 O6 S1 y7 y* B* y- }" \7 ~' x
  720.           {
    7 D5 d* E- g9 u
  721.             iEOF=fscanf(fp,"%s",szString);
    3 z, j2 [# q' c  G
  722.             if(strlen(szString))
    ) ^2 y! K% Q2 [; Q# [' m7 ]
  723.             {
    # f9 b- C" h# L* G. U% p
  724.               if(bFirstChar)
    8 L" w: p) f0 j$ e, S$ F" ]
  725.               {# @8 \7 e4 h$ G/ [
  726.                 bFirstChar=FALSE;5 F% |- s5 c% M8 u, q
  727.                 bConnectIsBig5=FALSE;# h7 Z( c5 c5 ]  G/ h6 \* t
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;/ B6 i8 d2 {- }% `
  729.               }! [0 n- V( N* [, H+ O
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; F0 M, O( L% o3 T& o1 C+ f
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));' |4 r5 I1 H5 i9 g
  732.               dlg->m_ListText.AddString(szString);
    + o4 G  z' j: F. J
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ i7 a7 ~( B" q" n
  734.               *szString=0;$ z) q7 I: ~" F( Q/ y9 v
  735.             }- u  M5 K6 t% Q
  736.           } while(iEOF!=EOF);
    9 l1 s( \* M$ l5 d% l6 F6 q
  737.           fclose(fp);
    : G8 Z! F, \& L( S$ i
  738.           unlink(".\\DownLoad\\readme.txt");1 M' N  G2 d2 o! j3 K. H& _& C& b
  739.           dwStartUpSteps=3;
    ' P! M& ~4 Y8 a$ y; A) d$ {
  740.         }
    1 ?( f+ Y9 T8 p. F: A
  741.       }# B& T0 w( y8 J9 J; u
  742.       break;! `; F# \* W4 A6 x, `3 V
  743.     case 3:  z* }/ Q/ G, a
  744.       if(!Dn.Connected())# }& t& n6 v0 e, ]! W/ X* S% r
  745.       {0 z1 B& x, I6 l, O. z) u" J
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) z. {  ?$ J% D
  747.         dwTotalFiles=1;
    # x+ e( i' G8 _) H1 y
  748.         dwDownLoaded=0;
    0 G9 ~2 X" n& V' h- i7 M/ l( B) _! I
  749.         bSilentStep=TRUE;4 @( O0 I! `% k  [6 s, `; l% G: f. m
  750.         bCompressed=FALSE;
    . ~) E# v6 z* Z( K
  751.         strExtLocal.Empty();7 g% Q/ R" t- B, J, x  s# C
  752.         strFullName="checkversion.txt";
    - a5 k  P6 |: |
  753.         dwProgramState=AP_CONNECT;
    # I$ l1 m8 O, a0 K: Y. o  h
  754.       }) |' a' \# t( R7 Q
  755.       dwStartUpSteps=4;  R0 E: Q! Z1 F: C* g, r
  756.       break;% M' a1 j7 b, w: C9 J$ L
  757.     case 4:+ A: o7 D9 e3 D' C! P: B; S9 ~- B
  758.       {
    0 n, K7 A! q" W  Y0 I
  759.         FILE *fp;- m& ~# ?/ t% y$ K, m: A) `
  760.         char szString1[128];
    : b) K4 h  j, o4 T$ A
  761.         char szString2[128];
    2 D! }) a, J* W) J: W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    * ^# A+ I: B  V$ s
  763.         if(fp)
    8 W) L, g8 H0 O$ a/ K( m
  764.         {
    6 f- d& H, t) Y' e5 B# D% ]' a7 I
  765.           fscanf(fp,"%s",szString1);% \8 E1 I4 K  ^/ S- q
  766.           fclose(fp);3 v0 X  g% k+ w9 l% T- v2 j- h" M
  767.           fCheckVersion=atof(szString1);
      a; |# h, }* E% U1 u# p( t5 Y
  768.           fp=fopen(".\\checkversion.dat","r");
    ( w% X+ L% k* t
  769.           if(fp)
    . G% Z% M1 R5 w' c! \
  770.           {
    8 N3 ?: I" a& H+ V3 q9 Z
  771.             fscanf(fp,"%s",szString2);. A( K; F1 ?6 B) X5 u
  772.             fclose(fp);. \$ \9 }1 B" a
  773.             if(atof(szString1)!=atof(szString2)), f6 P( N4 \4 l- J; l
  774.             {7 f7 y- s8 W- [- w2 ^
  775.               if(!Dn.Connected())! w1 a, B+ }: _& m! T  S
  776.               {
    # T9 |) `' f5 h' w% z4 S) {
  777.                 bFirstUpdate=TRUE;4 o2 C) L3 C( L% v) b3 @
  778.                 dwTotalFiles=1;
    % Y1 c4 j% d4 a4 O8 q9 m( h7 ~% ?+ F
  779.                 dwDownLoaded=0;9 J& p3 W, @# \" o1 k! Z
  780.                 bSilentStep=FALSE;
    / X1 o" O, G9 l* p
  781.                 bCompressed=TRUE;4 Y4 d% r$ C+ z7 Z5 @$ K  I
  782.                 strExtLocal=".\\DownLoad\";
    . ^0 Q7 H  I7 Z" c
  783.                 strFullName="update.txt";/ K8 u- X+ N8 R* l6 v& ~8 ?9 |+ Z
  784.                 dwProgramState=AP_CONNECT;$ A1 ]$ G3 p( Q9 O7 z" T4 I
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 b8 Q/ A- y( ?; _. Z
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' C, ~' [6 k  ~0 H, A' U
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");' n2 t. k: T2 k

  788. ! ~& b8 v+ q+ `' A9 w
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, X* T) I9 c+ N& B. ]
  790.                 unlink(".\\DownLoad\\checkversion.txt");: D; J5 P2 e7 |7 E) C0 q
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    - a. ?+ V% M% f2 x% F* i
  792.                 {
    - `- ?, E. v& R; s1 ]' s, {5 r4 H
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");9 U8 `& b6 ?5 {: Y4 I) ^% l
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    " d6 V; u# r3 f! w, \- w5 C
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    7 U/ E) E6 I% |" b
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);0 d  I0 k9 a* w+ I! d5 L; K# H
  797. 9 r2 f% O0 F* M" a& |  N& \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");3 n3 e% K, `1 C1 y4 N5 K/ ]
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    4 I: H* x$ Y6 Q7 @- ^" p$ y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");2 e7 }, F* w4 o7 V6 u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( U3 K0 X+ M& [5 O
  802.                 }+ M+ o) g/ }+ R( V$ c) u
  803.                 dwStartUpSteps=5;4 T. m$ [, w* h" h3 ^* e
  804.               }
    3 |4 ^6 F3 w, o2 p
  805.             }  ~. U+ t. h+ I2 @" z
  806.             else
    - x" z' P, y0 g! T3 \
  807.             {
    * e2 g) f/ j* s
  808.               unlink(".\\DownLoad\\checkversion.txt");
    2 p3 M% o% S) M! w, |3 K8 f% Z
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* {# a6 |$ G% S0 n  n8 m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");+ @9 a4 A; K% l: `+ m5 Z
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 L, @5 i/ Y& H2 {- H

  812. 2 l1 N4 a5 }2 W' E$ e  j
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 L/ T* s+ _+ I5 f: A) Y3 h
  814.               dwStartUpSteps=99;) j2 {8 p& c( _" c( C# q# A
  815.               bFinishUpdated=TRUE;
    / s- i. U$ \5 z  b# |
  816.               bCanUpdate=TRUE;4 s$ ~/ u1 Q/ R' `, y& R$ `3 ?/ W+ r
  817.             }- k0 B4 P7 j  m- Y! d' U+ u6 r
  818.           }0 p7 D; |( y4 Q4 `" F5 a3 H. E
  819.           else& C4 u4 c9 i# |" m% g/ t. I3 R! G7 I
  820.           {$ N8 u" J7 M# p, g
  821.             if(!Dn.Connected())% j( H! Y8 \" R9 a5 F
  822.             {
    / P& G! J, Y. h
  823.               bFirstUpdate=TRUE;7 Q1 f' M' P4 i5 J
  824.               dwTotalFiles=1;
    9 W* N9 Q$ V  A9 o! L5 `
  825.               dwDownLoaded=0;: }  h6 M# x+ X' P6 ?
  826.               bSilentStep=FALSE;, v0 d( ]) W/ M1 y* x# ?# f
  827.               bCompressed=TRUE;: K4 ?4 m: [1 l, Z; \0 @: k
  828.               strExtLocal=".\\DownLoad\";8 F$ W* f3 x: T' _0 t
  829.               strFullName="update.txt";
    & {0 N! e& P8 U; h
  830.               dwProgramState=AP_CONNECT;. {% b9 A2 ~- ^4 d" r$ F4 t, Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");) o5 q0 N; c& a; j. k
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 \8 x: K+ c3 H! w
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");# ]: M  w0 x- e# W! B
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 g+ Y. p8 l0 i' Z, H4 F
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ' j/ ?  D& J: ]: ?
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)" Q7 r+ d- P! k+ f
  837.               {, o9 E* r8 x) V
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");/ E" z0 B  n5 X+ Y7 F$ C
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    0 j3 q. q% ?6 D8 S- z3 K( n
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");$ M5 P+ z) L* @  h; e* q
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, `6 G7 T% l& _
  842.                 8 o2 l) o0 X# F* E' M1 N* f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");. m2 a( K3 i# ?1 H3 B
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    * M2 p, G4 B3 i' y
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");% j& O: c9 h# K( n1 O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! M* E& n, F- [7 [2 n6 n- K
  847.               }
    & R$ g0 B# \, ]" l' Y
  848.               dwStartUpSteps=5;/ E" t; C8 x$ M0 U
  849.             }
    " n" m2 E2 N% ]) C0 h; C+ b) M
  850.           }, ~7 h0 B' m" e  D6 _' u
  851.         }
    " Q7 _) }4 C) w2 `* B0 k
  852.         else. h- q( B7 ^6 M+ f/ h
  853.         {
    6 U" w2 Q6 Z7 Z2 z+ |5 _, P3 ?6 a9 Y
  854.           dwStartUpSteps=3;
      H* Y& l8 f8 @# G4 O9 X
  855.         }
    ' s% a/ N6 l7 V6 e: x' ~
  856.       }4 b: C/ [1 C6 g1 c8 g; T6 M0 l
  857.       break;
    ! z$ J* l; W. U
  858.     case 5:
    . T) B; R4 M+ A; O6 r9 N# W7 @
  859.       {0 J! ?# C3 T- p1 Q8 t' E% n
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    - G! c* {5 z& F  {1 M( o
  861.         {
    + H6 S8 A& Q8 [
  862.           int opt_overwrite=1;: m/ b1 x  N9 i: e: q3 s; N$ O
  863.           int opt_do_extract_withoutpath=0;5 [8 i0 B: Q1 K8 g" _
  864.           unzFile uf=NULL;, X7 k6 d* B/ z8 `# u1 C! V

  865. # q3 A% _* n; ]1 ?2 n
  866.           uf=unzOpen("Wsa.zip");& f* l0 i+ `2 {
  867.           if(uf)2 {5 j3 C: V8 [  w3 z+ D
  868.           {
    , @/ b" n) G2 ~, o* w
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);7 n/ N7 {6 z  W& p' T% p1 t
  870.             unzClose(uf);" x- [; O6 c' I1 u, e- X  g
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");0 O- {7 _" h9 Q9 `7 S
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");) g" z8 i: V) b: b) J9 d% V. S
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");8 G9 N& K; E2 e% Q7 r6 R  `
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" k3 b6 I* l  K1 |
  875.           }
    ) e7 {4 x+ F2 A2 W) h* i2 O
  876.           DeleteFile("Wsa.zip" );$ N' r' S1 V  s, Y+ C4 H5 M
  877.         }
    1 F' a# `9 d* z  O& _. O! f

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

評分

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