CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閲讀模式
! ]+ B4 ~$ X' h2 g3 d- k) }
  1. / RevApp.cpp : Defines the class behaviors for the application.
      l- U) a. o) P* V
  2. //3 I0 i3 {' |0 ]2 e# b6 m
  3.   F5 Z, {2 C+ }9 Y
  4. #include "stdafx.h"& C: d, j3 r; `; v

  5. 5 F* q$ Q% q$ n& K1 {& Y( {. s
  6. //#define UNICODE, y/ p/ a- M2 H; i- m1 j2 H
  7. //#include <gdiplus.h>
    # ]/ X7 \3 a  {5 B% }
  8. //using namespace Gdiplus;
    : T- Z2 A8 C6 g8 A  c

  9. ! ?+ ~3 D+ q5 Q
  10. #include "RevApp.h"
    + d  Q. V( r& G
  11. #include "RevAppDlg.h"9 T# y7 s7 M4 S- B" \! s

  12. / Z+ u- f. d4 e6 i: e
  13. #pragma warning(disable:4786)! N1 O1 J5 P: l" P% A3 k' x
  14. #include <map>5 t9 a. V# k, W) i3 Q  ~
  15. #include <list>
    . H& O2 c& F3 y. c- B
  16. #include <direct.h>
    ) P- I- a+ F+ k- d$ T& k  E
  17. 5 |, ~7 d+ `3 N; c6 L
  18. #ifdef _DEBUG! M* d% z$ G/ [$ @* W/ m
  19. #define new DEBUG_NEW
    2 q6 Y5 J! N. t7 j- G
  20. #undef THIS_FILE
    2 @+ N- v  P/ X/ P; o
  21. static char THIS_FILE[] = __FILE__;9 d$ [0 |( f! R. a" y  J
  22. #endif
    6 L# B3 x8 Q- g; O+ o
  23. #include "SkinResDef.h"- Q" _- A+ |8 v; A
  24. #include "ChangeBG.h"
    6 W/ [3 V8 L; H) I/ A
  25. #include "AFXINET.H"2 x% t) P& U4 E+ s! k7 @9 N$ V

  26. % U& z# d1 I8 j3 f4 ?6 x+ L+ l, a! C1 k! S
  27. #define TRADITIONAL_CHINESE 05 o5 Z. H' Z6 x
  28. #define SIMPLIFY_CHINESE 1
      L8 e' Z% a. \  J+ `- l
  29. #define ENGLISH 2
    - h  d) t' l/ r6 m4 u
  30. int m_iLanguage = ENGLISH;9 \/ S! L- o. k, T0 ^
  31. /////////////////////////////////////////////////////////////////////////////- N( }, G- ^5 @' `# x4 @& J
  32. // CRevAppApp9 L3 O6 z; u2 a7 Q* F( W

  33. " ^' ?! i, `) Z9 `" ?9 X
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& k# R9 v3 D1 I8 |' T" H
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    # u7 Q7 K+ ]7 M& J: T% @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ) E, i0 o! P' f
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!" Y; k9 |# ^+ O+ {) Y, O' I
  38.         //}}AFX_MSG/ @) O* V" n) l4 g; k
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ; w& B) H- D  |2 n
  40. END_MESSAGE_MAP()
    0 [/ z! e, \9 T
  41. 7 B9 G7 a  d2 \, \" Z
  42. /////////////////////////////////////////////////////////////////////////////
    + d0 D/ @7 e* a% y
  43. // CRevAppApp construction
    # M( A4 d2 Z/ q+ w
  44. + Z% Y! D2 m, V
  45. CRevAppApp::CRevAppApp()% P& M- o8 n" U* n$ z8 g1 w3 v
  46. {
    # m, ?" c" ^9 ]3 n( b
  47.         // TODO: add construction code here,. H' d  P/ f: B7 p6 b
  48.         // Place all significant initialization in InitInstance
    & i; P# L8 p! D' p8 C3 m/ K2 X
  49.   bDisplayIsBig5=FALSE;( N: U5 \, S. a. O. G, S
  50.   bRestartUpdater=FALSE;
    1 X% {" @0 ]: g8 S. f6 p* [' f  \
  51.   bFinishUpdated=FALSE;* M/ Q/ b7 w) X1 [2 @9 B: R
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;) E6 Y- Y" ~5 [, p
  53.   InitChangeDataBig52GBKS();/ f5 x/ X1 v4 S
  54.   InitChangeDataGBKS2Big5();* u5 y9 u9 n3 O
  55.         //, h; ~2 r5 w" I- C
  56.         bClickRunExe = FALSE;
    3 R/ J5 R: I5 ?
  57.         //
    + o" j  u3 w: p/ s1 S- L1 u/ m8 G0 ~
  58. }
    - i* S0 S: @3 o6 {
  59. 7 p+ }9 b2 O3 N- b
  60. CRevAppApp::~CRevAppApp()0 f4 |& }3 i% K- x1 ~, `: o, H
  61. {
    * L4 L2 ^# E7 R$ J! z  Z% x6 `
  62.         // TODO: add construction code here,- `/ ?. A! A" s+ }7 X4 E( P
  63.         // Place all significant initialization in InitInstance* [7 N4 l/ z- Y5 _
  64.   EndChangeData();
    4 O/ F6 s; N2 {
  65. }
    8 }+ y" a0 a0 P7 Z) l# a' V: [

  66. * G* D1 W5 X* i
  67. /////////////////////////////////////////////////////////////////////////////
    9 n3 S; v( w. V1 E  k
  68. // The one and only CRevAppApp object1 m8 h4 z' K: n# h4 N
  69. % `" i- z* b; F; x  M) H  q
  70. CRevAppApp theApp;
    - a3 j( b: [$ y% N: z) k

  71. ( X& g5 q, D/ T8 n  ^
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)& E: c; C" ~: l# F; Z. _
  73. {
    ( }- R% l( q. h! A3 `) f
  74.   int iEOF=0;
    % @/ J" N! H* d# A- }2 ?) \4 U
  75.   char szTempName[MAX_PATH];. k8 x. `: [" }
  76.   *szFileName=0;
    : A/ X4 o/ s, M6 ^- v! b9 R
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ! K: Z, H4 y2 o1 r# O- O5 N. h
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')' ^7 K8 v  Z9 ~) v! d7 N. N! Y
  79.   {
    & v; V% r8 z$ `- G& N
  80.     strcpy(szFileName,&szTempName[1]);
    , Z; H: C6 k" V0 j# d. O' U
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    % Q( ?3 y- I  @5 \: s
  82.     {
    ! O( O* y# l- j
  83.       iEOF=fscanf(fp,"%s",szTempName);5 D# ?5 r: Z6 H3 a* F  L' F
  84.       strcat(szFileName," ");
    " S# d8 ~6 s/ v  D
  85.       strcat(szFileName,szTempName);
    * J: [; \& v$ C- g9 `' \; L% P
  86.     }
    9 a2 O2 s) a; y: H5 g! Q5 ?- R
  87.     if(strlen(szFileName)>=1)* M2 |; m7 G" n, N
  88.     {4 q$ Z) Z# [5 a7 S* f1 D& ?; ~
  89.       szFileName[strlen(szFileName)-1]=0;
    ) [0 e' |# z8 {# ]
  90.     }6 p/ |- _/ o; Q$ F% X* E
  91.   }
    5 B9 S" |" s( y8 |- O
  92.   return szFileName;
    ! L2 \% q- ~3 o  z- x! {" U
  93. }/ N0 D. d5 ?1 {) G+ V9 N. K
  94. & Z4 ^2 Q1 ^; b9 J
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)' \; V: Y- X) y; @
  96. {, k" f3 x5 d/ L: F2 Y; H& o
  97.   FILE *fp;
    ( i; W  T0 E' U- j1 q& e' f: b
  98.   char *key=NULL;
    , K7 G" d/ p5 U1 s
  99.   char version[MAX_PATH];4 T- f) T/ u& Y1 x) g' P9 P% i' g
  100.   LPUPDATEFILE file,olds;) |' N9 @$ W( D! e: Q8 H& @
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 v. x. Y) g3 e4 `) Y

  102. ' t5 c: L) y5 }- k/ e
  103.   UpdateList.clear();
    , |  L* p$ W# T% A) t# `; H3 ~6 D
  104.   UpdateFile.clear();
    . B( b; m; I# r- X& j
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 O) A- c' X1 C! Z& e7 t
  106.   if(!(fp=fopen(filename,"r"))) return false;% o6 n4 Q& R) _( k9 l7 D/ H
  107.   fscanf(fp,"%s",version);9 X  |  a( v' j& B8 T2 v5 N
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }: V( V9 `7 ~7 T. v7 K* M* M6 g* u; O
  109.   while(fscanf(fp,"%s",version)!=EOF)
    $ Q" v; ]9 C; C4 g7 [: F
  110.   {
    ) T% f# t6 ~" D7 R5 y
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));. D" B; F& }8 |# q+ f& \
  112.     fscanf(fp,"%s",file->path);
    7 K5 }# W  Z0 _; O6 D8 d
  113.     ReadFileNames(fp,file->file);
    ) O& z$ w3 E' l6 Y4 T# x
  114.     strcpy(file->full,".");9 |2 J/ s$ N" @6 P0 ^6 n
  115.     strcat(file->full,file->path);
    3 A8 {5 l* n1 a+ w
  116.     strcat(file->full,file->file);. T* u6 d9 W3 k
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())* v. {0 u) h3 L9 i- }0 r5 P
  118.     {& i$ r5 y/ x" l; }* V4 _
  119.       file->vers=(float)atof(version);
    ( H9 m6 `7 P4 b7 |8 C: o
  120.       UpdateList.push_back(file->full);2 ]" Q" D1 ~# l; r8 p6 c3 v3 D
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    7 }6 T' j( ^8 L9 I8 ]9 B- t7 `
  122.     }
    ) w9 i' r% A( S( @
  123.     else  G: R9 V  v4 o
  124.     {
    & ^: t- B/ U) s5 E. M' P7 x
  125.       olds=(*p).second;
    % h! E! _, U3 G; g5 P
  126.       if(olds->vers<(float)atof(version))
    % |9 i8 P! T) @: C
  127.       {; ?% w3 d% R$ Z- p0 e4 b  a; j
  128.         olds->vers=(float)atof(version);  Z) a! B3 {0 J# ?$ ^9 h% Z
  129.       }) e4 |6 K& L) H5 t( n6 q1 |# y6 ^: |
  130.       free(file);1 j0 L4 V0 ~7 D3 \
  131.     }
    : S" l, q' M4 m+ ^; c
  132.   }7 h1 I, _7 c8 v4 ?! h
  133.   fclose(fp);
    / J1 d3 Y9 q5 S. F/ h1 b' K
  134.   return true;$ M0 w4 S" c" o8 f) e, s& R* Y: p
  135. }% {$ b" a* \3 m8 V: i1 W+ e

  136. ! j2 P3 K6 N! d6 n
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ Y9 `+ i! }. L
  138. {7 s2 ]" A/ v+ k
  139.   TCHAR  szFull[MAX_PATH];
    % Y- ^; Q9 p' v: \* n
  140.   TCHAR *token,*inter;
    5 L! J$ r1 t4 Z/ q  l, u
  141.   *szPath=0;
    0 u' o3 a8 {( }% A' J) t
  142.   strcpy(szFull,szFullPath);
    $ R0 R3 D8 e4 g* {: c' u8 r
  143.   token=strtok(szFull,"\\/");
    " g* f0 X5 P. U7 ?7 k2 l# x
  144.   inter=token;
    ( ?+ s! P; H+ U; y7 V; r
  145.   while(token=strtok(NULL,"\\/"))
    3 W  |9 e) y( |+ ]0 ]3 ~/ O
  146.   {2 r! u. R) L9 n5 k" m
  147.     strcat(szPath,inter);
    ) U( ~0 d% ?$ W, W3 M
  148.     strcat(szPath,"\");
    ' Z. E/ h) J; v1 K' t4 e
  149.     inter=token;
    + h2 `& Y, _1 V1 Y' S6 X
  150.   }
    6 p  [+ P1 x( g$ x, \/ T; c2 L
  151.   return strlen(szPath);- l# \$ k; U6 `7 _
  152. }
    ; Z! L. C, n3 |( F9 [# E; n- ^
  153. / d: s! p" N$ Q! g% k
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    7 o1 C- G$ e+ H5 D3 u0 u4 x9 ^
  155. {
    % k. g6 t% S# a+ x% G% A- p! i$ \
  156.   DWORD attrib=GetFileAttributes(Target);
    5 u2 Q3 ?2 T3 O! W) j! d; ~* p
  157.   if(attrib!=-1)
    3 i2 u8 k0 y; ]9 N" ^4 [. b
  158.   {
    . ~" \" Y2 \2 @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ m9 {) [; E1 f" {5 z) d
  160.     {
    2 C! }% d; E4 S- _% J8 f4 c/ @8 ~
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);) D2 G  U/ z5 a% ?5 ^1 ?" \
  162.       SetFileAttributes(Target,attrib);
    5 {) o  j: i& _6 O4 Y+ k
  163.     }
    ; Y; t/ T/ I1 D5 A, \5 Z
  164.   }
    : P" K& w0 }) l' R. \  Y% e0 v
  165.   CopyFile(Source,Target,Erase);5 I9 D8 B/ W4 A
  166. }
    9 N' @. H* A0 `1 O+ y! e6 z
  167. 1 z$ d: ?/ E$ r; T# P: j
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    1 s3 g$ s  D  U8 z
  169. {
    ; Z$ K. W; c. S. p: |& H
  170.      FILE *fp;4 }  ~! S- f/ A3 y# P# b
  171.      char  szBuffer[8192];/ N3 V/ b: K. s
  172.   va_list  argptr;4 s4 e1 a! _. x7 N4 v

  173. & {3 \1 _3 m! G
  174.         va_start(argptr,message);
    ( a' ^2 m: P6 z: b3 W0 H9 o. a
  175.         vsprintf(szBuffer,message,argptr);
    2 T0 _* |1 w" _! L% I( H& j- P2 x
  176.         va_end(argptr);
      P- t; o+ z: U8 b5 m) T
  177.   fp=fopen(FileName,"a");
    ( E/ U6 P! A7 [+ e. S" ~5 ^) P
  178.   if(fp)
    $ l2 V% y; B: N7 d  O' q
  179.   {
    5 Y  v. ~' c4 {2 Y2 j1 d
  180.     fprintf(fp,szBuffer);
    / I, h; ]/ d4 T% C& ~3 n
  181.     fclose(fp);
    - ~* F. w/ A& w" b! \# D
  182.           _flushall();. x' H; p4 n0 y9 W5 O: b& L
  183.   }
    ) I7 r; \$ F. O6 p
  184. }
    6 x5 l6 d# E4 t9 Z8 g# y5 b1 \
  185. + j0 c" E* Y, c; H) ]
  186. BOOL CRevAppApp::Fclearf(char *FileName); Y2 a& N: N& S8 A8 `8 f$ o
  187. {
    / d: L; W7 d3 ~9 p( Z' I
  188.      FILE *fp;
    / b) o: V' z7 d7 I% ~' _  W
  189.     DWORD  attrib;
    $ j0 y, |: G. E5 X. H& e/ K$ _! _
  190.   attrib=GetFileAttributes(FileName);
    ; I, A0 \/ n! B) ?' ^
  191.   if(attrib!=-1)
    6 N+ x4 I; S/ Q% M
  192.   {
    # w* t* o% M% ]- Q% C
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    9 w# E, D0 u+ ]4 L8 S4 S+ D! M3 \
  194.     if(!SetFileAttributes(FileName,attrib))
    # R0 j6 o4 H3 N9 M
  195.     {
    * d' d* T' N% B( m3 C
  196.       return FALSE;  {% o3 N% v# Y3 A& K
  197.     }
    3 x' M$ F# F7 h3 q
  198.   }
    ) B5 e! [9 n! t4 \* A/ ]
  199.   fp=fopen(FileName,"wb");
    1 q- q. }3 g- k$ H5 y) {$ c8 Z
  200.   if(fp)
    . a$ ~4 @3 C& Q& ?. L
  201.   {
    - }+ l3 ^: K' O; v: Z: S1 u
  202.     fclose(fp);+ x9 f/ G3 r& v$ u& |6 \1 @
  203.   }- V6 D' @, z# F# L$ U( ^* t& N5 z
  204.   return TRUE;1 E5 X$ g4 b( Q! g/ O: M0 \; p5 N
  205. }
    1 P( Q; I+ v0 B2 G

  206. 1 N* }" v/ E2 k- x5 [
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      Y* s8 v7 J2 [! p% m
  208. {" P; l: h. i7 g) K% o6 ]1 D1 M4 M
  209.   char filename[MAX_PATH];
    % T* Y- }* `2 r+ w/ p, _( s5 ?
  210.   LPUPDATEFILE file,olds;
    + }# t. n; K; F0 H' F& B7 n) e9 Z
  211.   std::map<int,CString>::iterator i;
    & c. _8 I3 N3 }7 z, g8 @2 I' d, U
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    7 `0 b" B. b, I. P1 P% @4 P
  213.   std::list<CString>::iterator l;. U8 u8 D: W3 E+ ?, I, P. }
  214. 7 Q% O' J9 V* A- h
  215.   if(bFirstUpdate)
    8 y- [% h6 v+ N8 s) A
  216.   {
    ) _% c- \9 I+ n6 s5 @  Y
  217.     dwCurrFile=0;
    / w9 s0 f+ ?" A/ H% `5 U
  218.     bFirstUpdate=FALSE;0 W7 `& z6 }. F/ }- u  Z" l
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()); i" U- b4 O- O$ i% F
  220.     {
    7 L9 @4 x3 r, m6 L  y9 r
  221.       dwTotalFiles=UpdateLocal.size();% f) q; q! s  G3 [( w1 S9 c, m8 `
  222.       dwDownLoaded=0;
    - k: E/ q2 H# l" |. Y
  223.       bSilentStep=FALSE;4 Y- V; h; B* e, @2 e
  224.       bCompressed=TRUE;( S" S" n* o7 n8 L0 o) F
  225.       strExtLocal.Empty();* B- j/ M" v/ v' @, k+ k
  226.       strFullName=(*i).second;
    & H; E. V3 d' A5 v  M/ M: ^7 @
  227.       dwProgramState=AP_CONNECT;
    3 t" n. `; [5 A: }' u. \0 _* s6 p
  228.       return TRUE;/ V9 C" J& x1 _! {6 k% Q1 B+ ]0 p
  229.     }0 X8 q# q0 j$ w; @$ x" P0 l
  230.   }5 }/ I4 a3 G! e
  231.   else if(bRestartUpdater==FALSE)- W$ _+ ~' S0 S( H
  232.   {
    : Z: ^: g; M1 D$ B( W, p
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    5 B4 w+ I7 u1 A' N7 Z
  234.     {
    9 |; v, E: U  v
  235.       file=(*p).second;
    * @# u/ q1 }, ~2 Y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* ~/ [4 l' G# N: f1 c
  237.       {
    ' G7 H$ Z* [0 B$ I7 r- Z& B
  238.         olds=(*p).second;$ R: M4 x! u8 i  ^& v+ d
  239.         olds->vers=file->vers;
    ) H# C6 z0 W; \7 K8 u, P9 l% l
  240.       }0 r9 j/ O- D5 ?8 H( p7 q
  241.       else  L, w6 o2 w3 S$ _
  242.       {
    " t2 O3 I' Y. q" K( G1 V  y6 _6 }
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    / @& X/ A' j+ g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    % r; A. A2 m! l+ N
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));0 G5 B' l. O  i  @
  246.       }* _' y# a: P( c
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    9 D5 B4 n4 z$ `. X4 U
  248.       sprintf(filename,"(%s)",file->file);9 C% J* D* [1 a+ A
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 {  I7 F0 n9 h0 I7 \' D0 {  m
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    4 M; L  d! }; d% t# Z! ^. @, V8 z7 g
  251.     }9 n7 j( ]$ Z! P& @% J
  252.     dwCurrFile++;# M( h3 H6 \& O1 m9 j' p, k- q
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    7 t+ t4 l, V! C& U- e8 X) w
  254.     {7 j6 c, S$ X! s& P) d5 }+ C
  255.       bSilentStep=FALSE;' i  p& c, b4 ^" y
  256.       bCompressed=TRUE;: j! F( f7 C0 ^
  257.       strExtLocal.Empty();! h9 d8 W. Z/ j! F# V
  258.       strFullName=(*i).second;* B/ v8 @/ I7 y( w7 m' `7 [
  259.       dwProgramState=AP_CONNECT;
    5 Y( B/ x5 p& k& f, D; n8 x
  260.       return TRUE;1 f( y' b% U* g9 w
  261.     }
    8 z$ O, ~8 k4 o7 x& S" V, k
  262.     if(!bRestartUpdater)
    9 m6 \2 A  D. G
  263.     {
    - ?1 h. u9 S( B" H+ p
  264.       int iCurrSize,iFileSize;
    7 |  G8 U' D2 S% I9 I
  265.       iCurrSize=0;2 F* d; `( v) G' |
  266.       iFileSize=UpdateList2.size();( m) n2 d% P; O- m; b- j2 C& j* B
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    ( i) Z8 x7 ~, u
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");5 f! a/ T! U% Z$ @: T+ ~- n
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");+ F3 H% S, {( {% ?2 i! m! X
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 |9 i2 g) `. `! z* b
  271.       Fclearf(".\\update.dat");
    : l! Q7 A) b7 M2 e3 H
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    * I3 x+ v! V, f, q" _  l/ n
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)+ T  Y" V+ w- y4 Y, s4 {5 P3 G! O
  274.       {% M! ]  Y$ h% ]2 }
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    + i& Q. I$ d& z2 B6 r- e
  276.         {
    0 o7 z+ P6 `  H% C7 x, P, `
  277.           file=(*p).second;: Y: W1 J# B0 {8 D
  278.           sprintf(filename,"(%s)",file->file);2 C! x% v5 b# [( f: H7 D- T: K$ w
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: B/ G; S. }( ^0 t
  280.           iCurrSize++;$ v5 I& z1 S& r- f6 S. _- X
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    / U2 x& y# ]+ [/ R+ s! j
  282.         }
    7 j* `3 p8 h1 @( W+ Y
  283.       }7 Z  t* N3 u; Q# f2 `4 S& w
  284.       unlink(".\\update.txt");
    5 x4 x9 r$ A( l' v
  285.       unlink(".\\update.tmp");
    ! q( V2 O- |5 u9 Y3 r5 @
  286.       Fclearf(".\\checkversion.dat");; E: f3 m. @. T1 W, {, f" I
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);+ c$ d. u7 E1 m1 n; q0 o
  288.       if(UpdateLocal.size())
    1 C: v1 {8 g; [. v$ j* C- P
  289.       {
    ! P+ P; ^2 @! v5 A+ V9 @
  290.         UpdateLocal.clear();7 A8 X0 ^, }- C+ Z2 s8 M
  291.       }
    ; y. r' A2 i: ]" r+ q
  292.       if(UpdateFile3.size())5 Z3 n6 b) o8 ^& d; p
  293.       {
    , e4 e5 q4 k, E
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 [) d' i4 i. U; f! i
  295.         {# j5 x. p' K* Z6 g( ]& r  ?: r8 o
  296.           file=(*p).second;7 g% @& o4 C2 H$ z
  297.           free(file);
    2 P2 D( N+ w1 |5 y& f0 ~) g
  298.         }2 g& a/ Q  P3 ]% T; C2 `
  299.         UpdateFile3.clear();
    + k0 Y0 {1 f2 q  O
  300.         UpdateList3.clear();2 k# Z8 d/ r7 s
  301.       }
    7 l! N6 x( _$ ]# c0 n
  302.       if(UpdateFile2.size())# J3 h1 I7 ?0 R8 C! E& t
  303.       {7 U( W% m; _" B+ Z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % O& _6 ]  J: g, U5 j9 b" f0 [! J
  305.         {
    5 h- g! n& {7 F- `; W
  306.           file=(*p).second;1 @7 k, f- P5 b* c
  307.           free(file);  Q  y9 M$ E* o2 d( A
  308.         }' X1 p  V9 q' B- @3 ]( U* H
  309.         UpdateFile2.clear();3 C) P! v% _  d& S' s
  310.         UpdateList2.clear();5 {* D2 `( N& l) G
  311.       }
    3 y$ \" O* n. A3 q8 N
  312.       if(UpdateFile1.size())
    6 A3 t( H% U4 y6 o! N; B0 m
  313.       {0 m( Y- U" \5 `2 e' G, x; ]( p
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)4 g& k: ^- B8 Q
  315.         {
    4 n- a" ]4 H5 Q" j0 D3 T* }
  316.           file=(*p).second;
    , A, O1 \+ S, T# s" V
  317.           free(file);
    , [9 c+ t6 d5 B: h
  318.         }
    ; `% d. l, ]$ l4 O8 Z1 c4 R
  319.         UpdateFile1.clear();& \1 F& w) P, _
  320.         UpdateList1.clear();
    8 @& s7 i7 @2 K' f
  321.       }5 t6 r; p. C% I# }+ m, U. F; h
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));  T% L& q: @* N7 v% p
  323.     }
    3 X% B3 ^1 P  g7 M. u
  324.   }
    ( J, |2 \" v0 C- d
  325.   return FALSE;9 k/ o: u, ~  Q  M& i5 p- q' h  l3 `
  326. }: G5 B9 W, c3 H8 a9 Z7 b

  327. : `$ g% q  K3 i, S4 f, d
  328. void CRevAppApp::ClearAll(void)
    8 J1 _$ M& [/ c
  329. {
    7 K, c6 R$ Z- }$ Z2 F
  330.   LPUPDATEFILE file;
    " v" M0 H- J7 x1 s' |; \0 c$ h% ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    2 H9 ?' k& C- X9 n7 B5 [% y8 ^

  332. ' Y) W/ I- H1 P
  333.   if(UpdateLocal.size())
    # p& D# G2 U& w! q1 ]
  334.   {
    0 B7 E4 s% U+ u4 [% j0 c& f
  335.     UpdateLocal.clear();7 o& g6 g, s* q! _
  336.   }
    4 R; l& ?" g$ {: s
  337.   if(UpdateFile3.size()), i2 d. {; R0 T+ h) b' ?9 I
  338.   {7 _% ^0 O6 G" x7 ^! n9 M
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . l! _% T$ l, w8 h- w
  340.     {
    - \4 ^& N" c- L* O3 S
  341.       file=(*p).second;. Y* ~+ `3 U8 K* Q! ~" D
  342.       free(file);! t: R: w; {' }1 k$ `8 L
  343.     }
    0 W/ a8 h' b+ S* x, b; t7 F* q
  344.     UpdateFile3.clear();
    0 c/ U& g, J8 l7 a3 ]7 z
  345.     UpdateList3.clear();
    $ k% F: w2 S7 ~5 ]- O
  346.   }! N1 N3 P" u( n( O- t- Q: t& z3 S
  347.   if(UpdateFile2.size())
    " ^7 k8 J6 |* c6 c" u
  348.   {4 a6 V% p6 X/ ?$ o% K
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' b+ a' ^4 ?0 k/ w3 u7 g1 \
  350.     {
    ) h2 s$ v/ V* H! u
  351.       file=(*p).second;
    ( d8 |  n' E, W1 D+ g
  352.       free(file);
    ; {0 ^; r. ~7 h( R- e
  353.     }
    . y2 v1 s- {: T! H
  354.     UpdateFile2.clear();
    * a7 l0 A) u3 t5 J
  355.     UpdateList2.clear();. `, A2 X0 r0 |) @& w
  356.   }) Y: ~' n" F: S3 L) I
  357.   if(UpdateFile1.size())
    8 n  r3 u* g. ]7 p) L
  358.   {
    3 t% i. v% ?% [) t6 k5 L6 ]
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)7 @! N) \% {" Z% O: l
  360.     {
    , E' J* @& t3 p6 w
  361.       file=(*p).second;: U/ ~0 K4 G" G) I5 ~$ E
  362.       free(file);
    ( p. {9 I! H+ y
  363.     }6 X4 R4 o; f8 B
  364.     UpdateFile1.clear();, @8 \$ c4 I# i- K
  365.     UpdateList1.clear();3 n2 ?6 U5 [. C" Y( e
  366.   }
    ( P5 \" a) e+ F8 ]
  367. }  
    2 o; J5 c& E$ m# ^6 j. k3 {: J, q2 E! f
  368.   - b+ _: R# r! J" Z7 \& Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)- X" n' R5 R* o  V8 Z' ^: ]# r
  370. {
    3 W3 K! r; V" W  [9 C
  371.   int c;' `6 A7 z; \. N. b* Y
  372.   LPUPDATEFILE file1,file2;
    % d5 X6 J& f' a( c* u1 r
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;$ m. N2 X) I% d
  374.   std::list<CString>::iterator l;& H' Z% J; H* S! Y+ k/ W
  375. - J3 R5 ^& F# a! G0 V5 s+ s  y! e
  376.   UpdateLocal.clear();
    ! E; W; c0 G9 Q; b. r) _6 Z
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);/ E$ n( B. l5 H. }% N0 ^
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    ( i" e) ]  u! @+ y3 @$ C2 u. l1 w
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);8 `1 z* r. A! i
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    / ]" b% S  _$ V: `+ G. V
  381.   if(UpdateFile3.size())9 F! m" Q3 c/ M# n% U
  382.   {
    , k. ^, E9 h8 d; A+ o: T" V
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    9 L4 S/ Y' c. c
  384.     {
    ' g8 v( q# K8 ~) c
  385.       file2=(LPUPDATEFILE)(*i).second;
    ( y; b# w2 h/ n
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())! O& d$ Y7 n) `; w* }& l2 j
  387.       {
    $ g& Q3 A+ ~1 L+ Z, u
  388.         file1=(LPUPDATEFILE)(*p).second;  s. s( j- O  q9 u& y& u. u' K; A
  389.         file1->vers=file2->vers;7 C, K  s( @7 H9 f; C
  390.       }7 l( I9 ~* t7 p8 `: D0 S0 M
  391.       else
    & G* K- t2 W4 n/ Y' [3 o, g
  392.       {
      N1 F* ~0 r3 ]5 m
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 w+ U2 ^2 W: G& I! ^: D0 a
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));& ?2 J( a7 f- y( W
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& K+ @0 n2 }/ n' o% j; P
  396.       }9 C! [& P# s) @; r
  397.     }
    ! Q  B3 o7 Y& z5 ?, b2 v2 ^
  398.   }
    1 r' c/ j; i; R2 w- Q6 ]
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)- r, r( G* t4 g% R8 Y
  400.   {2 g0 M' N& F" @1 ?' s, g4 `
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    ' O$ c! N. y! M; s) d. e
  402.     {
    # W; Z  s: U+ y. ]# l
  403.       file2=(LPUPDATEFILE)(*i).second;7 z& @6 X# a; D1 N# _, g, ^
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    0 a* P7 U5 N2 d' @: W6 n
  405.       {# }# W5 @. U( Z  t4 d8 l
  406.         file1=(LPUPDATEFILE)(*p).second;9 R# `" q4 q% k5 R% l" V+ p5 i
  407.         if(file1->vers!=file2->vers)
    / v+ ^& ]+ F2 {  Q4 r
  408.         {7 u0 r2 x. _4 S+ S( e2 I
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    & W: A7 r* R( V& O
  410.           c++;3 u- D  y9 R% p3 b- b
  411.         }
    # {0 O4 J: f3 s  J0 q6 g7 s
  412.       }* U/ u5 V# C9 ^( z6 x
  413.       else
    ! h. S) w3 X0 u
  414.       {
    0 X, _5 U7 E! v- }( u) ]+ {6 W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    0 ^. ?8 O, H) ~' o! r
  416.         c++;: A" Y" U- d$ R( |% O3 ?$ F2 D
  417.       }1 U( D' L3 L4 U& P/ z. {
  418.     }
    ' @  f6 f3 @7 G
  419.   }
    ) W9 [, f  M9 K+ }1 M/ A" v
  420.   unlink(".\\DownLoad\\update.txt");% q4 Y) X0 w+ p
  421.   if(UpdateLocal.size()) return TRUE;
    % c* z5 _" j7 _$ T; i2 x
  422.   else                   return FALSE;
    $ b& G# c, o7 W* e9 P) P8 y) P
  423. }
    , k- D+ ?; }! @2 `4 C0 E  Z: b
  424. / l5 g! y& `/ n6 v1 H
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
      j& F: f3 W7 z3 ?% R% N! n$ h; k: V: x
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    : e6 R4 m& g9 L, ]' F: a
  427. ; A  |) E+ L/ y# E6 |

  428. + l2 k% {- H; E' S# o/ i$ Y# B
  429. % U7 Z- ]1 L  |) |1 H3 v* G0 z
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)" G5 R8 p  r9 s3 C* [" [) |
  431. {
    , i4 E% O' w6 X/ O" r+ M
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    & ^# j) e6 G: D1 t
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)- A' D7 M4 F1 h# L$ e* \
  434.   {
    8 A$ s, B8 R+ Z; [3 P
  435.     char szLanguage[50];/ l' h8 F" u1 S7 G/ N/ h
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; b' j9 F7 V" D
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 ?6 q/ u7 E, X- _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ( c2 o/ e  {. ]/ y5 l& Z
  439.     else                                   m_iLanguage=ENGLISH;# y5 [$ b; p2 n/ c) {2 f( i
  440.     char szRegister[100];
    7 ~. T  Y+ x3 U, x( p% d
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");8 v6 G. r- H- C1 w7 W! K- d
  442.     strRegsName=szRegister;
    : ^( R7 n# K2 N  D! Z: ]7 D5 y' O# ~
  443.     char szPatchURL[100];
    * }4 |! C8 Z; `# o( s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");6 U7 Q) [+ |; |$ r' T
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ! Y7 Z' g! s5 M% Z7 A2 Q' }. f
  446.   }/ e$ ]0 O; i( I! c2 G
  447.   else. c' k2 _* K6 |) T5 H. f+ v. D
  448.   {0 D( |" B4 v! p
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    5 j5 Z$ m5 d# d. G# L9 t* x
  450.     strRegsName=DEFAULT_REG_URL;2 T# I4 T: T! U
  451.   }
    1 ~. g. a- Y$ O& m0 O
  452.   if(GetFileAttributes("hosts.ini")!=-1)* g0 B8 z) T3 b/ K; C) w8 b
  453.   {
    7 E2 {# a+ c# Q2 t' l
  454.     char szIP[50];
    1 V$ x6 Q, @, `  [
  455.     char szDIR[300];
    0 W, J. |* t9 x" j" S1 S
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))8 K' G4 x: v& \) E% c( \
  457.     {* e' @: ^1 e2 U
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");. G  [" U: _& h0 y) o5 A: e5 D
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
      [( A+ Y' v/ e% C
  460.       strHostName=szIP;
    + i; r+ {0 ^0 w/ o- D2 b0 }6 z
  461.       strHostPath.Format("/%s",szDIR);! i" E6 m7 t5 e* S2 j4 G4 v1 \1 u
  462.     }; e2 `  m, E" ]6 n% a/ B9 l( i' C5 y) ~
  463.     else2 [1 ?. X: p' _6 k* ~% T5 W
  464.     {2 W" Q/ H" {  F; s" R/ F
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ! @. p0 e* I" p) b2 \9 l; I
  466.       {
    6 d; U* [, h8 h  N4 H$ e
  467.         char szLanguage[50];6 x% K! z2 J4 F: l8 v! l/ }
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    $ B. |* ~3 E* q/ Y
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    8 e8 V! [4 C6 @, T& s4 ~3 H
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;$ X9 K; E& e: L# D
  471.         else                                   m_iLanguage=ENGLISH;, v1 z2 \- e; @, N9 c
  472.         char szRegister[100];7 N0 @1 m& c5 R- c, y3 h3 R0 L; a
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) ?3 L1 A: J  o7 M. }8 C- X! v
  474.         strRegsName=szRegister;9 S4 R2 [4 W$ d
  475.         char szPatchURL[100];  C- g: J1 t7 p& C; N5 x
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    $ S5 X8 N; ]7 H( ?8 [- e, @
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);) Y4 Q% G5 ^/ ~( W. S
  478.       }
    * U7 s8 `9 [4 ~+ t# |
  479.       else
      g7 v  M8 y0 }$ e! z8 Z: S
  480.       {! |3 S& @. E. c% t
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    % ^  q! S0 x$ r
  482.         strRegsName=DEFAULT_REG_URL;+ v$ E2 E( f* Q
  483.       }3 P, U0 z: [: N3 e
  484.     }4 a5 a  }  B' C' S
  485.   }
    7 c5 @. @- Z; R( F& y+ S+ L
  486.   return true;
    : e0 X6 O  X% w, P
  487. }* G6 |+ p/ ~6 w5 k

  488. 6 \3 y- w/ D) M' p% k- [. a' B; M& J
  489. #include ".\ZLib\unzip.h"( F, s2 v7 J/ M6 T
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);) ~& G( c, N5 X% \: e5 B) Q
  491. /////////////////////////////////////////////////////////////////////////////
    , H$ F4 Q3 a9 k5 v7 `
  492. // CRevAppApp initialization" h# H2 X1 u$ X; N/ v* t" Q
  493. . s% o: D8 q' R& v# A
  494. BOOL CRevAppApp::InitInstance()# r) ^* K* E* o# o% E8 s( N
  495. {
    " e0 ]# w2 q/ y1 W# B" I8 U
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    . {  P; B* w5 y9 P

  497. 3 }2 F9 ^0 T% q! c
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);" z3 Q. f" `1 h8 V# Y6 J
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    # @+ c5 Z, O3 {( I: i: q& A/ D
  500.   {
    9 Z, R: i1 F( q
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");' u& F0 C8 B5 V/ w
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( `- V" N# G! v
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget))); L4 [0 [9 H$ u; N' I
  504.     {2 g" O0 S7 E+ `- r  l, `, E1 c
  505.       strcpy(szPath,szPathTarget);4 }4 Z8 @; e& @2 Z
  506.       SetCurrentDirectory(szPath);+ I2 O- y! v& M9 O) Y5 e4 z
  507.     }
    . a8 t. V3 O6 Q$ j4 ^( W
  508.   }
      g/ `: \* G" F6 N3 q! s
  509. #ifdef _DEBUG
    0 b) f4 T8 V% {
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" `3 p* Z' o0 u' f8 |
  511. #else
    , i( B! W+ x3 }
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    , W! S- Z! c( J) c5 e! `
  513. #endif
    ' d: K" T5 w1 @4 M$ O9 |$ a! E$ V
  514.   {
    + F9 M' |7 `( x. X  L6 @
  515.     char tempFileName[MAX_PATH];
    5 @$ D$ M' ^3 P7 w/ M
  516.     strcpy(tempFileName,szPathSource);
    ( j! e; N6 O0 c* ]
  517.     tempFileName[strlen(szPathSource)-12]=0;
    + ^& r8 Q- w  [9 v
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    3 J; m/ c/ C: i% ], [: t
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);; d5 ]; b% U; ^( J# m1 t; L8 ?
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);4 w& u; M$ E! }0 M8 X9 F$ v& T  |
  521.     return TRUE;& n4 ~. O& H6 U3 T* w1 h
  522.   }
    9 {* l# n; c4 h" Z/ W0 ~( l' a
  523.   // Nuke 0118: Delete run.exe- M" u, G; u$ n; t1 a3 K; Q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    6 ]5 J+ }- ]0 H  ~0 T* G) J& ~( L5 u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");. B1 k8 G- [4 c1 ^1 b0 H" J# a
  526.   if(!ReadCfgFile("Config.ini"))9 z1 ?5 H  v, l  h3 v; f
  527.   {$ B) a# ]- E1 ~! I: R4 V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);2 [1 F) h2 t, Z
  529.     return TRUE;2 h$ ~5 b+ ^3 [; l9 s
  530.   }1 f9 E9 G) L4 v
  531.   HANDLE mutex;
    : D% f) p3 i9 }1 D
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    0 J" y+ L; W$ e" u
  533.   {1 r' S0 I' _2 |! @- H9 M2 W
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    7 Z) [0 H7 }. i
  535.     {
    4 \* m1 w' ]$ S
  536.       CloseHandle(mutex);% u, Z* n4 A0 N+ K
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);6 y/ F! R8 d: k, \
  538.       return TRUE;
    2 Q% D. K( V! u1 _
  539.     }
    . I$ K  ]: V) z* e( g  J- {
  540.   }  5 B8 |, T/ ~6 A9 _( L
  541.   CloseHandle(mutex);
    6 `  Z$ l+ ?" i5 N" }: ~5 z0 C
  542. / F0 q/ G$ S& b% x# a# L
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);* m5 y' w2 H4 h  E
  544. 2 v) o4 L2 q4 Y; K
  545.         AfxEnableControlContainer();
    " F2 q9 G  r" z6 {3 L/ S
  546. . I& F: K0 K; Z/ D
  547.   bCanUpdate=FALSE;, A" y+ p! t' ?) X8 ]! q: g  X8 L
  548.   dwStartUpSteps=1;$ v, L  M- ^8 Y: H
  549.   dwProgramState=AP_NOTHING;' P" K& C& L  W, Q: e2 Y8 L
  550. * \2 b0 `; d% _' I1 R
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    " j; ?2 b# i8 y; D0 e

  552. 6 \; E% i5 g: o$ T1 F! S
  553.         // Standard initialization
    6 \; H! w# i; O5 f) N
  554.         // If you are not using these features and wish to reduce the size
    ) @, U' j# S+ U) A
  555.         //  of your final executable, you should remove from the following, w0 [3 y, z9 T& Z
  556.         //  the specific initialization routines you do not need.
    / g0 Y9 A# B* b' p4 V
  557. 4 u5 A# y) \% S  Q
  558. #ifdef _AFXDLL& X' X) x6 X0 L+ I
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    3 K4 q1 K* O1 c& p/ ]0 B
  560. #else
    3 D' m% c% P: ~! v( S5 q* ~- G
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    1 F, [' y7 I  ^  |- D0 M7 Z2 e6 K, `
  562. #endif
    ) p" t% A9 s+ U, P4 H
  563. - k4 b" e: Q( ~
  564.   dlg=new CRevAppDlg;( k, n; g/ U- V
  565.   dlg->Create(IDD_REVAPP_DIALOG);1 D* V0 j. v# G2 L8 b1 K; @; k% ~
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    & G' Y5 s6 _0 g
  567.   m_pMainWnd=dlg;/ F$ W9 b/ P# X: \5 w- m

  568. # j+ o3 f; d/ E
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ) q6 T6 ], U! R  C7 [0 J9 k
  570. . }+ @5 Y+ E& P# V+ I
  571. //  GdiplusStartupInput gdiplusStartupInput;
    : c. Z  z2 A( S1 n# G
  572. //  ULONG_PTR gdiplusToken;
    " x' J1 e" m( a/ d/ E9 g
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    $ Q4 C) z) ~. J" d; N. d% D
  574. + n- F1 H& E% M+ }$ A) ]9 s" V! D( ?
  575. //        CRevAppDlg dlg;, {! O  l; P5 s8 @( m; l2 |3 ?, F
  576. //        int nResponse = dlg.DoModal();
    6 z2 e* _$ A2 @& e
  577. //        if (nResponse == IDOK); h7 P3 g6 N* m! ^! Q! }
  578. //        {
    ) T# i0 K% p. Z5 |4 l2 a
  579. //                // TODO: Place code here to handle when the dialog is
    8 L! y1 m! D/ ^: O4 L3 Z
  580. //                //  dismissed with OK! Y3 A$ ]. h; b
  581. //        }
    ' x& v4 D& e& w5 N3 ~  |
  582. //        else if (nResponse == IDCANCEL)
    * v. O9 c3 E0 Y! M2 j* p9 V
  583. //        {
    ! {% x; H* X8 i
  584. //                // TODO: Place code here to handle when the dialog is4 @4 t. ?0 ?2 {
  585. //                //  dismissed with Cancel5 B( u9 m3 Z% B3 `6 E
  586. //        }3 Q, {  d, m  |6 H

  587. : [3 @4 G5 m0 w3 I
  588.         // Since the dialog has been closed, return FALSE so that we exit the9 u1 f% V4 J# R. m8 K: @
  589.         //  application, rather than start the application's message pump., B1 B: O% ^1 x) P
  590.         return TRUE;
    5 x. F! {. |: c. A3 A" {9 A
  591. }% P8 p  H+ }' p& g; _
  592. 4 X2 Y" V3 V3 u# P
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    5 U" p  j) t$ {
  594. {& T7 T" a0 ~0 Z3 z1 }5 K: P
  595.   int i;( U1 ~# K! d6 F3 E' b7 m
  596.   char *szRet;
    3 k$ d2 ^& K# a9 C

  597. 7 L3 o/ O7 V0 L, b. V1 A
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , A# ^) Z6 F2 y  [7 r3 |
  599.   if(sztoken)3 {# C( E# z4 K& a3 ?0 w$ [
  600.   {
    0 o: _8 k( r8 x7 D# F! F! d1 H/ M) P
  601.     szRet=&sztoken[itoken];: t) E) S$ A6 l4 C! w! A
  602.     while(sztoken[itoken])" a' ~# w5 r1 Q4 T  w  q! `: v2 w/ |
  603.     {. L& b% J, a* l: a0 U6 x
  604.       for(i=0;i<(int)strlen(token);i++)$ ^9 Q8 t; O7 `& o; E
  605.       {& H( p& {0 X# O# p, g5 N; r+ @
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])& N7 w; h0 Y$ J9 o9 y: F7 S$ X2 z* o
  607.         {1 [. D2 [# {9 q
  608.           sztoken[itoken++]=0;# {( K) Q0 s' t1 }% L) |2 X7 g
  609.           sztoken[itoken++]=0;  a' R2 |- L/ ?( O7 I& u% K% h7 T$ [
  610.           return szRet;% n, G9 {* N6 H5 s5 ~
  611.         }
    . _- b4 l% S- n
  612.       }
    3 U) j/ D5 s$ q, r+ H3 C# J
  613.       itoken++;
    / c- o* \  v( ~" _( u2 W0 Q
  614.     }
    " W" ~- C1 A# H6 _; [
  615.   }" K7 B1 p7 D  G) ]2 S
  616.   return NULL;4 u; N0 g! Q! x2 C
  617. }' U, ]) a/ T/ p0 u6 ~

  618. 0 @% t/ E  w( @# ]# n
  619. void ProcessProc(long Total,long Current)9 e' y  ^! q8 P+ H( ~( z! P
  620. {
    2 L. q6 w0 I2 a; {7 s6 F9 f
  621.         MSG msg;5 o0 g6 r  W2 k
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    % l$ K) z( ]. C  u- B
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));- h0 P1 e6 Y/ l0 z1 ~1 }' N8 ?
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))- {3 i( U( M! `' K& E
  625.         {
    - n& {  _( A7 }: b8 q
  626.                 if(!GetMessage(&msg,NULL,0,0))
    " N0 Q1 x- l' _. g4 q
  627.                 {
    . ]1 q) X2 @) b$ G0 }  L1 C# O
  628.                         return;
    0 |) p( k+ R, F1 @' }
  629.                 }* ?6 d" f6 F% a8 }
  630.                 TranslateMessage(&msg);
    1 r: N/ Q$ G: _/ w5 K  t& }
  631.                 DispatchMessage(&msg);0 C$ O9 V2 G" ]/ H
  632.         }       
    3 R* O9 Q" d2 y1 L. }
  633. }
    # Q( C: ~' c7 N* E# |
  634. ' j) i  x5 w) C+ K6 ^
  635. BOOL bFirstChar=TRUE;
    7 }4 t; H2 I4 Z9 p! p7 w' B

  636. 1 [, V  k- f. M. t' `" c( a
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    6 U' d# x, }6 W0 ~! P
  638. {
    8 H, h& y9 `- q+ M
  639.         // TODO: Add your specialized code here and/or call the base class
    ; y  d5 D9 p9 V8 p* c; p
  640.   switch(dwProgramState)
    3 l  p/ ^5 A1 A8 H5 h) ]4 R
  641.   {: Z; I5 g. ?1 _3 Y' z
  642.   case AP_NOTHING:# w0 ~: p% }0 G' V; W  B
  643.     switch(dwStartUpSteps)& O) f; M+ z& Q4 F& ?. M! C# B1 i8 Z0 J) W
  644.     {
    ! v3 ^3 _! S* d6 y: x9 V; `. K) B
  645.     case 1:
    # J6 O8 o+ ~. ^5 }; @
  646.       {: Y; {! g2 g3 S2 w- x
  647.         int i;  l$ a5 q8 j  g' O7 y
  648.         CDC *pCDC=dlg->GetDC();: y$ t  x+ P$ C) Q( k
  649.         HDC hdcwnd=pCDC->m_hDC;
    7 [9 X6 i$ w2 g6 U
  650. //        Graphics graphics(hdcwnd);* j  Z% H6 }9 k- N! D  l/ r$ D; T* z
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    8 }* ]6 b& ]6 J' Q
  652. //        INT iWidth=bitmap.GetWidth();3 H% J' P) J) O
  653. //        INT iHeight=bitmap.GetHeight();
    * e; x+ \& x+ l) c3 A4 B- |. T; Z
  654. //        Color color,colorTemp;
    5 I* J. j$ F1 Z$ x1 R) z- B
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    0 u4 G' F% g4 ^6 L
  656. //        {4 E/ z4 }" _! S) r  ]: L
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    ' C. O! j% r7 v. _8 c% s$ J4 g
  658. //          {
    5 M; e: p) C. p% e3 i: C
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ( F6 i- j% _  ?9 f+ T+ M5 I. O( _
  660. //            colorTemp.SetValue(color.MakeARGB(
    , K# Z$ R( k" K1 ]) ?0 e
  661. //              (BYTE)(255*iColumn/iWidth),
    + |. s" V+ M$ s9 a( c
  662. //              color.GetRed(),
    ' }" c  n" {, L
  663. //              color.GetGreen(),
    , a" Q% I" K3 }  d0 U, E8 u" ~
  664. //              color.GetBlue()));
    ; G  {) R/ y2 p) @- a
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    2 y& c# V5 \0 E
  666. //          }
    , T" Q4 \3 d1 Y. m
  667. //        }
    2 _% D0 W" c/ |2 u' [
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    ) }% _4 I/ X: p; `- D
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");! Z6 M- u5 H  n- k; y, F8 o% h7 M
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");8 I: S  b0 n' n- x) s% y( @# q
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");7 g% B6 i4 u% `" ?% F8 G0 W
  672.         for(i=0;i<240;i+=8): E( N! l- D& D3 h
  673.         {6 W- b5 ?1 X2 r' A; M- B$ X1 W- Y
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - q  c4 f8 K% [8 u" ^
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 T* p- |" ^! N5 p0 t
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    $ W6 W2 _+ @" M
  677.           Sleep(33);3 E( u; J. U6 q# Y
  678.         }
    * t' b( ~9 ^$ R2 Z, U  j# _7 K/ `
  679.         Sleep(1000);
    , M6 b! T4 G% h1 ]& n
  680.         for(i=240;i>0;i-=8)9 L# `1 `2 q* K. x5 ?
  681.         {
    " `8 j& V4 P: W2 Z
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    + _0 z! d/ b7 V
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    % J2 I5 C* l+ J4 h8 O% L+ N
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 `# g9 b3 i  p  a4 K
  685.           Sleep(33);1 e+ q% X1 z& R, Y
  686.         }8 U. L7 L+ _4 ~+ b: z2 Y. Q- L' ~- T
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    0 p1 U  F% P" m- ~4 b+ g4 H, V
  688.         dlg->ReleaseDC(pCDC);+ y1 @3 V' i# _( M0 I6 m' o9 {
  689.         DeleteDC(hdctar);% z( n. x+ r; E& B! R
  690.         DeleteDC(hdcsrc);
    % U- V, L$ n5 v. u  T$ e! D/ q. T( a( b
  691.         DeleteDC(hdcorg);; R* @: W5 y8 y+ R5 u
  692.       }5 w6 C0 {8 b' o: S1 l3 g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    % P1 V: x! y4 L4 o2 w; X
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");  V, ?1 I' Y4 N9 }" M' b% F5 u
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    8 P( k0 @, |6 c" I/ r. H
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");* B& u" C& [: C
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 G- [  S( N  j) T8 \/ w
  698.       if(!Dn.Connected())+ w# u( |0 P4 y$ H" |
  699.       {' J, Y- ~) \* c, u1 o) T  F
  700.         dwTotalFiles=1;6 l3 G8 K* @; Q8 P
  701.         dwDownLoaded=0;
    $ a1 b3 x6 _! b' t
  702.         bSilentStep=TRUE;: K3 f" a& E5 Y
  703.         bCompressed=FALSE;$ d- l; E' e& V" z' S
  704.         strExtLocal.Empty();; S( S& ?9 L* A% ^
  705.         strFullName="readme.txt";6 q0 M" a/ o7 U% I. P
  706.         dwProgramState=AP_CONNECT;
    & H% r& P/ \# x' E+ U$ U# W
  707.       }5 P& l  }7 D% O8 ^, ^5 k
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();9 g: |  ~7 X3 B9 [
  709.       dwStartUpSteps=2;5 j- {3 N, g9 ?2 o6 A6 x
  710.       break;% w& E; Z; m5 U) O/ Z) G2 u! B& J
  711.     case 2:/ c& M5 w: v1 D9 W5 G5 F) }; k) S
  712.       {8 \& \* b) G! f+ ~
  713.         int iEOF;( X3 x: \/ Y' E# q/ o7 o+ I! N
  714.         FILE *fp;
    0 c1 O$ {; b- H" q8 ?7 b  U
  715.         char szString[512];
    6 r$ ?( q. o: p% q( b% [
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");+ a) b& [; h( E& M4 w
  717.         if(fp)
      |% g% j& F4 W% Z6 _6 \
  718.         {  U: R& i, `  y# s  C. H8 ^
  719.           do
    ) O+ J  X& Y& y6 L
  720.           {* T" y% ]: \7 \; k
  721.             iEOF=fscanf(fp,"%s",szString);  ^5 o: ^7 I+ \3 ?* j& `+ X
  722.             if(strlen(szString))
    - f8 V4 a, [5 G6 J0 n
  723.             {: q/ U* w( D  U* A. W# V
  724.               if(bFirstChar)
      Z$ N4 W/ R. Y5 B0 N3 {. m
  725.               {
    ; w5 G! t4 q: ~; x: d/ Z3 t
  726.                 bFirstChar=FALSE;3 M: s: l0 M: @. E
  727.                 bConnectIsBig5=FALSE;
      e$ J. U$ V7 w2 G; e* Q
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;3 l! ~5 D( Z& @6 J9 g! D/ Q. F
  729.               }0 J; v5 ~- f- o( ]+ d  A
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; _, t& I  l* |& F# W0 s; g2 ^- w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 L- d  I2 \3 q  N& y+ g
  732.               dlg->m_ListText.AddString(szString);2 A4 q, {% Z& a: ^2 s1 N
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 y( F7 w5 n! O" l
  734.               *szString=0;, r( F0 e: E3 E: m. C5 _
  735.             }
    0 J: \( }' ~. `% `$ |' ]
  736.           } while(iEOF!=EOF);
      c% w6 T) s- O3 X3 b% V) \+ O
  737.           fclose(fp);
    2 U# l+ d# T# \. a. A2 S
  738.           unlink(".\\DownLoad\\readme.txt");* i. w6 j* M! U) h; ]) b
  739.           dwStartUpSteps=3;8 M9 V' S0 Z9 `" e+ \
  740.         }$ v( E9 i9 G8 P
  741.       }) n) K4 ?& {' C+ e3 E0 P
  742.       break;
    . M9 ^; `' o  u6 B- t# V
  743.     case 3:
      f& ~1 J( }0 a9 N' b' D
  744.       if(!Dn.Connected())
      c0 o) S/ X, F4 V
  745.       {/ E3 E) v( k6 }- C. k
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);# w' U7 @4 h: N. Q; ^) K/ T6 Y
  747.         dwTotalFiles=1;: ~8 ~& u7 E+ y& ?+ z
  748.         dwDownLoaded=0;
    ) ]5 L! P; p% ^3 @1 B
  749.         bSilentStep=TRUE;- y7 @' [. ^( n+ d4 N
  750.         bCompressed=FALSE;. r+ H; H9 t9 M6 K+ l- k
  751.         strExtLocal.Empty();
    , [+ A& c& b  S& K
  752.         strFullName="checkversion.txt";! P- h6 l% E; C+ {
  753.         dwProgramState=AP_CONNECT;: i- z* `0 u0 x. N4 _. N* X# E
  754.       }) m7 H$ {6 l, q, t; O
  755.       dwStartUpSteps=4;( c; a* r4 A/ N6 }! w& ^
  756.       break;
    7 g9 |( h  ]7 E% B  U7 L
  757.     case 4:
    / z' F* _1 l$ N% t5 r4 `
  758.       {' e4 D. M+ @/ e, M3 z) l
  759.         FILE *fp;& @5 ^1 p, g. V) t: x0 u" l
  760.         char szString1[128];
    , n, j  h, }9 h/ @
  761.         char szString2[128];# |6 a2 B( D* I1 A4 \" f! ^
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    # y3 D" |5 ]3 `' w
  763.         if(fp)
    0 U1 u/ v6 n8 `" ~  i" |& e/ l
  764.         {
    & ]$ L, T* C) z0 [/ q* ]
  765.           fscanf(fp,"%s",szString1);$ [4 n, W% R) U9 g4 O. L- s' c
  766.           fclose(fp);
    % x0 G  x' c1 y
  767.           fCheckVersion=atof(szString1);, M+ o1 `  w' N# Y; y/ L
  768.           fp=fopen(".\\checkversion.dat","r");
    ) |6 \+ k% k- ~1 l6 @
  769.           if(fp)9 R2 T$ F& x. R* D" U. ]
  770.           {* w; b8 ~% w) P
  771.             fscanf(fp,"%s",szString2);
    ' U9 W  x% w! C/ T8 @) Y
  772.             fclose(fp);
      ?' n* g5 R' ^# ^8 p  j
  773.             if(atof(szString1)!=atof(szString2))
    : _3 g5 ~& k7 ]+ z7 ~; {7 y
  774.             {
    * b% T' Y. d# o8 m1 o8 R+ }
  775.               if(!Dn.Connected()): l7 ]/ R( \1 ?2 t  `
  776.               {
    3 H7 G" k8 K$ J4 r
  777.                 bFirstUpdate=TRUE;" X: K" ~) W" d5 T* g% W& `1 C% P% o
  778.                 dwTotalFiles=1;
    2 A* D6 h6 h) I4 T* h5 T5 p9 S
  779.                 dwDownLoaded=0;1 K% `3 A) C) i+ T: V* A
  780.                 bSilentStep=FALSE;! z8 x, c$ m0 L) O5 x2 r
  781.                 bCompressed=TRUE;
    $ o! V1 l. v$ ^6 U
  782.                 strExtLocal=".\\DownLoad\";2 _- p* e! @" z8 B* |0 ~
  783.                 strFullName="update.txt";
    * f# _2 m2 e/ S$ @3 t1 F3 d
  784.                 dwProgramState=AP_CONNECT;
    ; e  m% u! B4 I, V+ J8 w0 @
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! u+ |* X2 x/ f/ U
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    / s2 I  n+ ^# M) _' E
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ; H' z* n! p- u' i/ s7 K

  788. ' q' E2 S- j* ?+ w! q5 T
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 }, D  u2 o* Q1 \6 X
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    : D# G2 m# Z+ V9 V- M# r, @
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 ^; {: g) g, z2 y# Q
  792.                 {# V, {9 v. w& h; l- a. }6 N
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");( ?! X/ c0 C7 r! h2 R# l& c% ?
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");5 U4 B2 _  g- t8 n0 N5 z  l
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    + T6 Y6 A, \8 c1 x$ ?( L6 `7 s- m
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ! ^. s" r% s7 }1 G3 V' I
  797. 1 J, D; m. |  W; X9 y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");# ]; K# U: w% b0 i
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + B1 P& p; J3 j9 r1 Y3 g" T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");: W' Q6 I9 V1 ]$ Z" Z
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * t: [2 c/ e0 I9 T4 @4 l. Z+ _
  802.                 }9 g. d8 o; ?! |6 M
  803.                 dwStartUpSteps=5;
    3 [7 P- ]; U' |
  804.               }
    # W$ e! v; |, i; x2 |
  805.             }- Y4 ?& ]' x, W( J6 `1 g5 K
  806.             else
    # j5 _/ C; |1 ?- b# q0 X" _
  807.             {
    + D6 T8 y; B0 E0 R9 v7 q
  808.               unlink(".\\DownLoad\\checkversion.txt");0 q* J' f' [0 l: M8 l
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");% `: Y( T" t+ T3 H6 x: z* p: u/ P
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    7 Z: F( Z  F9 E$ a7 B
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");4 E6 l2 D% S4 p% T( t# `+ g+ G! V* e

  812. ' N2 E- ]( F, G6 @. L! o; M  X
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    , i# Q7 ^2 j3 V" W
  814.               dwStartUpSteps=99;- O" A: C& \8 ]7 g' y
  815.               bFinishUpdated=TRUE;; ]3 S: t$ c+ j( Y" P! I5 @5 z
  816.               bCanUpdate=TRUE;4 q1 S8 T  k. P1 u. ?
  817.             }
    ) K  C" i$ P& t. e# |9 g
  818.           }
    ( n" M8 r2 o: L) f1 b
  819.           else
    4 I" `* s; q, A) q( M
  820.           {
    $ ^9 N) @& U' l
  821.             if(!Dn.Connected())
    ' C# U  h2 G/ s
  822.             {
    1 z6 s2 G/ o: }1 Y9 i7 g0 n3 E
  823.               bFirstUpdate=TRUE;
    % B0 K* H: c- t- u, i
  824.               dwTotalFiles=1;, x# w2 N, z6 C3 U5 S4 u# w
  825.               dwDownLoaded=0;
    , ~9 @# _* i7 p
  826.               bSilentStep=FALSE;: }+ l3 n" m: R
  827.               bCompressed=TRUE;9 ?" j5 Z  Z! R$ i
  828.               strExtLocal=".\\DownLoad\";% R( I* c& G+ S
  829.               strFullName="update.txt";
    / s6 ?7 M0 O: g7 h/ L0 S
  830.               dwProgramState=AP_CONNECT;: p9 X. C7 ~* L6 M( y% c6 b! j. z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");7 W' @2 C7 ~: u* A. F4 ]! n( _3 ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ; h# Y: o7 G+ t* ?* [
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  }" e; A0 A) b. E; ~* L! e& x9 U
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' o+ ~4 @: d* ~/ u8 o% C0 S
  835.               unlink(".\\DownLoad\\checkversion.txt");
    + Q# S/ d& Q) p. k% `
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    $ t; @  a% {4 p% G% N
  837.               {' @' X, M" D; \/ s6 |
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");1 @3 F5 B" q! w& N$ l
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");8 u( D, h, @1 X/ j# l( ]5 g
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");, i- g* J5 a% F/ m
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);& i3 k+ x8 z- z8 w4 ~, i' s: x
  842.                
    - `3 T  V& c" M
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 v) X) p- y) n
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");. l/ |( ~" {! M9 F& H6 x
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");6 l/ r4 Q: g* L6 k, e
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + o6 o2 |& t, ?. e
  847.               }
    % ?  v9 n- |8 p2 ?. P; u0 c$ A7 D& c
  848.               dwStartUpSteps=5;* z$ R7 E1 v6 N$ P1 H: u7 @& x
  849.             }$ n5 w% i6 K, \: O. l/ O
  850.           }. k4 }4 Z, J, j" r- ~  H
  851.         }: h! i. f# d4 v
  852.         else; ]9 x  R5 S# `: D- @
  853.         {
    + Y1 |! J" `* ~) v( h
  854.           dwStartUpSteps=3;7 z& _- A. N( m8 E) u  f. W) I
  855.         }
    ( d& {; \) o1 e4 f6 J! k
  856.       }
    3 \* b! J9 z9 H1 C$ b
  857.       break;
    8 k+ u! G! R2 Q
  858.     case 5:
    0 K: T- f. w; m1 Q
  859.       {
    8 ^% m, Z. e" m3 l
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)! n, V$ Y% w, y( c
  861.         {  S& Z% e- s6 H1 `/ S
  862.           int opt_overwrite=1;
    $ S9 U* `6 P  `
  863.           int opt_do_extract_withoutpath=0;/ J( q, \5 q% z. A. G  l
  864.           unzFile uf=NULL;
    ( c, L$ \+ D9 ~8 K  ~; ^* b
  865. : z# Q; j: U" x0 u! K+ ~1 u9 p5 _
  866.           uf=unzOpen("Wsa.zip");! `) S" b  ?) L4 }/ t9 M/ [
  867.           if(uf)% ~0 y9 Y( @2 Y" v$ K
  868.           {" t! }" ~( H9 o+ U! R
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);0 [1 m, K. R2 l5 V% |1 s& R
  870.             unzClose(uf);
    6 n" u4 W# e, h3 I
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    / [! I" z% o2 x# Q1 s
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    6 \& C. Q8 Z0 Q- T
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    2 V. O7 s+ @/ e! h! w1 Q! d4 g
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 @8 N$ V5 q! ]- X4 m& x
  875.           }
    ( p& I7 {3 i1 `# l- L$ _
  876.           DeleteFile("Wsa.zip" );
    " L+ z) w' j9 D' C
  877.         }4 L! V; H5 T* a  Z# J

  878. ' H! l1 L# q+ ]9 D% K0 l3 d
  879.         if(CheckLocalVersion())
    ! `  g+ G) m3 B" b' `# O6 A
  880.         {6 \" T) @- Q! P) u$ S6 Z1 ^! R
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");) D2 D' [" M' S7 g/ _# e
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");5 l! V+ O$ y' D6 [" X. z0 U9 W
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");: w0 w2 g, q1 I  J
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);: b3 ?, C, c6 _
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);- z" n1 u# Z( r. a: g' W
  886.           dwStartUpSteps=99;' ]- v- e) j1 h# H. d0 Y) I) p
  887.         }
    ) q2 c) |# t+ ^4 M9 x& z
  888.         else
    ! n1 g. }$ _  z6 t
  889.         {
    9 q$ G8 k, s1 a  R
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    * }: d- b& U! C. E! q$ J' w4 U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ f# p9 ~! t% {0 v
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");7 k+ m/ C6 k& q6 |; O+ W; `

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

! u" g6 _7 k& H$ x* I
) [  R  z# B6 n  \+ C9 i8 p7 x

評分

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