找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
( D4 v$ \5 b' r& i0 z# _1 f
  1. / RevApp.cpp : Defines the class behaviors for the application.2 n5 [+ k! s7 W: X* p( ]8 C
  2. //! @7 ~! M2 I/ r6 _% `# _

  3. $ {) i" q! C5 A: P$ N
  4. #include "stdafx.h", J( y( d1 c! g

  5. / B6 c7 m( y. j2 v- Y6 V
  6. //#define UNICODE. i# o9 j) b% L1 b: ?# A
  7. //#include <gdiplus.h># K0 n; d$ _% [7 a/ T
  8. //using namespace Gdiplus;/ Y8 i+ [  w; m4 y

  9. 7 g$ W; E* @- O* E0 t# V* h
  10. #include "RevApp.h"
    , V5 U7 k. n3 c5 h, y1 `) K1 I
  11. #include "RevAppDlg.h"
    ; k% f/ m* X; u1 s1 s8 P- a
  12. ( B+ T0 X# c' x/ W
  13. #pragma warning(disable:4786)4 Z6 U6 l  d, Y
  14. #include <map>1 v% b" p% C1 y2 ?6 Z
  15. #include <list>
    % d' J* p2 e) b2 C+ N& h
  16. #include <direct.h>
    - N; F/ g7 t! y9 [

  17. 6 q+ O5 C* z$ X8 v. d3 G6 j9 J
  18. #ifdef _DEBUG# U8 I! u  W. x; t/ h  o7 o
  19. #define new DEBUG_NEW
    0 g. G6 w$ [2 K, }
  20. #undef THIS_FILE. Z5 A, n9 B7 R9 n* V" e$ _+ o
  21. static char THIS_FILE[] = __FILE__;
    - t8 ~2 N( @3 j3 Y  b7 ^6 j, Y
  22. #endif
    / r! d* x! ^# |: g
  23. #include "SkinResDef.h"6 |0 t' \$ s& Z' ]  z
  24. #include "ChangeBG.h"9 J* R) b8 l6 F7 o7 A% u' R, u
  25. #include "AFXINET.H"
    6 M- C1 ]& c5 c, a3 A
  26. ) J+ S+ T$ y$ Y. \  J1 x" D
  27. #define TRADITIONAL_CHINESE 07 P6 A4 g! J" t: k( P; L1 A! M$ o$ o2 D
  28. #define SIMPLIFY_CHINESE 1: p9 ?, Z( n1 A4 j7 [- c" ^
  29. #define ENGLISH 2
    , i" `  b# F) B& a) |0 Z( ]
  30. int m_iLanguage = ENGLISH;
    8 Z) ]1 B$ c2 z+ n% ~
  31. /////////////////////////////////////////////////////////////////////////////
    " n& ?1 O5 }! U. U# R
  32. // CRevAppApp
    7 o2 w: M3 Q1 T4 s; m

  33. ; R: b% ^3 s$ ~2 b
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    , d6 Z& n5 q. N1 Y" y
  35.         //{{AFX_MSG_MAP(CRevAppApp)' u+ M7 N( Y# m# y' }7 F7 Y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ; Y+ M/ C5 r# k$ V" K
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    1 P6 C) Q" |9 D/ M% V2 T7 s
  38.         //}}AFX_MSG( s3 P' R# ]# I7 c  G6 \
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)) N& C3 V. }; ~4 ~0 }$ B  k  X
  40. END_MESSAGE_MAP(), j' ]9 H  a* n7 t: I- F9 v  k4 u

  41. - h3 J, j% t8 L. O1 \4 n9 d
  42. /////////////////////////////////////////////////////////////////////////////
    + U! E. J/ D) p" |! Q2 Z) T
  43. // CRevAppApp construction
    # S7 C- a' ^3 B  T4 c
  44. & H0 R% q, y, d6 }
  45. CRevAppApp::CRevAppApp()) [1 `/ M9 ^* _4 J; W4 W
  46. {' J! f" P1 h- Y9 B( m( Z6 H
  47.         // TODO: add construction code here,
    3 P1 u" {5 k3 \1 c, ]# R
  48.         // Place all significant initialization in InitInstance5 _* S7 l: N2 l1 g9 b1 L2 G' m
  49.   bDisplayIsBig5=FALSE;
    0 j# v! r9 k; G# B) u$ x8 n) s
  50.   bRestartUpdater=FALSE;. H$ o, N. o7 h& L% I
  51.   bFinishUpdated=FALSE;
    % ?+ I5 X; j8 N- m4 p" s) x
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    & O; x$ E; t  x- q* E6 X
  53.   InitChangeDataBig52GBKS();
    + P8 [; B4 F  j& U
  54.   InitChangeDataGBKS2Big5();
    * _: S# }! I& ^' ~
  55.         //
    $ X1 o' l) g& l) h
  56.         bClickRunExe = FALSE;* C( K3 [5 n' R! A+ X9 \
  57.         //
    / b/ ]% z5 J. S1 m3 P& o: ~( H8 o! c
  58. }! C- \( e# B4 J* |8 T

  59. ' Z' N# P0 v: m+ x7 q# c; I
  60. CRevAppApp::~CRevAppApp()5 i6 y1 L- v6 {" B8 E- L5 F' @
  61. {
    ! u* u& i% l5 {6 ]
  62.         // TODO: add construction code here,8 m0 _- q5 _5 h  G, R
  63.         // Place all significant initialization in InitInstance
    : N; W+ ]3 y  ^5 ^+ d/ _4 A$ s( j
  64.   EndChangeData();( A& s! N" y$ {
  65. }
    ' V2 f( H6 e9 u. |! `  h

  66. , r$ d9 @2 z7 q$ b5 s7 Z
  67. /////////////////////////////////////////////////////////////////////////////$ Y1 U6 m6 Z+ @
  68. // The one and only CRevAppApp object
    8 x! U* _+ `! w3 s# ]# z! |
  69. + L; a' K. @6 `7 {0 l+ F) V
  70. CRevAppApp theApp;$ }2 |- S- [! I0 _

  71. # q# i$ D9 D9 N2 t+ l! L3 @. C
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % o3 [9 W% {8 o( L
  73. {
    7 j1 t3 k. t9 ?) U5 [
  74.   int iEOF=0;
    4 k2 d6 }: i$ w# M, h& q
  75.   char szTempName[MAX_PATH];" g, u6 P# a/ r
  76.   *szFileName=0;0 P- e* D7 F+ g
  77.   iEOF=fscanf(fp,"%s",szTempName);
    8 ]$ Q" Z* V. V& k6 a
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 \7 G& k# F3 h- r! X  n
  79.   {
    2 N. N. j0 r) B, O
  80.     strcpy(szFileName,&szTempName[1]);2 }8 m7 {7 ^$ Z9 Y. W3 W; P
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)1 l' S2 j, w2 `7 X% G) C& g1 l
  82.     {
    $ o1 t! {7 O6 Z' h
  83.       iEOF=fscanf(fp,"%s",szTempName);
    3 P& C8 A4 U/ o5 O' D
  84.       strcat(szFileName," ");" s: C' |6 y- }8 m4 _0 V' B
  85.       strcat(szFileName,szTempName);
    * U9 R" _( F: u: E; X  |0 l0 Y
  86.     }
    : d$ f% N) I, t  T) ~) V
  87.     if(strlen(szFileName)>=1)
    ' x! t2 @( k- H* q$ k
  88.     {
    ! r3 w' t0 L6 b
  89.       szFileName[strlen(szFileName)-1]=0;: E( O  Y0 g  ^4 _' B
  90.     }
    6 g, u1 K8 ]% p( r4 k' D8 W4 Q: ]1 r
  91.   }
    5 e% \9 S# ]% p+ B
  92.   return szFileName;( G2 Z. n" X, t
  93. }
    . ]5 `! J+ z6 i+ Q8 ]5 d+ L& b

  94. # P) H8 {$ P0 d) e% D! F  F
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)! |/ O) p( {9 S; p# y
  96. {
    ) b% C* O6 n$ `3 [* {; f/ f
  97.   FILE *fp;
    ! \' M: w. w3 o+ t8 `4 h0 K
  98.   char *key=NULL;; `, d9 J- ?; l
  99.   char version[MAX_PATH];
    5 g4 m/ h1 H8 @  p9 @( D9 _
  100.   LPUPDATEFILE file,olds;
    : O9 M8 v6 I1 `# I
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    $ R! n5 \" ~1 j. }. p5 f

  102. / J6 j$ @& S' P% v5 z
  103.   UpdateList.clear();" q/ u, C9 C* h) c) k/ O
  104.   UpdateFile.clear();
    + e! w: x& f) ]4 t! N. [8 n6 D. C
  105.   if(GetFileAttributes(filename)==-1) return false;
    8 z+ L0 `" i; J- @! V/ n
  106.   if(!(fp=fopen(filename,"r"))) return false;* H! o, E9 u0 l; w5 k( U: e
  107.   fscanf(fp,"%s",version);' U- n. f; P! u+ z
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }# z1 m" I/ f2 Z4 _1 @
  109.   while(fscanf(fp,"%s",version)!=EOF)5 G, @0 V9 Z9 w; y+ d8 M% K5 X) Y, c1 n) b
  110.   {+ P! w) }. F+ h. P
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));: N. P) U' A) M
  112.     fscanf(fp,"%s",file->path);$ x2 x* H) w. O+ c7 c( k
  113.     ReadFileNames(fp,file->file);/ m3 c8 T3 V) @+ k! S) o3 r. q
  114.     strcpy(file->full,".");. f5 w& K* v* W  ^4 L% u4 r" H
  115.     strcat(file->full,file->path);
    $ h1 n" H/ A& q
  116.     strcat(file->full,file->file);
    5 |4 |% `3 f4 ]! _/ M
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    3 f' b+ E' B8 P, F5 o- M0 ^/ q; E! b
  118.     {" ]* |6 `6 i' m
  119.       file->vers=(float)atof(version);; N. ]' D5 D! [1 ?8 k/ h5 [# M6 G
  120.       UpdateList.push_back(file->full);
    * Q' ?2 l* O1 b
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    1 R! ]6 s* W; b' l6 j$ F" {0 o6 \
  122.     }
    , ^0 ~3 S" Y( q8 P1 T
  123.     else
    7 l1 l$ c: }% X8 G7 p
  124.     {
    , n  K- p2 P- H0 c2 [
  125.       olds=(*p).second;. i6 o; h; f% C5 F
  126.       if(olds->vers<(float)atof(version))% J" V! C2 T4 n, n
  127.       {
    ) }2 e1 h: n  o- u/ t
  128.         olds->vers=(float)atof(version);
    4 C" u* k' V+ Y: y+ B& \5 a
  129.       }* M% n+ J2 e0 U/ M* f  t0 g
  130.       free(file);
    0 e( ]. F+ i5 s+ h8 i& T% `9 E; H& j
  131.     }
    9 @) Q3 s2 _$ d/ d/ u
  132.   }
    ; X9 y7 l9 F4 a% i
  133.   fclose(fp);
    / ]* C$ J7 O" x, t1 q
  134.   return true;
    ( [" s& F9 v+ T. t5 `, p( H7 v
  135. }1 U8 v. T! r. O# U" ?3 U, r7 ^

  136. 9 _" Q2 m6 B" h0 }& ~4 Q3 w* u  p
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)' m4 b+ C- Q) r' v6 k1 _5 N% c
  138. {
    0 }# e0 g5 b1 \( O( e
  139.   TCHAR  szFull[MAX_PATH];
    ! Q5 t$ E6 c( F1 ], i1 P& ]
  140.   TCHAR *token,*inter;
    1 W( R. R. {8 _* Q- b; F
  141.   *szPath=0;
    " `* Y" N! I9 {* C' B" B8 v
  142.   strcpy(szFull,szFullPath);$ o2 p9 s% d  i/ B
  143.   token=strtok(szFull,"\\/");
    ) u  N" f% [: ?3 d$ N
  144.   inter=token;9 b4 `/ _3 m. q# k. }, A4 _7 n
  145.   while(token=strtok(NULL,"\\/"))
    : P0 U3 o* g- K/ P
  146.   {" G$ m1 _/ W, t: h& l5 k
  147.     strcat(szPath,inter);# S$ K# c* X$ S# E
  148.     strcat(szPath,"\");( @, `: p* K8 G5 T! h/ `0 _; N
  149.     inter=token;) b2 k7 ^$ X" p. L7 R( X3 Y/ J7 O
  150.   }" e# y2 D( c2 _
  151.   return strlen(szPath);
    & p. g/ c- Y+ `# O7 i% \5 V+ F! Z
  152. }
    7 g& P* c0 ~( p7 X

  153. ; Z% B5 I+ ?3 U* b% z
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)$ h5 C! t1 s( Y% r
  155. {& M1 A4 K$ K; E3 W
  156.   DWORD attrib=GetFileAttributes(Target);
    4 T2 G9 a- P  A! C6 }  f, l
  157.   if(attrib!=-1)( J- e! ~6 {6 `/ B2 L6 S
  158.   {
    5 _' p5 ^( \0 v; r# S
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    , n! D/ m. s' o% A8 `: b
  160.     {+ M  t" y) F' I6 w( ?
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);! f3 o6 z% V( F' f: k+ m3 d
  162.       SetFileAttributes(Target,attrib);! c" u4 R3 a. f0 `5 x
  163.     }3 m/ X% x# e$ @2 `( s- x
  164.   }
    ( \( u8 e1 h# }: Y+ Y
  165.   CopyFile(Source,Target,Erase);
    2 k: n. @- `/ D9 p" S
  166. }8 [/ z4 g" ]$ K0 K* a

  167. . k" P% ?  @3 e! u! m- V- f
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)9 J. x2 I1 S3 L* F6 \8 z8 ^1 L6 H
  169. {
    9 X/ Q5 Z! a. {! ~6 F
  170.      FILE *fp;& m5 `! f" h0 u: o
  171.      char  szBuffer[8192];
      s; s; a3 X0 k8 b: }* U7 p
  172.   va_list  argptr;* C" f+ W6 w) \( j2 U, K0 k# K: S

  173. # W& X, }6 g- p# }1 s4 e  L
  174.         va_start(argptr,message);
    - A& r3 F- s& g  I$ Z9 I# i7 K* u
  175.         vsprintf(szBuffer,message,argptr);! Z  ~6 Q" a, w9 y# E
  176.         va_end(argptr);
    & n1 S6 A3 ^' Z. D
  177.   fp=fopen(FileName,"a");
    8 V! s" m" G/ e$ G$ ~4 B  f9 }
  178.   if(fp)
    - K6 ^! f2 e0 a2 I7 D" ]' [  f! P
  179.   {. k% Q4 V* O$ W( p/ @
  180.     fprintf(fp,szBuffer);
    5 L$ l# R* G. |1 L, t
  181.     fclose(fp);" w" Y7 K& R0 F1 U
  182.           _flushall();1 v) O$ W5 A5 ]- l/ @- F$ h
  183.   }( t4 C( U& f6 p1 b% T, j$ T
  184. }! t: r( `  N8 _0 X/ G: G* [3 K
  185. - r* ?% _+ ?# @
  186. BOOL CRevAppApp::Fclearf(char *FileName)1 T1 A+ O) j- Q5 J( j  K
  187. {
    $ R9 B& G, g; v
  188.      FILE *fp;
    & n2 g6 o5 H  e- ^0 u' F! I
  189.     DWORD  attrib;4 N- H: n' \! Y, O) E4 p
  190.   attrib=GetFileAttributes(FileName);5 k3 C6 s5 [2 V# h) t5 _% \
  191.   if(attrib!=-1)
    ' S/ J0 e! j$ d# {# o" Z* s
  192.   {  c3 B$ t% \: V) M
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);- H6 B1 |$ ?* H& n$ I
  194.     if(!SetFileAttributes(FileName,attrib))
    5 I! O  P0 w* x
  195.     {+ c8 d( R$ }* u3 O0 o  F6 B$ w" g
  196.       return FALSE;* y) k4 M* T" |. q3 n8 M
  197.     }
    , U4 p1 p7 v. g0 m- J
  198.   }
    # j: r% T6 P% f8 _
  199.   fp=fopen(FileName,"wb");5 ^3 z# W( W, Q1 A$ q5 ^: S
  200.   if(fp); r, m# |, {8 D) y: W
  201.   {
    ) C* K5 Z3 A# N4 {
  202.     fclose(fp);4 N4 s5 O: M3 Z" S! x
  203.   }. R6 b& j& O! O9 ]
  204.   return TRUE;* ]4 @5 Z8 K3 t9 T0 X$ {( N6 J! g
  205. }/ [, o4 K2 k5 @% s4 ?! K

  206. ' \2 V4 }6 ]) M* `2 [; u4 ]1 v
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    4 I; O$ R/ F6 x1 w' I" l9 }
  208. {
    0 `! |& O& z$ u& e( y
  209.   char filename[MAX_PATH];/ B6 T+ p3 s; W
  210.   LPUPDATEFILE file,olds;
    - c- T7 {0 ^  H
  211.   std::map<int,CString>::iterator i;
    : o! }: ]4 P# J& [# t5 A
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    & `, g* F# Q+ Z: f" ]& i0 \: `( A9 Q
  213.   std::list<CString>::iterator l;
    " ]; d' G3 Q; i' C

  214. 6 Q# W" j+ s4 X; O; i1 P
  215.   if(bFirstUpdate)
    9 z( ^8 T* d) f2 N$ W
  216.   {
    & f1 k: I! {1 a" D- g( P
  217.     dwCurrFile=0;: k0 |; C5 ?0 w; z7 G
  218.     bFirstUpdate=FALSE;
    7 X# _3 Z. }+ J2 X8 U4 w/ |
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())6 G( E+ E& O( F9 g# @1 Q7 ]
  220.     {$ E+ B. ]+ j' i- T+ F0 c
  221.       dwTotalFiles=UpdateLocal.size();
    ; c3 i8 u7 `8 a4 n2 c( x
  222.       dwDownLoaded=0;: L+ Q" \! L6 L" ^
  223.       bSilentStep=FALSE;
    / f  M9 F# w4 {4 P
  224.       bCompressed=TRUE;
    2 y$ q  X- o' P+ V# B
  225.       strExtLocal.Empty();* f2 y. f+ z$ l0 G; F1 X
  226.       strFullName=(*i).second;% s% m' B: N6 N( e: x
  227.       dwProgramState=AP_CONNECT;
    0 D0 Z* T' r5 I: U8 K5 g3 m$ e' R9 d
  228.       return TRUE;
    ; f' K! i6 D7 q* v6 E0 U
  229.     }
    8 `. o5 `; _* ~6 C! \" w0 \
  230.   }) q( H7 Y; J$ f7 k2 H
  231.   else if(bRestartUpdater==FALSE)+ [. i  T& }0 P; h- h$ t: }
  232.   {
    , K$ T" W  Y, U. e- V6 J
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())1 n3 n3 T! ]& Q' h8 M! N: a( ~5 s
  234.     {
    - z+ e! o6 s( t7 j; k! ~6 T
  235.       file=(*p).second;3 V6 T% z! _) G  `
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end()): q/ x9 F% L9 e0 k. Z. t
  237.       {% R$ O- J; L8 J8 I( q! n
  238.         olds=(*p).second;6 ~, S2 \8 q& K( }% ~
  239.         olds->vers=file->vers;/ R- m) Z6 L  |$ j" _( j
  240.       }
    ) ^0 X3 [9 m7 f" Y" A! X1 X2 E
  241.       else
    . v# ?' s& X8 B/ F" A
  242.       {
    & w7 }" Q2 E  H
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ `' ?$ ~" z" [' B3 m# S
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    ) m- E; B: h" O' ^6 k: F1 i
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));) J$ ?* S% E3 S" `. f! F. ?4 R
  246.       }
    & F) A& k$ ~/ _
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    % g$ f9 \. G/ g
  248.       sprintf(filename,"(%s)",file->file);
    / ~# r/ E/ Z0 p& T( q- j
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - {  O. t( z: a+ Q' F7 A/ S$ [7 o/ |
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }" P" W, L+ K( y0 ?+ O% k. c$ F
  251.     }
    6 G* p5 _3 ?6 v$ b8 L
  252.     dwCurrFile++;9 I6 U3 [7 l" j: `& z
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + [6 s- \5 m' z7 [
  254.     {
    2 `. Z6 v8 f$ a5 _9 h# r. H+ _
  255.       bSilentStep=FALSE;
    9 F. |( W/ H4 ?& ?, d  s
  256.       bCompressed=TRUE;
    " C. @' Q" W: K& Z" p  W4 e- G
  257.       strExtLocal.Empty();
    + ]& T) [+ @# ]! J, N
  258.       strFullName=(*i).second;
    1 f4 w7 `% R( A& }: f
  259.       dwProgramState=AP_CONNECT;) n! H' ^. M' k; x$ w
  260.       return TRUE;6 A( }8 p! }; n5 m$ M; e2 v  ]
  261.     }
    2 v3 {( k2 D/ [) b. `" I; l
  262.     if(!bRestartUpdater)
    3 M0 t/ R0 u# Y  J/ R" q
  263.     {: H9 q; y9 j9 c/ g- H( c4 E
  264.       int iCurrSize,iFileSize;; S5 V/ w! Q3 Q9 A" h  U6 x
  265.       iCurrSize=0;
    4 J$ V. z/ e: \9 F7 o
  266.       iFileSize=UpdateList2.size();
    , h$ \5 |. ^9 j5 P) I/ Y
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    : `0 Z( O2 C# ]$ x  o: P4 y% R
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    * _& T' ~" G8 Z/ E& u
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");0 O) R% F/ G+ C
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      G! i3 Y- G7 k! Z; F
  271.       Fclearf(".\\update.dat");
    / I3 B$ S" o1 ]  s" C+ {
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    0 n, s  F7 h* L5 m8 k" `: m
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)" ?" n( U% g9 T& ~  Z& q: f# o
  274.       {
    - S. R) a+ G% w" ^! p
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())/ W5 f0 A4 h% S/ g" Q. D
  276.         {- p$ k! a4 J, [
  277.           file=(*p).second;
    7 B3 `" C! a3 w9 M
  278.           sprintf(filename,"(%s)",file->file);
    / R# T: r2 \2 K# H( a+ h& k
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    - F4 s1 \0 q6 K4 j% y! ~$ j& R
  280.           iCurrSize++;
    # V& Y/ b8 Y; Z: @1 H9 f
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    ; l; t/ T7 P: a0 W% o0 S- x
  282.         }" y5 g9 D1 x5 K, h- o% f) Y) A
  283.       }- `- ]' D" F" e( i. @
  284.       unlink(".\\update.txt");
    / X% M1 u/ G" f' _, p1 c9 K* K4 N
  285.       unlink(".\\update.tmp");
    1 n) c# R2 \+ Q
  286.       Fclearf(".\\checkversion.dat");
    - M6 G" l4 U9 Z7 f+ X7 W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);$ G# t% t) U  Z+ R$ l, |+ _3 ?
  288.       if(UpdateLocal.size())
    0 [. g2 w6 q$ [- Q3 b
  289.       {
    : s$ e, k: H2 Q1 p) v8 B1 a- q
  290.         UpdateLocal.clear();
    6 K3 p  B" }9 J7 u/ V2 o; u$ c  [4 y
  291.       }
    3 A6 \: Z6 l2 r9 ~2 G
  292.       if(UpdateFile3.size())
    2 j( v5 M1 E" \0 T
  293.       {
    ( V. ]9 L. g' g3 G5 b, T
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    6 d( c/ F! _) {0 f: f0 _  |! V
  295.         {: G4 M. s$ n% m
  296.           file=(*p).second;
    $ W5 z# H! n+ b$ E7 n
  297.           free(file);
    , V) R3 Q# ^6 H3 H6 j- {
  298.         }& A' U6 k; G8 ~0 f/ h! |  H
  299.         UpdateFile3.clear();. Q0 f* x) A2 ]% @) |* g7 y2 L
  300.         UpdateList3.clear();
    ! F0 k" W9 e$ ^/ E" \& ~
  301.       }
    ' k6 h( i6 e4 ]0 ~3 f* q
  302.       if(UpdateFile2.size())' c" m  \+ \  L' v7 |
  303.       {
    + l, ]5 R1 ^8 ]: k0 i. `
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ' N/ m7 e% _# a
  305.         {  Z8 T. o* X7 `3 g
  306.           file=(*p).second;3 f& {& M: w9 _% J8 l; M7 }
  307.           free(file);. J( k8 c- }% x
  308.         }- Z! F, ^- r& v3 ^/ ?( B. g% }
  309.         UpdateFile2.clear();
    . }0 J2 g; V% g; }2 ^' K  ?3 H
  310.         UpdateList2.clear();( T( T# q4 t% b
  311.       }5 @3 k/ T/ L, d, B
  312.       if(UpdateFile1.size())1 Z: J: Q' D$ M* l
  313.       {
    / y6 |* e  R- P, X7 E
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)& N( Z9 l$ B( f2 q1 D2 @+ g3 [
  315.         {( b! c* N+ i# z0 f+ m
  316.           file=(*p).second;9 j5 f/ v% q( \" T+ G" V8 G
  317.           free(file);
    2 l7 p* `! K* s; r
  318.         }* H/ x8 }4 y" V4 v
  319.         UpdateFile1.clear();
      q/ ]8 @& J# y
  320.         UpdateList1.clear();
    $ x9 J& f* |3 h
  321.       }  _. C: D! N, B7 c; T8 ]
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));5 g, a" J5 S7 o0 {  R* B
  323.     }  h2 D2 l4 d. A' O
  324.   }
    : V% `/ Z; V; J) `
  325.   return FALSE;
    * n3 K: }4 K3 K3 W
  326. }" R/ |' e1 W$ }

  327. + a& N# s' \* x
  328. void CRevAppApp::ClearAll(void)
      E& x5 Q* o/ M8 K
  329. {
    / \- {+ h$ O% Z! P# F
  330.   LPUPDATEFILE file;
    1 J1 ^: G# x0 z& D1 |
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 A9 ~5 j  A: [; _( z
  332. 3 a; k# T( ~5 t9 z! ~2 K. J5 m  t4 ?
  333.   if(UpdateLocal.size())
    1 J5 x3 u* X5 H. O7 B/ W
  334.   {- r, s8 z  o4 G0 z% x
  335.     UpdateLocal.clear();3 g  `% I: T; W% C
  336.   }, J# c0 u' P8 X
  337.   if(UpdateFile3.size())
    * z1 M: R8 ^% y# F
  338.   {
    * P4 _5 C  T: w4 q6 V( E
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    , y) k" D5 d! o$ P0 q
  340.     {
    ' A7 |! E- {: h
  341.       file=(*p).second;/ a2 D1 M" F$ G+ L7 O) Z1 b
  342.       free(file);) w1 R7 u' I" A' T2 D8 P
  343.     }
    " |. o* U! T" w+ U0 k/ Z7 t
  344.     UpdateFile3.clear();
    ' B6 O6 }& b0 c! z3 c
  345.     UpdateList3.clear();* s7 P7 X6 M9 [7 Y
  346.   }
    5 U6 ^. g, R; a7 j4 d" L( i
  347.   if(UpdateFile2.size()). x! p, E% E; q/ h2 _
  348.   {+ }4 j" n* M5 Z7 D
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    $ m+ `/ m* r6 T- ?- v" K/ n' V
  350.     {
    : P- G" ?( F7 h3 T3 ^# n) h  P
  351.       file=(*p).second;3 h, d3 h' n2 s; O4 r
  352.       free(file);
    ; n* n" V3 X/ ?% w+ _
  353.     }
    1 k" \8 m, g4 _* p5 m. P
  354.     UpdateFile2.clear();
    , G% n7 Z+ C; g& z: `
  355.     UpdateList2.clear();0 \# H9 O7 k) b; b& e) w
  356.   }& _, C+ u4 f- D  c1 e
  357.   if(UpdateFile1.size())! |' I' V$ ]! H5 s# I
  358.   {9 S: D' D# d  r
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 Q2 z  f$ a. N: k5 X$ h* O
  360.     {9 E, _0 `( D4 c, w( K( Q% l
  361.       file=(*p).second;: S5 r) O  a1 x7 ?) C' ~8 ^
  362.       free(file);' [! L4 G+ g7 L
  363.     }+ V9 ~& \  `9 |# q4 h
  364.     UpdateFile1.clear();; g- `) [/ m, K
  365.     UpdateList1.clear();" l# Z4 Z, Q# f2 `
  366.   }5 S: c5 S& [. l
  367. }  
    7 d, E8 j% n2 S) K7 X- K
  368.   
    6 C+ t  o8 \6 M% Y! o
  369. BOOL CRevAppApp::CheckLocalVersion(void)1 i5 y) [9 {5 ^9 C
  370. {
    0 C% q6 S% K% m5 j* c: ^; v  c( p% X
  371.   int c;
    ( s# k3 [% W* A, \" F; v# N
  372.   LPUPDATEFILE file1,file2;
    , G: J& ^$ w$ n* E
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    ) ]1 u" |  X" Q9 b- c; c
  374.   std::list<CString>::iterator l;9 r2 i6 n* v' F3 P9 E- @

  375. - @. I3 F, o4 H0 r( i! F, B
  376.   UpdateLocal.clear();- \8 N% y$ d" W  t8 ]' B
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 F- V8 N1 u% ]6 L
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    $ o, R; t+ F  [% w& O! b  w6 Y
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    2 u/ z! m% w& ]5 p- T$ ^
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    ( D1 n, z5 D) ?) L; e* J$ e" R% M
  381.   if(UpdateFile3.size())
    0 A2 l: |8 h  h/ `  O  n7 m
  382.   {
    9 E' Y0 ^* n% @7 `. X# J' y8 \
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    4 S- |$ D4 r; {$ |/ Q- F" V& _7 }
  384.     {( I8 H9 X0 q5 l9 m, z6 U
  385.       file2=(LPUPDATEFILE)(*i).second;  A1 H0 z3 P' ?- G0 o
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    * A# @/ ~3 J* P: v
  387.       {
    ' s- ^$ ]  L2 n, F- w) C
  388.         file1=(LPUPDATEFILE)(*p).second;) ]- Z$ z' j5 b
  389.         file1->vers=file2->vers;
    4 D/ M0 v3 o+ M
  390.       }$ n- ?: P# O5 ~2 Q5 Y- m$ K/ m
  391.       else
    , ^  _( ]% \3 }6 c3 _. P
  392.       {( M( P" z' W' B- o
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));( \2 o* L2 k; N  ^; p
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));( x0 e- M& ]+ A: \( y3 _1 ^
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));  E" l9 A2 c7 b) k; V/ ?) X5 r- Z& M
  396.       }, H) R* e: g% R- w6 u& Y
  397.     }
    ; m( b1 D. c0 N+ l# j9 Y
  398.   }' L' M. D0 `% b+ |4 T) ?: W! m. I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    6 ]; f. [) F6 F3 C) h
  400.   {
    9 e2 M* U* q" g. t  e# _
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())2 J# T, Y; a% `# b- r, R/ I, ~
  402.     {
    7 j" J7 {5 n, S5 o
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 ^- P+ ~7 c$ Z  X( x" I5 G, X
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    7 e# ?9 w9 N. s& v7 L- ]
  405.       {
    9 r! E: [) L% n0 z/ ~% y
  406.         file1=(LPUPDATEFILE)(*p).second;# O; J+ B& j+ F& a# D
  407.         if(file1->vers!=file2->vers)6 F1 W; b5 ?% P' r+ f' G/ S! h% v
  408.         {
    $ w- y# s. A! g& o5 R
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    % U# ^9 Q+ l; V5 z
  410.           c++;
    , W/ ]$ K# T* V8 ]7 z5 z
  411.         }1 {6 R9 ], Y8 p; H' |, |( ^/ f% Y6 p
  412.       }
    8 Y+ F. u6 t, |
  413.       else1 b- `, @" k, }! y6 |6 t
  414.       {
    9 P* w, u9 G8 N- N
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    4 }1 {2 U% D; `! |: x7 b( `  N. A1 ~
  416.         c++;
    : ?. |; P5 s( T, |7 Q+ a  {
  417.       }* }" e! j! Y! J# [
  418.     }; I$ Y/ Q- n0 ]
  419.   }
    ' u8 J; z# }2 w/ t# `/ a" m
  420.   unlink(".\\DownLoad\\update.txt");
    8 Q, k# n8 Z+ A  {& I. c3 O
  421.   if(UpdateLocal.size()) return TRUE;5 L/ M7 T6 x7 [& P0 R7 `) C4 A
  422.   else                   return FALSE;; k) |3 |1 j% h: ^  U, [, o$ F
  423. }3 \- L5 i, `% C8 g6 k

  424. ' i+ F1 q/ j; q. [/ n) g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    9 X$ }$ U% N3 I
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    + [2 z% g* b' v  f( Z

  427. ; F5 V" A) f, K" c7 \' b1 d

  428. ) l+ }# C' C+ h2 Z. x# S

  429. + e8 V- X% R; c0 v& |; a( ^+ Z3 s. P
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)  p! f% Z& y& F$ `/ i; S" T2 o
  431. {; S+ \* R( s4 G+ H) e+ Q( g/ S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;" z# U) B, ?0 @5 `
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    9 }5 t" {0 e/ j" w' a$ [
  434.   {3 B3 i9 u& u1 t  s' g6 s1 \
  435.     char szLanguage[50];
    / g. e" y& R: r% K$ z+ q- U  i' `
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");" U7 f/ T! M3 R9 Q6 u2 ^5 x! [
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    $ G, q# W3 V) @
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;/ [+ W( n) y7 v: B( y
  439.     else                                   m_iLanguage=ENGLISH;+ {. o5 p5 g# ]- {2 v  s
  440.     char szRegister[100];2 M+ k) b+ M* F( V
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    3 O. O- C: W8 }/ N
  442.     strRegsName=szRegister;
      u0 \2 G: E9 U/ j( c; k
  443.     char szPatchURL[100];
    5 g1 w+ R4 S5 v6 k- j; l4 D
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");; F7 L6 X/ q8 u7 z, {, u7 P4 F
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) v6 v, U; j8 h% R3 k
  446.   }
    2 A, {' ~& ?3 O, w* A' d
  447.   else
    # d# q6 Y& K! d# t  u- j/ Y4 e$ Y
  448.   {
    $ v- k, o$ N" h8 Y9 N9 D+ Y4 L
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);6 z# }9 M2 O/ o5 H5 m+ X( Z5 w
  450.     strRegsName=DEFAULT_REG_URL;" b/ M: i# x4 C& d' J
  451.   }
    0 u. C( t" p8 I( k/ l
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    ! S, s  o5 t" S+ T2 G% b* F+ L5 J$ K
  453.   {
    5 C9 ~+ v  \0 A# w" e
  454.     char szIP[50];( ]( ]+ w* e7 X' Q: w' [
  455.     char szDIR[300];
    ) _; l9 }) [8 m" y& J4 k5 T
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    * q9 g, J; p$ C6 N
  457.     {6 ?9 V! S. g; g0 [1 _* A& k
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 |4 a0 A; m. Z9 x+ g( x
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");0 r$ i4 L! o$ \% @. @5 v* U! Z
  460.       strHostName=szIP;
    9 K4 f9 D8 b* W# v+ v$ z
  461.       strHostPath.Format("/%s",szDIR);
    : i* k+ s) \) D: _/ J" N
  462.     }
    3 V  H" Y' q9 ^2 V3 H
  463.     else  v2 g  a2 J& `$ _+ M4 R0 _3 H
  464.     {
    ) r! V1 l$ y: V
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)( Q/ L7 M4 l1 Y6 Z. v/ r( Z: N
  466.       {
    ' B+ O8 t* e0 p
  467.         char szLanguage[50];
      ^& Q3 \1 T* @' `& s3 R- A2 ~' x
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 w' E8 H7 N8 U  j  }7 O
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;+ Q$ Y  j# d1 E; p
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& b$ y* f3 j) \* y2 D
  471.         else                                   m_iLanguage=ENGLISH;9 _3 R! n8 M/ i! U2 H' y$ r
  472.         char szRegister[100];. K5 A# h8 A5 @! ^
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");; ]. g- |, e; f
  474.         strRegsName=szRegister;2 N0 I! `" p, x. U/ x
  475.         char szPatchURL[100];
    ' ?: D0 y; \6 K4 f: g& o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    " R7 c3 z/ Q- p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    8 k+ J1 Z9 q5 y1 i
  478.       }/ w, |$ ~# `  k
  479.       else/ i- l% T# ^6 |; w3 E+ C
  480.       {
    . }, M0 P, \8 C' ^. g6 s2 n
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    7 W: I. I5 P: I* _: I$ z3 P
  482.         strRegsName=DEFAULT_REG_URL;6 L$ d& I! ~4 o
  483.       }+ J" w! R1 V" j! e8 O( m
  484.     }
    8 Z0 y' h3 k$ J. C* p& C' f
  485.   }
    8 G( N) z+ a' D
  486.   return true;1 T: j, e* ~9 H+ @! t5 s# m' B
  487. }( B7 e6 R* k, `* D3 y
  488. * Z' c4 ]0 W" [. t2 C' |
  489. #include ".\ZLib\unzip.h"; s  j, E- w/ ^
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ' ~" t3 H$ H% Z; B: I0 P
  491. /////////////////////////////////////////////////////////////////////////////; ~1 o5 N# E) N" `% F
  492. // CRevAppApp initialization2 X4 O3 N0 [, Q5 s" B- w% I

  493. " i& H+ J1 q7 E3 |& S8 F4 q1 e! a% P
  494. BOOL CRevAppApp::InitInstance()
    $ j4 A5 E# t' s/ z9 W) o4 [9 G; x
  495. {
    : T4 u2 d. L$ V' h+ |: _
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];2 }0 y. K( H( ~* ]; ]% U
  497. ; [' M6 q: O/ R( o
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    9 l- r8 ~, }; S* Q# O* I+ D# r. D
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 t2 E, Y7 s- Z. N
  500.   {
    . F# ^) Z: Z& Z
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");) p7 {8 G3 ~. r0 }8 N% _" ~
  502.     GetPathFromFullPath(szPathTarget,szPathSource);& l. c; X; i8 I% f3 P  g( H  I
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    7 |6 c" J- C  i$ @, S/ r
  504.     {
    4 v4 j; Z& V. \0 Y# B. Q. X, Q3 a0 B
  505.       strcpy(szPath,szPathTarget);
    ' [+ ~- _- `6 d8 \3 \4 W: R* t
  506.       SetCurrentDirectory(szPath);
    , [' u7 ]( p1 _# L. G, F& ^) H
  507.     }. o% U) w0 U+ T9 j7 q) @6 M. W
  508.   }
    + r" \8 D1 G( u" m
  509. #ifdef _DEBUG
    7 l6 V# O" q" R
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    # B4 ?) A7 _, L$ D  C
  511. #else
    . r# A3 ~+ z* W; |4 q
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12)), D. e% i& V  a1 r+ x  s9 K
  513. #endif+ L3 H/ c' A/ a$ [+ s
  514.   {" C* S$ t, v. A: W
  515.     char tempFileName[MAX_PATH];
    # P  [; K0 d$ Y) E3 W6 a5 W; t
  516.     strcpy(tempFileName,szPathSource);$ O6 h* O4 ]7 G6 o7 E2 n" n& Y+ b
  517.     tempFileName[strlen(szPathSource)-12]=0;1 z9 ^. ~. b) V/ V$ @( b4 K, p) ~+ {
  518.     strcat(tempFileName,"\\$CSUpdate.exe");0 s" U: Z9 H8 m$ N5 s# O
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);. o% W- i% U* v
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    : B  y" I6 E4 _! N; g, S0 @
  521.     return TRUE;
    ! [  k8 w. U1 l! F
  522.   }
    * R0 u/ V4 [3 l  u4 v! C  o
  523.   // Nuke 0118: Delete run.exe3 V6 l. V$ M5 A# D4 B2 w$ r
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );. U) a4 S( q# I
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    $ U* N5 X, g3 c- W, p: H9 K+ W
  526.   if(!ReadCfgFile("Config.ini"))$ ^; z  o( [6 a" B. f. \' S/ y6 f; m
  527.   {4 }5 s. `) _) }. n' i! j/ [4 x; c
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 K( e1 N* S. ~' p1 e. `, R$ R
  529.     return TRUE;1 l- s/ D9 G2 d, s
  530.   }  l" x/ Q( j5 Z$ c
  531.   HANDLE mutex;
    ' q! M; K# c, n7 a  X. _2 I
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    , X* M6 d7 V9 t' x! p/ r. ~$ a
  533.   {
    ' s, z- J$ e7 k9 P& {
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)" b* d- C: Z$ Z1 b( s; r
  535.     {! n* q3 B7 [4 h
  536.       CloseHandle(mutex);
    . F0 j* l; ?5 d
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);, g" {/ e. a6 I: d8 _
  538.       return TRUE;2 Z5 g8 W. x: Z$ m7 K5 \& R9 R
  539.     }
    & |% K" y/ B' I
  540.   }  ( Q: [; o9 d7 @" v3 Z
  541.   CloseHandle(mutex);5 Y, d. `  O4 G( ^' x% R

  542. , G; n3 f0 D( K7 Z
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);+ b: O4 {- }4 Y; R& E
  544. 5 T5 k: K3 V- w
  545.         AfxEnableControlContainer();
    , c# t$ z* |2 x8 C9 ^2 k2 X
  546. - `3 n4 s) n/ J. F' f$ `: c/ r* m3 o
  547.   bCanUpdate=FALSE;5 B/ E) W6 `& T! `
  548.   dwStartUpSteps=1;: H3 w! k; w5 c1 y4 \$ \; e
  549.   dwProgramState=AP_NOTHING;1 y) O7 B) m. Z) r6 x/ z

  550. 5 Z" _9 m% b8 F: @( j+ ^
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    0 c1 g& ~4 q) A' w9 t$ h! H
  552. 2 W- ]3 ]; F- H2 X" Q8 c  I8 K. r
  553.         // Standard initialization; E* [% O. u" c. M6 n$ W9 E! ?
  554.         // If you are not using these features and wish to reduce the size
    - @# K! t+ [2 S8 e( h1 ~
  555.         //  of your final executable, you should remove from the following- m1 v# s4 a( P- h
  556.         //  the specific initialization routines you do not need.0 t; G+ Y/ h9 R
  557. 2 y: I) O2 j) }3 [
  558. #ifdef _AFXDLL% f7 @) u' w; N+ q' v
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    9 _" G0 F; @# U' g; ]
  560. #else
    * d' m& ^# H) p" [9 J) n
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
      `" w! n$ a4 }9 ]  N6 D- c8 J# r
  562. #endif
    : T$ g  J! a# w  }/ Z. Q' S
  563. # \7 _" u6 A; i
  564.   dlg=new CRevAppDlg;- J" m4 c$ M6 E" w
  565.   dlg->Create(IDD_REVAPP_DIALOG);. |- t  f' I) y. Y: H) x
  566.   dlg->ShowWindow(SW_SHOWNORMAL);+ B' N) S6 g- H
  567.   m_pMainWnd=dlg;/ Y/ ]4 G  [4 j% ]3 ~
  568. 7 Z0 Q0 c0 [: d# `# e3 J
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);2 \! ]9 z) [% A4 g+ R; t
  570. - r' X9 X8 J* a5 M, B8 ~. W+ T
  571. //  GdiplusStartupInput gdiplusStartupInput;
    6 J$ Z6 h. P5 P2 |! M$ ]! t
  572. //  ULONG_PTR gdiplusToken;% [8 [9 @% J) R3 k
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);& x! n+ X- k- U, T2 ?; |- |* Y% ^

  574. % k! e/ [1 e5 N3 [, y1 d! B
  575. //        CRevAppDlg dlg;
    $ ]! E% h# o- J
  576. //        int nResponse = dlg.DoModal();: H: O# R2 i  l2 B
  577. //        if (nResponse == IDOK)/ ?& Y7 g5 G- s, f" ]5 x+ f
  578. //        {
      w2 I0 S( T  V: A- Y
  579. //                // TODO: Place code here to handle when the dialog is
    7 b( z' _9 {$ ~% ?  x0 m
  580. //                //  dismissed with OK- R7 [9 c& E. n, Y% I
  581. //        }
    3 v! F- l' t' G5 Q; h
  582. //        else if (nResponse == IDCANCEL)) z% w! z' n" U3 X
  583. //        {# R7 D- M: r/ m( h
  584. //                // TODO: Place code here to handle when the dialog is& {; R6 F2 W  k, U! H: j. l
  585. //                //  dismissed with Cancel
    % d8 f# R1 ~: `6 p  z
  586. //        }9 B  m. H2 i, G5 H

  587. 6 U$ l* P- d& _/ h; J0 T
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    1 H% e) h3 j( C  P# P
  589.         //  application, rather than start the application's message pump.0 l& y8 O, S8 S
  590.         return TRUE;
    0 e* ~" B2 r; T1 N
  591. }8 x/ v2 _1 q- `, Y/ _: y  O

  592. 4 q3 l. U+ s; R. z  K
  593. char *CRevAppApp::strtok3(char *pSource,char *token): P! X3 I9 ~" ~' H& x! r
  594. {
    & R4 z! E4 N3 Q: v& `1 f
  595.   int i;* x- m3 Y$ q$ s) ~+ q
  596.   char *szRet;
    8 ?" P+ ?4 z1 s9 N4 W# u

  597.   a7 g1 K! J! c: x) W* f! I7 I( Q- K
  598.   if(pSource) { itoken=0; sztoken=pSource; }( `4 R* g! F7 a+ _  M
  599.   if(sztoken)
    0 }7 x( ~! N& W; @# m
  600.   {
    - N+ y7 [9 h/ ~
  601.     szRet=&sztoken[itoken];
    ! v! E* m! Z2 i2 C, y" b
  602.     while(sztoken[itoken])
    9 u- O' o* e+ J# S& {5 `3 m
  603.     {
    . Q7 a, s- k3 Z8 J# u/ ^8 E0 K
  604.       for(i=0;i<(int)strlen(token);i++); U( N' i" k- m- I# l+ e) b
  605.       {
      K# @8 `: D  ?% v, J8 M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])/ o5 A7 q9 ]- h4 |4 S
  607.         {, w) ~" e& e5 Z( `: G7 D
  608.           sztoken[itoken++]=0;( D" V6 b6 \! v7 ~" v0 Q5 e
  609.           sztoken[itoken++]=0;
    , O9 |: ?2 J4 Q( F) b- }; z1 y: x
  610.           return szRet;
    $ m+ H9 T: a# c7 N/ j1 q1 n
  611.         }1 M2 a) L1 S+ L/ N5 b
  612.       }  J( i' _- z# i  U! A( D0 e, v7 n$ [
  613.       itoken++;
    5 k5 F; A* P/ K1 P3 [& ^6 i
  614.     }2 \( }9 e5 a. j& g. g+ g4 X" P+ M
  615.   }
    8 \( @1 c3 v( |
  616.   return NULL;& X+ L  e6 H+ C: N: U/ e
  617. }* X" @) u1 U* d/ _; d! U$ R6 y. `' x2 Y
  618. 8 |. `9 z3 e& x5 M. y3 }7 p, u
  619. void ProcessProc(long Total,long Current)
    : ?  L, R1 [8 \& |( U, D
  620. {
    4 i# L$ h9 X5 a- a+ E
  621.         MSG msg;
      n. X6 Z- p/ E. z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);5 `1 C, z2 m7 i. s( V: f" X. G7 _& s
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    $ g' y& v$ y0 u; b& U6 D
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    9 n: x) L6 p4 e9 S" V0 ?: O
  625.         {
    1 o7 H2 R6 C( l0 e
  626.                 if(!GetMessage(&msg,NULL,0,0))
    - z3 B4 \" L3 w9 {6 L4 g/ K- v9 i) t
  627.                 {" o7 r# q( u1 N! `, A6 N6 ]
  628.                         return;
    2 e1 }; Y$ S% i
  629.                 }% ]$ M8 P4 V. x$ M. s8 X; F) r8 U* [
  630.                 TranslateMessage(&msg);
    ! J) d, s+ Y% \+ _8 X( o  A2 K& c
  631.                 DispatchMessage(&msg);# t. Z) p2 k8 _8 [2 y' d% ~
  632.         }        1 N: D$ C% b$ q8 T* r5 @$ `
  633. }
    4 F0 }2 P$ m. n9 B9 }

  634. ) T2 o) I3 D7 x( D4 n5 I
  635. BOOL bFirstChar=TRUE;4 |+ p1 R5 Y8 T# R
  636. : T3 `' y, L: W, A; |
  637. BOOL CRevAppApp::OnIdle(LONG lCount)5 N1 i4 j2 y1 Q5 \
  638. {! n9 n' d" O4 I2 X: g
  639.         // TODO: Add your specialized code here and/or call the base class, Q0 z& m+ g  O
  640.   switch(dwProgramState): k: K. X  R3 c7 F
  641.   {+ e. z" A/ p2 O
  642.   case AP_NOTHING:7 c3 w" u( C2 a8 ]0 O) m
  643.     switch(dwStartUpSteps)  W- \+ x: c) V# [7 K  Q
  644.     {
      y3 Z6 R; e4 o; ^* s  @
  645.     case 1:
    $ I3 V5 e& z" i/ s2 @; Y- Q
  646.       {
    % D1 |" D: g/ P9 y) ?" M: m; F/ S
  647.         int i;4 w0 k0 J5 U" s" h
  648.         CDC *pCDC=dlg->GetDC();
    % G- H8 l4 g5 \7 R5 C, z+ B; n+ \8 E8 f
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 h. I% N5 ^, D
  650. //        Graphics graphics(hdcwnd);' }7 _* @7 l; i6 O9 w" i8 K& u
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 a- O  ]1 ~0 t( B
  652. //        INT iWidth=bitmap.GetWidth();0 k$ ^6 f) w# p/ s& `( A- z: n
  653. //        INT iHeight=bitmap.GetHeight();
    1 ~3 \6 ~$ [( m. l' x1 x! B1 ^
  654. //        Color color,colorTemp;
    . t: v+ s9 r* V* C/ w5 m  P
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)4 |+ u0 o3 N' o) H8 t
  656. //        {% h0 E4 L: Q* t$ M5 C  @/ A- o5 {
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++), D5 n* N' A+ F
  658. //          {
    2 ]' H) P# o' Z2 x1 M2 c& i4 k
  659. //            bitmap.GetPixel(iColumn,iRow,&color);1 d! v+ }( Q, a5 G7 e  f; D& }! i4 X% Q, b
  660. //            colorTemp.SetValue(color.MakeARGB(  m! s' y: b. k7 Q9 x
  661. //              (BYTE)(255*iColumn/iWidth),& ]0 R. z7 r9 |
  662. //              color.GetRed(),
    9 ^+ U. E2 V6 S4 J+ S' |
  663. //              color.GetGreen(),
    ( V  t9 n, [! x7 V! e+ Y
  664. //              color.GetBlue()));
    2 I: \" N" @/ s+ g
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);0 Z0 w2 x2 W( P% P! |
  666. //          }
    6 u. h0 y7 I) e1 {# y
  667. //        }8 c! E/ w6 m% ?
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);9 _* b6 `& H' ~8 Q% I$ Y
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");. U7 _! ^5 @; K1 y: b. |. D
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 K5 j0 Q- m) f& B0 w, Q  q2 d
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    ( h  b( s2 J9 Q" a0 w" C3 C
  672.         for(i=0;i<240;i+=8)
    ! A  R" @) K0 M7 A; b; P+ l- r6 p
  673.         {
    & j" U1 V* `, [
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    2 m8 \1 e; i! n
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    . K) g3 e+ J# T; K- k
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    4 q/ Y+ W7 Y: P0 E7 C% D) i* j
  677.           Sleep(33);
    5 x( c0 c+ A& L; m  m3 F
  678.         }6 w  |9 ^$ q8 `1 f: d
  679.         Sleep(1000);
    1 X' _& G3 m- l$ k
  680.         for(i=240;i>0;i-=8)2 Q, x. n2 j' @4 b: n, ^
  681.         {
    & o: \& {3 n5 C2 }+ C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    1 }. N/ f: u& e, R4 e
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);- g4 [. p/ B! o! W" x' D7 M) C
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);- k( n1 m* X" `7 g. C2 w2 K
  685.           Sleep(33);, z3 H5 k& S  O( {2 g
  686.         }
    $ r$ B8 v1 f7 B) k" J
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    & h7 e! S* L4 q, }8 u
  688.         dlg->ReleaseDC(pCDC);. X* r: p) W4 K% {& D
  689.         DeleteDC(hdctar);
    & r& v4 J& A& [8 {' s3 }
  690.         DeleteDC(hdcsrc);; ?8 T2 q  k3 Y5 s. b9 b# y
  691.         DeleteDC(hdcorg);+ n2 F7 c3 D! z. A/ F& Z
  692.       }$ S3 v8 H+ H# U7 y/ }/ N8 r
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    ( I1 x- ^  R0 I" V) e( j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");( k( S9 u# w: P4 P
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    1 \  J, W: C/ ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    # P  L6 a7 o1 R7 N- m1 Y. u4 n$ x
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 \: |9 O* T  U5 e% w0 j& H
  698.       if(!Dn.Connected())
    - j0 j( i) P9 W/ k/ Q" V
  699.       {
    ! A0 u+ ~: j' A0 ^
  700.         dwTotalFiles=1;
    . r! V* r3 h' K+ {  w
  701.         dwDownLoaded=0;% N! Q2 H3 X1 _) J, ?
  702.         bSilentStep=TRUE;. t0 n( [4 \$ T& |" S  i
  703.         bCompressed=FALSE;
    # O9 n1 ]4 B- M1 h' B3 m. L& B9 n
  704.         strExtLocal.Empty();
    / ]5 _! e* \. X0 I
  705.         strFullName="readme.txt";
    0 |: ?/ k1 k1 p, {. O$ R
  706.         dwProgramState=AP_CONNECT;) y8 E4 w. j  Z- D& A; g( L
  707.       }
    5 a* c" l" u* _( a; s: X9 f# L
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( n! I6 Q# [6 x; f8 t! D
  709.       dwStartUpSteps=2;
    ' W$ |% U) [/ @- d: q
  710.       break;- T. H: F( F& N, A, q5 u
  711.     case 2:
    , D- T( x; k7 O% R( W- [
  712.       {' E, F3 d; V& q7 N# y8 _" |
  713.         int iEOF;. D/ r! b; W* j* B  U% l+ m
  714.         FILE *fp;, a- C3 B7 _% o4 D7 h5 O, s# k
  715.         char szString[512];- F6 l* k4 X. q3 ]1 f4 U! I' H" Z
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    5 U* E# n: w- N4 c
  717.         if(fp)
    6 s+ h) F2 T" ~% b9 c/ C
  718.         {; ~; Z5 m4 F1 F0 [
  719.           do
    : t$ Y* S8 ]" w. z
  720.           {# `6 d, g1 |# N, X( M; y* w- A2 z
  721.             iEOF=fscanf(fp,"%s",szString);3 F4 B# A' z  z, W* n3 Y- I
  722.             if(strlen(szString))
    / H3 ^' r) [/ Q$ p
  723.             {- p$ ]2 x7 h- y
  724.               if(bFirstChar)
    4 y: u) b2 C2 V+ S. H9 G# |
  725.               {2 o9 ]3 c! U- `& G3 K8 d
  726.                 bFirstChar=FALSE;
    + _5 o* D- B# F) k8 ]
  727.                 bConnectIsBig5=FALSE;
    & ~4 e- P. C( s+ z: p* c0 r
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;  H- s; C+ x) P
  729.               }
    5 ^7 i; r) ?* Y. B- n' S
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));! W; U, W1 Y' H" z# j( \6 B' J
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));) Y. M& z) u: Q  r
  732.               dlg->m_ListText.AddString(szString);
    6 r/ K4 F) r( {9 i0 a) |0 o
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      j/ p' Z* j& F9 N3 L' ?
  734.               *szString=0;
      U6 w0 x3 M* Q! r, ?! t2 B
  735.             }* e) V5 f1 a" P) t; d
  736.           } while(iEOF!=EOF);9 ~5 D) c- f5 a- u: q" w
  737.           fclose(fp);
    0 e( R8 R$ @; M- ~$ D4 e- ^+ W
  738.           unlink(".\\DownLoad\\readme.txt");
      g. Y. y9 e- G+ D6 R' E: s  E
  739.           dwStartUpSteps=3;
    : u  }& T, {6 w6 v1 u  W2 m( C4 A
  740.         }
    . B' Y( w$ i' z; @
  741.       }
    ! e1 n7 e) C( a) P( ~$ m, U
  742.       break;- N' C5 ^. R" l3 S
  743.     case 3:
    $ y  u3 }+ d/ Q  t- Q9 B
  744.       if(!Dn.Connected())4 p2 k0 P$ V2 Y/ i* k
  745.       {
    & Y8 X5 C7 k! D: w3 t% s" F
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    * ?" m  i/ }, [5 {
  747.         dwTotalFiles=1;
      Y! x1 A- M$ s9 x& R# I" o
  748.         dwDownLoaded=0;! Z4 u/ l: Q$ f; O5 B% V
  749.         bSilentStep=TRUE;. \! h- m: i1 c6 {2 I
  750.         bCompressed=FALSE;' _1 [2 f! w) f9 H9 F
  751.         strExtLocal.Empty();
    8 C% D# ^# r/ q" s; G8 Q2 K
  752.         strFullName="checkversion.txt";% X# K; s% p0 [2 l# x6 I
  753.         dwProgramState=AP_CONNECT;5 A# M" M/ A0 L8 ]/ ^  N
  754.       }
    % ?. I1 E. W: R, Y3 a- y5 |
  755.       dwStartUpSteps=4;# L- [; F/ X  z  x" j
  756.       break;
    ; s' f0 e0 G6 ]  ~% e1 z2 J
  757.     case 4:  h+ W' u6 y9 @! ~5 f
  758.       {
    1 `  g. @% _$ t2 O
  759.         FILE *fp;
    # i! W  n% h2 U5 T7 U/ Y* d
  760.         char szString1[128];6 E4 @! R4 r( E
  761.         char szString2[128];
    ) f  V$ ?5 R. T9 M
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");5 q" Z, M; `$ I, T4 X' \0 {
  763.         if(fp)2 F- r, x& f3 ~* Q1 z
  764.         {
    0 |/ ~: e" _7 x7 _8 ~5 \
  765.           fscanf(fp,"%s",szString1);0 M1 B# N+ A& R6 a
  766.           fclose(fp);; \+ u8 @5 ?  u
  767.           fCheckVersion=atof(szString1);
    1 V% C2 S: C1 K8 `
  768.           fp=fopen(".\\checkversion.dat","r");
    3 e9 \% E0 A8 ?5 Q& |
  769.           if(fp)
    ) B9 h- C% r4 x. d2 t' {& a3 u
  770.           {
    3 v' ^% j, l" N2 q8 z
  771.             fscanf(fp,"%s",szString2);
    - J/ u: y/ ~0 E6 ~# I" ^
  772.             fclose(fp);  ^# f: B( I5 M" \
  773.             if(atof(szString1)!=atof(szString2))
    + F3 K. A! z( x( v. z4 T0 N, Z
  774.             {
    0 B6 ]; _* ~( a  y
  775.               if(!Dn.Connected())
    " B7 {. m+ `0 j, m% Q7 I
  776.               {
    - d: H% v# G  X
  777.                 bFirstUpdate=TRUE;
    6 a3 M) J0 W; j3 d5 A5 `7 \
  778.                 dwTotalFiles=1;8 ?' S1 h! ^* R2 s$ G  z5 z  R& o
  779.                 dwDownLoaded=0;5 A$ o4 \8 [/ Q. I5 P
  780.                 bSilentStep=FALSE;
    6 J8 k. O, b# L* x5 E4 p
  781.                 bCompressed=TRUE;# D: Q! K( m% J! z0 p' W, f* b4 f
  782.                 strExtLocal=".\\DownLoad\";
    ' w8 P& G% c$ k
  783.                 strFullName="update.txt";, p7 T( T' v2 U0 c, u
  784.                 dwProgramState=AP_CONNECT;: E" ^0 ~" z% J9 D/ P3 R& K4 _( w
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");  x5 ^* Q3 G5 x
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");: S2 M' P% n1 p! a& W
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");$ x& h4 T  c/ ~+ V& f
  788. * v) Z! O0 \: D7 d9 x0 y  J% k
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * l* v: h& V* z5 [# u
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    9 _# O* T' {6 V, J
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)) E. a' n+ e0 |4 n  Q6 H
  792.                 {
    ) b; d8 g# {$ b, [  O# T5 h
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    7 p; n' @. k- c; l
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
      a+ }0 h( r% I- k' L$ ~; p8 ~
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    # h3 D4 n: X3 p
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( D7 Y  F8 Q0 b( F
  797. $ {1 B! c% W$ i% k. P8 ?8 @) V
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");0 d+ W0 G$ {) k# R
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");1 i8 d8 B/ d$ v( y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");8 U( }; Q( \0 T) e2 Y* f. F' D
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);5 W, A' l, Z; ]) p
  802.                 }
    ) Q+ Q" L, m  B6 L: w
  803.                 dwStartUpSteps=5;* K" U. m* }* L0 q( Y6 t5 {, K0 H
  804.               }: i& i3 @( C7 i4 \/ h* ^% a" |
  805.             }
    9 I- Q- Q# [4 Z+ I( c1 J7 K/ T
  806.             else
    ( I! X) N2 P; B9 D( n5 C6 R
  807.             {
    / U6 M& @! I7 v0 _& N
  808.               unlink(".\\DownLoad\\checkversion.txt");) z/ |+ L# R1 T! U( C3 Q) x, z) R
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    5 F! G3 L5 w  n$ J0 `
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. h- v8 o. R. x) g  A- l
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    6 N& E3 T7 T( A0 {. u  Z6 G3 }4 V

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

% a' ~- [' e9 W; u5 W7 z1 R- G" i

評分

參與人數 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 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。wechat:lang_wechat_threadmessage
回復

使用道具 舉報

寂寞在_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
回復

使用道具 舉報

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

本版積分規則

QQ|Archiver|Mobile|Disable|About|Facebook|Discord|叛逆家族論壇

GMT+8, 2026-3-20 03:35

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表