找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式
  I- I& Y, W# A/ F% m+ j1 c
  1. / RevApp.cpp : Defines the class behaviors for the application.
    % N- R7 |3 i1 x/ V
  2. //
    / k" g/ x5 F8 |+ [

  3. ' g: [1 v, F5 p3 H  o# G! E$ M: g
  4. #include "stdafx.h"
    , m3 B; }: _9 i+ Z6 U; r$ k
  5. 8 E9 |, _6 X0 X" |3 F) j5 D
  6. //#define UNICODE0 T9 _# K( [; p% z; K. b# p1 n
  7. //#include <gdiplus.h>
    ! t9 ]4 Q  q4 F. d: K
  8. //using namespace Gdiplus;
    ! i+ ^9 j) l' u

  9. 4 Q2 F5 h1 Z8 {8 ], O8 L! d
  10. #include "RevApp.h"
    # e: z6 e/ ?# t  y. [+ j
  11. #include "RevAppDlg.h"
    6 M$ i: ~1 x, J0 \; S* @/ T: I
  12. 8 i! i' L! |& n0 }
  13. #pragma warning(disable:4786)
    6 i- ^  e0 p" F% y) C
  14. #include <map>
    . x2 ^8 d) R- l8 B; h$ O
  15. #include <list>' g* q; l0 I, c- X
  16. #include <direct.h>2 W3 D0 E9 B1 y1 Q$ g
  17. " D# {1 k8 o7 y8 k8 e
  18. #ifdef _DEBUG
    3 z7 Q5 q( Y0 _5 e+ D/ u# Q
  19. #define new DEBUG_NEW: T, f$ t  X2 \3 k
  20. #undef THIS_FILE
    5 T. J0 {( R4 L* }% o( T
  21. static char THIS_FILE[] = __FILE__;/ E" `- ^! x! Q: w8 O3 d5 U- t8 j* F
  22. #endif) \3 X+ y: b8 d8 c- t* e7 E
  23. #include "SkinResDef.h"$ o- H6 [- R/ x& W, X+ k
  24. #include "ChangeBG.h"# N5 d( P2 q' C6 B9 {( F! Z
  25. #include "AFXINET.H"
    * ]. z2 C7 A2 v9 H

  26. ! T+ c3 F' s( i# J+ t! s1 j
  27. #define TRADITIONAL_CHINESE 0+ H: f% p3 C) b% z8 J
  28. #define SIMPLIFY_CHINESE 1: G; T/ K2 \) i0 _4 w8 n
  29. #define ENGLISH 20 o( ]# [3 E6 [( a0 i1 N; Y1 F6 {
  30. int m_iLanguage = ENGLISH;0 @/ y+ R; i  L, I
  31. /////////////////////////////////////////////////////////////////////////////, v* c0 l+ v8 I( r) C! ?$ w, i6 t
  32. // CRevAppApp
    $ P7 f4 r$ Z8 C3 S7 z
  33. - N" }+ J* h9 }  ?4 Z* o+ A# U
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)6 J1 a0 U; c4 }) }
  35.         //{{AFX_MSG_MAP(CRevAppApp): E. X& w) b! s, u  d
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    / e% X0 F/ V2 L" D1 z
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    % @  Y: s6 S/ H$ l9 J
  38.         //}}AFX_MSG. j" k& h2 w& O5 _# Z5 X; |
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    / X8 A4 q# {* k8 w! G4 \! O4 x
  40. END_MESSAGE_MAP()8 `1 o" F5 Q$ F
  41. 8 Z, i5 F# e* ]6 q( B  M4 X
  42. /////////////////////////////////////////////////////////////////////////////9 J' [8 [8 J2 x; I1 ?
  43. // CRevAppApp construction
    ; [- c5 ]) @- }/ W0 |: b2 p
  44. ' K1 @  |3 Y6 M% x! B5 z
  45. CRevAppApp::CRevAppApp()" C$ _  b. {3 y8 I8 f! ]9 P" _4 B
  46. {' J5 e! e9 w* Q" w% G
  47.         // TODO: add construction code here,% J$ O: x1 D3 t% O# m2 x
  48.         // Place all significant initialization in InitInstance, x/ N6 _" A" y, M! J
  49.   bDisplayIsBig5=FALSE;
    - B5 d8 Y5 o* M$ r4 F
  50.   bRestartUpdater=FALSE;0 ]; o/ d0 O- H8 x. Q
  51.   bFinishUpdated=FALSE;
    6 Y+ n, w3 `" y& ?
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    7 v! l! ^9 ^; y7 C: G% V
  53.   InitChangeDataBig52GBKS();
    ( E9 K  x6 y1 ^7 c+ i& c
  54.   InitChangeDataGBKS2Big5();
    2 }8 [2 w# M8 B) z2 }. D. k9 Q
  55.         //' @5 g! o/ H) A, ]4 p1 @) c
  56.         bClickRunExe = FALSE;2 C+ Q1 `8 M; `: X
  57.         //0 C; B  \( m+ }  q, U7 b9 |; h2 X
  58. }6 B$ }& R# \' c8 [4 i3 |5 E
  59. - F+ v; F. B3 n9 F9 ~2 ~# N
  60. CRevAppApp::~CRevAppApp()  m6 p$ g; u# h+ b& O$ S3 o% P
  61. {2 J* n3 w* [- c! ?0 \) w
  62.         // TODO: add construction code here,8 n" c0 i7 \: ?9 W
  63.         // Place all significant initialization in InitInstance4 ~# e* W+ g! \" V
  64.   EndChangeData();& U$ ^) ^+ b* D9 i/ ^3 q
  65. }
    % R( c9 ?4 i* V0 Q! y. W, v

  66. * a* F0 Z+ @' a: }
  67. /////////////////////////////////////////////////////////////////////////////
    ( y* F8 k/ j0 A" G- W2 a
  68. // The one and only CRevAppApp object* U6 C% a' T7 M) ?0 O1 B

  69. ! G) j; ?8 v+ ?6 d1 n; K% ?' G/ q/ p
  70. CRevAppApp theApp;
    2 w# a# R! u& j* f  @( Z- H) H
  71. 4 _  _* \( \) ]' s0 ]
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    ' a3 G& ^4 |" @. }, y
  73. {! C3 \3 Y/ y/ I1 G. J
  74.   int iEOF=0;/ G4 a* a' m' F' E) K5 t  Z
  75.   char szTempName[MAX_PATH];
    / g5 e  p. Q+ l; X1 T) \7 i0 H
  76.   *szFileName=0;# h, o. ^. b7 d: j& w
  77.   iEOF=fscanf(fp,"%s",szTempName);
    ( a# o6 |. H% Q9 ~  X- L
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')
    # A+ Y1 Y5 ~8 B4 `# i+ j! L; O
  79.   {: d% P2 H8 p* ~. D$ @7 u0 Z
  80.     strcpy(szFileName,&szTempName[1]);* D9 z& \8 i2 N/ P3 G+ v
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    3 L/ o5 f1 `4 v4 I1 h' ~" [
  82.     {* C6 d; o$ {3 q. R  h9 S6 X
  83.       iEOF=fscanf(fp,"%s",szTempName);4 M! C; c0 U6 C/ F* }
  84.       strcat(szFileName," ");4 e2 \/ K, Q8 T
  85.       strcat(szFileName,szTempName);, v- y4 s6 R- U: V% W/ Q" {" ]
  86.     }
    4 B, Q! p* o* j  W2 o# Q2 E( A
  87.     if(strlen(szFileName)>=1)# _5 W, G  x# t& W) _6 p( b6 u4 c& D
  88.     {
    : K3 [5 a: D$ u
  89.       szFileName[strlen(szFileName)-1]=0;: j% g6 O/ f6 k0 n0 Z1 A6 _! h
  90.     }
    . `3 F1 n* P% |! O
  91.   }9 X- U0 F, {0 J& h3 f3 w: Z
  92.   return szFileName;
    ) F1 S& L2 E( u' S! X
  93. }
    1 H. B4 [: m0 D8 L
  94. $ u! ^6 a6 v% }. a* I: L, g9 I
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    + X+ q5 c1 C+ t- t/ q8 B* V; d
  96. {- h+ B: c6 z# I8 v
  97.   FILE *fp;. h" T8 t' Y; Q) r/ ^, }$ l8 I  Q
  98.   char *key=NULL;) v; t% `7 V  Q( l( H
  99.   char version[MAX_PATH];
    ; @, s  d/ j' M4 R
  100.   LPUPDATEFILE file,olds;" i) ]/ k- i2 f$ R  L% J, }1 P
  101.   std::map<CString,LPUPDATEFILE>::iterator p;" b; b& B+ _# P5 d" G) c) H% i

  102.   C. v9 y; l" h& p( g
  103.   UpdateList.clear();+ b; r( O9 X0 K# i
  104.   UpdateFile.clear();* S6 ?7 I9 r( `" s; b
  105.   if(GetFileAttributes(filename)==-1) return false;# `! `5 W5 e: V" F
  106.   if(!(fp=fopen(filename,"r"))) return false;
    / d1 c7 y4 K- m- {
  107.   fscanf(fp,"%s",version);  [* o! s" [8 G, e
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    % I. K1 z7 u+ E& |
  109.   while(fscanf(fp,"%s",version)!=EOF)! p9 W7 R1 }, B
  110.   {: H+ Q% h) o, r2 E! B4 r- E9 s
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));
    ( R1 c4 W- R$ i4 Y
  112.     fscanf(fp,"%s",file->path);
    # w  {( a$ j3 r
  113.     ReadFileNames(fp,file->file);
    # K6 G5 g: F8 g) U
  114.     strcpy(file->full,".");# E3 ]/ ^! C$ p, _
  115.     strcat(file->full,file->path);( O' ?' |* U) N3 U) p9 p3 K  z5 W
  116.     strcat(file->full,file->file);
    * y" t0 q: ^- N& H  Y9 Q+ x; Z: s, Y
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 b: I9 ?. F7 W
  118.     {
    , N7 t4 r7 b9 H# |
  119.       file->vers=(float)atof(version);7 H+ B1 W; O, ?
  120.       UpdateList.push_back(file->full);
    $ }, s! H; w' q7 L, G
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));! }% q; n2 _3 c/ A. c. X5 h) z( `
  122.     }
    , ]# z+ w9 C1 Z3 c( g
  123.     else. q) N: M* {$ X) ?
  124.     {/ W/ G. K3 b0 U+ }, T& F+ O* r9 m7 J! v
  125.       olds=(*p).second;5 d; Z3 |& b/ Q' h9 Z) K: L
  126.       if(olds->vers<(float)atof(version))4 c  C2 E$ @. y2 y% ^  X
  127.       {0 F& f9 d& x! W8 t8 x! L' d
  128.         olds->vers=(float)atof(version);
    # L" N" ]/ n  c* B+ e
  129.       }* \/ t* o" ^- k1 \. L1 m3 x( n
  130.       free(file);9 ^  U& ]; X( S! H! f; H: }
  131.     }2 e4 s4 f2 T) x, e* g- a: x6 x
  132.   }
    & U( F- H* o) L4 c/ G
  133.   fclose(fp);* W8 l) Q# E- F; e/ b5 Q, s- t( \
  134.   return true;6 r( x& m. \2 h
  135. }8 M( [5 L& y) n5 @; Y/ y$ J
  136. 9 m9 E- y, U* Z3 {
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)8 x2 h; J* d) F9 ?2 Y; {( a5 c+ S. O
  138. {
    % y2 ~5 l8 i5 _% D+ v
  139.   TCHAR  szFull[MAX_PATH];- y! W- C6 S  P
  140.   TCHAR *token,*inter;) u% O; O$ M: ?) U
  141.   *szPath=0;
      k6 q, z. X) x/ k1 R7 w8 e9 c
  142.   strcpy(szFull,szFullPath);
    . Z  `# ]$ l$ o6 ?
  143.   token=strtok(szFull,"\\/");: a" w% x" I+ _  U; F
  144.   inter=token;
    + n7 }5 v  j! [
  145.   while(token=strtok(NULL,"\\/"))) y  W- W* V9 _$ o
  146.   {# o1 |! N) Y3 q) n5 f
  147.     strcat(szPath,inter);; ~3 k0 ~7 `4 P* \
  148.     strcat(szPath,"\");4 f; {0 R  g* A+ a
  149.     inter=token;
    ; a+ F. Q) w. I4 R( ~3 k
  150.   }9 ~. ?) R: _, W( E: p+ N; o" n/ F7 L" q
  151.   return strlen(szPath);
    2 N* f& U  I& E
  152. }
    : n0 D" i; L2 Y" z+ o% y5 Z

  153. " g5 M$ M% |, O! Z0 W
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)  ~3 Y% W# o; o0 g5 `% T$ q2 O; L0 ?
  155. {" f6 E! v4 D) P
  156.   DWORD attrib=GetFileAttributes(Target);* s$ y) \3 _* N8 d
  157.   if(attrib!=-1)
    4 }$ b/ b% p) D2 b" ]7 F$ R. y# x
  158.   {
    $ c$ c' q7 Q$ |
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))
    2 B2 g* r7 f! \/ ]& z5 l
  160.     {
    1 G5 V8 k0 p2 x8 ]- o
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);
    2 k7 Q. C; T5 o( e( D" c% y
  162.       SetFileAttributes(Target,attrib);
    ( x4 p: Z0 R1 D2 V. K/ z
  163.     }
    . K7 O4 h/ C0 K6 H  f& D4 U
  164.   }
    + ~. ]% n- a- v4 y" F6 N
  165.   CopyFile(Source,Target,Erase);
    ' u% o! z, {9 U% j& [; ^
  166. }
    ! c7 E. }3 R2 W5 K) A; B, r
  167. - j3 o. Z  L5 C5 H1 g; {# T: ?
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...). s8 H; H! k3 W8 G/ x; g
  169. {
    . w0 p9 N9 L" A1 ^+ O" \) n" k
  170.      FILE *fp;
    0 e/ K9 c# G- I. l, d, R
  171.      char  szBuffer[8192];, e7 \8 b0 ?' f2 c& ?
  172.   va_list  argptr;
    ) |7 u1 {4 O* G" O5 E2 w# D9 w$ x

  173. 0 |' S$ w' c3 H5 S  b" G
  174.         va_start(argptr,message);
    * ^6 g3 Z) v# Y. a$ k6 [( L; W
  175.         vsprintf(szBuffer,message,argptr);+ b) c) q" p) \
  176.         va_end(argptr);
    3 f, ?# Q- X8 x, \8 F5 ]5 Z
  177.   fp=fopen(FileName,"a");- Z/ Y; E  A, l3 }. W
  178.   if(fp)
    0 T2 e% }2 a. t6 R
  179.   {
    : V- W' `! K: q
  180.     fprintf(fp,szBuffer);
    0 d2 Y* C$ i6 ]5 S7 K! e& y* {8 I
  181.     fclose(fp);4 v  ]2 n$ u% C7 I5 H9 d& P
  182.           _flushall();
    6 r1 `3 l- z  k$ e
  183.   }
    ; J" D' Z+ f" |: W
  184. }8 e5 W8 S& E& s. W8 q* _. E. A- A
  185. * T( W2 g1 e* Z" T
  186. BOOL CRevAppApp::Fclearf(char *FileName)6 [  n* ?$ _# ^' |! x9 g+ m5 _9 h
  187. {% e8 J: W( T: ^7 _" e! C$ V
  188.      FILE *fp;
    # ~) u( m  _# w0 x5 m1 ]
  189.     DWORD  attrib;* ^6 e* L/ w& c5 `" O4 ?0 q" v
  190.   attrib=GetFileAttributes(FileName);6 @  K6 y/ j; c
  191.   if(attrib!=-1), L) [9 b0 q: `, b, a8 W- b. }- g
  192.   {
    ( @4 @2 Q6 l, I8 g7 x
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
    ; P. \3 f+ [' X9 d
  194.     if(!SetFileAttributes(FileName,attrib)). B: a/ N1 U  F! _
  195.     {; |& B& _2 W& C- J7 r' h
  196.       return FALSE;! ]) x/ i- T6 _* J
  197.     }
      z, P) F, P. U5 n3 C
  198.   }9 c5 [; {- ?1 P  D3 I1 V4 k, `6 I5 b
  199.   fp=fopen(FileName,"wb");+ _7 R* s) m5 @3 c
  200.   if(fp)% Q  ]7 o% G0 w* Z
  201.   {
    1 \( i7 @0 G2 Q7 i' t3 K2 B6 o7 Z
  202.     fclose(fp);
    . w. H4 u0 l1 R5 E2 o& _' U$ s) h6 F0 w
  203.   }
    7 X  a& B% g# W0 s% ]
  204.   return TRUE;; H/ g( d: T2 g; Y8 T
  205. }
    7 `. {0 x' b- ~& i$ `) O
  206. , G! n, Z3 Z9 `1 G8 o
  207. BOOL CRevAppApp::UpdateLocalVersion(void)3 e8 ^; t4 _1 P. a, h1 j/ t) ~
  208. {
    8 {7 n' J* r/ a/ B
  209.   char filename[MAX_PATH];8 O( \" V# y) h6 |1 |# Z
  210.   LPUPDATEFILE file,olds;* T* C0 x- C/ F0 g9 O; J  i
  211.   std::map<int,CString>::iterator i;1 O& ?* f3 k/ `8 h) E  z: Y' }
  212.   std::map<CString,LPUPDATEFILE>::iterator p;! P6 {3 ^% t0 J3 X
  213.   std::list<CString>::iterator l;3 L, P* X. F  V+ R8 e

  214. 3 E% R  u! P' g5 \+ ?
  215.   if(bFirstUpdate)+ S# ]; }7 V/ j$ {% E
  216.   {4 [+ {2 o, U; l" ]% P
  217.     dwCurrFile=0;; N4 Q: O6 l1 y  q
  218.     bFirstUpdate=FALSE;
    2 S! M2 h4 |- F
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())
    + ^0 Z, m7 _# h
  220.     {+ }* I5 \0 q  l3 l/ Q$ m
  221.       dwTotalFiles=UpdateLocal.size();
    & z) ], S9 k, d( {: i# F5 h+ T1 r
  222.       dwDownLoaded=0;
    1 v- I3 b# Z0 M, d" ]$ F1 C; _
  223.       bSilentStep=FALSE;# @, u; T% a7 t9 T- d& l/ v
  224.       bCompressed=TRUE;
    3 {. e8 p! c! K7 r3 v
  225.       strExtLocal.Empty();
    & F7 c+ m0 M9 ~! h; L) a# j$ k
  226.       strFullName=(*i).second;
    2 V& q/ W/ n! N
  227.       dwProgramState=AP_CONNECT;
    + k5 ^  |- c6 T$ W& v' e
  228.       return TRUE;5 A6 v! L* Y' f
  229.     }
    1 U: _% `  r2 t/ k
  230.   }
    , v5 t! f+ d7 j% `
  231.   else if(bRestartUpdater==FALSE)* N: p  S  X% q; |4 z0 n: p
  232.   {! I% V% z9 |* R4 T' ]% u# |
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())7 H& S) m% W" i; J- B' i! h5 o
  234.     {- j! {: V6 m2 b6 P% g3 U, B
  235.       file=(*p).second;
    ( x: I: {  W2 }/ R
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())/ v/ B+ S% s: i: M5 p, X, }
  237.       {& W) z( L1 X  _* e7 a2 E
  238.         olds=(*p).second;
    8 j  C" O# x+ ^' Q5 u% z
  239.         olds->vers=file->vers;
    3 s# I) {' y/ s# K4 }. C' G
  240.       }' j) H# l- x5 a' A* T! J
  241.       else9 d8 |8 h6 Y: C. m0 \
  242.       {
    4 `  h: U; ?, Y% [
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));$ ^3 l  ]- T; B. j: S% r6 g
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    . Z/ h; X/ l- O& ]* c
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));
    4 }- d4 g" n; [: c4 t/ D
  246.       }0 B& Z$ s  ]) {* K* }
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    + P# P3 `7 E' \% `
  248.       sprintf(filename,"(%s)",file->file);
    ; d& t& W% L2 ~. C7 t
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    # P7 r, k9 O5 ^6 N
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }
    * R3 @! ~$ N" {4 \
  251.     }/ y+ v& i! ^% `1 m9 O: j
  252.     dwCurrFile++;  h0 H5 w1 W+ X* K) Q5 m& B
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())8 ~. v: c: L' u  n5 k
  254.     {
    9 `4 l+ q2 f8 L- Z7 w1 L
  255.       bSilentStep=FALSE;
    ; l4 d2 s0 Q7 |* D
  256.       bCompressed=TRUE;
      h: o5 @& z7 L2 Y
  257.       strExtLocal.Empty();& ?, P! x" G' A! k5 r  `  X
  258.       strFullName=(*i).second;! _7 ?7 a* v8 y3 [) [( w
  259.       dwProgramState=AP_CONNECT;4 ?4 j' Y+ j* q/ d. w! \
  260.       return TRUE;
    4 G9 W# ~$ s7 L, E) Y
  261.     }- `0 }: q9 W# C! B% Y- e. \
  262.     if(!bRestartUpdater)
    - B5 m  d! b5 f' w( @1 D
  263.     {
    2 L* q+ z8 A4 _- R6 G& w
  264.       int iCurrSize,iFileSize;* y& }" m. k0 L2 N* Z
  265.       iCurrSize=0;$ B( |# ?) v  l: X, W
  266.       iFileSize=UpdateList2.size();
    8 ?# U7 @/ r2 n3 u
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");
    - Q( j2 q, S* N5 Y
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");
    / J* r( r3 W& ^9 _% d2 E; e" C5 \
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");
    5 J) t" s' `* Z1 ]- \3 ]
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 J5 I! G) i) a) N6 Y8 d
  271.       Fclearf(".\\update.dat");. G! P% N* j% o- T6 f
  272.       Fprintf(".\\update.dat","Bloodyf\n");
    % p! F- b+ A" L% [
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! l5 i5 C& K( d. q$ L( [) V
  274.       {
    ( f* L) H& @0 Z9 i! z# C7 ?# E
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())9 P# m; ~4 E6 K7 H8 Q  x& X
  276.         {1 \, w: ]# k) A- x$ N/ `
  277.           file=(*p).second;/ n) r8 S1 I" |9 Y( X
  278.           sprintf(filename,"(%s)",file->file);
    2 `, d/ w6 R3 [
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);! B. Y& y  j6 d& ^; Y7 ?
  280.           iCurrSize++;
    - v; H9 Y7 s, S
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    . p/ b  h/ `. L& B$ K
  282.         }% r" l- Y/ `8 l2 m
  283.       }5 \7 u4 }! ~; c5 _4 v3 h1 @
  284.       unlink(".\\update.txt");
    ! V; C% V, u$ d+ _2 n9 I! p
  285.       unlink(".\\update.tmp");
    ( C/ [- @* p9 @2 M# O5 k/ L
  286.       Fclearf(".\\checkversion.dat");4 A  s3 {6 e7 ^
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);1 Z( p6 O/ X, R+ A
  288.       if(UpdateLocal.size())6 ]$ r: b0 c1 |' \8 Y+ D
  289.       {
    4 M4 x. \' G- h% h- n' z
  290.         UpdateLocal.clear();
    7 U# R& N& |7 p9 C9 z
  291.       }6 U5 T0 }% l$ Q: l, V, C* `
  292.       if(UpdateFile3.size())( @+ l9 i6 V) O1 I1 a1 D: H
  293.       {# b6 m1 j' f% o5 N! \& b: w
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    % X! l+ S; O" l7 {. }
  295.         {
    * t; Z) u; V" v9 o; a' c6 ?/ a
  296.           file=(*p).second;
    2 X5 y5 `: `* j$ Y5 o" W
  297.           free(file);& t/ C- A  v! X" _
  298.         }; M6 K3 Y/ C& D, A# q0 _, W4 m
  299.         UpdateFile3.clear();
    9 ]4 S' N3 I" L! E: ^& Z
  300.         UpdateList3.clear();: e  \& Z1 Z' G- F0 b) G; ?
  301.       }, _, F/ d$ a! ]6 b; g- w5 @' B
  302.       if(UpdateFile2.size())
    / j# L( e! Z4 O" F4 i: n
  303.       {
    % Y. F! B7 k) n
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    0 R0 ~/ s. C, i0 {# @2 D5 j
  305.         {! P  e7 B0 p- M0 E
  306.           file=(*p).second;
    6 i* U9 h5 `) ~1 a/ O% B: d
  307.           free(file);! b7 \1 ~& B9 s  a$ M
  308.         }
    ! o9 n, _5 f# K3 M8 Y, S. C' K4 \8 q
  309.         UpdateFile2.clear();9 V% \8 L1 [' u+ Z0 Q2 f5 l7 \+ v
  310.         UpdateList2.clear();
    * }# f' c% K8 M1 w
  311.       }
    / f% w0 y# i8 L; v2 g( j
  312.       if(UpdateFile1.size())
    8 t' D! r& v3 U' h5 D
  313.       {+ b2 E# F0 F8 o& a) ~
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    ( ], r2 m2 w4 g0 m
  315.         {5 a2 W- G7 I+ k+ C
  316.           file=(*p).second;* @0 M, `" g7 q
  317.           free(file);
    & F6 U: m6 A' ]2 H4 K- `% n4 f
  318.         }' }# b: A3 T/ K0 e/ @6 ~7 t* L9 y0 H
  319.         UpdateFile1.clear();3 h( c' e: h9 A4 R
  320.         UpdateList1.clear();
    * b" a8 \; U' T7 H
  321.       }
    0 g% D7 R* u2 R8 a
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));6 r* l  a9 \$ _% ~) k+ \" i3 l9 t; T
  323.     }. t, L: X9 D. I- N% j
  324.   }
    " Z& [7 Y4 P' w
  325.   return FALSE;! W9 I$ Q2 a$ O: U
  326. }
    7 {$ |2 ~3 l' x) i* L& _1 G

  327. " o8 j* B0 j4 x- F; y
  328. void CRevAppApp::ClearAll(void): ^3 v7 y) v6 R  m! m7 @
  329. {
      ]5 M4 V) R$ l
  330.   LPUPDATEFILE file;
    ) ~- T$ f6 y' o
  331.   std::map<CString,LPUPDATEFILE>::iterator p;
      Q0 g+ E6 i( s4 l5 R: V) w) [
  332. # V7 K) r2 @9 p2 v9 K  `3 f
  333.   if(UpdateLocal.size()), I4 [8 o. t. ]. c6 S
  334.   {
    ; {% j& d& O5 Y  [4 `
  335.     UpdateLocal.clear();
    8 v& @" Y( g% v* G
  336.   }
    $ H2 d. i* X7 o# }5 W$ x
  337.   if(UpdateFile3.size())
    - {) e. i3 T8 H; D, @' {4 I. J
  338.   {
    , w% n2 h$ P; X; g7 H
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)) V+ a# U5 A9 c2 d! u3 X
  340.     {" p. J( m% M5 `7 Z% N! t
  341.       file=(*p).second;# N+ H5 o  g. }; a4 `6 c! N8 x
  342.       free(file);
    + |  J8 M( N3 Y9 u/ G3 _* F2 @
  343.     }, \2 s: S0 X6 Y4 ~+ K2 ?
  344.     UpdateFile3.clear();6 ?3 |7 [( W5 E( ^2 d. r
  345.     UpdateList3.clear();  i1 R3 I* i7 {2 b
  346.   }
    % a  L9 ]( t+ S3 X! O2 v5 x
  347.   if(UpdateFile2.size())2 m! I6 `5 H1 Q
  348.   {
    8 h3 q  V) R- e5 Y2 |4 ?" t) U! a
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)$ r' P3 J" |% f1 W: O1 H. F0 f. n5 a1 f. d
  350.     {
    6 E% k* Y; O1 V2 k- p: R; h
  351.       file=(*p).second;/ j% z! g( d7 I# q: K; S) _
  352.       free(file);
    8 h+ q- y, Z4 R+ T5 B$ L+ X3 i+ p6 N
  353.     }% |; X2 e: z) Z& G9 M- E( k
  354.     UpdateFile2.clear();5 c- L5 V& c/ \; X8 u* F/ z
  355.     UpdateList2.clear();
    ; u- h' J' F* F0 P* {8 U, E+ X
  356.   }* ?; N0 Z+ G# E9 T5 J
  357.   if(UpdateFile1.size())0 N6 D" n4 l6 z1 h
  358.   {" {! r4 D; p8 Q4 Y1 I7 _
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)9 p" A9 x( `7 L7 U# ~& i
  360.     {
    $ c0 M; g: Q: M, K  O0 [" e! i
  361.       file=(*p).second;
    , C& c' j9 w* w" K1 H
  362.       free(file);
    ( L0 r2 h6 ?. ]0 x( }! s, v# m0 f
  363.     }
    ' q, x, V" k( U- Q& E% ~
  364.     UpdateFile1.clear();
    4 ^) L& [/ i, T5 k" m
  365.     UpdateList1.clear();* Y5 s  t2 @( ^
  366.   }
    ! M2 I( F' B" \5 u, `
  367. }  
    / M( Z4 l. r# L8 B
  368.   9 ~9 e2 {4 d) P/ I. O  H
  369. BOOL CRevAppApp::CheckLocalVersion(void)( n- R/ }9 d; O) W: P* h
  370. {: R; w) g' O& h! X
  371.   int c;% ^2 Q. V8 d7 O$ C. m* R
  372.   LPUPDATEFILE file1,file2;
    ! _( j$ Q9 L8 D7 s; K! w8 u5 T" K
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;2 C6 T. d9 B! l( c9 O
  374.   std::list<CString>::iterator l;- @) b# b0 B  y. n9 C

  375. : l$ x) Z% f2 n5 F& R
  376.   UpdateLocal.clear();+ q- Z7 H% j# J) `/ G7 _9 \/ J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);+ G! D8 x- Y0 p- P
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);& }+ \2 [! H0 b! L5 R0 J* M6 \* ^
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);+ j% S6 B% f) h: M* O. f
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);- v; L# X0 N$ {, T2 N9 E8 }/ V( ?
  381.   if(UpdateFile3.size())) N, s+ {  C0 f  J
  382.   {# u+ k# U; F$ v) g" j
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)- E+ x% ^, `; o# i4 ^8 o" y$ c
  384.     {; R4 O' Z3 o2 C/ _# U. G( L- @
  385.       file2=(LPUPDATEFILE)(*i).second;
    / R% r1 n! n2 s" @& L
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())9 T# M5 S$ }4 q
  387.       {
    " j. O1 H! r" s, A& @9 f" m5 {3 l" Y
  388.         file1=(LPUPDATEFILE)(*p).second;
    . w) `; o' j( O6 r
  389.         file1->vers=file2->vers;
    ) B" t! v5 y0 k! x! L2 Q) N
  390.       }7 ?3 D( b8 n* `* r6 a
  391.       else" c" V2 N& I% N( ?( p$ f
  392.       {
    - G4 L5 L4 u! L4 ~
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));* a- _. E" d% i" C# C5 H# }* A
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));# D! w: j" d7 Z  `) o2 H- Y9 Z2 m
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));& ^1 Y$ I, ?5 @
  396.       }, b3 q9 B: I+ _1 P( P. U
  397.     }( P  _( N4 @9 v+ R
  398.   }
    : y0 z  \( `  n1 \0 |' e
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    0 @1 |' F( k- ^* w
  400.   {
    - @, d4 p3 _* \. ~1 D0 O- N
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end())
    5 h+ F" ^4 A% E0 Y5 t
  402.     {$ v& o& o' a' u9 j
  403.       file2=(LPUPDATEFILE)(*i).second;
    + \% _' h8 a4 _+ K' P
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    6 @9 j2 `+ v5 s8 l
  405.       {
      J0 h" Q8 [4 ~5 g2 K3 C4 n8 a0 C0 _  [
  406.         file1=(LPUPDATEFILE)(*p).second;
    : S; s5 O- m- y4 i( A% h
  407.         if(file1->vers!=file2->vers)
    2 t! E  i( _, U9 j9 {( x0 a( _( B
  408.         {
    " x; ]( Y) }- ]9 E! \1 R7 x1 B
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));7 \" D5 a" q8 t5 ^+ M' {
  410.           c++;" S9 I! u  \$ f2 P8 H3 z# b
  411.         }
    ; P; b( H, o' w' ?) w
  412.       }( g2 P% n6 h) ?3 K7 i
  413.       else
    ( k: P  \& S$ d5 T6 N- f7 z2 d
  414.       {# C6 b8 {- S0 c
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));9 i; B. |3 Q! I+ A
  416.         c++;: U& e3 o3 f4 X. I9 @, l
  417.       }4 d, }- j$ w; [
  418.     }4 q, C) r" E$ v8 w# Q/ q( R0 i3 ~
  419.   }
    % d! ]: X' U7 Z+ h/ B2 r' H" g
  420.   unlink(".\\DownLoad\\update.txt");4 u' ?+ s5 o  q3 e8 y& ^
  421.   if(UpdateLocal.size()) return TRUE;
    ' r0 n0 R" X5 l3 Q4 _
  422.   else                   return FALSE;
    9 e: p* J! }: y& r
  423. }) i, D% f: u+ _* J

  424. 0 L7 K) u4 }& B8 F9 b( K, u  P
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    0 R$ E& G3 ?- x+ O. s9 `
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    . U! m1 Y, B. n; g9 c
  427. 1 A% s2 {0 T" [

  428. 8 n$ }* e# z+ ^9 ^  ]0 I

  429. 2 h9 F' C! C& B
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile), D( X7 H. S  }, e* j! _- V5 q4 v: ^
  431. {
    7 k9 \4 P: b, t; }/ |
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    ; B3 R+ k3 }0 y  h4 A
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    5 S9 N3 S8 _, X& O
  434.   {
    . i* Z8 R. b/ {5 @
  435.     char szLanguage[50];
    : P2 L- }; Q" [
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");0 P$ }# E7 r2 L! q+ w
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    5 P( S4 M9 U4 o2 v: y
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;. x3 P/ i1 l% k' _, T% j: M
  439.     else                                   m_iLanguage=ENGLISH;9 x  K2 i5 Z; r  }. H, A5 V
  440.     char szRegister[100];
    - H; q) k  k4 w- k8 Z
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");: I( h3 x7 S1 s1 p) z* [4 U
  442.     strRegsName=szRegister;: {: i! N! a, h# h) m9 o4 [4 g. l
  443.     char szPatchURL[100];7 X! R- n7 d& V* ]3 D8 s
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    2 K  e9 c0 h* C4 f2 J1 Y
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    1 E% J0 P  R) j0 D
  446.   }: j# t$ V6 Y& D; }9 v
  447.   else4 w& o/ {$ L& }8 J1 V( f
  448.   {
    4 T; R( w, O/ G1 H
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 r- G$ T, ]4 b: f5 p  F. y
  450.     strRegsName=DEFAULT_REG_URL;! q  b4 q; i. @: ]% S
  451.   }
    " c  }3 p# x8 k) U/ L8 H
  452.   if(GetFileAttributes("hosts.ini")!=-1)
    & G5 S& r  |; ^; L
  453.   {
    # m7 u' m6 M6 N% V( \3 l8 }( u
  454.     char szIP[50];0 _4 e1 e$ I0 j/ t( J/ ^$ d% [
  455.     char szDIR[300];
    : z0 x) O0 j& a' _
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))
    ( X9 A3 q, a' {
  457.     {
    4 q& y- y& c3 G, q8 k+ P9 h: W
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");
    ' `8 B& m% b: a5 n
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");
    $ Z2 d- p# R9 Z) l, z4 u4 C( G9 ^
  460.       strHostName=szIP;
    / m+ F0 q: L1 q+ Q
  461.       strHostPath.Format("/%s",szDIR);
    * d0 \5 Y0 E* ^+ q
  462.     }
    ; H0 _5 q9 [1 p$ ?6 i
  463.     else
    8 |, D4 [$ {: d1 \, T( s3 z
  464.     {
    3 K3 g: Z0 Z' h1 y+ D( b7 K
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    - x% \; ?( i) M) B0 u; d
  466.       {" p$ B: p8 D% R) q3 ?7 E
  467.         char szLanguage[50];
    2 h# H. F- }  t
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");3 L  {: U# a3 R% Q- S
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    * |( N$ b& c7 P6 S$ v1 a0 g' g% ?
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;
    5 J- U  x; X. A" k+ q+ \' R
  471.         else                                   m_iLanguage=ENGLISH;6 c: l) T/ ?5 U. I+ e7 J
  472.         char szRegister[100];
    $ ]# T$ {( B$ L& k
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    ( `8 G: c5 z, w! d5 q
  474.         strRegsName=szRegister;
    4 T) ~" I7 o8 y8 [
  475.         char szPatchURL[100];
    4 T# v: S0 _' l+ B( K0 X% H: _
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");
    0 S$ I1 O& N# z. P6 P, \
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);
    " F. K2 ^3 _; a+ N' i
  478.       }+ L+ B" [8 M% t0 ?+ q$ _1 P* Q* X
  479.       else* X0 J  R% ]4 L8 K1 o( y; Y+ ?7 \, e
  480.       {7 l% P( ]+ w! t0 z
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    4 N& \* m; W& J/ T( q& T2 v- X# n
  482.         strRegsName=DEFAULT_REG_URL;0 y: A* {) |5 H6 m+ O. i# u: d
  483.       }$ X  ~$ C1 F: k$ _- [7 L9 l
  484.     }( M5 C  D) s! C( L
  485.   }7 _. s- W1 x: R3 Y& @6 N
  486.   return true;
    1 E4 \. ~' E+ z
  487. }
    ' C+ J$ @* J7 P. B

  488. 9 V2 `9 ?% z. Q7 M& o. X
  489. #include ".\ZLib\unzip.h"! z& C, c& ~0 c1 D" p: j3 ]  C
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    5 W7 Y, B. J4 X" p  P0 l+ k
  491. /////////////////////////////////////////////////////////////////////////////7 l3 W7 L; I4 f* C& Z2 \
  492. // CRevAppApp initialization- `5 j% a7 i$ L5 s3 L
  493. 9 A# l( X' T( Y
  494. BOOL CRevAppApp::InitInstance()
    : G$ ]. ?6 Z( Y3 ^; J+ z
  495. {
    9 X5 ~! `( U! S; b5 M
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];4 j. ^# A/ m) [- s& `+ W9 Q0 k. N

  497. : g3 s+ s; w  F4 J; t- n3 C
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);
    / y' x: i" c0 {* G$ a
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    8 Q6 y$ N1 {4 ?1 @/ X
  500.   {7 c; n# f) F) \6 X
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");
    + `1 ]: d! S. W0 b$ s( z
  502.     GetPathFromFullPath(szPathTarget,szPathSource);
    * g7 }  X( M: A4 g- Z: v, X$ ^
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    6 Y" F% c0 Q# u2 A, I
  504.     {
    : X  G0 Y9 f+ h+ {1 o9 t4 e
  505.       strcpy(szPath,szPathTarget);$ q7 ?) O* D: v, L$ }; k  S
  506.       SetCurrentDirectory(szPath);' I4 q, ?6 J) P1 Z4 Z$ ?6 i
  507.     }5 Z; }# ~4 `$ b7 R; y
  508.   }
    , A" ~! u: V7 C4 E# O  _' P. q$ X
  509. #ifdef _DEBUG
    . ~& N9 |5 v2 ]: L- G
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))8 e) t, ^" m% C# s4 e% M
  511. #else, }! j; O: P7 j, g4 h
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))" p# _& _6 |/ c3 `
  513. #endif1 u( Z  E- }3 w9 {
  514.   {$ M- F! }7 j  A( S6 s! r, b
  515.     char tempFileName[MAX_PATH];
    : s5 q! y* n" Q( P$ {
  516.     strcpy(tempFileName,szPathSource);
    7 J/ j, K2 X' Z
  517.     tempFileName[strlen(szPathSource)-12]=0;. n1 \6 q2 I% I0 H- q& S$ z! R$ B
  518.     strcat(tempFileName,"\\$CSUpdate.exe");
    / o* m0 x, B9 W+ T
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);! _' A) p. i" S5 A! M# P
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);+ H8 C9 x6 S5 c
  521.     return TRUE;, x9 U! D! |% J
  522.   }9 n" {4 h4 k; T9 x: I
  523.   // Nuke 0118: Delete run.exe/ n; @1 L; K1 Z$ |, X( ]9 W
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );$ E5 t: U; E' [/ J
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");# N* d. V  U1 }6 Q  y
  526.   if(!ReadCfgFile("Config.ini"))% M6 m8 h) A2 V
  527.   {6 m0 V# j; P' v: S) H! n
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);: C2 S4 {/ F8 W. \; I8 U
  529.     return TRUE;
    ) v. J+ S3 u* ]" \( l# l! I7 l/ K& |
  530.   }5 q; u* C+ ?1 l% F
  531.   HANDLE mutex;
    3 A2 F7 R, K6 V
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))
    ! [& v* ^/ X8 r) L# C) Z# G  A
  533.   {" X3 c3 [3 o% f8 P: J+ d
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    2 ?" ]# |( t" j
  535.     {/ }7 K( m/ `* X3 K2 A: g' H5 `2 ?
  536.       CloseHandle(mutex);3 ]5 A9 M9 i  u; z0 }; |3 U$ x
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);
    2 s) R3 R; m% B% V" @# H; {6 |- ^
  538.       return TRUE;
    * ?1 W( `& G' k+ e/ n
  539.     }
    2 F9 H5 |* H) m& t- a
  540.   }  ) i8 n8 j  e3 x9 W8 d% I
  541.   CloseHandle(mutex);
      J% ?& H0 t' S5 E

  542. 6 K7 L3 k/ r$ o: J; g! _/ l" I" [
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    7 A9 q6 E3 y4 x+ z# }6 v/ d* _
  544. 1 {- _3 {/ s* a7 H, ?; V) P4 \, U
  545.         AfxEnableControlContainer();
    ; j' @/ L- j  J
  546. 3 w) r7 g7 T& n( ?4 }1 j
  547.   bCanUpdate=FALSE;" V% y4 f7 A9 j3 M
  548.   dwStartUpSteps=1;9 l7 b7 C6 h) c; D2 o* V7 t/ k; x
  549.   dwProgramState=AP_NOTHING;7 |6 U4 X& C0 C
  550. 6 B- ~( Y( c; a0 X; u: p8 _
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);1 U/ m3 K8 H+ L& B3 P

  552. , r4 t+ o4 b/ N7 H. ]
  553.         // Standard initialization
    & q9 P# G: b+ ]) w1 h! E! B
  554.         // If you are not using these features and wish to reduce the size; E4 {: A+ @5 [& V5 V
  555.         //  of your final executable, you should remove from the following
    ( Y2 }9 o& P/ o, U4 [
  556.         //  the specific initialization routines you do not need.- o3 _& A9 M1 H$ V

  557. 5 b) O0 g0 _( F( b
  558. #ifdef _AFXDLL* ]& f5 T* |8 t2 I" N9 J
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    0 s8 G/ h, R2 r% k  k" D. ?5 c: u
  560. #else& @- T" e% v$ I2 K
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically$ \$ y" k0 A+ o1 ?( O2 B% G
  562. #endif5 Y! l% ^% |# V! g$ {0 q
  563. ' U4 O+ |: X( h" `; X2 k% g+ e
  564.   dlg=new CRevAppDlg;- B* o8 q0 }7 |4 \# e" v
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    ! j' |9 b5 x4 I2 q1 |  V) Q
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    ' a! x7 p, e6 N* Q7 E
  567.   m_pMainWnd=dlg;
    & }* Z+ S( o$ v8 s" ~' c
  568. ! u9 ^( M  I5 j0 O( z. @/ b
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);' u$ R) B/ _1 L) ~

  570. % w0 w' ]$ L8 o: C. J
  571. //  GdiplusStartupInput gdiplusStartupInput;9 n7 B' g" |( t3 B' H+ k
  572. //  ULONG_PTR gdiplusToken;
    3 w, h2 V9 [! m# ^+ W2 n, G8 W  C" p
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    . v+ S% w, J; a9 Y2 v/ I6 S

  574. ; X3 H" x- z) n! y
  575. //        CRevAppDlg dlg;5 F& m6 _; l: g' _& W! k2 Z
  576. //        int nResponse = dlg.DoModal();
    6 t9 _. @4 W  D! H- s$ x& D( v# h
  577. //        if (nResponse == IDOK)
    9 Y: c) d( S- J& o7 ~/ ^2 f# C& [+ i
  578. //        {. u# |: b) D; v4 d9 {4 X: ~, E
  579. //                // TODO: Place code here to handle when the dialog is8 }; z; S& ]3 g1 p4 b2 @
  580. //                //  dismissed with OK
    7 F2 q$ E' N) e0 u0 D
  581. //        }
      b, H2 @  h5 o2 j3 M2 `
  582. //        else if (nResponse == IDCANCEL)5 A6 V; Y1 T) V
  583. //        {
    8 ~+ T  Y  Z$ T& q
  584. //                // TODO: Place code here to handle when the dialog is+ T& @; X8 T3 _3 ?4 z: o, A
  585. //                //  dismissed with Cancel0 @; R8 Y, ]+ K! _1 N% t3 J7 r
  586. //        }" J. B. o. H1 y' P- a0 n
  587. & S# E1 {8 x) Y/ ^
  588.         // Since the dialog has been closed, return FALSE so that we exit the% a2 Y7 C$ T. K
  589.         //  application, rather than start the application's message pump.4 u4 }; L' V7 u6 C2 s6 K+ u
  590.         return TRUE;
    4 w* U6 u0 ^$ A# I; K' U7 ~: d
  591. }8 F. ^2 [$ k5 e; ^
  592. # \2 V& o: a" d5 J
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    * W8 |! s( V6 L+ }3 _
  594. {! N' A. s: e0 F1 e' i5 Y
  595.   int i;  V, j2 @, \) v5 y2 t6 F
  596.   char *szRet;# w- ?5 h5 e1 x! c0 b0 F

  597. 8 C8 {4 j# e2 l1 n+ K
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    $ r2 n% m; l# u6 F+ v
  599.   if(sztoken)! A6 w4 H5 z% P: w  U
  600.   {; S) k; ?5 N; y" f2 `
  601.     szRet=&sztoken[itoken];
    % H  ]2 T  @, j- d1 ~- M; B
  602.     while(sztoken[itoken])
    : r8 l8 m6 n* t, z, g+ r
  603.     {
    4 p* K/ a9 j+ `& W8 d' N
  604.       for(i=0;i<(int)strlen(token);i++)
    % H" C0 y$ h# L! ~; Q& ?9 Y  h
  605.       {6 N( P! Y1 Q; `& P) b
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])) M, `2 ?0 f, r1 b0 k
  607.         {
    ( G: p. u9 O1 G$ I  f9 R0 c
  608.           sztoken[itoken++]=0;1 R; a; o1 {' H( T
  609.           sztoken[itoken++]=0;5 [% c- g7 U- i  s; b3 g
  610.           return szRet;0 W6 m: g  l$ r. y$ o# e) c2 k
  611.         }' b: q* z! C3 e; r+ S
  612.       }
    0 W  B& N4 C6 H- H" C
  613.       itoken++;
    ) x3 U! s' x! f0 |
  614.     }7 m1 A4 ]. }4 i$ }% [3 \0 ?7 T
  615.   }" r- r" i! ?9 V, r: z
  616.   return NULL;$ B- N( Q  ^* |5 I( T. D4 l' a
  617. }
    ; Z/ ^" M; T8 F! O
  618. 6 Z: e2 F  M2 j0 U  e3 P4 Q5 k
  619. void ProcessProc(long Total,long Current)" L. e. D$ j; r$ x4 N4 \: e6 P& e
  620. {' v# U" g( a  ~& ^  C4 p9 i
  621.         MSG msg;
    ( L/ C% [2 t0 Y% |6 T
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    9 U: c1 e7 y7 z5 r3 k  y
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));! \. r+ R$ U, v# y3 ^4 q0 n0 m
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)): ^7 u$ ?% W# j5 ?) K1 O3 \+ q
  625.         {- i+ M! x4 Z$ F2 y2 R6 V! `3 t+ {
  626.                 if(!GetMessage(&msg,NULL,0,0))
    ! G) U1 W7 J+ i2 R/ K2 O
  627.                 {
    2 R% P2 [. J8 N7 t: Q* e0 l
  628.                         return;* Q% w0 N- k5 p- l
  629.                 }
    / z/ v, h* Y0 _$ d
  630.                 TranslateMessage(&msg);
      ?9 L1 F8 h0 J* w2 y/ r2 V5 y
  631.                 DispatchMessage(&msg);
    & ?3 W* e) _; N6 J9 S% k" c
  632.         }       
    * K# _1 w" d! z8 m' ?7 i- b
  633. }- m' b. ]! @: N! [- x
  634. : u$ s" b. \& Q1 f. p  z! J
  635. BOOL bFirstChar=TRUE;
    + _% X& p1 Z9 `  o1 C
  636. 8 P+ F3 Z8 u7 M
  637. BOOL CRevAppApp::OnIdle(LONG lCount)
    0 v  C; U! Q  _
  638. {9 d6 `) k9 d! U8 D! r$ A. o5 ]) Q* W
  639.         // TODO: Add your specialized code here and/or call the base class
    ) K& ^& N; H$ z: F$ Q$ c
  640.   switch(dwProgramState)5 p1 s) J7 p8 r: l+ C3 y
  641.   {
    / C- l  \  b9 E) c
  642.   case AP_NOTHING:, k+ C% X+ I; e5 {( t; Z2 V/ w
  643.     switch(dwStartUpSteps)
    ( H! b3 A# p' S7 a
  644.     {7 \4 t8 q. X, |
  645.     case 1:" g: R# e$ z5 T( t' I  O2 z; o$ a$ i7 t
  646.       {4 V/ P( [) ]+ Z7 V- S% d
  647.         int i;: r$ Q" G2 I2 ~  q) c3 \# i
  648.         CDC *pCDC=dlg->GetDC();
    2 o4 I" y/ t4 o% z' `
  649.         HDC hdcwnd=pCDC->m_hDC;' C' I; M2 B' k
  650. //        Graphics graphics(hdcwnd);
    8 u1 N$ ]. V  J. h
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");* R  f2 |% t9 Y/ R6 j# y* h+ I
  652. //        INT iWidth=bitmap.GetWidth();' c. P; T- R+ T/ J) Z
  653. //        INT iHeight=bitmap.GetHeight();( H- w1 m: I3 v) L
  654. //        Color color,colorTemp;* M, i+ k/ p( Z0 g& p4 Z5 w2 [
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    # d$ D5 Y) h3 @* h
  656. //        {) `& E) Z; A) a2 ~4 y) `1 J9 l4 E
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)1 p1 u9 ?, B; x' T# J* Z
  658. //          {- U1 E- p6 Z4 _* T" w* r
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    0 M6 W" G1 c6 b# |& b) E2 s1 F
  660. //            colorTemp.SetValue(color.MakeARGB(
    $ D0 x: t" V! ~( k* i
  661. //              (BYTE)(255*iColumn/iWidth),
    ) t# [! C1 F. b$ D
  662. //              color.GetRed(),9 ]3 @& L6 s1 v9 n" g) u
  663. //              color.GetGreen()," f- q9 h% M5 S4 |* i# D
  664. //              color.GetBlue()));
    $ m( s3 l9 y! u
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    ( H, o0 C0 @' E. [( l( S2 j
  666. //          }
    1 D; D" u, [, z4 p: V: p
  667. //        }  S  k# _+ h+ L  g. a) j
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);
    " B- V+ i1 f2 s  o! v
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    5 Y4 H2 g% n- k" N  v8 @
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");- I$ @9 i1 A$ r) m: l
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");' |; a6 o1 h0 C
  672.         for(i=0;i<240;i+=8)
    ) T- M3 ?0 w) L$ e6 j
  673.         {
    7 D" C3 E: o: T" m* x
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);
    , {1 W5 O! v* G9 v, v9 H& N
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    ! A0 b* E1 Y8 e5 N. `, ]) J
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);0 {1 K1 ^- A0 [  @! ^$ n
  677.           Sleep(33);
    $ @  w9 ^6 R) a3 n- f
  678.         }
    , T5 G7 L: ^5 ^, F9 A& D$ u: U
  679.         Sleep(1000);1 a8 O7 a4 x( q' z$ w* P! T
  680.         for(i=240;i>0;i-=8)
    ' S5 S- v9 G: A" y+ E5 {
  681.         {
    4 ?# v4 H2 {# X5 ^! R" J2 E. h
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);! k, x- V. Q- W) @; G
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);, `3 B. r: ^# [' v# _- U) ~
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);
    + d' Z: N: c! N# z9 j
  685.           Sleep(33);
    0 H: s% b; A+ I- ^# M
  686.         }6 f  v: c* q8 H9 H
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);1 ?4 C& u, G' F1 @
  688.         dlg->ReleaseDC(pCDC);) P4 S# j3 b4 K% |
  689.         DeleteDC(hdctar);0 V5 q* a; ^+ o; }7 T/ Q
  690.         DeleteDC(hdcsrc);
    ) p; W/ V6 b) U* e& E
  691.         DeleteDC(hdcorg);
    & k: n* q- ^2 k+ W! |/ z+ q. q) V
  692.       }
    ! q$ n: ^+ E* ~* w0 O! A
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);& ~+ v4 P' B" q1 j
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");: [. b2 Z: O3 u" A6 {6 |( A$ l
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");) ]% D" ~( r* H" g  n: ~
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");  H2 h3 n( V1 m* d3 r" T
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);  W0 N, z+ d) H2 G) H
  698.       if(!Dn.Connected())
    # y: F# G5 H$ ^. |
  699.       {
    ' ~5 d5 @6 |: d/ j, p! Q* g2 m  x
  700.         dwTotalFiles=1;
    " Y" J8 I! n8 x% C; H
  701.         dwDownLoaded=0;
    2 j1 e) h$ `2 F$ M4 I5 u: e
  702.         bSilentStep=TRUE;
    - Y5 e& N- [/ _1 {1 }1 z
  703.         bCompressed=FALSE;
    , @( v4 w2 p+ v1 `  v
  704.         strExtLocal.Empty();
    / B! D2 P! k- z6 m3 p
  705.         strFullName="readme.txt";
    # d$ R( K$ T# w9 I9 ^' S% }) P
  706.         dwProgramState=AP_CONNECT;& E- P5 \) c$ W0 s. B& h3 z5 d
  707.       }
    # n+ E8 J! t2 [' N& ~# B
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();4 I% C* @9 ?+ f' [
  709.       dwStartUpSteps=2;' s$ P6 G1 H" o
  710.       break;0 R. y+ W2 K/ v- g" v% g+ o2 ?
  711.     case 2:
    ! o1 l3 j* ]3 ?" O& h. `1 n1 L
  712.       {
    8 [& X, J( a( k2 r4 {
  713.         int iEOF;  u0 Y4 m! n# ^2 F9 s- G+ A+ f& V$ Z
  714.         FILE *fp;2 ?, ^" @9 P* w; T5 R7 W3 n3 _
  715.         char szString[512];/ Z& Z$ u6 Q" V' e& d( _
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");' [( {) i) F0 R2 P6 S1 J' d
  717.         if(fp)
    / O8 N% u" a7 ~4 `7 r! A
  718.         {
    6 ?. z% ]1 q9 K5 Y2 S- r: g% L
  719.           do* @) L8 B/ o6 }6 _& I$ L1 ~
  720.           {
    9 Q8 b% l1 w/ u: i4 b* g
  721.             iEOF=fscanf(fp,"%s",szString);
    & K7 ^) j) [' l! Y- \$ p
  722.             if(strlen(szString))
    5 p. W, f- P' W
  723.             {
    0 |. b8 M3 N5 B  x$ ?
  724.               if(bFirstChar)5 J+ T5 d* ^7 W$ J! ~# \
  725.               {
    " A0 `2 @! B+ ]) T: e: {& Z6 p
  726.                 bFirstChar=FALSE;9 S0 p/ m7 Y9 |. s
  727.                 bConnectIsBig5=FALSE;
    - S3 \  H& R  i7 l. S
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;( ?- x5 x8 r+ _7 k
  729.               }
      P. X. `5 z1 a' {5 ?# {
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));
    ! X- h% m6 \7 L+ F; u' k# K
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));0 y8 A; i- c6 V: @; d5 z% r
  732.               dlg->m_ListText.AddString(szString);0 F0 R" R' R* F8 ~' @4 E
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ n5 L! Y! O- i, n! |* E! p
  734.               *szString=0;; A4 h6 J1 P" a9 W8 b& p5 W) F
  735.             }& R+ D( f2 W8 t$ o6 y) ^
  736.           } while(iEOF!=EOF);0 M2 E6 v) K5 i4 v7 B, a
  737.           fclose(fp);
    9 e/ Z- o% U$ R; q( J. \+ p2 \  Z
  738.           unlink(".\\DownLoad\\readme.txt");
    ; [. V& Y9 L. T* J' }1 m" g3 b
  739.           dwStartUpSteps=3;! I1 k! Q: R) E, T: `
  740.         }: |/ P$ N+ o# T! [7 b
  741.       }
    $ U; R" h& A3 \, Y
  742.       break;) B3 O, A* {/ ]& L( S
  743.     case 3:
    2 y- Q6 E3 {& w1 }: m  z3 i
  744.       if(!Dn.Connected())! N$ s8 a' |3 X6 W5 _9 r
  745.       {
    8 g# I  o+ y: u! S' M
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);7 ~3 J, h: S( o7 \: H
  747.         dwTotalFiles=1;7 ]& y0 e) g" k# A7 `: z
  748.         dwDownLoaded=0;
      I* Q: I, U. E4 P: F( y/ f- `
  749.         bSilentStep=TRUE;( }& @6 L2 ]; C
  750.         bCompressed=FALSE;4 M" G  Q7 J8 L5 Q
  751.         strExtLocal.Empty();
    . P& F: Y) ]" Z; \1 O4 v; F, t
  752.         strFullName="checkversion.txt";4 `- I  c. b$ h! v; x
  753.         dwProgramState=AP_CONNECT;+ L! j0 N4 H2 A9 O( d! _
  754.       }6 ~8 b+ y, _5 i% U1 w
  755.       dwStartUpSteps=4;* Y7 R% L7 R. y% B! u4 e% T
  756.       break;! u2 v' X- t# Z5 ?# |' b: u. R$ v
  757.     case 4:
    5 P6 o3 K+ \: v. k; [+ \
  758.       {
    9 E) f; O7 P* Z" n! S0 ?0 }
  759.         FILE *fp;
    $ U4 F8 u( h! L  ]
  760.         char szString1[128];
    % d8 G* i) J5 ~+ o: K9 t0 z
  761.         char szString2[128];
    , Z, b+ Y6 a4 `$ i( j
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");
      ^9 C/ Y' b' f- _
  763.         if(fp), L( P0 X8 V, Z2 X! ^
  764.         {
    4 C' g, Q' W0 H) {
  765.           fscanf(fp,"%s",szString1);
    4 K8 {9 z. }" H* i
  766.           fclose(fp);
    6 k4 x" {7 O5 b. K; C5 ~
  767.           fCheckVersion=atof(szString1);/ G" _4 i7 T/ e. C$ ~
  768.           fp=fopen(".\\checkversion.dat","r");
    & E) G' P  a; _" ^! o; P
  769.           if(fp): b2 O. P3 K4 ?" m+ V. J% y
  770.           {* Q6 J( g5 [5 _& M8 a! L& i
  771.             fscanf(fp,"%s",szString2);
    1 m5 V* n' z& o+ N# \' J5 e3 s
  772.             fclose(fp);
    8 ~, J# m1 T6 J" }+ T% Q/ Q' @
  773.             if(atof(szString1)!=atof(szString2))
    ( N7 E* Y7 `, E- o% }9 I0 ?; I
  774.             {
    ! z9 }1 n+ t$ D& _
  775.               if(!Dn.Connected())$ l$ y5 g, d" P0 r9 d7 a: d
  776.               {  F3 n) a! P, V: l4 w; i
  777.                 bFirstUpdate=TRUE;4 u% W* c8 o$ m* Z" _
  778.                 dwTotalFiles=1;; f% e- B+ u" h; |+ _2 N7 a9 T
  779.                 dwDownLoaded=0;
    , ]- n7 u$ ?- N/ L
  780.                 bSilentStep=FALSE;+ F; O8 ]' w. M8 l$ Z- |
  781.                 bCompressed=TRUE;$ a& x( ^8 G: B, R, e" \( G2 Z
  782.                 strExtLocal=".\\DownLoad\";
      t, y! W7 m* M, C- Q
  783.                 strFullName="update.txt";1 {$ b. r/ G$ H
  784.                 dwProgramState=AP_CONNECT;5 ~+ `1 Y9 j% m+ T! M) J
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");: h) W4 J- e, Y6 ]
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    & L: p% M$ F3 F9 I
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    " P2 P( _, |1 Q. N3 x
  788. 9 A/ U! y" p. M6 J' W
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);( Z5 X# F7 o7 b, N' o9 D! J
  790.                 unlink(".\\DownLoad\\checkversion.txt");4 m" X4 G7 ?0 s6 u  i
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)
    ) Z9 o) c3 e, V# @; \
  792.                 {7 M2 m- J3 g; q: C% i  v& c
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");2 E7 `. Z- a, T! Q0 t0 C: n
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    $ S2 R; U- W% m2 `( g
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");
    & N% k  L+ e: _. t) j) C
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 l2 q, x( {( P5 C5 o
  797. 1 E$ C" Z! j, s2 e9 n/ y
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");8 `/ P5 `" r+ r( B3 U- h$ t6 V
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    ) R3 F' i- C( y  P( T
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");- P  q! V8 A+ u7 [2 @9 M. x
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);. d) T! |# S1 [1 O, p, e! ]- }2 ?
  802.                 }
    , O+ u1 b% ]) N3 Y8 i4 m
  803.                 dwStartUpSteps=5;
    ! D7 H5 @5 l! f
  804.               }6 B1 F5 s" V2 c4 l! D
  805.             }
      s/ _. ]! h" W- K( N" ?/ F
  806.             else1 ]. u6 L9 M" K  L- I* p8 g
  807.             {
    0 C3 O* v/ }, }1 N% F2 }3 A
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ! m7 s# X# x7 \! e+ F* S! M
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");+ _! f/ ^, B, Z! `9 d
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");
    / B9 _, z/ x- ?- i# v* t
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");( ?- a6 J3 [3 z. h( b1 j
  812. 2 R8 R  u& Z. n. Z& {/ f  q3 X) K- {0 o$ _$ s
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      X! ?* u3 `% s7 y+ x2 ]7 X
  814.               dwStartUpSteps=99;
    ) r) s* E% P, [
  815.               bFinishUpdated=TRUE;
    1 _  W, r" I* G4 i" v
  816.               bCanUpdate=TRUE;
    6 W# _- ^0 y1 \& H7 W# J$ o
  817.             }
    - R/ j1 D3 b! g9 [1 N
  818.           }
    ; F9 v  |# c) \: L: x! O# x
  819.           else
      z1 p+ Y3 z: R: x( v2 E% h5 f6 d* x
  820.           {
    2 J# z" L3 w& T: y
  821.             if(!Dn.Connected())* E  _, U( M: D) x/ }, L5 A
  822.             {
    " i9 g/ [$ r' K! @2 ^( j* n. j
  823.               bFirstUpdate=TRUE;6 ?1 U% t( n6 L6 p- P( X  n
  824.               dwTotalFiles=1;5 j0 j. [4 k* s8 T
  825.               dwDownLoaded=0;: I! v9 {! R% e# @/ k4 x3 s+ n$ b
  826.               bSilentStep=FALSE;, N! U; c  K5 I2 o) _
  827.               bCompressed=TRUE;: z7 X! @" f) t3 M
  828.               strExtLocal=".\\DownLoad\";+ g, s+ @& C6 u1 [( X/ t) P
  829.               strFullName="update.txt";/ r0 a6 o$ @# p6 P
  830.               dwProgramState=AP_CONNECT;& w1 ?, {. y0 T3 ]8 c$ t
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");
    ; P, k! [8 k6 p& J! q: D
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");" J" p3 U/ h+ o8 W6 ^: x* f
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    ' w8 H8 v# k4 B& k/ W  W: \! z
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    " p$ T& {: x, H! T$ Z
  835.               unlink(".\\DownLoad\\checkversion.txt");
    5 \7 @& K" [2 m+ g7 B+ t0 b) q9 o
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    6 E5 T1 _+ J: B3 R$ ?6 \8 G$ K
  837.               {
    % c! j4 ?8 I3 a5 }/ N7 [
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");
    1 @# f/ z/ g( I6 X0 O' f
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");
    5 f- D7 w# g/ H+ a* b
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");
    7 H3 j# Z4 P; C+ U
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);6 o. U1 C2 ?- o; x: h8 s2 e. }" r+ S
  842.                 3 [6 G8 r, a1 l: @. S
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");; _& A4 u& }5 ~" P
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");, e; i6 T7 u1 W, _' b
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");) S0 l( ~/ s& n4 p$ j, l  L
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 _5 {5 y9 Z7 C" C+ M% t! C' e# V
  847.               }
    * V: ^/ v, X/ Y9 O. _+ e
  848.               dwStartUpSteps=5;
    2 p+ }) P' Z7 {  O
  849.             }
    3 G4 I* x( K6 v4 n" D8 E- N
  850.           }7 p  N' _% X1 f' P- H9 q' Q: o8 A
  851.         }% E! D, Z: n; B/ @0 a( n5 }
  852.         else$ K* Z5 \4 U4 U. m. E
  853.         {2 k2 K' e$ r/ h2 a2 f) u
  854.           dwStartUpSteps=3;
    ( ^8 E/ w/ [+ X$ v, b4 C
  855.         }
    7 N) z+ m+ s* @3 E$ o* `, Y8 s
  856.       }
    $ W) F/ r; w3 s8 F8 V- }, C1 B
  857.       break;/ g7 ?' w! h' W9 x  ]5 e
  858.     case 5:
    1 G3 I" t( b: u2 \3 E
  859.       {
    # o+ S! w: b, u. d
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)
    # {: C% [+ {. M: K$ o+ @
  861.         {
    " ]9 l% u! a+ U2 S  q2 z9 r, p( E7 y6 z
  862.           int opt_overwrite=1;
    5 T7 B7 d( i8 M1 @2 f
  863.           int opt_do_extract_withoutpath=0;9 J( n4 k7 Z) l. j% k: l! C
  864.           unzFile uf=NULL;
    + d5 b- X( v, @( ^( y* b

  865. $ v  {/ [$ n1 x3 s  i# j3 G
  866.           uf=unzOpen("Wsa.zip");
    ! Q( y$ v# E8 v( ?, H2 h
  867.           if(uf)7 N3 j4 p" A  _0 Y6 T
  868.           {" h, @0 D' P0 m4 Q: V4 J0 b, X
  869.             do_extract(uf,opt_do_extract_withoutpath,opt_overwrite,NULL,ProcessProc);# C, r5 g# b  y; D/ [2 e& @
  870.             unzClose(uf);
    6 p' R$ K3 r+ ]- s+ r7 \( m) F; l
  871.             if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃ЧΘ.....");. J- k" T% j% D# o) S0 ?" l3 v
  872.             else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压完成.....");* T, R4 @5 k- I+ c% b8 [5 k
  873.             else                                                      dlg->m_ListText.AddString("Unzip OK.....");8 |9 O- {4 ^% e6 y  {% X' M$ C
  874.                                           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    1 j6 t% \. p2 M6 z# C
  875.           }& k: L3 W5 u2 X. l: g5 }$ V1 a6 q
  876.           DeleteFile("Wsa.zip" );- u9 X1 {- R. ?7 |/ Y: k' Q
  877.         }) X' s+ `; \3 n) L" D  b3 p

  878. 0 \) G6 `8 g7 d. Q8 Q+ c" o7 ?
  879.         if(CheckLocalVersion())
      I9 z, q/ F1 s; A
  880.         {$ D8 P% v! P: s) c. O0 I
  881.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫磅︽絬穝戈.....");6 E" V1 @/ p# q! j- n% H
  882.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请执行线上更新资料.....");
    ! ~. x4 \5 w3 A
  883.           else                                                      dlg->m_ListText.AddString("Please update.....");; y7 _2 h  E- w. v/ q
  884.           dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
      d" A/ t2 s; Z' V- l" D5 b
  885.           SendMessage(GetDlgItem(m_pMainWnd->GetSafeHwnd(),IDC_BUTTON1),WM_USER+2,3,0);6 `/ i* v- d* a8 W& l
  886.           dwStartUpSteps=99;
    : w6 d. \7 D  O8 N; w
  887.         }
    0 w) S- m# r. @% Y/ C
  888.         else( G  ~" {* u  F4 E6 O- Z
  889.         {
    2 v3 J$ r0 Q# q! o2 t
  890.           if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    9 G* c, c- E9 f( J% F8 @
  891.           else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");. F& N2 |$ A9 E( D
  892.           else                                                      dlg->m_ListText.AddString("no new file update.....");
    9 c6 C9 O% l3 ^- g" m! `

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

& l, x$ Q: U7 q* N5 E! X
0 n) \2 l- B; z$ w/ i& Q" U- v

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2026-1-30 07:16

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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