找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
) D; ?% @/ u$ c% e( U* t
  1. / RevApp.cpp : Defines the class behaviors for the application.& O3 J& F* @5 }
  2. //" @+ f& X/ {4 Y* {
  3. . A3 E- F3 i! V/ n, ~
  4. #include "stdafx.h"/ k3 \  c3 [+ T/ I. A) l2 t- y

  5. + I/ H. W. b0 c' B; F! q% u
  6. //#define UNICODE) p, j& B, i5 L
  7. //#include <gdiplus.h>
    ) m9 t  c# W! J# C  m
  8. //using namespace Gdiplus;- j% g% B2 P# Z1 v7 b9 i+ n

  9. : w4 K8 G$ X6 O* {1 P1 S# p1 V
  10. #include "RevApp.h"
    ) |4 m2 j+ Y* p5 O, b3 |( h
  11. #include "RevAppDlg.h"; r0 ]; m  ~  ?# V7 j: T

  12. $ M2 K2 Q& Y4 e3 O
  13. #pragma warning(disable:4786)
    ! N0 E, O" A8 T: V( P  O; e" \# u) q
  14. #include <map>3 l3 F& }' s; x( u2 l1 a
  15. #include <list>5 I" N( l; p  x) U7 Z+ X
  16. #include <direct.h>. ]* P( q# D( W1 M+ C* K1 L

  17. " G, v% m9 t& d8 h7 R3 j
  18. #ifdef _DEBUG
    % [4 u( ?% x' a2 d1 T
  19. #define new DEBUG_NEW; R. |6 }# m0 {. Q6 z
  20. #undef THIS_FILE
    9 D( E" w7 D- w8 O# t$ V0 |( B
  21. static char THIS_FILE[] = __FILE__;
    1 P5 i" R9 c4 Q1 {2 t
  22. #endif
    6 M5 V3 W! _1 l# B5 k  [% M, {$ {
  23. #include "SkinResDef.h"
    ; h4 A6 S1 k5 d. S
  24. #include "ChangeBG.h"- @( I* T! |5 t7 E1 j7 C
  25. #include "AFXINET.H"
    3 `- Y$ s5 _9 h7 Q* J/ D+ V

  26. , g. s! ~4 e9 e4 G+ u
  27. #define TRADITIONAL_CHINESE 0
    5 w& J' C0 H0 V: v
  28. #define SIMPLIFY_CHINESE 1. z/ p5 K( D2 v" o+ k) K
  29. #define ENGLISH 2
      H: V2 i. P! P6 i7 G& E
  30. int m_iLanguage = ENGLISH;, q# ^9 ^! K6 {  G  N3 r
  31. /////////////////////////////////////////////////////////////////////////////; b; w" m9 U$ P" k6 t$ T8 `
  32. // CRevAppApp9 U2 `2 F9 m  R* S4 J$ t
  33. 4 Y( j( ]# T1 y; p& P  U. I
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)
    ! P$ U% Q% A5 v9 n2 |2 U( d  Q* _
  35.         //{{AFX_MSG_MAP(CRevAppApp)
    % P4 ^5 n. x$ u7 F5 s$ @/ Y
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.$ k- u+ w5 j+ C, ]9 O. Z0 ]$ X
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ; Y# x: z+ T! I( G7 O  D2 {
  38.         //}}AFX_MSG! X) w/ Y, M5 d3 o: B& n. Z
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp); ~7 D. ]) `/ x5 Z0 `1 l/ }
  40. END_MESSAGE_MAP()
    & Y# O. W8 A* @! w

  41. 6 L$ A  f# o: v, D0 ?
  42. /////////////////////////////////////////////////////////////////////////////9 }$ ?1 N  X3 w6 h" f; G
  43. // CRevAppApp construction
    * c) i# H" l( w% T" M" e

  44. ! U+ p7 Y2 z5 M
  45. CRevAppApp::CRevAppApp()/ n) }- O, w" D
  46. {
    ! C, D& L0 Q$ x( ]3 w: X
  47.         // TODO: add construction code here,
    $ ]+ o5 f2 z3 ?; k( L# W0 M" t) H4 C
  48.         // Place all significant initialization in InitInstance
      c3 V6 c9 G) }6 Z: _
  49.   bDisplayIsBig5=FALSE;; X: f: f' J1 c% t3 U" G
  50.   bRestartUpdater=FALSE;: P4 L- }& ^) \- Y( o
  51.   bFinishUpdated=FALSE;* x1 ?8 B) ]9 `* |3 Y3 {
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;1 E" W  i+ p2 ]: u! P5 d  N! C( F# Q
  53.   InitChangeDataBig52GBKS();- h' ]+ H3 d0 u1 t. w) N
  54.   InitChangeDataGBKS2Big5();5 {2 O& ^' D' b2 S% r+ O3 R
  55.         //
    * u) l- F& p$ ^% x5 b, ^
  56.         bClickRunExe = FALSE;( R$ _! ]* v% |9 @. X3 q8 x
  57.         //
    ) a* q0 ?% }8 Z/ u
  58. }
    7 c& e+ r1 P3 k1 ~
  59. ) ]! Y% @9 I. g4 a
  60. CRevAppApp::~CRevAppApp()9 e% r2 S+ r/ `
  61. {
    - F7 X+ B1 Z$ T) ~
  62.         // TODO: add construction code here,
    * w7 d4 P# |: G- k! e
  63.         // Place all significant initialization in InitInstance
    7 `" s* a2 Z' x, `& f
  64.   EndChangeData();5 o5 i2 F. t, g5 E/ a8 j* x+ [
  65. }4 I+ Y4 X9 ~( W& O! s% L; l" M
  66. ( z4 D2 s5 h% A- f# B+ w2 A5 j
  67. /////////////////////////////////////////////////////////////////////////////, H8 L2 O( a: j& A0 ^5 j1 V7 t
  68. // The one and only CRevAppApp object1 n- f$ f9 [  b9 e  T

  69. $ Q) ?$ n& P8 }4 G6 Q
  70. CRevAppApp theApp;+ Y9 @6 V8 Y9 e6 S" T5 R
  71. ; \, n$ U* ~. ]0 ~% x8 n
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    9 s6 h5 W; I6 \' o+ M
  73. {9 `# t+ m# k* R. \  Z6 H
  74.   int iEOF=0;1 W1 S3 I8 q% Y  O$ r
  75.   char szTempName[MAX_PATH];
    " y, P1 n" V! L! X
  76.   *szFileName=0;
    % I8 }, u7 Q0 ^
  77.   iEOF=fscanf(fp,"%s",szTempName);
    " n+ a- J$ L; y8 s; f" B( [1 u# g3 `
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    ) H; e. h8 P$ _% p4 G
  79.   {
    2 q1 x# @% n: h1 [/ x( S8 P
  80.     strcpy(szFileName,&szTempName[1]);
    5 @5 @3 G3 Q. i6 }$ y- ?1 ~
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    * J; H- s$ d1 [7 P" y3 ?
  82.     {
    3 y3 a. Z" H4 v% J
  83.       iEOF=fscanf(fp,"%s",szTempName);- \0 j% v7 N0 i$ {6 n, l1 [
  84.       strcat(szFileName," ");
    5 ~: t: ~8 X9 E
  85.       strcat(szFileName,szTempName);
    2 T" I# o4 h7 n6 e, T( `
  86.     }1 h8 L5 S/ K8 o7 V8 Y) I! w3 Q
  87.     if(strlen(szFileName)>=1)6 N7 z/ ]) }9 M7 ?# P& y
  88.     {
    0 _9 b* K; b! q( s) I) r
  89.       szFileName[strlen(szFileName)-1]=0;
    3 Q5 I8 f8 ^& w% _! s* y2 _
  90.     }
    & Q7 T  V4 l6 k6 l! L7 |
  91.   }  T5 @" e7 _' b
  92.   return szFileName;
    3 z- p$ J5 w" J# B0 B% L! [& p
  93. }5 v, |% s+ P, w" D
  94. 1 R; k- q6 A: }
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    0 L6 e; b( a2 N, U' b3 ^8 M
  96. {8 N' p/ l3 n% Q* e; S) V
  97.   FILE *fp;* \$ @# t. B6 Z/ F) W/ B$ u
  98.   char *key=NULL;
    2 x* ]& {' \$ X# A% p
  99.   char version[MAX_PATH];
    % @# ^- v& y0 l
  100.   LPUPDATEFILE file,olds;7 F6 r# l9 b) J7 a9 P" l$ ^, e
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    6 I! B/ q) F' q4 {* H& Y% b$ Y
  102. 9 D: |  G5 a' b9 \
  103.   UpdateList.clear();+ i) o3 n+ r1 W
  104.   UpdateFile.clear();$ F% v+ y' ?. l! x  e. y
  105.   if(GetFileAttributes(filename)==-1) return false;8 X" m' _1 @1 ?+ a
  106.   if(!(fp=fopen(filename,"r"))) return false;. S7 q/ O$ n. {+ R! |( z. |
  107.   fscanf(fp,"%s",version);
    , v3 o' Y5 T- N" h$ @8 d3 W
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    * r8 T& g4 j* D
  109.   while(fscanf(fp,"%s",version)!=EOF)) e4 X# A$ g, y; d  A9 W7 P# R$ V
  110.   {5 A1 |) H0 ^6 B$ z; H& p
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));" z8 L7 U* q+ w5 R1 S$ U
  112.     fscanf(fp,"%s",file->path);
    3 L8 X2 R6 e5 u5 h2 W% w) f& R
  113.     ReadFileNames(fp,file->file);7 X7 Q) k. u. [; [! R6 m7 K
  114.     strcpy(file->full,".");5 e8 D9 y6 X# K/ v. J& |
  115.     strcat(file->full,file->path);2 j  x! e! @- G: S. H
  116.     strcat(file->full,file->file);5 h) Q. o' x! G
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    / o! C. L0 p: Y+ |/ \
  118.     {/ u' T) {. @, J* C' ~) c
  119.       file->vers=(float)atof(version);
    $ `4 W7 o' g1 r7 ]( F$ F" ~* g8 [
  120.       UpdateList.push_back(file->full);: i1 f+ u" Q5 v: s+ u
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));
    4 W% Z  w4 r" D3 J) A& l
  122.     }5 d5 {, w3 s  P0 ]& Z, M; R* O
  123.     else5 Y* S! u8 f# f0 p
  124.     {
    6 x9 N2 _. W0 z' r# u( E. p
  125.       olds=(*p).second;
    6 o# K6 u! t7 y2 q
  126.       if(olds->vers<(float)atof(version))  R0 l3 u7 }4 n4 I* [0 P8 Q% c8 P
  127.       {
    # O5 o; U* O& a( ?( k
  128.         olds->vers=(float)atof(version);) r0 q/ m1 |. L. x+ s  ]$ y* j5 ~
  129.       }$ a7 V. c) n  K5 Z0 f; F$ y/ k
  130.       free(file);- m; N" v! u8 r
  131.     }& D* R$ R& d" Q7 W  I
  132.   }: Z; G: t; I, a& ?; E$ M+ g; o
  133.   fclose(fp);+ i9 P* g- r( z
  134.   return true;
    ( @! M0 G& f" s; l) P
  135. }- Y, l, x) b, ~* r

  136.   R" ?; `  y" J8 P- R
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)6 x( a0 I& S  r% t! K
  138. {  i# ]7 F2 w- y% n) h& f
  139.   TCHAR  szFull[MAX_PATH];
    8 S. I& c  B( c6 Q
  140.   TCHAR *token,*inter;+ p$ |* N% H* _7 K+ f: x( O7 w
  141.   *szPath=0;- M0 K+ s8 x) `4 l
  142.   strcpy(szFull,szFullPath);
    . z9 S0 `0 b) s
  143.   token=strtok(szFull,"\\/");
    % R! T' t  p" F' M. \
  144.   inter=token;2 K- p& u) m/ c/ B% u: {1 Q3 v
  145.   while(token=strtok(NULL,"\\/"))
    & a2 |0 g4 I0 ]8 l, O2 N
  146.   {4 M9 t7 y% t" l3 W
  147.     strcat(szPath,inter);
    # l. x8 F5 \0 u# s
  148.     strcat(szPath,"\");
    ) c) s  z% _. p3 S+ O
  149.     inter=token;
    " T7 m+ z) Z+ \" w# y4 m* {3 p4 D! I
  150.   }& b& P5 o/ z& X& D
  151.   return strlen(szPath);3 i6 b6 m. P5 f  _1 \/ L# ^' S/ d
  152. }
    5 S0 s' v. R9 F5 z
  153. ; ?' w! N4 R$ }' h* v% `
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)0 E# Q4 @; R( b2 `/ q. ?* B
  155. {
    0 T& P1 z* y3 K6 W; D3 \# A$ ^* a
  156.   DWORD attrib=GetFileAttributes(Target);
    ' W' F# J5 c$ _" m, J0 i
  157.   if(attrib!=-1)
    * U3 a0 q2 p2 v2 z& O
  158.   {% ?, ]) i6 s: X6 Y4 @
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))+ j( b- c' z" \7 c) w
  160.     {
    $ ^% g+ v/ p. O, y) h; t
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    3 D& s8 }, P8 }; r6 d
  162.       SetFileAttributes(Target,attrib);
    & O# a: @" ~: u7 }2 e
  163.     }" e/ Y7 q1 g: q, G6 }7 c
  164.   }; ^! Z( ]6 w% c
  165.   CopyFile(Source,Target,Erase);/ t6 `6 a# j7 f- r
  166. }7 p' N4 W" ~9 n% n7 H0 @. y* }+ C
  167. . ?5 |) w" n2 z! Z. t2 U- i
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)! {1 I& G5 K- ^. i1 s# V) I; [
  169. {
    " H6 j7 l; ~' u% c& a( q
  170.      FILE *fp;5 i  w% Y/ a1 F+ v
  171.      char  szBuffer[8192];# X# H) U( h) \& N, `4 u! N
  172.   va_list  argptr;* ]; g. v+ t# w, D

  173. 6 c2 R3 v  |5 y$ }$ D
  174.         va_start(argptr,message);* N% \8 Y4 u7 g& \2 w, \: Q
  175.         vsprintf(szBuffer,message,argptr);
    4 C! E! d! ?7 {
  176.         va_end(argptr);8 Q( X6 E6 X+ [" K/ l
  177.   fp=fopen(FileName,"a");
    6 J. t( M8 ^7 p1 `! N+ R7 |* s# f) y
  178.   if(fp)6 O# X3 M4 g- ]" V" c! X# b, y
  179.   {
    5 R. b$ ?4 |) O4 Z. k1 p) M: j- g
  180.     fprintf(fp,szBuffer);, T# A! W6 L" s3 F. I8 C
  181.     fclose(fp);
    / Y5 Z8 V* r( d9 |) |# r3 ?
  182.           _flushall();! h' Z" A* ^6 {: ^6 _) b
  183.   }
    * i: J% ?0 B9 W2 z* P9 c
  184. }
    ' ]' Y% q7 a/ P$ m7 V
  185. 6 c( v, O2 e. w3 }8 s# F
  186. BOOL CRevAppApp::Fclearf(char *FileName)' M1 E" p4 Q1 t0 k
  187. {6 e9 P) q' C/ ~8 }5 i" D
  188.      FILE *fp;0 Q) o, U* x# t& q+ _  @. z' [) |
  189.     DWORD  attrib;
    1 Q0 W. Z" N: ]3 ~: I7 c3 F
  190.   attrib=GetFileAttributes(FileName);
    : |2 g& U# i( g$ x( S
  191.   if(attrib!=-1)6 K" a9 Q0 p/ k0 i
  192.   {
    , @* D1 [' w2 @3 v" t( ^. _1 l
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);, p! f( X& X2 I6 [% u. O- v
  194.     if(!SetFileAttributes(FileName,attrib))! T' y7 j2 I- b  i5 {6 D
  195.     {7 i6 c; g3 m" y+ A' @+ T! I
  196.       return FALSE;" ^: }* e' K: V+ y0 s
  197.     }
    . R5 i/ j  @; o- Q8 A1 L  @
  198.   }9 M8 L* F& V- H& b' N
  199.   fp=fopen(FileName,"wb");( ]3 A( |* L7 _5 ]$ b, ~5 r' Z9 l
  200.   if(fp)
    # g5 F4 |# [9 }' E
  201.   {  @# ^% M, t' R: x; m3 H& U( \( y
  202.     fclose(fp);" h% f$ l- E: u% s5 d' J, k) g
  203.   }- R/ J) \$ R9 |, u7 j
  204.   return TRUE;
    + i: {& }% r7 @' x$ [: E
  205. }/ r0 Z4 m' ]" W4 \6 J4 B% n2 g, z- T

  206. ! l, p! f7 f  a; O4 I1 k$ C- ?9 y
  207. BOOL CRevAppApp::UpdateLocalVersion(void)7 s: T5 p/ _* H1 }2 ?' j$ A
  208. {
    ' J. k9 C6 \% a& c  u+ x' a2 X
  209.   char filename[MAX_PATH];
    # B) O" }# q1 v; o
  210.   LPUPDATEFILE file,olds;
    + S$ p' x: m) l, r, y! e6 [
  211.   std::map<int,CString>::iterator i;! t& m8 P' o* E* d
  212.   std::map<CString,LPUPDATEFILE>::iterator p;0 v6 @' f: c6 u2 M. K
  213.   std::list<CString>::iterator l;
    3 |3 R+ u9 `5 L

  214. , g  r' `5 k/ T4 R7 f7 p# u
  215.   if(bFirstUpdate)2 y5 ~* V8 L4 }/ r
  216.   {
    2 q$ Q% Q" _% ]+ _7 o0 Q
  217.     dwCurrFile=0;& k$ M2 I1 s6 A- h7 B$ u5 F, C
  218.     bFirstUpdate=FALSE;7 d7 O3 l7 R# T8 r- B* y
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())2 c/ m% M" x1 x  n  W, i% {
  220.     {
    6 Y, V: v: ~- M, C% E, ^+ P
  221.       dwTotalFiles=UpdateLocal.size();3 `( q- z3 n3 ?! S% {! X9 a
  222.       dwDownLoaded=0;
    & }2 _* ?, C+ j1 d: _! h: K9 C( B
  223.       bSilentStep=FALSE;
    % j3 v" Z8 z5 }! e9 f
  224.       bCompressed=TRUE;
      |3 d) ?( T- U9 d
  225.       strExtLocal.Empty();, u& }. T) R4 Y* E1 G
  226.       strFullName=(*i).second;0 B9 f1 O  R! K3 Q  p
  227.       dwProgramState=AP_CONNECT;$ P5 o8 \' t6 @+ Q6 {0 i8 O
  228.       return TRUE;
    * r* Y$ C7 Y0 W, P9 K
  229.     }
    & B' E( q$ Y$ a! S* L
  230.   }
    + B& `% i4 m* I
  231.   else if(bRestartUpdater==FALSE)
    ( N/ w( G, h. }  K
  232.   {8 `! ~' R4 ^4 K
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())( p+ E5 r' J4 C2 X' i' h
  234.     {8 E" e- h. Q: M+ X
  235.       file=(*p).second;6 t1 S1 O9 [  c
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())8 Q0 b3 t9 v# y$ |6 A! q  Q! E
  237.       {8 X5 P2 G+ B9 }4 \# w8 E" b7 O7 _
  238.         olds=(*p).second;" o& D# d" \; ~. l2 g7 M* i
  239.         olds->vers=file->vers;
    ( q$ d" z' a5 v; U, Q
  240.       }; z' V! R% e8 |  t3 N. o" c
  241.       else
    , T" Y6 k5 H4 C( ~# N+ Y% X6 N, d
  242.       {
    5 i3 p7 _5 Z- y; Q! D
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    3 C! C! Y) n8 H0 O
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    6 ]4 Y; Y& H. d/ J1 z( F6 F& [- M/ u
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    & C" a1 r+ R& k
  246.       }& H) ^5 _! D3 }, C9 V! E. w
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");: H  ~" h1 K* \- F! a6 h0 {
  248.       sprintf(filename,"(%s)",file->file);
    5 r1 `# g) S0 j& [$ M
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    8 H% b5 C( B* |; s
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }1 T, p0 n+ o7 X$ J) [; I" ?
  251.     }7 ~; P/ N7 b0 I* ?9 Y$ S
  252.     dwCurrFile++;
    - x' h5 x8 c, ^# N
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())- O2 J+ b5 O* e* m. L, ?$ ]
  254.     {
    7 k# G" k/ @$ T
  255.       bSilentStep=FALSE;, r+ f2 [+ t0 N) i
  256.       bCompressed=TRUE;
    2 f0 Z2 x' T& z' e( C% }' B! w
  257.       strExtLocal.Empty();
    ) u' ]3 l+ k: H! V
  258.       strFullName=(*i).second;! N+ z# u5 _. }
  259.       dwProgramState=AP_CONNECT;
    ; e* I$ V& E- y+ s& W
  260.       return TRUE;$ f* m' O) s( N8 Y; L  ^5 I, J
  261.     }. k% H# W: R. h
  262.     if(!bRestartUpdater)
    ! o' T0 |, _3 f. `. R  B
  263.     {9 V  N9 R) S6 A9 Z& u) m( t
  264.       int iCurrSize,iFileSize;; M. j( }9 g. `) u6 P5 }5 A
  265.       iCurrSize=0;) K8 w* G3 ]: U; Y" ~; I; `1 J
  266.       iFileSize=UpdateList2.size();
    1 Y  |8 h. D& O% ^: ]
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");6 q+ J+ Y8 ^9 d2 @' |8 h+ X' u1 n# G8 V
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    8 L' b) y9 [/ s2 C5 e: O1 c' V
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");" P- U3 z8 C& ~7 b7 k! o8 Y
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    ' L1 m$ J2 {2 U- k" _& I& D. G6 J
  271.       Fclearf(".\\update.dat");; ]  o, J: U6 e3 p- Y
  272.       Fprintf(".\\update.dat","Bloodyf\n");( l0 z9 t$ q8 q. D2 O
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    " o, ]- B5 [; {
  274.       {* Z  r9 V2 p/ ^: S  A- ~' d
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end()). T4 W$ k8 X9 m3 g
  276.         {
    - @. D* ~) a" H, L2 e/ f
  277.           file=(*p).second;3 r2 ?- c+ M+ \$ ^) R, ~* d2 r# e
  278.           sprintf(filename,"(%s)",file->file);3 V' K- |; z: ~8 |4 Q, D
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    7 A" ]' G1 ~5 D7 D
  280.           iCurrSize++;
    3 P" F4 }" W" s1 f' Y, _3 V
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . a. V  R; N# f  z$ l4 y( l1 X; q
  282.         }: F: c, Y# N% n+ T+ F
  283.       }; V& e& S6 Y: C. R
  284.       unlink(".\\update.txt");
    ( s3 L2 c* _9 Y0 [( ~# l! ~
  285.       unlink(".\\update.tmp");
    9 D& j2 Z* ?* }( v0 X: i
  286.       Fclearf(".\\checkversion.dat");
    4 H1 E  ^7 r" M3 c
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);4 ~! ^/ k# b9 K; [! ?" n
  288.       if(UpdateLocal.size())
    8 {5 L/ E: G1 y1 L2 W
  289.       {: G2 b1 w5 z! v  }0 y
  290.         UpdateLocal.clear();; C" T& Q8 l. r" |
  291.       }
    7 d- ~2 `- E6 k$ G
  292.       if(UpdateFile3.size())$ h, G+ x; j; _5 O
  293.       {" e9 b$ c9 [3 ?1 [
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) B& D+ F! J1 x7 X& f1 l
  295.         {
    ( ~* l: d6 C1 d7 J3 |1 d: ]+ ?
  296.           file=(*p).second;
    3 \0 N! k8 p/ W6 V7 B0 b
  297.           free(file);  p* a5 x1 o. Y8 S
  298.         }
    $ @4 P* f7 G+ t$ T& Z5 }
  299.         UpdateFile3.clear();8 d) {! |7 v7 {
  300.         UpdateList3.clear();# _' V4 [) G, p$ K  x/ O7 D
  301.       }7 N; `" W$ ]- r' Z
  302.       if(UpdateFile2.size())
    * L! P: o. n* p7 i6 K
  303.       {5 K' F4 x) U, ]
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)# i  l7 j: ^8 K, C
  305.         {- r" [$ [+ `6 C& z( `  P3 o
  306.           file=(*p).second;
    ( i! e- m% G9 E/ `' z" t" S
  307.           free(file);
    & r" ~; Y6 S# u# A- M
  308.         }. L+ V( L( t( ~3 d0 B' d( `; k
  309.         UpdateFile2.clear();! _3 f2 V# \, Z; T  |
  310.         UpdateList2.clear();* T- _: D0 k+ C) F3 l7 v
  311.       }
    + r6 b9 H/ a6 j7 {) u0 J6 {5 M
  312.       if(UpdateFile1.size())
    % E, I  o; D) B; b& @4 B
  313.       {7 D# |7 I. K2 n9 c4 |* S
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    / K) w4 s3 _. l. Y% W; j+ I% F
  315.         {
    9 B, ~" z5 s7 M3 W3 f
  316.           file=(*p).second;, q* g+ T7 u: T  x
  317.           free(file);
    6 b3 i0 S! c; {& W( f6 y3 r
  318.         }7 f/ g9 ?( A: [, O% `0 n; V  r8 L
  319.         UpdateFile1.clear();$ L* Y( V" J# V2 K! G
  320.         UpdateList1.clear();5 O/ e) o, h( D
  321.       }
    9 r7 \9 z7 [2 M, E+ G- n* |+ z8 r
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    % a! K3 v7 c- f# g* y; C% M1 k
  323.     }* x- S3 \( c$ y5 u' G/ u
  324.   }4 Y5 k* o9 o/ o- A. s) W, q
  325.   return FALSE;( m8 P+ A4 Q. M* b
  326. }6 `4 t( D5 u8 r& f( O

  327. 0 T! U' z$ o  K$ q
  328. void CRevAppApp::ClearAll(void). F. }3 W0 D0 h7 n, t/ l
  329. {4 D* I7 X3 z8 E6 I- C' `) B2 y0 E' Q
  330.   LPUPDATEFILE file;( W. ~# Y$ j/ ], ?6 c( x
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
    ; I* j8 W4 h1 h
  332. , c7 E4 A% I( K9 a/ j4 P0 `  j' v
  333.   if(UpdateLocal.size())
    9 ~( Z9 w4 p, S  S' z0 r8 E9 s
  334.   {( @! ~! V7 z6 H7 _
  335.     UpdateLocal.clear();
    8 v5 S2 D& D/ K8 Q" w- r
  336.   }, T- e% u7 R5 ^+ J( {$ \
  337.   if(UpdateFile3.size()); G: J$ L# \+ \# W0 v
  338.   {8 h/ M  j6 l. W9 t" u) l$ R
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    ! U6 U. A8 n0 \* l1 v5 F
  340.     {
    3 u' u) X+ S5 T+ s9 W
  341.       file=(*p).second;* V& q1 p. |& ~4 k- j8 |& t: y+ `
  342.       free(file);
    ! t$ Y' `! [* q* J: V
  343.     }9 R' p2 z# Q& D' \! I0 \3 M
  344.     UpdateFile3.clear();
    , a7 y/ }2 Q, g
  345.     UpdateList3.clear();" J7 Q8 A8 N4 m/ N2 @5 g
  346.   }
    7 M4 Q" E$ X8 O7 H$ Q
  347.   if(UpdateFile2.size())
    9 f) T5 f1 m& v/ E
  348.   {
    3 w" W6 N8 U; [/ A
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    ( P2 C$ k  K! r, e8 P9 Y- l* M* t! J
  350.     {
    % S2 }/ l* r4 J
  351.       file=(*p).second;% \* V: P8 t% t7 q1 X4 l
  352.       free(file);
    - R+ \1 A) v5 ?7 p: z
  353.     }
    * c4 J, T% B1 C5 j$ k' `
  354.     UpdateFile2.clear();4 m4 Q  V$ u/ [% |
  355.     UpdateList2.clear();. B8 Z" c# S" h& a
  356.   }
    6 o& b- K" c  f2 K$ @3 l3 y! K7 c
  357.   if(UpdateFile1.size()), W1 W' k- J1 @2 ?' a6 R8 {: l$ u
  358.   {3 k: X0 T$ E; h$ U* P2 T$ C1 i
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)/ q% |9 x3 ^1 C7 t
  360.     {/ u* H' h; p4 C' i3 ~
  361.       file=(*p).second;
    & Q' F9 {+ X- B+ f
  362.       free(file);1 @1 N- y( E* r1 i6 ]. N
  363.     }# H. O& O& @, }% ~
  364.     UpdateFile1.clear();
    8 h+ G/ M8 ?& z  N% R+ H
  365.     UpdateList1.clear();: V2 _" i8 e5 T" R
  366.   }
    . m. E7 D7 j3 F2 [
  367. }  
    / i" U8 B, ~- v! M* i2 g
  368.   
    ) A3 N' r4 q0 Q8 @! l9 t% i" y
  369. BOOL CRevAppApp::CheckLocalVersion(void)! {/ I! {1 w1 m8 l3 \6 h* U. G
  370. {' V" C: v& P2 J+ }
  371.   int c;0 ]( y- N6 g; T* R) B
  372.   LPUPDATEFILE file1,file2;6 R8 h) |9 w' H5 N
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;0 B0 z% h- p, N& C% |
  374.   std::list<CString>::iterator l;; A  z8 ^8 N5 c  s+ O
  375. 1 t* G& K* y/ m1 U) H! g
  376.   UpdateLocal.clear();
    ( f9 p- s' ]# K  u8 W: [3 e
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);  f: A0 ?7 U9 k5 N5 |% y+ W" V0 W! k
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);
    3 Q  S# F- x' u, F9 E4 h" w
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);( [$ F9 ~6 J$ s4 [0 i3 o
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);; E( R6 r8 \2 p- G; k  w3 y
  381.   if(UpdateFile3.size())
    8 z, C: s) u( {4 ^; ?5 Y: l7 w
  382.   {
    0 V' F# P1 F5 ^
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)
    8 `) p; z: U; S+ F0 s1 W
  384.     {
    7 G5 K8 i9 y  Z
  385.       file2=(LPUPDATEFILE)(*i).second;
    ! J1 t' p! U5 f
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end()), A( V  ~# o" i
  387.       {
    * i+ A: `2 J8 a8 ?0 z5 V, J
  388.         file1=(LPUPDATEFILE)(*p).second;9 ]1 u2 c: E9 o* R+ X  s' a* E
  389.         file1->vers=file2->vers;1 ^# D2 \& L# s. ~8 I1 d" d
  390.       }2 y% m9 ], n# p, H3 k3 @
  391.       else
    ' f% d; |; \  D# L
  392.       {
    9 t. L  i* }9 I0 q
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    8 g1 f$ L& b4 t+ N! u
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));
    / g( k4 S; L; ~& P' M; f5 N
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));
    4 f0 ~4 @! t9 f
  396.       }" V& Z, O, H7 X
  397.     }
    2 E8 q9 X1 v- z2 z+ I
  398.   }9 t- Q7 {; K6 U* Y5 d! Q
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)- h6 w+ \/ `9 _
  400.   {2 B; h2 u( @: n6 Y( b
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())  S* R( U1 R$ g  N8 O* R  g+ w
  402.     {
    1 H. i: R: E0 v/ r# }- T9 h
  403.       file2=(LPUPDATEFILE)(*i).second;
    9 R2 ^/ x$ k. y5 D
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())$ Q) |2 `# ^, a. F+ s
  405.       {3 z" y# D7 e4 I
  406.         file1=(LPUPDATEFILE)(*p).second;+ o- H; W" {* t
  407.         if(file1->vers!=file2->vers)
    7 H1 o9 M1 `0 O7 @% ^
  408.         {
    , C5 _0 }# L# i- m) I  x
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    ' G2 @" Q/ Z* O. c0 R7 y
  410.           c++;* |7 I  Q, ~4 O; J% u# }. a$ j
  411.         }
    , @! K% O+ O/ i* n# l& S3 I
  412.       }6 _5 l" W$ V" x, _3 ]1 {
  413.       else3 D* J  a( L0 B5 d0 g
  414.       {
    3 g3 X5 h$ c! d9 Y0 [
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    : [& }5 t  @# U. j
  416.         c++;8 n0 W: S4 L9 J7 H# M/ ]
  417.       }$ w+ [/ A+ H9 }
  418.     }
    : D9 [5 N! \7 M! C  z8 H
  419.   }9 ~5 o( L4 v, _" r
  420.   unlink(".\\DownLoad\\update.txt");
    & Y" h  o! q8 {! V
  421.   if(UpdateLocal.size()) return TRUE;
    ( @% {# p+ f$ _9 t3 L: W! f
  422.   else                   return FALSE;
    / L3 z' X: j( q6 ~) R9 \# p' o
  423. }
    $ X; w. B  ?& B, d0 x

  424.   }/ R: |: K1 C4 t% J, m" {
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/". F  G5 R- J& Z  A% }
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn". u( B3 v" T0 a' ~/ H6 _, Q

  427.   H' m6 K7 q; t  a6 M- O

  428. ! f5 R7 y, ~5 Z  B% f; u, Y# X
  429. " c6 n4 A5 |5 W2 ?# c1 `
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile): ~, j( l9 z- M6 q/ d2 @4 M
  431. {
    ' h3 k; B) {' D  v
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    1 h! c1 N/ v, k: I/ h/ [
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)) ~0 W7 J! w$ w3 A2 K8 v% @+ o3 i. P% }
  434.   {
    3 O0 l4 ?+ p0 ?' @8 r
  435.     char szLanguage[50];
      K/ o  F. P5 P
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");! v2 @5 C* ?5 Z5 P# G
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    & O; ~. _# l! i5 _
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;) `' O/ i, n) m4 O
  439.     else                                   m_iLanguage=ENGLISH;2 D$ h5 _$ s! n& a1 @. Q
  440.     char szRegister[100];
    ) o( B6 c. @+ i1 G% O
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: V1 `+ W' F) h+ O2 ]
  442.     strRegsName=szRegister;
    ! b  D2 x% Z) p* _  L
  443.     char szPatchURL[100];; P7 j* W$ z8 U
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");0 V5 P$ Z" `7 h' m& S- {$ _
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);9 W1 n7 {: `* u
  446.   }4 o; M. E# u& _. P
  447.   else
    " l& m. [( d; p: G5 l; R( u/ U. m
  448.   {
    8 ~" ~8 g' E* h/ z" U2 V# Y
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);% H# d% |! r+ N1 u6 j: {
  450.     strRegsName=DEFAULT_REG_URL;
    $ }3 f+ C. w: P; n
  451.   }
    ' \  L; V0 T" H  ~5 Q; h$ B/ r* ~
  452.   if(GetFileAttributes("hosts.ini")!=-1)) s$ D# c" l3 U$ f& P4 u
  453.   {
    # r( B! ]* v) C; _" ]+ `. d
  454.     char szIP[50];" Z; n! H+ e9 l# Q) F6 F1 _
  455.     char szDIR[300];0 ]. h6 h( C: l" P9 F) d
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    7 v$ i. W4 X, C0 m, B8 }
  457.     {# E9 ~! }: u: I% G/ {, Y7 m8 x
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    4 Q/ Q1 O" {4 D) X, t
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    * q' r2 c3 J$ g/ n7 q( Y
  460.       strHostName=szIP;
      }! J, l8 ~- [; M5 O: z
  461.       strHostPath.Format("/%s",szDIR);
    # Y8 N4 V0 \' M0 L. |" P& ^2 B
  462.     }
    6 d6 ?: |( X9 ~" u
  463.     else! F, U! P  w" F0 k+ d7 t, O7 ^
  464.     {
    9 S/ o0 k  P1 }9 `$ a9 M
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)9 T: Y# \9 h* Z! n
  466.       {
    9 M& c# Y% i% P; a7 O
  467.         char szLanguage[50];' @# g5 C8 N6 m9 j1 J
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");  U8 h0 X' U- Z- O% i  o
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;' t- x; M# p6 a
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    1 l' _6 {) u0 s% ^1 e
  471.         else                                   m_iLanguage=ENGLISH;- I) j& Y( C7 [
  472.         char szRegister[100];+ H  B" m8 K. E
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");) f5 r& _9 ]5 {: h/ i
  474.         strRegsName=szRegister;2 j$ ]; r6 e5 s* s9 s
  475.         char szPatchURL[100];- r  g; e9 L1 P( p6 p
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    ; p! W5 S2 m) T5 y  k
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    ) h1 r  p: j; u
  478.       }3 G$ O! |' B6 n
  479.       else9 h7 M! x: Z0 b9 l& H: r" P6 t
  480.       {
    ! n% F! U4 R$ p0 v
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    8 |' H$ e2 A, ]1 E. |
  482.         strRegsName=DEFAULT_REG_URL;
    ; X6 K: M7 g8 O7 h
  483.       }/ V3 ^% @8 h! _3 g
  484.     }- u: d+ ~+ s. V# ^8 }
  485.   }
    " U. P5 W4 \0 `! I
  486.   return true;
      I; @9 o9 ~, {- y
  487. }7 j- y) A1 k* d
  488. $ H$ p& k' x. i1 C' M5 [4 j
  489. #include ".\ZLib\unzip.h"
    , t9 ]/ X: D. x/ j7 m
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    3 |. b2 Y0 |* x0 g% @7 i4 Q3 o
  491. /////////////////////////////////////////////////////////////////////////////  D& T# _" m3 c5 }$ Y/ x
  492. // CRevAppApp initialization
    / ^( d; T0 f- h3 M! D/ i

  493. 5 ~5 U. H4 G3 \+ D4 o% ?
  494. BOOL CRevAppApp::InitInstance()+ a% d6 \( t5 E5 ^$ P& d
  495. {. a7 t" ^+ v; {  M9 ~
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];( |; t) [' U2 I/ _
  497. , z: f# a7 a, z# ^4 ?
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);* B, r# a, o9 m) q  L, m
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    6 M! I9 B9 A& a% [; C8 H2 n+ |: K
  500.   {; m' z" k( P! v5 x+ h- K- }
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    - c* Y* b, y7 `/ [3 X
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    - o: t" A( s+ _, n+ e- S
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))' _6 s5 b! o+ T4 `3 g5 u! C% x( v
  504.     {
    4 A, h+ P( l# N1 M) W9 Z& }) R. U; ?
  505.       strcpy(szPath,szPathTarget);
    3 ^# O8 u! L  \. [0 w
  506.       SetCurrentDirectory(szPath);1 G1 k. a9 ]' P7 _# U4 Z4 v
  507.     }  _( K/ {0 h6 y7 z9 O, e/ J
  508.   }
    : C# \, }& r* H) E$ d% \4 w
  509. #ifdef _DEBUG
    8 C# X' Y" X, e7 R0 f- ~7 G( H8 E
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    8 ?3 ]/ l9 V* ~* Y' |6 |, j' A
  511. #else. L% p3 v1 l4 Y1 F2 L6 y+ g
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))
    % O9 H9 ]% I2 W+ G
  513. #endif6 T; d1 E* a* v0 x7 r' h
  514.   {* [- C- f+ `$ ]$ U. H0 h" S$ \/ N. Q
  515.     char tempFileName[MAX_PATH];" W- s# |2 q/ t& S
  516.     strcpy(tempFileName,szPathSource);; f2 e+ x: v) b$ a; q# ~
  517.     tempFileName[strlen(szPathSource)-12]=0;
    0 O5 K! p1 z1 w/ H" ~+ t6 o9 t
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    0 a7 h) \: w' g) b7 ~( f' G0 I; m
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    % Q, e) f5 h& h3 x, e3 @
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    # H7 z1 n) [4 {
  521.     return TRUE;! @3 \. Z" K4 [* c  f3 z
  522.   }
      r0 p$ _6 r& ]% C# u( E& I
  523.   // Nuke 0118: Delete run.exe
    / a/ b) I. \1 p: P% a$ {
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . T- J7 C* f3 x' e9 Y/ Q
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");$ r1 F5 W! O1 D5 i
  526.   if(!ReadCfgFile("Config.ini"))5 R- h- ^9 N' x6 q
  527.   {
    : D! }. Z. e4 |2 ~3 U. K4 u4 p
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);
    ) W2 E7 B# ?7 x  Z1 h& M: X
  529.     return TRUE;
    9 y4 |" S# t" S* {0 I: K
  530.   }1 b' ]9 X/ t7 }: t' K8 j
  531.   HANDLE mutex;
    6 S0 F& m8 |) p
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    $ ]9 `1 o8 A" z5 g
  533.   {; W1 s* ]! E5 G6 ^( K4 ?7 B. f
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    " }4 w7 W" g7 |& {, \
  535.     {
    ; Y8 X$ |6 y4 ]  `7 Z8 g- u
  536.       CloseHandle(mutex);
    ! s4 s" d" H: b
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    8 U$ e) H8 D! j' P" F. v& e6 e8 M
  538.       return TRUE;3 f* f; o# Y4 ^6 f& W8 O
  539.     }
    & S" H, T4 S$ N8 |9 f: G& [( P
  540.   }  ) T( }: l3 M, j* u
  541.   CloseHandle(mutex);
    % u; E7 J, e5 G! @. G5 s

  542. , q! B1 X2 \6 s( C% i/ h1 l
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ( p! g( n# E- K

  544. 4 J  t: O2 ?/ \& i+ e- C  s/ }
  545.         AfxEnableControlContainer();
    1 V1 x+ q' @$ h9 [

  546. : ]/ t4 G2 z2 K; C' K
  547.   bCanUpdate=FALSE;
    & K! @8 K" ~# v$ D8 }: o
  548.   dwStartUpSteps=1;
    . \9 c& h' D) n9 f; D
  549.   dwProgramState=AP_NOTHING;
    & U/ i- {0 H* r( ?

  550. 1 K9 I) O" s* V* l( Q4 S
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);; c3 z" ^+ _9 w( P5 p$ x- G

  552. 0 _. G/ \: {' d3 g& C4 r) P! m# M
  553.         // Standard initialization% D+ v0 R7 d: I, e, e& R- i3 o
  554.         // If you are not using these features and wish to reduce the size
    7 s! I4 c2 |+ y: X
  555.         //  of your final executable, you should remove from the following
    4 e+ X* V. j. s" t! V0 g
  556.         //  the specific initialization routines you do not need.+ \6 j3 I5 U+ Q  X4 _

  557. - M* {' K6 F, y1 O
  558. #ifdef _AFXDLL
    8 p: q7 A) J/ J2 V" q
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    8 u& M9 a5 T" S6 v- R0 h- _
  560. #else' M4 B$ |$ L9 N$ }4 \# W3 t
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically4 n2 ?; O' f. }" d+ V! B' p" ^
  562. #endif3 j7 E8 x! ?- l& ?' R
  563. : D6 p; {$ r. m0 B2 G5 U7 \
  564.   dlg=new CRevAppDlg;! S5 F! S* P3 N) c/ K4 b1 a% P2 U
  565.   dlg->Create(IDD_REVAPP_DIALOG);( F4 f  y/ c4 S( e5 g0 Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);1 }/ h+ K( O5 t3 d: A
  567.   m_pMainWnd=dlg;& \0 M8 x$ Z. ?4 {/ z

  568. 6 ^; A  I( z6 |# H, R7 y
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);
    ! s; P, G) L0 I! U! f4 Z7 Q

  570. ; g9 ]  I" J) J- q8 [0 d7 i
  571. //  GdiplusStartupInput gdiplusStartupInput;
      i# u' v0 k% `% X6 b5 Z, L
  572. //  ULONG_PTR gdiplusToken;! I5 S: u6 G& d
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);7 K% a  c& b0 v0 j' \8 ?* I

  574. 7 m( F7 ^' t& F- ?* w0 Q6 u
  575. //        CRevAppDlg dlg;; R6 Y, \" @- l( j$ w! Z
  576. //        int nResponse = dlg.DoModal();  d3 A, e5 D  k/ F* g: h
  577. //        if (nResponse == IDOK)
    + s: I$ y% j5 [. Z
  578. //        {
    * j9 J# a& M9 _0 M; E
  579. //                // TODO: Place code here to handle when the dialog is
    2 E8 L( c" z+ L1 Q1 _8 G
  580. //                //  dismissed with OK
    $ N9 f) y$ O+ T/ W, S7 E
  581. //        }
    ' ]# _# n$ O, ~* X2 N# }) I8 V4 u+ J6 r
  582. //        else if (nResponse == IDCANCEL)
    * C1 i7 K* R4 Q9 Z: o! Z/ }% y9 s
  583. //        {
    ( t: Y6 K: W- r* a/ \
  584. //                // TODO: Place code here to handle when the dialog is
    % Q6 C; g3 a; R3 T) e$ v% T% O* ~$ Q
  585. //                //  dismissed with Cancel
    ( Q% f  _! M3 _) N" p% Z+ d  j
  586. //        }! a3 O9 N8 E8 u$ I

  587. 4 v, W' y6 a6 {4 e8 x! W, w8 q/ g" k
  588.         // Since the dialog has been closed, return FALSE so that we exit the! D: X8 `8 o: j% {/ b3 N
  589.         //  application, rather than start the application's message pump.' Q! n: U% a8 }; X. o- r
  590.         return TRUE;
    9 T5 L1 D1 I4 ]' }
  591. }
    3 B. Y& [: r2 H8 o" [5 y
  592. 7 q" Y8 x+ J# K. L- j
  593. char *CRevAppApp::strtok3(char *pSource,char *token)% n! H5 P! h+ Z5 g
  594. {
    0 V: e! t! f. u6 X
  595.   int i;
    4 k9 ]& l" t0 ?$ z* H/ H
  596.   char *szRet;, c, x- j7 q. u: l5 s! C

  597. , O- P8 z  ^. U
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    ' a1 u! c* D9 w, |) K  S6 A+ y
  599.   if(sztoken)
    5 `2 ~1 ]' _7 N5 t5 S3 ^; L0 b
  600.   {
    9 d9 ~' a' I2 P7 N# y- A7 t/ b( D, Z
  601.     szRet=&sztoken[itoken];' Y5 E3 r3 e. {) s
  602.     while(sztoken[itoken])
    / c- B1 R) z& F1 F6 P
  603.     {- ?5 z7 b& x. R5 G
  604.       for(i=0;i<(int)strlen(token);i++)
    . O% Z9 z0 t& @$ Q0 E
  605.       {
    $ T& P9 Y0 ]4 M
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])% i0 Y7 p% B# U, y* w* T
  607.         {
    . g2 p0 y* X* C( g
  608.           sztoken[itoken++]=0;% r# {" C& F, z1 e3 y
  609.           sztoken[itoken++]=0;
    - m- p' r, D% d! ]! A5 W" Y7 I
  610.           return szRet;
    . r, l( W- ]8 J* `/ ?, M
  611.         }
    ! ^( D  `& V8 m" ~1 [& Z
  612.       }! K* V7 ~1 I* t6 \
  613.       itoken++;
    : z5 ~# y- Q2 e& T# J/ _' Z& P
  614.     }* |6 \& ?9 i9 A9 w# w5 h
  615.   }# \& B- J( ?3 r1 a
  616.   return NULL;1 Z1 J( h9 p: N1 m* S6 [3 O. \4 d/ Q
  617. }
    0 p- l. p& O2 K& r
  618. - j0 s1 A7 @/ r7 Y: C5 s
  619. void ProcessProc(long Total,long Current)
    / e4 o5 N+ I$ c
  620. {& V/ u* r2 O1 e, c/ h6 ~
  621.         MSG msg;
    7 q; g0 N% Y- S9 i: J, w# z
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);* y9 f! n, r/ S+ ]) d, v
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));
    ( W) R8 U6 E' l, \+ P
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))" R# s( R" f' d# i6 T$ s. i, b
  625.         {3 a; Z, C4 y# X- F
  626.                 if(!GetMessage(&msg,NULL,0,0))
    2 P. r" G( R4 @; q' ~
  627.                 {
    1 w' l5 w3 J0 q  t  A& S8 i- m
  628.                         return;
    $ E2 c2 S2 O: S* T) U! m" J+ o0 q
  629.                 }
    4 U" F4 R# D1 p8 `3 R9 R& ?; B
  630.                 TranslateMessage(&msg);/ [5 E+ J( o7 P* P: d; {
  631.                 DispatchMessage(&msg);! J3 T& E& M4 [
  632.         }        - H; i  `2 b6 C
  633. }  {0 x/ J+ ?8 _3 I5 o6 ]" O

  634. & r% N. Q- N; l0 i  t% q
  635. BOOL bFirstChar=TRUE;, @+ C/ _5 E" t, E, }
  636. ! ]. Z+ R: J  ~. `- A* \7 D, C) A
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    1 C7 Q  o) l2 b" D! c: z
  638. {
    & r' I) o2 n* q# J1 H
  639.         // TODO: Add your specialized code here and/or call the base class( A2 c; q/ z6 P8 {" p3 c! @
  640.   switch(dwProgramState)2 z# Y+ i9 |* ]# d' D9 V8 Y4 h
  641.   {8 P: Q' o/ x; n. i2 g( E" ^9 _* Z
  642.   case AP_NOTHING:3 A/ f5 ~4 H- ?
  643.     switch(dwStartUpSteps)
    % N$ m* f3 S/ @& q& }* q" m5 G! x) u
  644.     {( s/ g6 Z  f* J+ x' z/ H5 C3 S
  645.     case 1:
      O! Y9 g0 u. H' b! w2 b
  646.       {- p+ D4 _) K# {* W
  647.         int i;
    6 m0 h! @5 U3 Z( a$ q
  648.         CDC *pCDC=dlg->GetDC();
    0 I4 r/ F3 y& p; a' |
  649.         HDC hdcwnd=pCDC->m_hDC;
    6 J5 \1 S1 _! e& S# W) S# I+ A
  650. //        Graphics graphics(hdcwnd);  y0 O$ p6 N- D7 x8 O( d
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");) T$ l& X) U" d- O9 o3 w
  652. //        INT iWidth=bitmap.GetWidth();
    1 F& G9 v5 F( q% X; Q0 s7 v0 F# ]
  653. //        INT iHeight=bitmap.GetHeight();
    & a% ~9 D3 F- H- D' [" S/ c
  654. //        Color color,colorTemp;1 s' ~+ [8 a5 g4 h- `3 j: J/ w% n
  655. //        for(INT iRow=0;iRow<iHeight;iRow++): ]: t7 q$ b) G* ~' L
  656. //        {
    7 i; G3 o5 W* B6 `+ [6 k# J' [% R
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    4 P! y7 ^8 y3 K' A" v+ p7 H* o: W9 ]
  658. //          {4 m4 r  p! [0 n' H8 e3 F$ z- J
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    : X" O" b: H7 Y2 `: \4 T& X* K
  660. //            colorTemp.SetValue(color.MakeARGB(6 D' w: p) f$ ?6 ]
  661. //              (BYTE)(255*iColumn/iWidth),. t, P. Q% T% M* D
  662. //              color.GetRed(),
    # X1 n, E; G. e
  663. //              color.GetGreen(),* Q* L/ D/ c# q% c+ f8 T
  664. //              color.GetBlue()));
    7 A9 s5 v$ C9 o9 A+ r7 X
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);- D  L9 a3 ?% j; G
  666. //          }
    ) {; q: ^, v1 ^5 ?' h3 r! r) X: x2 u
  667. //        }
    6 w/ d4 s" i( C- {
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    5 U1 X- Z1 S( {+ C: N
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    6 f  o% \6 u# Y- J* y# A1 X
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");
    + r) g  |9 ~8 X
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    $ N! g( T( A; B+ {/ X) S2 U/ w; G
  672.         for(i=0;i<240;i+=8)
    , e3 r& Y% k1 s( t; A  J  y$ x0 C
  673.         {
    ) }" g0 O+ l3 Z& B6 T
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , o! ?2 V8 `# V& o- r# K4 g( Z
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 P$ [- c# y' T+ O/ a0 J7 K
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);3 M# s9 T1 X$ \
  677.           Sleep(33);8 B! U' y1 r# J
  678.         }
    . B* K& R7 K" }+ ^- ?( J  \$ Q3 G+ S
  679.         Sleep(1000);2 Y. G% K( T; [
  680.         for(i=240;i>0;i-=8)
    / p" e7 `% g  {5 {$ |" P  ]6 {
  681.         {
    ; P6 M3 D: ~. W) C: V+ C
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    - y% R/ j3 j& \  Z2 ]
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    9 @% a4 s' y2 Z" z, I& i3 b
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);$ [5 D$ S4 k  X. {1 U8 T0 i' E
  685.           Sleep(33);
    # u4 i+ o$ _5 K) l8 U9 b
  686.         }
    0 d: [  V0 I0 `6 h, u* Z7 w
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);
    % k6 T/ |7 c# n, m7 d, f
  688.         dlg->ReleaseDC(pCDC);
    % |) T1 {) W- A
  689.         DeleteDC(hdctar);
    * P! E# i, R" j" [5 m4 s
  690.         DeleteDC(hdcsrc);
    ! g" ^0 M7 c" z$ I
  691.         DeleteDC(hdcorg);' ?+ s8 O1 x  }% S" }- v  _
  692.       }
    + Q8 o3 c: s  V2 a2 ]
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);- r; ?* a" t- g8 N" W
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");4 r3 p4 ]( w& A
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");: y: y% i3 V+ n* @: v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");3 L8 r/ _$ }3 ~+ J
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);2 F. j3 x  s. c5 p/ V1 v
  698.       if(!Dn.Connected())6 C* H, ^* M7 B0 f+ L3 o
  699.       {
    * N$ r8 J% b1 c' q
  700.         dwTotalFiles=1;
    * v- I+ }% x' P6 N, T* I
  701.         dwDownLoaded=0;
    1 S5 U" {$ I( P% g
  702.         bSilentStep=TRUE;
    5 l9 Z$ _1 b5 @
  703.         bCompressed=FALSE;
      W* y$ v, [9 i' q6 B3 L& o; Q
  704.         strExtLocal.Empty();8 }6 k! S7 Q: {; |$ K  j+ J- d
  705.         strFullName="readme.txt";
    % B; h3 U$ C2 ~6 I. q" q7 `3 u
  706.         dwProgramState=AP_CONNECT;  V5 U' o9 ~' U
  707.       }
    7 Y3 f3 a6 H# }6 S8 ]
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();
    " `7 P  U& r8 Y
  709.       dwStartUpSteps=2;
    ( U) G$ J0 s. D! L- ]% c
  710.       break;
    + n3 @# u6 P# o- e9 I& T
  711.     case 2:
    ! O/ u. t. Y/ N, Z4 Z- r
  712.       {
    / J5 Y1 e/ {% y& W: \
  713.         int iEOF;: d+ f& Z# I/ r- D1 G* [0 l8 o
  714.         FILE *fp;
    5 u' d- r( M( r# `- g8 e
  715.         char szString[512];
    1 Y9 B8 Q2 S: y* Q. n6 M
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");3 C4 b8 R4 P( E2 r+ F; ~# x
  717.         if(fp)
    # |2 w3 \! P7 u2 ^- y  M
  718.         {* ]2 x; t8 f) R; K, }
  719.           do
    ) g* K6 a5 e. R/ I1 }/ u/ v
  720.           {0 Q* X) E. M0 j' V; A& [% L
  721.             iEOF=fscanf(fp,"%s",szString);
    + m8 M# b$ |7 }9 @$ n0 |4 j$ ]
  722.             if(strlen(szString))
    2 y- ]) L" J6 o
  723.             {
    . f. K( y* X, l, |1 n+ g1 V
  724.               if(bFirstChar)0 f: D  p' u: P/ N& y5 q8 Y3 A
  725.               {
    ! M2 O6 n0 A8 t$ O- e4 |2 [: P
  726.                 bFirstChar=FALSE;
    - S$ j' \. d: S- F
  727.                 bConnectIsBig5=FALSE;
    0 E! K' y* [2 j/ N
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;
    - f4 c; b" {; J" L
  729.               }: ]# C* w/ B" M; V5 r% O# p/ d$ G
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ; h7 Y& C8 ]2 e4 \4 T
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    ; P8 l0 ~" a  e! d: K- D8 t
  732.               dlg->m_ListText.AddString(szString);- e6 {! P7 i) E. [3 d
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    2 e$ j3 I7 C  U' s4 L. Q' F
  734.               *szString=0;( w5 \$ P  o# S; b: x
  735.             }
    : E; ~+ c8 x9 a) y$ Z$ z
  736.           } while(iEOF!=EOF);
    # g# ?: d) J0 E3 g4 J5 c5 I
  737.           fclose(fp);( ]2 X) z' a. i2 g2 b) O% e2 h
  738.           unlink(".\\DownLoad\\readme.txt");
    : ?% [# X! ^( c8 `
  739.           dwStartUpSteps=3;
    & c, d9 J: |- C
  740.         }+ v: {% a3 [! e" c3 ~9 N
  741.       }8 w- A- L0 n9 e0 d( ?/ C
  742.       break;
    ; `4 t; [  @, t
  743.     case 3:- U* Q3 ]' o* t9 H- Y: w( W
  744.       if(!Dn.Connected())& t+ c% [( p! `
  745.       {
    , B* P1 J- K3 I9 A
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    # F3 A+ I8 H) L! b  C0 C* n
  747.         dwTotalFiles=1;
    " h3 L6 I1 ]; o8 \
  748.         dwDownLoaded=0;: O, V8 B/ R, G1 p: l$ @$ T
  749.         bSilentStep=TRUE;
    6 U/ i1 a. E- U
  750.         bCompressed=FALSE;
    ( n7 z. f9 y0 l$ {8 j; ]4 o$ ^
  751.         strExtLocal.Empty();
    # V) c' z. t% m0 V. ^. Q3 ^3 \
  752.         strFullName="checkversion.txt";
    ( Y" q: u! B2 {- _2 T$ w# F
  753.         dwProgramState=AP_CONNECT;  P5 s& q# f3 U
  754.       }
    # t- v0 ?" n+ K% R& g$ Q6 T
  755.       dwStartUpSteps=4;
    / T& ]$ {, g7 u
  756.       break;
    ) x) }# Z: e. T) O; I+ d2 L8 D
  757.     case 4:- S2 n0 s) t# K/ s, i
  758.       {
    , I4 T6 k2 ~" o6 V8 M  z2 f
  759.         FILE *fp;' X" d4 N- o3 j, N) _" @4 V* Y
  760.         char szString1[128];2 h0 i$ P' x# {$ E* }, a1 _+ G
  761.         char szString2[128];
    " i6 k0 M! _6 G. e4 w& W
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
    % M9 d/ D8 X# _# d6 X
  763.         if(fp)
    7 R6 `7 _# V+ F! t
  764.         {( W/ g3 k3 P: ^: ^0 g+ X% O. G
  765.           fscanf(fp,"%s",szString1);
    0 P: e3 D! S0 j, [1 A
  766.           fclose(fp);
    5 j8 A+ R: `! U. i/ @9 d
  767.           fCheckVersion=atof(szString1);
    . E: ^% h, }8 ~
  768.           fp=fopen(".\\checkversion.dat","r");$ ~% r& J1 q4 V( h' E; y/ p
  769.           if(fp)
    * U% \  i: `: L8 E2 w: V
  770.           {- ^7 P( a( s2 w+ V8 b' |: B
  771.             fscanf(fp,"%s",szString2);) l- S. Z2 {$ S# e7 f3 }
  772.             fclose(fp);
    9 u! }* S6 Q: U$ m7 w1 ?, g. J
  773.             if(atof(szString1)!=atof(szString2))/ q- f( F( q* K8 C: |
  774.             {! J8 U: l0 V" `% D
  775.               if(!Dn.Connected()); R( G; j& z, V3 q" B
  776.               {
    ; E% M5 ]# W/ \+ U& N2 i
  777.                 bFirstUpdate=TRUE;
    0 z  a7 f* b, o' m9 O/ \
  778.                 dwTotalFiles=1;
    ( P# F3 S. d# Z- c* x' h; C: F( O
  779.                 dwDownLoaded=0;
    ' o& Z6 S6 E0 `% U& y7 V! _/ F1 P3 n
  780.                 bSilentStep=FALSE;
    % Y6 w6 T: @! ~6 `- J) y5 a
  781.                 bCompressed=TRUE;
    % h' O# ]; c9 P0 X
  782.                 strExtLocal=".\\DownLoad\";6 O$ ?! e: w5 O9 U4 }
  783.                 strFullName="update.txt";
    2 w5 U' z$ u5 j) N# H: x+ @
  784.                 dwProgramState=AP_CONNECT;% d! y( H* W% w, x
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ! p- `0 M* F$ U9 o1 `
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    7 v. |  F* y/ o; [# [2 ]. w
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    / @5 X5 J7 D  p

  788. $ v) N$ ~. @$ Z4 h/ o/ C
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    : o6 y; M+ B7 Z/ q
  790.                 unlink(".\\DownLoad\\checkversion.txt");
    6 I' ~0 t: K3 g, K
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)& U" `- s: P4 m. I7 k
  792.                 {2 e! L# y+ ^+ j' g, @& E' L  l
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    6 J. k9 f* G4 r' c: v; I; q
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    & ~5 _5 ], y; K2 X: m5 M
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    6 I3 y! _4 u3 L' u1 X3 n5 H
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    & r% z; K8 _% ~6 g; W3 j$ ]

  797. + i; g' i7 K8 p4 Z2 @
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    # I+ o( w& i% W( y  p
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + f. p" f4 `. A2 t7 z& b
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");* @  |2 W# C- K: d& ?6 c
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ J: g; w$ t! f) U4 t6 a
  802.                 }* l* ^9 |: O3 i+ U; v
  803.                 dwStartUpSteps=5;7 w0 }9 h* n- |
  804.               }
    1 h' T' N2 }: K7 U9 h* j8 s" R
  805.             }6 [0 L+ J" Y( @4 J* J0 {8 {$ Z
  806.             else8 h" {+ ~2 k2 V& H6 V9 m
  807.             {
    ! H; Y2 |/ T: j8 n* `5 _1 S
  808.               unlink(".\\DownLoad\\checkversion.txt");6 {& g3 ^0 E  l5 `; q& A5 o
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");) N3 F/ D  _3 c5 d( F
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");% S$ D/ P, c4 `/ v
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    1 q. ]1 p: `( @$ Y7 p9 @4 H" W" g

  812. 0 h' g/ K, \' W8 D) n5 |+ Y- k8 D
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. k9 O# C: o% u! r8 S
  814.               dwStartUpSteps=99;
    7 V+ G+ ]  L0 @1 j
  815.               bFinishUpdated=TRUE;
    9 W1 @6 e' {+ g: t, K7 m
  816.               bCanUpdate=TRUE;8 _' w1 \# H2 u8 T2 \2 Y8 W
  817.             }
    8 {0 I0 M0 p, }8 R7 q. f4 W
  818.           }3 [& a9 h9 m. \
  819.           else
    ! B5 E/ U/ v8 x' p" O
  820.           {
    $ E3 R$ S# v/ H& v5 H. k5 O1 x
  821.             if(!Dn.Connected())
    0 M7 b/ E) {& }0 ^6 X- g$ v
  822.             {
    / Z4 w3 n  ^( ]1 b% B4 _( ^; m4 z
  823.               bFirstUpdate=TRUE;/ ~  F# e+ \( M  E& f3 L3 [8 q
  824.               dwTotalFiles=1;$ `6 _2 O) t' _0 d1 U9 @; `# c
  825.               dwDownLoaded=0;7 |5 s6 ^- i; g
  826.               bSilentStep=FALSE;7 u( Z' q9 ~3 X) d
  827.               bCompressed=TRUE;2 S- a+ w. @" _
  828.               strExtLocal=".\\DownLoad\";' O0 X, V( J- T7 T& C. s& h
  829.               strFullName="update.txt";
    % i  B% a0 t8 c1 b& |- ~" S. C
  830.               dwProgramState=AP_CONNECT;" l$ O1 S6 n! D- z+ D% Z" b$ k$ k
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");! X, y$ ^1 x% \$ L" w9 O
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");. ~2 t" ]; J1 k* Z# T
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");  t1 r7 ^8 l) e9 K. p/ C! R0 C# X
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    . f% l6 o  n& i
  835.               unlink(".\\DownLoad\\checkversion.txt");
    9 a, b3 J5 ?4 C. s' X  o- N% F
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    . s% ^8 u) K' b7 A/ Y
  837.               {
    8 o. Y, a7 C  [( g  H% H* e: L
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    0 t' {4 T1 b) W8 q  ~- ^
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    ( z' |. \4 Q& S; M3 s# k$ [
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");% L' c+ S5 E* D' N: o# S
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 F6 M4 H' E# |1 u
  842.                 9 E6 P6 @; J7 c  @4 I- S0 U
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");/ z- |+ w1 f# c. q( l4 f2 w
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");# Q, Q, q9 }5 Z
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");5 i+ c6 }* a. D9 O8 q  B: r
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 H2 V0 z: b4 E' R7 T; P% [
  847.               }! q' k, f. o0 q+ @5 l4 m
  848.               dwStartUpSteps=5;
    9 U4 u5 m, e: s$ _& W8 l- b* _
  849.             }
    ' h0 i' ?* F1 ?; D" b( j. \% C
  850.           }4 S' H  Z' e1 G) o
  851.         }
    5 ^) S: {: `, T) m8 d& U4 ~0 h: H
  852.         else2 l% y2 @9 P" ^/ s$ F  v
  853.         {$ V% o4 j: ?5 w7 z9 k& g* R# G" T
  854.           dwStartUpSteps=3;
    ; j( P( r* i$ s/ H
  855.         }
    3 ?7 c2 e* D( c
  856.       }
    2 B6 M8 }( L4 k5 C, ~) @: k# L: V- ?
  857.       break;
    + C* ^9 G0 \, [" ?. p* i. k
  858.     case 5:- v) v( _" `$ E( N8 u
  859.       {' l& j" w- z3 }4 y
  860.         if(GetFileAttributes("Wsa.zip" )!=-1): x' k' E+ l/ @5 d3 `$ }- B& E1 B; X
  861.         {
    & j8 `/ E4 Z+ u% }
  862.           int opt_overwrite=1;
    . f( Q! |+ J* W
  863.           int opt_do_extract_withoutpath=0;
    7 O, n  R  j7 t1 N1 q- N) @
  864.           unzFile uf=NULL;
    : L+ t* b1 e) r+ Y$ ]* x8 i
  865. 9 `5 r/ K' K& {' ?
  866.           uf=unzOpen("Wsa.zip");
    , ~- R0 N: w$ B0 s5 ^
  867.           if(uf)
    4 O9 ?9 V1 b/ |. q* M. x
  868.           {% v% W4 m3 Q5 [0 ?8 Q6 j) ~
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);6 w# e- O! _- f* @
  870.             unzClose(uf);
    0 _* E6 R9 R( q% w9 r; |0 O
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");
    , q; [9 y5 ^) f2 i7 d
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");4 x( S- g& j- P" j1 F
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");
    + V2 p' _2 F6 U% C5 t8 V0 z
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    5 Y# F7 Q& d, M! K6 h3 f
  875.           }( u& @% Q  p1 N* l; v& U( A
  876.           DeleteFile("Wsa.zip" );, T4 d' _7 ^0 s$ z# w3 }
  877.         }% J- B. ^0 e( [6 ?4 W- [* _

  878. $ f, c! L/ _" W
  879.         if(CheckLocalVersion())
    4 u. l6 |( O2 W0 ?
  880.         {
    ) U3 d0 L/ t+ z  `& P8 L
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");
    % E% `! s& n7 P) V7 ]
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    % T4 @; X5 J; {( x8 w# I! L
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");0 U; T. Y& x$ z
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    # d6 |- \' C( r8 i( q, g2 t
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);
    2 ^. D! ?/ \6 u+ [; t
  886.           dwStartUpSteps=99;, t3 `8 f) v) U1 G. W& G
  887.         }1 ^3 |$ R" @; q9 Z/ _) S- }
  888.         else
    4 f9 G# S9 K- Z3 x; Y
  889.         {8 J0 C# L3 t" h9 ~+ S! d; X
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    & l8 G7 X# _8 N2 w2 w, m* V) H/ U
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");& ?$ q5 ?. ?& ~7 |) `
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");' }9 Z7 Z5 r9 {9 N! ?" U1 ]

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

2 P( j- i* d5 P+ ?  j0 y  @3 L$ J- ?3 _' G

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

yun5520245 發表於 2018-1-29 21:25:42 來自手機 | 顯示全部樓層
东西不错,只是现在研究的人少了。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-5-24 13:37

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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