CSUpdate.exe源代码

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

* g7 B  P# N% ?" ~& K$ D% ~
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ) ]+ R6 Z9 \% g9 f" Z
  2. //: C! G# \, P" t; M! J( B
  3. ) ]- G7 J" Y0 d9 S
  4. #include "stdafx.h"
    $ ]. I  I) y# `0 w+ c# [& P
  5. : X) E! B- J+ y0 u3 `/ B0 V
  6. //#define UNICODE9 r7 z# a% R: @" j# X" H: p- O
  7. //#include <gdiplus.h>6 |( y$ b  x/ k( R% Y/ T! i  }# w
  8. //using namespace Gdiplus;
    $ O" M* s/ B, I0 g1 }) V' G3 H  a

  9. 4 M4 p* _" a$ h" P+ h' |
  10. #include "RevApp.h"
    1 Y8 F8 R5 b7 W3 _
  11. #include "RevAppDlg.h"
    ! R- k/ {3 W. K- C1 k

  12. % D) S% Y% Z8 P
  13. #pragma warning(disable:4786)) |' z* V8 E* K2 E
  14. #include <map>1 J6 y- n" ~& Q, ^. F( z7 }9 K
  15. #include <list>
    . Y" v  g* U( }; h
  16. #include <direct.h>0 t' O: Z  S  A0 M$ {0 f- C6 e

  17. ) T/ c0 |% m+ I6 s
  18. #ifdef _DEBUG! c! z# G) _; V
  19. #define new DEBUG_NEW
    6 z- @, ]; ]  x
  20. #undef THIS_FILE
    1 l& c$ g( l2 M& o/ G1 Z- j1 A. U
  21. static char THIS_FILE[] = __FILE__;1 r" C+ Y& V3 ~+ u5 S
  22. #endif( V+ ?" E7 w) h
  23. #include "SkinResDef.h"$ }# N5 ^5 J; M1 _- r" \% n
  24. #include "ChangeBG.h"
    : N" N$ u' I5 h8 _1 u2 m3 D1 T  M
  25. #include "AFXINET.H"
    ; y6 b* Z$ r1 a
  26. . A; u3 v1 n- ?# [3 H" t. y8 n
  27. #define TRADITIONAL_CHINESE 0' p! W# X4 Y* ?
  28. #define SIMPLIFY_CHINESE 1
    - ~4 K' B0 t, g
  29. #define ENGLISH 2) p9 O1 m7 O2 }1 y
  30. int m_iLanguage = ENGLISH;
    . p6 o  C8 e. Z; n# }
  31. /////////////////////////////////////////////////////////////////////////////
    ; |+ m' m0 `: G: W0 D# ^
  32. // CRevAppApp
    ( y4 K+ o% X) c9 P, O
  33. ) r, b% |' }. d. _( V8 Y9 F
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    " S0 x. p9 J' H3 Y& q' {2 S! O+ z
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ; h/ z6 Z# ^1 y' s/ {4 @
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ a  `) Q( y" \& N6 |$ @5 O) E
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!+ {; X6 D  b6 k3 c- C% L; @- e
  38.         //}}AFX_MSG
    & z! e2 H- z8 W3 ^8 ^. Z- J
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)% |" v; X5 z4 M% Y# x& X  _5 H, T
  40. END_MESSAGE_MAP()
    ! U1 ], j9 D! |- C/ Z

  41. 8 C  I/ J. p2 n) P! C) ?! l& Q
  42. /////////////////////////////////////////////////////////////////////////////2 w6 g$ \" Y2 N9 k) i- K
  43. // CRevAppApp construction( e* j& _0 Z+ ^1 i! `9 H
  44. * {7 T! L, S% ]) U. \5 G
  45. CRevAppApp::CRevAppApp()* O0 Z+ `; W0 }( h0 @/ |
  46. {2 U7 `! M% m2 p
  47.         // TODO: add construction code here,
    6 D' }, y, o1 d2 c* t) Q6 \; ^! M
  48.         // Place all significant initialization in InitInstance3 f! m. u0 s4 v  L/ B
  49.   bDisplayIsBig5=FALSE;' E: Y* N2 C1 `! g+ b/ ~
  50.   bRestartUpdater=FALSE;4 R" }7 L0 ^- a8 P& _& H, P
  51.   bFinishUpdated=FALSE;
    + a( O, ^" P. @" j4 P
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    % g! j: E7 `9 f% R" R; M
  53.   InitChangeDataBig52GBKS();3 \! L( m1 ^$ G# U' y" n! J0 l2 _
  54.   InitChangeDataGBKS2Big5();
    9 g, U, h8 ?, j4 F
  55.         //
    & n' R" F/ y; h% ]/ {% Q
  56.         bClickRunExe = FALSE;
      \# B0 a  r# \1 u+ V/ a* q% V% j
  57.         //8 }; W+ f  y% C& h$ B
  58. }3 x* m( b9 O: Y
  59. 5 `- E' T+ G6 w" v& ^9 b
  60. CRevAppApp::~CRevAppApp()" f. j  k6 _% K' R& Z+ v/ F
  61. {
    3 T0 z0 K4 I1 W
  62.         // TODO: add construction code here,3 k5 t* C. s$ z- {% D( q. ~
  63.         // Place all significant initialization in InitInstance- M$ t) T( {/ Z% S' n  U0 @$ [
  64.   EndChangeData();0 M: U1 ^$ g. |* f" I! W) ?' V! l
  65. }
    5 J* K! v6 `" O9 f7 M3 S

  66. " c" K% n/ ~# l6 w
  67. /////////////////////////////////////////////////////////////////////////////
    6 }8 j: G- }' W/ G
  68. // The one and only CRevAppApp object+ r5 `; F% f+ [) U4 U; n: D
  69. ) c; [+ y1 {  V; R
  70. CRevAppApp theApp;
    2 p, M$ u- N( Y/ v% b$ S8 b
  71. 9 r2 J* R4 |" B: H
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    1 @* U2 n% ~/ L$ S/ Y
  73. {
    - T9 z9 C7 l& o5 A, u! n+ i' B( c
  74.   int iEOF=0;) y  }1 e5 ]% w
  75.   char szTempName[MAX_PATH];! t7 a( \! H' S( g) h0 |" ~
  76.   *szFileName=0;
    4 w* ]2 B  B- y/ b, R
  77.   iEOF=fscanf(fp,"%s",szTempName);( |, Q" L0 n7 R. M1 ?  C
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')% ^2 r; f7 c$ m. ^
  79.   {
    2 d- \3 U1 e  ~/ h) k
  80.     strcpy(szFileName,&szTempName[1]);3 M/ u% z( E& v1 y
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    1 w" `# k" ^" u0 C
  82.     {
    & `- `6 F" t# ~
  83.       iEOF=fscanf(fp,"%s",szTempName);
    " Q6 k# ^2 w& ?# Q! Y( p" o! k3 v6 k: V
  84.       strcat(szFileName," ");
    7 A6 ^% C2 n8 s; z
  85.       strcat(szFileName,szTempName);
    1 y5 p. F$ Y7 j1 _+ J: o. N4 }0 U
  86.     }4 s) u% k" T5 M3 a* t
  87.     if(strlen(szFileName)>=1): v) W' o* @. m0 v- \& ~# D
  88.     {0 j/ Z) [8 x  j7 G
  89.       szFileName[strlen(szFileName)-1]=0;5 l  A3 R7 w7 s( D3 Q0 q
  90.     }: t! v! A3 R9 z+ \$ D
  91.   }, f: ^6 r( D! Q: [: }# _, ~% B
  92.   return szFileName;5 U# J( `- C; d/ {: c
  93. }. m, \0 [" d& V- z  h

  94.   m6 ]. K; e, L
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    6 j' W: p* b& s* A% y* @7 w9 {9 N
  96. {" s# b4 o! v* c) s2 r. m
  97.   FILE *fp;$ e; I) x4 L% Y7 T" ]: n& v
  98.   char *key=NULL;
    , M5 y3 R! u  q  A% _& ?% `
  99.   char version[MAX_PATH];, c! A5 m7 i! Z1 S, Y1 E! S
  100.   LPUPDATEFILE file,olds;5 J. [) n" L- D6 {
  101.   std::map<CString,LPUPDATEFILE>::iterator p;4 J+ x7 p/ h1 C

  102.   X7 U, Y0 F, H6 t3 c9 U8 I7 E$ J
  103.   UpdateList.clear();: C9 ^  @' z9 B- b- f
  104.   UpdateFile.clear();
    ; _: t- S, K3 X2 p( B" T! I
  105.   if(GetFileAttributes(filename)==-1) return false;
    : z, V+ X- z1 b3 ]
  106.   if(!(fp=fopen(filename,"r"))) return false;
    : o$ t* ~: b# j; _! P
  107.   fscanf(fp,"%s",version);+ i; h5 F6 S* r  k  e6 x
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }; K: ^0 G" B; b& o! Y% h3 W
  109.   while(fscanf(fp,"%s",version)!=EOF)1 H) l/ n- L3 _* I7 J
  110.   {, A2 }/ {4 @1 P/ z0 e
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    : v  t- Q4 c1 j
  112.     fscanf(fp,"%s",file->path);
    & b9 v5 C, e$ w9 t
  113.     ReadFileNames(fp,file->file);4 y# |3 m3 s5 s* F- {; |/ D- o
  114.     strcpy(file->full,".");
    7 K8 y/ m4 Y  F0 q8 I, c
  115.     strcat(file->full,file->path);
    9 J$ f" P1 e$ _+ _5 M
  116.     strcat(file->full,file->file);
    ! I, F' A! s: T/ ^' ~- Y# g% d+ ^
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())  J2 u% F( i: \% m4 o& j% w
  118.     {
    + M$ v6 D  ^2 l) T& G% h* s
  119.       file->vers=(float)atof(version);% Q( B6 _* O+ X& @0 H1 T' V0 k' b
  120.       UpdateList.push_back(file->full);
    , q! m3 o! k: W7 h2 w+ S$ A
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));1 V" O1 ^" }4 x1 ~
  122.     }
    " g( _* w# j1 I  }
  123.     else
    ) q, ]( A9 }1 j- o& U5 l6 t
  124.     {
    9 z" `6 g1 J5 y& ~5 ^2 H) V- n
  125.       olds=(*p).second;* a# `1 |. j& o4 B, ^5 G
  126.       if(olds->vers<(float)atof(version))+ b" L  ~- w7 y( f5 q' W# m
  127.       {
    - [2 W! d# H- r0 y
  128.         olds->vers=(float)atof(version);
    . C. y) T. f0 u- \; ]* G' H! C
  129.       }
    " A. w- B8 j4 R8 a8 U) y8 M2 B
  130.       free(file);
    " ]* g4 R* Z/ t$ _) O
  131.     }- [* \$ H6 f3 a9 J: T9 U8 S- ^- c, c
  132.   }9 p. `  k, e8 i+ ]8 \+ e4 X" w! c+ `
  133.   fclose(fp);0 E. [( ]& C& r
  134.   return true;  W- q( b" @1 j0 [
  135. }0 ^: d% i/ G- L9 C

  136. , s) U# A3 O  |  q1 j/ t& E8 s
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    $ c7 _: Z, [% N3 @
  138. {
    0 f; E6 y& g8 u; K6 I$ c( C; _# S. T
  139.   TCHAR  szFull[MAX_PATH];
    : F+ ^# p/ u4 {/ j" n4 E
  140.   TCHAR *token,*inter;
    " k0 `8 \$ c, @+ l4 v" O
  141.   *szPath=0;
    ' v. Z  g$ \" F( A4 d/ Z( j9 {
  142.   strcpy(szFull,szFullPath);+ b% ?8 O' {, f: }! O
  143.   token=strtok(szFull,"\\/");0 j( H9 M1 A% {3 @# B
  144.   inter=token;( f/ \' W5 `4 U- S) c6 ]9 c6 j
  145.   while(token=strtok(NULL,"\\/"))' S! d4 I8 l0 A% `
  146.   {
    3 `: F( V0 l! }) j9 k
  147.     strcat(szPath,inter);
    8 `7 D3 \* T; g+ ~$ [1 u4 j+ {2 K
  148.     strcat(szPath,"\");
    ; T% y) D: S) Q! Q) ?& M
  149.     inter=token;
    % Y+ F2 `) C/ P' F9 D
  150.   }7 q- h- x; v' a- I5 Q8 y
  151.   return strlen(szPath);
    3 T& @7 c9 t8 G5 e$ x
  152. }9 ^1 u0 r5 K" K! ]

  153. % Z$ p. o7 Q* E) O: u; }3 \$ i3 Z1 P0 J
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)
    ! S* h' R& D7 f+ N
  155. {  Q, G4 ~  w0 R' d
  156.   DWORD attrib=GetFileAttributes(Target);
    " {' G/ Z% h" I. z5 E
  157.   if(attrib!=-1)
    7 c7 c: @. K' G5 ^; P
  158.   {
    8 R; f& ?* G, |. W* n) c# Z) i
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))" G# a: o) b. H; M& u. }1 k
  160.     {" V) v& x, o0 R: P; w& e
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 Q+ X5 l; M4 k! k8 ?
  162.       SetFileAttributes(Target,attrib);
    . w$ b  x' l. X, F/ j: ]. W9 ?
  163.     }* G  X5 M5 U, q$ b: J( r
  164.   }0 l2 ?/ Y% K8 v/ T4 U8 N
  165.   CopyFile(Source,Target,Erase);+ k2 k. w7 m1 i7 O. d
  166. }; i8 l" [. y9 }' t, c* ^
  167. ( q& T: I. F& f7 P
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    " Z2 h1 G% g9 R- [6 S. @$ P' A* r/ s1 i# O
  169. {
    . _& i; J$ H9 X# I' k
  170.      FILE *fp;; B6 e; q1 |. P
  171.      char  szBuffer[8192];0 r2 }% A0 Y" l% u
  172.   va_list  argptr;7 c; D$ ~' t  M/ e. C  H# l, B) C% `

  173. / f& Y2 t3 f" |6 n+ U6 x
  174.         va_start(argptr,message);
    & ~  s1 B: A6 S+ q% {0 E! R
  175.         vsprintf(szBuffer,message,argptr);' ~, {* ]( l5 C, v8 A
  176.         va_end(argptr);5 p- }' l' V& X, J# C# ?9 I
  177.   fp=fopen(FileName,"a");
    & I# O, W/ e) }& _* u
  178.   if(fp)
    3 z7 I/ T# P9 A: A  x8 E
  179.   {
    & h6 u7 y$ ^% ^$ \: ?
  180.     fprintf(fp,szBuffer);
    , H# V+ @" \# d4 }6 j
  181.     fclose(fp);
    0 Y# l. K! H8 c& _8 i
  182.           _flushall();
    ! {4 a% R! c) F) U8 ]: ]0 u# T
  183.   }% O1 L7 _* m' y0 N4 H* y
  184. }  T0 Q. J0 d- r% }/ h
  185. : d9 t* w8 x0 ]6 s; o
  186. BOOL CRevAppApp::Fclearf(char *FileName)* s$ O* ]" G8 x0 R0 a
  187. {
    & F; M4 P. J7 ?0 z, F2 n* ?
  188.      FILE *fp;
    + A" Y; g& D2 d+ g6 j
  189.     DWORD  attrib;
    5 ?% c( l6 u% f8 `
  190.   attrib=GetFileAttributes(FileName);
    6 C  E% ^8 w! P$ ^1 ]# J6 @
  191.   if(attrib!=-1)1 p. Z+ B) F  ^) l4 b
  192.   {
    3 `2 n7 p0 M8 h
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# v4 d+ |' {2 A4 {$ b4 u2 l
  194.     if(!SetFileAttributes(FileName,attrib))$ Q5 V! P7 m" p2 u- j7 R4 j( h9 I
  195.     {9 ?9 ]5 l8 z/ i& v2 |1 ]1 J, R. f
  196.       return FALSE;
    " [/ e* C" P! a' x1 _! A
  197.     }, g) S5 j. {. x6 R' T7 n$ y
  198.   }% K" [- {9 E; a  O
  199.   fp=fopen(FileName,"wb");. Y; y$ P* Z' X' o; q5 _
  200.   if(fp)
    ! c+ R0 A  e" h+ v( R2 \0 s  L9 C& s
  201.   {
    , t9 F2 R: x& _& X: P$ `3 h
  202.     fclose(fp);
    6 g" \# _3 [$ G, N( Q! X* S* D& ^
  203.   }! ^+ l! d/ ]7 W9 M* i
  204.   return TRUE;, n2 o& p% U, M& C8 t) H7 X4 x
  205. }8 F3 E& j6 m, F6 t% E
  206. % E) |' f# R/ `3 t
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    , \, a! A- e3 K0 H/ c" b* _" T
  208. {
    * l3 [& q* G- n
  209.   char filename[MAX_PATH];7 Y4 R/ J' \3 J* M$ U
  210.   LPUPDATEFILE file,olds;
    6 E% v( O  t+ i3 x% E$ M
  211.   std::map<int,CString>::iterator i;
    & ^5 [0 q2 \/ o3 l8 v
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ! J5 k& R2 c8 t. y, o. [
  213.   std::list<CString>::iterator l;
    9 P1 c! F: {& i1 R

  214. * r7 R5 P5 R8 |& ~1 D
  215.   if(bFirstUpdate)$ {6 x" Z& R6 j8 r/ C, E0 q' Z) S
  216.   {4 k/ H2 [0 H/ X/ P
  217.     dwCurrFile=0;
    # d1 M" T# w7 F7 ?9 Q- F
  218.     bFirstUpdate=FALSE;
    : i- a7 P5 p* x5 M" {5 ~% K) m8 Q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())1 P' H( t" L. [- z$ b. S5 P% ]
  220.     {6 Q% c. T. b" t4 y* k1 z
  221.       dwTotalFiles=UpdateLocal.size();  {. X! k9 D- @+ @, q& b6 Y% j
  222.       dwDownLoaded=0;
    : j( D! v1 W% d( Y* l% V
  223.       bSilentStep=FALSE;
    2 Y$ d$ Y0 E( X; X, v2 w, r# U9 v7 ]
  224.       bCompressed=TRUE;# E+ T/ h: ?+ B$ X7 w
  225.       strExtLocal.Empty();
    ' J8 _2 k6 M( o/ i9 ~  I
  226.       strFullName=(*i).second;+ X" R% c8 b4 Q8 c4 O0 P( q9 V* R
  227.       dwProgramState=AP_CONNECT;
    # p8 d0 z) B* h2 k8 z
  228.       return TRUE;
    0 y# n/ T& s$ Q" H* C! h% B: x
  229.     }, `4 _2 O4 m% [1 N
  230.   }
    ' W! z* R3 I8 W; S4 Y  h4 l3 e& R# i
  231.   else if(bRestartUpdater==FALSE)- R9 r8 [5 W: m/ Q! e  l6 D
  232.   {, Q' i  I) e% \* G% Y- h! i9 `7 r
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())/ d  c+ a2 [4 z. F' i$ k! R
  234.     {# ~6 [1 W; G2 ^( F- M% a5 S4 H
  235.       file=(*p).second;, \% y, ]7 ^. X; k  d. e" A
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    - A6 A0 O4 {" @9 [& Y+ z  l
  237.       {( o8 l: ]5 ]5 {% v6 D, f+ a# e' }
  238.         olds=(*p).second;! Z! F: X+ H( n7 n
  239.         olds->vers=file->vers;$ s, P( h8 }% }- A8 o( W
  240.       }
    6 S! Z2 m' U5 F1 a! T# \* [
  241.       else
    6 A( b8 P% D  h% S
  242.       {, Y7 K' p) k5 A7 e; J. f
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ y" a6 w  I( u: b( V& w7 `1 \, O7 J
  244.         memcpy(olds,file,sizeof(UPDATEFILE));3 t  c( G9 B8 e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));1 L+ Q, k! H; x8 ~
  246.       }
    1 v$ v3 m1 C  z- L0 |
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    # W% J! ?- H2 f4 G! W. Q
  248.       sprintf(filename,"(%s)",file->file);
    % }( C5 u( r$ F1 M  q6 o
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);( |$ J/ q4 ^; ~2 R
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    $ Z( {" t9 N8 N( ]
  251.     }3 H' s4 r/ h( D9 O
  252.     dwCurrFile++;
    " _5 }0 v9 Z$ e( s; S0 x
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    - l  _: M8 R& V' Y/ ]% a
  254.     {# N2 Q2 J% |9 t" D6 J9 `
  255.       bSilentStep=FALSE;5 ?2 f7 m! I8 \( {  y5 _" ?
  256.       bCompressed=TRUE;" C3 Y; I) ^' E* p/ Y7 M
  257.       strExtLocal.Empty();
    6 u/ B7 J# d6 F6 g: [/ V6 \
  258.       strFullName=(*i).second;
    6 P1 I+ }! n0 i/ L
  259.       dwProgramState=AP_CONNECT;& Z7 [6 {  c) C
  260.       return TRUE;
      B6 Q* V( \" z: Y7 I
  261.     }
    1 r% D) O& T& s. _/ ?- [
  262.     if(!bRestartUpdater)
    + |" Z+ i/ B) n. \4 a0 \  \  \! y
  263.     {
    * K- K4 R! A' p0 d* A+ ~, n
  264.       int iCurrSize,iFileSize;) _" g& p; ?6 i0 x
  265.       iCurrSize=0;' w# E) x; ^6 M- m& J
  266.       iFileSize=UpdateList2.size();
    , H7 u# w7 t% x. B+ P1 k$ `( A
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
      ?# P. \. k) X5 m
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");( z3 N3 n2 V( V+ l& p7 G7 N
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");1 P8 E$ r! R$ p: a3 n9 V
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 K0 j; t6 o1 s7 f" r
  271.       Fclearf(".\\update.dat");
    - c) _, M9 s9 k7 z: H/ d
  272.       Fprintf(".\\update.dat","Bloodyf\n");
      i$ T7 {: }" y  `6 W9 S! h4 e
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)* @0 |& Q9 `) @! g1 a
  274.       {& W7 ^7 t; j* ?4 z
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    3 _  @4 t- k, t& @9 l( d$ R! _' B
  276.         {
    4 J' W: R, B3 I1 N
  277.           file=(*p).second;$ A; o) c; y1 m5 B
  278.           sprintf(filename,"(%s)",file->file);2 K0 O8 t. _0 l/ y5 k. [* N; i+ M
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);: @( ~2 k) _* |" y) P9 B4 f
  280.           iCurrSize++;3 e2 e! }" r+ G, h3 m+ N
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    # p5 Q# \3 q" O: O4 S; A, y
  282.         }
    : Z# L& V9 a0 H- ~  Y# g  o, m
  283.       }
    ; L8 s& j* P5 g0 {+ u8 W- ~
  284.       unlink(".\\update.txt");
    . @+ c0 {- R2 S; s- E
  285.       unlink(".\\update.tmp");
    - Y* a( Q8 h, h! L+ t6 Z5 u# J2 ?/ r; G# C
  286.       Fclearf(".\\checkversion.dat");, ^( Y+ i! v+ T- Y
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);" L7 U9 J' E$ [" |& w
  288.       if(UpdateLocal.size())3 b  e1 E+ l8 L$ l6 i- B. R
  289.       {
    ; R( O8 |9 T4 G! {* f6 Z7 N
  290.         UpdateLocal.clear();
    # c- M! p2 `& Q* l' g
  291.       }+ M( `  z" q, o, n
  292.       if(UpdateFile3.size())
      X, S! }# }* v' U$ p* D+ R4 L  b
  293.       {6 j& P/ K  l8 o3 ~5 b. }
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    : k; I& N2 g6 V& a8 p
  295.         {
    1 f  O+ w/ `' V8 q) u& v! G
  296.           file=(*p).second;3 U- |4 u+ Q, w: G" @- L, [
  297.           free(file);" }9 S; y! |. b1 n5 m1 [
  298.         }3 k! F' f* J( l0 V  n3 I- r
  299.         UpdateFile3.clear();. D% K2 r% D( F: W3 n
  300.         UpdateList3.clear();$ I9 C; y7 i: O+ k$ C, G1 E1 \
  301.       }
    2 n& [8 X0 F' b2 W
  302.       if(UpdateFile2.size())
    3 L  R6 H, \: V  E! f6 Z, T8 c
  303.       {
    3 D4 A  |+ w8 N( ?+ [. o2 B& [4 ~
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)% Y6 Z$ C7 S/ k5 n4 m% q4 j2 D; ~* D
  305.         {
    ' T: @/ L) C" Y1 E
  306.           file=(*p).second;! q" V, k5 D4 L0 _- o9 c4 |
  307.           free(file);3 P4 @/ Q1 H2 h  a# X& t
  308.         }0 E' X9 L4 k& S
  309.         UpdateFile2.clear();
    & Y" I5 b) b8 r* d) F3 Q9 ~
  310.         UpdateList2.clear();
    + ]3 `! Y0 X: \; k5 }8 ]7 ]
  311.       }$ o' e4 D# w! l4 X, a- A4 V
  312.       if(UpdateFile1.size())
    # i# b& ^! p, _- v
  313.       {) W' \4 X2 `9 }: @3 P/ Q8 t* _
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    : Q5 h3 p! c8 r; C. L! y0 y1 e
  315.         {
    3 D/ {- j) W/ C- b; c
  316.           file=(*p).second;% k$ r& t3 C: j5 W6 [
  317.           free(file);
    / x# |, S, X  C8 O/ @
  318.         }& q+ M- ^3 d1 g& G- Z' u
  319.         UpdateFile1.clear();
    6 i4 n0 S0 T, L5 C' b) I4 X
  320.         UpdateList1.clear();
    % z, p" V5 l+ U- H
  321.       }
    * |' C$ B' \) Y  v- B& k9 H
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 v5 h6 q+ D4 i2 {
  323.     }
    ; {, v7 R1 [! y( u
  324.   }& ?* O; I; l! X! s+ k
  325.   return FALSE;; F0 z; @; |# a
  326. }- q- d- J7 X* a( R
  327. 3 S; g1 E/ ?) @2 Q0 C% l
  328. void CRevAppApp::ClearAll(void)0 K4 U& u9 E( p, u: G/ m  Q0 @
  329. {+ H3 Y& _2 c& O( @, k+ n
  330.   LPUPDATEFILE file;4 I: `$ {' C8 c0 ]
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 I2 E8 I$ b/ z, M9 A

  332. 0 t$ W( z  J7 J; M! w. v; P
  333.   if(UpdateLocal.size())
    1 F  o3 K9 W" \4 s. X$ \+ {+ B( F
  334.   {
    2 O) G  G1 A9 H2 C+ @
  335.     UpdateLocal.clear();/ a9 j, \$ n2 ^  L
  336.   }8 m# C9 H* X2 x2 p
  337.   if(UpdateFile3.size())' v0 Z" F+ H% O1 L: O4 ]% E1 G$ v6 N$ t
  338.   {8 E: G6 G- Q9 C! q* t1 q7 o7 d/ E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)2 J, V6 ~5 T: q* L7 m/ s; }
  340.     {& T7 e8 J; C1 b) W1 ^  j6 {7 A- c3 D
  341.       file=(*p).second;
    5 r9 |6 {  J& d6 F
  342.       free(file);+ l' v6 X6 q/ r4 @  l+ G# a* D1 ?
  343.     }
    . z  M& P  o  a# R; v3 f
  344.     UpdateFile3.clear();
      o; m0 u8 M% V2 V# ?
  345.     UpdateList3.clear();5 v* H0 \" t- ^: l) X# l, t
  346.   }+ d. J# f' g% a& a
  347.   if(UpdateFile2.size())
      e$ ]) ?; e/ T. s1 ^8 q' c
  348.   {
    0 E: Y+ g" ^2 {, y' d3 n9 o
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++); T& v& @4 G! i
  350.     {
    ; A% r$ P; Q5 Q) n6 |" r7 u
  351.       file=(*p).second;( S+ G" F7 O3 o0 I  P- ?  w
  352.       free(file);8 K5 A- c( L8 E& F
  353.     }7 y! z+ L. y& L/ r
  354.     UpdateFile2.clear();" C1 Q# B! P8 ~' d5 d( l/ y
  355.     UpdateList2.clear();
      E6 W$ z7 T  v! X9 n, w
  356.   }
    5 h: L" m% L5 n$ A+ o
  357.   if(UpdateFile1.size()): d( J8 z9 f1 ~  A3 @4 R
  358.   {
    # ^$ S) Q% n! Y- [6 w& k
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 ~* s# C: m6 z6 ?1 p3 j
  360.     {
    . b% r! V3 ^; u% G; X& U2 T" Y
  361.       file=(*p).second;
    9 ]' x: V, i, O' |- l% n* z! ]
  362.       free(file);
    9 _5 T# ^) S0 F1 S* J* X& q
  363.     }$ N) Q" l, \  f* H7 m" L
  364.     UpdateFile1.clear();1 k6 E6 k9 l- [9 P# D- h- T
  365.     UpdateList1.clear();
    ) S: ]" k. ^. o$ C/ e1 R( b& J
  366.   }5 G$ U( L, C( d) [
  367. }  
    5 v4 b& K# q/ e$ B0 f* P6 U  Y% Z
  368.   4 ?; H3 P) g+ t% D
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    6 @$ B7 K9 b9 Q
  370. {- m/ }/ l, L  @" @/ t5 g
  371.   int c;* O, m' }6 {3 F
  372.   LPUPDATEFILE file1,file2;
    ' {1 G) r$ M1 I6 j7 k% C
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;% l2 X! @4 {* W" V; p
  374.   std::list<CString>::iterator l;9 C4 ]: k1 c# s. z' M  I
  375. . x( k% b  h" e7 l0 R
  376.   UpdateLocal.clear();
      \& B/ Y$ n" L! c8 V1 v. e
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    5 }; m! t% r3 Z
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    2 v3 R4 q9 o0 P
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);5 a+ l- ~7 N" u# h- w
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);$ ?+ `, g& U. x$ E9 Z
  381.   if(UpdateFile3.size())$ v6 t5 t, b. t/ M5 C7 }
  382.   {0 }0 x' t$ E9 ?0 u) C3 K
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 ~/ _& w- T! R( Y+ T4 O- r
  384.     {# F" M8 [9 [6 [6 ]. x
  385.       file2=(LPUPDATEFILE)(*i).second;
    8 H& f  J2 ]' z6 ?/ x; S' m
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
      A/ o/ l) d- l
  387.       {
    6 u9 C& n* U1 O/ _/ o% H
  388.         file1=(LPUPDATEFILE)(*p).second;* W4 {; Y; ^8 L1 J7 E
  389.         file1->vers=file2->vers;+ N) e, `) f# u: |; U
  390.       }
    + e1 q2 {$ f" i* d
  391.       else
    + f4 V4 @; c5 z0 H1 c. b/ W, Z
  392.       {8 F. r  n4 |. \: m1 m0 j
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    " g1 ?2 t& L; Q% B) U7 W
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    + ?+ O/ d0 S9 O# n9 c
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));, N. P+ D7 l' _, E
  396.       }% I% _0 j6 B- s: z% A
  397.     }( d- f9 J2 W% L5 X
  398.   }8 W% q' ^- s' Y* g& Z0 b
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): e0 O9 N; r1 \+ n  m! p
  400.   {  v3 }+ b: R8 j" e7 P& t
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())7 m. L4 `- b! t4 u/ O" H
  402.     {
    & d  B1 g9 t8 H( ^% {. L
  403.       file2=(LPUPDATEFILE)(*i).second;: `6 [7 R) L" O% Q; V' F6 j+ C
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())' _9 S5 F" K, c/ e9 L7 z% m/ @/ T
  405.       {
    9 v/ O( e# P* U6 o( A- ~5 K+ @
  406.         file1=(LPUPDATEFILE)(*p).second;' V3 D- l$ d7 Q
  407.         if(file1->vers!=file2->vers)
    ) }" O. Q  _/ E. ^  E$ m
  408.         {- L* u1 y; B' Y$ j- e+ d5 z. O
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    1 s( l, @3 h& ]% J) A& ^& E
  410.           c++;
    ' v( b7 Z# P7 S# c
  411.         }
    % T6 o) d, P8 K- _6 q4 U
  412.       }
    / P( Y- G; s( A# u; u4 f9 H) J
  413.       else0 W8 @: p" M! Z. s/ v! x
  414.       {7 Y7 }" L  c" W" T' W
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));$ N$ n$ t" x0 o* Z) U" t
  416.         c++;* t8 K; G  q0 P2 |9 s
  417.       }( t, O& u5 k2 I$ V2 h. {
  418.     }( @* w3 n$ }6 v- n* n- u! z$ Y
  419.   }
    / i& G7 ]5 D; s. ~$ ?
  420.   unlink(".\\DownLoad\\update.txt");
      t, j' P7 P' d! H
  421.   if(UpdateLocal.size()) return TRUE;
    ' D' v5 A1 {  f$ ^
  422.   else                   return FALSE;
    ! H& r9 f% d2 p, `
  423. }/ i  f7 m: T, s# r1 H6 [8 w: G

  424.   b1 ^' W: X; B+ _
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / F' K) \2 P, ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    $ B& s& r8 |$ ~- }5 E
  427. 9 Y. C$ o- h9 L1 W7 [

  428. 6 R) a, u& h. a4 Q9 ]: c' K5 e

  429. 1 I8 j1 S) c. t+ j% n, V1 Z& `
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ( j0 @6 m+ C. h+ G7 P1 c; F
  431. {
    ! S; `/ F0 i8 Q
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;4 b* b: ^* o3 s
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % l5 c3 o1 ?' I5 C* B
  434.   {6 s) w% U: n4 @7 y4 G' ]
  435.     char szLanguage[50];
    $ d$ R( T$ a7 q
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    % g; ~# o$ R" i- G# u- Y7 f  A
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;/ W4 U1 ?1 X. W# @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 P7 K! {9 P# s) u( k: t$ O8 _
  439.     else                                   m_iLanguage=ENGLISH;8 m' {6 F; E1 N# D
  440.     char szRegister[100];7 U: z- z8 J7 D, ^. K
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 c$ `2 S% K; E
  442.     strRegsName=szRegister;
    ' W# i& O1 q. U5 c
  443.     char szPatchURL[100];
      o& i! v; ?$ j
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");3 ?! b% k1 `& P
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    / A0 \  Z  Q" Y: X; T6 _5 Z  J
  446.   }5 v/ X7 _: _" g0 s, B9 h
  447.   else
    ) q! K+ _" |) j! y% s# N
  448.   {
    7 ?# p8 e) T+ w3 r- z6 I
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);) M, {/ B& g7 p8 q. T: Z
  450.     strRegsName=DEFAULT_REG_URL;
    8 B0 U6 K) }/ Y  g* @
  451.   }
    0 r8 [6 v, `/ z7 `
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    0 l/ s1 U1 e) |0 u
  453.   {
    ' @2 a8 _, Y3 r1 x. L3 ^) w! f4 |
  454.     char szIP[50];
    9 H$ S, }0 m# k6 |5 {0 d+ H
  455.     char szDIR[300];
    6 F$ z; M9 X" y; G8 c  e
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ) b. h9 R+ f6 e+ @9 f
  457.     {
    3 l! ]5 b: _! |( ]. i* j9 _
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");; f2 ~: Z+ O1 L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    ; C0 [" D# t' E/ r
  460.       strHostName=szIP;
    8 ]! M( U4 C' ^. g7 R; P8 k8 r
  461.       strHostPath.Format("/%s",szDIR);4 ~) p# ~# M) A( X  b& X
  462.     }0 N4 f4 N) U6 j$ `0 w0 w* P. a
  463.     else9 k, K( Q, k; p' k+ }5 _4 M% u
  464.     {% Z$ H! ]+ i" D' b, G3 ~( t: L- o
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 e+ k5 A4 o$ i, K
  466.       {
      d! w  Q0 {9 \" v, T( ?/ d% V7 `
  467.         char szLanguage[50];; x7 B5 \- a9 E& c0 J. w
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");7 M( U& C' q+ H% [+ X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;4 _- E1 p+ O; B
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # i1 j7 X, q* r( I
  471.         else                                   m_iLanguage=ENGLISH;
    ( j' O# |) M, ^- ^2 U3 a( z3 f
  472.         char szRegister[100];7 [* C+ n2 P. k1 L# Z
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");7 H2 L9 k0 }, H9 Y( q
  474.         strRegsName=szRegister;4 K/ X' |3 O# h( \
  475.         char szPatchURL[100];. I" P# K# ?& i( y6 E8 h
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");9 _2 w0 j# d% H' @( t2 M7 J
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    % V0 w" D% B# e9 T  b
  478.       }# T$ ]5 ^* [% g# o  b
  479.       else
    1 }8 w2 A% e) I% o1 E
  480.       {
      g# L3 h( V& J/ F& `7 ^
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 b$ A+ `4 L, t$ D# U) g. a
  482.         strRegsName=DEFAULT_REG_URL;& _1 `6 D0 Z/ M2 K3 M; l
  483.       }4 I( J6 f5 A4 E" Y, |4 M3 y4 u
  484.     }$ X" b  B$ G; k% D: d/ w  r: v
  485.   }
    6 `" t& p" S* B5 w' W
  486.   return true;
    + S# i& L, v( p* b0 X# G, I% t
  487. }5 ^% D* ?/ n1 T
  488. 4 ~& v3 S: J- O3 f0 G, R
  489. #include ".\ZLib\unzip.h"- z/ {5 a7 _- |  Q3 W& K9 Q# a
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    $ b6 Z; O- \3 e  H, q# l% h
  491. /////////////////////////////////////////////////////////////////////////////
    # q+ I* F) V  B9 h8 r
  492. // CRevAppApp initialization
    / R! p9 C! C1 ~
  493. 5 n: `+ F4 j* x) U$ \3 `% p6 B
  494. BOOL CRevAppApp::InitInstance()
    / v* D5 ]$ r2 C7 F2 Y$ n
  495. {
    , H! |* c# i0 e/ s& `
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    * a6 w3 h# C1 W6 ?# M0 _6 ?' C
  497. 2 t! X( R" {) a& P5 v
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ! Z* ~9 F2 b; d/ r, n$ ], f
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))# u" L) C* K" _5 I+ t& K% H$ w: V% ~
  500.   {0 i, k0 a1 h- H- Y% k8 _
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 W; S6 ?5 Y1 T  D% c; t1 G
  502.     GetPathFromFullPath(szPathTarget,szPathSource);( h6 G# \  }) h: _. Z/ [/ O
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))/ p. n. W# O4 i4 q- ], t% q9 o5 A
  504.     {% r' e  [, R3 w
  505.       strcpy(szPath,szPathTarget);
    . Y; ~" M. d  R& t: \$ P
  506.       SetCurrentDirectory(szPath);  j) S  h1 V8 D0 `! h: y4 A4 E
  507.     }$ U4 @3 K1 }  N; \  u9 r
  508.   }( D1 m! O4 r# r- E; o( \
  509. #ifdef _DEBUG
    * k3 c* ~" H: [0 o9 D
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    " S) ]- T4 U$ L6 c0 I4 G& P
  511. #else$ X6 f% O" h7 p5 G8 X! G" D
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    5 m1 x: f% T, z0 c4 n. D2 T  f
  513. #endif
    , A0 B+ e6 }. `7 _+ d( u
  514.   {
    % }0 S* v" j- `& I
  515.     char tempFileName[MAX_PATH];
    4 p9 F/ r( w0 A0 I( a- V
  516.     strcpy(tempFileName,szPathSource);: y- a4 x; `9 L9 ^
  517.     tempFileName[strlen(szPathSource)-12]=0;
    ! M7 J- i2 Y  J% S  a" p
  518.     strcat(tempFileName,"\\$CSUpdate.exe");4 C' I* z$ w! @& y+ g' M
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);% V- D3 P- C! t. N, Y; S# X
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% j7 a5 J8 k) s- d9 T9 @) E" u
  521.     return TRUE;9 V' r4 Y& Z) w& `# Q
  522.   }( m# L( l6 u+ r( b
  523.   // Nuke 0118: Delete run.exe
    ) L/ g) N( z; w1 y/ d4 s3 C" P3 T
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    2 X7 E/ h  @$ F4 M/ U/ I1 L
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");% [( x7 y% q9 n* W) i
  526.   if(!ReadCfgFile("Config.ini"))
    9 H. I$ j' L1 X/ f7 d" c
  527.   {
    1 [+ I7 R: `: q+ U+ W
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    / \1 K) R2 C' E( y# s% X
  529.     return TRUE;2 {/ m: v' U1 g
  530.   }! v+ m, n2 R% B5 G& C/ O" Q" s" d$ Q0 n
  531.   HANDLE mutex;
    2 s; o0 }/ G2 L
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    9 g/ f( J3 F  i) [! T* P6 ]
  533.   {2 u! Y% `1 x2 \2 A4 R; ?
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    - t  u6 ^% W- x$ M% _3 s+ _
  535.     {
    1 [+ L7 n$ z# s. }+ h2 S" s
  536.       CloseHandle(mutex);5 ~$ I" V. R1 S
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);0 r* e% Q+ k# M2 A! g8 z
  538.       return TRUE;
    7 x  b/ Y: J. D8 ?! h
  539.     }8 ~: U/ f( ^- Q/ ^9 G) _; F
  540.   }  
    & `2 v4 G/ n- ^' Q- `( O1 g7 H) r
  541.   CloseHandle(mutex);! X9 X( b' I  _( D- J

  542. 4 A7 e, X% V4 L+ V( D% S2 T1 t
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);$ j. j( q6 x+ p4 M
  544. + {: T% O% I/ ?) q+ b4 Q( z2 ~
  545.         AfxEnableControlContainer();
    2 N  F+ ]. P6 f& k) J
  546. ' K6 G( g3 E0 b
  547.   bCanUpdate=FALSE;
    2 E1 G$ U8 q4 P2 c
  548.   dwStartUpSteps=1;2 Y3 ~- ^. c$ F( J6 A: `
  549.   dwProgramState=AP_NOTHING;
    ; I, Q" h! y* S/ d. }
  550. - E+ ~- M! f; b1 ^$ M, D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    & t/ W: ?$ j! p/ m- B

  552. 4 {# l" x/ v6 u, b3 Z" M
  553.         // Standard initialization& {* ?; L, v# H  T4 z
  554.         // If you are not using these features and wish to reduce the size; _* R2 i0 p. u( j% x5 N4 O/ K
  555.         //  of your final executable, you should remove from the following
    : g* j1 e+ L( o9 U( l9 _& j4 a8 ]% E2 D1 g
  556.         //  the specific initialization routines you do not need.
    " S. h- {  S/ z5 X7 ]: J3 b# T; }8 S

  557. 2 |) H5 T% |( e3 e3 M2 A: i
  558. #ifdef _AFXDLL# u5 P6 T' l" m" q4 Z. ~4 p
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ) w+ e! z4 F; h; y8 H! Q: q
  560. #else  r% G+ k: c! I. p$ v+ f; s3 Q
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically# H( E3 D: p5 _+ i' ]- q
  562. #endif
    + G. F, h) U/ j6 O/ k. A
  563. 1 ?4 o( P3 ^; H. L- f; N1 k4 N! \
  564.   dlg=new CRevAppDlg;% q8 r6 D% ^8 K, C+ T! L- z
  565.   dlg->Create(IDD_REVAPP_DIALOG);- J4 {6 y6 J* C& V/ D
  566.   dlg->ShowWindow(SW_SHOWNORMAL);3 o; g, g- V* L
  567.   m_pMainWnd=dlg;
    6 ^, h) c3 I; A# ?2 d9 U3 r
  568. : P) s; U7 p: C! {# |4 F" D
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);) g, X; }$ l: S- Z" f. b7 G4 P* m

  570. . i; P+ N1 x5 v$ S2 C9 R. A1 p
  571. //  GdiplusStartupInput gdiplusStartupInput;
    & b4 q& c! S8 x
  572. //  ULONG_PTR gdiplusToken;1 c$ u2 {! a  x; B4 B
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    , z7 I; L( O5 P% \8 m# Y

  574. - H$ P$ [# g8 i) R  J, W8 g& ?
  575. //        CRevAppDlg dlg;
    9 A7 N2 Z, k9 v9 ^! E6 w$ C" |
  576. //        int nResponse = dlg.DoModal();- B) [5 J$ m8 A, \! ]) z9 r; @# Z
  577. //        if (nResponse == IDOK)- R7 S7 B, o, }% ?" m
  578. //        {( B/ N2 u: O/ S% |
  579. //                // TODO: Place code here to handle when the dialog is3 T8 t1 Z- f6 A# C
  580. //                //  dismissed with OK
    0 {; D! ]2 v# ~3 Y( d3 B& k4 O
  581. //        }6 B7 n, w5 ^" B8 [/ v" ~, w
  582. //        else if (nResponse == IDCANCEL)  A  ~! N6 a$ x
  583. //        {( s: W' Q3 l5 s! P8 B3 ?9 |9 ~5 i3 X
  584. //                // TODO: Place code here to handle when the dialog is- c- ^; X3 U( n, B8 h" n
  585. //                //  dismissed with Cancel2 T1 E% `$ }6 M  {9 M
  586. //        }4 U( Q8 y- q% R

  587. ' v- ^7 k! p8 ]0 f
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    $ _7 v9 |' }) H
  589.         //  application, rather than start the application's message pump.
    6 ^  ], ?; Y6 Y
  590.         return TRUE;! K: K  P/ |" _; \
  591. }) S5 h% h+ a+ V2 B4 `: E8 I

  592. % {8 G6 \* I' n3 O# F3 Z' f# {' x
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    $ q5 A+ t7 W" e/ p9 H4 e
  594. {
    ( E) ~: T) z+ |. T5 K
  595.   int i;
    ' z; R; H* e, S' s( X* ]
  596.   char *szRet;2 u$ }1 M% _" \% G' p1 L! @

  597. ' ~4 i( d  b( u  i- c, A; O& e
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    : T; {2 N4 C2 U- _# n
  599.   if(sztoken)5 k( v1 C0 j: n- M& ]
  600.   {
    / Z7 q. B1 ]2 C0 B5 U2 z+ ~
  601.     szRet=&sztoken[itoken];
    & k" ~9 r8 J& l3 K) \/ k
  602.     while(sztoken[itoken])
    ( N6 q7 L7 T6 ]% K0 j
  603.     {
    ! J; ?7 R. Q* u# S0 Y0 G% G
  604.       for(i=0;i<(int)strlen(token);i++)2 P1 c" i+ r  A1 P( H! [3 P, O
  605.       {
    ( ^$ s. v1 @( u8 S7 X% M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])7 A) V0 ]! B/ I
  607.         {+ [" `! n) l- w* j% h# q
  608.           sztoken[itoken++]=0;
    . j$ _. M3 H- K8 e. |$ `. F) v! d) o& R
  609.           sztoken[itoken++]=0;
    " k7 ?3 R$ Q: `( \  \. s
  610.           return szRet;7 s8 A1 ~) |% w  C
  611.         }
    ! i& j& {) z: Z( N' [
  612.       }
    ; x2 [' ^7 P6 v% ^0 I4 s% k* O: I" b
  613.       itoken++;
    ; T3 N& ]( \5 ^
  614.     }
    ; m9 |: w' N# g8 X
  615.   }& I8 w2 [  {! z! n$ m
  616.   return NULL;& t' T3 X6 Z1 b7 \
  617. }+ n  b+ {, Z, ?9 I. J! `0 M+ V
  618. + e1 Q4 u& E) A& |# T- @7 q) {4 L! P
  619. void ProcessProc(long Total,long Current)
    / w, e" d1 e. R% c/ h2 A& O' d
  620. {
    7 u2 b0 m% X% [3 d
  621.         MSG msg;$ c9 M& z& [- a' p& K( l
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);& v6 Y1 ]2 I" B! I/ q
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));; M: J! \: c# Y1 ^4 o4 |9 C2 _  d
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))* e9 H$ N; M; T/ G* [
  625.         {
    3 D" z1 y& m5 A8 R/ ?
  626.                 if(!GetMessage(&msg,NULL,0,0))2 P9 ?: p) h, H3 v7 Y
  627.                 {* o* C6 i: [: \4 M
  628.                         return;& z- N/ S1 U+ m! a, }. Q
  629.                 }
    9 G% p# u8 E4 V8 u0 ~" B
  630.                 TranslateMessage(&msg);  `( r/ B9 p1 A4 y' B8 l* z1 ?9 g
  631.                 DispatchMessage(&msg);
    / E" m: F2 ?3 m" c3 e# X# ]( Y& e
  632.         }       
    ( A: [+ N$ G9 c- O4 B% H3 c& R
  633. }; N( [$ y6 m0 w4 A$ L3 ~

  634.   L0 x  X  I$ N' s/ `/ L$ d- B. W
  635. BOOL bFirstChar=TRUE;* D+ Z# h" @7 q% p: A

  636. 1 p: |0 h* z, Q9 Z- M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)$ q" I1 H- h* X
  638. {+ a* f3 x* U, {
  639.         // TODO: Add your specialized code here and/or call the base class8 f( o: K  ?6 }! h3 G
  640.   switch(dwProgramState)
    $ @8 s! I' I& y) T- |$ Y
  641.   {
    8 u2 d) v' ?% T
  642.   case AP_NOTHING:
    % q' I6 G' h4 q8 u
  643.     switch(dwStartUpSteps)# C* L8 q0 P! X. o
  644.     {
    ) q$ g9 _, c: K& @
  645.     case 1:9 }( j' q9 a+ ?+ C5 g& d
  646.       {
    " }6 {6 M% v: B4 Z
  647.         int i;
    8 E: y, f: W6 {" E% F6 Y/ k% W
  648.         CDC *pCDC=dlg->GetDC();+ _0 J7 [1 \. a" I
  649.         HDC hdcwnd=pCDC->m_hDC;! T. ]8 I! B  r
  650. //        Graphics graphics(hdcwnd);
    5 M: e, V# o. P& J3 ~
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ! `8 i9 @. K4 S; F. ]
  652. //        INT iWidth=bitmap.GetWidth();& Y  L3 O7 ^4 a$ v( I; r
  653. //        INT iHeight=bitmap.GetHeight();7 q: S" h  o1 ]2 C) S0 m
  654. //        Color color,colorTemp;/ k2 [. j' v0 q+ D
  655. //        for(INT iRow=0;iRow<iHeight;iRow++), m/ V" Y9 `/ A* g' U
  656. //        {* Z. H% v; \' w+ h2 _2 S* i" }
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    0 Q: P. F- f, H* T' f
  658. //          {6 L3 y9 H* N; u; [, \
  659. //            bitmap.GetPixel(iColumn,iRow,&color);( M  F, g5 d" x' A# X4 a6 y
  660. //            colorTemp.SetValue(color.MakeARGB(
    . L+ f) T% {* M# t6 l; r
  661. //              (BYTE)(255*iColumn/iWidth),
    1 u- ^/ ~: i2 r- K9 w6 x
  662. //              color.GetRed(),' ?% v1 v2 B( F& R: ~3 b
  663. //              color.GetGreen(),
    1 s" A* q/ u8 q6 i: Q2 }. H
  664. //              color.GetBlue()));
    0 x  J$ i" B" i0 W
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);' P3 o2 L' M0 ^9 L. r  w
  666. //          }" E. j! f& Q: ~5 x. O6 Z$ i
  667. //        }  Z8 s7 f2 ?: p9 F; w
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);$ L  i" w9 G; t& w
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    - \% u& n' d* f1 I1 l+ U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 A4 T, A* {% ]+ U8 B
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ) L4 E3 \6 K* n# k" E1 R
  672.         for(i=0;i<240;i+=8)
    ) G8 M' H( {! o  D0 d
  673.         {
    / x. E/ _: h& Y! U3 Q2 Q" R
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 K; x! v7 Y4 w0 M
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    / G: ?* H. b9 E5 {& z
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . ]6 K9 u" w7 R# y# f" M8 d
  677.           Sleep(33);/ M' l; K! e9 y0 g2 z" |0 a
  678.         }, J; n( K2 a  d8 E
  679.         Sleep(1000);0 V5 H* }' _$ i; @- q  m" y# r
  680.         for(i=240;i>0;i-=8)
    . ], n- _3 J9 s$ i' x
  681.         {
    6 |- @/ W3 w1 T( E
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    & ^) s. A4 T  L8 `4 v4 }
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    * ?  x! b1 ~) v, u! S. e
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);" }. ^* Y$ T2 ], }6 |$ s
  685.           Sleep(33);" F7 |2 s& h( B$ [" s' l: }9 F
  686.         }
    ) R1 U, S3 S. S4 V
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);; s5 u4 W- |1 y" x: @
  688.         dlg->ReleaseDC(pCDC);
    $ h' t9 ~. e  J& b& w
  689.         DeleteDC(hdctar);
    0 G; F- |; o: B
  690.         DeleteDC(hdcsrc);
    3 I/ G3 t" F8 j9 y  T
  691.         DeleteDC(hdcorg);/ w$ W# z% d1 Y- b0 f! P
  692.       }
    / Y0 {! Z- A  A' r  `  i0 g
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    9 [4 O+ I" e+ s* U$ L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    ' p2 B) [9 A9 }& |
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    & W4 o+ o6 h! b5 W9 x1 s! N9 b& \2 k
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    * ]7 M$ }/ C1 [# t# q* a( I6 `6 a
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 W- t  T+ K7 F/ V  _
  698.       if(!Dn.Connected()); o: I" R+ \& y& ^7 ?5 s8 M
  699.       {! o. }4 h( x# _! o- `. j- L, R5 a1 s
  700.         dwTotalFiles=1;8 J% l' n7 _2 \* x  g: E* ^
  701.         dwDownLoaded=0;- J4 U' j( }+ H9 U
  702.         bSilentStep=TRUE;
    ! S, I! _& y  e
  703.         bCompressed=FALSE;! O& U# O5 s1 H" U
  704.         strExtLocal.Empty();0 W" u* e8 z9 _  f/ ]
  705.         strFullName="readme.txt";
    3 h; p) U1 d- q1 S. P
  706.         dwProgramState=AP_CONNECT;# x6 K: n/ A0 w* h4 }1 }
  707.       }
    1 m/ z& c) v* t: h1 N
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    1 G# O( j. P+ T$ e9 j  T5 f
  709.       dwStartUpSteps=2;) n( {- z. @5 p( H
  710.       break;
    ! A  s1 }; ~) X8 B# w% I. C
  711.     case 2:# h+ j: w+ s8 I- w/ Z+ R+ ~1 Z
  712.       {
    . `$ {& W9 ?5 \& `/ {, h$ m
  713.         int iEOF;& F; m: h% z  k; I
  714.         FILE *fp;
    : X+ L8 [1 ^) L, p# R( ^5 X
  715.         char szString[512];3 N  W$ x3 J+ r) R/ d- {) @
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");7 d- G$ G% _1 n5 ]" E4 R$ |
  717.         if(fp). W/ G. ?) p1 g
  718.         {
      D1 T) H* }' W9 _8 d: E5 {
  719.           do. n: h3 w8 U. A% s$ h
  720.           {: k3 a- u& _: K) G" E# H
  721.             iEOF=fscanf(fp,"%s",szString);
    0 i+ @- I+ \" g9 t% o# W, Q! X) q, H
  722.             if(strlen(szString))7 m" y; g! L0 f; Y* q
  723.             {% I4 D5 w( q- e# S( c
  724.               if(bFirstChar)
    % f7 H. Q5 c+ p5 ~
  725.               {
    7 R& I2 O% Z# a7 r5 L1 R
  726.                 bFirstChar=FALSE;. O; c( G0 M: y' E& Z" \7 D
  727.                 bConnectIsBig5=FALSE;
      J$ C9 ?2 s2 U
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    ( z1 C) {/ r/ p' p5 x/ v4 n3 t
  729.               }4 n4 F9 J' H  }$ n
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));; w9 K5 r( ?2 n: z3 d
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));6 C! |; ~. h# T) V2 q
  732.               dlg->m_ListText.AddString(szString);# u) [! O0 d3 U& ^$ T
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 Z9 d2 j" W* X& p4 b9 o1 `5 j% z
  734.               *szString=0;7 }2 }5 f2 H+ g- c! r2 [4 N
  735.             }
    4 f! i6 r- p$ w* m  N4 X) b
  736.           } while(iEOF!=EOF);
    & G5 K2 J; U% P! g" H8 h) [0 C
  737.           fclose(fp);/ y6 W" q: D4 _
  738.           unlink(".\\DownLoad\\readme.txt");
    , G! p0 t/ l6 ?
  739.           dwStartUpSteps=3;% B; f9 l' S! X, v( U0 i! f' S% c: H2 r% C
  740.         }- ^5 z' k) k! @# ^
  741.       }6 d% i  x; x. J# [# }. J$ K5 R
  742.       break;! F1 K+ @; ~1 Z9 J
  743.     case 3:/ d9 G/ `/ G3 C9 H& @  G
  744.       if(!Dn.Connected())* G: u- O& D  U! z  r! d6 T/ E+ W! F9 o
  745.       {
    4 R; S3 W9 I9 r2 N5 r
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    6 g5 N+ n% y) Y# V0 v
  747.         dwTotalFiles=1;& g2 m/ _6 _& k5 V9 B+ q
  748.         dwDownLoaded=0;
    8 y7 _& `) ]9 r( A( K8 W- D
  749.         bSilentStep=TRUE;
    9 a. C; K* D8 ~2 U6 l
  750.         bCompressed=FALSE;, \; T; _- U# i7 u
  751.         strExtLocal.Empty();$ _7 s3 q" g( R: I/ ~
  752.         strFullName="checkversion.txt";( `2 [: y7 N2 U/ Q
  753.         dwProgramState=AP_CONNECT;
    & J/ |- q5 d* g1 x7 C- V  h) F
  754.       }' U1 o+ ~3 w0 a
  755.       dwStartUpSteps=4;9 m1 s5 g+ X' f8 i3 R5 j
  756.       break;3 I/ U( P* W  Q6 P3 a% y
  757.     case 4:7 k* v  j3 P4 Z) e4 J
  758.       {6 t0 Q" z% z8 q: I
  759.         FILE *fp;; o( T$ r! h# c+ J
  760.         char szString1[128];$ K2 d( K6 o/ {8 T
  761.         char szString2[128];6 W4 X. X. ^" O- o( W) X
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ g0 _' X% V! T4 M% z; c* l
  763.         if(fp)
    1 _1 z' x2 w# F! U  \1 i+ Q: M; c
  764.         {) o, I) u; h! A
  765.           fscanf(fp,"%s",szString1);
    $ a6 Y8 g/ R( J$ q) _5 m5 v3 I( i
  766.           fclose(fp);; `$ l& f: z9 o; p
  767.           fCheckVersion=atof(szString1);
    ! }7 E3 g2 \% g! {( q2 H
  768.           fp=fopen(".\\checkversion.dat","r");& O8 \4 M1 b8 G6 |7 ~. F. I
  769.           if(fp)) b* t/ p3 O7 G" t( Z
  770.           {8 R  I0 g  k* h* O0 _" c
  771.             fscanf(fp,"%s",szString2);$ h: G9 P& j& X6 _7 C, G" e
  772.             fclose(fp);
    & k* B6 n0 l5 _+ v- ^  O- w$ N
  773.             if(atof(szString1)!=atof(szString2))  b& K# d0 R1 ^- W8 m" f
  774.             {
    : {% N8 o/ S: D% j! r5 c4 t* d3 `9 a
  775.               if(!Dn.Connected())9 c- {/ u: y! h2 [' ~. T
  776.               {
    3 Z, _0 `1 g; _" i  k
  777.                 bFirstUpdate=TRUE;
    * R: l# E: q8 O' r8 T" u; ?
  778.                 dwTotalFiles=1;; N2 a( a2 h: u; G+ ]
  779.                 dwDownLoaded=0;
    " i) x7 \0 Y8 G& l, [
  780.                 bSilentStep=FALSE;1 m4 f7 B+ a! i4 f
  781.                 bCompressed=TRUE;
    6 O9 j. O/ `6 N
  782.                 strExtLocal=".\\DownLoad\";
    ' k4 ?$ Z. F5 _/ T3 s8 {2 |$ o0 S: x
  783.                 strFullName="update.txt";
    $ c1 [/ L1 [) Z0 J4 h4 O+ @4 x! f
  784.                 dwProgramState=AP_CONNECT;4 _1 \5 `4 [/ x! ?' ?* d
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    3 M' r0 l; V9 K: ?7 Q' v$ z9 j1 Y) ]7 v
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");4 ~7 B; g$ z/ N' S
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");0 H3 w: B! ~8 C% R# }' A
  788. - a) z/ a+ Z3 l2 V' M+ Z
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  ~) I- P" C; V+ X- Z7 j# p6 a
  790.                 unlink(".\\DownLoad\\checkversion.txt");$ S8 l. b: B" ]$ u- X  R
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    8 P# K  H5 D2 {% e. y
  792.                 {8 [/ [# q. M' F" m2 l
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");& \3 M6 z0 o, Y( U- z
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");3 H1 I% F* `2 X1 I& O6 u( U
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");4 ]% [/ Y5 ]# s8 ]
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ L  x) {% m- l1 ~- E) Q

  797. * Z0 Y; ^( T7 ~0 j/ E" y+ C
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    7 o! ^1 R* V/ {: N9 R7 N. `1 W1 y
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");: |  U, R* ]! U6 G
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");) M2 e5 m0 U4 C
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / H# r+ _/ O+ b1 U" `" ?/ ~
  802.                 }2 f* w( R! c' v! o
  803.                 dwStartUpSteps=5;2 c( u  x+ S+ e; H' |
  804.               }. q2 E0 B; B' a9 h7 ~2 {
  805.             }
    . A8 x( U0 k/ m2 S
  806.             else
    2 D* z& y7 a: j& R) z3 W
  807.             {6 H  Y" t4 Z- p0 J9 X
  808.               unlink(".\\DownLoad\\checkversion.txt");
    % b: E& f  \& J) Z7 m
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");4 r3 D9 i$ c- E- C
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    $ v6 f8 b9 f+ h0 A
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ; U$ Q( ~1 V- i) J1 P. v

  812. " V0 G- H$ b; q9 l8 Z7 E' _
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- r2 c4 o; U, I0 P9 |, ]9 O
  814.               dwStartUpSteps=99;
    2 q, w( ^' x8 k0 C4 h: e
  815.               bFinishUpdated=TRUE;
    7 s; ~8 y* j/ K3 U/ F& b
  816.               bCanUpdate=TRUE;, C  Q8 S% b5 G7 ~- b
  817.             }( H# A8 g4 \: H2 G  W! w( ]8 n
  818.           }+ T2 T; |  E2 n: b9 _
  819.           else5 G6 R' u6 c5 `
  820.           {
    1 k7 x+ F& ], j/ A/ ^/ x
  821.             if(!Dn.Connected())+ \4 \7 G" n0 C0 j3 T& @  ~2 S' V
  822.             {
    - o8 ?7 D5 j, f9 K% Z" V9 ^
  823.               bFirstUpdate=TRUE;- o. ]" g! }& A2 U: J  u8 K- s2 n
  824.               dwTotalFiles=1;, m4 v, a. x4 N7 B1 f% w. F" ~1 i
  825.               dwDownLoaded=0;5 d8 Z6 A+ m# T6 C
  826.               bSilentStep=FALSE;- X! ~  ^% l( E& u9 `6 P
  827.               bCompressed=TRUE;1 s; [& s# C# v: f
  828.               strExtLocal=".\\DownLoad\";
    . z( t! Z! ?/ j- B: f0 ?& }
  829.               strFullName="update.txt";
    6 N$ F7 ]5 M6 C5 J6 g6 B
  830.               dwProgramState=AP_CONNECT;
    - s  |- n8 [  D9 B6 ?4 Z
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ' m$ C# a( M1 f+ V4 z( d" O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    9 r2 r* `4 T; l# B) r. f& [
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    # P, I! `/ v8 @; I
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" g  ]( B) S8 f4 U2 B9 c
  835.               unlink(".\\DownLoad\\checkversion.txt");
    , Z) ^* e; V1 a2 ^8 A- v5 @
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    9 p& \1 a9 p" @2 V, Y
  837.               {) d/ J& P" M/ p% c3 B0 ]
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");3 |1 l8 r! v3 _' b& z, V
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    $ B3 l; [" ]' x' J
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");4 {" W8 }0 P; p
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' R" X. d/ F3 B/ `: H
  842.                 0 m( I& Z4 \% ^9 j) q" ]; V
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");2 P: p: Y* `& U. h
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + m& W& _* l" U* Y( A; D
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");" Z  [4 j8 l1 P! g1 z- Y' B
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + {0 y2 ], O# \: Y6 A) O
  847.               }
    + f" T# J  b* r( G' H# h
  848.               dwStartUpSteps=5;
    0 O9 D6 k- S  i/ Q
  849.             }8 s- b" h0 ~  L) J4 B$ U$ Q* F1 m7 C
  850.           }  D9 ~* }1 j, ]/ o9 @
  851.         }
    4 H4 c9 ^& o! N2 }  ]1 v
  852.         else1 i0 G% l- O0 y& q
  853.         {
    9 v5 e7 q% U; j. b  Z" x; N
  854.           dwStartUpSteps=3;
    ! B. A; w, m! _- _# v
  855.         }
    : Z$ }' t8 T1 r# m
  856.       }7 B$ @- F0 H' X* q
  857.       break;! _0 p5 G( U! {) E( m9 H
  858.     case 5:
    - b3 D) ?' P0 f  `2 W
  859.       {% Y9 p3 Z+ \' G( }% V/ X& I$ ?3 \) q
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)4 h: {. f; B# O" X1 b6 W# `
  861.         {' e2 B. Z5 c: A/ s
  862.           int opt_overwrite=1;
    . U  x2 t2 f2 ^6 l
  863.           int opt_do_extract_withoutpath=0;
    * g+ W% `4 o1 V" b# N
  864.           unzFile uf=NULL;) W7 p4 r5 Z& H$ s* B1 g5 D2 Y
  865. , h- \: K3 O: E, ^3 R* p+ {
  866.           uf=unzOpen("Wsa.zip");6 M6 u; T/ V* C
  867.           if(uf)
    # D5 G2 B+ R, X2 Q
  868.           {/ V3 ~1 n7 I2 o0 G2 d& C2 P* A2 s
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);  C8 F- |8 @" A, i, `
  870.             unzClose(uf);
    , t0 V) v3 s/ o1 S1 A
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");2 c8 M3 l. w6 d: y4 b: d3 p6 A
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");% A8 d% B3 z# S1 o
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! w/ b: H- d2 b9 G( u0 p
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);! n& v% v3 a3 `' }# b
  875.           }
    & W0 B) @2 f" p" `7 P% `0 G
  876.           DeleteFile("Wsa.zip" );
    4 [/ \) |/ {0 p8 k/ ^* w) ?. D
  877.         }
    & j8 T3 [8 K6 @& U

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

評分

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