CSUpdate.exe源代码

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

1 X( F- H0 \0 Y( V" _
  1. / RevApp.cpp : Defines the class behaviors for the application.
    - Q0 k/ j* ^( t2 ^
  2. //
    ! \5 l) k* x  B2 n1 z% p
  3. 2 \1 ?! S0 W) W
  4. #include "stdafx.h"
    # M6 V! _  Y& S6 m. K2 I
  5. 0 H4 _2 b$ H0 B3 q( f) s2 M! A
  6. //#define UNICODE
    ; q4 [1 Y  J6 e
  7. //#include <gdiplus.h>0 z( R3 x6 u4 j/ u8 s
  8. //using namespace Gdiplus;
    ; ^/ X+ w% Z! ?/ Q+ j
  9. " h5 S0 R# k" J$ ]4 x# Q; B
  10. #include "RevApp.h"
    0 k  c3 w" y3 W2 w! m3 x
  11. #include "RevAppDlg.h"0 ^5 t& N, S0 v/ a; x2 \. Y

  12. $ n- Q: x% E6 `* x' G* u9 g3 m- c, E
  13. #pragma warning(disable:4786)) e% M. D, e( r3 G, m  J/ R
  14. #include <map>/ t& v9 F, {0 [0 C% @$ I) d, q
  15. #include <list>. q" a$ D- P/ t2 D0 K  |3 c1 z
  16. #include <direct.h>
    " e( T# s2 Y1 o% J

  17. 5 s* P  D) L6 w: m( q" }
  18. #ifdef _DEBUG
    0 f7 X0 f$ p- I0 E  `
  19. #define new DEBUG_NEW9 l9 f' N# e$ L. Z- a/ v# `( K
  20. #undef THIS_FILE/ P1 n9 n2 g% ~2 f& \  \
  21. static char THIS_FILE[] = __FILE__;
    3 T5 G, X# t, i% s0 o' D
  22. #endif4 d, U4 K9 F# o
  23. #include "SkinResDef.h"
    / L- w; ]' Q2 l1 w. A$ r; a) ^
  24. #include "ChangeBG.h"
    2 E. J2 n( S, I) l+ T
  25. #include "AFXINET.H"8 N7 V5 b" b3 g

  26. ) [" [7 O- }( [  U; u
  27. #define TRADITIONAL_CHINESE 0
    + L( S7 Z5 G3 K  J
  28. #define SIMPLIFY_CHINESE 1) s( Q5 H, [+ X' C
  29. #define ENGLISH 20 K2 N% j8 ?: t4 e
  30. int m_iLanguage = ENGLISH;6 X6 r+ ?- n* Z7 s5 i  g8 }
  31. /////////////////////////////////////////////////////////////////////////////
    6 n& [" Y( O5 ?: }! c5 _
  32. // CRevAppApp( p/ `# P' Q9 L- H

  33. , K% j; e& ~3 |9 w
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)$ z& T  m' n% l2 q. E% Q
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    ) _$ |( K$ r: ]' Q% |
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    7 _: S9 l1 E; `# k9 I; P
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!0 ^) p; V- W# r1 J" T% E
  38.         //}}AFX_MSG* i3 B% a* G: z( ~
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    , b$ ^5 _/ @3 k  p7 |) T6 l: E
  40. END_MESSAGE_MAP()' g; }% O: q% h( ~* r( z
  41. ) Y- N% D: B/ r/ Q9 b
  42. /////////////////////////////////////////////////////////////////////////////
    5 r. G* O* S" C
  43. // CRevAppApp construction
    $ p- q! @4 N% A6 z# N3 H
  44. % ?, {2 A! ]/ {( Z$ S8 j# X3 T! W
  45. CRevAppApp::CRevAppApp(); |$ W, h% Y( y2 ]6 ]7 Z
  46. {
    7 l6 {5 M2 e+ F# T# [  D
  47.         // TODO: add construction code here,2 d3 b2 a7 T$ ]6 |
  48.         // Place all significant initialization in InitInstance
    7 W8 u: z% P  E1 m* A' `# }2 C
  49.   bDisplayIsBig5=FALSE;$ q7 b$ D! v( j9 z4 D6 @1 T$ [% b# m
  50.   bRestartUpdater=FALSE;
    , M; V) g% x. x3 T
  51.   bFinishUpdated=FALSE;
    ! Y' S; r! |" q% p- ^
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;& e5 p4 \& v6 f
  53.   InitChangeDataBig52GBKS();1 e) X: t# N! N" I
  54.   InitChangeDataGBKS2Big5();
    / ]$ p+ c+ b2 X2 }1 C, M' i8 x% [
  55.         //
    , x( V) R4 B% W5 r" M0 {/ Y
  56.         bClickRunExe = FALSE;6 R7 _6 c- g  X8 K5 j  `
  57.         //
    # N$ y: e) T6 W4 J$ E( z
  58. }. ^$ n- f( D9 y3 j- ?6 o: \$ M4 }0 C

  59. . o, X& ~( j/ }7 @
  60. CRevAppApp::~CRevAppApp()
    + q3 Z0 {) F1 V, _4 D( Q
  61. {
    $ A' S" A; i! s! l
  62.         // TODO: add construction code here,
    7 F0 `' n" V7 ~$ I6 E3 H* G
  63.         // Place all significant initialization in InitInstance
    ! e% r+ u0 E' k. P
  64.   EndChangeData();
    1 |( ?: }% R  g/ a$ m3 B/ a
  65. }
    - Q: O0 {/ _+ {% Y2 n

  66. 9 `/ D  K8 C2 e) T1 k
  67. /////////////////////////////////////////////////////////////////////////////$ b  r, x! k2 Q( x
  68. // The one and only CRevAppApp object
    # N" w, A+ i) O- q# x" t

  69. ) j* b7 g0 T8 \! b0 e2 A  m/ T
  70. CRevAppApp theApp;$ S5 u( r% o- \  L9 V
  71. , W" K% E9 {. F
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    1 ?: f/ q& g5 D1 i$ C
  73. {) t* f4 I( F9 x3 o/ b* \
  74.   int iEOF=0;
    ' @$ Q: M$ i9 h3 T
  75.   char szTempName[MAX_PATH];; g. l" S6 o- y: W! S
  76.   *szFileName=0;( h5 O1 S: |/ U9 P: {. R0 A& @
  77.   iEOF=fscanf(fp,"%s",szTempName);
    6 @: h4 c& ^1 i0 T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')" c, F5 u" B' U' P
  79.   {
    + V8 Y4 r: \4 P
  80.     strcpy(szFileName,&szTempName[1]);
    + d- H5 b8 A) ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)( |( q% @2 F! M; {& W1 R* P9 g7 b
  82.     {. ^+ N$ K& h/ v* x- F2 j
  83.       iEOF=fscanf(fp,"%s",szTempName);( [7 ?0 d5 @5 G
  84.       strcat(szFileName," ");
    . c( N! ~4 D3 F. ^& E5 k/ y
  85.       strcat(szFileName,szTempName);4 }$ [/ Q- k1 T) S* F1 w9 u4 ?7 e
  86.     }* w/ s/ e! V2 _  K8 r
  87.     if(strlen(szFileName)>=1)
    - \  Q# `! L  [! e1 N  D/ k
  88.     {
    $ D" {/ C- _" S4 I& N6 O; Y
  89.       szFileName[strlen(szFileName)-1]=0;' W* }  p" ~( x4 t; @% D
  90.     }$ W6 ^6 }$ {1 b9 s
  91.   }
    ( W* y' i4 T9 X) G4 k1 s5 L1 n
  92.   return szFileName;% l* {8 R. T3 N' A6 ]
  93. }5 f8 R; o( I& _0 h7 v
  94. $ J" j) x8 p5 [. b: g" [# k
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
      f# Q3 F( }7 K: P2 n2 ]/ e
  96. {
    ! E* u1 B4 p2 q( x) S
  97.   FILE *fp;
    + Z& ]& n5 d6 e& B* w, S
  98.   char *key=NULL;3 `/ G, l6 k$ k! N& O! I- W
  99.   char version[MAX_PATH];
    , w! {2 i* v. R4 [+ O5 h
  100.   LPUPDATEFILE file,olds;0 z0 P* m7 M" {
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    & l. W- Z5 b( ^/ @% b

  102. 4 n. A8 u: a) Y" f
  103.   UpdateList.clear();
    6 J+ u. y/ b. |
  104.   UpdateFile.clear();
    ) i& }2 n/ K5 j( Q3 W4 ]) L
  105.   if(GetFileAttributes(filename)==-1) return false;) j( d1 ?5 o3 h2 Q$ [' u0 D4 v3 V/ J
  106.   if(!(fp=fopen(filename,"r"))) return false;9 S# Q0 h& q2 W+ S- z+ n7 o
  107.   fscanf(fp,"%s",version);
    ( f; `0 J! x2 c2 ]; U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }- U4 o1 `/ [0 z8 T* j) j
  109.   while(fscanf(fp,"%s",version)!=EOF)
    % {" s" B6 _7 h& d
  110.   {; C5 E+ e7 d  C2 J8 K
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));' D4 N$ L. I7 ^% M% L; F2 q
  112.     fscanf(fp,"%s",file->path);
    - u% X3 k( G/ K
  113.     ReadFileNames(fp,file->file);8 }" E$ ^  ~' m6 U+ V/ H
  114.     strcpy(file->full,".");
    " f8 z# \' ^" `0 m. t0 q
  115.     strcat(file->full,file->path);- c1 Y# r% `: {5 \3 l/ f: k# B7 K9 h
  116.     strcat(file->full,file->file);
      R, U  e+ c/ K) F
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end()), {. y- w8 w8 D4 \5 I; i
  118.     {0 A, i# B6 c2 C, {4 m6 {1 p
  119.       file->vers=(float)atof(version);: c: v: m% L! `6 N8 \
  120.       UpdateList.push_back(file->full);
    ; I  g% j( R# o
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
      t- q' h0 V% Z( c
  122.     }- N* Y0 C, i) c. g9 s" y! n$ k. u
  123.     else
    " Z% P1 y, Z) O( s$ h. t2 c
  124.     {$ C  \8 _/ l5 N( B
  125.       olds=(*p).second;" Z" _3 f6 P" J7 t
  126.       if(olds->vers<(float)atof(version))
    ! i$ }+ I( j4 H# o4 i/ a$ @
  127.       {9 ^$ Y8 l, q; N- L% O! P: w* W! j
  128.         olds->vers=(float)atof(version);
    + w# {% }$ e3 P' N7 |7 P
  129.       }
    ; R. o/ o* ?" |
  130.       free(file);. G2 D% E. x: V4 B  B
  131.     }8 p) }5 `  Z" g1 Z2 ?; e) l
  132.   }
    % N& p* N; u  T5 ^/ ]: X
  133.   fclose(fp);) g+ \7 X3 [6 X! q; B# l
  134.   return true;1 v) \! e& M! q" s
  135. }2 Z* h; E; M' \" [
  136. 1 H' i2 k5 J$ M$ B7 N" j0 a
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    : s9 G2 N" z. A0 P; l
  138. {
    $ [1 a7 B" O& F8 u, O
  139.   TCHAR  szFull[MAX_PATH];% H1 B+ W5 b- X$ X; F" p" N
  140.   TCHAR *token,*inter;' h: L6 E( W) ?% o$ {& p
  141.   *szPath=0;( L5 U- n" q& P% Y2 y0 R' C
  142.   strcpy(szFull,szFullPath);2 E& \3 n* d) `% @, t4 t& P
  143.   token=strtok(szFull,"\\/");
    ' v8 U+ z5 f- U4 h0 m
  144.   inter=token;
    ( ]5 P6 D5 s5 Q* S$ l9 H6 {
  145.   while(token=strtok(NULL,"\\/"))6 s9 ^& K& C  a6 ]8 R9 p
  146.   {
    + \9 ]0 M' E* ^: N, j- ]
  147.     strcat(szPath,inter);! c8 {/ j6 n0 `& A! Q
  148.     strcat(szPath,"\");0 ?6 v! p: S$ X. T4 r# L
  149.     inter=token;
    9 b( G' I2 O: v* y
  150.   }  C! |2 p' e! A  G' ]6 U
  151.   return strlen(szPath);
    7 C* {. |2 F* j9 ^5 E5 ?
  152. }+ Y1 l2 `+ O! {# i& r! M3 e
  153. & D7 u( \4 G7 s# w
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)! |- [  l, g$ v* O, D
  155. {
    4 X% G; I8 e2 }) _/ z; F0 j, B
  156.   DWORD attrib=GetFileAttributes(Target);
    ( Q) P% x- s) y+ t, q
  157.   if(attrib!=-1)
    2 d& k8 J/ j  T- T+ f3 j0 Y
  158.   {
    . z8 ^% B/ M! q( [
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    $ m# I  m& j0 @# T
  160.     {
    & O/ J6 X! a9 P% ?* h
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);4 k/ }0 D7 Y' [9 I1 H0 }
  162.       SetFileAttributes(Target,attrib);# T+ C! ^9 ]. Q% W8 r! S
  163.     }
    * g6 w! Z2 K( U: L
  164.   }
    $ c9 _0 a7 Q$ V8 f: w
  165.   CopyFile(Source,Target,Erase);
    : b: R. m4 {- A# D0 a
  166. }
    2 |0 G' R/ u% K6 D7 u
  167. ; o. j7 P8 s4 F
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    8 C, y# M) T) T
  169. {
    ( ~. P7 O; b" p4 _
  170.      FILE *fp;
      R, I5 K9 o/ p/ @! G; Y
  171.      char  szBuffer[8192];3 E# J' q0 u  L* c
  172.   va_list  argptr;  p. n! E- P! j7 [  T
  173. * m0 x6 K7 `8 R3 R
  174.         va_start(argptr,message);7 L) e4 q. Z% D8 G
  175.         vsprintf(szBuffer,message,argptr);
    - y% f4 ?) u, n1 {
  176.         va_end(argptr);$ G# w2 M1 Q$ U; u( d
  177.   fp=fopen(FileName,"a");+ ]3 w/ P! k; p0 l( g+ k
  178.   if(fp)& M7 A8 i5 H6 V& H5 @' @8 H
  179.   {
    8 I* v, G  n9 Q
  180.     fprintf(fp,szBuffer);2 V' x5 K9 `+ }" q3 ?5 \
  181.     fclose(fp);( D& x5 y3 @) A. H
  182.           _flushall();
    ) T0 _, ^, r% V9 X
  183.   }
    ' V  W! U! {6 f2 {6 _% c
  184. }, l- T1 ^% h1 D( u% D: }. O

  185. : l6 M+ x9 j! k
  186. BOOL CRevAppApp::Fclearf(char *FileName)  f) F$ J: k; n3 s
  187. {
    " G/ a7 `9 |; L7 q# u( I8 j
  188.      FILE *fp;* s5 F# b) L# `9 c
  189.     DWORD  attrib;" L2 P5 B# Z2 a, v1 b
  190.   attrib=GetFileAttributes(FileName);+ K" L& D# K6 i+ ^, T5 P
  191.   if(attrib!=-1)
    8 X2 b: Z! K8 q  m+ |6 k1 b2 r  w
  192.   {
    5 S8 j8 h2 r2 M/ L3 W: ~3 F
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    : i' o0 \. t8 b5 r
  194.     if(!SetFileAttributes(FileName,attrib)). |/ x: T& c7 j0 V; T
  195.     {
    $ E6 C9 ?$ G! P. k5 b: g
  196.       return FALSE;7 [! m2 h7 F% W9 }6 v
  197.     }) ?# L  B0 v6 a0 z6 e0 C$ X# L+ A! E
  198.   }
    9 Y% l! q1 t* e- E$ T$ j: I
  199.   fp=fopen(FileName,"wb");
    " w' M4 L3 {. r0 B) F8 i
  200.   if(fp)
    ' P9 Y- J- [" ~8 e& R8 {# }6 A
  201.   {+ U1 O+ X) p1 S
  202.     fclose(fp);* {& u7 K( O2 @. a8 ^& N0 z
  203.   }6 E4 G7 r1 t& q0 n' s9 A' [! J
  204.   return TRUE;) w. [1 D5 w; t5 C9 U& [  W
  205. }
    % ?/ ]$ e7 G1 P# |4 e/ x8 F6 V

  206. : G0 U* Q8 q* a; [! ~" }* S5 B* e
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
      k- B' V: @# `3 a- R
  208. {
    9 F- G  ?  t. d
  209.   char filename[MAX_PATH];
    ' U+ }5 \: k) L! [- K
  210.   LPUPDATEFILE file,olds;! H6 [$ E" _4 N2 F3 ^0 F/ _
  211.   std::map<int,CString>::iterator i;
    0 I! w9 Z8 k" `0 P* g" h
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    " Y! \6 e/ S/ u! n2 y
  213.   std::list<CString>::iterator l;0 W: l! |- [7 C2 N1 i, H6 W
  214. 6 c! l! O! o4 h
  215.   if(bFirstUpdate)8 m5 `9 [5 P" y
  216.   {
    $ a* K, d* [  Y: N. B: h; L
  217.     dwCurrFile=0;
    0 P4 ?$ L7 K; x" {0 L9 E$ J
  218.     bFirstUpdate=FALSE;
    ( m& I/ o- B% n+ O4 p
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- d6 [) a# {/ _5 n4 }$ j" \
  220.     {2 Y' t! D9 y8 F6 K
  221.       dwTotalFiles=UpdateLocal.size();
    " T3 o( M  m& ^6 Z" x4 k
  222.       dwDownLoaded=0;
    + Z1 x& a+ s: S" \; |0 w7 r
  223.       bSilentStep=FALSE;  l  |$ x1 s% p1 E
  224.       bCompressed=TRUE;5 s0 G: [8 I" c
  225.       strExtLocal.Empty();
    & Y4 _# v* ^5 J( R) M* g
  226.       strFullName=(*i).second;9 u5 h( z/ \# Q. I
  227.       dwProgramState=AP_CONNECT;
    , q, a8 d' y# |2 z, z
  228.       return TRUE;# F' Q7 @+ Q4 I) I. R/ @
  229.     }2 W$ H4 b1 H, [3 }8 M) V# T
  230.   }
    ' L# _& l  ^0 L" _, ]
  231.   else if(bRestartUpdater==FALSE)
    3 y9 J6 g) i1 M; ~) h2 O4 H
  232.   {9 q- a/ h# Z$ L( Q1 Z# M" N
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())4 n* S  ^% T$ L8 p) k( w$ @3 u$ p6 R
  234.     {0 ]5 K: m6 x- v  t7 d
  235.       file=(*p).second;
    - n2 _' x4 M1 }2 s7 M" V
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    + H7 e* r7 _) a: y
  237.       {& A7 g+ M$ T* d: P
  238.         olds=(*p).second;, c. R1 }, l* y$ H
  239.         olds->vers=file->vers;
    + s3 K9 ~: M3 J7 {. x
  240.       }
    2 x% Z( A% _9 t: j1 }
  241.       else5 d2 P3 Z8 T' \; \+ A$ W7 P5 ~
  242.       {
    : Z) o! j" L; |) U$ S
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    . ]* ^3 U5 A, l( i
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ! ?9 p# D) X' m4 V
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));8 b! Q. o; e; |& _9 F( G9 `) P
  246.       }/ t- q* k1 Y5 q& |) P2 Q8 p% y
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");* `1 _; U9 O: @: c# G- _
  248.       sprintf(filename,"(%s)",file->file);
    ! R/ }1 K+ ]8 y$ l7 |" F5 R
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    9 }# B4 G, y, G
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }$ y# l3 o$ B1 R+ j* G' f
  251.     }- L8 x, ^4 w8 P; \$ p
  252.     dwCurrFile++;  L7 A8 j& Z3 T, N/ @1 H+ I
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    & r$ c) ?& Z* _+ O9 G! F
  254.     {
    ' y8 b) o& f' m' L
  255.       bSilentStep=FALSE;
    # c. O6 h- l1 P7 S5 `4 M
  256.       bCompressed=TRUE;
      H  R% I9 w- A! D# s6 N
  257.       strExtLocal.Empty();
    ' A& R/ l$ T4 n$ B/ `- D; R
  258.       strFullName=(*i).second;. t" O+ X/ U9 S- Q: W
  259.       dwProgramState=AP_CONNECT;
    ! Y: m1 G% E: c
  260.       return TRUE;
    7 J- M+ {9 f9 H& U. h) M
  261.     }
    " n" k" I! ~2 B- [9 b
  262.     if(!bRestartUpdater)( |. |& [5 |$ A- [! _
  263.     {
    6 ]- d! K7 C; n8 @3 d
  264.       int iCurrSize,iFileSize;0 [) F) E1 _- T- [
  265.       iCurrSize=0;
    , d( ~, s) r) h/ b
  266.       iFileSize=UpdateList2.size();3 v; g2 `4 I) W. l. ^
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    6 f7 U# _+ y6 Z' b: ]7 `
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");# h% c6 B& |5 H( @; c( g5 q. z
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    ( H6 i3 A9 ~* H( Y' i( u6 _
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 f! q8 [! g7 T
  271.       Fclearf(".\\update.dat");
    1 E, C' ?0 a( v& e, P7 i
  272.       Fprintf(".\\update.dat","Bloodyf\n");" `8 a0 g3 Y, Y  U
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    4 B  X( `5 E1 _7 d; n7 u2 q
  274.       {( ^  p% ^3 D5 n# w! e6 N: B
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    4 l( i: O+ w+ G/ g3 u6 G
  276.         {
    2 ^5 I/ g, L# j1 V: d3 ^
  277.           file=(*p).second;* i8 B! x& z4 ], M
  278.           sprintf(filename,"(%s)",file->file);% x: k1 r! I0 X; c* b5 H- j( T5 c. T) t
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);# ^% V: T( w& M  m
  280.           iCurrSize++;* U- w1 N& e9 X* u! `' R7 ^1 t% e
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    % C2 p* c% H9 k) g/ I
  282.         }
    , c8 z2 [" k, u: n) `3 b  I) f; x
  283.       }
    ; k5 N: K; Q9 E8 O6 h7 t
  284.       unlink(".\\update.txt");
    * r( \* H; B! q! B1 w% {) o
  285.       unlink(".\\update.tmp");
    5 m8 `7 M9 M$ ^" N7 w8 J& f2 O
  286.       Fclearf(".\\checkversion.dat");. }$ y8 F" ]: T; h# \  T% A
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);* V9 j) X' B3 O( \
  288.       if(UpdateLocal.size())
    : F" N3 G6 B# E7 Z$ U7 _( ]
  289.       {
    " y$ c& s" X# l- \( ?
  290.         UpdateLocal.clear();7 T& l" S) M3 W9 n! _9 z7 J- U
  291.       }
    5 C3 c: Y, h* t( ^
  292.       if(UpdateFile3.size())
    9 s5 a/ |* C$ K$ q, d7 r* U* l
  293.       {5 m7 w% r6 q. ?7 `# M8 K
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    & v- W0 g  \3 h, K4 y
  295.         {
    4 L" `3 n! C2 e. j
  296.           file=(*p).second;# @, y5 @* x6 ~' D
  297.           free(file);% S$ d7 B1 @3 F$ R1 S$ i
  298.         }
    6 A  }1 Z+ N; P2 G8 w" [
  299.         UpdateFile3.clear();/ O4 Z4 t/ h) E
  300.         UpdateList3.clear();1 W# E0 a2 \) F. f! c8 n; [6 t; s
  301.       }
    5 u2 x; S5 f( \, k0 w7 s( D$ R
  302.       if(UpdateFile2.size())
    + J; d$ t1 W4 p6 w
  303.       {  I- f  N  l6 [) k  _* ^
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    % {8 ^, C: M. _  y3 ?8 H6 e$ O
  305.         {9 n; S$ W/ Y) r" k
  306.           file=(*p).second;
    ( Q6 y1 y7 \6 ^
  307.           free(file);$ x# }: s. a. E2 u" u; x1 _- V
  308.         }3 u  L3 L% A9 f) U) l
  309.         UpdateFile2.clear();
    3 m* ]+ I% W; x1 r/ B4 y* w
  310.         UpdateList2.clear();
    # I6 i/ L, J9 o0 \. t0 {% [, o
  311.       }
    8 |3 h9 v( O1 ~1 k' F
  312.       if(UpdateFile1.size())
    6 U1 k. q% i! `- a5 o' M( C
  313.       {
    - C9 N4 u6 ^9 V( g+ s/ o
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ) k* a$ F9 `* \7 |1 m0 r8 L
  315.         {1 k" u0 a' m8 ]+ L
  316.           file=(*p).second;
    & F- H' d! F* j6 i
  317.           free(file);* [" s# v) D7 X: L* K
  318.         }/ |6 Y# l+ X, w
  319.         UpdateFile1.clear();
    - s) J$ H6 Y# e
  320.         UpdateList1.clear();
    3 g& k, S! h( Q* W( z9 @# ?
  321.       }& D+ [  @4 X3 n
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    ; |" K% s2 E" [/ K; [
  323.     }
    / o3 _1 }8 w/ m' j$ _
  324.   }9 u- O: R. D9 R& ?
  325.   return FALSE;
    5 O( |2 H  w, [- t
  326. }% S& B% {4 p! }. B; D6 C' w
  327. 9 X5 M5 n$ X% r
  328. void CRevAppApp::ClearAll(void)+ ~" E& ?& F% s# ^# Y5 z
  329. {
    1 i( ~; O, u! b! X" Q: m1 b9 v
  330.   LPUPDATEFILE file;
    0 \0 J. |$ q; \) W3 m* B8 ^
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    9 @/ ~2 N/ F8 k7 t5 f

  332. ; w" h' W" z7 _9 h& r. p" E
  333.   if(UpdateLocal.size())
    1 q0 k0 [; C% D+ x* D( t
  334.   {
    6 g* J0 z5 J6 |& k5 h9 y  W4 i$ |
  335.     UpdateLocal.clear();+ ]( N3 @9 _, v5 M
  336.   }1 E, G$ O9 A! z8 o' m: V; q
  337.   if(UpdateFile3.size())
    8 G. C+ Y3 V5 r
  338.   {3 O( x) b# [  j
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++). ^& m) P3 N, r
  340.     {% [, Y0 S9 {) G
  341.       file=(*p).second;
    8 T) `0 A1 |9 t: p+ m1 @
  342.       free(file);. x( ]/ [- [' [8 P& V2 i2 y
  343.     }
    - P- f  R  j, N+ K3 x
  344.     UpdateFile3.clear();
    ( o! I; |' |  C  U) m9 [( N
  345.     UpdateList3.clear();
      O( Z' u& s" q' D! h% e! x
  346.   }
    9 {9 J  d: B5 f$ l8 j" D
  347.   if(UpdateFile2.size())9 R2 O# g  Q) B5 B, I
  348.   {
    9 X% A! W" x* k- W' _  o) `7 A
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* Z) t: q2 j( ~* f' M& t6 j8 }
  350.     {
    2 R4 T' O: L7 ]5 @& g2 F5 H8 X
  351.       file=(*p).second;
      ?9 K% R& ?, h2 m
  352.       free(file);9 M8 o' X7 Z: M7 V0 ^
  353.     }. Q" f" I! ^0 W, p2 l
  354.     UpdateFile2.clear();! M' q9 i6 Q4 l( X
  355.     UpdateList2.clear();5 t$ z5 [6 G$ }1 L; T
  356.   }9 u2 z4 C0 S# {) N5 ~; z% k
  357.   if(UpdateFile1.size())
    9 }+ g' V% y' a4 C; g
  358.   {/ u# ~$ e% t! _; I4 a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)( B" s/ e' {' F8 O- C% l' u; }
  360.     {& ~0 a& ~' @( L/ s7 o2 y
  361.       file=(*p).second;
    8 g9 y7 R1 m+ f  }6 u6 o
  362.       free(file);
    , O- @9 U, j1 ]/ }
  363.     }
    % m$ B, ^2 T! `2 K
  364.     UpdateFile1.clear();# |/ L& r2 f, X/ T7 S% p
  365.     UpdateList1.clear();
    3 e7 |* F2 f% N7 ?
  366.   }0 Y+ @) n  D% ?+ P
  367. }  
    $ Z/ I, B% f7 E  U' G7 ^, M7 X
  368.   
    1 [. ^7 n7 @- K* e
  369. BOOL CRevAppApp::CheckLocalVersion(void)( S% r/ @% c7 K$ d; b
  370. {+ F4 N6 A1 C9 q
  371.   int c;4 i. G5 [) {& g% p
  372.   LPUPDATEFILE file1,file2;5 }! }" [. G' b/ c
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;: t, ^- ]) U9 C' h$ Y7 \
  374.   std::list<CString>::iterator l;/ j, x0 s& n7 i6 E" N! g: e" O) [
  375. 8 x# V2 Q! V9 D8 |
  376.   UpdateLocal.clear();9 y. \; ^* {6 e- n, M+ i
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    . O+ c+ Y9 R9 R
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);6 L* z$ H# B) y& r
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    : f2 H$ b. W3 z  j- n% z8 t
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- `6 n2 {. r" o* R, v
  381.   if(UpdateFile3.size()), t/ d6 O$ {' x, }9 ~
  382.   {- j6 e" ?7 x) j4 e
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    2 _* Z6 I9 ]! Z; O
  384.     {
    - l' O7 U- H7 x* _: N
  385.       file2=(LPUPDATEFILE)(*i).second;! c1 b+ h% F' y' _
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())/ r$ n: \. c4 K& F) {/ |
  387.       {# v" O( w6 w/ f5 ?, N
  388.         file1=(LPUPDATEFILE)(*p).second;
    6 q9 b' `4 `  l: w2 r
  389.         file1->vers=file2->vers;+ Q0 w8 g$ @+ A* X/ K1 P5 @/ N
  390.       }
    : M2 h; o; H$ L% _2 f" X& v  j
  391.       else
    8 }: i/ J: j8 h2 _/ Z
  392.       {
    9 }9 N& R' F' f: {* \
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));# m; H4 ^- @: D3 `# T' l" S' Z
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    7 n  Z* W: y4 T" k# F: P
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    7 }" g5 d: ]# h  y
  396.       }  a0 T7 I7 {' P3 Y% c* f# h2 t
  397.     }
    8 p' f6 }, Q. ^9 ~
  398.   }' q7 t) y# A3 y, y5 U+ D1 q* D
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    $ P" Y  F8 B4 T0 D
  400.   {
    9 Q5 I* t0 V% A5 [8 y+ k
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    7 b% ~! R- U" |: r* K4 O2 b
  402.     {, F* F% i+ f: ~. t: z
  403.       file2=(LPUPDATEFILE)(*i).second;9 j2 M% R, Y; f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()); A7 ~. U" S( J
  405.       {
    + q3 X) J# _' e* Y: m* w/ N* y% D
  406.         file1=(LPUPDATEFILE)(*p).second;7 w- |+ j( y8 g5 S/ Q9 Y$ X% y5 T8 g
  407.         if(file1->vers!=file2->vers)2 p4 h) g6 N% U- I3 ~
  408.         {
      s+ C- \) n4 M: n
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % ?+ S6 {0 q& ]; D1 g) ?2 ]
  410.           c++;% [$ g& J& m3 R3 g$ m. u' c" K
  411.         }4 \1 U. q" R' i. U! Q' [
  412.       }
    ' R0 S; a5 p! _
  413.       else, E' f6 n3 G# X
  414.       {
    2 y, d, }! f& `# }& c
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));( }- X9 z9 }9 g* ]) v2 F
  416.         c++;
    0 ^5 C$ p( e2 J% H) n
  417.       }
    - P. i# @; J7 `; `
  418.     }# a" ^/ l4 ^3 {7 J
  419.   }8 D; r, [3 d/ [: M# W5 m
  420.   unlink(".\\DownLoad\\update.txt");
    * J; Z! e7 d) f# ~9 Q- q1 g( i
  421.   if(UpdateLocal.size()) return TRUE;
    ' F# r8 z! O. |- p: f; I2 N! m2 h
  422.   else                   return FALSE;! F/ g$ l7 a6 W
  423. }
    & J, J# q3 z, N! I
  424. . E1 m" L. w; L  M$ c* X
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    / w4 k/ E% l! K9 I: p. _: k
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn") I7 r; F2 T9 T

  427. 1 v! G8 L, i  [+ b: B

  428. $ n" R6 M7 T1 j2 v* N
  429. ' T2 o3 I: z2 r* ?' [* A
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)( S" [$ d$ R$ J4 O
  431. {
    ! U7 K2 C+ L* p6 w; u- M6 c
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    # N. [4 }* `+ q! j  p$ e) M
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    0 t' N( f* Q% t, p) k; W: M9 I+ A
  434.   {
    6 P, D: \8 N, `+ [* m2 ^
  435.     char szLanguage[50];
    4 s1 `* F2 K5 K4 t  C' h) p" d/ T
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");
    ; v- `* x2 Q" X6 N5 J
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    9 z% x1 S: j6 v) |1 {% D
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    / ~, h; `0 L- \# r6 n
  439.     else                                   m_iLanguage=ENGLISH;0 _5 R" E8 p) S/ {6 L4 k4 u
  440.     char szRegister[100];- B# M( j. x# A' B( h+ {; O$ C
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    7 `  E3 }1 `( C; l/ d* q# d, K
  442.     strRegsName=szRegister;# w5 h4 L" [1 [; C
  443.     char szPatchURL[100];# E$ ]0 e  V( P* z9 w
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ! }, i7 V% e; ~* N9 K2 b8 a; h
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);% v2 p& D. e1 N& j0 ?
  446.   }
    3 C* u! J" s2 ^! j6 P1 z7 F1 |
  447.   else
    3 I5 ^$ f$ l3 T; u- ^" Z, S
  448.   {
    - n, v% |% O- @: ?3 c
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
      Z( l* n* X. p1 u+ @" ^. R
  450.     strRegsName=DEFAULT_REG_URL;5 C2 E+ R2 U$ t+ f2 T- c" q6 q' ~! a
  451.   }5 E/ G. {( l9 ^) V* Y4 u
  452.   if(GetFileAttributes("hosts.ini")!=-1)  c$ q' z+ U2 F( N
  453.   {. l2 X6 I; K: I
  454.     char szIP[50];# _) A- n% `+ Z- z1 K" j
  455.     char szDIR[300];
    3 V" Y- K" q% t' \
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    3 Y( v0 `0 V7 e$ u. e/ K0 x
  457.     {4 @! b3 m& _/ K+ M
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    & z- s5 Y; k) ~/ L: r. Q% I1 L
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    4 T$ u% o9 ~0 m8 P( o4 J
  460.       strHostName=szIP;# J" x: U! a" R
  461.       strHostPath.Format("/%s",szDIR);
    3 X5 {" B; X/ {" x7 p
  462.     }( r0 k2 G0 O" L$ J
  463.     else9 B+ J% k$ _/ B
  464.     {+ }! e/ ~, O0 _6 N
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    ) q" H, E( r! y) {* b, ~, Y
  466.       {" U2 a3 p) D* o! g! r7 W
  467.         char szLanguage[50];$ w" O" S" ], V" z
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 k' I2 K  U% C& A' H1 p! J
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 U$ d# u, s- D
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    % F, R9 }6 E/ z. I: \3 ?- K
  471.         else                                   m_iLanguage=ENGLISH;6 n! T7 I4 t! U8 F
  472.         char szRegister[100];
    5 ]- h' v* f3 B) M- x8 h) D, {
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");5 s5 w! ~, v3 W* _# _5 C, s
  474.         strRegsName=szRegister;
    # |  e1 [! W/ X5 K
  475.         char szPatchURL[100];
    ) t" J. e9 d: h, {1 |+ z& ?0 Y
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    7 B7 _% s; v# f; u+ n/ N
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 I, o! H2 P8 U  P6 @( Q
  478.       }
    / V% }" g" i7 W) p3 ~5 m7 x8 d
  479.       else4 [" x8 d. s8 ]/ O
  480.       {
    6 j8 `8 g) i8 p! j* `5 H
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ! x0 R: ^; h2 M4 ~- a) M
  482.         strRegsName=DEFAULT_REG_URL;9 n  w( e7 s# F4 I& a) _5 i: e. I+ f
  483.       }
    $ _/ L/ t0 U: j8 c- e) n
  484.     }) P6 p! U: x7 u* m2 c
  485.   }
    - m; t' A3 t9 V& J2 G$ D5 X+ m
  486.   return true;
    % I8 J+ p. b! D4 O5 Q  }
  487. }; X  `* M! S+ J/ d

  488. % M3 v9 S: E+ M0 W6 w
  489. #include ".\ZLib\unzip.h". L: o8 q% Z7 {, C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    6 g1 t) Y- m: Z# p% u$ P+ ~2 a
  491. /////////////////////////////////////////////////////////////////////////////
    6 \1 J% g2 C& t2 B2 Z" P
  492. // CRevAppApp initialization
    ! }& z5 N& e$ V# C; s

  493. ) ]7 Y  f( p4 @. K) a4 \3 y1 B" Y
  494. BOOL CRevAppApp::InitInstance()
      F  |3 Y; }% i1 r) h
  495. {  V" D2 v+ N+ b4 F
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];
    ! v* a6 _: W+ t+ P6 F% @9 S) a4 e

  497. - C2 h* ~% G* X& d( k: B& ~  u
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);- h2 ?$ h" R( H$ b
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))( x  h: ?7 E3 ~2 `8 K9 \
  500.   {" B& }  k! c7 [- L! {5 F6 {7 c
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");7 C6 O; a: h0 |5 y* g; X' C$ _
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! t+ a3 [4 M6 N4 o6 }9 a
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))% [5 a# K/ ]& ~: [# |$ ^1 Z1 Y4 U
  504.     {
    * S, L- z- q% Z7 n
  505.       strcpy(szPath,szPathTarget);+ C& R, [  o  q0 Q: t9 T5 J
  506.       SetCurrentDirectory(szPath);( M' {# Y9 T/ w5 D3 b' [3 S
  507.     }
    * g% ^2 e, U9 Z2 n% \$ S, D
  508.   }
    % i$ e4 ^8 ?0 Z% W# N
  509. #ifdef _DEBUG
    9 j) q# @9 J! g0 \
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))( b2 G- j- |, O/ F0 a- z5 O
  511. #else* {' ~# I' T# k" p+ W" {
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))% p$ i0 j& l2 i4 ^
  513. #endif
    " u& I4 ^% L+ P3 Q) P
  514.   {4 u( x2 n; }2 i: R' ~, b
  515.     char tempFileName[MAX_PATH];
    ! e7 P% ~& U% `# N# x" R) s. H7 {6 d
  516.     strcpy(tempFileName,szPathSource);0 \7 J9 m# O; A  e" h; Z
  517.     tempFileName[strlen(szPathSource)-12]=0;  d2 O6 w3 |  o( S
  518.     strcat(tempFileName,"\\$CSUpdate.exe");6 K1 c2 n6 S( ?/ l% J4 k5 D4 h
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    * f! V5 ?' o+ K7 `; U
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);% C: p. V2 m) I! v
  521.     return TRUE;
    6 g  t0 r6 j( d$ @5 G% C: N& d, K
  522.   }
    ! u+ l5 T( ~6 Y8 d8 u2 n
  523.   // Nuke 0118: Delete run.exe
    % c6 Y; X; P7 G3 k3 w* R, r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    ) h( \& K- C7 w* j7 |  x
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");" d/ N0 V. e3 _% U
  526.   if(!ReadCfgFile("Config.ini"))7 q, V1 H1 ]2 E+ h9 a9 p% m
  527.   {6 ?. R+ f$ g- V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 t! g2 A3 H* H) W) P  j  M
  529.     return TRUE;/ n& R% W- t* s$ j
  530.   }
    + z( e5 b9 L' a1 t" O
  531.   HANDLE mutex;
    0 T8 I% y+ |* j" T2 J
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ) _/ q+ O. }# ~& l/ T, i
  533.   {
    ) y  y# R, z) Q6 a' Y
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    5 U3 v& }5 g, u
  535.     {: ^7 B5 R/ N7 `) S" O! y' o
  536.       CloseHandle(mutex);
    . G( B: e1 f* m+ }# L8 G: P( n0 I
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);5 c/ a1 _5 h5 ]% c
  538.       return TRUE;
    6 @0 F  S. N% `# R
  539.     }
      N/ U8 i, a9 u
  540.   }  
    $ W- ]! n# t+ |4 l# [
  541.   CloseHandle(mutex);
    * ]* k  \9 v( Y# }: \

  542.   ]9 t3 q7 p: c1 [$ M
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);& C8 g+ H: D* O  c: {; N  f/ N

  544. * U- j$ a, m: s9 Y) Q" S  n
  545.         AfxEnableControlContainer();
    $ E, c1 p# M+ {
  546. 2 I! ^. e& b! N" {; q+ Q: ]' ~* o
  547.   bCanUpdate=FALSE;: ^9 j+ ^7 `$ c6 t" j) V" B1 F
  548.   dwStartUpSteps=1;3 U" b- r4 q$ o+ n; u
  549.   dwProgramState=AP_NOTHING;
    4 b; w$ Y1 }6 H+ o
  550. / f/ Q) H% _; Z) {( ?9 V' }
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ) ~' z5 R; b3 [4 N2 I) e6 ?1 F6 \

  552. % m  x- U; u6 }4 c/ N  e! F
  553.         // Standard initialization. \/ n/ K/ n2 n6 j
  554.         // If you are not using these features and wish to reduce the size
    $ J0 b- X- P5 `
  555.         //  of your final executable, you should remove from the following% A) V+ H9 P6 P/ s# `0 @: y
  556.         //  the specific initialization routines you do not need.
    * c8 e) z0 D& L& w
  557. 3 N8 `, \% b5 E6 D. }3 `" |" Y
  558. #ifdef _AFXDLL
    * r: h* B7 g6 p) [" P( `
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' C- @2 S& b0 Q& `
  560. #else
    * a6 ^) g, T) i: U/ S
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    1 x, m2 [/ r0 e
  562. #endif. Y$ T4 L8 H1 q7 }7 p
  563. 5 _; p, e0 M  p* [  R8 D+ r
  564.   dlg=new CRevAppDlg;+ _; D& A, s8 c: s
  565.   dlg->Create(IDD_REVAPP_DIALOG);' ~7 d1 Q0 W& R) L
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    * D( g( x9 g' x1 w- l$ v
  567.   m_pMainWnd=dlg;
    " Y0 L. x  c- P  d) [* N
  568. ) T  v8 y. Y/ t
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    0 G" i( h" a6 E) L) G8 H5 u
  570. 4 E. R& ^, h6 S9 F) @! A
  571. //  GdiplusStartupInput gdiplusStartupInput;
    9 j0 F/ l0 i7 ~( F( n
  572. //  ULONG_PTR gdiplusToken;
    / ?4 P  [$ y2 e, z$ m8 A! C9 z/ b
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);: ~; H6 H/ N  I$ G8 x
  574. % n5 y6 s' l2 ~* L5 b  O
  575. //        CRevAppDlg dlg;) W8 N) R/ b, \4 {7 G/ k5 Y. G
  576. //        int nResponse = dlg.DoModal();$ ?0 P1 \% |. u0 M7 f
  577. //        if (nResponse == IDOK)  ~( D) ]. q: P- L5 K- s( |1 Q
  578. //        {
    4 E. w! t" F( a3 f# \8 h, q+ @
  579. //                // TODO: Place code here to handle when the dialog is
    . `  p( F5 J) v1 w: `" j$ j! k
  580. //                //  dismissed with OK
    $ |9 P; C. B  F" l: M+ N  C: s
  581. //        }% {* Q; ~. `9 \
  582. //        else if (nResponse == IDCANCEL)6 `& ?$ ]0 Y: N% M0 o0 x& ]
  583. //        {+ X) W) x2 E! q) i
  584. //                // TODO: Place code here to handle when the dialog is# N% g0 ]$ q# p0 F, K
  585. //                //  dismissed with Cancel: v3 t7 N% l3 b" X( U$ R, T3 K, ?5 l% U
  586. //        }
    # D: D' C. n3 o

  587. ' d* n; y/ t5 y0 J" u
  588.         // Since the dialog has been closed, return FALSE so that we exit the( b1 s5 f0 V& ?: C. k8 K( d
  589.         //  application, rather than start the application's message pump.
    & X. G2 Y1 L0 v) m2 H, w
  590.         return TRUE;0 ^. }8 t% o4 f/ O8 X
  591. }- `  N( U5 S( c# o8 c- t
  592. 6 {/ t* }, s7 E) v0 t; E, N+ I
  593. char *CRevAppApp::strtok3(char *pSource,char *token)6 i% R+ _" b" q' i6 S. v
  594. {* {0 X) s# z8 v' E
  595.   int i;
    ; _2 ]* V: H* Y0 f$ ?9 ^
  596.   char *szRet;9 t# }: _6 f& M0 }2 O+ \
  597. $ c: e! j/ Q- @# d! `  z" V
  598.   if(pSource) { itoken=0; sztoken=pSource; }+ D, w- [. t; w# s$ k
  599.   if(sztoken)2 f4 e2 R: g/ b# x( w( O0 E0 Q
  600.   {
    5 t6 R. _1 a+ R) v
  601.     szRet=&sztoken[itoken];
    ) @2 v1 \6 d7 z7 }0 J
  602.     while(sztoken[itoken])' ~: h! [1 m. ~2 `2 @- O& d
  603.     {3 E3 [1 S1 ^# u9 ]9 F( B
  604.       for(i=0;i<(int)strlen(token);i++)
    . R5 [8 R% h% y- Z
  605.       {  ~4 N- o6 a2 b' F& o
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    9 }4 ?& }, v5 ]7 S; @
  607.         {% w/ o) h% t  x* s  X
  608.           sztoken[itoken++]=0;
    / o2 w7 o1 }- j
  609.           sztoken[itoken++]=0;
    3 u' U) g$ l; y$ U6 w) x# \
  610.           return szRet;- S  U2 |, [; N: n& t) K
  611.         }5 T$ g* E2 w8 k5 b
  612.       }
    " i0 Y) U7 c/ P+ r0 v( p
  613.       itoken++;
    " U) X% @. u, m1 b6 r3 P
  614.     }
    5 r4 I- i# e# f/ o8 a+ \
  615.   }, A% R, q0 C) |! F
  616.   return NULL;
    ! e. u. L  m, P: B# J$ T% h! [
  617. }
    * O4 @4 V2 M7 E6 B7 a2 F) D9 l: @

  618. & u# m1 e+ p" R/ z. u+ l% K% y
  619. void ProcessProc(long Total,long Current)
    ' O/ X* b# _. i/ ~1 W: w7 q
  620. {) ?: R* `6 Q! B, _( b8 S
  621.         MSG msg;
    3 m2 }/ n! @' j9 b8 F  d
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    ; R* `* r6 d5 ~" {0 i2 _
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));8 X% e9 ]! h! S5 }
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)). E, G& ~# C7 Q- t3 z2 o$ q
  625.         {
    ; k2 w7 w( R. y( D1 V6 C3 L
  626.                 if(!GetMessage(&msg,NULL,0,0))
    7 |- B7 ?" R, ?- h( v6 k5 Y/ _0 E
  627.                 {- g3 ?+ C8 d0 B' @7 F7 ]1 X4 O
  628.                         return;8 m3 `# d% Z7 l& `4 K( X6 K7 H7 }
  629.                 }
    $ ^& k4 I& U1 `
  630.                 TranslateMessage(&msg);9 I9 M) y9 g$ b* v
  631.                 DispatchMessage(&msg);
    ! a% G1 f: y* P9 t* @, A# k
  632.         }        6 [! d3 u# r: S4 \
  633. }- o5 x& `0 l5 p9 D1 m# l, b3 }
  634. # R* L0 S! X/ J. Z- B2 {6 Y2 c
  635. BOOL bFirstChar=TRUE;: R7 Q4 t+ w6 L7 |
  636. - |2 y! s' e) r, q& ?: C# {- E( [
  637. BOOL CRevAppApp::OnIdle(LONG lCount)" y5 q2 |9 q; O0 {) P
  638. {7 J$ J3 o% H( `0 j. p' w1 b6 e0 B- b6 r
  639.         // TODO: Add your specialized code here and/or call the base class
    7 ~1 v' Y2 u+ U4 D- @
  640.   switch(dwProgramState)% r0 V( V4 i$ h! `/ u4 g1 x
  641.   {( D' G6 a+ Y! Y% s- j1 Y0 \
  642.   case AP_NOTHING:
    # l# W( W5 L6 y0 C  r# M* Z' V2 {2 p
  643.     switch(dwStartUpSteps)4 r  N0 L- d; G, q) @
  644.     {% y7 }+ @* L! [6 I5 z$ ?
  645.     case 1:" Q5 I* Z) S! w- H: y
  646.       {6 F$ X& ?6 k% a4 [; L' r" @
  647.         int i;; R* y4 i" M) h# }1 c! j
  648.         CDC *pCDC=dlg->GetDC();
    8 J) `2 I# R5 x/ w; i/ c% g
  649.         HDC hdcwnd=pCDC->m_hDC;5 g' M0 ^: l0 a7 b
  650. //        Graphics graphics(hdcwnd);
    ( p  b/ L" b. J9 g" u, X
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    * ?7 c! |# ?! p* }
  652. //        INT iWidth=bitmap.GetWidth();
    1 S; z% J* _9 ^3 ~
  653. //        INT iHeight=bitmap.GetHeight();$ z- x: K, K9 k: J+ ?/ i9 q
  654. //        Color color,colorTemp;% \  T" W3 X4 o" R% H% a9 o
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)) S* K3 f% n5 i4 R7 t% V0 g" ~6 f' v
  656. //        {
    - C/ K4 t, X- K" N# Z
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)5 j0 B$ ]: z" ?, @
  658. //          {9 E8 K& k/ }1 x) _. p0 N
  659. //            bitmap.GetPixel(iColumn,iRow,&color);7 _) |% l3 \6 g2 h3 q( k
  660. //            colorTemp.SetValue(color.MakeARGB(
    ( m* I! [! w! \. ^: G7 m$ }: j5 e: B( Y2 h
  661. //              (BYTE)(255*iColumn/iWidth),
    ; o( v8 x. f  K  }% t
  662. //              color.GetRed()," J; C1 X+ a8 v+ w  r! d$ `/ V  g
  663. //              color.GetGreen(),
    : H+ o' ?: ]- G
  664. //              color.GetBlue()));
    ) J- h' J  M: h1 b) [  d/ {
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    , N5 x" _4 t' I
  666. //          }
    4 f* t+ G4 {9 Z
  667. //        }$ N) `5 J9 U5 d. P6 ~, G& Q
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    . @# q6 F* L. U
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");  N# ~# Y8 Y* v0 a
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    1 @) t6 V1 Y1 S$ Y4 b5 S
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ' x; c/ f8 z5 U; F& Q
  672.         for(i=0;i<240;i+=8). g* Y! H3 K( _3 f: r* \4 @, @! X! |
  673.         {$ ~& t4 o- N" v( t. p  Z
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);4 L  g" s/ A1 z- Y- f
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    " s) }- @4 l$ X' F! v5 M. r
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    : H3 o% T3 F9 i3 C
  677.           Sleep(33);
    . N. N, b8 b' }* d) y
  678.         }4 A$ s8 h7 t. m" e; J. M8 b5 D
  679.         Sleep(1000);+ k7 [, _  G2 G0 K; e) V4 @8 \5 X
  680.         for(i=240;i>0;i-=8)# W, U) b% `: B, @: c4 M
  681.         {3 q2 x# x* Y+ E/ a. c9 v
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , x+ t6 u, c, g; F9 ?
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);; c& S9 V( q5 @$ i0 t3 U
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    . P/ k; d6 l/ L1 \1 ]
  685.           Sleep(33);5 t" |' Z  z4 W+ F4 I4 ^
  686.         }. K, Z/ Z) l1 |8 _; w  a
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    9 h4 l5 I2 o' c+ j9 z1 ]6 h$ L
  688.         dlg->ReleaseDC(pCDC);7 M6 ~, d9 ^6 N$ h/ z+ j2 F* y
  689.         DeleteDC(hdctar);
    # ]- ?% Y6 ]5 `
  690.         DeleteDC(hdcsrc);
    8 q: P, y8 S8 H) S! {1 t( m$ N
  691.         DeleteDC(hdcorg);
    * z: S$ B; U# a
  692.       }
    0 q% Q: d' a0 |
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ; |, P5 l: m  c# I5 \3 K' L
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");! E2 Q# i5 O: g, H8 U
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");& v3 v3 p, R6 e
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");& X# A* a, h8 N3 d
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ( z1 R% ~6 S4 ?6 ~- A1 W. \, {
  698.       if(!Dn.Connected())
    . e. c& w6 C+ |6 o! W. u
  699.       {/ b3 m) l- R" M7 B2 a8 \
  700.         dwTotalFiles=1;
    $ a& r; F- l; Q
  701.         dwDownLoaded=0;2 L, {0 H8 G) [. C
  702.         bSilentStep=TRUE;1 B) `- Y# v3 L* n
  703.         bCompressed=FALSE;
    0 {# }4 k. v5 W* w
  704.         strExtLocal.Empty();8 q# C) X, J" R) X5 p4 Z
  705.         strFullName="readme.txt";
    3 ?( s2 ~! g: C/ _- x$ e8 _% v
  706.         dwProgramState=AP_CONNECT;
    ( s- a- I& J7 @+ Q0 B
  707.       }* t% B( V( L3 |2 Z/ _: Q8 f) C. H0 G
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    8 q# Y% u% [3 @; o5 K% Q7 W! q
  709.       dwStartUpSteps=2;
    , S# R) k! T- t6 f; E+ b/ t
  710.       break;
    # B( V9 F9 |  h
  711.     case 2:
    / T3 O2 P$ }6 T9 ^0 W1 p  w
  712.       {
      F2 d, ], h, \4 w9 |. \' D) Z
  713.         int iEOF;
    ! {" u; V0 P5 H5 L5 i7 ^
  714.         FILE *fp;) P' v% t! D3 l3 X
  715.         char szString[512];- z3 n% X5 B5 P" n; `
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    $ u) j! P( A* ^' ^- O
  717.         if(fp): W7 J1 a) l0 @+ ^5 h0 D
  718.         {  V2 h  D4 E8 A( D( S
  719.           do/ t$ Y# {" B) d( R
  720.           {  I; x( R/ V% o
  721.             iEOF=fscanf(fp,"%s",szString);1 [! A" X" R- t! B4 K2 I
  722.             if(strlen(szString))5 {/ F& h4 `0 |  u' }4 y* n
  723.             {
    - ^0 F  s( s4 ?6 I& J( D3 K/ @4 s
  724.               if(bFirstChar)
    ! ~" y. Q2 j9 w! L+ T* G- [4 K
  725.               {
      ?7 e* j( s# D" j/ x5 k+ _' u
  726.                 bFirstChar=FALSE;
    7 v/ }7 g2 q+ ]/ y
  727.                 bConnectIsBig5=FALSE;
    - x% z2 I# ^9 T* J
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    & u" ~6 N% m* ]1 }4 J9 _2 K
  729.               }
    - P0 l( y% y0 W7 \
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));# [) N* _9 Y3 w
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    2 L) a2 |+ u1 [3 j% ?  b4 v
  732.               dlg->m_ListText.AddString(szString);& y: `* ~* n3 k' r
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . B' X+ i; p  b( ?" Q
  734.               *szString=0;! B, _6 W" r2 V8 s" B3 j9 R
  735.             }  r4 k9 K: O1 B  ]
  736.           } while(iEOF!=EOF);
    ) U* L8 g+ d3 O- w$ I" Q
  737.           fclose(fp);$ g7 ^7 G4 y1 p7 ~- ^: u
  738.           unlink(".\\DownLoad\\readme.txt");) g) Q# v4 A- q# y  n" M8 Y, P9 R
  739.           dwStartUpSteps=3;0 o, S- E1 U- c. J0 K
  740.         }
    ) p' {# v+ ~2 g3 R8 F
  741.       }
    9 D( r- [6 `% N6 M- g+ X, \
  742.       break;
    4 r$ x) C. k6 M; t' v
  743.     case 3:2 _  X  L: o# C6 |: @8 k2 y! e
  744.       if(!Dn.Connected())' Z' L4 h3 j$ B8 W& {
  745.       {
    ( z, h# [2 z& y* _
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);) @# H' F) N- H3 Y$ F1 E3 d/ z" {2 _
  747.         dwTotalFiles=1;
    - K4 H8 X0 y. }. t& r# c0 l) m
  748.         dwDownLoaded=0;
    / ^% H2 K& V) x3 B6 D+ `% O3 q( l
  749.         bSilentStep=TRUE;
    / G3 i. d. Z) S
  750.         bCompressed=FALSE;
    ) p* g( o/ p6 W$ Q
  751.         strExtLocal.Empty();# m2 V: C( V* `) |& S- J
  752.         strFullName="checkversion.txt";. G' {' ~: h' e* X0 O5 b( a
  753.         dwProgramState=AP_CONNECT;
    4 L3 n6 d. ~5 }0 c9 K+ o/ ~; H
  754.       }$ e; d  k5 I2 s% I- Y
  755.       dwStartUpSteps=4;% g+ r7 J/ G3 B. p  @$ i
  756.       break;
    ' D2 h0 N$ X* }$ Z% n
  757.     case 4:9 g3 E1 u6 ^1 c8 x
  758.       {
    # A. e9 Z6 w" Y( C/ ^
  759.         FILE *fp;3 e1 H! m1 m, w! t; _  l+ [2 V
  760.         char szString1[128];9 ^* |, H! ]% m. K7 q$ Y
  761.         char szString2[128];2 I7 u& n. ^* {0 T4 n) z: V# Y
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    . L9 l! J; ?' c4 s; U0 z
  763.         if(fp)% q9 Y: }6 w6 Z$ B
  764.         {1 y7 o) f/ ~6 I  B2 T2 f0 E
  765.           fscanf(fp,"%s",szString1);
    & N1 W" }9 N! B
  766.           fclose(fp);% o, q9 B) L8 y) Q. Z, g' W' E8 C9 k
  767.           fCheckVersion=atof(szString1);: w2 W% }  x+ A5 T
  768.           fp=fopen(".\\checkversion.dat","r");' v( r3 C) ~) R( f) y) q
  769.           if(fp)
    & D) y; ]0 ?' X( G+ K2 ]$ c
  770.           {
    - l+ B. w/ G8 `) f
  771.             fscanf(fp,"%s",szString2);  Z- d7 M% O# J4 _
  772.             fclose(fp);% V9 b) d' ]: B* E3 y
  773.             if(atof(szString1)!=atof(szString2))% ]8 u8 ~/ Y: G6 v# Y. H- H$ {( ~
  774.             {4 F) e( V0 `9 {+ S3 }
  775.               if(!Dn.Connected())
    - P. D* y; n( i# K" \& ]
  776.               {3 P3 h5 x; D. o5 u
  777.                 bFirstUpdate=TRUE;% B7 }" [# L# X" Y. _9 b5 Y7 W- ~
  778.                 dwTotalFiles=1;
    & @( `7 O4 o$ p( p
  779.                 dwDownLoaded=0;
      f# d% q) U  _. r$ e; Q4 V
  780.                 bSilentStep=FALSE;
    ' [( _: S$ W, T2 o. b+ y
  781.                 bCompressed=TRUE;
    5 O/ k9 J; }0 r% q
  782.                 strExtLocal=".\\DownLoad\";( l7 @" h8 Z  z2 W, x7 i* ?8 [
  783.                 strFullName="update.txt";" V5 i; W1 U' M
  784.                 dwProgramState=AP_CONNECT;, @) [& Y# J5 h# U  v
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / T  A/ u. \7 t( o2 E& J, A
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ; q: C  b) y) c7 |8 b8 o7 w( R9 J
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");/ A: D9 W! l! ?* h- ]
  788. 4 E5 X9 S: T" G# L# W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * B2 L+ b- m2 u9 Q# Q. N% n: P
  790.                 unlink(".\\DownLoad\\checkversion.txt");' ?* Y" C" y: e  q4 X/ I
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)4 ?, h7 D* y' q% \2 m7 _
  792.                 {9 ^) Z  z6 V! K, f- Z1 }- z
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    7 W5 W; O' W) d
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");0 n8 P5 _6 F7 d. Z3 N
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    : i& s  p% l! v. Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ s' e7 M6 I6 q  D$ j$ c
  797. 6 V4 T  Q. p: r
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ( L# ^$ b6 v$ D7 t$ ^( p
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    " b$ M% C  }( i; O* s' |1 ^
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");& d* [: Q, y, q, V2 v
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 `0 s1 o5 G+ K* f
  802.                 }- u4 b$ }; l" e  @  [# u; L9 j! q
  803.                 dwStartUpSteps=5;
    " o( j8 z& v8 S3 X4 c7 k
  804.               }
    * a% _" J/ o, [. {; D7 r$ u! u( S5 ]
  805.             }
    5 d. h) k5 N, Y, K/ P$ E8 V+ e
  806.             else* N- u9 S, ?! Z3 n3 S
  807.             {6 z1 L9 b9 c  A* J
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! Z5 T( a# {" q  S  P, k
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) g$ J7 B" h, ]( l, m
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");8 C! o% p; r5 E
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    , O$ x6 Y3 o, \' I

  812. 4 t9 [* D0 [6 p  W4 q/ J/ D" X
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# p" l7 N& ]: |' J9 s8 r0 ^
  814.               dwStartUpSteps=99;
    ! R! ~3 `2 _- p
  815.               bFinishUpdated=TRUE;; h2 T  J: j/ F
  816.               bCanUpdate=TRUE;
      \/ z& \4 U' r4 Y, v/ ^! G2 Z8 p
  817.             }
    9 ?/ }# Q+ P' D
  818.           }; _: M1 H( W2 T' b9 z2 H2 T
  819.           else
    ) V, R/ ~5 E; d" C( @1 i4 `& b. K
  820.           {
    5 }# P: n( u4 n8 L  I/ k
  821.             if(!Dn.Connected())
    " y! |- |+ x) ]0 Z
  822.             {9 ^$ F2 u, l9 z3 ^8 H9 x3 ^* N& ~
  823.               bFirstUpdate=TRUE;
    3 u* |9 K3 l* }' a5 d$ `
  824.               dwTotalFiles=1;" \9 n7 _4 X3 q
  825.               dwDownLoaded=0;
    5 B# S" g9 v, J) k! n+ u+ W
  826.               bSilentStep=FALSE;4 |5 J" t% J  u
  827.               bCompressed=TRUE;; W3 f/ j8 ^/ \
  828.               strExtLocal=".\\DownLoad\";$ ~( G4 V: D3 a1 m% |* d
  829.               strFullName="update.txt";
    ( A6 V0 o+ U' E/ X: H
  830.               dwProgramState=AP_CONNECT;
    - u  `. L" m. f; b8 G
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");% ~% u- y, Z2 p; H) R
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 ~7 S- H2 P/ \9 O1 G
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");/ q; S, Z3 r8 W1 p3 G
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);# `8 ^- Q0 D7 W# V' H' P2 ?
  835.               unlink(".\\DownLoad\\checkversion.txt");
    0 G+ _$ x" a$ i( ]+ |! {9 w
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)6 H) y1 [4 o  q6 \3 d2 M
  837.               {
    ' s, A7 M  x9 ~4 L! T
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    2 z* z  R3 l) y
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");2 u! C. r/ l8 P/ \) b$ U
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");: z7 R6 ?* {% o  A4 P
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    + K) m% e) d, K, Q* H
  842.                
    , K, c+ P% V7 ]! M# v; Z$ Z
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");+ g, i# h: R' W8 A4 F1 p3 S- Q
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ; h0 j, o' s$ ^
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    6 D( E6 q) r/ F1 }
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);% _1 b1 J; L0 r$ x  H: R$ U+ W
  847.               }
    1 \$ |4 Y" s' W4 }, Y* w7 L
  848.               dwStartUpSteps=5;
    ( Y- l2 b/ [( r4 L1 R8 k
  849.             }# d0 E" B1 D/ C7 H/ i0 T; d" p
  850.           }
    * X, L6 R5 L2 F" Q1 @# M
  851.         }
    4 k5 S; W/ b% ]
  852.         else
    4 v* q, \& X  R7 W4 m: ]4 C
  853.         {
    0 t$ {0 g4 V; S7 C6 \) {4 t! _# c, s
  854.           dwStartUpSteps=3;
    # Z/ m) }" F& o5 c. D; s
  855.         }
    ; b8 ?7 l; a9 H. g/ C
  856.       }
    ; w# A) l2 x5 G& ?- W. Y  ~
  857.       break;
    + N8 q; n1 U; C
  858.     case 5:' l4 ]/ _6 W: |5 [- p, O6 T/ {
  859.       {! N0 E" O( ], w2 z8 [3 p
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)& w, v- u0 u+ H# `$ D# a5 x  B- V
  861.         {& }; Z2 x8 a- g' I( ?3 }: ?
  862.           int opt_overwrite=1;
    3 ]( a! o( ^" z/ E
  863.           int opt_do_extract_withoutpath=0;" X- f- |% @, F9 |1 z0 `
  864.           unzFile uf=NULL;
    ; B- I9 v, F2 ~$ F, N% h9 p  g

  865. 5 A" {- u3 g1 b% d5 H# b
  866.           uf=unzOpen("Wsa.zip");
    $ v2 }5 }" P" O% J& B9 e$ w
  867.           if(uf)* T/ K9 }( g1 z0 C
  868.           {8 Y- S1 t6 S' h5 H& [7 \3 G3 ^
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    ! p  l% g+ t! X, p7 h; r) L9 K
  870.             unzClose(uf);
    ( r) m8 m# `' c8 L
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");8 l6 u+ r; ^! Z6 f7 n& ?
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");: ?! v8 ?: I: A  p1 e$ h
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");! Q' Q2 d+ a, I7 Y3 v
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 k. D3 B) D/ J0 T
  875.           }
    ; ]7 y$ q6 c8 }2 m/ E3 N# B
  876.           DeleteFile("Wsa.zip" );
    - ?0 e2 d3 U& q: j' P! N
  877.         }
    2 i. Q5 y: \5 |5 C8 ^" a% ~) D
  878. 0 ]- r* F* n  a( n1 g
  879.         if(CheckLocalVersion())# A0 @3 S% _2 @+ t
  880.         {
    ! ?4 r& b. j8 K& z
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");5 i1 X/ C9 D% f& R7 _9 ?) A7 N1 `
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    7 x! ]# {* K1 p% |
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");
    : f! U! z: {1 U+ E2 Z9 ~* q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % q6 t- l3 d) c( {* Y( b: ]
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);4 V& h$ P9 }$ K' t$ M" W
  886.           dwStartUpSteps=99;
    ) B% i2 D3 o. G' ^( ^1 t8 |& R
  887.         }
    8 a" A" }  J: `- }
  888.         else/ I" P0 ^' ^, M7 t% W! b7 |/ Y
  889.         {, i0 X! v* B- i8 P2 e5 e
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ' y# e- D1 G) Z
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");$ N& W/ {0 V" O. c: p
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    & G- q( r6 n  x8 n- A$ Z

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

' x" T0 w* W$ V7 P
6 _9 p) o4 v% |+ @

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

关注公众号

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

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

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