找回密碼
 立即注册

CSUpdate.exe源代码

[複製鏈接]
洛小枫 發表於 2018-1-26 20:48:40 | 顯示全部樓層 |閱讀模式

- _1 ]) V" }$ A+ G2 U. m) V
  1. / RevApp.cpp : Defines the class behaviors for the application.
    ( e0 V$ L1 q( D" x! x" K
  2. //2 v5 O0 ~, t# J7 O0 g0 x

  3. % ^/ _; p& R& ^$ Q
  4. #include "stdafx.h"
    & x: |9 r6 @2 R! x

  5. + w$ b, @, u5 B  L2 H
  6. //#define UNICODE
    5 g3 a" E2 u5 U7 U
  7. //#include <gdiplus.h>
    + A6 \3 A+ d- q$ R# k
  8. //using namespace Gdiplus;% }9 O9 A9 v' [( `3 |/ l
  9. . N: k0 W1 {7 S8 \; x/ o* b
  10. #include "RevApp.h"
    $ n: ]( I/ f* P# Z: p
  11. #include "RevAppDlg.h"
    " M7 J1 G+ E' s: D

  12.   M$ z7 C* O- c0 ~9 |' V
  13. #pragma warning(disable:4786)
    ) y2 A/ I, p& _( _1 l* r" s
  14. #include <map>
    ) a  S- j" {7 a0 J( v) m
  15. #include <list>1 X. Y$ k8 F3 T, J9 ]# u
  16. #include <direct.h>
    0 k( c' ^) S$ x. D
  17. $ e' p% Q2 d! x$ H! M. m8 @
  18. #ifdef _DEBUG; n, Q6 v7 g# T* [* i
  19. #define new DEBUG_NEW% y6 e/ ]; u; s+ ]* h' I# \
  20. #undef THIS_FILE2 C  t6 X4 O! H4 u
  21. static char THIS_FILE[] = __FILE__;8 j# b5 {2 y0 [; \8 D% L  i& d
  22. #endif8 V, n! Z( U5 Q& Y3 K
  23. #include "SkinResDef.h"+ D# b; U8 x8 q6 ^8 j" _
  24. #include "ChangeBG.h"4 @  O$ `9 ^+ O; o! g6 g
  25. #include "AFXINET.H"
    8 T/ g0 N7 z& R& [
  26. : C- z* q7 ^; ~, P7 r  |
  27. #define TRADITIONAL_CHINESE 0
    7 w$ F/ W/ a5 B4 C" o% L
  28. #define SIMPLIFY_CHINESE 1
    0 L6 P' m6 l+ R8 x6 T" _. P
  29. #define ENGLISH 2, ^8 p/ r% m! I+ {; _% d5 J: m8 v
  30. int m_iLanguage = ENGLISH;
    / g+ l( ]0 o: Z2 R# e
  31. /////////////////////////////////////////////////////////////////////////////! E8 K/ w1 Q* k9 G8 a8 p8 [/ {3 w
  32. // CRevAppApp
    ( e3 B& A( ^" u1 y7 N
  33. / t) z/ u% U/ R- u
  34. BEGIN_MESSAGE_MAP(CRevAppApp, CWinApp)& y& U1 |0 Y& N
  35.         //{{AFX_MSG_MAP(CRevAppApp)7 h5 H' {! A1 X) e" }8 P& B+ F
  36.                 // NOTE - the ClassWizard will add and remove mapping macros here.
    ( g  a, G# H+ M- n& d
  37.                 //    DO NOT EDIT what you see in these blocks of generated code!
    ! J- |' _  I1 ~3 y& j! ]- C
  38.         //}}AFX_MSG
    & w- Q' d3 t6 r: f( t
  39.         //ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    6 {- H, b. r& u+ i0 X7 X* R$ n$ ^; T
  40. END_MESSAGE_MAP()! Q2 w9 u5 k% n+ l
  41. # p$ ^& L7 H# R8 N  P
  42. /////////////////////////////////////////////////////////////////////////////+ u$ O  u) g8 {. V
  43. // CRevAppApp construction
    3 l* [3 n& r& t/ b! {

  44. * A! ?5 w/ \  S0 b$ E
  45. CRevAppApp::CRevAppApp()- h- s# T. t3 w, y* u2 J
  46. {+ q* X* E% N' u
  47.         // TODO: add construction code here,
      f0 K( J( m. y8 U" m) g8 D% y
  48.         // Place all significant initialization in InitInstance, y$ h8 A! G9 s$ \6 [8 I+ `
  49.   bDisplayIsBig5=FALSE;
    5 F( t# p, v# b
  50.   bRestartUpdater=FALSE;4 s( S/ d4 v% v5 |# w
  51.   bFinishUpdated=FALSE;  c- k7 [, I2 s1 @9 V) ]5 Z; V
  52.   if(GetACP()==950) bDisplayIsBig5=TRUE;
    ' w+ ?% i9 U- i5 x
  53.   InitChangeDataBig52GBKS();
    $ U1 p7 p1 {' A' J# x( F
  54.   InitChangeDataGBKS2Big5();' ^( @0 z2 e5 L( V  g9 ?
  55.         //
    3 {' C- E9 t- u4 q( u# s2 P
  56.         bClickRunExe = FALSE;1 F6 l( ?2 g8 H, k- ]  G
  57.         //9 g1 |- }& m: C3 j
  58. }# `# i+ G- ^$ E( V
  59. ( K+ n! J7 a$ r$ x/ G! d; p
  60. CRevAppApp::~CRevAppApp()6 C1 @# P+ Q- p. m6 s/ A9 }. M/ v/ F
  61. {
    7 B  l) |9 _% F
  62.         // TODO: add construction code here,6 H, T3 |; u  h: _
  63.         // Place all significant initialization in InitInstance7 @0 ]* Q6 a2 c+ {! x- w3 ^: J
  64.   EndChangeData();
    / @7 G5 V! ?- v0 d: h
  65. }0 g7 |( c. x! {; S" F2 J
  66. ; I2 x. J2 P  J6 s1 Q
  67. /////////////////////////////////////////////////////////////////////////////, E' I; U/ }' G5 H* [# l
  68. // The one and only CRevAppApp object* x* |* v) b( i, S5 q( U- J

  69. + P& F6 |# r7 L( w
  70. CRevAppApp theApp;
    , _& f+ {8 k5 I6 d# V
  71. 1 t" f2 p  N) N- R. ~
  72. char *CRevAppApp::ReadFileNames(FILE *fp,char *szFileName)
    % w" s4 \1 {# m& a
  73. {
    " k3 v) O# c# W. G- b3 f& X
  74.   int iEOF=0;$ T1 I: B& f3 _6 N) U' N  A
  75.   char szTempName[MAX_PATH];/ Z) z" v; T( z/ i8 i
  76.   *szFileName=0;
    1 w: t2 f  v& k* I
  77.   iEOF=fscanf(fp,"%s",szTempName);4 U* P) Q$ _1 O. k2 u+ `" N! e3 M. T
  78.   if(strlen(szTempName)>=1&&szTempName[0]=='(')0 i+ j2 }) p3 n
  79.   {" f, l: s( v  |. S
  80.     strcpy(szFileName,&szTempName[1]);4 B$ f) H# @6 x  d
  81.     while(!strchr(szTempName,')')&&iEOF!=EOF)
    9 q3 E- F6 |- g2 f! J5 X, v9 h- V7 h
  82.     {2 h4 ^8 J% e8 r) j- D/ B
  83.       iEOF=fscanf(fp,"%s",szTempName);+ }/ C9 C9 @- H* k
  84.       strcat(szFileName," ");" [$ S; e7 U1 J: m6 }; e9 M7 T
  85.       strcat(szFileName,szTempName);6 o: [% R" g8 h) Y. |
  86.     }
    # C; }: F# F; t. U* h$ s2 `
  87.     if(strlen(szFileName)>=1)
    7 W5 V+ G& Y  s* b% y1 j
  88.     {+ `3 ], J8 y% m8 o$ H+ e& r7 Q
  89.       szFileName[strlen(szFileName)-1]=0;1 C! t& c4 T: m6 o! J. h# H& g
  90.     }8 Y! m: G9 z, U  W$ z0 g6 N
  91.   }: @, X. w5 q* q* ^, B" c  @
  92.   return szFileName;
    $ W5 u# q- u* r) n/ F0 r
  93. }
    - a3 h7 S" J8 ~% B; g4 V3 B

  94. - N& A) ]2 e) Z
  95. bool CRevAppApp::LoadLogFile(char *filename,std::list<CString>& UpdateList,std::map<CString,LPUPDATEFILE>& UpdateFile)
    1 t; x; l$ T2 m* Y( \, k
  96. {
    : t+ N7 }- ~& R" ^
  97.   FILE *fp;
    9 K4 i2 `$ U' ]0 q
  98.   char *key=NULL;
    5 G; d. @" p1 |% \3 T
  99.   char version[MAX_PATH];; _6 P. q& T, s3 x0 i! i2 _" B
  100.   LPUPDATEFILE file,olds;
    " F( A' ^" q& j& Z# y& K5 T  d0 h
  101.   std::map<CString,LPUPDATEFILE>::iterator p;
    , E4 K3 S: G. e! n$ z  P/ E/ K
  102. / y. S% u( k/ J9 }
  103.   UpdateList.clear();- h) m! J% t$ K8 s" K9 U% O7 {
  104.   UpdateFile.clear();
    & X( C+ T# e! O" E3 @/ h1 w, y
  105.   if(GetFileAttributes(filename)==-1) return false;
    ; c: ?$ Y; H/ @8 Z9 D& @
  106.   if(!(fp=fopen(filename,"r"))) return false;
    5 w4 [3 o" w* s0 P: O
  107.   fscanf(fp,"%s",version);
    8 j  p0 O7 ?% t6 Y" k2 p( s% o
  108.   if(stricmp(version,"Bloodyf")) { fclose(fp); return false; }
    , F: w% j, _( o& L, h4 ?9 q/ L5 s
  109.   while(fscanf(fp,"%s",version)!=EOF). f' U# x) A% X' X: s# C
  110.   {
    ( a: c: I9 q* j( s. _) G
  111.     file=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));2 X/ C; m6 Y3 S- U+ a2 k8 h2 h& ~
  112.     fscanf(fp,"%s",file->path);
    ! e3 R/ ^, h. V
  113.     ReadFileNames(fp,file->file);
    ( y7 n1 C" O" I8 W6 Q2 d1 B4 j. d
  114.     strcpy(file->full,".");- z/ N, F  p/ J/ W+ i
  115.     strcat(file->full,file->path);
    + x4 }  @: ~' n
  116.     strcat(file->full,file->file);. _8 u5 d3 O3 \6 p
  117.     if((p=UpdateFile.find(file->full))==UpdateFile.end())
    1 O  n3 _3 w7 t; X$ t& k+ Q
  118.     {9 t# G2 ?  {0 i" u  d
  119.       file->vers=(float)atof(version);
    ' P' @" O' G& h: o2 H
  120.       UpdateList.push_back(file->full);* V9 }: o5 A5 }* S. n% V7 W
  121.       UpdateFile.insert(std::map<CString,LPUPDATEFILE>::value_type(file->full,file));  {  s3 ~9 M% {9 r; a* I
  122.     }
    ; L' @' j% w" Q, ]; N
  123.     else  }+ T2 j# ^7 K2 |( R, s
  124.     {
    # T6 L6 Q; s" A: ]
  125.       olds=(*p).second;- l/ Y# G; H. `- m$ q. W
  126.       if(olds->vers<(float)atof(version))$ A: i1 Z! [. s6 v+ @
  127.       {4 X" D  ~9 B2 D- R- k6 r8 G0 j9 ?
  128.         olds->vers=(float)atof(version);
    9 p. j  ~  G6 ~7 r1 q3 I
  129.       }2 }4 d7 _* n* L% e
  130.       free(file);
    # W: Y5 M, b4 D: c+ q" W$ k
  131.     }, h, c8 u- K& e9 I; j" z
  132.   }% L4 x' R; r  a9 ?& N9 B4 U6 b9 s& i1 b
  133.   fclose(fp);
    # k# K' p3 A  H3 a% m* b2 [; [
  134.   return true;
    ) E* A/ e1 M9 F" U: G; m, G
  135. }  ^& V0 Z, ?0 E# |9 R! h6 g% u
  136. 0 U3 v) `- ~) K/ u: T0 P
  137. DWORD CRevAppApp::GetPathFromFullPath(TCHAR *szPath,TCHAR *szFullPath)
    4 f/ K6 Q. S4 s0 f" Y- U8 N8 S
  138. {0 F- ~# L7 P* h  d0 k4 R3 v. F
  139.   TCHAR  szFull[MAX_PATH];
    7 D6 f6 e8 ^8 G" L* d" ]/ h
  140.   TCHAR *token,*inter;/ O7 \1 P  [* z, N9 n5 M8 p
  141.   *szPath=0;
    / e' \! s7 n6 l! ?3 P
  142.   strcpy(szFull,szFullPath);7 Q4 L' i# f* l$ t8 t& }
  143.   token=strtok(szFull,"\\/");
    0 q# c9 c" n# V6 h6 _' Z
  144.   inter=token;6 r8 a7 X9 f- g! R3 I% |0 L
  145.   while(token=strtok(NULL,"\\/"))1 I1 i$ [& U4 r9 m! i
  146.   {
    * A5 e0 t# r/ p3 C
  147.     strcat(szPath,inter);  \2 B! L9 \* z! _1 n1 D) T4 l2 s
  148.     strcat(szPath,"\");  {" \0 {- t4 Q$ W: n6 }+ m) Z
  149.     inter=token;( z  [4 G2 M7 _* ^! q7 Z% k
  150.   }
    / \. K0 f! s7 J  C/ V) J
  151.   return strlen(szPath);
    0 ?. z& p; \, T5 {+ c4 P9 V
  152. }
    . ?# ?: _9 S, o) B

  153. ; X6 x2 y' I! U" x4 X7 @  h- k# O' |
  154. void CRevAppApp::ForceCopyFile(LPCTSTR Source,LPCTSTR Target,BOOL Erase)7 k7 M% t6 Y1 I4 d1 q
  155. {
    7 r$ o' x$ r. g' n. {% m  ^: E& O- b
  156.   DWORD attrib=GetFileAttributes(Target);
    7 B! g# U) d2 s' Z
  157.   if(attrib!=-1)8 Y. M/ D+ a! u: f+ m7 \: S& y
  158.   {
    ) D& k. N$ A4 }" V9 C$ ~8 A
  159.     if((attrib&FILE_ATTRIBUTE_HIDDEN)||(attrib&FILE_ATTRIBUTE_READONLY))# _% F; O  Z, }; x. u/ [0 `! L) H
  160.     {
    / e, u; {3 a0 b  E1 `7 j
  161.       attrib&=~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY);6 X( }, _: P; ?4 t' b
  162.       SetFileAttributes(Target,attrib);
    ) |" r! m( q+ a! y) |' x
  163.     }# t0 M! x' Z5 Z6 Y: c2 a- q
  164.   }, G+ U1 X8 i* N: H/ Z* m
  165.   CopyFile(Source,Target,Erase);
    4 e( t3 c4 u& G( f1 @$ l; `8 {4 R, s/ _
  166. }
    $ f- J6 n' r& @, E
  167. . O; A2 n5 R( s" Z) p0 E) A6 W
  168. void CRevAppApp::Fprintf(char *FileName,char *message, ...)3 s4 T! N: O. `
  169. {
    # v& v* K& }6 r" F' P
  170.      FILE *fp;3 |2 f9 s+ G1 L
  171.      char  szBuffer[8192];4 z1 k) x2 _5 Y+ C2 D; B+ y+ ?, j
  172.   va_list  argptr;
    7 |7 r7 u6 U: o' g' F1 }+ ]
  173. * \  D  M: z( }' w( y& i
  174.         va_start(argptr,message);+ z" B; l2 }! E; y' R- X) U4 G
  175.         vsprintf(szBuffer,message,argptr);
    " d" O$ Y! J/ z/ Q  x9 p
  176.         va_end(argptr);
    5 ~4 d' v$ P& O  V
  177.   fp=fopen(FileName,"a");
    % z, ~& D) L7 a+ k1 u6 S5 n4 O
  178.   if(fp)0 ^6 B' N: @' l' t! x8 u; M# K% |
  179.   {
    9 G6 ^, |! M1 ]  B9 L6 Q
  180.     fprintf(fp,szBuffer);
    1 o4 S3 L5 {+ k' c. Z
  181.     fclose(fp);/ h( L3 \; ^: q+ z* A
  182.           _flushall();
    6 c; R! q5 h- A$ F) t* n
  183.   }
    3 Q( V, \0 K, P- g/ A6 u* e
  184. }
    ( d' P. l- E1 [; F; A% ^9 b

  185. , x; O. }. C# u1 T  r
  186. BOOL CRevAppApp::Fclearf(char *FileName)- e" D& [# x% Y  u9 T+ N
  187. {
    # e7 {& Q$ F9 R) z8 U& T+ L
  188.      FILE *fp;
    . k7 G% B; u; x) ~4 W* v
  189.     DWORD  attrib;
    7 i) \6 T2 K" P* |
  190.   attrib=GetFileAttributes(FileName);
    / E( t* U2 Z3 ]* \- H4 n
  191.   if(attrib!=-1)- X5 B* I  V2 }% K
  192.   {9 j' u: w7 A# o, z* d, ^! Z% |9 j
  193.     attrib&=~(FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);6 L3 v6 u; c  @, Y2 r
  194.     if(!SetFileAttributes(FileName,attrib))
    ( X4 z+ i1 |2 _9 {: W: z: E9 O
  195.     {
    ' d0 k, Q% l' k4 J. N+ U
  196.       return FALSE;& {# k! r3 R4 q; _% P7 l  P
  197.     }1 W2 s* t7 x9 }6 d& m1 @
  198.   }! `, m( j3 V4 H. k8 I
  199.   fp=fopen(FileName,"wb");. }  F8 t5 v! M( |1 C
  200.   if(fp)
    8 }& M% b5 r  P6 F" f' W& G7 Q
  201.   {
    ( W, Z. [3 C/ ^) |9 A
  202.     fclose(fp);
    2 i7 E! A. v. ~/ W0 y  e
  203.   }
    . V7 R5 P2 A4 ~9 L
  204.   return TRUE;& y$ O2 Y+ b( Q+ a+ C+ W
  205. }( w# x/ T6 d* R1 Q1 X* Q$ w. J0 D
  206. ) v# s& ~* M! O
  207. BOOL CRevAppApp::UpdateLocalVersion(void)
    1 j) |( W  g1 `* d5 T3 G
  208. {6 D9 m+ M" B( c" S) g
  209.   char filename[MAX_PATH];
    0 J$ n3 G; L7 X9 [
  210.   LPUPDATEFILE file,olds;
    / M' k, @7 |8 w7 l- E3 B1 G
  211.   std::map<int,CString>::iterator i;
    ! l5 c' v7 Z# M, p$ J/ ~' c, J
  212.   std::map<CString,LPUPDATEFILE>::iterator p;
    # p6 T/ ?8 X3 L4 C
  213.   std::list<CString>::iterator l;4 l1 d! q# q+ M. M7 m! x* i

  214. + m* b4 {8 ~& s2 e5 N, m0 b3 M- ?$ C
  215.   if(bFirstUpdate)0 B0 `/ H( O$ [1 @2 Y5 {& V. t
  216.   {( V/ ~5 G8 W+ k2 f7 ^/ I3 F* `
  217.     dwCurrFile=0;, ]. f& `$ _) W' E( _+ C/ y" _- J6 g
  218.     bFirstUpdate=FALSE;/ Q5 J; d9 f5 p+ ]5 o, b9 o- i8 `
  219.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())  Y6 V6 A! O( p9 ]' R
  220.     {
    ; H! a5 F" X( |
  221.       dwTotalFiles=UpdateLocal.size();. X6 @* w; s% l7 ?# [% l8 n5 E' R/ k& e
  222.       dwDownLoaded=0;% b/ e: S' i. \; M5 t
  223.       bSilentStep=FALSE;. [" E! d0 U) _3 h  |% X  j
  224.       bCompressed=TRUE;0 g' R& G! q$ s6 J1 }
  225.       strExtLocal.Empty();
    # n% {; @* ?# s4 c! {8 F, `& ^' v' T3 j
  226.       strFullName=(*i).second;
    ' Y+ Z) t9 a- h! ^0 }! V/ e
  227.       dwProgramState=AP_CONNECT;
    ' m, W; A( |) v1 I3 P3 U/ f- q
  228.       return TRUE;
    1 `" x% p4 n/ s' Q) ~( z
  229.     }1 ~" H4 Z' P. V: p0 v4 I; A
  230.   }$ [" ~& ]2 ~5 J/ X
  231.   else if(bRestartUpdater==FALSE)& v8 v. D2 r& g- e) t
  232.   {) r6 V8 N1 h% k3 y- X
  233.     if((p=UpdateFile2.find(strFullName))!=UpdateFile2.end())
    & H* p6 Z3 Q1 B" X  [5 ~
  234.     {
    0 _" e! g- L+ f) U, M2 t. R
  235.       file=(*p).second;
    & p# }3 ?! J, G3 E
  236.       if((p=UpdateFile1.find(strFullName))!=UpdateFile1.end())
    3 K( c. H0 n3 x- O0 w
  237.       {0 j2 V* G7 P* \& N0 a
  238.         olds=(*p).second;
    ' p0 K( F0 F3 P$ W
  239.         olds->vers=file->vers;. e0 S- A3 H. K5 M9 e$ K: b
  240.       }/ z$ {) O+ {3 z4 ^# E5 }
  241.       else" ^4 I& {$ j! Q
  242.       {5 K4 A1 X; h$ C
  243.         olds=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));/ h! q- x2 l6 B5 E! A6 P- P
  244.         memcpy(olds,file,sizeof(UPDATEFILE));
    $ ?/ e4 p0 c7 S, W3 e
  245.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(olds->full,olds));5 r  G; n  E$ g. X; U
  246.       }+ t- ?8 ^6 O6 N5 W
  247.       if(GetFileAttributes(".\\update.tmp")==-1) Fprintf(".\\update.tmp","Bloodyf\n");
    2 H. j% E+ _) u- [  h
  248.       sprintf(filename,"(%s)",file->file);
    ! O4 ^7 I3 C' b! o' k: y/ a/ f6 X
  249.       Fprintf(".\\update.tmp","%4.3f %-48s %-24s\n",file->vers,file->path,filename);
    6 x1 p" S$ }7 ]: v: k# ?6 C. ~
  250.       if(!stricmp(file->file,"csupdate.exe")) { bRestartUpdater=TRUE; return FALSE; }! ?$ e9 o3 W" a* H+ p, n7 `* M' j
  251.     }( {. ?+ n- x& d  p5 m- k% y6 x! B, [
  252.     dwCurrFile++;
    3 ^3 |) y: g6 j' ]" l0 O& a* H
  253.     if((i=UpdateLocal.find(dwCurrFile))!=UpdateLocal.end())9 l; E( d$ m: o: e$ c
  254.     {# _* c* Q/ `1 ^- F+ T% b
  255.       bSilentStep=FALSE;1 V& q$ R8 M% J7 j% ^( d
  256.       bCompressed=TRUE;7 ~8 T. ?# o$ S: k
  257.       strExtLocal.Empty();) F/ j( }, C$ M# x9 v; v: j0 @# Q
  258.       strFullName=(*i).second;
    ) v4 y4 L$ i- v4 U3 ~
  259.       dwProgramState=AP_CONNECT;
    * L- F+ r, V5 O" J' l5 ^9 P) Y/ [% ~
  260.       return TRUE;# a4 B5 t  Z; q9 R
  261.     }2 N3 B" S8 z* ^
  262.     if(!bRestartUpdater)
    ! i3 h0 y. }6 F7 Y0 X5 u
  263.     {
    ' `  d9 o/ O. ^$ z5 v  _0 Y
  264.       int iCurrSize,iFileSize;
    : A, y6 B2 B2 D8 \9 w
  265.       iCurrSize=0;
    ) `& i, i1 b2 @! Q
  266.       iFileSize=UpdateList2.size();5 V7 K+ ]. f3 T6 h4 r( Z! H
  267.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝戈い.....");/ X9 N9 g! ]& H
  268.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新资料列表回存中.....");! ~# j/ D, @' t; R5 |4 R
  269.                         else                                                      dlg->m_ListText.AddString("saving updated files.....");- z% a7 {; U- M" e! g- g% M( ^
  270.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);, R7 b. Z: r+ H
  271.       Fclearf(".\\update.dat");
    * Y; G  d/ C! d. ~6 |  s
  272.       Fprintf(".\\update.dat","Bloodyf\n");  ^6 D( U0 R) R+ {7 U9 A3 T
  273.       for(l=UpdateList2.begin();l!=UpdateList2.end();l++)
    ! B, C( e- x, }# f5 H8 w
  274.       {* c( m7 o! N. _7 c+ Y% i
  275.         if((p=UpdateFile1.find((*l)))!=UpdateFile1.end())& W' y, i+ R4 I9 m) i/ z
  276.         {
    * X4 }: r: x6 v! q3 y) h7 i
  277.           file=(*p).second;/ D1 p- \4 c' w* \, w, Z
  278.           sprintf(filename,"(%s)",file->file);
    + Z$ A( x4 u1 g* F
  279.           Fprintf(".\\update.dat","%4.3f %-48s %-24s\n",file->vers,file->path,filename);. P2 Z0 d( q9 ]. q1 n
  280.           iCurrSize++;
    ' D/ Y  K  Z2 F+ |6 f/ o: o1 Q
  281.           dlg->m_Process2.SetPos(100*iCurrSize/(iFileSize<=0?1:iFileSize));
    - a' S$ [# S) J8 I1 y1 `' [
  282.         }
    7 M# E+ N8 ]  [
  283.       }
    % h/ M* ^7 ^2 {, T6 W3 @: M, s( w
  284.       unlink(".\\update.txt");
    ( p" E& o/ D- S4 p9 {1 `" Q" R
  285.       unlink(".\\update.tmp");
    9 g" L; W1 j5 q/ W
  286.       Fclearf(".\\checkversion.dat");
    1 s. c: X* l0 H- w$ |! G% W
  287.       Fprintf(".\\checkversion.dat","%4.3f",fCheckVersion);
    $ r5 K( v, G$ e4 Y
  288.       if(UpdateLocal.size())
    * A% |3 v( T+ u6 @0 w7 ]
  289.       {) k$ f+ x! Q# x! w
  290.         UpdateLocal.clear();
    : `: O! s, F, O: C' x
  291.       }
    0 h+ y2 T0 F" Z' ]
  292.       if(UpdateFile3.size())
    6 p$ [, F! P4 [2 T5 g+ D/ G) A( C
  293.       {9 f. J0 e; `2 ]7 B; l
  294.         for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)# n6 |) O* i0 w8 j, f
  295.         {# E1 h) n4 ]' Z. [) t/ _
  296.           file=(*p).second;
    # o4 K) Y7 w# Q3 ?; \
  297.           free(file);
    5 y8 D8 y3 t  E; [
  298.         }% v& }) t+ ]4 _  u
  299.         UpdateFile3.clear();
    / ?" t9 V' q& ^$ D7 m6 V" C
  300.         UpdateList3.clear();
    & \6 P+ f& u8 Z- @. k
  301.       }9 Y, Y/ s* h9 @( c7 t$ v
  302.       if(UpdateFile2.size()): `4 ]4 F2 A2 @
  303.       {
    ' l' K( b, j2 L) ^8 w$ [( B
  304.         for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    8 d* Y% {7 n' I8 {& U" c
  305.         {
    + u" A; T. f9 Q! M+ [; T8 t5 l. n
  306.           file=(*p).second;
    1 x1 Y4 f+ ]/ ]3 x4 Y
  307.           free(file);
    ! l) x, E0 g( [- p5 n
  308.         }; a; Y3 G$ l5 w" D1 H& E: d
  309.         UpdateFile2.clear();' w' ]7 |8 w! ^% Q8 s7 G$ c' C4 S
  310.         UpdateList2.clear();
    : L+ \* J' g- O, ~  }
  311.       }; v- m+ M: E3 z4 ?% m
  312.       if(UpdateFile1.size())
    ! d5 ]" J; K5 x+ h/ u8 r
  313.       {
    ; p; D+ d0 A  ~+ d- V
  314.         for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    7 z3 z* I4 ~5 t- ]+ z+ X! C
  315.         {) \" A- q: e9 ~& U1 R1 j/ P* X
  316.           file=(*p).second;
    # [3 S/ ?/ Y; q, J
  317.           free(file);$ I+ c" n) a5 Y, ?1 ]  v& n
  318.         }* v$ K7 g; K( f/ ]9 r- a" @
  319.         UpdateFile1.clear();
    % f; B* F- T3 ^: }! c  J
  320.         UpdateList1.clear();' p  d+ }6 U8 y8 @# `
  321.       }& c3 f. v& O' ]9 G, A
  322.       dlg->m_Process1.SetPos(100*dwDownLoaded/(dwTotalFiles<=0?1:dwTotalFiles));
    / }% G! i$ v4 P: `
  323.     }
    $ n% t: h+ a' _2 Q2 m/ U, u
  324.   }
    ) k: J& H  M9 ~0 ^" t
  325.   return FALSE;2 y) O0 V, j* C* L9 n: y6 m
  326. }% A; r% S2 u  Y& D& Q

  327. " ^1 @. Z- y/ v9 t5 f, ~
  328. void CRevAppApp::ClearAll(void)
    " R* u- `% i* G# c9 x' I- A7 x7 T
  329. {
    1 \' }/ x/ G2 U5 Z2 h5 f
  330.   LPUPDATEFILE file;  |$ v9 c. {) T) d0 _
  331.   std::map<CString,LPUPDATEFILE>::iterator p;0 @/ Y% F3 ~  F' n( |1 c$ A3 n. R6 E8 G
  332. 9 F. _' Z' Z2 A/ t
  333.   if(UpdateLocal.size())* {0 l9 C, N: y, D& K2 f
  334.   {
    0 u5 _' _- g; o, _. c8 P7 J* j' n
  335.     UpdateLocal.clear();
    4 U9 z. H; T7 j
  336.   }7 R7 O+ E9 B- {) m  H, ?4 n
  337.   if(UpdateFile3.size()); b+ T% x( j7 n$ F1 T
  338.   {+ @, s4 }& B) s& k5 _
  339.     for(p=UpdateFile3.begin();p!=UpdateFile3.end();p++)
    " w7 ~- C9 ~5 D' E, V
  340.     {* ~, b: i6 W" f/ C
  341.       file=(*p).second;/ X# {9 t: G& e3 A
  342.       free(file);
    7 s# P* t" g& T! F/ Z( ]3 @
  343.     }
    . n5 E0 p! S" j; g
  344.     UpdateFile3.clear();, s% R( `) @4 w# Q5 y! p3 Z
  345.     UpdateList3.clear();
    2 l  n: M% i" t0 R% k2 t
  346.   }
    / U$ Y# _' [: B' Z$ G4 G6 U# D
  347.   if(UpdateFile2.size())- E7 c: M2 y+ g3 u6 u8 \
  348.   {$ _0 p! i  \9 l: U) C$ y6 p
  349.     for(p=UpdateFile2.begin();p!=UpdateFile2.end();p++)
    1 n, h* }+ A' e. a( f
  350.     {0 r) R7 K) h8 u: @4 {
  351.       file=(*p).second;; [4 e6 b7 t4 L3 D. R
  352.       free(file);
    , f# E) f# X. F2 r- ?5 N
  353.     }7 W+ S# C. E- Z% c* m( u: l
  354.     UpdateFile2.clear();
    # h8 @0 q6 E+ v: f
  355.     UpdateList2.clear();1 j) {. N) P; V, P
  356.   }
    : [2 j% d& t- w1 q
  357.   if(UpdateFile1.size())
    : v& G, }# c0 {" ^% [0 y9 H1 p
  358.   {4 |0 g- r& C2 a
  359.     for(p=UpdateFile1.begin();p!=UpdateFile1.end();p++)
    6 h- q$ C" r! E  q5 d9 Z
  360.     {
    & `' L$ Z- _5 I5 A
  361.       file=(*p).second;6 H' B1 E# m7 r' a
  362.       free(file);& L( D( b; Q- E' L( j! s
  363.     }
      y/ I- X- J; H- D+ U
  364.     UpdateFile1.clear();9 B) d, _: `4 O" \6 x
  365.     UpdateList1.clear();& @6 h: V) w( a. G
  366.   }. J6 b$ o/ o: A! s1 `) B) c: a6 @
  367. }  
    3 o" h4 _7 f! T% E
  368.   
    ! k6 O: K9 Y6 z+ {) C& S
  369. BOOL CRevAppApp::CheckLocalVersion(void)4 G2 }8 w. m! q) v& h
  370. {
    4 m3 c/ Y7 `9 z0 C+ x& x# s8 |( g! |
  371.   int c;6 p! J/ m* {1 `( m& j+ K$ b
  372.   LPUPDATEFILE file1,file2;
    ; q  i, l6 Y4 \+ X: Y
  373.   std::map<CString,LPUPDATEFILE>::iterator i,p;
    # l0 E$ N2 v; G# y
  374.   std::list<CString>::iterator l;  L0 f* a7 Y4 Z: l3 F
  375. 2 k' c: b7 K  [5 m" s( {
  376.   UpdateLocal.clear();" k- [+ g1 R% l9 q$ p1 V: E% t" J
  377.   LoadLogFile(".\\update.dat",UpdateList1,UpdateFile1);
    " [( q/ P: k1 I) f$ ?) P3 x5 O# ]  y
  378.   LoadLogFile(".\\DownLoad\\update.txt",UpdateList2,UpdateFile2);; W% ]2 H6 d/ X, w3 ^# V- y4 \, }
  379.   LoadLogFile(".\\update.tmp",UpdateList3,UpdateFile3);' K, O9 Y# S. Z. v& x9 G
  380. //  if(!UpdateList1.size()) MessageBox(GetActiveWindow(),"Cannot read update.dat file !","Error",MB_OK|MB_ICONERROR);5 a( L' C  W, B
  381.   if(UpdateFile3.size()), a8 y2 Q$ P. C9 r9 A7 P
  382.   {
    + _; P: U; _& }8 k2 }6 v% w: R
  383.     for(i=UpdateFile3.begin();i!=UpdateFile3.end();i++)1 {' d* d+ b6 j, W
  384.     {
    $ A+ h+ A1 i$ s9 v
  385.       file2=(LPUPDATEFILE)(*i).second;6 k' e- m  v' e/ u8 W$ g! D
  386.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())4 T  @' L& O4 ]8 u
  387.       {
    " x' P  v6 E2 K
  388.         file1=(LPUPDATEFILE)(*p).second;
    ) m; p2 {0 X- s1 r; G9 t' d
  389.         file1->vers=file2->vers;. \8 j: s( f9 F. Z( d+ `0 G- I1 n
  390.       }9 r: j, Z% ^4 d8 f% L! ?
  391.       else
    / x+ P: V- f# u& r1 h) b
  392.       {
    ' d3 W' H) t! H1 u3 S2 u
  393.         file1=(LPUPDATEFILE)malloc(sizeof(UPDATEFILE));& D0 T$ K2 ?3 v- m  a
  394.         memcpy(file1,file2,sizeof(UPDATEFILE));, X1 }' ]! s/ w2 y, j
  395.         UpdateFile1.insert(std::map<CString,LPUPDATEFILE>::value_type(file1->full,file1));) O7 c6 {+ \1 X3 F) o$ j4 L
  396.       }
    3 P$ m( d* B7 k* W1 O3 z
  397.     }5 z# c8 y: v0 A) E
  398.   }# m) T" N8 _$ S; y6 S
  399.   for(c=0,l=UpdateList2.begin();l!=UpdateList2.end();l++)
    - L  a6 F4 y9 V" N4 C
  400.   {
    9 d( ]- W$ B# n! D5 p& n
  401.     if((i=UpdateFile2.find(*l))!=UpdateFile2.end()); _# f4 ?5 M: L' ]
  402.     {+ B; f' d  e. t3 o
  403.       file2=(LPUPDATEFILE)(*i).second;
    % |4 l1 n: S, n0 j; ~' a7 k
  404.       if((p=UpdateFile1.find(file2->full))!=UpdateFile1.end())
    : n/ u4 O+ b3 w8 E* x
  405.       {; P* B0 Y" c0 b- U* H
  406.         file1=(LPUPDATEFILE)(*p).second;- {( G' h& o& A% g/ [  l6 r* E
  407.         if(file1->vers!=file2->vers)
    : J% d2 I, O9 r% Z" D
  408.         {/ z* T2 d) d/ T0 }% U
  409.           UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));6 U. H! h8 V! N+ F; x5 S0 X# E
  410.           c++;
    8 u$ ?' y" S* w) k8 P! @) U4 e6 i
  411.         }' U$ y# }4 U3 {. K0 R/ o. q8 B0 M
  412.       }
    * v* E) s. T: l# v8 g
  413.       else( \" P0 V3 ^. `/ Z, L( p
  414.       {
    1 U& M: f% A' |0 T4 L
  415.         UpdateLocal.insert(std::map<int,CString>::value_type(c,file2->full));
    2 P" c* H+ J3 L2 v- [1 m
  416.         c++;
    ! C8 i) E% t$ m1 G! m& a& T4 {
  417.       }  G+ E& L# l: l: Y7 d
  418.     }
    , F' V- Y- H4 o
  419.   }/ C3 K6 H3 n, F1 ]
  420.   unlink(".\\DownLoad\\update.txt");
    4 b+ a3 e% J+ z2 L
  421.   if(UpdateLocal.size()) return TRUE;" [5 O) D3 B8 a) W, B' ]+ T  a
  422.   else                   return FALSE;
    : R' C/ [. p, ^% P: T
  423. }
    8 q' q* U, Z% M+ @- e5 S6 s( l

  424. 9 @! n2 e8 ?0 U. ]) ~+ N7 g
  425. #define DEFAULT_PATCH_URL "http://elysium.waei.com.cn:8080/~elysium/Alpha/"
    ! L5 v6 Q1 z4 }$ S
  426. #define DEFAULT_REG_URL   "www.wgs.com.cn"
    0 N, G3 R$ A8 j

  427. : d/ e  k! g2 |' i3 j
  428. * `; Q8 Q( K; R2 J& X1 e

  429. 4 e8 e4 B+ N& I1 C2 H- j' t
  430. BOOL CRevAppApp::ReadCfgFile(CString sCfgFile)
    : `- U: E3 k1 [6 k$ C& Y
  431. {- v, F' ^' ~! M1 B# U/ S
  432.   DWORD dwType=AFX_INET_SERVICE_HTTP;
    $ p! _) ]( O/ p5 [! P  F  `6 e
  433.   if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1). \, X' ^2 _! r& `
  434.   {
    " q2 [9 V* z5 y9 n
  435.     char szLanguage[50];
    $ M) k6 e( w' k. I
  436.     GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");8 C4 s2 |$ E; e3 E
  437.     if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;9 N8 j/ L+ |$ Z/ z' ~% P( N
  438.     else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;4 \$ @/ ~2 y5 x$ @4 R
  439.     else                                   m_iLanguage=ENGLISH;& O3 k( m1 R9 I; _6 N$ p
  440.     char szRegister[100];& V2 X2 E, }: X8 c2 V" l3 K, r
  441.     GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    1 C" ?; k2 x) Y. W8 y, y
  442.     strRegsName=szRegister;: T- A1 j8 _. c3 K) m! v) [5 ?
  443.     char szPatchURL[100];
    3 b" T* B( _3 H) E
  444.     GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");$ E4 U8 B1 K( V0 D1 g3 ?% ]
  445.     AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);! P% U* D7 k/ D- G
  446.   }
    & P  T& s2 x- X$ P
  447.   else
    / Y# C5 O* ]! d4 H8 W( u9 f# ^0 H3 F' S
  448.   {
    # C: Q1 W9 Q- z" [5 r! K2 H
  449.     AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);
    2 n/ L7 C. s) m& J8 m8 ~  V$ a' `; y
  450.     strRegsName=DEFAULT_REG_URL;
    8 A0 `5 s  d- d6 p
  451.   }( ^2 u4 c1 C; A9 u  c
  452.   if(GetFileAttributes("hosts.ini")!=-1)9 k: q( Y+ j; B  |
  453.   {" c2 I5 T* \) D0 T
  454.     char szIP[50];
    9 L' Z5 {/ @1 s: n/ w
  455.     char szDIR[300];( K- U. P3 l8 i2 ?" q' H" `8 r
  456.     if(0!=GetPrivateProfileString("update","ip","",szIP,16,".\\Hosts.ini"))* f' L8 O, g& d3 T/ M* T( F
  457.     {' G( O# a& B  ]# c
  458.       wPort=GetPrivateProfileInt("update","port",0,".\\hosts.ini");3 ^# B) E1 y# }- F; m
  459.       GetPrivateProfileString("update","dir","",szDIR,300,".\\Hosts.ini");$ K: c* V  G! ?! X. h7 L
  460.       strHostName=szIP;
    : A  t' s& k  m0 N" g
  461.       strHostPath.Format("/%s",szDIR);3 c8 p3 B& d. [5 L  S- ]% o
  462.     }
    ' ?" M' [; z1 Q6 x/ N/ _; Z  t% V
  463.     else
    - g  ~  o: g( T2 O
  464.     {
    2 H5 \* K9 Q, c; d8 {* B: O' a& k
  465.       if(GetFileAttributes((LPCTSTR)sCfgFile)!=-1)
    % ~5 Z- p0 y5 E3 r7 ]4 M) J. R1 X0 A
  466.       {
    % l" E) \1 s2 e
  467.         char szLanguage[50];, b0 ~$ j% m, J& _- b  h( y
  468.         GetPrivateProfileString("Interface","Language","",szLanguage,50,".\\Config.ini");) [* N6 V9 U, V1 O2 \, t3 X
  469.         if(!strnicmp("BIG",szLanguage,3))      m_iLanguage=TRADITIONAL_CHINESE;
    , c. ?* z8 ~2 o3 {
  470.         else if(!strnicmp("GBK",szLanguage,3)) m_iLanguage=SIMPLIFY_CHINESE;& m$ H( M6 u/ v4 w3 h( a
  471.         else                                   m_iLanguage=ENGLISH;
    , T7 x; m9 A. A1 Z9 z0 g
  472.         char szRegister[100];1 M) n0 q' \: b- o
  473.         GetPrivateProfileString("Function","RegisterURL","",szRegister,100,".\\Config.ini");
    : \/ t) c& f0 S4 n
  474.         strRegsName=szRegister;
    ' U  R- S1 p) z' Q( \
  475.         char szPatchURL[100];
    " \9 ~: L; @- t
  476.         GetPrivateProfileString("Function","PatchURL","",szPatchURL,100,".\\Config.ini");1 }& M" K1 c) F! Y5 A3 a% t6 c
  477.         AfxParseURL(szPatchURL,dwType,strHostName,strHostPath,wPort);7 O4 }' F3 Q9 G1 _
  478.       }$ v+ G! p1 d- Y: A. R, N# Q' m7 a. \
  479.       else
    ' r9 Q- G' M6 R' X! g$ J7 [! w
  480.       {* |: R6 O# W8 z. d: _
  481.         AfxParseURL(DEFAULT_PATCH_URL,dwType,strHostName,strHostPath,wPort);7 ^7 U- ]9 a+ T/ X3 R; E
  482.         strRegsName=DEFAULT_REG_URL;% {5 W3 _% m' C0 m8 y* E) c
  483.       }
    3 H  h6 `" D0 [, ]/ G3 D& d
  484.     }3 `9 @: p4 b& {9 t6 R
  485.   }
    ( T4 o, J4 f8 A: J4 [0 K9 H  X) W$ o& p
  486.   return true;
    + c) i+ k2 n/ r! z
  487. }5 K# g: U7 S" O& d, V: q
  488. / I( }$ |8 ~2 K8 h' E
  489. #include ".\ZLib\unzip.h". z  J$ J; \0 c& K- A
  490. extern "C" extern int do_extract(unzFile uf,int opt_extract_without_path,int opt_overwrite,char *extra_path,ZIPCALLBACK zip_callback);
    ) s( y) D. E, r3 ^  G; `3 C6 J
  491. /////////////////////////////////////////////////////////////////////////////. y7 n( |9 ^6 f! e
  492. // CRevAppApp initialization
    * `8 z. a6 N4 L  {! K8 d( V

  493. : }$ G+ e. j( S: a3 W" W
  494. BOOL CRevAppApp::InitInstance()
    % `+ T9 g1 Q3 U! C9 A
  495. {
    2 p6 K6 e' N! s7 C7 Q1 i. q
  496.   TCHAR szPath[MAX_PATH],szPathSource[MAX_PATH],szPathTarget[MAX_PATH];% \3 T) G8 P8 L0 F+ V

  497. ) x2 d& w. C" ~$ U
  498.   GetModuleFileName(NULL,szPathSource,MAX_PATH);6 j* S- e$ ?+ O0 s8 f  s% o
  499.   if(GetCurrentDirectory(MAX_PATH,szPath))
    & N+ w% }$ L+ z% Y. S0 A# [
  500.   {
    : W$ J. Y3 d& m. u9 S+ a. F
  501.     if(szPath[strlen(szPath)-1]!='\\') strcat(szPath,"\");* ?! v5 U5 B2 V' K7 C' j- ?
  502.     GetPathFromFullPath(szPathTarget,szPathSource);: s9 U, Y6 y+ X; t0 U
  503.     if(strnicmp(szPath,szPathSource,strlen(szPathTarget)))
    1 S5 V$ J7 A4 ^! y+ Y/ j
  504.     {; T' g) o& a2 s! P8 i
  505.       strcpy(szPath,szPathTarget);; m. H: b9 ?7 K/ v3 Z) g9 F2 O, e
  506.       SetCurrentDirectory(szPath);
    " P2 r) H! f) U  s) L
  507.     }
    8 o6 J8 m; _2 i3 ?+ P& N1 \
  508.   }
    . y5 W: K! v" l9 A! Y4 p! P
  509. #ifdef _DEBUG6 H8 Z5 i3 E+ h% w( V! b( k
  510.   if(strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))) n2 }: z. b4 }% U: n( c
  511. #else
    8 L; P# C% Y( V1 N( f1 I
  512.   if(!strnicmp(&szPathSource[strlen(szPath)],"CSUpdate.exe",12))1 O4 A' j: q  [& m
  513. #endif
    * {4 h) s5 e5 G7 B* I
  514.   {; s$ k9 @9 Y0 j( N* y' p
  515.     char tempFileName[MAX_PATH];, ~( U! \/ d2 ^
  516.     strcpy(tempFileName,szPathSource);
    # D" x5 _; M' N5 Q
  517.     tempFileName[strlen(szPathSource)-12]=0;6 W  l# Y# C/ w! B, j5 y: I
  518.     strcat(tempFileName,"\\$CSUpdate.exe");7 |1 V: z- g3 `2 |0 y
  519.     ForceCopyFile(szPathSource,tempFileName,FALSE);
    ; u4 u# b: `# o0 G0 F8 _
  520.     ShellExecute(NULL,"open",tempFileName,NULL,NULL,SW_SHOW);
    ) c( b5 ~# [; E" b
  521.     return TRUE;
    ! v( _2 U- D: ~) C8 }+ i7 X. r! e
  522.   }" O2 u% ]; s1 z
  523.   // Nuke 0118: Delete run.exe0 f' `  T; `" A( J7 q
  524.   if(GetFileAttributes("Run.exe" )!=-1) DeleteFile("Run.exe" );
    . ^( ^( E  O) b0 M
  525.   if(GetFileAttributes("$Run.exe")!=-1) DeleteFile("$Run.exe");+ ^! R' d8 `" R  A# t1 B
  526.   if(!ReadCfgFile("Config.ini"))( [: h8 `  X' C1 w5 z! R! z
  527.   {
    ' _5 C6 B* K& ~4 S1 `1 l" V
  528.     MessageBox(GetActiveWindow(),"Cannot read Config.ini file !","Error",MB_OK|MB_ICONERROR);3 L3 c$ {4 ^) ~- ~; ]9 F
  529.     return TRUE;
    - C+ k* e, s5 @0 m) q7 O+ h
  530.   }
    ( L! x* f* m) `" b/ d
  531.   HANDLE mutex;
    7 W) `* [! n' o' c3 t% a. o
  532.   if(mutex=CreateMutex(NULL,FALSE,"Elysium"))9 q% r. |* J; ?+ D3 T
  533.   {0 y. l5 m7 ^9 f" \4 K0 w/ w! Y
  534.     if(GetLastError()==ERROR_ALREADY_EXISTS)
    , B2 [0 ]+ K+ J  P
  535.     {
      F. v) Y$ H( S0 G0 L0 R
  536.       CloseHandle(mutex);
    8 k4 }* l0 d3 x3 i5 V
  537.       MessageBox(GetActiveWindow(),"Please shut down your Elysium !","WARNING",MB_OK|MB_ICONERROR);. u! C6 s  o0 f  M, g
  538.       return TRUE;
    ( _# C' l' r8 ?& i4 h: Y- ^
  539.     }
    ( @" a* E' Z# q' N$ W& |+ Z# X
  540.   }  ( k' [$ H7 L6 w( S
  541.   CloseHandle(mutex);/ _2 J- Q4 l7 e1 |; g

  542. & k  W/ u; l3 Q7 a
  543.   if(!strnicmp((LPCTSTR)strHostName,"http://",7)) strHostName.Delete(0,7);
    ! ~' e) w/ |, x  _

  544. 9 p% r1 q. q0 n$ F& z  G* a
  545.         AfxEnableControlContainer();( |1 M! D+ n4 \8 {0 K, f! R

  546.   K: k  }! x. i- _6 J5 D% K
  547.   bCanUpdate=FALSE;7 H7 B, Y' ?4 m4 s7 p1 s  W6 O& o
  548.   dwStartUpSteps=1;# k" Z3 z3 Z' `, R
  549.   dwProgramState=AP_NOTHING;( Q+ B% W! z' Q3 f( w% l
  550. ( Y2 u# d3 c$ {
  551.   InstallRevUI(m_hInstance,&g_UIDefine,&g_ResIndex);
      }5 }% f3 }' o# ]1 R
  552. . \& W3 F# q$ m! N
  553.         // Standard initialization
    $ @7 W7 y- [, [+ c1 v0 l4 J1 _
  554.         // If you are not using these features and wish to reduce the size
    & V$ E; Z' m4 s6 }: x- g
  555.         //  of your final executable, you should remove from the following
    # ~2 S9 X. J6 G; P1 R
  556.         //  the specific initialization routines you do not need.& X6 H; c. B# i5 r# e
  557. : l  I( b- y, R/ s$ I
  558. #ifdef _AFXDLL' b( z, Q5 o7 }4 W* \# q# \! N
  559.         Enable3dControls();                        // Call this when using MFC in a shared DLL
    ' ?5 l& N: U0 b8 ?) l6 T; K+ ~. S
  560. #else
    4 w# m- T' p6 P1 h) A  }
  561.         Enable3dControlsStatic();        // Call this when linking to MFC statically
    % }& a& W9 t$ B$ @2 x% w. v4 r
  562. #endif
    , ^  {  a+ N1 j; J
  563. / f/ [6 M  z# K4 X9 f
  564.   dlg=new CRevAppDlg;; g) X1 V! @' y* m. O
  565.   dlg->Create(IDD_REVAPP_DIALOG);
    % ~  S6 c# j4 L, }5 H; ^5 z
  566.   dlg->ShowWindow(SW_SHOWNORMAL);
    2 K. |- e/ f1 b
  567.   m_pMainWnd=dlg;# ?7 e8 W# n6 Q, ~$ n) D: {. ?
  568. 5 R! F+ o( ]' R, L' B$ Z+ V6 H
  569.   SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,0,0);/ \) f7 [& i" x5 Z; T

  570. ) ]' H" m5 q! e" }- m
  571. //  GdiplusStartupInput gdiplusStartupInput;. v& V: m, N, r2 X4 a6 h
  572. //  ULONG_PTR gdiplusToken;) o3 L' y' [# O8 K0 l* A
  573. //  GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);
    0 C* L& [( H* p' o0 W$ c: v+ ^
  574. 7 B& }) p  h# \+ w' i- X& w* t
  575. //        CRevAppDlg dlg;
    ( f- m" Z7 k" [+ z5 k
  576. //        int nResponse = dlg.DoModal();
    3 N3 p  b; M" V( w% H) m5 d
  577. //        if (nResponse == IDOK)# K. }; T9 S3 q* x- a% Q! K5 P' }. a
  578. //        {, S. ?) W) ^+ I) Y
  579. //                // TODO: Place code here to handle when the dialog is' ]" H/ I# E2 Q2 F
  580. //                //  dismissed with OK
    $ ]; Y6 |& }& m- |! Y4 I! m9 R
  581. //        }
      a* \- _9 [; @" r* V
  582. //        else if (nResponse == IDCANCEL), {9 i9 a7 w  T; }+ O; \+ U
  583. //        {2 `3 R$ S! T1 p! T- O  ]
  584. //                // TODO: Place code here to handle when the dialog is
      m5 K) K- h0 _4 [8 ^0 S
  585. //                //  dismissed with Cancel2 O: X3 b- A+ B9 d+ n+ }3 L3 V
  586. //        }
    + C8 P( X% n0 Z' |  i

  587. $ s$ I5 q/ S( B9 l7 x9 j
  588.         // Since the dialog has been closed, return FALSE so that we exit the% z4 J8 Z, X0 y% x% D
  589.         //  application, rather than start the application's message pump.1 X8 G% q7 U* m: {
  590.         return TRUE;
    " }- J: y& ~7 F' N& T8 s
  591. }/ z. p. }; r' q& h  b; Y/ q
  592. $ p  W. q1 b& S. H5 ?
  593. char *CRevAppApp::strtok3(char *pSource,char *token)
    ' P" f8 |. p( r% C# C
  594. {
    " @2 s* }5 V  ?; A
  595.   int i;- f/ V* P7 E3 U' V; X
  596.   char *szRet;
    ) B: t3 O# W# w( U/ n% @, \2 F" b

  597. 6 \( S* H/ }0 J* t  e, t
  598.   if(pSource) { itoken=0; sztoken=pSource; }
    , ?8 Y% h) ?: s
  599.   if(sztoken)
      Y6 \, f+ d2 `$ @# H' g8 H
  600.   {
      h5 t: b, N" {8 O9 B1 \
  601.     szRet=&sztoken[itoken];" Q7 f6 V* D0 I4 O" _) V' `" O" {" U6 ^
  602.     while(sztoken[itoken])
    2 u, {' J8 @+ L% c+ P
  603.     {0 g. V3 M7 O1 [  ^$ l; O% t
  604.       for(i=0;i<(int)strlen(token);i++)
    6 d( U9 i9 b$ W* S2 O7 L
  605.       {0 P% f, x# T8 ]) ^" P3 s; c4 r# e% F
  606.         if(sztoken[itoken]==token[i]&&sztoken[itoken+1]==token[i+1])
    ( s8 ~7 U- o7 }* _: _2 A
  607.         {
    ' A; q- S7 V5 }& H3 P: g
  608.           sztoken[itoken++]=0;8 m) z# A+ k9 x" C
  609.           sztoken[itoken++]=0;- W2 R/ D9 v6 N4 L6 s- M) d
  610.           return szRet;
    8 N$ c1 S2 x" w" S( I/ |
  611.         }1 u' I8 }8 ]7 W/ v, ~
  612.       }6 q+ P* {, o, w- T
  613.       itoken++;
    $ x# t4 u+ A8 J9 O) c
  614.     }
    1 R+ f& k, m& o1 A2 M
  615.   }- B4 q3 E& g% S/ B+ s% V$ h, z7 d  c) ]) X
  616.   return NULL;+ C- l/ U. m* ^$ F: r# |
  617. }" x0 m) i/ n, c3 _9 J) p$ U

  618. 3 n2 Z% f4 h- N
  619. void ProcessProc(long Total,long Current)5 @6 b  l" m0 F+ ?' _6 z
  620. {1 @" P$ Q1 P* }! r$ S
  621.         MSG msg;# h' j1 S4 @, g( {7 T$ o$ b! I9 K
  622.         if(!IsWindow(theApp.dlg->m_hWnd)) exit(1);
    # J, L# Z2 w8 C0 {8 b% ?
  623.   theApp.dlg->m_Process2.SetPos(100*Current/(Total?Total:1));  k$ V5 }3 Z1 F# E: O5 ]! |
  624.         if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    8 k3 f6 ~% x1 J& q
  625.         {+ u" z9 f' h) a$ g% [/ R5 s
  626.                 if(!GetMessage(&msg,NULL,0,0))
    $ y& q6 q9 z2 Z
  627.                 {2 Y+ W0 `. U8 ~3 F% u* d
  628.                         return;
    & G+ F% [) I# q. [3 {
  629.                 }1 `, ~0 b! k4 H: I. F) K
  630.                 TranslateMessage(&msg);! l% z) o' W; u, d
  631.                 DispatchMessage(&msg);& b: _; C1 ^: l2 x
  632.         }        7 n/ k# X, `. v
  633. }
    1 A/ ?# X' o! [/ r0 I6 s
  634. ' O9 u7 c- c" @
  635. BOOL bFirstChar=TRUE;" b* D' T8 o- x) n' |/ g
  636. - j: c; y& v/ {" Y4 F( u
  637. BOOL CRevAppApp::OnIdle(LONG lCount): \7 n* h) y8 ^/ Z
  638. {
    ( y! u% [+ ]& A4 G6 _0 V
  639.         // TODO: Add your specialized code here and/or call the base class
    2 C# w0 _( d8 K
  640.   switch(dwProgramState): [( P9 I" J  H4 K- ^
  641.   {
    3 T4 _0 n* x  A2 A7 [. w
  642.   case AP_NOTHING:
    5 ]" [8 h' ]9 ~1 j( m
  643.     switch(dwStartUpSteps)
    0 [8 N' b  Y" Z) R, }
  644.     {
      `0 _  W. @; R: R% B# @8 y
  645.     case 1:, _* N7 C! d) ?( L, j! v* [7 B7 A0 `
  646.       {9 R4 M7 z& E# b: K
  647.         int i;3 _) H/ F) k. {0 _# V, p8 ]
  648.         CDC *pCDC=dlg->GetDC();( P5 ]7 m% F# q3 h' B6 P  }
  649.         HDC hdcwnd=pCDC->m_hDC;2 s1 N7 L6 @; H$ c/ o1 ]
  650. //        Graphics graphics(hdcwnd);
    ( _6 ]+ z7 Z9 A
  651. //        Bitmap bitmap(L".\\Elysium\\Back1.bmp");1 J! U, N3 c3 s3 \
  652. //        INT iWidth=bitmap.GetWidth();: J. n* K8 L% A1 A
  653. //        INT iHeight=bitmap.GetHeight();: C# U: A# O+ `$ y
  654. //        Color color,colorTemp;: U8 v1 A+ g3 h6 Y, V$ u
  655. //        for(INT iRow=0;iRow<iHeight;iRow++)
    ; p* t- o( R3 {& C$ X. n
  656. //        {) F/ r6 {# E* ~5 F$ d9 N6 ^+ I- ~
  657. //          for(INT iColumn=0;iColumn<iWidth;iColumn++)
    : Z! I2 \" L) T9 n
  658. //          {& h; B- X, u+ l# q$ _) t% ?' E
  659. //            bitmap.GetPixel(iColumn,iRow,&color);
    9 X2 [- ~3 ^# Z9 j% T0 P$ r5 r
  660. //            colorTemp.SetValue(color.MakeARGB(
    : \0 l% U& F" q; w
  661. //              (BYTE)(255*iColumn/iWidth),
    * E' g9 l- _! L9 b8 ?' j
  662. //              color.GetRed(),
    1 h7 N0 G8 u$ H& g4 i4 d
  663. //              color.GetGreen(),8 w6 c! k: d5 ^! I; \* r: Z: J6 q
  664. //              color.GetBlue()));
    $ _/ n7 g9 w- E( z7 F1 L
  665. //            bitmap.SetPixel(iColumn,iRow,colorTemp);
    $ I6 M- M- ^5 z. \" d/ H0 V' j+ G* t
  666. //          }
    ! X9 z# L; n/ Q3 T1 u
  667. //        }
    . v4 a5 m& p+ n& Z/ o
  668. //        graphics.DrawImage(&bitmap,0,0,iWidth,iHeight);( q0 w9 s' f3 {9 e, F8 B7 m
  669.         HDC hdcorg=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");
    1 z0 U1 m9 j" [) h4 I
  670.         HDC hdcsrc=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back1.bmp");% ^) c0 p4 ]) W$ D, h7 |5 T
  671.         HDC hdctar=ReadBMPRGBA(hdcwnd,".\\Elysium\\Back2.bmp");$ m  L8 J  d8 {% M+ H+ K1 f- ~
  672.         for(i=0;i<240;i+=8)
    3 w9 J6 B( N( K" e7 y0 |% c' [0 `
  673.         {
    . p3 _+ B: W% W" k8 V) x6 ]
  674.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);+ u/ K1 w: Z4 k5 k+ \
  675.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);! C2 T6 E8 j" H: e" H8 k. n2 S0 u
  676.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 ~. A5 r0 N& C$ V& Q
  677.           Sleep(33);7 u3 |: Z& i& t
  678.         }
    - D- K4 @: ?: y
  679.         Sleep(1000);$ g, K  n! n( H9 F8 L& W$ ^# c* b
  680.         for(i=240;i>0;i-=8)( C# z4 G; [  w0 c
  681.         {& H+ z% M: O' A$ H: O( H
  682.           BitBlt(hdctar,164,72,408,318,hdcorg,164,72,SRCCOPY);" {) @& `! J" a
  683.           DrawAlphaBlend(hdctar,hdcsrc,164,72,408,318,i);
    1 V' w" s% i1 V- ?
  684.           BitBlt(hdcwnd,164,72,408,318,hdctar,164,72,SRCCOPY);6 _+ P/ H2 U& Y/ {- P
  685.           Sleep(33);1 e: D5 u. D! P7 w- [) a" i
  686.         }
    / o& h3 a, x6 i1 I' ^% D5 Q
  687.         SendMessage(m_pMainWnd->GetSafeHwnd(),WM_USER+1,1,0);7 C4 K! k" Z! b
  688.         dlg->ReleaseDC(pCDC);/ c  r; A4 _0 U0 a( ~
  689.         DeleteDC(hdctar);% |  H+ X9 a3 ]6 o- f- i) G0 t" D
  690.         DeleteDC(hdcsrc);% C+ a# i- D$ L9 {( I
  691.         DeleteDC(hdcorg);
    , @2 {& ]( S7 _& F* R
  692.       }7 Z0 O+ l* ^. `+ x0 f* [! [
  693. //      MessageBox(NULL,"Step 1","Elysium",MB_OK);
    3 a% M6 a- g# h/ q, ]5 D$ p. A
  694.       if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝狝竟腹 :");
    " T! C1 l) r/ [' ^" i6 O/ T
  695.       else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新伺服器代号 :");! ~" Z/ f, F3 s$ W, u- v
  696.       else                                                      dlg->m_ListText.AddString("Updating the Server ID:");. E$ a/ q. J6 x/ Y
  697.       dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    9 x" T, W$ d5 I7 A8 l  J/ H
  698.       if(!Dn.Connected())2 z* f+ Y& @8 g9 q6 A
  699.       {
    " s5 C9 G& @  o2 z, a
  700.         dwTotalFiles=1;
    * Z( K: @, Y- W; T
  701.         dwDownLoaded=0;* Z$ [  t. @: G- C1 n
  702.         bSilentStep=TRUE;- E, ^( p3 R$ c, r0 t; @3 n
  703.         bCompressed=FALSE;0 }3 t1 b7 q; R5 Q1 }0 i, X3 B
  704.         strExtLocal.Empty();8 F) \2 x/ J1 d' b5 _7 M$ `
  705.         strFullName="readme.txt";$ b7 G7 \8 D. p5 n  W7 X+ q3 `3 I$ j
  706.         dwProgramState=AP_CONNECT;3 N& M; v3 U( T# Y1 t# \
  707.       }: Q6 O) _8 ?- U6 n/ e% C2 ^4 b
  708.       m_pMainWnd->GetActiveWindow()->Invalidate();; j) `% d+ K1 Q3 H: b( A% Q- x
  709.       dwStartUpSteps=2;
    1 L6 v! L. Y: q5 `; r3 _8 {
  710.       break;
    " h3 N  W+ t8 u, y/ K. w- M
  711.     case 2:
    ! B. t) Y7 V; t5 |6 A1 ?
  712.       {
    7 ~5 ~6 r5 c7 H$ ]. i& p$ \; K
  713.         int iEOF;  {/ @$ z; T; K: H- G: z9 B
  714.         FILE *fp;
    & ]4 v9 I) d  Y' p9 ?
  715.         char szString[512];
    ( ~) _+ C  N& s; H+ ^! V' k: }2 f
  716.         fp=fopen(".\\DownLoad\\readme.txt","r");; K6 H! W6 T( A3 O
  717.         if(fp)
    ; @) I- G4 M% ?4 S/ o
  718.         {
    9 Z6 c# S# g) c$ v, T1 {
  719.           do
    + F4 B* e5 N% e( j
  720.           {* P6 m  {- `0 i: {
  721.             iEOF=fscanf(fp,"%s",szString);/ A  B* O3 l2 g2 d+ e+ Y
  722.             if(strlen(szString))
    $ \6 a" @% o8 O% a# x
  723.             {" Z! `. }9 i3 k% i+ X! |! I0 U* m
  724.               if(bFirstChar)
    8 `1 F8 e( s  |
  725.               {" g! ^1 K) G8 }( ]& z! c
  726.                 bFirstChar=FALSE;& [- h+ {; j+ g; x
  727.                 bConnectIsBig5=FALSE;1 p* Q0 J. Y' g) p2 U% f: s$ z$ _3 s' `
  728.                 if(*szString=='T') bConnectIsBig5=TRUE;9 }2 r7 l, N( Z4 N  F0 r
  729.               }$ h% v9 z* F: C  p2 D) I. p7 ^' C* F
  730.               if( bDisplayIsBig5 && !bConnectIsBig5) GBKS2BIG5(szString,strlen(szString));& D) F) M' k' U2 ?5 c
  731.               if(!bDisplayIsBig5 &&  bConnectIsBig5) Big52GBKS(szString,strlen(szString));
    3 w, e: w" E" c! B! E4 m% a. B
  732.               dlg->m_ListText.AddString(szString);
    ( H1 t1 c9 }0 V0 l
  733.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);7 T* e7 F0 X4 M
  734.               *szString=0;# Y. ^5 s0 q9 z! s- X3 n
  735.             }5 g# u9 {# J) F+ y) E
  736.           } while(iEOF!=EOF);
    $ P1 ?( n1 x" A
  737.           fclose(fp);
    , D8 _6 x5 B. b
  738.           unlink(".\\DownLoad\\readme.txt");
    3 A& I' T: W0 ~! V: m+ i/ l2 h  F
  739.           dwStartUpSteps=3;( J6 z0 O+ D$ b+ {; Y4 o
  740.         }2 d8 g  _( Z9 \" K2 S
  741.       }8 X) Q; O" i* u5 Z: w, u' E
  742.       break;
    % _' Y6 j% ]) D0 W
  743.     case 3:  g/ d) D: p! }( d6 L8 d4 @4 s4 \
  744.       if(!Dn.Connected())8 b' E1 b4 C) s& R
  745.       {. \% ^. U: g4 I5 q3 i$ P7 d6 W
  746. //        MessageBox(NULL,"Step 2","Elysium",MB_OK);
    2 \# f" k) p* H$ ~* ^
  747.         dwTotalFiles=1;0 H8 f+ p( L. Z" c% H
  748.         dwDownLoaded=0;: @) q6 y  ?; r5 |
  749.         bSilentStep=TRUE;' u/ r3 j2 w" r/ v& W. k
  750.         bCompressed=FALSE;0 m  A/ f! B/ K& _* Y: Q+ e  @
  751.         strExtLocal.Empty();/ Z' R  R0 Q7 W
  752.         strFullName="checkversion.txt";5 S: n7 m: X" U  ~5 u9 }5 i
  753.         dwProgramState=AP_CONNECT;
    - y% R- [- p$ {) i( _8 ^, K7 z( }
  754.       }, r' _! W+ }0 t3 S/ K  g
  755.       dwStartUpSteps=4;: i9 h$ z1 t) O. I$ w' Q9 z5 U. `
  756.       break;: B; k+ T# p; v$ i( K  N) K! r
  757.     case 4:
    + {3 p2 t7 W4 T- T4 @
  758.       {
    ( k. f# S3 J2 P' y/ i8 e! m
  759.         FILE *fp;
    : Z0 }" k( v5 {* Y$ G* \2 j- L
  760.         char szString1[128];( G/ G  e& p) v3 L- V" _
  761.         char szString2[128];2 K8 L5 P+ ]1 q1 S/ ], v, w
  762.         fp=fopen(".\\DownLoad\\checkversion.txt","r");/ A5 w' A1 S) \; O- y
  763.         if(fp)5 E7 C# U. x0 J1 y6 i/ X* b
  764.         {
    . ^: R) }( S% O; q- k
  765.           fscanf(fp,"%s",szString1);
    % Z! e3 m6 C$ a8 r0 t
  766.           fclose(fp);& {7 \# g8 K! l
  767.           fCheckVersion=atof(szString1);& R* M+ f8 d4 X5 h
  768.           fp=fopen(".\\checkversion.dat","r");5 [* ^5 u% b) q) c. z: j
  769.           if(fp)4 S! A* o# s0 E" [( k5 l
  770.           {
    ! x1 J7 V; r9 ]9 i" R5 k
  771.             fscanf(fp,"%s",szString2);/ Z! d8 |' k: a/ [& n# N
  772.             fclose(fp);1 y" R. M# n3 R$ k. I: Z
  773.             if(atof(szString1)!=atof(szString2))
    7 \1 P3 z+ N) q; I. x& B9 `, k1 R
  774.             {) y/ s( Y, U; W" q* }$ y
  775.               if(!Dn.Connected())
    : e( Y# M. D3 h1 h6 l
  776.               {
    1 ?$ a9 g+ b4 B" k
  777.                 bFirstUpdate=TRUE;. v4 @8 r9 N6 W! }8 \' g. t
  778.                 dwTotalFiles=1;
    5 F0 N9 O. E4 Y8 Q# h
  779.                 dwDownLoaded=0;
    ! t( h' Q" ~; p2 e6 A
  780.                 bSilentStep=FALSE;
    ; ]6 {- w( I4 \: k4 U
  781.                 bCompressed=TRUE;" w; ~' {/ h7 _2 u, {- ?8 X+ s
  782.                 strExtLocal=".\\DownLoad\";
    5 U  A/ O- t2 M( Q- p. t
  783.                 strFullName="update.txt";# Z5 Y/ X7 M. S' y3 k
  784.                 dwProgramState=AP_CONNECT;# H) t5 E7 z3 W, u8 |
  785.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");5 c' ^. j: n7 ]! V$ P0 Y
  786.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    ) u9 s& ]% k, z* H* t1 A6 e. B
  787.                 else                                                      dlg->m_ListText.AddString("downloading update list.....");
    6 G7 U* l) K5 j, W4 m5 t
  788. * t+ a/ Q# {- V
  789.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);" [6 S' Z( e3 x/ I! \" I$ q
  790.                 unlink(".\\DownLoad\\checkversion.txt");9 t* c" o+ x8 k) x$ C' d3 s
  791.                 if( GetFileAttributes("Wsa.zip" )!=-1)8 @; i) G" A2 q( v  x9 H5 L7 S
  792.                 {
    % X' F" s0 t. `# j3 b' L
  793.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃, 惠だ牧");
    ' w9 }1 w$ n# e' H7 V* d
  794.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压, 约需耗时十分钟");
    ) C/ s% I4 l$ ^7 Z8 j! Q: y6 j- m
  795.                   else                                                      dlg->m_ListText.AddString("Unzip Files,        Maybe cost 10 minutes");( n) `$ |1 r: \& N
  796.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);- \) O2 a' X0 H) y. A

  797. 4 p9 t% s# O/ Y; l- f; j: T1 \
  798.                   if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    5 M) o" {, d6 U, c$ |: }
  799.                   else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");$ f) i: ?: H' h, W( u
  800.                   else                                                      dlg->m_ListText.AddString("Waiting..........");  a  R; Q  V! P' n# n
  801.                                                                         dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);+ e, F0 }! ~/ w
  802.                 }. A3 z( J/ s+ _; U" U- E
  803.                 dwStartUpSteps=5;# `6 g+ v' b1 u8 O
  804.               }
    ! t; X7 f: i) r7 I' Y/ j' ]; e
  805.             }
    5 z2 B: `# b0 m7 m
  806.             else# C6 _4 M2 A# ]3 V
  807.             {
    ( O( T0 V  c$ Q+ Q6 L( L
  808.               unlink(".\\DownLoad\\checkversion.txt");
    ) P+ r% H* t& X& q- n  J0 _' F
  809.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("⊿Τ惠璶穝戈.....");
    ! h5 |0 E! Z2 F) d8 r
  810.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("没有需要更新的资料.....");5 D  a9 ?- L. {7 P6 r3 G. v4 G
  811.               else                                                      dlg->m_ListText.AddString("no new file update.....");
    ) Z7 A' W. T' p$ w4 e( D

  812. 4 I  ?4 |2 [) s8 A7 H7 q
  813.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    * W7 z2 y- Y' r
  814.               dwStartUpSteps=99;
    0 F& r. z9 n: M- ~+ ]# v4 {. l
  815.               bFinishUpdated=TRUE;
    ! P, z# e% @! U$ Z# }+ \. p+ T3 V0 D
  816.               bCanUpdate=TRUE;
    ! `' c) _7 ]) J$ v* P
  817.             }
    ) e- {8 [, g3 J  s5 b$ h
  818.           }
    2 E8 [6 X* M, k9 f/ F/ p
  819.           else
    3 @, i8 r) T% V/ j1 ]" U
  820.           {7 V* {; N# ~8 S9 }% s8 ^
  821.             if(!Dn.Connected())
    % `( z1 M7 c2 w2 c0 ^; C8 C3 W
  822.             {
    0 e& ^0 a" `% [1 S% y/ \
  823.               bFirstUpdate=TRUE;
    ( ~  \% g' S) E) A9 q
  824.               dwTotalFiles=1;
    * P/ |5 |# e; I& S, m
  825.               dwDownLoaded=0;+ O' e# o7 ]! j! }6 [
  826.               bSilentStep=FALSE;, {# t# v) X+ w3 c5 u0 K7 W
  827.               bCompressed=TRUE;
    $ P* [0 ^2 K$ {3 \* `: k6 _
  828.               strExtLocal=".\\DownLoad\";9 q" H$ ]+ h" f: u! D9 A
  829.               strFullName="update.txt";
    4 Z0 r1 M# r; S, L- P/ U) F
  830.               dwProgramState=AP_CONNECT;
    - s/ A7 D; A; @( z  w6 i
  831.               if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("穝更い, 叫祔.....");4 F* s1 x4 E5 J
  832.               else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("更新列表下载中, 请稍待.....");
    6 q! Q, `3 |6 R" m
  833.               else                                                      dlg->m_ListText.AddString("downloading update list.....");
    5 H* B. Y1 d4 h. X  T  H1 j
  834.               dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    % J5 c8 z8 _; M
  835.               unlink(".\\DownLoad\\checkversion.txt");
    1 `. t2 Z5 b2 a& {( l9 K1 n! V, D
  836.               if(GetFileAttributes("Wsa.zip" )!=-1)
    , o! j/ h% j8 V: _: r' W0 m) s
  837.               {
    3 N6 v) `- |# V) K
  838.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("郎秆溃......");7 X* K. j2 P( ~) C
  839.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("档案解压.....");  p1 y  e9 U2 Q& u0 S
  840.                 else                                                      dlg->m_ListText.AddString("Unzip Files.....");6 }& V. i/ \! [/ `* t: G
  841.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);$ v2 }5 K0 X! G: s4 ^% B* L
  842.                 - z& C) K! ^9 z+ Y, E2 v; X
  843.                 if     ( m_iLanguage == TRADITIONAL_CHINESE )             dlg->m_ListText.AddString("叫瑻み单..........");
    ) w1 B. s& p' F4 G+ E
  844.                 else if( m_iLanguage == SIMPLIFY_CHINESE )                dlg->m_ListText.AddString("请耐心等待..........");
    + e- H2 g) R2 c% E
  845.                 else                                                      dlg->m_ListText.AddString("Waiting..........");
    ( E7 O) A' h+ C7 g% d
  846.                 dlg->m_ListText.SetCurSel(dlg->m_ListText.GetCount()-1);
    3 V0 `: }( V$ P( R
  847.               }
    & u* S: g. `+ P' s" ]+ b1 C/ Z! x0 s
  848.               dwStartUpSteps=5;
    + o% M- Z# e5 E
  849.             }
    ; v1 Q9 u% m6 a, n
  850.           }! @! n- j7 g- }- F7 g1 P2 N/ D
  851.         }9 `8 i, r( ^6 P) e( O
  852.         else7 f* Q, z6 {$ b3 f' `" K
  853.         {
    5 D2 y( f# Y. ?2 V
  854.           dwStartUpSteps=3;8 i# K8 I! G0 n8 j" h% U  ^
  855.         }
    / X  W5 f( R7 `. b% K
  856.       }7 T+ c/ p5 `4 X
  857.       break;& q: S2 B" r* R4 T
  858.     case 5:) ^. C) N: ~& Y: d+ v, X
  859.       {
    8 ^: z4 ~* Q+ P3 o2 z
  860.         if(GetFileAttributes("Wsa.zip" )!=-1)6 G# F( e7 \5 \. i7 Z
  861.         {& z0 `6 W- J4 I' d
  862.           int opt_overwrite=1;& z& I, r8 F8 Z3 s+ V7 L: d# o6 |! }
  863.           int opt_do_extract_withoutpath=0;
    ; b7 q+ W% C) k! x+ }1 E0 {
  864.           unzFile uf=NULL;
    $ {; w3 c% F# O

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

  |6 X# v+ f% S0 `
% ?( d& `$ c/ y) g1 L7 G) W  B

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

GMT+8, 2025-12-1 20:14

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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