CSUpdate.exe源代码

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

- t+ V" ~4 d5 n8 L1 T' V, ^
  1. / RevApp.cpp : Defines the class behaviors for the application.. v; C7 M, \2 r- W2 B
  2. //
    2 E+ O! j# D0 T0 n+ Z) G0 x

  3. 7 q& C5 }0 X5 d* g  O
  4. #include "stdafx.h"
    ; u1 L& O) q: f6 t8 t" z% h3 }
  5. : U8 V* V. D8 M$ g9 I" w" f
  6. //#define UNICODE
    8 h  F7 `# {* Z5 {: H" H
  7. //#include <gdiplus.h>0 c% `- C$ i- E0 B# o/ M
  8. //using namespace Gdiplus;
    . v5 _, i# q3 K* b. \8 X) t

  9. 3 E' }& W" `" e+ w
  10. #include "RevApp.h"
    1 z0 X; [/ u/ k# o% L* J
  11. #include "RevAppDlg.h"
    ) J8 {6 N/ t$ U" N( Q  B
  12. - \1 N# s: F/ o2 k  L4 f
  13. #pragma warning(disable:4786)
      ]; ]2 |/ q" q: @# l, Z1 k- t
  14. #include <map>! @0 P/ _% P# w: x- h' f9 h* }
  15. #include <list>3 h. D( _. X* F  C
  16. #include <direct.h>
    ! x  h' u; @- Z; t0 I

  17. & A* w3 C- ?: u. _% l: q1 D8 Z0 @  U
  18. #ifdef _DEBUG' K0 i! z$ [% G4 R# l5 e
  19. #define new DEBUG_NEW1 N; V9 {' Z# N7 m" L* {
  20. #undef THIS_FILE$ g1 u# P2 U1 B: p8 G
  21. static char THIS_FILE[] = __FILE__;, }6 s1 G& o( K9 G+ N, Z; Q
  22. #endif# x% l+ x% q! D3 Q2 a
  23. #include "SkinResDef.h"' }  \$ r& D7 P  Y" }
  24. #include "ChangeBG.h"
    7 I% \* A! x  b  U! o" i
  25. #include "AFXINET.H"
    8 P: R; J4 p- m8 I7 v

  26. 5 L+ ]% ^( E  p
  27. #define TRADITIONAL_CHINESE 0
    . a1 Y4 O3 m, j
  28. #define SIMPLIFY_CHINESE 1; f' X! {! h9 ^: n& M& ?0 p
  29. #define ENGLISH 2
    # w! l3 T; v1 r: c
  30. int m_iLanguage = ENGLISH;2 A4 l6 k" [" N4 [" F+ R
  31. /////////////////////////////////////////////////////////////////////////////, |1 N3 G  F, o- k8 k' k
  32. // CRevAppApp% j" Z9 N7 @4 R  b" J; `

  33. $ [2 q6 v( t% A7 L1 @2 C7 `7 w& [
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)+ W3 R- q. G' B4 ]) a! ?
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) t7 z/ b0 a9 i" I5 P- a; @# K
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ! v8 j: q9 x) T, }4 D
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    $ h* \/ |# e/ A/ v
  38.         //}}AFX_MSG
    ! n& O9 y$ D1 M4 p3 a% c1 i" f( Y
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    1 R- X6 I, K' `) D* _: B/ t+ v
  40. END_MESSAGE_MAP()
    & o, K' |3 S0 `# ^9 I, ^! J
  41. : J$ N' n# [; Q/ H6 I# d8 F* w+ Y+ M
  42. /////////////////////////////////////////////////////////////////////////////0 f2 F) Q: k5 o7 s, _
  43. // CRevAppApp construction& c8 k/ G" |% ^# \
  44. ! V! T* n9 o3 r! k% O  Y) g/ X+ u
  45. CRevAppApp::CRevAppApp()
    ( [8 Z  I' K3 Y1 U0 g# n% c4 `3 H/ G
  46. {
    5 {; k: K9 {* C+ [7 I* ~
  47.         // TODO: add construction code here,
    / g6 Q" T$ i; x& u
  48.         // Place all significant initialization in InitInstance
    * p' I# j6 Q1 F; B+ `6 \
  49.   bDisplayIsBig5=FALSE;
    4 B3 ?) Y0 H4 o5 d+ K
  50.   bRestartUpdater=FALSE;$ s9 H, B- H) G+ [7 H! @
  51.   bFinishUpdated=FALSE;
    ) a6 _5 X3 j* w3 J$ v
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ) j- v: c2 \0 e
  53.   InitChangeDataBig52GBKS();& ^# a4 Y0 c# O
  54.   InitChangeDataGBKS2Big5();
    : B- x! G( s  Z7 E% Q3 c# t% d+ r( [
  55.         //
    1 Z0 V3 \7 s  I$ |$ t2 _
  56.         bClickRunExe = FALSE;# o6 y/ Z* G- k1 v3 F/ w0 b
  57.         //2 ~, r, c' X; p) _
  58. }
    * {2 j: z! s$ P' ]/ _' u
  59. ; l! v  X/ I- S8 d6 v# g
  60. CRevAppApp::~CRevAppApp()" H# w$ G) a% L% @
  61. {
    * @- o4 e/ o# n$ P
  62.         // TODO: add construction code here,; m. L8 a& R* |" G2 I" a- L( M% r
  63.         // Place all significant initialization in InitInstance
    ; c% U6 @. f0 t& `# T
  64.   EndChangeData();) I1 `* P( g; _# G+ n
  65. }
    / v$ ]& e5 u# W8 L# M* G* ^1 R

  66. $ S7 x8 y( _- N7 `4 \; n
  67. /////////////////////////////////////////////////////////////////////////////% B0 Q9 X- q+ p# ]
  68. // The one and only CRevAppApp object
    1 a, J6 |. b. X% d

  69. # ?7 i5 x5 V3 E- P3 i
  70. CRevAppApp theApp;1 B) g- }$ `" M
  71. . a  Q6 T; U! @, l
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    3 V% ^9 C, C# K5 }: j, h5 j
  73. {3 P0 Y4 ~* A3 K( a- o) A( P9 `1 t" X8 s
  74.   int iEOF=0;
    * p, @- ^: N4 t
  75.   char szTempName[MAX_PATH];- ^+ y+ y! G4 |
  76.   *szFileName=0;+ Z, L) V6 E( ~; F5 {4 A4 J1 D
  77.   iEOF=fscanf(fp,"%s",szTempName);
    7 T* w1 P. o# t: e/ {" s6 X
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('), O! [  ^8 M5 D$ G) H. _2 |* {& }
  79.   {
    ) t! r$ D, {2 d9 X* q
  80.     strcpy(szFileName,&szTempName[1]);  y9 X7 s  W6 z0 r/ Z" a
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)4 o; q) z' M8 |
  82.     {
    % i( c) |$ c0 f7 k- W
  83.       iEOF=fscanf(fp,"%s",szTempName);
    # D. x5 @4 z. T; i$ V
  84.       strcat(szFileName," ");
    & L0 @1 Q0 V, T8 j7 o% c
  85.       strcat(szFileName,szTempName);
    % e+ L7 f. j" Q4 P7 U0 b4 a
  86.     }; E* J+ Z6 J# q' `) ?5 q4 J; W! X
  87.     if(strlen(szFileName)>=1)" v) E2 ], J1 U
  88.     {, }. F& `4 V9 I( Q* q6 w
  89.       szFileName[strlen(szFileName)-1]=0;0 o. O: M; y1 [/ L) H2 z: w9 i9 ]; R
  90.     }
    2 U/ g, y$ w3 e" r9 S2 ~7 Y% Q
  91.   }
    $ q1 k8 C; Y& f+ \% D5 q* {
  92.   return szFileName;
    ! C5 x' W; N0 Q$ ^0 b  n$ b
  93. }+ a9 w  ?  }4 z# X

  94. - w6 I* Q& i+ N  z/ x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)6 v' |9 ]( ^, U* Q7 f8 q; w
  96. {; F6 Z1 G/ X$ R5 K& R# {
  97.   FILE *fp;' Z' W$ B" E3 c: ]
  98.   char *key=NULL;
      x9 A3 g* w& J: d* ?
  99.   char version[MAX_PATH];" F+ C3 ^; \0 T" C+ k2 ~" j
  100.   LPUPDATEFILE file,olds;: ^: i. |" x1 \+ a3 i
  101.   std::map<CString,LPUPDATEFILE>::iterator p;9 ~: p  |( b( x: F* U4 ^
  102. ( m% W9 j# j! R4 E2 E. ?7 v
  103.   UpdateList.clear();0 c- x3 t# A% [( e2 w
  104.   UpdateFile.clear();* H' p$ f$ ~/ E: y) w! P
  105.   if(GetFileAttributes(filename)==-1) return false;/ N" z6 k+ z9 I' m  T
  106.   if(!(fp=fopen(filename,"r"))) return false;' t+ _- v: X2 E/ k4 a
  107.   fscanf(fp,"%s",version);( w- I/ x* A5 r. d2 y# C
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 r/ r1 M7 s+ L" ^# p2 q7 H* U
  109.   while(fscanf(fp,"%s",version)!=EOF)# ]2 x$ @) i9 }
  110.   {! G$ \* G& J9 u2 h# B$ P" f' g
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));4 q6 X2 @. |( w) r! i, O3 Z0 C1 q
  112.     fscanf(fp,"%s",file->path);
      h& ^- l6 O3 M: n. a& T! \
  113.     ReadFileNames(fp,file->file);. h. T0 ?  ~; T9 q" K
  114.     strcpy(file->full,".");% v1 G9 P7 U& m4 z
  115.     strcat(file->full,file->path);
    ( G7 h4 E/ c0 w6 [2 @
  116.     strcat(file->full,file->file);( Q8 G0 p% e4 F5 ~2 d' i0 B
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    8 w3 Z. v0 g7 z; W: x0 u+ g
  118.     {$ e% n& Y0 B; a3 m
  119.       file->vers=(float)atof(version);
    4 D5 d; o6 H0 |5 c$ J. t: F: W& }# \
  120.       UpdateList.push_back(file->full);
    : y5 w2 v# {: h0 {( G* G: h1 x
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));4 o" z, f7 a" D  p9 ]
  122.     }
    " L" s- a: i/ d6 t& Y8 U8 |
  123.     else7 R" c  t6 B0 T: p
  124.     {8 u, w, }( h, f7 Q
  125.       olds=(*p).second;8 z. e, n1 D6 l  E3 G0 l
  126.       if(olds->vers<(float)atof(version))' g* M8 y4 G9 c% y9 E4 j, T
  127.       {% c: o3 U8 b. ]5 M. q/ Y! j9 ]
  128.         olds->vers=(float)atof(version);
    * Y, f7 P/ g. E5 O! `! x! y' |+ T( C
  129.       }
    & z- ^! F* @, X# E$ R, C4 F
  130.       free(file);
    2 F) @2 s7 I. ]/ K
  131.     }
    1 N0 ]  i2 h# g8 U. ^$ v
  132.   }, ?' q$ Y+ \1 F# U
  133.   fclose(fp);/ C  D! V- f2 r: S) i
  134.   return true;
    ! w2 e; ~3 c7 J
  135. }
    , Q& g4 ~1 [2 B, u

  136. 1 Y* |1 F$ l2 n+ s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    0 M- g+ T1 \5 H) M$ b1 i: C! C  p
  138. {
    9 I+ w: P1 }3 r& Z
  139.   TCHAR  szFull[MAX_PATH];
    $ A/ z4 S- z  C* L7 _" L! f. b
  140.   TCHAR *token,*inter;$ f4 ]  t4 {3 l1 l+ q/ ~: s
  141.   *szPath=0;5 P4 R8 V2 ]% u( |& E. `
  142.   strcpy(szFull,szFullPath);& I2 E9 W4 V  y, n  f' O
  143.   token=strtok(szFull,"\\/");; w7 z0 m* j9 f* @
  144.   inter=token;5 h/ y# o/ L! b, m# G8 T
  145.   while(token=strtok(NULL,"\\/"))) m# T0 z- j5 h) S6 R! W
  146.   {
      b4 B' i5 U+ M8 d0 c
  147.     strcat(szPath,inter);
    1 h% S. Y# i7 P/ g2 X- Y2 k1 o
  148.     strcat(szPath,"\");
    ( Z: s: F. R; h* G+ `) r
  149.     inter=token;
    ; a& J# n% ~3 O% B- P" f0 H
  150.   }  P: s+ I- @$ Z+ ]% R& f, L7 d) P
  151.   return strlen(szPath);
    3 G/ b0 o* r( h4 R, T
  152. }
    7 [" U! R7 \: E( y0 c! \7 B

  153. 9 g2 ^9 R3 J+ V% y" A
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)4 u: w8 d* s0 }; m
  155. {. D2 I! J( Q4 U/ {4 N
  156.   DWORD attrib=GetFileAttributes(Target);9 @/ @( M! R1 \1 O" S& h0 x
  157.   if(attrib!=-1)
    7 ?7 {" d  V3 }! B6 n0 _; k
  158.   {
    6 G: l& n6 a. X/ Q6 \8 l8 Q5 }& L
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , I+ l$ e& E! W5 V+ n4 G' F6 {. n
  160.     {
    ! Y* d6 c1 o; |
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);0 z( z7 I4 f) t/ S
  162.       SetFileAttributes(Target,attrib);
    2 V, p+ T/ ]+ E: u; g% p: w
  163.     }
    ' A# D: D) q9 T& n* M0 Y
  164.   }
    ; z  f1 y5 M/ U" ^  I1 E( C
  165.   CopyFile(Source,Target,Erase);
    + u8 @4 S! }: L$ x$ ]9 r
  166. }
    2 A$ X& p2 w/ j3 j( v. t, [# v6 k5 d

  167. / N4 r" \# o5 X+ x) p
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...), C; j- }/ g4 W! G" t9 l" b( b
  169. {: `$ r/ ]0 f7 G) e9 v" V* n" U
  170.      FILE *fp;
    6 a: S6 j  r/ W6 c( p9 o5 v
  171.      char  szBuffer[8192];9 ^( h* w& u* Q! h
  172.   va_list  argptr;
    9 i/ v! E  _' e3 R2 k) S3 I8 a

  173. , G9 ]1 K% L6 K6 ~1 s
  174.         va_start(argptr,message);7 d1 p7 F2 |5 g0 _# l0 i# {1 @. ^3 X
  175.         vsprintf(szBuffer,message,argptr);- y1 U& i' e  ^( y0 k8 v
  176.         va_end(argptr);+ a. n, K( W( A/ i' K
  177.   fp=fopen(FileName,"a");9 O2 ?. T, R: Y' o3 O; d# @# p4 `4 j
  178.   if(fp)
    0 k6 Q0 s. g& w0 v) G. O0 X# \
  179.   {# M$ P  \: `  a7 N8 i
  180.     fprintf(fp,szBuffer);8 R. w- _( d4 O4 h' P) Q
  181.     fclose(fp);1 v1 W3 e# _& [
  182.           _flushall();
    : W6 w& q  `* i
  183.   }
    ' z4 \" s$ a& M
  184. }. ?- n+ y4 T6 N6 t& A$ Q
  185. 1 y$ q! @3 J9 P  c( Q  B, Q' S
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    8 \$ m0 `1 w( _# H
  187. {
    * x  A& \0 `1 s
  188.      FILE *fp;
    4 w' N. W$ O; C, F% L
  189.     DWORD  attrib;# i7 ~. i7 A, `0 `# f: m$ K% U
  190.   attrib=GetFileAttributes(FileName);
    $ H; J5 e8 |! A1 u' z/ n
  191.   if(attrib!=-1)
    + T  `( e6 o0 ]6 _+ @; I& x7 ~
  192.   {5 k( r3 L8 L4 s2 J
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ! I, D' d- l+ V% p/ Q% l5 t& E! o
  194.     if(!SetFileAttributes(FileName,attrib)). X2 \1 B# }' Q
  195.     {  `, G3 C1 N& Z4 f
  196.       return FALSE;! }( A* d7 \" p" o" l9 L  w1 R
  197.     }/ q& L) Q6 z. n$ K
  198.   }7 O- c; L( x/ V1 x/ J5 }0 Z* t/ Z; Y* g( k
  199.   fp=fopen(FileName,"wb");
    1 B% Y6 g) r9 x0 g$ u, [3 T0 S
  200.   if(fp)
    ( r- i0 ]: d+ Y# f% |1 b
  201.   {$ ]0 ^2 w) T2 ~
  202.     fclose(fp);
    + K- G) Q- L+ k' p
  203.   }) L9 C9 E$ {4 J  f. r, `
  204.   return TRUE;
    8 C8 E4 t, i4 m! G
  205. }3 x6 t, u0 R& x! P' H
  206. + y2 V" G. ?$ k" w
  207. BOOL CRevAppApp::UpdateLocalVersion(void)0 Y0 A2 m" R! p4 ^; A
  208. {
    , g/ p; r; @( f$ R( A" i
  209.   char filename[MAX_PATH];
    ! Y0 k: f# m6 ~9 L8 B) _0 O
  210.   LPUPDATEFILE file,olds;
    5 P0 C* |/ D) h, N$ b( N4 V
  211.   std::map<int,CString>::iterator i;$ ]* f8 i  i7 [+ H; ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;3 j! ^1 ^/ B$ V, |( @( `5 Z5 d3 k
  213.   std::list<CString>::iterator l;
    8 p! J2 H  n' z& A& T- Z0 C

  214. - F9 A/ K0 n4 k0 j/ e" E
  215.   if(bFirstUpdate)
    ! h$ M! S6 G1 f/ z* e
  216.   {
    ; ]: _: ^: u" G+ c- f- e8 r
  217.     dwCurrFile=0;
    - M3 j) M. p  I) P9 h" N' i. [
  218.     bFirstUpdate=FALSE;
    6 A: c2 t- L3 N" K! _- t
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 z  V! N! r) j  P+ Q  R' k
  220.     {
    4 D: {1 R$ E( g4 d8 P& i, ~6 Q
  221.       dwTotalFiles=UpdateLocal.size();
    $ c4 q  Q* d4 \* M) a4 k
  222.       dwDownLoaded=0;$ E9 P% q7 F+ n4 g5 [6 K
  223.       bSilentStep=FALSE;( E9 i- }% d0 B3 [# ?! T/ J( W
  224.       bCompressed=TRUE;: e: P' c) _, T5 q) t4 E) ?
  225.       strExtLocal.Empty();' p5 m: w- i6 s% `
  226.       strFullName=(*i).second;$ v$ C7 d& `+ S8 e/ c
  227.       dwProgramState=AP_CONNECT;
    7 C, v9 N1 O7 t$ s( l6 i
  228.       return TRUE;
    # Y, A1 M2 _. ~# P4 J$ j
  229.     }. P3 K) O8 y  _. I* @5 G1 \) ~
  230.   }# U5 f/ b5 {) X) W- s
  231.   else if(bRestartUpdater==FALSE)
    7 x  h3 t1 y0 h5 j
  232.   {( L6 B4 K* }5 D- k! P! L
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()). t# Y5 w& T, Q  K* C) {
  234.     {
    / V# r+ P% `: w; y) l. Z: j/ P6 Q9 Z
  235.       file=(*p).second;
    - L: R1 Q) M+ X) q3 P
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    8 [( b$ T0 a) |
  237.       {) m8 j5 Z/ O, l% I4 D# A
  238.         olds=(*p).second;
    9 b* J; A" z3 R! ]2 O
  239.         olds->vers=file->vers;0 G; ]6 ?( Y2 F( H" t* k- u$ _& v
  240.       }9 o0 `# Q  y7 J
  241.       else" Z3 w) j  b8 k( t0 T
  242.       {
    6 Z9 [0 \4 e3 V6 e
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: H- o, o. Q+ R: v$ \; Y! t
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    % K3 Y2 r2 T# L3 T8 J7 C. X
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    9 G$ f% z: q0 Q5 _! G
  246.       }: ^1 `& g% a4 g0 B/ k
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    4 J* V) `. Q4 E/ y. c. S. m) B; e
  248.       sprintf(filename,"(%s)",file->file);
    & _" y- ~7 {8 i; |& Z
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! z3 }7 `, ]  x  Y; ]0 q
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    & z6 _0 k' l  z1 U  l
  251.     }
    7 ^, ]# x7 S; t- s  U
  252.     dwCurrFile++;4 z5 F- m4 o% P
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    9 F9 I0 ~- T; O* S
  254.     {
    : R; X0 l8 A0 Z, ]8 b9 J! S
  255.       bSilentStep=FALSE;
    ' V  Y% S0 x6 ?9 g. b* s/ s
  256.       bCompressed=TRUE;+ b$ `2 f4 d$ t  i; d
  257.       strExtLocal.Empty();
    ; e+ x$ G: G) [% j
  258.       strFullName=(*i).second;2 T4 B% O9 U$ i  p& K6 F" F5 J9 i
  259.       dwProgramState=AP_CONNECT;
    ! O6 O9 A* p- u# Z* `; b* f
  260.       return TRUE;
      p4 Q/ e2 M6 g/ w3 w8 ^; F
  261.     }% @9 i6 [/ i# j6 h  `1 ?
  262.     if(!bRestartUpdater)  U0 i$ K3 g( W
  263.     {
    . A7 n6 S4 B$ s
  264.       int iCurrSize,iFileSize;
      l3 q# k7 z0 v
  265.       iCurrSize=0;
    6 p9 m1 H9 O/ w% @! R
  266.       iFileSize=UpdateList2.size();
    7 d, D# s; i. C* P8 c! D  w
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    , E6 e( t9 w5 Y2 |( p
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' m  B( E/ v$ O- V, _
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    " e2 T( K/ l; x* @+ T
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 g1 f0 x$ K0 f  x0 q
  271.       Fclearf(".\\update.dat");
    & j% M: G/ S7 A) u0 C( \" Z: d
  272.       Fprintf(".\\update.dat","Bloodyf\n");( H# K  X) u; L3 I* {- V( S! Z
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* n" r* N2 ?) Z+ j( S# s+ B+ s/ J
  274.       {
    ( [7 m: N; Q0 H% N' N. ~
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())+ e7 G4 G/ c7 @. f  A% F
  276.         {" O4 m7 T, v' m$ R  k; a8 u0 Q4 @
  277.           file=(*p).second;2 Q3 I) H% p% L2 D
  278.           sprintf(filename,"(%s)",file->file);
    9 L- t/ w+ }1 S2 G, N' J
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);" F8 Z% n0 ^3 F4 A( W: h( P
  280.           iCurrSize++;
    + \4 p! L1 L- W0 }
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    2 I# {5 b- Y2 R3 g7 \! `
  282.         }
    ; g2 q. p5 o# e5 m
  283.       }' g% U  Y" I- V6 i; F6 e# v/ S
  284.       unlink(".\\update.txt");7 w) z  E, P" t7 A
  285.       unlink(".\\update.tmp");
    & r8 x1 j& d8 _
  286.       Fclearf(".\\checkversion.dat");
    % M. R3 @( O5 c+ a8 q
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    3 f% q( P  b7 F3 h6 E
  288.       if(UpdateLocal.size())4 ]3 Z" ^; O9 j: i- ]
  289.       {
    : T+ s! @# `1 }& M
  290.         UpdateLocal.clear();. U$ P; W; |2 U7 I* E, _
  291.       }
    ! v& b8 n# {5 O9 P
  292.       if(UpdateFile3.size())
    $ V- z, C% Z/ D) s
  293.       {
    7 Q* f1 B0 A) F! D( ^* v. Q" M4 N
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    2 T% r. N$ J) H
  295.         {, C% W5 T5 ^6 v! J; v. ^
  296.           file=(*p).second;* m/ P9 [8 o$ e+ _4 j7 x+ A, a9 @
  297.           free(file);
    * }: k* a9 |; E7 U6 ~4 v" X/ ]1 q- ^1 W
  298.         }
    ) a4 ?+ @: c& F% F7 q0 t$ T
  299.         UpdateFile3.clear();9 S, x7 W( R8 v- _1 ~/ Q( q) m, n2 u
  300.         UpdateList3.clear();0 F, A) o2 f: n. @
  301.       }& a. G( W% l' a; }7 Q4 d
  302.       if(UpdateFile2.size())7 _1 G1 o/ N/ w" y" o& B
  303.       {$ i- ~5 Q" w6 \; c$ x
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! h! x, ~, L7 t# U# i# `
  305.         {6 n: c3 d# P) @
  306.           file=(*p).second;
    6 O+ W/ v5 O3 E+ W$ }$ ?
  307.           free(file);
    ( Z% [; Q- t7 V4 t
  308.         }5 U" B( [: G" I+ j- R+ }1 {# P
  309.         UpdateFile2.clear();
    & X) y' Z4 D) @4 A
  310.         UpdateList2.clear();
    ) H3 J( B* G; J7 k. j& c( q9 c
  311.       }
    6 B6 H, n# ~% u9 s, h
  312.       if(UpdateFile1.size())0 W2 V9 }' Q% g( T. \9 k
  313.       {# o( c  j, c9 d7 g
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    * h5 h  x/ z/ B/ Z! B
  315.         {+ ~1 q. d: T) p' v8 G/ p
  316.           file=(*p).second;
    ' f, E+ l# a- @, e2 m
  317.           free(file);
    5 {: w' ?; |4 b. H1 V  D
  318.         }; L$ P4 y7 w4 A! h
  319.         UpdateFile1.clear();
    # A( Y  J6 Z9 R5 D) R2 q
  320.         UpdateList1.clear();
    1 I6 |4 b, W( d. x' q
  321.       }
    % @( k1 ~$ {  g. m
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));' {  i/ G& O# y% W0 D
  323.     }
    9 ?4 }9 Q6 ]7 k7 B6 b
  324.   }- |4 N" L8 [8 n" ]
  325.   return FALSE;" ]( ?4 Z. v9 Q( l9 q6 Y, S
  326. }, U( ~7 m5 e! P
  327. $ `0 J% r9 a; q! ^) g4 F$ b# i
  328. void CRevAppApp::ClearAll(void), a+ Z! U% N* O$ `: y2 P0 v; O+ G
  329. {$ ~& s9 S& m' u
  330.   LPUPDATEFILE file;
    ' {- ^& h. A0 @0 e: T
  331.   std::map<CString,LPUPDATEFILE>::iterator p;# \  f6 {3 N: A
  332. 2 N' T. z# h1 D5 t* P. y! m6 N- s
  333.   if(UpdateLocal.size())
    2 N/ x1 b! ^. ?6 y- Q( W
  334.   {& W) S! S0 h8 P  t: e
  335.     UpdateLocal.clear();
    6 q: W; ^0 n5 ?/ a( n) l9 M
  336.   }
    ; }: D- a6 ?1 n3 a# T1 |% r" V
  337.   if(UpdateFile3.size())  D/ t$ M) ]/ j
  338.   {
    1 I# U. ~: G: z1 ^! \9 h
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 Z% Y" o/ ^: q2 i* @) w% j" c
  340.     {' u4 T# \# U" q& c/ A
  341.       file=(*p).second;
    4 O7 L) Q6 ?: R1 k4 J
  342.       free(file);
    ; M9 y! |2 Z6 Y; f% \* W1 A" j- \
  343.     }
    ' e3 s3 T0 e4 V( R
  344.     UpdateFile3.clear();
    0 y9 i# @- b; C( K; {- |! u8 D
  345.     UpdateList3.clear();
    4 \/ w. |( J+ \
  346.   }) L, ]( C. i. {- f$ ^$ O
  347.   if(UpdateFile2.size())% E* j( ]+ n8 C& P0 z+ k- h1 k
  348.   {! a6 Y) u4 j" ~% W
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)9 U8 e0 F7 r! a- t+ Z
  350.     {
    , `: d9 a4 b$ y% o; z5 C, x
  351.       file=(*p).second;* p# v) Z. Y; A
  352.       free(file);
    ; E, G9 z+ q7 s$ t# P5 Z
  353.     }
    ( v$ @: m& f& H: i
  354.     UpdateFile2.clear();1 h, x2 B$ I  d5 l2 |4 u- f" |
  355.     UpdateList2.clear();
    8 k7 G* P$ H. i! b
  356.   }4 H- \, o' j8 {
  357.   if(UpdateFile1.size()). K/ J2 W+ a1 K8 m( \5 d4 l
  358.   {* b. ?1 a5 I& ^  `- @2 m6 z' Q
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( K+ f4 `7 s- ?  M! e& y+ g8 s7 H
  360.     {
    : f" ^& T( V8 ~, S
  361.       file=(*p).second;
    ' M* q% j4 V' z! c! q
  362.       free(file);! @5 g' W' k0 S8 E$ v- ]+ U
  363.     }& r! r/ Z& F# r. n4 Z3 Y7 w  X
  364.     UpdateFile1.clear();* S" {* x3 K( N6 o9 L
  365.     UpdateList1.clear();! k6 R5 i6 ^& ]/ ~3 i. e! C4 G, V
  366.   }
    / G# M. ~2 n1 c5 F
  367. }  + g9 C3 }2 m& A) b+ @  Q$ Y6 X+ z1 I
  368.   
    9 O) m  C( c9 M9 F* v9 D1 M. ~" {
  369. BOOL CRevAppApp::CheckLocalVersion(void), q7 F; F# m& ?  s- H
  370. {! D. _- q, T' J$ E" f
  371.   int c;8 Z4 }! y9 ?% o1 }
  372.   LPUPDATEFILE file1,file2;
    . M0 W. c1 ^/ B; o9 c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # ~5 e6 z1 P5 k( U; y
  374.   std::list<CString>::iterator l;9 v$ u- |: X+ G+ ~! L
  375. : e* b: T1 o  O
  376.   UpdateLocal.clear();& ?- ~. x3 s; `3 A
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);0 X( @$ |  T, M
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);1 `! K+ t+ Y) U8 M: q' J, [
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);2 Q  D# T8 r5 u
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 D& l: D; V+ K( [
  381.   if(UpdateFile3.size())
    $ N9 S  L( M6 i! g0 `& L
  382.   {
    / L( f* ~' [$ s, w
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)) S) @5 l5 O9 v
  384.     {: ^  {: L& o1 k1 |
  385.       file2=(LPUPDATEFILE)(*i).second;& X' z& b8 F; S& Q! P1 y
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * x2 e3 Y0 _4 w( f7 f
  387.       {
    + t3 b0 T6 c+ T0 k% K, N3 l
  388.         file1=(LPUPDATEFILE)(*p).second;4 T2 h7 h) K5 Y
  389.         file1->vers=file2->vers;
    # ]% D) ^; j, i' u4 F  j
  390.       }; t$ V2 P  l9 h- l2 O
  391.       else
    9 l9 ]0 M. H/ g' w; v8 g6 p
  392.       {
    3 `+ b% r* A5 `7 o9 T8 `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& c2 m$ Q. [( F/ ?8 ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    2 t/ F  }, e: l9 R3 e, x
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    7 \1 V/ Q$ ~7 P) O2 j+ k+ Z* q
  396.       }, M; T7 F, h, Q" n4 N
  397.     }
    ; ]2 S- E, h: U0 c. z5 t: V% K* q. y
  398.   }" q+ h# n0 g3 I# Q1 n( j) M- \" N# k: B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 R+ I5 A  B- x3 ]' B* p# @
  400.   {( b* M0 R: K; Z
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())4 ]! q! `+ Y! q  y6 t# S+ |5 D
  402.     {
    % D- z3 _3 g3 ~" w% R
  403.       file2=(LPUPDATEFILE)(*i).second;# m% L2 x* l0 ~- V7 E) p4 Q
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    . a) H9 w9 Y- i$ B1 [
  405.       {
    5 x  S, _8 T# [0 `
  406.         file1=(LPUPDATEFILE)(*p).second;, x  r$ t1 `/ ?/ O0 w8 ]# N8 f- r
  407.         if(file1->vers!=file2->vers)4 L, ]4 p8 r  K$ q! G
  408.         {
    $ z, m- m2 }! A4 k4 U5 z
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));  [& d% O  |' |; ^" n
  410.           c++;9 D. v- h5 t4 ?: o
  411.         }
    ' a1 y% ]5 m  i- J! F( a7 s8 O
  412.       }
    * W. Y2 u0 d5 Y5 x+ B' b
  413.       else2 O/ X1 K# V3 |; j( [
  414.       {6 D5 q! I/ k0 A0 Q! H' |
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));# v* |8 p" c3 ]1 g* h: `4 x
  416.         c++;
    ( ^( L& Z; D8 L! k
  417.       }, _* [; ~- p/ c5 k
  418.     }# W# c' d! U* c9 C5 p" R, [6 Q( u
  419.   }
    / |3 b1 Z. N' D
  420.   unlink(".\\DownLoad\\update.txt");% n  v) E. f) g6 g# F
  421.   if(UpdateLocal.size()) return TRUE;
    " A) n- |* }8 P4 p& |
  422.   else                   return FALSE;0 ]+ G: U0 w$ j. q8 Z5 {8 }* U; }8 S
  423. }7 r- C4 m& y. A2 H  D0 \6 w- d8 U. A

  424. 8 R. g  A) g% Z$ c' {5 o
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"8 T5 H% ~4 y/ C, d4 j* M6 D8 t
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ! z% S1 g2 V" s8 V% x1 u& t

  427. * ^4 m) O% J7 M. T' v9 f$ }7 }/ d
  428. 9 J0 x$ |0 `: h1 w1 R- r3 r8 h

  429. 7 n) f4 F$ n3 g
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    & n$ B1 J1 o: B5 b4 o4 j5 n. J" Z$ Z
  431. {' U. A3 P: a5 e' k/ f
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ( z% t+ B3 K# Y2 i
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) i+ m4 F: @+ ?( ^( q4 Q" D$ A2 X5 [" Y
  434.   {& O* _- z  B) o
  435.     char szLanguage[50];( b$ j$ K4 C3 _$ {3 T- D
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # |/ A3 ^! s' \3 l  O
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) f- T3 w3 U8 f- A& `9 _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;6 z) B& V1 x# `4 \. o% W
  439.     else                                   m_iLanguage=ENGLISH;6 O, a8 t0 ~! ~  Q8 Z( E
  440.     char szRegister[100];7 m; E& q- E4 W& ?4 Q
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");, `3 l' p0 X8 }8 \
  442.     strRegsName=szRegister;' ^0 O7 Q3 C/ s( r
  443.     char szPatchURL[100];
    ' b+ r1 Y( s6 s6 L/ {
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 E$ r. I9 N/ k- F  I
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);' d% Y4 X4 s# U; n1 n  |
  446.   }
    - i( k7 ?( S9 ^3 V2 G) V& K
  447.   else
    . r8 y: u- e9 S  r
  448.   {+ l( C" y+ R+ V! h+ H& \
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);# x$ M5 C) D. d6 c! _2 i. e% P
  450.     strRegsName=DEFAULT_REG_URL;
    1 h, {6 y+ \8 B  T. @5 ?5 ~5 y
  451.   }. M/ U% `+ ~" o2 h/ i5 ]$ H. v
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    / [2 Q2 D+ N3 t9 ]) f. V* M2 X
  453.   {& T$ i3 I5 g; `, _
  454.     char szIP[50];
    " Z1 x, t7 w" O2 B" }
  455.     char szDIR[300];- k) F6 l. @6 Z2 U
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
      z" r; ]7 F0 v4 t) v9 ^; i7 p
  457.     {) I& f+ b+ G) I
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    7 n6 @, V% x" ^$ ?+ d" P
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    8 n& M- r  s$ E# g7 z
  460.       strHostName=szIP;
    9 E2 O8 J9 n# p% s
  461.       strHostPath.Format("/%s",szDIR);
    ' W" v" N, @3 o- ^0 k( Q/ t
  462.     }  N& L: q, p- L6 @4 |! f
  463.     else$ T' F8 z% a: w* Y
  464.     {
    3 \7 f/ r! e) y- |+ M, n* M' [# k  t
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)* ~( C8 V3 D7 n# c0 O7 n0 A! a
  466.       {
    7 U/ `6 W* ^! j6 i6 D. `
  467.         char szLanguage[50];
    3 W' ]$ e% i* x: ?
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* E6 [" o$ w7 q# _- A7 W
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' R3 w7 b* e5 I5 D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    2 Q( V8 X  k+ k. G: N& ?- a
  471.         else                                   m_iLanguage=ENGLISH;
    / B' x" b! U$ u) P2 [
  472.         char szRegister[100];
    + P/ ?' N7 w5 i1 r
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    5 t/ h; p* ?- z: g3 X
  474.         strRegsName=szRegister;* A) J$ z/ I: @8 q9 V0 W/ Z+ j7 r
  475.         char szPatchURL[100];  [8 e  }$ b( g) M9 f
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");% M6 }' D9 ?' U* q' N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);4 H( ?* t  J1 a% q" I+ u
  478.       }, `5 T) `+ C8 o3 \9 l9 G6 Y' y
  479.       else
    7 D+ Z0 ]4 }  Q
  480.       {
      Z* N* x3 @/ g- G6 {
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 G; ?! M9 K. n/ L
  482.         strRegsName=DEFAULT_REG_URL;
    & }2 ?3 b0 d. \, E5 w
  483.       }0 g) ?) ?3 d4 B7 O7 n
  484.     }
    & Z8 k' v  a3 A- W8 f0 r
  485.   }
    . @/ S- Q8 d! b6 C& m: k
  486.   return true;
    , t' B) o& R3 ]: I$ \8 C, Z; [% Q8 X; k% b
  487. }9 |: ~( g5 y( U2 S4 y7 F' U

  488. 1 x4 @" t; g, C/ S* \
  489. #include ".\ZLib\unzip.h"& e4 l! Z, U3 U3 R
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ m* m( i7 \  Q, Y. g
  491. /////////////////////////////////////////////////////////////////////////////
    / f, k+ I6 T2 ?; w  t1 y
  492. // CRevAppApp initialization
    * ]; }# G' X1 B) F

  493. ( E7 N/ y* S+ s: P! Q' ?
  494. BOOL CRevAppApp::InitInstance()3 S& ]+ w( R% ^/ c
  495. {
    ' C0 J8 H$ {4 d6 o9 P
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];, }, l, O! c- J7 Z5 u

  497. + ?, j" f, m# `' @# n
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    8 T  Q! _& A* R; ^5 g" Y  K
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 b2 w% ?+ e0 Y; g
  500.   {* s- W: q2 e+ h- b6 p0 S
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - N8 q0 B3 P8 ], _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    2 Z) A9 j% I+ \+ T& s' I' ?  e8 J7 ?+ m
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    $ [& F8 D# h2 B8 R/ P8 |* P
  504.     {
    0 Q& K5 I5 \' a0 ]( n! W
  505.       strcpy(szPath,szPathTarget);
    - j, a2 u! h2 ]: t  g
  506.       SetCurrentDirectory(szPath);$ A9 V4 H3 s; c8 O
  507.     }
    * A$ J! I) _+ X( u2 O' R- `
  508.   }5 h! V! t( A8 o5 I
  509. #ifdef _DEBUG. y" E  v. C- B
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    ! D( u1 P" A, o6 c2 p
  511. #else
    ; E! w* j# K6 l. Y" A8 K
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    + E+ W- f1 ?# m, @6 D
  513. #endif
      b6 x: [7 H0 F0 E) C. w  o
  514.   {
    : @; A6 E+ `; H& D9 a7 ^! K4 o
  515.     char tempFileName[MAX_PATH];
    . V% r5 t' |3 I" o
  516.     strcpy(tempFileName,szPathSource);
    7 i* T0 L3 G8 p# \, g( {! [
  517.     tempFileName[strlen(szPathSource)-12]=0;9 [6 [) h- C. Q+ K
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    # A% z) D6 G1 I1 R0 K1 a/ h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    - `7 D, U6 A( s1 M0 A4 C# m/ u
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ' U( N- m4 b8 j2 s# J
  521.     return TRUE;9 \; x5 K/ k  U0 _5 ?" N
  522.   }
    4 G4 p* z* l: I/ e' Z
  523.   // Nuke 0118: Delete run.exe1 |& y' u7 }8 M
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    - R( l5 P; |/ {. T2 A
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    5 t! I4 W% ]5 E' {2 U
  526.   if(!ReadCfgFile("Config.ini"))/ ]3 a% Q. D7 d; r- i0 W
  527.   {
    3 E4 g1 ~4 x$ k8 o
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) |" K& _; h  l+ V" y
  529.     return TRUE;
    2 g) U$ |9 H# h, K3 `
  530.   }
    * H! V  D# Q, b) E
  531.   HANDLE mutex;
    7 ^5 D' W3 a& J$ Q( v
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    1 m7 {; W  O1 J; @4 N5 C. s) M' c
  533.   {
    / E) o5 n, X4 M  c! x. y0 V
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)' j# X/ c" r$ k7 G9 J! n- v
  535.     {- b6 C( c1 B( U) ?
  536.       CloseHandle(mutex);
    ) O9 K; Y0 A; o" y6 s7 J
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    # w2 Z$ ?# |4 k/ ]& j
  538.       return TRUE;
    ( `$ ~6 g( P* n
  539.     }: |; K# P) f5 v
  540.   }  
    6 r  k- b  [* Q2 {  V  [' a
  541.   CloseHandle(mutex);
    ' Y( ?3 p: n# K

  542. 7 U8 l. D, Y  f3 B$ ^
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    - B& I1 L) |8 s# D* O
  544. . z/ O# c* f3 Y1 f2 f+ q
  545.         AfxEnableControlContainer();
    5 B) M# f+ G% K5 j
  546. % S, f* R6 d# O" {  _4 M' L
  547.   bCanUpdate=FALSE;7 a/ l1 _) @/ v
  548.   dwStartUpSteps=1;3 h4 W. H3 ^2 q' h
  549.   dwProgramState=AP_NOTHING;" q2 w  F/ [* Q: B$ ?! g( ?
  550. ( \( i/ l. }; D" w5 B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      ~" J/ Z/ E8 T0 M

  552. 8 I* Z% D4 `) v3 n1 y
  553.         // Standard initialization
    / T# N; i0 Z4 U5 k- Q. \. c
  554.         // If you are not using these features and wish to reduce the size  o' j* N& _% R/ V3 {
  555.         //  of your final executable, you should remove from the following
    5 B- p0 u  i! N* \4 r" ]2 Y
  556.         //  the specific initialization routines you do not need.
    ; w) Z: ]' O- \  @2 A! r
  557. ' H; ?# Y* X+ |+ B+ ]5 ]! P/ }& ?. O9 z
  558. #ifdef _AFXDLL3 h8 ~8 L9 @  _: v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    * @/ b' {3 x! f3 u1 x
  560. #else3 W  ]( }8 y3 l3 |' r
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically3 ]3 V9 ]  P  x, J
  562. #endif/ Z4 `; |. V; Z0 h0 W  x

  563. # q9 V5 F8 l8 z0 {* L  [
  564.   dlg=new CRevAppDlg;
    # ?+ z: P4 x( J% ^
  565.   dlg->Create(IDD_REVAPP_DIALOG);) Q' h- P! N  ~
  566.   dlg->ShowWindow(SW_SHOWNORMAL);- [$ m- _  e+ D# j$ |# Z0 Y/ p' y
  567.   m_pMainWnd=dlg;
    5 _5 u' Q. z$ v; _" K# A6 d$ J: u1 u

  568. 6 w* J# e4 j: T( W& e; U2 H' R
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);, e- Q% K( C% z( E# K4 ?

  570. ! D, W! z+ }6 K* Z9 d" y1 n1 p
  571. //  GdiplusStartupInput gdiplusStartupInput;& _% n. r, Q$ T1 }: n8 j
  572. //  ULONG_PTR gdiplusToken;
    5 ~  F8 S- ]9 K7 g- T- I  i
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& z) B5 S9 ~7 X0 t' T
  574. 0 A1 K+ a7 q! G" u( Q4 Y1 L
  575. //        CRevAppDlg dlg;3 I# o' K: u. ?+ B
  576. //        int nResponse = dlg.DoModal();
    8 I, R! R2 Z$ J0 I2 a" e$ T% D7 i
  577. //        if (nResponse == IDOK)
    3 B+ W5 g0 ~. g, a$ k3 L: D
  578. //        {
    ! o* M# y$ Z& [- J& s. j8 u3 P
  579. //                // TODO: Place code here to handle when the dialog is1 d/ `! E  H; J9 j' j3 D
  580. //                //  dismissed with OK! ^/ C7 I1 A( b$ U! k7 |
  581. //        }% {5 E, e8 U2 Y1 u/ q7 i" H
  582. //        else if (nResponse == IDCANCEL)& D: G9 D. J+ a. o! E0 X
  583. //        {
    ) I. h' Y8 B: G, X) u# J
  584. //                // TODO: Place code here to handle when the dialog is
    - ?. c4 y( s* o, q0 W8 E4 s
  585. //                //  dismissed with Cancel2 c$ L1 k3 a7 q+ Z7 g
  586. //        }1 p1 U- X, g6 H
  587. 0 x* r, D6 W2 n- T# K
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    . _9 X4 M: A& [" ]# d# j; f
  589.         //  application, rather than start the application's message pump.
    ; f' u3 S% Y' }6 P- u. Y8 U. C
  590.         return TRUE;+ O; Y+ ?! B1 t' Q4 G- y9 Q$ ?
  591. }  x  V6 Y1 R. G7 G! Z% T
  592. " G/ t- l3 @' L2 {% @
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * R# K" S" _- X2 ^
  594. {5 a0 A) U6 m1 n# r
  595.   int i;+ q6 T2 [* W6 R! a  O
  596.   char *szRet;
    & [" @5 K7 @) o  C4 d

  597. 7 X/ l( \* Q2 t4 p
  598.   if(pSource) { itoken=0; sztoken=pSource; }
      m# D( c/ Z5 }# K6 A3 U$ L
  599.   if(sztoken). a* q0 }2 ]5 S
  600.   {8 V  H. C8 L8 q0 _+ j" v# r! [
  601.     szRet=&sztoken[itoken];1 B' |" @; V( e0 z6 i- a" S
  602.     while(sztoken[itoken])3 V$ q) i6 B! B# F, l5 T
  603.     {3 }& e9 L  u4 D, I
  604.       for(i=0;i<(int)strlen(token);i++)
    3 G( X7 p, y! O! B
  605.       {
    * {" G$ @- w5 g+ J) q, Y* e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    5 k3 U* |) F; V9 a' w& P0 D. U
  607.         {
    * [% Q5 b1 K( Z, c; O
  608.           sztoken[itoken++]=0;
    6 A; d5 i) S. H, r0 M
  609.           sztoken[itoken++]=0;
    5 ?" _% `' `. X# _4 D
  610.           return szRet;! V( P0 R3 @' J
  611.         }2 j. U+ ]+ F, N7 S" s  l: V* j4 g
  612.       }7 u6 ]2 x1 l$ h( V* J1 h/ n# }
  613.       itoken++;
    . Q9 J: b* }  y8 H8 t" y/ h
  614.     }
    3 ~  }4 D# B7 ]5 {3 q
  615.   }
    : T. A( ^2 W. W" ?6 J  s" f
  616.   return NULL;
    ) V! b( W" I) {5 f  H. C: C
  617. }# \9 f2 C  `7 F" l; ~+ O
  618.   V9 c$ ?( |3 W! V6 Q9 U
  619. void ProcessProc(long Total,long Current)
    ! ?; Z* x4 E8 E- n, F% M* a2 w
  620. {% k% J9 U. c6 [1 W  I9 b% B# H. [# g% [$ o
  621.         MSG msg;9 X# n9 x$ S1 O+ c  t  c6 d3 v
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);" n' L- ^' o# n7 s) `- E/ D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));4 u6 ?1 N7 T9 g6 V( x5 R# v. i
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    7 w: C! {. l. A- b! X5 F
  625.         {
    6 f2 m8 l4 f/ e3 g! O+ \
  626.                 if(!GetMessage(&msg,NULL,0,0))  k! U8 e5 S2 J
  627.                 {
    5 U( u* y# s8 X4 S7 E
  628.                         return;
    ' x1 C: l0 Z0 m4 V/ L
  629.                 }
    $ S8 ~! X; v1 M
  630.                 TranslateMessage(&msg);
    . }$ u& _7 @3 g7 S! D; w
  631.                 DispatchMessage(&msg);! [+ P* i% V' N, T( r+ U
  632.         }       
    , F7 Y: ]5 A- \/ k6 l+ [
  633. }
    4 m  K$ n9 W- w, Y
  634. 2 D, S+ M) J: |& x
  635. BOOL bFirstChar=TRUE;
    % H/ ]4 K+ s0 A0 l! @' _4 N
  636. 7 N+ N" f- m( c0 w- H" K& V* f' n
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ( ^% f, o+ R- c; ]8 S
  638. {
    4 s& x1 J6 Y: c2 F  ?/ y- O
  639.         // TODO: Add your specialized code here and/or call the base class
    9 l. z) C4 S% U, Q  T: ?3 [( P
  640.   switch(dwProgramState)
    2 u( i0 w/ K) {. T) E6 ^- `
  641.   {) `9 [7 T* B2 k, K* b, \: B2 a
  642.   case AP_NOTHING:
    ( q1 }9 q) C3 S" _( [& c$ H9 u: B
  643.     switch(dwStartUpSteps)
    , v) v9 S2 X& f0 i5 _, j/ Q
  644.     {# H/ I# z) ~8 Q9 u9 l# J4 s- }
  645.     case 1:, p2 Y! H9 ?  u+ |" W3 p
  646.       {7 k: I+ l/ B+ z5 G4 }' y
  647.         int i;! {2 o9 V/ x! T# ?' ]% N- d6 d5 F5 s
  648.         CDC *pCDC=dlg->GetDC();; ~. [. B# W$ M, e. z' n$ D+ T
  649.         HDC hdcwnd=pCDC->m_hDC;$ e4 p9 Q1 l1 C
  650. //        Graphics graphics(hdcwnd);& \  N- w5 \+ W1 f7 ]
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    + N5 C2 o# R* T$ ?7 A# j
  652. //        INT iWidth=bitmap.GetWidth();
    8 l/ x* \* E( j( Q' a% K! J
  653. //        INT iHeight=bitmap.GetHeight();* @/ g  ~9 N; @4 }. l
  654. //        Color color,colorTemp;
    8 w8 G1 K4 V8 N% @
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    " D- i5 G& c1 B  _- H
  656. //        {
      e9 @% o' l& I
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ) y: S! m% L( `$ O2 ~& Y+ }
  658. //          {
    9 Q' ~, b; e0 B* F
  659. //            bitmap.GetPixel(iColumn,iRow,&color);3 q! E0 S& @: F0 m% K6 a
  660. //            colorTemp.SetValue(color.MakeARGB(+ J$ C& V, G0 q+ B% M% Q
  661. //              (BYTE)(255*iColumn/iWidth),9 f" h  c3 ]2 I3 l. S
  662. //              color.GetRed(),8 Y2 A5 C8 n7 v0 Z! j0 Y
  663. //              color.GetGreen()," y- o- E+ p# J6 z! M" |
  664. //              color.GetBlue()));
    ( P6 u+ b, I' Y  V- h9 W" D
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( L0 W3 W) @6 H" i4 W  A
  666. //          }) w) E1 `9 E& N. W
  667. //        }
    & C4 }! l1 b1 M7 R
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( T: D$ [1 K1 d  O% s
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    + d. j2 @! C0 G' l2 R$ m( R! \+ N
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");. P& J# t4 ]2 A) p7 L9 D
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# _1 R7 u3 P5 Y6 ]
  672.         for(i=0;i<240;i+=8)
    - e% @7 b9 ]! ~, y
  673.         {- R% B! A1 J: b5 f
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);. ^4 p5 x3 ?: I& ?9 _6 {; l
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    & ]+ ~( q$ O3 z2 N3 ~8 Y' `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 k5 W% y5 q4 ]& c8 G+ S
  677.           Sleep(33);' x0 i& Q/ j) B# G9 @8 v
  678.         }
    $ P2 z  p7 e: H* o7 D
  679.         Sleep(1000);
    5 Q7 y$ ]' i( W% Z1 I( x; O4 f
  680.         for(i=240;i>0;i-=8)
    9 F1 k; C7 I& C1 u1 e
  681.         {
    1 ]  g- A( l5 Z- J' ~4 L( z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);5 ?# P- e* @* b5 ?% n" a
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    + f, M6 ]. d& [+ Q. G3 H3 I
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);# z3 n0 P8 D8 z. N
  685.           Sleep(33);
    5 L  m8 h" |# y2 s9 S- y/ S0 |4 D
  686.         }
    3 U0 P# G% E8 J! w/ S
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ! E# @) G/ n+ l8 J
  688.         dlg->ReleaseDC(pCDC);. Z3 _; a( i: r
  689.         DeleteDC(hdctar);, l* v0 S) |5 Y7 c* u: T" E- w
  690.         DeleteDC(hdcsrc);
    ( G9 g# W) O0 o6 Q$ Z
  691.         DeleteDC(hdcorg);
    - C8 C" F' p8 ?: x8 C
  692.       }
    # r! E: [, p- k, H* m% U( k
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);3 A6 @! Z% F) ?- ^6 k
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  k4 j0 U; D1 i0 T* k  N
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");; w. x4 |4 x+ y1 i5 ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* I5 a) I7 S& ?3 N6 |' g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * D6 B& F; i! o2 X" K! [; e) D3 `
  698.       if(!Dn.Connected())
    2 A5 s: `$ T% [9 l
  699.       {- a# h9 i0 |& ]  B  ]7 F
  700.         dwTotalFiles=1;  _$ D* ^. Z- y8 h; x
  701.         dwDownLoaded=0;
    $ ?$ f5 h( ]( h6 S& ]
  702.         bSilentStep=TRUE;' z8 U8 C% ~: \$ r9 Z4 u7 ~
  703.         bCompressed=FALSE;
    0 l$ H0 L7 w; a7 ?, `: l
  704.         strExtLocal.Empty();
    % G9 [  g, R6 k  W3 S
  705.         strFullName="readme.txt";+ S9 F$ v: @! c, [) W4 K! a
  706.         dwProgramState=AP_CONNECT;9 k$ D! j; O# E5 ]
  707.       }3 S+ v5 X" @. O. h2 J( A" `* G
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();3 t4 I5 |8 G" F$ V+ }
  709.       dwStartUpSteps=2;: X0 q3 \: [0 s' O) d& h; z; p
  710.       break;
    8 p. G: ?% o: E; J+ X
  711.     case 2:
    ( e0 P) z5 C6 y* I0 S7 K, N
  712.       {; Y5 H" W, R) d2 t5 V8 ?# X
  713.         int iEOF;9 Z7 ]9 F5 x+ t& [. f
  714.         FILE *fp;7 [0 x2 G3 X* n* r: m
  715.         char szString[512];, e; w  b3 E. ~' [
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    , R0 c+ h& E; q3 `  |
  717.         if(fp)
    / r, v, u/ g7 k3 a6 N, L
  718.         {
    8 |+ p0 }" ]: q8 Y6 C4 b* o0 ^9 j
  719.           do
    & F) u/ O4 R+ Y
  720.           {% Y! c/ h2 N+ R; I% ^
  721.             iEOF=fscanf(fp,"%s",szString);6 v3 P! y! P# ~7 y( d* o
  722.             if(strlen(szString))/ _& [1 }0 [$ M! A. ?7 U
  723.             {- `0 A' U8 {- n0 q0 D
  724.               if(bFirstChar)
    ' W0 g- p3 h( ~4 M( t
  725.               {; H- Q6 x( r( i- W
  726.                 bFirstChar=FALSE;
    * l8 ^3 O7 Z. a
  727.                 bConnectIsBig5=FALSE;* v1 `0 n. q# _: |, I
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;0 _9 h% X& t$ D, V* K# c( h
  729.               }4 Z( ?; Y: L. T3 P  s
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    4 d8 A- I$ n& `- `" h2 C
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));: ~- Q0 x, G2 _3 V3 G
  732.               dlg->m_ListText.AddString(szString);
    / K4 s0 C+ i7 [& I" O% y/ |$ u2 z$ p4 `
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 m7 P$ A2 A6 W# ^
  734.               *szString=0;
    3 k0 J7 J0 S; ?0 l
  735.             }
    & C4 n- b3 v' b
  736.           } while(iEOF!=EOF);" e* S5 |& \: I: t& h1 \
  737.           fclose(fp);
    4 C6 B( q  G2 e+ b; `
  738.           unlink(".\\DownLoad\\readme.txt");: `& t4 c# E* ?( d
  739.           dwStartUpSteps=3;
    7 L8 @( f$ h- d7 ^" n0 B
  740.         }2 i7 }; N0 V0 [  E, R# F
  741.       }
      O* y1 N$ m1 |2 N# }4 _
  742.       break;
    5 t$ w2 o4 x( }9 U: |$ G% M
  743.     case 3:
    $ Z/ a3 B% m* S
  744.       if(!Dn.Connected())0 p( |2 {" k7 j. s4 r5 U6 a" t
  745.       {! {, x, y7 K8 p$ I3 n2 O6 j# Q
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    / o( z3 D1 K2 ^* v6 y; G
  747.         dwTotalFiles=1;
    : J( f8 Z; F1 b/ a) L
  748.         dwDownLoaded=0;
    ! F. V: k7 E, }) M
  749.         bSilentStep=TRUE;2 x+ L, d2 e7 u  c- ?5 _8 X4 b* j
  750.         bCompressed=FALSE;9 i+ f' c0 W# Z
  751.         strExtLocal.Empty();+ A+ y+ I" n" c) t; d
  752.         strFullName="checkversion.txt";7 x& y# w" k, X0 t6 x
  753.         dwProgramState=AP_CONNECT;
    ( B- o% [" j- X0 o; x: R
  754.       }0 r4 O6 p( F. N, c+ T. B
  755.       dwStartUpSteps=4;% f& u5 v: Q- Z
  756.       break;# O2 c1 S# S6 ^
  757.     case 4:
    ! P( ?  H- T; y  B& Z
  758.       {
    1 g  ?1 i5 G! t
  759.         FILE *fp;
    $ V  V$ [. P' V  U/ E: p+ z( Q  J
  760.         char szString1[128];
    & F. d3 A* j1 q) f
  761.         char szString2[128];( ~8 }$ c* Z9 d; J% i9 W/ g- ], t( k/ t
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    3 W% b+ d% {0 V0 l
  763.         if(fp)+ L5 u, A# L* g
  764.         {
    ! p% @  u% J( S1 F- a- H! ?
  765.           fscanf(fp,"%s",szString1);
    " T2 w* g2 R: C' h; c4 A" Z
  766.           fclose(fp);. E: [: r3 g1 B* j) N, _
  767.           fCheckVersion=atof(szString1);
    ; V$ h# j* Q# N+ \& i' o
  768.           fp=fopen(".\\checkversion.dat","r");) U9 I0 j! Q" ]" ^( l" I4 s1 e
  769.           if(fp)
    $ g+ i4 h9 ?& Z
  770.           {( n7 F$ U2 a% v  Z  a" \( ~
  771.             fscanf(fp,"%s",szString2);
    ( y! k8 w5 H$ {3 p
  772.             fclose(fp);  i& ?  @- N  h: }
  773.             if(atof(szString1)!=atof(szString2))* ~6 a7 @8 o# t" C, ~+ A
  774.             {
    # z  E0 H) T: J4 R3 U; j
  775.               if(!Dn.Connected())% F% F$ W: ~$ `6 W6 W2 k8 k
  776.               {
    ( k; A7 z0 Y$ r0 [& _4 V/ |
  777.                 bFirstUpdate=TRUE;
    ) M9 `" {& a) w  j7 R0 V
  778.                 dwTotalFiles=1;
    3 S" n5 d: s1 A7 q
  779.                 dwDownLoaded=0;
    2 Y3 u2 N! M2 y' g2 D. Z* [6 L
  780.                 bSilentStep=FALSE;
    , f% p' l  X* @
  781.                 bCompressed=TRUE;
    7 O6 l: P' \0 {! B- A
  782.                 strExtLocal=".\\DownLoad\";& Z" S! q5 J, B$ t: J
  783.                 strFullName="update.txt";
    4 q* {  ~2 N- n0 t2 s" @
  784.                 dwProgramState=AP_CONNECT;
    - @: E$ O8 t2 j& e( q! D
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    5 s6 b$ g9 N8 n5 s5 m
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");3 w" t! _  A6 ~$ P
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    1 C! s* t( _+ x+ Q9 y

  788. 4 D1 M0 L7 ^# o) r9 [3 I
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 F! ^8 s9 c# p7 K; ~: J6 Y
  790.                 unlink(".\\DownLoad\\checkversion.txt");/ f4 Z7 Y( X- p- l( B+ g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    5 |0 h5 E9 h" m7 P
  792.                 {7 m$ M& q2 S# x- r5 U. y
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    3 F$ S% S1 T" [
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");" r% U) D) ?3 ~. n3 p& B# Y
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");. ~+ k+ F( ]; u( x, p9 U0 Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 o6 w( C+ D* ]
  797. ( b: K# k  u# T# o( I
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");' Y* [- r; J" V; ?; J
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* p1 C0 T' a, G! T* ]2 Z$ `
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    ! u$ n2 s, A$ s7 }! e. R
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 d  G7 h3 S, W, b
  802.                 }
    / E" o- S. G2 @" s: C; O8 c
  803.                 dwStartUpSteps=5;$ E3 K. q. A1 _" T% ^' s4 N
  804.               }
    ; O" Q. Q. B% S7 o3 o( S' W
  805.             }
    . c# ^* L% `7 J" ^, x6 Q& W. o9 G
  806.             else. }& \+ X" B  n9 Y2 A7 p4 V
  807.             {% ]; Q  Q2 j. S  O2 e& u9 j
  808.               unlink(".\\DownLoad\\checkversion.txt");; A+ h0 \5 n* O5 l9 y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");1 p' J6 E4 Y/ r1 D( {. G) |3 W3 M% J
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    & |( Q+ B& B2 Y7 m  U* V8 d
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");1 g+ v9 a  B% M  S* t; N/ H, _

  812. % L1 f. M+ B8 Y  f# U# [, r
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: Y' @* ^5 [" M6 R  k1 |
  814.               dwStartUpSteps=99;7 F0 R1 D  x: _7 [9 ^$ m' {2 U; c% z
  815.               bFinishUpdated=TRUE;
    8 s( N$ d& A4 m$ b8 }8 O* u: A
  816.               bCanUpdate=TRUE;! {9 v4 E. D* V, f; h& u: g% \
  817.             }. R* m/ Z6 M; z! \  Y& v
  818.           }
    2 ?* O# z: y. w4 s" E7 \7 ?8 O* `
  819.           else
    ) ?; \6 a: z0 G) I# n6 v
  820.           {
    & B$ y" p7 u4 j# o( w) `0 \- v
  821.             if(!Dn.Connected())3 Q5 ~7 A) B# ^
  822.             {
    1 M& j2 w3 }% z. @0 [6 P/ m
  823.               bFirstUpdate=TRUE;+ T! O* |3 b2 e9 A  S+ ^
  824.               dwTotalFiles=1;0 h# X8 G. q5 G3 G* S, y$ d
  825.               dwDownLoaded=0;9 u  _1 p/ f# R4 {( l# Z
  826.               bSilentStep=FALSE;& u6 f! A- t. y0 E# \1 p8 t! Y1 l
  827.               bCompressed=TRUE;
    ) ~5 T: K) `1 n" V# R
  828.               strExtLocal=".\\DownLoad\";
    + B$ L9 ^7 J' R+ `3 X/ _
  829.               strFullName="update.txt";6 g6 z$ _# H7 @: Z9 r& d2 L
  830.               dwProgramState=AP_CONNECT;
    % m- Q, _% R) {
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    2 O* B5 F+ N% y
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    % T# V! Q2 V+ b$ C( @' t% Z
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( G1 `. t0 I- r! t& m% p2 l
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    0 f, I2 M) s3 g3 @) w
  835.               unlink(".\\DownLoad\\checkversion.txt");
    ; Y' e+ Z0 T4 k$ ^: b5 Q; r" \' B/ ^
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 Q( Z8 x* T, B: Z, i7 Y* ]8 z
  837.               {
    ( e1 F! F* G! n! c, R1 t! V0 H$ X
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 F( y9 S7 p/ M2 n' t6 q
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");0 ^/ B7 Q7 i4 {+ B# b: m6 |
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");4 n: f6 p' ?0 c2 a' f4 b# R8 H( j
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);8 O- e" j! h5 n5 Q) T
  842.                 3 R! r5 V- Z6 f8 k; w7 v2 h
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    : R4 t% p6 R- X$ J; c
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");; C- i$ c& N4 L* U
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    " z9 B2 ^0 u- ~6 N; O  Y% e0 L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! d0 z. {) c2 x/ u, R4 z. J2 ?
  847.               }
    , j5 z$ S: E0 q$ H* Z; {3 K
  848.               dwStartUpSteps=5;5 v2 F, L. M' i
  849.             }2 D1 B( X% e7 U0 g# y6 x
  850.           }' N; b1 [9 q, m8 ?! E3 D
  851.         }. H) Y* I# Q5 q+ c4 ?
  852.         else
    " S. m: O. {# [$ B6 u5 i2 \; v% M
  853.         {4 e/ C0 I6 I7 W+ O$ G2 s$ I9 |
  854.           dwStartUpSteps=3;
    ! c5 T" l! b: ^, @9 [/ K/ V
  855.         }/ t9 w4 e9 C. u% w) O. F
  856.       }
    1 w7 m+ ~) [: Q" `
  857.       break;
    : V( w9 ?0 y- L7 o! E. o+ L
  858.     case 5:! V# X, \7 n5 {: Y% k
  859.       {( V) I" l' R+ |; r/ M. r! L4 `
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    / z! q3 C5 v( ~7 K
  861.         {! [% h. T. X+ r" \5 p- K+ s
  862.           int opt_overwrite=1;
    5 i. T0 t6 n4 f; v# N$ N
  863.           int opt_do_extract_withoutpath=0;, M( `6 G1 L9 ^3 {
  864.           unzFile uf=NULL;
    + k4 J* L; D! p

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

評分

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