CSUpdate.exe源代码

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

& `- j% D0 V' l# l7 ]
  1. / RevApp.cpp : Defines the class behaviors for the application.
    + ~4 ]7 `- a& m7 r" P" T! |
  2. //  ]4 `+ k# V2 ^, s

  3. 7 m( [3 l2 q* o7 U/ Z' @0 L2 a
  4. #include "stdafx.h"
      [" z2 i, f4 q

  5. 4 ^" s- K' Z' S% l4 j2 q9 `
  6. //#define UNICODE$ S9 {8 ?4 ?- R. t! T5 l
  7. //#include <gdiplus.h>
    & N+ m: P8 o# c' q  ]
  8. //using namespace Gdiplus;
    6 q4 M( T- L) R+ c" i

  9. ' G! O8 S7 [) S
  10. #include "RevApp.h"2 s( H: m, x  r
  11. #include "RevAppDlg.h"! k0 O" }0 |& _4 Y3 m
  12. ( g) C* a1 x! {* \: L
  13. #pragma warning(disable:4786)6 w; U: l, T' `5 P% t
  14. #include <map>
    ! P3 i! L( |; W* x( J7 B9 w
  15. #include <list>
    / f/ ~* ]$ p# ?* n
  16. #include <direct.h>
    1 a5 ^4 v" E" K/ k1 t; S1 u$ ~! t- J

  17. $ A/ f) V9 k4 A. B$ w  E. u) p
  18. #ifdef _DEBUG
    ) }; A1 [* s5 _" {9 \% O
  19. #define new DEBUG_NEW0 B& T3 m( p) _1 s0 r) q
  20. #undef THIS_FILE6 r, `3 Z4 f# M4 B2 [
  21. static char THIS_FILE[] = __FILE__;$ J, S/ O; u. s& Z  }. S) e9 v4 s8 [/ {
  22. #endif/ u( T( x; ^8 x1 L9 o1 G' v4 M
  23. #include "SkinResDef.h", L. T7 g. ]$ m: d, l1 U4 R2 d
  24. #include "ChangeBG.h"" V8 a! U) Y+ b; |- r; K; O
  25. #include "AFXINET.H"
    4 o3 d& x6 K& K
  26. - I3 {; w7 T' ^) m% e' H3 @
  27. #define TRADITIONAL_CHINESE 0# D/ l% X& C* p
  28. #define SIMPLIFY_CHINESE 1
    8 O1 [) q, I( t0 b2 Q2 V1 k: W3 x
  29. #define ENGLISH 2
    " C3 x# O1 R* h7 Q* U5 k. S
  30. int m_iLanguage = ENGLISH;
    ( ]  h& ]( e3 P; O# q2 U
  31. /////////////////////////////////////////////////////////////////////////////$ n# D  l4 w0 M% C1 E& T0 W7 b% L
  32. // CRevAppApp
    # ^  w7 s! P" T! @9 M$ r0 t- B
  33. & L: G; V4 |, Q( C: G8 T
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 F  P& a  h( C8 x/ o! ~. A, ?1 }
  35.         //{{AFX_MSG_MAP(CRevAppApp)4 w% R' Y' u/ V; N5 S9 J! ?* l
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    % b& H1 e$ b; B% N$ m
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    " m* q- m' j- D- N
  38.         //}}AFX_MSG- c2 |* D/ ]8 _# ]
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ' G& B4 r' f7 S4 w, a% R- q
  40. END_MESSAGE_MAP()0 U7 l) N* v: d- k; j
  41. 7 f) u( W+ X7 p$ N6 m7 m" q
  42. /////////////////////////////////////////////////////////////////////////////
    ; C! F$ p8 P% R" |+ W
  43. // CRevAppApp construction0 N2 I- m! U. I1 n7 n4 o

  44. . V7 |6 C8 o2 K$ y% G: |
  45. CRevAppApp::CRevAppApp()
    / k4 P' i% ~! i# S* S& }3 J
  46. {8 k8 R, h, P) [7 c: M0 k
  47.         // TODO: add construction code here,0 u/ R( p6 ^& A5 Q) p
  48.         // Place all significant initialization in InitInstance
    0 M6 v9 q4 g! s3 ~/ p
  49.   bDisplayIsBig5=FALSE;! S# j" Z, E" P8 B7 u$ K) q* i
  50.   bRestartUpdater=FALSE;
    ( N$ r, t: ^% C$ l9 P7 Y
  51.   bFinishUpdated=FALSE;! H" e5 l( M4 N4 g: }( l/ W
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 U3 X$ x9 j- W) ~5 F  ^0 B
  53.   InitChangeDataBig52GBKS();
    9 s0 P. B! ]# m5 I/ X
  54.   InitChangeDataGBKS2Big5();
    . G! q. G8 ?2 y! B
  55.         //4 O* i9 R4 }# z
  56.         bClickRunExe = FALSE;
    7 x$ ^2 e4 o/ V! j* D$ g9 g" [
  57.         //$ M% k- ?- `& j/ c+ D
  58. }
    2 v: G8 Z/ k: y  ^  ]

  59.   i- W# X2 J1 X6 ]& M4 W
  60. CRevAppApp::~CRevAppApp()
    6 e. E9 g+ S6 N3 F4 Y
  61. {1 C3 n% R7 r! |! k( g% p1 x
  62.         // TODO: add construction code here,
    9 G( h: C, Q* T# K2 X
  63.         // Place all significant initialization in InitInstance
    * V+ g  P' ^% o2 d
  64.   EndChangeData();
    4 M3 m. S& j) a2 Y
  65. }
    . G" g! s  p1 j- h: j& j
  66. ' Q4 H! ^1 K9 g, K6 J! p
  67. /////////////////////////////////////////////////////////////////////////////% I# g5 A1 f/ R  r; U, A5 a% g6 z
  68. // The one and only CRevAppApp object; ], [* x& R  C% U$ T* ?# J' E

  69. ; G, R( F% i) J6 F/ r4 T
  70. CRevAppApp theApp;6 a. [5 X- l# H; E5 o, R# i# u
  71. ) y. F5 I/ F  F$ R. ]  I
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    0 ?: i0 O' l9 }* n. t
  73. {
    8 K2 g* l9 {5 s7 t" o3 ^& y4 y( C
  74.   int iEOF=0;
    6 f3 l- M; g7 j: B2 \& r; p
  75.   char szTempName[MAX_PATH];0 j/ \4 b) y. [& r
  76.   *szFileName=0;' K) a& z; s: v8 ?
  77.   iEOF=fscanf(fp,"%s",szTempName);# o) W7 s3 i: T4 s
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='('): Q& H$ x3 N# o: w% i9 b
  79.   {
    * f  s. c5 b$ y  c) a
  80.     strcpy(szFileName,&szTempName[1]);
    : @6 \# H1 {: r/ x/ O5 _1 `
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)5 Z4 ]+ l$ V( {# h. e6 M/ `* ^
  82.     {
      V) B1 s" I: W) V5 J. x7 r
  83.       iEOF=fscanf(fp,"%s",szTempName);% x; Y. v  R" l0 d9 D6 W
  84.       strcat(szFileName," ");
    . @9 O8 {& t0 B, w+ L8 G
  85.       strcat(szFileName,szTempName);
    8 v. d, g# E- K- J' U1 s3 s
  86.     }
    * M- b# {. p+ i& \1 k/ ]( Y
  87.     if(strlen(szFileName)>=1)
    7 H. [. U: R' V
  88.     {; I6 x! Q* s2 J8 W1 T, I$ f
  89.       szFileName[strlen(szFileName)-1]=0;
    4 c2 o, }$ r& N4 q& @  c/ e
  90.     }( m- `6 Z0 |- c) n
  91.   }3 O6 O5 P' i/ M  g' q  X- F/ n
  92.   return szFileName;
    9 v: P* D5 n# Y! m1 Z& o2 g
  93. }
    % q3 {# ^/ H/ E* p) w

  94. 2 d' }5 g6 B5 L0 D& h1 ?) D
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    9 D; C2 G2 Z+ a1 A+ t
  96. {
    ' c  q: L3 v2 C( F* r
  97.   FILE *fp;" `1 t1 ]. j2 r- h0 Y
  98.   char *key=NULL;$ {4 |4 r4 D8 p$ b% R. R
  99.   char version[MAX_PATH];
    3 ~3 Q( C3 V4 r/ Q5 h  D, G
  100.   LPUPDATEFILE file,olds;
    , b- C) u8 A# B- {  e/ n7 {* N; z
  101.   std::map<CString,LPUPDATEFILE>::iterator p;: P5 y; }1 P$ i$ D

  102. % w& K' R  X  l1 r
  103.   UpdateList.clear();" r' D" _" D- C/ L4 H% N8 u3 w+ N
  104.   UpdateFile.clear();4 @* z% G; o+ s1 X' u* i3 c
  105.   if(GetFileAttributes(filename)==-1) return false;
    & }3 D- i7 \; Y* M  m* Q9 n! u
  106.   if(!(fp=fopen(filename,"r"))) return false;
    ( Q3 u" \2 V" m
  107.   fscanf(fp,"%s",version);
    & ?) i5 @; I! K% M3 F1 U$ v
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , ]& I* t1 d6 @  T( I6 z) I+ K2 ^
  109.   while(fscanf(fp,"%s",version)!=EOF)7 a, j2 |& C9 d9 B1 U; F* R
  110.   {* G6 o6 V. ], C: D1 G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 W, V; ~# P3 o8 ]& P
  112.     fscanf(fp,"%s",file->path);7 H) w5 s* \4 H: u; S8 s
  113.     ReadFileNames(fp,file->file);5 _, m& A, N6 L, V
  114.     strcpy(file->full,".");
    4 i2 t4 d' [% e7 G
  115.     strcat(file->full,file->path);
    . I% h& U- p8 C5 |/ {* [" |  D
  116.     strcat(file->full,file->file);( M: ]1 w8 s3 ^' s* D$ ^4 p% p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())( ~  v/ m* Y2 j' Y! n
  118.     {: ~4 n" f2 m" n1 K! ~+ l, W- U
  119.       file->vers=(float)atof(version);
    9 N$ \# z- D0 t
  120.       UpdateList.push_back(file->full);
    4 ?$ X; G5 ?6 L2 M5 T' ~
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    0 G" M7 R- N4 l$ j" y' N
  122.     }
    / Z3 b/ J9 @) M& T$ i
  123.     else
    ) K+ g! Q+ A/ o
  124.     {4 A! D# L/ s% V4 b0 m
  125.       olds=(*p).second;
    0 H. o2 b! v8 q2 ^
  126.       if(olds->vers<(float)atof(version))$ |  G) {, h/ P2 Q/ e, }- E& L
  127.       {- ?, w& n! ^- k" ~) A
  128.         olds->vers=(float)atof(version);8 {$ ~6 z9 i6 P
  129.       }6 I' T5 U8 q. }& X7 A% M! b
  130.       free(file);9 R/ x; c3 S4 t1 T
  131.     }: |* [* _2 {) B- J5 u
  132.   }( b/ l4 u) h/ W- A( G7 r( k
  133.   fclose(fp);: ]! m. S9 i' E6 @) ?  \, p
  134.   return true;
    5 {. W1 ~3 C$ {' U- I
  135. }
    ! `. @! ^  i% ]
  136. $ ^- N3 Y  I% u; Q" U
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    1 s! L! d; F. b( A* f
  138. {7 y9 a) P/ C0 L9 ?! n
  139.   TCHAR  szFull[MAX_PATH];% H# q; A' l  E7 Y, f* }
  140.   TCHAR *token,*inter;
    % r: w3 ^5 L* S' C
  141.   *szPath=0;. v6 ~% z% m& c2 W: L
  142.   strcpy(szFull,szFullPath);
    : l9 ]+ d1 e- N! g- l8 J
  143.   token=strtok(szFull,"\\/");
    6 F* T2 X' y3 F8 k# y2 q- a
  144.   inter=token;
    3 m+ U" D' B( [! ]3 d
  145.   while(token=strtok(NULL,"\\/"))
    ! [4 F2 @9 f* Q
  146.   {
    0 [# {5 Y0 B+ x8 F7 ~
  147.     strcat(szPath,inter);5 Z! t4 i- @' w9 e) g. \9 i
  148.     strcat(szPath,"\");
    # X2 |" [# {4 P- w( r/ n2 l' i9 `; A
  149.     inter=token;) {: ]4 V* O9 O6 q7 V- L
  150.   }
    + V5 x* J8 c7 [/ \8 n4 @# ^+ t, t9 H
  151.   return strlen(szPath);5 W; n3 n# J& y5 `3 h8 O# i. S9 H: @
  152. }
    : G9 |7 X9 M: u( I# B
  153. % C/ u* C( Y* x, }
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)( `( q' V( i4 H/ L4 ^- e/ u. Y
  155. {
    . L, v6 U' X( r4 i2 F
  156.   DWORD attrib=GetFileAttributes(Target);/ g2 S. r6 x' P+ r; V5 n
  157.   if(attrib!=-1), s8 u9 ]" N2 l, k* J( @
  158.   {/ q1 p' n2 j8 \( W, {0 a3 |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))9 B3 n9 q' O7 t! Z
  160.     {+ V' q3 v2 S1 D! f4 g- V9 s6 _
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 b0 W# U0 D5 P8 v" p  l
  162.       SetFileAttributes(Target,attrib);& B( u# Q9 X' X3 O- A2 r
  163.     }/ J# n! ?' K( O8 y1 m) f) O
  164.   }" T! p+ C8 N2 B, O3 }% H  o( ?
  165.   CopyFile(Source,Target,Erase);
    9 K) U+ F8 F! d7 W
  166. }
    0 O& I/ o! o7 C

  167. 7 Y7 |5 Q1 P* H% p2 a/ f, l$ K5 [
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    2 L/ m6 h7 d1 m0 R
  169. {6 ^" g& c$ X& C; C. m7 j1 i$ g
  170.      FILE *fp;$ U# }: \7 T/ f0 `. p2 n$ C
  171.      char  szBuffer[8192];/ {$ j' Q4 T0 |" W1 X. \7 N
  172.   va_list  argptr;
    / e: H7 t$ Q3 f4 T  I1 B9 o
  173. / A. @+ w' c0 H! k! n% `9 }
  174.         va_start(argptr,message);
    0 w% T* i; N; C) ]2 ~
  175.         vsprintf(szBuffer,message,argptr);$ _* o' ?4 O7 C% @5 D
  176.         va_end(argptr);- L" s% W7 J( G) D2 V
  177.   fp=fopen(FileName,"a");  [' ]1 ^# W$ I" q. z4 V# n6 I
  178.   if(fp)
    # ?. p) T4 ~/ L$ H- _% h8 L
  179.   {# U' R: e0 z$ C8 j! `
  180.     fprintf(fp,szBuffer);* ^2 C' \6 h2 x& q4 y9 y- [
  181.     fclose(fp);
    " |4 o8 B0 m8 U# g
  182.           _flushall();
    3 r- \! `: e) ?0 x
  183.   }2 m, B4 B; H4 P5 Q
  184. }
    * ~7 p# @  X: u4 R, Q1 A  t
  185. . w2 N$ e. t( M% V+ q
  186. BOOL CRevAppApp::Fclearf(char *FileName)& d9 h& ~6 [2 n7 Q! q* Q! P$ }
  187. {; p* N) h9 r1 j! ?' c6 B; Z, W
  188.      FILE *fp;4 D' w( `, _* U$ U  p2 ~
  189.     DWORD  attrib;
    6 _9 M1 r2 x! Y. Y
  190.   attrib=GetFileAttributes(FileName);
    ( H8 t( `  q* q& I  z, U% t% ~
  191.   if(attrib!=-1)
    ' V0 \6 R+ x4 x9 F/ p& L6 V5 ^+ i
  192.   {
    ; c+ l5 l% {& \, i" o
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    0 p+ t  X  @( w" t% q# p) f/ C
  194.     if(!SetFileAttributes(FileName,attrib))
    ! y% B$ V7 o5 X" |# a/ v
  195.     {* A  ~; m, s7 ~$ M
  196.       return FALSE;! U; O) r0 K% b! S; q
  197.     }
    9 n8 {1 ]+ ^; F- l4 ^
  198.   }. p  W: E) d& h5 H9 A! C: |
  199.   fp=fopen(FileName,"wb");
    ) ]: }5 p/ f6 ]  Q" }
  200.   if(fp). i/ C' A. K; o1 r% y) M2 n
  201.   {
    5 P/ p9 ^9 N/ L+ @2 y0 |3 ^- c
  202.     fclose(fp);3 `$ P) M% |# u. V' @' i
  203.   }
    4 p( Y9 w; N) W( z7 U& n. v& k
  204.   return TRUE;
    ) {2 O. y# a; t& ]
  205. }% c5 z, h9 I8 j8 x: ^' g$ Y6 m3 Z0 t( B% `
  206. 4 I3 ]/ [" [" o& K" c# T+ v
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    0 q" C1 F1 F' Y7 t2 }4 E( B
  208. {
    + W3 i/ F- `. X5 I& X3 y: B
  209.   char filename[MAX_PATH];
    6 D# h0 d2 E7 g, X( S
  210.   LPUPDATEFILE file,olds;6 K4 P+ o5 a2 u  z
  211.   std::map<int,CString>::iterator i;
    3 p' b7 E5 R' G  w) ]! E
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 d5 E* I2 p3 x' d$ o3 \
  213.   std::list<CString>::iterator l;
    5 @! q3 X% \$ E; k9 k

  214. ' ^4 d) `5 E! H
  215.   if(bFirstUpdate)
    ( N4 e3 w' {7 Q; _5 g+ j
  216.   {1 n& [( c4 _) _8 H& O+ o
  217.     dwCurrFile=0;2 U5 W9 q. c7 U3 G
  218.     bFirstUpdate=FALSE;
    6 r% h  `2 x1 r9 u* N: s
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    0 Y& v3 n$ l6 i8 z
  220.     {0 A9 e* f( J3 X, H4 Q: i
  221.       dwTotalFiles=UpdateLocal.size();/ G* ?$ ^& u( J8 X% ]
  222.       dwDownLoaded=0;& l' ]$ c$ Q6 P8 q- H
  223.       bSilentStep=FALSE;( `, Z( H. {" ~8 H3 l
  224.       bCompressed=TRUE;/ @" Y) J* ]: C
  225.       strExtLocal.Empty();
    " j% L& e7 V. t3 o$ O& a
  226.       strFullName=(*i).second;! N  a: n, F/ u; A% e8 |6 h
  227.       dwProgramState=AP_CONNECT;
    ' I1 g- Y" W2 |! Q1 N! H& h
  228.       return TRUE;+ V) v$ d" `+ |" |0 G9 b
  229.     }7 [- w* L3 r8 g: @
  230.   }  i. |- @, j! a/ T% f
  231.   else if(bRestartUpdater==FALSE)7 ~! \! A: N( s
  232.   {
    . C9 _, k  g/ s3 o; q' V
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end()), t  e  l4 E: o: |
  234.     {
    3 b' c8 C/ v1 ?; u) r. B' S
  235.       file=(*p).second;( B' u& t- |$ X. E# \% O) B! u# F
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())$ }: L4 Z, R9 j/ t$ [! |
  237.       {
    - Q4 c- p" A  U# {' ]! G" c
  238.         olds=(*p).second;
    ! h" \) C2 x8 Y2 T& Q+ i
  239.         olds->vers=file->vers;$ Z# f& O+ l! x2 m: W
  240.       }
    ' `' A0 ]: V* q& Z5 q- c
  241.       else
    3 U- S7 f; N+ Z) _+ G& O
  242.       {
    + M" b/ g" i$ Y  ?! N
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    % ?* K7 A) N. L" \" ~  s* c
  244.         memcpy(olds,file,sizeof(UPDATEFILE));  i% k3 X6 d1 U4 {' i+ D
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    1 h1 G# |/ w! Y3 e8 @4 @
  246.       }
    / p* u) X4 H/ H
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");0 [( W2 H/ e) D( M& S, H! }
  248.       sprintf(filename,"(%s)",file->file);
    ; c7 n" Y+ b( S
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# K5 e' C! u6 q0 H$ T, A4 s
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    + a4 }; |. t% |+ s
  251.     }/ N1 s* Z( p% e0 I# h
  252.     dwCurrFile++;- s) {; X( a6 z# y4 s
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 i8 M5 n2 Z+ l
  254.     {) B4 ~: a* n! v9 I# M7 g
  255.       bSilentStep=FALSE;
    ! ~8 L$ C+ P6 k9 P, h
  256.       bCompressed=TRUE;5 {0 ^* e' [) A
  257.       strExtLocal.Empty();
    8 u! Z7 [6 w7 g8 x  A! x  u# Y
  258.       strFullName=(*i).second;2 i- L; X8 I& r) a
  259.       dwProgramState=AP_CONNECT;' z# C) \1 s3 n
  260.       return TRUE;, S1 T9 O) E0 a" I* ^
  261.     }
    0 T" _  B0 I: R2 v% u: k* h
  262.     if(!bRestartUpdater)
      I, e/ J! f: d. s, M( u
  263.     {
    ' c* _* ?7 u5 G7 I+ b! e+ C
  264.       int iCurrSize,iFileSize;) ^8 y) V. ~. z; h; M/ M- x! s
  265.       iCurrSize=0;
    1 _7 `5 A& p" N& c, Q9 e- T+ m
  266.       iFileSize=UpdateList2.size();
    & I; O( N/ g+ ]
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");0 |5 ^& c1 x6 B% A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");' B) M& X3 Q1 K( r/ Z& A
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");5 e5 f& [  `/ H0 y- V" J' W5 a
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( h( K' t" X' X# ]
  271.       Fclearf(".\\update.dat");+ `% T2 O7 p) Y. r
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    4 ?; T$ D) `/ {& k% B
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    + o4 M0 O! O3 n* b
  274.       {) k3 h0 f- V9 b
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    8 \6 X3 i9 r3 F
  276.         {# |* |8 A& P: B$ z7 d) X2 `
  277.           file=(*p).second;" [1 T# j9 F# O. I5 [+ S
  278.           sprintf(filename,"(%s)",file->file);! P& S# r3 l  b) J# Z+ l1 y
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);4 |0 L3 [6 s. X* K3 Q$ M% v
  280.           iCurrSize++;* n' r% X  s  S6 v- W1 R- k0 d
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    8 u  x' n1 v1 m# K. {
  282.         }
    . V+ ~% j3 i, x/ q# V" h) }
  283.       }$ b# z- x+ d. Q# M) V( `
  284.       unlink(".\\update.txt");! C. M9 k3 r- z6 D* |% K
  285.       unlink(".\\update.tmp");
    4 T7 S5 W: \  w6 Q) Z
  286.       Fclearf(".\\checkversion.dat");( A  G: u5 n+ y1 X1 |. l
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" L! |, I+ [" J
  288.       if(UpdateLocal.size())
    ) ?" V3 y, Z  l- L$ `& B* |
  289.       {7 z, M# }! C' s: t, s
  290.         UpdateLocal.clear();
    5 z/ V: _; U( U3 M4 Y
  291.       }$ p$ z! O. A, B- w9 i
  292.       if(UpdateFile3.size())+ Q' j% C; K' _8 D. u6 z# S
  293.       {
      l2 N9 l' v% M$ L! D3 ]
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 m, x1 K2 z  b* j
  295.         {; A- Z3 q0 _) E8 y4 q* U5 [* m$ d
  296.           file=(*p).second;+ ^* P0 y3 q9 s4 R
  297.           free(file);
    - {" l2 [/ [4 R8 F% o8 d
  298.         }  v8 L3 d3 E0 v: B# _5 K/ z
  299.         UpdateFile3.clear();
    # }, |; ~8 b) L. C, ]" h
  300.         UpdateList3.clear();
    ' L; h9 l6 X: `0 J* S
  301.       }7 x  O8 x- Y+ ?8 C
  302.       if(UpdateFile2.size())1 @* L% ~- [6 @' ]
  303.       {
    ' k& M6 _1 B9 Q/ S
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)& L% u4 @+ \& i
  305.         {6 T" Z0 g( z4 r: ^6 R, ^
  306.           file=(*p).second;4 e" _7 b% A" d
  307.           free(file);# d/ x. G7 ?( P/ b* z
  308.         }
    / V5 l: ~* k; z% ]/ I
  309.         UpdateFile2.clear();
    7 [) m5 U# c6 u$ l& A2 u8 r
  310.         UpdateList2.clear();# O6 v- ^% x. d8 o
  311.       }
    : i8 Q+ j& J/ k3 @, s8 ?
  312.       if(UpdateFile1.size())
    - `5 U; \. ]) M5 K
  313.       {
    1 P+ y! u/ ?: n, P
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)6 M: K, l* D! L& c; c9 B
  315.         {% \! {  U" Y% P' X$ k( n, C
  316.           file=(*p).second;
    ! |9 B0 q1 Q7 f  P# n* f4 `( K
  317.           free(file);
    / B& u- E, a* `; n+ u
  318.         }2 U7 l  ~* y5 M  `) s
  319.         UpdateFile1.clear();. a1 c9 {2 k, c5 p. K7 }& G, \
  320.         UpdateList1.clear();: d8 `6 p9 \6 O/ P9 [1 Z
  321.       }
    . X+ R3 w/ \# L( m$ z7 R6 R
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));* f3 Z" g1 H& |8 t* `, o3 N/ {4 F# ?
  323.     }
    ! W0 a  }/ v) O+ s6 D% ?& T
  324.   }
    $ I8 a7 b: u, `% d& E
  325.   return FALSE;% d% l! `% Z( d
  326. }
    " y; V  L& g' ~

  327. 1 c* J7 i  @, N9 h
  328. void CRevAppApp::ClearAll(void)1 r9 S, ^$ a: w; t2 u
  329. {1 C" r, [& y( y% u: X" R
  330.   LPUPDATEFILE file;4 c, Z5 z/ Z! E$ X3 M4 y( n
  331.   std::map<CString,LPUPDATEFILE>::iterator p;) Z, u% Y) [  a  \$ a
  332. + X% B" F" Q6 S" `$ k
  333.   if(UpdateLocal.size())" x2 F9 c! P; b
  334.   {
    ' ]. T  a7 ~" m0 |
  335.     UpdateLocal.clear();
    / `+ Y; U0 b% R$ J
  336.   }
    - }1 c( y* A/ W: r. ~
  337.   if(UpdateFile3.size())# r7 ^2 G/ R& A  D( g8 b/ s% R
  338.   {
    " d. ]" Y4 e; W7 l2 P, e
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 `4 @7 f3 ]2 x
  340.     {
    * y* K& B+ C( j# R
  341.       file=(*p).second;! g4 b/ I1 i) {& t# @1 n* i
  342.       free(file);6 x' q, C( K9 J# ]. ?
  343.     }
    + f3 t6 q4 m% h2 F
  344.     UpdateFile3.clear();" |  z: `% S6 p( ]" K9 i! S- h
  345.     UpdateList3.clear();1 [. C. S& e5 e- {
  346.   }7 U2 N# l2 T8 @6 S7 U! f0 q
  347.   if(UpdateFile2.size())) N6 Y  @: m/ I4 a, ^
  348.   {7 f( D6 F* j$ O' d
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    7 Z  F+ f: t' X2 R4 o& @/ `
  350.     {% @" g' S3 I+ t# ^
  351.       file=(*p).second;3 C) n0 v: l! z& F
  352.       free(file);; A* X1 F+ f) C5 M1 t
  353.     }' w0 w" g0 V3 \9 {
  354.     UpdateFile2.clear();9 E& |. S* N1 n6 t* Z1 o5 o; [1 g
  355.     UpdateList2.clear();; d6 P6 h. q& g# y
  356.   }
    # m* W/ h- R8 J# Q
  357.   if(UpdateFile1.size())
    ( K- |2 W/ h$ v4 `( ]' w5 R* z8 `
  358.   {- W* A! E% j$ s. T. C
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    9 Y' A' w8 o; x
  360.     {
    " C  z- M) G9 E, L' S
  361.       file=(*p).second;
    % o8 |, E2 b, u' Q
  362.       free(file);
    - ?; [  I1 v6 k
  363.     }) Z$ m8 a  ^; H. R7 j* N' W
  364.     UpdateFile1.clear();* \8 B$ {3 k. L! S0 D
  365.     UpdateList1.clear();
    " w1 U: x2 i+ a2 J; f
  366.   }
    7 G) X5 |3 C1 q$ P6 l. U
  367. }  ( J0 X$ c: `$ T! Q# h6 @
  368.   
    / K. M8 F# }3 M5 Q( E
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    7 ~, Z% `2 q3 {8 _4 j
  370. {" q9 i* v8 E1 G% p, H
  371.   int c;
    3 W- E3 N; U, c" T
  372.   LPUPDATEFILE file1,file2;
    + [8 v3 b3 ?& B! L- F4 R
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    " k' g! _9 w* t+ H" f9 D
  374.   std::list<CString>::iterator l;
    , o# q# Y! t  P# u* T, v
  375. 9 }$ ?9 I8 B! V5 A' A+ z/ s' r
  376.   UpdateLocal.clear();; V8 O, j$ ]3 P; `; q% H( n! \. y
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);$ a5 N& K) G' V3 O
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);: I6 W, Y2 H; K9 w6 ]
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    ' }# P# Y$ N/ O+ N( ~
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);% H& ^( r' x9 i' B* ^
  381.   if(UpdateFile3.size()): E+ S/ j. A% P! l7 P
  382.   {( b5 \. d1 ~9 F, f9 Q5 H
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    % L8 R# M6 p- b4 j9 X5 g
  384.     {
    ( Y: |8 p% Y$ s4 `4 S! L
  385.       file2=(LPUPDATEFILE)(*i).second;7 o5 c& j* E( U( {
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / K2 I. L' |- T- q- u, p) b
  387.       {3 z; Y* C5 q8 c" n) r7 M
  388.         file1=(LPUPDATEFILE)(*p).second;
    # \# w  B! {" ?) A3 X4 Q+ V
  389.         file1->vers=file2->vers;
    ) q* v& K2 f8 q+ ]7 E& D
  390.       }: D4 z5 w( v6 t- ?- q' T0 t
  391.       else# c" `4 q, o! C9 k5 J# d
  392.       {9 I: `3 p1 {' r
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    7 ~  j. w% t& q$ ^
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));/ x" k4 Y2 n. O' Q$ X
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));: a. w  z# w$ x8 o; |
  396.       }
    " N' o' E( ^) m1 s, Z/ q" D( v
  397.     }, R4 S3 T" m" R6 @, u+ ]
  398.   }" C0 k  G' t/ t2 [* e) L. ^% B
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)4 b, J7 W: A$ N% ^; c  p2 w. v" n2 z
  400.   {# x2 r7 Y; A9 |4 d2 L
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    4 ~) \- R4 p/ c2 _/ U3 ^4 C
  402.     {
    4 j: t% G: a; ^- {' C
  403.       file2=(LPUPDATEFILE)(*i).second;
    ( f# v" @, M% ^  L" z# D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 K  W, n+ U' H
  405.       {! h$ S' j5 M: U# b0 u( V
  406.         file1=(LPUPDATEFILE)(*p).second;
    " u$ E/ i# M' D. Z4 Q# n! q8 f
  407.         if(file1->vers!=file2->vers)4 R/ x% C: Q/ \0 v
  408.         {0 J( A6 j+ b. m. L. j+ E2 M
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) S2 ^  X. ?1 P
  410.           c++;
    / |1 G/ c  I* x& j5 u9 J
  411.         }" d- C* w* q% t  s8 J( u" _0 ~9 j! P0 e
  412.       }
    ! M4 d. Z! {& a/ `8 ~
  413.       else7 [4 Q- ?( e1 ]2 a  W; p# v
  414.       {1 E' o; {( k0 k, n1 M
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) S0 z1 ], W, [
  416.         c++;0 t: {& u; _3 I- `) J
  417.       }
    # T( z. i$ X5 N+ k% O0 e
  418.     }, q9 Y- K1 {7 k
  419.   }
    / i$ Z, Y# Q' p0 o- m# a* M
  420.   unlink(".\\DownLoad\\update.txt");% W; ?* h( z5 v9 Q% Z/ [( |# j
  421.   if(UpdateLocal.size()) return TRUE;9 [' t- M+ ^6 o
  422.   else                   return FALSE;: k: H& W1 M: E3 s& k( m
  423. }. F: Y9 O% E' a+ C( m+ {' e# v

  424. + G+ N7 ~% G( |# G7 i" |1 s- u" `0 l
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ; X4 e, @- v. a7 x# Q6 Z
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ' C6 @$ T1 \* m4 [& J
  427. ) [: P5 l1 Z4 `4 a
  428. / ]. U; I! Z. x
  429. ' k5 ?7 p/ j1 N1 Z9 f) A1 E
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    $ ]! i( W0 K4 X: X
  431. {% g8 N: V& @. t6 F# G
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ O, Q- ]' c3 @( h
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) ?/ Z1 @+ S3 \* Z2 i; h
  434.   {
    $ r  {; ^" b' ^3 R1 c7 h3 c
  435.     char szLanguage[50];$ W' N1 {8 Z1 a5 B1 A
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    7 `+ X! X! U9 ]" P
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;6 ]( u6 T0 ~  @% `: S0 J
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % K- y- j2 l0 g# b4 v5 u8 B2 u* m' U
  439.     else                                   m_iLanguage=ENGLISH;
    2 E$ ]! j* j! [. I+ N7 a
  440.     char szRegister[100];
    * {" O& d0 @9 f$ V' X
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 P& q. G+ W0 j) y
  442.     strRegsName=szRegister;4 O/ ~; f- N3 d' X, g- W/ k
  443.     char szPatchURL[100];0 I2 {# O7 e& T! w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");( Z9 a' Z5 @; M+ \( o# [
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    5 t( A) g- i5 z  d
  446.   }+ M& [7 g. I' P9 f) L
  447.   else
    ( _" f$ y$ ]+ ]) [
  448.   {* ~, U, M. o8 d/ }) X2 e$ g. E# V% S
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);9 Z' _. u7 V: u
  450.     strRegsName=DEFAULT_REG_URL;
    3 H- _& x% r0 u/ M  {0 P$ G
  451.   }
    + P. g6 w* P9 w2 B: D( S" d
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    6 p3 ]$ i# Y% {: a
  453.   {
    4 [2 d6 D8 q) s" J: ?
  454.     char szIP[50];
    9 S) W0 m* x+ [
  455.     char szDIR[300];2 t0 c* R3 @6 J3 l
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    , n) \, q; \% X
  457.     {: L( [3 y! s9 `3 O
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    : K4 X3 d, I  n* X: P& I( ~
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    & m/ {9 g8 |  P4 j7 V7 _
  460.       strHostName=szIP;2 U$ t! E- X8 x0 n- M: {
  461.       strHostPath.Format("/%s",szDIR);
    9 [9 w1 P% T5 t+ [
  462.     }
    $ d5 b( Y/ p  j7 v' z( ]
  463.     else8 ^; S2 q: a# P; Z
  464.     {
    & S1 B4 t6 l5 B! w" _
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    + T/ ]( L8 |6 G; X9 t; V
  466.       {  j& [7 B7 i) @! _8 C* E% T8 \
  467.         char szLanguage[50];. p' z- w* p9 J; G
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");' C7 I  y6 Q/ G  [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , O: ?- C2 y) e7 [. U, b* X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    : B" Q. u/ L$ u' B- ~3 K
  471.         else                                   m_iLanguage=ENGLISH;+ u  e4 O: J7 b4 M
  472.         char szRegister[100];* A( g3 \* C5 ]. @  F
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");9 \& v0 S  l4 }0 z: C7 p
  474.         strRegsName=szRegister;# O$ S8 t4 |( @0 r
  475.         char szPatchURL[100];
    4 m4 X0 R. N0 Z& x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , s# b6 ]7 L5 {! H9 N: h
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);" i7 z( u$ x) H8 |- r  X: V3 |
  478.       }
      x5 `. \+ |6 U" x$ H
  479.       else
    * G7 Z5 J# |. y0 ]
  480.       {5 L0 p# O) `. D) d! t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 O! [4 D: Z; y
  482.         strRegsName=DEFAULT_REG_URL;
    0 H& f6 j- P  F+ c& H
  483.       }
    , x6 U/ |+ E/ u' ]
  484.     }
    & b7 H% q3 E. f" s6 ?0 v
  485.   }
    : K1 G' z* P. H7 P2 ~/ O
  486.   return true;
    8 H0 _' R5 C! [; i+ V& x
  487. }9 v0 x3 w' U8 c5 u! ^' J8 q( I

  488. ( S, L' F; _! X% h0 }  x% _( l
  489. #include ".\ZLib\unzip.h"
    ! I" A' |! Q3 i, I/ D: O. X: T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    & _5 e# I$ U! p
  491. /////////////////////////////////////////////////////////////////////////////4 j5 ~7 J' k8 ^/ }) d' n4 `
  492. // CRevAppApp initialization
    3 T# J" g% l2 I( I% L" s8 @- h
  493. 0 c, b# ]) Y) p( `4 [
  494. BOOL CRevAppApp::InitInstance()
    - d  h" F. P6 l+ y- H1 l
  495. {" D" z* T7 D1 w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    # {& C4 c& C5 Q5 C1 p7 k

  497. & |4 I( k+ i1 d! Y% A$ E* e6 r
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);( \/ C: w% [% [7 e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    7 j7 P% @4 H# Y- s$ [; ~
  500.   {
    ( ^. S5 Q+ h+ T, H% J
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    5 U" p7 T9 d/ k6 j% D
  502.     GetPathFromFullPath(szPathTarget,szPathSource);- |! F7 ^) _% b) @; ~% [
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))) y0 Z  l+ H8 n! q
  504.     {
    0 [# V/ Z& K8 L! r
  505.       strcpy(szPath,szPathTarget);% p9 T' O" r7 ~
  506.       SetCurrentDirectory(szPath);& L- |% N0 b- G, Y
  507.     }
    4 V' D- A* m. b+ i& H+ K1 j. L
  508.   }
    8 o* v2 [. g: L
  509. #ifdef _DEBUG
    : V( G. Y8 C6 D' y% Q
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 M1 l/ R3 I, `+ ?* W$ X+ W* X
  511. #else* b% y5 I  r, e  C$ J$ L3 d! B
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))- t; _  C9 m. a# r5 n
  513. #endif2 E# l. f$ m0 Y+ m0 j
  514.   {: c( ^1 \. v9 f% }# k
  515.     char tempFileName[MAX_PATH];
    4 Z" ^" Y3 P% |" |7 [# ~1 X
  516.     strcpy(tempFileName,szPathSource);* T# p% s6 ^1 b9 J& j6 a
  517.     tempFileName[strlen(szPathSource)-12]=0;7 B, O% t& }% w+ f& Q/ v2 K
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    4 T/ S7 K  Z  n( B7 |; _
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% T$ e" b9 Y& W6 q% q
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);, U: y( m3 \$ l( V  D
  521.     return TRUE;6 `; u' ~' E$ L2 [4 |
  522.   }) {5 k: Y' I* }4 b8 _# E- K
  523.   // Nuke 0118: Delete run.exe! V# P# |. \2 y7 J) U
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
      a5 o. G/ U; i: A: i1 }
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");& E- l- a; {. V
  526.   if(!ReadCfgFile("Config.ini"))
    8 ]0 S: f; [8 \/ w+ X2 [* z
  527.   {
    ! T9 F3 k& Z" E1 r& a
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 ?5 `! l* V3 m6 |, N
  529.     return TRUE;
    7 s: n. d  F3 H4 h( d9 l
  530.   }
    + Z- V- o! m$ s5 ]! n4 C; I
  531.   HANDLE mutex;  A  ]0 p4 \, o: ~
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    1 {- L$ u7 A' L3 ]  p
  533.   {
    9 v( Y6 z# d% H% {$ ^; i
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)( }9 @# P$ W9 @( P9 U( y( v2 X7 R' a
  535.     {; S9 @3 s" j9 a8 Z% A0 W$ S
  536.       CloseHandle(mutex);% b5 e" G7 s9 T8 M: Z
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);8 W( E/ `8 s- o' E+ S7 d: @- y; W" ~
  538.       return TRUE;' B( Z' n7 k- o) A$ ~
  539.     }
    8 r5 m- c6 Y, d9 Q  p* ]/ q2 O2 E
  540.   }  * g7 k3 @* x1 p- f4 ]6 o
  541.   CloseHandle(mutex);1 `- u) u5 r3 u2 X5 x" R8 ]* h
  542. 3 D0 C* v8 U) ]# h6 I
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" K- s/ Q+ m3 {0 ~  Y9 i

  544. 0 r, _1 S0 z& D' r- W. O
  545.         AfxEnableControlContainer();. t' S' M1 h) D& |
  546. , c( J, m+ w9 j3 e2 w0 M
  547.   bCanUpdate=FALSE;4 ^; z7 X* ~6 b1 ?
  548.   dwStartUpSteps=1;
    2 s! l% T1 a7 U; G) h  _/ U5 a% V' \
  549.   dwProgramState=AP_NOTHING;0 ]5 p5 M; M8 s, L

  550. 2 H3 s: t/ u5 \  |7 B
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);! R* y3 J* g9 X0 a" V

  552. 5 x, i+ K( M/ g9 H+ ^2 z- D) K
  553.         // Standard initialization
    # e' n$ U4 q6 M2 L0 O2 d; _
  554.         // If you are not using these features and wish to reduce the size
    0 Z8 [7 n5 a' Y; [
  555.         //  of your final executable, you should remove from the following
    # c4 [& M! ^, X8 ?
  556.         //  the specific initialization routines you do not need.
    : A0 |) x& J; Y) ^' Y/ G
  557. 9 G2 u5 I6 }3 A( D, j# S
  558. #ifdef _AFXDLL
    - X. u& A8 e3 n
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ( w* t+ Y9 E/ S9 s1 L
  560. #else" _" g* X' @: Z' j# H* O2 V4 r- w  D8 N
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically; t! ~: A3 w9 x8 @( K  U$ i9 i
  562. #endif! {. t0 z! ^$ i" A* A* U) A. J
  563. 9 X0 Y: e6 q$ u- {: P0 t' K4 w
  564.   dlg=new CRevAppDlg;
    0 R% h' ?; \) j7 @& n& {5 D
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    % I2 b( \+ N/ i+ |
  566.   dlg->ShowWindow(SW_SHOWNORMAL);) }" I2 a7 D3 n. X3 D5 D
  567.   m_pMainWnd=dlg;# E& H6 M9 M* n: C: K2 {& b

  568. ; r; q0 y2 r' _9 |' E! e4 Y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);" p( V, m* d& ?6 d; R
  570. . ?) [& r" h* ?' ]0 j
  571. //  GdiplusStartupInput gdiplusStartupInput;
    ' Z' b( S* u) j" }3 q" u
  572. //  ULONG_PTR gdiplusToken;
    , ^9 s' r8 }! }+ H( F! s! r) d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);6 v8 A& h0 N( u) \

  574. * [& o  w2 w: t6 J. Y
  575. //        CRevAppDlg dlg;
    2 k- s( P4 e, c0 J9 F; r
  576. //        int nResponse = dlg.DoModal();% {  w+ d0 A7 a) u" P; S
  577. //        if (nResponse == IDOK)
    " ^/ l# i3 }: |1 |) m/ t
  578. //        {
    1 }, d: k, ^5 W$ E3 C4 m. D( u
  579. //                // TODO: Place code here to handle when the dialog is
    ( V. X, ^( i! X0 o
  580. //                //  dismissed with OK/ C6 R0 F% z- b# b
  581. //        }) A- i7 \6 m. l1 I" K3 n
  582. //        else if (nResponse == IDCANCEL)
    , Q7 W- I1 D4 V2 T! W! S
  583. //        {5 Z' R% h& d. |
  584. //                // TODO: Place code here to handle when the dialog is$ H/ l2 ]* h! x% o9 q
  585. //                //  dismissed with Cancel) k0 ^( J1 M7 n3 K9 T
  586. //        }
    & K( w' G6 X8 G& R% m
  587. # C/ Y4 }- n# E; e* K1 u  i( b
  588.         // Since the dialog has been closed, return FALSE so that we exit the' W$ g2 V  q5 O4 Y' N
  589.         //  application, rather than start the application's message pump./ E1 M6 m# ]- p5 \  J2 r
  590.         return TRUE;# m$ S3 r" a9 W9 A7 i' q1 e
  591. }$ S' y) [3 |0 t. D

  592.   P! S5 x& I% l
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 O" h1 A& z0 C& }
  594. {
    ( Y- D: N4 \  ^- R2 {5 j8 q, q1 f
  595.   int i;
    2 R* f( `. _, i, L9 ?
  596.   char *szRet;
    3 b; W0 L1 R, E1 C2 u* B
  597. ) Z4 T. K6 Y/ I$ u. _1 M' H
  598.   if(pSource) { itoken=0; sztoken=pSource; }) m% V: @3 _5 i  f& h
  599.   if(sztoken)+ h: k7 e, j( l5 t$ R
  600.   {
    6 m! U  Y# u" L& w, K3 l1 R9 X
  601.     szRet=&sztoken[itoken];; d. o& A* l7 z, R; v
  602.     while(sztoken[itoken])& C  q: `4 l9 c* W; T4 m
  603.     {
    0 d% m" t; u- T/ v! a0 K
  604.       for(i=0;i<(int)strlen(token);i++)5 M+ x8 ^4 R) x# Z9 l
  605.       {, D2 U/ N2 E, c# {4 j8 e
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])3 H+ U7 V* B& X: X
  607.         {& W3 y" Q5 G( G: V" d7 J
  608.           sztoken[itoken++]=0;# t- N; y7 Z4 d" Y: m; N$ W3 [
  609.           sztoken[itoken++]=0;. k- q; @# d# j, b# n3 r! u' t
  610.           return szRet;" r& _, i; A5 U
  611.         }! p' [3 j& q1 U1 _% O1 v* n1 Y; J
  612.       }
    : t  l" Y6 G9 t" C
  613.       itoken++;
    1 D( k7 e5 L" J$ c' S4 A  A8 h% O$ q
  614.     }
    1 s& {" P* o+ f0 T7 V
  615.   }
    1 ?  C! p% o5 K; `4 I
  616.   return NULL;
    0 V3 s2 E1 A) }9 C& v
  617. }
    1 T: a( ^9 X8 I  Q$ ^
  618. # q" R9 }$ j7 T  m) e% ^7 d9 k4 m
  619. void ProcessProc(long Total,long Current)
    9 X0 A" o7 D6 P: l: N0 n+ x3 T
  620. {
    $ i; |4 f: j! `( Y+ e7 b) M
  621.         MSG msg;
    * K/ k' j& Q" h( g
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);. v5 Q* a4 n' G- ?3 B0 Y' e: y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    4 M; d9 R3 N. S2 y6 W- }1 P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    - S; T; P" G$ [+ v, l/ ~3 h) }
  625.         {4 J- |0 c  a( g3 Q$ [% L$ A+ _
  626.                 if(!GetMessage(&msg,NULL,0,0))
    3 I5 q, m0 v" D1 n) t3 Z
  627.                 {% N+ v, p7 a& t, e4 }* ?. [5 \
  628.                         return;$ V( O  Y% U* [6 U
  629.                 }
    , D& n  V, Z$ K( o- J6 j1 `
  630.                 TranslateMessage(&msg);- ~  r0 v+ N. L! r) u' b' N
  631.                 DispatchMessage(&msg);
    + @7 b( T  u6 X) i6 ~6 |. a
  632.         }       
    . E' p1 E' b* a5 x" F! C
  633. }
    ( t( `5 e  S0 H% m  x
  634. $ @8 F: _8 V. K9 q9 t5 }- q
  635. BOOL bFirstChar=TRUE;
    1 o, O+ {- E9 L9 x8 H, W* P/ P5 J

  636. ! T: @* _- x* O' U; J* F
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    & q+ S9 k; L3 m
  638. {' U6 @4 H. y  Z0 z  _9 i- C
  639.         // TODO: Add your specialized code here and/or call the base class
    4 x" n7 Q0 X8 H1 r' J  y" b
  640.   switch(dwProgramState)" D; Z9 O( L2 W" t- I& Y
  641.   {# H& @) c0 k. M
  642.   case AP_NOTHING:
    / f+ m, [! `+ |8 z1 j( w
  643.     switch(dwStartUpSteps)
    5 i8 y8 X8 @- K- g" w2 b  C2 r
  644.     {+ j4 q9 ^, m: e
  645.     case 1:
    9 y- x" j9 N6 g8 ]# D# T! o
  646.       {7 \/ b) c: V  w  D0 i4 X5 N) h
  647.         int i;
    ) B( L( u$ @% g
  648.         CDC *pCDC=dlg->GetDC();  `! Q  \; R) }+ a; J2 C- M* R
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 S, Z- b4 A; D# d, X' |/ V
  650. //        Graphics graphics(hdcwnd);
    ! H6 I* L! U+ \
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ' Q9 I% F: V# ^* l4 `% W
  652. //        INT iWidth=bitmap.GetWidth();
    ; ^, [8 _$ c7 c9 {- Q
  653. //        INT iHeight=bitmap.GetHeight();
    / }. J" N# \, O, R3 z/ R" ?
  654. //        Color color,colorTemp;* i' J; O3 r1 Z5 {  ?( g/ D" G- ^
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)* |& V; {7 X# j% O
  656. //        {7 G, ~( G# s% \: I9 ]3 q: f- q
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)3 S& J" m6 ^& U) _& n! R0 [
  658. //          {
    , z* q: d# V; z$ m- u2 a' k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    & q, j  D- z& X3 P) U' ]
  660. //            colorTemp.SetValue(color.MakeARGB(
    7 k9 R5 h2 w, e& z9 _
  661. //              (BYTE)(255*iColumn/iWidth),
    1 C( e* w4 h) \; D8 t- j, }
  662. //              color.GetRed(),
    - e' }7 v3 o9 P; A; w
  663. //              color.GetGreen(),
    7 [* O0 L; _. u* q# ~# U
  664. //              color.GetBlue()));
    7 E% M7 L* S4 p: K
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 R3 F$ t- T  K, p2 g' o
  666. //          }% X7 E' m9 D( }/ |  a
  667. //        }. ]  P1 ?7 e, f: a
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);! C/ N* X7 S/ z3 T
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");3 p4 r# n) z# z' c7 H2 }: _
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    . C  J( X, G, b  u$ D; ]
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
      J$ B3 ^: G) J& |) h* G- v/ X
  672.         for(i=0;i<240;i+=8)2 v# d9 p; u% @# V+ K( D* R' P
  673.         {
    $ }& c1 w5 y' E8 l6 R% [) m9 y0 D; @
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);/ t4 }" O0 y4 n1 t9 Q
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ) @9 u! Y5 _* y1 m% ?# X5 W: q+ C
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);% f6 Y" {% V: M
  677.           Sleep(33);
    5 q% d1 U  [5 q; C4 N- _
  678.         }. p2 U! t( Z& W6 v' ^+ z8 K4 ?
  679.         Sleep(1000);- ]: o7 n/ [7 y- x1 A
  680.         for(i=240;i>0;i-=8)4 z2 @, M5 K3 s1 g+ H3 F; O+ P# i
  681.         {. d, Y8 T; w: p+ U0 ^- E9 v4 f
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    5 z2 R: H# c. t: i+ ?1 s) j5 t* x
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);0 \0 o; S# }6 v& D4 S" Y- y. w
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! {) F. t1 Y1 Y$ Z8 I8 P
  685.           Sleep(33);) n1 y$ p! D6 Y8 [& x
  686.         }$ k0 z2 e& \+ q6 Q4 u* |
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    , ?9 d8 O$ |  ]/ n/ s4 u
  688.         dlg->ReleaseDC(pCDC);
    ! m6 O  y. Q; s  R! o# U* O; O/ e
  689.         DeleteDC(hdctar);
    ; T. c' I, x; B' w; Q$ }5 E& _) L
  690.         DeleteDC(hdcsrc);+ [+ Q! V  v/ W
  691.         DeleteDC(hdcorg);+ v. _$ k% n2 X6 x+ b
  692.       }( [% h) E6 F* S2 J. F$ W
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    & _% r) D) ?6 r$ a3 t# M0 l/ U  h8 z
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");7 v# L. u' `+ a; \1 `
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");8 `0 B$ C" w" ]# {& v# I' F
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& {( b7 Y$ B! q) D" g
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' I: i3 ^& j( Q* S% f/ r" g
  698.       if(!Dn.Connected()); a: e7 U6 _# X+ s
  699.       {7 [3 A$ w8 ^0 H% W$ b8 Y
  700.         dwTotalFiles=1;9 i: K- \) z& x* |$ H
  701.         dwDownLoaded=0;) m3 n* i9 C4 c3 L: }
  702.         bSilentStep=TRUE;- \& X" X% R$ G/ I
  703.         bCompressed=FALSE;1 w  p# L2 P: x# o8 a( j! N2 y, }
  704.         strExtLocal.Empty();! R* V+ H+ h1 ?- g# \
  705.         strFullName="readme.txt";2 Z2 [- J$ \# D! J4 w2 ~
  706.         dwProgramState=AP_CONNECT;
    2 l! V4 q" Y( W9 Q, i
  707.       }2 D0 D* C/ x  j( L9 a. U
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();' V( @# t' `4 h5 ?0 D
  709.       dwStartUpSteps=2;
    ) a* H; x. @% u( ~2 g4 F
  710.       break;5 d/ G" @9 H% n% c
  711.     case 2:
    % S6 @+ ~) h7 n5 ?; G+ M2 ]! b
  712.       {9 O5 G- p7 ^& f: i
  713.         int iEOF;+ b  K- Q& m3 n, w, i/ O
  714.         FILE *fp;* N4 l$ ]3 z! _) _2 P4 U% E: k) I
  715.         char szString[512];$ N, B$ ], ]' m5 x) Z" s
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");0 K9 N' S% }  O' f, j# f
  717.         if(fp)! v( d0 v2 f* F- X  u" s
  718.         {) T# ?& D, Q6 W7 s* i
  719.           do# k( k) T1 U1 e- G4 Y' Q* I& H7 e
  720.           {8 p( G: _1 `0 w0 p2 B
  721.             iEOF=fscanf(fp,"%s",szString);; c- }6 |( J- v7 x5 k
  722.             if(strlen(szString))
    . V. A) L$ Y  f4 r
  723.             {0 M2 R. w+ X! V* D4 d7 D: ^
  724.               if(bFirstChar)6 R% X+ @' C6 s8 l7 f# E4 N" N
  725.               {0 H7 F  N0 z/ m, K* P: {, ^
  726.                 bFirstChar=FALSE;+ B2 z- C1 t; K# v& X
  727.                 bConnectIsBig5=FALSE;
    + Q$ l& e' l8 X3 N. V
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;+ R2 H0 ?: l2 v' X
  729.               }
    8 ?  X" U: L7 C
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));: Q; C9 S6 F; d0 `
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    5 N7 u7 s: g' x) [4 W" p
  732.               dlg->m_ListText.AddString(szString);
    : }0 K' `: b  ]
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 p7 m& t! n& Q% B9 P
  734.               *szString=0;
    : M/ b$ q5 X( R
  735.             }
    # |% c6 L0 [1 J
  736.           } while(iEOF!=EOF);
    9 {, ]8 Z2 t# S  b& e$ g
  737.           fclose(fp);
    % ~, u. O7 V, d5 {5 D
  738.           unlink(".\\DownLoad\\readme.txt");
    : m% q: j4 m: Y% Z4 M& V3 F8 e& i! ]
  739.           dwStartUpSteps=3;. w: T% \6 V% x0 n- l
  740.         }  v4 U3 F- V+ E) v% {8 {
  741.       }3 o+ Y( X: r3 U
  742.       break;) c( U2 z0 S4 K2 g; \$ y
  743.     case 3:
    3 l9 c3 Z" S8 [; \
  744.       if(!Dn.Connected())
    1 s4 \6 h, }: f( o3 }* L
  745.       {( M) o, U- R* B3 Z& n
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    ; ^! v) o, D, @) D
  747.         dwTotalFiles=1;, u- {6 X4 Y) d" E1 p; d
  748.         dwDownLoaded=0;5 O! r5 {# B/ x, }5 C- U
  749.         bSilentStep=TRUE;
    8 f7 T( S' o! a4 o4 \6 P1 G% S
  750.         bCompressed=FALSE;6 a1 M9 x8 Y3 X9 y  Q5 m5 y
  751.         strExtLocal.Empty();  H4 _; Z0 w' q: k
  752.         strFullName="checkversion.txt";+ M* m6 d% D5 |
  753.         dwProgramState=AP_CONNECT;
    : H4 Q+ V, `  l. @" r/ V, y
  754.       }1 c+ g0 Z' ?, l
  755.       dwStartUpSteps=4;
    8 a" Z) ]$ Y  B8 w* n3 K
  756.       break;
    + p* ?( P5 [+ J* D
  757.     case 4:. C/ S: ]; M; s1 S
  758.       {' H+ ^6 m1 G, ~% o
  759.         FILE *fp;
    2 {7 b8 N$ F* o
  760.         char szString1[128];
    4 w, V( s) L- ^' a5 d
  761.         char szString2[128];. Q7 j" R7 O6 w2 A
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    & F) U0 F8 S/ o+ _9 u1 N
  763.         if(fp)
      Y; o- K' D9 X9 s
  764.         {% ?) k: T3 E1 }! Q1 p! |
  765.           fscanf(fp,"%s",szString1);
    $ t7 n5 F; i3 k6 M! x
  766.           fclose(fp);
    5 Q+ Z+ U6 \& h5 v  o* e& x7 H
  767.           fCheckVersion=atof(szString1);" D0 }2 i  `3 H! P7 W( P
  768.           fp=fopen(".\\checkversion.dat","r");
    & u; Y5 d) E0 o# B" i$ K3 b
  769.           if(fp)
      t) Y9 C% K! [+ S# j& `2 b
  770.           {
    " _& d! @! V  {8 {+ l/ O
  771.             fscanf(fp,"%s",szString2);9 D$ H7 J8 A6 \" u$ g4 ]
  772.             fclose(fp);
    ) g% q3 C/ R; A
  773.             if(atof(szString1)!=atof(szString2))8 \( E: Z" L! j4 U" z' ]0 e  Q5 N8 k( T
  774.             {
    ; c7 ]7 c5 I6 l3 O+ V% O$ q7 t
  775.               if(!Dn.Connected())* P; z  L4 R1 T! m5 a( [5 R
  776.               {8 z1 [6 H# H4 c% Y  I0 I. x! p
  777.                 bFirstUpdate=TRUE;
    2 }$ H, i! Z7 b6 V. `4 r
  778.                 dwTotalFiles=1;" v: u7 G2 I, C5 D) k4 \
  779.                 dwDownLoaded=0;/ R7 Q6 q6 m& @" @& {
  780.                 bSilentStep=FALSE;+ Y5 p7 F" n- {4 m: |% p
  781.                 bCompressed=TRUE;
    " Q- ?7 |. |9 b, G4 B6 n8 e, i
  782.                 strExtLocal=".\\DownLoad\";7 i/ ?. g/ V3 w6 I
  783.                 strFullName="update.txt";
    / G$ e% `# X3 Y5 g3 o- ]+ E# N7 ~0 M
  784.                 dwProgramState=AP_CONNECT;* \0 N9 ^: L9 g* F: ~% `
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");" Z! C3 H1 S6 s' |
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");' \: `/ U; |8 z
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 I9 d  C5 Q( N
  788. ! I) v8 t3 x% A- n7 a- M
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! c4 }2 L0 H0 a7 E
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    1 y5 t0 X0 ?5 y- o
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / q9 L" ?2 B, e2 ]2 G
  792.                 {
    5 k( a8 W3 f0 b2 [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");- @4 B& s# E7 s
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    8 G3 \: v& e) M) C  D) }4 q
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");2 `0 M# A+ R! I( Y5 }/ u
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& ^7 \- ^2 O. z; S. d4 v$ }

  797. - B2 \3 l) Q5 @% u; P3 T" K9 h
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- n. T: K* M% s$ H  S" z* K" I& c: }. m
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, K& i4 ~( ~5 {3 M( e; A* w
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");1 r) R& y. S/ i4 I0 m& [) ~" [; b  u
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    7 ?- O1 x+ i; Y  A- ^) k
  802.                 }+ p) w% ]; _( d
  803.                 dwStartUpSteps=5;5 E' _7 _7 e; A* }* y7 n) n) ~
  804.               }
    ' H# _( Q2 a) ^/ O
  805.             }, ?$ g$ M! p7 j5 z% n
  806.             else
    3 D2 A& \3 F; [2 }
  807.             {3 \" v4 R  F" G  i8 u! [. I7 z  }
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ( B8 h) \% ^8 O1 G2 o5 j
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");" K/ Z1 M! A6 q$ B7 e
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");, C# }1 e8 x1 W0 z1 V# I/ u; R5 ~" G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 {, P  D: h  S, l- y* V

  812. 0 I% I3 t, r: N2 |1 B
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    $ y1 t( K; i* h% F8 A8 I
  814.               dwStartUpSteps=99;
    * l+ Z* @) z- e' r$ x' r. p4 d
  815.               bFinishUpdated=TRUE;/ b. R- F* F! L. I) B8 d
  816.               bCanUpdate=TRUE;
    ! j* c8 G  p7 r* k2 e1 l& X; e0 _
  817.             }2 A  \. K8 i. ]( I/ H) m% k
  818.           }! n  n* X6 `$ n# L" q# q. z% `
  819.           else
    $ U7 }$ I: X6 o! D) t. L/ ?
  820.           {
    $ i; ~. m7 Y' y6 p2 A+ R4 P) M
  821.             if(!Dn.Connected())
    ( d5 u; M/ J+ s" ?4 j
  822.             {& {: {1 \% g7 b1 z! e* O6 M) L
  823.               bFirstUpdate=TRUE;+ }5 X7 e# o" u8 z9 [! u9 S0 V& y
  824.               dwTotalFiles=1;$ C0 B8 j+ Z1 o& d6 x) F6 I
  825.               dwDownLoaded=0;% ~; d3 }0 {; y# L2 D4 d- ]. G
  826.               bSilentStep=FALSE;, L% U7 A3 G& r) T8 P
  827.               bCompressed=TRUE;
    % f2 H- `* `1 G" a9 c9 \  [" x. y
  828.               strExtLocal=".\\DownLoad\";
    ' @0 `3 b: M) N& M$ h  b1 N! f  F
  829.               strFullName="update.txt";* }1 X' n" [9 x  i# S# ~
  830.               dwProgramState=AP_CONNECT;
    ! W1 U6 _' C% O" \3 u
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    & p2 k3 y& _3 V) `  ]
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 T+ N0 S. `( L" K0 e
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' I3 s( U8 V9 P0 ?8 W9 [
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 a, A3 V7 D( l, A
  835.               unlink(".\\DownLoad\\checkversion.txt");) \- l6 K. H  U9 [6 f
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , x4 a8 [7 [& Y
  837.               {/ ?2 I& {- ^8 N/ [1 p9 H' M
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");" P+ Q: g- t9 O: c
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    5 Z# z: L5 h* R$ B! J* B6 Z
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    & \, e9 Z$ \1 P& o; L8 h
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);9 @$ h  P1 G3 A: t5 E+ p( C$ `
  842.                
    : q* t9 p0 i1 S1 M. n3 r8 D3 K3 N
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; k+ L9 a2 ]( S: ?
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    & Z0 `7 p4 e. N9 Q
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    + ~& {1 V) X/ P3 R: T8 g
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - \# L6 P) p+ j' n1 Y
  847.               }, Z) U' L1 Q/ B8 P
  848.               dwStartUpSteps=5;
    . y# ]% X2 w# V: a
  849.             }$ V) J1 S$ U- V  p( f$ |' |
  850.           }
    8 G7 `+ {7 Y7 P+ E5 `8 k
  851.         }
    : p/ ?& G7 @" I! R" [* s
  852.         else$ L7 l9 G6 e" i) M" |1 S
  853.         {
    . p; ]9 _1 r% y' H4 k
  854.           dwStartUpSteps=3;/ O1 i! A  J+ a" A* C: O
  855.         }
    1 O' l1 ?' E/ N, g, U; \9 T
  856.       }
    2 x' K! G) E7 x# ]+ y* X( u$ s
  857.       break;
    3 Z8 O4 h9 c' B6 a1 Z& f5 ]
  858.     case 5:2 s1 J9 _% ?: x
  859.       {
    3 r4 o. Q+ e- d2 x# A' Y6 a9 s
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)( U1 _3 X; ]0 }
  861.         {
    / f$ X) z3 ~; N! Q# }
  862.           int opt_overwrite=1;
    8 n4 j; ^# R) ]+ ~
  863.           int opt_do_extract_withoutpath=0;
    ( }# `$ s5 @* x, [4 e# f' T. \& B* i  }
  864.           unzFile uf=NULL;
      I/ M/ w& r, d9 h& U5 [( `% x
  865.   E; Y) ]$ [2 x
  866.           uf=unzOpen("Wsa.zip");
    # ]$ p/ H! |2 L# k8 R/ f
  867.           if(uf)0 H! y% M9 A: E! v/ ~. @" j
  868.           {% M! h& i- l% g0 d  T0 {0 K
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
      ~4 T$ n% j  l# @" {  R  `
  870.             unzClose(uf);; f( F: ?1 o8 g: Q
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    1 F7 k. O1 V$ C& R2 z
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    , Z7 H$ U& z: ]. F* a; _2 ^. C
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    & a$ r, d* m6 p* l% r3 x0 d
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 A3 b9 m4 f7 I' p0 |
  875.           }
    " {: {: U' i" v  I' W/ j
  876.           DeleteFile("Wsa.zip" );
    ; k2 ~( t+ |3 u& W( l0 P
  877.         }
    7 t7 ?6 w% c+ v9 ^; m  f5 c$ P

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

8 m( z+ C3 p# d. S
8 s+ t  k4 |' P" y! I8 V+ Y( ^

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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