找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
& E7 u. O3 i: a; F3 m; \
  1. / RevApp.cpp : Defines the class behaviors for the application.& ]" D+ A' |0 i* Q. @5 g3 F
  2. //
    6 ?! z2 t# n" H, l( v
  3. 3 Z6 i8 Y" m9 d
  4. #include "stdafx.h"
    3 a3 K+ ^+ }  Y0 d6 |9 c/ E/ @
  5. 1 e; b2 t. t4 g$ \  C) J, ~
  6. //#define UNICODE  d' |5 v4 l& G& u2 S2 `; j) J4 @
  7. //#include <gdiplus.h>8 |* e0 B. \* y4 ~. f+ Y: ~
  8. //using namespace Gdiplus;
    % b7 T- r" L- h# p# ~

  9. ) K6 P; i. h; w8 T
  10. #include "RevApp.h"
    + s( i1 ?' \2 Q; b' B& U/ z2 x/ ?
  11. #include "RevAppDlg.h"# t4 b5 p" k! f& g+ l0 }& e% c

  12. # |7 y6 ^# {" s: z  t& U. c  r
  13. #pragma warning(disable:4786)7 U0 X- m7 @5 \$ a; P
  14. #include <map>9 c$ b. E% C2 I
  15. #include <list>8 K1 g6 M9 R! x' B
  16. #include <direct.h>2 [  b4 u; Y$ c4 O# M

  17. - `3 ^5 I2 |0 g" }/ W8 B
  18. #ifdef _DEBUG
    - M" M2 ^# g: A1 G
  19. #define new DEBUG_NEW% ~# I/ P% U; h" a) E, _* R
  20. #undef THIS_FILE0 Q; J. j* _2 u: `! e. O
  21. static char THIS_FILE[] = __FILE__;9 m1 L. c9 h/ z% a  i, K/ P
  22. #endif" a& E7 h0 s4 Y$ K
  23. #include "SkinResDef.h"7 m7 @, i& c, K& ~# _9 s. L$ |
  24. #include "ChangeBG.h"
    8 o" C. S) m, Z9 H# F' x
  25. #include "AFXINET.H"
    " Z" y7 k0 E( i' t5 c, _
  26. / V* w. G1 _) c
  27. #define TRADITIONAL_CHINESE 0
    * o0 j3 n; P6 O) X) y4 g
  28. #define SIMPLIFY_CHINESE 1
    9 c0 f% R! q: F6 {9 D
  29. #define ENGLISH 2
    - Y$ P/ m" J  a. H& j7 [+ [8 n; l
  30. int m_iLanguage = ENGLISH;: d* \. X. x  w0 G+ D; d* A* B, Q0 i
  31. /////////////////////////////////////////////////////////////////////////////% h$ E6 \/ G& ]) l1 \1 `: Q
  32. // CRevAppApp) Y# d- O: }1 d* s/ u. W( S( ]. ]

  33. : V  t4 d5 @4 l8 c5 W, W8 G
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    9 S  m# f' H3 s: L% g
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    1 r# p/ V: D( f. \" f) r
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    + k* `8 Z* s. D. S
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!1 |+ r0 z+ m& t. j9 {1 C
  38.         //}}AFX_MSG
    8 F! E* W8 L! g5 l/ V  O7 p
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / u3 S5 R. h$ m' j! P* ^  f
  40. END_MESSAGE_MAP(), o1 m; l5 x. N9 q

  41. , M+ s1 ^' T% J2 m: H/ D1 ]: |
  42. /////////////////////////////////////////////////////////////////////////////
    8 z$ x+ ]: S2 T* j+ `3 g  k9 k
  43. // CRevAppApp construction
    & z' w( N2 _% o! C

  44. 5 E7 _" ]4 L& W( d9 r
  45. CRevAppApp::CRevAppApp()% ^! T# t) v' ?+ t
  46. {
    & Y6 |, j& L  L2 z) l4 L
  47.         // TODO: add construction code here,
    6 q7 D+ {" \. |1 t+ F) g
  48.         // Place all significant initialization in InitInstance) |! |5 t/ ?$ T9 C2 H
  49.   bDisplayIsBig5=FALSE;& P1 C7 N2 h  }' @& K) M
  50.   bRestartUpdater=FALSE;
    $ k  }8 o+ G* `
  51.   bFinishUpdated=FALSE;+ t; @9 P8 U4 W3 O/ o- E! e
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;( {- [5 o8 w5 Y  Z' l
  53.   InitChangeDataBig52GBKS();1 P1 m2 }1 e. r8 D# J  a
  54.   InitChangeDataGBKS2Big5();2 o! J# |9 I/ a4 N/ ~+ {
  55.         //# `2 Q( Y% g/ L6 v
  56.         bClickRunExe = FALSE;
    9 I2 \5 Y  z# {
  57.         //
    : x! n7 Z" E" o5 \' x: B
  58. }; W! P! Q" T1 b" ]* L+ U
  59. 7 |5 l" {0 I/ b5 F( k% h
  60. CRevAppApp::~CRevAppApp()0 [( H& O3 X9 A. I
  61. {, |! S& g- k/ O8 S
  62.         // TODO: add construction code here,
    . d7 Z& C: Q" z+ p/ s. N$ j
  63.         // Place all significant initialization in InitInstance
    ( C; O% d* P, O% l
  64.   EndChangeData();, w* u( g4 ]/ v0 o0 V
  65. }
    / p; L% v9 ^6 S& A6 C/ G

  66. 8 b2 T9 C& X: v! u0 s0 h5 z
  67. /////////////////////////////////////////////////////////////////////////////
    ; H$ W0 P1 I& |* @2 `: [5 R  W8 t" j' S
  68. // The one and only CRevAppApp object: }% A" t1 |9 `/ K
  69. 8 Z6 w1 M$ n1 L1 w1 M
  70. CRevAppApp theApp;9 k/ j0 A3 y; \( z
  71. # @9 t; V" l$ B7 m
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)8 @% g) L, z5 P" _
  73. {* e7 m& j9 S8 `
  74.   int iEOF=0;
    8 f: g) b3 _- {; E8 R- z
  75.   char szTempName[MAX_PATH];% P6 n4 K& W. |" Q* n9 f: L, a
  76.   *szFileName=0;
    * ?, B" b1 M* L6 v( k7 _6 O. |
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " X$ }0 [) F  s/ C; X. \
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')- T6 l9 d1 f9 ]5 l
  79.   {1 p0 D/ F% c0 ^+ `
  80.     strcpy(szFileName,&szTempName[1]);8 ]: d" r/ a$ J# i2 K
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)6 k3 h1 c4 G5 s
  82.     {
    ( j9 H, v2 u* F& f1 X+ L
  83.       iEOF=fscanf(fp,"%s",szTempName);# t: N$ d% ^' i# @
  84.       strcat(szFileName," ");7 w; d6 |- o3 S. G/ d- y( A
  85.       strcat(szFileName,szTempName);
    * \, {) h, b+ m: D% f) W" U9 |
  86.     }& f  W; u4 r. C1 s$ }+ h4 }% b
  87.     if(strlen(szFileName)>=1)
    ! j7 Z+ E% G1 v9 c# ]
  88.     {* T5 K; l# q. \) m3 x; w
  89.       szFileName[strlen(szFileName)-1]=0;
    % ]( z  R% }, |2 X, s0 ~9 R
  90.     }# s6 w" J, ~# S! f. T. l
  91.   }
    + W9 R+ O, u9 s2 d# J/ v
  92.   return szFileName;4 B* U4 n6 R9 Q2 \$ Q  P
  93. }
    ' |/ e+ g" u9 p% H  h: i- H

  94. 3 ^1 Z$ q7 |! K, @: Y
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)5 ~6 |8 ^2 |1 y1 v- ?
  96. {
    ! j  G" M3 q9 S3 w" O) P2 @' e
  97.   FILE *fp;
    $ H$ |  F1 M3 {) `0 {
  98.   char *key=NULL;: v4 g8 ^% F  q( J2 [8 u, Z
  99.   char version[MAX_PATH];3 c0 A  I$ L$ z9 S
  100.   LPUPDATEFILE file,olds;# `3 O+ ^! y% K3 n/ u; l
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    ) k* S) _1 D% I, ~) ?% b

  102. 8 S: B8 x' O6 C2 \4 v) c& Y6 l
  103.   UpdateList.clear();
    5 p" {: Q9 L) S/ C! `- B, A- n8 b$ e
  104.   UpdateFile.clear();9 a# Y( ^5 [/ r$ {
  105.   if(GetFileAttributes(filename)==-1) return false;
    9 x( l. r6 i* q6 B& G
  106.   if(!(fp=fopen(filename,"r"))) return false;: g) w* Z0 D) ?) Z# F
  107.   fscanf(fp,"%s",version);* d, m8 t5 g; O. g* C; A
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }6 y  x8 E) }2 J  B( X
  109.   while(fscanf(fp,"%s",version)!=EOF)
    2 T& G, r/ f! u% t
  110.   {) K2 P* m; @9 L6 }
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ _3 n: J$ K6 I! A
  112.     fscanf(fp,"%s",file->path);; i# J$ I- V6 M7 G0 |
  113.     ReadFileNames(fp,file->file);1 A% q/ w) _7 P+ F# b, x
  114.     strcpy(file->full,".");( y1 n3 ^2 l: F$ z. y- g4 }
  115.     strcat(file->full,file->path);* f4 o- N$ p; `  K* V& D
  116.     strcat(file->full,file->file);
    ( B5 k3 P) S% I1 p7 n1 }( E
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())& B7 e1 _# A, c3 R: i6 p
  118.     {
    8 @; o* D) ?3 f( p8 a4 Z4 t' c  K& h
  119.       file->vers=(float)atof(version);
    0 s  V( C8 C% O! J
  120.       UpdateList.push_back(file->full);
    ! T  O. I& F5 ?: O: T
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    " S) x; P0 S6 N
  122.     }1 J' q- g. I' m$ e0 r
  123.     else
    . d' ^) V2 t1 c0 Z% d" b: S7 q
  124.     {
    0 ^- i& E) }; ^4 Y
  125.       olds=(*p).second;
    2 L; G4 {1 {: R8 W; v6 I7 Y1 @
  126.       if(olds->vers<(float)atof(version))
    / A# R( G4 l9 F  o( s% e; ?( h
  127.       {
    # B0 P! F' e% e* n. d$ W
  128.         olds->vers=(float)atof(version);' b+ P3 `0 @4 U
  129.       }4 v5 {( z3 n  |$ \7 u* `# x) P: m
  130.       free(file);6 r5 I' |  J. R+ k6 \4 u+ X
  131.     }, [, T9 t1 \: u& x
  132.   }
    + v& H- k* J' J' K5 a$ g
  133.   fclose(fp);
    $ C' B+ V' q" ?# W
  134.   return true;
      U5 H' I: _) l2 o. w
  135. }" P' `! ^- ?- }! Q
  136. 6 F: x0 u# R+ }2 H) j
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    ! {. e# D. o0 h0 n9 i0 U: Y
  138. {
    " f3 T8 n$ C& ]! c% S8 Z1 v
  139.   TCHAR  szFull[MAX_PATH];4 S  {1 \1 c/ [6 @- P5 o
  140.   TCHAR *token,*inter;
    9 q  W) L$ ^( j9 D( q
  141.   *szPath=0;
    + z' ~6 v# O; @
  142.   strcpy(szFull,szFullPath);
    / p. t/ X# |) i
  143.   token=strtok(szFull,"\\/");
    4 Q( I$ e2 D9 r" k5 Z
  144.   inter=token;& h# W$ E3 \$ Z  B8 L- H% y
  145.   while(token=strtok(NULL,"\\/"))
    1 R" o' v$ t4 b5 y: O
  146.   {
    2 J6 f0 L9 S0 H+ g4 k: m
  147.     strcat(szPath,inter);9 B$ n9 s' U  p' t: W
  148.     strcat(szPath,"\");/ p) x7 @. m4 E3 ^  n3 G  A
  149.     inter=token;+ b+ {, Z3 r- u7 X
  150.   }+ m& J% y8 T& S' `2 `
  151.   return strlen(szPath);% A8 T4 v: ~0 L! D( C- e
  152. }
    7 N+ X; u, v3 H
  153. 7 o5 C+ S2 \8 f. D1 b2 c
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)% M! i9 T5 N3 W
  155. {- L7 o, s8 _: y7 o3 K0 J
  156.   DWORD attrib=GetFileAttributes(Target);. L# n/ O$ t. K: M8 B% `  l# y4 k
  157.   if(attrib!=-1)' U- j; J8 _8 @0 J
  158.   {
    + l6 Z& J* S8 k) n5 J
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    6 y7 o' \% q! A& i+ a" K7 [
  160.     {
    1 R3 f& v6 a( s3 Z! T' `: U1 P
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);# d+ @1 o' [8 Q4 q8 s' j
  162.       SetFileAttributes(Target,attrib);/ ?$ C5 T- z8 f
  163.     }
    / I% m  ?. @" ], D3 B$ x
  164.   }
    ' P* l6 E$ `4 Q, m. `$ i" y
  165.   CopyFile(Source,Target,Erase);
    ' f, s7 `1 m' F+ S% J
  166. }
    ; ?9 a6 J  t7 Z. E* {9 P/ ~

  167. 2 A# ^% l! C0 W( Y
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)- z  w+ L0 j% @1 R0 i( O. U% Q. T
  169. {" \1 p8 A7 E: c% `
  170.      FILE *fp;4 \4 H! z$ e- I+ X! F" G0 @" P
  171.      char  szBuffer[8192];
    % M, B. B& `+ A* A  P
  172.   va_list  argptr;
    4 K+ l' [& }4 \1 X) }

  173. 9 h/ g3 j4 D$ |
  174.         va_start(argptr,message);
    8 ?" d; `1 i' i  ]/ o
  175.         vsprintf(szBuffer,message,argptr);" E: |( R5 w! Y2 [, v
  176.         va_end(argptr);
    & U/ @$ {' ?1 f: P
  177.   fp=fopen(FileName,"a");$ G0 j3 P0 E5 \8 P
  178.   if(fp)
    , f8 v; V  L1 a6 H
  179.   {
    ) }) A/ g- e2 Q. D  H
  180.     fprintf(fp,szBuffer);
    ) X$ n, |3 n$ d2 q  v" m, _
  181.     fclose(fp);
    % n2 `6 r  g. Y$ X% G
  182.           _flushall();
    ' j8 }9 l6 \9 s
  183.   }/ S9 Y6 z, O! \1 ~6 b6 D& w
  184. }
    / o  ?) L8 v3 B3 U
  185. ' J& p! T8 F- k1 i* R
  186. BOOL CRevAppApp::Fclearf(char *FileName)
    5 n, k+ G1 E( H  V
  187. {
    5 P" n3 a) C3 W1 X5 Q- D
  188.      FILE *fp;
    ' d' x; l; e2 ^8 b9 C& Y" C
  189.     DWORD  attrib;3 s- i% u/ x% E& R+ j
  190.   attrib=GetFileAttributes(FileName);' O7 ?' b. G2 ^$ y/ E
  191.   if(attrib!=-1)
    ) ^1 ?& O2 C* A! _" Q
  192.   {& V8 g3 y- ~; h$ ^8 \( x$ f4 r
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    " r6 C& h+ s3 B+ W' o& Z! r; B
  194.     if(!SetFileAttributes(FileName,attrib))
    $ b9 v2 R8 ^4 g+ p/ J
  195.     {
    ) J  O' Q* F3 j
  196.       return FALSE;' e$ \. W) O1 m- L) U' {
  197.     }
    % j2 ]: S- R  |+ a- ~  o' C7 [
  198.   }
    9 Y' d% _" e/ H* ]
  199.   fp=fopen(FileName,"wb");% }: u3 n/ F' Y( G) t; O; {
  200.   if(fp)# f/ T5 H% Z+ B2 X4 `$ P' p" R1 U8 \
  201.   {' f4 p. E' z/ K3 H2 O" h
  202.     fclose(fp);
    ' ~( O$ e2 c' l8 s) H+ ?3 \
  203.   }
    % i  z  |- P& ~
  204.   return TRUE;
    / O$ `( x9 `3 y
  205. }. a, Z% q% G2 C7 z1 p  w# m; @

  206. 2 }% w5 I: `, `/ ?9 d
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    . q/ X& c3 h5 I$ p( W' n/ ?
  208. {! z8 H1 }8 H2 Q' g1 _* N
  209.   char filename[MAX_PATH];/ r! H9 V. ^' h8 w7 m$ `
  210.   LPUPDATEFILE file,olds;1 _/ H  T) l% {
  211.   std::map<int,CString>::iterator i;0 |8 n3 k. \" D2 v6 O
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; m5 S$ e: h. w# q2 F# r
  213.   std::list<CString>::iterator l;# v( [- _! A9 n3 f2 D( J; N8 m
  214. , U7 O+ k+ X. n! v& o9 a. N  f
  215.   if(bFirstUpdate)  P" ~* U8 U# R( a
  216.   {3 b0 Y( c6 E! G! M# H4 l" z
  217.     dwCurrFile=0;
      c# L5 S3 M2 u9 @! F) W
  218.     bFirstUpdate=FALSE;5 g* D) T+ ?: q
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    " z0 Q0 c2 w" P0 x/ Y  @& W+ ]
  220.     {& k9 P8 T" v' h" ~3 I1 |
  221.       dwTotalFiles=UpdateLocal.size();
    / I8 m1 O! _6 p' t
  222.       dwDownLoaded=0;
    $ e8 [& j5 w( N& V
  223.       bSilentStep=FALSE;
    , `: o, _* ~* P4 P6 z( g/ {: l
  224.       bCompressed=TRUE;
    : c4 [3 Q) X7 i3 M  a
  225.       strExtLocal.Empty();& L- \7 X# _& X- a  {9 o  U& e
  226.       strFullName=(*i).second;- F# O# ?; K/ N. s
  227.       dwProgramState=AP_CONNECT;0 w9 m4 |; w1 Z2 B. p' Q
  228.       return TRUE;6 p$ i9 C' \: t. n1 f9 ^
  229.     }
    . q" [$ N' R4 z" i- n# d
  230.   }
    . }6 N6 G9 X0 b* z4 o
  231.   else if(bRestartUpdater==FALSE)$ h+ s& ?2 ?8 M9 l& ?! j$ j0 t$ b' [
  232.   {& f* o2 T9 w" Z5 o" W6 w
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ; Z" J: J% Y& a: d9 t
  234.     {
    4 X- N; q, p$ }; n0 y
  235.       file=(*p).second;1 @4 r& A7 d% E- q: u) U
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    $ ]7 K* }* }# k: U0 J7 Q. V
  237.       {
    ) i0 Q: P6 ?6 k! a- M% s
  238.         olds=(*p).second;
    # Z/ r+ d) |! `. ~6 b' P4 T  ]
  239.         olds->vers=file->vers;
    # o7 K  m) G$ X# v
  240.       }
    2 o% r1 R' j- A6 E! d
  241.       else- p: n" N' S3 `! x- @3 b- S+ U1 ~, S
  242.       {( {' h& Y6 @$ \4 u
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    # y: H2 F8 _" A- l
  244.         memcpy(olds,file,sizeof(UPDATEFILE));) w4 E5 @! @- P3 A1 h0 n. l- u6 j" x
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    : f3 T6 E7 F# K' `' h
  246.       }4 Y2 ?4 D$ l; o# W7 o9 R7 i
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");- F/ J$ B, k. K5 G" h( ?
  248.       sprintf(filename,"(%s)",file->file);( Y( M3 s; V0 n, W9 W8 n$ K# [
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);- A! t/ M8 L. K" `# d5 O
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    ( v' q5 @8 ~  C# o& H
  251.     }
    # K  ^! @( q1 Q& g7 p
  252.     dwCurrFile++;
    / u, ]0 b- U! I1 F6 n( a9 U' d
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    2 _+ J2 f6 d1 p' u5 _
  254.     {% Y! i+ Q0 G4 T; `: P4 u, ~( s
  255.       bSilentStep=FALSE;1 b% \3 l; H5 V& L( h" Q
  256.       bCompressed=TRUE;1 ?* O, a0 x% C' w
  257.       strExtLocal.Empty();0 R" W) v  E2 ~3 _8 ]3 V
  258.       strFullName=(*i).second;$ ^0 |$ |  h3 r) J
  259.       dwProgramState=AP_CONNECT;4 [0 H* S4 `; G2 b7 l' u
  260.       return TRUE;
    ' U/ _7 s  L4 @# L
  261.     }
    . Q  R1 e  ]3 t' T0 D3 d0 y1 ~
  262.     if(!bRestartUpdater)
    ) H" M4 ]- W8 x
  263.     {
    . r( N& I$ P+ _4 T$ k1 I3 P. }
  264.       int iCurrSize,iFileSize;% R# |" x3 D, q: J( F
  265.       iCurrSize=0;
    , G- |  T9 @! W- j/ X
  266.       iFileSize=UpdateList2.size();8 n8 p$ |, W7 Z% k
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");8 W9 r, X- |9 G' ]. A
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");! Z0 Q1 M% [. J
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* Z2 p* A# E- h3 [2 Z4 T+ s
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 s* c, m, P' @5 r/ }1 O
  271.       Fclearf(".\\update.dat");
    8 k4 c& {5 r1 b. }! h
  272.       Fprintf(".\\update.dat","Bloodyf\n");% h& O# D0 h1 H# `
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 h* G3 G& Q# ~7 ?& |( w
  274.       {1 j# E5 S$ ]+ w$ f4 E( f) V
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
      j: z' y3 F- t3 _5 x
  276.         {
    $ J7 M6 B( ?1 `+ }$ z
  277.           file=(*p).second;$ ~$ n2 W. b9 W  ^+ U: b; Y& D
  278.           sprintf(filename,"(%s)",file->file);: F! a# W& e; ~8 w6 A) Z
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    ) \/ f  U( V8 q
  280.           iCurrSize++;
    - T$ G8 Q/ M3 M
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));) k& Q9 {9 ^  F
  282.         }( x! i: {9 B# D' u" O
  283.       }
    8 B* P( H* G, D4 n) l8 R9 L" q" M( T
  284.       unlink(".\\update.txt");) B/ |* Q$ G2 \8 B+ o  {
  285.       unlink(".\\update.tmp");
    8 l" d1 ~, M' T- d: Q1 P( `- S
  286.       Fclearf(".\\checkversion.dat");
    7 f5 `( g( Q% k. O
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);8 C2 j9 |4 R# l% X5 S0 U! y
  288.       if(UpdateLocal.size())3 K" z) @7 f. |* w$ o0 r
  289.       {8 d8 b+ P: M3 A& B$ t
  290.         UpdateLocal.clear();
    4 I3 b! b; ]8 k, Z5 ?
  291.       }
      g( D8 @8 a* B6 A7 y
  292.       if(UpdateFile3.size())2 f0 N" o/ ^1 N. d" y
  293.       {* i8 e; b3 r7 X  R
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    . `) v9 u8 O/ C1 U. l
  295.         {
    4 F! R3 V  z* o: q# S
  296.           file=(*p).second;9 F' P' [, ~9 n8 o1 D# x
  297.           free(file);
    9 j8 s0 `6 z, K' r
  298.         }
    6 d4 T$ }" m6 S' e8 m/ o3 ]$ x
  299.         UpdateFile3.clear();% N( S+ H' {9 G2 c: H6 l; i5 F
  300.         UpdateList3.clear();2 A" d/ m% S5 \3 N, `2 x7 {
  301.       }& M& {, J# c4 J/ |$ `$ v% N
  302.       if(UpdateFile2.size())" f' E- k$ |2 a9 |. u
  303.       {
    6 ~  X- i& P8 x! p! w# e
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ! D* Z, J- [& t+ x4 n/ v
  305.         {
    4 r* R7 G" m6 C  X
  306.           file=(*p).second;/ ~: ^- l  J, W9 l& F5 Y8 K
  307.           free(file);5 D( A$ _! `) K3 p# J  M
  308.         }" q/ v  P" O0 y; \3 }
  309.         UpdateFile2.clear();
    , {! p/ [1 V# x
  310.         UpdateList2.clear();! l. d6 k0 d, e1 {& U" c, |. M
  311.       }( ^$ X3 U: P( r+ e' h/ W: f
  312.       if(UpdateFile1.size()): \3 Q" e8 W9 m1 |
  313.       {
    1 \! x) E+ m2 G/ S# j
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    0 ~4 s! K8 g6 g8 }
  315.         {
    ! \3 c4 L+ H" i! I8 q5 c
  316.           file=(*p).second;
    0 t. G* i' q$ y' M  i& P  h
  317.           free(file);, e* R! n" g9 |! h
  318.         }
    ) L" G! H$ l) O) G% N$ S8 O& C
  319.         UpdateFile1.clear();5 K5 ?& |% I9 W+ x) i$ a- `
  320.         UpdateList1.clear();% C3 L. z( R8 Z: s
  321.       }& X  U9 a+ f4 L' J9 t( H# i
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    - |; J" L' [: F) S" U/ C: m/ P4 |0 d
  323.     }
    ! \+ Y( [. @9 O1 D& a6 q- {9 [: z1 B
  324.   }- l- A4 {1 `) i, [+ d
  325.   return FALSE;( P. c7 |: g3 H4 x; T# g
  326. }
    + f% t" ]2 ?$ s6 R) `6 b$ g, \
  327. 4 e, E; |3 F9 s' N
  328. void CRevAppApp::ClearAll(void)/ l/ l! }; n& |3 g( T8 a
  329. {
    ) a2 c8 r, x" ~4 o- M
  330.   LPUPDATEFILE file;3 }& ?( z0 h% c6 ^# h  A! V* i
  331.   std::map<CString,LPUPDATEFILE>::iterator p;2 Z  j/ d) M. ?: ?
  332. 0 f3 m- O# D8 E$ N; u
  333.   if(UpdateLocal.size())- a$ D; v) ~9 ?( v+ q7 L
  334.   {) u6 Q" |( B7 n# P6 d- N
  335.     UpdateLocal.clear();8 Z; `; e5 N' H/ A$ d
  336.   }' c3 b7 j* ]8 [0 N$ `. F) ]4 A
  337.   if(UpdateFile3.size())
    % L! W. V- b( r/ k- A
  338.   {9 O  [: t4 w& I1 L% U
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)8 ~  o4 f" n# `! U1 Z0 x
  340.     {
    ( ~; q6 s) Z, w$ S, a, E
  341.       file=(*p).second;
      [9 Q" s: ?( S4 L% S! x" I
  342.       free(file);$ ]- G: R' W8 V( o
  343.     }6 Y. K$ G) R) Q$ {! M0 R1 |" J' y
  344.     UpdateFile3.clear();
    * \; j9 X3 F( V8 b
  345.     UpdateList3.clear();
    ; }- f7 K% ], f4 n% I
  346.   }
    , t( b2 }+ X9 b
  347.   if(UpdateFile2.size())4 u% y/ J; h* X. H( q6 C
  348.   {+ M: r; B: o, S
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)! n* [, d7 c7 o
  350.     {
    5 V9 T- |* a& Z6 ]& n; J* D
  351.       file=(*p).second;
    ; c# D7 j4 `3 d/ n1 e, Z
  352.       free(file);
    : H) F( V9 n  r
  353.     }8 ]  G* X8 u7 P5 z
  354.     UpdateFile2.clear();) [$ j$ u! s6 o+ u+ v# @
  355.     UpdateList2.clear();
    2 |% G+ H& V( D. t# N2 @
  356.   }: w8 o" h/ I. a
  357.   if(UpdateFile1.size())
    3 P: _7 w) v( O0 M# C6 \+ w& x
  358.   {, P3 g" t# O) L! w, C, m
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    # [2 p% r) l1 A; N4 k
  360.     {6 w- z# c* C: m4 U; D" V- E0 V
  361.       file=(*p).second;
    " }$ {7 n& \* P! A8 ~
  362.       free(file);
    ) S. P- v, s$ o; X1 A& O
  363.     }0 O* ]& k0 l. m5 L# [
  364.     UpdateFile1.clear();. {7 Z5 i" }% X
  365.     UpdateList1.clear();
    ( ^5 f/ x; n+ f" L
  366.   }+ I0 \2 ~# o( `) t0 G
  367. }  9 L. D& X8 }6 K- a, x' c5 Z
  368.   
    2 x- w% x+ x. y( |& p' Q
  369. BOOL CRevAppApp::CheckLocalVersion(void)
    8 r0 M3 h& j+ |+ O% Q1 b
  370. {4 y0 n: U( u9 N. r5 }% L: V
  371.   int c;
    ( l' P0 \! i# E# s0 p3 |
  372.   LPUPDATEFILE file1,file2;( n8 D  m1 u* l- t: E# U
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    7 ~) I* C& }+ G
  374.   std::list<CString>::iterator l;
    1 u0 p, B: y3 |+ C. t8 G& V8 Z
  375. 4 e" ~6 m* F" l! S& G
  376.   UpdateLocal.clear();5 K0 G0 @/ D$ e, x
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);7 Y& ~/ \) e; l  k0 @7 p
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    % _9 A$ X; L  |7 [! M
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);
    % L# O  d+ M- r9 f; |' z
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);
    5 y+ Q# B' Q( r
  381.   if(UpdateFile3.size())
    ) s) {+ l% ^- _) T9 m+ T% ~# s
  382.   {
    ; J( A( w8 c4 {* P/ b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)( U0 d2 o! z: V6 r% p
  384.     {' x1 N8 Y1 j  U+ I/ o: \
  385.       file2=(LPUPDATEFILE)(*i).second;9 k* S* z# m' }# T
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())5 x: e6 g/ p) i: {/ w
  387.       {
    % x9 m( q4 u- W7 A1 j, u* J9 f
  388.         file1=(LPUPDATEFILE)(*p).second;$ F5 z% e8 K5 {& {0 b3 t
  389.         file1->vers=file2->vers;
    3 [' h: s1 y/ m* N! G+ ^
  390.       }
    8 @+ M% p1 D4 T! z
  391.       else- w, I# r: t1 E
  392.       {0 Q  R$ E: Z' `
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));- g3 L7 ^! Q0 @
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    4 o( t1 A4 ?0 g+ N  q. G
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));. Y2 A8 x2 C+ k6 i7 a* @' {
  396.       }
    ) Z7 o* M6 n2 N7 ^2 c
  397.     }( h5 i" J: j6 I
  398.   }/ G% f4 Q2 Z6 O! G, o1 y7 I
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++), s8 M' D% U% j4 ]: H  j% h. o0 y
  400.   {% o% ]; H$ C) l0 z5 j6 K
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())& Z0 ^9 d5 h1 K4 j
  402.     {
    1 H& |$ T8 [# D
  403.       file2=(LPUPDATEFILE)(*i).second;
    3 i1 Z- u$ A9 Z: @$ F* f
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    / E( q8 l7 @2 a" w$ x/ E7 i
  405.       {8 y" G! D1 h/ x  c
  406.         file1=(LPUPDATEFILE)(*p).second;$ f9 I! m* F5 K4 H+ b
  407.         if(file1->vers!=file2->vers)3 _7 d% p1 a/ E( |9 G
  408.         {/ Q1 n; N" b# h; K) }& j
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));) ?! l9 j+ r: a4 E. Q% ^) C$ m
  410.           c++;
    ( }# v. y0 Z* k6 u2 V9 g( B
  411.         }
    5 F, x& i. d. j5 F6 @
  412.       }6 t$ e1 t  [1 e4 }
  413.       else* t* X' D7 _  T7 S) d
  414.       {, e0 Q: K3 w& m. c. \# m
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));& _1 O  c! R$ q3 v7 F8 Q6 `% u$ a6 P
  416.         c++;0 `1 O* Y1 j4 x0 n
  417.       }" \* T6 O+ y7 ~6 k6 R2 \6 G
  418.     }( ~9 P) L3 [* c: u3 d
  419.   }
    0 z. Z8 w- \8 E7 i
  420.   unlink(".\\DownLoad\\update.txt");5 d$ B% e6 O0 ?# t) \
  421.   if(UpdateLocal.size()) return TRUE;
    7 ^. d( s, V- n4 H, E' ?
  422.   else                   return FALSE;0 d* s1 ?; b4 n5 Y1 R
  423. }1 t5 h) _3 O, i6 s( v, c

  424. + @) U  N/ }* D" g/ w+ x" B
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    & P3 P+ U; H6 l  g/ d) ~
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    , ~; l: j  T8 Y' [# k

  427. " g  H, k" D' {& t0 V3 a+ D* p
  428. 0 G! a- |% z- ~0 u6 g, l" A

  429. ( \  P1 t0 w4 K0 n! R# I
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    ; q* k/ a. k8 R5 u
  431. {! m% w: W9 a8 E5 k+ M) f0 s  \
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    6 _- v- q' T* t7 E; O% v8 ~
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    $ m2 E# o( J9 n: A% C
  434.   {
    ! L; E% |2 f) q2 [7 K% }5 x
  435.     char szLanguage[50];" p$ l, I' ^3 V& {
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");9 ^2 V. t1 j8 |
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;) J. O$ t; F: C; K3 d- s
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 f$ X- n  ]2 V* {. t% g. _/ w
  439.     else                                   m_iLanguage=ENGLISH;' n6 e5 `, k- F; j4 d7 c5 q* j
  440.     char szRegister[100];' M0 H. p1 o6 @; G- p1 w2 Z8 J
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");2 X5 g  n/ i, f2 ]5 W! `
  442.     strRegsName=szRegister;
    6 o  @2 q# q% k; h4 J0 ~% z
  443.     char szPatchURL[100];
    ) n1 P! I4 i( n2 _
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");& N2 A. x) u' j' G  L) n9 k, k( p
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    + [" p  i' a. d: F
  446.   }: a. q" f# M7 v& y( ?9 z
  447.   else+ w$ r. i) X$ k/ H8 ?/ k. t$ n; y& ]
  448.   {
      P* l; z$ H; q) M
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    6 W0 C7 g6 G0 J( u
  450.     strRegsName=DEFAULT_REG_URL;
    - `& o, P7 K; Y+ a7 P- Q
  451.   }
    . V1 ^% Y# y* ^* ?3 @+ U% K' ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)5 l. ?0 Q; Y# s' }1 x
  453.   {
    # O# i8 z( z; v, |/ Y
  454.     char szIP[50];1 x1 w0 K, \2 A3 j
  455.     char szDIR[300];
    / s1 N$ v, F) ]
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))4 l7 z  u; x$ m' U3 b) ^
  457.     {0 j$ w( `. q+ ~6 }" n- v
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    9 i- n( e8 L( @
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    0 q+ ]) t+ w3 ^, k" X
  460.       strHostName=szIP;
    " G' h8 k) ^7 s) ^& ^# _1 |* f
  461.       strHostPath.Format("/%s",szDIR);- j# e/ P# c2 s: @+ p
  462.     }
    4 l6 S. \% f0 K7 j4 A* Q
  463.     else
    : M% O! |" U1 e: ^% V
  464.     {! S: \# |# t1 x% H, I
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    4 \# Q; g6 y6 _8 ~. z) l3 D) B2 u
  466.       {- t! u* G8 v- l" P8 p1 \5 o
  467.         char szLanguage[50];
    7 e. M  |' v, F" l
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");* C" C: ~) _7 y) ?, ~
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 N3 x) N* a* U! V' V  r0 X
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    ; K0 W0 S7 Q# ^
  471.         else                                   m_iLanguage=ENGLISH;
    - h- X' q2 n8 a- C  T
  472.         char szRegister[100];& T) [. P0 N9 J( s1 |
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    . o' \" y6 X! h: W: C5 Y3 C- @
  474.         strRegsName=szRegister;% H8 b! q; {6 X
  475.         char szPatchURL[100];# R: [: i. Y5 o
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    , F  ?9 ~3 T0 C3 ]( Z; w8 F
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);2 s6 I$ v6 N" [
  478.       }! z, |' F1 [- X8 a# G
  479.       else
    7 s8 Q2 n# l% {" u% V. z' J3 _7 |* [) W
  480.       {* S! s# o1 V/ Y$ T( F, S4 r: L' ^/ X
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    ' }; M% b2 W+ Z. n' ?
  482.         strRegsName=DEFAULT_REG_URL;3 {: \9 f& `' c; \
  483.       }# I7 s5 M5 U4 d6 C) t% @  x: o
  484.     }2 h$ |2 X) ^; ~: U6 y
  485.   }
    ( g: M5 t2 H4 A2 e
  486.   return true;( J' {4 }& D4 \. T' C/ |# N; q
  487. }  x( A( j8 }# \" l. @, J! w9 m

  488. 5 X3 \! N9 Z! F
  489. #include ".\ZLib\unzip.h"
    3 f5 p  g7 K$ `! }, D, V
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    / C( W) ]0 C8 `! D! U+ {
  491. /////////////////////////////////////////////////////////////////////////////% A" u6 T  V4 C( C1 X
  492. // CRevAppApp initialization
    5 D, K' L# k4 b1 v# j9 H/ g
  493. 6 p* J. d$ {: s( s1 j
  494. BOOL CRevAppApp::InitInstance()
    4 b5 R! b: c- o; P3 n
  495. {
    , D; F; x- _$ t( }& {
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];0 \! ^9 s& w( X
  497. * V7 H( J0 P7 Y5 l
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);' D6 j3 l5 H0 l" w
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)): g; H. l- ~5 B% |& h5 T* _
  500.   {7 X/ \2 a' _! A. F+ h3 W
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    2 y4 p5 ~& |6 U; o. o0 q
  502.     GetPathFromFullPath(szPathTarget,szPathSource);. ^9 ]# |0 S8 s( F/ P3 T
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))# z3 `$ x1 J4 H- S4 E$ T8 c' p
  504.     {
    / s1 z0 p+ r; a
  505.       strcpy(szPath,szPathTarget);0 B1 M' X4 P" P. @  y
  506.       SetCurrentDirectory(szPath);0 v, p8 L4 m) r2 s8 `; c& h: H
  507.     }
    " r$ c& u: h4 V2 k7 N1 W1 u
  508.   }
    3 v3 m5 k% Y4 ]
  509. #ifdef _DEBUG
    $ j2 ]3 |! ~/ v7 j( {/ Z
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 t  _4 b9 A9 |+ k+ i1 K( `7 v
  511. #else! v3 T. _/ ]% n
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" K: z4 w- _  h
  513. #endif
    ) O" j' P/ _$ W. n) I( Z
  514.   {* Y$ K& o& `: y
  515.     char tempFileName[MAX_PATH];; {! q1 `3 F$ i# d7 G( Q( k' @
  516.     strcpy(tempFileName,szPathSource);* J+ b* H# n" ^9 z: [& |
  517.     tempFileName[strlen(szPathSource)-12]=0;& |( o3 d1 ?7 H+ V0 B+ ?
  518.     strcat(tempFileName,"\\$CSUpdate.exe");) r4 h6 {( G% ?! F& G0 v7 R9 `" [
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);( X, x( y$ W$ P( i7 A
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ; E$ @& I! d% T/ {3 o5 \; F
  521.     return TRUE;
    4 C- J# n8 a- ~1 q* _' [
  522.   }
    ; ^( h9 u2 _7 e
  523.   // Nuke 0118: Delete run.exe
    % G/ o4 f, |2 N$ ]9 S' @  D4 v
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );9 v" A- y8 N: Q" d2 o
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");+ _6 M9 D! k. q  j; r. v6 D
  526.   if(!ReadCfgFile("Config.ini"))
    # |# }& X( B. F
  527.   {
    * G8 c- ~4 l3 i3 N
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    : K% m) b9 _0 }
  529.     return TRUE;8 _3 |# ?4 r+ r3 d: B8 z4 F3 h7 r
  530.   }
    ' {' ^# O9 }' _. E
  531.   HANDLE mutex;1 W9 M9 u: C+ e" t
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium")): y8 I% K7 ~. Y9 {
  533.   {
    ! l8 \* V) V! w/ ~; B8 e
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    / a+ c2 |& {+ A! H. d  V! U
  535.     {) k6 _" G" h& K: h
  536.       CloseHandle(mutex);* Y/ _( ?/ Z2 w" K: u/ Z, W
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    7 Q- f4 Q/ p/ j- P7 t* w. P
  538.       return TRUE;% H; `) X7 ?" M4 h$ o1 \8 U. K
  539.     }$ m( Z1 d" u! ?+ d9 `1 g
  540.   }  2 J* L. b$ y6 u% x& [7 t0 j+ u
  541.   CloseHandle(mutex);, i2 X: n  X4 Q% I( s' B* o

  542. ! z% m/ g8 D. j( R) e2 N2 X, m
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);. ~2 O1 i$ j: T+ J0 ]1 F$ |0 E
  544. ! }; K& p4 F% U5 A6 v5 ~2 O8 S* x
  545.         AfxEnableControlContainer();
    ( w0 g. y& A; j+ k3 T- \
  546. 0 x9 T% B2 R1 F  I" J- s# u9 J
  547.   bCanUpdate=FALSE;
    . X( a6 F4 I. R! a+ Y
  548.   dwStartUpSteps=1;- k" s0 x/ C0 A9 F$ a, H  e8 Z- @
  549.   dwProgramState=AP_NOTHING;
    ! J. [- u  U& p( j, g

  550. " j6 z$ R* a" l: o& @6 D
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    7 }9 T$ c& u! X: p/ y7 x
  552.   x; Q+ X% ~) [0 O- P( ~) }6 n
  553.         // Standard initialization6 @% O& @8 n% Z1 J# Q: t
  554.         // If you are not using these features and wish to reduce the size2 @( o) N9 H+ z3 {) X
  555.         //  of your final executable, you should remove from the following
    $ ^; n/ a# G* ^- k$ v
  556.         //  the specific initialization routines you do not need.
    4 z. {2 Q. L: j1 f

  557. ' {5 d+ L5 K' y# k' S8 N
  558. #ifdef _AFXDLL! _  z2 P5 i. ^) c( p% J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    # M: n# ]6 K: F6 l% D6 x. h7 a: D
  560. #else
    * _) H' ]* ~, D& m6 g7 D( }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically& Z4 H$ p$ w, a3 z! r% f
  562. #endif
    " o; ?( y# p7 S! k5 `1 Z0 [
  563. & x5 A! X( A1 n) T" L
  564.   dlg=new CRevAppDlg;
    . Q8 T+ N, f0 Z: {6 K
  565.   dlg->Create(IDD_REVAPP_DIALOG);& f' C# x4 p1 a6 _2 D" m. I6 p- z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    $ A' `0 X5 T' K5 |
  567.   m_pMainWnd=dlg;9 c& f% T5 H% h, I- b# A
  568. 1 m, I2 S$ U2 }* Y( B1 F
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    - c2 J2 U! C# O3 D. h) z5 \" D! |" }
  570. . c# l; A9 l, @/ W+ t. R- k/ }8 k7 ~
  571. //  GdiplusStartupInput gdiplusStartupInput;0 q6 F5 F. j6 f3 K* C9 E, H- x
  572. //  ULONG_PTR gdiplusToken;* ]3 |+ Q, K$ z# M; l
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    ; v8 w, D6 m; @, w, A: ?1 p
  574. 0 b4 u+ t: `3 a! ~5 u
  575. //        CRevAppDlg dlg;0 @  z* n: p' M2 L" o, z6 j8 r2 D
  576. //        int nResponse = dlg.DoModal();
    ) M, N/ {! |. D8 }& ?& `
  577. //        if (nResponse == IDOK): E9 T6 }  B# ?9 Z+ k( r& u4 N
  578. //        {5 U# A" N& V/ i8 @
  579. //                // TODO: Place code here to handle when the dialog is+ f- u0 h5 t9 l. e7 ]
  580. //                //  dismissed with OK# P2 i6 y8 y. E9 y8 @0 Q- X, N
  581. //        }
    # U: R3 Q1 h" @9 O" p$ g' x
  582. //        else if (nResponse == IDCANCEL)
    : `3 ?( `0 W# L7 b9 N) S
  583. //        {
    " \/ |. o9 c5 _! D8 f- |
  584. //                // TODO: Place code here to handle when the dialog is) `2 D  y3 f6 X1 v( O; Z
  585. //                //  dismissed with Cancel
    , v  X$ t1 j( {: C' |. ?
  586. //        }
    ; W) U. R: D! c
  587. ! C0 t7 |" |3 ]; ^$ X7 \( |1 E
  588.         // Since the dialog has been closed, return FALSE so that we exit the- ?& t. [, Z& l5 t
  589.         //  application, rather than start the application's message pump.  p  m9 b' a6 x1 j" `7 v
  590.         return TRUE;
    ! P# y% y* v; N0 b& L8 x- x
  591. }
    3 C1 H& z- }0 O4 x4 v7 G- k

  592. % W# E: A8 @/ U  @* q, _5 ^1 W
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
      X0 A  u0 Y/ |+ ]4 ^
  594. {' |& }; ]' ?0 g6 N# h
  595.   int i;
    , V* a# M1 |$ n" M) V8 _) A" y
  596.   char *szRet;
    * ?( |$ O0 Q, K1 Y8 @

  597. 1 X2 t. ]( R# |7 R
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    . ?/ z1 a9 a% W5 W7 r9 U
  599.   if(sztoken)
    7 x9 S- v3 C- ?& [1 E* r" W* n
  600.   {
    4 `# ]/ o: Y) p5 {2 s
  601.     szRet=&sztoken[itoken];
    ! A' A( x/ s9 H
  602.     while(sztoken[itoken])
    5 y/ r7 Q: ]1 I+ L- E# D, E0 \& H
  603.     {
    7 `# q8 C" I; b1 D# T, \' p2 c. b
  604.       for(i=0;i<(int)strlen(token);i++)
    0 z1 j% I* x, @9 p9 m
  605.       {
    ) L) f' J! d% W8 z; h- Z  u! |$ Y
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    6 u5 \' [5 s* ]2 w" |4 H
  607.         {
    6 G6 `0 w; n$ ?0 h& w8 U6 d$ u
  608.           sztoken[itoken++]=0;7 M% F5 S( D! `- z7 s  G
  609.           sztoken[itoken++]=0;
      B1 g" y% l7 v
  610.           return szRet;1 f0 l) G( R( N" l1 w4 {( |
  611.         }
    ' H' l2 `# x& a* b+ s( f* F+ I4 q( B/ i
  612.       }
    2 `0 A5 Z" C% Y8 Z- ~# C- S
  613.       itoken++;: n' q! k6 p; Y. h+ Q
  614.     }6 v, l0 c7 }$ e, I9 U! T. }4 X
  615.   }: M# R: V# w5 ^3 E1 f% N& H! O/ O/ ]
  616.   return NULL;' r! i# s1 t0 ~- {6 X% ~9 Z0 p2 ]
  617. }. A' S, y' K; z: l9 E; y+ s

  618. 2 r! d9 G- A, j( f# y4 x
  619. void ProcessProc(long Total,long Current)7 s  i" C; c" r5 q
  620. {) `8 @6 e+ n: P1 @: J
  621.         MSG msg;
    ) F* A" ^' A( g9 f- b( a" P
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    , m/ M& W7 _! N6 D
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));+ ]6 o/ S6 c0 e; x2 T
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    ' M5 q7 N# F% z" C2 l* U4 X
  625.         {
    * [' }9 V7 X8 K& A2 ]; Q$ W
  626.                 if(!GetMessage(&msg,NULL,0,0))7 N; M- f8 r* Y' N! y
  627.                 {
    ! W( e$ U4 }, Y0 _
  628.                         return;+ ?3 h. s0 {0 A" d2 ^: x5 y% B
  629.                 }
    1 I: G# n: ]+ v; X5 N0 j: Q
  630.                 TranslateMessage(&msg);' b' {( X: ]5 U# T6 A
  631.                 DispatchMessage(&msg);  `7 L  ^! K. L2 D0 ^2 D. R
  632.         }        $ m% q/ z4 I' B0 Y  V
  633. }5 O: m8 R/ _. ^

  634. 3 k. z# D8 C1 P3 x
  635. BOOL bFirstChar=TRUE;* Z9 S: L! W( c# H' v2 t
  636. 6 [$ i5 Y: m. K9 \3 i
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    ) ?7 v2 O2 @: i! E5 V
  638. {, O% u* d6 e9 i" [! y( D. P$ q
  639.         // TODO: Add your specialized code here and/or call the base class2 h" s7 y6 D0 z* ]6 J
  640.   switch(dwProgramState)
    $ U3 U3 \0 h1 H3 K: h% K
  641.   {; i+ Y0 Z; m# f) O/ B0 y8 Q; M
  642.   case AP_NOTHING:( `0 w* C8 s3 b3 P
  643.     switch(dwStartUpSteps)
    ( R0 |% X/ q0 ~# R, a
  644.     {
    6 P. W  U% |" h( b
  645.     case 1:1 ]% k4 B  m' p9 Y# P; p+ |
  646.       {; @( d6 d2 c% a$ ^8 [/ p( l6 ^
  647.         int i;8 {! w9 A- y. N! V
  648.         CDC *pCDC=dlg->GetDC();
      x$ a4 B6 t$ ?
  649.         HDC hdcwnd=pCDC->m_hDC;9 e0 Y2 ]/ K$ L
  650. //        Graphics graphics(hdcwnd);$ [1 ~+ `9 [: X0 {+ Y* v7 U2 O
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");2 z' |* o7 {2 Y4 @3 ~8 D
  652. //        INT iWidth=bitmap.GetWidth();; z8 L) z3 I0 U* |% c
  653. //        INT iHeight=bitmap.GetHeight();+ [; p2 |/ k% @- a# d( f
  654. //        Color color,colorTemp;
    : R" t  H7 n+ h! O9 u7 v
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)$ h. \3 ]+ o% S" a4 P4 b) m. h9 R' x
  656. //        {9 R7 z6 {6 ~. |9 x3 G
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)& J! Y5 w6 q) a$ k1 ?- ~3 i
  658. //          {, |( ?  n. ]' @) p& G; }
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    6 V  R4 ?! `$ O9 U. I
  660. //            colorTemp.SetValue(color.MakeARGB(: s. `, D, X- ?& m. J, J" ]; I
  661. //              (BYTE)(255*iColumn/iWidth),* E! |' E, Y! V0 B' F, M/ `6 G
  662. //              color.GetRed(),
    8 g3 N/ E/ ~# x; q; ?6 N- q
  663. //              color.GetGreen(),- c9 G' F* \' K+ g
  664. //              color.GetBlue()));
    5 Y% E$ R. D: v8 s. s! V
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);3 F; q) X1 Q+ M9 R8 A/ {
  666. //          }
    * k$ w* ?1 D( b
  667. //        }- ^% ^+ }4 u: {
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    2 J% ^$ C% N' u% T/ e7 O
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& _# t( h2 e" t' i" Z* |
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");7 V9 x4 b6 w0 ~
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");& q# v# u; X9 L! X
  672.         for(i=0;i<240;i+=8)% s* [2 N1 m& p/ l
  673.         {
    & m; D% `  N; Q* O
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    " ?0 O# l) l7 d) I
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    5 w5 `/ b5 J+ T. {' {$ K0 y
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & s  K- K/ E% x6 J' u
  677.           Sleep(33);& F8 @! E7 D2 S' @% V
  678.         }( \. }( }& U! ?' v9 o$ v
  679.         Sleep(1000);+ A# k2 G7 S7 M1 w/ e2 O
  680.         for(i=240;i>0;i-=8)1 q" r7 I% K! [9 W8 ?* l
  681.         {9 z' z0 n/ |7 a* Q3 Y$ s% f- l
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    0 c0 O  u+ q3 b
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    4 @! I; e3 t' }) Z/ d4 `3 w" s
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    8 L( O% f5 n% G% F6 i* g* K
  685.           Sleep(33);
    , x2 h: Z! r2 k  S9 E
  686.         }
    & U' H; A) w( b; p6 v) X
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
      J  l$ O4 q$ w
  688.         dlg->ReleaseDC(pCDC);
    0 t) Z& |4 Z4 ?; }5 l
  689.         DeleteDC(hdctar);
    " V! m( G! Y6 ~6 F2 E/ v. D
  690.         DeleteDC(hdcsrc);$ j! I2 {5 {0 H
  691.         DeleteDC(hdcorg);
    , o, S) Z2 {, V0 ~# S( z8 V$ Y. P
  692.       }; |, ~( e  K% X/ q# C7 B; c1 D. @' P
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);) D8 I+ A) l2 S! }/ j# d& D
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    + J4 A5 h+ b4 i9 k) A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");
    # I9 W* c% R/ K* p8 j
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");; v7 H0 e$ y' y5 K
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);4 [3 a- I; n$ E- ]" f' ~# s
  698.       if(!Dn.Connected())3 e6 a, W* f/ Y- U3 a
  699.       {  U! @2 m) }- A
  700.         dwTotalFiles=1;! [* [- o5 m9 [" p& W
  701.         dwDownLoaded=0;, G4 l, N4 d: U" ~: ]
  702.         bSilentStep=TRUE;
    2 k( }1 ?* Q4 {) e1 `7 c
  703.         bCompressed=FALSE;* Z9 t# n% h7 r" {- \" a/ ]0 R
  704.         strExtLocal.Empty();
    . F3 L5 U' ]- |, B
  705.         strFullName="readme.txt";( r& A6 E3 s6 o& b) b
  706.         dwProgramState=AP_CONNECT;& J3 ]6 M8 _& T0 N( T) `2 k0 L! o
  707.       }7 y8 o9 a0 Q; D1 z; l/ d
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();1 e9 }+ f+ }& A4 X8 ^
  709.       dwStartUpSteps=2;
    ) _3 b( C' ~, }; L
  710.       break;
    ( w4 d* L$ O" s* c% r! _
  711.     case 2:
    # M' g) K( v5 M, S( `
  712.       {0 n6 x8 f- R( q; w; \
  713.         int iEOF;
    ! ~. Z, M( W7 P* Q% h( e: {' m
  714.         FILE *fp;
    " B  I/ N. g& U1 E/ F, j" ^: P
  715.         char szString[512];' r9 m+ j3 K$ }- T2 O
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 r. J$ Q( y: i3 m8 G
  717.         if(fp)
    $ P7 D  t3 ?8 `. [3 s/ V& O6 D& ~* N
  718.         {- L) ?& q/ q/ K& Z  w
  719.           do
    ; y* M) }& |; b+ h
  720.           {
    2 O0 G  q$ |( s* h- z9 G
  721.             iEOF=fscanf(fp,"%s",szString);' c; F5 f5 J7 o1 q: \! I" _
  722.             if(strlen(szString))
    / Z- M* W4 Y9 _; F; w" I% G
  723.             {. z+ v) V, c# q* b- T) |
  724.               if(bFirstChar)
    * ~9 d  k0 b5 d" }0 f- g
  725.               {
    & H3 ?/ `! ^- _0 u+ O4 H
  726.                 bFirstChar=FALSE;) U& A1 u% p  R: J0 ?& Q$ u  `5 u! c
  727.                 bConnectIsBig5=FALSE;
    ( h. o5 [! o$ C! T5 u$ N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    2 }$ c" ~6 m3 S6 F/ m" G$ v; M
  729.               }: f$ s4 W% T0 q6 W; W/ N
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));9 L9 M8 ]6 _' N  D6 L: [( ~
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    : T4 a4 V, N3 r7 E* Y7 C1 Z3 W6 G
  732.               dlg->m_ListText.AddString(szString);
    ) [5 N9 Q+ P; A
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ _6 y) j7 Y- C4 j6 }: V* z' ^3 t
  734.               *szString=0;
    ; |0 _+ a/ U" g" ]; u
  735.             }
    1 \. L$ j& T( I/ b& y1 T: {; }, z
  736.           } while(iEOF!=EOF);4 k0 \' {, p8 O
  737.           fclose(fp);& X2 l% Y0 `- |4 ~
  738.           unlink(".\\DownLoad\\readme.txt");) O/ G3 L/ S/ I4 t
  739.           dwStartUpSteps=3;; x! V% N% O: Q; v& v5 I1 W* f
  740.         }
    1 d) o7 g$ q; E- x) E) Z6 l
  741.       }
    + I% `* v8 h4 ]& F2 _* p
  742.       break;
    : C* y- _! N  v" ~: C& f$ b$ I9 r
  743.     case 3:
    / j* B. z( E; X' y, f- c6 m
  744.       if(!Dn.Connected())
    1 K! i/ d. G* A1 ^( j3 M
  745.       {9 ?4 W4 u" U" [% H/ E
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    - ^3 C3 b" P% D6 P) c2 K+ |/ S
  747.         dwTotalFiles=1;
    ! O: ~( Y6 Y6 P
  748.         dwDownLoaded=0;1 C" r/ v) d  l$ m  u9 [: W
  749.         bSilentStep=TRUE;
    : B/ j! o& p4 K9 ^2 }: A
  750.         bCompressed=FALSE;) _' K8 {% {3 X4 n
  751.         strExtLocal.Empty();8 I( u, W. y' R
  752.         strFullName="checkversion.txt";* N. j- B2 u. Y2 L* H
  753.         dwProgramState=AP_CONNECT;
    , L5 j) T! w% A) c
  754.       }# i) K  s  R8 N( s& z( V3 l0 p+ o
  755.       dwStartUpSteps=4;
    ! p& y1 d* G* m9 R8 E0 ]! z) [
  756.       break;
    1 T( V$ m5 F" }/ s2 q: s/ _
  757.     case 4:
    ! t) V; e# D" b7 z6 x6 E% v
  758.       {' |9 `4 ~+ ?0 v0 l
  759.         FILE *fp;
    & n+ j/ Q6 K& ]3 ?. R1 c
  760.         char szString1[128];
    % V0 B3 g1 g$ H/ A6 E7 Q* i
  761.         char szString2[128];
    : X" w5 i7 Q) \. W- ?
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    8 c; h( s- @, K  n# i: q$ l) h  l) _1 U
  763.         if(fp)
    , P6 O% l9 C. Q) J5 {
  764.         {, K+ c4 p7 z, D# j
  765.           fscanf(fp,"%s",szString1);
    5 D+ q5 A- R3 e* q. M
  766.           fclose(fp);
    * S* k( [3 I+ p+ X! X# G
  767.           fCheckVersion=atof(szString1);
    + {5 X3 x) n3 [8 g/ R4 G
  768.           fp=fopen(".\\checkversion.dat","r");# P3 a2 E- j; B0 `
  769.           if(fp)1 l! l8 {5 J$ U/ C! {, h
  770.           {
    * o6 A  x8 M) ?9 e
  771.             fscanf(fp,"%s",szString2);
    2 A! x; g+ e$ Z0 E4 n& a7 S0 T, ?
  772.             fclose(fp);; n/ v' U0 f: M1 X; Q$ M
  773.             if(atof(szString1)!=atof(szString2))8 _2 a3 C4 n; N# d+ j, Q( k
  774.             {5 I2 b( t: A# U/ @# Y/ I' H: K
  775.               if(!Dn.Connected())
    ! G( D. I# Q/ E. j2 w0 k$ {/ b
  776.               {
    * a2 ]2 J; A  B. u# z
  777.                 bFirstUpdate=TRUE;: x$ i  @  K6 ]# y; d
  778.                 dwTotalFiles=1;" f8 c9 U3 R8 Q  Q5 o
  779.                 dwDownLoaded=0;7 D. [9 h1 }: Y6 e2 J: m* P
  780.                 bSilentStep=FALSE;. L# c8 M$ x; U" n3 c* |+ F
  781.                 bCompressed=TRUE;, A, t& A: B4 f1 }1 {
  782.                 strExtLocal=".\\DownLoad\";
    - K; ]8 }9 S1 g
  783.                 strFullName="update.txt";
    ; A  \& S7 d/ {6 z' z" E1 Z7 Y
  784.                 dwProgramState=AP_CONNECT;5 H# A& E7 s  L; B2 ]* O
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    $ m3 z1 I: {% H. O' ~8 b7 R: ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");0 [. j5 h' \$ a% S' ?+ c; a) Y
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    $ {3 \: ?" t1 n0 K3 ]

  788. 3 L+ Z  P# _% f: H+ L+ R5 n7 a. n
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, a; T4 G. B+ t0 `: y6 ?$ K
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    , z; D, A- F/ x  K& j; X6 c7 N; ]
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ; X9 F! r& ]+ Y5 _9 X& u
  792.                 {  z) f3 b4 `# Z: U! e
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    " P" S! ^$ r# d( K
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    + f+ J" {6 e; X$ B( H0 u2 O, b4 c
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & r! {% t3 y/ Y, \* Y
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 {% [  R3 v' A7 Z
  797. 7 H; z) }6 A& R) Z# z! Z5 A
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");% c# N1 @8 [% z- D
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
      p1 {3 y% p8 c" K. W, ]4 t  j' e/ n. z
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    + A5 k) W1 ]! S# c
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    8 D9 w1 \- ~/ J" l, n) n- T& H0 X- c
  802.                 }2 H# I3 J! V3 c7 _# y
  803.                 dwStartUpSteps=5;
    ) S& {" d2 ^' Y8 T' |  C
  804.               }; h! T$ ]5 s$ R7 B8 j8 [- r( }+ V/ G
  805.             }, s$ F- Z7 M" ?; C/ V
  806.             else; O0 a) P, s) y1 @8 O
  807.             {
    $ J" K3 I$ n9 _, g6 K$ Y! n( R
  808.               unlink(".\\DownLoad\\checkversion.txt");: a/ A# r$ K% H, ]# Z1 _) o5 M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");* C1 `1 T& \7 n9 u
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& Q  N3 }9 I( i( z4 f
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    $ D- W; [% e1 L+ }- o

  812. 8 W9 z0 G' r3 J3 w" }; n
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ }2 ~# P7 k3 v5 n1 @( C' ~8 I
  814.               dwStartUpSteps=99;
    ' L# E, b# ]; e: g3 u. L
  815.               bFinishUpdated=TRUE;% P8 P1 B4 A5 }3 T
  816.               bCanUpdate=TRUE;! }8 @2 z* y% q! H' C4 K+ }
  817.             }
    1 q# N' A" n% \& W
  818.           }
      P" _9 g( i; i/ X7 g6 S- ]
  819.           else& n3 q, X( B+ Q2 O) N
  820.           {
    4 F! Q1 H/ X9 j  @: v" W
  821.             if(!Dn.Connected())
    2 s* @" d) {2 N8 w3 t
  822.             {
    , |0 A$ c+ W7 G) F$ ]4 x
  823.               bFirstUpdate=TRUE;; U8 @! t  e0 I) _9 @& q
  824.               dwTotalFiles=1;
    4 g4 S* ]" I' h& n7 t. I
  825.               dwDownLoaded=0;
    " p" Q  f1 w  W2 z! A( r
  826.               bSilentStep=FALSE;+ Q- {# Z5 Y5 h% \. `
  827.               bCompressed=TRUE;& }1 i  \4 e) }& p! O- y
  828.               strExtLocal=".\\DownLoad\";
    ! n3 {; E5 x$ l% p: ]6 \& ?
  829.               strFullName="update.txt";
    : V: E# {, I9 p/ \) k# O8 \8 W+ L' w
  830.               dwProgramState=AP_CONNECT;
    3 B8 ~' h3 h. M" J- F: f: y. R# A
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    6 U& P: {. P. [1 ^
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    4 i1 v( ]) ?! s! B* I* z, d3 J
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    9 N5 e  l, G% G+ X5 U/ L4 f7 X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  n8 A: d) Y" |- n
  835.               unlink(".\\DownLoad\\checkversion.txt");5 V7 R& ?+ H8 X) ?% R. V
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    ; F: n$ P- N3 D# Q: f: r( ]
  837.               {
    ' ]) W9 Y( M' k
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    5 u% U3 e/ o9 F( }% Q& \1 N1 j! d
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");3 h* j" v$ D- V# C1 j/ L. X& q
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");9 }  r( y: }% I% k# {' ]# k
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    - _. C; r  H2 `7 r8 i' C
  842.                 * ]# Q8 o) }2 s5 E* z* L
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) M$ U, ]  ^% c; v. I, k
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    $ ^; E) a1 J  y* ]  V* [
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");  L! s+ Q: I1 J
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 G7 C& K1 D+ w- G* B
  847.               }- Y5 [& l3 g' }0 L4 ]; I) t) b% w: ^
  848.               dwStartUpSteps=5;  e' z1 t4 h( S2 ?+ Z
  849.             }
    / |7 K, i8 F( q
  850.           }
    - {3 _7 c) v5 K6 o1 y& H: O
  851.         }6 q# s$ n# [: a1 e( C5 s% i0 @, M5 r
  852.         else( l, y8 w+ F; H8 I% p
  853.         {1 n1 X( |' z, Z( d/ C! f
  854.           dwStartUpSteps=3;$ A1 t' ?* O2 u+ J) a
  855.         }0 i3 f3 h" L  l) r7 N' Z
  856.       }
    7 `2 e3 k. a! Q+ G6 ^' d# S. |) Q/ ]
  857.       break;0 ]. S- ]# h0 O+ u$ t& P' o* e
  858.     case 5:; }9 U" }4 b  _9 u+ d0 @1 f
  859.       {
    1 g5 I: ?. h  ?
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # U7 r6 A( \5 `( j  P
  861.         {. \  ]. x' G% s3 \
  862.           int opt_overwrite=1;) W1 i3 d6 U* ~4 n" H$ W: W
  863.           int opt_do_extract_withoutpath=0;
    & q1 k! ^, D3 b$ a$ ^
  864.           unzFile uf=NULL;1 l7 t+ E6 w+ C4 m9 D+ F4 Q' c1 p

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

評分

參與人數 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-2-8 07:23

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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