CSUpdate.exe源代码

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

/ S, }  u& m1 w0 L# ]
  1. / RevApp.cpp : Defines the class behaviors for the application.2 y$ r4 u3 H! k7 k/ y" N
  2. //
    8 D0 D) x2 f! f
  3. ; w; V6 L3 A0 \8 e3 V7 q" X1 V! C8 k3 X
  4. #include "stdafx.h"
    % \* l+ a$ Z8 E7 U! _8 Z) c1 b
  5. ) ^% _( T; q$ |& s& ?: o
  6. //#define UNICODE9 M8 i7 \  g( i1 j1 Y# j% w4 }  y
  7. //#include <gdiplus.h>
    , j$ X6 _; I; F
  8. //using namespace Gdiplus;
    - N: z6 R" @6 Z$ W

  9. ' T$ ?$ A9 a. E: e$ n
  10. #include "RevApp.h"
    5 _3 F7 X( K7 H
  11. #include "RevAppDlg.h"! ]7 p5 j& d/ t0 D# G0 Q: X

  12. 2 F& W, U- \3 i$ e8 T- F
  13. #pragma warning(disable:4786)
    3 s8 y& d9 l7 @, j, p9 Q; Q
  14. #include <map>3 H/ Z$ q+ i$ e6 A0 M* Z, U0 [; G; F
  15. #include <list>) g$ f! o+ O1 ^7 V. o" M
  16. #include <direct.h>
    0 G% ^( `2 F5 M! S; {2 |6 W( u& k

  17. 2 X/ {8 F9 g9 k) ?- |  N
  18. #ifdef _DEBUG4 v" F  J8 M( ?0 T
  19. #define new DEBUG_NEW
    " ]9 t# w1 |2 k( Y* Z
  20. #undef THIS_FILE6 H% l! }2 n7 i4 a
  21. static char THIS_FILE[] = __FILE__;
    / W) _& M! V* t& W$ u/ D8 I6 u& h
  22. #endif% T6 x! R8 `! t* B  k% l
  23. #include "SkinResDef.h"3 b; O8 R2 K2 g- C* ?
  24. #include "ChangeBG.h") g6 o/ e4 f9 b0 n
  25. #include "AFXINET.H"
    , N) W) m, K& b; q

  26. . D  j( @! S. D( [( P; a8 \. I" W
  27. #define TRADITIONAL_CHINESE 0- n% n, ~1 ?; k) r: ~2 _
  28. #define SIMPLIFY_CHINESE 1; S$ u& j5 u; P8 c  o1 P. [' V
  29. #define ENGLISH 2
    ! z5 m: [  ]& v9 T, S
  30. int m_iLanguage = ENGLISH;
    # W4 H' y9 q% r- ^& B5 X% T. W
  31. /////////////////////////////////////////////////////////////////////////////# l  k. X9 y- D, @
  32. // CRevAppApp1 H2 K% {1 x0 k/ T" q2 ^
  33. 3 x! g, `% `* z% K
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp); V3 ~/ H5 K' ^  [& n$ W
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    & B1 h  i( Q9 ]; [' e7 _
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    $ p3 a; j' c! {* |! a
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!& e' a) w8 ~% a/ e" h
  38.         //}}AFX_MSG
    9 P& V& O; q) s  X# v9 G3 w
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    2 ?% t5 Z7 f' I1 t7 v5 P( m3 h5 V* b
  40. END_MESSAGE_MAP()
    1 ?& F0 q: ~3 S/ F: F

  41. 5 l" L" l6 G( }0 T
  42. /////////////////////////////////////////////////////////////////////////////
      s4 G& \6 j& c) b* J1 B) U
  43. // CRevAppApp construction
    3 Q3 P- d$ k( s. V# Z0 k" O
  44. ( i/ f7 z# t/ {- a0 G1 u( c
  45. CRevAppApp::CRevAppApp()
    1 @8 Z3 g7 Q/ t$ {
  46. {
    # A5 R$ F4 |" S' R& w3 q: \8 {
  47.         // TODO: add construction code here,5 m5 S2 m. ?9 V5 E' `$ t  b
  48.         // Place all significant initialization in InitInstance5 C* H7 C& r3 x0 h6 j+ T
  49.   bDisplayIsBig5=FALSE;
    5 v% o" I* u; b! ]; ?/ }- \1 n
  50.   bRestartUpdater=FALSE;* n1 `2 g- h& N
  51.   bFinishUpdated=FALSE;
    1 x$ ]; H) x  a) K- E
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( H, P/ T3 o% A$ d3 F# p* O
  53.   InitChangeDataBig52GBKS();! S+ ~! w' a" r3 R- |9 I
  54.   InitChangeDataGBKS2Big5();* r' x5 L( N* K; ^4 E
  55.         //
      Q* K" I  C9 k3 g4 e' Q
  56.         bClickRunExe = FALSE;
    5 |' S* ]4 b6 f- a* n1 r
  57.         //  |# ^) p7 W* H0 L. w+ I, ~/ I
  58. }
    * B) A9 j* o# W" |4 e7 s; ~% l3 j
  59. - F9 w" a3 Z% C( o! S
  60. CRevAppApp::~CRevAppApp()
    ' X6 l& d4 E) o6 u$ V
  61. {0 l! @/ j5 {5 y7 A0 X
  62.         // TODO: add construction code here,- ~8 ~$ _4 o* h0 S* z- S3 R( Y6 s" N% x
  63.         // Place all significant initialization in InitInstance- l# `+ y5 u/ L7 }$ D. U$ H3 ~, N3 c
  64.   EndChangeData();
    . o* t# g  {8 c: a' j2 _
  65. }# \7 w  }( q6 `1 n, B$ c% b4 }; `
  66. / s. W' [" I  c1 V0 R) O4 {
  67. /////////////////////////////////////////////////////////////////////////////
    / ^! Q$ o1 B8 R, k; b' u/ A
  68. // The one and only CRevAppApp object% `+ p4 B2 O+ g  S
  69. # D" g6 K- Q1 z" a1 r5 _) l
  70. CRevAppApp theApp;
    % [4 \3 P( i4 ^; M  Q( R( l
  71. 6 {, P7 F1 {* i4 L
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    - U3 V9 ^/ f& D! ~  i. x& s+ `) H
  73. {+ d0 C  r2 l, f5 r: n& [
  74.   int iEOF=0;4 @6 c# m, G! B/ F" i1 Y: T
  75.   char szTempName[MAX_PATH];
    1 d/ ^7 N0 S" M) a
  76.   *szFileName=0;
    + o/ i( t2 o) a2 A3 @# b5 K
  77.   iEOF=fscanf(fp,"%s",szTempName);4 u% `4 E" Y- `2 y2 t5 `1 m
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    $ b" f5 d% E. d& y6 M! w. m
  79.   {' B2 ?* }" P. V, }) i* P- p7 ?! e
  80.     strcpy(szFileName,&szTempName[1]);4 ^! K; N. Q* i2 y. }" L
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)9 n' l( l- B& W! y9 z. r
  82.     {
    2 G, f4 k. b% e" }
  83.       iEOF=fscanf(fp,"%s",szTempName);5 M1 s  U# h; B& R/ m9 D# S
  84.       strcat(szFileName," ");; a$ F" T. Z! y7 V- i
  85.       strcat(szFileName,szTempName);" c; o. ]3 U3 Q. X  b
  86.     }$ w! E$ P) \0 `( r$ p$ n
  87.     if(strlen(szFileName)>=1)1 T# F- M; G9 W* S/ H/ f6 A
  88.     {& ?7 {2 y# W9 h8 x8 Q7 y, K
  89.       szFileName[strlen(szFileName)-1]=0;5 E# D5 a4 S  C6 P$ e* A
  90.     }
    ! C+ z, y; ]* [# E
  91.   }
    ( \) _( w4 W$ I4 X! X. G4 f/ i
  92.   return szFileName;
    6 {* b& ?! t2 T' Y0 Y6 \
  93. }0 W5 v7 v$ y! p' C( I& ^. ]
  94. , F4 |  [4 ~- ]* M: W& x
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)9 o  G, S+ T. z( _! C
  96. {
    4 R  a  C  j' ?* B
  97.   FILE *fp;
    : F! X4 p0 W' N, f
  98.   char *key=NULL;
    * e# ]/ c& H9 ]" N5 g* Z6 P
  99.   char version[MAX_PATH];
    9 k. r5 l& ~3 s5 V; L- d
  100.   LPUPDATEFILE file,olds;5 v' [/ G+ O# n$ e2 l! W
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    0 s6 W: Y% R: Z  |5 o
  102. . ~; |- V  I0 H8 x. D
  103.   UpdateList.clear();
    , w  m5 p4 @; i2 o
  104.   UpdateFile.clear();& K- B: k' G$ [* s. u% I* Q0 F
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 m/ H/ |; ]2 x: s6 _$ S
  106.   if(!(fp=fopen(filename,"r"))) return false;
    * a2 W! j( o8 J# H8 W
  107.   fscanf(fp,"%s",version);
    5 p2 I: y% @5 W* g
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }3 ^% R6 k, v/ y; Q1 x, p0 D
  109.   while(fscanf(fp,"%s",version)!=EOF)
    ) T. u' n2 V9 T! S& o
  110.   {
    ) L* y+ {# V2 y. f: Z) J
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # S* V$ {; w. \3 B
  112.     fscanf(fp,"%s",file->path);3 H1 D# u) |  o# ~
  113.     ReadFileNames(fp,file->file);
    # e0 p) U) F% X& u4 v9 P2 [
  114.     strcpy(file->full,".");
    ' j' g" j+ w" t
  115.     strcat(file->full,file->path);
    ' H! T2 u) U( l) e  R9 O
  116.     strcat(file->full,file->file);
    $ O/ [$ f9 \) _; {" F* F( U: p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    ' J+ t, w  \5 Q( e9 @2 ]( y6 q
  118.     {- x% g+ Z) g, {- e7 |7 F, f
  119.       file->vers=(float)atof(version);
    7 P+ y: I6 g7 S3 D9 z7 L
  120.       UpdateList.push_back(file->full);
    ; x% z2 n& o$ S9 R: a# {! z) e/ P+ Y
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));6 w' l0 E* l( Q6 H8 ^7 q
  122.     }
    & l7 A7 k" Z7 p  z( M
  123.     else! F9 j5 n% c8 A
  124.     {, {3 e2 O' H" q- Q" n
  125.       olds=(*p).second;3 q. {  h4 \6 k2 t/ a
  126.       if(olds->vers<(float)atof(version))
    % d! r1 U; a6 L' q
  127.       {
    ( i  y9 Y9 g. H' R
  128.         olds->vers=(float)atof(version);! E& F1 ~& l+ g/ _
  129.       }
    / k- J4 t" V! R: m3 F4 T
  130.       free(file);! T4 k' y) Q/ j# N% s
  131.     }3 P4 Z/ [, d6 m  L* C/ I
  132.   }
    & R$ B% ?! y: V0 C/ W1 k
  133.   fclose(fp);
    3 D. M0 r) w; V5 p8 j9 V# s7 E' a
  134.   return true;
    2 l, o. Z/ j( `0 |. m% ?# ]
  135. }
    8 y% N8 U( {" f3 x7 s# u4 n. z
  136. 5 m) W" k* Y( v& u; ^/ O- z& ^
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    8 U  S. P; v$ s- ~, Z. [
  138. {( D3 g1 A, f# r; }
  139.   TCHAR  szFull[MAX_PATH];
    ! x* Z- b- {; X$ Z
  140.   TCHAR *token,*inter;
    * ^/ g; l4 R" v/ x
  141.   *szPath=0;
    ; G  L7 R$ [+ c( H9 B9 p" S" {$ p
  142.   strcpy(szFull,szFullPath);
    ( g& ]+ h' T/ L0 b- r
  143.   token=strtok(szFull,"\\/");' e" g8 O0 D6 @! @) d
  144.   inter=token;7 V9 ~/ g1 J1 x, ~) }6 c
  145.   while(token=strtok(NULL,"\\/"))* r; y8 o- \3 k" A& U& c
  146.   {# S2 R4 o4 J) Y4 F3 U: |$ N# _1 E7 ~
  147.     strcat(szPath,inter);9 y0 B/ ]6 R: ]* T3 Q: x) h8 L+ c$ ~
  148.     strcat(szPath,"\");: {: R6 x& D$ V9 `( e
  149.     inter=token;# i* z, w7 A" `: x4 u0 n- q
  150.   }- Q: F: A- T8 l
  151.   return strlen(szPath);) e$ p3 O, B4 |5 [1 H
  152. }
    ; W$ ~: `4 J+ i# J

  153. , Z2 y' Q9 X- N
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)* o0 P/ k* k* c) t! X+ \
  155. {" o( R* o; B( G; M3 a# w$ e
  156.   DWORD attrib=GetFileAttributes(Target);& ]+ P  J4 _" j$ O) W
  157.   if(attrib!=-1)% F) |, c4 W$ ~4 g9 c6 q/ c
  158.   {
    * P: G8 s( v, \. a0 R+ g- {
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ t3 G- i$ }; H+ H7 q' o, u
  160.     {1 Y2 @) K! z( P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);7 J2 o, l# }9 V4 c' u
  162.       SetFileAttributes(Target,attrib);
    7 {1 m7 }$ Q! m! |( G" Z7 s6 T  z+ |
  163.     }
      [4 E* F# R$ q' a/ X' p* a0 w
  164.   }8 R2 I3 a: u; [5 @, |8 l
  165.   CopyFile(Source,Target,Erase);
    * S- r: [9 o) `* \3 R) k& u
  166. }4 W/ ]) r2 x) o6 n0 O- |+ O% c
  167. / ^: o6 P! L! `% ^( L% L
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)1 c# ~+ ]1 F- X8 u3 ?1 e* D
  169. {
    9 J6 I. u6 `6 w" X
  170.      FILE *fp;
    ) M4 [) E* @( P) U5 v
  171.      char  szBuffer[8192];
    2 p: \9 D  c2 e$ j9 K; {- I  Z# d9 V& }
  172.   va_list  argptr;; t8 F" m; r( Q! K5 a

  173. : S) s4 L& O# @' c: `  d
  174.         va_start(argptr,message);4 u: Z0 C. V% g
  175.         vsprintf(szBuffer,message,argptr);1 y9 b9 ~& n9 f" Z) `- f
  176.         va_end(argptr);
    ! @* r" [( g1 O' `/ i! \
  177.   fp=fopen(FileName,"a");. K6 j2 }9 Y; e: K' \. _. \
  178.   if(fp)4 h; P2 v5 g0 ^$ W9 M
  179.   {7 E  L5 F! i  h$ n8 Q: `8 a
  180.     fprintf(fp,szBuffer);
    3 h# L1 `" j6 P: X$ \; J+ {
  181.     fclose(fp);9 p) o) ]0 k6 W1 g) n- Z
  182.           _flushall();
    7 y( x; s) `- s( u
  183.   }: L% u; g! _0 I8 P
  184. }
    5 c) A+ {, S6 ^' i# }' g3 j
  185. & E7 J) M) P! D
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    % I. Q+ g2 e! B+ n
  187. {
    5 o' ?4 W9 B9 g' V
  188.      FILE *fp;3 F9 a; j, K; R7 C' t: Z+ A! j
  189.     DWORD  attrib;
    ) r- Y3 j/ o% r+ m. m( Y
  190.   attrib=GetFileAttributes(FileName);) G( t. N7 z7 l' }5 {' |7 G, g" J2 B* ~
  191.   if(attrib!=-1)
    * r& Z- T/ n; l$ s# s9 Q
  192.   {
    5 F& ^5 a* E9 ~
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ( O, b2 V$ @* }/ h9 K" r
  194.     if(!SetFileAttributes(FileName,attrib))
    2 [! ?  F% t, x  b! n
  195.     {( i% V/ E" `& H8 z: w. o) H) Y# O
  196.       return FALSE;9 {) S9 b, |6 u& L% M: I
  197.     }! d7 K/ B$ i# z- m% v0 d7 |" E7 S
  198.   }9 o( _- x' P/ y/ ?1 X" p' ~
  199.   fp=fopen(FileName,"wb");3 e/ @$ m( \( C9 n9 C, I3 P
  200.   if(fp)
    9 q5 Q3 v/ p$ ?: }$ y' y! j
  201.   {" Q( U9 }( ^( \3 O
  202.     fclose(fp);; V. ^, R5 }" `4 o6 _2 [" c0 n
  203.   }( B5 W& c- G6 S
  204.   return TRUE;
    8 y1 {# ^" `; A; O4 E
  205. }
    ' C0 }, t: ]5 a# e
  206. + r/ _: Z; j* \8 C
  207. BOOL CRevAppApp::UpdateLocalVersion(void)' t' l7 K& J, s2 a
  208. {
    1 y9 f+ K1 e% D% [
  209.   char filename[MAX_PATH];
    + z/ o! a! e  m- w% t3 q
  210.   LPUPDATEFILE file,olds;
    / M! G( X6 z! c9 m, O% j
  211.   std::map<int,CString>::iterator i;
    % J$ m7 z2 a" J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;& O/ M9 i. F6 m5 L3 O
  213.   std::list<CString>::iterator l;
    7 H5 M5 s( L- h7 e
  214. 5 i0 [! `: E) p- I
  215.   if(bFirstUpdate)
    & U% E( i, T2 {7 i/ V" F
  216.   {" I4 q" V1 r3 N% ~& q" j
  217.     dwCurrFile=0;( n% ]7 g7 Y. n4 Q; q/ u3 Q
  218.     bFirstUpdate=FALSE;2 x. S; J1 _0 P  }
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    1 t* r, v8 n: @3 D
  220.     {
    * H3 f8 |* u3 A% V
  221.       dwTotalFiles=UpdateLocal.size();
    ; ~" u3 F9 @9 F' Z% C: e) p
  222.       dwDownLoaded=0;
    $ f' s' @# Q" A8 G% k
  223.       bSilentStep=FALSE;
    ( ]# w# U$ i& [2 S3 r
  224.       bCompressed=TRUE;& H, ~$ n' R2 H
  225.       strExtLocal.Empty();
    & o4 `7 Q$ F( X& W" |+ r
  226.       strFullName=(*i).second;
    , c6 S. f2 M! C; c, L, C3 g
  227.       dwProgramState=AP_CONNECT;+ @2 n' p9 F; l5 y2 ^! C7 j/ x
  228.       return TRUE;( Y1 P; M4 V  {0 e7 ^0 G. B
  229.     }
    ' v0 Z; N' e$ c0 r
  230.   }
    0 y  W5 t" i" |% v! _7 i
  231.   else if(bRestartUpdater==FALSE)* w* Z$ O/ q8 z; ?3 D
  232.   {
    6 `& K6 S4 Z5 V
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    # @5 |/ F( z4 M/ k: A) H  M
  234.     {/ h9 m/ H2 R5 @4 V
  235.       file=(*p).second;
    , S* f4 P" c' d& Q
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())& W8 s0 a$ X! m- c8 h% `1 e
  237.       {8 G5 p7 v. ]! e; d0 W
  238.         olds=(*p).second;4 o3 ^5 W  l' X9 {
  239.         olds->vers=file->vers;
    : A0 O# r' |; W, J1 t5 k; O
  240.       }
    - [8 y& K& x" ~8 S2 F- E) v, ?/ S
  241.       else; p# @1 o8 R) p0 t
  242.       {0 M% @% |; w, i3 N) i1 F
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# h8 O( b9 l9 B" U. A
  244.         memcpy(olds,file,sizeof(UPDATEFILE));6 N) c8 v9 r! L- x2 @$ D' _; H
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));7 ?" |: z( l+ a6 o) w: l% r2 _. |
  246.       }
    , _# S3 B: y: }5 o
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");! j* ^9 a& r$ V* P) N  i0 e
  248.       sprintf(filename,"(%s)",file->file);
    + c' b# I: O0 U- U
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. ~- R# h3 Q7 B7 L. o: i
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" N5 @+ d0 i! [4 ?! p
  251.     }
    # E4 p- C& ~) n" k" }2 @9 N; I
  252.     dwCurrFile++;3 l' H# V. s* C: c4 r3 ^
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 W; L3 `! B& m  @% \( b
  254.     {9 z8 ~) k! w2 }
  255.       bSilentStep=FALSE;% K  R/ ^: M# v# m6 c! @
  256.       bCompressed=TRUE;/ g* {6 y7 S" Z5 m+ {
  257.       strExtLocal.Empty();
    7 S/ T  J  Q$ [) B. F  w% e* q5 j
  258.       strFullName=(*i).second;
    , P0 _5 v8 D9 ]
  259.       dwProgramState=AP_CONNECT;  P) K* @) l# v$ {8 i* ?
  260.       return TRUE;
    5 k/ v. `- f5 E. Q
  261.     }3 U+ I" ^, B  r) f9 i8 ~
  262.     if(!bRestartUpdater)
    1 G- g0 S7 Y# i; G0 X# q
  263.     {
    ( ]0 B2 `! e: B- a+ M
  264.       int iCurrSize,iFileSize;/ h7 ^; b; c7 \8 H( Z% a
  265.       iCurrSize=0;) B& H& F6 T$ ^( ]/ M
  266.       iFileSize=UpdateList2.size();
    3 G+ _2 m! H1 N
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    2 N& j9 Q; {9 B9 V6 r7 J+ h
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    $ R6 Y" N: K. w, Z3 o
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");  ~7 W- L$ k, B; C  h5 X
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);3 Q: ^, A( A6 B5 }2 `9 S; m/ o) v
  271.       Fclearf(".\\update.dat");6 \& U' Q9 ~% U. u- _/ O
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    2 c0 l2 |9 ~: N! Z, p. l2 \
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++), W* T. H; x' m7 ?8 n2 _% T. D9 Y
  274.       {
      N* i- j3 k1 {8 m* c) T0 K/ r3 i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()), ?1 q5 |( [' G5 }
  276.         {
    5 P! ^) z9 _' B3 l* o" c( F3 l
  277.           file=(*p).second;4 Y: m8 F& a7 b; |0 q: b1 ?, n+ R3 r6 I
  278.           sprintf(filename,"(%s)",file->file);
    3 [, m5 B: U6 ?# }" J
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ' H) @" ?% Q/ b* W1 h& N
  280.           iCurrSize++;. a( Q, U( d% K" g, R( w  p
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    & T# ?  l9 e5 n6 E5 F- s8 g
  282.         }
    8 I' o3 X0 H5 {8 L
  283.       }
    ! k' U2 R  h9 c) A
  284.       unlink(".\\update.txt");
    4 p3 y: C2 m& x# |
  285.       unlink(".\\update.tmp");
    6 A# `' h) `  U* A5 x5 Z0 q
  286.       Fclearf(".\\checkversion.dat");
    8 I3 m* C5 V3 M1 J& p6 u
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    % g% a0 b- ^* x' \1 Y
  288.       if(UpdateLocal.size())
    7 W3 f6 K/ _, @
  289.       {
    9 ~; Z# k  h# f# h
  290.         UpdateLocal.clear();" B- C& I' y$ W
  291.       }; M5 \$ a7 y  D
  292.       if(UpdateFile3.size())
    + T$ D! D( T8 \7 b6 x/ R1 n
  293.       {
    8 d" \1 X8 p# [6 g- P' ?
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# B5 @* G+ i; ?' e: Z- N
  295.         {
    * I3 V" d$ t, \! \3 A& O3 t9 @
  296.           file=(*p).second;
    0 g9 v1 K# o8 ~) P3 `
  297.           free(file);
    : D8 u# P! E! a$ ~& A8 v
  298.         }& s8 f) v) e$ h5 B( u
  299.         UpdateFile3.clear();
    9 h7 U4 R( v8 X; _1 i+ r3 t
  300.         UpdateList3.clear();
    : B8 l* o( Y! G0 ?/ l7 W5 \, q7 [" b
  301.       }! S* B9 v8 I9 i- }1 k* i* ]
  302.       if(UpdateFile2.size())3 r, F! m* g7 K- v, ?# P+ X: S1 t
  303.       {$ ?* V, q3 p( W
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    : {8 F0 x" R( a: Z; x; i" @& ?
  305.         {
    4 b2 O+ T/ C6 X; T& y, w& l3 i- w% k
  306.           file=(*p).second;
    ) ]  v6 J/ g3 Q! S/ ?, s1 z0 q' l
  307.           free(file);5 j( A% S& g% a5 _: B  y9 M" u
  308.         }0 g3 {+ p( p7 B" j
  309.         UpdateFile2.clear();" U) p+ k) l/ q" h; b
  310.         UpdateList2.clear();
    : b8 {2 j2 D) X( J0 D
  311.       }- d# [& M5 K" v, C5 W* b
  312.       if(UpdateFile1.size())
    1 P( ^5 Y5 N0 w* n
  313.       {, [# H8 K& W4 U' C$ t* {2 t- H3 J
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # s1 P- J3 u( K: h2 Y$ X+ H. A
  315.         {' V0 h$ @0 J3 |5 s) Y  k! {, a# w. S
  316.           file=(*p).second;
    $ v0 ~: Q6 Y$ E+ o) }, }* W4 r
  317.           free(file);
    . \* a; @+ D) ^* V( ~
  318.         }  O  e" P$ P: p
  319.         UpdateFile1.clear();
    4 f/ i7 R" P1 J$ L1 t1 J$ F6 p
  320.         UpdateList1.clear();/ p: E9 B% w$ n+ A" G
  321.       }& e8 A0 O$ n8 s: v  p
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; O! z" t6 e  v) n1 R) ?$ h
  323.     }8 I( |# V9 U) f+ o
  324.   }# m4 }' g( h* I, g9 p
  325.   return FALSE;! Y8 w& m# ~9 _" L. l
  326. }4 v9 O1 f2 G0 Y; l6 Y# [- c
  327. 6 z+ y  j2 I& K2 j, k# u
  328. void CRevAppApp::ClearAll(void)
    ' Y7 k! ~& p! A( C, ^& w' F% D
  329. {' Y( v( N3 O# @/ n( m/ N4 E" P
  330.   LPUPDATEFILE file;* J* ?) y/ }( \+ p% r# H; k9 I
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 [- v5 x# O" q% ?5 s& j

  332. " ]" z- x, U1 G8 |. P+ U$ A
  333.   if(UpdateLocal.size())
    * y6 e. ?9 N# s9 _
  334.   {- i+ e! F- w% L2 |
  335.     UpdateLocal.clear();% A$ X  M) S6 K* T/ I2 R6 c& C. F
  336.   }, f) ]1 V3 J5 [. f
  337.   if(UpdateFile3.size())
    % l( r2 M* a, j
  338.   {
      s6 `& T) H5 }* G% o
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . b' c, ^1 _: U  y
  340.     {
    3 T% H1 N/ x% u/ x  C
  341.       file=(*p).second;4 G. g* J- C9 M# K0 c
  342.       free(file);# Z+ B  V0 K1 Z/ \  P3 G2 \9 y
  343.     }. p% h$ ^' O! F4 k+ n9 B
  344.     UpdateFile3.clear();
    8 Z# [& [  W3 j+ X
  345.     UpdateList3.clear();
    6 m' S/ {7 V7 T9 H
  346.   }
    4 r1 K- E# T2 q) [( Q- B
  347.   if(UpdateFile2.size())
    , F% K. l2 f' H( M$ V) b
  348.   {
    $ |( g3 y' l+ x' G% v
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ \5 w% x- o4 p9 f5 {6 D" \
  350.     {
    / M+ R# v" C% ^0 A  w1 S5 G
  351.       file=(*p).second;
    ! C, M& x6 p" B) L
  352.       free(file);
    9 t1 @; S# L( J9 T0 v
  353.     }
    4 m/ h+ C% s  S3 q6 S8 d' A1 [% W
  354.     UpdateFile2.clear();; t7 v( W+ A5 b3 u
  355.     UpdateList2.clear();/ n4 e& d7 C& ~% N' a; f
  356.   }
    5 M, q8 v1 D6 W; Y3 \& j( V2 t' E
  357.   if(UpdateFile1.size())
    % y- p* X( g) ?# c
  358.   {
    4 v) A1 i8 Y" a( f$ P0 l
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    $ W% c* }! b$ H3 d8 s, Z6 k
  360.     {; W' ^* z  [: a6 @
  361.       file=(*p).second;. o1 ]- b# G# o, c0 s
  362.       free(file);
    1 G# M2 {- R  R! c
  363.     }
    . [1 K6 w. [) ]
  364.     UpdateFile1.clear();
    " S) z# t6 G4 ^# ]1 G6 P
  365.     UpdateList1.clear();
    0 g+ s7 p+ W5 l
  366.   }
    9 c$ _: I" h) A2 Q/ @, s3 Z- w
  367. }  , c' q. V! N# Z5 e- P' o
  368.   / p2 L4 ?7 a, q8 X7 {
  369. BOOL CRevAppApp::CheckLocalVersion(void)9 e9 B: b  T0 U2 u! ~5 S
  370. {
      a9 V: q$ C! [; d  d9 n7 W) e/ c
  371.   int c;" `& v+ F8 a2 n/ n! i
  372.   LPUPDATEFILE file1,file2;
    ' ]2 S$ m6 f6 p/ z
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;8 l+ C. u# L3 a" ~' z+ Q
  374.   std::list<CString>::iterator l;1 N% z% X: s9 S% V% u

  375. - g; u2 ]% u/ Y8 j7 U; z4 q
  376.   UpdateLocal.clear();7 U3 y% s8 r9 a3 I* M9 o
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / Q6 y4 o0 L; ^& h5 g
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    + S( `6 F4 n' R# I4 D' {" d$ H9 ~
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);7 F: \* x; v8 @. S8 L+ K
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);. H' l: V* b0 A
  381.   if(UpdateFile3.size())
    / k) r" Q7 t3 X: A6 Y" a; {( ~0 R
  382.   {: F" o8 z) O2 A# S- t  U* z
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    6 V& l5 n* ~0 _# r' J  t: \
  384.     {( C- L8 m+ |8 {. [" o" u: j+ t* x
  385.       file2=(LPUPDATEFILE)(*i).second;. J0 n3 f4 }7 D' F6 J
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())6 M+ H- O5 C) J9 X0 ?" G# {
  387.       {+ i/ }+ T$ n, ]- g
  388.         file1=(LPUPDATEFILE)(*p).second;
    1 r: l1 {' a, a
  389.         file1->vers=file2->vers;
    # k# Z1 E9 w6 P
  390.       }% w% S3 r$ {' e' k
  391.       else
    " `! j, x4 \; {6 p' O
  392.       {( B( @" t( t4 E) y1 b. ]7 d# U
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    0 H" ^% K/ k1 [  q+ F5 T# V$ T
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    . @' v3 J  U4 x3 A* d3 r: O, ^1 p
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    ' Z- L. v# i* ?: r
  396.       }
    , v+ x9 O0 n5 q) f5 z
  397.     }
    0 l1 g' L  ^3 p/ q
  398.   }: D2 H/ p. O* p+ _  _. o
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    1 s4 W' w3 ]3 \, T: Q* k* \7 D9 [
  400.   {: e) s8 W3 U  R7 S
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    9 _( p/ |7 ~) v: J  Q" d% O# q8 l
  402.     {
    , c/ P: a+ x/ l
  403.       file2=(LPUPDATEFILE)(*i).second;: Q, K+ P3 i" N( F3 e% S0 S
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())+ F6 \' ?4 H8 _, {4 U+ n
  405.       {8 h: J4 {$ Z6 O2 g1 S" Q+ k
  406.         file1=(LPUPDATEFILE)(*p).second;
    9 d6 {2 h/ `( h+ G- g  A3 _0 N  S
  407.         if(file1->vers!=file2->vers)
    6 F: Q/ R$ ?; w2 I' A4 O6 g# B/ J
  408.         {
    1 Q/ Y4 o9 |& h' N- U. d
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    - \+ N7 \. I# @7 h3 c
  410.           c++;
    - w+ }' w$ A0 A. v
  411.         }2 e: |7 ~2 {- [* n6 H; `
  412.       }% R5 d  }+ U2 n: c3 B2 I
  413.       else. ^6 w, E7 q: |' m7 A
  414.       {
    7 ^9 u& O* V5 x3 w* `. g
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));* f+ H9 @  s5 c1 o. B
  416.         c++;
    ' u( J. t0 {+ l4 D; F! g  p; i, w
  417.       }
    ! j/ Q: g0 d1 f, ?
  418.     }
    2 o7 J: o* `" L  f
  419.   }
    . l; G0 o& r! H; S4 s* ^$ p
  420.   unlink(".\\DownLoad\\update.txt");% s& d9 ~! `2 n8 L8 q: b8 `% C
  421.   if(UpdateLocal.size()) return TRUE;5 D: \) b, ?+ ]) Z" A( p4 r5 W
  422.   else                   return FALSE;: G& Y$ `  g. J$ I8 D4 q( O
  423. }: f- k8 r4 C4 n/ y! L: N
  424. 2 P, M$ M/ l" s! D
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"1 I9 [% W# b( ], d
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    ( p, z4 N% d  o6 T" u/ d( I; q3 X
  427. : {' m8 y$ k  i. {' r& }

  428. / p$ y1 P, h# D0 J# _  a

  429. ) ]5 w8 I& b3 u. ?
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    / ?4 Z2 J# A6 r8 R& e9 e
  431. {
    " C- A0 _# r- k; l+ U+ x2 p+ j7 z2 ]
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    5 H8 R. G% f. _" G" w$ l) w+ U
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - X3 Y) a& P/ D* @0 I8 l6 o
  434.   {! H$ [5 _- h( O* L& f/ V! F
  435.     char szLanguage[50];
    # K3 d8 _: S3 x+ o2 O( {: j# N
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    * T  Z" N7 E/ c5 p4 Q* E. v
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    . D/ m2 B% ?6 f3 \& f4 H" ]
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;7 y# l7 D* }3 w
  439.     else                                   m_iLanguage=ENGLISH;0 w+ Y: z  z+ C/ G
  440.     char szRegister[100];- I. P* _- ]# J3 x+ Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    % ~6 t# h* \3 k1 r
  442.     strRegsName=szRegister;
    9 A& p. a5 @( T; W7 z  _
  443.     char szPatchURL[100];/ G% X8 n, X8 [. o
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");' H$ Q7 @7 G5 ~1 P/ C5 T
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    4 y( F% c( w8 @0 Z- v, h
  446.   }
    * J  ?$ }3 N% r
  447.   else
    + L' h( r0 j3 f$ `# z  X6 e, n# W
  448.   {
    0 _7 ]# A+ _3 e; p6 h% D* s
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    $ C% n9 y  C2 T1 m6 m) A! L
  450.     strRegsName=DEFAULT_REG_URL;
    ( `0 |4 p+ H4 `; r+ C  Z  Q: x  |
  451.   }
    8 J* p8 v- y9 C+ I5 N
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 p& M5 n0 Q5 C4 l. Y( S
  453.   {' ^7 r% k& F; h, m7 S, ~* N
  454.     char szIP[50];
    + l. u" Q! w8 L& K  q
  455.     char szDIR[300];5 M% s7 ~: ^0 D$ M2 I+ e# H* M
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))1 ^! b4 B2 j6 n5 o
  457.     {
    9 n9 d  p2 ]4 o  ^2 j9 W  I1 C
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");: {3 Q! E9 G9 p1 L5 o- i* S
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");1 j% H2 ]2 b/ Z
  460.       strHostName=szIP;, A* ]7 r' g7 i9 ^2 g. H1 ^
  461.       strHostPath.Format("/%s",szDIR);: y2 X( d; U0 _0 X7 h
  462.     }
    2 C- o4 v  t+ ~* U+ F
  463.     else
    & {+ G* n3 u/ J! d7 y( y& b
  464.     {- W& |+ U) k( E7 p6 b& |
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    # v; h0 T) u8 D# S: Q
  466.       {
    0 `, f/ t, A* E- }9 I
  467.         char szLanguage[50];
    8 `( D* R% q( Z" o5 L; q
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    # U- h5 ~4 E5 C( F: [
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 N( I4 J( Q# O9 O
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;0 S. h" K3 U) M2 F( y5 K- O
  471.         else                                   m_iLanguage=ENGLISH;
    . M( Y5 p' @% f  ]
  472.         char szRegister[100];, j  T; ]' ~3 R  c0 B
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    # E8 |8 N; W6 w% n
  474.         strRegsName=szRegister;( b$ o8 P( j* G8 y( l
  475.         char szPatchURL[100];
    $ ]  F8 S8 e! {! Y4 M' P
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");/ u8 V2 [7 e# m+ {/ V# s# S
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    , W2 M8 }/ P, J8 s0 w+ M7 ~
  478.       }% n- I) s8 A0 E0 ^" q
  479.       else2 n& M4 N- j: S' `% A. |
  480.       {
    5 E/ t. B. ]( m' h# R( ]
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    * m5 o- j$ d9 I9 R9 E: J. b9 Q
  482.         strRegsName=DEFAULT_REG_URL;
    8 z! I6 ^" M3 J( j/ ~: u
  483.       }
    ) Q  z" I$ X3 Y) c9 F0 J/ [
  484.     }; c$ w" }- ?, ^' t4 J" a6 B! G
  485.   }8 I8 {9 e' {- O) h# `
  486.   return true;) ?( U4 j5 l6 X2 y8 w0 V
  487. }
    2 |  t+ q$ S3 T$ k% H! j

  488. * N% Q) Z9 F1 E3 O5 \
  489. #include ".\ZLib\unzip.h"
    6 B; L) B( f7 v* L) h
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' M0 R* v/ [3 J4 s" q1 V. l* \
  491. /////////////////////////////////////////////////////////////////////////////
    # N# \( m" h" _  E" U
  492. // CRevAppApp initialization
    1 d9 x* a$ ?3 h6 o
  493. / t3 S5 U! L3 G
  494. BOOL CRevAppApp::InitInstance()
    ! Z, P4 k9 B: ]  X5 C3 Q) p( |
  495. {
    9 E( W4 l! }3 D1 W# w
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];' I- C. {: A8 Y1 y- X! X  h

  497. " V" S7 L* \6 \" V
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    4 N1 b" R6 S# r7 P' X. E* u7 R7 }
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); p+ h# w- m5 Z  w: A3 G
  500.   {
    8 W6 I$ L% P! D2 b
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");, w9 L# ?8 x0 n: i! o. p
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    , `1 v. W7 J& A. \; u
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    9 Z3 _2 e4 q7 v. k7 s% a" N0 ~
  504.     {7 Q) z' j! ~3 p) M; [
  505.       strcpy(szPath,szPathTarget);; g$ J2 }# m6 a+ j  Z: ?" l  [
  506.       SetCurrentDirectory(szPath);
    * A4 X" ?3 b. @$ K$ C- d$ U
  507.     }7 P4 O+ q! u( l3 {
  508.   }$ @( g# I2 U1 _  r- ]/ Z2 v
  509. #ifdef _DEBUG
    8 Q3 ^1 ?: H5 L1 H
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))# O! A3 r( R* @" |7 ]
  511. #else
    . P! {/ u6 E/ X% h
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    1 r2 |# M3 b6 j6 q0 z" {/ N; v
  513. #endif! s. q* r# }0 e" u/ j
  514.   {
    8 m6 S9 U; g( S* O7 R! i# ?" ]
  515.     char tempFileName[MAX_PATH];0 X0 U* ?/ m- D
  516.     strcpy(tempFileName,szPathSource);
    % ^  ?9 ~/ ]+ u: I" p$ c4 p% C' L0 u
  517.     tempFileName[strlen(szPathSource)-12]=0;
    # N& ?+ A1 c% i& f
  518.     strcat(tempFileName,"\\$CSUpdate.exe");8 `- r9 D% ]$ N
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);) t: F2 ~7 c$ j4 W, T* e
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);  E; j6 |% U. }, j' t$ H
  521.     return TRUE;
    # w& |. V/ u2 N& m% R1 o, t! i& i- h9 u
  522.   }
    6 x( I. j7 @; B" o. w* K
  523.   // Nuke 0118: Delete run.exe
    . u9 K1 k2 s- p
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );+ {! U2 t' u& P* i7 B8 X
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");/ _2 {4 A( y2 k9 X" x* F9 ?
  526.   if(!ReadCfgFile("Config.ini"))" R# F: S! U) V2 X4 P
  527.   {5 t$ }) n5 E9 u) b) Y  ~
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    6 X0 }9 Q& d' V* h, I
  529.     return TRUE;
    / L' `7 Z' a4 W: `
  530.   }4 z& L, G- b& H. r9 [6 o( S& i
  531.   HANDLE mutex;, {; J5 N6 D. ^- J$ ]3 N, H
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ' `3 L( o6 A& e
  533.   {" j# m9 i3 Y1 v# _& I- N! v3 S
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " B8 @7 V$ Q" ?
  535.     {
    $ R' O7 L1 A" [1 Y
  536.       CloseHandle(mutex);
    , _" \, n- F. N0 M$ k
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    % N3 S: L3 o3 \% `2 Q8 U
  538.       return TRUE;( Q8 C! J9 {2 O. D2 D- Z
  539.     }& K+ t3 `9 F8 Y3 F
  540.   }  " c/ s) H. I0 n) `. V
  541.   CloseHandle(mutex);
    # n( m  v* o) h  d8 o3 @
  542.   t& ~, k+ J7 U8 z7 j: I. q; y) X1 h& E
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);" \# w! K# R% R2 f! G3 j- g- A" s4 A; z

  544. % V# S7 b% p- j- a. W- t$ E) `3 s
  545.         AfxEnableControlContainer();* d$ j8 c# w8 w  b# d
  546. ; I) ^7 R% r4 i
  547.   bCanUpdate=FALSE;% g( S- m1 T* H% F4 t
  548.   dwStartUpSteps=1;
    ' C2 d, u+ y/ m8 r+ ]5 y4 s3 E
  549.   dwProgramState=AP_NOTHING;- e, j" Q4 G$ N2 A; v

  550.   {  @9 l$ |  J, i* X
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    9 _$ \) A4 w1 z% R( Q- y0 _
  552. ( {) g! g! Y( `, L4 C
  553.         // Standard initialization
    ) `( g9 P+ t5 `" e+ |
  554.         // If you are not using these features and wish to reduce the size) K; l' A9 k+ O) M$ ]
  555.         //  of your final executable, you should remove from the following( Z2 j+ |4 b4 c$ r8 [
  556.         //  the specific initialization routines you do not need.. d2 `5 g( {3 V' G# y6 y& S
  557. ( D/ |* S3 v6 [4 R
  558. #ifdef _AFXDLL
    3 \0 {  w. q; Z' a2 T. J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL5 @2 M8 r; x% {. e& `' f/ }5 @
  560. #else( ^( @+ o$ ]( v& z
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    + Q2 d7 \0 D& I
  562. #endif" f! k2 W) I& F- C

  563. - P) I) W! i5 X* W
  564.   dlg=new CRevAppDlg;$ v9 T/ F1 F/ w' ^
  565.   dlg->Create(IDD_REVAPP_DIALOG);) N$ c  Q2 N) t" ?
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    5 w" y, ?8 h4 y" V+ B9 I# g
  567.   m_pMainWnd=dlg;
    1 B4 F1 N. b6 T% N

  568. 8 V! v6 \9 I( {9 T, H
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ `: Q* i$ M" b8 q& }7 t
  570. & {. t, L, @/ G" f
  571. //  GdiplusStartupInput gdiplusStartupInput;/ W) I# X, g; N0 T( P  q# F  U3 b" d
  572. //  ULONG_PTR gdiplusToken;9 Q+ \: e# E6 O8 h1 X. ?; `
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ c; s- O  Z( K- M+ H
  574. + m: L' r8 h( M  x6 L! E- T6 C
  575. //        CRevAppDlg dlg;
    ; a; |9 O2 N3 ?! P
  576. //        int nResponse = dlg.DoModal();+ k5 x& [$ h) U4 \, B7 R3 f
  577. //        if (nResponse == IDOK)- {+ O' ]- r3 g5 e7 N% F
  578. //        {
    2 q) z5 s, C2 F; G9 V: U0 C
  579. //                // TODO: Place code here to handle when the dialog is6 G, z2 w# g7 o& Y7 u- X
  580. //                //  dismissed with OK9 `) s8 D# {  R
  581. //        }
    ! a# `8 _7 r( R- H
  582. //        else if (nResponse == IDCANCEL)2 H4 ^6 M* v) b  G& |% x' Q  g
  583. //        {. y' j. ~& t2 t' y0 k  _3 Z( o
  584. //                // TODO: Place code here to handle when the dialog is
    4 Z: F# P9 m) s2 ]4 t) f
  585. //                //  dismissed with Cancel
    " q6 w- f% ?/ {* }1 L% p0 G. n
  586. //        }
    + j& ]6 @* V5 C0 C

  587. ! c  g+ k+ v2 `: @5 x
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    - \2 J; V6 l% k: s7 b$ f$ s: [
  589.         //  application, rather than start the application's message pump.) C7 Q' n/ g" g3 a0 k  F
  590.         return TRUE;
    $ b7 K) `- G1 y$ R
  591. }
    $ G& J, p0 o7 O4 K$ B
  592. 0 T: H3 @7 q6 R! e6 m3 x1 U
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    & I' R0 G8 V8 a& T
  594. {# n! ?$ g% j1 |
  595.   int i;
    " l+ \, p7 }5 r% o9 S
  596.   char *szRet;6 H% @% r8 f, J3 [  D/ S
  597. 7 h3 m* [% @2 x- G" ?$ K. D
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    - N9 T. b. ?; v. g  h6 ?
  599.   if(sztoken)' D/ l. F5 y4 j7 M( Q4 E2 {
  600.   {* c1 b' e) W! N" u# O! [* g2 d7 C
  601.     szRet=&sztoken[itoken];
    , @& B& h. B$ N* [/ l0 w" W' A) l
  602.     while(sztoken[itoken])
    * N6 m# r, F% l7 J, v- b
  603.     {2 F" W6 P/ q* d. O+ B+ ]* \1 n
  604.       for(i=0;i<(int)strlen(token);i++)
    0 S+ f# Q. Q% {
  605.       {
    " [5 `) W: k: v! ~6 z7 K; x: l
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    3 ?" t# I7 Z4 Y6 s* L
  607.         {
    / _( P6 {2 c* v
  608.           sztoken[itoken++]=0;0 h7 p; K1 l! {+ V; |; C
  609.           sztoken[itoken++]=0;+ D) t4 N$ K# a4 Q0 m0 e
  610.           return szRet;+ M: E! f" z/ @% j: ]/ S4 A
  611.         }
    1 F$ P7 k. x" B1 L$ `- ]. ]
  612.       }
    * Z% w& \+ O$ \0 N
  613.       itoken++;
    $ z5 Q9 P/ ]1 C/ i  r
  614.     }
    : R8 {: X& @% a7 L. f% T* l1 `
  615.   }
    " Y( M, Z/ t1 N" l0 @3 r/ t
  616.   return NULL;
    7 X! E- E) f) i. d: E) N3 o  `! h% i
  617. }
    ; e. A& z/ g% L8 y8 e* ~
  618.   }* g; h3 ?$ {% Q
  619. void ProcessProc(long Total,long Current)
    3 w1 S3 Z* N7 j( Q
  620. {
    8 J* M8 ^# b+ m4 m, C4 a6 [
  621.         MSG msg;
    7 O, N) `' Z) q/ s5 G$ V. ?6 o& `
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    6 [1 E% g- ^  h1 o2 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));% f, ?# L2 }6 q( x( r
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    + @. W- t: z% ~) r* E  E
  625.         {  b  p/ p1 L( @: P/ [/ Y
  626.                 if(!GetMessage(&msg,NULL,0,0)), d- f3 Q" n  x, d. E
  627.                 {; m( C* h+ Y5 d+ ]& P
  628.                         return;5 {) B6 W$ M& _3 T+ b
  629.                 }
    1 y  @0 k7 y) }) c  S8 W; I
  630.                 TranslateMessage(&msg);0 R% s  ]8 z4 s
  631.                 DispatchMessage(&msg);' x* [7 }/ ]( T
  632.         }       
      M/ z- c9 T* [4 p
  633. }
      z3 `$ J: R0 @+ T
  634. / \% T7 w& A6 p( [& e
  635. BOOL bFirstChar=TRUE;' }- w  m7 d$ |3 b9 j
  636. + O. k% |& l  }5 |7 q3 h- x
  637. BOOL CRevAppApp::OnIdle(LONG lCount)0 {  v) L7 m/ d4 J8 i" u( X; W7 a" D
  638. {
    9 z3 q* ^- h$ {
  639.         // TODO: Add your specialized code here and/or call the base class
    ) B& t; ]( E4 m$ M/ T2 ]
  640.   switch(dwProgramState)
    7 X1 r7 s$ h: F$ W" K* S
  641.   {5 T, ?( h, u& o. b, H1 U0 g
  642.   case AP_NOTHING:
    ! `. e% e- a2 P3 L6 P9 G  P8 X: n
  643.     switch(dwStartUpSteps)
    " P$ ]. z$ }4 `. U) j; x/ D3 o
  644.     {+ c, Z5 `9 h2 C7 Y: ]5 _! z
  645.     case 1:
    0 G# A0 ?. V% A  s  J  w1 @+ L
  646.       {3 W1 v' i5 L- L. n8 p/ L( V  Q) _6 o
  647.         int i;
    9 \2 o. n  a, G! }9 {$ n& ]
  648.         CDC *pCDC=dlg->GetDC();: ~5 [- }+ l$ F) q: K9 l5 B/ I
  649.         HDC hdcwnd=pCDC->m_hDC;
    ! y) U) _1 @- G" `# A
  650. //        Graphics graphics(hdcwnd);/ F! G  @9 {: t4 T
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    2 x* w  I7 y. z5 q8 b
  652. //        INT iWidth=bitmap.GetWidth();
    1 M1 {! c4 Z1 j3 P# c3 [
  653. //        INT iHeight=bitmap.GetHeight();) c( b4 l& K. G  p! V
  654. //        Color color,colorTemp;% @! E# C. N. b0 C& s* H: `9 ?2 W/ h
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    3 E6 g1 F3 H2 |" e4 j" `$ v+ i
  656. //        {
    6 \2 Q+ h( _$ u9 n2 y& P
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++); m! C3 F; {: ]. E
  658. //          {8 U( ~9 y% e" J6 O' j& n% O( V
  659. //            bitmap.GetPixel(iColumn,iRow,&color);6 [9 C. z- i% @4 {9 z
  660. //            colorTemp.SetValue(color.MakeARGB(5 x$ |, d5 L6 \5 g; q
  661. //              (BYTE)(255*iColumn/iWidth),1 S, s, }4 H5 S
  662. //              color.GetRed(),/ v" A/ w8 i. T
  663. //              color.GetGreen(),7 o2 w0 _$ M+ R0 m
  664. //              color.GetBlue()));: T+ @9 p: a4 k  M# v
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 c. V- f( U( q" {
  666. //          }
    " D: n/ B2 P5 X' ^' X+ m+ x0 S
  667. //        }
    ! L) J' _7 @; j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    3 C% T" e3 }& B- A
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ! {: z4 t  c# |. L
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");$ ?: n$ @6 p, g; Q. s- @  F& c# o' K
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");# H. B* H" H( w  f9 a6 Y" ^* _
  672.         for(i=0;i<240;i+=8)
    & R; u4 H: S3 s9 w! I( c
  673.         {
    . e' h; o; d1 s! z# P+ B# R, b& O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    / z1 g" X( F, }
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);8 U. a: z3 W5 M5 v' `
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    ! a) r2 l/ ?# E
  677.           Sleep(33);
    0 ~: @; ?8 V  L
  678.         }9 Z, h8 X: I$ ]
  679.         Sleep(1000);" b, Z& a! q% d4 L9 o' ~
  680.         for(i=240;i>0;i-=8), Q6 C7 k6 J6 G& `4 d- c, l
  681.         {9 z2 m% K3 r! C5 U
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! i* x/ F  d  f# i
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    , ?2 Y2 s0 |. _6 B% l4 v- F
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 G- h6 A$ h; j
  685.           Sleep(33);
    & ]' `- `7 ?7 Q: h0 J. S* v/ b
  686.         }+ U, Y4 Z& T# q5 `/ B
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    ' u: |( N6 g+ R% h
  688.         dlg->ReleaseDC(pCDC);
    , ?* k; R: L- `7 p1 \% J  `& }
  689.         DeleteDC(hdctar);
    0 |% |3 z8 ^8 B) R* |9 f
  690.         DeleteDC(hdcsrc);
    7 {- {% \) M- M- u2 h  I( l% U3 O  C
  691.         DeleteDC(hdcorg);
    6 V4 V% `/ D) n5 h0 I1 {8 Q1 D
  692.       }# M4 G. u8 G1 i% J* O; C3 A4 q
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    - {, g; ?0 B7 y% z1 v
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");9 @" J$ N# U/ A; m
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");6 S' @1 H5 u' E2 [  ?
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");, o* f  ]. k4 U8 K1 e& ?- S# B" Q
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 c# S' m7 r' R
  698.       if(!Dn.Connected())- m8 P0 q! o! Y& U
  699.       {; |+ r, Z# u3 z4 H$ Q0 G
  700.         dwTotalFiles=1;4 @+ g/ B% i& g, \9 N
  701.         dwDownLoaded=0;* |% s( ]" S# x* ]
  702.         bSilentStep=TRUE;$ f2 P& {' ]- q7 [4 x6 T+ S
  703.         bCompressed=FALSE;% v4 z# \, u5 e9 |
  704.         strExtLocal.Empty();  L2 i. m6 g7 k8 l
  705.         strFullName="readme.txt";
    4 g# u$ E! A4 r- d0 o
  706.         dwProgramState=AP_CONNECT;0 S0 m0 @; W2 L* l( L, q
  707.       }+ |- |0 K/ m; b% R7 R( x' |
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    ! E8 v/ y" B. A$ m) k& b
  709.       dwStartUpSteps=2;
    % X1 a7 l( e! ^: R* x1 M
  710.       break;
    ! u! c8 q, O7 b' W2 v0 S
  711.     case 2:
    6 [* y8 I8 C& E
  712.       {
    4 G& S3 {" U) G. x+ i+ T* |6 D
  713.         int iEOF;
    , _- U  q' o# G( u/ u
  714.         FILE *fp;4 `# f- M# I3 U; X+ l
  715.         char szString[512];6 {' w- e/ l4 d/ C
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");: b! e6 l" O, b* |0 k' @& f
  717.         if(fp)# [; g( L0 a6 S% o; a
  718.         {
    , v4 m$ m& ~% Q+ J& V
  719.           do( I- d: n/ N7 j# F: o' E
  720.           {( @1 d* J0 h$ L4 l
  721.             iEOF=fscanf(fp,"%s",szString);
    9 L9 `& G) [+ O: ~
  722.             if(strlen(szString))4 {+ A. d; m8 r, E3 f5 l6 [6 @
  723.             {
    / f/ _; B- i/ J: s+ k, b$ P7 O
  724.               if(bFirstChar)
    . M4 r4 Q$ b8 ]( `1 X+ M! j
  725.               {
      C& X3 F& r. G; ?( S. S$ o2 M" g
  726.                 bFirstChar=FALSE;, X* w+ n$ H1 W( g
  727.                 bConnectIsBig5=FALSE;; [2 G" P6 V8 K/ V2 s5 q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    % ]; H8 w/ v; j* R3 p2 `* K2 m
  729.               }
    7 E; ]# g0 n; B; A
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    : c( a0 Q  ]- h, _9 H- ?
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
      x8 f% y# a" S7 n" r
  732.               dlg->m_ListText.AddString(szString);
    ( M7 z( C3 L" G/ K1 X/ M
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- z# s4 `& d  b7 q
  734.               *szString=0;$ A' I4 y& b8 @' N; [
  735.             }
    ) d8 B1 p6 u& l8 B) g: e$ V
  736.           } while(iEOF!=EOF);
    ' [1 q" ^' ?* o6 B$ }
  737.           fclose(fp);
    . {' X. I: ^  u/ M
  738.           unlink(".\\DownLoad\\readme.txt");& y5 _6 V+ o8 w
  739.           dwStartUpSteps=3;
    : w2 O! W. n' Q7 _8 j) \, x1 K3 z
  740.         }
    6 X- \* f2 O9 W" b0 \/ c6 g. m6 |
  741.       }- a0 w8 k! W. x
  742.       break;9 i- l6 Q: a% |
  743.     case 3:* [& N) s: K% Y6 G# |4 {& R" Q
  744.       if(!Dn.Connected())  r" z1 U$ |' s
  745.       {
    4 {) {! ^  B, n3 z3 v0 b9 |& M
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    5 \' \8 O: k3 z, M& A9 g
  747.         dwTotalFiles=1;
    $ Q" S9 t' a! i: n( G
  748.         dwDownLoaded=0;
    ) v' u8 L7 {+ W1 {' f9 Y
  749.         bSilentStep=TRUE;9 d$ w8 Y6 b: M& c. R1 M7 E
  750.         bCompressed=FALSE;, r( D2 p( v) ]2 K
  751.         strExtLocal.Empty();
    & V3 v% }( e. i
  752.         strFullName="checkversion.txt";
    9 m: R0 k/ Q* W% O, q/ X
  753.         dwProgramState=AP_CONNECT;
    " Y2 Q  ]# F, W8 S5 W
  754.       }
    8 T1 X, G* A; a- U: n; y
  755.       dwStartUpSteps=4;
    2 J" {7 m; r' q2 v$ d5 Z! B
  756.       break;
    2 y$ o8 ?, ~" L7 S
  757.     case 4:
    0 j( K- V# ~  G: i- ]1 X# i
  758.       {
    1 R0 P) x% v; a3 }( o1 H" \
  759.         FILE *fp;
    9 G( \4 R. A- A2 P
  760.         char szString1[128];% y# D7 A. v3 h5 r7 ~. X
  761.         char szString2[128];
    5 F% U( r/ x- L3 z
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    1 w( @' N8 L6 `3 W2 t
  763.         if(fp)
    ' R. m* E. E2 Z- _" B& k; j8 V% g
  764.         {
    5 c1 K: }, ^" n" Z
  765.           fscanf(fp,"%s",szString1);' q8 A' G" L7 ^8 G$ ^) U. L
  766.           fclose(fp);- A2 i. n  ]" @5 {) ~
  767.           fCheckVersion=atof(szString1);
    2 ?. q) p5 G/ `1 A$ h
  768.           fp=fopen(".\\checkversion.dat","r");
    * e- x0 f: r3 r' ?
  769.           if(fp)
    ) J% |. b$ A5 K# s8 g4 D& q
  770.           {; \. }3 d( Q* i( D7 C
  771.             fscanf(fp,"%s",szString2);
    + v6 Q7 @% x! F# ?2 N- k
  772.             fclose(fp);5 O! P$ G7 _, L! U8 }, f
  773.             if(atof(szString1)!=atof(szString2))0 Z) h  y, e, P
  774.             {
    0 K: c1 x& B% G& d3 Q5 r4 Q
  775.               if(!Dn.Connected())
    ! t+ m# o7 [9 A
  776.               {( Y% o( d, r: {5 q2 [8 Z5 t7 m
  777.                 bFirstUpdate=TRUE;+ u3 s9 T( x$ u" g1 w
  778.                 dwTotalFiles=1;6 f' @* C; Y, f+ w" H) `
  779.                 dwDownLoaded=0;
    . Y  \, p$ u5 S  c
  780.                 bSilentStep=FALSE;
      S6 R8 ^5 {: S! X  y- {
  781.                 bCompressed=TRUE;
    ! q; M1 A+ h+ E+ X/ v# h$ A
  782.                 strExtLocal=".\\DownLoad\";2 }* q: `& [0 B9 ]: _
  783.                 strFullName="update.txt";
    # T) |, g" I# K; D2 _- L/ x0 d
  784.                 dwProgramState=AP_CONNECT;7 J0 F7 g# E$ _  h. v5 F& [2 W3 i
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ) i/ I3 n; [- d( c; p
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");, U4 ~: Q: [1 F2 q
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 P9 A( B3 T0 m1 ^3 n+ @

  788. . U( [. s6 u4 f  f$ h
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 c4 o# e+ ]5 h: ]  O, S; y
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    + D; F2 u: I) q/ c7 X" r& Y
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1), \6 v" S/ ~4 R
  792.                 {6 H0 M3 T: C/ i2 `
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    2 `# L! [: B; G, W( |$ z* a6 q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");7 [4 `1 T8 F4 x& \8 T! a
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " j4 g( d, q; \% [
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 |9 J$ q) Q2 I1 h6 P# t

  797. / h. H6 x9 h3 G" ^7 q, N7 Z" G
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ; Z) Z/ |- k; [  L3 n
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 ?! M. ]$ E% X( f
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + H. c4 Y6 I, _! A6 s" ?
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 `3 d* H; a" {9 F( k9 F+ y" i+ `
  802.                 }' |% N& e, M2 q: g1 x- M  ]
  803.                 dwStartUpSteps=5;$ {3 ^' P( E4 h; ?' z% d5 N  r
  804.               }
    5 I& H1 _( w% k$ y* R
  805.             }8 [, }0 b( X5 w' M
  806.             else
    9 V( F2 L2 h% O5 d; D4 {
  807.             {3 ~0 d/ }0 j% ^3 M8 l+ V+ F7 M
  808.               unlink(".\\DownLoad\\checkversion.txt");& v, e: u5 |# E. ?% X: D
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) B; u0 G. F( j
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");  b( {7 G/ T( x7 i# r
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");" p9 p2 J1 T( s( F1 V2 W: X

  812. 7 m7 R% P: d% T3 e  j/ m4 B
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 @. C+ m  r# r, j# f) c4 D
  814.               dwStartUpSteps=99;( v( F8 F9 w4 E+ C& F# k4 i& F
  815.               bFinishUpdated=TRUE;
    ; c# q; k. `, g+ n8 E. X0 |& |
  816.               bCanUpdate=TRUE;
    5 A0 F) ?7 W/ o6 E
  817.             }5 ?! U! s) P, o! P4 b/ n+ h
  818.           }' L" N) }, H4 `) G8 Z7 b
  819.           else
    ) A6 t) _: }5 W5 c
  820.           {
    5 t- b! t, h& o, j  S, s
  821.             if(!Dn.Connected())
    - a9 W1 A# d& I/ M& Z5 j4 ~
  822.             {
    2 k. ~% R( L( E. P5 G
  823.               bFirstUpdate=TRUE;& X- d8 @/ \9 {$ |+ d& x# P
  824.               dwTotalFiles=1;
    8 \7 o3 Z& ?( U4 e8 n0 u
  825.               dwDownLoaded=0;
    % l$ o6 C% l' z) y2 l
  826.               bSilentStep=FALSE;
    & m2 i, ]  z2 Z( }
  827.               bCompressed=TRUE;
    ) ]% J8 `9 H# O* s
  828.               strExtLocal=".\\DownLoad\";
    + e" @( z4 v; c. W$ o+ k$ H. b
  829.               strFullName="update.txt";7 h  M4 A5 _9 C% E- m+ Q5 V
  830.               dwProgramState=AP_CONNECT;
    " x/ L8 h# X/ L/ H4 ^5 B. U7 }" ^
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    - B6 Y  W" K7 y1 o: s3 K
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: e  w  v2 p+ N3 z" F9 V: N8 x
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");( ]% P4 N: Y: C( e
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 P7 R* \& ^! n- e, p- _
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 T( b) ~" v( A* E9 \- T
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ! |" X( D$ S' ?2 V5 ~
  837.               {
    8 @' j0 z: `7 O( h  w) P! m
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    4 K: `! X  c% e/ X/ m  j( l! L
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    2 I2 l7 ?8 F& G: G9 ~2 V7 M
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    * b/ F5 X6 x6 C5 j9 \4 j1 D2 t4 O
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 M8 M& S+ S( n# k( S
  842.                
    + m, [5 p9 h. a+ }9 E, E, H
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    - I- Z7 t  s0 y# L- F" R0 F% i
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");* Q6 j- I7 N2 U/ w  l  e
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");- Z8 Z- Z* D! R8 X; O
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 _" L5 e  v$ D* }5 `- C: K( l
  847.               }- e- A+ \: e/ O+ J$ w) L" v2 m
  848.               dwStartUpSteps=5;
    8 o4 [7 s% K  g: `
  849.             }' E5 I5 \- \' Z+ l7 q
  850.           }# j0 H9 C  P% j0 x) T! Z
  851.         }
    8 f1 b2 f9 m" x
  852.         else
    3 s+ ?4 E  U: R, Y- C" }1 V# g
  853.         {1 m' i. X$ f9 ?' b0 A
  854.           dwStartUpSteps=3;/ j$ U2 z0 O0 F# o, _) D/ v
  855.         }
    ( d$ L$ h9 v6 {1 X6 I. P8 \
  856.       }
    4 k4 G; v& T9 k% @
  857.       break;
    ; m5 E) j" Y$ c" b
  858.     case 5:
    1 [6 F- r$ _! R$ K
  859.       {2 i+ Z& u# s* y" I1 ~
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    7 F# ?- M. w- S2 \
  861.         {5 n* e8 O8 s, q) U3 _4 s
  862.           int opt_overwrite=1;
    . Y2 l, W+ p* \. C- G
  863.           int opt_do_extract_withoutpath=0;! m0 k6 @9 G  N, @3 N- w6 d
  864.           unzFile uf=NULL;5 r5 y9 L' I$ Q( w# I/ E

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

評分

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