找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
2 U0 x/ Q& O7 Z) W. F, Q; X# T; U0 R
  1. / RevApp.cpp : Defines the class behaviors for the application.
    , B5 v6 ~, B+ B  v+ W1 E2 g
  2. //
    : w2 F4 B1 f; r% `4 x9 l% D* {3 I2 T

  3. 0 O9 j7 R$ [; `8 C* |
  4. #include "stdafx.h"
    - O/ F5 g( `& N3 V- A6 B; P% K
  5. 7 g4 a: Y8 G( i
  6. //#define UNICODE
      ~% j- B0 t1 |1 v
  7. //#include <gdiplus.h>
    : q" j7 A7 J: _! H7 R! e
  8. //using namespace Gdiplus;
    * }% R) _2 B% r; z" u* y
  9. # L4 I5 O7 c/ @2 f& O+ a
  10. #include "RevApp.h"1 u1 C) J1 i8 s7 j3 e- S+ m
  11. #include "RevAppDlg.h"# S) L; l$ K$ k' Y7 a
  12. # g: h" ~; y* c. o1 i( G" Z
  13. #pragma warning(disable:4786)) a" M( N0 `* _% @
  14. #include <map>: x* n2 f' G$ s. G
  15. #include <list>9 u$ c0 ?: s/ e
  16. #include <direct.h>
    . C( R  q" \- o' y$ V
  17. . Y% c3 b' w( Q3 f0 `. ^
  18. #ifdef _DEBUG( v" O4 y2 g& J% ~9 d
  19. #define new DEBUG_NEW
    " X. Z& s" `5 ~- I: e
  20. #undef THIS_FILE
    " b4 E5 B- Z3 D; ^6 m2 |
  21. static char THIS_FILE[] = __FILE__;) @4 b% y" ^+ W% z+ J
  22. #endif
    - s3 s6 F( I) t
  23. #include "SkinResDef.h"2 n9 Q6 p( B7 l7 @6 `
  24. #include "ChangeBG.h"$ x0 ?- c5 r' F2 l( O5 M* y
  25. #include "AFXINET.H"
    2 o; a% [9 ^& ^1 C8 t; V' Z( e* ^

  26. 2 m. o* v5 J, p
  27. #define TRADITIONAL_CHINESE 0
    1 c5 x5 [5 Z( U' C& |5 z) u
  28. #define SIMPLIFY_CHINESE 1
    , v7 U1 N4 Z- w0 H. |8 X
  29. #define ENGLISH 2
    . w: v/ V. `' h4 F8 J( g; b
  30. int m_iLanguage = ENGLISH;  J! h$ d, U6 O2 q8 D0 N
  31. /////////////////////////////////////////////////////////////////////////////0 Z% B$ D/ l- Y4 y1 m
  32. // CRevAppApp, t+ F* l) @9 S! j- p! K8 k
  33. - |9 D+ `& w  P5 H0 R( h# Q
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    6 a: c1 Q% c( u- e) I  S9 y5 c
  35.         //{{AFX_MSG_MAP(CRevAppApp): G& p* I/ v4 }) f# X4 u4 R
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    4 n# N2 _$ s) y" }2 T7 A1 B% J
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!- m- Q* l: g, a  |" l0 s) y3 A
  38.         //}}AFX_MSG, r/ j) v. b3 Y7 Y+ }% t+ H  |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp), t* |. e$ q1 g: f" C  u
  40. END_MESSAGE_MAP()  P1 |- q- r" \; w' F/ Q, F# j
  41. 3 h; j4 }) I  i
  42. /////////////////////////////////////////////////////////////////////////////
    7 S% E$ h+ p0 |$ [) M# u2 Q" }/ |
  43. // CRevAppApp construction
      v: I: V7 R. \6 e! k; z- C+ [* V

  44. : n( ^( r0 U" e) V) r6 b* ^+ M
  45. CRevAppApp::CRevAppApp()7 \8 W4 E7 q! K0 r8 {
  46. {5 i+ }% K# J+ a4 u3 \$ Q
  47.         // TODO: add construction code here,: w- L% p! D/ S3 ]% y: U
  48.         // Place all significant initialization in InitInstance- @+ C1 ^% g& f1 k8 z* p: P
  49.   bDisplayIsBig5=FALSE;
    % S; j) P3 n6 L4 F0 o, Y
  50.   bRestartUpdater=FALSE;  c- Q1 \, z; t# m5 c
  51.   bFinishUpdated=FALSE;5 R1 \% h! [) j7 H% v2 K
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    8 j! {( O/ S4 y8 j+ i4 p. Y4 ^
  53.   InitChangeDataBig52GBKS();  b' g7 M: R( X4 G6 c6 J8 E
  54.   InitChangeDataGBKS2Big5();
    # D2 ?: i) S* A5 N, y5 M" X
  55.         //
    & y9 D6 p+ h+ E$ w' f# ]
  56.         bClickRunExe = FALSE;
    1 ]! R/ s  T7 q
  57.         //" ~6 I5 q" _/ q% s) ~! q6 o4 \3 r
  58. }2 Z8 w2 |5 g  w9 [4 D5 y+ x% m8 h
  59. 5 x, [  L; h2 b6 f6 t  W9 B
  60. CRevAppApp::~CRevAppApp()' F" m' c: M; z) }
  61. {
    . e& F% z/ p1 A% A; N
  62.         // TODO: add construction code here,
    0 Y7 l8 {* v' I- e! n& U  Z+ {1 t1 j
  63.         // Place all significant initialization in InitInstance
    2 s5 k& z9 W: k! J
  64.   EndChangeData();+ r8 i6 D+ c4 K5 V) k8 p
  65. }
    3 \1 W! v; I4 h/ ^

  66. 0 b& M. C6 c" }# y( D2 V$ `! S
  67. /////////////////////////////////////////////////////////////////////////////
    ' ]/ C2 @( i8 i  F  O1 ]+ g! a
  68. // The one and only CRevAppApp object
    % r2 J% Z9 ?# o" C* e  _" J. `
  69. ' I& M+ P9 ?8 p8 M' V$ G
  70. CRevAppApp theApp;) a. v+ V; C9 R3 M! f4 t

  71. 8 M  S$ F) W* C) Z. B3 l
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    & ]# N) W  C$ X' J- w
  73. {" [0 H. \: V* n# A
  74.   int iEOF=0;
    ) ^6 G% Q) M) w5 \
  75.   char szTempName[MAX_PATH];
    * {3 k/ i& P4 K
  76.   *szFileName=0;
    ) `% B% c* r( l3 ?& D5 L9 \' P
  77.   iEOF=fscanf(fp,"%s",szTempName);' H- A" f9 s- G3 k  P. R( r( D; ^" O
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')# o: [& V7 \3 @
  79.   {! j2 d* j8 H) \+ M7 `" B8 U
  80.     strcpy(szFileName,&szTempName[1]);
    : K; z# M- d$ W" {
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)( `2 A: A$ I8 J, `$ b! p
  82.     {
    , J4 J0 f8 a- `
  83.       iEOF=fscanf(fp,"%s",szTempName);8 U5 q$ f$ R5 N1 E8 u. m+ {
  84.       strcat(szFileName," ");9 S. P- l7 t1 {5 \* S, @
  85.       strcat(szFileName,szTempName);: T- Q7 o& ]  T* P! l0 t$ o* }/ N+ E
  86.     }
    ( [& I# C7 u3 ]  S
  87.     if(strlen(szFileName)>=1)
    * y8 N- ^+ P  I- \- U- n
  88.     {( N3 A& @9 T& o. j7 l  i' Q/ V
  89.       szFileName[strlen(szFileName)-1]=0;$ {+ C% X- m) m4 f: a5 X
  90.     }: q$ `! N* P5 {& S
  91.   }4 a/ t6 T9 f2 O, D' Q8 x0 A/ P
  92.   return szFileName;
    & Z2 t& L2 u" g4 [5 v$ ~2 ^
  93. }, h) F2 r% h- b) f9 D* u' ]
  94. ; P& Z/ L: G- _, W; q5 w/ i
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + ?2 [9 \! l; E( F- T
  96. {0 J, X' u1 h- d
  97.   FILE *fp;, q- J4 u/ a% U8 Q3 B& g
  98.   char *key=NULL;
    $ x, m! }1 j$ h  W
  99.   char version[MAX_PATH];
    , z7 R4 @6 S/ k! e$ }- _1 P
  100.   LPUPDATEFILE file,olds;
    6 A  q0 M$ P: v' Y  K  r
  101.   std::map<CString,LPUPDATEFILE>::iterator p;- Z1 T% O/ n  R- L$ |" U8 x

  102. 2 r1 D' j* G, b( d5 w7 j
  103.   UpdateList.clear();# B& u: ?7 ^3 p( e0 Q: V# D; I# `
  104.   UpdateFile.clear();/ q, q1 F1 O' ~
  105.   if(GetFileAttributes(filename)==-1) return false;
    - }( Q) }- O6 {9 f
  106.   if(!(fp=fopen(filename,"r"))) return false;
    7 [" c" j5 S: X+ x9 b' Q2 q6 h; p
  107.   fscanf(fp,"%s",version);
    * z: N" i4 k8 g8 @: C0 E) U
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    3 y6 i, F# ^3 ?& {$ H2 _& k9 R
  109.   while(fscanf(fp,"%s",version)!=EOF)
    * R/ M! W, }7 _9 A8 V; H" a
  110.   {
    7 Y6 Q, \$ ^  u+ ?+ `( d
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    1 _$ b/ _4 ^  q5 E
  112.     fscanf(fp,"%s",file->path);' K: B  H$ j0 I, N0 [
  113.     ReadFileNames(fp,file->file);
    ( z8 g. h( @0 D9 |
  114.     strcpy(file->full,".");: d' n/ N1 T; l7 B2 l; U2 K9 K  A
  115.     strcat(file->full,file->path);) e8 S0 X/ @# C3 s2 u
  116.     strcat(file->full,file->file);
    6 v; q! z) W+ J# n& n" a3 A
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())2 \( N2 B( _1 s7 F
  118.     {- p4 _; i7 a0 O# a5 _8 K
  119.       file->vers=(float)atof(version);
    2 ?1 ]' V8 A, Q! J
  120.       UpdateList.push_back(file->full);
    ( _+ i6 t4 r, S# S! j% r. b0 s
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    ! \5 v& D; H4 Z1 [
  122.     }
    & X0 C* r* S- A$ T( C4 p$ g
  123.     else$ `6 s6 Y7 V- E8 K. F
  124.     {
    9 n* B. g3 D$ t' n
  125.       olds=(*p).second;  g! J+ ]; i: c- A
  126.       if(olds->vers<(float)atof(version))7 i# ~8 T/ G& K7 F! n$ {4 F7 y: Q! ?
  127.       {  R- O% J4 ~3 }$ M: g$ g
  128.         olds->vers=(float)atof(version);+ o; `1 j6 v# P/ l9 ?: f. d
  129.       }
    ) p9 [8 S2 \- m3 ^2 l
  130.       free(file);
    : N9 O( x& B9 D. M& C& W& G
  131.     }# e5 s; Q: r' _
  132.   }
    . R; g- c$ z* B' B/ g
  133.   fclose(fp);- P2 j2 u2 k# T' H% l
  134.   return true;
    " b. L9 K3 ^5 A7 f& h: X
  135. }# e0 G4 F  J4 U% R
  136. 8 \5 ~& T( ^. ?5 e8 E3 A
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    " z1 a- P; ?. q7 k, `- x
  138. {
    : n& G7 B7 Z: f5 s8 v5 q6 H( P3 L
  139.   TCHAR  szFull[MAX_PATH];
    2 ^3 v, b+ @: @& ^$ V  g% b7 e8 W0 o
  140.   TCHAR *token,*inter;& b* H7 k3 ?; H8 x
  141.   *szPath=0;
    & b( H8 K  Q# R& O& K2 O: x2 ]
  142.   strcpy(szFull,szFullPath);
    . K+ \+ n5 u/ Q4 d: o  U8 y
  143.   token=strtok(szFull,"\\/");4 M% Q( h- s* M! R( N4 k) W
  144.   inter=token;: n+ ]$ `1 e. [+ t
  145.   while(token=strtok(NULL,"\\/"))0 m1 E4 m2 o0 ^) E- O8 X
  146.   {
    # |) L; n( b% v' |1 o$ v
  147.     strcat(szPath,inter);4 S4 ?8 V4 m1 l5 l* `7 x9 l
  148.     strcat(szPath,"\");, s, i9 l( A: [8 [
  149.     inter=token;% ]2 ]. e' B0 @# k2 |2 M5 K8 }
  150.   }
    ) u; Z7 L8 n9 K+ C+ K
  151.   return strlen(szPath);( \; c" u! O: z8 Q$ L
  152. }7 s' M' e% J( y9 A; f' s

  153. 0 X2 _3 w+ j* D$ A: m
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)  c  b! K1 Q: o/ \3 U! l  y  `! `
  155. {
    3 h: e/ F6 b) M/ S: W6 ]6 J
  156.   DWORD attrib=GetFileAttributes(Target);
    / R3 X* |: m! i- ~. }
  157.   if(attrib!=-1)
    3 K" @6 E6 N) [0 M- T
  158.   {7 P/ t: [. G0 T
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    # m, k  B5 G/ @) T6 c1 W+ \2 }
  160.     {% c1 @' s2 c# I0 {9 R3 ~# ~( m
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    9 R" Q! L1 y& h/ k$ e
  162.       SetFileAttributes(Target,attrib);! Z* k+ I2 h4 |
  163.     }
    5 f8 Z8 G! @/ K* q! y
  164.   }
    , e! w/ L) k. B" ~/ `1 W
  165.   CopyFile(Source,Target,Erase);
    0 N5 P% d( v, P+ I+ X$ S7 W& T
  166. }6 a0 Q7 B+ m) f* z9 U) S9 X
  167. 6 j* ~8 l* B+ }1 H" @1 @
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)
    $ T& w* p( ?% _' C- Z. }5 U
  169. {
    ! E( k3 k1 `$ P* I3 I# C0 Q
  170.      FILE *fp;: y9 k1 e9 X4 [3 c, }
  171.      char  szBuffer[8192];
    * [% ]+ k1 ^# v$ K" q1 `
  172.   va_list  argptr;: b9 j) u; L8 O8 X2 c% J

  173. 1 z2 H$ d" P- i7 [6 {6 t8 B
  174.         va_start(argptr,message);" d6 a" T: S) I5 G2 _% P
  175.         vsprintf(szBuffer,message,argptr);! h8 _' O" E6 z" C9 m
  176.         va_end(argptr);1 Y, g1 f* y$ b- k
  177.   fp=fopen(FileName,"a");
    ; {% ]0 [0 X$ @5 U) U  @
  178.   if(fp): c5 F5 E7 l9 l/ |+ D* {( T7 D. z
  179.   {) [# s6 G0 C! L* c
  180.     fprintf(fp,szBuffer);
    4 V: F. Y$ B' k7 X* \
  181.     fclose(fp);
    7 i! S& A4 a8 u4 |* A7 e! E' p6 Y8 W
  182.           _flushall();
    5 J/ P. d; h2 _' h4 q/ C( e
  183.   }9 e" @% ~! R* O
  184. }; g" W, }" u+ |+ E5 a+ M

  185. 2 e& C# N6 |, U2 U7 L9 d% T& K3 y
  186. BOOL CRevAppApp::Fclearf(char *FileName)& j) [* |* \( {/ t
  187. {
    . S. p5 r$ q% e6 o& ?8 _
  188.      FILE *fp;
    ! Q9 p8 a& e6 ^3 V4 g" n' s  ]# P
  189.     DWORD  attrib;6 Z$ W& Y+ K1 A, e' q/ ?$ L
  190.   attrib=GetFileAttributes(FileName);
    ' U8 [6 C: h# l, A! G+ T
  191.   if(attrib!=-1)/ f/ T/ b5 ?  I: d5 S, @
  192.   {* O9 ~0 f: Z+ S2 k( g! y
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);# p' W! q. n5 J
  194.     if(!SetFileAttributes(FileName,attrib))
    5 D# T* f$ ~; B  G( _
  195.     {
    " N" k: H. i% n. p% p
  196.       return FALSE;
    / k  b- A0 H& q; W" Z% o
  197.     }
      P/ T! j7 j4 V" E& j& u
  198.   }
    / K. [* ^% c, ^% D5 D
  199.   fp=fopen(FileName,"wb");8 P4 v, N4 J% C, ]7 N* o$ \
  200.   if(fp)+ \; U4 l1 L  J' r
  201.   {- c9 k* U$ }! ?8 y% h) N* h8 d
  202.     fclose(fp);# }% b2 Z! f* R: {6 O
  203.   }% Z; z* A" Y( X1 O" s
  204.   return TRUE;7 h, x" i" G$ B1 \
  205. }
    2 f# u& Y- a$ N4 V" ?8 Z+ n4 _$ f

  206. ! F1 d8 K: _: k; F1 O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)( {+ M# t' \$ f4 n; m
  208. {) ~$ F' Y0 M% n$ B
  209.   char filename[MAX_PATH];2 Y* y6 g( G$ ?* F) `$ H
  210.   LPUPDATEFILE file,olds;
    + L* [6 _; h, q+ V/ \+ v
  211.   std::map<int,CString>::iterator i;) y" q) B3 X! a: O7 r2 k" S' ]
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    4 t& Q9 F+ A+ I
  213.   std::list<CString>::iterator l;) x) \( {( Q2 @  O
  214. 3 [: W6 d& J  `( {9 ^4 x' \
  215.   if(bFirstUpdate)6 `) {) j$ y& h
  216.   {
    ) r2 [% ~0 x; Z  K0 S7 x  N
  217.     dwCurrFile=0;) |/ ]- J4 D; M( }
  218.     bFirstUpdate=FALSE;! F1 I& D) y" R! m
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end()). P0 A8 L2 X1 a; z+ S
  220.     {
      ]( e. H9 m6 q$ {" w6 ~9 G
  221.       dwTotalFiles=UpdateLocal.size();: B( I" i3 P  N( E
  222.       dwDownLoaded=0;  X  d6 v0 `$ |/ W3 U7 B; T) G
  223.       bSilentStep=FALSE;0 S% d; O8 {5 F% Q7 [3 Q1 `
  224.       bCompressed=TRUE;1 A4 Q. {8 [$ a; _) J: d
  225.       strExtLocal.Empty();+ Z6 ]& S: P; [+ `0 w
  226.       strFullName=(*i).second;
    ( D" t6 T7 V- V+ s" G% e8 w
  227.       dwProgramState=AP_CONNECT;8 S7 |5 H  e; ?
  228.       return TRUE;
    2 m; ?# @6 r" a; d% o
  229.     }/ u6 f4 B9 i! Y' m
  230.   }
    % X) t6 N2 l# s5 p; h+ C
  231.   else if(bRestartUpdater==FALSE)
    / w1 T, m7 r4 I6 e0 s6 S
  232.   {
    ) I, K: U9 u3 j( k" O
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    ( _# b$ n. E: W7 F& @# ]
  234.     {/ x+ n7 p( {' s! D
  235.       file=(*p).second;
    : C. G+ U5 \: `( J- Y
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())* i2 R4 k6 J& a% G# }. O
  237.       {0 ~& a0 k3 _6 e; t6 ?: t
  238.         olds=(*p).second;5 C+ Q  B5 f- v$ Q" Q* K6 K
  239.         olds->vers=file->vers;( R: n0 b* C+ ^
  240.       }
    8 t$ f& [2 o) q3 N) d  b5 c
  241.       else" T8 N' I+ O" l3 V$ B! W
  242.       {
    0 X* T3 m$ w" c% c+ l1 r' t' T
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));) L3 i( i: l1 D% k
  244.         memcpy(olds,file,sizeof(UPDATEFILE));* \5 N. i9 c; H, B4 J' U
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 J+ |! d, Q6 ?* r; n& W
  246.       }( [8 }: K& F" @- t# F$ R, H6 h
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");  e0 e4 ?- m. I" `2 o
  248.       sprintf(filename,"(%s)",file->file);$ b% y9 t, z2 w- i. j  D
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);/ i) z, J8 z4 b% U. y8 c$ E, U
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }2 g, H& Z- B1 M9 e  n) _0 x4 M, A
  251.     }' H1 [/ B. H* a
  252.     dwCurrFile++;
    $ S5 z. k1 a1 u- `& H. E7 W
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    , E' C0 N# |& f& _5 s
  254.     {
    $ Z8 @3 t7 c0 A2 B; r
  255.       bSilentStep=FALSE;
    $ X& H- K# S' B; }
  256.       bCompressed=TRUE;
    . R- f8 N" w0 Z5 }: [6 O. W5 j2 ~
  257.       strExtLocal.Empty();7 E5 }& _& C: V$ h
  258.       strFullName=(*i).second;
    + b6 @( e5 a/ w3 |& s
  259.       dwProgramState=AP_CONNECT;: y- u3 S* q" _) [
  260.       return TRUE;% n- [# |- d6 u7 @6 o- }2 Q
  261.     }% {; Z2 y. J  n/ c& X3 G% |
  262.     if(!bRestartUpdater)
    , E) X) i9 s/ {6 v$ n" X
  263.     {
    ! Z$ u5 r. x/ x5 h" ~" S
  264.       int iCurrSize,iFileSize;
    8 E0 S0 Y* s1 }7 H" W0 f) `
  265.       iCurrSize=0;/ `4 ?4 p5 a3 X6 o" B, ^/ _
  266.       iFileSize=UpdateList2.size();. q  R' ?  K2 t2 @$ h1 k, _
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    / E1 ^2 r- y6 ]0 I3 A& Z) q
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    % ?* N. y2 ~- L  F
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");* \" T' y' }/ C. E2 B8 h
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 g$ ~. a" _3 ~5 |
  271.       Fclearf(".\\update.dat");
    , R- P0 P4 x* n. L( a; v7 t
  272.       Fprintf(".\\update.dat","Bloodyf\n");/ `0 Z$ \9 t; p: }5 f! v: S  [" S* Q
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)! z' t; B8 [* H: r# q
  274.       {8 h( y1 C5 Q# N: x$ A
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())
    & h7 [3 I8 A" d! Y6 L
  276.         {1 }6 O2 _+ H; N
  277.           file=(*p).second;
    4 R. Q0 c$ Y5 @
  278.           sprintf(filename,"(%s)",file->file);
    8 T: K* ~* R- f+ q. l7 _
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    / q+ n' `! Q) X- w7 B6 F
  280.           iCurrSize++;
    5 K% _6 ~+ M, B2 G
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));. u/ h! J( ^/ T# N! o% K: l
  282.         }
    ' v) ]5 H. h% D9 y3 k
  283.       }
    / ~9 ^7 r8 d/ W' {5 ]( Z
  284.       unlink(".\\update.txt");
    + n# ?% `5 }6 \) Q
  285.       unlink(".\\update.tmp");
      v' o4 |0 A$ F$ ~& A( Y: K
  286.       Fclearf(".\\checkversion.dat");
      u1 A6 L, g$ W, N+ V( Q9 l
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    ) f7 y) c3 \. R; u
  288.       if(UpdateLocal.size())
    9 u& F# F5 ?; z* i5 K
  289.       {% P0 {/ l  N# ?, l' Y
  290.         UpdateLocal.clear();* _% I) h% c! x0 L
  291.       }
    9 ]8 |2 @* f9 ?2 j
  292.       if(UpdateFile3.size())
    9 W, ^6 Z0 p/ S9 G/ ?0 L
  293.       {: E) ?  \* `+ R) C
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    3 Q- r1 N& C7 Q, L- f  x* f
  295.         {
    7 t, f# ^' I5 U3 S
  296.           file=(*p).second;
    9 L/ E! @  r  v
  297.           free(file);
    + a% E) ?$ M* e9 M2 Z/ s
  298.         }
    2 o* I8 \/ @' K- Z+ V: e5 T
  299.         UpdateFile3.clear();
    & p: p1 ^& x! L: U7 V3 ?* y6 G- u0 B
  300.         UpdateList3.clear();
    ; v( p, b" {) G# ], G* r/ V
  301.       }& A' B, |- I( c' C7 B  `0 I" ]
  302.       if(UpdateFile2.size())" s7 X1 g4 G+ d3 Y' I! `/ w" {( x
  303.       {
    $ U( o2 W* Z- H1 X! ?. N" Q" i# Z
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 g& x" ~; i  @* r2 `3 ]! J
  305.         {
    3 m6 z; T  ^1 h0 \
  306.           file=(*p).second;: o! p: E9 X) p, j
  307.           free(file);+ p+ M! F0 B' S
  308.         }3 }8 ]- [1 Z( z8 I6 x6 y
  309.         UpdateFile2.clear();( ?; w3 q8 |* }$ y! k7 _
  310.         UpdateList2.clear();
      {  g1 D2 p( _+ J* L* Z0 ^# i  P
  311.       }* q5 r( t' q* ?" d) s
  312.       if(UpdateFile1.size())
    # A* Y0 D; z! H8 U: E
  313.       {5 v8 J6 ]$ f, Z& x( L7 K, Q
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    4 O' q5 c( D+ R) Q
  315.         {
    : B0 N* [; _* H" P4 O1 n, T5 m
  316.           file=(*p).second;
    - e. V0 q) X4 d0 A9 z% O/ R
  317.           free(file);
    ; ~( [; x. D' a$ C) @. x+ I. Q
  318.         }6 p/ r; C3 F) u( K, R
  319.         UpdateFile1.clear();2 c+ v( ?, P2 T7 `# a3 h' @
  320.         UpdateList1.clear();1 u" T# b, m+ i
  321.       }, f7 a' _6 F0 U, ]/ j. z2 z* D
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    , B; r+ Y0 M. `, k
  323.     }- V) t' s: w5 J  P, ^# n3 B/ V
  324.   }
    , b) T& _8 s" g' p# D
  325.   return FALSE;1 B/ t1 E4 a3 z$ F6 g9 y" r3 m! n
  326. }
    : j/ _6 r  w+ Q
  327. / h$ P. f) R/ G
  328. void CRevAppApp::ClearAll(void)
    8 O2 P+ w5 b! w" u: ]
  329. {
    - |0 Y- f4 s6 U0 d, S0 H
  330.   LPUPDATEFILE file;+ @! g* [. }( Y' w5 b
  331.   std::map<CString,LPUPDATEFILE>::iterator p;3 ?) l% F8 r' Y) M! x  G" P+ U
  332. * J2 s1 A* d) t# y# E; X
  333.   if(UpdateLocal.size()). p+ G$ t# f, {/ n
  334.   {
    3 C" o9 p/ O' X
  335.     UpdateLocal.clear();5 |( G* J5 h% l# k0 {
  336.   }. y) l3 N9 r8 s2 e  W1 k; O
  337.   if(UpdateFile3.size())/ H/ @2 e8 A% S$ b3 U# D0 I' _
  338.   {0 T- I6 d  k( `% q$ G
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)/ M: a+ F5 J: C& m7 g& o
  340.     {
    : d& g# D( h1 i) D
  341.       file=(*p).second;4 L7 j8 j7 a- Q) Y3 x8 @: B1 N
  342.       free(file);( q9 \5 L4 v: E
  343.     }
    ! p) u- A: a5 u, m; v+ u" b8 @6 q
  344.     UpdateFile3.clear();
    9 P" d# V1 G9 x9 K8 e
  345.     UpdateList3.clear();" Z0 q: B9 @% G2 `
  346.   }
    0 H( T  N" N0 p6 e
  347.   if(UpdateFile2.size())
    2 w# p) T2 g2 M7 F- I' H* o
  348.   {
    . x# z5 V4 \- h  j
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)* }# A# \1 T: e! ^/ M
  350.     {5 I" G$ X# q2 ^
  351.       file=(*p).second;
    , ]  q6 b4 B# Z: g6 ]1 X( y
  352.       free(file);) O5 T# d, C- [& g/ S
  353.     }, ?2 X3 q9 }2 y7 `+ N; l8 D0 @* U
  354.     UpdateFile2.clear();
    ) G3 {" m% Z& j: k2 Z3 A7 k5 i
  355.     UpdateList2.clear();
    9 W" e. y% D4 n
  356.   }3 R* i0 b% J2 X* ^  r
  357.   if(UpdateFile1.size())2 J  A# t* C# J9 _- E/ X
  358.   {: x( m6 s: ?' M2 K2 s
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)+ y/ A' K) t# u; f* A4 G
  360.     {
    1 d, \" v* K4 V& d/ `" N% S. ?- Z! i
  361.       file=(*p).second;
    , F+ I6 Y* ^- [; c
  362.       free(file);1 U8 Y6 [! @; {5 b7 M: I7 c( O7 R
  363.     }2 j7 K" @8 d5 C- S% ~7 R2 e& n
  364.     UpdateFile1.clear();
    % p0 {9 d' l, m% I* S; q& I& v
  365.     UpdateList1.clear();# ~% q. n- d8 K6 U0 G; `( _7 [
  366.   }
    $ D$ i% U! E1 N8 C, P
  367. }  
    7 l. a: N; {- |* f
  368.   
    6 O" W  L7 \( e8 f" |
  369. BOOL CRevAppApp::CheckLocalVersion(void); J6 L* H0 x3 N" z
  370. {) k: E( J; E) T4 D+ N
  371.   int c;
    # t2 y2 b$ m. r# L( M; |
  372.   LPUPDATEFILE file1,file2;
    # w: E) v& j2 R: T5 B4 {
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
      J+ L1 n3 D  F; E5 I
  374.   std::list<CString>::iterator l;
    1 `: @& b( u6 v7 x, T9 k9 p. q
  375. $ s# D( \* U7 j& {* f  h
  376.   UpdateLocal.clear();$ ?# c2 e% T( k( H
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    / m4 G2 ~& C! ]/ M2 Z% L
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    & z, Z, e" T2 A
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);7 I9 S( x1 z" n3 g. l( U
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);" c9 V! ~8 [9 ^+ F5 u5 ?
  381.   if(UpdateFile3.size())
    & v/ G- t" d% ?+ `' t" O! Y
  382.   {
    . W. W: g3 a" w/ b4 S* w) b
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)/ D$ h" U. d3 u% `
  384.     {" |/ d0 G3 f- y% V" q
  385.       file2=(LPUPDATEFILE)(*i).second;
    $ R: a7 F' I' o% D. T) c3 ?5 `
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    1 f# m) P! }6 h6 ?
  387.       {* I: Z* U0 f3 m7 D4 |, F$ O  D
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) J% _$ e& D. S; W
  389.         file1->vers=file2->vers;
    8 Q' z0 @" w% W4 j% E
  390.       }
    3 x2 [4 }; _+ r' i
  391.       else
    ' C+ n) W9 W7 w  o8 Q5 V+ ?# @! m
  392.       {
      C% G- J; Z& ^/ u  M  l
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));+ t5 s9 Q, X* u; q+ y1 K' J2 D
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));: d% i  A" d$ K- Y4 C+ r! H
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    # T* e* r: v3 M; |" _
  396.       }( x! p+ O% y2 m( k2 \1 s, {
  397.     }
    ! e/ w( X7 L( E
  398.   }- a! K# G7 p4 I( x8 C( g
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++): k; ], w& ?" a' H/ ?: F* l
  400.   {3 T6 C1 p% K  l9 p6 @: f
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    2 d1 ^! [  Q3 k
  402.     {* U/ j# g. Z7 R5 R) q1 ~: p) t6 B
  403.       file2=(LPUPDATEFILE)(*i).second;
    0 e5 p$ \2 J7 T- i1 W
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : `4 E* U! E4 `+ f& i
  405.       {+ o. e: `3 Q: y3 n( e
  406.         file1=(LPUPDATEFILE)(*p).second;
    ) g; ^5 \$ x$ |% E( w3 |
  407.         if(file1->vers!=file2->vers)
    ! V' p' ]& C2 ?
  408.         {. D. f/ |/ f0 X5 |
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    / J9 i$ M0 d# a4 U, v0 a
  410.           c++;7 |6 e9 V  ]2 I0 M0 O8 i4 W# H3 C
  411.         }
    5 N9 i7 f- A$ h1 ?" h9 d; Y
  412.       }% H9 a1 n: `5 J) ?& z8 B
  413.       else
    % a% }4 Q" f% [9 K; l# F
  414.       {
    . e1 i; K* E0 y9 V8 c3 p
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));, F5 [) c! x2 w+ m7 f" [
  416.         c++;
    4 P8 d! t! ?1 F. u3 I
  417.       }
    ' W1 ~) Y. O1 A
  418.     }
    - X5 T$ u* z2 M& I" z
  419.   }
    $ |0 J8 `! r$ D5 }
  420.   unlink(".\\DownLoad\\update.txt");
    7 c, ]8 ?! P( v" Q  f; M- _% h( T
  421.   if(UpdateLocal.size()) return TRUE;
    / W% N% J" e4 K
  422.   else                   return FALSE;9 C4 q( h% L' H7 p8 C0 J: _( f# `; D
  423. }
    % V2 M% p# F. W5 ?2 \4 f

  424. 0 r" n8 O( `" B  M) V
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    & D% o) a: Z/ p. p- _) [; s
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"( ~2 [8 ]" M% o7 q: `
  427. 0 k8 d- I" A1 O4 J1 n6 P' @, w/ A2 h
  428. ' h0 u" c4 h3 d) H8 t
  429. 1 @& d6 h5 N! n
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)' z2 x9 z4 G+ k6 F3 v" i
  431. {3 |) `8 [+ L! c  P  G
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    8 @3 y- C5 b+ W, p
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)7 [1 P' h0 \# Q- @4 o+ W5 R  v
  434.   {
    / R' \% u( o: [( ^
  435.     char szLanguage[50];4 U# Y6 a  A9 M9 j3 B3 y* x
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 C& Q: a- z% |+ m2 e! i8 E: N
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;: K1 _" u$ H: S4 c+ }  x
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;8 K6 P% l) x! a7 |, _/ r
  439.     else                                   m_iLanguage=ENGLISH;# L) [% C6 g3 g) T$ V# H; L0 y$ V
  440.     char szRegister[100];1 N( W; h: V( Z2 `  ]4 ?
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    2 B- \# K+ U% n, J; Y+ A
  442.     strRegsName=szRegister;
    $ x, g9 D$ J4 `3 I/ D( p
  443.     char szPatchURL[100];7 f# o: Q+ j7 |) I
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 Q  _; ?* U8 T: b
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    # |) q+ c: K/ I# Y# u
  446.   }
    ) M) I+ T  `' l7 P/ y8 q
  447.   else
    * i$ R! M2 k- I9 d2 z' H
  448.   {9 h! g! J8 |) E/ R2 k( S7 z
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);  G, r9 a* N% a+ u
  450.     strRegsName=DEFAULT_REG_URL;
    2 D1 M' P  Q8 B; m1 F: ^. O+ Z
  451.   }
    7 K9 n; W+ F$ |
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    * N0 I* V% `+ L9 P% ?
  453.   {' i! F5 s# E) I8 x, b. K
  454.     char szIP[50];
    : @1 j! d+ j* r; o1 `1 S4 z- s) R$ X
  455.     char szDIR[300];7 ~+ V/ W) W$ o% F0 a# V6 h9 P$ S0 H* o
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))9 t$ M; p/ u- }  p! K7 z
  457.     {
    % ]/ J' D* y" r8 l0 }
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");1 h( l3 x: Q! l/ w/ j7 r8 `
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");! Z9 i. n, [6 e% K5 A( o
  460.       strHostName=szIP;
    - ]7 [8 n9 W2 O/ ~  G7 m+ G
  461.       strHostPath.Format("/%s",szDIR);
    ( j& p4 z1 r# y) I+ i- L! u
  462.     }
    $ S  ^) t+ c! Q; C
  463.     else
    " Z1 H4 S% ~! x4 q$ X
  464.     {
    ; G+ b8 P# l5 j% v+ X- ~
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
      A4 ]2 m! u) a5 ?( r5 g8 s
  466.       {
    8 G& N* i4 p0 ?' D( k  g3 {1 t& u8 q; J
  467.         char szLanguage[50];; K% z+ F! ?# u" m4 B( R, ^
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");% f! C( q: j- `/ ~4 u3 f
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    0 Q, {* ?5 x$ P$ [: G8 e( T
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    # F! l5 b% Z, S. l4 d
  471.         else                                   m_iLanguage=ENGLISH;  H) Y/ S  u0 [& o* u
  472.         char szRegister[100];& ?# G3 v5 t* p, |( k' T8 W9 v0 [
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");( [! _; H+ K2 c, e  l9 E# b
  474.         strRegsName=szRegister;
    + X5 q4 R& j, P9 Q0 B
  475.         char szPatchURL[100];
    7 t$ u- U% W$ Q% B( C5 |+ E
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");5 }2 W) a: o5 U; p
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) i. z4 p) \) U; g) R+ v$ I$ H+ I
  478.       }
    $ k9 H! r$ W" c7 s8 U+ q
  479.       else' e) P6 a. e0 i3 `: n7 @9 ~( u
  480.       {" }; s4 c! L8 G9 `0 A/ Q+ Z1 b
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    , O7 [0 t7 u0 C# H
  482.         strRegsName=DEFAULT_REG_URL;+ o! j# [$ `# q2 ^: H4 J
  483.       }
    ) q2 v# O/ b* ?: O
  484.     }# `/ v6 n/ ^8 L
  485.   }
    ) G" I; o6 e' m6 P( z/ h. l
  486.   return true;
    & K+ d' y/ o% A9 |" E# i
  487. }5 T" Z. U8 ^$ a; M, n# K

  488. 4 ^/ {) [/ B( Z  n
  489. #include ".\ZLib\unzip.h", X& Y% q+ B/ I. V6 f" C1 X3 J
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    6 [1 C0 L4 ~4 _: |
  491. /////////////////////////////////////////////////////////////////////////////
    3 G% s% b: U- a7 R1 o# S
  492. // CRevAppApp initialization
    3 b% o- {: ]1 E+ g$ y! l6 h( P' O8 K

  493. ! w  F* x& |9 t2 q- a1 r4 o
  494. BOOL CRevAppApp::InitInstance()/ h( s7 m0 s4 M
  495. {
    " a5 j9 Y* @( T% [# d
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];* G' }7 t- {2 O; P  j* J# V% k
  497. 2 s( [$ C# e  D2 ]% r& ^
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    ; U8 D# `1 J5 P9 e
  499.   if(GetCurrentDirectory(MAX_PATH,szPath)); {, p+ _- O/ ~9 K" b
  500.   {3 `: S! r4 s; g* K# I. v
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    , y7 h) c) ]1 L; y
  502.     GetPathFromFullPath(szPathTarget,szPathSource);! V  w! g, \$ H2 E6 P4 ?7 Q
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    % \( ?* k1 c$ B& q
  504.     {/ U$ `7 j8 G+ O4 n7 L( a
  505.       strcpy(szPath,szPathTarget);2 [. O' A% s; Z
  506.       SetCurrentDirectory(szPath);( g) X, E; W  Y# K+ c" Q
  507.     }1 i4 k  q, |5 K* g/ N2 k  u( K
  508.   }0 O5 a, E1 f5 F4 g$ n+ @/ U2 p
  509. #ifdef _DEBUG; O& g$ A, w/ O$ ~3 q$ M
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 N) U, P. y: I, }
  511. #else
    0 D% q/ K8 m# O; R, q- x8 Y2 j
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    6 ]7 |1 X3 c; a/ L
  513. #endif8 k1 e, M- ^3 X
  514.   {) P: V( m( o* ^  K/ Z5 Y
  515.     char tempFileName[MAX_PATH];# T3 T( x9 x* }, h8 ?8 d
  516.     strcpy(tempFileName,szPathSource);1 d6 V7 I* z9 o6 T1 ^9 P- Q: H! @- d
  517.     tempFileName[strlen(szPathSource)-12]=0;
    * s7 x9 N7 f4 S  z, `  w5 g
  518.     strcat(tempFileName,"\\$CSUpdate.exe");  n. k  ?0 u8 o; y; t, @3 T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    5 v1 ?+ j+ I3 J( c* N
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);; m& D  W# u9 l. T( y/ i) z
  521.     return TRUE;
    9 R) f+ @+ u* p. S, M2 d6 _4 R4 _
  522.   }$ T; T# e3 }) Z) z8 J# v
  523.   // Nuke 0118: Delete run.exe
    * x* e" S. u, W) ]4 N  J/ [3 h
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    5 _& A! ?( ?5 k2 N2 @. @  |1 u
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");
    ' N& v& h  ~0 `9 y
  526.   if(!ReadCfgFile("Config.ini")), e, [  K6 b# }  M) F/ D
  527.   {
    $ S6 p8 P( Z/ G- _! ^" U
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    # {1 _, G8 c% E% M: C
  529.     return TRUE;
    5 \  h! @; T: ]6 N( g, y
  530.   }
    6 f, C3 V( E8 L$ H4 R* x
  531.   HANDLE mutex;
    $ ~& l0 d6 k: s" e: Y3 R( l
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ( ]8 N# E; t0 I
  533.   {
    ) T# l. {( O$ ^
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    ; m' n2 @/ R& P) |, w$ y5 x1 l
  535.     {9 @7 |% r$ F: [4 @2 ^2 n, F7 S- {/ i
  536.       CloseHandle(mutex);' m/ X4 ]! ?2 O. U6 x1 C
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    * J/ y8 I1 p0 j6 u
  538.       return TRUE;
    8 Z, u6 Y% L# j8 J% e# C  D) G
  539.     }# b  z( q% n3 L* a4 a8 s7 v
  540.   }  0 v$ i2 @5 F: Y6 d' o! Q
  541.   CloseHandle(mutex);7 @, e2 k2 F9 B7 h) s9 n
  542. $ e7 y) \% x$ P. Q# H5 ~# o+ M4 i
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    # ~) E& q* |* b) o1 s8 w

  544. 2 i6 g' L" ?0 j* k
  545.         AfxEnableControlContainer();
    7 @( b1 \% j8 Z5 \2 O7 x

  546. ( R/ v/ B" b( S$ k$ m( S% D
  547.   bCanUpdate=FALSE;
    * x5 N, l. |! D) K1 K
  548.   dwStartUpSteps=1;" a. w( t. g* L& H( h$ q
  549.   dwProgramState=AP_NOTHING;0 [9 C, u8 G/ I' K
  550. ; L7 }. I- V# s6 J! e
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
    ! ?' r4 k- X; Y$ d! E. \

  552. ) u1 z5 {( c( a; x2 p  b2 z+ L
  553.         // Standard initialization
    - g& X( P( ]; J  H' n
  554.         // If you are not using these features and wish to reduce the size% ?  p. @" N; n
  555.         //  of your final executable, you should remove from the following& W& W+ E: T1 Q: u3 C
  556.         //  the specific initialization routines you do not need.$ q6 T1 H  n: A  ]3 r( D* h0 d

  557. 1 G: |, b: {* H) \" j! i: Y
  558. #ifdef _AFXDLL
    4 n0 Q0 p4 }% [
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL/ p! X/ t5 h9 J1 B
  560. #else
    * V% [* E# O/ l/ O  v
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically- ]$ X3 l, n1 a5 w3 }
  562. #endif; d3 W, v# F- c4 Q6 @9 b- @$ n

  563. % b& E* p- T7 H( ?4 u* S' H* n
  564.   dlg=new CRevAppDlg;7 K8 G, a9 b, l1 R
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    4 P, V3 z; a" N, P, s8 U' U
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    - `% U- \! H8 [, K3 B1 H
  567.   m_pMainWnd=dlg;( H) A- _4 b  s  [1 h1 ^0 N

  568. . B  g) Y( ^$ o2 T
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);1 [* r) K, ~6 y, \1 d9 B, }

  570. $ C( |$ I1 J, G8 ~4 T5 m% ]' k, l
  571. //  GdiplusStartupInput gdiplusStartupInput;6 g5 c8 g0 I! q
  572. //  ULONG_PTR gdiplusToken;) `' `; E  F" s1 [$ ?. H
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    % f! t# Q* M" I) @* e' |+ A- \+ `
  574. $ y( x: o8 I% K
  575. //        CRevAppDlg dlg;
    9 b, G. z& c  ^2 b4 N  d2 t
  576. //        int nResponse = dlg.DoModal();9 @5 q9 G5 c, x# y9 @# Z8 t
  577. //        if (nResponse == IDOK)
    $ {0 Y) k- w) x4 R
  578. //        {
    / F+ D9 K# }& _/ z+ J% Q+ C3 J& E% r' K
  579. //                // TODO: Place code here to handle when the dialog is
    , ]% a" M! S. Q' [5 u* _
  580. //                //  dismissed with OK% `- M. o" @! h6 t# p
  581. //        }( D2 M6 j( y; l. E
  582. //        else if (nResponse == IDCANCEL)
    * J$ m, n# C" d* }
  583. //        {
    / t, k' }# m& _: [0 _
  584. //                // TODO: Place code here to handle when the dialog is0 p  @; L' M* v  M: o% M
  585. //                //  dismissed with Cancel
    ; m, R# A* \( f
  586. //        }
    2 F+ I- C6 g1 m' |9 N
  587. 6 X4 k' ?1 j! K# t" s
  588.         // Since the dialog has been closed, return FALSE so that we exit the
    ' @5 l1 a7 W# R1 w. z1 z; S8 W
  589.         //  application, rather than start the application's message pump.
    & O5 r. J& T% q1 o7 G* X  K
  590.         return TRUE;1 Y1 X2 E! s( Y9 x4 M
  591. }
    , L6 G7 P2 [+ j( q. F
  592. 9 T4 K$ X2 I! `& v  K
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    9 Y& r: P# f8 L5 k( g
  594. {
    ' _& g$ j' V9 c' g+ E
  595.   int i;
      Z* d+ F2 f; U: |) r+ U
  596.   char *szRet;
    ' T9 t5 B, h7 e$ ~2 J1 _

  597. ' t1 ~! b/ D/ h0 A
  598.   if(pSource) { itoken=0; sztoken=pSource; }' s: g6 l" P1 F# T0 o4 w6 r: q
  599.   if(sztoken)
    1 J8 U, C+ r. J$ `
  600.   {
    ) N# N) g/ Q1 @, K
  601.     szRet=&sztoken[itoken];
    9 A! O* b$ j" ^4 \. p
  602.     while(sztoken[itoken])
    * ?- H: X/ a9 A) h( L
  603.     {' v  b. h( K4 R/ D7 x6 H( j+ ]
  604.       for(i=0;i<(int)strlen(token);i++)
      |! `- m$ b1 r, A6 N
  605.       {+ M. M: D8 |# m  L6 b4 U
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    - k1 w: x8 l; c) v$ ]
  607.         {
    4 T! q4 j3 O$ H3 J7 \, {
  608.           sztoken[itoken++]=0;
    . C. S# u8 Z6 S2 |1 s& ?
  609.           sztoken[itoken++]=0;5 m- f, f; y9 V+ E
  610.           return szRet;6 d  R( P7 {/ v8 C/ G6 v
  611.         }% z# T- V6 F  m* I
  612.       }, ?6 i* a: [& x6 O" j
  613.       itoken++;" S1 i6 R0 n% |6 A  p5 b! @8 e
  614.     }) O7 c7 k; p# T* l7 e' c, w
  615.   }
    , {2 r, Y/ n5 M( n+ G  T
  616.   return NULL;
    " |6 ~6 ?8 E& H
  617. }7 o! a, q: u" y

  618. 2 j/ ?3 g1 r& u, S; E
  619. void ProcessProc(long Total,long Current)
    0 a8 f% t" _/ n3 F0 ]
  620. {' Q1 k+ f& |! h$ Y4 O
  621.         MSG msg;. s  M$ H% R3 X: A3 X6 {" X
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    + U- p. ^) |1 I( m  W! s$ K/ z
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));$ l6 h3 _: r7 y/ Q, I3 t' |
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))$ _. l+ ]: P9 r3 l8 R5 n
  625.         {; A4 i0 u/ K) P! j) l
  626.                 if(!GetMessage(&msg,NULL,0,0))
    + f, [; @0 ]" o* W9 O9 S% ~2 Q+ a
  627.                 {( C6 w! Q. c) S- z. D6 \5 I
  628.                         return;: k- d- m, h7 q9 V
  629.                 }
      V4 E1 t! ^6 r; \$ j) @
  630.                 TranslateMessage(&msg);
    , W5 i) `! ~6 \2 N
  631.                 DispatchMessage(&msg);0 G' K% I# G; n9 i. v# z2 }
  632.         }        8 E. n; V  z' K7 S7 f$ \
  633. }5 d; a6 L, M2 i2 c+ t6 O8 S
  634. + T/ [, {+ W. L2 y
  635. BOOL bFirstChar=TRUE;9 i/ Q/ L) Z) k2 f# A3 S7 q

  636. ) t& @5 \: d( J' F, \
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 ?- t; e, c: m* R) a9 J* G, t! ?* `
  638. {
    ( d: [* r3 [. _5 o) h
  639.         // TODO: Add your specialized code here and/or call the base class
    ! R+ `- f. w3 a; k! D
  640.   switch(dwProgramState)
    + u# p' n# M5 ?, P6 O, }. o3 Z% ?
  641.   {# Z; r, B0 j; b9 `  R: v
  642.   case AP_NOTHING:
    2 _5 Z! O* q' n, k
  643.     switch(dwStartUpSteps)
    % v5 _+ E; p8 ^
  644.     {
    " N6 U; [% I. s% c
  645.     case 1:/ `- f! z) s1 u  c
  646.       {
    * K/ q6 G; D& ~
  647.         int i;
    ( [' B6 b, e' ^* ~$ U2 c
  648.         CDC *pCDC=dlg->GetDC();3 v' {, E! x- V/ [4 c$ \, g
  649.         HDC hdcwnd=pCDC->m_hDC;
    + D1 H4 B, N  A
  650. //        Graphics graphics(hdcwnd);
      C' `  d# q) f; i" o7 A- U. z  W
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");
    ( r7 E1 U$ \9 @2 |/ \
  652. //        INT iWidth=bitmap.GetWidth();+ s8 r9 l" ~! I/ f+ s% E
  653. //        INT iHeight=bitmap.GetHeight();
    8 |# I/ r7 q+ M: G% Y# o& k7 k
  654. //        Color color,colorTemp;
    6 o% w( j6 d% d8 p
  655. //        for(INT iRow=0;iRow<iHeight;iRow++); L; O- G) y: k, M7 u
  656. //        {
    - \3 y. \8 g& ]6 f0 z8 E/ `
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : `+ q; r1 t# p/ k! L
  658. //          {, J, }" {0 M7 E1 j
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    ! t4 \' I/ `9 g! e+ f1 k. F5 {
  660. //            colorTemp.SetValue(color.MakeARGB(: }6 E- G  x$ A- G& ~1 s
  661. //              (BYTE)(255*iColumn/iWidth),
    3 z$ s3 d( @8 k8 B: g! \
  662. //              color.GetRed(),1 Y8 |8 U0 ]8 a* B; X
  663. //              color.GetGreen(),, b, m' M, j; x0 E
  664. //              color.GetBlue()));! R4 o& u3 Y2 \
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);6 f' `7 z+ ^8 l3 y
  666. //          }
    ) @, i( L, ]/ B; S
  667. //        }- t- j+ ~6 C' K) o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);) r1 O3 e: [  \
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    7 N, \, ^) f3 H) ]) s& U
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    7 S& W- k$ b6 R0 ?
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");- Q0 h+ u3 z9 q7 v$ t& q
  672.         for(i=0;i<240;i+=8)
    ' ^) O' H* f. ?7 ?  G9 g7 N
  673.         {
    : o( x/ F; r- x, p" G8 v
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);0 }" Q. m/ f( |1 O
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);6 M3 J' X7 m9 w4 `! u1 c& N
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);( |9 g3 ]( A$ s1 ~: d
  677.           Sleep(33);4 E* M1 H- ^7 F3 P3 x) u0 x$ q
  678.         }
    4 p6 R9 v, B& N; e
  679.         Sleep(1000);/ ^& x+ }5 _9 s# g
  680.         for(i=240;i>0;i-=8)% K5 p7 G; c( s9 \, H6 {) w- Y
  681.         {) ^" c  j! p: u7 I! f" n  \% r
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    7 R+ Z/ t9 i7 @8 O
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);& V6 a' m) k. l0 S* d% J9 B
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    & K5 V8 d9 h1 a3 N3 Z& J; p6 Q
  685.           Sleep(33);
    6 ~3 r' d& F/ s+ W+ j
  686.         }; Z% s3 p1 B& k8 u( @8 A
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);  P; B- R2 T: W5 c' I
  688.         dlg->ReleaseDC(pCDC);+ M2 k  Y: q* W
  689.         DeleteDC(hdctar);6 D2 u0 c, \4 _; P, N0 _" S2 o
  690.         DeleteDC(hdcsrc);
    ' [* o# q4 v! {8 {4 n+ r5 N1 _
  691.         DeleteDC(hdcorg);
    # U5 x0 {; W; _. {6 x! V& O
  692.       }2 X1 _3 a8 z/ J8 i
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);5 ?" [; j6 T. [/ F" ^( F1 ^
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");- Q3 x5 w" b3 \1 `6 X& ~
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");+ J2 v1 B$ |# y
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");
    ' R* \. c: r3 h
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);1 }( k9 Y" T. y
  698.       if(!Dn.Connected())
    . H8 E* L  |8 E" [# P
  699.       {
    1 d7 Y# }* |& ?" Q5 `
  700.         dwTotalFiles=1;( V6 l' i6 n8 O! ?7 H$ y- B) ]
  701.         dwDownLoaded=0;* O& n0 t# S& }: S" B7 o
  702.         bSilentStep=TRUE;
    & c- L; t  O8 B1 ^3 P7 H. `% i# D
  703.         bCompressed=FALSE;3 h; t2 ]! C" m3 \6 ?( m
  704.         strExtLocal.Empty();( ~7 A, \9 {/ \  X+ C
  705.         strFullName="readme.txt";+ i- F, H8 {: T& z
  706.         dwProgramState=AP_CONNECT;
    - S) L" F! r( E: g8 {
  707.       }" ^* }1 c! M$ A  s
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();( \, A' h) n% ]" s
  709.       dwStartUpSteps=2;( Z- M8 W8 d9 X- U1 q) m: [
  710.       break;* m; M: ~& T% z( b$ Z* k
  711.     case 2:4 T1 h( g* t6 R% h
  712.       {
    4 Q; v. k( I) K4 g/ r9 J) g
  713.         int iEOF;
    % `4 i& m; @& I1 n% E( M+ ~7 R
  714.         FILE *fp;1 o+ [+ J: d9 B4 x/ N7 _1 Y
  715.         char szString[512];% [2 ^2 ~' Z% z7 D# F: f' X  s  R
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");
    6 C8 O# ?# W' O& _- ^3 W: i
  717.         if(fp)
    ) F3 U, Q, V' o% b, h/ m* |
  718.         {( r1 m9 H2 [' r
  719.           do1 h! C! @- s- t- W
  720.           {
    . C' r- {, ~/ j& L% k
  721.             iEOF=fscanf(fp,"%s",szString);* D5 D3 ?- m( u/ R* k
  722.             if(strlen(szString))
    ( R4 ?; ]9 \! C% s# A
  723.             {
    . b6 |  U$ h# E
  724.               if(bFirstChar)2 Z; C2 D- P3 G: C& W
  725.               {* p* s0 }# W+ K; N# q9 v
  726.                 bFirstChar=FALSE;2 J& [8 l7 _7 {3 i# V
  727.                 bConnectIsBig5=FALSE;
    7 B% s9 U' @2 T
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    . v' |* q, [3 p1 B
  729.               }1 W5 `0 |4 B8 X% M% V. {
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));/ z6 @3 |8 b! x* _' T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));8 L" f9 I/ N7 T: A6 v: K5 j4 q
  732.               dlg->m_ListText.AddString(szString);
    ( I/ p" Q7 C5 m
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 d5 B2 n# H' Y1 i) @
  734.               *szString=0;' I  m# b+ B2 x+ E' H# D$ E9 @; a
  735.             }! ~+ U% y6 E( M9 g
  736.           } while(iEOF!=EOF);
    - I* }  K6 O$ O7 q; G
  737.           fclose(fp);
    * }1 W9 m( Z& v6 z
  738.           unlink(".\\DownLoad\\readme.txt");2 i9 W' ]6 Q$ {% U! ]! ~4 U
  739.           dwStartUpSteps=3;8 E  Y: [; Z! ^& v3 M/ [
  740.         }0 [, |5 B) M, }# u" [
  741.       }2 J- z+ S4 A. j
  742.       break;% E0 s* P0 Z' j7 X$ o+ M# G
  743.     case 3:2 v; A. _0 |( {: G
  744.       if(!Dn.Connected())
    ) P/ E) z0 r4 \
  745.       {  [# X: C! `/ s& A
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);+ _6 F5 o0 u5 P& L# K
  747.         dwTotalFiles=1;& X- g5 L! m1 H' E* n
  748.         dwDownLoaded=0;
    2 \: C4 D- x# ]* l3 N5 u( s: G
  749.         bSilentStep=TRUE;
    3 ~7 G9 F  u6 i8 v& c' w" J
  750.         bCompressed=FALSE;1 d5 L  O( D0 a5 F
  751.         strExtLocal.Empty();
    & j3 g' }6 u* W6 p7 z
  752.         strFullName="checkversion.txt";0 K( X  ~; k7 X7 `
  753.         dwProgramState=AP_CONNECT;: Z6 y3 R; X+ z; F: f: H1 h, S, q
  754.       }
    / V" v; G% z5 G, T9 F+ p" }
  755.       dwStartUpSteps=4;2 f# C, [- B, K& x0 V: \$ t
  756.       break;
    , o, c8 y- }( i
  757.     case 4:0 V3 x% y, M4 I% L2 h$ ^* f$ K
  758.       {& N3 i3 X0 V$ K/ I1 b6 s
  759.         FILE *fp;
    ; \. p5 Z+ ?- G" y6 A. H! A
  760.         char szString1[128];
    * `9 {" Z0 R  F
  761.         char szString2[128];
      Z6 N% k& c) c- w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");+ z/ F; J) S  p: c: _
  763.         if(fp)0 d5 S: |9 c3 J* }) q& R
  764.         {# A$ ]- U, r( O* `1 u
  765.           fscanf(fp,"%s",szString1);8 ?. G  K9 q) n) B  W& N; v
  766.           fclose(fp);  `% o9 P( ]' T4 F6 z- h8 {
  767.           fCheckVersion=atof(szString1);8 K5 Q) {& y7 C
  768.           fp=fopen(".\\checkversion.dat","r");  q( g- a, w7 W: p1 t0 D
  769.           if(fp)
    + P  k  ~  s( x3 x. |
  770.           {  M. a+ o- d- s9 o: @# O7 l
  771.             fscanf(fp,"%s",szString2);! V+ g! a8 V# s% E( w6 ?/ f
  772.             fclose(fp);
    ! s6 J. {9 n) x4 X+ U, C4 I& K
  773.             if(atof(szString1)!=atof(szString2))( N3 _" p; ]% ?4 J3 m" j
  774.             {3 w* s! k+ V8 d8 [1 F
  775.               if(!Dn.Connected())
    , ]2 g+ W+ a. X+ d$ P7 |. {( Q$ }
  776.               {
    : s1 Y1 i! r& e7 u3 d6 {
  777.                 bFirstUpdate=TRUE;: l8 G: v, ~* d  L  A
  778.                 dwTotalFiles=1;5 z2 k0 ^& ?; Q. A. a
  779.                 dwDownLoaded=0;
    $ k, ~, X( S- {7 S/ F
  780.                 bSilentStep=FALSE;
    5 X' }- _* p9 _" ]" m
  781.                 bCompressed=TRUE;$ D8 x2 w2 d" o  ]2 o
  782.                 strExtLocal=".\\DownLoad\";4 U. R/ [. W: U: c1 D. m" A9 s
  783.                 strFullName="update.txt";
    9 `$ P1 o1 T$ |* x' M6 B
  784.                 dwProgramState=AP_CONNECT;
    ( d. \& Q4 h7 i  p$ V; U# @3 q
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    / l( Y/ `; Z  j; Y( d/ O3 ^
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ' k* k$ X: }$ g6 N0 @5 S
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");: U2 z- R( \* b  C( x

  788. 7 Z; E0 E- }# ?, h$ E$ |5 L
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    / D  U' ^! {: M. C8 B, _0 M/ R& T
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    7 T% i( i) o- f1 I% g
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    / c7 S1 \  b0 u8 |5 t* v# X
  792.                 {
    ( l. Q. p8 }; w& I  J* K+ [
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");$ n! _: e# O1 v$ h8 B2 r6 t* h
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");8 U8 w  Z0 ?$ c( e+ g, O% @+ X
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    " I: w& Z7 c% h
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 e7 {) R, _+ h8 h$ o

  797. 9 ]4 e. E  U: k2 [' W! R5 `
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ [1 a" S1 F1 t& q5 U) ~
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");7 B4 e0 L( v' t+ {: y
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");
    - {& o5 `+ u2 W7 X3 X8 N
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # g3 f( c5 W5 m9 J# O
  802.                 }6 [3 O& @  z" a- b4 ]
  803.                 dwStartUpSteps=5;+ D& Z2 b4 ^' B' _: l
  804.               }
    + p/ n$ q" g9 }: Y' w* i4 S
  805.             }4 V" r* a8 H6 g2 n3 V
  806.             else
    0 t: L7 Q9 k: ]( ~" z- A" \
  807.             {
    7 n; k/ Z+ R& l0 }
  808.               unlink(".\\DownLoad\\checkversion.txt");4 |9 r; k  Q/ M7 Y
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");( Y0 j3 N) G! b4 U1 _5 V$ {
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");6 a$ Q3 k5 K2 k. T" M
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    % i6 H9 G6 Q" {+ Q& V9 Z# c" [$ Y

  812. * h4 {8 G1 M8 ]' G
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & E4 n* F# A  E9 p$ P
  814.               dwStartUpSteps=99;
    ( X) U( D9 u# K" A% Y
  815.               bFinishUpdated=TRUE;5 S5 e: _3 v9 L3 Q  {: N
  816.               bCanUpdate=TRUE;
    # f3 V/ k  L8 I* Z
  817.             }
    8 r8 ]  \1 O7 ]" m5 p5 b
  818.           }
    , {% j8 F& d" R3 u" u# G$ Z8 C
  819.           else
    / k. Z+ K: i8 w. p8 S
  820.           {
    / z7 l6 g5 [% k. k  S
  821.             if(!Dn.Connected())- W# L8 D: X2 |8 a5 S
  822.             {" n+ x/ a* O* T* f# _
  823.               bFirstUpdate=TRUE;. c3 f. V1 Q) ~8 j
  824.               dwTotalFiles=1;
    % @9 u! L0 r; Z/ |2 a
  825.               dwDownLoaded=0;5 {- H: ^# V  f- r2 G5 |$ [. Z
  826.               bSilentStep=FALSE;
    + G" y0 d, U  J, u+ K: b
  827.               bCompressed=TRUE;
    , l( n& M0 W  t/ V9 W! b
  828.               strExtLocal=".\\DownLoad\";
    2 G( X$ u% z. o7 r( ?- ^
  829.               strFullName="update.txt";  i1 F; B# A5 T" D  p* {
  830.               dwProgramState=AP_CONNECT;
    + H# a: y/ A- K* q, W' C* B
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");* F/ J  r6 ~1 E% r- y  t% i0 j9 X' S, Z
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    3 I* ?0 v- J  L% {4 c
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    * g) P7 i+ ^" F* c0 }
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # v& V2 D$ G" h6 X! {' D' p
  835.               unlink(".\\DownLoad\\checkversion.txt");! z# e" Q5 g  H( y; c
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)* E9 j5 n; V/ D: O1 I
  837.               {
    & U6 U7 T+ P' ~! c/ V9 q  ?1 `. v
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    & T: A! [6 H' y' K1 c! g
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");, Q: }! d% @9 F- n+ Z+ e
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    # `1 h  b( x3 C/ ~
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    4 ?  {- o* g& X% e- |; c3 r
  842.                
      F9 b+ [, z9 x, f
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");- t; N; e1 L, r8 F
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    - S2 @1 [" w! @# i7 R" x" Z5 o
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    : f5 J/ {6 o; [9 t
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " {% H/ y* t5 k" Y9 M& o* E
  847.               }2 T' e( t* R) O9 m' h: o8 A* ^
  848.               dwStartUpSteps=5;
    ! i: A6 R& C. D8 Y8 {
  849.             }
    , M# |$ n4 l* S7 t5 t1 k
  850.           }
    0 d) A9 z/ |. ~6 [+ x
  851.         }
    5 I7 |, D( S5 c
  852.         else* D+ L5 Z7 o! T9 |: O6 ?, o  @+ c! m
  853.         {9 V! @2 ^: k+ }* u+ U
  854.           dwStartUpSteps=3;
    + \& D: A, \6 v7 n8 I, O0 k
  855.         }0 C4 \4 M* S; a7 c2 {  U
  856.       }/ v- `; ]4 v9 I% l2 N- i$ v
  857.       break;
    * z1 H9 z! C" c: }+ T
  858.     case 5:
    ! J0 Y) O& ^; \6 D2 W% d
  859.       {: S( _4 e6 y5 D8 a
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    : s* H4 m3 l' W; y* l# M9 @" ^6 j" v
  861.         {  v# r0 \/ N' F+ @
  862.           int opt_overwrite=1;
      ~5 _5 O, G9 [, Z: X! E& Z5 u7 J2 e2 ~
  863.           int opt_do_extract_withoutpath=0;
    . m: U; |1 l$ ?7 ~. a. K6 F
  864.           unzFile uf=NULL;6 @1 X" v' x) L5 l! E) Z  L
  865. " k" Q9 B3 a% L( V% ?" G
  866.           uf=unzOpen("Wsa.zip");
    5 l+ J0 |+ `. h$ M5 z3 u9 c) T
  867.           if(uf)
    . H8 x- s9 i- @7 Q
  868.           {( g8 k+ h5 n4 V& J0 t+ b
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);
    5 m) Y! Q' C9 {! O: `# @
  870.             unzClose(uf);
    8 J: P# q; f3 }7 |( Y5 v
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");8 X8 z2 d# c, Q" u5 j) L% |! u& Y
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");
    . }# s1 @. c: K: O0 M# I# {
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");& x& n& X) |3 e8 e* Z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    6 o. Y, E9 a' n0 @9 ~- O
  875.           }5 A8 T& U' E- \; l" f  }8 g
  876.           DeleteFile("Wsa.zip" );; K& }0 Z( \+ }- ?, p
  877.         }! \1 W- K  `  S
  878. 1 s: {% l5 H( D& L  K
  879.         if(CheckLocalVersion())' {) `1 Z  @* a2 Q% L  {6 ]6 n
  880.         {7 m" i) m' D* ~, w* o2 y* R5 w
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    % I/ c# `7 W) c5 }
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    . |3 Q9 y. A+ ~. a5 E: d0 f
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");) S  s4 d) p- s
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);) o8 T- d: Q2 b( T  |- g/ m! A
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);# a. c5 u& m1 V' b
  886.           dwStartUpSteps=99;, ?5 e/ p$ y6 p; _
  887.         }$ g. `7 O- l% t, y& _3 k
  888.         else
    # D1 q2 o7 ]8 Q7 |
  889.         {
    : |& Q( I/ K, y$ ]) L
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");# `1 Z+ ?6 b' N0 j
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");- W0 h0 }* ~& u4 W- |1 {
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    : p8 G$ T5 |, z0 _7 |( Y# Y

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

" v& B& i0 a  D- L# F
; U: v  m5 Q" k

評分

參與人數 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, 2025-11-25 12:56

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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